| Index: chrome/android/java/src/org/chromium/chrome/browser/ItemChooserDialog.java
|
| diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ItemChooserDialog.java b/chrome/android/java/src/org/chromium/chrome/browser/ItemChooserDialog.java
|
| index 934bb24594042aeb263d7f948f33f7a6718892e0..1596fb5149c4b98062b878c172d7f8a99bb001f4 100644
|
| --- a/chrome/android/java/src/org/chromium/chrome/browser/ItemChooserDialog.java
|
| +++ b/chrome/android/java/src/org/chromium/chrome/browser/ItemChooserDialog.java
|
| @@ -64,7 +64,7 @@ public class ItemChooserDialog {
|
| */
|
| public static class ItemChooserRow {
|
| private final String mKey;
|
| - private final String mDescription;
|
| + private String mDescription;
|
|
|
| public ItemChooserRow(String key, String description) {
|
| mKey = key;
|
| @@ -148,6 +148,9 @@ public class ItemChooserDialog {
|
| // Item descriptions are counted in a map.
|
| private Map<String, Integer> mItemDescriptionMap = new HashMap<>();
|
|
|
| + // Map of keys to items so that we can access the items in O(1).
|
| + private Map<String, ItemChooserRow> mKeyToItemMap = new HashMap<>();
|
| +
|
| public ItemAdapter(Context context, int resource) {
|
| super(context, resource);
|
|
|
| @@ -159,17 +162,25 @@ public class ItemChooserDialog {
|
| R.color.default_text_color);
|
| }
|
|
|
| - @Override
|
| - public void add(ItemChooserRow item) {
|
| + public void addOrUpdate(ItemChooserRow item) {
|
| + if (mKeyToItemMap.containsKey(item.mKey)) {
|
| + // TODO(ortuno): Update description.
|
| + // https://crbug.com/634366
|
| + return;
|
| + }
|
| + ItemChooserRow result = mKeyToItemMap.put(item.mKey, item);
|
| + assert result == null;
|
| +
|
| String description = item.mDescription;
|
| int count = mItemDescriptionMap.containsKey(description)
|
| ? mItemDescriptionMap.get(description) : 0;
|
| mItemDescriptionMap.put(description, count + 1);
|
| - super.add(item);
|
| + add(item);
|
| }
|
|
|
| @Override
|
| public void remove(ItemChooserRow item) {
|
| + mKeyToItemMap.remove(item.mKey);
|
| String description = item.mDescription;
|
| if (mItemDescriptionMap.containsKey(description)) {
|
| int count = mItemDescriptionMap.get(description);
|
| @@ -185,6 +196,7 @@ public class ItemChooserDialog {
|
| @Override
|
| public void clear() {
|
| mSelectedItem = ListView.INVALID_POSITION;
|
| + mKeyToItemMap.clear();
|
| mDisabledEntries.clear();
|
| mItemDescriptionMap.clear();
|
| mConfirmButton.setEnabled(false);
|
| @@ -414,13 +426,14 @@ public class ItemChooserDialog {
|
| }
|
|
|
| /**
|
| - * Add an item to the end of the list to show in the dialog.
|
| + * Add an item to the end of the list to show in the dialog if the item
|
| + * was not in the chooser. Otherwise update the items description.
|
| *
|
| - * @param item The item to be added to the end of the chooser.
|
| + * @param item The item to be added to the end of the chooser or updated.
|
| */
|
| - public void addItemToList(ItemChooserRow item) {
|
| + public void addOrUpdateItem(ItemChooserRow item) {
|
| mProgressBar.setVisibility(View.GONE);
|
| - mItemAdapter.add(item);
|
| + mItemAdapter.addOrUpdate(item);
|
| setState(State.PROGRESS_UPDATE_AVAILABLE);
|
| }
|
|
|
|
|