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