Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 2deec7ed authored by Jim Miller's avatar Jim Miller
Browse files

Fix 2594148: confirm PIN/Password before resetting device

This fixes a bug where user was allowed to factory reset the device
without entering their PIN/Password.

It also fixes the same issue with MediaFormat (Settings->SD Card->Format).

Change-Id: I0677a50aa771ad8663513fd7ec398a70953dcde2
parent fc5a0222
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -54,7 +54,7 @@ public class ChooseLockGeneric extends PreferenceActivity {

        if (!mPasswordConfirmed) {
            ChooseLockSettingsHelper helper = new ChooseLockSettingsHelper(this);
            if (!helper.launchConfirmationActivity(CONFIRM_EXISTING_REQUEST)) {
            if (!helper.launchConfirmationActivity(CONFIRM_EXISTING_REQUEST, null, null)) {
                mPasswordConfirmed = true; // no password set, so no need to confirm
                updatePreferencesOrFinish();
            }
+2 −1
Original line number Diff line number Diff line
@@ -119,7 +119,8 @@ public class ChooseLockPassword extends Activity implements OnClickListener, OnE
        if (savedInstanceState == null) {
            updateStage(Stage.Introduction);
            if (confirmCredentials) {
                mChooseLockSettingsHelper.launchConfirmationActivity(CONFIRM_EXISTING_REQUEST);
                mChooseLockSettingsHelper.launchConfirmationActivity(CONFIRM_EXISTING_REQUEST,
                        null, null);
            }
        }
    }
+2 −1
Original line number Diff line number Diff line
@@ -288,7 +288,8 @@ public class ChooseLockPattern extends Activity implements View.OnClickListener{
                // there isn't an existing password or the user confirms their password.
                updateStage(Stage.NeedToConfirm);
                boolean launchedConfirmationActivity =
                    mChooseLockSettingsHelper.launchConfirmationActivity(CONFIRM_EXISTING_REQUEST);
                    mChooseLockSettingsHelper.launchConfirmationActivity(CONFIRM_EXISTING_REQUEST,
                            null, null);
                if (!launchedConfirmationActivity) {
                    updateStage(Stage.Introduction);
                }
+12 −3
Original line number Diff line number Diff line
@@ -37,18 +37,22 @@ public class ChooseLockSettingsHelper {

    /**
     * If a pattern, password or PIN exists, prompt the user before allowing them to change it.
     * @param message optional message to display about the action about to be done
     * @param details optional detail message to display
     * @return true if one exists and we launched an activity to confirm it
     * @see #onActivityResult(int, int, android.content.Intent)
     */
    protected boolean launchConfirmationActivity(int request) {
    protected boolean launchConfirmationActivity(int request,
            CharSequence message, CharSequence details) {
        boolean launched = false;
        switch (mLockPatternUtils.getKeyguardStoredPasswordQuality()) {
            case DevicePolicyManager.PASSWORD_QUALITY_SOMETHING:
                launched = confirmPattern(request);
                launched = confirmPattern(request, message, details);
                break;
            case DevicePolicyManager.PASSWORD_QUALITY_NUMERIC:
            case DevicePolicyManager.PASSWORD_QUALITY_ALPHABETIC:
            case DevicePolicyManager.PASSWORD_QUALITY_ALPHANUMERIC:
                // TODO: update UI layout for ConfirmPassword to show message and details
                launched = confirmPassword(request);
                break;
        }
@@ -57,14 +61,19 @@ public class ChooseLockSettingsHelper {

    /**
     * Launch screen to confirm the existing lock pattern.
     * @param message shown in header of ConfirmLockPattern if not null
     * @param details shown in footer of ConfirmLockPattern if not null
     * @see #onActivityResult(int, int, android.content.Intent)
     * @return true if we launched an activity to confirm pattern
     */
    private boolean confirmPattern(int request) {
    private boolean confirmPattern(int request, CharSequence message, CharSequence details) {
        if (!mLockPatternUtils.isLockPatternEnabled() || !mLockPatternUtils.savedPatternExists()) {
            return false;
        }
        final Intent intent = new Intent();
        // supply header and footer text in the intent
        intent.putExtra(ConfirmLockPattern.HEADER_TEXT, message);
        intent.putExtra(ConfirmLockPattern.FOOTER_TEXT, details);
        intent.setClassName("com.android.settings", "com.android.settings.ConfirmLockPattern");
        mActivity.startActivityForResult(intent, request);
        return true;
+11 −14
Original line number Diff line number Diff line
@@ -71,17 +71,14 @@ public class MasterClear extends Activity {
    /**
     * Keyguard validation is run using the standard {@link ConfirmLockPattern}
     * component as a subactivity
     * @param request the request code to be returned once confirmation finishes
     * @return true if confirmation launched
     */
    private void runKeyguardConfirmation() {
        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,
    private boolean runKeyguardConfirmation(int request) {
        return new ChooseLockSettingsHelper(this)
                .launchConfirmationActivity(request,
                        getText(R.string.master_clear_gesture_prompt),
                        getText(R.string.master_clear_gesture_explanation));
        startActivityForResult(intent, KEYGUARD_REQUEST);
    }

    @Override
@@ -96,6 +93,8 @@ public class MasterClear extends Activity {
        // confirmation prompt; otherwise, go back to the initial state.
        if (resultCode == Activity.RESULT_OK) {
            establishFinalConfirmationState();
        } else if (resultCode == Activity.RESULT_CANCELED) {
            finish();
        } else {
            establishInitialState();
        }
@@ -108,9 +107,7 @@ public class MasterClear extends Activity {
     */
    private Button.OnClickListener mInitiateListener = new Button.OnClickListener() {
            public void onClick(View v) {
                if (mLockUtils.isLockPatternEnabled()) {
                    runKeyguardConfirmation();
                } else {
                if (!runKeyguardConfirmation(KEYGUARD_REQUEST)) {
                    establishFinalConfirmationState();
                }
            }
Loading