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

Commit 72a51220 authored by cretin45's avatar cretin45
Browse files

Settings: Ensure user has to wait 30 before retrying pattern

Issue-id: FEIJ-257, FEIJ-273

Change-Id: I08f16c6863ca5bbdb586d756da813453124851b2
parent 73a08eea
Loading
Loading
Loading
Loading
+39 −9
Original line number Diff line number Diff line
@@ -46,9 +46,12 @@ public class LockPatternActivity extends Activity implements OnNotifyAccountRese
    public static final String PATTERN_LOCK_PROTECTED_APPS = "pattern_lock_protected_apps";
    public static final String RECREATE_PATTERN = "recreate_pattern_lock";

    private static String TIMEOUT_PREF_KEY = "retry_timeout";

    private static final int MIN_PATTERN_SIZE = 4;
    private static final int MAX_PATTERN_RETRY = 5;
    private static final int PATTERN_CLEAR_TIMEOUT_MS = 2000;
    private static final long FAILED_ATTEMPT_RETRY = 30;

    private static final int MENU_RESET = 0;

@@ -68,6 +71,7 @@ public class LockPatternActivity extends Activity implements OnNotifyAccountRese
    boolean mRetryPattern = true;
    boolean mConfirming = false;
    boolean mFingerPrintSetUp = false;
    boolean mRetryLocked = false;

    private FingerprintManager mFingerprintManager;
    private FingerprintUiHelper mFingerPrintUiHelper;
@@ -137,14 +141,16 @@ public class LockPatternActivity extends Activity implements OnNotifyAccountRese
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        menu.clear();
        if (!mCreate) {
        menu.add(0, MENU_RESET, 0, R.string.lockpattern_reset_button)
                .setIcon(R.drawable.ic_lockscreen_ime_white)
                .setAlphabeticShortcut('r')
                .setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM |
                        MenuItem.SHOW_AS_ACTION_WITH_TEXT);
        mItem = menu.findItem(0);
        if (mRetryLocked) {
            mItem.setIcon(R.drawable.ic_settings_lockscreen_white);
        }

        return true;
    }

@@ -173,6 +179,9 @@ public class LockPatternActivity extends Activity implements OnNotifyAccountRese
    }

    private void switchToPattern(boolean reset) {
        if (isRetryLocked()) {
            return;
        }
        if (reset) {
            resetPatternState(false);
        }
@@ -188,7 +197,9 @@ public class LockPatternActivity extends Activity implements OnNotifyAccountRese
    private void switchToAccount() {
        mPatternLockHeader.setText(getResources()
                .getString(R.string.lockpattern_settings_reset_summary));
        if (mItem != null) {
            mItem.setIcon(R.drawable.ic_settings_lockscreen_white);
        }
        mAccountView.setVisibility(View.VISIBLE);
        mLockPatternView.setVisibility(View.GONE);
    }
@@ -340,10 +351,12 @@ public class LockPatternActivity extends Activity implements OnNotifyAccountRese
                    mLockPatternView.postDelayed(mCancelPatternRunnable, PATTERN_CLEAR_TIMEOUT_MS);

                    if (mRetry >= MAX_PATTERN_RETRY) {
                        setPatternTimeout();
                        mLockPatternView.removeCallbacks(mCancelPatternRunnable);
                        Toast.makeText(getApplicationContext(),
                                getResources().getString(
                                        R.string.lockpattern_too_many_failed_confirmation_attempts),
                                        R.string.lockpattern_too_many_failed_confirmation_attempts,
                                        FAILED_ATTEMPT_RETRY),
                                Toast.LENGTH_SHORT).show();
                        switchToAccount();
                    }
@@ -396,5 +409,22 @@ public class LockPatternActivity extends Activity implements OnNotifyAccountRese
            mPatternLockHeader.setText(getString(R.string.pa_pattern_or_fingerprint_header));
            mFingerPrintUiHelper.startListening();
        }
        if (isRetryLocked()) {
            invalidateOptionsMenu();
            switchToAccount();
        }
    }

    private boolean isRetryLocked() {
        long time = System.currentTimeMillis();
        SharedPreferences prefs = getSharedPreferences(getPackageName(), MODE_PRIVATE);
        long retryTime = prefs.getLong(TIMEOUT_PREF_KEY, 0);
        mRetryLocked = (time - retryTime) < (FAILED_ATTEMPT_RETRY * 1000);
        return mRetryLocked;
    }

    private void setPatternTimeout() {
        SharedPreferences prefs = getSharedPreferences(getPackageName(), MODE_PRIVATE);
        prefs.edit().putLong(TIMEOUT_PREF_KEY, System.currentTimeMillis()).apply();
    }
}