diff options
| author | 2020-09-21 18:16:10 +0000 | |
|---|---|---|
| committer | 2020-09-21 18:16:10 +0000 | |
| commit | 0bf48315b627db802cb8f986b18b24c0baea31e4 (patch) | |
| tree | ad36e6424094465ed182f1bb8ad7ee3481a3608e | |
| parent | 0766cdc08c316a1de7e5ec190121d63e18e68929 (diff) | |
| parent | 51d9edc29249593ace7328f6d0a81c21c5d062c3 (diff) | |
Merge "Fixed PackageManager.readLPw() call." into rvc-qpr-dev
5 files changed, 37 insertions, 16 deletions
diff --git a/services/core/java/android/os/UserManagerInternal.java b/services/core/java/android/os/UserManagerInternal.java index fbe8c04bd59c..38983488654e 100644 --- a/services/core/java/android/os/UserManagerInternal.java +++ b/services/core/java/android/os/UserManagerInternal.java @@ -227,6 +227,14 @@ public abstract class UserManagerInternal { public abstract @NonNull List<UserInfo> getUsers(boolean excludeDying); /** + * Internal implementation of getUsers does not check permissions. + * This improves performance for calls from inside system server which already have permissions + * checked. + */ + public abstract @NonNull List<UserInfo> getUsers(boolean excludePartial, boolean excludeDying, + boolean excludePreCreated); + + /** * Checks if the {@code callingUserId} and {@code targetUserId} are same or in same group * and that the {@code callingUserId} is not a profile and {@code targetUserId} is enabled. * diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java index 5c3644e5b262..daca0b34ec2a 100644 --- a/services/core/java/com/android/server/pm/PackageManagerService.java +++ b/services/core/java/com/android/server/pm/PackageManagerService.java @@ -2991,7 +2991,10 @@ public class PackageManagerService extends IPackageManager.Stub t.traceEnd(); t.traceBegin("read user settings"); - mFirstBoot = !mSettings.readLPw(mInjector.getUserManagerInternal().getUsers(false)); + mFirstBoot = !mSettings.readLPw(mInjector.getUserManagerInternal().getUsers( + /* excludePartial= */ true, + /* excludeDying= */ false, + /* excludePreCreated= */ false)); t.traceEnd(); // Clean up orphaned packages for which the code path doesn't exist diff --git a/services/core/java/com/android/server/pm/Settings.java b/services/core/java/com/android/server/pm/Settings.java index a0feb94fd3fc..aeea2514d0a4 100644 --- a/services/core/java/com/android/server/pm/Settings.java +++ b/services/core/java/com/android/server/pm/Settings.java @@ -1613,6 +1613,7 @@ public final class Settings { return; } str = new FileInputStream(userPackagesStateFile); + if (DEBUG_MU) Log.i(TAG, "Reading " + userPackagesStateFile); } final XmlPullParser parser = Xml.newPullParser(); parser.setInput(str, StandardCharsets.UTF_8.name()); @@ -2057,9 +2058,13 @@ public final class Settings { serializer.startTag(null, TAG_PACKAGE_RESTRICTIONS); + if (DEBUG_MU) Log.i(TAG, "Writing " + userPackagesStateFile); for (final PackageSetting pkg : mPackages.values()) { final PackageUserState ustate = pkg.readUserState(userId); - if (DEBUG_MU) Log.i(TAG, " pkg=" + pkg.name + ", state=" + ustate.enabled); + if (DEBUG_MU) { + Log.i(TAG, " pkg=" + pkg.name + ", installed=" + ustate.installed + + ", state=" + ustate.enabled); + } serializer.startTag(null, TAG_PACKAGE); serializer.attribute(null, ATTR_NAME, pkg.name); diff --git a/services/core/java/com/android/server/pm/UserManagerService.java b/services/core/java/com/android/server/pm/UserManagerService.java index 01a3d14e05df..244818a6f311 100644 --- a/services/core/java/com/android/server/pm/UserManagerService.java +++ b/services/core/java/com/android/server/pm/UserManagerService.java @@ -5102,8 +5102,14 @@ public class UserManagerService extends IUserManager.Stub { @Override public @NonNull List<UserInfo> getUsers(boolean excludeDying) { - return UserManagerService.this.getUsersInternal(/*excludePartial= */ true, - excludeDying, /* excludePreCreated= */ true); + return getUsers(/*excludePartial= */ true, excludeDying, /* excludePreCreated= */ true); + } + + @Override + public @NonNull List<UserInfo> getUsers(boolean excludePartial, boolean excludeDying, + boolean excludePreCreated) { + return UserManagerService.this.getUsersInternal(excludePartial, excludeDying, + excludePreCreated); } @Override diff --git a/services/core/java/com/android/server/pm/permission/PermissionManagerService.java b/services/core/java/com/android/server/pm/permission/PermissionManagerService.java index 2533aa7c4302..66d8b5974261 100644 --- a/services/core/java/com/android/server/pm/permission/PermissionManagerService.java +++ b/services/core/java/com/android/server/pm/permission/PermissionManagerService.java @@ -2603,13 +2603,13 @@ public class PermissionManagerService extends IPermissionManager.Stub { final int N = pkg.getRequestedPermissions().size(); for (int i = 0; i < N; i++) { final String permName = pkg.getRequestedPermissions().get(i); + final String friendlyName = pkg.getPackageName() + "(" + pkg.getUid() + ")"; final BasePermission bp = mSettings.getPermissionLocked(permName); final boolean appSupportsRuntimePermissions = pkg.getTargetSdkVersion() >= Build.VERSION_CODES.M; String upgradedActivityRecognitionPermission = null; - if (DEBUG_INSTALL && bp != null) { - Log.i(TAG, "Package " + pkg.getPackageName() + Log.i(TAG, "Package " + friendlyName + " checking " + permName + ": " + bp); } @@ -2618,7 +2618,7 @@ public class PermissionManagerService extends IPermissionManager.Stub { pkg.getPackageName())) { if (DEBUG_PERMISSIONS) { Slog.i(TAG, "Unknown permission " + permName - + " in package " + pkg.getPackageName()); + + " in package " + friendlyName); } } continue; @@ -2634,7 +2634,7 @@ public class PermissionManagerService extends IPermissionManager.Stub { newImplicitPermissions.add(permName); if (DEBUG_PERMISSIONS) { - Slog.i(TAG, permName + " is newly added for " + pkg.getPackageName()); + Slog.i(TAG, permName + " is newly added for " + friendlyName); } } else { // Special case for Activity Recognition permission. Even if AR permission @@ -2656,8 +2656,7 @@ public class PermissionManagerService extends IPermissionManager.Stub { newImplicitPermissions.add(permName); if (DEBUG_PERMISSIONS) { - Slog.i(TAG, permName + " is newly added for " - + pkg.getPackageName()); + Slog.i(TAG, permName + " is newly added for " + friendlyName); } break; } @@ -2671,7 +2670,7 @@ public class PermissionManagerService extends IPermissionManager.Stub { // if (/*pkg.isInstantApp()*/ false && !bp.isInstant()) { // if (DEBUG_PERMISSIONS) { // Log.i(TAG, "Denying non-ephemeral permission " + bp.getName() -// + " for package " + pkg.getPackageName()); +// + " for package " + friendlyName); // } // continue; // } @@ -2679,7 +2678,7 @@ public class PermissionManagerService extends IPermissionManager.Stub { if (bp.isRuntimeOnly() && !appSupportsRuntimePermissions) { if (DEBUG_PERMISSIONS) { Log.i(TAG, "Denying runtime-only permission " + bp.getName() - + " for package " + pkg.getPackageName()); + + " for package " + friendlyName); } continue; } @@ -2716,7 +2715,7 @@ public class PermissionManagerService extends IPermissionManager.Stub { if (DEBUG_PERMISSIONS) { Slog.i(TAG, "Considering granting permission " + perm + " to package " - + pkg.getPackageName()); + + friendlyName); } if (grant != GRANT_DENIED) { @@ -3005,7 +3004,7 @@ public class PermissionManagerService extends IPermissionManager.Stub { || packageOfInterest.equals(pkg.getPackageName())) { if (DEBUG_PERMISSIONS) { Slog.i(TAG, "Not granting permission " + perm - + " to package " + pkg.getPackageName() + + " to package " + friendlyName + " because it was previously installed without"); } } @@ -3020,7 +3019,7 @@ public class PermissionManagerService extends IPermissionManager.Stub { changedInstallPermission = true; if (DEBUG_PERMISSIONS) { Slog.i(TAG, "Un-granting permission " + perm - + " from package " + pkg.getPackageName() + + " from package " + friendlyName + " (protectionLevel=" + bp.getProtectionLevel() + " flags=0x" + Integer.toHexString(PackageInfoUtils.appInfoFlags(pkg, ps)) @@ -3033,7 +3032,7 @@ public class PermissionManagerService extends IPermissionManager.Stub { && (packageOfInterest == null || packageOfInterest.equals(pkg.getPackageName()))) { Slog.i(TAG, "Not granting permission " + perm - + " to package " + pkg.getPackageName() + + " to package " + friendlyName + " (protectionLevel=" + bp.getProtectionLevel() + " flags=0x" + Integer.toHexString(PackageInfoUtils.appInfoFlags(pkg, ps)) |