• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 package org.connectbot.util;
2 
3 import android.app.Activity;
4 import android.content.Context;
5 import android.content.SharedPreferences;
6 import android.content.res.Configuration;
7 import android.graphics.Canvas;
8 import android.graphics.Paint;
9 import android.os.Bundle;
10 import android.preference.PreferenceManager;
11 import android.view.Menu;
12 import android.view.MenuItem;
13 import android.view.View;
14 import android.view.ViewGroup;
15 import android.view.MenuItem.OnMenuItemClickListener;
16 import android.view.ViewGroup.LayoutParams;
17 import android.widget.AdapterView;
18 import android.widget.BaseAdapter;
19 import android.widget.GridView;
20 import android.widget.LinearLayout;
21 import android.widget.AdapterView.OnItemClickListener;
22 
23 import com.googlecode.android_scripting.R;
24 
25 import org.connectbot.util.UberColorPickerDialog.OnColorChangedListener;
26 
27 /**
28  * @author modified by raaar
29  */
30 public class ColorsActivity extends Activity implements OnItemClickListener, OnColorChangedListener {
31 
32   private SharedPreferences mPreferences;
33 
34   private static int sLayoutLanscapeWidth = 400;
35   private static int sLayoutPortraitWidth = 210;
36 
37   private GridView mColorGrid;
38   private LinearLayout mLayout;
39 
40   private int mFgColor;
41   private int mBgColor;
42 
43   private int mCurrentColor = 0;
44 
45   @Override
onCreate(Bundle savedInstanceState)46   protected void onCreate(Bundle savedInstanceState) {
47     super.onCreate(savedInstanceState);
48 
49     mPreferences = PreferenceManager.getDefaultSharedPreferences(this);
50 
51     mFgColor =
52         mPreferences.getInt(PreferenceConstants.COLOR_FG, PreferenceConstants.DEFAULT_FG_COLOR);
53     mBgColor =
54         mPreferences.getInt(PreferenceConstants.COLOR_BG, PreferenceConstants.DEFAULT_BG_COLOR);
55 
56     setContentView(R.layout.act_colors);
57 
58     this.setTitle("Terminal Colors");
59 
60     mLayout = (LinearLayout) findViewById(R.id.color_layout);
61 
62     mColorGrid = (GridView) findViewById(R.id.color_grid);
63     mColorGrid.setOnItemClickListener(this);
64     mColorGrid.setSelection(0);
65 
66     if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) {
67       mColorGrid.setNumColumns(2);
68       LayoutParams params = mLayout.getLayoutParams();
69       params.height = params.width;
70       params.width = LayoutParams.WRAP_CONTENT;
71     }
72     mColorGrid.setAdapter(new ColorsAdapter(true));
73 
74   }
75 
76   private class ColorsAdapter extends BaseAdapter {
77     private boolean mSquareViews;
78 
ColorsAdapter(boolean squareViews)79     public ColorsAdapter(boolean squareViews) {
80       mSquareViews = squareViews;
81     }
82 
getView(int position, View convertView, ViewGroup parent)83     public View getView(int position, View convertView, ViewGroup parent) {
84       ColorView c;
85       if (convertView == null) {
86         c = new ColorView(ColorsActivity.this, mSquareViews);
87       } else {
88         c = (ColorView) convertView;
89       }
90       if (position == 0) {
91         c.setColor(mFgColor);
92         c.setTitle("Foreground color");
93       } else {
94         c.setColor(mBgColor);
95         c.setTitle("Background color");
96       }
97       return c;
98     }
99 
getCount()100     public int getCount() {
101       return 2;
102     }
103 
getItem(int position)104     public Object getItem(int position) {
105       return (position == 0) ? mFgColor : mBgColor;
106     }
107 
getItemId(int position)108     public long getItemId(int position) {
109       return position;
110     }
111   }
112 
113   private class ColorView extends View {
114     private boolean mSquare;
115 
116     private Paint mTextPaint;
117     private Paint mShadowPaint;
118     // Things we paint
119     private int mBackgroundColor;
120     private String mText;
121 
122     private int mAscent;
123     private int mWidthCenter;
124     private int mHeightCenter;
125 
ColorView(Context context, boolean square)126     public ColorView(Context context, boolean square) {
127       super(context);
128 
129       mSquare = square;
130 
131       mTextPaint = new Paint();
132       mTextPaint.setAntiAlias(true);
133       mTextPaint.setTextSize(16);
134       mTextPaint.setColor(0xFFFFFFFF);
135       mTextPaint.setTextAlign(Paint.Align.CENTER);
136 
137       mShadowPaint = new Paint(mTextPaint);
138       mShadowPaint.setStyle(Paint.Style.STROKE);
139       mShadowPaint.setStrokeCap(Paint.Cap.ROUND);
140       mShadowPaint.setStrokeJoin(Paint.Join.ROUND);
141       mShadowPaint.setStrokeWidth(4f);
142       mShadowPaint.setColor(0xFF000000);
143 
144       setPadding(20, 20, 20, 20);
145     }
146 
setColor(int color)147     public void setColor(int color) {
148       mBackgroundColor = color;
149     }
150 
setTitle(String title)151     public void setTitle(String title) {
152       mText = title;
153     }
154 
155     @Override
onMeasure(int widthMeasureSpec, int heightMeasureSpec)156     protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
157       int width = measureWidth(widthMeasureSpec);
158 
159       int height;
160       if (mSquare) {
161         height = width;
162       } else {
163         height = measureHeight(heightMeasureSpec);
164       }
165 
166       mAscent = (int) mTextPaint.ascent();
167       mWidthCenter = width / 2;
168       mHeightCenter = height / 2 - mAscent / 2;
169 
170       setMeasuredDimension(width, height);
171     }
172 
measureWidth(int measureSpec)173     private int measureWidth(int measureSpec) {
174       int result = 0;
175       int specMode = MeasureSpec.getMode(measureSpec);
176       int specSize = MeasureSpec.getSize(measureSpec);
177 
178       if (specMode == MeasureSpec.EXACTLY) {
179         // We were told how big to be
180         result = specSize;
181       } else {
182         // Measure the text
183         result = (int) mTextPaint.measureText(mText) + getPaddingLeft() + getPaddingRight();
184         if (specMode == MeasureSpec.AT_MOST) {
185           // Respect AT_MOST value if that was what is called for by
186           // measureSpec
187           result = Math.min(result, specSize);
188         }
189       }
190 
191       return result;
192     }
193 
measureHeight(int measureSpec)194     private int measureHeight(int measureSpec) {
195       int result = 0;
196       int specMode = MeasureSpec.getMode(measureSpec);
197       int specSize = MeasureSpec.getSize(measureSpec);
198 
199       mAscent = (int) mTextPaint.ascent();
200       if (specMode == MeasureSpec.EXACTLY) {
201         // We were told how big to be
202         result = specSize;
203       } else {
204         // Measure the text (beware: ascent is a negative number)
205         result = (int) (-mAscent + mTextPaint.descent()) + getPaddingTop() + getPaddingBottom();
206         if (specMode == MeasureSpec.AT_MOST) {
207           // Respect AT_MOST value if that was what is called for by
208           // measureSpec
209           result = Math.min(result, specSize);
210         }
211       }
212       return result;
213     }
214 
215     @Override
onDraw(Canvas canvas)216     protected void onDraw(Canvas canvas) {
217       super.onDraw(canvas);
218       canvas.drawColor(mBackgroundColor);
219       canvas.drawText(mText, mWidthCenter, mHeightCenter, mShadowPaint);
220       canvas.drawText(mText, mWidthCenter, mHeightCenter, mTextPaint);
221     }
222   }
223 
editColor(int colorNumber)224   private void editColor(int colorNumber) {
225     mCurrentColor = colorNumber;
226     new UberColorPickerDialog(this, this, (colorNumber == 0) ? mFgColor : mBgColor).show();
227   }
228 
onItemClick(AdapterView<?> parent, View view, int position, long id)229   public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
230     editColor(position);
231   }
232 
onNothingSelected(AdapterView<?> arg0)233   public void onNothingSelected(AdapterView<?> arg0) {
234   }
235 
colorChanged(int value)236   public void colorChanged(int value) {
237     SharedPreferences.Editor editor = mPreferences.edit();
238     if (mCurrentColor == 0) {
239       mFgColor = value;
240       editor.putInt(PreferenceConstants.COLOR_FG, mFgColor);
241     } else {
242       mBgColor = value;
243       editor.putInt(PreferenceConstants.COLOR_BG, mBgColor);
244     }
245     editor.commit();
246     mColorGrid.invalidateViews();
247   }
248 
249   @Override
onConfigurationChanged(Configuration newConfig)250   public void onConfigurationChanged(Configuration newConfig) {
251     super.onConfigurationChanged(newConfig);
252     if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
253       mColorGrid.setNumColumns(2);
254       LayoutParams params = mLayout.getLayoutParams();
255       params.height = params.width;
256       params.width = sLayoutLanscapeWidth;
257     } else {
258       mColorGrid.setNumColumns(1);
259       LayoutParams params = mLayout.getLayoutParams();
260       params.height = LayoutParams.WRAP_CONTENT;
261       params.width = sLayoutPortraitWidth;
262     }
263   }
264 
265   @Override
onCreateOptionsMenu(Menu menu)266   public boolean onCreateOptionsMenu(Menu menu) {
267     super.onCreateOptionsMenu(menu);
268     MenuItem reset = menu.add("Reset");
269     reset.setAlphabeticShortcut('r');
270     reset.setNumericShortcut('1');
271     reset.setIcon(android.R.drawable.ic_menu_revert);
272     reset.setOnMenuItemClickListener(new OnMenuItemClickListener() {
273       public boolean onMenuItemClick(MenuItem arg0) {
274         mFgColor = PreferenceConstants.DEFAULT_FG_COLOR;
275         mBgColor = PreferenceConstants.DEFAULT_BG_COLOR;
276         SharedPreferences.Editor editor = mPreferences.edit();
277         editor.putInt(PreferenceConstants.COLOR_FG, mFgColor);
278         editor.putInt(PreferenceConstants.COLOR_BG, mBgColor);
279         editor.commit();
280         mColorGrid.invalidateViews();
281         return true;
282       }
283     });
284     return true;
285   }
286 }
287