SystemBarHelperTest.java revision e96ec75d23e82b352ab1393dbac8d6372ceb62d7
1/*
2 * Copyright (C) 2015 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.setupwizardlib.test;
18
19import android.annotation.SuppressLint;
20import android.content.Context;
21import android.content.res.Configuration;
22import android.graphics.drawable.Drawable;
23import android.net.Uri;
24import android.os.Bundle;
25import android.test.AndroidTestCase;
26import android.test.suitebuilder.annotation.SmallTest;
27import android.view.InputQueue;
28import android.view.KeyEvent;
29import android.view.LayoutInflater;
30import android.view.MotionEvent;
31import android.view.SurfaceHolder.Callback2;
32import android.view.View;
33import android.view.ViewGroup.LayoutParams;
34import android.view.Window;
35import android.view.WindowManager;
36
37import com.android.setupwizardlib.util.SystemBarHelper;
38
39public class SystemBarHelperTest extends AndroidTestCase {
40
41    private static final int STATUS_BAR_DISABLE_BACK = 0x00400000;
42
43    @SuppressLint("InlinedApi")
44    private static final int DEFAULT_IMMERSIVE_FLAGS =
45            View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
46            | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
47            | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
48            | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION;
49
50    @SmallTest
51    public void testAddVisibilityFlagView() {
52        final View view = createViewWithSystemUiVisibility(0x456);
53        SystemBarHelper.addVisibilityFlag(view, 0x1400);
54        assertEquals("View visibility should be 0x1456", 0x1456, view.getSystemUiVisibility());
55    }
56
57    @SmallTest
58    public void testRemoveVisibilityFlagView() {
59        final View view = createViewWithSystemUiVisibility(0x456);
60        SystemBarHelper.removeVisibilityFlag(view, 0x1400);
61        assertEquals("View visibility should be 0x56", 0x56, view.getSystemUiVisibility());
62    }
63
64    @SmallTest
65    public void testAddVisibilityFlagWindow() {
66        final Window window = createWindowWithSystemUiVisibility(0x456);
67        SystemBarHelper.addVisibilityFlag(window, 0x1400);
68        assertEquals("View visibility should be 0x1456", 0x1456,
69                window.getAttributes().systemUiVisibility);
70    }
71
72    @SmallTest
73    public void testRemoveVisibilityFlagWindow() {
74        final Window window = createWindowWithSystemUiVisibility(0x456);
75        SystemBarHelper.removeVisibilityFlag(window, 0x1400);
76        assertEquals("View visibility should be 0x56", 0x56,
77                window.getAttributes().systemUiVisibility);
78    }
79
80    @SmallTest
81    public void testHideSystemBarsWindow() {
82        final Window window = createWindowWithSystemUiVisibility(0x456);
83        SystemBarHelper.hideSystemBars(window);
84        assertEquals("DEFAULT_IMMERSIVE_FLAGS should be added to window's systemUiVisibility",
85                DEFAULT_IMMERSIVE_FLAGS | 0x456,
86                window.getAttributes().systemUiVisibility);
87        assertEquals("DEFAULT_IMMERSIVE_FLAGS should be added to decorView's systemUiVisibility",
88                DEFAULT_IMMERSIVE_FLAGS | 0x456,
89                window.getDecorView().getSystemUiVisibility());
90    }
91
92    @SmallTest
93    public void testSetBackButtonVisibleTrue() {
94        final Window window = createWindowWithSystemUiVisibility(0x456);
95        SystemBarHelper.setBackButtonVisible(window, true);
96        assertEquals("View visibility should be 0x456", 0x456,
97                window.getAttributes().systemUiVisibility);
98    }
99
100    @SmallTest
101    public void testSetBackButtonVisibleFalse() {
102        final Window window = createWindowWithSystemUiVisibility(0x456);
103        SystemBarHelper.setBackButtonVisible(window, false);
104        assertEquals("STATUS_BAR_DISABLE_BACK should be added to systemUiVisibility",
105                0x456 | STATUS_BAR_DISABLE_BACK, window.getAttributes().systemUiVisibility);
106    }
107
108    private View createViewWithSystemUiVisibility(int vis) {
109        final View view = new View(getContext());
110        view.setSystemUiVisibility(vis);
111        return view;
112    }
113
114    private Window createWindowWithSystemUiVisibility(int vis) {
115        final Window window = new TestWindow(getContext(), createViewWithSystemUiVisibility(vis));
116        WindowManager.LayoutParams attrs = window.getAttributes();
117        attrs.systemUiVisibility = vis;
118        window.setAttributes(attrs);
119        return window;
120    }
121
122    private static class TestWindow extends Window {
123
124        private View mDecorView;
125
126        public TestWindow(Context context, View decorView) {
127            super(context);
128            mDecorView = decorView;
129        }
130
131        @Override
132        public void takeSurface(Callback2 callback2) {
133
134        }
135
136        @Override
137        public void takeInputQueue(InputQueue.Callback callback) {
138
139        }
140
141        @Override
142        public boolean isFloating() {
143            return false;
144        }
145
146        @Override
147        public void setContentView(int i) {
148
149        }
150
151        @Override
152        public void setContentView(View view) {
153
154        }
155
156        @Override
157        public void setContentView(View view, LayoutParams layoutParams) {
158
159        }
160
161        @Override
162        public void addContentView(View view, LayoutParams layoutParams) {
163
164        }
165
166        @Override
167        public View getCurrentFocus() {
168            return null;
169        }
170
171        @Override
172        public LayoutInflater getLayoutInflater() {
173            return LayoutInflater.from(getContext());
174        }
175
176        @Override
177        public void setTitle(CharSequence charSequence) {
178
179        }
180
181        @Override
182        public void setTitleColor(int i) {
183
184        }
185
186        @Override
187        public void openPanel(int i, KeyEvent keyEvent) {
188
189        }
190
191        @Override
192        public void closePanel(int i) {
193
194        }
195
196        @Override
197        public void togglePanel(int i, KeyEvent keyEvent) {
198
199        }
200
201        @Override
202        public void invalidatePanelMenu(int i) {
203
204        }
205
206        @Override
207        public boolean performPanelShortcut(int i, int i2, KeyEvent keyEvent, int i3) {
208            return false;
209        }
210
211        @Override
212        public boolean performPanelIdentifierAction(int i, int i2, int i3) {
213            return false;
214        }
215
216        @Override
217        public void closeAllPanels() {
218
219        }
220
221        @Override
222        public boolean performContextMenuIdentifierAction(int i, int i2) {
223            return false;
224        }
225
226        @Override
227        public void onConfigurationChanged(Configuration configuration) {
228
229        }
230
231        @Override
232        public void setBackgroundDrawable(Drawable drawable) {
233
234        }
235
236        @Override
237        public void setFeatureDrawableResource(int i, int i2) {
238
239        }
240
241        @Override
242        public void setFeatureDrawableUri(int i, Uri uri) {
243
244        }
245
246        @Override
247        public void setFeatureDrawable(int i, Drawable drawable) {
248
249        }
250
251        @Override
252        public void setFeatureDrawableAlpha(int i, int i2) {
253
254        }
255
256        @Override
257        public void setFeatureInt(int i, int i2) {
258
259        }
260
261        @Override
262        public void takeKeyEvents(boolean b) {
263
264        }
265
266        @Override
267        public boolean superDispatchKeyEvent(KeyEvent keyEvent) {
268            return false;
269        }
270
271        @Override
272        public boolean superDispatchKeyShortcutEvent(KeyEvent keyEvent) {
273            return false;
274        }
275
276        @Override
277        public boolean superDispatchTouchEvent(MotionEvent motionEvent) {
278            return false;
279        }
280
281        @Override
282        public boolean superDispatchTrackballEvent(MotionEvent motionEvent) {
283            return false;
284        }
285
286        @Override
287        public boolean superDispatchGenericMotionEvent(MotionEvent motionEvent) {
288            return false;
289        }
290
291        @Override
292        public View getDecorView() {
293            return mDecorView;
294        }
295
296        @Override
297        public View peekDecorView() {
298            return mDecorView;
299        }
300
301        @Override
302        public Bundle saveHierarchyState() {
303            return null;
304        }
305
306        @Override
307        public void restoreHierarchyState(Bundle bundle) {
308
309        }
310
311        @Override
312        protected void onActive() {
313
314        }
315
316        @Override
317        public void setChildDrawable(int i, Drawable drawable) {
318
319        }
320
321        @Override
322        public void setChildInt(int i, int i2) {
323
324        }
325
326        @Override
327        public boolean isShortcutKey(int i, KeyEvent keyEvent) {
328            return false;
329        }
330
331        @Override
332        public void setVolumeControlStream(int i) {
333
334        }
335
336        @Override
337        public int getVolumeControlStream() {
338            return 0;
339        }
340
341        @Override
342        public int getStatusBarColor() {
343            return 0;
344        }
345
346        @Override
347        public void setStatusBarColor(int i) {
348
349        }
350
351        @Override
352        public int getNavigationBarColor() {
353            return 0;
354        }
355
356        @Override
357        public void setNavigationBarColor(int i) {
358
359        }
360    }
361}
362