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

Commit ed9fa2ca authored by Makoto Onuki's avatar Makoto Onuki
Browse files

If package has no active admins, just uninstall right away

Also fix the bug where removeAdminArtifacts() is called
for all active admins on the target user.

Bug 27107878

Change-Id: I6edbdadffe8c75628539976d304e39d6abed73a4
parent 960170c6
Loading
Loading
Loading
Loading
+22 −16
Original line number Original line Diff line number Diff line
@@ -8498,27 +8498,33 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub {
            mPackagesToRemove.add(packageUserPair);
            mPackagesToRemove.add(packageUserPair);
        }
        }


        final List<ComponentName> activeAdminsList = getActiveAdmins(userId);
        // All active admins on the user.
        if (activeAdminsList == null || activeAdminsList.size() == 0) {
        final List<ComponentName> allActiveAdmins = getActiveAdmins(userId);
            startUninstallIntent(packageName, userId);
            return;
        }


        for (ComponentName activeAdmin : activeAdminsList) {
        // Active admins in the target package.
        final List<ComponentName> packageActiveAdmins = new ArrayList<>();
        if (allActiveAdmins != null) {
            for (ComponentName activeAdmin : allActiveAdmins) {
                if (packageName.equals(activeAdmin.getPackageName())) {
                if (packageName.equals(activeAdmin.getPackageName())) {
                    packageActiveAdmins.add(activeAdmin);
                    removeActiveAdmin(activeAdmin, userId);
                    removeActiveAdmin(activeAdmin, userId);
                }
                }
            }
            }
        }
        if (packageActiveAdmins.size() == 0) {
            startUninstallIntent(packageName, userId);
        } else {
            mHandler.postDelayed(new Runnable() {
            mHandler.postDelayed(new Runnable() {
                @Override
                @Override
                public void run() {
                public void run() {
                for (ComponentName activeAdmin : activeAdminsList) {
                    for (ComponentName activeAdmin : packageActiveAdmins) {
                        removeAdminArtifacts(activeAdmin, userId);
                        removeAdminArtifacts(activeAdmin, userId);
                    }
                    }
                    startUninstallIntent(packageName, userId);
                    startUninstallIntent(packageName, userId);
                }
                }
            }, DEVICE_ADMIN_DEACTIVATE_TIMEOUT); // Start uninstall after timeout anyway.
            }, DEVICE_ADMIN_DEACTIVATE_TIMEOUT); // Start uninstall after timeout anyway.
        }
        }
    }


    private void removePackageIfRequired(final String packageName, final int userId) {
    private void removePackageIfRequired(final String packageName, final int userId) {
        if (!packageHasActiveAdmins(packageName, userId)) {
        if (!packageHasActiveAdmins(packageName, userId)) {