Index: chrome/android/java/src/org/chromium/chrome/browser/autofill/AutofillPopupBridge.java |
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/autofill/AutofillPopupBridge.java b/chrome/android/java/src/org/chromium/chrome/browser/autofill/AutofillPopupBridge.java |
index 773632c8f9175f2550fe1f78ebc09b86e98e29c4..147f6a934ad5b8f1b47d5d9e4f2e6aa9ce4e2cf1 100644 |
--- a/chrome/android/java/src/org/chromium/chrome/browser/autofill/AutofillPopupBridge.java |
+++ b/chrome/android/java/src/org/chromium/chrome/browser/autofill/AutofillPopupBridge.java |
@@ -5,10 +5,14 @@ |
package org.chromium.chrome.browser.autofill; |
import android.app.Activity; |
+import android.content.Context; |
+import android.content.DialogInterface; |
import android.os.Handler; |
+import android.support.v7.app.AlertDialog; |
import org.chromium.base.CalledByNative; |
import org.chromium.base.JNINamespace; |
+import org.chromium.chrome.R; |
import org.chromium.chrome.browser.ResourceId; |
import org.chromium.ui.DropdownItem; |
import org.chromium.ui.autofill.AutofillPopup; |
@@ -21,9 +25,11 @@ import org.chromium.ui.base.WindowAndroid; |
* JNI call glue for AutofillExternalDelagate C++ and Java objects. |
*/ |
@JNINamespace("autofill") |
-public class AutofillPopupBridge implements AutofillPopupDelegate{ |
+public class AutofillPopupBridge implements AutofillPopupDelegate, DialogInterface.OnClickListener { |
private final long mNativeAutofillPopup; |
private final AutofillPopup mAutofillPopup; |
+ private AlertDialog mDeletionDialog; |
+ private final Context mContext; |
public AutofillPopupBridge(long nativeAutofillPopupViewAndroid, WindowAndroid windowAndroid, |
ViewAndroidDelegate containerViewDelegate) { |
@@ -31,6 +37,7 @@ public class AutofillPopupBridge implements AutofillPopupDelegate{ |
Activity activity = windowAndroid.getActivity().get(); |
if (activity == null) { |
mAutofillPopup = null; |
+ mContext = null; |
// Clean up the native counterpart. This is posted to allow the native counterpart |
// to fully finish the construction of this glue object before we attempt to delete it. |
new Handler().post(new Runnable() { |
@@ -41,6 +48,7 @@ public class AutofillPopupBridge implements AutofillPopupDelegate{ |
}); |
} else { |
mAutofillPopup = new AutofillPopup(activity, containerViewDelegate, this); |
+ mContext = activity; |
} |
} |
@@ -61,12 +69,24 @@ public class AutofillPopupBridge implements AutofillPopupDelegate{ |
nativeSuggestionSelected(mNativeAutofillPopup, listIndex); |
} |
+ @Override |
+ public void deleteSuggestion(int listIndex) { |
+ nativeDeletionRequested(mNativeAutofillPopup, listIndex); |
+ } |
+ |
+ @Override |
+ public void onClick(DialogInterface dialog, int which) { |
+ assert which == DialogInterface.BUTTON_POSITIVE; |
+ nativeDeletionConfirmed(mNativeAutofillPopup); |
+ } |
+ |
/** |
* Hides the Autofill Popup and removes its anchor from the ContainerView. |
*/ |
@CalledByNative |
private void dismiss() { |
if (mAutofillPopup != null) mAutofillPopup.dismiss(); |
+ if (mDeletionDialog != null) mDeletionDialog.dismiss(); |
} |
/** |
@@ -90,6 +110,17 @@ public class AutofillPopupBridge implements AutofillPopupDelegate{ |
if (mAutofillPopup != null) mAutofillPopup.setAnchorRect(x, y, width, height); |
} |
+ @CalledByNative |
+ private void confirmDeletion(String title, String body) { |
+ mDeletionDialog = new AlertDialog.Builder(mContext, R.style.AlertDialogTheme) |
+ .setTitle(title) |
+ .setMessage(body) |
+ .setNegativeButton(R.string.cancel, null) |
+ .setPositiveButton(R.string.ok, this) |
+ .create(); |
+ mDeletionDialog.show(); |
+ } |
+ |
// Helper methods for AutofillSuggestion |
@CalledByNative |
@@ -104,15 +135,19 @@ public class AutofillPopupBridge implements AutofillPopupDelegate{ |
* @param sublabel Second line of the suggestion. |
* @param iconId The resource ID for the icon associated with the suggestion, or 0 for no icon. |
* @param suggestionId Identifier for the suggestion type. |
+ * @param deletable Whether this item is deletable. |
*/ |
@CalledByNative |
private static void addToAutofillSuggestionArray(AutofillSuggestion[] array, int index, |
- String label, String sublabel, int iconId, int suggestionId) { |
+ String label, String sublabel, int iconId, int suggestionId, boolean deletable) { |
int drawableId = iconId == 0 ? DropdownItem.NO_ICON : ResourceId.mapToDrawableId(iconId); |
- array[index] = new AutofillSuggestion(label, sublabel, drawableId, suggestionId); |
+ array[index] = new AutofillSuggestion(label, sublabel, drawableId, suggestionId, deletable); |
} |
- private native void nativePopupDismissed(long nativeAutofillPopupViewAndroid); |
private native void nativeSuggestionSelected(long nativeAutofillPopupViewAndroid, |
int listIndex); |
+ private native void nativeDeletionRequested(long nativeAutofillPopupViewAndroid, |
+ int listIndex); |
+ private native void nativeDeletionConfirmed(long nativeAutofillPopupViewAndroid); |
+ private native void nativePopupDismissed(long nativeAutofillPopupViewAndroid); |
} |