Index: ui/android/java/src/org/chromium/ui/ColorSuggestionListAdapter.java |
diff --git a/ui/android/java/src/org/chromium/ui/ColorSuggestionListAdapter.java b/ui/android/java/src/org/chromium/ui/ColorSuggestionListAdapter.java |
new file mode 100644 |
index 0000000000000000000000000000000000000000..04bccea22326de098fb27fa2d96ded49c46f7b2a |
--- /dev/null |
+++ b/ui/android/java/src/org/chromium/ui/ColorSuggestionListAdapter.java |
@@ -0,0 +1,146 @@ |
+// Copyright 2013 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.ui; |
+ |
+import android.content.Context; |
+import android.graphics.Color; |
+import android.graphics.drawable.GradientDrawable; |
+import android.graphics.drawable.LayerDrawable; |
+import android.text.TextUtils; |
+import android.view.LayoutInflater; |
+import android.view.View; |
+import android.view.ViewGroup; |
+import android.widget.AbsListView; |
+import android.widget.BaseAdapter; |
+import android.widget.GridView; |
+import android.widget.LinearLayout; |
+ |
+import org.chromium.base.ApiCompatibilityUtils; |
+ |
+import java.util.ArrayList; |
+ |
+/** |
+ * The adapter used to populate ColorPickerSimple. |
+ */ |
+public class ColorSuggestionListAdapter extends BaseAdapter implements View.OnClickListener { |
+ private Context mContext; |
+ private ColorSuggestion[] mSuggestions; |
+ private OnColorSuggestionClickListener mListener; |
+ |
+ /** |
+ * The callback used to indicate the user has clicked on a suggestion. |
+ */ |
+ public interface OnColorSuggestionClickListener { |
+ |
+ /** |
+ * Called upon a click on a suggestion. |
+ * |
+ * @param suggestion The suggestion that was clicked. |
+ */ |
+ void onColorSuggestionClick(ColorSuggestion suggestion); |
+ } |
+ |
+ private final static int COLORS_PER_ROW = 4; |
+ |
+ ColorSuggestionListAdapter(Context context, ColorSuggestion[] suggestions) { |
+ mContext = context; |
+ mSuggestions = suggestions; |
+ } |
+ |
+ /** |
+ * Sets the listener that will be notified upon a click on a suggestion. |
+ */ |
+ public void setOnColorSuggestionClickListener(OnColorSuggestionClickListener listener) { |
+ mListener = listener; |
+ } |
+ |
+ /** |
+ * Sets up the color button to represent a color suggestion. |
+ * |
+ * @param button The button view to set up. |
+ * @param index The index of the suggestion in mSuggestions. |
+ */ |
+ private void setUpColorButton(View button, int index) { |
+ if (index >= mSuggestions.length) { |
+ button.setTag(null); |
+ button.setContentDescription(null); |
+ button.setVisibility(View.INVISIBLE); |
+ return; |
+ } |
+ button.setTag(mSuggestions[index]); |
+ button.setVisibility(View.VISIBLE); |
+ ColorSuggestion suggestion = mSuggestions[index]; |
+ LayerDrawable layers = (LayerDrawable) button.getBackground(); |
+ GradientDrawable swatch = |
+ (GradientDrawable) layers.findDrawableByLayerId(R.id.color_button_swatch); |
+ swatch.setColor(suggestion.mColor); |
+ String description = suggestion.mLabel; |
+ if (TextUtils.isEmpty(description)) { |
+ description = String.format("#%06X", (0xFFFFFF & suggestion.mColor)); |
+ } |
+ button.setContentDescription(description); |
+ button.setOnClickListener(this); |
+ } |
+ |
+ @Override |
+ public void onClick(View v) { |
+ if (mListener == null) { |
+ return; |
+ } |
+ ColorSuggestion suggestion = (ColorSuggestion) v.getTag(); |
+ if (suggestion == null) { |
+ return; |
+ } |
+ mListener.onColorSuggestionClick(suggestion); |
+ } |
+ |
+ @Override |
+ public View getView(int position, View convertView, ViewGroup parent) { |
+ LinearLayout layout; |
+ if (convertView != null && convertView instanceof LinearLayout) { |
+ layout = (LinearLayout) convertView; |
+ } else { |
+ layout = new LinearLayout(mContext); |
+ layout.setLayoutParams(new AbsListView.LayoutParams( |
+ AbsListView.LayoutParams.MATCH_PARENT, |
+ AbsListView.LayoutParams.WRAP_CONTENT)); |
+ layout.setOrientation(LinearLayout.HORIZONTAL); |
+ layout.setBackgroundColor(Color.WHITE); |
+ int buttonHeight = |
+ mContext.getResources().getDimensionPixelOffset(R.dimen.color_button_height); |
+ for (int i = 0; i < COLORS_PER_ROW; ++i) { |
+ View button = new View(mContext); |
+ LinearLayout.LayoutParams layoutParams = |
+ new LinearLayout.LayoutParams(0, buttonHeight, 1f); |
+ ApiCompatibilityUtils.setMarginStart(layoutParams, -1); |
+ if (i == COLORS_PER_ROW - 1) { |
+ ApiCompatibilityUtils.setMarginEnd(layoutParams, -1); |
+ } |
+ button.setLayoutParams(layoutParams); |
+ button.setBackgroundResource(R.drawable.color_button_background); |
+ layout.addView(button); |
+ } |
+ } |
+ for (int i = 0; i < COLORS_PER_ROW; ++i) { |
+ setUpColorButton(layout.getChildAt(i), position * COLORS_PER_ROW + i); |
+ } |
+ return layout; |
+ } |
+ |
+ @Override |
+ public long getItemId(int position) { |
+ return position; |
+ } |
+ |
+ @Override |
+ public Object getItem(int position) { |
+ return null; |
+ } |
+ |
+ @Override |
+ public int getCount() { |
+ return (mSuggestions.length + COLORS_PER_ROW - 1) / COLORS_PER_ROW; |
+ } |
+} |