// 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.components.embedder_support.delegate;

import android.content.Context;
import android.graphics.Color;
import android.util.AttributeSet;
import android.widget.ListView;

import org.chromium.components.embedder_support.delegate.ColorSuggestionListAdapter.OnColorSuggestionClickListener;

/**
 * Draws a grid of (predefined) colors and allows the user to choose one of
 * those colors.
 */
public class ColorPickerSimple extends ListView implements OnColorSuggestionClickListener {
    private OnColorChangedListener mOnColorChangedListener;

    private static final int[] DEFAULT_COLORS = {Color.RED, Color.CYAN, Color.BLUE, Color.GREEN,
            Color.MAGENTA, Color.YELLOW, Color.BLACK, Color.WHITE};

    private static final int[] DEFAULT_COLOR_LABEL_IDS = {R.string.color_picker_button_red,
            R.string.color_picker_button_cyan, R.string.color_picker_button_blue,
            R.string.color_picker_button_green, R.string.color_picker_button_magenta,
            R.string.color_picker_button_yellow, R.string.color_picker_button_black,
            R.string.color_picker_button_white};

    public ColorPickerSimple(Context context) {
        super(context);
    }

    public ColorPickerSimple(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public ColorPickerSimple(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }

    /**
     * Initializes the listener and sets the adapter for the given list of suggestions. If the
     * suggestions is null a default set of colors will be used.
     *
     * @param suggestions The list of suggestions that should be displayed.
     * @param onColorChangedListener The listener that gets notified when the user touches
     *                               a color.
     */
    public void init(ColorSuggestion[] suggestions, OnColorChangedListener onColorChangedListener) {
        mOnColorChangedListener = onColorChangedListener;

        if (suggestions == null) {
            suggestions = new ColorSuggestion[DEFAULT_COLORS.length];
            for (int i = 0; i < suggestions.length; ++i) {
                suggestions[i] = new ColorSuggestion(
                        DEFAULT_COLORS[i], getContext().getString(DEFAULT_COLOR_LABEL_IDS[i]));
            }
        }

        ColorSuggestionListAdapter adapter =
                new ColorSuggestionListAdapter(getContext(), suggestions);
        adapter.setOnColorSuggestionClickListener(this);
        setAdapter(adapter);
    }

    @Override
    public void onColorSuggestionClick(ColorSuggestion suggestion) {
        mOnColorChangedListener.onColorChanged(suggestion.mColor);
    }
}
