DO NOT MERGE Do not call RecoverySystem with DPMS lock held am: 2317451acc

am: 01f971dcdc

Change-Id: If5f5e5d47b97e2b8480adc5ca2cb08702056ca87
This commit is contained in:
Makoto Onuki
2017-02-02 01:10:43 +00:00
committed by android-build-merger

View File

@@ -4677,7 +4677,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);
@@ -4697,13 +4697,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 {
@@ -4718,39 +4719,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);
}
}
@@ -4930,7 +4936,7 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub {
}
if (wipeData) {
// Call without holding lock.
wipeDeviceOrUserLocked(false, identifier,
wipeDeviceNoLock(false, identifier,
"reportFailedPasswordAttempt()");
}
} finally {