From 2bd31dbd023a11d90061c7b6831dd06454c928af Mon Sep 17 00:00:00 2001 From: Jeff Sharkey Date: Sat, 9 Jan 2016 16:58:14 -0700 Subject: [PATCH] Install non-EA providers once user is unlocked. When starting encryption-aware apps while the device is locked, we can only spin up ContentProviders that have been marked as encryption-aware. Once the user is unlocked, we need to go back and install non-encryption-aware providers in already running apps. Fix bugs in getPackageInfo() where only one of the various MATCH_ flags was being consulted (!). Move matching logic to single unified location in PackageUserState so we have consistent behavior. Fix another class of bugs where Safe Mode wasn't correctly filtering package details (!). These bugs are fixed by splicing in the new MATCH_SYSTEM_ONLY flag as part of state-based flag mutation that was added for encryption. Bug: 25944787 Change-Id: I39c8da74b1f9ba944cc817176983f50ba322329c --- core/java/android/content/pm/PackageParser.java | 104 +++++++-------------- core/java/android/content/pm/PackageUserState.java | 84 ++++++++++++++++- .../java/com/android/internal/util/ArrayUtils.java | 15 +++ .../android/server/am/ActivityManagerService.java | 43 ++++++++- .../android/server/pm/PackageManagerService.java | 30 ++---- .../core/java/com/android/server/pm/Settings.java | 60 +----------- 6 files changed, 186 insertions(+), 150 deletions(-) diff --git a/core/java/android/content/pm/PackageParser.java b/core/java/android/content/pm/PackageParser.java index 134966248f94..a0df610c7428 100644 --- a/core/java/android/content/pm/PackageParser.java +++ b/core/java/android/content/pm/PackageParser.java @@ -463,92 +463,60 @@ public class PackageParser { p.featureGroups.toArray(pi.featureGroups); } } - if ((flags&PackageManager.GET_ACTIVITIES) != 0) { - int N = p.activities.size(); + if ((flags & PackageManager.GET_ACTIVITIES) != 0) { + final int N = p.activities.size(); if (N > 0) { - if ((flags&PackageManager.GET_DISABLED_COMPONENTS) != 0) { - pi.activities = new ActivityInfo[N]; - } else { - int num = 0; - for (int i=0; i 0) { - if ((flags&PackageManager.GET_DISABLED_COMPONENTS) != 0) { - pi.receivers = new ActivityInfo[N]; - } else { - int num = 0; - for (int i=0; i 0) { - if ((flags&PackageManager.GET_DISABLED_COMPONENTS) != 0) { - pi.services = new ServiceInfo[N]; - } else { - int num = 0; - for (int i=0; i 0) { - if ((flags&PackageManager.GET_DISABLED_COMPONENTS) != 0) { - pi.providers = new ProviderInfo[N]; - } else { - int num = 0; - for (int i=0; i