1868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved.
2868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
3868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)// found in the LICENSE file.
4a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
5868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)package org.chromium.ui;
6868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
7868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)import android.content.Context;
8868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)import android.graphics.Color;
9868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)import android.util.AttributeSet;
10a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)import android.widget.ListView;
11868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
12a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)import org.chromium.ui.ColorSuggestionListAdapter.OnColorSuggestionClickListener;
13868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
14868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)/**
15868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) * Draws a grid of (predefined) colors and allows the user to choose one of
16868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) * those colors.
17868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) */
18a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)public class ColorPickerSimple extends ListView implements OnColorSuggestionClickListener {
19a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
20a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    private OnColorChangedListener mOnColorChangedListener;
21a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
22a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    private static final int[] DEFAULT_COLORS = {
23a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)        Color.RED,
24a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)        Color.CYAN,
25a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)        Color.BLUE,
26a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)        Color.GREEN,
27a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)        Color.MAGENTA,
28a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)        Color.YELLOW,
29a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)        Color.BLACK,
30a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)        Color.WHITE
31a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    };
32a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
33a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    private static final int[] DEFAULT_COLOR_LABEL_IDS = {
34a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)        R.string.color_picker_button_red,
35a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)        R.string.color_picker_button_cyan,
36a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)        R.string.color_picker_button_blue,
37a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)        R.string.color_picker_button_green,
38a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)        R.string.color_picker_button_magenta,
39a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)        R.string.color_picker_button_yellow,
40a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)        R.string.color_picker_button_black,
41a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)        R.string.color_picker_button_white
42a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    };
437d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
44868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    public ColorPickerSimple(Context context) {
45868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)        super(context);
46868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    }
47868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
48868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    public ColorPickerSimple(Context context, AttributeSet attrs) {
49868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)        super(context, attrs);
50868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    }
51868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
52868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    public ColorPickerSimple(Context context, AttributeSet attrs, int defStyle) {
53868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)        super(context, attrs, defStyle);
54868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    }
55868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
56868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    /**
57a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)     * Initializes the listener and sets the adapter for the given list of suggestions. If the
58a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)     * suggestions is null a default set of colors will be used.
59868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)     *
60a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)     * @param suggestions The list of suggestions that should be displayed.
61868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)     * @param onColorChangedListener The listener that gets notified when the user touches
62868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)     *                               a color.
63868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)     */
64a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    public void init(ColorSuggestion[] suggestions,
65a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                     OnColorChangedListener onColorChangedListener) {
66a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)        mOnColorChangedListener = onColorChangedListener;
67a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
68a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)        if (suggestions == null) {
69a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)            suggestions = new ColorSuggestion[DEFAULT_COLORS.length];
70a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)            for (int i = 0; i < suggestions.length; ++i) {
71a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                suggestions[i] = new ColorSuggestion(DEFAULT_COLORS[i],
72a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                        getContext().getString(DEFAULT_COLOR_LABEL_IDS[i]));
737d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)            }
74a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)        }
75a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)
76a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)        ColorSuggestionListAdapter adapter = new ColorSuggestionListAdapter(
77a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                getContext(), suggestions);
78a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)        adapter.setOnColorSuggestionClickListener(this);
79a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)        setAdapter(adapter);
80868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    }
81868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
82868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    @Override
83a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    public void onColorSuggestionClick(ColorSuggestion suggestion) {
84a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)        mOnColorChangedListener.onColorChanged(suggestion.mColor);
85868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    }
86868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)}
87