1/* 2 * Copyright (C) 2013 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17package com.android.gallery3d.filtershow.colorpicker; 18 19import android.app.Dialog; 20import android.content.Context; 21import android.content.res.Configuration; 22import android.graphics.Color; 23import android.graphics.drawable.GradientDrawable; 24import android.util.DisplayMetrics; 25import android.view.View; 26import android.view.ViewGroup; 27import android.view.Window; 28import android.view.WindowManager; 29import android.widget.Button; 30import android.widget.ImageButton; 31import android.widget.ToggleButton; 32 33import com.android.gallery3d.R; 34import com.android.gallery3d.filtershow.FilterShowActivity; 35import com.android.photos.views.GalleryThumbnailView; 36 37public class ColorPickerDialog extends Dialog { 38 ToggleButton mSelectedButton; 39 ColorHueView mColorHueView; 40 ColorSVRectView mColorSVRectView; 41 ColorOpacityView mColorOpacityView; 42 ColorCompareView mColorCompareView; 43 44 float[] mHSVO = new float[4]; // hue=0..360, sat & val opacity = 0...1 45 46 public ColorPickerDialog(Context context, final ColorListener cl) { 47 super(context); 48 DisplayMetrics metrics = new DisplayMetrics(); 49 WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE); 50 wm.getDefaultDisplay().getMetrics(metrics); 51 int height = metrics.heightPixels*8/10; 52 int width = metrics.widthPixels*8/10; 53 getWindow().setLayout(width, height); 54 requestWindowFeature(Window.FEATURE_NO_TITLE); 55 setContentView(R.layout.filtershow_color_picker); 56 mColorHueView = (ColorHueView) findViewById(R.id.ColorHueView); 57 mColorSVRectView = (ColorSVRectView) findViewById(R.id.colorRectView); 58 mColorOpacityView = (ColorOpacityView) findViewById(R.id.colorOpacityView); 59 mColorCompareView = (ColorCompareView) findViewById(R.id.btnSelect); 60 61 float[] hsvo = new float[] { 62 123, .9f, 1, 1 }; 63 64 ImageButton apply = (ImageButton) findViewById(R.id.applyColorPick); 65 ImageButton cancel = (ImageButton) findViewById(R.id.cancelColorPick); 66 67 apply.setOnClickListener(new View.OnClickListener() { 68 @Override 69 public void onClick(View view) { 70 cl.setColor(mHSVO); 71 ColorPickerDialog.this.dismiss(); 72 } 73 }); 74 cancel.setOnClickListener(new View.OnClickListener() { 75 @Override 76 public void onClick(View view) { 77 ColorPickerDialog.this.dismiss(); 78 } 79 }); 80 ColorListener [] c = {mColorCompareView,mColorSVRectView,mColorOpacityView,mColorHueView}; 81 for (int i = 0; i < c.length; i++) { 82 c[i].setColor(hsvo); 83 for (int j = 0; j < c.length; j++) { 84 if (i==j) { 85 continue; 86 } 87 c[i].addColorListener(c[j]); 88 } 89 } 90 91 ColorListener colorListener = new ColorListener(){ 92 @Override 93 public void setColor(float[] hsvo) { 94 System.arraycopy(hsvo, 0, mHSVO, 0, mHSVO.length); 95 int color = Color.HSVToColor(hsvo); 96 setButtonColor(mSelectedButton, hsvo); 97 } 98 99 @Override 100 public void addColorListener(ColorListener l) { 101 } 102 }; 103 104 for (int i = 0; i < c.length; i++) { 105 c[i].addColorListener(colorListener); 106 } 107 setOnShowListener((FilterShowActivity) context); 108 setOnDismissListener((FilterShowActivity) context); 109 } 110 111 void toggleClick(ToggleButton v, int[] buttons, boolean isChecked) { 112 int id = v.getId(); 113 if (!isChecked) { 114 mSelectedButton = null; 115 return; 116 } 117 for (int i = 0; i < buttons.length; i++) { 118 if (id != buttons[i]) { 119 ToggleButton b = (ToggleButton) findViewById(buttons[i]); 120 b.setChecked(false); 121 } 122 } 123 mSelectedButton = v; 124 125 float[] hsv = (float[]) v.getTag(); 126 127 ColorHueView csv = (ColorHueView) findViewById(R.id.ColorHueView); 128 ColorSVRectView cwv = (ColorSVRectView) findViewById(R.id.colorRectView); 129 ColorOpacityView cvv = (ColorOpacityView) findViewById(R.id.colorOpacityView); 130 cwv.setColor(hsv); 131 cvv.setColor(hsv); 132 csv.setColor(hsv); 133 } 134 135 public void setOrigColor(float[] hsvo) { 136 mColorCompareView.setOrigColor(hsvo); 137 } 138 139 public void setColor(float[] hsvo) { 140 mColorOpacityView.setColor(hsvo); 141 mColorHueView.setColor(hsvo); 142 mColorSVRectView.setColor(hsvo); 143 mColorCompareView.setColor(hsvo); 144 } 145 146 private void setButtonColor(ToggleButton button, float[] hsv) { 147 if (button == null) { 148 return; 149 } 150 int color = Color.HSVToColor(hsv); 151 button.setBackgroundColor(color); 152 float[] fg = new float[] { 153 (hsv[0] + 180) % 360, 154 hsv[1], 155 (hsv[2] > .5f) ? .1f : .9f 156 }; 157 button.setTextColor(Color.HSVToColor(fg)); 158 button.setTag(hsv); 159 } 160 161} 162