Index: chrome/android/java_staging/src/org/chromium/chrome/browser/omnibox/OmniboxResultsAdapter.java |
diff --git a/chrome/android/java_staging/src/org/chromium/chrome/browser/omnibox/OmniboxResultsAdapter.java b/chrome/android/java_staging/src/org/chromium/chrome/browser/omnibox/OmniboxResultsAdapter.java |
new file mode 100644 |
index 0000000000000000000000000000000000000000..e0d3e389388a99e042266d3fc2a7173b1c22eb84 |
--- /dev/null |
+++ b/chrome/android/java_staging/src/org/chromium/chrome/browser/omnibox/OmniboxResultsAdapter.java |
@@ -0,0 +1,202 @@ |
+// Copyright 2015 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+package org.chromium.chrome.browser.omnibox; |
+ |
+import android.content.Context; |
+import android.view.View; |
+import android.view.ViewGroup; |
+import android.widget.BaseAdapter; |
+ |
+import org.chromium.base.VisibleForTesting; |
+ |
+import java.util.List; |
+ |
+/** |
+ * Adapter for providing data and views to the omnibox results list. |
+ */ |
+@VisibleForTesting |
+public class OmniboxResultsAdapter extends BaseAdapter { |
+ |
+ private final List<OmniboxResultItem> mSuggestionItems; |
+ private final Context mContext; |
+ private final LocationBar mLocationBar; |
+ private OmniboxSuggestionDelegate mSuggestionDelegate; |
+ private boolean mUseDarkColors = true; |
+ |
+ public OmniboxResultsAdapter( |
+ Context context, |
+ LocationBar locationBar, |
+ List<OmniboxResultItem> suggestionItems) { |
+ mContext = context; |
+ mLocationBar = locationBar; |
+ mSuggestionItems = suggestionItems; |
+ } |
+ |
+ public void notifySuggestionsChanged() { |
+ notifyDataSetChanged(); |
+ } |
+ |
+ @Override |
+ public int getCount() { |
+ return mSuggestionItems.size(); |
+ } |
+ |
+ @Override |
+ public Object getItem(int position) { |
+ return mSuggestionItems.get(position); |
+ } |
+ |
+ @Override |
+ public long getItemId(int position) { |
+ return position; |
+ } |
+ |
+ @Override |
+ public View getView(int position, View convertView, ViewGroup parent) { |
+ SuggestionView suggestionView; |
+ if (convertView != null && convertView instanceof SuggestionView) { |
+ suggestionView = (SuggestionView) convertView; |
+ } else { |
+ suggestionView = new SuggestionView(mContext, mLocationBar); |
+ } |
+ suggestionView.init( |
+ mSuggestionItems.get(position), mSuggestionDelegate, position, mUseDarkColors); |
+ return suggestionView; |
+ } |
+ |
+ /** |
+ * Set the selection delegate for suggestion entries in the adapter. |
+ * |
+ * @param delegate The delegate for suggestion selections. |
+ */ |
+ public void setSuggestionDelegate(OmniboxSuggestionDelegate delegate) { |
+ mSuggestionDelegate = delegate; |
+ } |
+ |
+ /** |
+ * @return The selection delegate for suggestion entries in the adapter. |
+ */ |
+ @VisibleForTesting |
+ public OmniboxSuggestionDelegate getSuggestionDelegate() { |
+ return mSuggestionDelegate; |
+ } |
+ |
+ /** |
+ * Specifies the visual state to be used by the suggestions. |
+ * @param useDarkColors Whether dark colors should be used for fonts and icons. |
+ */ |
+ public void setUseDarkColors(boolean useDarkColors) { |
+ mUseDarkColors = useDarkColors; |
+ } |
+ |
+ /** |
+ * Handler for actions that happen on suggestion view. |
+ */ |
+ @VisibleForTesting |
+ public static interface OmniboxSuggestionDelegate { |
+ /** |
+ * Triggered when the user selects one of the omnibox suggestions to navigate to. |
+ * @param suggestion The OmniboxSuggestion which was selected. |
+ * @param position Position of the suggestion in the drop down view. |
+ */ |
+ public void onSelection(OmniboxSuggestion suggestion, int position); |
+ |
+ /** |
+ * Triggered when the user selects to refine one of the omnibox suggestions. |
+ * @param suggestion |
+ */ |
+ public void onRefineSuggestion(OmniboxSuggestion suggestion); |
+ |
+ /** |
+ * Triggered when the user navigates to one of the suggestions without clicking on it. |
+ * @param suggestion |
+ */ |
+ public void onSetUrlToSuggestion(OmniboxSuggestion suggestion); |
+ |
+ /** |
+ * Triggered before we show a modal dialog triggered through suggestions UI (e.g. the |
+ * delete suggestions confirmation dialog). |
+ */ |
+ public void onShowModal(); |
+ |
+ /** |
+ * Triggered during the modal dialog dismissal. |
+ */ |
+ public void onHideModal(); |
+ |
+ /** |
+ * Triggered when the user indicates they want to delete a suggestion. |
+ * @param position The position of the suggestion in the drop down view. |
+ */ |
+ public void onDeleteSuggestion(int position); |
+ |
+ /** |
+ * Triggered when the user touches the suggestion view. |
+ */ |
+ public void onGestureDown(); |
+ |
+ /** |
+ * Triggered when text width information is updated. |
+ * These values should be used to calculate max text widths. |
+ * @param requiredWidth a new required width. |
+ * @param matchContentsWidth a new match contents width. |
+ */ |
+ public void onTextWidthsUpdated(float requiredWidth, float matchContentsWidth); |
+ |
+ /** |
+ * @return max required width for the suggestion. |
+ */ |
+ public float getMaxRequiredWidth(); |
+ |
+ /** |
+ * @return max match contents width for the suggestion. |
+ */ |
+ public float getMaxMatchContentsWidth(); |
+ } |
+ |
+ /** |
+ * Simple wrapper around the omnibox suggestions provided in the backend and the query that |
+ * matched it. |
+ */ |
+ @VisibleForTesting |
+ public static class OmniboxResultItem { |
+ private final OmniboxSuggestion mSuggestion; |
+ private final String mMatchedQuery; |
+ |
+ public OmniboxResultItem(OmniboxSuggestion suggestion, String matchedQuery) { |
+ mSuggestion = suggestion; |
+ mMatchedQuery = matchedQuery; |
+ } |
+ |
+ /** |
+ * @return The omnibox suggestion for this item. |
+ */ |
+ public OmniboxSuggestion getSuggestion() { |
+ return mSuggestion; |
+ } |
+ |
+ /** |
+ * @return The user query that triggered this suggestion to be shown. |
+ */ |
+ public String getMatchedQuery() { |
+ return mMatchedQuery; |
+ } |
+ |
+ @Override |
+ public boolean equals(Object o) { |
+ if (!(o instanceof OmniboxResultItem)) { |
+ return false; |
+ } |
+ |
+ OmniboxResultItem item = (OmniboxResultItem) o; |
+ return mMatchedQuery.equals(item.mMatchedQuery) && mSuggestion.equals(item.mSuggestion); |
+ } |
+ |
+ @Override |
+ public int hashCode() { |
+ return 53 * mMatchedQuery.hashCode() ^ mSuggestion.hashCode(); |
+ } |
+ } |
+} |