mobile/android/base/widget/BasicColorPicker.java

branch
TOR_BUG_3246
changeset 4
fc2d59ddac77
equal deleted inserted replaced
-1:000000000000 0:74d2c1d0f555
1 /* -*- Mode: Java; c-basic-offset: 4; tab-width: 20; indent-tabs-mode: nil; -*-
2 * This Source Code Form is subject to the terms of the Mozilla Public
3 * License, v. 2.0. If a copy of the MPL was not distributed with this
4 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
5
6 package org.mozilla.gecko.widget;
7
8 import org.mozilla.gecko.R;
9
10 import java.util.ArrayList;
11 import java.util.Arrays;
12 import java.util.List;
13
14 import android.content.Context;
15 import android.content.res.Resources;
16 import android.graphics.Color;
17 import android.graphics.PorterDuff;
18 import android.graphics.Rect;
19 import android.graphics.drawable.Drawable;
20 import android.view.View;
21 import android.view.ViewGroup;
22 import android.view.WindowManager;
23 import android.widget.ArrayAdapter;
24 import android.widget.AdapterView;
25 import android.widget.CheckedTextView;
26 import android.widget.ListView;
27 import android.util.AttributeSet;
28 import android.util.DisplayMetrics;
29 import android.util.TypedValue;
30
31 public class BasicColorPicker extends ListView {
32 private final static String LOGTAG = "GeckoBasicColorPicker";
33 private final static List<Integer> DEFAULT_COLORS = Arrays.asList(Color.rgb(215,57,32),
34 Color.rgb(255,134,5),
35 Color.rgb(255,203,19),
36 Color.rgb(95,173,71),
37 Color.rgb(84,201,168),
38 Color.rgb(33,161,222),
39 Color.rgb(16,36,87),
40 Color.rgb(91,32,103),
41 Color.rgb(212,221,228),
42 Color.BLACK);
43
44 private static Drawable mCheckDrawable = null;
45 private int mSelected = 0;
46 final private ColorPickerListAdapter mAdapter;
47
48 public BasicColorPicker(Context context) {
49 this(context, null);
50 }
51
52 public BasicColorPicker(Context context, AttributeSet attrs) {
53 this(context, attrs, 0);
54 }
55
56 public BasicColorPicker(Context context, AttributeSet attrs, int style) {
57 this(context, attrs, style, DEFAULT_COLORS);
58 }
59
60 public BasicColorPicker(Context context, AttributeSet attrs, int style, List<Integer> colors) {
61 super(context, attrs, style);
62 mAdapter = new ColorPickerListAdapter(context, new ArrayList<Integer>(colors));
63 setAdapter(mAdapter);
64
65 setOnItemClickListener(new AdapterView.OnItemClickListener() {
66 @Override
67 public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
68 mSelected = position;
69 mAdapter.notifyDataSetChanged();
70 }
71 });
72 }
73
74 public int getColor() {
75 return mAdapter.getItem(mSelected);
76 }
77
78 public void setColor(int color) {
79 if (!DEFAULT_COLORS.contains(color)) {
80 mSelected = mAdapter.getCount();
81 mAdapter.add(color);
82 } else {
83 mSelected = DEFAULT_COLORS.indexOf(color);
84 }
85
86 setSelection(mSelected);
87 mAdapter.notifyDataSetChanged();
88 }
89
90 private Drawable getCheckDrawable() {
91 if (mCheckDrawable == null) {
92 Resources res = getContext().getResources();
93
94 TypedValue typedValue = new TypedValue();
95 getContext().getTheme().resolveAttribute(android.R.attr.listPreferredItemHeight, typedValue, true);
96 DisplayMetrics metrics = new android.util.DisplayMetrics();
97 ((WindowManager)getContext().getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay().getMetrics(metrics);
98 int height = (int) typedValue.getDimension(metrics);
99
100 Drawable background = res.getDrawable(R.drawable.color_picker_row_bg);
101 Rect r = new Rect();
102 background.getPadding(r);
103 height -= r.top + r.bottom;
104
105 mCheckDrawable = res.getDrawable(R.drawable.color_picker_checkmark);
106 mCheckDrawable.setBounds(0, 0, height, height);
107 }
108
109 return mCheckDrawable;
110 }
111
112 private class ColorPickerListAdapter extends ArrayAdapter<Integer> {
113 private final List<Integer> mColors;
114
115 public ColorPickerListAdapter(Context context, List<Integer> colors) {
116 super(context, R.layout.color_picker_row, colors);
117 mColors = colors;
118 }
119
120 public View getView(int position, View convertView, ViewGroup parent) {
121 View v = super.getView(position, convertView, parent);
122
123 Drawable d = v.getBackground();
124 d.setColorFilter(getItem(position), PorterDuff.Mode.MULTIPLY);
125 v.setBackgroundDrawable(d);
126
127 Drawable check = null;
128 CheckedTextView checked = ((CheckedTextView) v);
129 if (mSelected == position) {
130 check = getCheckDrawable();
131 }
132
133 checked.setCompoundDrawables(check, null, null, null);
134 checked.setText("");
135
136 return v;
137 }
138 }
139 }

mercurial