19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/* 29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2008 The Android Open Source Project 39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * you may not use this file except in compliance with the License. 69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * You may obtain a copy of the License at 79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See the License for the specific language governing permissions and 149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * limitations under the License. 159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpackage com.android.server; 189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1918e939623556928f73fcc7511c85a537929a4a7eDan Egnorimport android.content.BroadcastReceiver; 209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.Context; 219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.Intent; 2218e939623556928f73fcc7511c85a537929a4a7eDan Egnorimport android.os.RecoverySystem; 239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.util.Log; 248a9b22056b13477f59df934928c00c58b5871c95Joe Onoratoimport android.util.Slog; 259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2618e939623556928f73fcc7511c85a537929a4a7eDan Egnorimport java.io.IOException; 279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2818e939623556928f73fcc7511c85a537929a4a7eDan Egnorpublic class MasterClearReceiver extends BroadcastReceiver { 299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static final String TAG = "MasterClear"; 309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 32424991704b5fb7a64f6cf0fcc3f4b1aabbf2a2e0Dianne Hackborn public void onReceive(final Context context, final Intent intent) { 3397ecc9cbe7eccafc0923d7655daf07f4c2ea9791Wei Huang if (intent.getAction().equals(Intent.ACTION_REMOTE_INTENT)) { 3463cfebf2dbe628508cccc10f47754fdacd48c1a0Costin Manolache if (!"google.com".equals(intent.getStringExtra("from"))) { 358a9b22056b13477f59df934928c00c58b5871c95Joe Onorato Slog.w(TAG, "Ignoring master clear request -- not from trusted server."); 369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return; 379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3918e939623556928f73fcc7511c85a537929a4a7eDan Egnor 40424991704b5fb7a64f6cf0fcc3f4b1aabbf2a2e0Dianne Hackborn Slog.w(TAG, "!!! FACTORY RESET !!!"); 41424991704b5fb7a64f6cf0fcc3f4b1aabbf2a2e0Dianne Hackborn // The reboot call is blocking, so we need to do it on another thread. 42424991704b5fb7a64f6cf0fcc3f4b1aabbf2a2e0Dianne Hackborn Thread thr = new Thread("Reboot") { 43424991704b5fb7a64f6cf0fcc3f4b1aabbf2a2e0Dianne Hackborn @Override 44424991704b5fb7a64f6cf0fcc3f4b1aabbf2a2e0Dianne Hackborn public void run() { 45424991704b5fb7a64f6cf0fcc3f4b1aabbf2a2e0Dianne Hackborn try { 4633651201375d3670672964503994c410b8eeed7bDoug Zongker RecoverySystem.rebootWipeUserData(context); 47424991704b5fb7a64f6cf0fcc3f4b1aabbf2a2e0Dianne Hackborn Log.wtf(TAG, "Still running after master clear?!"); 48424991704b5fb7a64f6cf0fcc3f4b1aabbf2a2e0Dianne Hackborn } catch (IOException e) { 49424991704b5fb7a64f6cf0fcc3f4b1aabbf2a2e0Dianne Hackborn Slog.e(TAG, "Can't perform master clear/factory reset", e); 50424991704b5fb7a64f6cf0fcc3f4b1aabbf2a2e0Dianne Hackborn } 519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 52424991704b5fb7a64f6cf0fcc3f4b1aabbf2a2e0Dianne Hackborn }; 53424991704b5fb7a64f6cf0fcc3f4b1aabbf2a2e0Dianne Hackborn thr.start(); 549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 56