Fix for 1785342: The old PIN is required after entering New PIN
State of dialogs was not properly maintained across pause/resume.
diff --git a/src/com/android/settings/EditPinPreference.java b/src/com/android/settings/EditPinPreference.java
index ee3143c..362bed1 100644
--- a/src/com/android/settings/EditPinPreference.java
+++ b/src/com/android/settings/EditPinPreference.java
@@ -16,6 +16,7 @@
package com.android.settings;
+import android.app.Dialog;
import android.content.Context;
import android.preference.EditTextPreference;
import android.text.method.DigitsKeyListener;
@@ -24,15 +25,11 @@
import android.view.View;
import android.widget.EditText;
-import java.util.Map;
-
/**
* TODO: Add a soft dialpad for PIN entry.
*/
class EditPinPreference extends EditTextPreference {
- private boolean mDialogOpen;
-
interface OnPinEnteredListener {
void onPinEntered(EditPinPreference preference, boolean positiveResult);
}
@@ -50,13 +47,13 @@
public void setOnPinEnteredListener(OnPinEnteredListener listener) {
mPinListener = listener;
}
-
+
@Override
protected void onBindDialogView(View view) {
super.onBindDialogView(view);
-
+
final EditText editText = (EditText) view.findViewById(android.R.id.edit);
-
+
if (editText != null) {
editText.setSingleLine(true);
editText.setTransformationMethod(PasswordTransformationMethod.getInstance());
@@ -65,20 +62,22 @@
}
public boolean isDialogOpen() {
- return mDialogOpen;
+ Dialog dialog = getDialog();
+ return dialog != null && dialog.isShowing();
}
-
+
@Override
protected void onDialogClosed(boolean positiveResult) {
super.onDialogClosed(positiveResult);
- mDialogOpen = false;
if (mPinListener != null) {
mPinListener.onPinEntered(this, positiveResult);
}
}
-
+
public void showPinDialog() {
- mDialogOpen = true;
- showDialog(null);
+ Dialog dialog = getDialog();
+ if (dialog == null || !dialog.isShowing()) {
+ showDialog(null);
+ }
}
}