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.PorterDuff.Mode;
217f1c44e9cb4f5503fae17d35d39370f9ef8395a3James Kungimport android.graphics.drawable.ColorDrawable;
222cfe25aefb32ed215f1c661d9670baf276fb7776James Kungimport android.graphics.drawable.Drawable;
237f1c44e9cb4f5503fae17d35d39370f9ef8395a3James Kungimport android.graphics.drawable.LayerDrawable;
247f1c44e9cb4f5503fae17d35d39370f9ef8395a3James Kungimport android.view.LayoutInflater;
252cfe25aefb32ed215f1c661d9670baf276fb7776James Kungimport android.view.View;
267f1c44e9cb4f5503fae17d35d39370f9ef8395a3James Kungimport android.widget.FrameLayout;
272cfe25aefb32ed215f1c661d9670baf276fb7776James Kungimport android.widget.ImageView;
282cfe25aefb32ed215f1c661d9670baf276fb7776James Kung
292cfe25aefb32ed215f1c661d9670baf276fb7776James Kung/**
302cfe25aefb32ed215f1c661d9670baf276fb7776James Kung * Creates a circular swatch of a specified color.  Adds a checkmark if marked as checked.
312cfe25aefb32ed215f1c661d9670baf276fb7776James Kung */
327f1c44e9cb4f5503fae17d35d39370f9ef8395a3James Kungpublic class ColorPickerSwatch extends FrameLayout implements View.OnClickListener {
332cfe25aefb32ed215f1c661d9670baf276fb7776James Kung    private int mColor;
347f1c44e9cb4f5503fae17d35d39370f9ef8395a3James Kung    private ImageView mSwatchImage;
357f1c44e9cb4f5503fae17d35d39370f9ef8395a3James Kung    private ImageView mCheckmarkImage;
362cfe25aefb32ed215f1c661d9670baf276fb7776James Kung    private OnColorSelectedListener mOnColorSelectedListener;
372cfe25aefb32ed215f1c661d9670baf276fb7776James Kung
382cfe25aefb32ed215f1c661d9670baf276fb7776James Kung    /**
392cfe25aefb32ed215f1c661d9670baf276fb7776James Kung     * Interface for a callback when a color square is selected.
402cfe25aefb32ed215f1c661d9670baf276fb7776James Kung     */
412cfe25aefb32ed215f1c661d9670baf276fb7776James Kung    public interface OnColorSelectedListener {
422cfe25aefb32ed215f1c661d9670baf276fb7776James Kung
432cfe25aefb32ed215f1c661d9670baf276fb7776James Kung        /**
442cfe25aefb32ed215f1c661d9670baf276fb7776James Kung         * Called when a specific color square has been selected.
452cfe25aefb32ed215f1c661d9670baf276fb7776James Kung         */
462cfe25aefb32ed215f1c661d9670baf276fb7776James Kung        public void onColorSelected(int color);
472cfe25aefb32ed215f1c661d9670baf276fb7776James Kung    }
482cfe25aefb32ed215f1c661d9670baf276fb7776James Kung
492cfe25aefb32ed215f1c661d9670baf276fb7776James Kung    public ColorPickerSwatch(Context context, int color, boolean checked,
502cfe25aefb32ed215f1c661d9670baf276fb7776James Kung            OnColorSelectedListener listener) {
512cfe25aefb32ed215f1c661d9670baf276fb7776James Kung        super(context);
527f1c44e9cb4f5503fae17d35d39370f9ef8395a3James Kung        mColor = color;
532cfe25aefb32ed215f1c661d9670baf276fb7776James Kung        mOnColorSelectedListener = listener;
547f1c44e9cb4f5503fae17d35d39370f9ef8395a3James Kung
557f1c44e9cb4f5503fae17d35d39370f9ef8395a3James Kung        LayoutInflater.from(context).inflate(R.layout.color_picker_swatch, this);
567f1c44e9cb4f5503fae17d35d39370f9ef8395a3James Kung        mSwatchImage = (ImageView) findViewById(R.id.color_picker_swatch);
577f1c44e9cb4f5503fae17d35d39370f9ef8395a3James Kung        mCheckmarkImage = (ImageView) findViewById(R.id.color_picker_checkmark);
582cfe25aefb32ed215f1c661d9670baf276fb7776James Kung        setColor(color);
592cfe25aefb32ed215f1c661d9670baf276fb7776James Kung        setChecked(checked);
602cfe25aefb32ed215f1c661d9670baf276fb7776James Kung        setOnClickListener(this);
612cfe25aefb32ed215f1c661d9670baf276fb7776James Kung    }
622cfe25aefb32ed215f1c661d9670baf276fb7776James Kung
632cfe25aefb32ed215f1c661d9670baf276fb7776James Kung    protected void setColor(int color) {
647f1c44e9cb4f5503fae17d35d39370f9ef8395a3James Kung        Drawable[] colorDrawable = new Drawable[]
657f1c44e9cb4f5503fae17d35d39370f9ef8395a3James Kung                {getContext().getResources().getDrawable(R.drawable.color_picker_swatch)};
667f1c44e9cb4f5503fae17d35d39370f9ef8395a3James Kung        mSwatchImage.setImageDrawable(new ColorStateDrawable(colorDrawable, color));
672cfe25aefb32ed215f1c661d9670baf276fb7776James Kung    }
682cfe25aefb32ed215f1c661d9670baf276fb7776James Kung
692cfe25aefb32ed215f1c661d9670baf276fb7776James Kung    private void setChecked(boolean checked) {
702cfe25aefb32ed215f1c661d9670baf276fb7776James Kung        if (checked) {
717f1c44e9cb4f5503fae17d35d39370f9ef8395a3James Kung            mCheckmarkImage.setVisibility(View.VISIBLE);
722cfe25aefb32ed215f1c661d9670baf276fb7776James Kung        } else {
737f1c44e9cb4f5503fae17d35d39370f9ef8395a3James Kung            mCheckmarkImage.setVisibility(View.GONE);
742cfe25aefb32ed215f1c661d9670baf276fb7776James Kung        }
752cfe25aefb32ed215f1c661d9670baf276fb7776James Kung    }
762cfe25aefb32ed215f1c661d9670baf276fb7776James Kung
772cfe25aefb32ed215f1c661d9670baf276fb7776James Kung    @Override
782cfe25aefb32ed215f1c661d9670baf276fb7776James Kung    public void onClick(View v) {
792cfe25aefb32ed215f1c661d9670baf276fb7776James Kung        if (mOnColorSelectedListener != null) {
802cfe25aefb32ed215f1c661d9670baf276fb7776James Kung            mOnColorSelectedListener.onColorSelected(mColor);
812cfe25aefb32ed215f1c661d9670baf276fb7776James Kung        }
822cfe25aefb32ed215f1c661d9670baf276fb7776James Kung    }
832cfe25aefb32ed215f1c661d9670baf276fb7776James Kung}
84