summaryrefslogtreecommitdiffstats
path: root/chrome/android
diff options
context:
space:
mode:
Diffstat (limited to 'chrome/android')
-rw-r--r--chrome/android/java/src/org/chromium/chrome/browser/autofill/AutofillDialog.java14
-rw-r--r--chrome/android/java/src/org/chromium/chrome/browser/autofill/AutofillDialogGlue.java13
2 files changed, 25 insertions, 2 deletions
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/autofill/AutofillDialog.java b/chrome/android/java/src/org/chromium/chrome/browser/autofill/AutofillDialog.java
index 658c3cc..1194ebc 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/autofill/AutofillDialog.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/autofill/AutofillDialog.java
@@ -286,8 +286,8 @@ public class AutofillDialog extends AlertDialog
* Dismisses the dialog.
**/
private void internalDismiss() {
- mDelegate.dialogDismissed();
super.dismiss();
+ mDelegate.dialogDismissed();
}
/**
@@ -301,6 +301,9 @@ public class AutofillDialog extends AlertDialog
@Override
public void onClick(DialogInterface dialog, int which) {
+ // The buttons will be updated as the result of a controller callback or a layout change.
+ disableButtons();
+
// Note that the dialog will NOT be dismissed automatically.
if (!mContentView.isInEditingMode()) {
if (which == AlertDialog.BUTTON_POSITIVE) {
@@ -367,6 +370,15 @@ public class AutofillDialog extends AlertDialog
}
/**
+ * Disables the dialog buttons.
+ */
+ private void disableButtons() {
+ getButton(BUTTON_NEGATIVE).setEnabled(false);
+ getButton(BUTTON_POSITIVE).setEnabled(false);
+ mTitleView.setAccountChooserEnabled(false);
+ }
+
+ /**
* Updates the buttons state for the given mode.
* @param mode The layout mode.
*/
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/autofill/AutofillDialogGlue.java b/chrome/android/java/src/org/chromium/chrome/browser/autofill/AutofillDialogGlue.java
index 20d1a17..8f3b196 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/autofill/AutofillDialogGlue.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/autofill/AutofillDialogGlue.java
@@ -5,6 +5,7 @@
package org.chromium.chrome.browser.autofill;
import android.graphics.Bitmap;
+import android.os.Handler;
import org.chromium.base.CalledByNative;
import org.chromium.base.JNINamespace;
@@ -214,7 +215,17 @@ public class AutofillDialogGlue implements AutofillDialogDelegate,
@Override
public void dialogDismissed() {
- if (mNativeDialogPopup != 0) nativeDialogDismissed(mNativeDialogPopup);
+ if (mNativeDialogPopup == 0) return;
+
+ // The controller doesn't expect to get deleted synchronously, so
+ // we postpone the call. onDestroy might be called before, so we
+ // need to check if the native side is still alive.
+ new Handler().post(new Runnable() {
+ @Override
+ public void run() {
+ if (mNativeDialogPopup != 0) nativeDialogDismissed(mNativeDialogPopup);
+ }
+ });
}
@Override