OSDN Git Service

Repackaged com.andrew.apollo to com.cyngn.eleven
[android-x86/packages-apps-Eleven.git] / src / com / cyngn / eleven / widgets / ColorSchemeDialog.java
1 /*
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.
10  */
11
12 package com.cyngn.eleven.widgets;
13
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;
24
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;
29
30 import java.util.Locale;
31
32 /**
33  * Shows the {@link ColorPanelView} in a new {@link AlertDialog}.
34  * 
35  * @author Andrew Neal (andrewdneal@gmail.com)
36  */
37 public class ColorSchemeDialog extends AlertDialog implements
38         ColorPickerView.OnColorChangedListener {
39
40     private final int mCurrentColor;
41
42     private final OnColorChangedListener mListener = this;;
43
44     private LayoutInflater mInflater;
45
46     private ColorPickerView mColorPicker;
47
48     private Button mOldColor;
49
50     private Button mNewColor;
51
52     private View mRootView;
53
54     private EditText mHexValue;
55
56     /**
57      * Constructor of <code>ColorSchemeDialog</code>
58      * 
59      * @param context The {@link Contxt} to use.
60      */
61     public ColorSchemeDialog(final Context context) {
62         super(context);
63         getWindow().setFormat(PixelFormat.RGBA_8888);
64         mCurrentColor = PreferenceUtils.getInstance(context).getDefaultThemeColor(context);
65         setUp(mCurrentColor);
66     }
67
68     @Override
69     public void onAttachedToWindow() {
70         super.onAttachedToWindow();
71         ApolloUtils.removeHardwareAccelerationSupport(mColorPicker);
72     }
73
74     /*
75      * (non-Javadoc)
76      * @see com.cyngn.eleven.widgets.ColorPickerView.OnColorChangedListener#
77      * onColorChanged(int)
78      */
79     @Override
80     public void onColorChanged(final int color) {
81         if (mHexValue != null) {
82             mHexValue.setText(padLeft(Integer.toHexString(color).toUpperCase(Locale.getDefault()),
83                     '0', 8));
84         }
85         mNewColor.setBackgroundColor(color);
86     }
87
88     private String padLeft(final String string, final char padChar, final int size) {
89         if (string.length() >= size) {
90             return string;
91         }
92         final StringBuilder result = new StringBuilder();
93         for (int i = string.length(); i < size; i++) {
94             result.append(padChar);
95         }
96         result.append(string);
97         return result.toString();
98     }
99
100     /**
101      * Initialzes the presets and color picker
102      * 
103      * @param color The color to use.
104      */
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);
108
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() {
123
124             @Override
125             public void onTextChanged(final CharSequence s, final int start, final int before,
126                     final int count) {
127                 try {
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) {
133                 }
134             }
135
136             @Override
137             public void beforeTextChanged(final CharSequence s, final int start, final int count,
138                     final int after) {
139                 /* Nothing to do */
140             }
141
142             @Override
143             public void afterTextChanged(final Editable s) {
144                 /* Nothing to do */
145             }
146         });
147
148         mColorPicker.setOnColorChangedListener(this);
149         mOldColor.setBackgroundColor(color);
150         mColorPicker.setColor(color, true);
151
152         setTitle(R.string.color_picker_title);
153         setView(mRootView);
154     }
155
156     /**
157      * @param color The color resource.
158      * @return A new color from Apollo's resources.
159      */
160     private int getColor(final int color) {
161         return getContext().getResources().getColor(color);
162     }
163
164     /**
165      * @return {@link ColorPickerView}'s current color
166      */
167     public int getColor() {
168         return mColorPicker.getColor();
169     }
170
171     /**
172      * @param which The Id of the preset color
173      */
174     private void setUpPresets(final int which) {
175         final Button preset = (Button)mRootView.findViewById(which);
176         if (preset != null) {
177             preset.setOnClickListener(mPresetListener);
178         }
179     }
180
181     /**
182      * Sets up the preset buttons
183      */
184     private final View.OnClickListener mPresetListener = new View.OnClickListener() {
185
186         @Override
187         public void onClick(final View v) {
188             switch (v.getId()) {
189                 case R.id.color_scheme_dialog_preset_one:
190                     mColorPicker.setColor(getColor(R.color.holo_blue_light));
191                     break;
192                 case R.id.color_scheme_dialog_preset_two:
193                     mColorPicker.setColor(getColor(R.color.holo_green_light));
194                     break;
195                 case R.id.color_scheme_dialog_preset_three:
196                     mColorPicker.setColor(getColor(R.color.holo_orange_dark));
197                     break;
198                 case R.id.color_scheme_dialog_preset_four:
199                     mColorPicker.setColor(getColor(R.color.holo_orange_light));
200                     break;
201                 case R.id.color_scheme_dialog_preset_five:
202                     mColorPicker.setColor(getColor(R.color.holo_purple));
203                     break;
204                 case R.id.color_scheme_dialog_preset_six:
205                     mColorPicker.setColor(getColor(R.color.holo_red_light));
206                     break;
207                 case R.id.color_scheme_dialog_preset_seven:
208                     mColorPicker.setColor(getColor(R.color.white));
209                     break;
210                 case R.id.color_scheme_dialog_preset_eight:
211                     mColorPicker.setColor(getColor(R.color.black));
212                     break;
213                 case R.id.color_scheme_dialog_old_color:
214                     mColorPicker.setColor(mCurrentColor);
215                     break;
216                 default:
217                     break;
218             }
219             if (mListener != null) {
220                 mListener.onColorChanged(getColor());
221             }
222         }
223     };
224
225 }