Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(102)

Unified Diff: ui/android/java/src/org/chromium/ui/ColorSuggestionListAdapter.java

Issue 23026006: Add support for color input datalist on Android (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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;
+ }
+}
« no previous file with comments | « ui/android/java/src/org/chromium/ui/ColorSuggestion.java ('k') | ui/android/java/strings/android_ui_strings.grd » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698