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

Commit eaa1c9ae authored by Jeff Sharkey's avatar Jeff Sharkey Committed by android-build-merger
Browse files

Merge \"When uninstalling, only kill the requested user.\" into nyc-dev

am: 060d5a0e

Change-Id: I3975462d7f027cc4fd449c56ba0c5f6442369a1b
parents 26b4be8d 060d5a0e
Loading
Loading
Loading
Loading
+8 −6
Original line number Diff line number Diff line
@@ -1813,12 +1813,13 @@ public abstract class ActivityManagerNative extends Binder implements IActivityM
            return true;
        }

        case KILL_APPLICATION_WITH_APPID_TRANSACTION: {
        case KILL_APPLICATION_TRANSACTION: {
            data.enforceInterface(IActivityManager.descriptor);
            String pkg = data.readString();
            int appid = data.readInt();
            int appId = data.readInt();
            int userId = data.readInt();
            String reason = data.readString();
            killApplicationWithAppId(pkg, appid, reason);
            killApplication(pkg, appId, userId, reason);
            reply.writeNoException();
            return true;
        }
@@ -5291,15 +5292,16 @@ class ActivityManagerProxy implements IActivityManager
        reply.recycle();
    }

    public void killApplicationWithAppId(String pkg, int appid, String reason)
    public void killApplication(String pkg, int appId, int userId, String reason)
            throws RemoteException {
        Parcel data = Parcel.obtain();
        Parcel reply = Parcel.obtain();
        data.writeInterfaceToken(IActivityManager.descriptor);
        data.writeString(pkg);
        data.writeInt(appid);
        data.writeInt(appId);
        data.writeInt(userId);
        data.writeString(reason);
        mRemote.transact(KILL_APPLICATION_WITH_APPID_TRANSACTION, data, reply, 0);
        mRemote.transact(KILL_APPLICATION_TRANSACTION, data, reply, 0);
        reply.readException();
        data.recycle();
        reply.recycle();
+2 −2
Original line number Diff line number Diff line
@@ -398,7 +398,7 @@ public interface IActivityManager extends IInterface {

    public void addPackageDependency(String packageName) throws RemoteException;

    public void killApplicationWithAppId(String pkg, int appid, String reason)
    public void killApplication(String pkg, int appId, int userId, String reason)
            throws RemoteException;

    public void closeSystemDialogs(String reason) throws RemoteException;
@@ -852,7 +852,7 @@ public interface IActivityManager extends IInterface {
    int GET_UID_FOR_INTENT_SENDER_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+92;
    int HANDLE_INCOMING_USER_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+93;
    int ADD_PACKAGE_DEPENDENCY_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+94;
    int KILL_APPLICATION_WITH_APPID_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+95;
    int KILL_APPLICATION_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+95;
    int CLOSE_SYSTEM_DIALOGS_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+96;
    int GET_PROCESS_MEMORY_INFO_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+97;
    int KILL_APPLICATION_PROCESS_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+98;
+3 −2
Original line number Diff line number Diff line
@@ -827,8 +827,9 @@ class MountService extends IMountService.Stub
                if (provider != null) {
                    final IActivityManager am = ActivityManagerNative.getDefault();
                    try {
                        am.killApplicationWithAppId(provider.applicationInfo.packageName,
                                UserHandle.getAppId(provider.applicationInfo.uid), "vold reset");
                        am.killApplication(provider.applicationInfo.packageName,
                                UserHandle.getAppId(provider.applicationInfo.uid),
                                UserHandle.USER_ALL, "vold reset");
                        // We only need to run this once. It will kill all users' media processes.
                        break;
                    } catch (RemoteException e) {
+8 −8
Original line number Diff line number Diff line
@@ -1849,13 +1849,13 @@ public final class ActivityManagerService extends ActivityManagerNative
            } break;
            case KILL_APPLICATION_MSG: {
                synchronized (ActivityManagerService.this) {
                    int appid = msg.arg1;
                    boolean restart = (msg.arg2 == 1);
                    final int appId = msg.arg1;
                    final int userId = msg.arg2;
                    Bundle bundle = (Bundle)msg.obj;
                    String pkg = bundle.getString("pkg");
                    String reason = bundle.getString("reason");
                    forceStopPackageLocked(pkg, appid, restart, false, true, false,
                            false, UserHandle.USER_ALL, reason);
                    forceStopPackageLocked(pkg, appId, false, false, true, false,
                            false, userId, reason);
                }
            } break;
            case FINALIZE_PENDING_INTENT_MSG: {
@@ -5717,12 +5717,12 @@ public final class ActivityManagerService extends ActivityManagerNative
     * The pkg name and app id have to be specified.
     */
    @Override
    public void killApplicationWithAppId(String pkg, int appid, String reason) {
    public void killApplication(String pkg, int appId, int userId, String reason) {
        if (pkg == null) {
            return;
        }
        // Make sure the uid is valid.
        if (appid < 0) {
        if (appId < 0) {
            Slog.w(TAG, "Invalid appid specified for pkg : " + pkg);
            return;
        }
@@ -5731,8 +5731,8 @@ public final class ActivityManagerService extends ActivityManagerNative
        if (UserHandle.getAppId(callerUid) == Process.SYSTEM_UID) {
            // Post an aysnc message to kill the application
            Message msg = mHandler.obtainMessage(KILL_APPLICATION_MSG);
            msg.arg1 = appid;
            msg.arg2 = 0;
            msg.arg1 = appId;
            msg.arg2 = userId;
            Bundle bundle = new Bundle();
            bundle.putString("pkg", pkg);
            bundle.putString("reason", reason);
+42 −14
Original line number Diff line number Diff line
@@ -9542,6 +9542,10 @@ public class PackageManagerService extends IPackageManager.Stub {
    }
    private void killApplication(String pkgName, int appId, String reason) {
        killApplication(pkgName, appId, UserHandle.USER_ALL, reason);
    }
    private void killApplication(String pkgName, int appId, int userId, String reason) {
        // Request the ActivityManager to kill the process(only for existing packages)
        // so that we do not end up in a confused state while the user is still using the older
        // version of the application while the new one gets installed.
@@ -9550,7 +9554,7 @@ public class PackageManagerService extends IPackageManager.Stub {
            IActivityManager am = ActivityManagerNative.getDefault();
            if (am != null) {
                try {
                    am.killApplicationWithAppId(pkgName, appId, reason);
                    am.killApplication(pkgName, appId, userId, reason);
                } catch (RemoteException e) {
                }
            }
@@ -15563,10 +15567,10 @@ public class PackageManagerService extends IPackageManager.Stub {
        final PackageRemovedInfo info = new PackageRemovedInfo();
        final boolean res;
        final UserHandle removeForUser = (deleteFlags & PackageManager.DELETE_ALL_USERS) != 0
                ? UserHandle.ALL : new UserHandle(userId);
        final int removeUser = (deleteFlags & PackageManager.DELETE_ALL_USERS) != 0
                ? UserHandle.USER_ALL : userId;
        if (isPackageDeviceAdmin(packageName, removeForUser.getIdentifier())) {
        if (isPackageDeviceAdmin(packageName, removeUser)) {
            Slog.w(TAG, "Not removing package " + packageName + ": has active device admin");
            return PackageManager.DELETE_FAILED_DEVICE_POLICY_MANAGER;
        }
@@ -15586,11 +15590,21 @@ public class PackageManagerService extends IPackageManager.Stub {
            info.origUsers = uninstalledPs.queryInstalledUsers(allUsers, true);
        }
        final int freezeUser;
        if (isUpdatedSystemApp(uninstalledPs)
                && ((deleteFlags & PackageManager.DELETE_SYSTEM_APP) == 0)) {
            // We're downgrading a system app, which will apply to all users, so
            // freeze them all during the downgrade
            freezeUser = UserHandle.USER_ALL;
        } else {
            freezeUser = removeUser;
        }
        synchronized (mInstallLock) {
            if (DEBUG_REMOVE) Slog.d(TAG, "deletePackageX: pkg=" + packageName + " user=" + userId);
            try (PackageFreezer freezer = freezePackageForDelete(packageName, deleteFlags,
                    "deletePackageX")) {
                res = deletePackageLIF(packageName, removeForUser, true, allUsers,
            try (PackageFreezer freezer = freezePackageForDelete(packageName, freezeUser,
                    deleteFlags, "deletePackageX")) {
                res = deletePackageLIF(packageName, UserHandle.of(removeUser), true, allUsers,
                        deleteFlags | REMOVE_CHATTY, info, true, null);
            }
            synchronized (mPackages) {
@@ -19845,24 +19859,38 @@ Slog.v(TAG, ":: stepped forward, applying functor at tag " + parser.getName());
    }
    public PackageFreezer freezePackage(String packageName, String killReason) {
        return new PackageFreezer(packageName, killReason);
        return freezePackage(packageName, UserHandle.USER_ALL, killReason);
    }
    public PackageFreezer freezePackage(String packageName, int userId, String killReason) {
        return new PackageFreezer(packageName, userId, killReason);
    }
    public PackageFreezer freezePackageForInstall(String packageName, int installFlags,
            String killReason) {
        return freezePackageForInstall(packageName, UserHandle.USER_ALL, installFlags, killReason);
    }
    public PackageFreezer freezePackageForInstall(String packageName, int userId, int installFlags,
            String killReason) {
        if ((installFlags & PackageManager.INSTALL_DONT_KILL_APP) != 0) {
            return new PackageFreezer();
        } else {
            return freezePackage(packageName, killReason);
            return freezePackage(packageName, userId, killReason);
        }
    }
    public PackageFreezer freezePackageForDelete(String packageName, int deleteFlags,
            String killReason) {
        return freezePackageForDelete(packageName, UserHandle.USER_ALL, deleteFlags, killReason);
    }
    public PackageFreezer freezePackageForDelete(String packageName, int userId, int deleteFlags,
            String killReason) {
        if ((deleteFlags & PackageManager.DELETE_DONT_KILL_APP) != 0) {
            return new PackageFreezer();
        } else {
            return freezePackage(packageName, killReason);
            return freezePackage(packageName, userId, killReason);
        }
    }
@@ -19893,14 +19921,14 @@ Slog.v(TAG, ":: stepped forward, applying functor at tag " + parser.getName());
            mCloseGuard.open("close");
        }
        public PackageFreezer(String packageName, String killReason) {
        public PackageFreezer(String packageName, int userId, String killReason) {
            synchronized (mPackages) {
                mPackageName = packageName;
                mWeFroze = mFrozenPackages.add(mPackageName);
                final PackageSetting ps = mSettings.mPackages.get(mPackageName);
                if (ps != null) {
                    killApplication(ps.name, ps.appId, killReason);
                    killApplication(ps.name, ps.appId, userId, killReason);
                }
                final PackageParser.Package p = mPackages.get(packageName);
@@ -19909,7 +19937,7 @@ Slog.v(TAG, ":: stepped forward, applying functor at tag " + parser.getName());
                    mChildren = new PackageFreezer[N];
                    for (int i = 0; i < N; i++) {
                        mChildren[i] = new PackageFreezer(p.childPackages.get(i).packageName,
                                killReason);
                                userId, killReason);
                    }
                } else {
                    mChildren = null;
@@ -20048,7 +20076,7 @@ Slog.v(TAG, ":: stepped forward, applying functor at tag " + parser.getName());
            seinfo = pkg.applicationInfo.seinfo;
            label = String.valueOf(pm.getApplicationLabel(pkg.applicationInfo));
            targetSdkVersion = pkg.applicationInfo.targetSdkVersion;
            freezer = new PackageFreezer(packageName, "movePackageInternal");
            freezer = freezePackage(packageName, "movePackageInternal");
            installedUserIds = ps.queryInstalledUsers(sUserManager.getUserIds(), true);
        }