/* * Copyright (C) 2013 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.gallery3d.filtershow.colorpicker; import android.app.Dialog; import android.content.Context; import android.graphics.Color; import android.graphics.drawable.GradientDrawable; import android.view.View; import android.view.ViewGroup; import android.widget.Button; import com.android.gallery3d.R; import java.util.ArrayList; public class ColorGridDialog extends Dialog { RGBListener mCallback; private static final String LOGTAG = "ColorGridDialog"; public ColorGridDialog(Context context, final RGBListener cl) { super(context); mCallback = cl; setTitle(R.string.color_pick_title); setContentView(R.layout.filtershow_color_gird); Button sel = (Button) findViewById(R.id.filtershow_cp_custom); ArrayList<Button> b = getButtons((ViewGroup) getWindow().getDecorView()); int k = 0; float[] hsv = new float[3]; for (Button button : b) { if (!button.equals(sel)){ hsv[0] = (k % 5) * 360 / 5; hsv[1] = (k / 5) / 3.0f; hsv[2] = (k < 5) ? (k / 4f) : 1; final int c = (Color.HSVToColor(hsv) & 0x00FFFFFF) | 0xAA000000; GradientDrawable sd = ((GradientDrawable) button.getBackground()); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { mCallback.setColor(c); dismiss(); } }); sd.setColor(c); k++; } } sel.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { showColorPicker(); ColorGridDialog.this.dismiss(); } }); } private ArrayList<Button> getButtons(ViewGroup vg) { ArrayList<Button> list = new ArrayList<Button>(); for (int i = 0; i < vg.getChildCount(); i++) { View v = vg.getChildAt(i); if (v instanceof Button) { list.add((Button) v); } else if (v instanceof ViewGroup) { list.addAll(getButtons((ViewGroup) v)); } } return list; } public void showColorPicker() { ColorListener cl = new ColorListener() { @Override public void setColor(float[] hsvo) { int c = Color.HSVToColor(hsvo) & 0xFFFFFF; int alpha = (int) (hsvo[3] * 255); c |= alpha << 24; mCallback.setColor(c); } }; ColorPickerDialog cpd = new ColorPickerDialog(this.getContext(), cl); cpd.show(); } }