diff --git a/res/values/strings.xml b/res/values/strings.xml index 0986634355e..31f2a204873 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -1584,6 +1584,9 @@ Clear + + Screen lock was already changed. Try again with the new screen lock. + Cancel diff --git a/src/com/android/settings/password/ChooseLockPassword.java b/src/com/android/settings/password/ChooseLockPassword.java index c9d1af339d8..16cecc8c013 100644 --- a/src/com/android/settings/password/ChooseLockPassword.java +++ b/src/com/android/settings/password/ChooseLockPassword.java @@ -45,10 +45,10 @@ import android.text.Spannable; import android.text.TextUtils; import android.text.TextWatcher; import android.util.Log; +import android.util.Pair; import android.view.KeyEvent; import android.view.LayoutInflater; import android.view.View; -import android.view.View.OnClickListener; import android.view.ViewGroup; import android.view.inputmethod.EditorInfo; import android.widget.LinearLayout; @@ -1100,12 +1100,11 @@ public class ChooseLockPassword extends SettingsActivity { } @Override - protected Intent saveAndVerifyInBackground() { + protected Pair saveAndVerifyInBackground() { + final boolean success = mUtils.saveLockPassword( + mChosenPassword, mCurrentPassword, mRequestedQuality, mUserId); Intent result = null; - mUtils.saveLockPassword(mChosenPassword, mCurrentPassword, mRequestedQuality, - mUserId); - - if (mHasChallenge) { + if (success && mHasChallenge) { byte[] token; try { token = mUtils.verifyPassword(mChosenPassword, mChallenge, mUserId); @@ -1120,8 +1119,7 @@ public class ChooseLockPassword extends SettingsActivity { result = new Intent(); result.putExtra(ChooseLockSettingsHelper.EXTRA_KEY_CHALLENGE_TOKEN, token); } - - return result; + return Pair.create(success, result); } } } diff --git a/src/com/android/settings/password/ChooseLockPattern.java b/src/com/android/settings/password/ChooseLockPattern.java index d5ad1abfd70..d89ad30f98e 100644 --- a/src/com/android/settings/password/ChooseLockPattern.java +++ b/src/com/android/settings/password/ChooseLockPattern.java @@ -24,6 +24,7 @@ import android.content.res.ColorStateList; import android.content.res.Resources.Theme; import android.os.Bundle; import android.util.Log; +import android.util.Pair; import android.util.TypedValue; import android.view.KeyEvent; import android.view.LayoutInflater; @@ -854,12 +855,11 @@ public class ChooseLockPattern extends SettingsActivity { } @Override - protected Intent saveAndVerifyInBackground() { - Intent result = null; + protected Pair saveAndVerifyInBackground() { final int userId = mUserId; - mUtils.saveLockPattern(mChosenPattern, mCurrentPattern, userId); - - if (mHasChallenge) { + final boolean success = mUtils.saveLockPattern(mChosenPattern, mCurrentPattern, userId); + Intent result = null; + if (success && mHasChallenge) { byte[] token; try { token = mUtils.verifyPattern(mChosenPattern, mChallenge, userId); @@ -874,8 +874,7 @@ public class ChooseLockPattern extends SettingsActivity { result = new Intent(); result.putExtra(ChooseLockSettingsHelper.EXTRA_KEY_CHALLENGE_TOKEN, token); } - - return result; + return Pair.create(success, result); } @Override diff --git a/src/com/android/settings/password/SaveChosenLockWorkerBase.java b/src/com/android/settings/password/SaveChosenLockWorkerBase.java index 5b6a8120eab..2798b3d7f47 100644 --- a/src/com/android/settings/password/SaveChosenLockWorkerBase.java +++ b/src/com/android/settings/password/SaveChosenLockWorkerBase.java @@ -21,10 +21,13 @@ import android.content.Intent; import android.os.AsyncTask; import android.os.Bundle; import android.os.UserManager; +import android.util.Pair; +import android.widget.Toast; import androidx.fragment.app.Fragment; import com.android.internal.widget.LockPatternUtils; +import com.android.settings.R; /** * An invisible retained worker fragment to track the AsyncWork that saves (and optionally @@ -84,7 +87,7 @@ abstract class SaveChosenLockWorkerBase extends Fragment { protected void start() { if (mBlocking) { - finish(saveAndVerifyInBackground()); + finish(saveAndVerifyInBackground().second); } else { new Task().execute(); } @@ -92,9 +95,10 @@ abstract class SaveChosenLockWorkerBase extends Fragment { /** * Executes the save and verify work in background. - * @return Intent with challenge token or null. + * @return pair where the first is a boolean confirming whether the change was successful or not + * and second is the Intent which has the challenge token or is null. */ - protected abstract Intent saveAndVerifyInBackground(); + protected abstract Pair saveAndVerifyInBackground(); protected void finish(Intent resultData) { mFinished = true; @@ -108,19 +112,24 @@ abstract class SaveChosenLockWorkerBase extends Fragment { mBlocking = blocking; } - private class Task extends AsyncTask { + private class Task extends AsyncTask> { + @Override - protected Intent doInBackground(Void... params){ + protected Pair doInBackground(Void... params){ return saveAndVerifyInBackground(); } @Override - protected void onPostExecute(Intent resultData) { - finish(resultData); + protected void onPostExecute(Pair resultData) { + if (!resultData.first) { + Toast.makeText(getContext(), R.string.lockpassword_credential_changed, + Toast.LENGTH_LONG).show(); + } + finish(resultData.second); } } interface Listener { - public void onChosenLockSaveFinished(boolean wasSecureBefore, Intent resultData); + void onChosenLockSaveFinished(boolean wasSecureBefore, Intent resultData); } }