1 /*
2  * Copyright (C) 2007 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 
17 package com.android.statusbartest;
18 
19 import android.app.Notification;
20 import android.app.NotificationManager;
21 import android.view.View;
22 import android.content.Intent;
23 import android.app.PendingIntent;
24 import android.app.StatusBarManager;
25 import android.os.Handler;
26 import android.util.Log;
27 import android.os.SystemClock;
28 import android.view.Window;
29 import android.view.WindowManager;
30 
31 public class StatusBarTest extends TestActivity
32 {
33     private final static String TAG = "StatusBarTest";
34     StatusBarManager mStatusBarManager;
35     NotificationManager mNotificationManager;
36     Handler mHandler = new Handler();
37     int mUiVisibility = 0;
38     View mListView;
39 
40     View.OnSystemUiVisibilityChangeListener mOnSystemUiVisibilityChangeListener
41             = new View.OnSystemUiVisibilityChangeListener() {
42         public void onSystemUiVisibilityChange(int visibility) {
43             Log.d(TAG, "onSystemUiVisibilityChange visibility=" + visibility);
44         }
45     };
46 
47     @Override
tag()48     protected String tag() {
49         return TAG;
50     }
51 
52     @Override
tests()53     protected Test[] tests() {
54         mStatusBarManager = (StatusBarManager)getSystemService(STATUS_BAR_SERVICE);
55         mNotificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
56 
57         return mTests;
58     }
59 
60     @Override
onResume()61     public void onResume() {
62         super.onResume();
63 
64         mListView = findViewById(android.R.id.list);
65         mListView.setOnSystemUiVisibilityChangeListener(mOnSystemUiVisibilityChangeListener);
66     }
67 
68     private Test[] mTests = new Test[] {
69         new Test("toggle LOW_PROFILE (lights out)") {
70             public void run() {
71                 if (0 != (mUiVisibility & View.SYSTEM_UI_FLAG_LOW_PROFILE)) {
72                     mUiVisibility &= ~View.SYSTEM_UI_FLAG_LOW_PROFILE;
73                 } else {
74                     mUiVisibility |= View.SYSTEM_UI_FLAG_LOW_PROFILE;
75                 }
76                 mListView.setSystemUiVisibility(mUiVisibility);
77             }
78         },
79         new Test("toggle HIDE_NAVIGATION") {
80             public void run() {
81                 if (0 != (mUiVisibility & View.SYSTEM_UI_FLAG_HIDE_NAVIGATION)) {
82                     mUiVisibility &= ~View.SYSTEM_UI_FLAG_HIDE_NAVIGATION;
83                 } else {
84                     mUiVisibility |= View.SYSTEM_UI_FLAG_HIDE_NAVIGATION;
85                 }
86                 mListView.setSystemUiVisibility(mUiVisibility);
87 
88             }
89         },
90         new Test("clear SYSTEM_UI_FLAGs") {
91             public void run() {
92                 mUiVisibility = 0;
93                 mListView.setSystemUiVisibility(mUiVisibility);
94             }
95         },
96 //        new Test("no setSystemUiVisibility") {
97 //            public void run() {
98 //                View v = findViewById(android.R.id.list);
99 //                v.setOnSystemUiVisibilityChangeListener(null);
100 //                v.setSystemUiVisibility(View.SYSTEM_UI_FLAG_VISIBLE);
101 //            }
102 //        },
103         new Test("systemUiVisibility: STATUS_BAR_DISABLE_HOME") {
104             public void run() {
105                 mListView.setSystemUiVisibility(View.STATUS_BAR_DISABLE_HOME);
106             }
107         },
108         new Test("Double Remove") {
109             public void run() {
110                 Log.d(TAG, "set 0");
111                 mStatusBarManager.setIcon("speakerphone", R.drawable.stat_sys_phone, 0, null);
112                 Log.d(TAG, "remove 1");
113                 mStatusBarManager.removeIcon("tty");
114 
115                 SystemClock.sleep(1000);
116 
117                 Log.d(TAG, "set 1");
118                 mStatusBarManager.setIcon("tty", R.drawable.stat_sys_phone, 0, null);
119                 if (false) {
120                     Log.d(TAG, "set 2");
121                     mStatusBarManager.setIcon("tty", R.drawable.stat_sys_phone, 0, null);
122                 }
123                 Log.d(TAG, "remove 2");
124                 mStatusBarManager.removeIcon("tty");
125                 Log.d(TAG, "set 3");
126                 mStatusBarManager.setIcon("speakerphone", R.drawable.stat_sys_phone, 0, null);
127             }
128         },
129         new Test("Hide (FLAG_FULLSCREEN)") {
130             public void run() {
131                 Window win = getWindow();
132                 win.setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
133                         WindowManager.LayoutParams.FLAG_FULLSCREEN);
134                 Log.d(TAG, "flags=" + Integer.toHexString(win.getAttributes().flags));
135             }
136         },
137         new Test("Show (~FLAG_FULLSCREEN)") {
138             public void run() {
139                 Window win = getWindow();
140                 win.setFlags(0, WindowManager.LayoutParams.FLAG_FULLSCREEN);
141                 Log.d(TAG, "flags=" + Integer.toHexString(win.getAttributes().flags));
142             }
143         },
144         new Test("Immersive: Enter") {
145             public void run() {
146                 setImmersive(true);
147             }
148         },
149         new Test("Immersive: Exit") {
150             public void run() {
151                 setImmersive(false);
152             }
153         },
154         new Test("Priority notification") {
155             public void run() {
156                 Notification not = new Notification();
157                 not.icon = R.drawable.stat_sys_phone;
158                 not.when = System.currentTimeMillis()-(1000*60*60*24);
159                 not.setLatestEventInfo(StatusBarTest.this,
160                                 "Incoming call",
161                                 "from: Imperious Leader",
162                                 null
163                                 );
164                 not.flags |= Notification.FLAG_HIGH_PRIORITY;
165                 Intent fullScreenIntent = new Intent(StatusBarTest.this, TestAlertActivity.class);
166                 int id = (int)System.currentTimeMillis(); // XXX HAX
167                 fullScreenIntent.putExtra("id", id);
168                 not.fullScreenIntent = PendingIntent.getActivity(
169                     StatusBarTest.this,
170                     0,
171                     fullScreenIntent,
172                     PendingIntent.FLAG_CANCEL_CURRENT);
173                 // if you tap on it you should get the original alert box
174                 not.contentIntent = not.fullScreenIntent;
175                 mNotificationManager.notify(id, not);
176             }
177         },
178         new Test("Disable Alerts") {
179             public void run() {
180                 mStatusBarManager.disable(StatusBarManager.DISABLE_NOTIFICATION_ALERTS);
181             }
182         },
183         new Test("Disable Ticker") {
184             public void run() {
185                 mStatusBarManager.disable(StatusBarManager.DISABLE_NOTIFICATION_TICKER);
186             }
187         },
188         new Test("Disable Expand in 3 sec.") {
189             public void run() {
190                 mHandler.postDelayed(new Runnable() {
191                         public void run() {
192                             mStatusBarManager.disable(StatusBarManager.DISABLE_EXPAND);
193                         }
194                     }, 3000);
195             }
196         },
197         new Test("Disable Notifications in 3 sec.") {
198             public void run() {
199                 mHandler.postDelayed(new Runnable() {
200                         public void run() {
201                             mStatusBarManager.disable(StatusBarManager.DISABLE_NOTIFICATION_ICONS);
202                         }
203                     }, 3000);
204             }
205         },
206         new Test("Disable Expand + Notifications in 3 sec.") {
207             public void run() {
208                 mHandler.postDelayed(new Runnable() {
209                         public void run() {
210                             mStatusBarManager.disable(StatusBarManager.DISABLE_EXPAND
211                                     | StatusBarManager.DISABLE_NOTIFICATION_ICONS);
212                         }
213                     }, 3000);
214             }
215         },
216         new Test("Disable Home (StatusBarManager)") {
217             public void run() {
218                 mStatusBarManager.disable(StatusBarManager.DISABLE_HOME);
219             }
220         },
221         new Test("Disable Back (StatusBarManager)") {
222             public void run() {
223                 mStatusBarManager.disable(StatusBarManager.DISABLE_BACK);
224             }
225         },
226         new Test("Disable Recent (StatusBarManager)") {
227             public void run() {
228                 mStatusBarManager.disable(StatusBarManager.DISABLE_RECENT);
229             }
230         },
231         new Test("Disable Clock") {
232             public void run() {
233                 mStatusBarManager.disable(StatusBarManager.DISABLE_CLOCK);
234             }
235         },
236         new Test("Disable System Info") {
237             public void run() {
238                 mStatusBarManager.disable(StatusBarManager.DISABLE_SYSTEM_INFO);
239             }
240         },
241         new Test("Disable everything in 3 sec") {
242             public void run() {
243                 mHandler.postDelayed(new Runnable() {
244                         public void run() {
245                             mStatusBarManager.disable(~StatusBarManager.DISABLE_NONE);
246                         }
247                     }, 3000);
248             }
249         },
250         new Test("Enable everything") {
251             public void run() {
252                 mStatusBarManager.disable(StatusBarManager.DISABLE_NONE);
253             }
254         },
255         new Test("Enable everything in 3 sec.") {
256             public void run() {
257                 mHandler.postDelayed(new Runnable() {
258                         public void run() {
259                             mStatusBarManager.disable(0);
260                         }
261                     }, 3000);
262             }
263         },
264         new Test("Notify in 3 sec.") {
265             public void run() {
266                 mHandler.postDelayed(new Runnable() {
267                         public void run() {
268                             mNotificationManager.notify(1,
269                                     new Notification(
270                                             R.drawable.ic_statusbar_missedcall,
271                                             "tick tick tick",
272                                             System.currentTimeMillis()-(1000*60*60*24)
273                                             ));
274                         }
275                     }, 3000);
276             }
277         },
278         new Test("Cancel Notification in 3 sec.") {
279             public void run() {
280                 mHandler.postDelayed(new Runnable() {
281                         public void run() {
282                             mNotificationManager.cancel(1);
283                         }
284                     }, 3000);
285             }
286         },
287         new Test("Expand notifications") {
288             public void run() {
289                 mStatusBarManager.expandNotificationsPanel();
290             }
291         },
292         new Test(" ... in 3 sec.") {
293             public void run() {
294                 mHandler.postDelayed(new Runnable() {
295                         public void run() {
296                             mStatusBarManager.expandNotificationsPanel();
297                         }
298                     }, 3000);
299             }
300         },
301         new Test("Expand settings") {
302             public void run() {
303                 mStatusBarManager.expandSettingsPanel();
304             }
305         },
306         new Test(" ... in 3 sec.") {
307             public void run() {
308                 mHandler.postDelayed(new Runnable() {
309                         public void run() {
310                             mStatusBarManager.expandSettingsPanel();
311                         }
312                     }, 3000);
313             }
314         },
315         new Test("Collapse panels in 3 sec.") {
316             public void run() {
317                 mHandler.postDelayed(new Runnable() {
318                         public void run() {
319                             mStatusBarManager.collapsePanels();
320                         }
321                     }, 3000);
322             }
323         },
324         new Test("More icons") {
325             public void run() {
326                 for (String slot: new String[] {
327                             "sync_failing",
328                             "gps",
329                             "bluetooth",
330                             "tty",
331                             "speakerphone",
332                             "mute",
333                             "wifi",
334                             "alarm_clock",
335                             "secure",
336                         }) {
337                     mStatusBarManager.setIconVisibility(slot, true);
338                 }
339             }
340         },
341     };
342 }
343