12cfe25aefb32ed215f1c661d9670baf276fb7776James Kung/*
22cfe25aefb32ed215f1c661d9670baf276fb7776James Kung * Copyright (C) 2013 The Android Open Source Project
32cfe25aefb32ed215f1c661d9670baf276fb7776James Kung *
42cfe25aefb32ed215f1c661d9670baf276fb7776James Kung * Licensed under the Apache License, Version 2.0 (the "License");
52cfe25aefb32ed215f1c661d9670baf276fb7776James Kung * you may not use this file except in compliance with the License.
62cfe25aefb32ed215f1c661d9670baf276fb7776James Kung * You may obtain a copy of the License at
72cfe25aefb32ed215f1c661d9670baf276fb7776James Kung *
82cfe25aefb32ed215f1c661d9670baf276fb7776James Kung *      http://www.apache.org/licenses/LICENSE-2.0
92cfe25aefb32ed215f1c661d9670baf276fb7776James Kung *
102cfe25aefb32ed215f1c661d9670baf276fb7776James Kung * Unless required by applicable law or agreed to in writing, software
112cfe25aefb32ed215f1c661d9670baf276fb7776James Kung * distributed under the License is distributed on an "AS IS" BASIS,
122cfe25aefb32ed215f1c661d9670baf276fb7776James Kung * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
132cfe25aefb32ed215f1c661d9670baf276fb7776James Kung * See the License for the specific language governing permissions and
142cfe25aefb32ed215f1c661d9670baf276fb7776James Kung * limitations under the License.
152cfe25aefb32ed215f1c661d9670baf276fb7776James Kung */
162cfe25aefb32ed215f1c661d9670baf276fb7776James Kung
172cfe25aefb32ed215f1c661d9670baf276fb7776James Kungpackage com.android.colorpicker;
182cfe25aefb32ed215f1c661d9670baf276fb7776James Kung
192cfe25aefb32ed215f1c661d9670baf276fb7776James Kungimport android.content.Context;
202cfe25aefb32ed215f1c661d9670baf276fb7776James Kungimport android.graphics.drawable.Drawable;
217f1c44e9cb4f5503fae17d35d39370f9ef8395a3James Kungimport android.view.LayoutInflater;
222cfe25aefb32ed215f1c661d9670baf276fb7776James Kungimport android.view.View;
237f1c44e9cb4f5503fae17d35d39370f9ef8395a3James Kungimport android.widget.FrameLayout;
242cfe25aefb32ed215f1c661d9670baf276fb7776James Kungimport android.widget.ImageView;
252cfe25aefb32ed215f1c661d9670baf276fb7776James Kung
262cfe25aefb32ed215f1c661d9670baf276fb7776James Kung/**
272cfe25aefb32ed215f1c661d9670baf276fb7776James Kung * Creates a circular swatch of a specified color.  Adds a checkmark if marked as checked.
282cfe25aefb32ed215f1c661d9670baf276fb7776James Kung */
297f1c44e9cb4f5503fae17d35d39370f9ef8395a3James Kungpublic class ColorPickerSwatch extends FrameLayout implements View.OnClickListener {
302cfe25aefb32ed215f1c661d9670baf276fb7776James Kung    private int mColor;
317f1c44e9cb4f5503fae17d35d39370f9ef8395a3James Kung    private ImageView mSwatchImage;
327f1c44e9cb4f5503fae17d35d39370f9ef8395a3James Kung    private ImageView mCheckmarkImage;
332cfe25aefb32ed215f1c661d9670baf276fb7776James Kung    private OnColorSelectedListener mOnColorSelectedListener;
342cfe25aefb32ed215f1c661d9670baf276fb7776James Kung
352cfe25aefb32ed215f1c661d9670baf276fb7776James Kung    /**
362cfe25aefb32ed215f1c661d9670baf276fb7776James Kung     * Interface for a callback when a color square is selected.
372cfe25aefb32ed215f1c661d9670baf276fb7776James Kung     */
382cfe25aefb32ed215f1c661d9670baf276fb7776James Kung    public interface OnColorSelectedListener {
392cfe25aefb32ed215f1c661d9670baf276fb7776James Kung
402cfe25aefb32ed215f1c661d9670baf276fb7776James Kung        /**
412cfe25aefb32ed215f1c661d9670baf276fb7776James Kung         * Called when a specific color square has been selected.
422cfe25aefb32ed215f1c661d9670baf276fb7776James Kung         */
432cfe25aefb32ed215f1c661d9670baf276fb7776James Kung        public void onColorSelected(int color);
442cfe25aefb32ed215f1c661d9670baf276fb7776James Kung    }
452cfe25aefb32ed215f1c661d9670baf276fb7776James Kung
462cfe25aefb32ed215f1c661d9670baf276fb7776James Kung    public ColorPickerSwatch(Context context, int color, boolean checked,
472cfe25aefb32ed215f1c661d9670baf276fb7776James Kung            OnColorSelectedListener listener) {
482cfe25aefb32ed215f1c661d9670baf276fb7776James Kung        super(context);
497f1c44e9cb4f5503fae17d35d39370f9ef8395a3James Kung        mColor = color;
502cfe25aefb32ed215f1c661d9670baf276fb7776James Kung        mOnColorSelectedListener = listener;
517f1c44e9cb4f5503fae17d35d39370f9ef8395a3James Kung
527f1c44e9cb4f5503fae17d35d39370f9ef8395a3James Kung        LayoutInflater.from(context).inflate(R.layout.color_picker_swatch, this);
537f1c44e9cb4f5503fae17d35d39370f9ef8395a3James Kung        mSwatchImage = (ImageView) findViewById(R.id.color_picker_swatch);
547f1c44e9cb4f5503fae17d35d39370f9ef8395a3James Kung        mCheckmarkImage = (ImageView) findViewById(R.id.color_picker_checkmark);
552cfe25aefb32ed215f1c661d9670baf276fb7776James Kung        setColor(color);
562cfe25aefb32ed215f1c661d9670baf276fb7776James Kung        setChecked(checked);
572cfe25aefb32ed215f1c661d9670baf276fb7776James Kung        setOnClickListener(this);
582cfe25aefb32ed215f1c661d9670baf276fb7776James Kung    }
592cfe25aefb32ed215f1c661d9670baf276fb7776James Kung
602cfe25aefb32ed215f1c661d9670baf276fb7776James Kung    protected void setColor(int color) {
617f1c44e9cb4f5503fae17d35d39370f9ef8395a3James Kung        Drawable[] colorDrawable = new Drawable[]
627f1c44e9cb4f5503fae17d35d39370f9ef8395a3James Kung                {getContext().getResources().getDrawable(R.drawable.color_picker_swatch)};
637f1c44e9cb4f5503fae17d35d39370f9ef8395a3James Kung        mSwatchImage.setImageDrawable(new ColorStateDrawable(colorDrawable, color));
642cfe25aefb32ed215f1c661d9670baf276fb7776James Kung    }
652cfe25aefb32ed215f1c661d9670baf276fb7776James Kung
662cfe25aefb32ed215f1c661d9670baf276fb7776James Kung    private void setChecked(boolean checked) {
672cfe25aefb32ed215f1c661d9670baf276fb7776James Kung        if (checked) {
687f1c44e9cb4f5503fae17d35d39370f9ef8395a3James Kung            mCheckmarkImage.setVisibility(View.VISIBLE);
692cfe25aefb32ed215f1c661d9670baf276fb7776James Kung        } else {
707f1c44e9cb4f5503fae17d35d39370f9ef8395a3James Kung            mCheckmarkImage.setVisibility(View.GONE);
712cfe25aefb32ed215f1c661d9670baf276fb7776James Kung        }
722cfe25aefb32ed215f1c661d9670baf276fb7776James Kung    }
732cfe25aefb32ed215f1c661d9670baf276fb7776James Kung
742cfe25aefb32ed215f1c661d9670baf276fb7776James Kung    @Override
752cfe25aefb32ed215f1c661d9670baf276fb7776James Kung    public void onClick(View v) {
762cfe25aefb32ed215f1c661d9670baf276fb7776James Kung        if (mOnColorSelectedListener != null) {
772cfe25aefb32ed215f1c661d9670baf276fb7776James Kung            mOnColorSelectedListener.onColorSelected(mColor);
782cfe25aefb32ed215f1c661d9670baf276fb7776James Kung        }
792cfe25aefb32ed215f1c661d9670baf276fb7776James Kung    }
802cfe25aefb32ed215f1c661d9670baf276fb7776James Kung}
81