2 * Copyright (C) 2012 Andrew Neal Licensed under the Apache License, Version 2.0
3 * (the "License"); you may not use this file except in compliance with the
4 * License. You may obtain a copy of the License at
5 * http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law
6 * or agreed to in writing, software distributed under the License is
7 * distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
8 * KIND, either express or implied. See the License for the specific language
9 * governing permissions and limitations under the License.
12 package com.cyngn.eleven.widgets;
14 import android.app.AlertDialog;
15 import android.content.Context;
16 import android.graphics.Color;
17 import android.graphics.PixelFormat;
18 import android.text.Editable;
19 import android.text.TextWatcher;
20 import android.view.LayoutInflater;
21 import android.view.View;
22 import android.widget.Button;
23 import android.widget.EditText;
25 import com.cyngn.eleven.R;
26 import com.cyngn.eleven.utils.ApolloUtils;
27 import com.cyngn.eleven.utils.PreferenceUtils;
28 import com.cyngn.eleven.widgets.ColorPickerView.OnColorChangedListener;
30 import java.util.Locale;
33 * Shows the {@link ColorPanelView} in a new {@link AlertDialog}.
35 * @author Andrew Neal (andrewdneal@gmail.com)
37 public class ColorSchemeDialog extends AlertDialog implements
38 ColorPickerView.OnColorChangedListener {
40 private final int mCurrentColor;
42 private final OnColorChangedListener mListener = this;;
44 private LayoutInflater mInflater;
46 private ColorPickerView mColorPicker;
48 private Button mOldColor;
50 private Button mNewColor;
52 private View mRootView;
54 private EditText mHexValue;
57 * Constructor of <code>ColorSchemeDialog</code>
59 * @param context The {@link Contxt} to use.
61 public ColorSchemeDialog(final Context context) {
63 getWindow().setFormat(PixelFormat.RGBA_8888);
64 mCurrentColor = PreferenceUtils.getInstance(context).getDefaultThemeColor(context);
69 public void onAttachedToWindow() {
70 super.onAttachedToWindow();
71 ApolloUtils.removeHardwareAccelerationSupport(mColorPicker);
76 * @see com.cyngn.eleven.widgets.ColorPickerView.OnColorChangedListener#
80 public void onColorChanged(final int color) {
81 if (mHexValue != null) {
82 mHexValue.setText(padLeft(Integer.toHexString(color).toUpperCase(Locale.getDefault()),
85 mNewColor.setBackgroundColor(color);
88 private String padLeft(final String string, final char padChar, final int size) {
89 if (string.length() >= size) {
92 final StringBuilder result = new StringBuilder();
93 for (int i = string.length(); i < size; i++) {
94 result.append(padChar);
96 result.append(string);
97 return result.toString();
101 * Initialzes the presets and color picker
103 * @param color The color to use.
105 private void setUp(final int color) {
106 mInflater = (LayoutInflater)getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
107 mRootView = mInflater.inflate(R.layout.color_scheme_dialog, null);
109 mColorPicker = (ColorPickerView)mRootView.findViewById(R.id.color_picker_view);
110 mOldColor = (Button)mRootView.findViewById(R.id.color_scheme_dialog_old_color);
111 mOldColor.setOnClickListener(mPresetListener);
112 mNewColor = (Button)mRootView.findViewById(R.id.color_scheme_dialog_new_color);
113 setUpPresets(R.id.color_scheme_dialog_preset_one);
114 setUpPresets(R.id.color_scheme_dialog_preset_two);
115 setUpPresets(R.id.color_scheme_dialog_preset_three);
116 setUpPresets(R.id.color_scheme_dialog_preset_four);
117 setUpPresets(R.id.color_scheme_dialog_preset_five);
118 setUpPresets(R.id.color_scheme_dialog_preset_six);
119 setUpPresets(R.id.color_scheme_dialog_preset_seven);
120 setUpPresets(R.id.color_scheme_dialog_preset_eight);
121 mHexValue = (EditText)mRootView.findViewById(R.id.color_scheme_dialog_hex_value);
122 mHexValue.addTextChangedListener(new TextWatcher() {
125 public void onTextChanged(final CharSequence s, final int start, final int before,
128 mColorPicker.setColor(Color.parseColor("#"
129 + mHexValue.getText().toString().toUpperCase(Locale.getDefault())));
130 mNewColor.setBackgroundColor(Color.parseColor("#"
131 + mHexValue.getText().toString().toUpperCase(Locale.getDefault())));
132 } catch (final Exception ignored) {
137 public void beforeTextChanged(final CharSequence s, final int start, final int count,
143 public void afterTextChanged(final Editable s) {
148 mColorPicker.setOnColorChangedListener(this);
149 mOldColor.setBackgroundColor(color);
150 mColorPicker.setColor(color, true);
152 setTitle(R.string.color_picker_title);
157 * @param color The color resource.
158 * @return A new color from Apollo's resources.
160 private int getColor(final int color) {
161 return getContext().getResources().getColor(color);
165 * @return {@link ColorPickerView}'s current color
167 public int getColor() {
168 return mColorPicker.getColor();
172 * @param which The Id of the preset color
174 private void setUpPresets(final int which) {
175 final Button preset = (Button)mRootView.findViewById(which);
176 if (preset != null) {
177 preset.setOnClickListener(mPresetListener);
182 * Sets up the preset buttons
184 private final View.OnClickListener mPresetListener = new View.OnClickListener() {
187 public void onClick(final View v) {
189 case R.id.color_scheme_dialog_preset_one:
190 mColorPicker.setColor(getColor(R.color.holo_blue_light));
192 case R.id.color_scheme_dialog_preset_two:
193 mColorPicker.setColor(getColor(R.color.holo_green_light));
195 case R.id.color_scheme_dialog_preset_three:
196 mColorPicker.setColor(getColor(R.color.holo_orange_dark));
198 case R.id.color_scheme_dialog_preset_four:
199 mColorPicker.setColor(getColor(R.color.holo_orange_light));
201 case R.id.color_scheme_dialog_preset_five:
202 mColorPicker.setColor(getColor(R.color.holo_purple));
204 case R.id.color_scheme_dialog_preset_six:
205 mColorPicker.setColor(getColor(R.color.holo_red_light));
207 case R.id.color_scheme_dialog_preset_seven:
208 mColorPicker.setColor(getColor(R.color.white));
210 case R.id.color_scheme_dialog_preset_eight:
211 mColorPicker.setColor(getColor(R.color.black));
213 case R.id.color_scheme_dialog_old_color:
214 mColorPicker.setColor(mCurrentColor);
219 if (mListener != null) {
220 mListener.onColorChanged(getColor());