DO NOT MERGE Do not call RecoverySystem with DPMS lock held
am: 2317451acc
Change-Id: Id3441141d4feea4c7291350c9670bd59ec017240
This commit is contained in:
@@ -4552,7 +4552,7 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub {
|
||||
}
|
||||
}
|
||||
|
||||
private void wipeDataLocked(boolean wipeExtRequested, String reason) {
|
||||
private void wipeDataNoLock(boolean wipeExtRequested, String reason) {
|
||||
if (wipeExtRequested) {
|
||||
StorageManager sm = (StorageManager) mContext.getSystemService(
|
||||
Context.STORAGE_SERVICE);
|
||||
@@ -4572,13 +4572,14 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub {
|
||||
}
|
||||
final int userHandle = mInjector.userHandleGetCallingUserId();
|
||||
enforceFullCrossUsersPermission(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 = admin.info.getComponent().flattenToShortString();
|
||||
source = admin.info.getComponent().flattenToShortString();
|
||||
|
||||
long ident = mInjector.binderClearCallingIdentity();
|
||||
try {
|
||||
@@ -4593,39 +4594,44 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub {
|
||||
manager.wipe();
|
||||
}
|
||||
}
|
||||
boolean wipeExtRequested = (flags & WIPE_EXTERNAL_STORAGE) != 0;
|
||||
wipeDeviceOrUserLocked(wipeExtRequested, userHandle,
|
||||
"DevicePolicyManager.wipeData() from " + source);
|
||||
} finally {
|
||||
mInjector.binderRestoreCallingIdentity(ident);
|
||||
}
|
||||
}
|
||||
final boolean wipeExtRequested = (flags & WIPE_EXTERNAL_STORAGE) != 0;
|
||||
wipeDeviceNoLock(wipeExtRequested, userHandle,
|
||||
"DevicePolicyManager.wipeData() from " + source);
|
||||
}
|
||||
|
||||
private void wipeDeviceOrUserLocked(boolean wipeExtRequested, final int userHandle, String reason) {
|
||||
if (userHandle == UserHandle.USER_SYSTEM) {
|
||||
wipeDataLocked(wipeExtRequested, reason);
|
||||
} else {
|
||||
mHandler.post(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
try {
|
||||
IActivityManager am = mInjector.getIActivityManager();
|
||||
if (am.getCurrentUser().id == userHandle) {
|
||||
am.switchUser(UserHandle.USER_SYSTEM);
|
||||
}
|
||||
private void wipeDeviceNoLock(boolean wipeExtRequested, final int userHandle, String reason) {
|
||||
final long ident = mInjector.binderClearCallingIdentity();
|
||||
try {
|
||||
if (userHandle == UserHandle.USER_SYSTEM) {
|
||||
wipeDataNoLock(wipeExtRequested, reason);
|
||||
} else {
|
||||
mHandler.post(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
try {
|
||||
IActivityManager am = mInjector.getIActivityManager();
|
||||
if (am.getCurrentUser().id == userHandle) {
|
||||
am.switchUser(UserHandle.USER_SYSTEM);
|
||||
}
|
||||
|
||||
boolean isManagedProfile = isManagedProfile(userHandle);
|
||||
if (!mUserManager.removeUser(userHandle)) {
|
||||
Slog.w(LOG_TAG, "Couldn't remove user " + userHandle);
|
||||
} else if (isManagedProfile) {
|
||||
sendWipeProfileNotification();
|
||||
boolean isManagedProfile = isManagedProfile(userHandle);
|
||||
if (!mUserManager.removeUser(userHandle)) {
|
||||
Slog.w(LOG_TAG, "Couldn't remove user " + userHandle);
|
||||
} else if (isManagedProfile) {
|
||||
sendWipeProfileNotification();
|
||||
}
|
||||
} catch (RemoteException re) {
|
||||
// Shouldn't happen
|
||||
}
|
||||
} catch (RemoteException re) {
|
||||
// Shouldn't happen
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
} finally {
|
||||
mInjector.binderRestoreCallingIdentity(ident);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4805,7 +4811,7 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub {
|
||||
}
|
||||
if (wipeData) {
|
||||
// Call without holding lock.
|
||||
wipeDeviceOrUserLocked(false, identifier,
|
||||
wipeDeviceNoLock(false, identifier,
|
||||
"reportFailedPasswordAttempt()");
|
||||
}
|
||||
} finally {
|
||||
|
||||
Reference in New Issue
Block a user