Eliminate dependencies on Checkin, replacing checkin events with EventLog
events (and in one case, a DropBox entry).
Add a simple intent that triggers master-clear (and toggle EFS), given the
right permissions.
Bug: 2264596
Bug: 2350452
Bug: 2264596
diff --git a/services/java/com/android/server/MasterClearReceiver.java b/services/java/com/android/server/MasterClearReceiver.java
index 3c366da..ab0eb81 100644
--- a/services/java/com/android/server/MasterClearReceiver.java
+++ b/services/java/com/android/server/MasterClearReceiver.java
@@ -16,16 +16,15 @@
package com.android.server;
+import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
-import android.content.BroadcastReceiver;
-import android.os.RemoteException;
-import android.os.ICheckinService;
-import android.os.ServiceManager;
+import android.os.RecoverySystem;
import android.util.Log;
-public class MasterClearReceiver extends BroadcastReceiver {
+import java.io.IOException;
+public class MasterClearReceiver extends BroadcastReceiver {
private static final String TAG = "MasterClear";
@Override
@@ -36,18 +35,17 @@
return;
}
}
- Log.w(TAG, "!!! FACTORY RESETTING DEVICE !!!");
- ICheckinService service =
- ICheckinService.Stub.asInterface(
- ServiceManager.getService("checkin"));
- if (service != null) {
- try {
- // This RPC should never return.
- service.masterClear();
- } catch (RemoteException e) {
- Log.w("MasterClear",
- "Unable to invoke ICheckinService.masterClear()");
+
+ try {
+ Log.w(TAG, "!!! FACTORY RESET !!!");
+ if (intent.hasExtra("enableEFS")) {
+ RecoverySystem.rebootToggleEFS(context, intent.getBooleanExtra("enableEFS", false));
+ } else {
+ RecoverySystem.rebootWipeUserData(context);
}
+ Log.wtf(TAG, "Still running after master clear?!");
+ } catch (IOException e) {
+ Log.e(TAG, "Can't perform master clear/factory reset", e);
}
}
}