summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Android.bp71
-rw-r--r--apex/jobscheduler/OWNERS6
-rw-r--r--apex/jobscheduler/README_js-mainline.md63
-rw-r--r--apex/jobscheduler/framework/Android.bp29
-rw-r--r--apex/jobscheduler/framework/java/android/app/JobSchedulerImpl.java (renamed from core/java/android/app/JobSchedulerImpl.java)7
-rw-r--r--apex/jobscheduler/framework/java/android/app/job/IJobCallback.aidl (renamed from core/java/android/app/job/IJobCallback.aidl)0
-rw-r--r--apex/jobscheduler/framework/java/android/app/job/IJobScheduler.aidl (renamed from core/java/android/app/job/IJobScheduler.aidl)0
-rw-r--r--apex/jobscheduler/framework/java/android/app/job/IJobService.aidl (renamed from core/java/android/app/job/IJobService.aidl)0
-rw-r--r--apex/jobscheduler/framework/java/android/app/job/JobInfo.aidl (renamed from core/java/android/app/job/JobInfo.aidl)0
-rw-r--r--apex/jobscheduler/framework/java/android/app/job/JobInfo.java (renamed from core/java/android/app/job/JobInfo.java)0
-rw-r--r--apex/jobscheduler/framework/java/android/app/job/JobParameters.aidl (renamed from core/java/android/app/job/JobParameters.aidl)0
-rw-r--r--apex/jobscheduler/framework/java/android/app/job/JobParameters.java (renamed from core/java/android/app/job/JobParameters.java)5
-rw-r--r--apex/jobscheduler/framework/java/android/app/job/JobScheduler.java (renamed from core/java/android/app/job/JobScheduler.java)0
-rw-r--r--apex/jobscheduler/framework/java/android/app/job/JobSchedulerFrameworkInitializer.java (renamed from core/java/android/app/job/JobSchedulerFrameworkInitializer.java)0
-rw-r--r--apex/jobscheduler/framework/java/android/app/job/JobService.java (renamed from core/java/android/app/job/JobService.java)0
-rw-r--r--apex/jobscheduler/framework/java/android/app/job/JobServiceEngine.java (renamed from core/java/android/app/job/JobServiceEngine.java)0
-rw-r--r--apex/jobscheduler/framework/java/android/app/job/JobSnapshot.aidl (renamed from core/java/android/app/job/JobSnapshot.aidl)0
-rw-r--r--apex/jobscheduler/framework/java/android/app/job/JobSnapshot.java (renamed from core/java/android/app/job/JobSnapshot.java)0
-rw-r--r--apex/jobscheduler/framework/java/android/app/job/JobWorkItem.aidl (renamed from core/java/android/app/job/JobWorkItem.aidl)0
-rw-r--r--apex/jobscheduler/framework/java/android/app/job/JobWorkItem.java (renamed from core/java/android/app/job/JobWorkItem.java)0
-rw-r--r--apex/jobscheduler/framework/java/com/android/server/job/JobSchedulerInternal.java (renamed from core/java/com/android/server/job/JobSchedulerInternal.java)0
-rw-r--r--api/current.txt1
-rw-r--r--cmds/statsd/src/atoms.proto70
-rw-r--r--config/boot-profile.txt1781
-rw-r--r--core/java/android/accessibilityservice/AccessibilityService.java51
-rw-r--r--core/java/android/accessibilityservice/IAccessibilityServiceClient.aidl2
-rw-r--r--core/java/android/app/ActivityThread.java135
-rw-r--r--core/java/android/app/UiAutomation.java2
-rw-r--r--core/java/android/content/pm/UserInfo.java26
-rw-r--r--core/java/android/os/Debug.java62
-rw-r--r--core/java/android/provider/Settings.java80
-rw-r--r--core/java/android/provider/SettingsValidators.java46
-rw-r--r--core/java/android/widget/AbsListView.java6
-rw-r--r--core/java/com/android/internal/content/PackageHelper.java87
-rw-r--r--core/java/com/android/internal/os/AtomicDirectory.java165
-rw-r--r--core/jni/Android.bp1
-rw-r--r--core/jni/AndroidRuntime.cpp2
-rw-r--r--core/jni/com_android_internal_os_AtomicDirectory.cpp66
-rw-r--r--core/proto/android/server/activitymanagerservice.proto18
-rw-r--r--core/proto/android/stats/otaupdate/updateengine_enums.proto82
-rw-r--r--core/tests/coretests/src/android/provider/SettingsBackupTest.java13
-rw-r--r--core/tests/coretests/src/android/provider/SettingsValidatorsTest.java49
-rw-r--r--location/lib/Android.bp2
-rw-r--r--media/lib/signer/Android.bp2
-rw-r--r--packages/SettingsProvider/Android.bp16
-rw-r--r--packages/SettingsProvider/src/com/android/providers/settings/SettingsBackupAgent.java205
-rw-r--r--packages/SettingsProvider/test/src/com/android/providers/settings/SettingsBackupAgentTest.java272
-rw-r--r--packages/SystemUI/src/com/android/systemui/SystemUIFactory.java5
-rw-r--r--packages/SystemUI/src/com/android/systemui/classifier/FalsingManagerProxy.java4
-rw-r--r--packages/SystemUI/src/com/android/systemui/classifier/brightline/BrightLineFalsingManager.java30
-rw-r--r--packages/SystemUI/src/com/android/systemui/doze/DozeSensors.java13
-rw-r--r--packages/SystemUI/src/com/android/systemui/qs/customize/QSCustomizer.java11
-rw-r--r--packages/SystemUI/src/com/android/systemui/screenrecord/RecordingService.java122
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/phone/EdgeBackGestureHandler.java29
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/phone/NavBarTintController.java210
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarFragment.java11
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarTransitions.java10
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java97
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationPrototypeController.java7
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/phone/RegionSamplingHelper.java25
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimController.java14
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimState.java12
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java4
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/policy/KeyguardMonitor.java2
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/policy/KeyguardMonitorImpl.java2
-rw-r--r--packages/SystemUI/src/com/android/systemui/util/Utils.java14
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/ScrimControllerTest.java8
-rw-r--r--services/accessibility/java/com/android/server/accessibility/AbstractAccessibilityServiceConnection.java15
-rw-r--r--services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java8
-rw-r--r--services/accessibility/java/com/android/server/accessibility/gestures/TouchExplorer.java74
-rw-r--r--services/art-profile-boot1046
-rw-r--r--services/autofill/java/com/android/server/autofill/Session.java22
-rw-r--r--services/autofill/java/com/android/server/autofill/ui/AutoFillUI.java13
-rw-r--r--services/autofill/java/com/android/server/autofill/ui/SaveUi.java37
-rw-r--r--services/core/java/com/android/server/am/ActivityManagerService.java217
-rw-r--r--services/core/java/com/android/server/am/BatteryStatsService.java15
-rw-r--r--services/core/java/com/android/server/connectivity/tethering/EntitlementManager.java6
-rw-r--r--services/core/java/com/android/server/pm/AppsFilter.java47
-rw-r--r--services/core/java/com/android/server/pm/UserManagerService.java55
-rw-r--r--services/core/java/com/android/server/tv/TvRemoteProviderProxy.java22
-rw-r--r--services/core/java/com/android/server/tv/TvRemoteService.java16
-rw-r--r--services/core/java/com/android/server/tv/UinputBridge.java12
-rw-r--r--services/core/java/com/android/server/wm/ActivityStack.java28
-rw-r--r--services/core/jni/com_android_server_tv_TvUinputBridge.cpp18
-rw-r--r--telecomm/java/android/telecom/Logging/Session.java70
-rw-r--r--telephony/java/android/provider/Telephony.java2
-rwxr-xr-xtelephony/java/android/telephony/CarrierConfigManager.java17
-rw-r--r--test-mock/Android.bp2
-rw-r--r--tests/net/java/com/android/server/connectivity/tethering/EntitlementManagerTest.java7
89 files changed, 3867 insertions, 1935 deletions
diff --git a/Android.bp b/Android.bp
index 4ef6c5e82a5d..1023b4818bb7 100644
--- a/Android.bp
+++ b/Android.bp
@@ -26,7 +26,35 @@
// READ ME: ########################################################
java_defaults {
+ name: "framework-aidl-export-defaults",
+
+ aidl: {
+ export_include_dirs: [
+ // From build/make/core/pathmap.mk FRAMEWORK_BASE_SUBDIRS
+ "core/java",
+ "graphics/java",
+ "location/java",
+ "lowpan/java",
+ "media/java",
+ "media/apex/java",
+ "media/mca/effect/java",
+ "media/mca/filterfw/java",
+ "media/mca/filterpacks/java",
+ "drm/java",
+ "opengl/java",
+ "sax/java",
+ "telecomm/java",
+ "telephony/java",
+ "wifi/java",
+ "keystore/java",
+ "rs/java",
+ ],
+ },
+}
+
+java_defaults {
name: "framework-defaults",
+ defaults: ["framework-aidl-export-defaults"],
installable: true,
srcs: [
@@ -78,9 +106,6 @@ java_defaults {
"core/java/android/app/ISearchManagerCallback.aidl",
"core/java/android/app/IServiceConnection.aidl",
"core/java/android/app/IStopUserCallback.aidl",
- "core/java/android/app/job/IJobCallback.aidl",
- "core/java/android/app/job/IJobScheduler.aidl",
- "core/java/android/app/job/IJobService.aidl",
"core/java/android/app/ITransientNotification.aidl",
"core/java/android/app/IUidObserver.aidl",
"core/java/android/app/IUiAutomationConnection.aidl",
@@ -702,27 +727,6 @@ java_defaults {
],
aidl: {
- export_include_dirs: [
- // From build/make/core/pathmap.mk FRAMEWORK_BASE_SUBDIRS
- "core/java",
- "graphics/java",
- "location/java",
- "lowpan/java",
- "media/java",
- "media/apex/java",
- "media/mca/effect/java",
- "media/mca/filterfw/java",
- "media/mca/filterpacks/java",
- "drm/java",
- "opengl/java",
- "sax/java",
- "telecomm/java",
- "telephony/java",
- "wifi/java",
- "keystore/java",
- "rs/java",
- ],
-
include_dirs: [
"system/update_engine/binder_bindings",
"frameworks/native/aidl/binder",
@@ -838,7 +842,7 @@ filegroup {
}
java_library {
- name: "framework",
+ name: "framework-minus-apex",
defaults: ["framework-defaults"],
javac_shard_size: 150,
required: [
@@ -848,6 +852,17 @@ java_library {
}
java_library {
+ name: "framework",
+ defaults: ["framework-aidl-export-defaults"],
+ installable: true,
+ static_libs: [
+ "framework-minus-apex",
+ "jobscheduler-framework",
+ ],
+ sdk_version: "core_platform",
+}
+
+java_library {
name: "framework-annotation-proc",
defaults: ["framework-defaults"],
installable: false,
@@ -1371,8 +1386,9 @@ stubs_defaults {
":updatable-media-srcs-without-aidls",
"test-mock/src/**/*.java",
"test-runner/src/**/*.java",
+ ":jobscheduler-framework-source",
],
- srcs_lib: "framework",
+ srcs_lib: "framework-minus-apex",
srcs_lib_whitelist_dirs: frameworks_base_subdirs,
srcs_lib_whitelist_pkgs: packages_to_document,
libs: framework_docs_only_libs,
@@ -1428,8 +1444,9 @@ stubs_defaults {
":opt-net-voip-srcs",
":core_public_api_files",
":updatable-media-srcs-without-aidls",
+ ":jobscheduler-framework-source",
],
- srcs_lib: "framework",
+ srcs_lib: "framework-minus-apex",
srcs_lib_whitelist_dirs: frameworks_base_subdirs,
srcs_lib_whitelist_pkgs: packages_to_document,
local_sourcepaths: frameworks_base_subdirs,
diff --git a/apex/jobscheduler/OWNERS b/apex/jobscheduler/OWNERS
new file mode 100644
index 000000000000..d004eed2a0db
--- /dev/null
+++ b/apex/jobscheduler/OWNERS
@@ -0,0 +1,6 @@
+yamasani@google.com
+omakoto@google.com
+ctate@android.com
+ctate@google.com
+kwekua@google.com
+suprabh@google.com \ No newline at end of file
diff --git a/apex/jobscheduler/README_js-mainline.md b/apex/jobscheduler/README_js-mainline.md
index b5fea5e0a4df..c1ad666e3e05 100644
--- a/apex/jobscheduler/README_js-mainline.md
+++ b/apex/jobscheduler/README_js-mainline.md
@@ -6,46 +6,33 @@ See also:
- http://go/moving-js-code-for-mainline
- http://go/jobscheduler-code-dependencies-2019-07
-- [ ] Move client code
- - [ ] Move code
- - [ ] Make build file
- - [ ] "m jobscheduler-framework" pass
- - [ ] "m framework" pass
- - [ ] "m service" pass
-- [ ] Move proto
- - No, couldn't do it, because it's referred to by incidentd_proto
-- [ ] Move service
- - [X] Move code (done, but it won't compile yet)
- - [X] Make build file
- - [X] "m service" pass
- - [X] "m jobscheduler-service" pass
- - To make it pass, jobscheduler-service has to link services.jar too. Many dependencies.
- [ ] Move this into `frameworks/apex/jobscheduler/...`. Currently it's in `frameworks/base/apex/...`
because `frameworks/apex/` is not a part of any git projects. (and also working on multiple
projects is a pain.)
+## Current structure
-## Problems
-- Couldn't move dumpsys proto files. They are used by incidentd_proto, which is in the platform
- (not updatable).
- - One idea is *not* to move the proto files into apex but keep them in the platform.
- Then we make sure to extend the proto files in a backward-compat way (which we do anyway)
- and always use the latest file from the JS apex.
-
-- There are a lot of build tasks that use "framework.jar". (Examples: hiddenapi-greylist.txt check,
- update-api / public API check and SDK stub (android.jar) creation)
- To make the downstream build modules buildable, we need to include js-framework.jar in
- framework.jar. However it turned out to be tricky because soong has special logic for "framework"
- and "framework.jar".
- i.e. Conceptually, we can do it by renaming `framework` to `framework-minus-jobscheduler`, build
- `jobscheduler-framework` with `framework-minus-jobscheduler`, and create `framework` by merging
- `framework-minus-jobscheduler` and `jobscheduler-framework`.
- However it didn't quite work because of the special casing.
-
-- JS-service uses a lot of other code in `services`, so it needs to link services.core.jar e.g.
- - Common system service code, e.g. `com.android.server.SystemService`
- - Common utility code, e.g. `FgThread` and `IoThread`
- - Other system services such as `DeviceIdleController` and `ActivityManagerService`
- - Server side singleton. `AppStateTracker`
- - `DeviceIdleController.LocalService`, which is a local service but there's no interface class.
- - `XxxInternal` interfaces that are not in the framework side. -> We should be able to move them.
+- JS service side classes are put in `jobscheduler-service.jar`.
+It's *not* included in services.jar, and instead it's put in the system server classpath,
+which currently looks like the following:
+`SYSTEMSERVERCLASSPATH=/system/framework/services.jar:/system/framework/jobscheduler-service.jar:/system/framework/ethernet-service.jar:/system/framework/wifi-service.jar:/system/framework/com.android.location.provider.jar`
+
+ (Note `jobscheduler-service.jar` will be put at the end in http://ag/9128109)
+
+ `SYSTEMSERVERCLASSPATH` is generated from `PRODUCT_SYSTEM_SERVER_JARS`.
+
+- JS framework side classes are put in `jobscheduler-framework.jar`,
+and the rest of the framework code is put in `framework-minus-apex.jar`,
+as of http://ag/9145619.
+
+ However these jar files are *not* put on the device. We still generate
+ `framework.jar` merging the two jar files, and this jar file is what's
+ put on the device and loaded by Zygote.
+
+
+This is *not* the final design. From a gerrit comment on http://ag/9145619:
+
+> This CL is just the first step, and the current state isn't not really the final form. For now we just want to have two separate jars, which makes it easier for us to analyze dependencies between them, and I wanted to minimize the change to the rest of the system. So, for example, zygote will still only have "framework.jar" in its classpath, instead of the two jars for now.
+> But yes, eventually, we won't even be able to have the monolithic "framework.jar" file because of mainline, so we need to figure out how to build the system without creating it. At that point zygote will have the two separate jar files in its classpath.
+> When we reach that point, we should revisit the naming of it, and yes, maybe the simple "framework.jar" is a good option.
+> But again, for now, I want to make this change as transparent as possible to the rest of the world.
diff --git a/apex/jobscheduler/framework/Android.bp b/apex/jobscheduler/framework/Android.bp
new file mode 100644
index 000000000000..bdb5248afcee
--- /dev/null
+++ b/apex/jobscheduler/framework/Android.bp
@@ -0,0 +1,29 @@
+filegroup {
+ name: "jobscheduler-framework-source",
+ srcs: [
+ "java/**/*.java",
+ "java/android/app/job/IJobCallback.aidl",
+ "java/android/app/job/IJobScheduler.aidl",
+ "java/android/app/job/IJobService.aidl",
+ ],
+ path: "java",
+}
+
+java_library {
+ name: "jobscheduler-framework",
+ installable: true,
+ sdk_version: "core_platform",
+
+ srcs: [
+ ":jobscheduler-framework-source",
+ ],
+
+ aidl: {
+ export_include_dirs: [
+ "java",
+ ],
+ },
+ libs: [
+ "framework-minus-apex",
+ ],
+}
diff --git a/core/java/android/app/JobSchedulerImpl.java b/apex/jobscheduler/framework/java/android/app/JobSchedulerImpl.java
index 924a70809747..f59e7a4ae6ec 100644
--- a/core/java/android/app/JobSchedulerImpl.java
+++ b/apex/jobscheduler/framework/java/android/app/JobSchedulerImpl.java
@@ -14,7 +14,6 @@
* limitations under the License.
*/
-// in android.app so ContextImpl has package access
package android.app;
import android.app.job.IJobScheduler;
@@ -27,10 +26,12 @@ import android.os.RemoteException;
import java.util.List;
-// APEX NOTE: Class path referred to by robolectric, so can't move it.
-
/**
* Concrete implementation of the JobScheduler interface
+ *
+ * Note android.app.job is the better package to put this class, but we can't move it there
+ * because that'd break robolectric. Grr.
+ *
* @hide
*/
public class JobSchedulerImpl extends JobScheduler {
diff --git a/core/java/android/app/job/IJobCallback.aidl b/apex/jobscheduler/framework/java/android/app/job/IJobCallback.aidl
index d281da037fde..d281da037fde 100644
--- a/core/java/android/app/job/IJobCallback.aidl
+++ b/apex/jobscheduler/framework/java/android/app/job/IJobCallback.aidl
diff --git a/core/java/android/app/job/IJobScheduler.aidl b/apex/jobscheduler/framework/java/android/app/job/IJobScheduler.aidl
index 3006f50e54fc..3006f50e54fc 100644
--- a/core/java/android/app/job/IJobScheduler.aidl
+++ b/apex/jobscheduler/framework/java/android/app/job/IJobScheduler.aidl
diff --git a/core/java/android/app/job/IJobService.aidl b/apex/jobscheduler/framework/java/android/app/job/IJobService.aidl
index 22ad252b9639..22ad252b9639 100644
--- a/core/java/android/app/job/IJobService.aidl
+++ b/apex/jobscheduler/framework/java/android/app/job/IJobService.aidl
diff --git a/core/java/android/app/job/JobInfo.aidl b/apex/jobscheduler/framework/java/android/app/job/JobInfo.aidl
index 7b198a8ab14d..7b198a8ab14d 100644
--- a/core/java/android/app/job/JobInfo.aidl
+++ b/apex/jobscheduler/framework/java/android/app/job/JobInfo.aidl
diff --git a/core/java/android/app/job/JobInfo.java b/apex/jobscheduler/framework/java/android/app/job/JobInfo.java
index 8b3b3a28f2bc..8b3b3a28f2bc 100644
--- a/core/java/android/app/job/JobInfo.java
+++ b/apex/jobscheduler/framework/java/android/app/job/JobInfo.java
diff --git a/core/java/android/app/job/JobParameters.aidl b/apex/jobscheduler/framework/java/android/app/job/JobParameters.aidl
index e7551b9ab9f2..e7551b9ab9f2 100644
--- a/core/java/android/app/job/JobParameters.aidl
+++ b/apex/jobscheduler/framework/java/android/app/job/JobParameters.aidl
diff --git a/core/java/android/app/job/JobParameters.java b/apex/jobscheduler/framework/java/android/app/job/JobParameters.java
index ecc859d8320c..150cdbc3cacf 100644
--- a/core/java/android/app/job/JobParameters.java
+++ b/apex/jobscheduler/framework/java/android/app/job/JobParameters.java
@@ -52,6 +52,11 @@ public class JobParameters implements Parcelable {
/**
* All the stop reason codes. This should be regarded as an immutable array at runtime.
+ *
+ * Note the order of these values will affect "dumpsys batterystats", and we do not want to
+ * change the order of existing fields, so adding new fields is okay but do not remove or
+ * change existing fields. When deprecating a field, just replace that with "-1" in this array.
+ *
* @hide
*/
public static final int[] JOB_STOP_REASON_CODES = {
diff --git a/core/java/android/app/job/JobScheduler.java b/apex/jobscheduler/framework/java/android/app/job/JobScheduler.java
index 08b1c2b9f548..08b1c2b9f548 100644
--- a/core/java/android/app/job/JobScheduler.java
+++ b/apex/jobscheduler/framework/java/android/app/job/JobScheduler.java
diff --git a/core/java/android/app/job/JobSchedulerFrameworkInitializer.java b/apex/jobscheduler/framework/java/android/app/job/JobSchedulerFrameworkInitializer.java
index c90b8728bf4a..c90b8728bf4a 100644
--- a/core/java/android/app/job/JobSchedulerFrameworkInitializer.java
+++ b/apex/jobscheduler/framework/java/android/app/job/JobSchedulerFrameworkInitializer.java
diff --git a/core/java/android/app/job/JobService.java b/apex/jobscheduler/framework/java/android/app/job/JobService.java
index 61afadab9b0c..61afadab9b0c 100644
--- a/core/java/android/app/job/JobService.java
+++ b/apex/jobscheduler/framework/java/android/app/job/JobService.java
diff --git a/core/java/android/app/job/JobServiceEngine.java b/apex/jobscheduler/framework/java/android/app/job/JobServiceEngine.java
index ab94da843635..ab94da843635 100644
--- a/core/java/android/app/job/JobServiceEngine.java
+++ b/apex/jobscheduler/framework/java/android/app/job/JobServiceEngine.java
diff --git a/core/java/android/app/job/JobSnapshot.aidl b/apex/jobscheduler/framework/java/android/app/job/JobSnapshot.aidl
index d40f4e39ea2e..d40f4e39ea2e 100644
--- a/core/java/android/app/job/JobSnapshot.aidl
+++ b/apex/jobscheduler/framework/java/android/app/job/JobSnapshot.aidl
diff --git a/core/java/android/app/job/JobSnapshot.java b/apex/jobscheduler/framework/java/android/app/job/JobSnapshot.java
index 2c58908a6064..2c58908a6064 100644
--- a/core/java/android/app/job/JobSnapshot.java
+++ b/apex/jobscheduler/framework/java/android/app/job/JobSnapshot.java
diff --git a/core/java/android/app/job/JobWorkItem.aidl b/apex/jobscheduler/framework/java/android/app/job/JobWorkItem.aidl
index e8fe47d07865..e8fe47d07865 100644
--- a/core/java/android/app/job/JobWorkItem.aidl
+++ b/apex/jobscheduler/framework/java/android/app/job/JobWorkItem.aidl
diff --git a/core/java/android/app/job/JobWorkItem.java b/apex/jobscheduler/framework/java/android/app/job/JobWorkItem.java
index c6631fa76494..c6631fa76494 100644
--- a/core/java/android/app/job/JobWorkItem.java
+++ b/apex/jobscheduler/framework/java/android/app/job/JobWorkItem.java
diff --git a/core/java/com/android/server/job/JobSchedulerInternal.java b/apex/jobscheduler/framework/java/com/android/server/job/JobSchedulerInternal.java
index eefb9fafd286..eefb9fafd286 100644
--- a/core/java/com/android/server/job/JobSchedulerInternal.java
+++ b/apex/jobscheduler/framework/java/com/android/server/job/JobSchedulerInternal.java
diff --git a/api/current.txt b/api/current.txt
index e11fca8c2063..9473a8403dfd 100644
--- a/api/current.txt
+++ b/api/current.txt
@@ -2826,6 +2826,7 @@ package android.accessibilityservice {
method public final boolean dispatchGesture(@NonNull android.accessibilityservice.GestureDescription, @Nullable android.accessibilityservice.AccessibilityService.GestureResultCallback, @Nullable android.os.Handler);
method public android.view.accessibility.AccessibilityNodeInfo findFocus(int);
method @NonNull public final android.accessibilityservice.AccessibilityButtonController getAccessibilityButtonController();
+ method @NonNull public final android.accessibilityservice.AccessibilityButtonController getAccessibilityButtonController(int);
method @RequiresPermission(android.Manifest.permission.USE_FINGERPRINT) @NonNull public final android.accessibilityservice.FingerprintGestureController getFingerprintGestureController();
method @NonNull public final android.accessibilityservice.AccessibilityService.MagnificationController getMagnificationController();
method public android.view.accessibility.AccessibilityNodeInfo getRootInActiveWindow();
diff --git a/cmds/statsd/src/atoms.proto b/cmds/statsd/src/atoms.proto
index 35c4cebdcf6c..663cd55834cf 100644
--- a/cmds/statsd/src/atoms.proto
+++ b/cmds/statsd/src/atoms.proto
@@ -57,6 +57,7 @@ import "frameworks/base/core/proto/android/telephony/enums.proto";
import "frameworks/base/core/proto/android/view/enums.proto";
import "frameworks/base/core/proto/android/wifi/enums.proto";
import "frameworks/base/core/proto/android/stats/textclassifier/textclassifier_enums.proto";
+import "frameworks/base/core/proto/android/stats/otaupdate/updateengine_enums.proto";
/**
* The master atom class. This message defines all of the available
@@ -330,6 +331,8 @@ message Atom {
222 [(log_from_module) = "textclassifier"];
ExclusionRectStateChanged exclusion_rect_state_changed = 223;
BackGesture back_gesture_reported_reported = 224;
+ UpdateEngineUpdateAttemptReported update_engine_update_attempt_reported = 225;
+ UpdateEngineSuccessfulUpdateReported update_engine_successful_update_reported = 226;
}
// Pulled events will start at field 10000.
@@ -6969,3 +6972,70 @@ message LanguageDetectionEvent {
// Position of this action.
optional int32 action_index = 7;
}
+
+/**
+ * Information about an OTA update attempt by update_engine.
+ * Logged from platform/system/update_engine/metrics_reporter_android.cc
+ */
+message UpdateEngineUpdateAttemptReported {
+ // The number of attempts for the update engine to apply a given payload.
+ optional int32 attempt_number = 1;
+
+ optional android.stats.otaupdate.PayloadType payload_type = 2;
+
+ // The total time in minutes for the update engine to apply a given payload.
+ // The time is calculated by calling clock_gettime() / CLOCK_BOOTTIME; and
+ // it's increased when the system is sleeping.
+ optional int32 duration_boottime_in_minutes = 3;
+
+ // The total time in minutes for the update engine to apply a given payload.
+ // The time is calculated by calling clock_gettime() / CLOCK_MONOTONIC_RAW;
+ // and it's not increased when the system is sleeping.
+ optional int32 duration_monotonic_in_minutes = 4;
+
+ // The size of the payload in MiBs.
+ optional int32 payload_size_mib = 5;
+
+ // The attempt result reported by the update engine for an OTA update.
+ optional android.stats.otaupdate.AttemptResult attempt_result = 6;
+
+ // The error code reported by the update engine after an OTA update attempt
+ // on A/B devices.
+ optional android.stats.otaupdate.ErrorCode error_code = 7;
+
+ // The build fingerprint of the source system. The value is read from a
+ // system property when the device takes the update. e.g.
+ // Android/aosp_sailfish/sailfish:10/QP1A.190425.004/5507117:userdebug/test-keys
+ optional string source_fingerprint = 8;
+}
+
+/**
+ * Information about all the attempts the device make before finishing the
+ * successful update.
+ * Logged from platform/system/update_engine/metrics_reporter_android.cc
+ */
+message UpdateEngineSuccessfulUpdateReported {
+ // The number of attempts for the update engine to apply the payload for a
+ // successful update.
+ optional int32 attempt_count = 1;
+
+ optional android.stats.otaupdate.PayloadType payload_type = 2;
+
+ optional int32 payload_size_mib = 3;
+
+ // The total number of bytes downloaded by update_engine since the last
+ // successful update.
+ optional int32 total_bytes_downloaded_mib = 4;
+
+ // The ratio in percentage of the over-downloaded bytes compared to the
+ // total bytes needed to successfully install the update. e.g. 200 if we
+ // download 200MiB in total for a 100MiB package.
+ optional int32 download_overhead_percentage = 5;
+
+ // The total time in minutes for the update engine to apply the payload for a
+ // successful update.
+ optional int32 total_duration_minutes = 6;
+
+ // The number of reboot of the device during a successful update.
+ optional int32 reboot_count = 7;
+}
diff --git a/config/boot-profile.txt b/config/boot-profile.txt
index 57e06c23b7ec..e0e9164b3f90 100644
--- a/config/boot-profile.txt
+++ b/config/boot-profile.txt
@@ -1,642 +1,1221 @@
-Lcom/android/internal/os/RuntimeInit$MethodAndArgsCaller;->run()V
-Lcom/android/internal/os/ZygoteInit;->main([Ljava/lang/String;)V
-Lcom/android/internal/util/ConcurrentUtils$1$1;->run()V
-Lcom/android/server/SystemConfig;->getInstance()Lcom/android/server/SystemConfig;
-Lcom/android/server/SystemConfig;-><init>()V
-Lcom/android/server/SystemConfig;->readPermissions(Ljava/io/File;I)V
-Lcom/android/server/SystemConfig;->readPermissionsFromXml(Ljava/io/File;I)V
-Lcom/android/internal/os/ProcessCpuTracker;->update()V
-Lcom/android/internal/os/ProcessCpuTracker;->init()V
-Lcom/android/internal/os/ProcessCpuTracker;->collectStats(Ljava/lang/String;IZ[ILjava/util/ArrayList;)[I
-Landroid/content/pm/PackageParser$SigningDetails$Builder;->build()Landroid/content/pm/PackageParser$SigningDetails;
-Landroid/content/pm/PackageParser$SigningDetails;-><init>(Landroid/content/pm/PackageParser$SigningDetails;)V
-Landroid/content/pm/PackageParser$SigningDetails;-><init>([Landroid/content/pm/Signature;I)V
-Landroid/content/pm/PackageParser$SigningDetails;-><init>([Landroid/content/pm/Signature;ILandroid/util/ArraySet;[Landroid/content/pm/Signature;)V
-Landroid/content/pm/PackageParser$SigningDetails;-><init>([Landroid/content/pm/Signature;I[Landroid/content/pm/Signature;)V
+Landroid/os/Trace;->isTagEnabled(J)Z
+Lcom/android/internal/os/ZygoteInit;->preloadClasses()V
+Landroid/os/Trace;->traceBegin(JLjava/lang/String;)V
+Landroid/os/Trace;->traceEnd(J)V
+Landroid/graphics/FontListParser;->readFamily(Lorg/xmlpull/v1/XmlPullParser;Ljava/lang/String;)Landroid/text/FontConfig$Family;
+Landroid/graphics/FontListParser;->readFont(Lorg/xmlpull/v1/XmlPullParser;Ljava/lang/String;)Landroid/text/FontConfig$Font;
+Landroid/graphics/FontListParser;->readFamilies(Lorg/xmlpull/v1/XmlPullParser;Ljava/lang/String;)Landroid/text/FontConfig;
+Landroid/text/FontConfig$Font;-><init>(Ljava/lang/String;I[Landroid/graphics/fonts/FontVariationAxis;IZLjava/lang/String;)V
+Landroid/util/ContainerHelpers;->binarySearch([III)I
+Landroid/graphics/fonts/SystemFonts;->pushFamilyToFallback(Landroid/text/FontConfig$Family;Landroid/util/ArrayMap;Ljava/util/Map;Ljava/util/ArrayList;)V
+Landroid/util/ArrayMap;->indexOf(Ljava/lang/Object;I)I
+Lcom/android/internal/util/Preconditions;->checkArgument(ZLjava/lang/Object;)V
+Lcom/android/internal/util/Preconditions;->checkNotNull(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+Landroid/graphics/fonts/Font;->getStyle()Landroid/graphics/fonts/FontStyle;
Landroid/util/ArrayMap;->get(Ljava/lang/Object;)Ljava/lang/Object;
Landroid/util/ArrayMap;->indexOfKey(Ljava/lang/Object;)I
-Landroid/content/pm/Signature;->getPublicKey()Ljava/security/PublicKey;
-Landroid/util/ArrayMap;->indexOf(Ljava/lang/Object;I)I
-Landroid/util/ArrayMap;->indexOfNull()I
-Landroid/util/ArrayMap;->indexOfValue(Ljava/lang/Object;)I
-Lcom/android/internal/os/ProcessCpuTracker;->getName(Lcom/android/internal/os/ProcessCpuTracker$Stats;Ljava/lang/String;)V
-Lcom/android/internal/os/ProcStatsUtil;->readTerminatedProcFile(Ljava/lang/String;B)Ljava/lang/String;
-Lcom/android/internal/os/BatteryStatsImpl;->writeAsyncLocked()V
-Lcom/android/internal/os/BatteryStatsImpl;->writeStatsLocked(Z)V
-Lcom/android/internal/os/BatteryStatsImpl;->writeSummaryToParcel(Landroid/os/Parcel;Z)V
-Landroid/util/SparseArray;->get(I)Ljava/lang/Object;
-Landroid/util/SparseArray;->get(ILjava/lang/Object;)Ljava/lang/Object;
-Lcom/android/internal/os/BatteryStatsImpl;->readLocked()V
-Lcom/android/internal/os/BatteryStatsImpl;->readSummaryFromParcel(Landroid/os/Parcel;)V
+Landroid/util/ArrayMap;->size()I
+Landroid/util/ArrayMap;->keyAt(I)Ljava/lang/Object;
+Landroid/util/ArrayMap;->valueAt(I)Ljava/lang/Object;
Landroid/util/ArrayMap;->binarySearchHashes([III)I
-Landroid/util/ContainerHelpers;->binarySearch([III)I
-Lcom/android/internal/os/BatteryStatsImpl;->updateCpuTimeLocked(ZZ)V
-Lcom/android/internal/os/KernelCpuUidTimeReader;->readDelta(Lcom/android/internal/os/KernelCpuUidTimeReader$Callback;)V
-Landroid/util/ArrayMap;->put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-Landroid/util/ArrayMap;->putAll(Landroid/util/ArrayMap;)V
-Landroid/util/ArrayMap;->putAll(Ljava/util/Map;)V
-Landroid/util/SparseArray;-><init>()V
-Landroid/util/SparseArray;-><init>(I)V
-Lcom/android/internal/os/KernelCpuUidTimeReader$KernelCpuUidFreqTimeReader;->readDeltaImpl(Lcom/android/internal/os/KernelCpuUidTimeReader$Callback;)V
-Lcom/android/server/SystemConfig;->readPrivAppPermissions(Lorg/xmlpull/v1/XmlPullParser;Landroid/util/ArrayMap;Landroid/util/ArrayMap;)V
-Landroid/content/pm/Signature;-><init>(Ljava/lang/String;)V
-Landroid/content/pm/Signature;-><init>([B)V
-Landroid/content/pm/Signature;-><init>([Ljava/security/cert/Certificate;)V
-Lcom/android/internal/os/ProcessCpuTracker$Stats;-><init>(IIZ)V
-Lcom/android/internal/os/KernelCpuProcStringReader;->asLongs(Ljava/nio/CharBuffer;[J)I
-Lcom/android/internal/util/XmlUtils;->nextElement(Lorg/xmlpull/v1/XmlPullParser;)V
-Lcom/android/internal/util/XmlUtils;->nextElementWithin(Lorg/xmlpull/v1/XmlPullParser;I)Z
-Lcom/android/internal/util/ArrayUtils;->newUnpaddedObjectArray(I)[Ljava/lang/Object;
-Landroid/util/SparseArray;->put(ILjava/lang/Object;)V
-Lcom/android/internal/os/BatteryStatsImpl;->updateKernelWakelocksLocked()V
-Landroid/util/ArraySet;->add(Ljava/lang/Object;)Z
-Landroid/util/ArraySet;->addAll(Landroid/util/ArraySet;)V
-Landroid/util/ArraySet;->addAll(Ljava/util/Collection;)Z
-Lcom/android/internal/os/KernelWakelockReader;->readKernelWakelockStats(Lcom/android/internal/os/KernelWakelockStats;)Lcom/android/internal/os/KernelWakelockStats;
+Landroid/text/FontConfig$Family;->getName()Ljava/lang/String;
+Landroid/graphics/fonts/SystemFonts;->createFontFamily(Ljava/lang/String;Ljava/util/List;Ljava/lang/String;ILjava/util/Map;Ljava/util/ArrayList;)Landroid/graphics/fonts/FontFamily;
+Landroid/graphics/fonts/FontFamily$Builder;->build(Ljava/lang/String;IZ)Landroid/graphics/fonts/FontFamily;
+Landroid/graphics/fonts/Font$Builder;->build()Landroid/graphics/fonts/Font;
+Landroid/text/FontConfig$Font;->getFontName()Ljava/lang/String;
+Landroid/graphics/fonts/Font$Builder;-><init>(Ljava/nio/ByteBuffer;Ljava/io/File;Ljava/lang/String;)V
+Landroid/graphics/fonts/Font$Builder;-><init>(Ljava/nio/ByteBuffer;)V
+Landroid/text/FontConfig$Font;->getWeight()I
+Landroid/graphics/fonts/Font$Builder;->setWeight(I)Landroid/graphics/fonts/Font$Builder;
+Lcom/android/internal/util/Preconditions;->checkArgument(Z)V
+Landroid/text/FontConfig$Font;->isItalic()Z
+Landroid/graphics/fonts/Font$Builder;->setSlant(I)Landroid/graphics/fonts/Font$Builder;
+Landroid/text/FontConfig$Font;->getTtcIndex()I
+Landroid/graphics/fonts/Font$Builder;->setTtcIndex(I)Landroid/graphics/fonts/Font$Builder;
+Landroid/text/FontConfig$Font;->getAxes()[Landroid/graphics/fonts/FontVariationAxis;
+Landroid/graphics/fonts/Font$Builder;->setFontVariationSettings([Landroid/graphics/fonts/FontVariationAxis;)Landroid/graphics/fonts/Font$Builder;
+Landroid/graphics/fonts/FontStyle;-><init>(II)V
+Landroid/graphics/fonts/Font;-><init>(JLjava/nio/ByteBuffer;Ljava/io/File;Landroid/graphics/fonts/FontStyle;I[Landroid/graphics/fonts/FontVariationAxis;Ljava/lang/String;Landroid/graphics/fonts/Font$1;)V
+Landroid/graphics/fonts/Font;-><init>(JLjava/nio/ByteBuffer;Ljava/io/File;Landroid/graphics/fonts/FontStyle;I[Landroid/graphics/fonts/FontVariationAxis;Ljava/lang/String;)V
+Landroid/graphics/fonts/FontFamily$Builder;->makeStyleIdentifier(Landroid/graphics/fonts/Font;)I
+Landroid/graphics/fonts/FontStyle;->getWeight()I
+Landroid/graphics/fonts/FontStyle;->getSlant()I
+Landroid/graphics/fonts/Font;->getNativePtr()J
+Landroid/graphics/fonts/SystemFonts;->buildSystemFallback(Ljava/lang/String;Ljava/lang/String;Landroid/graphics/fonts/FontCustomizationParser$Result;Landroid/util/ArrayMap;Ljava/util/ArrayList;)[Landroid/text/FontConfig$Alias;
+Landroid/graphics/fonts/SystemFonts;->$closeResource(Ljava/lang/Throwable;Ljava/lang/AutoCloseable;)V
+Landroid/graphics/fonts/SystemFonts;->mmap(Ljava/lang/String;)Ljava/nio/ByteBuffer;
+Landroid/graphics/Typeface;->createFromFamilies([Landroid/graphics/fonts/FontFamily;)Landroid/graphics/Typeface;
+Landroid/graphics/fonts/FontFamily;->getNativePtr()J
+Landroid/content/pm/ActivityInfo;->activityInfoConfigNativeToJava(I)I
+Landroid/content/res/TypedArray;->getChangingConfigurations()I
+Landroid/content/res/TypedArray;->extractThemeAttrs([I)[I
+Landroid/util/ContainerHelpers;->binarySearch([JIJ)I
+Landroid/util/Pools$SimplePool;->isInPool(Ljava/lang/Object;)Z
+Landroid/content/res/ResourcesImpl;->getAssets()Landroid/content/res/AssetManager;
+Landroid/content/res/XmlBlock$Parser;->next()I
+Landroid/content/res/XmlBlock$Parser;->getDepth()I
+Landroid/content/res/StringBlock;->get(I)Ljava/lang/CharSequence;
+Landroid/content/res/Resources;->getDisplayMetrics()Landroid/util/DisplayMetrics;
+Landroid/content/res/ResourcesImpl;->getDisplayMetrics()Landroid/util/DisplayMetrics;
+Landroid/content/res/TypedArray;->length()I
+Landroid/content/res/AssetManager;->ensureValidLocked()V
+Landroid/content/res/TypedArray;->getFloat(IF)F
+Landroid/content/res/ResourcesImpl;->loadXmlResourceParser(Ljava/lang/String;IILjava/lang/String;)Landroid/content/res/XmlResourceParser;
+Landroid/content/res/XmlBlock$Parser;->getName()Ljava/lang/String;
+Landroid/content/res/Resources;->getAssets()Landroid/content/res/AssetManager;
+Landroid/content/res/TypedArray;->obtain(Landroid/content/res/Resources;I)Landroid/content/res/TypedArray;
+Landroid/util/Pools$SynchronizedPool;->acquire()Ljava/lang/Object;
+Landroid/util/Pools$SimplePool;->acquire()Ljava/lang/Object;
+Landroid/content/res/TypedArray;->resize(I)V
+Landroid/content/res/Resources;->obtainAttributes(Landroid/util/AttributeSet;[I)Landroid/content/res/TypedArray;
+Landroid/content/res/AssetManager;->retrieveAttributes(Landroid/content/res/XmlBlock$Parser;[I[I[I)Z
+Landroid/content/res/TypedArray;->recycle()V
+Landroid/util/Pools$SynchronizedPool;->release(Ljava/lang/Object;)Z
+Landroid/util/Pools$SimplePool;->release(Ljava/lang/Object;)Z
+Landroid/graphics/drawable/Drawable;->obtainAttributes(Landroid/content/res/Resources;Landroid/content/res/Resources$Theme;Landroid/util/AttributeSet;[I)Landroid/content/res/TypedArray;
+Landroid/graphics/drawable/VectorDrawable$VGroup;->setTree(Lcom/android/internal/util/VirtualRefBasePtr;)V
+Landroid/graphics/drawable/VectorDrawable$VGroup;->getNativeSize()I
+Landroid/graphics/Rect;-><init>()V
+Landroid/graphics/drawable/VectorDrawable$VObject;->setTree(Lcom/android/internal/util/VirtualRefBasePtr;)V
Lcom/android/internal/util/GrowingArrayUtils;->insert([IIII)[I
-Lcom/android/internal/util/GrowingArrayUtils;->insert([JIIJ)[J
Lcom/android/internal/util/GrowingArrayUtils;->insert([Ljava/lang/Object;IILjava/lang/Object;)[Ljava/lang/Object;
-Lcom/android/internal/util/GrowingArrayUtils;->insert([ZIIZ)[Z
-HPLcom/android/internal/app/procstats/ProcessStats;-><init>(Landroid/os/Parcel;)V
-Lcom/android/internal/app/procstats/ProcessStats;-><init>(Z)V
-Lcom/android/internal/os/BatteryStatsImpl$Uid;-><init>(Lcom/android/internal/os/BatteryStatsImpl;I)V
-Lcom/android/internal/os/KernelWakelockReader;->parseProcWakelocks([BIZLcom/android/internal/os/KernelWakelockStats;)Lcom/android/internal/os/KernelWakelockStats;
-Landroid/content/pm/PackageParser;->getCachedResult(Ljava/io/File;I)Landroid/content/pm/PackageParser$Package;
-Landroid/content/pm/PackageParser;->parsePackage(Ljava/io/File;I)Landroid/content/pm/PackageParser$Package;
-Landroid/content/pm/PackageParser;->parsePackage(Ljava/io/File;IZ)Landroid/content/pm/PackageParser$Package;
-Landroid/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
-Landroid/content/pm/PackageParser;->parsePackageList(Ljava/lang/String;)Ljava/util/Set;
-Landroid/content/pm/PackageParser;->parsePackageLite(Ljava/io/File;I)Landroid/content/pm/PackageParser$PackageLite;
-Landroid/content/pm/PackageParser;->parsePackageSplitNames(Lorg/xmlpull/v1/XmlPullParser;Landroid/util/AttributeSet;)Landroid/util/Pair;
-Lcom/android/internal/os/BatteryStatsImpl$DualTimer;->writeSummaryFromParcelLocked(Landroid/os/Parcel;J)V
-Landroid/content/pm/Signature;->parseHexDigit(I)I
-Lcom/android/internal/os/BatteryStatsImpl$DurationTimer;->writeSummaryFromParcelLocked(Landroid/os/Parcel;J)V
-Lcom/android/internal/os/BatteryStatsImpl$Uid;->readWakeSummaryFromParcelLocked(Ljava/lang/String;Landroid/os/Parcel;)V
-Landroid/util/ArraySet;->iterator()Ljava/util/Iterator;
-Landroid/content/pm/PackageParser;->fromCacheEntryStatic([B)Landroid/content/pm/PackageParser$Package;
-Landroid/content/pm/PackageParser;->fromCacheEntry([B)Landroid/content/pm/PackageParser$Package;
-Lcom/android/internal/os/BatteryStatsImpl$Timer;->writeSummaryFromParcelLocked(Landroid/os/Parcel;J)V
-Lcom/android/internal/os/KernelCpuUidTimeReader$KernelCpuUidUserSysTimeReader;->readDeltaImpl(Lcom/android/internal/os/KernelCpuUidTimeReader$Callback;)V
-Landroid/os/FileUtils;->bytesToFile(Ljava/lang/String;[B)V
-Landroid/os/StrictMode;->allowThreadDiskReads()Landroid/os/StrictMode$ThreadPolicy;
-Landroid/os/StrictMode;->allowThreadDiskReadsMask()I
-Landroid/content/pm/PackageParser$Package;-><init>(Landroid/os/Parcel;)V
-Landroid/content/pm/PackageParser$Package;-><init>(Ljava/lang/String;)V
-Lcom/android/server/SystemConfig;->addFeature(Ljava/lang/String;I)V
-Landroid/os/StrictMode;->setThreadPolicy(Landroid/os/StrictMode$ThreadPolicy;)V
-Landroid/os/StrictMode;->setThreadPolicyMask(I)V
-Landroid/content/pm/FallbackCategoryProvider;->loadFallbacks()V
-Landroid/os/Parcel$ReadWriteHelper;->writeString(Landroid/os/Parcel;Ljava/lang/String;)V
-Landroid/os/Parcel;->writeString(Ljava/lang/String;)V
-Landroid/os/Parcel;->writeStringArray([Ljava/lang/String;)V
-Landroid/os/Parcel;->writeStringList(Ljava/util/List;)V
-Lcom/android/internal/os/BatteryStatsImpl$Timer;-><init>(Lcom/android/internal/os/BatteryStatsImpl$Clocks;ILcom/android/internal/os/BatteryStatsImpl$TimeBase;)V
-Lcom/android/internal/os/BatteryStatsImpl$Timer;-><init>(Lcom/android/internal/os/BatteryStatsImpl$Clocks;ILcom/android/internal/os/BatteryStatsImpl$TimeBase;Landroid/os/Parcel;)V
-Lcom/android/internal/os/BatteryStatsImpl$TimeBase;->add(Lcom/android/internal/os/BatteryStatsImpl$TimeBaseObs;)V
-Landroid/os/Parcel;->writeInt(I)V
-Landroid/os/Parcel;->writeIntArray([I)V
-Landroid/os/Parcel;->writeInterfaceToken(Ljava/lang/String;)V
-Landroid/content/pm/PackageParser;->parsePublicKey(Ljava/lang/String;)Ljava/security/PublicKey;
-Lcom/android/internal/os/KernelCpuProcStringReader$ProcFileIterator;->nextLine()Ljava/nio/CharBuffer;
-Landroid/util/Xml;->newPullParser()Lorg/xmlpull/v1/XmlPullParser;
-Lcom/android/internal/os/KernelCpuUidTimeReader$KernelCpuUidFreqTimeReader;->readFreqs(Lcom/android/internal/os/PowerProfile;)[J
-Lcom/android/internal/os/KernelCpuUidTimeReader$KernelCpuUidFreqTimeReader;->readFreqs(Ljava/lang/String;)[J
-Lcom/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
-Lcom/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
-Landroid/os/HandlerThread;->run()V
-Landroid/os/Looper;->loop()V
-Landroid/util/SparseArray;->size()I
+Landroid/graphics/drawable/Drawable;->resolveDensity(Landroid/content/res/Resources;I)I
+Landroid/graphics/drawable/VectorDrawable$VObject;-><init>()V
+Landroid/util/ArrayMap;->freeArrays([I[Ljava/lang/Object;I)V
+Landroid/content/res/TypedArray;->extractThemeAttrs()[I
+Landroid/content/res/TypedArray;->getDimensionPixelSize(II)I
+Landroid/graphics/drawable/Drawable$ConstantState;-><init>()V
+Landroid/content/res/TypedArray;->getValueAt(ILandroid/util/TypedValue;)Z
+Landroid/content/res/ColorStateList;->inflate(Landroid/content/res/Resources;Lorg/xmlpull/v1/XmlPullParser;Landroid/util/AttributeSet;Landroid/content/res/Resources$Theme;)V
+Landroid/content/res/XmlBlock$Parser;->getAttributeNameResource(I)I
+Landroid/content/res/XmlBlock;->access$1200(JI)I
+Landroid/util/LongSparseArray;->put(JLjava/lang/Object;)V
+Lcom/android/internal/util/GrowingArrayUtils;->append([Ljava/lang/Object;ILjava/lang/Object;)[Ljava/lang/Object;
+Landroid/content/res/XmlBlock;->decOpenCountLocked()V
+Landroid/content/res/XmlBlock$Parser;->close()V
+Landroid/content/res/XmlBlock;->close()V
Landroid/util/ArrayMap;-><init>()V
-Landroid/util/ArrayMap;-><init>(I)V
Landroid/util/ArrayMap;-><init>(IZ)V
-Landroid/util/ArrayMap;-><init>(Landroid/util/ArrayMap;)V
-Landroid/os/Parcel;->writeLong(J)V
-Landroid/os/Parcel;->writeLongArray([J)V
-Landroid/os/Parcel;->readParcelable(Ljava/lang/ClassLoader;)Landroid/os/Parcelable;
-Landroid/os/Parcel;->readParcelableArray(Ljava/lang/ClassLoader;Ljava/lang/Class;)[Landroid/os/Parcelable;
-Landroid/os/Parcel;->readParcelableCreator(Ljava/lang/ClassLoader;)Landroid/os/Parcelable$Creator;
-Landroid/os/Parcel;->readParcelableList(Ljava/util/List;Ljava/lang/ClassLoader;)Ljava/util/List;
-Lcom/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
-Landroid/os/SystemProperties;->getBoolean(Ljava/lang/String;Z)Z
-Landroid/content/pm/IntentFilterVerificationInfo;-><init>(Lorg/xmlpull/v1/XmlPullParser;)V
-Landroid/util/ArrayMap;->allocArrays(I)V
+Landroid/util/ArrayMap;->put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+Lcom/android/internal/util/XmlUtils;->nextElementWithin(Lorg/xmlpull/v1/XmlPullParser;I)Z
+Landroid/util/ArraySet;->indexOf(Ljava/lang/Object;I)I
+Landroid/util/ArraySet;->add(Ljava/lang/Object;)Z
+Landroid/text/TextUtils;->isEmpty(Ljava/lang/CharSequence;)Z
+Lcom/android/server/SystemConfig;->readPrivAppPermissions(Lorg/xmlpull/v1/XmlPullParser;Landroid/util/ArrayMap;Landroid/util/ArrayMap;)V
+Lcom/android/internal/util/XmlUtils;->nextElement(Lorg/xmlpull/v1/XmlPullParser;)V
+Lcom/android/server/SystemConfig;->readPermissionsFromXml(Ljava/io/File;I)V
+Lcom/android/server/SystemConfig;->addFeature(Ljava/lang/String;I)V
+Lcom/android/internal/util/XmlUtils;->skipCurrentTag(Lorg/xmlpull/v1/XmlPullParser;)V
Landroid/os/Parcel;->readInt()I
-Landroid/os/Parcel;->readIntArray([I)V
-Landroid/content/pm/IntentFilterVerificationInfo;->readFromXml(Lorg/xmlpull/v1/XmlPullParser;)V
-Lcom/android/internal/util/ArrayUtils;->appendInt([II)[I
-Lcom/android/internal/util/ArrayUtils;->appendInt([IIZ)[I
-Landroid/util/TimingsTraceLog;->traceEnd()V
+Landroid/os/Parcel;->readLong()J
+Lcom/android/internal/os/BatteryStatsImpl$TimeBase;->add(Lcom/android/internal/os/BatteryStatsImpl$TimeBaseObs;)V
+Lcom/android/internal/os/BatteryStatsImpl$Timer;-><init>(Lcom/android/internal/os/BatteryStatsImpl$Clocks;ILcom/android/internal/os/BatteryStatsImpl$TimeBase;)V
+Landroid/os/BatteryStats$Timer;-><init>()V
Lcom/android/internal/os/BatteryStatsImpl$Timer;->readSummaryFromParcelLocked(Landroid/os/Parcel;)V
-Lcom/android/internal/os/BatteryStatsImpl$DurationTimer;->readSummaryFromParcelLocked(Landroid/os/Parcel;)V
+Lcom/android/internal/os/BatteryStatsImpl;->readSummaryFromParcel(Landroid/os/Parcel;)V
+Landroid/os/Parcel;->access$000(Landroid/os/Parcel;)J
Landroid/os/Parcel;->readString()Ljava/lang/String;
-Landroid/os/Parcel;->readStringArray()[Ljava/lang/String;
-Landroid/os/Parcel;->readStringList(Ljava/util/List;)V
-Lcom/android/internal/os/BatteryStatsImpl$OverflowArrayMap;->add(Ljava/lang/String;Ljava/lang/Object;)V
-Lcom/android/internal/os/BatteryStatsImpl;->getKernelWakelockTimerLocked(Ljava/lang/String;)Lcom/android/internal/os/BatteryStatsImpl$SamplingTimer;
-Lcom/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
-Lcom/android/internal/os/BatteryStatsImpl$DualTimer;->readSummaryFromParcelLocked(Landroid/os/Parcel;)V
-Landroid/os/storage/StorageManager;->hasAdoptable()Z
Landroid/os/Parcel$ReadWriteHelper;->readString(Landroid/os/Parcel;)Ljava/lang/String;
-Landroid/os/Handler;->dispatchMessage(Landroid/os/Message;)V
-Lcom/android/internal/os/BatteryStatsImpl$5;->run()V
-Lcom/android/internal/os/BatteryStatsImpl;->commitPendingDataToDisk(Landroid/os/Parcel;Lcom/android/internal/os/AtomicFile;)V
+Lcom/android/internal/os/BatteryStatsImpl$SamplingTimer;-><init>(Lcom/android/internal/os/BatteryStatsImpl$Clocks;Lcom/android/internal/os/BatteryStatsImpl$TimeBase;)V
+Lcom/android/internal/os/BatteryStatsImpl$TimeBase;->isRunning()Z
+Lcom/android/internal/os/BatteryStatsImpl;->getKernelWakelockTimerLocked(Ljava/lang/String;)Lcom/android/internal/os/BatteryStatsImpl$SamplingTimer;
+Landroid/util/ArraySet;->freeArrays([I[Ljava/lang/Object;I)V
+Landroid/util/ArraySet;->allocArrays(I)V
+Lcom/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
Lcom/android/internal/os/BatteryStatsImpl$StopwatchTimer;->readSummaryFromParcelLocked(Landroid/os/Parcel;)V
-Landroid/util/ArraySet;->indexOf(Ljava/lang/Object;)I
-Landroid/util/ArraySet;->indexOf(Ljava/lang/Object;I)I
-Landroid/util/ArraySet;->indexOfNull()I
-Landroid/os/Parcel;->readLong()J
-Landroid/os/Parcel;->readLongArray([J)V
-Lcom/android/internal/util/XmlUtils;->skipCurrentTag(Lorg/xmlpull/v1/XmlPullParser;)V
-Lcom/android/internal/os/BatteryStatsImpl$Uid;->getServiceStatsLocked(Ljava/lang/String;Ljava/lang/String;)Lcom/android/internal/os/BatteryStatsImpl$Uid$Pkg$Serv;
-Landroid/os/StrictMode;->setBlockGuardPolicy(I)V
-Landroid/util/TimingsTraceLog;->logDuration(Ljava/lang/String;J)V
-Landroid/util/Base64;->decode(Ljava/lang/String;I)[B
-Landroid/util/Base64;->decode([BI)[B
-Landroid/util/Base64;->decode([BIII)[B
-Landroid/util/ArrayMap;->valueAt(I)Ljava/lang/Object;
-Lcom/android/internal/os/BatteryStatsImpl$Uid;->getWakelockTimerLocked(Lcom/android/internal/os/BatteryStatsImpl$Uid$Wakelock;I)Lcom/android/internal/os/BatteryStatsImpl$StopwatchTimer;
-Landroid/util/ArraySet;-><init>()V
-Landroid/util/ArraySet;-><init>(I)V
-Landroid/util/ArraySet;-><init>(Landroid/util/ArraySet;)V
-Landroid/util/ArraySet;-><init>(Ljava/util/Collection;)V
-Lcom/android/internal/os/KernelCpuProcStringReader;->open(Z)Lcom/android/internal/os/KernelCpuProcStringReader$ProcFileIterator;
-Landroid/content/pm/ApplicationInfo;-><init>()V
-Landroid/content/pm/ApplicationInfo;-><init>(Landroid/content/pm/ApplicationInfo;)V
-Landroid/content/pm/ApplicationInfo;-><init>(Landroid/os/Parcel;)V
-Landroid/util/ArraySet;->remove(Ljava/lang/Object;)Z
-Landroid/util/ArraySet;->removeAll(Ljava/util/Collection;)Z
-Landroid/util/ArraySet;->removeAt(I)Ljava/lang/Object;
-Landroid/util/ArraySet;->removeAll(Landroid/util/ArraySet;)Z
-Landroid/content/pm/ApplicationInfo$1;->createFromParcel(Landroid/os/Parcel;)Landroid/content/pm/ApplicationInfo;
-Landroid/content/pm/ApplicationInfo$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-Landroid/os/ServiceManagerProxy;->addService(Ljava/lang/String;Landroid/os/IBinder;ZI)V
-Lcom/android/internal/os/PowerProfile;-><init>(Landroid/content/Context;)V
-Lcom/android/internal/os/PowerProfile;-><init>(Landroid/content/Context;Z)V
-Lcom/android/internal/os/BatteryStatsImpl$SamplingTimer;-><init>(Lcom/android/internal/os/BatteryStatsImpl$Clocks;Lcom/android/internal/os/BatteryStatsImpl$TimeBase;Landroid/os/Parcel;)V
-Landroid/os/ServiceManager;->addService(Ljava/lang/String;Landroid/os/IBinder;)V
-Landroid/os/ServiceManager;->addService(Ljava/lang/String;Landroid/os/IBinder;ZI)V
-Lcom/android/internal/os/PowerProfile;->readPowerValuesFromXml(Landroid/content/Context;Z)V
-Lcom/android/server/SystemConfig;->readPermission(Lorg/xmlpull/v1/XmlPullParser;Ljava/lang/String;)V
-Landroid/content/res/ResourcesImpl;-><init>(Landroid/content/res/AssetManager;Landroid/util/DisplayMetrics;Landroid/content/res/Configuration;Landroid/view/DisplayAdjustments;)V
-Landroid/os/ServiceManager;->getService(Ljava/lang/String;)Landroid/os/IBinder;
-Landroid/os/ServiceManager;->getServiceOrThrow(Ljava/lang/String;)Landroid/os/IBinder;
-Landroid/util/Base64$Decoder;->process([BIIZ)Z
-Lcom/android/internal/util/XmlUtils;->readLongAttribute(Lorg/xmlpull/v1/XmlPullParser;Ljava/lang/String;)J
-Lcom/android/internal/util/XmlUtils;->readLongAttribute(Lorg/xmlpull/v1/XmlPullParser;Ljava/lang/String;J)J
+Lcom/android/internal/os/BatteryStatsImpl;->detachIfNotNull(Lcom/android/internal/os/BatteryStatsImpl$TimeBaseObs;)V
+Lcom/android/internal/os/BatteryStatsImpl;->detachIfNotNull([Lcom/android/internal/os/BatteryStatsImpl$TimeBaseObs;)V
+Lcom/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
+Lcom/android/internal/os/BatteryStatsImpl$DurationTimer;->readSummaryFromParcelLocked(Landroid/os/Parcel;)V
+Lcom/android/internal/os/BatteryStatsImpl$LongSamplingCounter;-><init>(Lcom/android/internal/os/BatteryStatsImpl$TimeBase;)V
+Landroid/os/BatteryStats$LongCounter;-><init>()V
+Lcom/android/internal/os/BatteryStatsImpl$LongSamplingCounter;->readSummaryFromParcelLocked(Landroid/os/Parcel;)V
+Landroid/util/ArrayMap;->allocArrays(I)V
+Lcom/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
+Lcom/android/internal/os/BatteryStatsImpl$DualTimer;->readSummaryFromParcelLocked(Landroid/os/Parcel;)V
+Landroid/util/SparseArray;->put(ILjava/lang/Object;)V
+Lcom/android/internal/os/BatteryStatsImpl$OverflowArrayMap;-><init>(Lcom/android/internal/os/BatteryStatsImpl;I)V
+Lcom/android/internal/os/BatteryStatsImpl$OverflowArrayMap;->add(Ljava/lang/String;Ljava/lang/Object;)V
Lcom/android/internal/os/BatteryStatsImpl$Uid;->getPackageStatsLocked(Ljava/lang/String;)Lcom/android/internal/os/BatteryStatsImpl$Uid$Pkg;
-Lcom/android/internal/app/procstats/ProcessStats;->resetCommon()V
-HPLcom/android/internal/app/procstats/ProcessStats;->resetSafely()V
-Landroid/content/res/ResourcesImpl;->updateConfiguration(Landroid/content/res/Configuration;Landroid/util/DisplayMetrics;Landroid/content/res/CompatibilityInfo;)V
-Landroid/content/res/Resources;-><init>()V
-Landroid/content/res/Resources;-><init>(Landroid/content/res/AssetManager;Landroid/util/DisplayMetrics;Landroid/content/res/Configuration;)V
-Landroid/content/res/Resources;-><init>(Ljava/lang/ClassLoader;)V
-Landroid/os/ServiceManager;->rawGetService(Ljava/lang/String;)Landroid/os/IBinder;
-Landroid/util/LongSparseArray;->put(JLjava/lang/Object;)V
-Landroid/util/ArrayMap;->freeArrays([I[Ljava/lang/Object;I)V
-Landroid/util/ArrayMap;->keyAt(I)Ljava/lang/Object;
-Landroid/content/pm/PackageParser$Activity$1;->createFromParcel(Landroid/os/Parcel;)Landroid/content/pm/PackageParser$Activity;
-Landroid/content/pm/PackageParser$Activity$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-Landroid/content/pm/PackageParser$Activity;-><init>(Landroid/content/pm/PackageParser$ParseComponentArgs;Landroid/content/pm/ActivityInfo;)V
-Landroid/content/pm/PackageParser$Activity;-><init>(Landroid/os/Parcel;)V
-Landroid/content/res/AssetManager;->setConfiguration(IILjava/lang/String;IIIIIIIIIIIIIII)V
+Lcom/android/internal/util/ArrayUtils;->newUnpaddedObjectArray(I)[Ljava/lang/Object;
+Landroid/util/SparseArray;-><init>(I)V
+Landroid/util/SparseArray;-><init>()V
+Lcom/android/internal/os/BatteryStatsImpl$Uid;->readWakeSummaryFromParcelLocked(Ljava/lang/String;Landroid/os/Parcel;)V
+Lcom/android/internal/os/BatteryStatsImpl$Uid$Wakelock;-><init>(Lcom/android/internal/os/BatteryStatsImpl;Lcom/android/internal/os/BatteryStatsImpl$Uid;)V
+Landroid/os/BatteryStats$Uid$Wakelock;-><init>()V
+Lcom/android/internal/os/BatteryStatsImpl$Uid;->getWakelockTimerLocked(Lcom/android/internal/os/BatteryStatsImpl$Uid$Wakelock;I)Lcom/android/internal/os/BatteryStatsImpl$StopwatchTimer;
Lcom/android/internal/os/BatteryStatsImpl$Counter;-><init>(Lcom/android/internal/os/BatteryStatsImpl$TimeBase;)V
-Lcom/android/internal/os/BatteryStatsImpl$Counter;-><init>(Lcom/android/internal/os/BatteryStatsImpl$TimeBase;Landroid/os/Parcel;)V
-Landroid/util/ArraySet;->allocArrays(I)V
-Landroid/os/storage/StorageManager;->isFileEncryptedNativeOnly()Z
-Lcom/android/internal/os/BatteryStatsImpl$Counter;->writeSummaryFromParcelLocked(Landroid/os/Parcel;)V
-Lcom/android/internal/os/BatteryStatsImpl;->updateRailStatsLocked()V
-Landroid/os/ServiceManagerProxy;->getService(Ljava/lang/String;)Landroid/os/IBinder;
-Landroid/util/SparseIntArray;-><init>()V
-Landroid/util/SparseIntArray;-><init>(I)V
-Lcom/android/internal/util/XmlUtils;->readIntAttribute(Lorg/xmlpull/v1/XmlPullParser;Ljava/lang/String;)I
-Lcom/android/internal/util/XmlUtils;->readIntAttribute(Lorg/xmlpull/v1/XmlPullParser;Ljava/lang/String;I)I
-Lcom/android/internal/os/BatteryStatsImpl$LongSamplingCounter;-><init>(Lcom/android/internal/os/BatteryStatsImpl$TimeBase;)V
-Lcom/android/internal/os/BatteryStatsImpl$LongSamplingCounter;-><init>(Lcom/android/internal/os/BatteryStatsImpl$TimeBase;Landroid/os/Parcel;)V
-Lcom/android/internal/os/BatteryStatsImpl;-><init>(Lcom/android/internal/os/BatteryStatsImpl$Clocks;Landroid/os/Parcel;)V
-Lcom/android/internal/os/BatteryStatsImpl;-><init>(Lcom/android/internal/os/BatteryStatsImpl$Clocks;Ljava/io/File;Landroid/os/Handler;Lcom/android/internal/os/BatteryStatsImpl$PlatformIdleStateCallback;Lcom/android/internal/os/BatteryStatsImpl$RailEnergyDataCallback;Lcom/android/internal/os/BatteryStatsImpl$UserInfoProvider;)V
-Lcom/android/internal/os/BatteryStatsImpl;-><init>(Ljava/io/File;Landroid/os/Handler;Lcom/android/internal/os/BatteryStatsImpl$PlatformIdleStateCallback;Lcom/android/internal/os/BatteryStatsImpl$RailEnergyDataCallback;Lcom/android/internal/os/BatteryStatsImpl$UserInfoProvider;)V
-Lcom/android/internal/os/BatteryStatsImpl$Uid;->readJobSummaryFromParcelLocked(Ljava/lang/String;Landroid/os/Parcel;)V
-Lcom/android/internal/app/procstats/ProcessStats;->updateFragmentation()V
-Landroid/os/Parcel;->readTypedObject(Landroid/os/Parcelable$Creator;)Ljava/lang/Object;
-Lcom/android/internal/os/BatteryStatsImpl$DurationTimer;->getTotalDurationMsLocked(J)J
-Landroid/os/Parcel;->createTypedArray(Landroid/os/Parcelable$Creator;)[Ljava/lang/Object;
-Landroid/os/Parcel;->createTypedArrayList(Landroid/os/Parcelable$Creator;)Ljava/util/ArrayList;
-Landroid/os/Parcel;->createTypedArrayMap(Landroid/os/Parcelable$Creator;)Landroid/util/ArrayMap;
-Landroid/content/pm/PackageParserCacheHelper$ReadHelper;->readString(Landroid/os/Parcel;)Ljava/lang/String;
-Lcom/android/server/LocalServices;->addService(Ljava/lang/Class;Ljava/lang/Object;)V
-Landroid/util/Slog;->d(Ljava/lang/String;Ljava/lang/String;)I
-Landroid/util/TimingsTraceLog;->traceBegin(Ljava/lang/String;)V
-Landroid/content/res/AssetManager;-><init>()V
-Landroid/content/res/AssetManager;->getResourceValue(IILandroid/util/TypedValue;Z)Z
-Landroid/util/LongSparseLongArray;->put(JJ)V
+Landroid/os/BatteryStats$Counter;-><init>()V
+Lcom/android/internal/os/BatteryStatsImpl$Counter;->readSummaryFromParcelLocked(Landroid/os/Parcel;)V
+Lcom/android/internal/os/BatteryStatsImpl$TimeBase;-><init>(Z)V
+Lcom/android/internal/os/BatteryStatsImpl$TimeBase;->init(JJ)V
+Lcom/android/internal/os/BatteryStatsImpl$TimeBase;->getUptime(J)J
+Lcom/android/internal/os/BatteryStatsImpl$TimeBase;->getRealtime(J)J
+Lcom/android/internal/os/BatteryStatsImpl$TimeBase;->readSummaryFromParcel(Landroid/os/Parcel;)V
Lcom/android/internal/os/BatteryStatsImpl$SystemClocks;->uptimeMillis()J
-Landroid/content/res/AssetManager;->setApkAssets([Landroid/content/res/ApkAssets;Z)V
+Lcom/android/internal/os/BatteryStatsImpl$SystemClocks;->elapsedRealtime()J
Lcom/android/internal/os/BatteryStatsImpl$LongSamplingCounterArray;->readSummaryFromParcelLocked(Landroid/os/Parcel;Lcom/android/internal/os/BatteryStatsImpl$TimeBase;)Lcom/android/internal/os/BatteryStatsImpl$LongSamplingCounterArray;
-Lcom/android/internal/util/XmlUtils;->readBooleanAttribute(Lorg/xmlpull/v1/XmlPullParser;Ljava/lang/String;)Z
-Lcom/android/internal/util/XmlUtils;->readBooleanAttribute(Lorg/xmlpull/v1/XmlPullParser;Ljava/lang/String;Z)Z
-Landroid/os/StrictMode$ThreadPolicy;-><init>(ILandroid/os/StrictMode$OnThreadViolationListener;Ljava/util/concurrent/Executor;)V
-Lcom/android/internal/os/KernelCpuSpeedReader;->readDelta()[J
-Lcom/android/internal/os/AtomicFile;->startWrite()Ljava/io/FileOutputStream;
-Landroid/app/ContextImpl;->createSystemUiContext(Landroid/app/ContextImpl;I)Landroid/app/ContextImpl;
-Landroid/app/ActivityThread;->getSystemUiContext()Landroid/app/ContextImpl;
-Landroid/os/Parcel;->recycle()V
-Landroid/util/Slog;->i(Ljava/lang/String;Ljava/lang/String;)I
-Landroid/os/Binder;-><init>()V
-Landroid/os/Binder;-><init>(Ljava/lang/String;)V
-Landroid/content/Context;->getSystemService(Ljava/lang/Class;)Ljava/lang/Object;
+Lcom/android/internal/os/BatteryStatsImpl$Uid;->getServiceStatsLocked(Ljava/lang/String;Ljava/lang/String;)Lcom/android/internal/os/BatteryStatsImpl$Uid$Pkg$Serv;
+Lcom/android/internal/os/BatteryStatsImpl$Uid$Pkg;->newServiceStatsLocked()Lcom/android/internal/os/BatteryStatsImpl$Uid$Pkg$Serv;
+Lcom/android/internal/os/BatteryStatsImpl$Uid$Pkg$Serv;-><init>(Lcom/android/internal/os/BatteryStatsImpl;)V
+Landroid/os/BatteryStats$Uid$Pkg$Serv;-><init>()V
+Lcom/android/internal/app/procstats/ProcessStats;->splitAndParseNumbers(Ljava/lang/String;)[I
+Lcom/android/internal/os/KernelCpuProcStringReader;->isNumber(C)Z
+Lcom/android/internal/os/KernelCpuProcStringReader;->access$000(Lcom/android/internal/os/KernelCpuProcStringReader;)[C
+Lcom/android/internal/os/KernelCpuProcStringReader$ProcFileIterator;->nextLine()Ljava/nio/CharBuffer;
+Lcom/android/internal/os/KernelCpuProcStringReader;->asLongs(Ljava/nio/CharBuffer;[J)I
+Landroid/util/SparseArray;->get(I)Ljava/lang/Object;
+Landroid/util/SparseArray;->get(ILjava/lang/Object;)Ljava/lang/Object;
+Lcom/android/internal/os/KernelCpuUidTimeReader$KernelCpuUidFreqTimeReader;->copyToCurTimes()V
+Lcom/android/internal/os/KernelCpuUidTimeReader$KernelCpuUidFreqTimeReader;->readDeltaImpl(Lcom/android/internal/os/KernelCpuUidTimeReader$Callback;)V
+Lcom/android/internal/os/KernelWakelockReader;->readKernelWakelockStats(Lcom/android/internal/os/KernelWakelockStats;)Lcom/android/internal/os/KernelWakelockStats;
+Lcom/android/internal/util/GrowingArrayUtils;->insert([JIIJ)[J
+Lcom/android/internal/util/XmlUtils;->readIntAttribute(Lorg/xmlpull/v1/XmlPullParser;Ljava/lang/String;I)I
+Lcom/android/internal/util/XmlUtils;->readLongAttribute(Lorg/xmlpull/v1/XmlPullParser;Ljava/lang/String;J)J
+Landroid/os/Parcel;->dataPosition()I
+Landroid/util/LongSparseLongArray;->put(JJ)V
Lcom/android/internal/util/ArrayUtils;->newUnpaddedLongArray(I)[J
-Landroid/content/res/ResourcesImpl;->getValue(ILandroid/util/TypedValue;Z)V
-Landroid/content/res/ResourcesImpl;->getValueForDensity(IILandroid/util/TypedValue;Z)V
+Lcom/android/internal/os/KernelWakelockReader;->parseProcWakelocks([BIZLcom/android/internal/os/KernelWakelockStats;)Lcom/android/internal/os/KernelWakelockStats;
+Landroid/util/SparseArray;->valueAt(I)Ljava/lang/Object;
Landroid/util/LongSparseLongArray;-><init>()V
Landroid/util/LongSparseLongArray;-><init>(I)V
-Landroid/os/BatteryStats$Timer;-><init>()V
-Lcom/android/internal/os/BatteryStatsImpl$Uid;->createAggregatedPartialWakelockTimerLocked()Lcom/android/internal/os/BatteryStatsImpl$DualTimer;
-Lcom/android/internal/os/BatteryStatsImpl$LongSamplingCounterArray;->access$2300(Lcom/android/internal/os/BatteryStatsImpl$LongSamplingCounterArray;Landroid/os/Parcel;)V
-Lcom/android/internal/os/BatteryStatsImpl$Uid;->readJobCompletionsFromParcelLocked(Landroid/os/Parcel;)V
-Landroid/util/MapCollections$KeySet;->iterator()Ljava/util/Iterator;
-Landroid/text/TextUtils;->isEmpty(Ljava/lang/CharSequence;)Z
-Lcom/android/internal/os/BatteryStatsImpl$TimeBase;->writeSummaryToParcel(Landroid/os/Parcel;JJ)V
+Landroid/app/AppOpsManager;->makeKey(II)J
+Landroid/app/AppOpsManager;->opToDefaultMode(I)I
+Lcom/android/internal/util/XmlUtils;->readLongAttribute(Lorg/xmlpull/v1/XmlPullParser;Ljava/lang/String;)J
+Landroid/app/AppOpsManager;->extractFlagsFromKey(J)I
+Landroid/app/AppOpsManager;->extractUidStateFromKey(J)I
+Lcom/android/internal/util/XmlUtils;->readStringAttribute(Lorg/xmlpull/v1/XmlPullParser;Ljava/lang/String;)Ljava/lang/String;
+Lcom/android/internal/os/KernelWakelockStats$Entry;-><init>(IJI)V
+Lcom/android/internal/os/KernelWakelockReader;->removeOldStats(Lcom/android/internal/os/KernelWakelockStats;)Lcom/android/internal/os/KernelWakelockStats;
+Lcom/android/internal/os/BatteryStatsImpl;->updateKernelWakelocksLocked()V
+Lcom/android/internal/os/BatteryStatsImpl$SamplingTimer;->update(JI)V
+Lcom/android/internal/os/BatteryStatsImpl$SamplingTimer;->setUpdateVersion(I)V
+Lcom/android/internal/os/BatteryStatsImpl$SamplingTimer;->getUpdateVersion()I
+Lcom/android/internal/os/BatteryStatsImpl$SamplingTimer;->endSample()V
+Lcom/android/internal/os/BatteryStatsImpl$SamplingTimer;->computeRunTimeLocked(J)J
+Lcom/android/internal/os/BatteryStatsImpl$SamplingTimer;->computeCurrentCountLocked()I
+Landroid/os/Parcel;->writeInt(I)V
+Landroid/os/Parcel;->writeLong(J)V
+Lcom/android/internal/os/BatteryStatsImpl$Timer;->writeSummaryFromParcelLocked(Landroid/os/Parcel;J)V
+Lcom/android/internal/os/BatteryStatsImpl;->writeSummaryToParcel(Landroid/os/Parcel;Z)V
+Landroid/os/Parcel;->writeString(Ljava/lang/String;)V
+Landroid/os/Parcel$ReadWriteHelper;->writeString(Landroid/os/Parcel;Ljava/lang/String;)V
+Landroid/os/StrictMode;->setThreadPolicyMask(I)V
+Landroid/os/StrictMode;->setBlockGuardPolicy(I)V
+Lcom/android/internal/os/ProcStatsUtil;->readTerminatedProcFile(Ljava/lang/String;B)Ljava/lang/String;
+Landroid/os/StrictMode$ThreadPolicy;-><init>(ILandroid/os/StrictMode$OnThreadViolationListener;Ljava/util/concurrent/Executor;Landroid/os/StrictMode$1;)V
+Landroid/os/StrictMode$ThreadPolicy;-><init>(ILandroid/os/StrictMode$OnThreadViolationListener;Ljava/util/concurrent/Executor;)V
+Landroid/os/StrictMode;->setThreadPolicy(Landroid/os/StrictMode$ThreadPolicy;)V
+Landroid/os/StrictMode;->allowThreadDiskReadsMask()I
+Landroid/os/StrictMode;->getThreadPolicyMask()I
+Landroid/os/StrictMode;->allowThreadDiskReads()Landroid/os/StrictMode$ThreadPolicy;
+Lcom/android/internal/os/ProcessCpuTracker;->collectStats(Ljava/lang/String;IZ[ILjava/util/ArrayList;)[I
+Lcom/android/internal/os/ProcessCpuTracker$Stats;-><init>(IIZ)V
+Lcom/android/internal/os/ProcessCpuTracker$Stats;->getUid(Ljava/lang/String;)I
+Lcom/android/internal/os/ProcessCpuTracker;->getName(Lcom/android/internal/os/ProcessCpuTracker$Stats;Ljava/lang/String;)V
+Lcom/android/internal/os/ProcessCpuTracker;->onMeasureProcessName(Ljava/lang/String;)I
Lcom/android/internal/os/BatteryStatsImpl$StopwatchTimer;->computeRunTimeLocked(J)J
-Landroid/bluetooth/BluetoothAdapter;->getDefaultAdapter()Landroid/bluetooth/BluetoothAdapter;
-Landroid/content/pm/PackageParserCacheHelper$ReadHelper;->startAndInstall()V
-Landroid/content/pm/PackageItemInfo;-><init>(Landroid/content/pm/PackageItemInfo;)V
-Landroid/content/pm/PackageItemInfo;-><init>(Landroid/os/Parcel;)V
-Landroid/content/pm/ActivityInfo;-><init>()V
-Landroid/content/pm/ActivityInfo;-><init>(Landroid/content/pm/ActivityInfo;)V
-Landroid/content/pm/ActivityInfo;-><init>(Landroid/os/Parcel;)V
-Landroid/content/pm/ActivityInfo$1;->createFromParcel(Landroid/os/Parcel;)Landroid/content/pm/ActivityInfo;
-Landroid/content/pm/ActivityInfo$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-Landroid/os/BinderProxy;->transact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-Landroid/os/HandlerThread;->getLooper()Landroid/os/Looper;
-Landroid/os/FileUtils;->$closeResource(Ljava/lang/Throwable;Ljava/lang/AutoCloseable;)V
-Landroid/os/SystemProperties;->digestOf([Ljava/lang/String;)Ljava/lang/String;
-Lcom/android/internal/util/ArrayUtils;->isEmpty(Ljava/util/Collection;)Z
-Lcom/android/internal/util/ArrayUtils;->isEmpty([Ljava/lang/Object;)Z
-Landroid/util/AtomicFile;-><init>(Ljava/io/File;)V
-Landroid/util/AtomicFile;-><init>(Ljava/io/File;Ljava/lang/String;)V
-Landroid/util/LongSparseArray;-><init>()V
-Landroid/util/LongSparseArray;-><init>(I)V
-Landroid/content/res/Resources;->obtainTypedArray(I)Landroid/content/res/TypedArray;
-Landroid/util/AtomicFile;->openRead()Ljava/io/FileInputStream;
-Lcom/android/internal/os/BatteryStatsImpl$TimeBase;-><init>(Z)V
-Lcom/android/internal/os/BatteryStatsImpl$Counter;->readSummaryFromParcelLocked(Landroid/os/Parcel;)V
-Lcom/android/internal/os/BatteryStatsImpl$Uid;->makeProcessState(ILandroid/os/Parcel;)V
-Lcom/android/internal/os/BatteryStatsImpl$Uid$3;->instantiateObject()Lcom/android/internal/os/BatteryStatsImpl$DualTimer;
-Lcom/android/internal/os/BatteryStatsImpl$Uid$3;->instantiateObject()Ljava/lang/Object;
-Landroid/content/pm/PackageUserState;-><init>()V
-Landroid/app/ActivityManager;->isLowRamDeviceStatic()Z
-Lcom/android/internal/os/KernelCpuUidTimeReader$KernelCpuUidActiveTimeReader;->readDeltaImpl(Lcom/android/internal/os/KernelCpuUidTimeReader$Callback;)V
-Lcom/android/internal/os/BatteryStatsImpl;->updateRpmStatsLocked()V
-Lcom/android/internal/os/BatteryStatsImpl$LongSamplingCounter;->writeSummaryFromParcelLocked(Landroid/os/Parcel;)V
-Lcom/android/internal/os/KernelMemoryBandwidthStats;->updateStats()V
-Landroid/content/pm/PackageParser;->isCacheUpToDate(Ljava/io/File;Ljava/io/File;)Z
-Landroid/os/StrictMode;->initThreadDefaults(Landroid/content/pm/ApplicationInfo;)V
-Landroid/app/ResourcesManager;->getOrCreateResources(Landroid/os/IBinder;Landroid/content/res/ResourcesKey;Ljava/lang/ClassLoader;)Landroid/content/res/Resources;
-Landroid/app/ResourcesManager;->getOrCreateResourcesForActivityLocked(Landroid/os/IBinder;Ljava/lang/ClassLoader;Landroid/content/res/ResourcesImpl;Landroid/content/res/CompatibilityInfo;)Landroid/content/res/Resources;
-Landroid/app/ResourcesManager;->getOrCreateResourcesLocked(Ljava/lang/ClassLoader;Landroid/content/res/ResourcesImpl;Landroid/content/res/CompatibilityInfo;)Landroid/content/res/Resources;
-Landroid/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;
-Landroid/app/ContextImpl;->createResources(Landroid/os/IBinder;Landroid/app/LoadedApk;Ljava/lang/String;ILandroid/content/res/Configuration;Landroid/content/res/CompatibilityInfo;[Ljava/lang/String;)Landroid/content/res/Resources;
-Landroid/app/ContextImpl;->createResources(Landroid/os/IBinder;Landroid/app/LoadedApk;Ljava/lang/String;ILandroid/content/res/Configuration;Landroid/content/res/CompatibilityInfo;)Landroid/content/res/Resources;
-Landroid/app/ContextImpl;->getSystemService(Ljava/lang/String;)Ljava/lang/Object;
-Landroid/app/ContextImpl;->getSystemServiceName(Ljava/lang/Class;)Ljava/lang/String;
-Landroid/app/SystemServiceRegistry$CachedServiceFetcher;->getService(Landroid/app/ContextImpl;)Ljava/lang/Object;
-Landroid/util/TimingsTraceLog;->assertSameThread()V
-Landroid/os/HandlerThread;-><init>(Ljava/lang/String;)V
-Landroid/os/HandlerThread;-><init>(Ljava/lang/String;I)V
-Lcom/android/internal/util/ArrayUtils;->newUnpaddedIntArray(I)[I
-Landroid/content/res/Configuration;-><init>()V
-Landroid/content/res/Configuration;-><init>(Landroid/content/res/Configuration;)V
-Landroid/view/SurfaceControl;->getInternalDisplayToken()Landroid/os/IBinder;
-Landroid/view/SurfaceControl;->getPhysicalDisplayToken(J)Landroid/os/IBinder;
-Landroid/content/res/Resources;->getInteger(I)I
-Landroid/os/Handler;->sendMessageAtTime(Landroid/os/Message;J)Z
-Lcom/android/internal/os/BatteryStatsImpl$TimeBase;->init(JJ)V
-Lcom/android/internal/os/BatteryStatsImpl$TimeBase;->readSummaryFromParcel(Landroid/os/Parcel;)V
-Lcom/android/internal/os/BatteryStatsImpl$Uid$Pkg;-><init>(Lcom/android/internal/os/BatteryStatsImpl;)V
-Landroid/util/ArraySet;->freeArrays([I[Ljava/lang/Object;I)V
-Landroid/util/ArrayMap;->entrySet()Ljava/util/Set;
-Lcom/android/internal/os/KernelCpuUidTimeReader$KernelCpuUidClusterTimeReader;->readDeltaImpl(Lcom/android/internal/os/KernelCpuUidTimeReader$Callback;)V
-Landroid/telephony/TelephonyManager;->getITelephony()Lcom/android/internal/telephony/ITelephony;
-Landroid/telephony/TelephonyManager;->requestModemActivityInfo(Landroid/os/ResultReceiver;)V
+Lcom/android/internal/os/BatteryStatsImpl$StopwatchTimer;->computeCurrentCountLocked()I
+Lcom/android/internal/os/BatteryStatsImpl$DurationTimer;->writeSummaryFromParcelLocked(Landroid/os/Parcel;J)V
Lcom/android/internal/os/BatteryStatsImpl$DurationTimer;->getMaxDurationMsLocked(J)J
-Lcom/android/internal/os/BatteryStatsImpl$SamplingTimer;->endSample()V
-Lcom/android/internal/os/BatteryStatsImpl;->updateKernelMemoryBandwidthLocked()V
-Landroid/content/pm/ComponentInfo;-><init>()V
-Landroid/content/pm/ComponentInfo;-><init>(Landroid/content/pm/ComponentInfo;)V
-Landroid/content/pm/ComponentInfo;-><init>(Landroid/os/Parcel;)V
-Landroid/view/SurfaceControl;->getDisplayConfigs(Landroid/os/IBinder;)[Landroid/view/SurfaceControl$PhysicalDisplayInfo;
-Lcom/android/internal/os/AtomicFile;->finishWrite(Ljava/io/FileOutputStream;)V
-Landroid/app/ResourcesManager;->createResourcesImpl(Landroid/content/res/ResourcesKey;)Landroid/content/res/ResourcesImpl;
-Landroid/app/ContextImpl;->updateDisplay(I)V
-Landroid/hardware/display/DisplayManagerGlobal;->getInstance()Landroid/hardware/display/DisplayManagerGlobal;
-Landroid/app/ResourcesManager;->getAdjustedDisplay(ILandroid/content/res/Resources;)Landroid/view/Display;
-Landroid/app/ResourcesManager;->getAdjustedDisplay(ILandroid/view/DisplayAdjustments;)Landroid/view/Display;
-Landroid/os/Parcel;->readStrongBinder()Landroid/os/IBinder;
-Landroid/app/ContextImpl;->setTheme(I)V
-Landroid/content/IntentFilter;->readFromXml(Lorg/xmlpull/v1/XmlPullParser;)V
-Landroid/text/TextUtils;->getLayoutDirectionFromLocale(Ljava/util/Locale;)I
-Landroid/os/Handler;-><init>()V
-Landroid/os/Handler;-><init>(Landroid/os/Handler$Callback;)V
-Landroid/os/Handler;-><init>(Landroid/os/Handler$Callback;Z)V
-Landroid/os/Handler;-><init>(Landroid/os/Looper;)V
-Landroid/os/Handler;-><init>(Landroid/os/Looper;Landroid/os/Handler$Callback;)V
-Landroid/os/Handler;-><init>(Landroid/os/Looper;Landroid/os/Handler$Callback;Z)V
-Landroid/os/Handler;-><init>(Z)V
-Landroid/os/Binder;->queryLocalInterface(Ljava/lang/String;)Landroid/os/IInterface;
-Landroid/content/pm/PackageParser;->isApkFile(Ljava/io/File;)Z
-Landroid/util/SparseIntArray;->put(II)V
-Landroid/content/pm/ApplicationInfo;->initForUser(I)V
-Landroid/os/BinderProxy;->getInstance(JJ)Landroid/os/BinderProxy;
+Lcom/android/internal/os/BatteryStatsImpl$DurationTimer;->getTotalDurationMsLocked(J)J
+Lcom/android/internal/os/BatteryStatsImpl$DurationTimer;->getCurrentDurationMsLocked(J)J
+Lcom/android/internal/os/BatteryStatsImpl$LongSamplingCounter;->writeSummaryFromParcelLocked(Landroid/os/Parcel;)V
+Lcom/android/internal/os/BatteryStatsImpl$DualTimer;->writeSummaryFromParcelLocked(Landroid/os/Parcel;J)V
+Lcom/android/internal/os/BatteryStatsImpl$OverflowArrayMap;->getMap()Landroid/util/ArrayMap;
+Lcom/android/internal/os/BatteryStatsImpl$Uid;->access$2400(Lcom/android/internal/os/BatteryStatsImpl$Uid;)Lcom/android/internal/os/BatteryStatsImpl$LongSamplingCounter;
+Lcom/android/internal/os/BatteryStatsImpl$Uid;->access$2500(Lcom/android/internal/os/BatteryStatsImpl$Uid;)Lcom/android/internal/os/BatteryStatsImpl$LongSamplingCounter;
+Lcom/android/internal/os/BatteryStatsImpl$Counter;->writeSummaryFromParcelLocked(Landroid/os/Parcel;)V
+Lcom/android/internal/os/BatteryStatsImpl$TimeBase;->writeSummaryToParcel(Landroid/os/Parcel;JJ)V
+Lcom/android/internal/os/BatteryStatsImpl$TimeBase;->computeUptime(JI)J
+Lcom/android/internal/os/BatteryStatsImpl$TimeBase;->computeRealtime(JI)J
+Lcom/android/internal/os/BatteryStatsImpl$LongSamplingCounterArray;->writeSummaryToParcelLocked(Landroid/os/Parcel;Lcom/android/internal/os/BatteryStatsImpl$LongSamplingCounterArray;)V
+Lcom/android/internal/os/BatteryStatsImpl$Uid$Pkg$Serv;->getStartTimeToNowLocked(J)J
+Landroid/util/MapCollections$ArrayIterator;->hasNext()Z
+Landroid/util/SparseArray;->size()I
+Landroid/content/pm/Signature;->parseHexDigit(I)I
+Landroid/content/pm/Signature;-><init>(Ljava/lang/String;)V
+Landroid/content/pm/FallbackCategoryProvider;->loadFallbacks()V
+Landroid/content/pm/PermissionInfo;->fixProtectionLevel(I)I
+Lcom/android/internal/util/ArrayUtils;->isEmpty([I)Z
+Lcom/android/internal/util/ArrayUtils;->appendInt([IIZ)[I
+Landroid/util/ArraySet;-><init>(IZ)V
+Landroid/content/pm/IntentFilterVerificationInfo;->readFromXml(Lorg/xmlpull/v1/XmlPullParser;)V
Landroid/content/pm/IntentFilterVerificationInfo;->getStringFromXml(Lorg/xmlpull/v1/XmlPullParser;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
-Landroid/app/SystemServiceRegistry$35;->createService(Landroid/app/ContextImpl;)Landroid/os/PowerManager;
-Landroid/app/SystemServiceRegistry$35;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
-Landroid/util/ArrayMap;->containsKey(Ljava/lang/Object;)Z
-Landroid/app/WindowConfiguration;->setToDefaults()V
-Lcom/android/internal/util/MemInfoReader;->readMemInfo()V
+Landroid/content/pm/PackageParser;->toSigningKeys([Landroid/content/pm/Signature;)Landroid/util/ArraySet;
+Landroid/util/ArraySet;-><init>(I)V
+Landroid/util/Base64$Decoder;->process([BIIZ)Z
Landroid/util/LongSparseArray;->get(J)Ljava/lang/Object;
Landroid/util/LongSparseArray;->get(JLjava/lang/Object;)Ljava/lang/Object;
-Landroid/util/Spline;->createSpline([F[F)Landroid/util/Spline;
-Landroid/os/PowerManager;->getDefaultScreenBrightnessSetting()I
-Landroid/view/Display;-><init>(Landroid/hardware/display/DisplayManagerGlobal;ILandroid/view/DisplayInfo;Landroid/content/res/Resources;)V
-Landroid/view/Display;-><init>(Landroid/hardware/display/DisplayManagerGlobal;ILandroid/view/DisplayInfo;Landroid/view/DisplayAdjustments;)V
-Landroid/view/Display;-><init>(Landroid/hardware/display/DisplayManagerGlobal;ILandroid/view/DisplayInfo;Landroid/view/DisplayAdjustments;Landroid/content/res/Resources;)V
-Landroid/net/Uri;->withAppendedPath(Landroid/net/Uri;Ljava/lang/String;)Landroid/net/Uri;
-Landroid/content/res/TypedArray;->obtain(Landroid/content/res/Resources;I)Landroid/content/res/TypedArray;
-Landroid/provider/Settings$System;->getUriFor(Ljava/lang/String;)Landroid/net/Uri;
+Landroid/util/ArraySet;-><init>()V
+Lcom/android/internal/util/XmlUtils;->readBooleanAttribute(Lorg/xmlpull/v1/XmlPullParser;Ljava/lang/String;Z)Z
+Landroid/util/ArrayMap$1;->colGetEntry(II)Ljava/lang/Object;
Landroid/util/MapCollections$ArrayIterator;->next()Ljava/lang/Object;
-Landroid/view/DisplayAdjustments;-><init>()V
-Landroid/view/DisplayAdjustments;-><init>(Landroid/content/res/Configuration;)V
-Landroid/view/DisplayAdjustments;-><init>(Landroid/view/DisplayAdjustments;)V
-Landroid/hardware/display/DisplayManager;->getOrCreateDisplayLocked(IZ)Landroid/view/Display;
-Landroid/content/res/Resources;->getIntArray(I)[I
-Landroid/content/res/StringBlock;->get(I)Ljava/lang/CharSequence;
-Landroid/content/res/XmlBlock$Parser;->getText()Ljava/lang/String;
-Lcom/android/internal/os/BatteryStatsImpl$LongSamplingCounter;->readSummaryFromParcelLocked(Landroid/os/Parcel;)V
-Lcom/android/internal/os/BatteryStatsImpl$Uid$Wakelock;-><init>(Lcom/android/internal/os/BatteryStatsImpl;Lcom/android/internal/os/BatteryStatsImpl$Uid;)V
-Lcom/android/internal/os/BatteryStatsImpl$Uid;->readSyncSummaryFromParcelLocked(Ljava/lang/String;Landroid/os/Parcel;)V
-Landroid/hardware/display/DisplayManagerGlobal;->getDisplayInfo(I)Landroid/view/DisplayInfo;
-Landroid/os/FileUtils;->readTextFile(Ljava/io/File;ILjava/lang/String;)Ljava/lang/String;
-Lcom/android/internal/app/procstats/ProcessStats;->buildTimePeriodStartClockStr()V
-Landroid/text/format/DateFormat;->format(Ljava/lang/CharSequence;J)Ljava/lang/CharSequence;
-Landroid/text/format/DateFormat;->format(Ljava/lang/CharSequence;Ljava/util/Calendar;)Ljava/lang/CharSequence;
-Landroid/text/format/DateFormat;->format(Ljava/lang/CharSequence;Ljava/util/Date;)Ljava/lang/CharSequence;
-Landroid/telephony/TelephonyManager;->from(Landroid/content/Context;)Landroid/telephony/TelephonyManager;
-Lcom/android/internal/os/BatteryStatsImpl$TimeBase;->getRealtime(J)J
-Lcom/android/internal/os/BatteryStatsImpl$LongSamplingCounterArray;->writeSummaryToParcelLocked(Landroid/os/Parcel;Lcom/android/internal/os/BatteryStatsImpl$LongSamplingCounterArray;)V
-Lcom/android/internal/os/BatteryStatsImpl$LongSamplingCounterArray;->access$2600(Lcom/android/internal/os/BatteryStatsImpl$LongSamplingCounterArray;Landroid/os/Parcel;)V
-Landroid/os/Parcel;->unmarshall([BII)V
+Landroid/content/pm/PackageParserCacheHelper$ReadHelper;->readString(Landroid/os/Parcel;)Ljava/lang/String;
+Landroid/util/ArraySet;->indexOf(Ljava/lang/Object;)I
+Landroid/util/MapCollections$MapIterator;->hasNext()Z
+Landroid/os/Parcel;->readStringList(Ljava/util/List;)V
+Landroid/content/pm/Signature;->equals(Ljava/lang/Object;)Z
+Lcom/android/internal/util/ArrayUtils;->indexOf([Ljava/lang/Object;Ljava/lang/Object;)I
+Landroid/os/Parcel;->readParcelableList(Ljava/util/List;Ljava/lang/ClassLoader;)Ljava/util/List;
+Landroid/os/Parcel;->readStringArray()[Ljava/lang/String;
+Landroid/content/pm/PackageParser$SigningDetails;->hasCertificateInternal(Landroid/content/pm/Signature;I)Z
+Landroid/content/pm/PackageParser$SigningDetails;->hasPastSigningCertificates()Z
+Landroid/util/MapCollections$MapIterator;->getValue()Ljava/lang/Object;
Landroid/content/pm/PackageParser$Package;->fixupOwner(Ljava/util/List;)V
-Landroid/content/res/Resources;->getBoolean(I)Z
-Landroid/content/res/AssetManager;->getResourceText(I)Ljava/lang/CharSequence;
-Landroid/content/res/AssetManager;->getResourceTextArray(I)[Ljava/lang/CharSequence;
-Landroid/content/res/Resources;->getText(I)Ljava/lang/CharSequence;
-HPLandroid/content/res/Resources;->getText(ILjava/lang/CharSequence;)Ljava/lang/CharSequence;
-Landroid/content/res/Resources;->getTextArray(I)[Ljava/lang/CharSequence;
-Landroid/os/MessageQueue;->next()Landroid/os/Message;
-Landroid/os/Parcel;->marshall()[B
-Lcom/android/internal/logging/EventLogTags;->writeCommitSysConfigFile(Ljava/lang/String;J)V
-Landroid/os/ThreadLocalWorkSource;->restore(J)V
-Landroid/os/Looper;->prepare()V
-Landroid/os/Looper;->prepareMainLooper()V
-Lcom/android/internal/app/procstats/ProcessStats;->splitAndParseNumbers(Ljava/lang/String;)[I
-Landroid/os/Trace;->traceEnd(J)V
-Landroid/os/Parcel;->readExceptionCode()I
-Landroid/os/Parcel;->readException()V
-Landroid/os/Parcel;->readException(ILjava/lang/String;)V
-Lcom/android/internal/util/StatLogger;->logDurationStat(IJ)J
-Landroid/content/res/ResourcesImpl$ThemeImpl;->applyStyle(IZ)V
-Landroid/content/res/Resources$Theme;->applyStyle(IZ)V
-Landroid/content/res/AssetManager;->applyStyleToTheme(JIZ)V
-Landroid/os/Trace;->isTagEnabled(J)Z
-Lcom/android/internal/util/ArrayUtils;->containsAll([Ljava/lang/Object;[Ljava/lang/Object;)Z
-Landroid/os/Trace;->traceBegin(JLjava/lang/String;)V
-Landroid/hardware/display/DisplayManager;-><init>(Landroid/content/Context;)V
-Landroid/os/Bundle;-><init>()V
-Landroid/os/Bundle;-><init>(I)V
-Landroid/os/Bundle;-><init>(Landroid/os/Bundle;)V
-Landroid/os/Bundle;-><init>(Landroid/os/PersistableBundle;)V
-Landroid/content/pm/PackageBackwardCompatibility;->updatePackage(Landroid/content/pm/PackageParser$Package;)V
-Landroid/content/pm/PackageBackwardCompatibility;->modifySharedLibraries(Landroid/content/pm/PackageParser$Package;)V
+Landroid/util/MapCollections$MapIterator;->next()Ljava/lang/Object;
+Landroid/util/MapCollections$MapIterator;->next()Ljava/util/Map$Entry;
+Landroid/util/MapCollections$MapIterator;->getKey()Ljava/lang/Object;
Landroid/content/pm/Signature;->areExactMatch([Landroid/content/pm/Signature;[Landroid/content/pm/Signature;)Z
-Lcom/android/internal/util/ArrayUtils;->contains(Ljava/util/Collection;Ljava/lang/Object;)Z
-Lcom/android/internal/util/ArrayUtils;->contains([II)Z
+Lcom/android/internal/util/ArrayUtils;->containsAll([Ljava/lang/Object;[Ljava/lang/Object;)Z
Lcom/android/internal/util/ArrayUtils;->contains([Ljava/lang/Object;Ljava/lang/Object;)Z
-Lcom/android/internal/util/ConcurrentUtils$1;->newThread(Ljava/lang/Runnable;)Ljava/lang/Thread;
-Landroid/os/PowerManager;-><init>(Landroid/content/Context;Landroid/os/IPowerManager;Landroid/os/Handler;)V
-Landroid/content/res/AssetManager;->getResourceArray(I[I)I
-Landroid/content/res/AssetManager;->getResourceArraySize(I)I
-Landroid/app/WindowConfiguration;-><init>()V
-Landroid/view/SurfaceControl;->getPhysicalDisplayIds()[J
-Lcom/android/internal/os/BackgroundThread;->getHandler()Landroid/os/Handler;
-Landroid/net/Uri$StringUri;->buildUpon()Landroid/net/Uri$Builder;
-Lcom/android/internal/os/AtomicFile;->readFully()[B
-Lcom/android/internal/util/ArrayUtils;->indexOf([Ljava/lang/Object;Ljava/lang/Object;)I
-Landroid/content/res/ResourcesImpl;->loadXmlResourceParser(Ljava/lang/String;IILjava/lang/String;)Landroid/content/res/XmlResourceParser;
-Landroid/content/res/Resources;->loadXmlResourceParser(ILjava/lang/String;)Landroid/content/res/XmlResourceParser;
-Landroid/content/res/Resources;->getXml(I)Landroid/content/res/XmlResourceParser;
-Landroid/content/res/XmlBlock$Parser;->next()I
-Landroid/content/res/XmlBlock$Parser;->nextTag()I
-Landroid/content/res/XmlBlock$Parser;->nextText()Ljava/lang/String;
-Lcom/google/android/collect/Sets;->newArraySet()Landroid/util/ArraySet;
-Lcom/google/android/collect/Sets;->newArraySet([Ljava/lang/Object;)Landroid/util/ArraySet;
-Landroid/util/ArraySet;->contains(Ljava/lang/Object;)Z
-Lcom/android/internal/os/BatteryStatsImpl$Uid;->getSensorTimerLocked(IZ)Lcom/android/internal/os/BatteryStatsImpl$DualTimer;
Landroid/content/pm/PackageParser$SigningDetails;->hasCertificate(Landroid/content/pm/Signature;)Z
-Landroid/content/pm/PackageParser$SigningDetails;->hasCertificateInternal(Landroid/content/pm/Signature;I)Z
-Landroid/content/res/XmlBlock$Parser;->getAttributeValue(I)Ljava/lang/String;
-Landroid/content/res/XmlBlock$Parser;->getAttributeValue(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
-Lcom/android/internal/os/BatteryStatsImpl;->detachIfNotNull(Lcom/android/internal/os/BatteryStatsImpl$TimeBaseObs;)V
-Lcom/android/internal/os/BatteryStatsImpl;->detachIfNotNull([Lcom/android/internal/os/BatteryStatsImpl$TimeBaseObs;)V
-Lcom/android/internal/os/BatteryStatsImpl;->detachIfNotNull([[Lcom/android/internal/os/BatteryStatsImpl$TimeBaseObs;)V
-Landroid/util/Spline$MonotoneCubicSpline;-><init>([F[F)V
-Landroid/content/res/Configuration;->setTo(Landroid/content/res/Configuration;)V
-Landroid/content/res/Configuration;->setToDefaults()V
-Lcom/android/server/SystemConfig;->readSplitPermission(Lorg/xmlpull/v1/XmlPullParser;Ljava/io/File;)V
-Lcom/android/internal/os/RpmStats;->getSubsystem(Ljava/lang/String;)Lcom/android/internal/os/RpmStats$PowerStateSubsystem;
-Lcom/android/internal/os/BatteryStatsImpl$TimeBase;->computeRealtime(JI)J
-Landroid/os/Parcel;->dataPosition()I
-Lcom/android/internal/os/BatteryStatsImpl$DurationTimer;->getCurrentDurationMsLocked(J)J
-Lcom/android/internal/os/KernelCpuUidTimeReader$KernelCpuUidFreqTimeReader;->checkPrecondition(Lcom/android/internal/os/KernelCpuProcStringReader$ProcFileIterator;)Z
-Lcom/android/internal/os/BatteryStatsImpl$SamplingTimer;->computeRunTimeLocked(J)J
-Lcom/android/internal/os/BatteryStatsImpl$SamplingTimer;->computeCurrentCountLocked()I
-Lcom/android/internal/os/KernelMemoryBandwidthStats;->parseStats(Ljava/io/BufferedReader;)V
-Landroid/util/MapCollections;->getEntrySet()Ljava/util/Set;
-Landroid/util/MapCollections$EntrySet;->iterator()Ljava/util/Iterator;
-Lcom/android/internal/os/BatteryStatsImpl$Uid;->writeJobCompletionsToParcelLocked(Landroid/os/Parcel;)V
+Landroid/util/ArrayMap;->putAll(Ljava/util/Map;)V
+Landroid/os/Parcel;->createStringArrayList()Ljava/util/ArrayList;
+Landroid/content/pm/PackageParser$Package;->internStringArrayList(Ljava/util/List;)V
+Lcom/android/internal/util/ArrayUtils;->contains(Ljava/util/Collection;Ljava/lang/Object;)Z
+Landroid/util/ArraySet;->size()I
+Landroid/util/SparseArray;->keyAt(I)I
+Landroid/content/pm/PackageParser;->isApkFile(Ljava/io/File;)Z
+Landroid/content/pm/PackageParser;->isApkPath(Ljava/lang/String;)Z
+Landroid/os/Parcel;->readParcelableCreator(Ljava/lang/ClassLoader;)Landroid/os/Parcelable$Creator;
+Landroid/os/Parcel;->readParcelable(Ljava/lang/ClassLoader;)Landroid/os/Parcelable;
Landroid/os/Parcel;->readBundle()Landroid/os/Bundle;
Landroid/os/Parcel;->readBundle(Ljava/lang/ClassLoader;)Landroid/os/Bundle;
-Landroid/content/res/Resources;->getString(I)Ljava/lang/String;
-Landroid/content/res/Resources;->getString(I[Ljava/lang/Object;)Ljava/lang/String;
-Landroid/content/res/Resources;->getStringArray(I)[Ljava/lang/String;
-Landroid/os/ThreadLocalWorkSource;->setUid(I)J
-Landroid/content/pm/PackageParser;->parseClusterPackage(Ljava/io/File;I)Landroid/content/pm/PackageParser$Package;
-Landroid/content/pm/PackageParser;->parseClusterPackageLite(Ljava/io/File;I)Landroid/content/pm/PackageParser$PackageLite;
-Landroid/content/pm/split/DefaultSplitAssetLoader;->getBaseAssetManager()Landroid/content/res/AssetManager;
-Landroid/content/pm/PackageParser;->parseBaseApk(Ljava/io/File;Landroid/content/res/AssetManager;I)Landroid/content/pm/PackageParser$Package;
-Landroid/content/pm/PackageParser;->parseBaseApk(Ljava/lang/String;Landroid/content/res/Resources;Landroid/content/res/XmlResourceParser;I[Ljava/lang/String;)Landroid/content/pm/PackageParser$Package;
-Landroid/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;
-Landroid/content/pm/PackageParser;->cacheResult(Ljava/io/File;ILandroid/content/pm/PackageParser$Package;)V
-Landroid/content/pm/PackageParser;->parseMonolithicPackage(Ljava/io/File;I)Landroid/content/pm/PackageParser$Package;
-Landroid/content/pm/PackageParser;->parseMonolithicPackageLite(Ljava/io/File;I)Landroid/content/pm/PackageParser$PackageLite;
-Landroid/content/pm/PackageParser;->parseApkLite(Ljava/io/File;I)Landroid/content/pm/PackageParser$ApkLite;
-Landroid/content/pm/PackageParser;->parseApkLite(Ljava/lang/String;Lorg/xmlpull/v1/XmlPullParser;Landroid/util/AttributeSet;Landroid/content/pm/PackageParser$SigningDetails;)Landroid/content/pm/PackageParser$ApkLite;
-Landroid/content/pm/PackageParser;->parseApkLiteInner(Ljava/io/File;Ljava/io/FileDescriptor;Ljava/lang/String;I)Landroid/content/pm/PackageParser$ApkLite;
-Landroid/content/pm/PackageParser;->toCacheEntry(Landroid/content/pm/PackageParser$Package;)[B
-Landroid/content/pm/PackageParser;->parseBaseApplication(Landroid/content/pm/PackageParser$Package;Landroid/content/res/Resources;Landroid/content/res/XmlResourceParser;I[Ljava/lang/String;)Z
-Landroid/os/Parcel;->writeParcelable(Landroid/os/Parcelable;I)V
-Landroid/os/Parcel;->writeParcelableArray([Landroid/os/Parcelable;I)V
-Landroid/os/Parcel;->writeParcelableCreator(Landroid/os/Parcelable;)V
-Landroid/os/Parcel;->writeParcelableList(Ljava/util/List;I)V
-Landroid/content/pm/PackageParser$Package;->writeToParcel(Landroid/os/Parcel;I)V
-Landroid/content/res/Resources;->obtainAttributes(Landroid/util/AttributeSet;[I)Landroid/content/res/TypedArray;
-Landroid/content/res/Resources;->obtainAttributes(Landroid/content/res/Resources;Landroid/content/res/Resources$Theme;Landroid/util/AttributeSet;[I)Landroid/content/res/TypedArray;
-Landroid/content/pm/split/DefaultSplitAssetLoader;->close()V
-Landroid/content/res/AssetManager;->openXmlResourceParser(ILjava/lang/String;)Landroid/content/res/XmlResourceParser;
-Landroid/content/res/AssetManager;->close()V
-Landroid/content/res/AssetManager;->openXmlBlockAsset(ILjava/lang/String;)Landroid/content/res/XmlBlock;
-Landroid/content/pm/PackageParser;->generateAppDetailsHiddenActivity(Landroid/content/pm/PackageParser$Package;I[Ljava/lang/String;Z)Landroid/content/pm/PackageParser$Activity;
-Landroid/content/pm/split/DefaultSplitAssetLoader;->loadApkAssets(Ljava/lang/String;I)Landroid/content/res/ApkAssets;
-Landroid/content/pm/PackageParser$Activity;->writeToParcel(Landroid/os/Parcel;I)V
-Landroid/os/FileUtils;->trimFilename(Ljava/lang/StringBuilder;I)V
-Landroid/content/res/ApkAssets;->openXml(Ljava/lang/String;)Landroid/content/res/XmlResourceParser;
-Landroid/content/res/Configuration;->setLocales(Landroid/os/LocaleList;)V
-Landroid/content/pm/PackageParser;->buildTaskAffinityName(Ljava/lang/String;Ljava/lang/String;Ljava/lang/CharSequence;[Ljava/lang/String;)Ljava/lang/String;
-Landroid/content/res/AssetManager;->retrieveAttributes(Landroid/content/res/XmlBlock$Parser;[I[I[I)Z
-Landroid/content/pm/PackageParser;->buildCompoundName(Ljava/lang/String;Ljava/lang/CharSequence;Ljava/lang/String;[Ljava/lang/String;)Ljava/lang/String;
-Landroid/content/pm/ActivityInfo;->writeToParcel(Landroid/os/Parcel;I)V
-Landroid/content/res/XmlBlock$Parser;->close()V
-Landroid/content/pm/PackageParser;->validateName(Ljava/lang/String;ZZ)Ljava/lang/String;
-Landroid/util/ArraySet;->equals(Ljava/lang/Object;)Z
-Landroid/content/pm/PackageItemInfo;->writeToParcel(Landroid/os/Parcel;I)V
-Landroid/content/pm/PackageParserCacheHelper$WriteHelper;->finishAndUninstall()V
-Landroid/content/res/TypedArray;->loadStringValueAt(I)Ljava/lang/CharSequence;
-Landroid/content/pm/ApplicationInfo;->writeToParcel(Landroid/os/Parcel;I)V
-Landroid/os/FileUtils;->isValidExtFilename(Ljava/lang/String;)Z
-Landroid/content/res/AssetManager;->findCookieForPath(Ljava/lang/String;)I
-Landroid/content/res/TypedArray;->getNonConfigurationString(II)Ljava/lang/String;
-Landroid/content/res/TypedArray;->peekValue(I)Landroid/util/TypedValue;
-Landroid/app/ActivityThread;->attach(ZJ)V
-Landroid/content/res/TypedArray;->getValueAt(ILandroid/util/TypedValue;)Z
-Landroid/content/res/XmlBlock$Parser;->getAttributeName(I)Ljava/lang/String;
-Landroid/content/res/XmlBlock$Parser;->getAttributeNameResource(I)I
-Landroid/content/pm/PackageParser$ApkLite;-><init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ZLjava/lang/String;Ljava/lang/String;ZIIIILjava/util/List;Landroid/content/pm/PackageParser$SigningDetails;ZZZZZZZII)V
-Landroid/app/ResourcesManager;->createAssetManager(Landroid/content/res/ResourcesKey;)Landroid/content/res/AssetManager;
-Landroid/content/res/AssetManager$Builder;->build()Landroid/content/res/AssetManager;
-Landroid/os/FileUtils;->deleteContents(Ljava/io/File;)Z
-Landroid/os/FileUtils;->deleteContentsAndDir(Ljava/io/File;)Z
-Landroid/content/res/ResourcesImpl;->adjustLanguageTag(Ljava/lang/String;)Ljava/lang/String;
-Landroid/sysprop/DisplayProperties;->tryParseBoolean(Ljava/lang/String;)Ljava/lang/Boolean;
-Landroid/content/pm/PackageParserCacheHelper$WriteHelper;-><init>(Landroid/os/Parcel;)V
+Landroid/text/TextUtils$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
+Landroid/text/TextUtils$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/CharSequence;
+Landroid/content/pm/PackageItemInfo;-><init>(Landroid/os/Parcel;)V
+Landroid/content/pm/PackageParser$Component;->createIntentsList(Landroid/os/Parcel;)Ljava/util/ArrayList;
+Landroid/content/pm/PackageParser$Component;-><init>(Landroid/os/Parcel;)V
+Landroid/content/pm/PackageParser$Permission$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
+Landroid/content/pm/PackageParser$Permission$1;->createFromParcel(Landroid/os/Parcel;)Landroid/content/pm/PackageParser$Permission;
+Landroid/content/pm/PackageParser$Permission;-><init>(Landroid/os/Parcel;Landroid/content/pm/PackageParser$1;)V
+Landroid/content/pm/PackageParser$Permission;-><init>(Landroid/os/Parcel;)V
+Landroid/content/pm/PermissionInfo$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
+Landroid/content/pm/PermissionInfo$1;->createFromParcel(Landroid/os/Parcel;)Landroid/content/pm/PermissionInfo;
+Landroid/content/pm/PermissionInfo;-><init>(Landroid/os/Parcel;Landroid/content/pm/PermissionInfo$1;)V
+Landroid/content/pm/PermissionInfo;-><init>(Landroid/os/Parcel;)V
+Landroid/os/Parcel;->readBoolean()Z
+Landroid/util/ArrayMap;->indexOfNull()I
+Landroid/util/MapCollections$ArrayIterator;-><init>(Landroid/util/MapCollections;I)V
+Landroid/util/ArrayMap$1;->colGetSize()I
+Landroid/util/ArrayMap;->getCollection()Landroid/util/MapCollections;
+Landroid/util/MapCollections;->getValues()Ljava/util/Collection;
+Landroid/util/MapCollections$ValuesCollection;->iterator()Ljava/util/Iterator;
+Landroid/util/ArrayMap;->values()Ljava/util/Collection;
+Landroid/os/Parcel;->readFloat()F
+Landroid/content/pm/PackageBackwardCompatibility;->updatePackage(Landroid/content/pm/PackageParser$Package;)V
+Landroid/os/Parcel;->setDataPosition(I)V
+Landroid/content/pm/PackageParser$Activity;-><init>(Landroid/os/Parcel;)V
+Landroid/content/pm/ComponentInfo;-><init>(Landroid/os/Parcel;)V
+Landroid/util/SparseArray;->clear()V
+Lcom/android/internal/util/ArrayUtils;->remove(Ljava/util/ArrayList;Ljava/lang/Object;)Ljava/util/ArrayList;
+Landroid/content/pm/PackageParser$Activity$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
+Landroid/content/pm/PackageParser$Activity$1;->createFromParcel(Landroid/os/Parcel;)Landroid/content/pm/PackageParser$Activity;
+Landroid/content/pm/PackageParser$Activity;-><init>(Landroid/os/Parcel;Landroid/content/pm/PackageParser$1;)V
+Landroid/content/pm/ActivityInfo$1;->createFromParcel(Landroid/os/Parcel;)Landroid/content/pm/ActivityInfo;
+Landroid/content/pm/ActivityInfo;-><init>(Landroid/os/Parcel;Landroid/content/pm/ActivityInfo$1;)V
+Landroid/content/pm/ActivityInfo;-><init>(Landroid/os/Parcel;)V
+Landroid/content/pm/ActivityInfo$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
+Landroid/content/ComponentName;->hashCode()I
+Landroid/content/pm/PackageParser$Component;->getComponentName()Landroid/content/ComponentName;
+Landroid/os/Parcel;->createIntArray()[I
+Landroid/content/ComponentName;-><init>(Ljava/lang/String;Ljava/lang/String;)V
+Landroid/util/ArraySet;->contains(Ljava/lang/Object;)Z
+Landroid/os/Parcel;->createTypedArrayList(Landroid/os/Parcelable$Creator;)Ljava/util/ArrayList;
+Landroid/os/Parcel;->obtain()Landroid/os/Parcel;
+Landroid/os/UserHandle;->getAppId(I)I
+Landroid/util/ArrayMap;->clear()V
+Landroid/util/ArraySet;->remove(Ljava/lang/Object;)Z
+Landroid/content/IntentFilter;->actionsIterator()Ljava/util/Iterator;
+Landroid/content/IntentFilter;-><init>(Landroid/os/Parcel;)V
+Landroid/os/Parcel;->updateNativeSize(J)V
+Landroid/content/IntentFilter;->setAutoVerify(Z)V
+Landroid/content/IntentFilter;->setVisibilityToInstantApp(I)V
+Landroid/os/Parcel;->readCharSequence()Ljava/lang/CharSequence;
+Landroid/content/pm/PackageParser$IntentInfo;-><init>(Landroid/os/Parcel;)V
+Landroid/os/SystemProperties;->getBoolean(Ljava/lang/String;Z)Z
+Landroid/os/Parcel;->recycle()V
+Landroid/util/ArraySet;->valueAt(I)Ljava/lang/Object;
+Landroid/util/ArraySet;->valueAtUnchecked(I)Ljava/lang/Object;
+Landroid/content/pm/PackageParser$Package;->isPrivileged()Z
+Landroid/content/pm/ApplicationInfo;->isPrivilegedApp()Z
+Landroid/content/IntentFilter;->schemesIterator()Ljava/util/Iterator;
+Landroid/content/IntentFilter;->typesIterator()Ljava/util/Iterator;
+Landroid/content/IntentFilter;->debugCheck()Z
+Landroid/util/ArrayMap;-><init>(I)V
+Landroid/util/ArrayMap;->containsKey(Ljava/lang/Object;)Z
+Landroid/content/IntentFilter;->getOrder()I
+Landroid/content/pm/PackageSharedLibraryUpdater;->isLibraryPresent(Ljava/util/ArrayList;Ljava/util/ArrayList;Ljava/lang/String;)Z
Landroid/content/pm/PackageParser$Package;->getLongVersionCode()J
-Lcom/android/internal/util/function/pooled/OmniFunction;->run()V
-Lcom/android/internal/util/function/pooled/PooledLambdaImpl;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-Landroid/os/SystemProperties;->get(Ljava/lang/String;)Ljava/lang/String;
-Landroid/os/SystemProperties;->get(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
-Landroid/os/SystemProperties;->getInt(Ljava/lang/String;I)I
-Landroid/os/SystemProperties;->getLong(Ljava/lang/String;J)J
-Landroid/content/res/ThemedResourceCache;->onConfigurationChange(I)V
-Landroid/content/res/TypedArray;->recycle()V
-Landroid/content/res/Configuration;->fixUpLocaleList()V
-Landroid/content/res/XmlBlock;->newParser(I)Landroid/content/res/XmlResourceParser;
-Landroid/content/pm/ComponentInfo;->writeToParcel(Landroid/os/Parcel;I)V
-Landroid/content/res/ApkAssets;->getAssetPath()Ljava/lang/String;
-Landroid/util/MapCollections$MapIterator;->next()Ljava/lang/Object;
-Landroid/content/res/ResourcesImpl;->flushLayoutCache()V
-Landroid/os/FileUtils;->buildValidExtFilename(Ljava/lang/String;)Ljava/lang/String;
-Landroid/content/res/ApkAssets;->getStringFromPool(I)Ljava/lang/CharSequence;
-Landroid/content/pm/Signature;->equals(Ljava/lang/Object;)Z
+Landroid/content/pm/PackageInfo;->composeLongVersionCode(II)J
+Lcom/android/internal/util/ArrayUtils;->isEmpty(Ljava/util/Collection;)Z
+Landroid/content/pm/ApplicationInfo;->isStaticSharedLibrary()Z
+Landroid/content/pm/ApplicationInfo;->getCodePath()Ljava/lang/String;
+Landroid/content/pm/ApplicationInfo;->getResourcePath()Ljava/lang/String;
+Landroid/content/pm/ApplicationInfo;->isSystemApp()Z
+Landroid/util/ArraySet;->equals(Ljava/lang/Object;)Z
+Landroid/os/Environment;->getDataDirectory(Ljava/lang/String;)Ljava/io/File;
+Landroid/content/pm/PackageParser$ActivityIntentInfo;-><init>(Landroid/os/Parcel;)V
+Landroid/content/pm/PackageSharedLibraryUpdater;->prefixImplicitDependency(Landroid/content/pm/PackageParser$Package;Ljava/lang/String;Ljava/lang/String;)V
+Landroid/content/pm/PackageParser$Service;-><init>(Landroid/os/Parcel;)V
+Landroid/content/pm/PackageSharedLibraryUpdater;->removeLibrary(Landroid/content/pm/PackageParser$Package;Ljava/lang/String;)V
+Landroid/content/pm/PackageParser$Service$1;->createFromParcel(Landroid/os/Parcel;)Landroid/content/pm/PackageParser$Service;
+Landroid/content/pm/ServiceInfo;-><init>(Landroid/os/Parcel;Landroid/content/pm/ServiceInfo$1;)V
+Landroid/content/pm/ServiceInfo;-><init>(Landroid/os/Parcel;)V
+Landroid/content/pm/PackageParser$Service$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
+Landroid/content/pm/PackageParser$Service;-><init>(Landroid/os/Parcel;Landroid/content/pm/PackageParser$1;)V
+Landroid/content/pm/ServiceInfo$1;->createFromParcel(Landroid/os/Parcel;)Landroid/content/pm/ServiceInfo;
+Landroid/content/pm/ServiceInfo$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
+Landroid/os/Parcel;->readArrayMapInternal(Landroid/util/ArrayMap;ILjava/lang/ClassLoader;)V
+Landroid/os/Parcel;->readValue(Ljava/lang/ClassLoader;)Ljava/lang/Object;
+Landroid/util/ArrayMap;->append(Ljava/lang/Object;Ljava/lang/Object;)V
+Landroid/util/ArrayMap;->validate()V
Landroid/content/pm/PackageUserState;->equals(Ljava/lang/Object;)Z
-Landroid/util/ArrayMap$1;->colGetEntry(II)Ljava/lang/Object;
-Lcom/android/internal/os/BackgroundThread;->ensureThreadLocked()V
-Landroid/app/ActivityThread;-><init>()V
-Landroid/app/ActivityThread;->getSystemContext()Landroid/app/ContextImpl;
-Landroid/app/ContextImpl;->createSystemContext(Landroid/app/ActivityThread;)Landroid/app/ContextImpl;
-Landroid/app/ContextImpl;-><init>(Landroid/app/ContextImpl;Landroid/app/ActivityThread;Landroid/app/LoadedApk;Ljava/lang/String;Landroid/os/IBinder;Landroid/os/UserHandle;ILjava/lang/ClassLoader;Ljava/lang/String;)V
-Landroid/app/ResourcesManager;->getDisplayMetrics()Landroid/util/DisplayMetrics;
-Landroid/app/ResourcesManager;->getDisplayMetrics(ILandroid/view/DisplayAdjustments;)Landroid/util/DisplayMetrics;
+Landroid/content/IntentFilter;->getPriority()I
+Landroid/os/Parcel;->createTypedArray(Landroid/os/Parcelable$Creator;)[Ljava/lang/Object;
+Landroid/os/BaseBundle;->readFromParcelInner(Landroid/os/Parcel;I)V
+Landroid/os/Parcel;->hasReadWriteHelper()Z
+Landroid/os/BaseBundle;->initializeFromParcelLocked(Landroid/os/Parcel;ZZ)V
+Landroid/os/BaseBundle;->isEmptyParcel(Landroid/os/Parcel;)Z
+Landroid/content/pm/PackageParser$ServiceIntentInfo;-><init>(Landroid/os/Parcel;)V
+Landroid/content/pm/PackageParser$Provider;-><init>(Landroid/os/Parcel;)V
+Landroid/os/Parcel;->freeBuffer()V
+Landroid/content/IntentFilter$AuthorityEntry;-><init>(Landroid/os/Parcel;)V
+Landroid/content/pm/PackageParser$Provider$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
+Landroid/content/pm/PackageParser$Provider$1;->createFromParcel(Landroid/os/Parcel;)Landroid/content/pm/PackageParser$Provider;
+Landroid/content/pm/PackageParser$Provider;-><init>(Landroid/os/Parcel;Landroid/content/pm/PackageParser$1;)V
+Landroid/content/pm/ProviderInfo$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
+Landroid/content/pm/ProviderInfo$1;->createFromParcel(Landroid/os/Parcel;)Landroid/content/pm/ProviderInfo;
+Landroid/content/pm/ProviderInfo;-><init>(Landroid/os/Parcel;Landroid/content/pm/ProviderInfo$1;)V
+Landroid/content/pm/ProviderInfo;-><init>(Landroid/os/Parcel;)V
+Landroid/util/MapCollections;->getEntrySet()Ljava/util/Set;
+Landroid/content/pm/PackageParser$SigningDetails;->checkCapability(Landroid/content/pm/PackageParser$SigningDetails;I)Z
+Landroid/content/IntentFilter;->countActions()I
+Landroid/content/IntentFilter;->countCategories()I
+Landroid/content/IntentFilter;->getAction(I)Ljava/lang/String;
+Landroid/content/IntentFilter;->hasAction(Ljava/lang/String;)Z
+Landroid/content/pm/PackageParser$SigningDetails;->hasCertificate(Landroid/content/pm/Signature;I)Z
+Landroid/content/pm/PackageItemInfo;-><init>()V
+Landroid/util/DisplayMetrics;-><init>()V
+Landroid/content/pm/FeatureInfo$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
+Landroid/content/pm/FeatureInfo$1;->createFromParcel(Landroid/os/Parcel;)Landroid/content/pm/FeatureInfo;
+Landroid/content/pm/FeatureInfo;-><init>(Landroid/os/Parcel;Landroid/content/pm/FeatureInfo$1;)V
+Landroid/content/pm/FeatureInfo;-><init>(Landroid/os/Parcel;)V
+Landroid/util/DisplayMetrics;->setToDefaults()V
+Landroid/os/Parcel;->unmarshall([BII)V
+Landroid/content/pm/PackageParser$Package;-><init>(Landroid/os/Parcel;)V
+Landroid/content/pm/ApplicationInfo;-><init>()V
+Landroid/content/pm/PackageParser;->setCallback(Landroid/content/pm/PackageParser$Callback;)V
+Landroid/content/pm/PackageParser;->getCachedResult(Ljava/io/File;I)Landroid/content/pm/PackageParser$Package;
+Landroid/os/Parcel;->setReadWriteHelper(Landroid/os/Parcel$ReadWriteHelper;)V
+Landroid/content/pm/PackageParser;->setSeparateProcesses([Ljava/lang/String;)V
+Landroid/content/pm/PackageParser;->setOnlyCoreApps(Z)V
+Landroid/content/pm/PackageParser;->setDisplayMetrics(Landroid/util/DisplayMetrics;)V
+Landroid/content/pm/PackageParser;->setCacheDir(Ljava/io/File;)V
+Landroid/content/pm/PackageParser;->parsePackage(Ljava/io/File;IZ)Landroid/content/pm/PackageParser$Package;
+Landroid/content/pm/PackageParser;->getCacheKey(Ljava/io/File;I)Ljava/lang/String;
+Landroid/content/pm/PackageParser;-><init>()V
+Landroid/content/pm/PackageSharedLibraryUpdater;->prefixRequiredLibrary(Landroid/content/pm/PackageParser$Package;Ljava/lang/String;)V
+Landroid/content/pm/PackageSharedLibraryUpdater;->prefix(Ljava/util/ArrayList;Ljava/lang/Object;)Ljava/util/ArrayList;
+Landroid/content/pm/PackageParser$SigningDetails$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
+Landroid/content/pm/PackageParser$SigningDetails$1;->createFromParcel(Landroid/os/Parcel;)Landroid/content/pm/PackageParser$SigningDetails;
+Landroid/os/Parcel;->readArraySet(Ljava/lang/ClassLoader;)Landroid/util/ArraySet;
+Landroid/content/pm/PackageParser$Package;->readKeySetMapping(Landroid/os/Parcel;)Landroid/util/ArrayMap;
+Landroid/os/Parcel;->createByteArray()[B
+Landroid/content/pm/ApplicationInfo$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
+Landroid/content/pm/ApplicationInfo$1;->createFromParcel(Landroid/os/Parcel;)Landroid/content/pm/ApplicationInfo;
+Landroid/content/pm/ApplicationInfo;-><init>(Landroid/os/Parcel;Landroid/content/pm/ApplicationInfo$1;)V
+Landroid/content/pm/ApplicationInfo;-><init>(Landroid/os/Parcel;)V
+Landroid/util/ArraySet$1;->colGetEntry(II)Ljava/lang/Object;
+Landroid/content/IntentFilter;->getCategory(I)Ljava/lang/String;
+Landroid/content/IntentFilter;->hasCategory(Ljava/lang/String;)Z
+Landroid/content/pm/ApplicationInfo;->isUpdatedSystemApp()Z
+Landroid/content/IntentFilter;->countDataSchemes()I
+Landroid/content/IntentFilter;->countDataTypes()I
+Landroid/content/IntentFilter;->countDataAuthorities()I
Landroid/content/pm/PackageParser$Package;->setApplicationVolumeUuid(Ljava/lang/String;)V
+Landroid/os/storage/StorageManager;->convert(Ljava/lang/String;)Ljava/util/UUID;
+Landroid/content/pm/PackageParser$Package;->setApplicationInfoCodePath(Ljava/lang/String;)V
+Landroid/content/pm/ApplicationInfo;->setCodePath(Ljava/lang/String;)V
+Landroid/content/pm/PackageParser$Package;->setApplicationInfoBaseCodePath(Ljava/lang/String;)V
+Landroid/content/pm/ApplicationInfo;->setBaseCodePath(Ljava/lang/String;)V
+Landroid/content/pm/PackageParser$Package;->setApplicationInfoSplitCodePaths([Ljava/lang/String;)V
+Landroid/content/pm/ApplicationInfo;->setSplitCodePaths([Ljava/lang/String;)V
+Landroid/content/pm/PackageParser$Package;->setApplicationInfoResourcePath(Ljava/lang/String;)V
+Landroid/content/pm/ApplicationInfo;->setResourcePath(Ljava/lang/String;)V
+Landroid/content/pm/PackageParser$Package;->setApplicationInfoBaseResourcePath(Ljava/lang/String;)V
+Landroid/content/pm/ApplicationInfo;->setBaseResourcePath(Ljava/lang/String;)V
+Landroid/content/pm/PackageParser$Package;->setApplicationInfoSplitResourcePaths([Ljava/lang/String;)V
+Landroid/content/pm/ApplicationInfo;->setSplitResourcePaths([Ljava/lang/String;)V
Landroid/content/pm/AndroidHidlUpdater;->updatePackage(Landroid/content/pm/PackageParser$Package;)V
-Landroid/content/res/ApkAssets;->close()V
-Landroid/content/res/XmlBlock$Parser;->getAttributeBooleanValue(IZ)Z
-Landroid/content/res/XmlBlock$Parser;->getAttributeBooleanValue(Ljava/lang/String;Ljava/lang/String;Z)Z
-Landroid/content/pm/PackageParser;->setMaxAspectRatio(Landroid/content/pm/PackageParser$Package;)V
-Landroid/content/pm/PackageParserCacheHelper$WriteHelper;->writeString(Landroid/os/Parcel;Ljava/lang/String;)V
-Landroid/os/Parcel;->writeTypedList(Ljava/util/List;)V
-Landroid/os/Parcel;->writeTypedList(Ljava/util/List;I)V
-Landroid/content/res/Configuration;->getLocales()Landroid/os/LocaleList;
-Landroid/view/DisplayEventReceiver;-><init>(Landroid/os/Looper;I)V
-Lcom/android/internal/util/function/pooled/PooledLambdaImpl;->doInvoke()Ljava/lang/Object;
-Landroid/content/pm/PackageSharedLibraryUpdater;->prefixImplicitDependency(Landroid/content/pm/PackageParser$Package;Ljava/lang/String;Ljava/lang/String;)V
-Landroid/util/MapCollections$MapIterator;->getKey()Ljava/lang/Object;
-Landroid/util/MapCollections$ValuesCollection;->iterator()Ljava/util/Iterator;
-Lcom/android/internal/os/BatteryStatsImpl$SystemClocks;->elapsedRealtime()J
-Landroid/app/LoadedApk;->makeApplication(ZLandroid/app/Instrumentation;)Landroid/app/Application;
-Landroid/content/pm/IntentFilterVerificationInfo;->getIntFromXml(Lorg/xmlpull/v1/XmlPullParser;Ljava/lang/String;I)I
-Landroid/content/res/ResourcesImpl;->calcConfigChanges(Landroid/content/res/Configuration;)I
-Landroid/content/pm/PackageBackwardCompatibility$AndroidTestRunnerSplitUpdater;->updatePackage(Landroid/content/pm/PackageParser$Package;)V
-Landroid/util/SparseArray;->valueAt(I)Ljava/lang/Object;
+Landroid/content/pm/PackageParser$Package;->getChildPackageNames()Ljava/util/List;
+Landroid/content/pm/SELinuxUtil;->assignSeinfoUser(Landroid/content/pm/PackageUserState;)Ljava/lang/String;
+Landroid/content/pm/ApplicationInfo;->initForUser(I)V
+Landroid/os/UserHandle;->getUid(II)I
+Landroid/os/Environment;->getDataUserDePackageDirectory(Ljava/lang/String;ILjava/lang/String;)Ljava/io/File;
+Landroid/os/Environment;->getDataUserDeDirectory(Ljava/lang/String;I)Ljava/io/File;
+Landroid/os/Environment;->getDataUserDeDirectory(Ljava/lang/String;)Ljava/io/File;
+Landroid/os/Environment;->getDataUserCePackageDirectory(Ljava/lang/String;ILjava/lang/String;)Ljava/io/File;
+Landroid/os/Environment;->getDataUserCeDirectory(Ljava/lang/String;I)Ljava/io/File;
+Landroid/os/Environment;->getDataUserCeDirectory(Ljava/lang/String;)Ljava/io/File;
+Landroid/content/pm/SharedLibraryInfo;->getPath()Ljava/lang/String;
+Landroid/content/pm/ApplicationInfo;->isInstantApp()Z
+Landroid/permission/PermissionManager$SplitPermissionInfo;->getNewPermissions()Ljava/util/List;
+Landroid/permission/PermissionManager$SplitPermissionInfo;->getSplitPermission()Ljava/lang/String;
+Landroid/content/pm/PackageParser$SigningDetails;->hasAncestorOrSelf(Landroid/content/pm/PackageParser$SigningDetails;)Z
+Landroid/content/pm/PackageParser$Package;->isVendor()Z
+Landroid/content/pm/ApplicationInfo;->isVendor()Z
+Landroid/util/ArraySet;->iterator()Ljava/util/Iterator;
+Landroid/util/ArraySet;->getCollection()Landroid/util/MapCollections;
+Landroid/util/MapCollections;->getKeySet()Ljava/util/Set;
+Landroid/util/MapCollections$KeySet;->iterator()Ljava/util/Iterator;
+Landroid/util/ArraySet$1;->colGetSize()I
+Lcom/android/server/SystemConfig;->getInstance()Lcom/android/server/SystemConfig;
+Landroid/content/pm/PackageParser$Package;->isProduct()Z
+Landroid/content/pm/ApplicationInfo;->isProduct()Z
+Landroid/content/pm/PackageParser$Package;->isSystem()Z
+Landroid/content/pm/PackageParser$Package;->isUpdatedSystemApp()Z
+Lcom/android/server/SystemConfig;->getProductPrivAppPermissions(Ljava/lang/String;)Landroid/util/ArraySet;
+Landroid/text/TextUtils;->equals(Ljava/lang/CharSequence;Ljava/lang/CharSequence;)Z
+Lcom/android/internal/util/FastXmlSerializer;->escapeAndAppendString(Ljava/lang/String;)V
+Lcom/android/internal/util/FastXmlSerializer;->append(Ljava/lang/String;II)V
+Lcom/android/internal/util/FastXmlSerializer;->append(Ljava/lang/String;)V
+Lcom/android/internal/util/FastXmlSerializer;->append(C)V
+Lcom/android/internal/util/FastXmlSerializer;->attribute(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Lorg/xmlpull/v1/XmlSerializer;
+Lcom/android/internal/util/FastXmlSerializer;->appendIndent(I)V
+Lcom/android/internal/util/FastXmlSerializer;->startTag(Ljava/lang/String;Ljava/lang/String;)Lorg/xmlpull/v1/XmlSerializer;
+Lcom/android/internal/util/FastXmlSerializer;->endTag(Ljava/lang/String;Ljava/lang/String;)Lorg/xmlpull/v1/XmlSerializer;
+Landroid/content/pm/Signature;->toChars([C[I)[C
+Landroid/content/pm/Signature;->hashCode()I
+Landroid/content/pm/IntentFilterVerificationInfo;->writeToXml(Lorg/xmlpull/v1/XmlSerializer;)V
+Landroid/util/ArrayMap;->entrySet()Ljava/util/Set;
+Landroid/util/MapCollections$EntrySet;->iterator()Ljava/util/Iterator;
+Landroid/util/MapCollections$MapIterator;-><init>(Landroid/util/MapCollections;)V
+Landroid/util/MapCollections$EntrySet;-><init>(Landroid/util/MapCollections;)V
+Lcom/android/internal/util/ArrayUtils;->isEmpty([Ljava/lang/Object;)Z
+Landroid/util/Base64$Encoder;->process([BIIZ)Z
+Landroid/os/FileUtils;->bytesToFile(Ljava/lang/String;[B)V
+Landroid/os/FileUtils;->$closeResource(Ljava/lang/Throwable;Ljava/lang/AutoCloseable;)V
+Landroid/util/ArraySet;->removeAt(I)Ljava/lang/Object;
+Landroid/util/ArraySet;->shouldShrink()Z
+Landroid/util/MapCollections;-><init>()V
+Landroid/content/IntentFilter;->getAutoVerify()Z
+Landroid/content/IntentFilter;->match(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Landroid/net/Uri;Ljava/util/Set;Ljava/lang/String;)I
+Landroid/content/IntentFilter;->matchAction(Ljava/lang/String;)Z
+Landroid/content/pm/ApplicationInfo;->setVersionCode(J)V
+Landroid/os/Process;->isIsolated(I)Z
+Landroid/content/pm/PackageUserState;->isAvailable(I)Z
+Landroid/content/pm/PackageParser;->checkUseInstalledOrHidden(ILandroid/content/pm/PackageUserState;Landroid/content/pm/ApplicationInfo;)Z
+Landroid/content/pm/PackageParser$Package;->isMatch(I)Z
+Landroid/content/pm/PackageParser;->copyNeeded(ILandroid/content/pm/PackageParser$Package;Landroid/content/pm/PackageUserState;Landroid/os/Bundle;I)Z
+Landroid/content/pm/PackageParser;->updateApplicationInfo(Landroid/content/pm/ApplicationInfo;ILandroid/content/pm/PackageUserState;)V
+Landroid/content/pm/PackageParser;->generateApplicationInfo(Landroid/content/pm/PackageParser$Package;ILandroid/content/pm/PackageUserState;I)Landroid/content/pm/ApplicationInfo;
+Landroid/content/pm/FallbackCategoryProvider;->getFallbackCategory(Ljava/lang/String;)I
+Landroid/os/storage/StorageManager;->isFileEncryptedNativeOnly()Z
+Landroid/os/storage/StorageManager;->isEncrypted()Z
+Landroid/content/pm/PackageParser;->generatePackageInfo(Landroid/content/pm/PackageParser$Package;[IIJJLjava/util/Set;Landroid/content/pm/PackageUserState;I)Landroid/content/pm/PackageInfo;
+Landroid/content/pm/PackageInfo;-><init>()V
+Landroid/os/Parcel;->writeInterfaceToken(Ljava/lang/String;)V
+Landroid/os/BinderProxy;->transact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+Landroid/os/Binder;->checkParcel(Landroid/os/IBinder;ILandroid/os/Parcel;Ljava/lang/String;)V
+Landroid/os/Binder;->isTracingEnabled()Z
+Landroid/os/Parcel;->readException()V
+Landroid/os/Parcel;->readExceptionCode()I
+Landroid/os/UserHandle;->getUserId(I)I
+Landroid/util/proto/ProtoInputStream;->fillBuffer()V
+Landroid/util/proto/ProtoInputStream;->getOffset()I
+Landroid/util/proto/ProtoStream;->getOffsetFromToken(J)I
+Landroid/util/proto/ProtoInputStream;->incOffset(I)V
+Landroid/util/proto/ProtoInputStream;->readVarint()J
+Landroid/util/proto/ProtoInputStream;->nextField()I
+Landroid/util/proto/ProtoInputStream;->readTag()V
+Landroid/util/proto/ProtoInputStream;->assertFreshData()V
+Landroid/util/proto/ProtoInputStream;->assertFieldNumber(J)V
+Landroid/util/proto/ProtoInputStream;->assertWireType(I)V
+Landroid/util/proto/ProtoInputStream;->getFieldNumber()I
+Landroid/util/proto/ProtoInputStream;->checkPacked(J)V
+Lcom/android/internal/util/ArrayUtils;->newUnpaddedIntArray(I)[I
+Landroid/util/proto/ProtoInputStream;->readLong(J)J
+Landroid/util/SparseIntArray;-><init>(I)V
+Landroid/util/SparseIntArray;-><init>()V
+Landroid/util/proto/ProtoInputStream;->readInt(J)I
+Landroid/util/proto/ProtoInputStream;->start(J)J
+Landroid/util/proto/ProtoStream;->makeToken(IZIII)J
+Landroid/util/proto/ProtoInputStream;->end(J)V
+Landroid/util/proto/ProtoInputStream;->readString(J)Ljava/lang/String;
+Landroid/util/proto/ProtoInputStream;->readRawString(I)Ljava/lang/String;
+Landroid/util/ArraySet;->addAll(Ljava/util/Collection;)Z
+Landroid/app/usage/UsageStats;-><init>()V
+Landroid/content/res/Configuration;->readFromProto(Landroid/util/proto/ProtoInputStream;J)V
+Landroid/util/proto/ProtoInputStream;->nextField(J)Z
+Lcom/android/internal/util/Preconditions;->checkNotNull(Ljava/lang/Object;)Ljava/lang/Object;
+Landroid/net/Uri;->access$300()Ljava/lang/String;
+Landroid/net/UriCodec;->appendDecoded(Ljava/lang/StringBuilder;Ljava/lang/String;ZLjava/nio/charset/Charset;Z)V
+Landroid/net/UriCodec;->flushDecodingByteAccumulator(Ljava/lang/StringBuilder;Ljava/nio/charset/CharsetDecoder;Ljava/nio/ByteBuffer;Z)V
+Landroid/net/Uri$PathPart;->getPathSegments()Landroid/net/Uri$PathSegments;
+Landroid/net/Uri$Part;->nonNull(Landroid/net/Uri$Part;)Landroid/net/Uri$Part;
+Landroid/net/Uri$HierarchicalUri;->getPathSegments()Ljava/util/List;
+Landroid/os/UserHandle;->getCallingUserId()I
+Lcom/android/internal/util/FastPrintWriter;->appendLocked(Ljava/lang/String;II)V
+Landroid/net/Uri;->decode(Ljava/lang/String;)Ljava/lang/String;
+Landroid/net/UriCodec;->decode(Ljava/lang/String;ZLjava/nio/charset/Charset;Z)Ljava/lang/String;
+Landroid/text/TextUtils;->safeIntern(Ljava/lang/String;)Ljava/lang/String;
+Landroid/view/animation/PathInterpolator;->initPath(Landroid/graphics/Path;)V
+Landroid/app/WindowConfiguration;->setAppBounds(Landroid/graphics/Rect;)V
+Landroid/app/WindowConfiguration;->setBounds(Landroid/graphics/Rect;)V
+Landroid/app/WindowConfiguration;->setWindowingMode(I)V
+Landroid/app/WindowConfiguration;->setActivityType(I)V
+Landroid/app/WindowConfiguration;->setAlwaysOnTop(I)V
+Landroid/app/WindowConfiguration;->setRotation(I)V
+Landroid/app/WindowConfiguration;->setDisplayWindowingMode(I)V
+Landroid/os/LocaleList;->isEmpty()Z
+Landroid/content/res/AssetManager;->getResourceValue(IILandroid/util/TypedValue;Z)Z
+Landroid/content/res/Configuration;->fixUpLocaleList()V
+Landroid/content/res/Resources;->obtainTempTypedValue()Landroid/util/TypedValue;
+Landroid/content/res/Resources;->releaseTempTypedValue(Landroid/util/TypedValue;)V
+Landroid/graphics/Rect;->setEmpty()V
+Landroid/net/UriCodec;->getNextCharacter(Ljava/lang/String;IILjava/lang/String;)C
+Landroid/net/UriCodec;->hexCharToValue(C)I
+Landroid/net/Uri$AbstractPart;->getDecoded()Ljava/lang/String;
+Landroid/net/Uri$PathSegments;->size()I
+Landroid/app/WindowConfiguration;->setToDefaults()V
+Lcom/android/internal/util/LineBreakBufferedWriter;->write(Ljava/lang/String;II)V
+Landroid/net/Uri;->encode(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
+Landroid/net/Uri;->isAllowed(CLjava/lang/String;)Z
+Landroid/os/BaseBundle;->unparcel()V
+Landroid/content/Intent;->getAction()Ljava/lang/String;
+Landroid/os/Process;->myUid()I
+Landroid/content/res/ResourcesImpl;->getValue(ILandroid/util/TypedValue;Z)V
+Landroid/graphics/Rect;->set(Landroid/graphics/Rect;)V
+Landroid/content/res/Configuration;->setTo(Landroid/content/res/Configuration;)V
+Landroid/app/WindowConfiguration;->setTo(Landroid/app/WindowConfiguration;)V
+Landroid/util/ArrayMap;->ensureCapacity(I)V
+Landroid/util/TypedValue;->complexToFloat(I)F
+Landroid/content/res/ThemedResourceCache;->pruneEntriesLocked(Landroid/util/LongSparseArray;I)Z
+Landroid/util/TypedValue;->applyDimension(IFLandroid/util/DisplayMetrics;)F
+Landroid/os/MessageQueue;->enqueueMessage(Landroid/os/Message;J)Z
+Landroid/os/Message;->markInUse()V
+Landroid/os/Binder;-><init>()V
+Landroid/os/Binder;-><init>(Ljava/lang/String;)V
+Landroid/os/UserHandle;->isSameApp(II)Z
+Landroid/app/WindowConfiguration;-><init>()V
+Landroid/app/WindowConfiguration;->unset()V
+Landroid/content/Intent;->getPackage()Ljava/lang/String;
+Lcom/android/internal/util/ArrayUtils;->unstableRemoveIf(Ljava/util/ArrayList;Ljava/util/function/Predicate;)I
+Landroid/util/TypedValue;->complexToDimensionPixelSize(ILandroid/util/DisplayMetrics;)I
+Landroid/net/Uri$HierarchicalUri;->getAuthority()Ljava/lang/String;
+Landroid/app/IApplicationThread$Stub;->asBinder()Landroid/os/IBinder;
+Landroid/os/UserHandle;->getIdentifier()I
+Landroid/util/MemoryIntArray;->enforceNotClosed()V
+Landroid/util/MemoryIntArray;->isClosed()Z
+Landroid/os/MessageQueue;->next()Landroid/os/Message;
+Landroid/app/ContextImpl;->getResources()Landroid/content/res/Resources;
+Landroid/net/Uri$Builder;->path(Landroid/net/Uri$PathPart;)Landroid/net/Uri$Builder;
+Landroid/util/Singleton;->get()Ljava/lang/Object;
+Lcom/android/internal/util/MessageUtils;->findMessageNames([Ljava/lang/Class;[Ljava/lang/String;)Landroid/util/SparseArray;
+Landroid/app/ActivityManager;->getService()Landroid/app/IActivityManager;
+Landroid/content/ContentProvider;->access$100(Landroid/content/ContentProvider;Ljava/lang/String;)Ljava/lang/String;
+Landroid/content/ContentProvider;->setCallingPackage(Ljava/lang/String;)Ljava/lang/String;
+Landroid/content/ContentProvider;->onCallingPackageChanged()V
+Landroid/app/ContextImpl;->getUserId()I
+Landroid/util/TimingsTraceLog;->assertSameThread()V
+Landroid/net/Uri$StringUri;->getAuthorityPart()Landroid/net/Uri$Part;
+Landroid/os/Binder;->attachInterface(Landroid/os/IInterface;Ljava/lang/String;)V
+Landroid/net/Uri$Builder;->authority(Landroid/net/Uri$Part;)Landroid/net/Uri$Builder;
+Landroid/app/NotificationChannel;->safeInt(Lorg/xmlpull/v1/XmlPullParser;Ljava/lang/String;I)I
+Landroid/app/NotificationChannel;->tryParseInt(Ljava/lang/String;I)I
+Landroid/app/NotificationChannel;->safeBool(Lorg/xmlpull/v1/XmlPullParser;Ljava/lang/String;Z)Z
+Landroid/net/Uri;-><init>(Landroid/net/Uri$1;)V
+Landroid/net/Uri;-><init>()V
+Landroid/net/Uri$AbstractHierarchicalUri;-><init>(Landroid/net/Uri$1;)V
+Landroid/net/Uri$AbstractHierarchicalUri;-><init>()V
+Landroid/app/NotificationChannel;->getTrimmedString(Ljava/lang/String;)Ljava/lang/String;
+Landroid/app/ActivityManager;->isLowRamDeviceStatic()Z
+Landroid/content/IntentFilter;->matchCategories(Ljava/util/Set;)Ljava/lang/String;
Landroid/util/ArraySet;->ensureCapacity(I)V
-Landroid/os/storage/StorageManager;->convert(Ljava/lang/String;)Ljava/util/UUID;
-Landroid/os/storage/StorageManager;->convert(Ljava/util/UUID;)Ljava/lang/String;
-Landroid/content/pm/PackageParser;->checkOverlayRequiredSystemProperty(Ljava/lang/String;Ljava/lang/String;)Z
+Landroid/util/ArraySet$1;-><init>(Landroid/util/ArraySet;)V
+Landroid/util/MapCollections$KeySet;-><init>(Landroid/util/MapCollections;)V
+Landroid/provider/Settings$GenerationTracker;->getCurrentGeneration()I
+Landroid/app/NotificationChannel;->getAudioAttributes()Landroid/media/AudioAttributes;
+Landroid/app/NotificationChannel;->getName()Ljava/lang/CharSequence;
+Landroid/app/NotificationChannel;->getImportance()I
+Landroid/app/NotificationChannel;->getOriginalImportance()I
+Lcom/android/internal/util/ArrayUtils;->size([Ljava/lang/Object;)I
+Landroid/app/NotificationChannel;->canShowBadge()Z
+Landroid/app/NotificationChannel;->getGroup()Ljava/lang/String;
+Lcom/android/internal/util/function/pooled/PooledLambdaImpl;->setIfInBounds([Ljava/lang/Object;ILjava/lang/Object;)V
+Lcom/android/internal/util/function/pooled/PooledLambdaImpl;->mask(II)I
+Landroid/os/Message;->obtain()Landroid/os/Message;
+Landroid/os/Handler;->enqueueMessage(Landroid/os/MessageQueue;Landroid/os/Message;J)Z
+Landroid/os/ThreadLocalWorkSource;->getUid()I
+Landroid/os/Handler;->sendMessageAtTime(Landroid/os/Message;J)Z
+Landroid/app/NotificationChannel;->isBlockableSystem()Z
+Landroid/app/NotificationChannel;->getId()Ljava/lang/String;
+Landroid/app/NotificationChannel;->getDescription()Ljava/lang/String;
+Landroid/app/NotificationChannel;->shouldVibrate()Z
+Landroid/app/NotificationChannel;->getUserLockedFields()I
+Landroid/app/NotificationChannel;->shouldShowLights()Z
+Landroid/app/NotificationChannel;->isDeleted()Z
+Landroid/app/NotificationChannel;->isFgServiceShown()Z
+Landroid/app/NotificationChannel;->writeXml(Lorg/xmlpull/v1/XmlSerializer;)V
+Landroid/app/NotificationChannel;->writeXml(Lorg/xmlpull/v1/XmlSerializer;ZLandroid/content/Context;)V
+Landroid/app/NotificationChannel;->canBypassDnd()Z
+Landroid/app/NotificationChannel;->getLockscreenVisibility()I
+Landroid/app/NotificationChannel;->getSound()Landroid/net/Uri;
+Landroid/media/AudioAttributes;->getUsage()I
+Landroid/media/AudioAttributes;->getContentType()I
+Landroid/media/AudioAttributes;->getFlags()I
+Landroid/app/NotificationChannel;->getLightColor()I
+Landroid/app/NotificationChannel;->getVibrationPattern()[J
+Landroid/app/NotificationChannel;->canBubble()Z
+Landroid/net/Uri$StringUri;->toString()Ljava/lang/String;
+Landroid/os/Handler;->sendMessageDelayed(Landroid/os/Message;J)Z
+Landroid/os/Message;->recycleUnchecked()V
+Landroid/net/Uri$PathPart;->getEncoded()Ljava/lang/String;
+Landroid/net/Uri$PathSegments;->get(I)Ljava/lang/Object;
+Landroid/net/Uri$PathSegments;->get(I)Ljava/lang/String;
+Landroid/net/Uri$PathSegmentsBuilder;->add(Ljava/lang/String;)V
+Landroid/content/ContentProvider;->getAuthorityWithoutUserId(Ljava/lang/String;)Ljava/lang/String;
+Landroid/os/UserHandle;->myUserId()I
+Landroid/provider/Settings$NameValueCache;->getStringForUser(Landroid/content/ContentResolver;Ljava/lang/String;I)Ljava/lang/String;
+Landroid/net/Uri$StringUri;->getAuthority()Ljava/lang/String;
+Landroid/os/BaseBundle;->getString(Ljava/lang/String;)Ljava/lang/String;
+Landroid/os/Bundle;->setDefusable(Landroid/os/Bundle;Z)Landroid/os/Bundle;
+Landroid/provider/Settings$ContentProviderHolder;->getProvider(Landroid/content/ContentResolver;)Landroid/content/IContentProvider;
+Landroid/content/ContentResolver;->getPackageName()Ljava/lang/String;
+Landroid/provider/Settings$ContentProviderHolder;->access$000(Landroid/provider/Settings$ContentProviderHolder;)Landroid/net/Uri;
+Landroid/content/ContentProvider$Transport;->call(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Landroid/os/Bundle;)Landroid/os/Bundle;
+Landroid/content/ContentProvider;->access$200(Landroid/content/ContentProvider;Ljava/lang/String;)V
+Landroid/content/ContentProvider;->validateIncomingAuthority(Ljava/lang/String;)V
+Landroid/content/ContentProvider;->matchesOurAuthorities(Ljava/lang/String;)Z
+Landroid/content/ContentProvider;->call(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Landroid/os/Bundle;)Landroid/os/Bundle;
+Landroid/provider/Settings;->isInSystemServer()Z
+Landroid/os/BaseBundle;-><init>(Ljava/lang/ClassLoader;I)V
+Landroid/os/BaseBundle;->putInt(Ljava/lang/String;I)V
+Landroid/os/Bundle;-><init>()V
+Landroid/os/BaseBundle;-><init>()V
+Landroid/os/BaseBundle;->getInt(Ljava/lang/String;I)I
+Landroid/os/Bundle;->setDefusable(Z)V
+Landroid/os/BaseBundle;->containsKey(Ljava/lang/String;)Z
+Landroid/app/ActivityManager;->handleIncomingUser(IIIZZLjava/lang/String;Ljava/lang/String;)I
+Landroid/provider/Settings$System;->getStringForUser(Landroid/content/ContentResolver;Ljava/lang/String;I)Ljava/lang/String;
+Landroid/provider/Settings$System;->getIntForUser(Landroid/content/ContentResolver;Ljava/lang/String;II)I
+Landroid/media/AudioSystem;->getOutputDeviceName(I)Ljava/lang/String;
+Landroid/app/ContextImpl;->getContentResolver()Landroid/content/ContentResolver;
+Landroid/content/IntentFilter;->matchData(Ljava/lang/String;Ljava/lang/String;Landroid/net/Uri;)I
+Landroid/content/Intent;->getFlags()I
+Landroid/util/Slog;->i(Ljava/lang/String;Ljava/lang/String;)I
+Lcom/android/server/LocalServices;->getService(Ljava/lang/Class;)Ljava/lang/Object;
+Lcom/android/internal/util/BitUtils;->unpackBits(J)[I
+Landroid/util/SparseIntArray;->get(II)I
+Landroid/os/BaseBundle;->copyInternal(Landroid/os/BaseBundle;Z)V
+Landroid/app/ActivityThread;->getPackageManager()Landroid/content/pm/IPackageManager;
+Landroid/app/AppGlobals;->getPackageManager()Landroid/content/pm/IPackageManager;
+Landroid/os/BaseBundle;-><init>(Z)V
+Lcom/android/internal/util/XmlUtils;->readThisArrayMapXml(Lorg/xmlpull/v1/XmlPullParser;Ljava/lang/String;[Ljava/lang/String;Lcom/android/internal/util/XmlUtils$ReadMapCallback;)Landroid/util/ArrayMap;
+Landroid/os/BaseBundle;->deepCopyValue(Ljava/lang/Object;)Ljava/lang/Object;
+Lcom/android/internal/util/XmlUtils;->readThisValueXml(Lorg/xmlpull/v1/XmlPullParser;[Ljava/lang/String;Lcom/android/internal/util/XmlUtils$ReadMapCallback;Z)Ljava/lang/Object;
+Landroid/os/PersistableBundle;-><init>(Landroid/util/ArrayMap;)V
+Lcom/android/internal/util/BitUtils;->packBits([I)J
+Landroid/os/PersistableBundle;->isValidType(Ljava/lang/Object;)Z
+Lcom/android/internal/util/XmlUtils;->readThisPrimitiveValueXml(Lorg/xmlpull/v1/XmlPullParser;Ljava/lang/String;)Ljava/lang/Object;
+Landroid/net/UidRange;->hashCode()I
+Landroid/util/Pair;-><init>(Ljava/lang/Object;Ljava/lang/Object;)V
+Landroid/os/LocaleList;->hashCode()I
+Landroid/content/IIntentReceiver$Stub;->asBinder()Landroid/os/IBinder;
+Landroid/app/job/JobInfo;->getRequiredNetwork()Landroid/net/NetworkRequest;
+Landroid/content/IntentFilter;->addAction(Ljava/lang/String;)V
+Lcom/android/internal/os/ProcTimeInStateReader;->initializeTimeInStateFormat(Ljava/nio/file/Path;)V
+Landroid/net/Uri$AbstractPart;-><init>(Ljava/lang/String;Ljava/lang/String;)V
+Landroid/os/MessageQueue;->removeMessages(Landroid/os/Handler;ILjava/lang/Object;)V
+Landroid/os/ServiceManager;->getIServiceManager()Landroid/os/IServiceManager;
+Landroid/util/Slog;->d(Ljava/lang/String;Ljava/lang/String;)I
+Lcom/android/internal/util/StatLogger;->getTime()J
+Landroid/util/TimingsTraceLog;->traceBegin(Ljava/lang/String;)V
+Landroid/util/TimingsTraceLog;->traceEnd()V
+Landroid/util/TimingsTraceLog;->logDuration(Ljava/lang/String;J)V
+Landroid/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$1;)V
+Landroid/net/Uri$HierarchicalUri;-><init>(Ljava/lang/String;Landroid/net/Uri$Part;Landroid/net/Uri$PathPart;Landroid/net/Uri$Part;Landroid/net/Uri$Part;)V
+Landroid/net/Uri$Builder;-><init>()V
+Landroid/net/Uri$Builder;->scheme(Ljava/lang/String;)Landroid/net/Uri$Builder;
+Landroid/net/Uri$Builder;->query(Landroid/net/Uri$Part;)Landroid/net/Uri$Builder;
+Landroid/net/Uri$Builder;->fragment(Landroid/net/Uri$Part;)Landroid/net/Uri$Builder;
+Landroid/net/Uri$Builder;->build()Landroid/net/Uri;
+Landroid/net/Uri$Builder;->hasSchemeOrAuthority()Z
+Landroid/net/Uri$PathPart;->makeAbsolute(Landroid/net/Uri$PathPart;)Landroid/net/Uri$PathPart;
+Landroid/app/ContextImpl;->getSystemService(Ljava/lang/String;)Ljava/lang/Object;
+Landroid/app/SystemServiceRegistry;->getSystemService(Landroid/app/ContextImpl;Ljava/lang/String;)Ljava/lang/Object;
+Landroid/util/ArrayMap;->isEmpty()Z
+Landroid/app/SystemServiceRegistry$CachedServiceFetcher;->getService(Landroid/app/ContextImpl;)Ljava/lang/Object;
+Lcom/android/internal/util/StateMachine$SmHandler;->completeConstruction()V
+Landroid/os/SystemProperties;->getInt(Ljava/lang/String;I)I
+Landroid/os/ThreadLocalWorkSource;->setUid(I)J
+Landroid/os/ThreadLocalWorkSource;->getToken()J
+Landroid/os/ThreadLocalWorkSource;->restore(J)V
+Landroid/os/ThreadLocalWorkSource;->parseUidFromToken(J)I
+Lcom/android/internal/util/function/pooled/PooledLambdaImpl;->fillInArg(Ljava/lang/Object;)Z
+Lcom/android/internal/util/function/pooled/PooledLambdaImpl;->access$000(II)I
+Landroid/os/Handler;->dispatchMessage(Landroid/os/Message;)V
+Lcom/android/internal/util/function/pooled/PooledLambdaImpl;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+Lcom/android/internal/util/ArrayUtils;->contains([II)Z
+Landroid/os/Handler;-><init>(Landroid/os/Looper;Landroid/os/Handler$Callback;Z)V
+Landroid/os/UserHandle;->isIsolated(I)Z
+Landroid/app/ContextImpl;->checkPermission(Ljava/lang/String;II)I
+Landroid/app/ContextImpl;->checkCallingOrSelfPermission(Ljava/lang/String;)I
+Landroid/net/Uri$StringUri;->findSchemeSeparator()I
+Landroid/content/pm/PackageUserState;->isMatch(Landroid/content/pm/ComponentInfo;I)Z
+Landroid/content/pm/PackageUserState;->isEnabled(Landroid/content/pm/ComponentInfo;I)Z
+Landroid/content/pm/PackageUserState;->reportIfDebug(ZI)Z
+Landroid/content/pm/PackageParser$Package;->isExternal()Z
+Landroid/content/pm/ApplicationInfo;->isExternal()Z
+Landroid/content/pm/ApplicationInfo;->isSystemExt()Z
+Landroid/util/Spline$MonotoneCubicSpline;->interpolate(F)F
+Landroid/app/job/JobInfo;->getId()I
+Landroid/util/Spline$MonotoneCubicSpline;-><init>([F[F)V
+Landroid/content/res/ApkAssets;->getStringFromPool(I)Ljava/lang/CharSequence;
+Landroid/util/MemoryIntArray;->size()I
+Landroid/os/Process;->myTid()I
+Landroid/app/-$$Lambda$ResourcesManager$QJ7UiVk_XS90KuXAsIjIEym1DnM;->test(Ljava/lang/Object;)Z
+Landroid/app/ResourcesManager;->lambda$static$0(Ljava/lang/ref/WeakReference;)Z
+Landroid/app/ResourcesManager;->getOrCreateResourcesLocked(Ljava/lang/ClassLoader;Landroid/content/res/ResourcesImpl;Landroid/content/res/CompatibilityInfo;)Landroid/content/res/Resources;
+Landroid/graphics/Rect;->isEmpty()Z
+Landroid/content/res/ResourcesImpl;->flushLayoutCache()V
+Landroid/os/LocaleList;->get(I)Ljava/util/Locale;
+Landroid/content/res/ThemedResourceCache;->onConfigurationChange(I)V
Landroid/content/res/ThemedResourceCache;->prune(I)Z
-Landroid/content/res/ThemedResourceCache;->pruneEntriesLocked(Landroid/util/LongSparseArray;I)Z
-Landroid/util/Pools$SynchronizedPool;->acquire()Ljava/lang/Object;
-Landroid/content/res/XmlBlock$Parser;->getAttributeCount()I
-Landroid/content/pm/PackageParser;->parseMetaData(Landroid/content/res/Resources;Landroid/content/res/XmlResourceParser;Landroid/os/Bundle;[Ljava/lang/String;)Landroid/os/Bundle;
-Landroid/content/res/Resources;->getDisplayMetrics()Landroid/util/DisplayMetrics;
-Landroid/text/TextUtils;->writeToParcel(Ljava/lang/CharSequence;Landroid/os/Parcel;I)V
-Landroid/view/DisplayAdjustments;->setCompatibilityInfo(Landroid/content/res/CompatibilityInfo;)V
-Landroid/content/res/CompatibilityInfo;->applyToDisplayMetrics(Landroid/util/DisplayMetrics;)V
+Landroid/content/res/Configuration;->compareTo(Landroid/content/res/Configuration;)I
+Landroid/content/res/Resources;->getClassLoader()Ljava/lang/ClassLoader;
+Lcom/android/internal/os/CachedDeviceState;->access$200(Lcom/android/internal/os/CachedDeviceState;)Z
+Landroid/graphics/Rect;->equals(Ljava/lang/Object;)Z
+Landroid/content/res/Configuration;->equals(Landroid/content/res/Configuration;)Z
+Lcom/android/internal/os/CachedDeviceState$Readonly;->isCharging()Z
+Landroid/util/MemoryIntArray;->enforceValidIndex(I)V
+Landroid/util/MemoryIntArray;->get(I)I
+Lcom/android/internal/os/LooperStats;->deviceStateAllowsCollection()Z
+Landroid/content/res/AssetManager;->isUpToDate()Z
+Landroid/content/res/ApkAssets;->isUpToDate()Z
+Landroid/content/res/Resources;->getImpl()Landroid/content/res/ResourcesImpl;
+Landroid/util/SparseBooleanArray;->put(IZ)V
+Lcom/android/internal/util/GrowingArrayUtils;->insert([ZIIZ)[Z
+Landroid/os/Parcel;->readLongArray([J)V
+Landroid/os/Handler;->sendMessage(Landroid/os/Message;)Z
+Landroid/app/ActivityThread;->getApplicationThread()Landroid/app/ActivityThread$ApplicationThread;
+Landroid/content/res/TypedArray;->getBoolean(IZ)Z
+Landroid/content/res/TypedArray;->getInt(II)I
+Landroid/content/res/TypedArray;->getResourceId(II)I
Landroid/content/res/TypedArray;->getString(I)Ljava/lang/String;
-Lcom/android/internal/os/BatteryStatsImpl$SamplingTimer;->getUpdateVersion()I
-Landroid/os/ResultReceiver;->send(ILandroid/os/Bundle;)V
-Lcom/android/internal/os/ProcessCpuTracker;->getCpuTimeForPid(I)J
-Landroid/os/FileUtils;->contains(Ljava/io/File;Ljava/io/File;)Z
-Landroid/os/FileUtils;->contains(Ljava/lang/String;Ljava/lang/String;)Z
-Landroid/content/pm/PackageParser$SigningDetails;->checkCapability(Landroid/content/pm/PackageParser$SigningDetails;I)Z
-Landroid/util/MapCollections$MapIterator;->getValue()Ljava/lang/Object;
-Landroid/os/BinderProxy$ProxyMap;->get(J)Landroid/os/BinderProxy;
-Landroid/util/TimingsTraceLog;-><init>(Ljava/lang/String;J)V
-Landroid/os/PowerManager;->newWakeLock(ILjava/lang/String;)Landroid/os/PowerManager$WakeLock;
-Landroid/content/ComponentName;->hashCode()I
-Landroid/util/MapCollections$ArrayIterator;->hasNext()Z
-Landroid/app/IActivityTaskManager$Stub;-><init>()V
-Lcom/android/internal/os/ProcessCpuTracker;-><init>(Z)V
-Lcom/android/internal/util/RingBuffer;-><init>(Ljava/lang/Class;I)V
-Lcom/android/server/LocalServices;->getService(Ljava/lang/Class;)Ljava/lang/Object;
-Lcom/android/internal/util/XmlUtils;->readStringAttribute(Lorg/xmlpull/v1/XmlPullParser;Ljava/lang/String;)Ljava/lang/String;
-Lcom/android/internal/os/BatteryStatsImpl;->setPowerProfileLocked(Lcom/android/internal/os/PowerProfile;)V
-Lcom/android/internal/os/BatteryStatsImpl;->readDailyStatsLocked()V
-Lcom/android/internal/widget/LockPatternUtils;-><init>(Landroid/content/Context;)V
-Landroid/text/SpannableStringBuilder;->replace(IILjava/lang/CharSequence;)Landroid/text/Editable;
-Landroid/text/SpannableStringBuilder;->replace(IILjava/lang/CharSequence;)Landroid/text/SpannableStringBuilder;
-Landroid/text/SpannableStringBuilder;->replace(IILjava/lang/CharSequence;II)Landroid/text/SpannableStringBuilder;
-Landroid/content/res/Resources;->newTheme()Landroid/content/res/Resources$Theme;
-Landroid/os/Parcel;->obtain()Landroid/os/Parcel;
-Landroid/os/Parcel;->obtain(J)Landroid/os/Parcel;
+Landroid/content/res/TypedArray;->loadStringValueAt(I)Ljava/lang/CharSequence;
+Landroid/content/res/XmlBlock$Parser;->getPooledString(I)Ljava/lang/CharSequence;
+Landroid/view/inputmethod/InputMethodInfo;-><init>(Landroid/content/Context;Landroid/content/pm/ResolveInfo;Ljava/util/List;)V
+Landroid/view/inputmethod/InputMethodInfo;->getSubtypeAt(I)Landroid/view/inputmethod/InputMethodSubtype;
+Landroid/view/inputmethod/InputMethodSubtypeArray;->get(I)Landroid/view/inputmethod/InputMethodSubtype;
+Landroid/view/inputmethod/InputMethodSubtype;->hashCode()I
+Landroid/provider/Settings$GenerationTracker;->readCurrentGeneration()I
+Landroid/text/TextUtils$SimpleStringSplitter;->next()Ljava/lang/String;
+Landroid/view/inputmethod/InputMethodSubtype;->sort(Landroid/content/Context;ILandroid/view/inputmethod/InputMethodInfo;Ljava/util/List;)Ljava/util/List;
Landroid/content/res/Configuration;->updateFrom(Landroid/content/res/Configuration;)I
-Landroid/app/ContextImpl;->createAppContext(Landroid/app/ActivityThread;Landroid/app/LoadedApk;)Landroid/app/ContextImpl;
-Landroid/app/ContextImpl;->createAppContext(Landroid/app/ActivityThread;Landroid/app/LoadedApk;Ljava/lang/String;)Landroid/app/ContextImpl;
-Landroid/util/SparseArray;->clear()V
-Landroid/util/ArrayMap;->remove(Ljava/lang/Object;)Ljava/lang/Object;
-Landroid/util/ArrayMap;->removeAt(I)Ljava/lang/Object;
-Landroid/os/Parcel;->writeBundle(Landroid/os/Bundle;)V
-Landroid/content/pm/PackageParser;->hasDomainURLs(Landroid/content/pm/PackageParser$Package;)Z
-Landroid/util/Pools$SynchronizedPool;->release(Ljava/lang/Object;)Z
-Landroid/os/Parcel;->setDataPosition(I)V
-Landroid/os/LocaleList;->getDefault()Landroid/os/LocaleList;
+Landroid/app/WindowConfiguration;->updateFrom(Landroid/app/WindowConfiguration;)I
+Landroid/app/AppOpsManager;->permissionToOpCode(Ljava/lang/String;)I
+Landroid/util/SparseIntArray;->put(II)V
+Landroid/app/AppOpsManager;->opToSwitch(I)I
+Landroid/app/ApplicationPackageManager;->updateFlagsForPackage(II)I
+Landroid/app/ContextImpl;->getOpPackageName()Ljava/lang/String;
+Landroid/content/pm/PermissionInfo;->isHardRestricted()Z
+Landroid/app/ContextImpl;->getPackageManager()Landroid/content/pm/PackageManager;
+Landroid/content/pm/PermissionInfo;->isSoftRestricted()Z
+Landroid/app/ApplicationPackageManager;->getUserId()I
+Landroid/app/ApplicationPackageManager;->getPermissionInfo(Ljava/lang/String;I)Landroid/content/pm/PermissionInfo;
+Landroid/content/pm/PackageParser;->generatePermissionInfo(Landroid/content/pm/PackageParser$Permission;I)Landroid/content/pm/PermissionInfo;
+Landroid/content/pm/PermissionInfo;->isRestricted()Z
+Landroid/app/ApplicationPackageManager;->getPermissionFlags(Ljava/lang/String;Ljava/lang/String;Landroid/os/UserHandle;)I
+Landroid/os/Process;->myPid()I
+Lcom/android/internal/util/IntPair;->of(II)J
+Landroid/util/SparseIntArray;->indexOfKey(I)I
+Landroid/util/SparseBooleanArray;->get(IZ)Z
+Landroid/util/SparseBooleanArray;->get(I)Z
+Landroid/app/ApplicationPackageManager;->getPackageInfoAsUser(Ljava/lang/String;II)Landroid/content/pm/PackageInfo;
+Landroid/os/Binder;->getInterfaceDescriptor()Ljava/lang/String;
+Landroid/os/Binder;->queryLocalInterface(Ljava/lang/String;)Landroid/os/IInterface;
+Landroid/content/ContentResolver;->getUserId()I
+Landroid/net/NetworkStatsHistory$DataStreamUtils;->readVarLong(Ljava/io/DataInputStream;)J
+Landroid/content/pm/PackageItemInfo;-><init>(Landroid/content/pm/PackageItemInfo;)V
+Landroid/system/suspend/WakeLockInfo$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
+Landroid/system/suspend/WakeLockInfo$1;->createFromParcel(Landroid/os/Parcel;)Landroid/system/suspend/WakeLockInfo;
+Landroid/system/suspend/WakeLockInfo;-><init>()V
+Landroid/system/suspend/WakeLockInfo;->readFromParcel(Landroid/os/Parcel;)V
+Lcom/android/internal/os/KernelWakelockReader;->updateWakelockStats([Landroid/system/suspend/WakeLockInfo;Lcom/android/internal/os/KernelWakelockStats;)Lcom/android/internal/os/KernelWakelockStats;
+Landroid/net/NetworkStatsHistory$DataStreamUtils;->readVarLongArray(Ljava/io/DataInputStream;)[J
+Landroid/net/NetworkStatsHistory;->setLong([JIJ)V
+Landroid/net/NetworkStatsHistory;->addLong([JIJ)V
+Landroid/net/NetworkStatsHistory;->getLong([JIJ)J
+Lcom/android/internal/util/ProcFileReader;->finishLine()V
+Landroid/content/res/Resources;->getText(I)Ljava/lang/CharSequence;
+Landroid/content/res/AssetManager;->getResourceText(I)Ljava/lang/CharSequence;
+Landroid/util/TypedValue;->coerceToString()Ljava/lang/CharSequence;
+Landroid/util/SparseIntArray;->valueAt(I)I
+Landroid/content/res/Resources;->getString(I)Ljava/lang/String;
+Lcom/android/internal/os/LooperStats;->messageDispatchStarting()Ljava/lang/Object;
+Lcom/android/internal/os/LooperStats;->messageDispatched(Ljava/lang/Object;Landroid/os/Message;)V
+Landroid/os/storage/StorageManager;->convert(Ljava/util/UUID;)Ljava/lang/String;
+Landroid/os/Parcel;->readSparseArray(Ljava/lang/ClassLoader;)Landroid/util/SparseArray;
+Landroid/util/SparseIntArray;->get(I)I
+Landroid/content/pm/ApplicationInfo;-><init>(Landroid/content/pm/ApplicationInfo;)V
+Landroid/os/UserHandle;->isApp(I)Z
+Landroid/util/SparseIntArray;->delete(I)V
+Landroid/util/SparseIntArray;->size()I
+Landroid/util/SparseIntArray;->keyAt(I)I
+Lcom/android/internal/util/ArrayUtils;->convertToIntArray(Ljava/util/List;)[I
+Landroid/os/Parcel;->writeIntArray([I)V
+Landroid/os/Parcel;->obtain(J)Landroid/os/Parcel;
+Landroid/app/ContextImpl;->getOuterContext()Landroid/content/Context;
+Landroid/content/pm/PackageParser;->generateProviderInfo(Landroid/content/pm/PackageParser$Provider;ILandroid/content/pm/PackageUserState;I)Landroid/content/pm/ProviderInfo;
+Landroid/view/DisplayAdjustments;->getCompatibilityInfo()Landroid/content/res/CompatibilityInfo;
+Landroid/net/Uri$StringUri;->getScheme()Ljava/lang/String;
+Landroid/net/Uri$StringUri;->getPathPart()Landroid/net/Uri$PathPart;
+Landroid/app/WindowConfiguration;->compareTo(Landroid/app/WindowConfiguration;)I
+Landroid/content/res/Configuration;->hashCode()I
+Landroid/content/res/Configuration;->setToDefaults()V
+Landroid/os/LocaleList;->getEmptyLocaleList()Landroid/os/LocaleList;
+Landroid/content/res/Configuration;-><init>(Landroid/content/res/Configuration;)V
+Landroid/os/Parcel;->readStrongBinder()Landroid/os/IBinder;
+Landroid/util/Pair;->create(Ljava/lang/Object;Ljava/lang/Object;)Landroid/util/Pair;
+Landroid/os/UserHandle;->isCore(I)Z
+Landroid/app/ContextImpl;->enforce(Ljava/lang/String;IZILjava/lang/String;)V
+Landroid/app/ContextImpl;->enforceCallingOrSelfPermission(Ljava/lang/String;Ljava/lang/String;)V
+Landroid/content/res/CompatibilityInfo;->supportsScreen()Z
+Landroid/content/res/CompatibilityInfo;->isScalingRequired()Z
+Landroid/app/job/JobInfo;->getFlags()I
+Landroid/content/SyncAdapterType;->equals(Ljava/lang/Object;)Z
+Landroid/content/pm/RegisteredServicesCache;->containsType(Ljava/util/ArrayList;Ljava/lang/Object;)Z
+Landroid/os/Looper;->showSlowLog(JJJLjava/lang/String;Landroid/os/Message;)Z
+Lcom/android/internal/util/function/pooled/PooledLambdaImpl;->setFlags(II)V
+Landroid/os/Parcel;->init(J)V
+Landroid/content/res/Resources;->getInteger(I)I
+Landroid/net/Uri$StringUri;->isHierarchical()Z
+Landroid/net/Uri$StringUri;->getQueryPart()Landroid/net/Uri$Part;
+Landroid/net/Uri$PathPart;->from(Ljava/lang/String;Ljava/lang/String;)Landroid/net/Uri$PathPart;
+Landroid/net/Uri$PathPart;-><init>(Ljava/lang/String;Ljava/lang/String;)V
+Landroid/net/Uri$PathPart;->fromEncoded(Ljava/lang/String;)Landroid/net/Uri$PathPart;
+Landroid/content/IntentFilter;-><init>(Landroid/content/IntentFilter;)V
+Landroid/util/proto/EncodedBuffer;->writeRawByte(B)V
+Landroid/content/Intent;->getComponent()Landroid/content/ComponentName;
+Landroid/util/proto/EncodedBuffer;->writeRawVarint32(I)V
+Landroid/util/proto/EncodedBuffer;->writeRawFixed32(I)V
+Landroid/util/proto/ProtoOutputStream;->assertNotCompacted()V
+Landroid/util/proto/ProtoOutputStream;->writeTag(II)V
+Landroid/util/proto/ProtoOutputStream;->write(JLjava/lang/String;)V
+Landroid/util/proto/ProtoOutputStream;->writeStringImpl(ILjava/lang/String;)V
+Landroid/os/Parcel;->dataSize()I
+Landroid/util/proto/EncodedBuffer;->writeRawBuffer([BII)V
+Landroid/util/proto/ProtoOutputStream;->writeUtf8String(ILjava/lang/String;)V
+Landroid/util/proto/ProtoOutputStream;->writeKnownLengthHeader(II)V
+Landroid/util/proto/EncodedBuffer;->writeRawBuffer([B)V
+Landroid/util/proto/ProtoStream;->getRepeatedFromToken(J)Z
+Landroid/util/proto/EncodedBuffer;->getWritePos()I
+Landroid/util/proto/EncodedBuffer;->getRawFixed32At(I)I
+Landroid/util/proto/EncodedBuffer;->editRawFixed32(II)V
+Landroid/util/proto/EncodedBuffer;->writeRawVarint64(J)V
+Landroid/os/StrictMode;->onBinderStrictModePolicyChange(I)V
+Landroid/util/proto/EncodedBuffer;->getRawVarint32Size(I)I
+Landroid/util/proto/EncodedBuffer;->readRawByte()B
+Landroid/util/proto/EncodedBuffer;->getReadPos()I
+Landroid/util/proto/ProtoOutputStream;->editEncodedSize(I)I
+Landroid/util/proto/EncodedBuffer;->readRawFixed32()I
+Landroid/util/proto/EncodedBuffer;->getReadableSize()I
+Landroid/util/proto/ProtoOutputStream;->readRawTag()I
+Landroid/util/proto/EncodedBuffer;->readRawUnsigned()J
+Landroid/os/MessageQueue;->removeMessages(Landroid/os/Handler;Ljava/lang/Runnable;Ljava/lang/Object;)V
+Landroid/net/Uri$PathSegmentsBuilder;->build()Landroid/net/Uri$PathSegments;
+Landroid/net/Uri$PathSegments;-><init>([Ljava/lang/String;I)V
+Landroid/util/proto/EncodedBuffer;->skipRead(I)V
+Landroid/app/IApplicationThread$Stub$Proxy;->asBinder()Landroid/os/IBinder;
+Landroid/app/ApplicationPackageManager;->getPackageInfo(Ljava/lang/String;I)Landroid/content/pm/PackageInfo;
+Landroid/util/proto/ProtoOutputStream;->compactSizes(I)V
+Landroid/util/proto/EncodedBuffer;->writeFromThisBuffer(II)V
+Landroid/app/WindowConfiguration;->getWindowingMode()I
+Lcom/android/internal/util/function/pooled/PooledLambdaImpl;->unmask(II)I
+Landroid/app/ContextImpl;->registerReceiverInternal(Landroid/content/BroadcastReceiver;ILandroid/content/IntentFilter;Ljava/lang/String;Landroid/os/Handler;Landroid/content/Context;I)Landroid/content/Intent;
+Landroid/app/ActivityThread;->getInstrumentation()Landroid/app/Instrumentation;
+Landroid/app/LoadedApk;->getReceiverDispatcher(Landroid/content/BroadcastReceiver;Landroid/content/Context;Landroid/os/Handler;Landroid/app/Instrumentation;Z)Landroid/content/IIntentReceiver;
+Landroid/app/LoadedApk$ReceiverDispatcher;->getIIntentReceiver()Landroid/content/IIntentReceiver;
+Landroid/util/SparseArray;->gc()V
+Landroid/net/Uri$StringUri;->buildUpon()Landroid/net/Uri$Builder;
+Landroid/net/Uri$StringUri;->getFragmentPart()Landroid/net/Uri$Part;
+Landroid/net/Uri$PathPart;->appendEncodedSegment(Landroid/net/Uri$PathPart;Ljava/lang/String;)Landroid/net/Uri$PathPart;
+Landroid/content/ContentResolver;->getContentService()Landroid/content/IContentService;
+Lcom/android/internal/os/BinderDeathDispatcher;->linkToDeath(Landroid/os/IInterface;Landroid/os/IBinder$DeathRecipient;)I
+Landroid/net/NetworkCapabilities;->appendStringRepresentationOfBitMaskToStringBuilder(Ljava/lang/StringBuilder;JLandroid/net/NetworkCapabilities$NameOf;Ljava/lang/String;)V
+Landroid/os/Parcel;->writeStringArray([Ljava/lang/String;)V
+Lcom/android/internal/util/StatLogger;->logDurationStat(IJ)J
+Lcom/android/internal/util/CollectionUtils;->size(Ljava/util/Collection;)I
+Landroid/content/ComponentName;->getPackageName()Ljava/lang/String;
+Landroid/os/MessageQueue;->removeCallbacksAndMessages(Landroid/os/Handler;Ljava/lang/Object;)V
+Lcom/android/internal/util/GrowingArrayUtils;->append([III)[I
+Landroid/content/pm/ApplicationInfo;->isDirectBootAware()Z
+Landroid/content/res/Configuration;->unset()V
+Landroid/util/FastImmutableArraySet$FastIterator;->hasNext()Z
+Landroid/util/FastImmutableArraySet;->iterator()Ljava/util/Iterator;
+Landroid/util/FastImmutableArraySet$FastIterator;->next()Ljava/lang/Object;
+Landroid/app/WindowConfiguration;->getActivityType()I
+Landroid/app/WindowConfiguration;->getBounds()Landroid/graphics/Rect;
+Landroid/content/res/Configuration;-><init>()V
+Landroid/util/proto/ProtoOutputStream;->write(JI)V
+Landroid/util/proto/ProtoOutputStream;->writeInt32Impl(II)V
+Landroid/os/Parcel;->writeStrongBinder(Landroid/os/IBinder;)V
+Landroid/os/Parcel;->writeValue(Ljava/lang/Object;)V
+Lcom/android/internal/util/function/pooled/PooledLambdaImpl;->popArg(I)Ljava/lang/Object;
+Lcom/android/internal/util/function/pooled/PooledLambdaImpl;->isInvocationArgAtIndex(I)Z
+Landroid/util/ArrayMap;->putAll(Landroid/util/ArrayMap;)V
+Landroid/os/Looper;->myLooper()Landroid/os/Looper;
+Landroid/net/NetworkScoreManager;->getActiveScorerPackage()Ljava/lang/String;
+Landroid/appwidget/AppWidgetManager;->isBoundWidgetPackage(Ljava/lang/String;I)Z
+Landroid/os/SystemProperties;->get(Ljava/lang/String;)Ljava/lang/String;
+Landroid/content/res/Configuration;->getLocales()Landroid/os/LocaleList;
Landroid/content/res/ConfigurationBoundResourceCache;->onConfigurationChange(I)V
-Landroid/util/DisplayMetrics;->setToDefaults()V
-Landroid/content/pm/PackageParser;->computeMinSdkVersion(ILjava/lang/String;I[Ljava/lang/String;[Ljava/lang/String;)I
-Lcom/android/internal/os/ProcessCpuTracker;->onMeasureProcessName(Ljava/lang/String;)I
-Lcom/android/server/SystemConfig$SharedLibraryEntry;-><init>(Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;)V
-Landroid/util/MapCollections;->getKeySet()Ljava/util/Set;
-Landroid/content/ComponentName;->unflattenFromString(Ljava/lang/String;)Landroid/content/ComponentName;
-Landroid/util/Slog;->e(Ljava/lang/String;Ljava/lang/String;)I
-Landroid/util/Slog;->e(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)I
-Landroid/os/SynchronousResultReceiver;->awaitResult(J)Landroid/os/SynchronousResultReceiver$Result;
-Landroid/os/SynchronousResultReceiver;->onReceiveResult(ILandroid/os/Bundle;)V
-Landroid/view/SurfaceControl;->getHdrCapabilities(Landroid/os/IBinder;)Landroid/view/Display$HdrCapabilities;
+Landroid/content/Intent;->getCategories()Ljava/util/Set;
+Landroid/os/LocaleList;->equals(Ljava/lang/Object;)Z
+Landroid/content/res/CompatibilityInfo;->hashCode()I
+Landroid/os/Message;->sendToTarget()V
+Landroid/os/Handler;->getPostMessage(Ljava/lang/Runnable;)Landroid/os/Message;
+Landroid/app/ApplicationPackageManager;->getPackagesForUid(I)[Ljava/lang/String;
+Lcom/android/internal/util/function/pooled/PooledLambdaImpl$LambdaType;->encode(II)I
+Landroid/os/BinderProxy$ProxyMap;->hash(J)I
+Lcom/android/internal/util/function/pooled/PooledLambdaImpl;->getFlags(I)I
+Lcom/android/internal/util/function/pooled/PooledLambdaImpl$LambdaType;->decodeArgCount(I)I
+Lcom/android/internal/util/function/pooled/PooledLambdaImpl;->isRecycled()Z
+Landroid/os/Handler;->post(Ljava/lang/Runnable;)Z
+Landroid/os/SystemClock$2;->millis()J
+Landroid/os/Binder;->execTransact(IJJI)Z
+Landroid/os/Binder;->execTransactInternal(IJJII)Z
+Landroid/os/Parcel;->enforceInterface(Ljava/lang/String;)V
+Landroid/database/IContentObserver$Stub;->asBinder()Landroid/os/IBinder;
+Landroid/os/StrictMode;->clearGatheredViolations()V
+Landroid/os/Binder;->linkToDeath(Landroid/os/IBinder$DeathRecipient;I)V
+Landroid/os/Parcel;->writeNoException()V
+Landroid/os/StrictMode;->hasGatheredViolations()Z
+Landroid/os/Handler;->obtainMessage(IIILjava/lang/Object;)Landroid/os/Message;
+Landroid/os/Message;->obtain(Landroid/os/Handler;IIILjava/lang/Object;)Landroid/os/Message;
+Landroid/os/StrictMode$AndroidBlockGuardPolicy;->setThreadPolicyMask(I)V
+Landroid/os/Looper;->loop()V
+Landroid/app/usage/UsageEvents$Event;->getClassName()Ljava/lang/String;
+Landroid/app/usage/UsageStats;->update(Ljava/lang/String;JII)V
+Lcom/android/internal/os/BinderCallsStats;->callStarted(Landroid/os/Binder;II)Lcom/android/internal/os/BinderInternal$CallSession;
+Landroid/os/Parcel;->readCallingWorkSourceUid()I
+Lcom/android/internal/os/BinderCallsStats;->callEnded(Lcom/android/internal/os/BinderInternal$CallSession;III)V
+Landroid/os/Parcel;->writeParcelable(Landroid/os/Parcelable;I)V
+Landroid/os/Parcel;->writeFloat(F)V
+Landroid/view/DisplayCutout;->getSafeInsetTop()I
+Landroid/content/res/Resources;->getDimensionPixelSize(I)I
+Landroid/os/Parcel;->writeParcelableCreator(Landroid/os/Parcelable;)V
+Landroid/content/Intent;->getScheme()Ljava/lang/String;
+Landroid/os/Handler;-><init>(Landroid/os/Looper;)V
+Landroid/os/BaseBundle;->putString(Ljava/lang/String;Ljava/lang/String;)V
+Landroid/content/SyncAdaptersCache;->getSyncAdapterPackagesForAuthority(Ljava/lang/String;I)[Ljava/lang/String;
+Landroid/view/Display;->hasAccess(IIII)Z
+Landroid/view/DisplayInfo;->writeToParcel(Landroid/os/Parcel;I)V
+Landroid/view/DisplayInfo;->hasAccess(I)Z
+Landroid/os/BinderProxy$ProxyMap;->get(J)Landroid/os/BinderProxy;
+Landroid/os/Parcel;->writeArrayMapInternal(Landroid/util/ArrayMap;)V
+Landroid/content/Intent;->getData()Landroid/net/Uri;
+Landroid/util/ArraySet;->addAll(Landroid/util/ArraySet;)V
+Landroid/os/Binder$PropagateWorkSourceTransactListener;->onTransactStarted(Landroid/os/IBinder;I)Ljava/lang/Object;
+Landroid/os/Binder$PropagateWorkSourceTransactListener;->onTransactEnded(Ljava/lang/Object;)V
+Landroid/os/RemoteCallbackList;->beginBroadcast()I
+Landroid/os/BinderProxy;->getInstance(JJ)Landroid/os/BinderProxy;
+Landroid/content/Intent;->setAction(Ljava/lang/String;)Landroid/content/Intent;
+Landroid/view/Display$HdrCapabilities;->writeToParcel(Landroid/os/Parcel;I)V
+Landroid/graphics/Rect;->set(IIII)V
+Landroid/content/res/Configuration;->equals(Ljava/lang/Object;)Z
+Landroid/os/Message;->obtain(Landroid/os/Handler;ILjava/lang/Object;)Landroid/os/Message;
+Landroid/util/proto/ProtoOutputStream;->start(J)J
+Landroid/util/proto/ProtoOutputStream;->startObjectImpl(IZ)J
+Landroid/util/proto/ProtoOutputStream;->getTagSize(I)I
+Landroid/util/proto/ProtoOutputStream;->end(J)V
+Landroid/util/proto/ProtoOutputStream;->endObjectImpl(JZ)V
+Landroid/util/proto/ProtoStream;->getDepthFromToken(J)I
+Landroid/util/proto/ProtoOutputStream;->writeUnsignedVarintFromSignedInt(I)V
+Landroid/os/Handler;->obtainMessage(ILjava/lang/Object;)Landroid/os/Message;
+Landroid/graphics/Rect;->width()I
+Landroid/app/ApplicationPackageManager;->updateFlagsForApplication(II)I
+Lcom/android/internal/os/ZygoteArguments;->parseArgs([Ljava/lang/String;)V
+Landroid/os/RemoteCallbackList;->finishBroadcast()V
+Landroid/os/BinderProxy;->queryLocalInterface(Ljava/lang/String;)Landroid/os/IInterface;
+Landroid/content/Intent;-><init>(Landroid/content/Intent;I)V
+Landroid/content/Intent;->addFlags(I)Landroid/content/Intent;
+Landroid/content/ContentResolver;->registerContentObserver(Landroid/net/Uri;ZLandroid/database/ContentObserver;I)V
+Landroid/database/ContentObserver;->getContentObserver()Landroid/database/IContentObserver;
+Landroid/net/Uri$StringUri;->parsePath(Ljava/lang/String;I)Ljava/lang/String;
+Landroid/content/Intent;-><init>(Ljava/lang/String;)V
+Landroid/graphics/Rect;->height()I
+Landroid/provider/Settings$Global;->getStringForUser(Landroid/content/ContentResolver;Ljava/lang/String;I)Ljava/lang/String;
+Landroid/util/LongSparseArray;->valueAt(I)Ljava/lang/Object;
+Landroid/os/Handler;->removeMessages(I)V
+Landroid/net/Uri$Part;->from(Ljava/lang/String;Ljava/lang/String;)Landroid/net/Uri$Part;
+Landroid/os/Parcel;->writeBundle(Landroid/os/Bundle;)V
+Landroid/os/BaseBundle;->getBoolean(Ljava/lang/String;Z)Z
+Landroid/os/BinderProxy$ProxyMap;->set(JLandroid/os/BinderProxy;)V
+Landroid/provider/Settings$Global;->getString(Landroid/content/ContentResolver;Ljava/lang/String;)Ljava/lang/String;
+Landroid/util/ArraySet;->isEmpty()Z
+Landroid/app/ActivityManager;->checkComponentPermission(Ljava/lang/String;IIZ)I
+Landroid/database/IContentObserver$Stub$Proxy;->asBinder()Landroid/os/IBinder;
+Landroid/os/Parcel;->writeTypedArray([Landroid/os/Parcelable;I)V
+Landroid/os/BinderProxy;-><init>(J)V
+Landroid/content/IIntentReceiver$Stub$Proxy;->asBinder()Landroid/os/IBinder;
+Landroid/os/Parcel;->writeTypedList(Ljava/util/List;I)V
+Landroid/app/ApplicationPackageManager;->getApplicationInfoAsUser(Ljava/lang/String;II)Landroid/content/pm/ApplicationInfo;
+Landroid/app/ApplicationPackageManager;->maybeAdjustApplicationInfo(Landroid/content/pm/ApplicationInfo;)Landroid/content/pm/ApplicationInfo;
+Landroid/app/ContextImpl;->getUser()Landroid/os/UserHandle;
+Landroid/content/pm/PackageManager;->getApplicationInfoAsUser(Ljava/lang/String;ILandroid/os/UserHandle;)Landroid/content/pm/ApplicationInfo;
+Landroid/app/AppOpsManager;->strOpToOp(Ljava/lang/String;)I
+Landroid/app/AppOpsManager;->opToPublicName(I)Ljava/lang/String;
+Landroid/app/AppOpsManager;->unsafeCheckOpRaw(Ljava/lang/String;ILjava/lang/String;)I
+Landroid/database/sqlite/SQLiteClosable;->releaseReference()V
+Lcom/android/internal/util/function/pooled/PooledLambdaImpl;->acquire(Lcom/android/internal/util/function/pooled/PooledLambdaImpl$Pool;Ljava/lang/Object;IIILjava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Lcom/android/internal/util/function/pooled/PooledLambda;
+Lcom/android/internal/util/function/pooled/PooledLambdaImpl;->acquire(Lcom/android/internal/util/function/pooled/PooledLambdaImpl$Pool;)Lcom/android/internal/util/function/pooled/PooledLambdaImpl;
+Lcom/android/internal/util/function/pooled/PooledLambdaImpl;->recycleOnUse()Lcom/android/internal/util/function/pooled/PooledRunnable;
+Lcom/android/internal/util/function/pooled/PooledLambdaImpl;->recycleOnUse()Lcom/android/internal/util/function/pooled/OmniFunction;
+Landroid/os/Message;->setCallback(Ljava/lang/Runnable;)Landroid/os/Message;
+Landroid/util/LongSparseLongArray;->indexOfKey(J)I
+Lcom/android/internal/util/function/pooled/OmniFunction;->run()V
+Lcom/android/internal/util/function/pooled/PooledLambdaImpl;->doInvoke()Ljava/lang/Object;
+Lcom/android/internal/util/function/pooled/PooledLambdaImpl$LambdaType;->decodeReturnType(I)I
+Lcom/android/internal/util/function/pooled/PooledLambdaImpl;->access$100(II)I
Lcom/android/internal/util/function/pooled/PooledLambdaImpl;->doRecycle()V
-Landroid/os/Handler;->postAtFrontOfQueue(Ljava/lang/Runnable;)Z
+Landroid/util/Pair;->hashCode()I
+Landroid/content/pm/ApplicationInfo;->hasRequestedLegacyExternalStorage()Z
+Landroid/util/ArrayMap;->remove(Ljava/lang/Object;)Ljava/lang/Object;
+Landroid/util/ArraySet;->clear()V
+Landroid/app/IActivityManager$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+Landroid/text/TextUtils;->writeToParcel(Ljava/lang/CharSequence;Landroid/os/Parcel;I)V
+Landroid/os/Parcel;->writeMapInternal(Ljava/util/Map;)V
+Landroid/os/RemoteCallbackList;->getBroadcastItem(I)Landroid/os/IInterface;
+Landroid/app/WindowConfiguration;->canReceiveKeys()Z
+Landroid/graphics/Point;->offset(II)V
+Landroid/content/Intent;-><init>(Landroid/content/Intent;)V
+Landroid/os/Binder;->allowBlocking(Landroid/os/IBinder;)Landroid/os/IBinder;
+Landroid/os/Bundle;->hasFileDescriptors()Z
+Lcom/android/internal/app/procstats/ProcessStats;->updateTrackingAssociationsLocked(IJ)V
+Lcom/android/internal/app/procstats/SparseMappingTable$Table;->assertConsistency()V
+Lcom/android/internal/app/procstats/SparseMappingTable;->access$100(Lcom/android/internal/app/procstats/SparseMappingTable;)Ljava/util/ArrayList;
+Landroid/os/RemoteCallbackList;->getBroadcastCookie(I)Ljava/lang/Object;
+Landroid/net/Uri$StringUri;->parseAuthority(Ljava/lang/String;I)Ljava/lang/String;
+Landroid/os/ServiceManager;->getService(Ljava/lang/String;)Landroid/os/IBinder;
+Landroid/os/ServiceManager;->rawGetService(Ljava/lang/String;)Landroid/os/IBinder;
+Landroid/os/ServiceManagerProxy;->getService(Ljava/lang/String;)Landroid/os/IBinder;
+Landroid/os/IServiceManager$Stub$Proxy;->checkService(Ljava/lang/String;)Landroid/os/IBinder;
+Landroid/content/pm/PackageItemInfo;->writeToParcel(Landroid/os/Parcel;I)V
+Landroid/net/Uri$Part$EmptyPart;->isEmpty()Z
+Landroid/os/BaseBundle;-><init>(Landroid/os/BaseBundle;)V
+Landroid/os/Bundle;-><init>(Landroid/os/Bundle;)V
+Landroid/net/Uri$Part;->readFrom(Landroid/os/Parcel;)Landroid/net/Uri$Part;
+Landroid/content/ComponentName;->equals(Ljava/lang/Object;)Z
+Landroid/util/ArraySet;-><init>(Landroid/util/ArraySet;)V
+Landroid/os/Parcel;->createStringArray()[Ljava/lang/String;
+Landroid/os/Message;->setAsynchronous(Z)V
+Landroid/os/Parcel;->writeTypedList(Ljava/util/List;)V
+Landroid/os/Message;->obtain(Landroid/os/Handler;I)Landroid/os/Message;
+Lcom/android/internal/os/BatteryStatsImpl$StopwatchTimer;->refreshTimersLocked(JLjava/util/ArrayList;Lcom/android/internal/os/BatteryStatsImpl$StopwatchTimer;)J
+Landroid/os/Handler;->obtainMessage(I)Landroid/os/Message;
+Landroid/os/storage/StorageManager;->isUserKeyUnlocked(I)Z
+Landroid/hardware/display/IDisplayManager$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+Landroid/os/Bundle;->writeToParcel(Landroid/os/Parcel;I)V
+Landroid/os/Parcel;->pushAllowFds(Z)Z
+Landroid/os/BaseBundle;->writeToParcelInner(Landroid/os/Parcel;I)V
+Landroid/os/Parcel;->restoreAllowFds(Z)V
+Landroid/content/pm/ApplicationInfo;->isEncryptionAware()Z
+Lcom/android/internal/app/procstats/ProcessState;->setCombinedState(IJ)V
+Landroid/os/Message;->obtain(Landroid/os/Handler;III)Landroid/os/Message;
+Landroid/hardware/display/DisplayManagerInternal$DisplayPowerRequest;->isBrightOrDim()Z
+Landroid/content/pm/ParceledListSlice;-><init>(Ljava/util/List;)V
+Landroid/content/pm/BaseParceledListSlice;-><init>(Ljava/util/List;)V
+Lcom/android/internal/app/procstats/AssociationState$SourceState;->trackProcState(IIJ)V
+Landroid/content/Intent;->resolveTypeIfNeeded(Landroid/content/ContentResolver;)Ljava/lang/String;
+Landroid/net/Uri$Part;->fromEncoded(Ljava/lang/String;)Landroid/net/Uri$Part;
+Landroid/os/MessageQueue;->hasMessages(Landroid/os/Handler;Ljava/lang/Runnable;Ljava/lang/Object;)Z
+Lcom/android/internal/app/procstats/AssociationState$SourceState;->getAssociationState()Lcom/android/internal/app/procstats/AssociationState;
+Lcom/android/internal/app/procstats/AssociationState;->getProcess()Lcom/android/internal/app/procstats/ProcessState;
+Lcom/android/internal/app/procstats/ProcessState;->getCombinedState()I
+Lcom/android/internal/app/procstats/AssociationState$SourceState;->startActive(J)V
+Landroid/net/Uri$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
+Landroid/net/Uri$1;->createFromParcel(Landroid/os/Parcel;)Landroid/net/Uri;
+Landroid/content/Intent;->getSelector()Landroid/content/Intent;
+Lcom/android/internal/os/BatteryStatsImpl$StopwatchTimer;->startRunningLocked(J)V
+Lcom/android/internal/app/ProcessMap;->get(Ljava/lang/String;I)Ljava/lang/Object;
+Landroid/app/IApplicationThread$Stub;->asInterface(Landroid/os/IBinder;)Landroid/app/IApplicationThread;
+Landroid/app/IApplicationThread$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+Lcom/android/internal/os/BatteryStatsImpl$DurationTimer;->startRunningLocked(J)V
+Lcom/android/internal/os/BatteryStatsImpl$StopwatchTimer;->stopRunningLocked(J)V
+Landroid/net/Uri$Part;-><init>(Ljava/lang/String;Ljava/lang/String;)V
+Lcom/android/internal/os/BatteryStatsImpl$DurationTimer;->stopRunningLocked(J)V
+Lcom/android/internal/os/BatteryStatsImpl;->mapUid(I)I
+Landroid/content/Intent;->hasFileDescriptors()Z
+Landroid/content/pm/ComponentInfo;-><init>(Landroid/content/pm/ComponentInfo;)V
+Landroid/os/ZygoteProcess;->zygoteSendArgsAndGetResult(Landroid/os/ZygoteProcess$ZygoteState;ZLjava/util/ArrayList;)Landroid/os/Process$ProcessStartResult;
+Landroid/os/Handler;->obtainMessage(III)Landroid/os/Message;
+Landroid/os/BaseBundle;->getBoolean(Ljava/lang/String;)Z
+Landroid/view/DisplayCutout$ParcelableWrapper;->writeCutoutToParcel(Landroid/view/DisplayCutout;Landroid/os/Parcel;I)V
+Landroid/view/DisplayAddress$Physical;->writeToParcel(Landroid/os/Parcel;I)V
+Lcom/android/internal/os/BatteryStatsImpl;->getUidStatsLocked(I)Lcom/android/internal/os/BatteryStatsImpl$Uid;
+Landroid/content/pm/ResolveInfo;-><init>()V
+Landroid/util/KeyValueListParser$IntValue;->getValue()I
+Landroid/os/Parcel;->writeList(Ljava/util/List;)V
+Landroid/view/SurfaceControl;->checkNotReleased()V
+Landroid/content/pm/IPackageManager$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+Landroid/os/IPowerManager$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+Landroid/graphics/Rect;->writeToParcel(Landroid/os/Parcel;I)V
+Landroid/content/pm/ParceledListSlice;->getList()Ljava/util/List;
+Landroid/content/pm/BaseParceledListSlice;->getList()Ljava/util/List;
+Landroid/os/Parcel;->writeBoolean(Z)V
+Landroid/telecom/PhoneAccount;->hasCapabilities(I)Z
+Landroid/content/IIntentReceiver$Stub;->asInterface(Landroid/os/IBinder;)Landroid/content/IIntentReceiver;
+Landroid/os/BaseBundle;->isParcelled()Z
+Landroid/os/PowerSaveState$Builder;-><init>()V
+Landroid/os/PowerSaveState$Builder;->setGlobalBatterySaverEnabled(Z)Landroid/os/PowerSaveState$Builder;
+Landroid/os/PowerSaveState$Builder;->setBatterySaverEnabled(Z)Landroid/os/PowerSaveState$Builder;
+Landroid/os/PowerSaveState$Builder;->build()Landroid/os/PowerSaveState;
+Landroid/os/PowerSaveState;-><init>(Landroid/os/PowerSaveState$Builder;)V
+Landroid/os/PowerSaveState$Builder;->access$000(Landroid/os/PowerSaveState$Builder;)Z
+Landroid/os/PowerSaveState$Builder;->access$100(Landroid/os/PowerSaveState$Builder;)I
+Landroid/os/PowerSaveState$Builder;->access$200(Landroid/os/PowerSaveState$Builder;)F
+Landroid/os/PowerSaveState$Builder;->access$300(Landroid/os/PowerSaveState$Builder;)Z
+Lcom/android/internal/os/BatteryStatsImpl$Uid;->createAggregatedPartialWakelockTimerLocked()Lcom/android/internal/os/BatteryStatsImpl$DualTimer;
+Landroid/content/pm/ApplicationInfo;->writeToParcel(Landroid/os/Parcel;I)V
+Landroid/os/Parcel;->writeSparseArray(Landroid/util/SparseArray;)V
+Landroid/os/PowerSaveState$Builder;->setBrightnessFactor(F)Landroid/os/PowerSaveState$Builder;
+Landroid/hardware/display/DisplayManagerInternal$DisplayPowerRequest;->equals(Landroid/hardware/display/DisplayManagerInternal$DisplayPowerRequest;)Z
+Landroid/hardware/display/DisplayManagerInternal$DisplayPowerRequest;->floatEquals(FF)Z
+Landroid/view/Choreographer;->doCallbacks(IJ)V
+Lcom/android/internal/os/BatteryStatsImpl$DualTimer;->startRunningLocked(J)V
+Landroid/graphics/Point;->set(II)V
+Landroid/view/SurfaceControl;->access$800(Landroid/view/SurfaceControl;)V
+Landroid/graphics/Point;->equals(Ljava/lang/Object;)Z
+Lcom/android/internal/os/BatteryStatsImpl;->getPowerManagerWakeLockLevel(I)I
+Landroid/content/Context;->getSystemService(Ljava/lang/Class;)Ljava/lang/Object;
+Landroid/app/ContextImpl;->getSystemServiceName(Ljava/lang/Class;)Ljava/lang/String;
+Landroid/app/SystemServiceRegistry;->getSystemServiceName(Ljava/lang/Class;)Ljava/lang/String;
+Lcom/android/internal/os/BatteryStatsImpl$DualTimer;->stopRunningLocked(J)V
+Landroid/app/AppOpsManager;->getToken(Lcom/android/internal/app/IAppOpsService;)Landroid/os/IBinder;
+Landroid/os/Bundle;->forPair(Ljava/lang/String;Ljava/lang/String;)Landroid/os/Bundle;
+Landroid/os/Bundle;-><init>(I)V
+Landroid/os/BaseBundle;-><init>(I)V
+Landroid/os/HwParcel;-><init>()V
+Landroid/view/SurfaceControl$Transaction;->merge(Landroid/view/SurfaceControl$Transaction;)Landroid/view/SurfaceControl$Transaction;
+Landroid/view/SurfaceControl;->access$4100(JJ)V
+Landroid/view/Choreographer$CallbackQueue;->extractDueCallbacksLocked(J)Landroid/view/Choreographer$CallbackRecord;
+Landroid/graphics/Rect;->offset(II)V
+Landroid/os/PowerManager;->validateWakeLockParameters(ILjava/lang/String;)V
+Landroid/app/AppOpsManager;->checkPackage(ILjava/lang/String;)V
+Landroid/util/SparseArray;->indexOfKey(I)I
+Landroid/content/Intent;->resolveType(Landroid/content/ContentResolver;)Ljava/lang/String;
+Lcom/android/internal/os/BatteryStatsImpl;->noteStartWakeLocked(IILandroid/os/WorkSource$WorkChain;Ljava/lang/String;Ljava/lang/String;IZJJ)V
+Lcom/android/internal/os/BatteryStatsImpl;->aggregateLastWakeupUptimeLocked(J)V
+Lcom/android/internal/os/BatteryStatsImpl$Uid;->noteStartWakeLocked(ILjava/lang/String;IJ)V
+Lcom/android/internal/os/BatteryStatsImpl$OverflowArrayMap;->startObject(Ljava/lang/String;)Ljava/lang/Object;
+Lcom/android/internal/os/BatteryStatsImpl$Uid;->getPidStatsLocked(I)Landroid/os/BatteryStats$Uid$Pid;
+Landroid/content/ComponentName;->writeToParcel(Landroid/content/ComponentName;Landroid/os/Parcel;)V
+Landroid/content/ContextWrapper;->getContentResolver()Landroid/content/ContentResolver;
+Landroid/content/Intent;->writeToParcel(Landroid/os/Parcel;I)V
+Landroid/content/res/Resources;->getBoolean(I)Z
+Landroid/net/Uri;->writeToParcel(Landroid/os/Parcel;Landroid/net/Uri;)V
+Landroid/view/InsetsSource;->getType()I
diff --git a/core/java/android/accessibilityservice/AccessibilityService.java b/core/java/android/accessibilityservice/AccessibilityService.java
index 827e5408403a..4730bd0880a3 100644
--- a/core/java/android/accessibilityservice/AccessibilityService.java
+++ b/core/java/android/accessibilityservice/AccessibilityService.java
@@ -391,7 +391,8 @@ public abstract class AccessibilityService extends Service {
void onPerformGestureResult(int sequence, boolean completedSuccessfully);
void onFingerprintCapturingGesturesChanged(boolean active);
void onFingerprintGesture(int gesture);
- void onAccessibilityButtonClicked();
+ /** Accessbility button clicked callbacks for different displays */
+ void onAccessibilityButtonClicked(int displayId);
void onAccessibilityButtonAvailabilityChanged(boolean available);
}
@@ -459,7 +460,8 @@ public abstract class AccessibilityService extends Service {
private final SparseArray<MagnificationController> mMagnificationControllers =
new SparseArray<>(0);
private SoftKeyboardController mSoftKeyboardController;
- private AccessibilityButtonController mAccessibilityButtonController;
+ private final SparseArray<AccessibilityButtonController> mAccessibilityButtonControllers =
+ new SparseArray<>(0);
private int mGestureStatusCallbackSequence;
@@ -1521,17 +1523,40 @@ public abstract class AccessibilityService extends Service {
*/
@NonNull
public final AccessibilityButtonController getAccessibilityButtonController() {
+ return getAccessibilityButtonController(Display.DEFAULT_DISPLAY);
+ }
+
+ /**
+ * Returns the controller of specified logical display for the accessibility button within the
+ * system's navigation area. This instance may be used to query the accessibility button's
+ * state and register listeners for interactions with and state changes for the accessibility
+ * button when {@link AccessibilityServiceInfo#FLAG_REQUEST_ACCESSIBILITY_BUTTON} is set.
+ * <p>
+ * <strong>Note:</strong> Not all devices are capable of displaying the accessibility button
+ * within a navigation area, and as such, use of this class should be considered only as an
+ * optional feature or shortcut on supported device implementations.
+ * </p>
+ *
+ * @param displayId The logic display id, use {@link Display#DEFAULT_DISPLAY} for default
+ * display.
+ * @return the accessibility button controller for this {@link AccessibilityService}
+ */
+ @NonNull
+ public final AccessibilityButtonController getAccessibilityButtonController(int displayId) {
synchronized (mLock) {
- if (mAccessibilityButtonController == null) {
- mAccessibilityButtonController = new AccessibilityButtonController(
+ AccessibilityButtonController controller = mAccessibilityButtonControllers.get(
+ displayId);
+ if (controller == null) {
+ controller = new AccessibilityButtonController(
AccessibilityInteractionClient.getInstance().getConnection(mConnectionId));
+ mAccessibilityButtonControllers.put(displayId, controller);
}
- return mAccessibilityButtonController;
+ return controller;
}
}
- private void onAccessibilityButtonClicked() {
- getAccessibilityButtonController().dispatchAccessibilityButtonClicked();
+ private void onAccessibilityButtonClicked(int displayId) {
+ getAccessibilityButtonController(displayId).dispatchAccessibilityButtonClicked();
}
private void onAccessibilityButtonAvailabilityChanged(boolean available) {
@@ -1737,8 +1762,8 @@ public abstract class AccessibilityService extends Service {
}
@Override
- public void onAccessibilityButtonClicked() {
- AccessibilityService.this.onAccessibilityButtonClicked();
+ public void onAccessibilityButtonClicked(int displayId) {
+ AccessibilityService.this.onAccessibilityButtonClicked(displayId);
}
@Override
@@ -1852,8 +1877,10 @@ public abstract class AccessibilityService extends Service {
mCaller.sendMessage(mCaller.obtainMessageI(DO_ON_FINGERPRINT_GESTURE, gesture));
}
- public void onAccessibilityButtonClicked() {
- final Message message = mCaller.obtainMessage(DO_ACCESSIBILITY_BUTTON_CLICKED);
+ /** Accessibility button clicked callbacks for different displays */
+ public void onAccessibilityButtonClicked(int displayId) {
+ final Message message = mCaller.obtainMessageI(DO_ACCESSIBILITY_BUTTON_CLICKED,
+ displayId);
mCaller.sendMessage(message);
}
@@ -1987,7 +2014,7 @@ public abstract class AccessibilityService extends Service {
case (DO_ACCESSIBILITY_BUTTON_CLICKED): {
if (mConnectionId != AccessibilityInteractionClient.NO_ID) {
- mCallback.onAccessibilityButtonClicked();
+ mCallback.onAccessibilityButtonClicked(message.arg1);
}
} return;
diff --git a/core/java/android/accessibilityservice/IAccessibilityServiceClient.aidl b/core/java/android/accessibilityservice/IAccessibilityServiceClient.aidl
index 407ba59c3297..e0d5e4438f23 100644
--- a/core/java/android/accessibilityservice/IAccessibilityServiceClient.aidl
+++ b/core/java/android/accessibilityservice/IAccessibilityServiceClient.aidl
@@ -52,7 +52,7 @@ import android.view.KeyEvent;
void onFingerprintGesture(int gesture);
- void onAccessibilityButtonClicked();
+ void onAccessibilityButtonClicked(int displayId);
void onAccessibilityButtonAvailabilityChanged(boolean available);
}
diff --git a/core/java/android/app/ActivityThread.java b/core/java/android/app/ActivityThread.java
index 50f945b095cb..553ef69fe8e2 100644
--- a/core/java/android/app/ActivityThread.java
+++ b/core/java/android/app/ActivityThread.java
@@ -2492,13 +2492,15 @@ public final class ActivityThread extends ClientTransactionHandler {
}
}
- private static final String HEAP_FULL_COLUMN
- = "%13s %8s %8s %8s %8s %8s %8s %8s %8s %8s %8s";
- private static final String HEAP_COLUMN
- = "%13s %8s %8s %8s %8s %8s %8s %8s";
+ private static final String HEAP_FULL_COLUMN =
+ "%13s %8s %8s %8s %8s %8s %8s %8s %8s %8s %8s %8s";
+ private static final String HEAP_COLUMN =
+ "%13s %8s %8s %8s %8s %8s %8s %8s %8s";
private static final String ONE_COUNT_COLUMN = "%21s %8d";
private static final String TWO_COUNT_COLUMNS = "%21s %8d %21s %8d";
- private static final String ONE_COUNT_COLUMN_HEADER = "%21s %8s";
+ private static final String THREE_COUNT_COLUMNS = "%21s %8d %21s %8s %21s %8d";
+ private static final String TWO_COUNT_COLUMN_HEADER = "%21s %8s %21s %8s";
+ private static final String ONE_ALT_COUNT_COLUMN = "%21s %8s %21s %8d";
// Formatting for checkin service - update version if row format changes
private static final int ACTIVITY_THREAD_CHECKIN_VERSION = 4;
@@ -2619,43 +2621,43 @@ public final class ActivityThread extends ClientTransactionHandler {
if (dumpFullInfo) {
printRow(pw, HEAP_FULL_COLUMN, "", "Pss", "Pss", "Shared", "Private",
"Shared", "Private", memInfo.hasSwappedOutPss ? "SwapPss" : "Swap",
- "Heap", "Heap", "Heap");
+ "Rss", "Heap", "Heap", "Heap");
printRow(pw, HEAP_FULL_COLUMN, "", "Total", "Clean", "Dirty", "Dirty",
- "Clean", "Clean", "Dirty",
+ "Clean", "Clean", "Dirty", "Total",
"Size", "Alloc", "Free");
printRow(pw, HEAP_FULL_COLUMN, "", "------", "------", "------", "------",
- "------", "------", "------", "------", "------", "------");
+ "------", "------", "------", "------", "------", "------", "------");
printRow(pw, HEAP_FULL_COLUMN, "Native Heap", memInfo.nativePss,
memInfo.nativeSwappablePss, memInfo.nativeSharedDirty,
memInfo.nativePrivateDirty, memInfo.nativeSharedClean,
memInfo.nativePrivateClean, memInfo.hasSwappedOutPss ?
memInfo.nativeSwappedOutPss : memInfo.nativeSwappedOut,
- nativeMax, nativeAllocated, nativeFree);
+ memInfo.nativeRss, nativeMax, nativeAllocated, nativeFree);
printRow(pw, HEAP_FULL_COLUMN, "Dalvik Heap", memInfo.dalvikPss,
memInfo.dalvikSwappablePss, memInfo.dalvikSharedDirty,
memInfo.dalvikPrivateDirty, memInfo.dalvikSharedClean,
memInfo.dalvikPrivateClean, memInfo.hasSwappedOutPss ?
memInfo.dalvikSwappedOutPss : memInfo.dalvikSwappedOut,
- dalvikMax, dalvikAllocated, dalvikFree);
+ memInfo.dalvikRss, dalvikMax, dalvikAllocated, dalvikFree);
} else {
printRow(pw, HEAP_COLUMN, "", "Pss", "Private",
"Private", memInfo.hasSwappedOutPss ? "SwapPss" : "Swap",
- "Heap", "Heap", "Heap");
+ "Rss", "Heap", "Heap", "Heap");
printRow(pw, HEAP_COLUMN, "", "Total", "Dirty",
- "Clean", "Dirty", "Size", "Alloc", "Free");
+ "Clean", "Dirty", "Total", "Size", "Alloc", "Free");
printRow(pw, HEAP_COLUMN, "", "------", "------", "------",
- "------", "------", "------", "------", "------");
+ "------", "------", "------", "------", "------", "------");
printRow(pw, HEAP_COLUMN, "Native Heap", memInfo.nativePss,
memInfo.nativePrivateDirty,
memInfo.nativePrivateClean,
memInfo.hasSwappedOutPss ? memInfo.nativeSwappedOutPss :
- memInfo.nativeSwappedOut,
+ memInfo.nativeSwappedOut, memInfo.nativeRss,
nativeMax, nativeAllocated, nativeFree);
printRow(pw, HEAP_COLUMN, "Dalvik Heap", memInfo.dalvikPss,
memInfo.dalvikPrivateDirty,
memInfo.dalvikPrivateClean,
memInfo.hasSwappedOutPss ? memInfo.dalvikSwappedOutPss :
- memInfo.dalvikSwappedOut,
+ memInfo.dalvikSwappedOut, memInfo.dalvikRss,
dalvikMax, dalvikAllocated, dalvikFree);
}
@@ -2667,6 +2669,7 @@ public final class ActivityThread extends ClientTransactionHandler {
int otherPrivateClean = memInfo.otherPrivateClean;
int otherSwappedOut = memInfo.otherSwappedOut;
int otherSwappedOutPss = memInfo.otherSwappedOutPss;
+ int otherRss = memInfo.otherRss;
for (int i=0; i<Debug.MemoryInfo.NUM_OTHER_STATS; i++) {
final int myPss = memInfo.getOtherPss(i);
@@ -2677,21 +2680,22 @@ public final class ActivityThread extends ClientTransactionHandler {
final int myPrivateClean = memInfo.getOtherPrivateClean(i);
final int mySwappedOut = memInfo.getOtherSwappedOut(i);
final int mySwappedOutPss = memInfo.getOtherSwappedOutPss(i);
+ final int myRss = memInfo.getOtherRss(i);
if (myPss != 0 || mySharedDirty != 0 || myPrivateDirty != 0
- || mySharedClean != 0 || myPrivateClean != 0
+ || mySharedClean != 0 || myPrivateClean != 0 || myRss != 0
|| (memInfo.hasSwappedOutPss ? mySwappedOutPss : mySwappedOut) != 0) {
if (dumpFullInfo) {
printRow(pw, HEAP_FULL_COLUMN, Debug.MemoryInfo.getOtherLabel(i),
myPss, mySwappablePss, mySharedDirty, myPrivateDirty,
mySharedClean, myPrivateClean,
memInfo.hasSwappedOutPss ? mySwappedOutPss : mySwappedOut,
- "", "", "");
+ myRss, "", "", "");
} else {
printRow(pw, HEAP_COLUMN, Debug.MemoryInfo.getOtherLabel(i),
myPss, myPrivateDirty,
myPrivateClean,
memInfo.hasSwappedOutPss ? mySwappedOutPss : mySwappedOut,
- "", "", "");
+ myRss, "", "", "");
}
otherPss -= myPss;
otherSwappablePss -= mySwappablePss;
@@ -2701,6 +2705,7 @@ public final class ActivityThread extends ClientTransactionHandler {
otherPrivateClean -= myPrivateClean;
otherSwappedOut -= mySwappedOut;
otherSwappedOutPss -= mySwappedOutPss;
+ otherRss -= myRss;
}
}
@@ -2708,25 +2713,25 @@ public final class ActivityThread extends ClientTransactionHandler {
printRow(pw, HEAP_FULL_COLUMN, "Unknown", otherPss, otherSwappablePss,
otherSharedDirty, otherPrivateDirty, otherSharedClean, otherPrivateClean,
memInfo.hasSwappedOutPss ? otherSwappedOutPss : otherSwappedOut,
- "", "", "");
+ otherRss, "", "", "");
printRow(pw, HEAP_FULL_COLUMN, "TOTAL", memInfo.getTotalPss(),
memInfo.getTotalSwappablePss(),
memInfo.getTotalSharedDirty(), memInfo.getTotalPrivateDirty(),
memInfo.getTotalSharedClean(), memInfo.getTotalPrivateClean(),
memInfo.hasSwappedOutPss ? memInfo.getTotalSwappedOutPss() :
- memInfo.getTotalSwappedOut(),
+ memInfo.getTotalSwappedOut(), memInfo.getTotalRss(),
nativeMax+dalvikMax, nativeAllocated+dalvikAllocated,
nativeFree+dalvikFree);
} else {
printRow(pw, HEAP_COLUMN, "Unknown", otherPss,
otherPrivateDirty, otherPrivateClean,
memInfo.hasSwappedOutPss ? otherSwappedOutPss : otherSwappedOut,
- "", "", "");
+ otherRss, "", "", "");
printRow(pw, HEAP_COLUMN, "TOTAL", memInfo.getTotalPss(),
memInfo.getTotalPrivateDirty(),
memInfo.getTotalPrivateClean(),
memInfo.hasSwappedOutPss ? memInfo.getTotalSwappedOutPss() :
- memInfo.getTotalSwappedOut(),
+ memInfo.getTotalSwappedOut(), memInfo.getTotalPss(),
nativeMax+dalvikMax,
nativeAllocated+dalvikAllocated, nativeFree+dalvikFree);
}
@@ -2745,6 +2750,7 @@ public final class ActivityThread extends ClientTransactionHandler {
final int myPrivateClean = memInfo.getOtherPrivateClean(i);
final int mySwappedOut = memInfo.getOtherSwappedOut(i);
final int mySwappedOutPss = memInfo.getOtherSwappedOutPss(i);
+ final int myRss = memInfo.getOtherRss(i);
if (myPss != 0 || mySharedDirty != 0 || myPrivateDirty != 0
|| mySharedClean != 0 || myPrivateClean != 0
|| (memInfo.hasSwappedOutPss ? mySwappedOutPss : mySwappedOut) != 0) {
@@ -2753,13 +2759,13 @@ public final class ActivityThread extends ClientTransactionHandler {
myPss, mySwappablePss, mySharedDirty, myPrivateDirty,
mySharedClean, myPrivateClean,
memInfo.hasSwappedOutPss ? mySwappedOutPss : mySwappedOut,
- "", "", "");
+ myRss, "", "", "");
} else {
printRow(pw, HEAP_COLUMN, Debug.MemoryInfo.getOtherLabel(i),
myPss, myPrivateDirty,
myPrivateClean,
memInfo.hasSwappedOutPss ? mySwappedOutPss : mySwappedOut,
- "", "", "");
+ myRss, "", "", "");
}
}
}
@@ -2768,31 +2774,36 @@ public final class ActivityThread extends ClientTransactionHandler {
pw.println(" ");
pw.println(" App Summary");
- printRow(pw, ONE_COUNT_COLUMN_HEADER, "", "Pss(KB)");
- printRow(pw, ONE_COUNT_COLUMN_HEADER, "", "------");
- printRow(pw, ONE_COUNT_COLUMN,
- "Java Heap:", memInfo.getSummaryJavaHeap());
+ printRow(pw, TWO_COUNT_COLUMN_HEADER, "", "Pss(KB)", "", "Rss(KB)");
+ printRow(pw, TWO_COUNT_COLUMN_HEADER, "", "------", "", "------");
+ printRow(pw, TWO_COUNT_COLUMNS,
+ "Java Heap:", memInfo.getSummaryJavaHeap(), "", memInfo.getSummaryJavaHeapRss());
+ printRow(pw, TWO_COUNT_COLUMNS,
+ "Native Heap:", memInfo.getSummaryNativeHeap(), "",
+ memInfo.getSummaryNativeHeapRss());
+ printRow(pw, TWO_COUNT_COLUMNS,
+ "Code:", memInfo.getSummaryCode(), "", memInfo.getSummaryCodeRss());
+ printRow(pw, TWO_COUNT_COLUMNS,
+ "Stack:", memInfo.getSummaryStack(), "", memInfo.getSummaryStackRss());
+ printRow(pw, TWO_COUNT_COLUMNS,
+ "Graphics:", memInfo.getSummaryGraphics(), "", memInfo.getSummaryGraphicsRss());
printRow(pw, ONE_COUNT_COLUMN,
- "Native Heap:", memInfo.getSummaryNativeHeap());
+ "Private Other:", memInfo.getSummaryPrivateOther());
printRow(pw, ONE_COUNT_COLUMN,
- "Code:", memInfo.getSummaryCode());
- printRow(pw, ONE_COUNT_COLUMN,
- "Stack:", memInfo.getSummaryStack());
- printRow(pw, ONE_COUNT_COLUMN,
- "Graphics:", memInfo.getSummaryGraphics());
- printRow(pw, ONE_COUNT_COLUMN,
- "Private Other:", memInfo.getSummaryPrivateOther());
- printRow(pw, ONE_COUNT_COLUMN,
- "System:", memInfo.getSummarySystem());
+ "System:", memInfo.getSummarySystem());
+ printRow(pw, ONE_ALT_COUNT_COLUMN,
+ "Unknown:", "", "", memInfo.getSummaryUnknownRss());
pw.println(" ");
if (memInfo.hasSwappedOutPss) {
- printRow(pw, TWO_COUNT_COLUMNS,
- "TOTAL:", memInfo.getSummaryTotalPss(),
- "TOTAL SWAP PSS:", memInfo.getSummaryTotalSwapPss());
+ printRow(pw, THREE_COUNT_COLUMNS,
+ "TOTAL PSS:", memInfo.getSummaryTotalPss(),
+ "TOTAL RSS:", memInfo.getTotalRss(),
+ "TOTAL SWAP PSS:", memInfo.getSummaryTotalSwapPss());
} else {
- printRow(pw, TWO_COUNT_COLUMNS,
- "TOTAL:", memInfo.getSummaryTotalPss(),
- "TOTAL SWAP (KB):", memInfo.getSummaryTotalSwap());
+ printRow(pw, THREE_COUNT_COLUMNS,
+ "TOTAL PSS:", memInfo.getSummaryTotalPss(),
+ "TOTAL RSS:", memInfo.getTotalRss(),
+ "TOTAL SWAP (KB):", memInfo.getSummaryTotalSwap());
}
}
@@ -2804,7 +2815,7 @@ public final class ActivityThread extends ClientTransactionHandler {
private static void dumpMemoryInfo(ProtoOutputStream proto, long fieldId, String name,
int pss, int cleanPss, int sharedDirty, int privateDirty,
int sharedClean, int privateClean,
- boolean hasSwappedOutPss, int dirtySwap, int dirtySwapPss) {
+ boolean hasSwappedOutPss, int dirtySwap, int dirtySwapPss, int rss) {
final long token = proto.start(fieldId);
proto.write(MemInfoDumpProto.ProcessMemory.MemoryInfo.NAME, name);
@@ -2819,6 +2830,7 @@ public final class ActivityThread extends ClientTransactionHandler {
} else {
proto.write(MemInfoDumpProto.ProcessMemory.MemoryInfo.DIRTY_SWAP_KB, dirtySwap);
}
+ proto.write(MemInfoDumpProto.ProcessMemory.MemoryInfo.TOTAL_RSS_KB, rss);
proto.end(token);
}
@@ -2837,7 +2849,8 @@ public final class ActivityThread extends ClientTransactionHandler {
memInfo.nativePss, memInfo.nativeSwappablePss, memInfo.nativeSharedDirty,
memInfo.nativePrivateDirty, memInfo.nativeSharedClean,
memInfo.nativePrivateClean, memInfo.hasSwappedOutPss,
- memInfo.nativeSwappedOut, memInfo.nativeSwappedOutPss);
+ memInfo.nativeSwappedOut, memInfo.nativeSwappedOutPss,
+ memInfo.nativeRss);
proto.write(MemInfoDumpProto.ProcessMemory.HeapInfo.HEAP_SIZE_KB, nativeMax);
proto.write(MemInfoDumpProto.ProcessMemory.HeapInfo.HEAP_ALLOC_KB, nativeAllocated);
proto.write(MemInfoDumpProto.ProcessMemory.HeapInfo.HEAP_FREE_KB, nativeFree);
@@ -2848,7 +2861,8 @@ public final class ActivityThread extends ClientTransactionHandler {
memInfo.dalvikPss, memInfo.dalvikSwappablePss, memInfo.dalvikSharedDirty,
memInfo.dalvikPrivateDirty, memInfo.dalvikSharedClean,
memInfo.dalvikPrivateClean, memInfo.hasSwappedOutPss,
- memInfo.dalvikSwappedOut, memInfo.dalvikSwappedOutPss);
+ memInfo.dalvikSwappedOut, memInfo.dalvikSwappedOutPss,
+ memInfo.dalvikRss);
proto.write(MemInfoDumpProto.ProcessMemory.HeapInfo.HEAP_SIZE_KB, dalvikMax);
proto.write(MemInfoDumpProto.ProcessMemory.HeapInfo.HEAP_ALLOC_KB, dalvikAllocated);
proto.write(MemInfoDumpProto.ProcessMemory.HeapInfo.HEAP_FREE_KB, dalvikFree);
@@ -2862,6 +2876,7 @@ public final class ActivityThread extends ClientTransactionHandler {
int otherPrivateClean = memInfo.otherPrivateClean;
int otherSwappedOut = memInfo.otherSwappedOut;
int otherSwappedOutPss = memInfo.otherSwappedOutPss;
+ int otherRss = memInfo.otherRss;
for (int i = 0; i < Debug.MemoryInfo.NUM_OTHER_STATS; i++) {
final int myPss = memInfo.getOtherPss(i);
@@ -2872,14 +2887,15 @@ public final class ActivityThread extends ClientTransactionHandler {
final int myPrivateClean = memInfo.getOtherPrivateClean(i);
final int mySwappedOut = memInfo.getOtherSwappedOut(i);
final int mySwappedOutPss = memInfo.getOtherSwappedOutPss(i);
+ final int myRss = memInfo.getOtherRss(i);
if (myPss != 0 || mySharedDirty != 0 || myPrivateDirty != 0
- || mySharedClean != 0 || myPrivateClean != 0
+ || mySharedClean != 0 || myPrivateClean != 0 || myRss != 0
|| (memInfo.hasSwappedOutPss ? mySwappedOutPss : mySwappedOut) != 0) {
dumpMemoryInfo(proto, MemInfoDumpProto.ProcessMemory.OTHER_HEAPS,
Debug.MemoryInfo.getOtherLabel(i),
myPss, mySwappablePss, mySharedDirty, myPrivateDirty,
mySharedClean, myPrivateClean,
- memInfo.hasSwappedOutPss, mySwappedOut, mySwappedOutPss);
+ memInfo.hasSwappedOutPss, mySwappedOut, mySwappedOutPss, myRss);
otherPss -= myPss;
otherSwappablePss -= mySwappablePss;
@@ -2889,20 +2905,21 @@ public final class ActivityThread extends ClientTransactionHandler {
otherPrivateClean -= myPrivateClean;
otherSwappedOut -= mySwappedOut;
otherSwappedOutPss -= mySwappedOutPss;
+ otherRss -= myRss;
}
}
dumpMemoryInfo(proto, MemInfoDumpProto.ProcessMemory.UNKNOWN_HEAP, "Unknown",
otherPss, otherSwappablePss,
otherSharedDirty, otherPrivateDirty, otherSharedClean, otherPrivateClean,
- memInfo.hasSwappedOutPss, otherSwappedOut, otherSwappedOutPss);
+ memInfo.hasSwappedOutPss, otherSwappedOut, otherSwappedOutPss, otherRss);
final long tToken = proto.start(MemInfoDumpProto.ProcessMemory.TOTAL_HEAP);
dumpMemoryInfo(proto, MemInfoDumpProto.ProcessMemory.HeapInfo.MEM_INFO, "TOTAL",
memInfo.getTotalPss(), memInfo.getTotalSwappablePss(),
memInfo.getTotalSharedDirty(), memInfo.getTotalPrivateDirty(),
memInfo.getTotalSharedClean(), memInfo.getTotalPrivateClean(),
memInfo.hasSwappedOutPss, memInfo.getTotalSwappedOut(),
- memInfo.getTotalSwappedOutPss());
+ memInfo.getTotalSwappedOutPss(), memInfo.getTotalRss());
proto.write(MemInfoDumpProto.ProcessMemory.HeapInfo.HEAP_SIZE_KB,
nativeMax + dalvikMax);
proto.write(MemInfoDumpProto.ProcessMemory.HeapInfo.HEAP_ALLOC_KB,
@@ -2923,6 +2940,7 @@ public final class ActivityThread extends ClientTransactionHandler {
final int myPrivateClean = memInfo.getOtherPrivateClean(i);
final int mySwappedOut = memInfo.getOtherSwappedOut(i);
final int mySwappedOutPss = memInfo.getOtherSwappedOutPss(i);
+ final int myRss = memInfo.getOtherRss(i);
if (myPss != 0 || mySharedDirty != 0 || myPrivateDirty != 0
|| mySharedClean != 0 || myPrivateClean != 0
|| (memInfo.hasSwappedOutPss ? mySwappedOutPss : mySwappedOut) != 0) {
@@ -2930,7 +2948,7 @@ public final class ActivityThread extends ClientTransactionHandler {
Debug.MemoryInfo.getOtherLabel(i),
myPss, mySwappablePss, mySharedDirty, myPrivateDirty,
mySharedClean, myPrivateClean,
- memInfo.hasSwappedOutPss, mySwappedOut, mySwappedOutPss);
+ memInfo.hasSwappedOutPss, mySwappedOut, mySwappedOutPss, myRss);
}
}
}
@@ -2958,6 +2976,19 @@ public final class ActivityThread extends ClientTransactionHandler {
proto.write(MemInfoDumpProto.ProcessMemory.AppSummary.TOTAL_SWAP_PSS,
memInfo.getSummaryTotalSwap());
}
+ proto.write(MemInfoDumpProto.ProcessMemory.AppSummary.JAVA_HEAP_RSS_KB,
+ memInfo.getSummaryJavaHeapRss());
+ proto.write(MemInfoDumpProto.ProcessMemory.AppSummary.NATIVE_HEAP_RSS_KB,
+ memInfo.getSummaryNativeHeapRss());
+ proto.write(MemInfoDumpProto.ProcessMemory.AppSummary.CODE_RSS_KB,
+ memInfo.getSummaryCodeRss());
+ proto.write(MemInfoDumpProto.ProcessMemory.AppSummary.STACK_RSS_KB,
+ memInfo.getSummaryStackRss());
+ proto.write(MemInfoDumpProto.ProcessMemory.AppSummary.GRAPHICS_RSS_KB,
+ memInfo.getSummaryGraphicsRss());
+ proto.write(MemInfoDumpProto.ProcessMemory.AppSummary.UNKNOWN_RSS_KB,
+ memInfo.getSummaryUnknownRss());
+
proto.end(asToken);
}
diff --git a/core/java/android/app/UiAutomation.java b/core/java/android/app/UiAutomation.java
index 2b74b99c8071..ed2b99187b95 100644
--- a/core/java/android/app/UiAutomation.java
+++ b/core/java/android/app/UiAutomation.java
@@ -1289,7 +1289,7 @@ public final class UiAutomation {
}
@Override
- public void onAccessibilityButtonClicked() {
+ public void onAccessibilityButtonClicked(int displayId) {
/* do nothing */
}
diff --git a/core/java/android/content/pm/UserInfo.java b/core/java/android/content/pm/UserInfo.java
index 7865d75d839c..1c37c64bb622 100644
--- a/core/java/android/content/pm/UserInfo.java
+++ b/core/java/android/content/pm/UserInfo.java
@@ -24,6 +24,18 @@ import android.os.UserManager;
/**
* Per-user information.
+ *
+ * <p>There are 3 base properties of users: {@link #FLAG_SYSTEM}, {@link #FLAG_FULL}, and
+ * {@link #FLAG_MANAGED_PROFILE}. Every user must have one of the following combination of these
+ * flags:
+ * <ul>
+ * <li>FLAG_SYSTEM (user {@link UserHandle#USER_SYSTEM} on a headless-user-0 device)</li>
+ * <li>FLAG_SYSTEM and FLAG_FULL (user {@link UserHandle#USER_SYSTEM} on a regular device)</li>
+ * <li>FLAG_FULL (non-profile secondary user)</li>
+ * <li>FLAG_MANAGED_PROFILE (profile users)</li>
+ * </ul>
+ * Users can have also have additional flags (such as FLAG_GUEST) as appropriate.
+ *
* @hide
*/
public class UserInfo implements Parcelable {
@@ -93,6 +105,20 @@ public class UserInfo implements Parcelable {
*/
public static final int FLAG_DEMO = 0x00000200;
+ /**
+ * Indicates that this user is a non-profile human user.
+ *
+ * <p>When creating a new (non-system) user, this flag will always be forced true unless the
+ * user is a {@link #FLAG_MANAGED_PROFILE}. If user {@link UserHandle#USER_SYSTEM} is also a
+ * human user, it must also be flagged as FULL.
+ */
+ public static final int FLAG_FULL = 0x00000400;
+
+ /**
+ * Indicates that this user is {@link UserHandle#USER_SYSTEM}. Not applicable to created users.
+ */
+ public static final int FLAG_SYSTEM = 0x00000800;
+
public static final int NO_PROFILE_GROUP_ID = UserHandle.USER_NULL;
@UnsupportedAppUsage
diff --git a/core/java/android/os/Debug.java b/core/java/android/os/Debug.java
index 1213eeaa747d..3cc28197503a 100644
--- a/core/java/android/os/Debug.java
+++ b/core/java/android/os/Debug.java
@@ -787,6 +787,68 @@ public final class Debug
}
/**
+ * Rss of Java Heap bytes in KB due to the application.
+ * @hide
+ */
+ public int getSummaryJavaHeapRss() {
+ return dalvikRss + getOtherRss(OTHER_ART);
+ }
+
+ /**
+ * Rss of Native Heap bytes in KB due to the application.
+ * @hide
+ */
+ public int getSummaryNativeHeapRss() {
+ return nativeRss;
+ }
+
+ /**
+ * Rss of code and other static resource bytes in KB due to
+ * the application.
+ * @hide
+ */
+ public int getSummaryCodeRss() {
+ return getOtherRss(OTHER_SO)
+ + getOtherRss(OTHER_JAR)
+ + getOtherRss(OTHER_APK)
+ + getOtherRss(OTHER_TTF)
+ + getOtherRss(OTHER_DEX)
+ + getOtherRss(OTHER_OAT);
+ }
+
+ /**
+ * Rss in KB of the stack due to the application.
+ * @hide
+ */
+ public int getSummaryStackRss() {
+ return getOtherRss(OTHER_STACK);
+ }
+
+ /**
+ * Rss in KB of graphics due to the application.
+ * @hide
+ */
+ public int getSummaryGraphicsRss() {
+ return getOtherRss(OTHER_GL_DEV)
+ + getOtherRss(OTHER_GRAPHICS)
+ + getOtherRss(OTHER_GL);
+ }
+
+ /**
+ * Rss in KB due to either the application or system that haven't otherwise been
+ * accounted for.
+ * @hide
+ */
+ public int getSummaryUnknownRss() {
+ return getTotalRss()
+ - getSummaryJavaHeapRss()
+ - getSummaryNativeHeapRss()
+ - getSummaryCodeRss()
+ - getSummaryStackRss()
+ - getSummaryGraphicsRss();
+ }
+
+ /**
* Total Pss in KB.
* @hide
*/
diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java
index 7df1ebe15d44..9abb64f15e99 100644
--- a/core/java/android/provider/Settings.java
+++ b/core/java/android/provider/Settings.java
@@ -7030,6 +7030,8 @@ public final class Settings {
*/
public static final String DISPLAY_DENSITY_FORCED = "display_density_forced";
+ static final Validator DISPLAY_DENSITY_FORCED_VALIDATOR = NON_NEGATIVE_INTEGER_VALIDATOR;
+
/**
* Setting to always use the default text-to-speech settings regardless
* of the application settings.
@@ -7110,24 +7112,8 @@ public final class Settings {
*/
public static final String TTS_DEFAULT_LOCALE = "tts_default_locale";
- private static final Validator TTS_DEFAULT_LOCALE_VALIDATOR = new Validator() {
- @Override
- public boolean validate(@Nullable String value) {
- if (value == null || value.length() == 0) {
- return false;
- }
- String[] ttsLocales = value.split(",");
- boolean valid = true;
- for (String ttsLocale : ttsLocales) {
- String[] parts = ttsLocale.split(":");
- valid |= ((parts.length == 2)
- && (parts[0].length() > 0)
- && ANY_STRING_VALIDATOR.validate(parts[0])
- && LOCALE_VALIDATOR.validate(parts[1]));
- }
- return valid;
- }
- };
+ private static final Validator TTS_DEFAULT_LOCALE_VALIDATOR =
+ new SettingsValidators.TTSListValidator();
/**
* Space delimited list of plugin packages that are enabled.
@@ -8647,25 +8633,13 @@ public final class Settings {
/**
* Holds comma separated list of ordering of QS tiles.
+ *
* @hide
*/
public static final String QS_TILES = "sysui_qs_tiles";
- private static final Validator QS_TILES_VALIDATOR = new Validator() {
- @Override
- public boolean validate(@Nullable String value) {
- if (value == null) {
- return false;
- }
- String[] tiles = value.split(",");
- boolean valid = true;
- for (String tile : tiles) {
- // tile can be any non-empty string as specified by OEM
- valid |= ((tile.length() > 0) && ANY_STRING_VALIDATOR.validate(tile));
- }
- return valid;
- }
- };
+ private static final Validator QS_TILES_VALIDATOR =
+ new SettingsValidators.TileListValidator();
/**
* Specifies whether the web action API is enabled.
@@ -8731,21 +8705,8 @@ public final class Settings {
*/
public static final String QS_AUTO_ADDED_TILES = "qs_auto_tiles";
- private static final Validator QS_AUTO_ADDED_TILES_VALIDATOR = new Validator() {
- @Override
- public boolean validate(@Nullable String value) {
- if (value == null) {
- return false;
- }
- String[] tiles = value.split(",");
- boolean valid = true;
- for (String tile : tiles) {
- // tile can be any non-empty string as specified by OEM
- valid |= ((tile.length() > 0) && ANY_STRING_VALIDATOR.validate(tile));
- }
- return valid;
- }
- };
+ private static final Validator QS_AUTO_ADDED_TILES_VALIDATOR =
+ new SettingsValidators.TileListValidator();
/**
* Whether the Lockdown button should be shown in the power menu.
@@ -9083,8 +9044,22 @@ public final class Settings {
};
/**
- * All settings in {@link SETTINGS_TO_BACKUP} array *must* have a non-null validator,
- * otherwise they won't be restored.
+ * The settings values which should only be restored if the target device is the
+ * same as the source device
+ *
+ * NOTE: Settings are backed up and restored in the order they appear
+ * in this array. If you have one setting depending on another,
+ * make sure that they are ordered appropriately.
+ *
+ * @hide
+ */
+ public static final String[] DEVICE_SPECIFIC_SETTINGS_TO_BACKUP = {
+ DISPLAY_DENSITY_FORCED,
+ };
+
+ /**
+ * All settings in {@link SETTINGS_TO_BACKUP} and {@link DEVICE_SPECIFIC_SETTINGS_TO_BACKUP}
+ * array *must* have a non-null validator, otherwise they won't be restored.
*
* @hide
*/
@@ -9276,6 +9251,7 @@ public final class Settings {
VALIDATORS.put(UI_NIGHT_MODE, UI_NIGHT_MODE_VALIDATOR);
VALIDATORS.put(GLOBAL_ACTIONS_PANEL_ENABLED, GLOBAL_ACTIONS_PANEL_ENABLED_VALIDATOR);
VALIDATORS.put(AWARE_LOCK_ENABLED, AWARE_LOCK_ENABLED_VALIDATOR);
+ VALIDATORS.put(DISPLAY_DENSITY_FORCED, DISPLAY_DENSITY_FORCED_VALIDATOR);
}
/**
@@ -13819,6 +13795,9 @@ public final class Settings {
* in this array. If you have one setting depending on another,
* make sure that they are ordered appropriately.
*
+ * NOTE: This table should only be used for settings which should be restored
+ * between different types of devices {@see #DEVICE_SPECIFIC_SETTINGS_TO_BACKUP}
+ *
* @hide
*/
public static final String[] SETTINGS_TO_BACKUP = {
@@ -13863,6 +13842,7 @@ public final class Settings {
* @hide
*/
public static final Map<String, Validator> VALIDATORS = new ArrayMap<>();
+
static {
VALIDATORS.put(APPLY_RAMPING_RINGER, APPLY_RAMPING_RINGER_VALIDATOR);
VALIDATORS.put(BUGREPORT_IN_POWER_MENU, BUGREPORT_IN_POWER_MENU_VALIDATOR);
diff --git a/core/java/android/provider/SettingsValidators.java b/core/java/android/provider/SettingsValidators.java
index 405121378d1f..e4cf9fd6aaee 100644
--- a/core/java/android/provider/SettingsValidators.java
+++ b/core/java/android/provider/SettingsValidators.java
@@ -283,4 +283,50 @@ public class SettingsValidators {
return true;
}
}
+
+ private abstract static class ListValidator implements Validator {
+ public boolean validate(@Nullable String value) {
+ if (!isEntryValid(value)) {
+ return false;
+ }
+ String[] items = value.split(",");
+ for (String item : items) {
+ if (!isItemValid(item)) {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ protected abstract boolean isEntryValid(String entry);
+
+ protected abstract boolean isItemValid(String item);
+ }
+
+ /** Ensure a restored value is a string in the format the text-to-speech system handles */
+ public static final class TTSListValidator extends ListValidator {
+ protected boolean isEntryValid(String entry) {
+ return entry != null && entry.length() > 0;
+ }
+
+ protected boolean isItemValid(String item) {
+ String[] parts = item.split(":");
+ // Replaces any old language separator (-) with the new one (_)
+ return ((parts.length == 2)
+ && (parts[0].length() > 0)
+ && ANY_STRING_VALIDATOR.validate(parts[0])
+ && LOCALE_VALIDATOR.validate(parts[1].replace('-', '_')));
+ }
+ }
+
+ /** Ensure a restored value is suitable to be used as a tile name */
+ public static final class TileListValidator extends ListValidator {
+ protected boolean isEntryValid(String entry) {
+ return entry != null;
+ }
+
+ protected boolean isItemValid(String item) {
+ return item.length() > 0 && ANY_STRING_VALIDATOR.validate(item);
+ }
+ }
}
diff --git a/core/java/android/widget/AbsListView.java b/core/java/android/widget/AbsListView.java
index 85e9e4950cba..fe88a9140b37 100644
--- a/core/java/android/widget/AbsListView.java
+++ b/core/java/android/widget/AbsListView.java
@@ -2550,12 +2550,10 @@ public abstract class AbsListView extends AdapterView<ListAdapter> implements Te
return;
}
- final boolean isItemEnabled;
+ boolean isItemEnabled = view.isEnabled() && isEnabled();
final ViewGroup.LayoutParams lp = view.getLayoutParams();
if (lp instanceof AbsListView.LayoutParams) {
- isItemEnabled = ((AbsListView.LayoutParams) lp).isEnabled && isEnabled();
- } else {
- isItemEnabled = false;
+ isItemEnabled &= ((AbsListView.LayoutParams) lp).isEnabled;
}
info.setEnabled(isItemEnabled);
diff --git a/core/java/com/android/internal/content/PackageHelper.java b/core/java/com/android/internal/content/PackageHelper.java
index 1d81c59a8f89..152d699f5e6b 100644
--- a/core/java/com/android/internal/content/PackageHelper.java
+++ b/core/java/com/android/internal/content/PackageHelper.java
@@ -35,7 +35,7 @@ import android.os.storage.StorageManager;
import android.os.storage.StorageVolume;
import android.os.storage.VolumeInfo;
import android.provider.Settings;
-import android.util.ArraySet;
+import android.util.ArrayMap;
import android.util.Log;
import com.android.internal.annotations.VisibleForTesting;
@@ -166,6 +166,23 @@ public class PackageHelper {
params.sizeBytes, testableInterface);
}
+ private static boolean checkFitOnVolume(StorageManager storageManager, String volumePath,
+ SessionParams params) throws IOException {
+ if (volumePath == null) {
+ return false;
+ }
+ final int installFlags = translateAllocateFlags(params.installFlags);
+ final UUID target = storageManager.getUuidForPath(new File(volumePath));
+ final long availBytes = storageManager.getAllocatableBytes(target,
+ installFlags | StorageManager.FLAG_ALLOCATE_NON_CACHE_ONLY);
+ if (params.sizeBytes <= availBytes) {
+ return true;
+ }
+ final long cacheClearable = storageManager.getAllocatableBytes(target,
+ installFlags | StorageManager.FLAG_ALLOCATE_CACHE_ONLY);
+ return params.sizeBytes <= availBytes + cacheClearable;
+ }
+
@VisibleForTesting
public static String resolveInstallVolume(Context context, SessionParams params,
TestableInterface testInterface) throws IOException {
@@ -178,35 +195,23 @@ public class PackageHelper {
ApplicationInfo existingInfo = testInterface.getExistingAppInfo(context,
params.appPackageName);
- // Figure out best candidate volume, and also if we fit on internal
- final ArraySet<String> allCandidates = new ArraySet<>();
- boolean fitsOnInternal = false;
- VolumeInfo bestCandidate = null;
- long bestCandidateAvailBytes = Long.MIN_VALUE;
+ final ArrayMap<String, String> volumePaths = new ArrayMap<>();
+ String internalVolumePath = null;
for (VolumeInfo vol : storageManager.getVolumes()) {
if (vol.type == VolumeInfo.TYPE_PRIVATE && vol.isMountedWritable()) {
final boolean isInternalStorage = ID_PRIVATE_INTERNAL.equals(vol.id);
- final UUID target = storageManager.getUuidForPath(new File(vol.path));
- final long availBytes = storageManager.getAllocatableBytes(target,
- translateAllocateFlags(params.installFlags));
if (isInternalStorage) {
- fitsOnInternal = (params.sizeBytes <= availBytes);
+ internalVolumePath = vol.path;
}
if (!isInternalStorage || allow3rdPartyOnInternal) {
- if (availBytes >= params.sizeBytes) {
- allCandidates.add(vol.fsUuid);
- }
- if (availBytes >= bestCandidateAvailBytes) {
- bestCandidate = vol;
- bestCandidateAvailBytes = availBytes;
- }
+ volumePaths.put(vol.fsUuid, vol.path);
}
}
}
// System apps always forced to internal storage
if (existingInfo != null && existingInfo.isSystemApp()) {
- if (fitsOnInternal) {
+ if (checkFitOnVolume(storageManager, internalVolumePath, params)) {
return StorageManager.UUID_PRIVATE_INTERNAL;
} else {
throw new IOException("Not enough space on existing volume "
@@ -228,7 +233,7 @@ public class PackageHelper {
throw new IOException("Not allowed to install non-system apps on internal storage");
}
- if (fitsOnInternal) {
+ if (checkFitOnVolume(storageManager, internalVolumePath, params)) {
return StorageManager.UUID_PRIVATE_INTERNAL;
} else {
throw new IOException("Requested internal only, but not enough space");
@@ -237,10 +242,14 @@ public class PackageHelper {
// If app already exists somewhere, we must stay on that volume
if (existingInfo != null) {
- if (Objects.equals(existingInfo.volumeUuid, StorageManager.UUID_PRIVATE_INTERNAL)
- && fitsOnInternal) {
- return StorageManager.UUID_PRIVATE_INTERNAL;
- } else if (allCandidates.contains(existingInfo.volumeUuid)) {
+ String existingVolumePath = null;
+ if (Objects.equals(existingInfo.volumeUuid, StorageManager.UUID_PRIVATE_INTERNAL)) {
+ existingVolumePath = internalVolumePath;
+ } else if (volumePaths.containsKey(existingInfo.volumeUuid)) {
+ existingVolumePath = volumePaths.get(existingInfo.volumeUuid);
+ }
+
+ if (checkFitOnVolume(storageManager, existingVolumePath, params)) {
return existingInfo.volumeUuid;
} else {
throw new IOException("Not enough space on existing volume "
@@ -250,12 +259,36 @@ public class PackageHelper {
// We're left with new installations with either preferring external or auto, so just pick
// volume with most space
- if (bestCandidate != null) {
- return bestCandidate.fsUuid;
+ if (volumePaths.size() == 1) {
+ if (checkFitOnVolume(storageManager, volumePaths.valueAt(0), params)) {
+ return volumePaths.keyAt(0);
+ }
} else {
- throw new IOException("No special requests, but no room on allowed volumes. "
- + " allow3rdPartyOnInternal? " + allow3rdPartyOnInternal);
+ String bestCandidate = null;
+ long bestCandidateAvailBytes = Long.MIN_VALUE;
+ for (String vol : volumePaths.keySet()) {
+ final String volumePath = volumePaths.get(vol);
+ final UUID target = storageManager.getUuidForPath(new File(volumePath));
+
+ // We need to take into account freeable cached space, because we're choosing the
+ // best candidate amongst a list, not just checking if we fit at all.
+ final long availBytes = storageManager.getAllocatableBytes(target,
+ translateAllocateFlags(params.installFlags));
+
+ if (availBytes >= bestCandidateAvailBytes) {
+ bestCandidate = vol;
+ bestCandidateAvailBytes = availBytes;
+ }
+ }
+
+ if (bestCandidateAvailBytes >= params.sizeBytes) {
+ return bestCandidate;
+ }
+
}
+
+ throw new IOException("No special requests, but no room on allowed volumes. "
+ + " allow3rdPartyOnInternal? " + allow3rdPartyOnInternal);
}
public static boolean fitsOnInternal(Context context, SessionParams params) throws IOException {
diff --git a/core/java/com/android/internal/os/AtomicDirectory.java b/core/java/com/android/internal/os/AtomicDirectory.java
index f24d12e0c3af..8ca7a7186cb4 100644
--- a/core/java/com/android/internal/os/AtomicDirectory.java
+++ b/core/java/com/android/internal/os/AtomicDirectory.java
@@ -17,13 +17,17 @@
package com.android.internal.os;
import android.annotation.NonNull;
-import android.annotation.Nullable;
import android.os.FileUtils;
+import android.system.ErrnoException;
+import android.system.Os;
+import android.system.OsConstants;
import android.util.ArrayMap;
+import android.util.Log;
import com.android.internal.util.Preconditions;
import java.io.File;
+import java.io.FileDescriptor;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Arrays;
@@ -46,12 +50,13 @@ import java.util.Arrays;
* backing directory when checking existence, making changes, and deleting.
*/
public final class AtomicDirectory {
- private final @NonNull ArrayMap<File, FileOutputStream> mOpenFiles = new ArrayMap<>();
+
+ private static final String LOG_TAG = AtomicDirectory.class.getSimpleName();
+
private final @NonNull File mBaseDirectory;
private final @NonNull File mBackupDirectory;
- private int mBaseDirectoryFd = -1;
- private int mBackupDirectoryFd = -1;
+ private final @NonNull ArrayMap<File, FileOutputStream> mOpenFiles = new ArrayMap<>();
/**
* Creates a new instance.
@@ -65,15 +70,16 @@ public final class AtomicDirectory {
}
/**
- * Gets the backup directory if present. This could be useful if you are
- * writing new state to the dir but need to access the last persisted state
- * at the same time. This means that this call is useful in between
- * {@link #startWrite()} and {@link #finishWrite()} or {@link #failWrite()}.
- * You should not modify the content returned by this method.
+ * Gets the backup directory which may or may not exist. This could be
+ * useful if you are writing new state to the directory but need to access
+ * the last persisted state at the same time. This means that this call is
+ * useful in between {@link #startWrite()} and {@link #finishWrite()} or
+ * {@link #failWrite()}. You should not modify the content returned by this
+ * method.
*
* @see #startRead()
*/
- public @Nullable File getBackupDirectory() {
+ public @NonNull File getBackupDirectory() {
return mBackupDirectory;
}
@@ -88,7 +94,8 @@ public final class AtomicDirectory {
*/
public @NonNull File startRead() throws IOException {
restore();
- return getOrCreateBaseDirectory();
+ ensureBaseDirectory();
+ return mBaseDirectory;
}
/**
@@ -97,10 +104,7 @@ public final class AtomicDirectory {
* @see #startRead()
* @see #startWrite()
*/
- public void finishRead() {
- mBaseDirectoryFd = -1;
- mBackupDirectoryFd = -1;
- }
+ public void finishRead() {}
/**
* Starts editing this directory. After calling this method you should
@@ -119,7 +123,8 @@ public final class AtomicDirectory {
*/
public @NonNull File startWrite() throws IOException {
backup();
- return getOrCreateBaseDirectory();
+ ensureBaseDirectory();
+ return mBaseDirectory;
}
/**
@@ -133,13 +138,14 @@ public final class AtomicDirectory {
* @see #closeWrite(FileOutputStream)
*/
public @NonNull FileOutputStream openWrite(@NonNull File file) throws IOException {
- if (file.isDirectory() || !file.getParentFile().equals(getOrCreateBaseDirectory())) {
- throw new IllegalArgumentException("Must be a file in " + getOrCreateBaseDirectory());
+ if (file.isDirectory() || !file.getParentFile().equals(mBaseDirectory)) {
+ throw new IllegalArgumentException("Must be a file in " + mBaseDirectory);
}
- final FileOutputStream destination = new FileOutputStream(file);
- if (mOpenFiles.put(file, destination) != null) {
- throw new IllegalArgumentException("Already open file" + file.getCanonicalPath());
+ if (mOpenFiles.containsKey(file)) {
+ throw new IllegalArgumentException("Already open file " + file.getAbsolutePath());
}
+ final FileOutputStream destination = new FileOutputStream(file);
+ mOpenFiles.put(file, destination);
return destination;
}
@@ -152,20 +158,21 @@ public final class AtomicDirectory {
*/
public void closeWrite(@NonNull FileOutputStream destination) {
final int indexOfValue = mOpenFiles.indexOfValue(destination);
- if (mOpenFiles.removeAt(indexOfValue) == null) {
+ if (indexOfValue < 0) {
throw new IllegalArgumentException("Unknown file stream " + destination);
}
+ mOpenFiles.removeAt(indexOfValue);
FileUtils.sync(destination);
- try {
- destination.close();
- } catch (IOException ignored) {}
+ FileUtils.closeQuietly(destination);
}
public void failWrite(@NonNull FileOutputStream destination) {
final int indexOfValue = mOpenFiles.indexOfValue(destination);
- if (indexOfValue >= 0) {
- mOpenFiles.removeAt(indexOfValue);
+ if (indexOfValue < 0) {
+ throw new IllegalArgumentException("Unknown file stream " + destination);
}
+ mOpenFiles.removeAt(indexOfValue);
+ FileUtils.closeQuietly(destination);
}
/**
@@ -173,15 +180,15 @@ public final class AtomicDirectory {
*
* @see #startWrite()
*
- * @throws IllegalStateException is some files are not closed.
+ * @throws IllegalStateException if some files are not closed.
*/
public void finishWrite() {
throwIfSomeFilesOpen();
- fsyncDirectoryFd(mBaseDirectoryFd);
+
+ syncDirectory(mBaseDirectory);
+ syncParentDirectory();
deleteDirectory(mBackupDirectory);
- fsyncDirectoryFd(mBackupDirectoryFd);
- mBaseDirectoryFd = -1;
- mBackupDirectoryFd = -1;
+ syncParentDirectory();
}
/**
@@ -191,11 +198,12 @@ public final class AtomicDirectory {
*/
public void failWrite() {
throwIfSomeFilesOpen();
+
try{
restore();
- } catch (IOException ignored) {}
- mBaseDirectoryFd = -1;
- mBackupDirectoryFd = -1;
+ } catch (IOException e) {
+ Log.e(LOG_TAG, "Failed to restore in failWrite()", e);
+ }
}
/**
@@ -209,29 +217,28 @@ public final class AtomicDirectory {
* Deletes this directory.
*/
public void delete() {
+ boolean deleted = false;
if (mBaseDirectory.exists()) {
- deleteDirectory(mBaseDirectory);
- fsyncDirectoryFd(mBaseDirectoryFd);
+ deleted |= deleteDirectory(mBaseDirectory);
}
if (mBackupDirectory.exists()) {
- deleteDirectory(mBackupDirectory);
- fsyncDirectoryFd(mBackupDirectoryFd);
+ deleted |= deleteDirectory(mBackupDirectory);
+ }
+ if (deleted) {
+ syncParentDirectory();
}
}
- private @NonNull File getOrCreateBaseDirectory() throws IOException {
- if (!mBaseDirectory.exists()) {
- if (!mBaseDirectory.mkdirs()) {
- throw new IOException("Couldn't create directory " + mBaseDirectory);
- }
- FileUtils.setPermissions(mBaseDirectory.getPath(),
- FileUtils.S_IRWXU | FileUtils.S_IRWXG | FileUtils.S_IXOTH,
- -1, -1);
+ private void ensureBaseDirectory() throws IOException {
+ if (mBaseDirectory.exists()) {
+ return;
}
- if (mBaseDirectoryFd < 0) {
- mBaseDirectoryFd = getDirectoryFd(mBaseDirectory.getCanonicalPath());
+
+ if (!mBaseDirectory.mkdirs()) {
+ throw new IOException("Failed to create directory " + mBaseDirectory);
}
- return mBaseDirectory;
+ FileUtils.setPermissions(mBaseDirectory.getPath(),
+ FileUtils.S_IRWXU | FileUtils.S_IRWXG | FileUtils.S_IXOTH, -1, -1);
}
private void throwIfSomeFilesOpen() {
@@ -245,50 +252,56 @@ public final class AtomicDirectory {
if (!mBaseDirectory.exists()) {
return;
}
- if (mBaseDirectoryFd < 0) {
- mBaseDirectoryFd = getDirectoryFd(mBaseDirectory.getCanonicalPath());
- }
+
if (mBackupDirectory.exists()) {
deleteDirectory(mBackupDirectory);
}
if (!mBaseDirectory.renameTo(mBackupDirectory)) {
- throw new IOException("Couldn't backup " + mBaseDirectory
- + " to " + mBackupDirectory);
+ throw new IOException("Failed to backup " + mBaseDirectory + " to " + mBackupDirectory);
}
- mBackupDirectoryFd = mBaseDirectoryFd;
- mBaseDirectoryFd = -1;
- fsyncDirectoryFd(mBackupDirectoryFd);
+ syncParentDirectory();
}
private void restore() throws IOException {
if (!mBackupDirectory.exists()) {
return;
}
- if (mBackupDirectoryFd == -1) {
- mBackupDirectoryFd = getDirectoryFd(mBackupDirectory.getCanonicalPath());
- }
+
if (mBaseDirectory.exists()) {
deleteDirectory(mBaseDirectory);
}
if (!mBackupDirectory.renameTo(mBaseDirectory)) {
- throw new IOException("Couldn't restore " + mBackupDirectory
- + " to " + mBaseDirectory);
+ throw new IOException("Failed to restore " + mBackupDirectory + " to "
+ + mBaseDirectory);
}
- mBaseDirectoryFd = mBackupDirectoryFd;
- mBackupDirectoryFd = -1;
- fsyncDirectoryFd(mBaseDirectoryFd);
+ syncParentDirectory();
}
- private static void deleteDirectory(@NonNull File file) {
- final File[] children = file.listFiles();
- if (children != null) {
- for (File child : children) {
- deleteDirectory(child);
- }
- }
- file.delete();
+ private static boolean deleteDirectory(@NonNull File directory) {
+ return FileUtils.deleteContentsAndDir(directory);
}
- private static native int getDirectoryFd(String path);
- private static native void fsyncDirectoryFd(int fd);
+ private void syncParentDirectory() {
+ syncDirectory(mBaseDirectory.getParentFile());
+ }
+
+ // Standard Java IO doesn't allow opening a directory (will throw a FileNotFoundException
+ // instead), so we have to do it manually.
+ private static void syncDirectory(@NonNull File directory) {
+ String path = directory.getAbsolutePath();
+ FileDescriptor fd;
+ try {
+ fd = Os.open(path, OsConstants.O_RDONLY, 0);
+ } catch (ErrnoException e) {
+ Log.e(LOG_TAG, "Failed to open " + path, e);
+ return;
+ }
+ try {
+ Os.fsync(fd);
+ } catch (ErrnoException e) {
+ Log.e(LOG_TAG, "Failed to fsync " + path, e);
+ } finally {
+ FileUtils.closeQuietly(fd);
+ }
+ }
}
diff --git a/core/jni/Android.bp b/core/jni/Android.bp
index a54247572b80..fb68bc762245 100644
--- a/core/jni/Android.bp
+++ b/core/jni/Android.bp
@@ -195,7 +195,6 @@ cc_library_shared {
"android_content_res_ObbScanner.cpp",
"android_content_res_Configuration.cpp",
"android_security_Scrypt.cpp",
- "com_android_internal_os_AtomicDirectory.cpp",
"com_android_internal_os_ClassLoaderFactory.cpp",
"com_android_internal_os_FuseAppLoop.cpp",
"com_android_internal_os_Zygote.cpp",
diff --git a/core/jni/AndroidRuntime.cpp b/core/jni/AndroidRuntime.cpp
index 533f403034a9..a3fd915c29b2 100644
--- a/core/jni/AndroidRuntime.cpp
+++ b/core/jni/AndroidRuntime.cpp
@@ -227,7 +227,6 @@ extern int register_android_content_res_Configuration(JNIEnv* env);
extern int register_android_animation_PropertyValuesHolder(JNIEnv *env);
extern int register_android_security_Scrypt(JNIEnv *env);
extern int register_com_android_internal_content_NativeLibraryHelper(JNIEnv *env);
-extern int register_com_android_internal_os_AtomicDirectory(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_Zygote(JNIEnv *env);
@@ -1602,7 +1601,6 @@ static const RegJNIRec gRegJNI[] = {
REG_JNI(register_android_animation_PropertyValuesHolder),
REG_JNI(register_android_security_Scrypt),
REG_JNI(register_com_android_internal_content_NativeLibraryHelper),
- REG_JNI(register_com_android_internal_os_AtomicDirectory),
REG_JNI(register_com_android_internal_os_FuseAppLoop),
};
diff --git a/core/jni/com_android_internal_os_AtomicDirectory.cpp b/core/jni/com_android_internal_os_AtomicDirectory.cpp
deleted file mode 100644
index 76b0fc167264..000000000000
--- a/core/jni/com_android_internal_os_AtomicDirectory.cpp
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * Copyright (C) 2018 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <nativehelper/ScopedUtfChars.h>
-#include "jni.h"
-
-#include "core_jni_helpers.h"
-
-namespace android {
-
-static jint com_android_internal_os_AtomicDirectory_getDirectoryFd(JNIEnv* env,
- jobject /*clazz*/, jstring path) {
- ScopedUtfChars path8(env, path);
- if (path8.c_str() == NULL) {
- ALOGE("Invalid path: %s", path8.c_str());
- return -1;
- }
- int fd;
- if ((fd = TEMP_FAILURE_RETRY(open(path8.c_str(), O_DIRECTORY | O_RDONLY | O_CLOEXEC))) == -1) {
- ALOGE("Cannot open directory %s, error: %s\n", path8.c_str(), strerror(errno));
- return -1;
- }
- return fd;
-}
-
-static void com_android_internal_os_AtomicDirectory_fsyncDirectoryFd(JNIEnv* env,
- jobject /*clazz*/, jint fd) {
- if (TEMP_FAILURE_RETRY(fsync(fd)) == -1) {
- ALOGE("Cannot fsync directory %d, error: %s\n", fd, strerror(errno));
- }
-}
-
-/*
- * JNI registration.
- */
-static const JNINativeMethod gRegisterMethods[] = {
- /* name, signature, funcPtr */
- { "fsyncDirectoryFd",
- "(I)V",
- (void*) com_android_internal_os_AtomicDirectory_fsyncDirectoryFd
- },
- { "getDirectoryFd",
- "(Ljava/lang/String;)I",
- (void*) com_android_internal_os_AtomicDirectory_getDirectoryFd
- },
-};
-
-int register_com_android_internal_os_AtomicDirectory(JNIEnv* env) {
- return RegisterMethodsOrDie(env, "com/android/internal/os/AtomicDirectory",
- gRegisterMethods, NELEM(gRegisterMethods));
-}
-
-}; // namespace android
diff --git a/core/proto/android/server/activitymanagerservice.proto b/core/proto/android/server/activitymanagerservice.proto
index 7fb6f98ab662..a1ff9b94123f 100644
--- a/core/proto/android/server/activitymanagerservice.proto
+++ b/core/proto/android/server/activitymanagerservice.proto
@@ -261,6 +261,8 @@ message MemInfoDumpProto {
// The dirty the pages that have been swapped out, proportional.
int32 dirty_swap_pss_kb = 9;
}
+ // The rss set size for the heap.
+ optional int32 total_rss_kb = 10;
}
message HeapInfo {
option (.android.msg_privacy).dest = DEST_AUTOMATIC;
@@ -294,6 +296,12 @@ message MemInfoDumpProto {
int32 total_swap_pss = 8;
int32 total_swap_kb = 9;
}
+ optional int32 java_heap_rss_kb = 10;
+ optional int32 native_heap_rss_kb = 11;
+ optional int32 code_rss_kb = 12;
+ optional int32 stack_rss_kb = 13;
+ optional int32 graphics_rss_kb = 14;
+ optional int32 unknown_rss_kb = 15;
}
optional AppSummary app_summary = 9;
}
@@ -359,10 +367,16 @@ message MemInfoDumpProto {
optional int32 id = 3;
optional bool is_proc = 4;
optional bool has_activities = 5;
- optional int64 pss_kb = 6;
+ oneof ss_kb {
+ int64 pss_kb = 6;
+ int64 rss_kb = 9;
+ }
optional int64 swap_pss_kb = 7;
repeated MemItem sub_items = 8;
}
+ repeated MemItem total_rss_by_process = 29;
+ repeated MemItem total_rss_by_oom_adjustment = 30;
+ repeated MemItem total_rss_by_category = 31;
repeated MemItem total_pss_by_process = 5;
repeated MemItem total_pss_by_oom_adjustment = 6;
repeated MemItem total_pss_by_category = 7;
@@ -414,6 +428,8 @@ message MemInfoDumpProto {
optional bool is_low_ram_device = 27;
optional bool is_high_end_gfx = 28;
+
+ // Next Tag: 32
}
message StickyBroadcastProto {
diff --git a/core/proto/android/stats/otaupdate/updateengine_enums.proto b/core/proto/android/stats/otaupdate/updateengine_enums.proto
new file mode 100644
index 000000000000..a6e9919ba606
--- /dev/null
+++ b/core/proto/android/stats/otaupdate/updateengine_enums.proto
@@ -0,0 +1,82 @@
+/*
+ * Copyright (C) 2019 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+syntax = "proto2";
+package android.stats.otaupdate;
+
+// The payload type of an OTA update attempt on A/B devices.
+enum PayloadType {
+ FULL = 10000;
+ DELTA = 10001;
+}
+
+// The attempt result reported by the update engine for an OTA update.
+enum AttemptResult {
+ UPDATE_SUCCEEDED = 10000;
+ INTERNAL_ERROR = 10001;
+ PAYLOAD_DOWNLOAD_ERROR = 10002;
+ METADATA_MALFORMED = 10003;
+ OPERATION_MALFORMED = 10004;
+ OPERATION_EXECUTION_ERROR = 10005;
+ METADATA_VERIFICATION_FAILED = 10006;
+ PAYLOAD_VERIFICATION_FAILED = 10007;
+ VERIFICATION_FAILED = 10008;
+ POSTINSTALL_FAILED = 10009;
+ ABNORMAL_TERMINATION = 10010;
+ UPDATE_CANCELED = 10011;
+ UPDATE_SUCCEEDED_NOT_ACTIVE = 10012;
+}
+
+// The error code reported by the update engine after an OTA update attempt
+// on A/B devices. More details in system/update_engine/common/error_code.h
+enum ErrorCode {
+ SUCCESS = 10000;
+ ERROR = 10001;
+ FILESYSTEM_COPIER_ERROR = 10004;
+ POST_INSTALL_RUNNER_ERROR = 10005;
+ PAYLOAD_MISMATCHED_TYPE_ERROR = 10006;
+ INSTALL_DEVICE_OPEN_ERROR = 10007;
+ KERNEL_DEVICE_OPEN_ERROR = 10008;
+ DOWNLOAD_TRANSFER_ERROR = 10009;
+ PAYLOAD_HASH_MISMATCH_ERROR = 10010;
+ PAYLOAD_SIZE_MISMATCH_ERROR = 10011;
+ DOWNLOAD_PAYLOAD_VERIFICATION_ERROR = 10012;
+ DOWNLOAD_NEW_PARTITION_INFO_ERROR = 10013;
+ DOWNLOAD_WRITE_ERROR = 10014;
+ NEW_ROOTFS_VERIFICATION_ERROR = 10015;
+ SIGNED_DELTA_PAYLOAD_EXPECTED_ERROR = 10017;
+ DOWNLOAD_PAYLOAD_PUB_KEY_VERIFICATION_ERROR = 10018;
+ DOWNLOAD_STATE_INITIALIZATION_ERROR = 10020;
+ DOWNLOAD_INVALID_METADATA_MAGIC_STRING = 10021;
+ DOWNLOAD_SIGNATURE_MISSING_IN_MANIFEST = 10022;
+ DOWNLOAD_MANIFEST_PARSE_ERROR = 10023;
+ DOWNLOAD_METADATA_SIGNATURE_ERROR = 10024;
+ DOWNLOAD_METADATA_SIGNATURE_VERIFICATION_ERROR = 10025;
+ DOWNLOAD_METADATA_SIGNATURE_MISMATCH = 10026;
+ DOWNLOAD_OPERATION_HASH_VERIFICATION_ERROR = 10027;
+ DOWNLOAD_OPERATION_EXECUTION_ERROR = 10028;
+ DOWNLOAD_OPERATION_HASH_MISMATCH = 10029;
+ DOWNLOAD_INVALID_METADATA_SIZE = 10032;
+ DOWNLOAD_INVALID_METADATA_SIGNATURE = 10033;
+ DOWNLOAD_OPERATION_HASH_MISSING_ERROR = 10038;
+ DOWNLOAD_METADATA_SIGNATURE_MISSING_ERROR = 10039;
+ UNSUPPORTED_MAJOR_PAYLOAD_VERSION = 10044;
+ UNSUPPORTED_MINOR_PAYLOAD_VERSION = 10045;
+ FILESYSTEM_VERIFIER_ERROR = 10047;
+ USER_CANCELED = 10048;
+ PAYLOAD_TIMESTAMP_ERROR = 10051;
+ UPDATED_BUT_NOT_ACTIVE = 10052;
+}
diff --git a/core/tests/coretests/src/android/provider/SettingsBackupTest.java b/core/tests/coretests/src/android/provider/SettingsBackupTest.java
index 89ba3df287b4..bdbf36881741 100644
--- a/core/tests/coretests/src/android/provider/SettingsBackupTest.java
+++ b/core/tests/coretests/src/android/provider/SettingsBackupTest.java
@@ -35,6 +35,7 @@ import org.junit.Test;
import org.junit.runner.RunWith;
import java.lang.reflect.Field;
+import java.util.Collections;
import java.util.HashSet;
import java.util.Set;
@@ -625,7 +626,6 @@ public class SettingsBackupTest {
Settings.Secure.DIALER_DEFAULT_APPLICATION,
Settings.Secure.DISABLED_PRINT_SERVICES,
Settings.Secure.DISABLED_SYSTEM_INPUT_METHODS,
- Settings.Secure.DISPLAY_DENSITY_FORCED,
Settings.Secure.DOCKED_CLOCK_FACE,
Settings.Secure.DOZE_PULSE_ON_LONG_PRESS,
Settings.Secure.EMERGENCY_ASSISTANCE_APPLICATION,
@@ -742,9 +742,12 @@ public class SettingsBackupTest {
@Test
public void secureSettingsBackedUpOrBlacklisted() {
+ HashSet<String> keys = new HashSet<String>();
+ Collections.addAll(keys, Settings.Secure.SETTINGS_TO_BACKUP);
+ Collections.addAll(keys, Settings.Secure.DEVICE_SPECIFIC_SETTINGS_TO_BACKUP);
checkSettingsBackedUpOrBlacklisted(
getCandidateSettings(Settings.Secure.class),
- newHashSet(Settings.Secure.SETTINGS_TO_BACKUP),
+ keys,
BACKUP_BLACKLISTED_SECURE_SETTINGS);
}
@@ -758,9 +761,9 @@ public class SettingsBackupTest {
is(empty()));
assertThat(
- "blacklisted settings backed up",
- intersect(settingsToBackup, blacklist),
- is(empty()));
+ "blacklisted settings backed up",
+ intersect(settingsToBackup, blacklist),
+ is(empty()));
}
private static Set<String> getCandidateSettings(Class<? extends Settings.NameValueTable> clazz) {
diff --git a/core/tests/coretests/src/android/provider/SettingsValidatorsTest.java b/core/tests/coretests/src/android/provider/SettingsValidatorsTest.java
index 8081e9e6c67b..eea8c83e036b 100644
--- a/core/tests/coretests/src/android/provider/SettingsValidatorsTest.java
+++ b/core/tests/coretests/src/android/provider/SettingsValidatorsTest.java
@@ -255,6 +255,55 @@ public class SettingsValidatorsTest {
}
@Test
+ public void testTTSListValidator_withValidInput_returnsTrue() {
+ Validator v = new SettingsValidators.TTSListValidator();
+
+ assertTrue(v.validate("com.foo.ttsengine:en-US,com.bar.ttsengine:es_ES"));
+ }
+
+ @Test
+ public void testTTSListValidator_withInvalidInput_returnsFalse() {
+ Validator v = new SettingsValidators.TTSListValidator();
+
+ assertFalse(v.validate("com.foo.ttsengine:eng-USA,INVALID"));
+ }
+
+ @Test
+ public void testTTSListValidator_withEmptyInput_returnsFalse() {
+ Validator v = new SettingsValidators.TTSListValidator();
+
+ assertFalse(v.validate(""));
+ }
+
+ @Test
+ public void testTTSListValidator_withNullInput_returnsFalse() {
+ Validator v = new SettingsValidators.TTSListValidator();
+
+ assertFalse(v.validate(null));
+ }
+
+ @Test
+ public void testTileListValidator_withValidInput_returnsTrue() {
+ Validator v = new SettingsValidators.TileListValidator();
+
+ assertTrue(v.validate("1,2,3,4"));
+ }
+
+ @Test
+ public void testTileListValidator_withMissingValue_returnsFalse() {
+ Validator v = new SettingsValidators.TileListValidator();
+
+ assertFalse(v.validate("1,,3"));
+ }
+
+ @Test
+ public void testTileListValidator_withNullInput_returnsFalse() {
+ Validator v = new SettingsValidators.TileListValidator();
+
+ assertFalse(v.validate(null));
+ }
+
+ @Test
public void ensureAllBackedUpGlobalSettingsHaveValidators() {
String offenders = getOffenders(concat(Settings.Global.SETTINGS_TO_BACKUP,
Settings.Global.LEGACY_RESTORE_SETTINGS), Settings.Global.VALIDATORS);
diff --git a/location/lib/Android.bp b/location/lib/Android.bp
index 16f1428d2ee2..ab01ddbe4e60 100644
--- a/location/lib/Android.bp
+++ b/location/lib/Android.bp
@@ -21,7 +21,7 @@ java_sdk_library {
"androidx.annotation_annotation",
],
api_packages: ["com.android.location.provider"],
- srcs_lib: "framework",
+ srcs_lib: "framework-minus-apex",
srcs_lib_whitelist_dirs: ["location/java"],
srcs_lib_whitelist_pkgs: ["com.android.internal.location"],
}
diff --git a/media/lib/signer/Android.bp b/media/lib/signer/Android.bp
index 44f8725ec6f5..f320397bc84b 100644
--- a/media/lib/signer/Android.bp
+++ b/media/lib/signer/Android.bp
@@ -18,7 +18,7 @@ java_sdk_library {
name: "com.android.mediadrm.signer",
srcs: ["java/**/*.java"],
api_packages: ["com.android.mediadrm.signer"],
- srcs_lib: "framework",
+ srcs_lib: "framework-minus-apex",
srcs_lib_whitelist_dirs: ["media/java"],
srcs_lib_whitelist_pkgs: ["android.media"],
}
diff --git a/packages/SettingsProvider/Android.bp b/packages/SettingsProvider/Android.bp
index 1c97fc37cf50..e54b847f167d 100644
--- a/packages/SettingsProvider/Android.bp
+++ b/packages/SettingsProvider/Android.bp
@@ -9,7 +9,10 @@ android_app {
"telephony-common",
"ims-common",
],
- static_libs: ["junit"],
+ static_libs: [
+ "junit",
+ "SettingsLib",
+ ],
platform_apis: true,
certificate: "platform",
privileged: true,
@@ -21,11 +24,18 @@ android_test {
// because this test is not an instrumentation test. (because the target runs in the system process.)
srcs: [
"test/**/*.java",
+ "src/com/android/providers/settings/SettingsBackupAgent.java",
"src/com/android/providers/settings/SettingsState.java",
"src/com/android/providers/settings/SettingsHelper.java",
],
- static_libs: ["androidx.test.rules"],
- libs: ["android.test.base"],
+ static_libs: [
+ "androidx.test.rules",
+ "SettingsLib",
+ ],
+ libs: [
+ "android.test.base",
+ "android.test.mock",
+ ],
resource_dirs: ["res"],
aaptflags: [
"--auto-add-overlay",
diff --git a/packages/SettingsProvider/src/com/android/providers/settings/SettingsBackupAgent.java b/packages/SettingsProvider/src/com/android/providers/settings/SettingsBackupAgent.java
index 7d56868d0ce8..2286f4c80a81 100644
--- a/packages/SettingsProvider/src/com/android/providers/settings/SettingsBackupAgent.java
+++ b/packages/SettingsProvider/src/com/android/providers/settings/SettingsBackupAgent.java
@@ -39,9 +39,13 @@ import android.util.ArrayMap;
import android.util.ArraySet;
import android.util.BackupUtils;
import android.util.Log;
+import android.util.Slog;
+import android.view.Display;
+import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.util.ArrayUtils;
import com.android.internal.widget.LockPatternUtils;
+import com.android.settingslib.display.DisplayDensityUtils;
import java.io.BufferedOutputStream;
import java.io.ByteArrayInputStream;
@@ -52,11 +56,14 @@ import java.io.EOFException;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
+import java.io.OutputStream;
import java.time.DateTimeException;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Map;
+import java.util.Objects;
import java.util.Set;
+import java.util.concurrent.atomic.AtomicInteger;
import java.util.zip.CRC32;
/**
@@ -78,10 +85,11 @@ public class SettingsBackupAgent extends BackupAgentHelper {
private static final String KEY_SOFTAP_CONFIG = "softap_config";
private static final String KEY_NETWORK_POLICIES = "network_policies";
private static final String KEY_WIFI_NEW_CONFIG = "wifi_new_config";
+ private static final String KEY_DEVICE_SPECIFIC_CONFIG = "device_specific_config";
// Versioning of the state file. Increment this version
// number any time the set of state items is altered.
- private static final int STATE_VERSION = 7;
+ private static final int STATE_VERSION = 8;
// Versioning of the Network Policies backup payload.
private static final int NETWORK_POLICIES_BACKUP_VERSION = 1;
@@ -99,8 +107,9 @@ public class SettingsBackupAgent extends BackupAgentHelper {
private static final int STATE_SOFTAP_CONFIG = 7;
private static final int STATE_NETWORK_POLICIES = 8;
private static final int STATE_WIFI_NEW_CONFIG = 9;
+ private static final int STATE_DEVICE_CONFIG = 10;
- private static final int STATE_SIZE = 10; // The current number of state items
+ private static final int STATE_SIZE = 11; // The current number of state items
// Number of entries in the checksum array at various version numbers
private static final int STATE_SIZES[] = {
@@ -111,17 +120,19 @@ public class SettingsBackupAgent extends BackupAgentHelper {
7, // version 4 added STATE_LOCK_SETTINGS
8, // version 5 added STATE_SOFTAP_CONFIG
9, // version 6 added STATE_NETWORK_POLICIES
- STATE_SIZE // version 7 added STATE_WIFI_NEW_CONFIG
+ 10, // version 7 added STATE_WIFI_NEW_CONFIG
+ STATE_SIZE // version 8 added STATE_DEVICE_CONFIG
};
- // Versioning of the 'full backup' format
- // Increment this version any time a new item is added
- private static final int FULL_BACKUP_VERSION = 6;
private static final int FULL_BACKUP_ADDED_GLOBAL = 2; // added the "global" entry
private static final int FULL_BACKUP_ADDED_LOCK_SETTINGS = 3; // added the "lock_settings" entry
private static final int FULL_BACKUP_ADDED_SOFTAP_CONF = 4; //added the "softap_config" entry
private static final int FULL_BACKUP_ADDED_NETWORK_POLICIES = 5; //added "network_policies"
private static final int FULL_BACKUP_ADDED_WIFI_NEW = 6; // added "wifi_new_config" entry
+ private static final int FULL_BACKUP_ADDED_DEVICE_SPECIFIC = 7; // added "device specific" entry
+ // Versioning of the 'full backup' format
+ // Increment this version any time a new item is added
+ private static final int FULL_BACKUP_VERSION = FULL_BACKUP_ADDED_DEVICE_SPECIFIC;
private static final int INTEGER_BYTE_COUNT = Integer.SIZE / Byte.SIZE;
@@ -129,11 +140,17 @@ public class SettingsBackupAgent extends BackupAgentHelper {
private static final String TAG = "SettingsBackupAgent";
- private static final String[] PROJECTION = {
+ @VisibleForTesting
+ static final String[] PROJECTION = {
Settings.NameValueTable.NAME,
Settings.NameValueTable.VALUE
};
+ // Versioning of the 'device specific' section of a backup
+ // Increment this any time the format is changed or data added.
+ @VisibleForTesting
+ static final int DEVICE_SPECIFIC_VERSION = 1;
+
// the key to store the WIFI data under, should be sorted as last, so restore happens last.
// use very late unicode character to quasi-guarantee last sort position.
private static final String KEY_WIFI_SUPPLICANT = "\uffedWIFI";
@@ -161,7 +178,8 @@ public class SettingsBackupAgent extends BackupAgentHelper {
KEY_GLOBAL,
}));
- private SettingsHelper mSettingsHelper;
+ @VisibleForTesting
+ SettingsHelper mSettingsHelper;
private WifiManager mWifiManager;
@@ -190,6 +208,7 @@ public class SettingsBackupAgent extends BackupAgentHelper {
byte[] softApConfigData = getSoftAPConfiguration();
byte[] netPoliciesData = getNetworkPolicies();
byte[] wifiFullConfigData = getNewWifiConfigData();
+ byte[] deviceSpecificInformation = getDeviceSpecificConfiguration();
long[] stateChecksums = readOldChecksums(oldState);
@@ -215,6 +234,9 @@ public class SettingsBackupAgent extends BackupAgentHelper {
stateChecksums[STATE_WIFI_NEW_CONFIG] =
writeIfChanged(stateChecksums[STATE_WIFI_NEW_CONFIG], KEY_WIFI_NEW_CONFIG,
wifiFullConfigData, data);
+ stateChecksums[STATE_DEVICE_CONFIG] =
+ writeIfChanged(stateChecksums[STATE_DEVICE_CONFIG], KEY_DEVICE_SPECIFIC_CONFIG,
+ deviceSpecificInformation, data);
writeNewChecksums(stateChecksums, newState);
}
@@ -313,6 +335,12 @@ public class SettingsBackupAgent extends BackupAgentHelper {
restoreNewWifiConfigData(restoredWifiNewConfigData);
break;
+ case KEY_DEVICE_SPECIFIC_CONFIG:
+ byte[] restoredDeviceSpecificConfig = new byte[size];
+ data.readEntityData(restoredDeviceSpecificConfig, 0, size);
+ restoreDeviceSpecificConfig(restoredDeviceSpecificConfig);
+ break;
+
default :
data.skipEntityData();
@@ -591,6 +619,11 @@ public class SettingsBackupAgent extends BackupAgentHelper {
private void restoreSettings(byte[] settings, int bytes, Uri contentUri,
HashSet<String> movedToGlobal, Set<String> movedToSecure) {
+ restoreSettings(settings, 0, bytes, contentUri, movedToGlobal, movedToSecure);
+ }
+
+ private void restoreSettings(byte[] settings, int pos, int bytes, Uri contentUri,
+ HashSet<String> movedToGlobal, Set<String> movedToSecure) {
if (DEBUG) {
Log.i(TAG, "restoreSettings: " + contentUri);
}
@@ -601,7 +634,8 @@ public class SettingsBackupAgent extends BackupAgentHelper {
Map<String, Validator> validators = null;
if (contentUri.equals(Settings.Secure.CONTENT_URI)) {
whitelist = ArrayUtils.concatElements(String.class, Settings.Secure.SETTINGS_TO_BACKUP,
- Settings.Secure.LEGACY_RESTORE_SETTINGS);
+ Settings.Secure.LEGACY_RESTORE_SETTINGS,
+ Settings.Secure.DEVICE_SPECIFIC_SETTINGS_TO_BACKUP);
validators = Settings.Secure.VALIDATORS;
} else if (contentUri.equals(Settings.System.CONTENT_URI)) {
whitelist = ArrayUtils.concatElements(String.class, Settings.System.SETTINGS_TO_BACKUP,
@@ -616,7 +650,6 @@ public class SettingsBackupAgent extends BackupAgentHelper {
}
// Restore only the white list data.
- int pos = 0;
final ArrayMap<String, String> cachedEntries = new ArrayMap<>();
ContentValues contentValues = new ContentValues(2);
SettingsHelper settingsHelper = mSettingsHelper;
@@ -940,6 +973,150 @@ public class SettingsBackupAgent extends BackupAgentHelper {
}
}
+ @VisibleForTesting
+ byte[] getDeviceSpecificConfiguration() throws IOException {
+ try (ByteArrayOutputStream os = new ByteArrayOutputStream()) {
+ writeHeader(os);
+ os.write(getDeviceSpecificSettings());
+ return os.toByteArray();
+ }
+ }
+
+ @VisibleForTesting
+ void writeHeader(OutputStream os) throws IOException {
+ os.write(toByteArray(DEVICE_SPECIFIC_VERSION));
+ os.write(toByteArray(Build.MANUFACTURER));
+ os.write(toByteArray(Build.PRODUCT));
+ }
+
+ private byte[] getDeviceSpecificSettings() {
+ try (Cursor cursor =
+ getContentResolver()
+ .query(Settings.Secure.CONTENT_URI, PROJECTION, null, null, null)) {
+ return extractRelevantValues(
+ cursor, Settings.Secure.DEVICE_SPECIFIC_SETTINGS_TO_BACKUP);
+ }
+ }
+
+ /**
+ * Restore the device specific settings.
+ *
+ * @param data The byte array holding a backed up version of another devices settings.
+ * @return true if the restore succeeded, false if it was stopped.
+ */
+ @VisibleForTesting
+ boolean restoreDeviceSpecificConfig(byte[] data) {
+ // We're using an AtomicInteger to wrap the position int and allow called methods to
+ // modify it.
+ AtomicInteger pos = new AtomicInteger(0);
+ if (!isSourceAcceptable(data, pos)) {
+ return false;
+ }
+
+ Integer originalDensity = getPreviousDensity();
+
+ int dataStart = pos.get();
+ restoreSettings(
+ data, dataStart, data.length, Settings.Secure.CONTENT_URI, null, null);
+
+ updateWindowManagerIfNeeded(originalDensity);
+
+ return true;
+ }
+
+ private void updateWindowManagerIfNeeded(Integer previousDensity) {
+ int newDensity;
+ try {
+ newDensity = getForcedDensity();
+ } catch (Settings.SettingNotFoundException e) {
+ // If there's not density setting we can't perform a change.
+ return;
+ }
+
+ if (previousDensity == null || previousDensity != newDensity) {
+ // From nothing to something is a change.
+ DisplayDensityUtils.setForcedDisplayDensity(Display.DEFAULT_DISPLAY, newDensity);
+ }
+ }
+
+ private Integer getPreviousDensity() {
+ try {
+ return getForcedDensity();
+ } catch (Settings.SettingNotFoundException e) {
+ return null;
+ }
+ }
+
+ private int getForcedDensity() throws Settings.SettingNotFoundException {
+ return Settings.Secure.getInt(getContentResolver(), Settings.Secure.DISPLAY_DENSITY_FORCED);
+ }
+
+ @VisibleForTesting
+ boolean isSourceAcceptable(byte[] data, AtomicInteger pos) {
+ int version = readInt(data, pos);
+ if (version > DEVICE_SPECIFIC_VERSION) {
+ Slog.w(TAG, "Unable to restore device specific information; Backup is too new");
+ return false;
+ }
+
+ String sourceManufacturer = readString(data, pos);
+ if (!Objects.equals(Build.MANUFACTURER, sourceManufacturer)) {
+ Log.w(
+ TAG,
+ "Unable to restore device specific information; Manufacturer mismatch "
+ + "(\'"
+ + Build.MANUFACTURER
+ + "\' and \'"
+ + sourceManufacturer
+ + "\')");
+ return false;
+ }
+
+ String sourceProduct = readString(data, pos);
+ if (!Objects.equals(Build.PRODUCT, sourceProduct)) {
+ Log.w(
+ TAG,
+ "Unable to restore device specific information; Product mismatch (\'"
+ + Build.PRODUCT
+ + "\' and \'"
+ + sourceProduct
+ + "\')");
+ return false;
+ }
+
+ return true;
+ }
+
+ @VisibleForTesting
+ static byte[] toByteArray(String value) {
+ if (value == null) {
+ return toByteArray(NULL_SIZE);
+ }
+
+ byte[] stringBytes = value.getBytes();
+ byte[] sizeAndString = new byte[stringBytes.length + INTEGER_BYTE_COUNT];
+ writeInt(sizeAndString, 0, stringBytes.length);
+ writeBytes(sizeAndString, INTEGER_BYTE_COUNT, stringBytes);
+ return sizeAndString;
+ }
+
+ @VisibleForTesting
+ static byte[] toByteArray(int value) {
+ byte[] result = new byte[INTEGER_BYTE_COUNT];
+ writeInt(result, 0, value);
+ return result;
+ }
+
+ private String readString(byte[] data, AtomicInteger pos) {
+ int byteCount = readInt(data, pos);
+ if (byteCount == NULL_SIZE) {
+ return null;
+ }
+
+ int stringStart = pos.getAndAdd(byteCount);
+ return new String(data, stringStart, byteCount);
+ }
+
/**
* Write an int in BigEndian into the byte array.
* @param out byte array
@@ -947,7 +1124,7 @@ public class SettingsBackupAgent extends BackupAgentHelper {
* @param value integer to write
* @return the index after adding the size of an int (4) in bytes.
*/
- private int writeInt(byte[] out, int pos, int value) {
+ private static int writeInt(byte[] out, int pos, int value) {
out[pos + 0] = (byte) ((value >> 24) & 0xFF);
out[pos + 1] = (byte) ((value >> 16) & 0xFF);
out[pos + 2] = (byte) ((value >> 8) & 0xFF);
@@ -955,11 +1132,15 @@ public class SettingsBackupAgent extends BackupAgentHelper {
return pos + INTEGER_BYTE_COUNT;
}
- private int writeBytes(byte[] out, int pos, byte[] value) {
+ private static int writeBytes(byte[] out, int pos, byte[] value) {
System.arraycopy(value, 0, out, pos, value.length);
return pos + value.length;
}
+ private int readInt(byte[] in, AtomicInteger pos) {
+ return readInt(in, pos.getAndAdd(INTEGER_BYTE_COUNT));
+ }
+
private int readInt(byte[] in, int pos) {
int result = ((in[pos] & 0xFF) << 24)
| ((in[pos + 1] & 0xFF) << 16)
diff --git a/packages/SettingsProvider/test/src/com/android/providers/settings/SettingsBackupAgentTest.java b/packages/SettingsProvider/test/src/com/android/providers/settings/SettingsBackupAgentTest.java
new file mode 100644
index 000000000000..cf8e1a5c2b14
--- /dev/null
+++ b/packages/SettingsProvider/test/src/com/android/providers/settings/SettingsBackupAgentTest.java
@@ -0,0 +1,272 @@
+/*
+ * Copyright (C) 2019 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.providers.settings;
+
+import static junit.framework.Assert.assertEquals;
+import static junit.framework.Assert.assertFalse;
+import static junit.framework.Assert.assertTrue;
+
+import static org.junit.Assert.assertArrayEquals;
+
+import android.content.ContentResolver;
+import android.content.ContentValues;
+import android.content.Context;
+import android.content.ContextWrapper;
+import android.database.Cursor;
+import android.database.MatrixCursor;
+import android.net.Uri;
+import android.os.Build;
+import android.provider.Settings;
+import android.test.mock.MockContentProvider;
+import android.test.mock.MockContentResolver;
+
+import androidx.test.runner.AndroidJUnit4;
+
+import com.android.internal.annotations.VisibleForTesting;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+import java.util.concurrent.atomic.AtomicInteger;
+
+/** Tests for the SettingsHelperTest */
+@RunWith(AndroidJUnit4.class)
+public class SettingsBackupAgentTest extends BaseSettingsProviderTest {
+
+ private static final String TEST_DISPLAY_DENSITY_FORCED = "123";
+ private static final Map<String, String> TEST_VALUES = new HashMap<>();
+
+ static {
+ TEST_VALUES.put(Settings.Secure.DISPLAY_DENSITY_FORCED, TEST_DISPLAY_DENSITY_FORCED);
+ }
+
+ private TestFriendlySettingsBackupAgent mAgentUnderTest;
+ private Context mContext;
+
+ @Before
+ public void setUp() {
+ mContext = new ContextWithMockContentResolver(getContext());
+
+ mAgentUnderTest = new TestFriendlySettingsBackupAgent();
+ mAgentUnderTest.attach(mContext);
+ }
+
+ @Test
+ public void testRoundTripDeviceSpecificSettings() throws IOException {
+ TestSettingsHelper helper = new TestSettingsHelper(mContext);
+ mAgentUnderTest.mSettingsHelper = helper;
+
+ byte[] settingsBackup = mAgentUnderTest.getDeviceSpecificConfiguration();
+
+ assertEquals("Not all values backed up.", TEST_VALUES.keySet(), helper.mReadEntries);
+
+ mAgentUnderTest.restoreDeviceSpecificConfig(settingsBackup);
+
+ assertEquals("Not all values were restored.", TEST_VALUES, helper.mWrittenValues);
+ }
+
+ @Test
+ public void testGeneratedHeaderMatchesCurrentDevice() throws IOException {
+ mAgentUnderTest.mSettingsHelper = new TestSettingsHelper(mContext);
+
+ byte[] header = generateUncorruptedHeader();
+
+ AtomicInteger pos = new AtomicInteger(0);
+ assertTrue(
+ "Generated header is not correct for device.",
+ mAgentUnderTest.isSourceAcceptable(header, pos));
+ }
+
+ @Test
+ public void testTestHeaderGeneratorIsAccurate() throws IOException {
+ byte[] classGeneratedHeader = generateUncorruptedHeader();
+ byte[] testGeneratedHeader = generateCorruptedHeader(false, false, false);
+
+ assertArrayEquals(
+ "Difference in header generation", classGeneratedHeader, testGeneratedHeader);
+ }
+
+ @Test
+ public void testNewerHeaderVersionFailsMatch() throws IOException {
+ byte[] header = generateCorruptedHeader(true, false, false);
+
+ AtomicInteger pos = new AtomicInteger(0);
+ assertFalse(
+ "Newer header does not fail match",
+ mAgentUnderTest.isSourceAcceptable(header, pos));
+ }
+
+ @Test
+ public void testWrongManufacturerFailsMatch() throws IOException {
+ byte[] header = generateCorruptedHeader(false, true, false);
+
+ AtomicInteger pos = new AtomicInteger(0);
+ assertFalse(
+ "Wrong manufacturer does not fail match",
+ mAgentUnderTest.isSourceAcceptable(header, pos));
+ }
+
+ @Test
+ public void testWrongProductFailsMatch() throws IOException {
+ byte[] header = generateCorruptedHeader(false, false, true);
+
+ AtomicInteger pos = new AtomicInteger(0);
+ assertFalse(
+ "Wrong product does not fail match",
+ mAgentUnderTest.isSourceAcceptable(header, pos));
+ }
+
+ @Test
+ public void checkAcceptTestFailingBlockRestore() {
+ mAgentUnderTest.setForcedDeviceInfoRestoreAcceptability(false);
+ byte[] data = new byte[0];
+
+ assertFalse(
+ "Blocking isSourceAcceptable did not stop restore",
+ mAgentUnderTest.restoreDeviceSpecificConfig(data));
+ }
+
+ private byte[] generateUncorruptedHeader() throws IOException {
+ try (ByteArrayOutputStream os = new ByteArrayOutputStream()) {
+ mAgentUnderTest.writeHeader(os);
+ return os.toByteArray();
+ }
+ }
+
+ private byte[] generateCorruptedHeader(
+ boolean corruptVersion, boolean corruptManufacturer, boolean corruptProduct)
+ throws IOException {
+ try (ByteArrayOutputStream os = new ByteArrayOutputStream()) {
+ int version = SettingsBackupAgent.DEVICE_SPECIFIC_VERSION;
+ if (corruptVersion) {
+ version++;
+ }
+ os.write(SettingsBackupAgent.toByteArray(version));
+
+ String manufacturer = Build.MANUFACTURER;
+ if (corruptManufacturer) {
+ manufacturer = manufacturer == null ? "X" : manufacturer + "X";
+ }
+ os.write(SettingsBackupAgent.toByteArray(manufacturer));
+
+ String product = Build.PRODUCT;
+ if (corruptProduct) {
+ product = product == null ? "X" : product + "X";
+ }
+ os.write(SettingsBackupAgent.toByteArray(product));
+
+ return os.toByteArray();
+ }
+ }
+
+ private static class TestFriendlySettingsBackupAgent extends SettingsBackupAgent {
+ private Boolean mForcedDeviceInfoRestoreAcceptability = null;
+
+ void setForcedDeviceInfoRestoreAcceptability(boolean value) {
+ mForcedDeviceInfoRestoreAcceptability = value;
+ }
+
+ @VisibleForTesting
+ boolean isSourceAcceptable(byte[] data, AtomicInteger pos) {
+ return mForcedDeviceInfoRestoreAcceptability == null
+ ? super.isSourceAcceptable(data, pos)
+ : mForcedDeviceInfoRestoreAcceptability;
+ }
+ }
+
+ /** The TestSettingsHelper tracks which values have been backed up and/or restored. */
+ private static class TestSettingsHelper extends SettingsHelper {
+ private Set<String> mReadEntries;
+ private Map<String, String> mWrittenValues;
+
+ TestSettingsHelper(Context context) {
+ super(context);
+ mReadEntries = new HashSet<>();
+ mWrittenValues = new HashMap<>();
+ }
+
+ @Override
+ public String onBackupValue(String key, String value) {
+ mReadEntries.add(key);
+ String readValue = TEST_VALUES.get(key);
+ assert readValue != null;
+ return readValue;
+ }
+
+ @Override
+ public void restoreValue(
+ Context context,
+ ContentResolver cr,
+ ContentValues contentValues,
+ Uri destination,
+ String name,
+ String value,
+ int restoredFromSdkInt) {
+ mWrittenValues.put(name, value);
+ }
+ }
+
+ /**
+ * ContextWrapper which allows us to return a MockContentResolver to code which uses it to
+ * access settings. This allows us to override the ContentProvider for the Settings URIs to
+ * return known values.
+ */
+ private static class ContextWithMockContentResolver extends ContextWrapper {
+ private MockContentResolver mContentResolver;
+
+ ContextWithMockContentResolver(Context targetContext) {
+ super(targetContext);
+
+ mContentResolver = new MockContentResolver();
+ mContentResolver.addProvider(
+ Settings.AUTHORITY, new DeviceSpecificInfoMockContentProvider());
+ }
+
+ @Override
+ public ContentResolver getContentResolver() {
+ return mContentResolver;
+ }
+ }
+
+ /** ContentProvider which returns a set of known test values. */
+ private static class DeviceSpecificInfoMockContentProvider extends MockContentProvider {
+ private static final Object[][] RESULT_ROWS = {
+ {Settings.Secure.DISPLAY_DENSITY_FORCED, TEST_DISPLAY_DENSITY_FORCED},
+ };
+
+ @Override
+ public Cursor query(
+ Uri uri,
+ String[] projection,
+ String selection,
+ String[] selectionArgs,
+ String sortOrder) {
+ MatrixCursor result = new MatrixCursor(SettingsBackupAgent.PROJECTION);
+ for (Object[] resultRow : RESULT_ROWS) {
+ result.addRow(resultRow);
+ }
+ return result;
+ }
+ }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/SystemUIFactory.java b/packages/SystemUI/src/com/android/systemui/SystemUIFactory.java
index 311ed8a913f1..7e3b42389637 100644
--- a/packages/SystemUI/src/com/android/systemui/SystemUIFactory.java
+++ b/packages/SystemUI/src/com/android/systemui/SystemUIFactory.java
@@ -66,6 +66,7 @@ import com.android.systemui.statusbar.phone.StatusBar;
import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager;
import com.android.systemui.statusbar.phone.UnlockMethodCache;
import com.android.systemui.statusbar.policy.DeviceProvisionedController;
+import com.android.systemui.statusbar.policy.KeyguardMonitor;
import com.android.systemui.util.AsyncSensorManager;
import com.android.systemui.volume.VolumeDialogComponent;
@@ -150,9 +151,9 @@ public class SystemUIFactory {
LockscreenWallpaper lockscreenWallpaper,
TriConsumer<ScrimState, Float, GradientColors> scrimStateListener,
Consumer<Integer> scrimVisibleListener, DozeParameters dozeParameters,
- AlarmManager alarmManager) {
+ AlarmManager alarmManager, KeyguardMonitor keyguardMonitor) {
return new ScrimController(scrimBehind, scrimInFront, scrimStateListener,
- scrimVisibleListener, dozeParameters, alarmManager);
+ scrimVisibleListener, dozeParameters, alarmManager, keyguardMonitor);
}
public NotificationIconAreaController createNotificationIconAreaController(Context context,
diff --git a/packages/SystemUI/src/com/android/systemui/classifier/FalsingManagerProxy.java b/packages/SystemUI/src/com/android/systemui/classifier/FalsingManagerProxy.java
index 128cc614fd08..ee79e6b973de 100644
--- a/packages/SystemUI/src/com/android/systemui/classifier/FalsingManagerProxy.java
+++ b/packages/SystemUI/src/com/android/systemui/classifier/FalsingManagerProxy.java
@@ -26,6 +26,7 @@ import android.provider.DeviceConfig;
import android.view.MotionEvent;
import com.android.internal.annotations.VisibleForTesting;
+import com.android.keyguard.KeyguardUpdateMonitor;
import com.android.systemui.Dependency;
import com.android.systemui.classifier.brightline.BrightLineFalsingManager;
import com.android.systemui.classifier.brightline.FalsingDataProvider;
@@ -102,7 +103,8 @@ public class FalsingManagerProxy implements FalsingManager {
} else {
mInternalFalsingManager = new BrightLineFalsingManager(
new FalsingDataProvider(context.getResources().getDisplayMetrics()),
- Dependency.get(AsyncSensorManager.class)
+ Dependency.get(AsyncSensorManager.class),
+ KeyguardUpdateMonitor.getInstance(context)
);
}
diff --git a/packages/SystemUI/src/com/android/systemui/classifier/brightline/BrightLineFalsingManager.java b/packages/SystemUI/src/com/android/systemui/classifier/brightline/BrightLineFalsingManager.java
index ce82bbfb1512..9e0b7025ddf8 100644
--- a/packages/SystemUI/src/com/android/systemui/classifier/brightline/BrightLineFalsingManager.java
+++ b/packages/SystemUI/src/com/android/systemui/classifier/brightline/BrightLineFalsingManager.java
@@ -23,11 +23,14 @@ import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
+import android.hardware.biometrics.BiometricSourceType;
import android.net.Uri;
import android.util.Log;
import android.view.MotionEvent;
import com.android.internal.logging.MetricsLogger;
+import com.android.keyguard.KeyguardUpdateMonitor;
+import com.android.keyguard.KeyguardUpdateMonitorCallback;
import com.android.systemui.classifier.Classifier;
import com.android.systemui.plugins.FalsingManager;
@@ -47,11 +50,13 @@ public class BrightLineFalsingManager implements FalsingManager {
private final SensorManager mSensorManager;
private final FalsingDataProvider mDataProvider;
+ private final KeyguardUpdateMonitor mKeyguardUpdateMonitor;
private boolean mSessionStarted;
private MetricsLogger mMetricsLogger;
private int mIsFalseTouchCalls;
private boolean mShowingAod;
private boolean mScreenOn;
+ private boolean mJustUnlockedWithFace;
private final ExecutorService mBackgroundExecutor = Executors.newSingleThreadExecutor();
@@ -68,10 +73,27 @@ public class BrightLineFalsingManager implements FalsingManager {
}
};
- public BrightLineFalsingManager(FalsingDataProvider falsingDataProvider,
- SensorManager sensorManager) {
+ private final KeyguardUpdateMonitorCallback mKeyguardUpdateCallback =
+ new KeyguardUpdateMonitorCallback() {
+ @Override
+ public void onBiometricAuthenticated(int userId,
+ BiometricSourceType biometricSourceType) {
+ if (userId == KeyguardUpdateMonitor.getCurrentUser()
+ && biometricSourceType == BiometricSourceType.FACE) {
+ mJustUnlockedWithFace = true;
+ }
+ }
+ };
+
+ public BrightLineFalsingManager(
+ FalsingDataProvider falsingDataProvider,
+ SensorManager sensorManager,
+ KeyguardUpdateMonitor keyguardUpdateMonitor) {
+ mKeyguardUpdateMonitor = keyguardUpdateMonitor;
mDataProvider = falsingDataProvider;
mSensorManager = sensorManager;
+ mKeyguardUpdateMonitor.registerCallback(mKeyguardUpdateCallback);
+
mMetricsLogger = new MetricsLogger();
mClassifiers = new ArrayList<>();
DistanceClassifier distanceClassifier = new DistanceClassifier(mDataProvider);
@@ -110,6 +132,7 @@ public class BrightLineFalsingManager implements FalsingManager {
if (!mSessionStarted && !mShowingAod && mScreenOn) {
logDebug("Starting Session");
mSessionStarted = true;
+ mJustUnlockedWithFace = false;
registerSensors();
mClassifiers.forEach(FalsingClassifier::onSessionStarted);
}
@@ -141,7 +164,7 @@ public class BrightLineFalsingManager implements FalsingManager {
@Override
public boolean isFalseTouch() {
- boolean r = mClassifiers.stream().anyMatch(falsingClassifier -> {
+ boolean r = !mJustUnlockedWithFace && mClassifiers.stream().anyMatch(falsingClassifier -> {
boolean result = falsingClassifier.isFalseTouch();
if (result) {
logInfo(falsingClassifier.getClass().getName() + ": true");
@@ -335,6 +358,7 @@ public class BrightLineFalsingManager implements FalsingManager {
@Override
public void cleanup() {
unregisterSensors();
+ mKeyguardUpdateMonitor.removeCallback(mKeyguardUpdateCallback);
}
static void logDebug(String msg) {
diff --git a/packages/SystemUI/src/com/android/systemui/doze/DozeSensors.java b/packages/SystemUI/src/com/android/systemui/doze/DozeSensors.java
index f79bb3ae5b90..026a62528c8d 100644
--- a/packages/SystemUI/src/com/android/systemui/doze/DozeSensors.java
+++ b/packages/SystemUI/src/com/android/systemui/doze/DozeSensors.java
@@ -288,6 +288,7 @@ public class DozeSensors {
final AlarmTimeout mCooldownTimer;
final AlwaysOnDisplayPolicy mPolicy;
final Sensor mSensor;
+ final boolean mUsingBrightnessSensor;
public ProxSensor(AlwaysOnDisplayPolicy policy) {
mPolicy = policy;
@@ -298,6 +299,7 @@ public class DozeSensors {
// if available.
Sensor sensor = DozeSensors.findSensorWithType(mSensorManager,
mContext.getString(R.string.doze_brightness_sensor_type));
+ mUsingBrightnessSensor = sensor != null;
if (sensor == null) {
sensor = mSensorManager.getDefaultSensor(Sensor.TYPE_PROXIMITY);
}
@@ -327,8 +329,7 @@ public class DozeSensors {
return;
}
if (register) {
- mRegistered = mSensorManager.registerListener(this,
- mSensorManager.getDefaultSensor(Sensor.TYPE_PROXIMITY),
+ mRegistered = mSensorManager.registerListener(this, mSensor,
SensorManager.SENSOR_DELAY_NORMAL, mHandler);
} else {
mSensorManager.unregisterListener(this);
@@ -341,7 +342,13 @@ public class DozeSensors {
public void onSensorChanged(android.hardware.SensorEvent event) {
if (DEBUG) Log.d(TAG, "onSensorChanged " + event);
- mCurrentlyFar = event.values[0] >= event.sensor.getMaximumRange();
+ if (mUsingBrightnessSensor) {
+ // The custom brightness sensor is gated by the proximity sensor and will return 0
+ // whenever prox is covered.
+ mCurrentlyFar = event.values[0] > 0;
+ } else {
+ mCurrentlyFar = event.values[0] >= event.sensor.getMaximumRange();
+ }
mProxCallback.accept(mCurrentlyFar);
long now = SystemClock.elapsedRealtime();
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 c209b315b197..83b000dca83b 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/customize/QSCustomizer.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/customize/QSCustomizer.java
@@ -296,10 +296,13 @@ public class QSCustomizer extends LinearLayout implements OnMenuItemClickListene
mY = y - containerLocation[1];
}
- private final Callback mKeyguardCallback = () -> {
- if (!isAttachedToWindow()) return;
- if (Dependency.get(KeyguardMonitor.class).isShowing() && !mOpening) {
- hide();
+ private final Callback mKeyguardCallback = new Callback() {
+ @Override
+ public void onKeyguardShowingChanged() {
+ if (!isAttachedToWindow()) return;
+ if (Dependency.get(KeyguardMonitor.class).isShowing() && !mOpening) {
+ hide();
+ }
}
};
diff --git a/packages/SystemUI/src/com/android/systemui/screenrecord/RecordingService.java b/packages/SystemUI/src/com/android/systemui/screenrecord/RecordingService.java
index 822a6669bd5c..0383dee4f9c3 100644
--- a/packages/SystemUI/src/com/android/systemui/screenrecord/RecordingService.java
+++ b/packages/SystemUI/src/com/android/systemui/screenrecord/RecordingService.java
@@ -27,32 +27,29 @@ import android.content.ContentValues;
import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
+import android.graphics.Point;
import android.graphics.drawable.Icon;
import android.hardware.display.DisplayManager;
import android.hardware.display.VirtualDisplay;
import android.media.MediaRecorder;
-import android.media.ThumbnailUtils;
import android.media.projection.MediaProjection;
import android.media.projection.MediaProjectionManager;
import android.net.Uri;
-import android.os.Environment;
import android.os.IBinder;
import android.provider.MediaStore;
import android.provider.Settings;
import android.util.DisplayMetrics;
import android.util.Log;
+import android.util.Size;
import android.view.Surface;
import android.widget.Toast;
-import androidx.core.content.FileProvider;
-
import com.android.systemui.R;
import java.io.File;
import java.io.IOException;
import java.io.OutputStream;
import java.nio.file.Files;
-import java.nio.file.Path;
import java.text.SimpleDateFormat;
import java.util.Date;
@@ -79,12 +76,10 @@ public class RecordingService extends Service {
private static final String ACTION_DELETE = "com.android.systemui.screenrecord.DELETE";
private static final int TOTAL_NUM_TRACKS = 1;
- private static final String RECORD_DIR = "Captures"; // TODO: use a translatable string
private static final int VIDEO_BIT_RATE = 6000000;
private static final int VIDEO_FRAME_RATE = 30;
private static final int AUDIO_BIT_RATE = 16;
private static final int AUDIO_SAMPLE_RATE = 44100;
- private static final String FILE_PROVIDER = "com.android.systemui.fileprovider";
private MediaProjectionManager mMediaProjectionManager;
private MediaProjection mMediaProjection;
@@ -120,11 +115,11 @@ public class RecordingService extends Service {
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
- Log.d(TAG, "RecordingService is starting");
if (intent == null) {
return Service.START_NOT_STICKY;
}
String action = intent.getAction();
+ Log.d(TAG, "onStartCommand " + action);
NotificationManager notificationManager =
(NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
@@ -160,41 +155,7 @@ public class RecordingService extends Service {
case ACTION_STOP:
stopRecording();
-
- String fileName = new SimpleDateFormat("'screen-'yyyyMMdd-HHmmss'.mp4'")
- .format(new Date());
-
- ContentValues values = new ContentValues();
- values.put(MediaStore.Video.Media.DISPLAY_NAME, fileName);
- values.put(MediaStore.Video.Media.MIME_TYPE, "video/mp4");
- values.put(MediaStore.Video.Media.DATE_ADDED, System.currentTimeMillis());
- values.put(MediaStore.Video.Media.DATE_TAKEN, System.currentTimeMillis());
-
- ContentResolver resolver = getContentResolver();
- Uri collectionUri = MediaStore.Video.Media.getContentUri(
- MediaStore.VOLUME_EXTERNAL_PRIMARY);
- Uri itemUri = resolver.insert(collectionUri, values);
-
- File recordDir = new File(getExternalFilesDir(Environment.DIRECTORY_MOVIES),
- RECORD_DIR);
- recordDir.mkdirs();
- Path path = new File(recordDir, fileName).toPath();
- try {
- // Move file out of temp directory
- Files.move(mTempFile.toPath(), path);
-
- // Add to the mediastore
- OutputStream os = resolver.openOutputStream(itemUri, "w");
- Files.copy(path, os);
- os.close();
-
- Notification notification = createSaveNotification(itemUri, path);
- notificationManager.notify(NOTIFICATION_ID, notification);
- } catch (IOException e) {
- e.printStackTrace();
- Toast.makeText(this, R.string.screenrecord_delete_error, Toast.LENGTH_LONG)
- .show();
- }
+ saveRecording(notificationManager);
break;
case ACTION_PAUSE:
@@ -208,8 +169,7 @@ public class RecordingService extends Service {
break;
case ACTION_SHARE:
- File shareFile = new File(intent.getStringExtra(EXTRA_PATH));
- Uri shareUri = FileProvider.getUriForFile(this, FILE_PROVIDER, shareFile);
+ Uri shareUri = Uri.parse(intent.getStringExtra(EXTRA_PATH));
Intent shareIntent = new Intent(Intent.ACTION_SEND)
.setType("video/mp4")
@@ -229,20 +189,18 @@ public class RecordingService extends Service {
// Close quick shade
sendBroadcast(new Intent(Intent.ACTION_CLOSE_SYSTEM_DIALOGS));
- File file = new File(intent.getStringExtra(EXTRA_PATH));
- if (file.delete()) {
- Toast.makeText(
- this,
- R.string.screenrecord_delete_description,
- Toast.LENGTH_LONG).show();
+ ContentResolver resolver = getContentResolver();
+ Uri uri = Uri.parse(intent.getStringExtra(EXTRA_PATH));
+ resolver.delete(uri, null, null);
- // Remove notification
- notificationManager.cancel(NOTIFICATION_ID);
- } else {
- Log.e(TAG, "Error deleting screen recording!");
- Toast.makeText(this, R.string.screenrecord_delete_error, Toast.LENGTH_LONG)
- .show();
- }
+ Toast.makeText(
+ this,
+ R.string.screenrecord_delete_description,
+ Toast.LENGTH_LONG).show();
+
+ // Remove notification
+ notificationManager.cancel(NOTIFICATION_ID);
+ Log.d(TAG, "Deleted recording " + uri);
break;
}
return Service.START_STICKY;
@@ -313,6 +271,7 @@ public class RecordingService extends Service {
mMediaRecorder.start();
} catch (IOException e) {
+ Log.e(TAG, "Error starting screen recording: " + e.getMessage());
e.printStackTrace();
throw new RuntimeException(e);
}
@@ -370,9 +329,7 @@ public class RecordingService extends Service {
notificationManager.notify(NOTIFICATION_ID, mRecordingNotificationBuilder.build());
}
- private Notification createSaveNotification(Uri uri, Path path) {
- Log.d(TAG, "Screen recording saved to " + uri.toString() + ", " + path.toString());
-
+ private Notification createSaveNotification(Uri uri) {
Intent viewIntent = new Intent(Intent.ACTION_VIEW)
.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_GRANT_READ_URI_PERMISSION)
.setDataAndType(uri, "video/mp4");
@@ -411,8 +368,15 @@ public class RecordingService extends Service {
.setAutoCancel(true);
// Add thumbnail if available
- Bitmap thumbnailBitmap = ThumbnailUtils.createVideoThumbnail(path.toString(),
- MediaStore.Video.Thumbnails.MINI_KIND);
+ Bitmap thumbnailBitmap = null;
+ try {
+ ContentResolver resolver = getContentResolver();
+ Size size = Point.convert(MediaStore.ThumbnailConstants.MINI_SIZE);
+ thumbnailBitmap = resolver.loadThumbnail(uri, size, null);
+ } catch (IOException e) {
+ Log.e(TAG, "Error creating thumbnail: " + e.getMessage());
+ e.printStackTrace();
+ }
if (thumbnailBitmap != null) {
Notification.BigPictureStyle pictureStyle = new Notification.BigPictureStyle()
.bigPicture(thumbnailBitmap)
@@ -434,6 +398,38 @@ public class RecordingService extends Service {
stopSelf();
}
+ private void saveRecording(NotificationManager notificationManager) {
+ String fileName = new SimpleDateFormat("'screen-'yyyyMMdd-HHmmss'.mp4'")
+ .format(new Date());
+
+ ContentValues values = new ContentValues();
+ values.put(MediaStore.Video.Media.DISPLAY_NAME, fileName);
+ values.put(MediaStore.Video.Media.MIME_TYPE, "video/mp4");
+ values.put(MediaStore.Video.Media.DATE_ADDED, System.currentTimeMillis());
+ values.put(MediaStore.Video.Media.DATE_TAKEN, System.currentTimeMillis());
+
+ ContentResolver resolver = getContentResolver();
+ Uri collectionUri = MediaStore.Video.Media.getContentUri(
+ MediaStore.VOLUME_EXTERNAL_PRIMARY);
+ Uri itemUri = resolver.insert(collectionUri, values);
+
+ try {
+ // Add to the mediastore
+ OutputStream os = resolver.openOutputStream(itemUri, "w");
+ Files.copy(mTempFile.toPath(), os);
+ os.close();
+
+ Notification notification = createSaveNotification(itemUri);
+ notificationManager.notify(NOTIFICATION_ID, notification);
+
+ mTempFile.delete();
+ } catch (IOException e) {
+ Log.e(TAG, "Error saving screen recording: " + e.getMessage());
+ Toast.makeText(this, R.string.screenrecord_delete_error, Toast.LENGTH_LONG)
+ .show();
+ }
+ }
+
private void setTapsVisible(boolean turnOn) {
int value = turnOn ? 1 : 0;
Settings.System.putInt(getApplicationContext().getContentResolver(),
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/EdgeBackGestureHandler.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/EdgeBackGestureHandler.java
index 6a7477945cdd..3314e67857e2 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/EdgeBackGestureHandler.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/EdgeBackGestureHandler.java
@@ -34,6 +34,7 @@ import android.os.SystemClock;
import android.os.SystemProperties;
import android.util.Log;
import android.util.MathUtils;
+import android.util.StatsLog;
import android.view.Gravity;
import android.view.IPinnedStackController;
import android.view.IPinnedStackListener;
@@ -107,7 +108,11 @@ public class EdgeBackGestureHandler implements DisplayListener {
public void onSystemGestureExclusionChanged(int displayId,
Region systemGestureExclusion, Region unrestrictedOrNull) {
if (displayId == mDisplayId) {
- mMainExecutor.execute(() -> mExcludeRegion.set(systemGestureExclusion));
+ mMainExecutor.execute(() -> {
+ mExcludeRegion.set(systemGestureExclusion);
+ mUnrestrictedExcludeRegion.set(unrestrictedOrNull != null
+ ? unrestrictedOrNull : systemGestureExclusion);
+ });
}
}
};
@@ -121,6 +126,8 @@ public class EdgeBackGestureHandler implements DisplayListener {
private final Executor mMainExecutor;
private final Region mExcludeRegion = new Region();
+ private final Region mUnrestrictedExcludeRegion = new Region();
+
// The edge width where touch down is allowed
private int mEdgeWidth;
// The slop to distinguish between horizontal and vertical motion
@@ -139,6 +146,7 @@ public class EdgeBackGestureHandler implements DisplayListener {
private final PointF mDownPoint = new PointF();
private boolean mThresholdCrossed = false;
private boolean mAllowGesture = false;
+ private boolean mInRejectedExclusion = false;
private boolean mIsOnLeftEdge;
private int mImeHeight = 0;
@@ -297,6 +305,7 @@ public class EdgeBackGestureHandler implements DisplayListener {
return mSamplingRect;
}
});
+ mRegionSamplingHelper.setWindowVisible(true);
}
}
@@ -318,6 +327,12 @@ public class EdgeBackGestureHandler implements DisplayListener {
if (isInExcludedRegion) {
mOverviewProxyService.notifyBackAction(false /* completed */, -1, -1,
false /* isButton */, !mIsOnLeftEdge);
+ StatsLog.write(StatsLog.BACK_GESTURE_REPORTED_REPORTED,
+ StatsLog.BACK_GESTURE__TYPE__INCOMPLETE_EXCLUDED, y,
+ mIsOnLeftEdge ? StatsLog.BACK_GESTURE__X_LOCATION__LEFT :
+ StatsLog.BACK_GESTURE__X_LOCATION__RIGHT);
+ } else {
+ mInRejectedExclusion = mUnrestrictedExcludeRegion.contains(x, y);
}
return !isInExcludedRegion;
}
@@ -325,6 +340,7 @@ public class EdgeBackGestureHandler implements DisplayListener {
private void cancelGesture(MotionEvent ev) {
// Send action cancel to reset all the touch events
mAllowGesture = false;
+ mInRejectedExclusion = false;
MotionEvent cancelEv = MotionEvent.obtain(ev);
cancelEv.setAction(MotionEvent.ACTION_CANCEL);
mEdgePanel.handleTouch(cancelEv);
@@ -338,6 +354,7 @@ public class EdgeBackGestureHandler implements DisplayListener {
// either the bouncer is showing or the notification panel is hidden
int stateFlags = mOverviewProxyService.getSystemUiStateFlags();
mIsOnLeftEdge = ev.getX() <= mEdgeWidth + mLeftInset;
+ mInRejectedExclusion = false;
mAllowGesture = !QuickStepContract.isBackGestureDisabled(stateFlags)
&& isWithinTouchRegion((int) ev.getX(), (int) ev.getY());
if (mAllowGesture) {
@@ -392,6 +409,14 @@ public class EdgeBackGestureHandler implements DisplayListener {
}
mOverviewProxyService.notifyBackAction(performAction, (int) mDownPoint.x,
(int) mDownPoint.y, false /* isButton */, !mIsOnLeftEdge);
+ int backtype = performAction ? (mInRejectedExclusion
+ ? StatsLog.BACK_GESTURE__TYPE__COMPLETED_REJECTED :
+ StatsLog.BACK_GESTURE__TYPE__COMPLETED) :
+ StatsLog.BACK_GESTURE__TYPE__INCOMPLETE;
+ StatsLog.write(StatsLog.BACK_GESTURE_REPORTED_REPORTED, backtype,
+ (int) mDownPoint.y, mIsOnLeftEdge
+ ? StatsLog.BACK_GESTURE__X_LOCATION__LEFT :
+ StatsLog.BACK_GESTURE__X_LOCATION__RIGHT);
}
if (isUp || action == MotionEvent.ACTION_CANCEL) {
mRegionSamplingHelper.stop();
@@ -463,7 +488,9 @@ public class EdgeBackGestureHandler implements DisplayListener {
pw.println("EdgeBackGestureHandler:");
pw.println(" mIsEnabled=" + mIsEnabled);
pw.println(" mAllowGesture=" + mAllowGesture);
+ pw.println(" mInRejectedExclusion" + mInRejectedExclusion);
pw.println(" mExcludeRegion=" + mExcludeRegion);
+ pw.println(" mUnrestrictedExcludeRegion=" + mUnrestrictedExcludeRegion);
pw.println(" mImeHeight=" + mImeHeight);
pw.println(" mIsAttached=" + mIsAttached);
pw.println(" mEdgeWidth=" + mEdgeWidth);
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavBarTintController.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavBarTintController.java
deleted file mode 100644
index 8bb8ca2550e3..000000000000
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavBarTintController.java
+++ /dev/null
@@ -1,210 +0,0 @@
-/*
- * Copyright (C) 2018 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.systemui.statusbar.phone;
-
-import static android.view.Display.DEFAULT_DISPLAY;
-import static android.view.WindowManagerPolicyConstants.NAV_BAR_MODE_3BUTTON;
-
-import android.content.Context;
-import android.content.res.Resources;
-import android.graphics.Point;
-import android.graphics.Rect;
-import android.os.Handler;
-import android.view.CompositionSamplingListener;
-import android.view.View;
-
-import com.android.systemui.R;
-import com.android.systemui.shared.system.QuickStepContract;
-
-import java.io.PrintWriter;
-
-/**
- * Updates the nav bar tint based on the color of the content behind the nav bar.
- */
-public class NavBarTintController implements View.OnAttachStateChangeListener,
- View.OnLayoutChangeListener {
-
- public static final int MIN_COLOR_ADAPT_TRANSITION_TIME = 400;
- public static final int DEFAULT_COLOR_ADAPT_TRANSITION_TIME = 1700;
-
- private final Handler mHandler = new Handler();
- private final NavigationBarView mNavigationBarView;
- private final LightBarTransitionsController mLightBarController;
- private int mNavBarMode = NAV_BAR_MODE_3BUTTON;
- private boolean mWindowVisible;
-
- private final CompositionSamplingListener mSamplingListener;
- private final Runnable mUpdateSamplingListener = this::updateSamplingListener;
- private final Rect mSamplingBounds = new Rect();
- private boolean mSamplingEnabled = false;
- private boolean mSamplingListenerRegistered = false;
-
- private float mLastMedianLuma;
- private float mCurrentMedianLuma;
- private boolean mUpdateOnNextDraw;
-
- private final int mNavBarHeight;
- private final int mNavColorSampleMargin;
-
- // Passing the threshold of this luminance value will make the button black otherwise white
- private final float mLuminanceThreshold;
- private final float mLuminanceChangeThreshold;
-
- public NavBarTintController(NavigationBarView navigationBarView,
- LightBarTransitionsController lightBarController) {
- mSamplingListener = new CompositionSamplingListener(
- navigationBarView.getContext().getMainExecutor()) {
- @Override
- public void onSampleCollected(float medianLuma) {
- updateTint(medianLuma);
- }
- };
- mNavigationBarView = navigationBarView;
- mNavigationBarView.addOnAttachStateChangeListener(this);
- mNavigationBarView.addOnLayoutChangeListener(this);
- mLightBarController = lightBarController;
-
- final Resources res = navigationBarView.getResources();
- mNavBarHeight = res.getDimensionPixelSize(R.dimen.navigation_bar_height);
- mNavColorSampleMargin =
- res.getDimensionPixelSize(R.dimen.navigation_handle_sample_horizontal_margin);
- mLuminanceThreshold = res.getFloat(R.dimen.navigation_luminance_threshold);
- mLuminanceChangeThreshold = res.getFloat(R.dimen.navigation_luminance_change_threshold);
- }
-
- void onDraw() {
- if (mUpdateOnNextDraw) {
- mUpdateOnNextDraw = false;
- requestUpdateSamplingListener();
- }
- }
-
- void start() {
- if (!isEnabled(mNavigationBarView.getContext(), mNavBarMode)) {
- return;
- }
- mSamplingEnabled = true;
- // Defer calling updateSamplingListener since we may have just reinflated prior to this
- requestUpdateSamplingListener();
- }
-
- void stop() {
- mSamplingEnabled = false;
- requestUpdateSamplingListener();
- }
-
- @Override
- public void onViewAttachedToWindow(View view) {
- requestUpdateSamplingListener();
- }
-
- @Override
- public void onViewDetachedFromWindow(View view) {
- // Defer calling updateSamplingListener the attach info has not yet been reset
- requestUpdateSamplingListener();
- }
-
- @Override
- public void onLayoutChange(View v, int left, int top, int right, int bottom,
- int oldLeft, int oldTop, int oldRight, int oldBottom) {
- mSamplingBounds.setEmpty();
- // TODO: Extend this to 2/3 button layout as well
- View view = mNavigationBarView.getHomeHandle().getCurrentView();
- if (view != null) {
- int[] pos = new int[2];
- view.getLocationOnScreen(pos);
- Point displaySize = new Point();
- view.getContext().getDisplay().getRealSize(displaySize);
- final Rect samplingBounds = new Rect(pos[0] - mNavColorSampleMargin,
- displaySize.y - mNavBarHeight, pos[0] + view.getWidth() + mNavColorSampleMargin,
- displaySize.y);
- if (!samplingBounds.equals(mSamplingBounds)) {
- mSamplingBounds.set(samplingBounds);
- requestUpdateSamplingListener();
- }
- }
- }
-
- private void requestUpdateSamplingListener() {
- mHandler.removeCallbacks(mUpdateSamplingListener);
- mHandler.post(mUpdateSamplingListener);
- }
-
- private void updateSamplingListener() {
- if (mSamplingListenerRegistered) {
- mSamplingListenerRegistered = false;
- CompositionSamplingListener.unregister(mSamplingListener);
- }
- if (mSamplingEnabled && mWindowVisible && !mSamplingBounds.isEmpty()
- && mNavigationBarView.isAttachedToWindow()) {
- if (!mNavigationBarView.getViewRootImpl().getSurfaceControl().isValid()) {
- // The view may still be attached, but the surface backing the window can be
- // destroyed, so wait until the next draw to update the listener again
- mUpdateOnNextDraw = true;
- return;
- }
- mSamplingListenerRegistered = true;
- CompositionSamplingListener.register(mSamplingListener, DEFAULT_DISPLAY,
- mNavigationBarView.getViewRootImpl().getSurfaceControl(),
- mSamplingBounds);
- }
- }
-
- private void updateTint(float medianLuma) {
- mLastMedianLuma = medianLuma;
-
- // If the difference between the new luma and the current luma is larger than threshold
- // then apply the current luma, this is to prevent small changes causing colors to flicker
- if (Math.abs(mCurrentMedianLuma - mLastMedianLuma) > mLuminanceChangeThreshold) {
- if (medianLuma > mLuminanceThreshold) {
- // Black
- mLightBarController.setIconsDark(true /* dark */, true /* animate */);
- } else {
- // White
- mLightBarController.setIconsDark(false /* dark */, true /* animate */);
- }
- mCurrentMedianLuma = medianLuma;
- }
- }
-
- public void setWindowVisible(boolean visible) {
- mWindowVisible = visible;
- requestUpdateSamplingListener();
- }
-
- public void onNavigationModeChanged(int mode) {
- mNavBarMode = mode;
- }
-
- void dump(PrintWriter pw) {
- pw.println("NavBarTintController:");
- pw.println(" navBar isAttached: " + mNavigationBarView.isAttachedToWindow());
- pw.println(" navBar isScValid: " + (mNavigationBarView.isAttachedToWindow()
- ? mNavigationBarView.getViewRootImpl().getSurfaceControl().isValid()
- : "false"));
- pw.println(" mSamplingListenerRegistered: " + mSamplingListenerRegistered);
- pw.println(" mSamplingBounds: " + mSamplingBounds);
- pw.println(" mLastMedianLuma: " + mLastMedianLuma);
- pw.println(" mCurrentMedianLuma: " + mCurrentMedianLuma);
- pw.println(" mWindowVisible: " + mWindowVisible);
- }
-
- public static boolean isEnabled(Context context, int navBarMode) {
- return context.getDisplayId() == DEFAULT_DISPLAY
- && QuickStepContract.isGesturalMode(navBarMode);
- }
-}
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 e9731c521308..5d3f3ac52395 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarFragment.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarFragment.java
@@ -1063,16 +1063,7 @@ public class NavigationBarFragment extends LifecycleFragment implements Callback
if (Intent.ACTION_SCREEN_OFF.equals(action)
|| Intent.ACTION_SCREEN_ON.equals(action)) {
notifyNavigationBarScreenOn();
-
- if (Intent.ACTION_SCREEN_ON.equals(action)) {
- // Enabled and screen is on, start it again if enabled
- if (NavBarTintController.isEnabled(getContext(), mNavBarMode)) {
- mNavigationBarView.getTintController().start();
- }
- } else {
- // Screen off disable it
- mNavigationBarView.getTintController().stop();
- }
+ mNavigationBarView.onScreenStateChanged(Intent.ACTION_SCREEN_ON.equals(action));
}
if (Intent.ACTION_USER_SWITCHED.equals(action)) {
// The accessibility settings may be different for the new user
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 23cc0fc51ec0..3b590315a5ca 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarTransitions.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarTransitions.java
@@ -18,8 +18,7 @@ package com.android.systemui.statusbar.phone;
import static android.view.WindowManagerPolicyConstants.NAV_BAR_MODE_3BUTTON;
-import static com.android.systemui.statusbar.phone.NavBarTintController.DEFAULT_COLOR_ADAPT_TRANSITION_TIME;
-import static com.android.systemui.statusbar.phone.NavBarTintController.MIN_COLOR_ADAPT_TRANSITION_TIME;
+import static com.android.systemui.util.Utils.isGesturalModeOnDefaultDisplay;
import android.content.Context;
import android.graphics.Rect;
@@ -42,6 +41,9 @@ import java.util.List;
public final class NavigationBarTransitions extends BarTransitions implements
LightBarTransitionsController.DarkIntensityApplier {
+ public static final int MIN_COLOR_ADAPT_TRANSITION_TIME = 400;
+ public static final int DEFAULT_COLOR_ADAPT_TRANSITION_TIME = 1700;
+
/**
* Notified when the color of nav bar elements changes.
*/
@@ -124,7 +126,7 @@ public final class NavigationBarTransitions extends BarTransitions implements
@Override
public void setAutoDim(boolean autoDim) {
// Ensure we aren't in gestural nav if we are triggering auto dim
- if (autoDim && NavBarTintController.isEnabled(mView.getContext(), mNavBarMode)) return;
+ if (autoDim && isGesturalModeOnDefaultDisplay(mView.getContext(), mNavBarMode)) return;
if (mAutoDim == autoDim) return;
mAutoDim = autoDim;
applyLightsOut(true, false);
@@ -201,7 +203,7 @@ public final class NavigationBarTransitions extends BarTransitions implements
@Override
public int getTintAnimationDuration() {
- if (NavBarTintController.isEnabled(mView.getContext(), mNavBarMode)) {
+ if (isGesturalModeOnDefaultDisplay(mView.getContext(), mNavBarMode)) {
return Math.max(DEFAULT_COLOR_ADAPT_TRANSITION_TIME, MIN_COLOR_ADAPT_TRANSITION_TIME);
}
return LightBarTransitionsController.DEFAULT_TINT_ANIMATION_DURATION;
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 f689a3eadf58..fdee278e76ac 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java
@@ -16,8 +16,6 @@
package com.android.systemui.statusbar.phone;
-import static android.view.WindowManagerPolicyConstants.NAV_BAR_MODE_3BUTTON;
-
import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_HOME_DISABLED;
import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_NOTIFICATION_PANEL_EXPANDED;
import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_OVERVIEW_DISABLED;
@@ -26,6 +24,7 @@ import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_S
import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_SEARCH_DISABLED;
import static com.android.systemui.shared.system.QuickStepContract.isGesturalMode;
import static com.android.systemui.statusbar.phone.BarTransitions.MODE_OPAQUE;
+import static com.android.systemui.util.Utils.isGesturalModeOnDefaultDisplay;
import android.animation.LayoutTransition;
import android.animation.LayoutTransition.TransitionListener;
@@ -89,6 +88,8 @@ public class NavigationBarView extends FrameLayout implements
final static boolean SLIPPERY_WHEN_DISABLED = true;
final static boolean ALTERNATE_CAR_MODE_UI = false;
+ private final RegionSamplingHelper mRegionSamplingHelper;
+ private final int mNavColorSampleMargin;
View mCurrentView = null;
private View mVertical;
@@ -101,7 +102,7 @@ public class NavigationBarView extends FrameLayout implements
boolean mLongClickableAccessibilityButton;
int mDisabledFlags = 0;
int mNavigationIconHints = 0;
- private int mNavBarMode = NAV_BAR_MODE_3BUTTON;
+ private int mNavBarMode;
private Rect mHomeButtonBounds = new Rect();
private Rect mBackButtonBounds = new Rect();
@@ -143,14 +144,13 @@ public class NavigationBarView extends FrameLayout implements
private FloatingRotationButton mFloatingRotationButton;
private RotationButtonController mRotationButtonController;
- private NavBarTintController mTintController;
-
/**
* Helper that is responsible for showing the right toast when a disallowed activity operation
* occurred. In pinned mode, we show instructions on how to break out of this mode, whilst in
* fully locked mode we only show that unlocking is blocked.
*/
private ScreenPinningNotify mScreenPinningNotify;
+ private Rect mSamplingBounds = new Rect();
private class NavTransitionListener implements TransitionListener {
private boolean mBackTransitioning;
@@ -305,12 +305,30 @@ public class NavigationBarView extends FrameLayout implements
mButtonDispatchers.put(R.id.menu_container, mContextualButtonGroup);
mDeadZone = new DeadZone(this);
- mEdgeBackGestureHandler = new EdgeBackGestureHandler(context, mOverviewProxyService);
- mTintController = new NavBarTintController(this, getLightTransitionsController());
- }
+ mNavColorSampleMargin =
+ getResources()
+ .getDimensionPixelSize(R.dimen.navigation_handle_sample_horizontal_margin);
- public NavBarTintController getTintController() {
- return mTintController;
+ mEdgeBackGestureHandler = new EdgeBackGestureHandler(context, mOverviewProxyService);
+ mRegionSamplingHelper = new RegionSamplingHelper(this,
+ new RegionSamplingHelper.SamplingCallback() {
+ @Override
+ public void onRegionDarknessChanged(boolean isRegionDark) {
+ getLightTransitionsController().setIconsDark(!isRegionDark ,
+ true /* animate */);
+ }
+
+ @Override
+ public Rect getSampledRegion(View sampledView) {
+ updateSamplingRect();
+ return mSamplingBounds;
+ }
+
+ @Override
+ public boolean isSamplingEnabled() {
+ return isGesturalModeOnDefaultDisplay(getContext(), mNavBarMode);
+ }
+ });
}
public NavigationBarTransitions getBarTransitions() {
@@ -326,12 +344,6 @@ public class NavigationBarView extends FrameLayout implements
updatePanelSystemUiStateFlags();
}
- @Override
- protected void dispatchDraw(Canvas canvas) {
- super.dispatchDraw(canvas);
- mTintController.onDraw();
- }
-
public void setOnVerticalChangedListener(OnVerticalChangedListener onVerticalChangedListener) {
mOnVerticalChangedListener = onVerticalChangedListener;
notifyVerticalChangedListener(mIsVertical);
@@ -352,10 +364,10 @@ public class NavigationBarView extends FrameLayout implements
if (newMode == MODE_OPAQUE) {
// If the nav bar background is opaque, stop auto tinting since we know the icons are
// showing over a dark background
- mTintController.stop();
+ mRegionSamplingHelper.stop();
getLightTransitionsController().setIconsDark(false /* dark */, true /* animate */);
} else {
- mTintController.start();
+ mRegionSamplingHelper.start(mSamplingBounds);
}
}
@@ -535,8 +547,19 @@ public class NavigationBarView extends FrameLayout implements
return KeyButtonDrawable.create(mContext, icon, hasShadow);
}
+ /** To be called when screen lock/unlock state changes */
+ public void onScreenStateChanged(boolean isScreenOn) {
+ if (isScreenOn) {
+ if (isGesturalModeOnDefaultDisplay(getContext(), mNavBarMode)) {
+ mRegionSamplingHelper.start(mSamplingBounds);
+ }
+ } else {
+ mRegionSamplingHelper.stop();
+ }
+ }
+
public void setWindowVisible(boolean visible) {
- mTintController.setWindowVisible(visible);
+ mRegionSamplingHelper.setWindowVisible(visible);
mRotationButtonController.onNavigationBarWindowVisibilityChange(visible);
}
@@ -799,13 +822,7 @@ public class NavigationBarView extends FrameLayout implements
mRecentsOnboarding.onNavigationModeChanged(mNavBarMode);
getRotateSuggestionButton().onNavigationModeChanged(mNavBarMode);
- // Color adaption is tied with showing home handle, only avaliable if visible
- mTintController.onNavigationModeChanged(mNavBarMode);
- if (isGesturalMode(mNavBarMode)) {
- mTintController.start();
- } else {
- mTintController.stop();
- }
+ mRegionSamplingHelper.start(mSamplingBounds);
}
public void setAccessibilityButtonState(final boolean visible, final boolean longClickable) {
@@ -836,6 +853,24 @@ public class NavigationBarView extends FrameLayout implements
super.onDraw(canvas);
}
+ private void updateSamplingRect() {
+ mSamplingBounds.setEmpty();
+ // TODO: Extend this to 2/3 button layout as well
+ View view = getHomeHandle().getCurrentView();
+
+ if (view != null) {
+ int[] pos = new int[2];
+ view.getLocationOnScreen(pos);
+ Point displaySize = new Point();
+ view.getContext().getDisplay().getRealSize(displaySize);
+ final Rect samplingBounds = new Rect(pos[0] - mNavColorSampleMargin,
+ displaySize.y - getNavBarHeight(),
+ pos[0] + view.getWidth() + mNavColorSampleMargin,
+ displaySize.y);
+ mSamplingBounds.set(samplingBounds);
+ }
+ }
+
@Override
protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
super.onLayout(changed, left, top, right, bottom);
@@ -984,6 +1019,14 @@ public class NavigationBarView extends FrameLayout implements
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
}
+ private int getNavBarHeight() {
+ return mIsVertical
+ ? getResources().getDimensionPixelSize(
+ com.android.internal.R.dimen.navigation_bar_height_landscape)
+ : getResources().getDimensionPixelSize(
+ com.android.internal.R.dimen.navigation_bar_height);
+ }
+
private void notifyVerticalChangedListener(boolean newVertical) {
if (mOnVerticalChangedListener != null) {
mOnVerticalChangedListener.onVerticalChanged(newVertical);
@@ -1130,7 +1173,7 @@ public class NavigationBarView extends FrameLayout implements
mContextualButtonGroup.dump(pw);
mRecentsOnboarding.dump(pw);
- mTintController.dump(pw);
+ mRegionSamplingHelper.dump(pw);
mEdgeBackGestureHandler.dump(pw);
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationPrototypeController.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationPrototypeController.java
index 9988c85361bb..5d8044f37c38 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationPrototypeController.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationPrototypeController.java
@@ -16,7 +16,7 @@
package com.android.systemui.statusbar.phone;
-import static android.view.WindowManagerPolicyConstants.NAV_BAR_MODE_GESTURAL;
+import static android.view.Display.DEFAULT_DISPLAY;
import android.annotation.IntDef;
import android.content.ComponentCallbacks;
@@ -29,8 +29,6 @@ import android.net.Uri;
import android.os.Handler;
import android.provider.Settings;
-import com.android.systemui.shared.system.QuickStepContract;
-
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
@@ -120,8 +118,7 @@ public class NavigationPrototypeController extends ContentObserver implements Co
} else if (path.endsWith(HIDE_HOME_BUTTON_SETTING)) {
mListener.onHomeButtonVisibilityChanged(!hideHomeButton());
} else if (path.endsWith(NAV_COLOR_ADAPT_ENABLE_SETTING)) {
- mListener.onColorAdaptChanged(
- NavBarTintController.isEnabled(mContext, NAV_BAR_MODE_GESTURAL));
+ mListener.onColorAdaptChanged(mContext.getDisplayId() == DEFAULT_DISPLAY);
} else if (path.endsWith(SHOW_HOME_HANDLE_SETTING)) {
mListener.onHomeHandleVisiblilityChanged(showHomeHandle());
} else if (path.endsWith(ENABLE_ASSISTANT_GESTURE)) {
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/RegionSamplingHelper.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/RegionSamplingHelper.java
index 8026f654414c..c1ff572bb210 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/RegionSamplingHelper.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/RegionSamplingHelper.java
@@ -29,6 +29,8 @@ import android.view.ViewTreeObserver;
import com.android.systemui.R;
+import java.io.PrintWriter;
+
/**
* A helper class to sample regions on the screen and inspect its luminosity.
*/
@@ -62,6 +64,7 @@ public class RegionSamplingHelper implements View.OnAttachStateChangeListener,
private final float mLuminanceThreshold;
private final float mLuminanceChangeThreshold;
private boolean mFirstSamplingAfterStart;
+ private boolean mWindowVisible;
private SurfaceControl mRegisteredStopLayer = null;
private ViewTreeObserver.OnDrawListener mUpdateOnDraw = new ViewTreeObserver.OnDrawListener() {
@Override
@@ -148,7 +151,9 @@ public class RegionSamplingHelper implements View.OnAttachStateChangeListener,
}
private void updateSamplingListener() {
- boolean isSamplingEnabled = mSamplingEnabled && !mSamplingRequestBounds.isEmpty()
+ boolean isSamplingEnabled = mSamplingEnabled
+ && !mSamplingRequestBounds.isEmpty()
+ && mWindowVisible
&& (mSampledView.isAttachedToWindow() || mFirstSamplingAfterStart);
if (isSamplingEnabled) {
ViewRootImpl viewRootImpl = mSampledView.getViewRootImpl();
@@ -216,6 +221,24 @@ public class RegionSamplingHelper implements View.OnAttachStateChangeListener,
}
}
+ void setWindowVisible(boolean visible) {
+ mWindowVisible = visible;
+ updateSamplingListener();
+ }
+
+ void dump(PrintWriter pw) {
+ pw.println("RegionSamplingHelper:");
+ pw.println(" sampleView isAttached: " + mSampledView.isAttachedToWindow());
+ pw.println(" sampleView isScValid: " + (mSampledView.isAttachedToWindow()
+ ? mSampledView.getViewRootImpl().getSurfaceControl().isValid()
+ : "false"));
+ pw.println(" mSamplingListenerRegistered: " + mSamplingListenerRegistered);
+ pw.println(" mSamplingRequestBounds: " + mSamplingRequestBounds);
+ pw.println(" mLastMedianLuma: " + mLastMedianLuma);
+ pw.println(" mCurrentMedianLuma: " + mCurrentMedianLuma);
+ pw.println(" mWindowVisible: " + mWindowVisible);
+ }
+
public interface SamplingCallback {
/**
* Called when the darkness of the sampled region changes
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 b12bf5c39970..a7262cfcfefb 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimController.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimController.java
@@ -47,6 +47,7 @@ import com.android.systemui.R;
import com.android.systemui.colorextraction.SysuiColorExtractor;
import com.android.systemui.statusbar.ScrimView;
import com.android.systemui.statusbar.notification.stack.ViewState;
+import com.android.systemui.statusbar.policy.KeyguardMonitor;
import com.android.systemui.util.AlarmTimeout;
import com.android.systemui.util.wakelock.DelayedWakeLock;
import com.android.systemui.util.wakelock.WakeLock;
@@ -177,7 +178,7 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, OnCo
public ScrimController(ScrimView scrimBehind, ScrimView scrimInFront,
TriConsumer<ScrimState, Float, GradientColors> scrimStateListener,
Consumer<Integer> scrimVisibleListener, DozeParameters dozeParameters,
- AlarmManager alarmManager) {
+ AlarmManager alarmManager, KeyguardMonitor keyguardMonitor) {
mScrimBehind = scrimBehind;
mScrimInFront = scrimInFront;
mScrimStateListener = scrimStateListener;
@@ -197,6 +198,13 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, OnCo
// to make sure that text on top of it is legible.
mScrimBehindAlpha = mScrimBehindAlphaResValue;
mDozeParameters = dozeParameters;
+ keyguardMonitor.addCallback(new KeyguardMonitor.Callback() {
+ @Override
+ public void onKeyguardFadingAwayChanged() {
+ setKeyguardFadingAway(keyguardMonitor.isKeyguardFadingAway(),
+ keyguardMonitor.getKeyguardFadingAwayDuration());
+ }
+ });
mColorExtractor = Dependency.get(SysuiColorExtractor.class);
mColorExtractor.addOnColorsChangedListener(this);
@@ -948,9 +956,9 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, OnCo
}
}
- public void setUnlockIsFading(boolean unlockFading) {
+ private void setKeyguardFadingAway(boolean fadingAway, long duration) {
for (ScrimState state : ScrimState.values()) {
- state.setUnlockIsFading(unlockFading);
+ state.setKeyguardFadingAway(fadingAway, duration);
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimState.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimState.java
index b45914b2e83d..9fdd3b88e9d0 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimState.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimState.java
@@ -156,8 +156,8 @@ public enum ScrimState {
public void prepare(ScrimState previousState) {
mCurrentBehindAlpha = 0;
mCurrentInFrontAlpha = 0;
- mAnimationDuration = mUnlockIsFading
- ? KeyguardBypassController.BYPASS_PANEL_FADE_DURATION
+ mAnimationDuration = mKeyguardFadingAway
+ ? mKeyguardFadingAwayDuration
: StatusBar.FADE_KEYGUARD_DURATION;
mAnimateChange = !mLaunchingAffordanceWithPreview;
@@ -209,7 +209,8 @@ public enum ScrimState {
boolean mHasBackdrop;
boolean mLaunchingAffordanceWithPreview;
boolean mWakeLockScreenSensorActive;
- boolean mUnlockIsFading;
+ boolean mKeyguardFadingAway;
+ long mKeyguardFadingAwayDuration;
ScrimState(int index) {
mIndex = index;
@@ -298,7 +299,8 @@ public enum ScrimState {
mWakeLockScreenSensorActive = active;
}
- public void setUnlockIsFading(boolean unlockIsFading) {
- mUnlockIsFading = unlockIsFading;
+ public void setKeyguardFadingAway(boolean fadingAway, long duration) {
+ mKeyguardFadingAway = fadingAway;
+ mKeyguardFadingAwayDuration = duration;
}
} \ No newline at end of file
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 90aba879f510..f158ca1eaf5b 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java
@@ -948,7 +948,8 @@ public class StatusBar extends SystemUI implements DemoMode,
mStatusBarWindow.onScrimVisibilityChanged(scrimsVisible);
}
}, DozeParameters.getInstance(mContext),
- mContext.getSystemService(AlarmManager.class));
+ mContext.getSystemService(AlarmManager.class),
+ mKeyguardMonitor);
mNotificationPanel.initDependencies(this, mGroupManager, mNotificationShelf,
mHeadsUpManager, mNotificationIconAreaController, mScrimController);
mDozeScrimController = new DozeScrimController(DozeParameters.getInstance(context));
@@ -3874,7 +3875,6 @@ public class StatusBar extends SystemUI implements DemoMode,
public void notifyBiometricAuthModeChanged() {
updateDozing();
- mScrimController.setUnlockIsFading(mBiometricUnlockController.isUnlockFading());
updateScrimController();
mStatusBarWindow.onBiometricAuthModeChanged(mBiometricUnlockController.isWakeAndUnlock(),
mBiometricUnlockController.isBiometricUnlock());
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/KeyguardMonitor.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/KeyguardMonitor.java
index 070136ec94c1..e1ef809a883c 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/KeyguardMonitor.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/KeyguardMonitor.java
@@ -76,7 +76,7 @@ public interface KeyguardMonitor extends CallbackController<Callback> {
}
interface Callback {
- void onKeyguardShowingChanged();
+ default void onKeyguardShowingChanged() {}
default void onKeyguardFadingAwayChanged() {}
}
}
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 8829be4ee0f8..87ed14a9eeec 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/KeyguardMonitorImpl.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/KeyguardMonitorImpl.java
@@ -142,10 +142,10 @@ public class KeyguardMonitorImpl extends KeyguardUpdateMonitorCallback
}
public void notifyKeyguardFadingAway(long delay, long fadeoutDuration, boolean isBypassFading) {
- setKeyguardFadingAway(true);
mKeyguardFadingAwayDelay = delay;
mKeyguardFadingAwayDuration = fadeoutDuration;
mBypassFadingAnimation = isBypassFading;
+ setKeyguardFadingAway(true);
}
private void setKeyguardFadingAway(boolean keyguardFadingAway) {
diff --git a/packages/SystemUI/src/com/android/systemui/util/Utils.java b/packages/SystemUI/src/com/android/systemui/util/Utils.java
index 1102bb7e690e..92a8d8482e87 100644
--- a/packages/SystemUI/src/com/android/systemui/util/Utils.java
+++ b/packages/SystemUI/src/com/android/systemui/util/Utils.java
@@ -14,12 +14,16 @@
package com.android.systemui.util;
+import static android.view.Display.DEFAULT_DISPLAY;
+
import android.Manifest;
+import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.view.View;
import com.android.systemui.SysUiServiceProvider;
+import com.android.systemui.shared.system.QuickStepContract;
import com.android.systemui.statusbar.CommandQueue;
import java.util.List;
@@ -110,4 +114,14 @@ public class Utils {
return pm.queryIntentActivities(homeIntent, 0).isEmpty();
}
+ /**
+ * Returns {@code true} if the navMode is that of
+ * {@link android.view.WindowManagerPolicyConstants#NAV_BAR_MODE_GESTURAL} AND
+ * the context is that of the default display
+ */
+ public static boolean isGesturalModeOnDefaultDisplay(Context context, int navMode) {
+ return context.getDisplayId() == DEFAULT_DISPLAY
+ && QuickStepContract.isGesturalMode(navMode);
+ }
+
}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/ScrimControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/ScrimControllerTest.java
index 0dbf30881ffe..97ad47ec3f0c 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/ScrimControllerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/ScrimControllerTest.java
@@ -47,6 +47,7 @@ import com.android.internal.colorextraction.ColorExtractor.GradientColors;
import com.android.internal.util.function.TriConsumer;
import com.android.systemui.SysuiTestCase;
import com.android.systemui.statusbar.ScrimView;
+import com.android.systemui.statusbar.policy.KeyguardMonitor;
import com.android.systemui.util.wakelock.WakeLock;
import com.android.systemui.utils.os.FakeHandler;
@@ -96,7 +97,8 @@ public class ScrimControllerTest extends SysuiTestCase {
mScrimBehindAlpha = scrimBehindAlpha;
mScrimInFrontColor = scrimInFrontColor;
},
- visible -> mScrimVisibility = visible, mDozeParamenters, mAlarmManager);
+ visible -> mScrimVisibility = visible, mDozeParamenters, mAlarmManager,
+ mock(KeyguardMonitor.class));
mScrimController.setHasBackdrop(false);
mScrimController.setWallpaperSupportsAmbientMode(false);
mScrimController.transitionTo(ScrimState.KEYGUARD);
@@ -681,9 +683,9 @@ public class ScrimControllerTest extends SysuiTestCase {
SynchronousScrimController(ScrimView scrimBehind, ScrimView scrimInFront,
TriConsumer<ScrimState, Float, GradientColors> scrimStateListener,
Consumer<Integer> scrimVisibleListener, DozeParameters dozeParameters,
- AlarmManager alarmManager) {
+ AlarmManager alarmManager, KeyguardMonitor keyguardMonitor) {
super(scrimBehind, scrimInFront, scrimStateListener, scrimVisibleListener,
- dozeParameters, alarmManager);
+ dozeParameters, alarmManager, keyguardMonitor);
}
@Override
diff --git a/services/accessibility/java/com/android/server/accessibility/AbstractAccessibilityServiceConnection.java b/services/accessibility/java/com/android/server/accessibility/AbstractAccessibilityServiceConnection.java
index 6b88f5a9a6d7..135615708037 100644
--- a/services/accessibility/java/com/android/server/accessibility/AbstractAccessibilityServiceConnection.java
+++ b/services/accessibility/java/com/android/server/accessibility/AbstractAccessibilityServiceConnection.java
@@ -1186,8 +1186,8 @@ abstract class AbstractAccessibilityServiceConnection extends IAccessibilityServ
mInvocationHandler.notifySoftKeyboardShowModeChangedLocked(showState);
}
- public void notifyAccessibilityButtonClickedLocked() {
- mInvocationHandler.notifyAccessibilityButtonClickedLocked();
+ public void notifyAccessibilityButtonClickedLocked(int displayId) {
+ mInvocationHandler.notifyAccessibilityButtonClickedLocked(displayId);
}
public void notifyAccessibilityButtonAvailabilityChangedLocked(boolean available) {
@@ -1226,11 +1226,11 @@ abstract class AbstractAccessibilityServiceConnection extends IAccessibilityServ
}
}
- private void notifyAccessibilityButtonClickedInternal() {
+ private void notifyAccessibilityButtonClickedInternal(int displayId) {
final IAccessibilityServiceClient listener = getServiceInterfaceSafely();
if (listener != null) {
try {
- listener.onAccessibilityButtonClicked();
+ listener.onAccessibilityButtonClicked(displayId);
} catch (RemoteException re) {
Slog.e(LOG_TAG, "Error sending accessibility button click to " + mService, re);
}
@@ -1484,7 +1484,8 @@ abstract class AbstractAccessibilityServiceConnection extends IAccessibilityServ
} break;
case MSG_ON_ACCESSIBILITY_BUTTON_CLICKED: {
- notifyAccessibilityButtonClickedInternal();
+ final int displayId = (int) message.arg1;
+ notifyAccessibilityButtonClickedInternal(displayId);
} break;
case MSG_ON_ACCESSIBILITY_BUTTON_AVAILABILITY_CHANGED: {
@@ -1546,8 +1547,8 @@ abstract class AbstractAccessibilityServiceConnection extends IAccessibilityServ
mIsSoftKeyboardCallbackEnabled = enabled;
}
- public void notifyAccessibilityButtonClickedLocked() {
- final Message msg = obtainMessage(MSG_ON_ACCESSIBILITY_BUTTON_CLICKED);
+ public void notifyAccessibilityButtonClickedLocked(int displayId) {
+ final Message msg = obtainMessage(MSG_ON_ACCESSIBILITY_BUTTON_CLICKED, displayId, 0);
msg.sendToTarget();
}
diff --git a/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java b/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java
index b5b3cd2fe530..d058b9a15b41 100644
--- a/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java
+++ b/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java
@@ -1085,9 +1085,7 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub
for (int i = state.mBoundServices.size() - 1; i >= 0; i--) {
final AccessibilityServiceConnection service = state.mBoundServices.get(i);
if (service.mRequestAccessibilityButton) {
- // TODO(b/120762691): Need to notify each accessibility service if
- // accessibility button is clicked per display.
- service.notifyAccessibilityButtonClickedLocked();
+ service.notifyAccessibilityButtonClickedLocked(displayId);
return;
}
}
@@ -1109,9 +1107,7 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub
final AccessibilityServiceConnection service = state.mBoundServices.get(i);
if (service.mRequestAccessibilityButton && (service.mComponentName.equals(
state.mServiceAssignedToAccessibilityButton))) {
- // TODO(b/120762691): Need to notify each accessibility service if
- // accessibility button is clicked per display.
- service.notifyAccessibilityButtonClickedLocked();
+ service.notifyAccessibilityButtonClickedLocked(displayId);
return;
}
}
diff --git a/services/accessibility/java/com/android/server/accessibility/gestures/TouchExplorer.java b/services/accessibility/java/com/android/server/accessibility/gestures/TouchExplorer.java
index 10c32ee87c13..d8b7e3a25e04 100644
--- a/services/accessibility/java/com/android/server/accessibility/gestures/TouchExplorer.java
+++ b/services/accessibility/java/com/android/server/accessibility/gestures/TouchExplorer.java
@@ -27,8 +27,6 @@ import android.os.Handler;
import android.util.Slog;
import android.view.InputDevice;
import android.view.MotionEvent;
-import android.view.MotionEvent.PointerCoords;
-import android.view.MotionEvent.PointerProperties;
import android.view.ViewConfiguration;
import android.view.accessibility.AccessibilityEvent;
import android.view.accessibility.AccessibilityManager;
@@ -129,15 +127,6 @@ public class TouchExplorer extends BaseEventStreamTransformation
// Context in which this explorer operates.
private final Context mContext;
- // The long pressing pointer id if coordinate remapping is needed.
- private int mLongPressingPointerId = -1;
-
- // The long pressing pointer X if coordinate remapping is needed.
- private int mLongPressingPointerDeltaX;
-
- // The long pressing pointer Y if coordinate remapping is needed.
- private int mLongPressingPointerDeltaY;
-
/**
* Creates a new instance.
@@ -231,10 +220,6 @@ public class TouchExplorer extends BaseEventStreamTransformation
mGestureDetector.clear();
// Go to initial state.
mState.clear();
- // Clear the long pressing pointer remap data.
- mLongPressingPointerId = -1;
- mLongPressingPointerDeltaX = 0;
- mLongPressingPointerDeltaY = 0;
mAms.onTouchInteractionEnd();
}
@@ -705,17 +690,6 @@ public class TouchExplorer extends BaseEventStreamTransformation
return;
}
case MotionEvent.ACTION_UP: {
- // Offset the event if we are doing a long press as the
- // target is not necessarily under the user's finger.
- if (mLongPressingPointerId >= 0) {
- event = offsetEvent(event, - mLongPressingPointerDeltaX,
- - mLongPressingPointerDeltaY);
- // Clear the long press state.
- mLongPressingPointerId = -1;
- mLongPressingPointerDeltaX = 0;
- mLongPressingPointerDeltaY = 0;
- }
-
// Deliver the event.
sendMotionEvent(event, event.getAction(), ALL_POINTER_ID_BITS, policyFlags);
@@ -865,18 +839,6 @@ public class TouchExplorer extends BaseEventStreamTransformation
} else {
event.setDownTime(mInjectedPointerTracker.getLastInjectedDownEventTime());
}
-
- // If the user is long pressing but the long pressing pointer
- // was not exactly over the accessibility focused item we need
- // to remap the location of that pointer so the user does not
- // have to explicitly touch explore something to be able to
- // long press it, or even worse to avoid the user long pressing
- // on the wrong item since click and long press behave differently.
- if (mLongPressingPointerId >= 0) {
- event = offsetEvent(event, - mLongPressingPointerDeltaX,
- - mLongPressingPointerDeltaY);
- }
-
if (DEBUG) {
Slog.d(LOG_TAG, "Injecting event: " + event + ", policyFlags=0x"
+ Integer.toHexString(policyFlags));
@@ -897,39 +859,6 @@ public class TouchExplorer extends BaseEventStreamTransformation
}
/**
- * Offsets all pointers in the given event by adding the specified X and Y
- * offsets.
- *
- * @param event The event to offset.
- * @param offsetX The X offset.
- * @param offsetY The Y offset.
- * @return An event with the offset pointers or the original event if both
- * offsets are zero.
- */
- private MotionEvent offsetEvent(MotionEvent event, int offsetX, int offsetY) {
- if (offsetX == 0 && offsetY == 0) {
- return event;
- }
- final int remappedIndex = event.findPointerIndex(mLongPressingPointerId);
- final int pointerCount = event.getPointerCount();
- PointerProperties[] props = PointerProperties.createArray(pointerCount);
- PointerCoords[] coords = PointerCoords.createArray(pointerCount);
- for (int i = 0; i < pointerCount; i++) {
- event.getPointerProperties(i, props[i]);
- event.getPointerCoords(i, coords[i]);
- if (i == remappedIndex) {
- coords[i].x += offsetX;
- coords[i].y += offsetY;
- }
- }
- return MotionEvent.obtain(event.getDownTime(),
- event.getEventTime(), event.getAction(), event.getPointerCount(),
- props, coords, event.getMetaState(), event.getButtonState(),
- 1.0f, 1.0f, event.getDeviceId(), event.getEdgeFlags(),
- event.getSource(), event.getDisplayId(), event.getFlags());
- }
-
- /**
* Computes the action for an injected event based on a masked action
* and a pointer index.
*
@@ -1189,9 +1118,6 @@ public class TouchExplorer extends BaseEventStreamTransformation
+ ", mDetermineUserIntentTimeout: " + mDetermineUserIntentTimeout
+ ", mDoubleTapSlop: " + mDoubleTapSlop
+ ", mDraggingPointerId: " + mDraggingPointerId
- + ", mLongPressingPointerId: " + mLongPressingPointerId
- + ", mLongPressingPointerDeltaX: " + mLongPressingPointerDeltaX
- + ", mLongPressingPointerDeltaY: " + mLongPressingPointerDeltaY
+ ", mTempPoint: " + mTempPoint
+ " }";
}
diff --git a/services/art-profile-boot b/services/art-profile-boot
index 23d709099cc0..e09424bc261c 100644
--- a/services/art-profile-boot
+++ b/services/art-profile-boot
@@ -1,326 +1,760 @@
-Lcom/android/server/SystemServer;->run()V
-Lcom/android/server/SystemServer;->main([Ljava/lang/String;)V
-Lcom/android/server/SystemServer;->startBootstrapServices()V
-Lcom/android/server/pm/PackageManagerService;->main(Landroid/content/Context;Lcom/android/server/pm/Installer;ZZ)Lcom/android/server/pm/PackageManagerService;
-Lcom/android/server/pm/PackageManagerService;-><init>(Landroid/content/Context;Lcom/android/server/pm/Installer;ZZ)V
-Lcom/android/server/pm/Settings;->readLPw(Ljava/util/List;)Z
-Lcom/android/server/pm/Settings;->readPackageLPw(Lorg/xmlpull/v1/XmlPullParser;)V
+Lcom/android/server/appop/AppOpsService;->readUidOps(Lorg/xmlpull/v1/XmlPullParser;)V
+Lcom/android/server/appop/AppOpsService;->readOp(Lorg/xmlpull/v1/XmlPullParser;Lcom/android/server/appop/AppOpsService$UidState;Ljava/lang/String;Z)V
+Lcom/android/server/appop/AppOpsService$UidState;->evalForegroundOps(Landroid/util/SparseArray;)V
+Lcom/android/server/appop/AppOpsService;->readUid(Lorg/xmlpull/v1/XmlPullParser;Ljava/lang/String;)V
+Lcom/android/server/appop/AppOpsService$Op;->updateProxyState(JILjava/lang/String;)V
+Lcom/android/server/appop/AppOpsService$Op;->accessed(JILjava/lang/String;II)V
+Lcom/android/server/pm/permission/PermissionSettings;->readPermissions(Landroid/util/ArrayMap;Lorg/xmlpull/v1/XmlPullParser;)V
+Lcom/android/server/pm/permission/BasePermission;-><init>(Ljava/lang/String;Ljava/lang/String;I)V
+Lcom/android/server/pm/permission/BasePermission;->readInt(Lorg/xmlpull/v1/XmlPullParser;Ljava/lang/String;Ljava/lang/String;I)I
+Lcom/android/server/pm/permission/BasePermission;->readLPw(Ljava/util/Map;Lorg/xmlpull/v1/XmlPullParser;)Z
+Lcom/android/server/pm/permission/PermissionsState$PermissionData;->isInstallPermission()Z
+Lcom/android/server/pm/permission/BasePermission;->getName()Ljava/lang/String;
+Lcom/android/server/pm/permission/PermissionsState$PermissionState;->access$100(Lcom/android/server/pm/permission/PermissionsState$PermissionState;)I
+Lcom/android/server/pm/permission/PermissionsState;->enforceValidUserId(I)V
+Lcom/android/server/pm/permission/PermissionsState;->hasPermission(Ljava/lang/String;I)Z
+Lcom/android/server/pm/permission/PermissionsState$PermissionData;->isGranted(I)Z
+Lcom/android/server/pm/permission/BasePermission;->computeGids(I)[I
+Lcom/android/server/pm/permission/PermissionsState;->appendInts([I[I)[I
+Lcom/android/server/pm/permission/PermissionsState;->computeGids(I)[I
+Lcom/android/server/pm/permission/PermissionsState$PermissionState;->access$000(Lcom/android/server/pm/permission/PermissionsState$PermissionState;)Z
+Lcom/android/server/pm/permission/PermissionsState$PermissionData;->computeGids(I)[I
Lcom/android/server/pm/Settings;->readInstallPermissionsLPr(Lorg/xmlpull/v1/XmlPullParser;Lcom/android/server/pm/permission/PermissionsState;)V
-Lcom/android/server/pm/permission/PermissionsState;->grantPermission(Lcom/android/server/pm/permission/BasePermission;I)I
+Lcom/android/server/pm/permission/PermissionsState$PermissionData;->isCompatibleUserId(I)Z
+Lcom/android/server/pm/permission/PermissionsState$PermissionData;->isDefault()Z
+Lcom/android/server/pm/permission/PermissionSettings;->getPermissionLocked(Ljava/lang/String;)Lcom/android/server/pm/permission/BasePermission;
+Lcom/android/server/pm/permission/PermissionSettings;->getPermission(Ljava/lang/String;)Lcom/android/server/pm/permission/BasePermission;
Lcom/android/server/pm/permission/PermissionsState;->grantInstallPermission(Lcom/android/server/pm/permission/BasePermission;)I
-Lcom/android/server/-$$Lambda$YWiwiKm_Qgqb55C6tTuq_n2JzdY;->run()V
-Lcom/android/server/pm/PackageSignatures;->readXml(Lorg/xmlpull/v1/XmlPullParser;Ljava/util/ArrayList;)V
-Lcom/android/server/pm/permission/PermissionsState;->computeGids(I)[I
-Lcom/android/server/am/-$$Lambda$BatteryExternalStatsWorker$ddVY5lmqswnSjXppAxPTOHbuzzQ;->run()V
-Lcom/android/server/SystemServiceManager;->startService(Lcom/android/server/SystemService;)V
-Lcom/android/server/SystemServiceManager;->startService(Ljava/lang/Class;)Lcom/android/server/SystemService;
-Lcom/android/server/SystemServiceManager;->startService(Ljava/lang/String;)Lcom/android/server/SystemService;
-Lcom/android/server/pm/permission/PermissionsState;->hasPermission(Ljava/lang/String;I)Z
-Lcom/android/server/pm/permission/PermissionsState;->hasPermissionRequiringReview(I)Z
-Lcom/android/server/am/ActivityManagerService$Lifecycle;-><init>(Landroid/content/Context;)V
-Lcom/android/server/am/ActivityManagerService;-><init>(Landroid/content/Context;Lcom/android/server/wm/ActivityTaskManagerService;)V
-Lcom/android/server/pm/Settings;->readSharedUserLPw(Lorg/xmlpull/v1/XmlPullParser;)V
-Lcom/android/server/pm/permission/PermissionsState;->updatePermissionFlags(Lcom/android/server/pm/permission/BasePermission;III)Z
+Lcom/android/server/pm/permission/PermissionsState;->grantPermission(Lcom/android/server/pm/permission/BasePermission;I)I
Lcom/android/server/pm/permission/PermissionsState;->ensurePermissionData(Lcom/android/server/pm/permission/BasePermission;)Lcom/android/server/pm/permission/PermissionsState$PermissionData;
-Lcom/android/server/am/BatteryExternalStatsWorker$1;->run()V
-Lcom/android/server/am/BatteryExternalStatsWorker;->updateExternalStatsLocked(Ljava/lang/String;IZZZ)V
+Lcom/android/server/pm/permission/PermissionsState$PermissionData;-><init>(Lcom/android/server/pm/permission/BasePermission;)V
Lcom/android/server/pm/permission/PermissionsState$PermissionData;->grant(I)Z
-Lcom/android/server/am/BatteryExternalStatsWorker$2;->run()V
-Lcom/android/server/pm/permission/PermissionSettings;->getPermission(Ljava/lang/String;)Lcom/android/server/pm/permission/BasePermission;
-Lcom/android/server/pm/permission/PermissionSettings;->getPermissionLocked(Ljava/lang/String;)Lcom/android/server/pm/permission/BasePermission;
-Lcom/android/server/pm/permission/PermissionSettings;->getPermissionTreeLocked(Ljava/lang/String;)Lcom/android/server/pm/permission/BasePermission;
-Lcom/android/server/pm/Settings;->readDisabledSysPackageLPw(Lorg/xmlpull/v1/XmlPullParser;)V
+Lcom/android/server/pm/permission/PermissionsState$PermissionState;-><init>(Ljava/lang/String;)V
+Lcom/android/server/pm/permission/PermissionsState$PermissionState;->access$002(Lcom/android/server/pm/permission/PermissionsState$PermissionState;Z)Z
+Lcom/android/server/pm/permission/PermissionsState;->updatePermissionFlags(Lcom/android/server/pm/permission/BasePermission;III)Z
+Lcom/android/server/pm/permission/PermissionsState$PermissionData;->getFlags(I)I
Lcom/android/server/pm/permission/PermissionsState$PermissionData;->updateFlags(III)Z
+Lcom/android/server/pm/permission/PermissionsState$PermissionData;->isInstallPermissionKey(I)Z
+Lcom/android/server/pm/permission/PermissionsState$PermissionState;->access$102(Lcom/android/server/pm/permission/PermissionsState$PermissionState;I)I
+Lcom/android/server/pm/permission/PermissionsState$PermissionState;->isDefault()Z
+Lcom/android/server/pm/Settings;->readPackageLPw(Lorg/xmlpull/v1/XmlPullParser;)V
Lcom/android/server/pm/PackageSignatures;->readCertsListXml(Lorg/xmlpull/v1/XmlPullParser;Ljava/util/ArrayList;Ljava/util/ArrayList;IZLandroid/content/pm/PackageParser$SigningDetails$Builder;)I
-Lcom/android/server/pm/permission/PermissionsState$PermissionData;-><init>(Lcom/android/server/pm/permission/PermissionsState$PermissionData;)V
-Lcom/android/server/pm/permission/PermissionSettings;->readPermissions(Landroid/util/ArrayMap;Lorg/xmlpull/v1/XmlPullParser;)V
-Lcom/android/server/pm/permission/PermissionSettings;->readPermissions(Lorg/xmlpull/v1/XmlPullParser;)V
-Lcom/android/server/pm/Settings$RuntimePermissionPersistence;->readStateForUserSyncLPr(I)V
-Lcom/android/server/pm/Settings$RuntimePermissionPersistence;->parseRuntimePermissionsLPr(Lorg/xmlpull/v1/XmlPullParser;I)V
-Lcom/android/server/pm/Settings$RuntimePermissionPersistence;->parsePermissionsLPr(Lorg/xmlpull/v1/XmlPullParser;Lcom/android/server/pm/permission/PermissionsState;I)V
-Lcom/android/server/pm/permission/BasePermission;->readLPw(Ljava/util/Map;Lorg/xmlpull/v1/XmlPullParser;)Z
-Lcom/android/server/pm/Settings;->writeKernelMappingLPr()V
-Lcom/android/server/pm/Settings;->writeKernelMappingLPr(Lcom/android/server/pm/PackageSetting;)V
-Lcom/android/server/pm/Settings;->writeKernelMappingLPr(Ljava/lang/String;I[I)V
-Lcom/android/server/pm/Settings;->readPackageRestrictionsLPr(I)V
-Lcom/android/server/am/ActivityManagerService$Injector;->getAppOpsService(Ljava/io/File;Landroid/os/Handler;)Lcom/android/server/appop/AppOpsService;
-Lcom/android/server/appop/AppOpsService;-><init>(Ljava/io/File;Landroid/os/Handler;)V
-Lcom/android/server/appop/AppOpsService;->readState()V
-Lcom/android/server/am/ProcessStatsService;-><init>(Lcom/android/server/am/ActivityManagerService;Ljava/io/File;)V
-Lcom/android/server/pm/PackageManagerService;->scanDirTracedLI(Ljava/io/File;IIJ)V
-Lcom/android/server/pm/PackageManagerService;->scanDirLI(Ljava/io/File;IIJ)V
-Lcom/android/server/pm/PackageManagerService;->addForInitLI(Landroid/content/pm/PackageParser$Package;IIJLandroid/os/UserHandle;)Landroid/content/pm/PackageParser$Package;
-Lcom/android/server/pm/PackageManagerService;->scanPackageChildLI(Landroid/content/pm/PackageParser$Package;IIJLandroid/os/UserHandle;)Landroid/content/pm/PackageParser$Package;
-Lcom/android/server/pm/KeySetManagerService;->readKeySetsLPw(Lorg/xmlpull/v1/XmlPullParser;Landroid/util/ArrayMap;)V
-Lcom/android/server/pm/ParallelPackageParser;->lambda$submit$0$ParallelPackageParser(Ljava/io/File;I)V
-Lcom/android/server/pm/-$$Lambda$ParallelPackageParser$FTtinPrp068lVeI7K6bC1tNE3iM;->run()V
-Lcom/android/server/pm/ParallelPackageParser;->parsePackage(Landroid/content/pm/PackageParser;Ljava/io/File;I)Landroid/content/pm/PackageParser$Package;
-Lcom/android/server/appop/AppOpsService;->readPackage(Lorg/xmlpull/v1/XmlPullParser;)V
-Lcom/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;IJIILjava/lang/String;Ljava/util/List;[Ljava/lang/String;[J)Lcom/android/server/pm/PackageSetting;
-Lcom/android/server/appop/AppOpsService;->readUid(Lorg/xmlpull/v1/XmlPullParser;Ljava/lang/String;)V
-Lcom/android/server/appop/AppOpsService;->readUidOps(Lorg/xmlpull/v1/XmlPullParser;)V
-Lcom/android/server/pm/PackageSetting;-><init>(Lcom/android/server/pm/PackageSetting;)V
+Lcom/android/server/pm/Settings;->registerExistingAppIdLPw(ILcom/android/server/pm/SettingBase;Ljava/lang/Object;)Z
+Lcom/android/server/pm/Settings;->readLPw(Ljava/util/List;)Z
+Lcom/android/server/pm/SettingBase;-><init>(II)V
+Lcom/android/server/pm/SettingBase;->setFlags(I)V
+Lcom/android/server/pm/SettingBase;->setPrivateFlags(I)V
+Lcom/android/server/pm/permission/PermissionsState;-><init>()V
+Lcom/android/server/pm/PackageSignatures;-><init>()V
Lcom/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;JIILjava/lang/String;Ljava/util/List;I[Ljava/lang/String;[J)V
-Lcom/android/server/pm/SELinuxMMAC;->readInstallPolicy()Z
-Lcom/android/server/pm/KeySetManagerService;->readKeysLPw(Lorg/xmlpull/v1/XmlPullParser;)V
-Lcom/android/server/pm/Settings;->writeIntToFile(Ljava/io/File;I)V
Lcom/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;JIILjava/lang/String;Ljava/util/List;[Ljava/lang/String;[J)V
-Lcom/android/server/appop/AppOpsService;->readOp(Lorg/xmlpull/v1/XmlPullParser;Lcom/android/server/appop/AppOpsService$UidState;Ljava/lang/String;Z)V
-Lcom/android/server/pm/SELinuxMMAC;->readSignerOrThrow(Lorg/xmlpull/v1/XmlPullParser;)Lcom/android/server/pm/Policy;
-Lcom/android/server/pm/Settings;->readComponentsLPr(Lorg/xmlpull/v1/XmlPullParser;)Landroid/util/ArraySet;
-Lcom/android/server/pm/KeySetManagerService;->readPublicKeyLPw(Lorg/xmlpull/v1/XmlPullParser;)V
-Lcom/android/server/pm/PackageManagerService;->scanPackageNewLI(Landroid/content/pm/PackageParser$Package;IIJLandroid/os/UserHandle;)Lcom/android/server/pm/PackageManagerService$ScanResult;
-Lcom/android/server/pm/permission/PermissionsState;->grantRuntimePermission(Lcom/android/server/pm/permission/BasePermission;I)I
-Lcom/android/server/pm/Policy$PolicyBuilder;->addSignature(Ljava/lang/String;)Lcom/android/server/pm/Policy$PolicyBuilder;
-Lcom/android/server/display/DisplayManagerService;-><init>(Landroid/content/Context;)V
-Lcom/android/server/display/DisplayManagerService;-><init>(Landroid/content/Context;Lcom/android/server/display/DisplayManagerService$Injector;)V
-Lcom/android/server/am/ActivityManagerService;->start()V
-Lcom/android/server/am/ActivityManagerService;->startAssociationLocked(ILjava/lang/String;IIJLandroid/content/ComponentName;Ljava/lang/String;)Lcom/android/server/am/ActivityManagerService$Association;
-Lcom/android/server/am/ActivityManagerService;->startIsolatedProcess(Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ILjava/lang/Runnable;)Z
-Lcom/android/server/am/ActivityManagerService;->startObservingNativeCrashes()V
-Lcom/android/server/am/ActivityManagerService;->startPersistentApps(I)V
-Lcom/android/server/am/ActivityManagerService;->startProcessLocked(Ljava/lang/String;Landroid/content/pm/ApplicationInfo;ZILjava/lang/String;Landroid/content/ComponentName;ZZZ)Lcom/android/server/am/ProcessRecord;
-Lcom/android/server/am/ActivityManagerService;->startService(Landroid/app/IApplicationThread;Landroid/content/Intent;Ljava/lang/String;ZLjava/lang/String;I)Landroid/content/ComponentName;
-PLcom/android/server/am/ActivityManagerService;->startUserInBackgroundWithListener(ILandroid/os/IProgressListener;)Z
-Lcom/android/server/am/ActivityManagerService$Lifecycle;->onStart()V
-Lcom/android/server/pm/PackageManagerService;->scanPackageOnlyLI(Lcom/android/server/pm/PackageManagerService$ScanRequest;ZJ)Lcom/android/server/pm/PackageManagerService$ScanResult;
-Lcom/android/server/pm/PackageSettingBase;->modifyUserState(I)Landroid/content/pm/PackageUserState;
-Lcom/android/server/pm/PackageSettingBase;->modifyUserStateComponents(IZZ)Landroid/content/pm/PackageUserState;
-Lcom/android/server/pm/Settings;->readDomainVerificationLPw(Lorg/xmlpull/v1/XmlPullParser;Lcom/android/server/pm/PackageSettingBase;)V
-Lcom/android/server/pm/PackageSettingBase;->setEnabled(IILjava/lang/String;)V
-Lcom/android/server/am/BatteryStatsService;-><init>(Landroid/content/Context;Ljava/io/File;Landroid/os/Handler;)V
-Lcom/android/server/pm/PackageManagerService;->commitReconciledScanResultLocked(Lcom/android/server/pm/PackageManagerService$ReconciledPackage;)V
-Lcom/android/server/pm/KeySetManagerService;->readKeySetListLPw(Lorg/xmlpull/v1/XmlPullParser;)V
-Lcom/android/server/appop/AppOpsService$Op;->accessed(JILjava/lang/String;II)V
-Lcom/android/server/wm/ActivityTaskManagerService;->initialize(Lcom/android/server/firewall/IntentFirewall;Lcom/android/server/am/PendingIntentController;Landroid/os/Looper;)V
-Lcom/android/server/pm/SettingBase;-><init>(II)V
-Lcom/android/server/pm/PackageManagerService;->locationIsPrivileged(Ljava/lang/String;)Z
-Lcom/android/server/power/PowerManagerService;-><init>(Landroid/content/Context;)V
-Lcom/android/server/power/PowerManagerService;-><init>(Landroid/content/Context;Lcom/android/server/power/PowerManagerService$Injector;)V
-Lcom/android/server/pm/permission/PermissionsState;->enforceValidUserId(I)V
-Lcom/android/server/Watchdog;->getInstance()Lcom/android/server/Watchdog;
-Lcom/android/server/Watchdog;-><init>()V
-Lcom/android/server/pm/PackageManagerService;->commitPackageSettings(Landroid/content/pm/PackageParser$Package;Landroid/content/pm/PackageParser$Package;Lcom/android/server/pm/PackageSetting;IZLcom/android/server/pm/PackageManagerService$ReconciledPackage;)V
-Lcom/android/server/pm/PackageSetting;->getPermissionsState()Lcom/android/server/pm/permission/PermissionsState;
-Lcom/android/server/pm/Settings;->registerExistingAppIdLPw(ILcom/android/server/pm/SettingBase;Ljava/lang/Object;)Z
-Lcom/android/server/pm/permission/PermissionManagerService;->create(Landroid/content/Context;Lcom/android/server/pm/permission/DefaultPermissionGrantPolicy$DefaultPermissionGrantedCallback;Ljava/lang/Object;)Lcom/android/server/pm/permission/PermissionManagerServiceInternal;
-Lcom/android/server/pm/Settings;->addSharedUserLPw(Ljava/lang/String;III)Lcom/android/server/pm/SharedUserSetting;
-Lcom/android/server/pm/PackageSettingBase;->init(Ljava/io/File;Ljava/io/File;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;J)V
-Lcom/android/server/appop/AppOpsService$Op;->updateProxyState(JILjava/lang/String;)V
-Lcom/android/server/display/DisplayManagerService$DisplayAdapterListener;->onDisplayDeviceEvent(Lcom/android/server/display/DisplayDevice;I)V
-Lcom/android/server/wm/ActivityTaskManagerService;->onActivityManagerInternalAdded()V
-Lcom/android/server/SystemService;->publishBinderService(Ljava/lang/String;Landroid/os/IBinder;)V
-Lcom/android/server/am/ActivityManagerService;->initPowerManagement()V
-Lcom/android/server/wm/ActivityTaskManagerService$Lifecycle;-><init>(Landroid/content/Context;)V
-Lcom/android/server/display/DisplayManagerService;->onStart()V
-Lcom/android/server/pm/Settings;->readPreferredActivitiesLPw(Lorg/xmlpull/v1/XmlPullParser;I)V
Lcom/android/server/pm/PackageKeySetData;-><init>()V
-Lcom/android/server/display/DisplayManagerService;->registerDefaultDisplayAdapters()V
-Lcom/android/server/display/LocalDisplayAdapter;->registerLocked()V
-Lcom/android/server/ServiceThread;->run()V
-Lcom/android/server/display/DisplayModeDirector;-><init>(Landroid/content/Context;Landroid/os/Handler;)V
-Lcom/android/server/pm/Settings;->addPackageSettingLPw(Lcom/android/server/pm/PackageSetting;Lcom/android/server/pm/SharedUserSetting;)V
-Lcom/android/server/pm/permission/PermissionManagerService;-><init>(Landroid/content/Context;Lcom/android/server/pm/permission/DefaultPermissionGrantPolicy$DefaultPermissionGrantedCallback;Ljava/lang/Object;)V
-Lcom/android/server/appop/AppOpsService;->getUidStateLocked(IZ)Lcom/android/server/appop/AppOpsService$UidState;
-Lcom/android/server/am/BatteryStatsService;->fillRailDataStats(Lcom/android/internal/os/RailStats;)V
-Lcom/android/server/pm/SELinuxMMAC;->getSeInfo(Landroid/content/pm/PackageParser$Package;ZII)Ljava/lang/String;
-Lcom/android/server/pm/PackageManagerService;->collectCertificatesLI(Lcom/android/server/pm/PackageSetting;Landroid/content/pm/PackageParser$Package;ZZ)V
-Lcom/android/server/pm/PackageManagerService;->reconcilePackagesLocked(Lcom/android/server/pm/PackageManagerService$ReconcileRequest;Lcom/android/server/pm/KeySetManagerService;)Ljava/util/Map;
-Lcom/android/server/pm/permission/BasePermission;->readInt(Lorg/xmlpull/v1/XmlPullParser;Ljava/lang/String;Ljava/lang/String;I)I
-Lcom/android/server/pm/UserManagerService;-><init>(Landroid/content/Context;Lcom/android/server/pm/PackageManagerService;Lcom/android/server/pm/UserDataPreparer;Ljava/lang/Object;)V
-Lcom/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
-Lcom/android/server/display/LocalDisplayAdapter;->tryConnectDisplayLocked(J)V
-Lcom/android/server/pm/PreferredActivity;-><init>(Landroid/content/IntentFilter;I[Landroid/content/ComponentName;Landroid/content/ComponentName;Z)V
-Lcom/android/server/pm/PackageManagerService;->preparePackageParserCache()Ljava/io/File;
-Lcom/android/server/pm/Policy$PolicyBuilder;->build()Lcom/android/server/pm/Policy;
-Lcom/android/server/LockGuard;->installLock(Ljava/lang/Object;I)Ljava/lang/Object;
-Lcom/android/server/LockGuard;->installLock(Ljava/lang/Object;IZ)Ljava/lang/Object;
-Lcom/android/server/SystemServiceManager;->startBootPhase(I)V
-Lcom/android/server/display/PersistentDataStore;->load()V
-Lcom/android/server/display/PersistentDataStore;->loadDisplaysFromXml(Lorg/xmlpull/v1/XmlPullParser;)V
-Lcom/android/server/display/PersistentDataStore;->loadFromXml(Lorg/xmlpull/v1/XmlPullParser;)V
-Lcom/android/server/display/PersistentDataStore;->loadRememberedWifiDisplaysFromXml(Lorg/xmlpull/v1/XmlPullParser;)V
-Lcom/android/server/wm/AppWarnings;-><init>(Lcom/android/server/wm/ActivityTaskManagerService;Landroid/content/Context;Landroid/os/Handler;Landroid/os/Handler;Ljava/io/File;)V
-Lcom/android/server/pm/PreferredComponent;-><init>(Lcom/android/server/pm/PreferredComponent$Callbacks;I[Landroid/content/ComponentName;Landroid/content/ComponentName;Z)V
-Lcom/android/server/pm/PreferredComponent;-><init>(Lcom/android/server/pm/PreferredComponent$Callbacks;Lorg/xmlpull/v1/XmlPullParser;)V
-Lcom/android/server/display/DisplayManagerService;->handleDisplayDeviceAdded(Lcom/android/server/display/DisplayDevice;)V
-Lcom/android/server/display/DisplayManagerService;->handleDisplayDeviceAddedLocked(Lcom/android/server/display/DisplayDevice;)V
-Lcom/android/server/display/LocalDisplayAdapter$LocalDisplayDevice;->getDisplayDeviceInfoLocked()Lcom/android/server/display/DisplayDeviceInfo;
-Lcom/android/server/pm/PackageSettingBase;->setUserState(IJIZZZZIZLjava/lang/String;Landroid/content/pm/SuspendDialogInfo;Landroid/os/PersistableBundle;Landroid/os/PersistableBundle;ZZLjava/lang/String;Landroid/util/ArraySet;Landroid/util/ArraySet;IIILjava/lang/String;)V
-Lcom/android/server/pm/Installer;->onStart()V
-Lcom/android/server/pm/Installer;->connect()V
-Lcom/android/server/lights/LightsService$LightImpl;-><init>(Lcom/android/server/lights/LightsService;Landroid/content/Context;I)V
-Lcom/android/server/pm/PackageManagerService;->addBuiltInSharedLibraryLocked(Ljava/lang/String;Ljava/lang/String;)Z
-Lcom/android/server/LockGuard;->findOrCreateLockInfo(Ljava/lang/Object;)Lcom/android/server/LockGuard$LockInfo;
-Lcom/android/server/lights/LightsService;-><init>(Landroid/content/Context;)V
-Lcom/android/server/pm/Policy;->getMatchedSeInfo(Landroid/content/pm/PackageParser$Package;)Ljava/lang/String;
-Lcom/android/server/ServiceThread;-><init>(Ljava/lang/String;IZ)V
-Lcom/android/server/wm/ActivityTaskManagerService;->createStackSupervisor()Lcom/android/server/wm/ActivityStackSupervisor;
-Lcom/android/server/Watchdog;->addMonitor(Lcom/android/server/Watchdog$Monitor;)V
-Lcom/android/server/wm/ActivityStackSupervisor;->initPowerManagement()V
-Lcom/android/server/wm/ActivityTaskManagerService;->onInitPowerManagement()V
-Lcom/android/server/pm/KeySetManagerService;->addScannedPackageLPw(Landroid/content/pm/PackageParser$Package;)V
-Lcom/android/server/am/BatteryStatsService;->initPowerManagement()V
-Lcom/android/server/wm/ActivityTaskManagerService;-><init>(Landroid/content/Context;)V
-Lcom/android/server/am/ProcessList;-><init>()V
-Lcom/android/server/pm/PackageManagerService;->commitSharedLibraryInfoLocked(Landroid/content/pm/SharedLibraryInfo;)V
-Lcom/android/server/pm/PackageManagerServiceUtils;->getLastModifiedTime(Landroid/content/pm/PackageParser$Package;)J
-Lcom/android/server/am/ProcessStatsService;->updateFile()V
-Lcom/android/server/pm/Policy$PolicyBuilder;->setGlobalSeinfoOrThrow(Ljava/lang/String;)Lcom/android/server/pm/Policy$PolicyBuilder;
-Lcom/android/server/wm/AppWarnings;->readConfigFromFileAmsThread()V
-Lcom/android/server/am/BatteryStatsService;->fillLowPowerStats(Lcom/android/internal/os/RpmStats;)V
-Lcom/android/server/display/DisplayManagerService;->handleDisplayDeviceChanged(Lcom/android/server/display/DisplayDevice;)V
-Lcom/android/server/firewall/IntentFirewall;-><init>(Lcom/android/server/firewall/IntentFirewall$AMSInterface;Landroid/os/Handler;)V
+Lcom/android/server/pm/PackageSettingBase;->init(Ljava/io/File;Ljava/io/File;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;J)V
+Lcom/android/server/pm/KeySetManagerService;->readKeySetListLPw(Lorg/xmlpull/v1/XmlPullParser;)V
+Lcom/android/server/pm/PackageSettingBase;->modifyUserState(I)Landroid/content/pm/PackageUserState;
+Lcom/android/server/pm/Settings;->readComponentsLPr(Lorg/xmlpull/v1/XmlPullParser;)Landroid/util/ArraySet;
+Lcom/android/server/pm/Settings;->readPackageRestrictionsLPr(I)V
+Lcom/android/server/pm/Settings$RuntimePermissionPersistence;->parsePermissionsLPr(Lorg/xmlpull/v1/XmlPullParser;Lcom/android/server/pm/permission/PermissionsState;I)V
+Lcom/android/server/pm/SettingBase;->getPermissionsState()Lcom/android/server/pm/permission/PermissionsState;
+Lcom/android/server/pm/Settings;->writeKernelMappingLPr()V
Lcom/android/server/pm/PackageSettingBase;->getNotInstalledUserIds()[I
-Lcom/android/server/appop/AppOpsService$UidState;->evalForegroundOps(Landroid/util/SparseArray;)V
-Lcom/android/server/SystemServerInitThreadPool;->submit(Ljava/lang/Runnable;Ljava/lang/String;)Ljava/util/concurrent/Future;
-Lcom/android/server/pm/KeySetManagerService;->addSigningKeySetToPackageLPw(Lcom/android/server/pm/PackageSetting;Landroid/util/ArraySet;)V
-Lcom/android/server/pm/ComponentResolver;->addAllComponents(Landroid/content/pm/PackageParser$Package;Z)V
-Lcom/android/server/appop/AppOpsService;->publish(Landroid/content/Context;)V
-Lcom/android/server/power/PowerManagerService;->onStart()V
-Lcom/android/server/os/DeviceIdentifiersPolicyService;->onStart()V
-Lcom/android/server/uri/UriGrantsManagerService$Lifecycle;-><init>(Landroid/content/Context;)V
-Lcom/android/server/pm/PackageManagerService;->applyPolicy(Landroid/content/pm/PackageParser$Package;IILandroid/content/pm/PackageParser$Package;)V
-Lcom/android/server/pm/KeySetManagerService;->addRefCountsFromSavedPackagesLPw(Landroid/util/ArrayMap;)V
-Lcom/android/server/am/OomAdjuster;-><init>(Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ProcessList;Lcom/android/server/am/ActiveUids;)V
-Lcom/android/server/am/ProcessList;->init(Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActiveUids;)V
-Lcom/android/server/pm/PackageManagerService$ScanRequest;-><init>(Landroid/content/pm/PackageParser$Package;Lcom/android/server/pm/SharedUserSetting;Landroid/content/pm/PackageParser$Package;Lcom/android/server/pm/PackageSetting;Lcom/android/server/pm/PackageSetting;Lcom/android/server/pm/PackageSetting;Ljava/lang/String;IIZLandroid/os/UserHandle;)V
-Lcom/android/server/pm/Settings;->writeUserRestrictionsLPw(Lcom/android/server/pm/PackageSetting;Lcom/android/server/pm/PackageSetting;)V
-PLcom/android/server/pm/permission/PermissionsState;-><init>(Lcom/android/server/pm/permission/PermissionsState;)V
-Lcom/android/server/pm/UserManagerService;->readUserListLP()V
-Lcom/android/server/RescueParty;->isUsbActive()Z
-Lcom/android/server/RescueParty;->isDisabled()Z
-Lcom/android/server/pm/SharedUserSetting;->addPackage(Lcom/android/server/pm/PackageSetting;)V
-Lcom/android/server/display/LocalDisplayAdapter$LocalDisplayDevice;-><init>(Lcom/android/server/display/LocalDisplayAdapter;Landroid/os/IBinder;J[Landroid/view/SurfaceControl$PhysicalDisplayInfo;I[I[IIZ)V
-Lcom/android/server/am/BatteryStatsService$WakeupReasonThread;->run()V
+Lcom/android/server/pm/PackageManagerService;-><init>(Lcom/android/server/pm/PackageManagerService$Injector;ZZ)V
+Lcom/android/server/pm/AppsFilter;->addPackage(Landroid/content/pm/PackageParser$Package;Ljava/util/Map;)V
+Lcom/android/server/pm/AppsFilter;->canQuery(Landroid/content/pm/PackageParser$Package;Landroid/content/pm/PackageParser$Package;)Z
+Lcom/android/server/pm/SELinuxMMAC;->getSeInfo(Landroid/content/pm/PackageParser$Package;ZI)Ljava/lang/String;
+Lcom/android/server/pm/Policy;->getMatchedSeInfo(Landroid/content/pm/PackageParser$Package;)Ljava/lang/String;
+Lcom/android/server/pm/PackageSettingBase;->readUserState(I)Landroid/content/pm/PackageUserState;
+Lcom/android/server/pm/permission/PermissionsState;->copyFrom(Lcom/android/server/pm/permission/PermissionsState;)V
+Lcom/android/server/pm/permission/PermissionsState$PermissionData;-><init>(Lcom/android/server/pm/permission/PermissionsState$PermissionData;)V
+Lcom/android/server/pm/permission/PermissionsState$PermissionState;-><init>(Lcom/android/server/pm/permission/PermissionsState$PermissionState;)V
+Lcom/android/server/pm/permission/BasePermission;->findPermissionTree(Ljava/util/Collection;Ljava/lang/String;)Lcom/android/server/pm/permission/BasePermission;
+Lcom/android/server/pm/permission/PermissionManagerService;->addAllPermissions(Landroid/content/pm/PackageParser$Package;Z)V
+Lcom/android/server/pm/permission/PermissionSettings;->putPermissionLocked(Ljava/lang/String;Lcom/android/server/pm/permission/BasePermission;)V
+Lcom/android/server/pm/permission/PermissionSettings;->getAllPermissionTreesLocked()Ljava/util/Collection;
+Lcom/android/server/pm/permission/BasePermission;->createOrUpdate(Lcom/android/server/pm/permission/BasePermission;Landroid/content/pm/PackageParser$Permission;Landroid/content/pm/PackageParser$Package;Ljava/util/Collection;Z)Lcom/android/server/pm/permission/BasePermission;
+Lcom/android/server/pm/PackageManagerService;->commitPackageSettings(Landroid/content/pm/PackageParser$Package;Landroid/content/pm/PackageParser$Package;Lcom/android/server/pm/PackageSetting;IZLcom/android/server/pm/PackageManagerService$ReconciledPackage;)V
+Lcom/android/server/IntentResolver;->register_intent_filter(Landroid/content/IntentFilter;Ljava/util/Iterator;Landroid/util/ArrayMap;Ljava/lang/String;)I
+Lcom/android/server/pm/PackageManagerService;->fixProcessName(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
+Lcom/android/server/pm/PackageManagerService;->isPackageRenamed(Landroid/content/pm/PackageParser$Package;Ljava/lang/String;)Z
Lcom/android/server/pm/PackageSettingBase;->doCopy(Lcom/android/server/pm/PackageSettingBase;)V
-Lcom/android/server/SystemServerInitThreadPool;->get()Lcom/android/server/SystemServerInitThreadPool;
-Lcom/android/server/pm/PreferredActivity;->onReadTag(Ljava/lang/String;Lorg/xmlpull/v1/XmlPullParser;)Z
-Lcom/android/server/FgThread;->getHandler()Landroid/os/Handler;
-Lcom/android/server/FgThread;->ensureThreadLocked()V
-Lcom/android/server/IntentResolver;->addFilter(Landroid/content/IntentFilter;)V
+Lcom/android/server/pm/PackageSettingBase;->setTimeStamp(J)V
+Lcom/android/server/pm/PackageManagerService;->scanDirLI(Ljava/io/File;IIJ)V
+Lcom/android/server/pm/PackageManagerService$PackageParserCallback;->getStaticOverlayPackages(Ljava/util/Collection;Ljava/lang/String;)Ljava/util/List;
+Lcom/android/server/pm/ComponentResolver$ActivityIntentResolver;->addActivity(Landroid/content/pm/PackageParser$Activity;Ljava/lang/String;Ljava/util/List;)V
Lcom/android/server/IntentResolver;->addFilter(Landroid/util/ArrayMap;Ljava/lang/String;Landroid/content/IntentFilter;)V
-Lcom/android/server/pm/PackageManagerService;->assertPackageIsValid(Landroid/content/pm/PackageParser$Package;II)V
-Lcom/android/server/pm/PackageManagerService;->getSettingsVersionForPackage(Landroid/content/pm/PackageParser$Package;)Lcom/android/server/pm/Settings$VersionInfo;
-Lcom/android/server/pm/KeySetManagerService;->getPublicKeysFromKeySetLPr(J)Landroid/util/ArraySet;
+Lcom/android/server/pm/PackageManagerService;->applyPolicy(Landroid/content/pm/PackageParser$Package;IILandroid/content/pm/PackageParser$Package;)V
Lcom/android/server/pm/ComponentResolver;->addActivitiesLocked(Landroid/content/pm/PackageParser$Package;Ljava/util/List;Z)V
-Lcom/android/server/pm/PackageManagerServiceCompilerMapping;->checkProperties()V
+Lcom/android/server/pm/ComponentResolver$ActivityIntentResolver;->access$600(Lcom/android/server/pm/ComponentResolver$ActivityIntentResolver;Landroid/content/pm/PackageParser$Activity;Ljava/lang/String;Ljava/util/List;)V
+Lcom/android/server/pm/Settings;->getDisabledSystemPkgLPr(Ljava/lang/String;)Lcom/android/server/pm/PackageSetting;
+Lcom/android/server/IntentResolver;->register_mime_types(Landroid/content/IntentFilter;Ljava/lang/String;)I
+Lcom/android/server/pm/Settings;->getPackageLPr(Ljava/lang/String;)Lcom/android/server/pm/PackageSetting;
+Lcom/android/server/pm/SettingBase;->doCopy(Lcom/android/server/pm/SettingBase;)V
+Lcom/android/server/pm/PackageManagerService;->reconcilePackagesLocked(Lcom/android/server/pm/PackageManagerService$ReconcileRequest;Lcom/android/server/pm/KeySetManagerService;)Ljava/util/Map;
+Lcom/android/server/pm/ComponentResolver$ActivityIntentResolver;->newArray(I)[Landroid/content/IntentFilter;
+Lcom/android/server/pm/ComponentResolver$ActivityIntentResolver;->newArray(I)[Landroid/content/pm/PackageParser$ActivityIntentInfo;
+Lcom/android/server/IntentResolver;->addFilter(Landroid/content/IntentFilter;)V
Lcom/android/server/pm/Settings;->getSettingLPr(I)Lcom/android/server/pm/SettingBase;
-Lcom/android/server/uri/UriGrantsManagerService;-><init>(Landroid/content/Context;)V
-Lcom/android/server/pm/Settings;-><init>(Ljava/io/File;Lcom/android/server/pm/permission/PermissionSettings;Ljava/lang/Object;)V
-Lcom/android/server/uri/UriGrantsManagerService$Lifecycle;->onStart()V
-Lcom/android/server/wm/ActivityTaskManagerService$Lifecycle;->onStart()V
-Lcom/android/server/pm/PackageSetting;->updateFrom(Lcom/android/server/pm/PackageSetting;)V
-Lcom/android/server/display/DisplayModeDirector$SettingsObserver;-><init>(Lcom/android/server/display/DisplayModeDirector;Landroid/content/Context;Landroid/os/Handler;)V
-Lcom/android/server/power/batterysaver/BatterySaverController;-><init>(Ljava/lang/Object;Landroid/content/Context;Landroid/os/Looper;Lcom/android/server/power/batterysaver/BatterySaverPolicy;Lcom/android/server/power/batterysaver/BatterySavingStats;)V
-Lcom/android/server/wm/ActivityStackSupervisor;-><init>(Lcom/android/server/wm/ActivityTaskManagerService;Landroid/os/Looper;)V
-Lcom/android/server/PackageWatchdog;-><init>(Landroid/content/Context;)V
-Lcom/android/server/PackageWatchdog;->getInstance(Landroid/content/Context;)Lcom/android/server/PackageWatchdog;
-Lcom/android/server/pm/Settings;->getAllUsers(Lcom/android/server/pm/UserManagerService;)Ljava/util/List;
-Lcom/android/server/Watchdog;->addThread(Landroid/os/Handler;)V
-Lcom/android/server/Watchdog;->addThread(Landroid/os/Handler;J)V
-Lcom/android/server/wm/RecentTasks;-><init>(Lcom/android/server/wm/ActivityTaskManagerService;Lcom/android/server/wm/ActivityStackSupervisor;)V
-Lcom/android/server/pm/PackageSettingBase;->updateFrom(Lcom/android/server/pm/PackageSettingBase;)Lcom/android/server/pm/PackageSettingBase;
+Lcom/android/server/pm/ComponentResolver;->addAllComponents(Landroid/content/pm/PackageParser$Package;Z)V
+Lcom/android/server/pm/ComponentResolver;->addServicesLocked(Landroid/content/pm/PackageParser$Package;Z)V
Lcom/android/server/pm/UserManagerService;->getUsers(Z)Ljava/util/List;
-Lcom/android/server/firewall/IntentFirewall;->readRulesDir(Ljava/io/File;)V
-Lcom/android/server/wm/TaskChangeNotificationController;-><init>(Ljava/lang/Object;Lcom/android/server/wm/ActivityStackSupervisor;Landroid/os/Handler;)V
-Lcom/android/server/am/BatteryExternalStatsWorker;->awaitControllerInfo(Landroid/os/SynchronousResultReceiver;)Landroid/os/Parcelable;
-Lcom/android/server/display/DisplayManagerService;->addLogicalDisplayLocked(Lcom/android/server/display/DisplayDevice;)Lcom/android/server/display/LogicalDisplay;
-Lcom/android/server/display/DisplayManagerService;->updateLogicalDisplaysLocked()Z
-Lcom/android/server/display/LocalDisplayAdapter$LocalDisplayDevice;->updatePhysicalDisplayInfoLocked([Landroid/view/SurfaceControl$PhysicalDisplayInfo;I[I[II)Z
-Lcom/android/server/display/DisplayDeviceInfo;->toString()Ljava/lang/String;
-Lcom/android/server/UiThread;->run()V
-Lcom/android/server/pm/PackageKeySetData;->setProperSigningKeySet(J)V
-Lcom/android/server/UiThread;->ensureThreadLocked()V
-Lcom/android/server/UiThread;->getHandler()Landroid/os/Handler;
-Lcom/android/server/pm/Settings;->getPackageLPr(Ljava/lang/String;)Lcom/android/server/pm/PackageSetting;
-Lcom/android/server/IoThread;->ensureThreadLocked()V
-Lcom/android/server/IoThread;->getHandler()Landroid/os/Handler;
Lcom/android/server/pm/Settings;->getInternalVersion()Lcom/android/server/pm/Settings$VersionInfo;
-Lcom/android/server/appop/AppOpsService$Op;->running(JJII)V
-Lcom/android/server/appop/AppOpsService$Op;->updateAccessTimeAndDuration(JJII)V
-Lcom/android/server/appop/AppOpsService$Op;->rejected(JILjava/lang/String;II)V
-Lcom/android/server/DisplayThread;->ensureThreadLocked()V
-Lcom/android/server/DisplayThread;->getHandler()Landroid/os/Handler;
-Lcom/android/server/am/UserController;-><init>(Lcom/android/server/am/UserController$Injector;)V
-Lcom/android/server/AnimationThread;->ensureThreadLocked()V
-Lcom/android/server/AnimationThread;->getHandler()Landroid/os/Handler;
-Lcom/android/server/wm/SurfaceAnimationThread;->ensureThreadLocked()V
-Lcom/android/server/wm/SurfaceAnimationThread;->getHandler()Landroid/os/Handler;
-Lcom/android/server/wm/ActivityStackSupervisor;->initialize()V
-Lcom/android/server/pm/PackageSettingBase;->readUserState(I)Landroid/content/pm/PackageUserState;
+Lcom/android/server/pm/Settings;->getRenamedPackageLPr(Ljava/lang/String;)Ljava/lang/String;
+Lcom/android/server/pm/PackageManagerService;->getRealPackageName(Landroid/content/pm/PackageParser$Package;Ljava/lang/String;)Ljava/lang/String;
+Lcom/android/server/pm/PackageManagerService;->getOriginalPackageLocked(Landroid/content/pm/PackageParser$Package;Ljava/lang/String;)Lcom/android/server/pm/PackageSetting;
+Lcom/android/server/pm/PackageSetting;-><init>(Lcom/android/server/pm/PackageSetting;)V
+Lcom/android/server/pm/PackageSettingBase;-><init>(Lcom/android/server/pm/PackageSettingBase;Ljava/lang/String;)V
+Lcom/android/server/pm/SettingBase;-><init>(Lcom/android/server/pm/SettingBase;)V
+Lcom/android/server/pm/PackageSetting;->doCopy(Lcom/android/server/pm/PackageSetting;)V
+Lcom/android/server/pm/PackageManagerService;->isSystemApp(Landroid/content/pm/PackageParser$Package;)Z
+Lcom/android/server/pm/PackageManagerServiceUtils;->getLastModifiedTime(Landroid/content/pm/PackageParser$Package;)J
+Lcom/android/server/pm/PackageManagerService;->getSettingsVersionForPackage(Landroid/content/pm/PackageParser$Package;)Lcom/android/server/pm/Settings$VersionInfo;
+Lcom/android/server/pm/PackageManagerService;->isExternal(Landroid/content/pm/PackageParser$Package;)Z
+Lcom/android/server/pm/PackageManagerService;->isCompatSignatureUpdateNeeded(Lcom/android/server/pm/Settings$VersionInfo;)Z
+Lcom/android/server/pm/PackageManagerService;->isRecoverSignatureUpdateNeeded(Lcom/android/server/pm/Settings$VersionInfo;)Z
+Lcom/android/server/pm/PackageSettingBase;->updateFrom(Lcom/android/server/pm/PackageSettingBase;)Lcom/android/server/pm/PackageSettingBase;
+Lcom/android/server/pm/UserManagerService;->getInstance()Lcom/android/server/pm/UserManagerService;
+Lcom/android/server/pm/Settings;->writeUserRestrictionsLPw(Lcom/android/server/pm/PackageSetting;Lcom/android/server/pm/PackageSetting;)V
+Lcom/android/server/pm/KeySetManagerService;->getPublicKeysFromKeySetLPr(J)Landroid/util/ArraySet;
+Lcom/android/server/pm/PackageSettingBase;->getInstantApp(I)Z
+Lcom/android/server/pm/ComponentResolver;->addReceiversLocked(Landroid/content/pm/PackageParser$Package;Z)V
+Lcom/android/server/pm/ComponentResolver;->addProvidersLocked(Landroid/content/pm/PackageParser$Package;Z)V
+Lcom/android/server/pm/ComponentResolver$ServiceIntentResolver;->addService(Landroid/content/pm/PackageParser$Service;)V
+Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;->getDisabledSystemPackage(Ljava/lang/String;)Landroid/content/pm/PackageParser$Package;
+Lcom/android/server/pm/ComponentResolver;->adjustPriority(Ljava/util/List;Landroid/content/pm/PackageParser$ActivityIntentInfo;Ljava/lang/String;)V
+Lcom/android/server/pm/ComponentResolver;->isProtectedAction(Landroid/content/pm/PackageParser$ActivityIntentInfo;)Z
+Lcom/android/server/pm/Settings;->addPackageSettingLPw(Lcom/android/server/pm/PackageSetting;Lcom/android/server/pm/SharedUserSetting;)V
+Lcom/android/server/pm/PackageInstallerService;->isStageName(Ljava/lang/String;)Z
+Lcom/android/server/pm/ParallelPackageParser;->submit(Ljava/io/File;I)V
+Lcom/android/server/pm/-$$Lambda$ParallelPackageParser$FTtinPrp068lVeI7K6bC1tNE3iM;-><init>(Lcom/android/server/pm/ParallelPackageParser;Ljava/io/File;I)V
+Lcom/android/server/IntentResolver;->filterEquals(Landroid/content/IntentFilter;Landroid/content/IntentFilter;)Z
+Lcom/android/server/IntentResolver;->collectFilters([Landroid/content/IntentFilter;Landroid/content/IntentFilter;)Ljava/util/ArrayList;
+Lcom/android/server/pm/-$$Lambda$ParallelPackageParser$FTtinPrp068lVeI7K6bC1tNE3iM;->run()V
+Lcom/android/server/pm/ParallelPackageParser;->lambda$submit$0$ParallelPackageParser(Ljava/io/File;I)V
+Lcom/android/server/pm/ParallelPackageParser$ParseResult;-><init>()V
+Lcom/android/server/pm/ParallelPackageParser;->parsePackage(Landroid/content/pm/PackageParser;Ljava/io/File;I)Landroid/content/pm/PackageParser$Package;
+Lcom/android/server/pm/PackageManagerService$PackageParserCallback;->getOverlayApks(Ljava/lang/String;)[Ljava/lang/String;
+Lcom/android/server/pm/PackageManagerService$ParallelPackageParserCallback;->getStaticOverlayPaths(Ljava/lang/String;Ljava/lang/String;)[Ljava/lang/String;
+Lcom/android/server/IntentResolver;->findFilters(Landroid/content/IntentFilter;)Ljava/util/ArrayList;
+Lcom/android/server/pm/ComponentResolver;->findMatchingActivity(Ljava/util/List;Landroid/content/pm/ActivityInfo;)Landroid/content/pm/PackageParser$Activity;
+Lcom/android/server/pm/ComponentResolver$ProviderIntentResolver;->addProvider(Landroid/content/pm/PackageParser$Provider;)V
+Lcom/android/server/pm/PackageManagerService$Injector$Singleton;->get(Lcom/android/server/pm/PackageManagerService$Injector;Lcom/android/server/pm/PackageManagerService;)Ljava/lang/Object;
+Lcom/android/server/pm/ParallelPackageParser;->take()Lcom/android/server/pm/ParallelPackageParser$ParseResult;
+Lcom/android/server/pm/PackageManagerService;->scanPackageOnlyLI(Lcom/android/server/pm/PackageManagerService$ScanRequest;Lcom/android/server/pm/PackageManagerService$Injector;ZJ)Lcom/android/server/pm/PackageManagerService$ScanResult;
+Lcom/android/server/pm/PackageManagerService$Injector;->getUserManagerService()Lcom/android/server/pm/UserManagerService;
+Lcom/android/server/pm/ComponentResolver;->getIntentListSubset(Ljava/util/List;Lcom/android/server/pm/ComponentResolver$IterGenerator;Ljava/util/Iterator;)V
+Lcom/android/server/pm/PackageManagerService;->scanPackageChildLI(Landroid/content/pm/PackageParser$Package;IIJLandroid/os/UserHandle;)Landroid/content/pm/PackageParser$Package;
+Lcom/android/server/pm/PackageManagerService;->addForInitLI(Landroid/content/pm/PackageParser$Package;IIJLandroid/os/UserHandle;)Landroid/content/pm/PackageParser$Package;
Lcom/android/server/pm/PackageManagerServiceUtils;->getCompressedFiles(Ljava/lang/String;)[Ljava/io/File;
-Lcom/android/server/pm/Settings;->insertPackageSettingLPw(Lcom/android/server/pm/PackageSetting;Landroid/content/pm/PackageParser$Package;)V
-Lcom/android/server/pm/ComponentResolver$ActivityIntentResolver;->addActivity(Landroid/content/pm/PackageParser$Activity;Ljava/lang/String;Ljava/util/List;)V
-Lcom/android/server/pm/Installer;->invalidateMounts()V
-Lcom/android/server/power/PowerManagerService$NativeWrapper;->nativeInit(Lcom/android/server/power/PowerManagerService;)V
-Lcom/android/server/power/ThermalManagerService;->onStart()V
-Lcom/android/server/am/OomAdjProfiler;-><init>()V
-Lcom/android/server/pm/PackageManagerService;->maybeClearProfilesForUpgradesLI(Lcom/android/server/pm/PackageSetting;Landroid/content/pm/PackageParser$Package;)V
-Lcom/android/server/am/ActivityManagerConstants;-><init>(Lcom/android/server/am/ActivityManagerService;Landroid/os/Handler;)V
-Lcom/android/server/IntentResolver;-><init>()V
+Lcom/android/server/pm/PackageManagerService$ScanRequest;-><init>(Landroid/content/pm/PackageParser$Package;Lcom/android/server/pm/SharedUserSetting;Landroid/content/pm/PackageParser$Package;Lcom/android/server/pm/PackageSetting;Lcom/android/server/pm/PackageSetting;Lcom/android/server/pm/PackageSetting;Ljava/lang/String;IIZLandroid/os/UserHandle;)V
+Lcom/android/server/pm/PackageManagerService$Injector;->getAbiHelper()Lcom/android/server/pm/PackageAbiHelper;
+Lcom/android/server/pm/PackageManagerService$Injector;->getUserManagerInternal()Landroid/os/UserManagerInternal;
+Lcom/android/server/pm/UserManagerService;->getInternalForInjectorOnly()Landroid/os/UserManagerInternal;
Lcom/android/server/pm/Settings;->updatePackageSetting(Lcom/android/server/pm/PackageSetting;Lcom/android/server/pm/PackageSetting;Lcom/android/server/pm/SharedUserSetting;Ljava/io/File;Ljava/io/File;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;IILjava/util/List;Lcom/android/server/pm/UserManagerService;[Ljava/lang/String;[J)V
-Lcom/android/server/PackageWatchdog;->loadFromFile()V
-Lcom/android/server/power/batterysaver/BatterySaverPolicy;-><init>(Ljava/lang/Object;Landroid/content/Context;Lcom/android/server/power/batterysaver/BatterySavingStats;)V
-Lcom/android/server/power/AttentionDetector;-><init>(Ljava/lang/Runnable;Ljava/lang/Object;)V
-Lcom/android/server/pm/dex/DexManager;-><init>(Landroid/content/Context;Landroid/content/pm/IPackageManager;Lcom/android/server/pm/PackageDexOptimizer;Lcom/android/server/pm/Installer;Ljava/lang/Object;)V
-Lcom/android/server/appop/AppOpsService$Op;-><init>(Lcom/android/server/appop/AppOpsService$UidState;Ljava/lang/String;I)V
-Lcom/android/server/pm/UserManagerService;->readUserLP(I)Lcom/android/server/pm/UserManagerService$UserData;
-Lcom/android/server/pm/UserManagerService;->readUserLP(ILjava/io/InputStream;)Lcom/android/server/pm/UserManagerService$UserData;
-Lcom/android/server/pm/UserRestrictionsUtils;->readRestrictions(Lorg/xmlpull/v1/XmlPullParser;)Landroid/os/Bundle;
-Lcom/android/server/pm/UserRestrictionsUtils;->readRestrictions(Lorg/xmlpull/v1/XmlPullParser;Landroid/os/Bundle;)V
-Lcom/android/server/pm/PackageManagerService;->adjustScanFlags(ILcom/android/server/pm/PackageSetting;Lcom/android/server/pm/PackageSetting;Landroid/os/UserHandle;Landroid/content/pm/PackageParser$Package;)I
-Lcom/android/server/pm/SettingBase;->setFlags(I)V
-Lcom/android/server/display/LogicalDisplay;->updateLocked(Ljava/util/List;)V
-Lcom/android/server/Watchdog$HandlerChecker;->run()V
-Lcom/android/server/Watchdog;->run()V
-Lcom/android/server/display/DisplayAdapter$1;->run()V
-Lcom/android/server/display/DisplayManagerService$DisplayManagerHandler;->handleMessage(Landroid/os/Message;)V
-Lcom/android/server/pm/PackageManagerServiceCompilerMapping;->getAndCheckValidity(I)Ljava/lang/String;
-Lcom/android/server/pm/ParallelPackageParser;->take()Lcom/android/server/pm/ParallelPackageParser$ParseResult;
-Lcom/android/server/pm/KeySetManagerService;->assertScannedPackageValid(Landroid/content/pm/PackageParser$Package;)V
-Lcom/android/server/display/LocalDisplayAdapter$LocalDisplayDevice$1;->run()V
-Lcom/android/server/pm/PackageManagerServiceUtils;->verifySignatures(Lcom/android/server/pm/PackageSetting;Lcom/android/server/pm/PackageSetting;Landroid/content/pm/PackageParser$SigningDetails;ZZ)Z
-Lcom/android/server/pm/PackageManagerService;->getSharedLibLatestVersionSetting(Lcom/android/server/pm/PackageManagerService$ScanResult;)Lcom/android/server/pm/PackageSetting;
-Lcom/android/server/display/LocalDisplayAdapter$LocalDisplayDevice$1;->setDisplayBrightness(I)V
-Lcom/android/server/pm/PackageManagerService;->getLatestSharedLibraVersionLPr(Landroid/content/pm/PackageParser$Package;)Landroid/content/pm/SharedLibraryInfo;
-Lcom/android/server/pm/PackageManagerServiceCompilerMapping;->getSystemPropertyName(I)Ljava/lang/String;
-Lcom/android/server/lights/LightsService$LightImpl;->setLightLocked(IIIII)V
-Lcom/android/server/lights/LightsService$LightImpl;->setBrightness(I)V
-Lcom/android/server/lights/LightsService$LightImpl;->setBrightness(II)V
-Lcom/android/server/Watchdog$HandlerChecker;->scheduleCheckLocked()V
-Lcom/android/server/pm/permission/PermissionsState;->copyFrom(Lcom/android/server/pm/permission/PermissionsState;)V
-Lcom/android/server/pm/permission/PermissionManagerService$PermissionManagerServiceInternalImpl;->addAllPermissionGroups(Landroid/content/pm/PackageParser$Package;Z)V
-Lcom/android/server/RecoverySystemService;->onStart()V
-Lcom/android/server/display/DisplayManagerService;->onBootPhase(I)V
-Lcom/android/server/am/ProcessList;->updateOomLevels(IIZ)V
-Lcom/android/server/am/OomAdjProfiler;->batteryPowerChanged(Z)V
+Lcom/android/server/pm/PackageManagerService;->setInstantAppForUser(Lcom/android/server/pm/PackageManagerService$Injector;Lcom/android/server/pm/PackageSetting;IZZ)V
+Lcom/android/server/pm/PackageManagerServiceUtils;->deriveAbiOverride(Ljava/lang/String;Lcom/android/server/pm/PackageSetting;)Ljava/lang/String;
+Lcom/android/server/pm/PackageAbiHelperImpl;->getNativeLibraryPaths(Landroid/content/pm/PackageParser$Package;Ljava/io/File;)Lcom/android/server/pm/PackageAbiHelper$NativeLibraryPaths;
+Lcom/android/server/pm/PackageAbiHelper$Abis;-><init>(Landroid/content/pm/PackageParser$Package;)V
+Lcom/android/server/pm/PackageAbiHelper$Abis;-><init>(Ljava/lang/String;Ljava/lang/String;)V
+Lcom/android/server/pm/PackageAbiHelperImpl;->getNativeLibraryPaths(Lcom/android/server/pm/PackageAbiHelper$Abis;Ljava/io/File;Ljava/lang/String;Ljava/lang/String;ZZ)Lcom/android/server/pm/PackageAbiHelper$NativeLibraryPaths;
+Lcom/android/server/pm/InstructionSets;->getPrimaryInstructionSet(Lcom/android/server/pm/PackageAbiHelper$Abis;)Ljava/lang/String;
+Lcom/android/server/pm/PackageAbiHelper$NativeLibraryPaths;-><init>(Ljava/lang/String;ZLjava/lang/String;Ljava/lang/String;)V
+Lcom/android/server/pm/PackageAbiHelper$NativeLibraryPaths;->applyTo(Landroid/content/pm/PackageParser$Package;)V
+Lcom/android/server/pm/PackageManagerService$ScanResult;-><init>(Lcom/android/server/pm/PackageManagerService$ScanRequest;ZLcom/android/server/pm/PackageSetting;Ljava/util/List;ZLandroid/content/pm/SharedLibraryInfo;Ljava/util/List;)V
+Lcom/android/server/pm/PackageSetting;->updateFrom(Lcom/android/server/pm/PackageSetting;)V
+Lcom/android/server/pm/SettingBase;->copyFrom(Lcom/android/server/pm/SettingBase;)V
+Lcom/android/server/pm/ComponentResolver$ActivityIntentResolver;->allowFilterResult(Landroid/content/pm/PackageParser$ActivityIntentInfo;Ljava/util/List;)Z
+Lcom/android/server/pm/PackageManagerService;->executeSharedLibrariesUpdateLPr(Landroid/content/pm/PackageParser$Package;Landroid/content/pm/PackageParser$Package;Ljava/util/ArrayList;)V
+Lcom/android/server/pm/PackageManagerService;->collectSharedLibraryInfos(Ljava/util/List;[J[[Ljava/lang/String;Ljava/lang/String;ZILjava/util/ArrayList;Ljava/util/Map;Ljava/util/Map;Ljava/util/Map;)Ljava/util/ArrayList;
+Lcom/android/server/pm/PackageManagerService;->getSharedLibraryInfo(Ljava/lang/String;JLjava/util/Map;Ljava/util/Map;)Landroid/content/pm/SharedLibraryInfo;
+Lcom/android/server/pm/PackageManagerService;->addSharedLibraryLPr(Landroid/content/pm/PackageParser$Package;Ljava/util/Set;Landroid/content/pm/SharedLibraryInfo;Landroid/content/pm/PackageParser$Package;)V
+Lcom/android/server/pm/PackageUsage;->readToken(Ljava/io/InputStream;Ljava/lang/StringBuffer;C)Ljava/lang/String;
+Lcom/android/server/pm/PackageUsage;->readVersion1LP(Ljava/util/Map;Ljava/io/InputStream;Ljava/lang/StringBuffer;)V
+Lcom/android/server/pm/PackageUsage;->parseAsLong(Ljava/lang/String;)J
+Lcom/android/server/pm/CompilerStats;->read(Ljava/io/Reader;)Z
+Lcom/android/server/pm/permission/BasePermission;->getSourcePackageSetting()Lcom/android/server/pm/PackageSettingBase;
+Lcom/android/server/pm/permission/PermissionManagerService;->updatePermissionSourcePackage(Ljava/lang/String;Landroid/content/pm/PackageParser$Package;)Z
+Lcom/android/server/pm/permission/BasePermission;->isDynamic()Z
+Lcom/android/server/pm/permission/PermissionManagerService;->cacheBackgroundToForegoundPermissionMapping()V
+Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;->getKnownPackageName(II)Ljava/lang/String;
+Lcom/android/server/pm/PackageSetting;->isSystem()Z
+Lcom/android/server/pm/permission/PermissionsState;->hasInstallPermission(Ljava/lang/String;)Z
+Lcom/android/server/pm/permission/PermissionsState;->getPermissions(I)Ljava/util/Set;
+Lcom/android/server/pm/permission/PermissionManagerService;->revokePermissionsNoLongerImplicitLocked(Lcom/android/server/pm/permission/PermissionsState;Landroid/content/pm/PackageParser$Package;[I)[I
+Lcom/android/server/pm/PackageSetting;->getPermissionsState()Lcom/android/server/pm/permission/PermissionsState;
+Lcom/android/server/pm/permission/PermissionsState;->grantRuntimePermission(Lcom/android/server/pm/permission/BasePermission;I)I
+Lcom/android/server/pm/permission/PermissionManagerService;->restorePermissionState(Landroid/content/pm/PackageParser$Package;ZLjava/lang/String;Lcom/android/server/pm/permission/PermissionManagerServiceInternal$PermissionCallback;)V
+Lcom/android/server/pm/permission/PermissionsState;->getPermissionState(Ljava/lang/String;I)Lcom/android/server/pm/permission/PermissionsState$PermissionState;
+Lcom/android/server/pm/permission/PermissionsState$PermissionData;->getPermissionState(I)Lcom/android/server/pm/permission/PermissionsState$PermissionState;
+Lcom/android/server/pm/PackageSettingBase;->getPermissionsState()Lcom/android/server/pm/permission/PermissionsState;
+Lcom/android/server/pm/permission/PermissionsState;->getRuntimePermissionState(Ljava/lang/String;I)Lcom/android/server/pm/permission/PermissionsState$PermissionState;
+Lcom/android/server/pm/permission/PermissionsState;->hasRequestedPermission(Ljava/lang/String;)Z
+Lcom/android/server/pm/permission/BasePermission;->isRuntimeOnly()Z
+Lcom/android/server/pm/permission/BasePermission;->isAppOp()Z
+Lcom/android/server/pm/permission/BasePermission;->isNormal()Z
+Lcom/android/server/pm/permission/PermissionManagerService;->setInitialGrantForNewImplicitPermissionsLocked(Lcom/android/server/pm/permission/PermissionsState;Lcom/android/server/pm/permission/PermissionsState;Landroid/content/pm/PackageParser$Package;Landroid/util/ArraySet;[I)[I
+Lcom/android/server/pm/UserManagerService;->getUserIds()[I
+Lcom/android/server/pm/permission/PermissionsState$PermissionState;->getFlags()I
+Lcom/android/server/pm/permission/BasePermission;->isRuntime()Z
+Lcom/android/server/pm/permission/PermissionsState;->hasRuntimePermission(Ljava/lang/String;I)Z
+Lcom/android/server/pm/PackageSettingBase;->getSigningDetails()Landroid/content/pm/PackageParser$SigningDetails;
+Lcom/android/server/pm/permission/BasePermission;->isVendorPrivileged()Z
+Lcom/android/server/pm/permission/BasePermission;->isSignature()Z
+Lcom/android/server/pm/permission/PermissionManagerService;->grantSignaturePermission(Ljava/lang/String;Landroid/content/pm/PackageParser$Package;Lcom/android/server/pm/permission/BasePermission;Lcom/android/server/pm/permission/PermissionsState;)Z
+Lcom/android/server/pm/permission/BasePermission;->isOEM()Z
+Lcom/android/server/pm/permission/BasePermission;->isPrivileged()Z
+Lcom/android/server/pm/permission/BasePermission;->getSourcePackageName()Ljava/lang/String;
+Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;->getPackage(Ljava/lang/String;)Landroid/content/pm/PackageParser$Package;
+Lcom/android/server/pm/PackageManagerService;->access$5700(Lcom/android/server/pm/PackageManagerService;Ljava/lang/String;J)Ljava/lang/String;
+Lcom/android/server/pm/PackageManagerService;->resolveInternalPackageNameLPr(Ljava/lang/String;J)Ljava/lang/String;
+Lcom/android/server/pm/permission/PermissionsState;->getPermissionFlags(Ljava/lang/String;I)I
+Lcom/android/server/pm/permission/PermissionsState;->getInstallPermissionState(Ljava/lang/String;)Lcom/android/server/pm/permission/PermissionsState$PermissionState;
+Lcom/android/server/pm/permission/PermissionManagerService;->hasPrivappWhitelistEntry(Ljava/lang/String;Landroid/content/pm/PackageParser$Package;)Z
+Lcom/android/server/pm/permission/BasePermission;->isHardRestricted()Z
+Lcom/android/server/pm/permission/BasePermission;->isSoftRestricted()Z
+Lcom/android/server/pm/permission/PermissionsState$PermissionState;->isGranted()Z
+Lcom/android/server/pm/PackageManagerService;->reconcileAppsDataLI(Ljava/lang/String;IIZZ)Ljava/util/List;
+Lcom/android/server/pm/permission/BasePermission;->writeLPr(Lorg/xmlpull/v1/XmlSerializer;)V
+Lcom/android/server/pm/permission/PermissionSettings;->writePermissions(Lorg/xmlpull/v1/XmlSerializer;)V
+Lcom/android/server/pm/permission/PermissionsState;->getPermissionStatesInternal(I)Ljava/util/List;
+Lcom/android/server/pm/Settings;->writePermissionsLPr(Lorg/xmlpull/v1/XmlSerializer;Ljava/util/List;)V
+Lcom/android/server/pm/permission/PermissionsState$PermissionState;->getName()Ljava/lang/String;
+Lcom/android/server/pm/PackageKeySetData;->getProperSigningKeySet()J
+Lcom/android/server/pm/PackageSignatures;->writeCertsListXml(Lorg/xmlpull/v1/XmlSerializer;Ljava/util/ArrayList;[Landroid/content/pm/Signature;Z)V
+Lcom/android/server/pm/Settings;->writeLPr()V
+Lcom/android/server/pm/Settings;->writeUsesStaticLibLPw(Lorg/xmlpull/v1/XmlSerializer;[Ljava/lang/String;[J)V
+Lcom/android/server/pm/Settings;->writeChildPackagesLPw(Lorg/xmlpull/v1/XmlSerializer;Ljava/util/List;)V
+Lcom/android/server/pm/permission/PermissionsState;->getInstallPermissionStates()Ljava/util/List;
+Lcom/android/server/pm/KeySetManagerService$PublicKeyHandle;->getKey()Ljava/security/PublicKey;
+Lcom/android/server/pm/Settings;->writeKernelMappingLPr(Ljava/lang/String;I[I)V
+Lcom/android/server/pm/Settings;->writeIntToFile(Ljava/io/File;I)V
+Lcom/android/server/pm/Settings;->writeKernelMappingLPr(Lcom/android/server/pm/PackageSetting;)V
+Lcom/android/server/pm/Settings;->writePackageListLPrInternal(I)V
+Lcom/android/server/pm/permission/PermissionsState;->computeGids([I)[I
+Lcom/android/server/pm/Settings;->writePackageRestrictionsLPr(I)V
+Lcom/android/server/IntentResolver;->buildResolveList(Landroid/content/Intent;Landroid/util/FastImmutableArraySet;ZZLjava/lang/String;Ljava/lang/String;[Landroid/content/IntentFilter;Ljava/util/List;I)V
+Lcom/android/server/pm/ComponentResolver$ActivityIntentResolver;->allowFilterResult(Landroid/content/IntentFilter;Ljava/util/List;)Z
+Lcom/android/server/pm/ComponentResolver$ActivityIntentResolver;->queryIntentForPackage(Landroid/content/Intent;Ljava/lang/String;ILjava/util/List;I)Ljava/util/List;
+Lcom/android/server/pm/ComponentResolver$ActivityIntentResolver;->isPackageForFilter(Ljava/lang/String;Landroid/content/IntentFilter;)Z
+Lcom/android/server/pm/ComponentResolver$ActivityIntentResolver;->isPackageForFilter(Ljava/lang/String;Landroid/content/pm/PackageParser$ActivityIntentInfo;)Z
+Lcom/android/server/pm/PackageSettingBase;->getInstalled(I)Z
+Lcom/android/server/pm/PackageManagerService;->getInstantAppPackageName(I)Ljava/lang/String;
+Lcom/android/server/pm/PackageManagerService;->shouldFilterApplicationLocked(Lcom/android/server/pm/PackageSetting;II)Z
+Lcom/android/server/pm/PackageManagerService;->shouldFilterApplicationLocked(Lcom/android/server/pm/PackageSetting;ILandroid/content/ComponentName;II)Z
+Lcom/android/server/pm/PackageManagerService;->isCallerSameApp(Ljava/lang/String;I)Z
+Lcom/android/server/pm/AppsFilter;->shouldFilterApplication(ILcom/android/server/pm/SettingBase;Lcom/android/server/pm/PackageSetting;I)Z
+Lcom/android/server/pm/UserManagerService$LocalService;->exists(I)Z
+Lcom/android/server/pm/UserManagerService;->access$2900(Lcom/android/server/pm/UserManagerService;I)Landroid/content/pm/UserInfo;
+Lcom/android/server/pm/UserManagerService;->getUserInfoNoChecks(I)Landroid/content/pm/UserInfo;
+Lcom/android/server/pm/UserManagerService;->exists(I)Z
+Lcom/android/server/pm/dex/DexManager;->putIfAbsent(Ljava/util/Map;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+Lcom/android/server/pm/dex/DexManager;->cachePackageCodeLocation(Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;[Ljava/lang/String;I)V
+Lcom/android/server/pm/dex/DexManager$PackageCodeLocations;->mergeAppDataDirs(Ljava/lang/String;I)V
+Lcom/android/server/pm/dex/DexManager;->access$300(Ljava/util/Map;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+Lcom/android/server/pm/dex/DexManager$PackageCodeLocations;->updateCodeLocation(Ljava/lang/String;[Ljava/lang/String;)V
+Lcom/android/server/appop/AppOpsService$Op;->access$100(Lcom/android/server/appop/AppOpsService$Op;)I
+Lcom/android/server/pm/PackageManagerService;->generatePackageInfo(Lcom/android/server/pm/PackageSetting;II)Landroid/content/pm/PackageInfo;
+Lcom/android/server/pm/PackageManagerService;->resolveExternalPackageNameLPr(Landroid/content/pm/PackageParser$Package;)Ljava/lang/String;
+Lcom/android/server/pm/Settings$RuntimePermissionPersistence;->writePermissionsSync(I)V
+Lcom/android/server/pm/Settings$RuntimePermissionPersistence;->writePermissions(Lorg/xmlpull/v1/XmlSerializer;Ljava/util/List;)V
+Lcom/android/server/om/OverlayManagerSettings$SettingsItem;->access$1600(Lcom/android/server/om/OverlayManagerSettings$SettingsItem;)I
+Lcom/android/server/pm/PackageManagerService;->filterSharedLibPackageLPr(Lcom/android/server/pm/PackageSetting;III)Z
+Lcom/android/server/om/OverlayManagerSettings;->select(Ljava/lang/String;I)I
+Lcom/android/server/om/OverlayManagerSettings$SettingsItem;->access$1100(Lcom/android/server/om/OverlayManagerSettings$SettingsItem;)Ljava/lang/String;
+Lcom/android/server/pm/PackageManagerServiceUtils;->compareSignatures([Landroid/content/pm/Signature;[Landroid/content/pm/Signature;)I
+Lcom/android/server/om/-$$Lambda$OverlayManagerSettings$Fjt465P6G89HQZERZFsOEjMbtXI;->test(Ljava/lang/Object;)Z
+Lcom/android/server/om/OverlayManagerSettings;->lambda$selectWhereUser$10(ILcom/android/server/om/OverlayManagerSettings$SettingsItem;)Z
+Lcom/android/server/om/OverlayManagerSettings$SettingsItem;->access$1000(Lcom/android/server/om/OverlayManagerSettings$SettingsItem;)Ljava/lang/String;
+Lcom/android/server/om/OverlayManagerSettings$SettingsItem;->getTargetPackageName()Ljava/lang/String;
+Lcom/android/server/om/-$$Lambda$OverlayManagerSettings$L_Sj43p2Txm_KH-wT0lseBTVzh8;->test(Ljava/lang/Object;)Z
+Lcom/android/server/om/OverlayManagerSettings;->lambda$selectWhereTarget$11(Ljava/lang/String;Lcom/android/server/om/OverlayManagerSettings$SettingsItem;)Z
+Lcom/android/server/om/OverlayManagerService;->updateOverlayPaths(ILjava/util/List;)V
+Lcom/android/server/usage/UsageStatsProto;->loadUsageStats(Landroid/util/proto/ProtoInputStream;JLcom/android/server/usage/IntervalStats;Ljava/util/List;)V
+Lcom/android/server/usage/UsageStatsProto;->read(Ljava/io/InputStream;Lcom/android/server/usage/IntervalStats;)V
+Lcom/android/server/usage/UsageStatsProto;->readStringPool(Landroid/util/proto/ProtoInputStream;)Ljava/util/List;
+Lcom/android/server/usage/IntervalStats;->getOrCreateUsageStats(Ljava/lang/String;)Landroid/app/usage/UsageStats;
+Lcom/android/server/usage/IntervalStats;->getCachedStringRef(Ljava/lang/String;)Ljava/lang/String;
+Lcom/android/server/pm/ComponentResolver$ProviderIntentResolver;->access$400(Lcom/android/server/pm/ComponentResolver$ProviderIntentResolver;)Landroid/util/ArrayMap;
+Lcom/android/server/pm/ComponentResolver;->queryProviders(Ljava/lang/String;Ljava/lang/String;III)Ljava/util/List;
+Lcom/android/server/pm/PackageManagerService;->getInstalledPackages(II)Landroid/content/pm/ParceledListSlice;
+Lcom/android/server/content/ContentService$ObserverNode;->addObserverLocked(Landroid/net/Uri;ILandroid/database/IContentObserver;ZLjava/lang/Object;III)V
+Lcom/android/server/am/ActivityManagerService;->registerReceiver(Landroid/app/IApplicationThread;Ljava/lang/String;Landroid/content/IIntentReceiver;Landroid/content/IntentFilter;Ljava/lang/String;II)Landroid/content/Intent;
+Lcom/android/server/appop/AppOpsService;->evalAllForegroundOpsLocked()V
+Lcom/android/server/DropBoxManagerService$EntryFile;->compareTo(Ljava/lang/Object;)I
+Lcom/android/server/DropBoxManagerService$EntryFile;->compareTo(Lcom/android/server/DropBoxManagerService$EntryFile;)I
+Lcom/android/server/DropBoxManagerService$EntryFile;->hasFile()Z
+Lcom/android/server/DropBoxManagerService;->init()V
+Lcom/android/server/DropBoxManagerService$EntryFile;-><init>(Ljava/io/File;I)V
+Lcom/android/server/DropBoxManagerService;->enrollEntry(Lcom/android/server/DropBoxManagerService$EntryFile;)V
+Lcom/android/server/ThreadPriorityBooster;->boost()V
+Lcom/android/server/ThreadPriorityBooster;->reset()V
+Lcom/android/server/wm/DisplayPolicy;->hasNavigationBar()Z
+Lcom/android/server/wm/DisplayPolicy;->navigationBarPosition(III)I
+Lcom/android/server/wm/DisplayPolicy;->navigationBarCanMove()Z
+Lcom/android/server/PersistentDataBlockService;->computeDigestLocked([B)[B
+Lcom/android/server/am/ActivityManagerService;->boostPriorityForLockedSection()V
+Lcom/android/server/am/ActivityManagerService;->resetPriorityAfterLockedSection()V
+Lcom/android/server/PinnerService;->clamp(III)I
+Lcom/android/server/am/ActivityManagerService;->checkComponentPermission(Ljava/lang/String;IIIZ)I
+Lcom/android/server/notification/PreferencesHelper;->readXml(Lorg/xmlpull/v1/XmlPullParser;ZI)V
+Lcom/android/server/pm/PackageManagerService;->updateFlags(II)I
+Lcom/android/server/pm/UserManagerService;->access$2800(Lcom/android/server/pm/UserManagerService;)Landroid/util/SparseIntArray;
+Lcom/android/server/pm/ComponentResolver$ServiceIntentResolver;->queryIntentForPackage(Landroid/content/Intent;Ljava/lang/String;ILjava/util/List;I)Ljava/util/List;
+Lcom/android/server/IntentResolver;->queryIntentFromList(Landroid/content/Intent;Ljava/lang/String;ZLjava/util/ArrayList;I)Ljava/util/List;
+Lcom/android/server/pm/ComponentResolver$ServiceIntentResolver;->allowFilterResult(Landroid/content/pm/PackageParser$ServiceIntentInfo;Ljava/util/List;)Z
+Lcom/android/server/pm/ComponentResolver$ServiceIntentResolver;->allowFilterResult(Landroid/content/IntentFilter;Ljava/util/List;)Z
+Lcom/android/server/pm/ComponentResolver$ServiceIntentResolver;->isPackageForFilter(Ljava/lang/String;Landroid/content/IntentFilter;)Z
+Lcom/android/server/pm/ComponentResolver$ServiceIntentResolver;->isPackageForFilter(Ljava/lang/String;Landroid/content/pm/PackageParser$ServiceIntentInfo;)Z
+Lcom/android/server/notification/PreferencesHelper;->writeXml(Lorg/xmlpull/v1/XmlSerializer;ZI)V
+Lcom/android/server/am/UserController;->handleIncomingUser(IIIZILjava/lang/String;Ljava/lang/String;)I
+Lcom/android/server/am/UserController;->unsafeConvertIncomingUser(I)I
+Lcom/android/server/audio/AudioService$VolumeStreamState;->hasValidSettingsName()Z
+Lcom/android/server/audio/AudioService$VolumeStreamState;->readSettings()V
+Lcom/android/server/am/ActivityManagerService;->handleIncomingUser(IIIZZLjava/lang/String;Ljava/lang/String;)I
+Lcom/android/server/am/UserController;->getCurrentUserId()I
+Lcom/android/server/am/UserController;->ensureNotSpecialUser(I)V
+Lcom/android/server/audio/AudioService;->access$2800(Lcom/android/server/audio/AudioService;)Landroid/content/ContentResolver;
+Lcom/android/server/audio/AudioService$VolumeStreamState;->getSettingNameForDevice(I)Ljava/lang/String;
+Lcom/android/server/pm/permission/PermissionManagerService$PermissionManagerServiceInternalImpl;->enforceCrossUserPermission(IIZZLjava/lang/String;)V
+Lcom/android/server/pm/permission/PermissionManagerService;->access$1900(Lcom/android/server/pm/permission/PermissionManagerService;IIZZZLjava/lang/String;)V
+Lcom/android/server/pm/permission/PermissionManagerService;->enforceCrossUserPermission(IIZZZLjava/lang/String;)V
+Lcom/android/server/pm/UserManagerService;->userWithName(Landroid/content/pm/UserInfo;)Landroid/content/pm/UserInfo;
+Lcom/android/server/pm/UserManagerService;->checkManageOrCreateUsersPermission(Ljava/lang/String;)V
+Lcom/android/server/pm/UserManagerService;->hasManageOrCreateUsersPermission()Z
Lcom/android/server/pm/UserManagerService;->hasManageUsersOrPermission(Ljava/lang/String;)Z
-Lcom/android/server/am/OomAdjProfiler;->scheduleSystemServerCpuTimeUpdate()V
-Lcom/android/server/pm/PackageManagerService$ReconcileRequest;-><init>(Ljava/util/Map;Ljava/util/Map;Ljava/util/Map;Ljava/util/Map;Ljava/util/Map;Lcom/android/server/pm/PackageManagerService$1;)V
-Lcom/android/server/pm/PackageManagerService$ReconcileRequest;-><init>(Ljava/util/Map;Ljava/util/Map;Ljava/util/Map;Ljava/util/Map;Ljava/util/Map;Ljava/util/Map;Ljava/util/Map;Ljava/util/Map;)V
-Lcom/android/server/wm/ConfigurationContainer;->onConfigurationChanged(Landroid/content/res/Configuration;)V
-Lcom/android/server/wm/RootActivityContainer;-><init>(Lcom/android/server/wm/ActivityTaskManagerService;)V
-Lcom/android/server/wm/ActivityTaskManagerService;->createRecentTasks()Lcom/android/server/wm/RecentTasks;
-Lcom/android/server/am/OomAdjuster;->updateOomAdjLocked()V
-Lcom/android/server/am/OomAdjuster;->updateOomAdjLocked(Lcom/android/server/am/ProcessRecord;Z)Z
-Lcom/android/server/am/ActivityManagerService;->updateOomAdjLocked()V
-Lcom/android/server/am/ActivityManagerService;->updateOomAdjLocked(Lcom/android/server/am/ProcessRecord;Z)Z
-Lcom/android/server/pm/Settings;->getRenamedPackageLPr(Ljava/lang/String;)Ljava/lang/String;
-Lcom/android/server/am/OomAdjProfiler;->updateSystemServerCpuTime(ZZ)V
-Lcom/android/server/pm/UserManagerService;->getInstance()Lcom/android/server/pm/UserManagerService;
-Lcom/android/server/pm/permission/PermissionManagerService$PermissionManagerServiceInternalImpl;->addAllPermissions(Landroid/content/pm/PackageParser$Package;Z)V
-Lcom/android/server/power/PowerManagerService$Injector;->createBatterySaverPolicy(Ljava/lang/Object;Landroid/content/Context;Lcom/android/server/power/batterysaver/BatterySavingStats;)Lcom/android/server/power/batterysaver/BatterySaverPolicy;
-Lcom/android/server/power/ThermalManagerService;-><init>(Landroid/content/Context;)V
-Lcom/android/server/power/ThermalManagerService;-><init>(Landroid/content/Context;Lcom/android/server/power/ThermalManagerService$ThermalHalWrapper;)V
-Lcom/android/server/display/PersistentDataStore$Injector;->openRead()Ljava/io/InputStream;
-Lcom/android/server/pm/PackageManagerService$ReconciledPackage;-><init>(Lcom/android/server/pm/PackageManagerService$InstallArgs;Lcom/android/server/pm/PackageSetting;Lcom/android/server/pm/PackageManagerService$PackageInstalledInfo;Lcom/android/server/pm/PackageManagerService$PrepareResult;Lcom/android/server/pm/PackageManagerService$ScanResult;Lcom/android/server/pm/PackageManagerService$DeletePackageAction;Ljava/util/List;Landroid/content/pm/PackageParser$SigningDetails;ZZLcom/android/server/pm/PackageManagerService$1;)V
-Lcom/android/server/pm/ComponentResolver;-><init>(Lcom/android/server/pm/UserManagerService;Landroid/content/pm/PackageManagerInternal;Ljava/lang/Object;)V
-Lcom/android/server/wm/LaunchParamsController;->registerDefaultModifiers(Lcom/android/server/wm/ActivityStackSupervisor;)V
-Lcom/android/server/Watchdog$OpenFdMonitor;->create()Lcom/android/server/Watchdog$OpenFdMonitor;
+Lcom/android/server/utils/TimingsTraceAndSlog;->traceBegin(Ljava/lang/String;)V
+Lcom/android/server/utils/TimingsTraceAndSlog;->logDuration(Ljava/lang/String;J)V
+Lcom/android/server/pm/PackageManagerService;->addPackageHoldingPermissions(Ljava/util/ArrayList;Lcom/android/server/pm/PackageSetting;[Ljava/lang/String;[ZII)V
+Lcom/android/server/pm/PackageManagerService;->updateFlagsForPackage(IILjava/lang/Object;)I
+Lcom/android/server/am/ActivityManagerService;->checkPermission(Ljava/lang/String;II)I
+Lcom/android/server/pm/UserManagerService;->isUserUnlockingOrUnlocked(I)Z
+Lcom/android/server/pm/UserManagerService;->checkManageOrInteractPermIfCallerInOtherProfileGroup(ILjava/lang/String;)V
+Lcom/android/server/pm/UserManagerService$LocalService;->isUserUnlockingOrUnlocked(I)Z
+Lcom/android/server/pm/PackageManagerService;->updateFlagsForComponent(IILjava/lang/Object;)I
Lcom/android/server/SystemServiceManager;->warnIfTooLong(JLcom/android/server/SystemService;Ljava/lang/String;)V
-Lcom/android/server/am/UserController$Injector;->getLockPatternUtils()Lcom/android/internal/widget/LockPatternUtils;
-Lcom/android/server/am/PendingIntentController;-><init>(Landroid/os/Looper;Lcom/android/server/am/UserController;)V
-Lcom/android/server/am/BroadcastQueue;-><init>(Lcom/android/server/am/ActivityManagerService;Landroid/os/Handler;Ljava/lang/String;Lcom/android/server/am/BroadcastConstants;Z)V
-Lcom/android/server/display/LocalDisplayAdapter$LocalDisplayDevice$1;->setDisplayState(I)V
-Lcom/android/server/am/BatteryStatsService$WakeupReasonThread;->waitWakeup()Ljava/lang/String;
+Lcom/android/server/PinnerService;->pinFileRanges(Ljava/lang/String;ILcom/android/server/PinnerService$PinRangeSource;)Lcom/android/server/PinnerService$PinnedFile;
+Lcom/android/server/PinnerService$PinRangeSourceStream;->read(Lcom/android/server/PinnerService$PinRange;)Z
+Lcom/android/server/am/ReceiverList;->containsFilter(Landroid/content/IntentFilter;)Z
+Lcom/android/server/pm/Settings;->isEnabledAndMatchLPr(Landroid/content/pm/ComponentInfo;II)Z
+Lcom/android/server/pm/permission/PermissionManagerService;->access$2100(Lcom/android/server/pm/permission/PermissionManagerService;)Lcom/android/server/pm/permission/PermissionSettings;
+Lcom/android/server/pm/permission/PermissionManagerService$PermissionManagerServiceInternalImpl;->getAllPermissionWithProtectionLevel(I)Ljava/util/ArrayList;
+Lcom/android/server/pm/PackageManagerService;->forEachPackage(Ljava/util/function/Consumer;)V
+Lcom/android/server/pm/permission/PermissionManagerService;->access$200(Lcom/android/server/pm/permission/PermissionManagerService;)Landroid/content/pm/PackageManagerInternal;
+Lcom/android/server/pm/permission/-$$Lambda$PermissionManagerService$7fYYDxKgBF9e9QlxmWAdwL0CsDs;->accept(Ljava/lang/Object;)V
+Lcom/android/server/pm/permission/PermissionManagerService;->lambda$updatePermissions$10$PermissionManagerService(Landroid/content/pm/PackageParser$Package;ZLjava/lang/String;Ljava/lang/String;Lcom/android/server/pm/permission/PermissionManagerServiceInternal$PermissionCallback;Landroid/content/pm/PackageParser$Package;)V
+Lcom/android/server/pm/permission/PermissionManagerService;->getVolumeUuidForPackage(Landroid/content/pm/PackageParser$Package;)Ljava/lang/String;
+Lcom/android/server/pm/permission/PermissionsState;->setGlobalGids([I)V
+Lcom/android/server/pm/permission/PermissionManagerService;->checkIfLegacyStorageOpsNeedToBeUpdated(Landroid/content/pm/PackageParser$Package;Z[I)[I
+Lcom/android/server/pm/permission/PermissionManagerService$1;->onPermissionUpdated([IZ)V
+Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;->writePermissionSettings([IZ)V
+Lcom/android/server/pm/PackageSetting;->isPrivileged()Z
+Lcom/android/server/pm/permission/BasePermission;->isPre23()Z
+Lcom/android/server/pm/permission/BasePermission;->isInstaller()Z
+Lcom/android/server/usage/AppIdleHistory;->getLongValue(Lorg/xmlpull/v1/XmlPullParser;Ljava/lang/String;J)J
+Lcom/android/server/pm/PackageManagerService;->reconcileApps(Ljava/lang/String;)V
+Lcom/android/server/usage/AppIdleHistory;->readAppIdleTimes(ILandroid/util/ArrayMap;)V
+Lcom/android/server/SystemServiceManager;->startBootPhase(Lcom/android/server/utils/TimingsTraceAndSlog;I)V
+Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;->getPackageList(Landroid/content/pm/PackageManagerInternal$PackageListObserver;)Landroid/content/pm/PackageList;
+Lcom/android/server/pm/PackageManagerService;->getPackagesForUid(I)[Ljava/lang/String;
+Lcom/android/server/wm/ConfigurationContainer;->getConfiguration()Landroid/content/res/Configuration;
+Lcom/android/server/am/ActivityManagerService;->enforceNotIsolatedCaller(Ljava/lang/String;)V
+Lcom/android/server/am/ActivityManagerService;->getRecordForAppLocked(Landroid/app/IApplicationThread;)Lcom/android/server/am/ProcessRecord;
+Lcom/android/server/am/ProcessList;->getLRURecordForAppLocked(Landroid/app/IApplicationThread;)Lcom/android/server/am/ProcessRecord;
+Lcom/android/server/am/ActivityManagerService;->isInstantApp(Lcom/android/server/am/ProcessRecord;Ljava/lang/String;I)Z
+Lcom/android/server/inputmethod/InputMethodUtils$InputMethodSettings;->getEnabledInputMethodSubtypeListLocked(Landroid/view/inputmethod/InputMethodInfo;)Ljava/util/List;
+Lcom/android/server/inputmethod/InputMethodSubtypeSwitchingController$InputMethodAndSubtypeList;->getSortedInputMethodAndSubtypeList(ZZ)Ljava/util/List;
+Lcom/android/server/policy/PermissionPolicyService;->getSwitchOp(Ljava/lang/String;)I
+Lcom/android/server/policy/PermissionPolicyService;->access$500(Ljava/lang/String;)I
+Lcom/android/server/policy/PermissionPolicyService$PermissionToOpSynchroniser;->addPackage(Ljava/lang/String;)V
+Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;->getInstantAppPackageName(I)Ljava/lang/String;
+Lcom/android/server/pm/PackageManagerService;->access$5500(Lcom/android/server/pm/PackageManagerService;I)Ljava/lang/String;
+Lcom/android/server/pm/permission/PermissionManagerService;->getPermissionInfo(Ljava/lang/String;Ljava/lang/String;I)Landroid/content/pm/PermissionInfo;
+Lcom/android/server/pm/permission/BasePermission;->getProtectionLevel()I
+Lcom/android/server/pm/permission/PermissionManagerService;->adjustPermissionProtectionFlagsLocked(ILjava/lang/String;I)I
+Lcom/android/server/pm/permission/BasePermission;->generatePermissionInfo(II)Landroid/content/pm/PermissionInfo;
+Lcom/android/server/policy/PermissionPolicyService$PermissionToOpSynchroniser;->addOpIfRestricted(Landroid/content/pm/PermissionInfo;Landroid/content/pm/PackageInfo;)V
+Lcom/android/server/policy/PermissionPolicyService$PermissionToOpSynchroniser;->addOpIfFgPermissions(Landroid/content/pm/PermissionInfo;Landroid/content/pm/PackageInfo;)V
+Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;->filterAppAccess(Landroid/content/pm/PackageParser$Package;II)Z
+Lcom/android/server/pm/PackageManagerService;->access$5600(Lcom/android/server/pm/PackageManagerService;Lcom/android/server/pm/PackageSetting;II)Z
+Lcom/android/server/wm/ActivityTaskManagerService;->getRecentTasks()Lcom/android/server/wm/RecentTasks;
+Lcom/android/server/pm/PackageManagerService;->isRecentsAccessingChildProfiles(II)Z
+Lcom/android/server/pm/PackageManagerService$Injector;->getActivityTaskManagerInternal()Lcom/android/server/wm/ActivityTaskManagerInternal;
+Lcom/android/server/wm/ActivityTaskManagerService$LocalService;->isCallerRecents(I)Z
+Lcom/android/server/wm/RecentTasks;->isCallerRecents(I)Z
+Lcom/android/server/pm/PackageManagerService;->getApplicationInfoInternal(Ljava/lang/String;III)Landroid/content/pm/ApplicationInfo;
+Lcom/android/server/pm/PackageManagerService;->updateFlagsForApplication(IILjava/lang/Object;)I
+Lcom/android/server/pm/PackageManagerService;->getApplicationInfo(Ljava/lang/String;II)Landroid/content/pm/ApplicationInfo;
+Lcom/android/server/pm/PackageManagerService;->getPackageInfo(Ljava/lang/String;II)Landroid/content/pm/PackageInfo;
+Lcom/android/server/pm/PackageManagerService;->getPackageInfoInternal(Ljava/lang/String;JIII)Landroid/content/pm/PackageInfo;
+Lcom/android/server/policy/SoftRestrictedPermissionPolicy;->getMinimumTargetSDK(Landroid/content/Context;Landroid/content/pm/ApplicationInfo;Landroid/os/UserHandle;)I
+Lcom/android/server/pm/permission/PermissionManagerService;->getPermissionFlags(Ljava/lang/String;Ljava/lang/String;I)I
+Lcom/android/server/pm/permission/PermissionManagerService;->getPermissionFlagsInternal(Ljava/lang/String;Ljava/lang/String;II)I
+Lcom/android/server/pm/permission/PermissionManagerService;->enforceGrantRevokeGetRuntimePermissionPermissions(Ljava/lang/String;)V
+Lcom/android/server/policy/PermissionPolicyService$PermissionToOpSynchroniser$OpToChange;-><init>(Lcom/android/server/policy/PermissionPolicyService$PermissionToOpSynchroniser;ILjava/lang/String;I)V
+Lcom/android/server/appop/AppOpsService;->getUidStateLocked(IZ)Lcom/android/server/appop/AppOpsService$UidState;
+Lcom/android/server/appop/AppOpsService;->verifyIncomingUid(I)V
+Lcom/android/server/appop/AppOpsService;->verifyIncomingOp(I)V
+Lcom/android/server/pm/UserManagerService;->hasManagedProfile(I)Z
+Lcom/android/server/appop/AppOpsService;->verifyAndGetIsPrivileged(ILjava/lang/String;)Z
+Lcom/android/server/appop/AppOpsService;->resolvePackageName(ILjava/lang/String;)Ljava/lang/String;
+Lcom/android/server/appop/AppOpsService;->isOpRestrictedLocked(IILjava/lang/String;Z)Z
+Lcom/android/server/policy/PermissionPolicyService$PermissionToOpSynchroniser;->syncPackages()V
+Lcom/android/server/appop/AppOpsService;->checkOperationInternal(IILjava/lang/String;Z)I
+Lcom/android/server/appop/AppOpsService;->checkOperationImpl(IILjava/lang/String;Z)I
+Lcom/android/server/appop/AppOpsService;->checkOperationUnchecked(IILjava/lang/String;Z)I
+Lcom/android/server/pm/permission/BasePermission;->isVerifier()Z
+Lcom/android/server/pm/permission/BasePermission;->isPreInstalled()Z
+Lcom/android/server/policy/PermissionPolicyService;->isStarted(I)Z
+Lcom/android/server/policy/PermissionPolicyService$Internal;->isInitialized(I)Z
+Lcom/android/server/policy/PermissionPolicyService;->access$100(Lcom/android/server/policy/PermissionPolicyService;I)Z
+Lcom/android/server/usage/AppStandbyController;->getIdleUidsForUser(I)[I
+Lcom/android/server/pm/PackageManagerService;->getInstalledApplicationsListInternal(III)Ljava/util/List;
+Lcom/android/server/am/ProcessRecord;->getCurProcState()I
+Lcom/android/server/connectivity/PermissionMonitor;->hasPermission(Landroid/content/pm/PackageInfo;Ljava/lang/String;)Z
+Lcom/android/server/connectivity/PermissionMonitor;->getNetdPermissionMask([Ljava/lang/String;[I)I
+Lcom/android/server/usage/AppStandbyController;->isAppIdleFiltered(Ljava/lang/String;IIJ)Z
+Lcom/android/server/usage/AppStandbyController;->isAppSpecial(Ljava/lang/String;II)Z
+Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;->getPackage(I)Landroid/content/pm/PackageParser$Package;
+Lcom/android/server/usage/AppStandbyController$Injector;->isPowerSaveWhitelistExceptIdleApp(Ljava/lang/String;)Z
+Lcom/android/server/DeviceIdleController$BinderService;->isPowerSaveWhitelistExceptIdleApp(Ljava/lang/String;)Z
+Lcom/android/server/DeviceIdleController;->isPowerSaveWhitelistExceptIdleAppInternal(Ljava/lang/String;)Z
+Lcom/android/server/usage/AppIdleHistory;->getUserHistory(I)Landroid/util/ArrayMap;
+Lcom/android/server/usage/AppIdleHistory;->getPackageHistory(Landroid/util/ArrayMap;Ljava/lang/String;JZ)Lcom/android/server/usage/AppIdleHistory$AppUsageHistory;
+Lcom/android/server/net/NetworkPolicyManagerService;->updateRulesForAllAppsUL(I)V
+Lcom/android/server/pm/permission/PermissionManagerService;->checkUidPermission(Ljava/lang/String;I)I
+Lcom/android/server/pm/permission/PermissionManagerService;->checkUidPermissionImpl(Ljava/lang/String;I)I
+Lcom/android/server/pm/permission/PermissionManagerService;->checkUidPermissionInternal(Ljava/lang/String;Landroid/content/pm/PackageParser$Package;II)I
+Lcom/android/server/pm/PackageManagerService;->checkUidPermission(Ljava/lang/String;I)I
+Lcom/android/server/net/NetworkPolicyManagerService;->hasInternetPermissions(I)Z
+Lcom/android/server/pm/permission/PermissionManagerService;->isImpliedPermissionGranted(Lcom/android/server/pm/permission/PermissionsState;Ljava/lang/String;I)Z
+Lcom/android/server/pm/PackageManagerService;->resolveContentProvider(Ljava/lang/String;II)Landroid/content/pm/ProviderInfo;
+Lcom/android/server/pm/PackageManagerService;->resolveContentProviderInternal(Ljava/lang/String;II)Landroid/content/pm/ProviderInfo;
+Lcom/android/server/pm/ComponentResolver;->queryProvider(Ljava/lang/String;II)Landroid/content/pm/ProviderInfo;
+Lcom/android/server/am/OomAdjuster;->updateOomAdjLocked(Ljava/lang/String;)V
+Lcom/android/server/am/BroadcastFilter;-><init>(Landroid/content/IntentFilter;Lcom/android/server/am/ReceiverList;Ljava/lang/String;Ljava/lang/String;IIZZ)V
+Lcom/android/server/am/ActivityManagerService$PidMap;->get(I)Lcom/android/server/am/ProcessRecord;
+Lcom/android/server/am/UidRecord;->getCurProcState()I
+Lcom/android/server/am/ActivityManagerService;->checkContentProviderPermissionLocked(Landroid/content/pm/ProviderInfo;Lcom/android/server/am/ProcessRecord;IZ)Ljava/lang/String;
+Lcom/android/server/am/ActiveUids;->valueAt(I)Lcom/android/server/am/UidRecord;
+Lcom/android/server/NetworkManagementService;->getFirewallChainState(I)Z
+Lcom/android/server/pm/ComponentResolver;->access$800()Lcom/android/server/pm/UserManagerService;
+Lcom/android/server/content/ContentService;->handleIncomingUser(Landroid/net/Uri;IIIZI)I
+Lcom/android/server/am/ActivityManagerService$LocalService;->checkContentProviderAccess(Ljava/lang/String;I)Ljava/lang/String;
+Lcom/android/server/am/ActivityManagerService;->checkContentProviderAccess(Ljava/lang/String;I)Ljava/lang/String;
+Lcom/android/server/content/ContentService;->registerContentObserver(Landroid/net/Uri;ZLandroid/database/IContentObserver;II)V
+Lcom/android/server/content/ContentService$ObserverNode;->addObserverLocked(Landroid/net/Uri;Landroid/database/IContentObserver;ZLjava/lang/Object;III)V
+Lcom/android/server/content/ContentService$ObserverNode$ObserverEntry;-><init>(Lcom/android/server/content/ContentService$ObserverNode;Landroid/database/IContentObserver;ZLjava/lang/Object;IIILandroid/net/Uri;)V
+Lcom/android/server/content/ContentService;->access$300()Lcom/android/internal/os/BinderDeathDispatcher;
+Lcom/android/server/am/ProcessRecord;->setCurRawAdj(I)V
+Lcom/android/server/wm/WindowProcessController;->setPerceptible(Z)V
+Lcom/android/server/am/OomAdjuster;->computeOomAdjLocked(Lcom/android/server/am/ProcessRecord;ILcom/android/server/am/ProcessRecord;ZJZ)Z
+Lcom/android/server/am/UidRecord;->setCurProcState(I)V
+Lcom/android/server/am/ProcessRecord;->setCurRawProcState(I)V
+Lcom/android/server/location/GnssConfiguration;->loadPropertiesFromCarrierConfig()V
+Lcom/android/server/LockGuard;->guard(I)V
+Lcom/android/server/role/RoleManagerService;->lambda$computeComponentStateHash$2(Ljava/io/ByteArrayOutputStream;Landroid/content/pm/PackageManagerInternal;ILandroid/content/pm/PackageParser$Package;)V
+Lcom/android/server/wm/ActivityStack;->topRunningActivityLocked(Z)Lcom/android/server/wm/ActivityRecord;
+Lcom/android/server/pm/UserManagerService;->getUserInfoLU(I)Landroid/content/pm/UserInfo;
+Lcom/android/server/wm/RootActivityContainer;->getActivityDisplay(I)Lcom/android/server/wm/ActivityDisplay;
+Lcom/android/server/wm/ActivityStack;->getDisplay()Lcom/android/server/wm/ActivityDisplay;
+Lcom/android/server/wm/ConfigurationContainer;->getActivityType()I
+Lcom/android/server/wm/ActivityStack;->topRunningActivityLocked()Lcom/android/server/wm/ActivityRecord;
+Lcom/android/server/wm/WindowContainer;->forAllWindows(Lcom/android/internal/util/ToBooleanFunction;Z)Z
+Lcom/android/server/wm/WindowContainer;->getDisplayContent()Lcom/android/server/wm/DisplayContent;
+Lcom/android/server/am/ActivityManagerService$4;->allowFilterResult(Lcom/android/server/am/BroadcastFilter;Ljava/util/List;)Z
+Lcom/android/server/am/ProcessRecord;->getWindowProcessController()Lcom/android/server/wm/WindowProcessController;
+Lcom/android/server/usage/AppStandbyController;->isActiveDeviceAdmin(Ljava/lang/String;I)Z
+Lcom/android/server/usage/AppStandbyController;->isActiveNetworkScorer(Ljava/lang/String;)Z
+Lcom/android/server/usage/AppStandbyController$Injector;->getActiveNetworkScorer()Ljava/lang/String;
+Lcom/android/server/NetworkScoreService;->getActiveScorerPackage()Ljava/lang/String;
+Lcom/android/server/NetworkScoreService;->enforceSystemOrHasScoreNetworks()V
+Lcom/android/server/usage/AppStandbyController$Injector;->isBoundWidgetPackage(Landroid/appwidget/AppWidgetManager;Ljava/lang/String;I)Z
+Lcom/android/server/appwidget/AppWidgetServiceImpl;->isBoundWidgetPackage(Ljava/lang/String;I)Z
+Lcom/android/server/usage/AppStandbyController;->isDeviceProvisioningPackage(Ljava/lang/String;)Z
+Lcom/android/server/usage/AppStandbyController;->isCarrierApp(Ljava/lang/String;)Z
+Lcom/android/server/usage/AppIdleHistory;->getThresholdIndex(Ljava/lang/String;IJ[J[J)I
+Lcom/android/server/usage/AppIdleHistory;->getElapsedTime(J)J
+Lcom/android/server/usage/AppIdleHistory;->isIdle(Ljava/lang/String;IJ)Z
+Lcom/android/server/net/NetworkPolicyManagerService;->isUidValidForBlacklistRules(I)Z
+Lcom/android/server/net/NetworkPolicyManagerService;->updateRulesForPowerRestrictionsUL(IIZ)I
+Lcom/android/server/net/NetworkPolicyManagerService;->updateRulesForPowerRestrictionsULInner(IIZ)I
+Lcom/android/server/net/NetworkPolicyManagerService;->updateRulesForPowerRestrictionsUL(I)V
+Lcom/android/server/usage/AppStandbyController;->isAppIdleUnfiltered(Ljava/lang/String;IJ)Z
+Lcom/android/server/usage/AppStandbyController;->informListeners(Ljava/lang/String;IIIZ)V
+Lcom/android/server/am/ActivityManagerService;->dispatchUidsChangedForObserver(Landroid/app/IUidObserver;Lcom/android/server/am/ActivityManagerService$UidObserverRegistration;I)V
+Lcom/android/server/pm/PackageManagerService;->getPackageUid(Ljava/lang/String;II)I
+Lcom/android/server/am/ProcessRecord;->getCurRawAdj()I
+Lcom/android/server/am/ProcessRecord;->getReportedProcState()I
+Lcom/android/server/usage/UserUsageStatsService;->reportEvent(Landroid/app/usage/UsageEvents$Event;)V
+Lcom/android/server/usage/IntervalStats;->update(Ljava/lang/String;Ljava/lang/String;JII)V
+Lcom/android/server/BinderCallsStatsService$AuthorizedWorkSourceProvider;->resolveWorkSourceUid(I)I
+Lcom/android/server/BinderCallsStatsService$AuthorizedWorkSourceProvider;->getCallingUid()I
+Lcom/android/server/wm/WindowContainer;->getParent()Lcom/android/server/wm/WindowContainer;
+Lcom/android/server/wm/WindowContainer;->scheduleAnimation()V
+Lcom/android/server/wm/ConfigurationContainer;->getBounds()Landroid/graphics/Rect;
+Lcom/android/server/wm/DisplayContent;->forAllWindows(Lcom/android/internal/util/ToBooleanFunction;Z)Z
+Lcom/android/server/wm/WindowContainer;->getPendingTransaction()Landroid/view/SurfaceControl$Transaction;
+Lcom/android/server/wm/DisplayContent;->skipTraverseChild(Lcom/android/server/wm/WindowContainer;)Z
+Lcom/android/server/am/ActivityManagerService;->incrementProcStateSeqAndNotifyAppsLocked()V
+Lcom/android/server/wm/WindowManagerService;->boostPriorityForLockedSection()V
+Lcom/android/server/wm/WindowManagerThreadPriorityBooster;->boost()V
+Lcom/android/server/wm/WindowManagerService;->resetPriorityAfterLockedSection()V
+Lcom/android/server/wm/WindowManagerThreadPriorityBooster;->reset()V
+Lcom/android/server/IntentResolver;->filterResults(Ljava/util/List;)V
+Lcom/android/server/IntentResolver;->getFastIntentCategories(Landroid/content/Intent;)Landroid/util/FastImmutableArraySet;
+Lcom/android/server/am/ProcessRecord;->getCurrentSchedulingGroup()I
+Lcom/android/server/content/ContentService$ObserverNode;->collectObserversLocked(Landroid/net/Uri;ILandroid/database/IContentObserver;ZIILjava/util/ArrayList;)V
+Lcom/android/server/display/LogicalDisplay;->getDisplayInfoLocked()Landroid/view/DisplayInfo;
+Lcom/android/server/am/UidRecord;->reset()V
+Lcom/android/server/am/ActivityManagerService;->isReceivingBroadcastLocked(Lcom/android/server/am/ProcessRecord;Landroid/util/ArraySet;)Z
+Lcom/android/server/am/ProcessRecord;->hasForegroundServices()Z
+Lcom/android/server/wm/WindowContainer;->prepareSurfaces()V
+Lcom/android/server/am/ReceiverList;-><init>(Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ProcessRecord;IIILandroid/content/IIntentReceiver;)V
+Lcom/android/server/am/ReceiverList;->hashCode()I
+Lcom/android/server/display/DisplayManagerService;->access$1600(Lcom/android/server/display/DisplayManagerService;II)Landroid/view/DisplayInfo;
+Lcom/android/server/display/DisplayManagerService;->getDisplayInfoInternal(II)Landroid/view/DisplayInfo;
+Lcom/android/server/display/DisplayManagerService$BinderService;->getDisplayInfo(I)Landroid/view/DisplayInfo;
+Lcom/android/server/am/ActivityManagerService$Injector;->isNetworkRestrictedForUid(I)Z
+Lcom/android/server/am/ActivityManagerService$Injector;->ensureHasNetworkManagementInternal()Z
+Lcom/android/server/NetworkManagementService$LocalService;->isNetworkRestrictedForUid(I)Z
+Lcom/android/server/NetworkManagementService;->access$1400(Lcom/android/server/NetworkManagementService;I)Z
+Lcom/android/server/NetworkManagementService;->isNetworkRestrictedInternal(I)Z
+Lcom/android/server/wm/ConfigurationContainer;->getWindowingMode()I
+Lcom/android/server/wm/WindowContainer;->isSelfOrChildAnimating()Z
+Lcom/android/server/am/ProcessRecord;->setCurrentSchedulingGroup(I)V
+Lcom/android/server/wm/WindowProcessController;->setCurrentSchedulingGroup(I)V
+Lcom/android/server/IntentResolver;->queryIntent(Landroid/content/Intent;Ljava/lang/String;ZI)Ljava/util/List;
+Lcom/android/server/am/ProcessRecord;->hasForegroundActivities()Z
+Lcom/android/server/wm/WindowState;->getDisplayContent()Lcom/android/server/wm/DisplayContent;
+Lcom/android/server/pm/ComponentResolver;->access$900()Landroid/content/pm/PackageManagerInternal;
+Lcom/android/server/wm/SurfaceAnimator;->hasLeash()Z
+Lcom/android/server/wm/WindowContainer;->checkCompleteDeferredRemoval()Z
+Lcom/android/server/wm/WindowContainer;->isSelfAnimating()Z
+Lcom/android/server/wm/SurfaceAnimator;->isAnimating()Z
+Lcom/android/server/wm/DisplayContent;->getDisplayId()I
+Lcom/android/server/am/ProcessRecord;->setHasForegroundActivities(Z)V
+Lcom/android/server/wm/WindowProcessController;->setHasForegroundActivities(Z)V
+Lcom/android/server/am/ProcessRecord;->setCurProcState(I)V
+Lcom/android/server/wm/WindowProcessController;->setCurrentProcState(I)V
+Lcom/android/server/am/ActivityManagerService;->updateLowMemStateLocked(III)Z
+Lcom/android/server/wm/ConfigurationContainer;->getWindowConfiguration()Landroid/app/WindowConfiguration;
+Lcom/android/server/am/OomAdjuster;->applyOomAdjLocked(Lcom/android/server/am/ProcessRecord;ZJJ)Z
+Lcom/android/server/am/AppCompactor;->useCompaction()Z
+Lcom/android/server/am/ProcessList;->procStatesDifferForMem(II)Z
+Lcom/android/server/am/ActivityManagerService;->dispatchUidsChanged()V
+Lcom/android/server/audio/AudioService$VolumeStreamState;->setIndex(IILjava/lang/String;)Z
+Lcom/android/server/audio/AudioService;->access$3000(Lcom/android/server/audio/AudioService;)[Lcom/android/server/audio/AudioService$VolumeStreamState;
+Lcom/android/server/content/ContentService$ObserverNode;->removeObserverLocked(Landroid/database/IContentObserver;)Z
+Lcom/android/server/wm/DisplayContent$TaskStackContainers;->forAllExitingAppTokenWindows(Lcom/android/internal/util/ToBooleanFunction;Z)Z
+Lcom/android/server/wm/WindowState;->getTask()Lcom/android/server/wm/Task;
+Lcom/android/server/appop/AppOpsService;->getOpLocked(IILjava/lang/String;ZZ)Lcom/android/server/appop/AppOpsService$Op;
+Lcom/android/server/appop/AppOpsService;->getOpsRawNoVerifyLocked(ILjava/lang/String;ZZ)Lcom/android/server/appop/AppOpsService$Ops;
+Lcom/android/server/wm/AppWindowToken;->getTask()Lcom/android/server/wm/Task;
+Lcom/android/server/wm/WindowContainer;->checkAppWindowsReadyToShow()V
+Lcom/android/server/SystemService;->getContext()Landroid/content/Context;
+Lcom/android/server/am/ProcessRecord;->getInteractionEventTime()J
+Lcom/android/server/power/PowerManagerService;->findWakeLockIndexLocked(Landroid/os/IBinder;)I
+Lcom/android/server/power/PowerManagerService;->updateWakeLockSummaryLocked(I)V
+Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;->isEnabledAndMatches(Landroid/content/pm/ComponentInfo;II)Z
+Lcom/android/server/wm/ConfigurationContainer;->onConfigurationChanged(Landroid/content/res/Configuration;)V
+Lcom/android/server/policy/SoftRestrictedPermissionPolicy;->forPermission(Landroid/content/Context;Landroid/content/pm/ApplicationInfo;Landroid/os/UserHandle;Ljava/lang/String;)Lcom/android/server/policy/SoftRestrictedPermissionPolicy;
+Lcom/android/server/appop/AppOpsService;->checkOperationRaw(IILjava/lang/String;)I
+Lcom/android/server/appop/AppOpsService;->getOpLocked(Lcom/android/server/appop/AppOpsService$Ops;IZ)Lcom/android/server/appop/AppOpsService$Op;
+Lcom/android/server/policy/PermissionPolicyService$PermissionToOpSynchroniser;->setUidModeIfMode(IIIILjava/lang/String;)Z
+Lcom/android/server/policy/PermissionPolicyService$PermissionToOpSynchroniser;->setUidModeAllowedIfDefault(IILjava/lang/String;)Z
+Lcom/android/server/pm/PackageManagerService;->getPackagesForSharedUserIdLocked(Ljava/lang/String;I)[Ljava/lang/String;
+Lcom/android/server/policy/PermissionPolicyService;->synchronizePackagePermissionsAndAppOpsForUser(Ljava/lang/String;I)V
+Lcom/android/server/am/ActivityManagerService;->getPackageManagerInternalLocked()Landroid/content/pm/PackageManagerInternal;
+Lcom/android/server/power/PowerManagerService;->getWakeLockSummaryFlags(Lcom/android/server/power/PowerManagerService$WakeLock;)I
+Lcom/android/server/TelephonyRegistry;->add(Landroid/os/IBinder;)Lcom/android/server/TelephonyRegistry$Record;
+Lcom/android/server/am/ServiceRecord;->getConnections()Landroid/util/ArrayMap;
+Lcom/android/server/am/ProcessRecord;->hasTopUi()Z
+Lcom/android/server/wm/WindowProcessController;->hasVisibleActivities()Z
+Lcom/android/server/am/ActivityManagerService;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+Lcom/android/server/am/ProcessRecord;->hasPendingUiClean()Z
+Lcom/android/server/am/UserController;->getStartedUserState(I)Lcom/android/server/am/UserState;
+Lcom/android/server/wm/ConfigurationContainer;->inSplitScreenPrimaryWindowingMode()Z
+Lcom/android/server/wm/ActivityDisplay;->getFocusedStack()Lcom/android/server/wm/ActivityStack;
+Lcom/android/server/pm/dex/DexManager$PackageCodeLocations;->searchDex(Ljava/lang/String;I)I
+Lcom/android/server/pm/dex/DexManager;->getDexPackage(Landroid/content/pm/ApplicationInfo;Ljava/lang/String;I)Lcom/android/server/pm/dex/DexManager$DexSearchResult;
+Lcom/android/server/pm/PackageManagerService;->updateFlagsForResolve(IILandroid/content/Intent;IZZ)I
+Lcom/android/server/wm/WindowState;->getParentWindow()Lcom/android/server/wm/WindowState;
+Lcom/android/server/TelephonyRegistry$Record;->matchPhoneStateListenerEvent(I)Z
+Lcom/android/server/wm/WindowState;->forAllWindows(Lcom/android/internal/util/ToBooleanFunction;Z)Z
+Lcom/android/server/wm/WindowState;->applyInOrderWithImeWindows(Lcom/android/internal/util/ToBooleanFunction;Z)Z
+Lcom/android/server/wm/WindowState;->applyImeWindowsIfNeeded(Lcom/android/internal/util/ToBooleanFunction;Z)Z
+Lcom/android/server/wm/WindowState;->isInputMethodTarget()Z
+Lcom/android/server/wm/WindowContainer;->getChildCount()I
+Lcom/android/server/am/ProcessRecord;->getActiveInstrumentation()Lcom/android/server/am/ActiveInstrumentation;
+Lcom/android/server/am/ProcessRecord;->modifyRawOomAdj(I)I
+Lcom/android/server/wm/WindowAnimator;->scheduleAnimation()V
+Lcom/android/server/wm/WindowContainer$ForAllWindowsConsumerWrapper;->apply(Ljava/lang/Object;)Z
+Lcom/android/server/wm/WindowContainer$ForAllWindowsConsumerWrapper;->apply(Lcom/android/server/wm/WindowState;)Z
+Lcom/android/server/wm/RootWindowContainer;->getDisplayContent(I)Lcom/android/server/wm/DisplayContent;
+Lcom/android/server/wm/ActivityTaskManagerService$LocalService;->getTopProcessState()I
+Lcom/android/server/wm/ActivityTaskManagerService$LocalService;->isHeavyWeightProcess(Lcom/android/server/wm/WindowProcessController;)Z
+Lcom/android/server/wm/WindowProcessController;->isHomeProcess()Z
+Lcom/android/server/wm/WindowProcessController;->isPreviousProcess()Z
+Lcom/android/server/pm/PackageManagerService;->updateFlagsForResolve(IILandroid/content/Intent;IZ)I
+Lcom/android/server/am/BroadcastQueue;->processNextBroadcastLocked(ZZ)V
+Lcom/android/server/am/ActivityManagerService;->ensureAllowedAssociations()V
+Lcom/android/server/am/ActivityManagerService;->validateAssociationAllowedLocked(Ljava/lang/String;ILjava/lang/String;I)Z
+Lcom/android/server/StorageManagerService;->isUserKeyUnlocked(I)Z
+Lcom/android/server/am/ProcessRecord;->hasOverlayUi()Z
+Lcom/android/server/am/ContentProviderRecord;->hasExternalProcessHandles()Z
+Lcom/android/server/am/UserController;->isUserRunning(II)Z
+Lcom/android/server/wm/RootActivityContainer;->isFocusable(Lcom/android/server/wm/ConfigurationContainer;Z)Z
+Lcom/android/server/wm/WindowProcessController;->hasActivities()Z
+Lcom/android/server/wm/WindowState;->getAttrs()Landroid/view/WindowManager$LayoutParams;
+Lcom/android/server/am/ProcessRecord$PackageList;->containsKey(Ljava/lang/Object;)Z
+Lcom/android/server/wm/ActivityDisplay;->getChildCount()I
+Lcom/android/server/TelephonyRegistry;->notifyDataConnectionForSubscriber(IIIZLjava/lang/String;Ljava/lang/String;Landroid/net/LinkProperties;Landroid/net/NetworkCapabilities;IZ)V
+Lcom/android/server/am/OomAdjuster;->shouldSkipDueToCycle(Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;IIZ)Z
+Lcom/android/server/am/ProcessRecord;->getCurRawProcState()I
+Lcom/android/server/am/ConnectionRecord;->trackProcState(IIJ)V
+Lcom/android/server/wm/ActivityStack;->getResumedActivity()Lcom/android/server/wm/ActivityRecord;
+Lcom/android/server/wm/ActivityStackSupervisor;->isCurrentProfileLocked(I)Z
+Lcom/android/server/wm/ActivityRecord;->okToShowLocked()Z
+Lcom/android/server/am/ActivityManagerService$LocalService;->isUserRunning(II)Z
+Lcom/android/server/am/ProcessRecord;->hasRecentTasks()Z
+Lcom/android/server/wm/WindowProcessController;->hasRecentTasks()Z
+Lcom/android/server/am/ConnectionRecord;->hasFlag(I)Z
+Lcom/android/server/am/ActiveServices;->updateServiceClientActivitiesLocked(Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ConnectionRecord;Z)Z
+Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;->isPermissionsReviewRequired(Ljava/lang/String;I)Z
+Lcom/android/server/pm/PackageManagerService;->access$5900(Lcom/android/server/pm/PackageManagerService;)Lcom/android/server/pm/permission/PermissionManagerServiceInternal;
+Lcom/android/server/pm/permission/PermissionManagerService$PermissionManagerServiceInternalImpl;->isPermissionsReviewRequired(Landroid/content/pm/PackageParser$Package;I)Z
+Lcom/android/server/pm/permission/PermissionManagerService;->access$600(Lcom/android/server/pm/permission/PermissionManagerService;Landroid/content/pm/PackageParser$Package;I)Z
+Lcom/android/server/pm/permission/PermissionManagerService;->isPermissionsReviewRequired(Landroid/content/pm/PackageParser$Package;I)Z
+Lcom/android/server/am/ProcessRecord;->updateBoundClientUids()V
+Lcom/android/server/firewall/IntentFirewall;->checkIntent(Lcom/android/server/firewall/IntentFirewall$FirewallIntentResolver;Landroid/content/ComponentName;ILandroid/content/Intent;IILjava/lang/String;I)Z
+Lcom/android/server/firewall/IntentFirewall$FirewallIntentResolver;->queryByComponent(Landroid/content/ComponentName;Ljava/util/List;)V
+Lcom/android/server/pm/permission/PermissionManagerService;->checkPermission(Ljava/lang/String;Ljava/lang/String;I)I
+Lcom/android/server/pm/permission/PermissionManagerService;->checkPermissionImpl(Ljava/lang/String;Ljava/lang/String;I)I
+Lcom/android/server/pm/permission/PermissionManagerService;->checkPermissionInternal(Ljava/lang/String;Ljava/lang/String;II)I
+Lcom/android/server/am/ActivityManagerService;->checkTime(JLjava/lang/String;)V
+Lcom/android/server/wm/ActivityDisplay;->getChildAt(I)Lcom/android/server/wm/ActivityStack;
+Lcom/android/server/power/PowerManagerService;->access$3700(Lcom/android/server/power/PowerManagerService;)Landroid/content/Context;
+Lcom/android/server/appop/AppOpsService;->checkPackage(ILjava/lang/String;)I
+Lcom/android/server/am/BroadcastQueue;->deliverToRegisteredReceiverLocked(Lcom/android/server/am/BroadcastRecord;Lcom/android/server/am/BroadcastFilter;ZI)V
+Lcom/android/server/am/ProcessList;->checkSlow(JLjava/lang/String;)V
+Lcom/android/server/pm/ComponentResolver$ActivityIntentResolver;->isFilterStopped(Landroid/content/IntentFilter;I)Z
+Lcom/android/server/pm/ComponentResolver$ActivityIntentResolver;->isFilterStopped(Landroid/content/pm/PackageParser$ActivityIntentInfo;I)Z
+Lcom/android/server/wm/ConfigurationContainer;->inPinnedWindowingMode()Z
+Lcom/android/server/am/ActiveUids;->size()I
+Lcom/android/server/wm/TaskRecord;->topRunningActivityLocked()Lcom/android/server/wm/ActivityRecord;
+Lcom/android/server/firewall/IntentFirewall$FirewallIntentResolver;->sortResults(Ljava/util/List;)V
+Lcom/android/server/pm/PackageManagerService;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+Lcom/android/server/wm/WindowContainer;->isAnimating()Z
+Lcom/android/server/wm/WindowContainer;->getDisplayedBounds()Landroid/graphics/Rect;
+Lcom/android/server/wm/WindowManagerService;->scheduleAnimationLocked()V
+Lcom/android/server/wm/Dimmer;->resetDimStates()V
+Lcom/android/server/wm/Dimmer;->updateDims(Landroid/view/SurfaceControl$Transaction;Landroid/graphics/Rect;)Z
+Lcom/android/server/wm/WindowState;->wouldBeVisibleIfPolicyIgnored()Z
+Lcom/android/server/firewall/IntentFirewall;->checkBroadcast(Landroid/content/Intent;IILjava/lang/String;I)Z
+Lcom/android/server/am/BroadcastQueue;->requestStartTargetPermissionsReviewIfNeededLocked(Lcom/android/server/am/BroadcastRecord;Ljava/lang/String;I)Z
+Lcom/android/server/wm/WindowState;->isParentWindowHidden()Z
+Lcom/android/server/wm/WindowStateAnimator;->hasSurface()Z
+Lcom/android/server/wm/WindowContainer;->getDimmer()Lcom/android/server/wm/Dimmer;
+Lcom/android/server/power/batterysaver/BatterySaverPolicy;->getCurrentPolicyLocked()Lcom/android/server/power/batterysaver/BatterySaverPolicy$Policy;
+Lcom/android/server/power/batterysaver/BatterySaverPolicy;->getBatterySaverPolicy(I)Landroid/os/PowerSaveState;
+Lcom/android/server/power/Notifier;->getBatteryStatsWakeLockMonitorType(I)I
+Lcom/android/server/display/DisplayManagerService;->access$600(Lcom/android/server/display/DisplayManagerService;)Lcom/android/server/display/DisplayManagerService$SyncRoot;
+Lcom/android/server/power/PowerManagerService;->updatePowerStateLocked()V
+Lcom/android/server/am/BatteryStatsService;->enforceCallingPermission()V
+Lcom/android/server/power/PowerManagerService;->isMaximumScreenOffTimeoutFromDeviceAdminEnforcedLocked()Z
+Lcom/android/server/wm/WindowState;->isVisible()Z
+Lcom/android/server/power/PowerManagerService;->updateIsPoweredLocked(I)V
+Lcom/android/server/power/PowerManagerService;->updateStayOnLocked(I)V
+Lcom/android/server/power/PowerManagerService;->updateScreenBrightnessBoostLocked(I)V
+Lcom/android/server/power/PowerManagerService;->updateUserActivitySummaryLocked(JI)V
+Lcom/android/server/power/PowerManagerService;->updateWakefulnessLocked(I)Z
+Lcom/android/server/power/PowerManagerService;->updateProfilesLocked(J)V
+Lcom/android/server/power/PowerManagerService;->updateDisplayPowerStateLocked(I)Z
+Lcom/android/server/power/PowerManagerService;->updateDreamLocked(IZ)V
+Lcom/android/server/power/PowerManagerService;->finishWakefulnessChangeIfNeededLocked()V
+Lcom/android/server/power/PowerManagerService;->updateSuspendBlockerLocked()V
+Lcom/android/server/power/PowerManagerService;->needDisplaySuspendBlockerLocked()Z
+Lcom/android/server/power/PowerManagerService;->setHalAutoSuspendModeLocked(Z)V
+Lcom/android/server/power/PowerManagerService;->setHalInteractiveModeLocked(Z)V
+Lcom/android/server/display/DisplayManagerService;->access$3900(Lcom/android/server/display/DisplayManagerService;)Lcom/android/server/display/DisplayPowerController;
+Lcom/android/server/power/PowerManagerService;->scheduleSandmanLocked()V
+Lcom/android/server/appop/AppOpsService;->scheduleWriteLocked()V
+Lcom/android/server/power/PowerManagerService;->getDesiredScreenPolicyLocked()I
+Lcom/android/server/power/PowerManagerService;->shouldUseProximitySensorLocked()Z
+Lcom/android/server/power/PowerManagerService;->shouldBoostScreenBrightness()Z
+Lcom/android/server/power/PowerManagerService;->updatePowerRequestFromBatterySaverPolicy(Landroid/hardware/display/DisplayManagerInternal$DisplayPowerRequest;)V
+Lcom/android/server/display/DisplayManagerService$LocalService;->requestPowerState(Landroid/hardware/display/DisplayManagerInternal$DisplayPowerRequest;Z)Z
+Lcom/android/server/display/DisplayPowerController;->requestPowerState(Landroid/hardware/display/DisplayManagerInternal$DisplayPowerRequest;Z)Z
+Lcom/android/server/power/PowerManagerService$PowerManagerHandler;->handleMessage(Landroid/os/Message;)V
+Lcom/android/server/power/PowerManagerService;->access$3100(Lcom/android/server/power/PowerManagerService;)V
+Lcom/android/server/power/PowerManagerService;->handleSandman()V
+Lcom/android/server/dreams/DreamManagerService$LocalService;->isDreaming()Z
+Lcom/android/server/dreams/DreamManagerService;->access$1400(Lcom/android/server/dreams/DreamManagerService;)Z
+Lcom/android/server/dreams/DreamManagerService;->isDreamingInternal()Z
+Lcom/android/server/power/PowerManagerService;->getSleepTimeoutLocked()J
+Lcom/android/server/power/PowerManagerService;->getScreenOffTimeoutLocked(J)J
+Lcom/android/server/power/PowerManagerService;->getScreenDimDurationLocked(J)J
+Lcom/android/server/power/PowerManagerService;->getNextProfileTimeoutLocked(J)J
+Lcom/android/server/power/PowerManagerService;->adjustWakeLockSummaryLocked(I)I
+Lcom/android/server/power/PowerManagerService;->isItBedTimeYetLocked()Z
+Lcom/android/server/wm/WindowContainer;->assignChildLayers(Landroid/view/SurfaceControl$Transaction;)V
+Lcom/android/server/wm/WindowState;->isDrawnLw()Z
+Lcom/android/server/wm/DisplayContent;->getDisplayPolicy()Lcom/android/server/wm/DisplayPolicy;
+Lcom/android/server/wm/WindowState;->isVisibleByPolicy()Z
+Lcom/android/server/wm/WindowState;->inSizeCompatMode()Z
+Lcom/android/server/wm/DisplayContent$TaskStackContainers;->forAllWindows(Lcom/android/internal/util/ToBooleanFunction;Z)Z
+Lcom/android/server/am/BroadcastQueue;->maybeAddAllowBackgroundActivityStartsToken(Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/BroadcastRecord;)V
+Lcom/android/server/wm/ConfigurationContainer;->inFreeformWindowingMode()Z
+Lcom/android/server/wm/RootActivityContainer;->getTopResumedActivity()Lcom/android/server/wm/ActivityRecord;
+Lcom/android/server/wm/WindowState;->isChildWindow()Z
+Lcom/android/server/pm/PackageManagerService;->applyPostResolutionFilter(Ljava/util/List;Ljava/lang/String;ZIZILandroid/content/Intent;)Ljava/util/List;
+Lcom/android/server/locksettings/LockSettingsService;->checkReadPermission(Ljava/lang/String;I)V
+Lcom/android/server/wm/ConfigurationContainer;->getBounds(Landroid/graphics/Rect;)V
+Lcom/android/server/wm/WindowState;->getFrameLw()Landroid/graphics/Rect;
+Lcom/android/server/wm/WindowState;->isDisplayedLw()Z
+Lcom/android/server/wm/TaskStack;->getStackOutset()I
+Lcom/android/server/wm/WindowState;->getDisplayId()I
+Lcom/android/server/wm/WindowState;->getOrientationChanging()Z
+Lcom/android/server/wm/WindowContainer;->forAllWindows(Ljava/util/function/Consumer;Z)V
+Lcom/android/server/wm/WindowContainer;->obtainConsumerWrapper(Ljava/util/function/Consumer;)Lcom/android/server/wm/WindowContainer$ForAllWindowsConsumerWrapper;
+Lcom/android/server/wm/WindowContainer$ForAllWindowsConsumerWrapper;->setConsumer(Ljava/util/function/Consumer;)V
+Lcom/android/server/wm/WindowContainer$ForAllWindowsConsumerWrapper;->release()V
+Lcom/android/server/wm/WindowContainer;->access$100(Lcom/android/server/wm/WindowContainer;)Landroid/util/Pools$SynchronizedPool;
+Lcom/android/server/wm/WindowState;->updateSurfacePosition()V
+Lcom/android/server/wm/WindowState;->updateSurfacePosition(Landroid/view/SurfaceControl$Transaction;)V
+Lcom/android/server/appop/AppOpsService$UidState;->evalMode(II)I
+Lcom/android/server/power/PowerManagerService;->access$3300(Landroid/os/WorkSource;)Landroid/os/WorkSource;
+Lcom/android/server/power/PowerManagerService;->copyWorkSource(Landroid/os/WorkSource;)Landroid/os/WorkSource;
+Lcom/android/server/power/Notifier;->onWakeLockAcquired(ILjava/lang/String;Ljava/lang/String;IILandroid/os/WorkSource;Ljava/lang/String;)V
+Lcom/android/server/power/PowerManagerService;->restartNofifyLongTimerLocked(Lcom/android/server/power/PowerManagerService$WakeLock;)V
+Lcom/android/server/am/ProcessRecord;->isCrashing()Z
+Lcom/android/server/wm/WindowToken;->isHidden()Z
+Lcom/android/server/wm/AppWindowToken;->forAllWindows(Lcom/android/internal/util/ToBooleanFunction;Z)Z
+Lcom/android/server/wm/AppWindowToken;->forAllWindowsUnchecked(Lcom/android/internal/util/ToBooleanFunction;Z)Z
+Lcom/android/server/wm/WindowState;->transformFrameToSurfacePosition(IILandroid/graphics/Point;)V
+Lcom/android/server/wm/WindowState;->getStack()Lcom/android/server/wm/TaskStack;
+Lcom/android/server/wm/WindowState;->transformSurfaceInsetsPosition(Landroid/graphics/Point;Landroid/graphics/Rect;)V
+Lcom/android/server/wm/WindowState;->prepareSurfaces()V
+Lcom/android/server/wm/WindowState;->applyDims(Lcom/android/server/wm/Dimmer;)V
+Lcom/android/server/wm/WindowStateAnimator;->prepareSurfaceLocked(Z)V
+Lcom/android/server/wm/RootWindowContainer;->performSurfacePlacementNoTrace(Z)V
+Lcom/android/server/wm/WindowState;->isVisibleLw()Z
+Lcom/android/server/wm/WindowSurfaceController;->hasSurface()Z
+Lcom/android/server/wm/WindowManagerService;->getDefaultDisplayContentLocked()Lcom/android/server/wm/DisplayContent;
+Lcom/android/server/wm/RootWindowContainer;->scheduleAnimation()V
+Lcom/android/server/wm/WindowContainer;->getWindow(Ljava/util/function/Predicate;)Lcom/android/server/wm/WindowState;
+Lcom/android/server/wm/WindowContainer;->needsZBoost()Z
+Lcom/android/server/wm/WindowState;->isOnScreen()Z
+Lcom/android/server/wm/utils/InsetUtils;->insetsBetweenFrames(Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;)V
+Lcom/android/server/wm/PolicyControl;->getWindowFlags(Lcom/android/server/wm/WindowState;Landroid/view/WindowManager$LayoutParams;)I
+Lcom/android/server/wm/WindowContainer;->getChildAt(I)Lcom/android/server/wm/WindowContainer;
+Lcom/android/server/wm/InsetsStateController;->onPostLayout()V
+Lcom/android/server/wm/WindowFrames;->setContentChanged(Z)V
+Lcom/android/server/wm/DisplayContent$NonAppWindowContainers;->prepareSurfaces()V
+Lcom/android/server/wm/DisplayContent;->getHomeStack()Lcom/android/server/wm/TaskStack;
+Lcom/android/server/wm/DisplayContent$TaskStackContainers;->getHomeStack()Lcom/android/server/wm/TaskStack;
+Lcom/android/server/wm/DisplayContent$NonAppWindowContainers;->getDimmer()Lcom/android/server/wm/Dimmer;
+Lcom/android/server/wm/RootActivityContainer;->getTopDisplayFocusedStack()Lcom/android/server/wm/ActivityStack;
+Lcom/android/server/wm/WindowState;->resetContentChanged()V
+Lcom/android/server/wm/WindowState;->isDragResizeChanged()Z
+Lcom/android/server/wm/WindowState;->computeDragResizing()Z
+Lcom/android/server/wm/WindowState;->isVisibleOrAdding()Z
diff --git a/services/autofill/java/com/android/server/autofill/Session.java b/services/autofill/java/com/android/server/autofill/Session.java
index b4ee0b1abbd7..8032e1b42ea9 100644
--- a/services/autofill/java/com/android/server/autofill/Session.java
+++ b/services/autofill/java/com/android/server/autofill/Session.java
@@ -887,7 +887,7 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState
mMetricsLogger.write(log);
if (intentSender != null) {
if (sDebug) Slog.d(TAG, "Starting intent sender on save()");
- startIntentSender(intentSender);
+ startIntentSenderAndFinishSession(intentSender);
}
// Nothing left to do...
@@ -1101,24 +1101,32 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState
// AutoFillUiCallback
@Override
- public void startIntentSender(IntentSender intentSender) {
+ public void startIntentSenderAndFinishSession(IntentSender intentSender) {
+ startIntentSender(intentSender, null);
+ }
+
+ // AutoFillUiCallback
+ @Override
+ public void startIntentSender(IntentSender intentSender, Intent intent) {
synchronized (mLock) {
if (mDestroyed) {
Slog.w(TAG, "Call to Session#startIntentSender() rejected - session: "
+ id + " destroyed");
return;
}
- removeSelfLocked();
+ if (intent == null) {
+ removeSelfLocked();
+ }
}
mHandler.sendMessage(obtainMessage(
Session::doStartIntentSender,
- this, intentSender));
+ this, intentSender, intent));
}
- private void doStartIntentSender(IntentSender intentSender) {
+ private void doStartIntentSender(IntentSender intentSender, Intent intent) {
try {
synchronized (mLock) {
- mClient.startIntentSender(intentSender, null);
+ mClient.startIntentSender(intentSender, intent);
}
} catch (RemoteException e) {
Slog.e(TAG, "Error launching auth intent", e);
@@ -1863,7 +1871,7 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState
mHandler.sendMessage(obtainMessage(Session::logSaveShown, this));
final IAutoFillManagerClient client = getClient();
- mPendingSaveUi = new PendingUi(mActivityToken, id, client);
+ mPendingSaveUi = new PendingUi(new Binder(), id, client);
final CharSequence serviceLabel;
final Drawable serviceIcon;
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 fe86ab3a3f26..0b2e2bf9de1c 100644
--- a/services/autofill/java/com/android/server/autofill/ui/AutoFillUI.java
+++ b/services/autofill/java/com/android/server/autofill/ui/AutoFillUI.java
@@ -22,6 +22,7 @@ import android.annotation.NonNull;
import android.annotation.Nullable;
import android.content.ComponentName;
import android.content.Context;
+import android.content.Intent;
import android.content.IntentSender;
import android.graphics.drawable.Drawable;
import android.metrics.LogMaker;
@@ -82,7 +83,8 @@ public final class AutoFillUI {
void requestShowFillUi(AutofillId id, int width, int height,
IAutofillWindowPresenter presenter);
void requestHideFillUi(AutofillId id);
- void startIntentSender(IntentSender intentSender);
+ void startIntentSenderAndFinishSession(IntentSender intentSender);
+ void startIntentSender(IntentSender intentSender, Intent intent);
void dispatchUnhandledKey(AutofillId id, KeyEvent keyEvent);
}
@@ -253,7 +255,7 @@ public final class AutoFillUI {
@Override
public void startIntentSender(IntentSender intentSender) {
if (mCallback != null) {
- mCallback.startIntentSender(intentSender);
+ mCallback.startIntentSenderAndFinishSession(intentSender);
}
}
@@ -338,6 +340,13 @@ public final class AutoFillUI {
}
mMetricsLogger.write(log);
}
+
+ @Override
+ public void startIntentSender(IntentSender intentSender, Intent intent) {
+ if (mCallback != null) {
+ mCallback.startIntentSender(intentSender, intent);
+ }
+ }
}, mUiModeMgr.isNightMode(), isUpdate, compatMode);
});
}
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 e2cdddb932d7..8e200196050c 100644
--- a/services/autofill/java/com/android/server/autofill/ui/SaveUi.java
+++ b/services/autofill/java/com/android/server/autofill/ui/SaveUi.java
@@ -32,7 +32,6 @@ 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.BatchUpdates;
import android.service.autofill.CustomDescription;
import android.service.autofill.InternalOnClickAction;
@@ -83,6 +82,7 @@ final class SaveUi {
void onSave();
void onCancel(IntentSender listener);
void onDestroy();
+ void startIntentSender(IntentSender intentSender, Intent intent);
}
/**
@@ -129,6 +129,15 @@ final class SaveUi {
mDone = true;
mRealListener.onDestroy();
}
+
+ @Override
+ public void startIntentSender(IntentSender intentSender, Intent intent) {
+ if (sDebug) Slog.d(TAG, "OneTimeListener.startIntentSender(): " + mDone);
+ if (mDone) {
+ return;
+ }
+ mRealListener.startIntentSender(intentSender, intent);
+ }
}
private final Handler mHandler = UiThread.getHandler();
@@ -168,8 +177,8 @@ final class SaveUi {
context = new ContextThemeWrapper(context, mThemeId) {
@Override
public void startActivity(Intent intent) {
- intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
- super.startActivity(intent);
+ PendingIntent p = PendingIntent.getActivity(this, 0, intent, 0);
+ mListener.startIntentSender(p.getIntentSender(), intent);
}
};
final LayoutInflater inflater = LayoutInflater.from(context);
@@ -329,21 +338,13 @@ final class SaveUi {
if (sVerbose) Slog.v(TAG, "Intercepting custom description intent");
final IBinder token = mPendingUi.getToken();
intent.putExtra(AutofillManager.EXTRA_RESTORE_SESSION_TOKEN, token);
- try {
- mPendingUi.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;
- }
+ mListener.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;
};
try {
diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java
index 7b20e5599bad..ede573a64c65 100644
--- a/services/core/java/com/android/server/am/ActivityManagerService.java
+++ b/services/core/java/com/android/server/am/ActivityManagerService.java
@@ -12109,39 +12109,44 @@ public class ActivityManagerService extends IActivityManager.Stub
final String shortLabel;
final long pss;
final long swapPss;
+ final long mRss;
final int id;
final boolean hasActivities;
ArrayList<MemItem> subitems;
- public MemItem(String _label, String _shortLabel, long _pss, long _swapPss, int _id,
- boolean _hasActivities) {
- isProc = true;
- label = _label;
- shortLabel = _shortLabel;
- pss = _pss;
- swapPss = _swapPss;
- id = _id;
- hasActivities = _hasActivities;
+ MemItem(String label, String shortLabel, long pss, long swapPss, long rss, int id,
+ boolean hasActivities) {
+ this.isProc = true;
+ this.label = label;
+ this.shortLabel = shortLabel;
+ this.pss = pss;
+ this.swapPss = swapPss;
+ this.mRss = rss;
+ this.id = id;
+ this.hasActivities = hasActivities;
}
- public MemItem(String _label, String _shortLabel, long _pss, long _swapPss, int _id) {
- isProc = false;
- label = _label;
- shortLabel = _shortLabel;
- pss = _pss;
- swapPss = _swapPss;
- id = _id;
- hasActivities = false;
+ MemItem(String label, String shortLabel, long pss, long swapPss, long rss, int id) {
+ this.isProc = false;
+ this.label = label;
+ this.shortLabel = shortLabel;
+ this.pss = pss;
+ this.swapPss = swapPss;
+ this.mRss = rss;
+ this.id = id;
+ this.hasActivities = false;
}
}
- private static void sortMemItems(List<MemItem> items) {
+ private static void sortMemItems(List<MemItem> items, final boolean pss) {
Collections.sort(items, new Comparator<MemItem>() {
@Override
public int compare(MemItem lhs, MemItem rhs) {
- if (lhs.pss < rhs.pss) {
+ long lss = pss ? lhs.pss : lhs.mRss;
+ long rss = pss ? rhs.pss : rhs.mRss;
+ if (lss < rss) {
return 1;
- } else if (lhs.pss > rhs.pss) {
+ } else if (lss > rss) {
return -1;
}
return 0;
@@ -12150,40 +12155,44 @@ public class ActivityManagerService extends IActivityManager.Stub
}
static final void dumpMemItems(PrintWriter pw, String prefix, String tag,
- ArrayList<MemItem> items, boolean sort, boolean isCompact, boolean dumpSwapPss) {
+ ArrayList<MemItem> items, boolean sort, boolean isCompact, boolean dumpPss,
+ boolean dumpSwapPss) {
if (sort && !isCompact) {
- sortMemItems(items);
+ sortMemItems(items, dumpPss);
}
for (int i=0; i<items.size(); i++) {
MemItem mi = items.get(i);
if (!isCompact) {
- if (dumpSwapPss) {
+ if (dumpPss && dumpSwapPss) {
pw.printf("%s%s: %-60s (%s in swap)\n", prefix, stringifyKBSize(mi.pss),
mi.label, stringifyKBSize(mi.swapPss));
} else {
- pw.printf("%s%s: %s\n", prefix, stringifyKBSize(mi.pss), mi.label);
+ pw.printf("%s%s: %s\n", prefix, stringifyKBSize(dumpPss ? mi.pss : mi.mRss),
+ mi.label);
}
} else if (mi.isProc) {
pw.print("proc,"); pw.print(tag); pw.print(","); pw.print(mi.shortLabel);
- pw.print(","); pw.print(mi.id); pw.print(","); pw.print(mi.pss); pw.print(",");
+ pw.print(","); pw.print(mi.id); pw.print(",");
+ pw.print(dumpPss ? mi.pss : mi.mRss); pw.print(",");
pw.print(dumpSwapPss ? mi.swapPss : "N/A");
pw.println(mi.hasActivities ? ",a" : ",e");
} else {
pw.print(tag); pw.print(","); pw.print(mi.shortLabel); pw.print(",");
- pw.print(mi.pss); pw.print(","); pw.println(dumpSwapPss ? mi.swapPss : "N/A");
+ pw.print(dumpPss ? mi.pss : mi.mRss); pw.print(",");
+ pw.println(dumpSwapPss ? mi.swapPss : "N/A");
}
if (mi.subitems != null) {
dumpMemItems(pw, prefix + " ", mi.shortLabel, mi.subitems,
- true, isCompact, dumpSwapPss);
+ true, isCompact, dumpPss, dumpSwapPss);
}
}
}
static final void dumpMemItems(ProtoOutputStream proto, long fieldId, String tag,
- ArrayList<MemItem> items, boolean sort, boolean dumpSwapPss) {
+ ArrayList<MemItem> items, boolean sort, boolean dumpPss, boolean dumpSwapPss) {
if (sort) {
- sortMemItems(items);
+ sortMemItems(items, dumpPss);
}
for (int i=0; i<items.size(); i++) {
@@ -12195,13 +12204,17 @@ public class ActivityManagerService extends IActivityManager.Stub
proto.write(MemInfoDumpProto.MemItem.IS_PROC, mi.isProc);
proto.write(MemInfoDumpProto.MemItem.ID, mi.id);
proto.write(MemInfoDumpProto.MemItem.HAS_ACTIVITIES, mi.hasActivities);
- proto.write(MemInfoDumpProto.MemItem.PSS_KB, mi.pss);
+ if (dumpPss) {
+ proto.write(MemInfoDumpProto.MemItem.PSS_KB, mi.pss);
+ } else {
+ proto.write(MemInfoDumpProto.MemItem.RSS_KB, mi.mRss);
+ }
if (dumpSwapPss) {
proto.write(MemInfoDumpProto.MemItem.SWAP_PSS_KB, mi.swapPss);
}
if (mi.subitems != null) {
dumpMemItems(proto, MemInfoDumpProto.MemItem.SUB_ITEMS, mi.shortLabel, mi.subitems,
- true, dumpSwapPss);
+ true, dumpPss, dumpSwapPss);
}
proto.end(token);
}
@@ -12500,24 +12513,32 @@ public class ActivityManagerService extends IActivityManager.Stub
final SparseArray<MemItem> procMemsMap = new SparseArray<MemItem>();
long nativePss = 0;
long nativeSwapPss = 0;
+ long nativeRss = 0;
long dalvikPss = 0;
long dalvikSwapPss = 0;
+ long dalvikRss = 0;
long[] dalvikSubitemPss = opts.dumpDalvik ? new long[Debug.MemoryInfo.NUM_DVK_STATS] :
EmptyArray.LONG;
long[] dalvikSubitemSwapPss = opts.dumpDalvik ? new long[Debug.MemoryInfo.NUM_DVK_STATS] :
EmptyArray.LONG;
+ long[] dalvikSubitemRss = opts.dumpDalvik ? new long[Debug.MemoryInfo.NUM_DVK_STATS] :
+ EmptyArray.LONG;
long otherPss = 0;
long otherSwapPss = 0;
+ long otherRss = 0;
long[] miscPss = new long[Debug.MemoryInfo.NUM_OTHER_STATS];
long[] miscSwapPss = new long[Debug.MemoryInfo.NUM_OTHER_STATS];
+ long[] miscRss = new long[Debug.MemoryInfo.NUM_OTHER_STATS];
long oomPss[] = new long[DUMP_MEM_OOM_LABEL.length];
long oomSwapPss[] = new long[DUMP_MEM_OOM_LABEL.length];
+ long[] oomRss = new long[DUMP_MEM_OOM_LABEL.length];
ArrayList<MemItem>[] oomProcs = (ArrayList<MemItem>[])
new ArrayList[DUMP_MEM_OOM_LABEL.length];
long totalPss = 0;
long totalSwapPss = 0;
+ long totalRss = 0;
long cachedPss = 0;
long cachedSwapPss = 0;
boolean hasSwapPss = false;
@@ -12557,6 +12578,7 @@ public class ActivityManagerService extends IActivityManager.Stub
mi.dalvikPss = (int)Debug.getPss(pid, tmpLong, null);
endTime = SystemClock.currentThreadTimeMillis();
mi.dalvikPrivateDirty = (int)tmpLong[0];
+ mi.dalvikRss = (int) tmpLong[2];
}
if (opts.dumpDetails) {
if (opts.localOnly) {
@@ -12617,22 +12639,27 @@ public class ActivityManagerService extends IActivityManager.Stub
if (!opts.isCheckinRequest && mi != null) {
totalPss += myTotalPss;
totalSwapPss += myTotalSwapPss;
+ totalRss += myTotalRss;
MemItem pssItem = new MemItem(r.processName + " (pid " + pid +
(hasActivities ? " / activities)" : ")"), r.processName, myTotalPss,
- myTotalSwapPss, pid, hasActivities);
+ myTotalSwapPss, myTotalRss, pid, hasActivities);
procMems.add(pssItem);
procMemsMap.put(pid, pssItem);
nativePss += mi.nativePss;
nativeSwapPss += mi.nativeSwappedOutPss;
+ nativeRss += mi.nativeRss;
dalvikPss += mi.dalvikPss;
dalvikSwapPss += mi.dalvikSwappedOutPss;
+ dalvikRss += mi.dalvikRss;
for (int j=0; j<dalvikSubitemPss.length; j++) {
dalvikSubitemPss[j] += mi.getOtherPss(Debug.MemoryInfo.NUM_OTHER_STATS + j);
dalvikSubitemSwapPss[j] +=
mi.getOtherSwappedOutPss(Debug.MemoryInfo.NUM_OTHER_STATS + j);
+ dalvikSubitemRss[j] += mi.getOtherRss(Debug.MemoryInfo.NUM_OTHER_STATS + j);
}
otherPss += mi.otherPss;
+ otherRss += mi.otherRss;
otherSwapPss += mi.otherSwappedOutPss;
for (int j=0; j<Debug.MemoryInfo.NUM_OTHER_STATS; j++) {
long mem = mi.getOtherPss(j);
@@ -12641,6 +12668,9 @@ public class ActivityManagerService extends IActivityManager.Stub
mem = mi.getOtherSwappedOutPss(j);
miscSwapPss[j] += mem;
otherSwapPss -= mem;
+ mem = mi.getOtherRss(j);
+ miscRss[j] += mem;
+ otherRss -= mem;
}
if (oomAdj >= ProcessList.CACHED_APP_MIN_ADJ) {
@@ -12658,6 +12688,7 @@ public class ActivityManagerService extends IActivityManager.Stub
oomProcs[oomIndex] = new ArrayList<MemItem>();
}
oomProcs[oomIndex].add(pssItem);
+ oomRss[oomIndex] += myTotalRss;
break;
}
}
@@ -12689,25 +12720,33 @@ public class ActivityManagerService extends IActivityManager.Stub
final long myTotalPss = mi.getTotalPss();
final long myTotalSwapPss = mi.getTotalSwappedOutPss();
+ final long myTotalRss = mi.getTotalRss();
totalPss += myTotalPss;
totalSwapPss += myTotalSwapPss;
+ totalRss += myTotalRss;
nativeProcTotalPss += myTotalPss;
MemItem pssItem = new MemItem(st.name + " (pid " + st.pid + ")",
- st.name, myTotalPss, mi.getSummaryTotalSwapPss(), st.pid, false);
+ st.name, myTotalPss, mi.getSummaryTotalSwapPss(), myTotalRss,
+ st.pid, false);
procMems.add(pssItem);
nativePss += mi.nativePss;
nativeSwapPss += mi.nativeSwappedOutPss;
+ nativeRss += mi.nativeRss;
dalvikPss += mi.dalvikPss;
dalvikSwapPss += mi.dalvikSwappedOutPss;
+ dalvikRss += mi.dalvikRss;
for (int j=0; j<dalvikSubitemPss.length; j++) {
dalvikSubitemPss[j] += mi.getOtherPss(Debug.MemoryInfo.NUM_OTHER_STATS + j);
dalvikSubitemSwapPss[j] +=
mi.getOtherSwappedOutPss(Debug.MemoryInfo.NUM_OTHER_STATS + j);
+ dalvikSubitemRss[j] += mi.getOtherRss(Debug.MemoryInfo.NUM_OTHER_STATS
+ + j);
}
otherPss += mi.otherPss;
otherSwapPss += mi.otherSwappedOutPss;
+ otherRss += mi.otherRss;
for (int j=0; j<Debug.MemoryInfo.NUM_OTHER_STATS; j++) {
long mem = mi.getOtherPss(j);
miscPss[j] += mem;
@@ -12715,6 +12754,9 @@ public class ActivityManagerService extends IActivityManager.Stub
mem = mi.getOtherSwappedOutPss(j);
miscSwapPss[j] += mem;
otherSwapPss -= mem;
+ mem = mi.getOtherRss(j);
+ miscRss[j] += mem;
+ otherRss -= mem;
}
oomPss[0] += myTotalPss;
oomSwapPss[0] += myTotalSwapPss;
@@ -12722,19 +12764,21 @@ public class ActivityManagerService extends IActivityManager.Stub
oomProcs[0] = new ArrayList<MemItem>();
}
oomProcs[0].add(pssItem);
+ oomRss[0] += myTotalRss;
}
}
}
ArrayList<MemItem> catMems = new ArrayList<MemItem>();
- catMems.add(new MemItem("Native", "Native", nativePss, nativeSwapPss, -1));
+ catMems.add(new MemItem("Native", "Native", nativePss, nativeSwapPss, nativeRss, -1));
final int dalvikId = -2;
- catMems.add(new MemItem("Dalvik", "Dalvik", dalvikPss, dalvikSwapPss, dalvikId));
- catMems.add(new MemItem("Unknown", "Unknown", otherPss, otherSwapPss, -3));
+ catMems.add(new MemItem("Dalvik", "Dalvik", dalvikPss, dalvikSwapPss, dalvikRss,
+ dalvikId));
+ catMems.add(new MemItem("Unknown", "Unknown", otherPss, otherSwapPss, otherRss, -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));
+ catMems.add(new MemItem(label, label, miscPss[j], miscSwapPss[j], miscRss[j], j));
}
if (dalvikSubitemPss.length > 0) {
// Add dalvik subitems.
@@ -12760,7 +12804,7 @@ public class ActivityManagerService extends IActivityManager.Stub
final String name = Debug.MemoryInfo.getOtherLabel(
Debug.MemoryInfo.NUM_OTHER_STATS + j);
memItem.subitems.add(new MemItem(name, name, dalvikSubitemPss[j],
- dalvikSubitemSwapPss[j], j));
+ dalvikSubitemSwapPss[j], dalvikSubitemRss[j], j));
}
}
}
@@ -12770,31 +12814,53 @@ public class ActivityManagerService extends IActivityManager.Stub
if (oomPss[j] != 0) {
String label = opts.isCompact ? DUMP_MEM_OOM_COMPACT_LABEL[j]
: DUMP_MEM_OOM_LABEL[j];
- MemItem item = new MemItem(label, label, oomPss[j], oomSwapPss[j],
+ MemItem item = new MemItem(label, label, oomPss[j], oomSwapPss[j], oomRss[j],
DUMP_MEM_OOM_ADJ[j]);
item.subitems = oomProcs[j];
oomMems.add(item);
}
}
-
+ if (!opts.isCompact) {
+ pw.println();
+ }
+ if (!brief && !opts.oomOnly && !opts.isCompact) {
+ pw.println();
+ pw.println("Total RSS by process:");
+ dumpMemItems(pw, " ", "proc", procMems, true, opts.isCompact, false, false);
+ pw.println();
+ }
+ if (!opts.isCompact) {
+ pw.println("Total RSS by OOM adjustment:");
+ }
+ dumpMemItems(pw, " ", "oom", oomMems, false, opts.isCompact, false, false);
+ if (!brief && !opts.oomOnly) {
+ PrintWriter out = categoryPw != null ? categoryPw : pw;
+ if (!opts.isCompact) {
+ out.println();
+ out.println("Total RSS by category:");
+ }
+ dumpMemItems(out, " ", "cat", catMems, true, opts.isCompact, false, false);
+ }
opts.dumpSwapPss = opts.dumpSwapPss && hasSwapPss && totalSwapPss != 0;
if (!brief && !opts.oomOnly && !opts.isCompact) {
pw.println();
pw.println("Total PSS by process:");
- dumpMemItems(pw, " ", "proc", procMems, true, opts.isCompact, opts.dumpSwapPss);
+ dumpMemItems(pw, " ", "proc", procMems, true, opts.isCompact, true,
+ opts.dumpSwapPss);
pw.println();
}
if (!opts.isCompact) {
pw.println("Total PSS by OOM adjustment:");
}
- dumpMemItems(pw, " ", "oom", oomMems, false, opts.isCompact, opts.dumpSwapPss);
+ dumpMemItems(pw, " ", "oom", oomMems, false, opts.isCompact, true, opts.dumpSwapPss);
if (!brief && !opts.oomOnly) {
PrintWriter out = categoryPw != null ? categoryPw : pw;
if (!opts.isCompact) {
out.println();
out.println("Total PSS by category:");
}
- dumpMemItems(out, " ", "cat", catMems, true, opts.isCompact, opts.dumpSwapPss);
+ dumpMemItems(out, " ", "cat", catMems, true, opts.isCompact, true,
+ opts.dumpSwapPss);
}
if (!opts.isCompact) {
pw.println();
@@ -13013,24 +13079,32 @@ public class ActivityManagerService extends IActivityManager.Stub
final SparseArray<MemItem> procMemsMap = new SparseArray<MemItem>();
long nativePss = 0;
long nativeSwapPss = 0;
+ long nativeRss = 0;
long dalvikPss = 0;
long dalvikSwapPss = 0;
+ long dalvikRss = 0;
long[] dalvikSubitemPss = opts.dumpDalvik ? new long[Debug.MemoryInfo.NUM_DVK_STATS] :
EmptyArray.LONG;
long[] dalvikSubitemSwapPss = opts.dumpDalvik ? new long[Debug.MemoryInfo.NUM_DVK_STATS] :
EmptyArray.LONG;
+ long[] dalvikSubitemRss = opts.dumpDalvik ? new long[Debug.MemoryInfo.NUM_DVK_STATS] :
+ EmptyArray.LONG;
long otherPss = 0;
long otherSwapPss = 0;
+ long otherRss = 0;
long[] miscPss = new long[Debug.MemoryInfo.NUM_OTHER_STATS];
long[] miscSwapPss = new long[Debug.MemoryInfo.NUM_OTHER_STATS];
+ long[] miscRss = new long[Debug.MemoryInfo.NUM_OTHER_STATS];
long oomPss[] = new long[DUMP_MEM_OOM_LABEL.length];
long oomSwapPss[] = new long[DUMP_MEM_OOM_LABEL.length];
+ long[] oomRss = new long[DUMP_MEM_OOM_LABEL.length];
ArrayList<MemItem>[] oomProcs = (ArrayList<MemItem>[])
new ArrayList[DUMP_MEM_OOM_LABEL.length];
long totalPss = 0;
long totalSwapPss = 0;
+ long totalRss = 0;
long cachedPss = 0;
long cachedSwapPss = 0;
boolean hasSwapPss = false;
@@ -13069,6 +13143,7 @@ public class ActivityManagerService extends IActivityManager.Stub
mi.dalvikPss = (int) Debug.getPss(pid, tmpLong, null);
endTime = SystemClock.currentThreadTimeMillis();
mi.dalvikPrivateDirty = (int) tmpLong[0];
+ mi.dalvikRss = (int) tmpLong[2];
}
if (opts.dumpDetails) {
if (opts.localOnly) {
@@ -13124,22 +13199,27 @@ public class ActivityManagerService extends IActivityManager.Stub
if (!opts.isCheckinRequest && mi != null) {
totalPss += myTotalPss;
totalSwapPss += myTotalSwapPss;
+ totalRss += myTotalRss;
MemItem pssItem = new MemItem(r.processName + " (pid " + pid +
(hasActivities ? " / activities)" : ")"), r.processName, myTotalPss,
- myTotalSwapPss, pid, hasActivities);
+ myTotalSwapPss, myTotalRss, pid, hasActivities);
procMems.add(pssItem);
procMemsMap.put(pid, pssItem);
nativePss += mi.nativePss;
nativeSwapPss += mi.nativeSwappedOutPss;
+ nativeRss += mi.nativeRss;
dalvikPss += mi.dalvikPss;
dalvikSwapPss += mi.dalvikSwappedOutPss;
+ dalvikRss += mi.dalvikRss;
for (int j=0; j<dalvikSubitemPss.length; j++) {
dalvikSubitemPss[j] += mi.getOtherPss(Debug.MemoryInfo.NUM_OTHER_STATS + j);
dalvikSubitemSwapPss[j] +=
mi.getOtherSwappedOutPss(Debug.MemoryInfo.NUM_OTHER_STATS + j);
+ dalvikSubitemRss[j] += mi.getOtherRss(Debug.MemoryInfo.NUM_OTHER_STATS + j);
}
otherPss += mi.otherPss;
+ otherRss += mi.otherRss;
otherSwapPss += mi.otherSwappedOutPss;
for (int j=0; j<Debug.MemoryInfo.NUM_OTHER_STATS; j++) {
long mem = mi.getOtherPss(j);
@@ -13148,6 +13228,9 @@ public class ActivityManagerService extends IActivityManager.Stub
mem = mi.getOtherSwappedOutPss(j);
miscSwapPss[j] += mem;
otherSwapPss -= mem;
+ mem = mi.getOtherRss(j);
+ miscRss[j] += mem;
+ otherRss -= mem;
}
if (oomAdj >= ProcessList.CACHED_APP_MIN_ADJ) {
@@ -13165,6 +13248,7 @@ public class ActivityManagerService extends IActivityManager.Stub
oomProcs[oomIndex] = new ArrayList<MemItem>();
}
oomProcs[oomIndex].add(pssItem);
+ oomRss[oomIndex] += myTotalRss;
break;
}
}
@@ -13195,24 +13279,33 @@ public class ActivityManagerService extends IActivityManager.Stub
final long myTotalPss = mi.getTotalPss();
final long myTotalSwapPss = mi.getTotalSwappedOutPss();
+ final long myTotalRss = mi.getTotalRss();
totalPss += myTotalPss;
+ totalSwapPss += myTotalSwapPss;
+ totalRss += myTotalRss;
nativeProcTotalPss += myTotalPss;
MemItem pssItem = new MemItem(st.name + " (pid " + st.pid + ")",
- st.name, myTotalPss, mi.getSummaryTotalSwapPss(), st.pid, false);
+ st.name, myTotalPss, mi.getSummaryTotalSwapPss(), myTotalRss,
+ st.pid, false);
procMems.add(pssItem);
nativePss += mi.nativePss;
nativeSwapPss += mi.nativeSwappedOutPss;
+ nativeRss += mi.nativeRss;
dalvikPss += mi.dalvikPss;
dalvikSwapPss += mi.dalvikSwappedOutPss;
+ dalvikRss += mi.dalvikRss;
for (int j=0; j<dalvikSubitemPss.length; j++) {
dalvikSubitemPss[j] += mi.getOtherPss(Debug.MemoryInfo.NUM_OTHER_STATS + j);
dalvikSubitemSwapPss[j] +=
mi.getOtherSwappedOutPss(Debug.MemoryInfo.NUM_OTHER_STATS + j);
+ dalvikSubitemRss[j] += mi.getOtherRss(Debug.MemoryInfo.NUM_OTHER_STATS
+ + j);
}
otherPss += mi.otherPss;
otherSwapPss += mi.otherSwappedOutPss;
+ otherRss += mi.otherRss;
for (int j=0; j<Debug.MemoryInfo.NUM_OTHER_STATS; j++) {
long mem = mi.getOtherPss(j);
miscPss[j] += mem;
@@ -13220,6 +13313,9 @@ public class ActivityManagerService extends IActivityManager.Stub
mem = mi.getOtherSwappedOutPss(j);
miscSwapPss[j] += mem;
otherSwapPss -= mem;
+ mem = mi.getOtherRss(j);
+ miscRss[j] += mem;
+ otherRss -= mem;
}
oomPss[0] += myTotalPss;
oomSwapPss[0] += myTotalSwapPss;
@@ -13227,19 +13323,21 @@ public class ActivityManagerService extends IActivityManager.Stub
oomProcs[0] = new ArrayList<MemItem>();
}
oomProcs[0].add(pssItem);
+ oomRss[0] += myTotalRss;
}
}
}
ArrayList<MemItem> catMems = new ArrayList<MemItem>();
- catMems.add(new MemItem("Native", "Native", nativePss, nativeSwapPss, -1));
+ catMems.add(new MemItem("Native", "Native", nativePss, nativeSwapPss, nativeRss, -1));
final int dalvikId = -2;
- catMems.add(new MemItem("Dalvik", "Dalvik", dalvikPss, dalvikSwapPss, dalvikId));
- catMems.add(new MemItem("Unknown", "Unknown", otherPss, otherSwapPss, -3));
+ catMems.add(new MemItem("Dalvik", "Dalvik", dalvikPss, dalvikSwapPss, dalvikRss,
+ dalvikId));
+ catMems.add(new MemItem("Unknown", "Unknown", otherPss, otherSwapPss, otherRss, -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));
+ catMems.add(new MemItem(label, label, miscPss[j], miscSwapPss[j], miscRss[j], j));
}
if (dalvikSubitemPss.length > 0) {
// Add dalvik subitems.
@@ -13265,7 +13363,7 @@ public class ActivityManagerService extends IActivityManager.Stub
final String name = Debug.MemoryInfo.getOtherLabel(
Debug.MemoryInfo.NUM_OTHER_STATS + j);
memItem.subitems.add(new MemItem(name, name, dalvikSubitemPss[j],
- dalvikSubitemSwapPss[j], j));
+ dalvikSubitemSwapPss[j], dalvikSubitemRss[j], j));
}
}
}
@@ -13275,23 +13373,34 @@ public class ActivityManagerService extends IActivityManager.Stub
if (oomPss[j] != 0) {
String label = opts.isCompact ? DUMP_MEM_OOM_COMPACT_LABEL[j]
: DUMP_MEM_OOM_LABEL[j];
- MemItem item = new MemItem(label, label, oomPss[j], oomSwapPss[j],
+ MemItem item = new MemItem(label, label, oomPss[j], oomSwapPss[j], oomRss[j],
DUMP_MEM_OOM_ADJ[j]);
item.subitems = oomProcs[j];
oomMems.add(item);
}
}
+ if (!opts.oomOnly) {
+ dumpMemItems(proto, MemInfoDumpProto.TOTAL_RSS_BY_PROCESS, "proc",
+ procMems, true, false, false);
+ }
+ dumpMemItems(proto, MemInfoDumpProto.TOTAL_RSS_BY_OOM_ADJUSTMENT, "oom",
+ oomMems, false, false, false);
+ if (!brief && !opts.oomOnly) {
+ dumpMemItems(proto, MemInfoDumpProto.TOTAL_RSS_BY_CATEGORY, "cat",
+ catMems, true, false, false);
+ }
+
opts.dumpSwapPss = opts.dumpSwapPss && hasSwapPss && totalSwapPss != 0;
if (!opts.oomOnly) {
dumpMemItems(proto, MemInfoDumpProto.TOTAL_PSS_BY_PROCESS, "proc",
- procMems, true, opts.dumpSwapPss);
+ procMems, true, true, opts.dumpSwapPss);
}
dumpMemItems(proto, MemInfoDumpProto.TOTAL_PSS_BY_OOM_ADJUSTMENT, "oom",
- oomMems, false, opts.dumpSwapPss);
+ oomMems, false, true, opts.dumpSwapPss);
if (!brief && !opts.oomOnly) {
dumpMemItems(proto, MemInfoDumpProto.TOTAL_PSS_BY_CATEGORY, "cat",
- catMems, true, opts.dumpSwapPss);
+ catMems, true, true, opts.dumpSwapPss);
}
MemInfoReader memInfo = new MemInfoReader();
memInfo.readMemInfo();
diff --git a/services/core/java/com/android/server/am/BatteryStatsService.java b/services/core/java/com/android/server/am/BatteryStatsService.java
index 9239d0389f1c..a47ea4f95b3e 100644
--- a/services/core/java/com/android/server/am/BatteryStatsService.java
+++ b/services/core/java/com/android/server/am/BatteryStatsService.java
@@ -756,7 +756,7 @@ public final class BatteryStatsService extends IBatteryStats.Stub
}
public void noteStartAudio(int uid) {
- enforceSelfOrCallingPermission(uid);
+ enforceCallingPermission();
synchronized (mStats) {
mStats.noteAudioOnLocked(uid);
StatsLog.write_non_chained(StatsLog.AUDIO_STATE_CHANGED, uid, null,
@@ -765,7 +765,7 @@ public final class BatteryStatsService extends IBatteryStats.Stub
}
public void noteStopAudio(int uid) {
- enforceSelfOrCallingPermission(uid);
+ enforceCallingPermission();
synchronized (mStats) {
mStats.noteAudioOffLocked(uid);
StatsLog.write_non_chained(StatsLog.AUDIO_STATE_CHANGED, uid, null,
@@ -774,7 +774,7 @@ public final class BatteryStatsService extends IBatteryStats.Stub
}
public void noteStartVideo(int uid) {
- enforceSelfOrCallingPermission(uid);
+ enforceCallingPermission();
synchronized (mStats) {
mStats.noteVideoOnLocked(uid);
StatsLog.write_non_chained(StatsLog.MEDIA_CODEC_STATE_CHANGED, uid, null,
@@ -783,7 +783,7 @@ public final class BatteryStatsService extends IBatteryStats.Stub
}
public void noteStopVideo(int uid) {
- enforceSelfOrCallingPermission(uid);
+ enforceCallingPermission();
synchronized (mStats) {
mStats.noteVideoOffLocked(uid);
StatsLog.write_non_chained(StatsLog.MEDIA_CODEC_STATE_CHANGED, uid,
@@ -1184,13 +1184,6 @@ public final class BatteryStatsService extends IBatteryStats.Stub
Binder.getCallingPid(), Binder.getCallingUid(), null);
}
- private void enforceSelfOrCallingPermission(int uid) {
- if (Binder.getCallingUid() == uid) {
- return;
- }
- enforceCallingPermission();
- }
-
final class WakeupReasonThread extends Thread {
private static final int MAX_REASON_SIZE = 512;
private CharsetDecoder mDecoder;
diff --git a/services/core/java/com/android/server/connectivity/tethering/EntitlementManager.java b/services/core/java/com/android/server/connectivity/tethering/EntitlementManager.java
index 836f1e64aa9c..f952bcef5606 100644
--- a/services/core/java/com/android/server/connectivity/tethering/EntitlementManager.java
+++ b/services/core/java/com/android/server/connectivity/tethering/EntitlementManager.java
@@ -161,6 +161,12 @@ public class EntitlementManager {
* Check if cellular upstream is permitted.
*/
public boolean isCellularUpstreamPermitted() {
+ // If provisioning is required and EntitlementManager don't know any downstream,
+ // cellular upstream should not be allowed.
+ final TetheringConfiguration config = mFetcher.fetchTetheringConfiguration();
+ if (mCurrentTethers.size() == 0 && isTetherProvisioningRequired(config)) {
+ return false;
+ }
return mCellularUpstreamPermitted;
}
diff --git a/services/core/java/com/android/server/pm/AppsFilter.java b/services/core/java/com/android/server/pm/AppsFilter.java
index c87ab9794563..a189f7fd72c1 100644
--- a/services/core/java/com/android/server/pm/AppsFilter.java
+++ b/services/core/java/com/android/server/pm/AppsFilter.java
@@ -34,6 +34,7 @@ import android.util.Slog;
import android.util.SparseArray;
import com.android.internal.R;
+import com.android.server.FgThread;
import java.util.ArrayList;
import java.util.Collections;
@@ -42,6 +43,7 @@ import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
+import java.util.concurrent.atomic.AtomicInteger;
/**
* The entity responsible for filtering visibility between apps based on declarations in their
@@ -50,6 +52,10 @@ import java.util.Set;
class AppsFilter {
private static final String TAG = PackageManagerService.TAG;
+
+ // Forces filtering logic to run for debug purposes.
+ // STOPSHIP (b/136675067): should be false after development is complete
+ private static final boolean DEBUG_FILTERING = true;
/**
* This contains a list of packages that are implicitly queryable because another app explicitly
* interacted with it. For example, if application A starts a service in application B,
@@ -104,12 +110,11 @@ class AppsFilter {
}
public static AppsFilter create(Context context) {
+ // tracks whether the feature is enabled where -1 is unknown, 0 is false and 1 is true;
+ final AtomicInteger featureEnabled = new AtomicInteger(-1);
+
final boolean forceSystemAppsQueryable =
context.getResources().getBoolean(R.bool.config_forceSystemPackagesQueryable);
- final ConfigProvider configProvider = () -> DeviceConfig.getBoolean(
- DeviceConfig.NAMESPACE_PACKAGE_MANAGER_SERVICE,
- "package_query_filtering_enabled",
- false);
final String[] forcedQueryablePackageNames;
if (forceSystemAppsQueryable) {
// all system apps already queryable, no need to read and parse individual exceptions
@@ -123,7 +128,19 @@ class AppsFilter {
}
IPermissionManager permissionmgr =
(IPermissionManager) ServiceManager.getService("permissionmgr");
- return new AppsFilter(configProvider, permissionmgr,
+ return new AppsFilter(() -> {
+ if (featureEnabled.get() < 0) {
+ featureEnabled.set(DeviceConfig.getBoolean(
+ DeviceConfig.NAMESPACE_PACKAGE_MANAGER_SERVICE,
+ "package_query_filtering_enabled", false) ? 1 : 0);
+ DeviceConfig.addOnPropertiesChangedListener(
+ DeviceConfig.NAMESPACE_PACKAGE_MANAGER_SERVICE,
+ FgThread.getExecutor(),
+ pr -> featureEnabled.set(
+ pr.getBoolean("package_query_filtering_enabled", false) ? 1 : 0));
+ }
+ return featureEnabled.get() == 1;
+ }, permissionmgr,
context.getSystemService(AppOpsManager.class), forcedQueryablePackageNames,
forceSystemAppsQueryable);
}
@@ -260,6 +277,10 @@ class AppsFilter {
if (callingUid < Process.FIRST_APPLICATION_UID) {
return false;
}
+ final boolean featureEnabled = mConfigProvider.isEnabled();
+ if (!featureEnabled && !DEBUG_FILTERING) {
+ return false;
+ }
if (callingSetting == null) {
Slog.wtf(TAG, "No setting found for non system uid " + callingUid);
return true;
@@ -277,7 +298,8 @@ class AppsFilter {
final ArraySet<PackageSetting> packageSettings =
((SharedUserSetting) callingSetting).packages;
if (packageSettings != null && packageSettings.size() > 0) {
- for (PackageSetting packageSetting : packageSettings) {
+ for (int i = 0, max = packageSettings.size(); i < max; i++) {
+ final PackageSetting packageSetting = packageSettings.valueAt(i);
if (!shouldFilterApplicationInternal(packageSetting, targetPkgSetting,
userId)) {
// TODO: actually base this on a start / launch (not just a query)
@@ -288,13 +310,18 @@ class AppsFilter {
callingPkgSetting = packageSetting;
}
}
+ if (callingPkgSetting == null) {
+ Slog.wtf(TAG, callingSetting + " does not have any non-null packages!");
+ return true;
+ }
} else {
+ Slog.wtf(TAG, callingSetting + " has no packages!");
return true;
}
}
- if (callingPkgSetting == null) {
- Slog.wtf(TAG, "What... " + callingSetting);
- return true;
+
+ if (!featureEnabled) {
+ return false;
}
final int mode = mAppOpsManager
.checkOpNoThrow(AppOpsManager.OP_QUERY_ALL_PACKAGES, callingUid,
@@ -303,7 +330,7 @@ class AppsFilter {
case AppOpsManager.MODE_DEFAULT:
// if default, let's rely on remote feature toggle to determine whether to
// actually filter
- return mConfigProvider.isEnabled();
+ return true;
case AppOpsManager.MODE_ALLOWED:
// explicitly allowed to see all packages, don't filter
return false;
diff --git a/services/core/java/com/android/server/pm/UserManagerService.java b/services/core/java/com/android/server/pm/UserManagerService.java
index a707aa884966..2ccb6c172a28 100644
--- a/services/core/java/com/android/server/pm/UserManagerService.java
+++ b/services/core/java/com/android/server/pm/UserManagerService.java
@@ -75,6 +75,7 @@ import android.os.storage.StorageManager;
import android.security.GateKeeper;
import android.service.gatekeeper.IGateKeeperService;
import android.stats.devicepolicy.DevicePolicyEnums;
+import android.util.ArraySet;
import android.util.AtomicFile;
import android.util.IntArray;
import android.util.Log;
@@ -125,6 +126,7 @@ import java.util.Collections;
import java.util.LinkedList;
import java.util.List;
import java.util.Objects;
+import java.util.Set;
/**
* Service for {@link UserManager}.
@@ -214,7 +216,7 @@ public class UserManagerService extends IUserManager.Stub {
@VisibleForTesting
static final int MAX_RECENTLY_REMOVED_IDS_SIZE = 100;
- private static final int USER_VERSION = 7;
+ private static final int USER_VERSION = 8;
private static final long EPOCH_PLUS_30_YEARS = 30L * 365 * 24 * 60 * 60 * 1000L; // ms
@@ -2139,6 +2141,7 @@ public class UserManagerService extends IUserManager.Stub {
*/
@GuardedBy({"mRestrictionsLock", "mPackagesLock"})
private void upgradeIfNecessaryLP(Bundle oldGlobalUserRestrictions) {
+ Set<Integer> userIdsToWrite = new ArraySet<>();
final int originalVersion = mUserVersion;
int userVersion = mUserVersion;
if (userVersion < 1) {
@@ -2147,7 +2150,7 @@ public class UserManagerService extends IUserManager.Stub {
if ("Primary".equals(userData.info.name)) {
userData.info.name =
mContext.getResources().getString(com.android.internal.R.string.owner_name);
- scheduleWriteUser(userData);
+ userIdsToWrite.add(userData.info.id);
}
userVersion = 1;
}
@@ -2157,7 +2160,7 @@ public class UserManagerService extends IUserManager.Stub {
UserData userData = getUserDataNoChecks(UserHandle.USER_SYSTEM);
if ((userData.info.flags & UserInfo.FLAG_INITIALIZED) == 0) {
userData.info.flags |= UserInfo.FLAG_INITIALIZED;
- scheduleWriteUser(userData);
+ userIdsToWrite.add(userData.info.id);
}
userVersion = 2;
}
@@ -2182,7 +2185,7 @@ public class UserManagerService extends IUserManager.Stub {
&& (userData.info.restrictedProfileParentId
== UserInfo.NO_PROFILE_GROUP_ID)) {
userData.info.restrictedProfileParentId = UserHandle.USER_SYSTEM;
- scheduleWriteUser(userData);
+ userIdsToWrite.add(userData.info.id);
}
}
}
@@ -2206,6 +2209,29 @@ public class UserManagerService extends IUserManager.Stub {
userVersion = 7;
}
+ if (userVersion < 8) {
+ // Added FLAG_FULL and FLAG_SYSTEM flags.
+ synchronized (mUsersLock) {
+ UserData userData = mUsers.get(UserHandle.USER_SYSTEM);
+ userData.info.flags |= UserInfo.FLAG_SYSTEM;
+ if (!UserManager.isHeadlessSystemUserMode()) {
+ userData.info.flags |= UserInfo.FLAG_FULL;
+ }
+ userIdsToWrite.add(userData.info.id);
+
+ // Mark FULL all non-profile users except USER_SYSTEM.
+ // Start index at 1 since USER_SYSTEM is the smallest userId and we're skipping it.
+ for (int i = 1; i < mUsers.size(); i++) {
+ userData = mUsers.valueAt(i);
+ if ((userData.info.flags & UserInfo.FLAG_MANAGED_PROFILE) == 0) {
+ userData.info.flags |= UserInfo.FLAG_FULL;
+ userIdsToWrite.add(userData.info.id);
+ }
+ }
+ }
+ userVersion = 8;
+ }
+
if (userVersion < USER_VERSION) {
Slog.w(LOG_TAG, "User version " + mUserVersion + " didn't upgrade as expected to "
+ USER_VERSION);
@@ -2213,6 +2239,12 @@ public class UserManagerService extends IUserManager.Stub {
mUserVersion = userVersion;
if (originalVersion < mUserVersion) {
+ for (int userId : userIdsToWrite) {
+ UserData userData = getUserDataNoChecks(userId);
+ if (userData != null) {
+ writeUserLP(userData);
+ }
+ }
writeUserListLP();
}
}
@@ -2220,12 +2252,15 @@ public class UserManagerService extends IUserManager.Stub {
@GuardedBy({"mPackagesLock", "mRestrictionsLock"})
private void fallbackToSingleUserLP() {
- int flags = UserInfo.FLAG_INITIALIZED;
+ int flags = UserInfo.FLAG_SYSTEM | UserInfo.FLAG_INITIALIZED;
// In split system user mode, the admin and primary flags are assigned to the first human
// user.
if (!UserManager.isSplitSystemUser()) {
flags |= UserInfo.FLAG_ADMIN | UserInfo.FLAG_PRIMARY;
}
+ if (!UserManager.isHeadlessSystemUserMode()) {
+ flags |= UserInfo.FLAG_FULL;
+ }
// Create the system user
UserInfo system = new UserInfo(UserHandle.USER_SYSTEM, null, null, flags);
UserData userData = putUserInfo(system);
@@ -2262,14 +2297,14 @@ public class UserManagerService extends IUserManager.Stub {
return mContext.getResources().getString(com.android.internal.R.string.owner_name);
}
- private void scheduleWriteUser(UserData UserData) {
+ private void scheduleWriteUser(UserData userData) {
if (DBG) {
debug("scheduleWriteUser");
}
// No need to wrap it within a lock -- worst case, we'll just post the same message
// twice.
- if (!mHandler.hasMessages(WRITE_USER_MSG, UserData)) {
- Message msg = mHandler.obtainMessage(WRITE_USER_MSG, UserData);
+ if (!mHandler.hasMessages(WRITE_USER_MSG, userData)) {
+ Message msg = mHandler.obtainMessage(WRITE_USER_MSG, userData);
mHandler.sendMessageDelayed(msg, WRITE_USER_DELAY);
}
}
@@ -2749,6 +2784,10 @@ public class UserManagerService extends IUserManager.Stub {
}
}
}
+ if (!isManagedProfile) {
+ // New users cannot be system, and it's not a profile, so per-force it's FULL.
+ flags |= UserInfo.FLAG_FULL;
+ }
userId = getNextAvailableId();
Environment.getUserSystemDirectory(userId).mkdirs();
diff --git a/services/core/java/com/android/server/tv/TvRemoteProviderProxy.java b/services/core/java/com/android/server/tv/TvRemoteProviderProxy.java
index 557e9c8c8557..b27d5ea30c67 100644
--- a/services/core/java/com/android/server/tv/TvRemoteProviderProxy.java
+++ b/services/core/java/com/android/server/tv/TvRemoteProviderProxy.java
@@ -255,8 +255,6 @@ final class TvRemoteProviderProxy implements ServiceConnection {
void clearInputBridge(TvRemoteProviderProxy provider, IBinder token);
- void sendTimeStamp(TvRemoteProviderProxy provider, IBinder token, long timestamp);
-
void sendKeyDown(TvRemoteProviderProxy provider, IBinder token, int keyCode);
void sendKeyUp(TvRemoteProviderProxy provider, IBinder token, int keyCode);
@@ -400,24 +398,8 @@ final class TvRemoteProviderProxy implements ServiceConnection {
}
void sendTimestamp(final IBinder token, final long timestamp) {
- synchronized (mLock) {
- if (mActiveConnection == this && Binder.getCallingUid() == mUid) {
- final long idToken = Binder.clearCallingIdentity();
- try {
- if (mProviderMethods != null) {
- mProviderMethods.sendTimeStamp(TvRemoteProviderProxy.this, token,
- timestamp);
- }
- } finally {
- Binder.restoreCallingIdentity(idToken);
- }
- } else {
- if (DEBUG) {
- Slog.w(TAG,
- "sendTimeStamp, Invalid connection or incorrect uid: " + Binder
- .getCallingUid());
- }
- }
+ if (DEBUG) {
+ Slog.e(TAG, "sendTimestamp is deprecated, please remove all usages of this API.");
}
}
diff --git a/services/core/java/com/android/server/tv/TvRemoteService.java b/services/core/java/com/android/server/tv/TvRemoteService.java
index 961c9925414a..4a41bf8133c3 100644
--- a/services/core/java/com/android/server/tv/TvRemoteService.java
+++ b/services/core/java/com/android/server/tv/TvRemoteService.java
@@ -147,13 +147,6 @@ public class TvRemoteService extends SystemService implements Watchdog.Monitor {
}
}
- private void sendTimeStampInternalLocked(IBinder token, long timestamp) {
- UinputBridge inputBridge = mBridgeMap.get(token);
- if (inputBridge != null) {
- inputBridge.sendTimestamp(token, timestamp);
- }
- }
-
private void sendKeyDownInternalLocked(IBinder token, int keyCode) {
if (DEBUG_KEYS) {
Slog.d(TAG, "sendKeyDownInternalLocked(), token: " + token + ", keyCode: " + keyCode);
@@ -298,15 +291,6 @@ public class TvRemoteService extends SystemService implements Watchdog.Monitor {
}
@Override
- public void sendTimeStamp(TvRemoteProviderProxy provider, IBinder token, long timestamp) {
- synchronized (mLock) {
- if (mProviderList.contains(provider)) {
- mService.sendTimeStampInternalLocked(token, timestamp);
- }
- }
- }
-
- @Override
public void sendKeyDown(TvRemoteProviderProxy provider, IBinder token, int keyCode) {
if (DEBUG_KEYS) {
Slog.d(TAG, "sendKeyDown(), token: " + token + ", keyCode: " + keyCode);
diff --git a/services/core/java/com/android/server/tv/UinputBridge.java b/services/core/java/com/android/server/tv/UinputBridge.java
index 1a984f98051f..752aa6683a88 100644
--- a/services/core/java/com/android/server/tv/UinputBridge.java
+++ b/services/core/java/com/android/server/tv/UinputBridge.java
@@ -16,13 +16,12 @@
package com.android.server.tv;
-import android.os.Binder;
import android.os.IBinder;
-import java.io.IOException;
-
import dalvik.system.CloseGuard;
+import java.io.IOException;
+
/**
* Sends the input event to the linux driver.
*/
@@ -35,7 +34,6 @@ public final class UinputBridge {
int maxPointers);
private static native void nativeClose(long ptr);
private static native void nativeClear(long ptr);
- private static native void nativeSendTimestamp(long ptr, long timestamp);
private static native void nativeSendKey(long ptr, int keyCode, boolean down);
private static native void nativeSendPointerDown(long ptr, int pointerId, int x, int y);
private static native void nativeSendPointerUp(long ptr, int pointerId);
@@ -93,12 +91,6 @@ public final class UinputBridge {
return mToken.equals(token);
}
- public void sendTimestamp(IBinder token, long timestamp) {
- if (isTokenValid(token)) {
- nativeSendTimestamp(mPtr, timestamp);
- }
- }
-
public void sendKeyDown(IBinder token, int keyCode) {
if (isTokenValid(token)) {
nativeSendKey(mPtr, keyCode, true /*down*/);
diff --git a/services/core/java/com/android/server/wm/ActivityStack.java b/services/core/java/com/android/server/wm/ActivityStack.java
index 17536e42acc8..12eab5096a13 100644
--- a/services/core/java/com/android/server/wm/ActivityStack.java
+++ b/services/core/java/com/android/server/wm/ActivityStack.java
@@ -5370,13 +5370,20 @@ class ActivityStack extends ConfigurationContainer {
void animateResizePinnedStack(Rect sourceHintBounds, Rect toBounds, int animationDuration,
boolean fromFullscreen) {
if (!inPinnedWindowingMode()) return;
- if (skipResizeAnimation(toBounds == null /* toFullscreen */)) {
- mService.moveTasksToFullscreenStack(mStackId, true /* onTop */);
- } else {
- if (getTaskStack() == null) return;
- getTaskStack().animateResizePinnedStack(toBounds, sourceHintBounds,
- animationDuration, fromFullscreen);
+ if (toBounds == null /* toFullscreen */) {
+ final Configuration parentConfig = getParent().getConfiguration();
+ final ActivityRecord top = topRunningNonOverlayTaskActivity();
+ if (top != null && !top.isConfigurationCompatible(parentConfig)) {
+ // The final orientation of this activity will change after moving to full screen.
+ // Start freezing screen here to prevent showing a temporary full screen window.
+ top.startFreezingScreenLocked(top.app, CONFIG_SCREEN_LAYOUT);
+ mService.moveTasksToFullscreenStack(mStackId, true /* onTop */);
+ return;
+ }
}
+ if (getTaskStack() == null) return;
+ getTaskStack().animateResizePinnedStack(toBounds, sourceHintBounds,
+ animationDuration, fromFullscreen);
}
/**
@@ -5392,15 +5399,6 @@ class ActivityStack extends ConfigurationContainer {
stack.getAnimationOrCurrentBounds(outBounds);
}
- private boolean skipResizeAnimation(boolean toFullscreen) {
- if (!toFullscreen) {
- return false;
- }
- final Configuration parentConfig = getParent().getConfiguration();
- final ActivityRecord top = topRunningNonOverlayTaskActivity();
- return top != null && !top.isConfigurationCompatible(parentConfig);
- }
-
void setPictureInPictureAspectRatio(float aspectRatio) {
if (getTaskStack() == null) return;
getTaskStack().setPictureInPictureAspectRatio(aspectRatio);
diff --git a/services/core/jni/com_android_server_tv_TvUinputBridge.cpp b/services/core/jni/com_android_server_tv_TvUinputBridge.cpp
index 980922a806f5..c832c18517ce 100644
--- a/services/core/jni/com_android_server_tv_TvUinputBridge.cpp
+++ b/services/core/jni/com_android_server_tv_TvUinputBridge.cpp
@@ -43,10 +43,6 @@
#include <sys/stat.h>
#include <sys/types.h>
-// Refer to EventHub.h
-#define MSC_ANDROID_TIME_SEC 0x6
-#define MSC_ANDROID_TIME_USEC 0x7
-
#define SLOT_UNKNOWN -1
namespace android {
@@ -153,11 +149,6 @@ NativeConnection* NativeConnection::open(const char* name, const char* uniqueId,
ioctl(fd, UI_SET_KEYBIT, KEYS[i].linuxKeyCode);
}
- // set the misc events maps
- ioctl(fd, UI_SET_EVBIT, EV_MSC);
- ioctl(fd, UI_SET_MSCBIT, MSC_ANDROID_TIME_SEC);
- ioctl(fd, UI_SET_MSCBIT, MSC_ANDROID_TIME_USEC);
-
// register the input device
if (write(fd, &uinp, sizeof(uinp)) != sizeof(uinp)) {
ALOGE("Cannot write uinput_user_dev to fd %d: %s.", fd, strerror(errno));
@@ -200,13 +191,6 @@ static void nativeClose(JNIEnv* env, jclass clazz, jlong ptr) {
delete connection;
}
-static void nativeSendTimestamp(JNIEnv* env, jclass clazz, jlong ptr, jlong timestamp) {
- NativeConnection* connection = reinterpret_cast<NativeConnection*>(ptr);
-
- connection->sendEvent(EV_MSC, MSC_ANDROID_TIME_SEC, timestamp / 1000L);
- connection->sendEvent(EV_MSC, MSC_ANDROID_TIME_USEC, (timestamp % 1000L) * 1000L);
-}
-
static void nativeSendKey(JNIEnv* env, jclass clazz, jlong ptr, jint keyCode, jboolean down) {
int32_t code = getLinuxKeyCode(keyCode);
NativeConnection* connection = reinterpret_cast<NativeConnection*>(ptr);
@@ -281,8 +265,6 @@ static JNINativeMethod gUinputBridgeMethods[] = {
(void*)nativeOpen },
{ "nativeClose", "(J)V",
(void*)nativeClose },
- { "nativeSendTimestamp", "(JJ)V",
- (void*)nativeSendTimestamp },
{ "nativeSendKey", "(JIZ)V",
(void*)nativeSendKey },
{ "nativeSendPointerDown", "(JIII)V",
diff --git a/telecomm/java/android/telecom/Logging/Session.java b/telecomm/java/android/telecom/Logging/Session.java
index 50c3cd97d77a..95a47e131272 100644
--- a/telecomm/java/android/telecom/Logging/Session.java
+++ b/telecomm/java/android/telecom/Logging/Session.java
@@ -33,6 +33,8 @@ import java.util.ArrayList;
*/
public class Session {
+ public static final String LOG_TAG = "Session";
+
public static final String START_SESSION = "START_SESSION";
public static final String START_EXTERNAL_SESSION = "START_EXTERNAL_SESSION";
public static final String CREATE_SUBSESSION = "CREATE_SUBSESSION";
@@ -45,6 +47,9 @@ public class Session {
public static final String EXTERNAL_INDICATOR = "E-";
public static final String TRUNCATE_STRING = "...";
+ // Prevent infinite recursion by setting a reasonable limit.
+ private static final int SESSION_RECURSION_LIMIT = 25;
+
/**
* Initial value of mExecutionEndTimeMs and the final value of {@link #getLocalExecutionTime()}
* if the Session is canceled.
@@ -226,6 +231,15 @@ public class Session {
// Builds full session id recursively
private String getFullSessionId() {
+ return getFullSessionId(0);
+ }
+
+ // keep track of calls and bail if we hit the recursion limit
+ private String getFullSessionId(int parentCount) {
+ if (parentCount >= SESSION_RECURSION_LIMIT) {
+ Log.w(LOG_TAG, "getFullSessionId: Hit recursion limit!");
+ return TRUNCATE_STRING + mSessionId;
+ }
// Cache mParentSession locally to prevent a concurrency problem where
// Log.endParentSessions() is called while a logging statement is running (Log.i, for
// example) and setting mParentSession to null in a different thread after the null check
@@ -235,42 +249,57 @@ public class Session {
return mSessionId;
} else {
if (Log.VERBOSE) {
- return parentSession.getFullSessionId() +
+ return parentSession.getFullSessionId(parentCount + 1)
// Append "_X" to subsession to show subsession designation.
- SESSION_SEPARATION_CHAR_CHILD + mSessionId;
+ + SESSION_SEPARATION_CHAR_CHILD + mSessionId;
} else {
// Only worry about the base ID at the top of the tree.
- return parentSession.getFullSessionId();
+ return parentSession.getFullSessionId(parentCount + 1);
}
}
}
- // Print out the full Session tree from any subsession node
- public String printFullSessionTree() {
- // Get to the top of the tree
+ private Session getRootSession(String callingMethod) {
+ int currParentCount = 0;
Session topNode = this;
while (topNode.getParentSession() != null) {
+ if (currParentCount >= SESSION_RECURSION_LIMIT) {
+ Log.w(LOG_TAG, "getRootSession: Hit recursion limit from " + callingMethod);
+ break;
+ }
topNode = topNode.getParentSession();
+ currParentCount++;
}
- return topNode.printSessionTree();
+ return topNode;
+ }
+
+ // Print out the full Session tree from any subsession node
+ public String printFullSessionTree() {
+ return getRootSession("printFullSessionTree").printSessionTree();
}
// Recursively move down session tree using DFS, but print out each node when it is reached.
- public String printSessionTree() {
+ private String printSessionTree() {
StringBuilder sb = new StringBuilder();
- printSessionTree(0, sb);
+ printSessionTree(0, sb, 0);
return sb.toString();
}
- private void printSessionTree(int tabI, StringBuilder sb) {
+ private void printSessionTree(int tabI, StringBuilder sb, int currChildCount) {
+ // Prevent infinite recursion.
+ if (currChildCount >= SESSION_RECURSION_LIMIT) {
+ Log.w(LOG_TAG, "printSessionTree: Hit recursion limit!");
+ sb.append(TRUNCATE_STRING);
+ return;
+ }
sb.append(toString());
for (Session child : mChildSessions) {
sb.append("\n");
for (int i = 0; i <= tabI; i++) {
sb.append("\t");
}
- child.printSessionTree(tabI + 1, sb);
+ child.printSessionTree(tabI + 1, sb, currChildCount + 1);
}
}
@@ -279,11 +308,17 @@ public class Session {
// recent) will be truncated to "..."
public String getFullMethodPath(boolean truncatePath) {
StringBuilder sb = new StringBuilder();
- getFullMethodPath(sb, truncatePath);
+ getFullMethodPath(sb, truncatePath, 0);
return sb.toString();
}
- private synchronized void getFullMethodPath(StringBuilder sb, boolean truncatePath) {
+ private synchronized void getFullMethodPath(StringBuilder sb, boolean truncatePath,
+ int parentCount) {
+ if (parentCount >= SESSION_RECURSION_LIMIT) {
+ Log.w(LOG_TAG, "getFullMethodPath: Hit recursion limit!");
+ sb.append(TRUNCATE_STRING);
+ return;
+ }
// Return cached value for method path. When returning the truncated path, recalculate the
// full path without using the cached value.
if (!TextUtils.isEmpty(mFullMethodPathCache) && !truncatePath) {
@@ -296,7 +331,7 @@ public class Session {
// Check to see if the session has been renamed yet. If it has not, then the session
// has not been continued.
isSessionStarted = !mShortMethodName.equals(parentSession.mShortMethodName);
- parentSession.getFullMethodPath(sb, truncatePath);
+ parentSession.getFullMethodPath(sb, truncatePath, parentCount + 1);
sb.append(SUBSESSION_SEPARATION_CHAR);
}
// Encapsulate the external session's method name so it is obvious what part of the session
@@ -319,13 +354,10 @@ public class Session {
mFullMethodPathCache = sb.toString();
}
}
+
// Recursively move to the top of the tree to see if the parent session is external.
private boolean isSessionExternal() {
- if (getParentSession() == null) {
- return isExternal();
- } else {
- return getParentSession().isSessionExternal();
- }
+ return getRootSession("isSessionExternal").isExternal();
}
@Override
diff --git a/telephony/java/android/provider/Telephony.java b/telephony/java/android/provider/Telephony.java
index c4a9ee957ab0..43fb304e8fb6 100644
--- a/telephony/java/android/provider/Telephony.java
+++ b/telephony/java/android/provider/Telephony.java
@@ -3230,6 +3230,8 @@ public final class Telephony {
/**
* The {@code content://} style URL for locked messages in this table.
+ * <P>This {@link Uri} is used to check at most one locked message found in the union of MMS
+ * and SMS messages. Also this will return only _id column in response.</P>
*/
public static final Uri CONTENT_LOCKED_URI = Uri.parse(
"content://mms-sms/locked");
diff --git a/telephony/java/android/telephony/CarrierConfigManager.java b/telephony/java/android/telephony/CarrierConfigManager.java
index 66cc6ebd019b..1dd2635cba5d 100755
--- a/telephony/java/android/telephony/CarrierConfigManager.java
+++ b/telephony/java/android/telephony/CarrierConfigManager.java
@@ -2675,6 +2675,22 @@ public class CarrierConfigManager {
"5g_icon_configuration_string";
/**
+ * Timeout in second for displaying 5G icon, default value is 0 which means the timer is
+ * disabled.
+ *
+ * System UI will show the 5G icon and start a timer with the timeout from this config when the
+ * device connects to a 5G cell. System UI stops displaying 5G icon when both the device
+ * disconnects from 5G cell and the timer is expired.
+ *
+ * If 5G is reacquired during this timer, the timer is canceled and restarted when 5G is next
+ * lost. Allows us to momentarily lose 5G without blinking the icon.
+ *
+ * @hide
+ */
+ public static final String KEY_5G_ICON_DISPLAY_GRACE_PERIOD_SEC_INT =
+ "5g_icon_display_grace_period_sec_int";
+
+ /**
* Support ASCII 7-BIT encoding for long SMS. This carrier config is used to enable
* this feature.
* @hide
@@ -3486,6 +3502,7 @@ public class CarrierConfigManager {
sDefaults.putInt(KEY_CALL_WAITING_SERVICE_CLASS_INT, 1 /* SERVICE_CLASS_VOICE */);
sDefaults.putString(KEY_5G_ICON_CONFIGURATION_STRING,
"connected_mmwave:None,connected:5G,not_restricted:None,restricted:None");
+ sDefaults.putInt(KEY_5G_ICON_DISPLAY_GRACE_PERIOD_SEC_INT, 0);
sDefaults.putBoolean(KEY_ASCII_7_BIT_SUPPORT_FOR_LONG_MESSAGE_BOOL, false);
/* Default value is minimum RSRP level needed for SIGNAL_STRENGTH_GOOD */
sDefaults.putInt(KEY_OPPORTUNISTIC_NETWORK_ENTRY_THRESHOLD_RSRP_INT, -108);
diff --git a/test-mock/Android.bp b/test-mock/Android.bp
index a5cd1751151f..0129c4ca5bc1 100644
--- a/test-mock/Android.bp
+++ b/test-mock/Android.bp
@@ -25,7 +25,7 @@ java_sdk_library {
"android.test.mock",
],
- srcs_lib: "framework",
+ srcs_lib: "framework-minus-apex",
srcs_lib_whitelist_dirs: ["core/java"],
srcs_lib_whitelist_pkgs: ["android"],
compile_dex: true,
diff --git a/tests/net/java/com/android/server/connectivity/tethering/EntitlementManagerTest.java b/tests/net/java/com/android/server/connectivity/tethering/EntitlementManagerTest.java
index 2b2e8a72ab04..5217e26a40ef 100644
--- a/tests/net/java/com/android/server/connectivity/tethering/EntitlementManagerTest.java
+++ b/tests/net/java/com/android/server/connectivity/tethering/EntitlementManagerTest.java
@@ -406,6 +406,13 @@ public final class EntitlementManagerTest {
}
@Test
+ public void verifyPermissionWhenProvisioningNotStarted() {
+ assertTrue(mEnMgr.isCellularUpstreamPermitted());
+ setupForRequiredProvisioning();
+ assertFalse(mEnMgr.isCellularUpstreamPermitted());
+ }
+
+ @Test
public void testRunTetherProvisioning() {
setupForRequiredProvisioning();
// 1. start ui provisioning, upstream is mobile