MasterClearpublic class MasterClear extends android.app.Activity Confirm and execute a reset of the device to a clean "just out of the box"
state. Multiple confirmations are required: first, a general "are you sure
you want to do this?" prompt, followed by a keyguard pattern trace if the user
has defined one, followed by a final strongly-worded "THIS WILL ERASE EVERYTHING
ON THE PHONE" prompt. If at any time the phone is allowed to go to sleep, is
locked, et cetera, then the confirmation sequence is abandoned. |
Fields Summary |
---|
private static final int | KEYGUARD_REQUEST | private android.view.LayoutInflater | mInflater | private com.android.internal.widget.LockPatternUtils | mLockUtils | private android.view.View | mInitialView | private android.widget.Button | mInitiateButton | private android.view.View | mFinalView | private android.widget.Button | mFinalButton | private Button.OnClickListener | mFinalClickListenerThe user has gone through the multiple confirmation, so now we go ahead
and invoke the Checkin Service to reset the device to its factory-default
state (rebooting in the process). | private Button.OnClickListener | mInitiateListenerIf the user clicks to begin the reset sequence, we next require a
keyguard confirmation if the user has currently enabled one. If there
is no keyguard available, we simply go to the final confirmation prompt. |
Methods Summary |
---|
private void | establishFinalConfirmationState()Configure the UI for the final confirmation interaction
if (mFinalView == null) {
mFinalView = mInflater.inflate(R.layout.master_clear_final, null);
mFinalButton =
(Button) mFinalView.findViewById(R.id.execute_master_clear);
mFinalButton.setOnClickListener(mFinalClickListener);
}
setContentView(mFinalView);
| private void | establishInitialState()In its initial state, the activity presents a button for the user to
click in order to initiate a confirmation sequence. This method is
called from various other points in the code to reset the activity to
this base state.
Reinflating views from resources is expensive and prevents us from
caching widget pointers, so we use a single-inflate pattern: we lazy-
inflate each view, caching all of the widget pointers we'll need at the
time, then simply reuse the inflated views directly whenever we need
to change contents.
if (mInitialView == null) {
mInitialView = mInflater.inflate(R.layout.master_clear_primary, null);
mInitiateButton =
(Button) mInitialView.findViewById(R.id.initiate_master_clear);
mInitiateButton.setOnClickListener(mInitiateListener);
}
setContentView(mInitialView);
| protected void | onActivityResult(int requestCode, int resultCode, android.content.Intent data)
super.onActivityResult(requestCode, resultCode, data);
if (requestCode != KEYGUARD_REQUEST) {
return;
}
// If the user entered a valid keyguard trace, present the final
// confirmation prompt; otherwise, go back to the initial state.
if (resultCode == Activity.RESULT_OK) {
establishFinalConfirmationState();
} else {
establishInitialState();
}
| protected void | onCreate(android.os.Bundle savedState)
super.onCreate(savedState);
mInitialView = null;
mFinalView = null;
mInflater = LayoutInflater.from(this);
mLockUtils = new LockPatternUtils(getContentResolver());
establishInitialState();
| public void | onPause()Abandon all progress through the confirmation sequence by returning
to the initial view any time the activity is interrupted (e.g. by
idle timeout).
super.onPause();
establishInitialState();
| private void | runKeyguardConfirmation()Keyguard validation is run using the standard {@link ConfirmLockPattern}
component as a subactivity
final Intent intent = new Intent();
intent.setClassName("com.android.settings",
"com.android.settings.ConfirmLockPattern");
// supply header and footer text in the intent
intent.putExtra(ConfirmLockPattern.HEADER_TEXT,
getText(R.string.master_clear_gesture_prompt));
intent.putExtra(ConfirmLockPattern.FOOTER_TEXT,
getText(R.string.master_clear_gesture_explanation));
startActivityForResult(intent, KEYGUARD_REQUEST);
|
|