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

Commit c22e6d15 authored by Suprabh Shukla's avatar Suprabh Shukla Committed by android-build-merger
Browse files

DO NOT MERGE Do not call RecoverySystem with DPMS lock held

am: 835c8b3d

Change-Id: I080d11d3d7d6434b832f8ecb1ee93c17a6d7cb4a
parents 40d0753b 835c8b3d
Loading
Loading
Loading
Loading
+28 −23
Original line number Diff line number Diff line
@@ -2980,7 +2980,7 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub {
        return false;
    }

    private void wipeDataLocked(boolean wipeExtRequested, String reason) {
    private void wipeDataNoLock(boolean wipeExtRequested, String reason) {
        // If the SD card is encrypted and non-removable, we have to force a wipe.
        boolean forceExtWipe = !Environment.isExternalStorageRemovable() && isExtStorageEncrypted();

@@ -3007,13 +3007,13 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub {
            return;
        }
        enforceCrossUserPermission(userHandle);
        final String source;
        synchronized (this) {
            // This API can only be called by an active device admin,
            // so try to retrieve it to check that the caller is one.
            final ActiveAdmin admin = getActiveAdminForCallerLocked(null,
                    DeviceAdminInfo.USES_POLICY_WIPE_DATA);

            final String source;
            final ComponentName cname = admin.info.getComponent();
            if (cname != null) {
                source = cname.flattenToShortString();
@@ -3035,18 +3035,20 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub {
                        manager.wipe();
                    }
                }
                boolean wipeExtRequested = (flags & WIPE_EXTERNAL_STORAGE) != 0;
                wipeDeviceOrUserLocked(wipeExtRequested, userHandle,
                        "DevicePolicyManager.wipeData() from " + source);
            } finally {
                Binder.restoreCallingIdentity(ident);
            }
        }
        boolean wipeExtRequested = (flags & WIPE_EXTERNAL_STORAGE) != 0;
        wipeDeviceNoLock(wipeExtRequested, userHandle,
                "DevicePolicyManager.wipeData() from " + source);
    }

    private void wipeDeviceOrUserLocked(boolean wipeExtRequested, final int userHandle, String reason) {
    private void wipeDeviceNoLock(boolean wipeExtRequested, final int userHandle, String reason) {
        final long iden = Binder.clearCallingIdentity();
        try {
            if (userHandle == UserHandle.USER_OWNER) {
            wipeDataLocked(wipeExtRequested, reason);
                wipeDataNoLock(wipeExtRequested, reason);
            } else {
                mHandler.post(new Runnable() {
                    public void run() {
@@ -3064,6 +3066,9 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub {
                    }
                });
            }
        } finally {
            Binder.restoreCallingIdentity(iden);
        }
    }

    public void getRemoveWarning(ComponentName comp, final RemoteCallback result, int userHandle) {
@@ -3201,7 +3206,7 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub {
            }
            if (wipeData) {
                // Call without holding lock.
                wipeDeviceOrUserLocked(false, identifier,
                wipeDeviceNoLock(false, identifier,
                        "reportFailedPasswordAttempt()");
            }
        } finally {