Loading services/core/java/com/android/server/pm/PackageInstallerSession.java +1 −1 Original line number Diff line number Diff line Loading @@ -950,7 +950,7 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub { // User needs to confirm installation; give installer an intent they can use to involve // user. final Intent intent = new Intent(PackageInstaller.ACTION_CONFIRM_INSTALL); intent.setPackage(mContext.getPackageManager().getPermissionControllerPackageName()); intent.setPackage(mPm.getPackageInstallerPackageName()); intent.putExtra(PackageInstaller.EXTRA_SESSION_ID, sessionId); try { mRemoteObserver.onUserActionRequired(intent); Loading services/core/java/com/android/server/pm/PackageManagerService.java +34 −0 Original line number Diff line number Diff line Loading @@ -1388,6 +1388,7 @@ public class PackageManagerService extends IPackageManager.Stub final @Nullable String mRequiredVerifierPackage; final @NonNull String mRequiredInstallerPackage; final @NonNull String mRequiredUninstallerPackage; final String mRequiredPermissionControllerPackage; final @Nullable String mSetupWizardPackage; final @Nullable String mStorageManagerPackage; final @Nullable String mSystemTextClassifierPackage; Loading Loading @@ -3240,6 +3241,7 @@ public class PackageManagerService extends IPackageManager.Stub mSharedSystemSharedLibraryPackageName = getRequiredSharedLibraryLPr( PackageManager.SYSTEM_SHARED_LIBRARY_SHARED, SharedLibraryInfo.VERSION_UNDEFINED); mRequiredPermissionControllerPackage = getRequiredPermissionsControllerLPr(); } else { mRequiredVerifierPackage = null; mRequiredInstallerPackage = null; Loading @@ -3248,6 +3250,7 @@ public class PackageManagerService extends IPackageManager.Stub mIntentFilterVerifier = null; mServicesSystemSharedLibraryPackageName = null; mSharedSystemSharedLibraryPackageName = null; mRequiredPermissionControllerPackage = null; } mInstallerService = new PackageInstallerService(context, this); Loading Loading @@ -3595,6 +3598,25 @@ public class PackageManagerService extends IPackageManager.Stub return resolveInfo.getComponentInfo().packageName; } private @NonNull String getRequiredPermissionsControllerLPr() { final Intent intent = new Intent(Intent.ACTION_MANAGE_PERMISSIONS); intent.addCategory(Intent.CATEGORY_DEFAULT); final List<ResolveInfo> matches = queryIntentActivitiesInternal(intent, null, MATCH_SYSTEM_ONLY | MATCH_DIRECT_BOOT_AWARE | MATCH_DIRECT_BOOT_UNAWARE, UserHandle.USER_SYSTEM); if (matches.size() == 1) { ResolveInfo resolveInfo = matches.get(0); if (!resolveInfo.activityInfo.applicationInfo.isPrivilegedApp()) { throw new RuntimeException("The permissions manager must be a privileged app"); } return matches.get(0).getComponentInfo().packageName; } else { throw new RuntimeException("There must be exactly one permissions manager; found " + matches); } } private @NonNull ComponentName getIntentFilterVerifierComponentNameLPr() { final Intent intent = new Intent(Intent.ACTION_INTENT_FILTER_NEEDS_VERIFICATION); Loading Loading @@ -5400,6 +5422,12 @@ public class PackageManagerService extends IPackageManager.Stub @Override public String getPermissionControllerPackageName() { synchronized (mPackages) { return mRequiredPermissionControllerPackage; } } String getPackageInstallerPackageName() { synchronized (mPackages) { return mRequiredInstallerPackage; } Loading Loading @@ -14513,6 +14541,12 @@ public class PackageManagerService extends IPackageManager.Stub return false; } if (packageName.equals(mRequiredPermissionControllerPackage)) { Slog.w(TAG, "Cannot suspend package \"" + packageName + "\": required for permissions management"); return false; } if (mProtectedPackages.isPackageStateProtected(userId, packageName)) { Slog.w(TAG, "Cannot suspend package \"" + packageName + "\": protected package"); Loading
services/core/java/com/android/server/pm/PackageInstallerSession.java +1 −1 Original line number Diff line number Diff line Loading @@ -950,7 +950,7 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub { // User needs to confirm installation; give installer an intent they can use to involve // user. final Intent intent = new Intent(PackageInstaller.ACTION_CONFIRM_INSTALL); intent.setPackage(mContext.getPackageManager().getPermissionControllerPackageName()); intent.setPackage(mPm.getPackageInstallerPackageName()); intent.putExtra(PackageInstaller.EXTRA_SESSION_ID, sessionId); try { mRemoteObserver.onUserActionRequired(intent); Loading
services/core/java/com/android/server/pm/PackageManagerService.java +34 −0 Original line number Diff line number Diff line Loading @@ -1388,6 +1388,7 @@ public class PackageManagerService extends IPackageManager.Stub final @Nullable String mRequiredVerifierPackage; final @NonNull String mRequiredInstallerPackage; final @NonNull String mRequiredUninstallerPackage; final String mRequiredPermissionControllerPackage; final @Nullable String mSetupWizardPackage; final @Nullable String mStorageManagerPackage; final @Nullable String mSystemTextClassifierPackage; Loading Loading @@ -3240,6 +3241,7 @@ public class PackageManagerService extends IPackageManager.Stub mSharedSystemSharedLibraryPackageName = getRequiredSharedLibraryLPr( PackageManager.SYSTEM_SHARED_LIBRARY_SHARED, SharedLibraryInfo.VERSION_UNDEFINED); mRequiredPermissionControllerPackage = getRequiredPermissionsControllerLPr(); } else { mRequiredVerifierPackage = null; mRequiredInstallerPackage = null; Loading @@ -3248,6 +3250,7 @@ public class PackageManagerService extends IPackageManager.Stub mIntentFilterVerifier = null; mServicesSystemSharedLibraryPackageName = null; mSharedSystemSharedLibraryPackageName = null; mRequiredPermissionControllerPackage = null; } mInstallerService = new PackageInstallerService(context, this); Loading Loading @@ -3595,6 +3598,25 @@ public class PackageManagerService extends IPackageManager.Stub return resolveInfo.getComponentInfo().packageName; } private @NonNull String getRequiredPermissionsControllerLPr() { final Intent intent = new Intent(Intent.ACTION_MANAGE_PERMISSIONS); intent.addCategory(Intent.CATEGORY_DEFAULT); final List<ResolveInfo> matches = queryIntentActivitiesInternal(intent, null, MATCH_SYSTEM_ONLY | MATCH_DIRECT_BOOT_AWARE | MATCH_DIRECT_BOOT_UNAWARE, UserHandle.USER_SYSTEM); if (matches.size() == 1) { ResolveInfo resolveInfo = matches.get(0); if (!resolveInfo.activityInfo.applicationInfo.isPrivilegedApp()) { throw new RuntimeException("The permissions manager must be a privileged app"); } return matches.get(0).getComponentInfo().packageName; } else { throw new RuntimeException("There must be exactly one permissions manager; found " + matches); } } private @NonNull ComponentName getIntentFilterVerifierComponentNameLPr() { final Intent intent = new Intent(Intent.ACTION_INTENT_FILTER_NEEDS_VERIFICATION); Loading Loading @@ -5400,6 +5422,12 @@ public class PackageManagerService extends IPackageManager.Stub @Override public String getPermissionControllerPackageName() { synchronized (mPackages) { return mRequiredPermissionControllerPackage; } } String getPackageInstallerPackageName() { synchronized (mPackages) { return mRequiredInstallerPackage; } Loading Loading @@ -14513,6 +14541,12 @@ public class PackageManagerService extends IPackageManager.Stub return false; } if (packageName.equals(mRequiredPermissionControllerPackage)) { Slog.w(TAG, "Cannot suspend package \"" + packageName + "\": required for permissions management"); return false; } if (mProtectedPackages.isPackageStateProtected(userId, packageName)) { Slog.w(TAG, "Cannot suspend package \"" + packageName + "\": protected package");