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
17package com.android.statusbartest;
18
19import android.app.Notification;
20import android.app.NotificationManager;
21import android.view.View;
22import android.content.Intent;
23import android.app.PendingIntent;
24import android.app.StatusBarManager;
25import android.os.Handler;
26import android.util.Log;
27import android.os.SystemClock;
28import android.view.Window;
29import android.view.WindowManager;
30
31public 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
48    protected String tag() {
49        return TAG;
50    }
51
52    @Override
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
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