Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 86d98183 authored by Essence Cain's avatar Essence Cain Committed by Android (Google) Code Review
Browse files

Merge "Check for emergency installer attribute and permission to trigger an...

Merge "Check for emergency installer attribute and permission to trigger an emergency uninstall" into main
parents 0800d12c 83bd143d
Loading
Loading
Loading
Loading
+9 −0
Original line number Diff line number Diff line
@@ -1445,6 +1445,15 @@ public class PackageInstallerService extends IPackageInstaller.Stub implements
                    .createEvent(DevicePolicyEnums.UNINSTALL_PACKAGE)
                    .setAdmin(callerPackageName)
                    .write();
        } else if (PackageInstallerSession.isEmergencyInstallerEnabled(callerPackageName, snapshot,
                userId, callingUid)) {
            // Need to clear the calling identity to get DELETE_PACKAGES permission
            final long ident = Binder.clearCallingIdentity();
            try {
                mPm.deletePackageVersioned(versionedPackage, adapter.getBinder(), userId, flags);
            } finally {
                Binder.restoreCallingIdentity(ident);
            }
        } else {
            ApplicationInfo appInfo = snapshot.getApplicationInfo(callerPackageName, 0, userId);
            if (appInfo.targetSdkVersion >= Build.VERSION_CODES.P) {
+5 −4
Original line number Diff line number Diff line
@@ -966,7 +966,8 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub {
                getInstallSource().mInstallerPackageName, mInstallerUid);
    }

    private boolean isEmergencyInstallerEnabled(String packageName, Computer snapshot) {
    static boolean isEmergencyInstallerEnabled(String packageName, Computer snapshot, int userId,
            int installerUid) {
        final PackageStateInternal ps = snapshot.getPackageStateInternal(packageName);
        if (ps == null || ps.getPkg() == null || !ps.isSystem()) {
            return false;
@@ -974,7 +975,7 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub {
        int uid = UserHandle.getUid(userId, ps.getAppId());
        String emergencyInstaller = ps.getPkg().getEmergencyInstaller();
        if (emergencyInstaller == null || !ArrayUtils.contains(
                snapshot.getPackagesForUid(mInstallerUid), emergencyInstaller)) {
                snapshot.getPackagesForUid(installerUid), emergencyInstaller)) {
            return false;
        }
        // Only system installers can have an emergency installer
@@ -987,7 +988,7 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub {
            return false;
        }
        return (snapshot.checkUidPermission(Manifest.permission.EMERGENCY_INSTALL_PACKAGES,
                mInstallerUid) == PackageManager.PERMISSION_GRANTED);
                installerUid) == PackageManager.PERMISSION_GRANTED);
    }

    private static final int USER_ACTION_NOT_NEEDED = 0;
@@ -1075,7 +1076,7 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub {
                getInstallerPackageName());
        final boolean isSelfUpdate = targetPackageUid == mInstallerUid;
        final boolean isEmergencyInstall =
                isEmergencyInstallerEnabled(packageName, snapshot);
                isEmergencyInstallerEnabled(packageName, snapshot, userId, mInstallerUid);
        final boolean isPermissionGranted = isInstallPermissionGranted
                || (isUpdatePermissionGranted && isUpdate)
                || (isSelfUpdatePermissionGranted && isSelfUpdate)