Index: chrome/android/java/src/org/chromium/chrome/browser/sync/ui/PassphraseCreationDialogFragment.java |
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/sync/ui/PassphraseCreationDialogFragment.java b/chrome/android/java/src/org/chromium/chrome/browser/sync/ui/PassphraseCreationDialogFragment.java |
index 6693e13bab5317de38769bb913850290c218513c..a015c0ea03dd78be69b0675affd489a47208009c 100644 |
--- a/chrome/android/java/src/org/chromium/chrome/browser/sync/ui/PassphraseCreationDialogFragment.java |
+++ b/chrome/android/java/src/org/chromium/chrome/browser/sync/ui/PassphraseCreationDialogFragment.java |
@@ -7,7 +7,6 @@ package org.chromium.chrome.browser.sync.ui; |
import android.app.AlertDialog; |
import android.app.Dialog; |
import android.app.DialogFragment; |
-import android.content.DialogInterface; |
import android.os.Bundle; |
import android.text.Editable; |
import android.text.TextWatcher; |
@@ -26,18 +25,18 @@ import org.chromium.chrome.R; |
/** |
* Dialog to ask the user to enter a new custom passphrase. |
*/ |
-public class PassphraseCreationDialogFragment extends DialogFragment implements |
- DialogInterface.OnClickListener { |
+public class PassphraseCreationDialogFragment extends DialogFragment { |
+ private EditText mEnterPassphrase; |
private EditText mConfirmPassphrase; |
@Override |
public Dialog onCreateDialog(Bundle savedInstanceState) { |
super.onCreateDialog(savedInstanceState); |
LayoutInflater inflater = getActivity().getLayoutInflater(); |
- View v = inflater.inflate(R.layout.sync_custom_passphrase, null); |
- final EditText passphrase = (EditText) v.findViewById(R.id.passphrase); |
- mConfirmPassphrase = (EditText) v.findViewById(R.id.confirm_passphrase); |
+ View view = inflater.inflate(R.layout.sync_custom_passphrase, null); |
+ mEnterPassphrase = (EditText) view.findViewById(R.id.passphrase); |
+ mConfirmPassphrase = (EditText) view.findViewById(R.id.confirm_passphrase); |
// Check the value of the passphrases when they change |
TextWatcher validator = new TextWatcher() { |
@@ -51,17 +50,24 @@ public class PassphraseCreationDialogFragment extends DialogFragment implements |
@Override |
public void afterTextChanged(Editable s) { |
- validatePassphraseText(passphrase, mConfirmPassphrase); |
+ String confirmString = mConfirmPassphrase.getText().toString(); |
+ // Only set an error string if either the 'confirm' box has text in it |
+ // or it has focus. |
+ if (mConfirmPassphrase.hasFocus() || !confirmString.isEmpty()) { |
+ showErrorIfInvalid(); |
+ } else { |
+ mConfirmPassphrase.setError(null); |
+ } |
} |
}; |
- passphrase.addTextChangedListener(validator); |
+ mEnterPassphrase.addTextChangedListener(validator); |
mConfirmPassphrase.addTextChangedListener(validator); |
// Make sure to display the error text on first entry. |
mConfirmPassphrase.setOnFocusChangeListener(new OnFocusChangeListener() { |
@Override |
public void onFocusChange(View v, boolean hasFocus) { |
- validatePassphraseText(passphrase, mConfirmPassphrase); |
+ showErrorIfInvalid(); |
} |
}); |
@@ -72,7 +78,7 @@ public class PassphraseCreationDialogFragment extends DialogFragment implements |
@Override |
public boolean onKey(View v, int keyCode, KeyEvent event) { |
if (event.getAction() == KeyEvent.ACTION_UP) { |
- validatePassphraseText(passphrase, mConfirmPassphrase); |
+ showErrorIfInvalid(); |
} |
return false; |
} |
@@ -82,54 +88,59 @@ public class PassphraseCreationDialogFragment extends DialogFragment implements |
@Override |
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { |
if (actionId == EditorInfo.IME_ACTION_DONE) { |
- validatePassphraseText(passphrase, mConfirmPassphrase); |
- // Disable OK button if passphrases do not match. |
- final AlertDialog dialog = (AlertDialog) getDialog(); |
- if (dialog != null) { |
- dialog.getButton(AlertDialog.BUTTON_POSITIVE) |
- .setEnabled(mConfirmPassphrase.getError() == null); |
- } |
+ showErrorIfInvalid(); |
} |
return false; |
} |
}); |
return new AlertDialog.Builder(getActivity(), AlertDialog.THEME_HOLO_LIGHT) |
- .setView(v) |
+ .setView(view) |
.setTitle(R.string.sync_passphrase_type_custom) |
- .setPositiveButton(R.string.ok, this) |
- .setNegativeButton(R.string.cancel, this) |
+ .setPositiveButton(R.string.ok, null) |
+ .setNegativeButton(R.string.cancel, null) |
.create(); |
} |
- private void validatePassphraseText(EditText passphrase, EditText confirmPassphrase) { |
- String str1 = passphrase.getText().toString(); |
- String str2 = confirmPassphrase.getText().toString(); |
- |
- // Only set an error string if either the 'confirm' box has text in it |
- // or it has focus. |
- String msg = null; |
- if (confirmPassphrase.hasFocus() || !str2.isEmpty()) { |
- if (str2.isEmpty()) { |
- msg = getString(R.string.sync_passphrase_cannot_be_blank); |
- } else if (!str2.equals(str1)) { |
- msg = getString(R.string.sync_passphrases_do_not_match); |
+ @Override |
+ public void onStart() { |
+ super.onStart(); |
+ final AlertDialog d = (AlertDialog) getDialog(); |
+ // Override the button's onClick listener. The default gets set in the dialog's onCreate, |
+ // when it is shown (in super.onStart()), so we have to do this here. Otherwise the dialog |
+ // will close when the button is clicked regardless of what else we do. |
+ d.getButton(Dialog.BUTTON_POSITIVE).setOnClickListener(new View.OnClickListener() { |
+ @Override |
+ public void onClick(View v) { |
+ if (isValidPassphraseText()) { |
+ PassphraseDialogFragment.Listener listener = |
+ (PassphraseDialogFragment.Listener) getTargetFragment(); |
+ String passphrase = mConfirmPassphrase.getText().toString(); |
+ listener.onPassphraseEntered(passphrase, false, true); |
+ d.dismiss(); |
+ } else { |
+ showErrorIfInvalid(); |
+ } |
} |
- } |
- confirmPassphrase.setError(msg); |
+ }); |
} |
- @Override |
- public void onClick(DialogInterface dialog, int which) { |
- if (which == AlertDialog.BUTTON_POSITIVE) { |
- if (mConfirmPassphrase.getError() == null) { |
- PassphraseDialogFragment.Listener listener = |
- (PassphraseDialogFragment.Listener) getTargetFragment(); |
- String passphrase = mConfirmPassphrase.getText().toString(); |
- listener.onPassphraseEntered(passphrase, false, true); |
- } |
- } else if (which == AlertDialog.BUTTON_NEGATIVE) { |
- dismiss(); |
+ private boolean isValidPassphraseText() { |
+ String str1 = mEnterPassphrase.getText().toString(); |
+ String str2 = mConfirmPassphrase.getText().toString(); |
+ return !str1.isEmpty() && str1.equals(str2); |
+ } |
+ |
+ private void showErrorIfInvalid() { |
+ String str1 = mEnterPassphrase.getText().toString(); |
+ String str2 = mConfirmPassphrase.getText().toString(); |
+ |
+ String msg = null; |
+ if (str1.isEmpty()) { |
+ msg = getString(R.string.sync_passphrase_cannot_be_blank); |
+ } else if (!str1.equals(str2)) { |
+ msg = getString(R.string.sync_passphrases_do_not_match); |
} |
+ mConfirmPassphrase.setError(msg); |
} |
} |