Loading core/java/com/android/server/SystemConfig.java +1 −0 Original line number Diff line number Diff line Loading @@ -540,6 +540,7 @@ public class SystemConfig { Slog.w(TAG, "Couldn't find or open permissions file " + permFile); return; } Slog.i(TAG, "Reading permissions from " + permFile); final boolean lowRam = ActivityManager.isLowRamDeviceStatic(); Loading services/core/java/com/android/server/pm/UserSystemPackageInstaller.java +27 −17 Original line number Diff line number Diff line Loading @@ -116,13 +116,13 @@ class UserSystemPackageInstaller { * <p>Packages that are whitelisted, but then blacklisted so that they aren't to be installed on * any user, are purposefully still present in this list. */ private final ArrayMap<String, Integer> mWhitelitsedPackagesForUserTypes; private final ArrayMap<String, Integer> mWhitelistedPackagesForUserTypes; private final UserManagerService mUm; UserSystemPackageInstaller(UserManagerService ums) { mUm = ums; mWhitelitsedPackagesForUserTypes = mWhitelistedPackagesForUserTypes = determineWhitelistedPackagesForUserTypes(SystemConfig.getInstance()); } Loading @@ -130,7 +130,7 @@ class UserSystemPackageInstaller { @VisibleForTesting UserSystemPackageInstaller(UserManagerService ums, ArrayMap<String, Integer> whitelist) { mUm = ums; mWhitelitsedPackagesForUserTypes = whitelist; mWhitelistedPackagesForUserTypes = whitelist; } /** Loading Loading @@ -249,7 +249,7 @@ class UserSystemPackageInstaller { return (whitelistMode & USER_TYPE_PACKAGE_WHITELIST_MODE_IMPLICIT_WHITELIST) != 0; } /** Gets the PackageWhitelistMode for use of {@link #mWhitelitsedPackagesForUserTypes}. */ /** Gets the PackageWhitelistMode for use of {@link #mWhitelistedPackagesForUserTypes}. */ private @PackageWhitelistMode int getWhitelistMode() { final int runtimeMode = SystemProperties.getInt( PACKAGE_WHITELIST_MODE_PROP, USER_TYPE_PACKAGE_WHITELIST_MODE_DEVICE_DEFAULT); Loading Loading @@ -290,7 +290,7 @@ class UserSystemPackageInstaller { if (!pkg.isSystem()) { return; } if (shouldInstallPackage(pkg, mWhitelitsedPackagesForUserTypes, if (shouldInstallPackage(pkg, mWhitelistedPackagesForUserTypes, whitelistedPackages, isImplicitWhitelistMode, isSystemUser)) { // Although the whitelist uses manifest names, this function returns packageNames. installPackages.add(pkg.packageName); Loading Loading @@ -340,10 +340,10 @@ class UserSystemPackageInstaller { */ @VisibleForTesting @NonNull Set<String> getWhitelistedPackagesForUserType(int flags) { Set<String> installablePkgs = new ArraySet<>(mWhitelitsedPackagesForUserTypes.size()); for (int i = 0; i < mWhitelitsedPackagesForUserTypes.size(); i++) { String pkgName = mWhitelitsedPackagesForUserTypes.keyAt(i); int whitelistedUserTypes = mWhitelitsedPackagesForUserTypes.valueAt(i); Set<String> installablePkgs = new ArraySet<>(mWhitelistedPackagesForUserTypes.size()); for (int i = 0; i < mWhitelistedPackagesForUserTypes.size(); i++) { String pkgName = mWhitelistedPackagesForUserTypes.keyAt(i); int whitelistedUserTypes = mWhitelistedPackagesForUserTypes.valueAt(i); if ((flags & whitelistedUserTypes) != 0) { installablePkgs.add(pkgName); } Loading @@ -360,7 +360,7 @@ class UserSystemPackageInstaller { * completely blacklists an AOSP app). */ private Set<String> getWhitelistedSystemPackages() { return mWhitelitsedPackagesForUserTypes.keySet(); return mWhitelistedPackagesForUserTypes.keySet(); } /** Loading Loading @@ -456,18 +456,28 @@ class UserSystemPackageInstaller { } void dump(PrintWriter pw) { pw.print("Whitelisted packages per user type"); final int size = mWhitelitsedPackagesForUserTypes.size(); final String prefix = " "; final int mode = getWhitelistMode(); pw.println("Whitelisted packages per user type"); pw.print(prefix); pw.print("Mode: "); pw.print(mode); pw.print(isEnforceMode(mode) ? " (enforced)" : ""); pw.print(isLogMode(mode) ? " (logged)" : ""); pw.print(isImplicitWhitelistMode(mode) ? " (implicit)" : ""); pw.println(); final int size = mWhitelistedPackagesForUserTypes.size(); if (size == 0) { pw.println(": N/A"); pw.print(prefix); pw.println("No packages"); return; } pw.println(" (" + size + " packages)"); final String prefix2 = prefix + prefix; pw.print(prefix); pw.print(size); pw.println(" packages:"); for (int i = 0; i < size; i++) { final String pkgName = mWhitelitsedPackagesForUserTypes.keyAt(i); final String pkgName = mWhitelistedPackagesForUserTypes.keyAt(i); final String whitelistedUserTypes = UserInfo.flagsToString(mWhitelitsedPackagesForUserTypes.valueAt(i)); pw.println(" " + pkgName + ": " + whitelistedUserTypes); UserInfo.flagsToString(mWhitelistedPackagesForUserTypes.valueAt(i)); pw.print(prefix2); pw.print(pkgName); pw.print(": "); pw.println(whitelistedUserTypes); } } } Loading
core/java/com/android/server/SystemConfig.java +1 −0 Original line number Diff line number Diff line Loading @@ -540,6 +540,7 @@ public class SystemConfig { Slog.w(TAG, "Couldn't find or open permissions file " + permFile); return; } Slog.i(TAG, "Reading permissions from " + permFile); final boolean lowRam = ActivityManager.isLowRamDeviceStatic(); Loading
services/core/java/com/android/server/pm/UserSystemPackageInstaller.java +27 −17 Original line number Diff line number Diff line Loading @@ -116,13 +116,13 @@ class UserSystemPackageInstaller { * <p>Packages that are whitelisted, but then blacklisted so that they aren't to be installed on * any user, are purposefully still present in this list. */ private final ArrayMap<String, Integer> mWhitelitsedPackagesForUserTypes; private final ArrayMap<String, Integer> mWhitelistedPackagesForUserTypes; private final UserManagerService mUm; UserSystemPackageInstaller(UserManagerService ums) { mUm = ums; mWhitelitsedPackagesForUserTypes = mWhitelistedPackagesForUserTypes = determineWhitelistedPackagesForUserTypes(SystemConfig.getInstance()); } Loading @@ -130,7 +130,7 @@ class UserSystemPackageInstaller { @VisibleForTesting UserSystemPackageInstaller(UserManagerService ums, ArrayMap<String, Integer> whitelist) { mUm = ums; mWhitelitsedPackagesForUserTypes = whitelist; mWhitelistedPackagesForUserTypes = whitelist; } /** Loading Loading @@ -249,7 +249,7 @@ class UserSystemPackageInstaller { return (whitelistMode & USER_TYPE_PACKAGE_WHITELIST_MODE_IMPLICIT_WHITELIST) != 0; } /** Gets the PackageWhitelistMode for use of {@link #mWhitelitsedPackagesForUserTypes}. */ /** Gets the PackageWhitelistMode for use of {@link #mWhitelistedPackagesForUserTypes}. */ private @PackageWhitelistMode int getWhitelistMode() { final int runtimeMode = SystemProperties.getInt( PACKAGE_WHITELIST_MODE_PROP, USER_TYPE_PACKAGE_WHITELIST_MODE_DEVICE_DEFAULT); Loading Loading @@ -290,7 +290,7 @@ class UserSystemPackageInstaller { if (!pkg.isSystem()) { return; } if (shouldInstallPackage(pkg, mWhitelitsedPackagesForUserTypes, if (shouldInstallPackage(pkg, mWhitelistedPackagesForUserTypes, whitelistedPackages, isImplicitWhitelistMode, isSystemUser)) { // Although the whitelist uses manifest names, this function returns packageNames. installPackages.add(pkg.packageName); Loading Loading @@ -340,10 +340,10 @@ class UserSystemPackageInstaller { */ @VisibleForTesting @NonNull Set<String> getWhitelistedPackagesForUserType(int flags) { Set<String> installablePkgs = new ArraySet<>(mWhitelitsedPackagesForUserTypes.size()); for (int i = 0; i < mWhitelitsedPackagesForUserTypes.size(); i++) { String pkgName = mWhitelitsedPackagesForUserTypes.keyAt(i); int whitelistedUserTypes = mWhitelitsedPackagesForUserTypes.valueAt(i); Set<String> installablePkgs = new ArraySet<>(mWhitelistedPackagesForUserTypes.size()); for (int i = 0; i < mWhitelistedPackagesForUserTypes.size(); i++) { String pkgName = mWhitelistedPackagesForUserTypes.keyAt(i); int whitelistedUserTypes = mWhitelistedPackagesForUserTypes.valueAt(i); if ((flags & whitelistedUserTypes) != 0) { installablePkgs.add(pkgName); } Loading @@ -360,7 +360,7 @@ class UserSystemPackageInstaller { * completely blacklists an AOSP app). */ private Set<String> getWhitelistedSystemPackages() { return mWhitelitsedPackagesForUserTypes.keySet(); return mWhitelistedPackagesForUserTypes.keySet(); } /** Loading Loading @@ -456,18 +456,28 @@ class UserSystemPackageInstaller { } void dump(PrintWriter pw) { pw.print("Whitelisted packages per user type"); final int size = mWhitelitsedPackagesForUserTypes.size(); final String prefix = " "; final int mode = getWhitelistMode(); pw.println("Whitelisted packages per user type"); pw.print(prefix); pw.print("Mode: "); pw.print(mode); pw.print(isEnforceMode(mode) ? " (enforced)" : ""); pw.print(isLogMode(mode) ? " (logged)" : ""); pw.print(isImplicitWhitelistMode(mode) ? " (implicit)" : ""); pw.println(); final int size = mWhitelistedPackagesForUserTypes.size(); if (size == 0) { pw.println(": N/A"); pw.print(prefix); pw.println("No packages"); return; } pw.println(" (" + size + " packages)"); final String prefix2 = prefix + prefix; pw.print(prefix); pw.print(size); pw.println(" packages:"); for (int i = 0; i < size; i++) { final String pkgName = mWhitelitsedPackagesForUserTypes.keyAt(i); final String pkgName = mWhitelistedPackagesForUserTypes.keyAt(i); final String whitelistedUserTypes = UserInfo.flagsToString(mWhitelitsedPackagesForUserTypes.valueAt(i)); pw.println(" " + pkgName + ": " + whitelistedUserTypes); UserInfo.flagsToString(mWhitelistedPackagesForUserTypes.valueAt(i)); pw.print(prefix2); pw.print(pkgName); pw.print(": "); pw.println(whitelistedUserTypes); } } }