• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 package js.kbars;
2 
3 import android.animation.Animator;
4 import android.animation.Animator.AnimatorListener;
5 import android.app.Activity;
6 import android.content.Context;
7 import android.content.Intent;
8 import android.content.res.Configuration;
9 import android.graphics.drawable.ColorDrawable;
10 import android.os.Bundle;
11 import android.os.Handler;
12 import android.util.DisplayMetrics;
13 import android.view.Menu;
14 import android.view.MenuItem;
15 import android.view.MenuItem.OnMenuItemClickListener;
16 import android.view.View;
17 import android.view.View.OnClickListener;
18 import android.view.Window;
19 import android.widget.Button;
20 import android.widget.EditText;
21 import android.widget.FrameLayout.LayoutParams;
22 import android.widget.LinearLayout;
23 import android.widget.Toast;
24 import java.util.ArrayList;
25 import java.util.List;
26 
27 public class KBarsActivity extends Activity {
28     public static final int BASE_FLAGS = 1792;
29     static final boolean DEBUG = true;
30     public static final int FLAG_TRANSLUCENT_NAVIGATION = 134217728;
31     public static final int FLAG_TRANSLUCENT_STATUS = 67108864;
32     private static final int IMMERSIVE_FLAGS = 3846;
33     private static final int IMMERSIVE_FLAGS_STICKY = 5894;
34     private static final int SYSTEM_UI_FLAG_IMMERSIVE = 2048;
35     private static final int SYSTEM_UI_FLAG_IMMERSIVE_STICKY = 4096;
36     static final String TAG = Util.logTag(KBarsActivity.class);
37     private List<View> mButtons = new ArrayList();
38     private CameraBackgroundMenuItem mCameraBackgroundMenuItem;
39     private final Context mContext = this;
40     private EditText mEditText;
41     private TouchTrackingLayout mFrame;
42     private ImageBackgroundMenuItem mImageBackgroundMenuItem;
43 
44     private static final class DebugButton extends Button {
45         private final Handler mHandler = new Handler();
46         private final Runnable mNavTransOff = new Runnable() {
47             public void run() {
48                 DebugButton.this.setNavTrans(false);
49             }
50         };
51         private final Runnable mNavTransOn = new Runnable() {
52             public void run() {
53                 DebugButton.this.setNavTrans(true);
54                 DebugButton.this.cancelTrans();
55                 DebugButton.this.mHandler.postDelayed(DebugButton.this.mNavTransOff, 5000);
56             }
57         };
58 
DebugButton(Context context)59         public DebugButton(Context context) {
60             super(context);
61             setText("Debug");
62             setOnClickListener(new OnClickListener() {
63                 public void onClick(View v) {
64                     DebugButton.this.fallingToast();
65                 }
66             });
67         }
68 
cancelTrans()69         private void cancelTrans() {
70             this.mHandler.removeCallbacks(this.mNavTransOn);
71             this.mHandler.removeCallbacks(this.mNavTransOff);
72         }
73 
setNavTrans(boolean trans)74         private void setNavTrans(boolean trans) {
75             Window w = ((Activity) getContext()).getWindow();
76             if (trans) {
77                 w.addFlags(KBarsActivity.FLAG_TRANSLUCENT_STATUS);
78             } else {
79                 w.clearFlags(KBarsActivity.FLAG_TRANSLUCENT_STATUS);
80             }
81         }
82 
fallingToast()83         public void fallingToast() {
84             this.mNavTransOff.run();
85             Toast.makeText(getContext(), "Here is a toast", 1).show();
86             cancelTrans();
87             this.mHandler.postDelayed(this.mNavTransOn, 1000);
88         }
89     }
90 
91     private static final class InvisibleButton extends Button {
InvisibleButton(Context context)92         public InvisibleButton(Context context) {
93             super(context);
94             super.setVisibility(4);
95         }
96 
setVisibility(int visibility)97         public void setVisibility(int visibility) {
98         }
99     }
100 
onCreate(Bundle savedInstanceState)101     protected void onCreate(Bundle savedInstanceState) {
102         boolean portrait;
103         int i = 0;
104         super.onCreate(savedInstanceState);
105         getWindow().requestFeature(9);
106         DisplayMetrics dm = new DisplayMetrics();
107         getWindowManager().getDefaultDisplay().getRealMetrics(dm);
108         Toast.makeText(this.mContext, dm.widthPixels + "x" + dm.heightPixels + " supported=" + areTranslucentBarsSupported(), 0).show();
109         getActionBar().setTitle("kbars " + Util.getVersionName(this.mContext));
110         getActionBar().setBackgroundDrawable(new ColorDrawable(0));
111         this.mFrame = new TouchTrackingLayout(this.mContext);
112         LinearLayout allButtons = new LinearLayout(this.mContext);
113         Configuration config = getResources().getConfiguration();
114         if (((float) config.screenWidthDp) / ((float) config.screenHeightDp) < 1.0f) {
115             portrait = true;
116         } else {
117             portrait = false;
118         }
119         if (portrait) {
120             i = 1;
121         }
122         allButtons.setOrientation(i);
123         LinearLayout buttons1 = new LinearLayout(this.mContext);
124         buttons1.setOrientation(1);
125         LinearLayout buttons2 = new LinearLayout(this.mContext);
126         buttons2.setOrientation(1);
127         allButtons.addView(buttons1);
128         allButtons.addView(buttons2);
129         LayoutParams buttonsLP = new LayoutParams(-2, -2);
130         buttonsLP.gravity = 17;
131         this.mFrame.addView(allButtons, buttonsLP);
132         this.mEditText = new EditText(this.mContext);
133         this.mEditText.setVisibility(8);
134         buttons1.addView(this.mEditText, -1, -2);
135         buttons1.addView(new TransparencyToggleButton(this.mContext, "status bar", FLAG_TRANSLUCENT_STATUS));
136         buttons1.addView(new TransparencyToggleButton(this.mContext, "navigation bar", FLAG_TRANSLUCENT_NAVIGATION));
137         buttons1.addView(new InvisibleButton(this.mContext));
138         buttons2.addView(new ImmersiveModeToggleButton(this, "immersive", IMMERSIVE_FLAGS));
139         buttons2.addView(new ImmersiveModeToggleButton(this, "sticky immersive", IMMERSIVE_FLAGS_STICKY));
140         buttons2.addView(new LightsOutModeToggleButton(this.mContext));
141         buttons2.addView(new MediaModeToggleButton(this.mContext, this.mFrame));
142         buttons2.addView(new InvisibleButton(this.mContext));
143         setContentView(this.mFrame);
144         addButtons(buttons1);
145         addButtons(buttons2);
146     }
147 
addButtons(LinearLayout buttons)148     private void addButtons(LinearLayout buttons) {
149         for (int i = 0; i < buttons.getChildCount(); i++) {
150             this.mButtons.add(buttons.getChildAt(i));
151         }
152     }
153 
areTranslucentBarsSupported()154     private boolean areTranslucentBarsSupported() {
155         int id = getResources().getIdentifier("config_enableTranslucentDecor", "bool", "android");
156         if (id == 0) {
157             return false;
158         }
159         return getResources().getBoolean(id);
160     }
161 
onCreateOptionsMenu(Menu menu)162     public boolean onCreateOptionsMenu(Menu menu) {
163         RandomColorBackgroundMenuItem randomColorBackgroundMenuItem = new RandomColorBackgroundMenuItem(menu, this.mFrame);
164         this.mImageBackgroundMenuItem = new ImageBackgroundMenuItem(menu, this, this.mFrame);
165         this.mCameraBackgroundMenuItem = new CameraBackgroundMenuItem(menu, this, this.mFrame);
166         createDebugMenuItem(menu);
167         createEditTextMenuItem(menu);
168         createOrientationMenuItem(menu, R.string.action_portrait, 1);
169         createOrientationMenuItem(menu, R.string.action_landscape, 0);
170         createOrientationMenuItem(menu, R.string.action_reverse_portrait, 9);
171         createOrientationMenuItem(menu, R.string.action_reverse_landscape, 8);
172         return true;
173     }
174 
createOrientationMenuItem(Menu menu, int text, final int orientation)175     private void createOrientationMenuItem(Menu menu, int text, final int orientation) {
176         MenuItem mi = menu.add(text);
177         mi.setShowAsAction(0);
178         mi.setOnMenuItemClickListener(new OnMenuItemClickListener() {
179             public boolean onMenuItemClick(MenuItem item) {
180                 KBarsActivity.this.setRequestedOrientation(orientation);
181                 return true;
182             }
183         });
184     }
185 
createDebugMenuItem(Menu menu)186     private void createDebugMenuItem(Menu menu) {
187         final MenuItem mi = menu.add("Show gesture debugging");
188         mi.setShowAsActionFlags(0);
189         mi.setOnMenuItemClickListener(new OnMenuItemClickListener() {
190             public boolean onMenuItemClick(MenuItem item) {
191                 boolean debug;
192                 if (KBarsActivity.this.mFrame.getDebug()) {
193                     debug = false;
194                 } else {
195                     debug = true;
196                 }
197                 KBarsActivity.this.mFrame.setDebug(debug);
198                 mi.setTitle(new StringBuilder(String.valueOf(debug ? "Hide" : "Show")).append(" gesture debugging").toString());
199                 return true;
200             }
201         });
202     }
203 
createEditTextMenuItem(Menu menu)204     private void createEditTextMenuItem(Menu menu) {
205         final MenuItem mi = menu.add("Show EditText");
206         mi.setShowAsActionFlags(0);
207         mi.setOnMenuItemClickListener(new OnMenuItemClickListener() {
208             public boolean onMenuItemClick(MenuItem item) {
209                 boolean isVisible;
210                 int i = 0;
211                 if (KBarsActivity.this.mEditText.getVisibility() == 0) {
212                     isVisible = true;
213                 } else {
214                     isVisible = false;
215                 }
216                 EditText access$1 = KBarsActivity.this.mEditText;
217                 if (isVisible) {
218                     i = 8;
219                 }
220                 access$1.setVisibility(i);
221                 mi.setTitle(new StringBuilder(String.valueOf(isVisible ? "Show" : "Hide")).append(" EditText").toString());
222                 return true;
223             }
224         });
225     }
226 
setSoloButton(boolean visible, View solo, boolean animate)227     public void setSoloButton(boolean visible, View solo, boolean animate) {
228         int i;
229         int vis = 0;
230         if (visible) {
231             i = 1;
232         } else {
233             i = 0;
234         }
235         float alpha = (float) i;
236         if (!visible) {
237             vis = 4;
238         }
239         final int _vis = vis;
240         for (final View view : this.mButtons) {
241             if (!(view == solo || (view instanceof EditText))) {
242                 view.setEnabled(visible);
243                 if (animate) {
244                     view.animate().alpha(alpha).setListener(new AnimatorListener() {
245                         public void onAnimationCancel(Animator animation) {
246                         }
247 
248                         public void onAnimationEnd(Animator animation) {
249                             view.setVisibility(_vis);
250                         }
251 
252                         public void onAnimationRepeat(Animator animation) {
253                         }
254 
255                         public void onAnimationStart(Animator animation) {
256                         }
257                     }).start();
258                 } else {
259                     view.setVisibility(vis);
260                 }
261             }
262         }
263     }
264 
onActivityResult(int requestCode, int resultCode, Intent data)265     protected void onActivityResult(int requestCode, int resultCode, Intent data) {
266         if (requestCode == CameraBackgroundMenuItem.REQUEST_CODE) {
267             this.mCameraBackgroundMenuItem.onActivityResult(resultCode, data);
268         }
269         if (requestCode == ImageBackgroundMenuItem.REQUEST_CODE) {
270             this.mImageBackgroundMenuItem.onActivityResult(resultCode, data);
271         }
272     }
273 }
274