OLD | NEW |
| (Empty) |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | |
2 // Use of this source code is governed by a BSD-style license that can be | |
3 // found in the LICENSE file. | |
4 | |
5 package org.chromium.ui; | |
6 | |
7 import android.content.Context; | |
8 import android.graphics.Color; | |
9 import android.graphics.drawable.GradientDrawable; | |
10 import android.graphics.drawable.LayerDrawable; | |
11 import android.text.TextUtils; | |
12 import android.view.View; | |
13 import android.view.ViewGroup; | |
14 import android.widget.AbsListView; | |
15 import android.widget.BaseAdapter; | |
16 import android.widget.LinearLayout; | |
17 | |
18 import org.chromium.base.ApiCompatibilityUtils; | |
19 | |
20 /** | |
21 * The adapter used to populate ColorPickerSimple. | |
22 */ | |
23 public class ColorSuggestionListAdapter extends BaseAdapter implements View.OnCl
ickListener { | |
24 private Context mContext; | |
25 private ColorSuggestion[] mSuggestions; | |
26 private OnColorSuggestionClickListener mListener; | |
27 | |
28 /** | |
29 * The callback used to indicate the user has clicked on a suggestion. | |
30 */ | |
31 public interface OnColorSuggestionClickListener { | |
32 | |
33 /** | |
34 * Called upon a click on a suggestion. | |
35 * | |
36 * @param suggestion The suggestion that was clicked. | |
37 */ | |
38 void onColorSuggestionClick(ColorSuggestion suggestion); | |
39 } | |
40 | |
41 private static final int COLORS_PER_ROW = 4; | |
42 | |
43 ColorSuggestionListAdapter(Context context, ColorSuggestion[] suggestions) { | |
44 mContext = context; | |
45 mSuggestions = suggestions; | |
46 } | |
47 | |
48 /** | |
49 * Sets the listener that will be notified upon a click on a suggestion. | |
50 */ | |
51 public void setOnColorSuggestionClickListener(OnColorSuggestionClickListener
listener) { | |
52 mListener = listener; | |
53 } | |
54 | |
55 /** | |
56 * Sets up the color button to represent a color suggestion. | |
57 * | |
58 * @param button The button view to set up. | |
59 * @param index The index of the suggestion in mSuggestions. | |
60 */ | |
61 private void setUpColorButton(View button, int index) { | |
62 if (index >= mSuggestions.length) { | |
63 button.setTag(null); | |
64 button.setContentDescription(null); | |
65 button.setVisibility(View.INVISIBLE); | |
66 return; | |
67 } | |
68 button.setTag(mSuggestions[index]); | |
69 button.setVisibility(View.VISIBLE); | |
70 ColorSuggestion suggestion = mSuggestions[index]; | |
71 LayerDrawable layers = (LayerDrawable) button.getBackground(); | |
72 GradientDrawable swatch = | |
73 (GradientDrawable) layers.findDrawableByLayerId(R.id.color_butto
n_swatch); | |
74 swatch.setColor(suggestion.mColor); | |
75 String description = suggestion.mLabel; | |
76 if (TextUtils.isEmpty(description)) { | |
77 description = String.format("#%06X", (0xFFFFFF & suggestion.mColor))
; | |
78 } | |
79 button.setContentDescription(description); | |
80 button.setOnClickListener(this); | |
81 } | |
82 | |
83 @Override | |
84 public void onClick(View v) { | |
85 if (mListener == null) { | |
86 return; | |
87 } | |
88 ColorSuggestion suggestion = (ColorSuggestion) v.getTag(); | |
89 if (suggestion == null) { | |
90 return; | |
91 } | |
92 mListener.onColorSuggestionClick(suggestion); | |
93 } | |
94 | |
95 @Override | |
96 public View getView(int position, View convertView, ViewGroup parent) { | |
97 LinearLayout layout; | |
98 if (convertView instanceof LinearLayout) { | |
99 layout = (LinearLayout) convertView; | |
100 } else { | |
101 layout = new LinearLayout(mContext); | |
102 layout.setLayoutParams(new AbsListView.LayoutParams( | |
103 AbsListView.LayoutParams.MATCH_PARENT, | |
104 AbsListView.LayoutParams.WRAP_CONTENT)); | |
105 layout.setOrientation(LinearLayout.HORIZONTAL); | |
106 layout.setBackgroundColor(Color.WHITE); | |
107 int buttonHeight = | |
108 mContext.getResources().getDimensionPixelOffset(R.dimen.colo
r_button_height); | |
109 for (int i = 0; i < COLORS_PER_ROW; ++i) { | |
110 View button = new View(mContext); | |
111 LinearLayout.LayoutParams layoutParams = | |
112 new LinearLayout.LayoutParams(0, buttonHeight, 1f); | |
113 ApiCompatibilityUtils.setMarginStart(layoutParams, -1); | |
114 if (i == COLORS_PER_ROW - 1) { | |
115 ApiCompatibilityUtils.setMarginEnd(layoutParams, -1); | |
116 } | |
117 button.setLayoutParams(layoutParams); | |
118 button.setBackgroundResource(R.drawable.color_button_background)
; | |
119 layout.addView(button); | |
120 } | |
121 } | |
122 for (int i = 0; i < COLORS_PER_ROW; ++i) { | |
123 setUpColorButton(layout.getChildAt(i), position * COLORS_PER_ROW + i
); | |
124 } | |
125 return layout; | |
126 } | |
127 | |
128 @Override | |
129 public long getItemId(int position) { | |
130 return position; | |
131 } | |
132 | |
133 @Override | |
134 public Object getItem(int position) { | |
135 return null; | |
136 } | |
137 | |
138 @Override | |
139 public int getCount() { | |
140 return (mSuggestions.length + COLORS_PER_ROW - 1) / COLORS_PER_ROW; | |
141 } | |
142 } | |
OLD | NEW |