Index: content/public/android/java/src/org/chromium/content/browser/input/SelectPopupDialog.java |
diff --git a/content/public/android/java/src/org/chromium/content/browser/input/SelectPopupDialog.java b/content/public/android/java/src/org/chromium/content/browser/input/SelectPopupDialog.java |
index 1ebbbf7da49296b4e30f66d4dc529bf798248236..803db1e2c3e0b87ff59251850772a2caabc9700a 100644 |
--- a/content/public/android/java/src/org/chromium/content/browser/input/SelectPopupDialog.java |
+++ b/content/public/android/java/src/org/chromium/content/browser/input/SelectPopupDialog.java |
@@ -29,11 +29,12 @@ public class SelectPopupDialog implements SelectPopup { |
}; |
// The dialog hosting the popup list view. |
- private AlertDialog mListBoxPopup = null; |
- |
+ private final AlertDialog mListBoxPopup; |
private final ContentViewCore mContentViewCore; |
private final Context mContext; |
+ private boolean mSelectionNotified; |
+ |
public SelectPopupDialog(ContentViewCore contentViewCore, List<SelectPopupItem> items, |
boolean multiple, int[] selected) { |
mContentViewCore = contentViewCore; |
@@ -50,14 +51,14 @@ public class SelectPopupDialog implements SelectPopup { |
b.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() { |
@Override |
public void onClick(DialogInterface dialog, int which) { |
- mContentViewCore.selectPopupMenuItems(getSelectedIndices(listView)); |
+ notifySelection(getSelectedIndices(listView)); |
} |
}); |
b.setNegativeButton(android.R.string.cancel, |
new DialogInterface.OnClickListener() { |
@Override |
public void onClick(DialogInterface dialog, int which) { |
- mContentViewCore.selectPopupMenuItems(null); |
+ notifySelection(null); |
} |
}); |
} |
@@ -78,7 +79,7 @@ public class SelectPopupDialog implements SelectPopup { |
@Override |
public void onItemClick(AdapterView<?> parent, View v, |
int position, long id) { |
- mContentViewCore.selectPopupMenuItems(getSelectedIndices(listView)); |
+ notifySelection(getSelectedIndices(listView)); |
mListBoxPopup.dismiss(); |
} |
}); |
@@ -90,7 +91,7 @@ public class SelectPopupDialog implements SelectPopup { |
mListBoxPopup.setOnCancelListener(new DialogInterface.OnCancelListener() { |
@Override |
public void onCancel(DialogInterface dialog) { |
- mContentViewCore.selectPopupMenuItems(null); |
+ notifySelection(null); |
} |
}); |
} |
@@ -104,7 +105,7 @@ public class SelectPopupDialog implements SelectPopup { |
return resourceId; |
} |
- private int[] getSelectedIndices(ListView listView) { |
+ private static int[] getSelectedIndices(ListView listView) { |
jdduke (slow)
2014/09/25 21:43:30
Woo!
|
SparseBooleanArray sparseArray = listView.getCheckedItemPositions(); |
int selectedCount = 0; |
for (int i = 0; i < sparseArray.size(); ++i) { |
@@ -121,6 +122,12 @@ public class SelectPopupDialog implements SelectPopup { |
return indices; |
} |
+ private void notifySelection(int[] indicies) { |
+ if (mSelectionNotified) return; |
+ mContentViewCore.selectPopupMenuItems(indicies); |
+ mSelectionNotified = true; |
+ } |
+ |
@Override |
public void show() { |
mListBoxPopup.show(); |
@@ -129,5 +136,6 @@ public class SelectPopupDialog implements SelectPopup { |
@Override |
public void hide() { |
mListBoxPopup.cancel(); |
+ notifySelection(null); |
} |
} |