Implement issue #3094621 and #3094609 - wipe sd card

3094621: add "wipe sd card" option to factory data reset
3094609: collapse unmount/format into one command

Also since we have decided that it is important to consider
the Crespo storage as internal storage, DevicePolicyManager
gets a new API to be able to wipe it.  (No big deal, since
all of the work for this is now done in the implementation
of the new UI.)

Change-Id: I32a77c410f710a87dcdcbf6586c09bd2e48a8807
This commit is contained in:
Dianne Hackborn
2010-10-15 18:45:07 -07:00
parent 77c011ba75
commit 424991704b
9 changed files with 325 additions and 18 deletions

View File

@@ -17,6 +17,7 @@
package com.android.server;
import com.android.internal.content.PackageMonitor;
import com.android.internal.os.storage.ExternalStorageFormatter;
import com.android.internal.util.FastXmlSerializer;
import com.android.internal.util.JournaledFile;
import com.android.internal.util.XmlUtils;
@@ -41,6 +42,7 @@ import android.content.pm.PackageManager.NameNotFoundException;
import android.os.Binder;
import android.os.IBinder;
import android.os.IPowerManager;
import android.os.PowerManager;
import android.os.RecoverySystem;
import android.os.RemoteCallback;
import android.os.RemoteException;
@@ -71,6 +73,7 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub {
final Context mContext;
final MyPackageMonitor mMonitor;
final PowerManager.WakeLock mWakeLock;
IPowerManager mIPowerManager;
@@ -216,6 +219,8 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub {
mContext = context;
mMonitor = new MyPackageMonitor();
mMonitor.register(context, true);
mWakeLock = ((PowerManager)context.getSystemService(Context.POWER_SERVICE))
.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "DPM");
}
private IPowerManager getIPowerManager() {
@@ -862,10 +867,17 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub {
}
void wipeDataLocked(int flags) {
try {
RecoverySystem.rebootWipeUserData(mContext);
} catch (IOException e) {
Slog.w(TAG, "Failed requesting data wipe", e);
if ((flags&DevicePolicyManager.WIPE_EXTERNAL_STORAGE) != 0) {
Intent intent = new Intent(ExternalStorageFormatter.FORMAT_AND_FACTORY_RESET);
intent.setComponent(ExternalStorageFormatter.COMPONENT_NAME);
mWakeLock.acquire(10000);
mContext.startService(intent);
} else {
try {
RecoverySystem.rebootWipeUserData(mContext);
} catch (IOException e) {
Slog.w(TAG, "Failed requesting data wipe", e);
}
}
}