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

Commit b2905092 authored by Amith Yamasani's avatar Amith Yamasani Committed by Android Git Automerger
Browse files

am 0702752c: Merge "Potential fix for accidental deactivation of profile owner" into lmp-mr1-dev

* commit '0702752c':
  Potential fix for accidental deactivation of profile owner
parents 971fe6d6 0702752c
Loading
Loading
Loading
Loading
+20 −10
Original line number Diff line number Diff line
@@ -303,8 +303,6 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub {
            if (Intent.ACTION_USER_REMOVED.equals(action)) {
                removeUserData(userHandle);
            } else if (Intent.ACTION_USER_STARTED.equals(action)
                    || Intent.ACTION_PACKAGE_CHANGED.equals(action)
                    || Intent.ACTION_PACKAGE_REMOVED.equals(action)
                    || Intent.ACTION_EXTERNAL_APPLICATIONS_UNAVAILABLE.equals(action)) {

                if (Intent.ACTION_USER_STARTED.equals(action)) {
@@ -313,8 +311,14 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub {
                        mUserData.remove(userHandle);
                    }
                }

                handlePackagesChanged(userHandle);
                handlePackagesChanged(null /* check all admins */, userHandle);
            } else if (Intent.ACTION_PACKAGE_CHANGED.equals(action)
                    || (Intent.ACTION_PACKAGE_ADDED.equals(action)
                            && intent.getBooleanExtra(Intent.EXTRA_REPLACING, false))) {
                handlePackagesChanged(intent.getData().getSchemeSpecificPart(), userHandle);
            } else if (Intent.ACTION_PACKAGE_REMOVED.equals(action)
                    && !intent.getBooleanExtra(Intent.EXTRA_REPLACING, false)) {
                handlePackagesChanged(intent.getData().getSchemeSpecificPart(), userHandle);
            }
        }
    };
@@ -899,7 +903,7 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub {
        }
    }

    private void handlePackagesChanged(int userHandle) {
    private void handlePackagesChanged(String packageName, int userHandle) {
        boolean removed = false;
        if (DBG) Slog.d(LOG_TAG, "Handling package changes for user " + userHandle);
        DevicePolicyData policy = getUserData(userHandle);
@@ -908,12 +912,18 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub {
            for (int i = policy.mAdminList.size() - 1; i >= 0; i--) {
                ActiveAdmin aa = policy.mAdminList.get(i);
                try {
                    if (pm.getPackageInfo(aa.info.getPackageName(), 0, userHandle) == null
                            || pm.getReceiverInfo(aa.info.getComponent(), 0, userHandle) == null) {
                    // If we're checking all packages or if the specific one we're checking matches,
                    // then check if the package and receiver still exist.
                    final String adminPackage = aa.info.getPackageName();
                    if (packageName == null || packageName.equals(adminPackage)) {
                        if (pm.getPackageInfo(adminPackage, 0, userHandle) == null
                                || pm.getReceiverInfo(aa.info.getComponent(), 0, userHandle)
                                    == null) {
                            removed = true;
                            policy.mAdminList.remove(i);
                            policy.mAdminMap.remove(aa.info.getComponent());
                        }
                    }
                } catch (RemoteException re) {
                    // Shouldn't happen
                }