/* * Copyright (C) 2015 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.setupwizardlib.test; import android.annotation.SuppressLint; import android.app.Dialog; import android.content.Context; import android.content.res.Configuration; import android.graphics.drawable.Drawable; import android.net.Uri; import android.os.Build.VERSION; import android.os.Build.VERSION_CODES; import android.os.Bundle; import android.test.AndroidTestCase; import android.test.suitebuilder.annotation.SmallTest; import android.view.InputQueue; import android.view.KeyEvent; import android.view.LayoutInflater; import android.view.MotionEvent; import android.view.SurfaceHolder.Callback2; import android.view.View; import android.view.ViewGroup.LayoutParams; import android.view.Window; import android.view.WindowManager; import com.android.setupwizardlib.util.SystemBarHelper; public class SystemBarHelperTest extends AndroidTestCase { private static final int STATUS_BAR_DISABLE_BACK = 0x00400000; @SuppressLint("InlinedApi") private static final int DEFAULT_IMMERSIVE_FLAGS = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION; @SuppressLint("InlinedApi") private static final int DIALOG_IMMERSIVE_FLAGS = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY; @SmallTest public void testAddVisibilityFlagView() { final View view = createViewWithSystemUiVisibility(0x456); SystemBarHelper.addVisibilityFlag(view, 0x1400); if (VERSION.SDK_INT >= VERSION_CODES.HONEYCOMB) { // Check that result is 0x1456, because 0x1400 | 0x456 = 0x1456. assertEquals("View visibility should be 0x1456", 0x1456, view.getSystemUiVisibility()); } } @SmallTest public void testRemoveVisibilityFlagView() { final View view = createViewWithSystemUiVisibility(0x456); SystemBarHelper.removeVisibilityFlag(view, 0x1400); if (VERSION.SDK_INT >= VERSION_CODES.HONEYCOMB) { // Check that result is 0x56, because 0x456 & ~0x1400 = 0x56. assertEquals("View visibility should be 0x56", 0x56, view.getSystemUiVisibility()); } } @SmallTest public void testAddVisibilityFlagWindow() { final Window window = createWindowWithSystemUiVisibility(0x456); SystemBarHelper.addVisibilityFlag(window, 0x1400); if (VERSION.SDK_INT >= VERSION_CODES.HONEYCOMB) { // Check that result is 0x1456 = 0x1400 | 0x456. assertEquals("View visibility should be 0x1456", 0x1456, window.getAttributes().systemUiVisibility); } } @SmallTest public void testRemoveVisibilityFlagWindow() { final Window window = createWindowWithSystemUiVisibility(0x456); SystemBarHelper.removeVisibilityFlag(window, 0x1400); if (VERSION.SDK_INT >= VERSION_CODES.HONEYCOMB) { // Check that result is 0x56 = 0x456 & ~0x1400. assertEquals("View visibility should be 0x56", 0x56, window.getAttributes().systemUiVisibility); } } @SmallTest public void testHideSystemBarsWindow() { final Window window = createWindowWithSystemUiVisibility(0x456); SystemBarHelper.hideSystemBars(window); if (VERSION.SDK_INT >= VERSION_CODES.LOLLIPOP) { assertEquals("DEFAULT_IMMERSIVE_FLAGS should be added to window's systemUiVisibility", DEFAULT_IMMERSIVE_FLAGS | 0x456, window.getAttributes().systemUiVisibility); assertEquals( "DEFAULT_IMMERSIVE_FLAGS should be added to decorView's systemUiVisibility", DEFAULT_IMMERSIVE_FLAGS | 0x456, window.getDecorView().getSystemUiVisibility()); } } @SmallTest public void testHideSystemBarsDialog() { final Dialog dialog = new Dialog(mContext); if (VERSION.SDK_INT >= VERSION_CODES.LOLLIPOP) { final WindowManager.LayoutParams attrs = dialog.getWindow().getAttributes(); attrs.systemUiVisibility = 0x456; dialog.getWindow().setAttributes(attrs); } SystemBarHelper.hideSystemBars(dialog); if (VERSION.SDK_INT >= VERSION_CODES.LOLLIPOP) { assertEquals("DIALOG_IMMERSIVE_FLAGS should be added to window's systemUiVisibility", DIALOG_IMMERSIVE_FLAGS | 0x456, dialog.getWindow().getAttributes().systemUiVisibility); } } @SmallTest public void testSetBackButtonVisibleTrue() { final Window window = createWindowWithSystemUiVisibility(0x456); SystemBarHelper.setBackButtonVisible(window, true); if (VERSION.SDK_INT >= VERSION_CODES.HONEYCOMB) { assertEquals("View visibility should be 0x456", 0x456, window.getAttributes().systemUiVisibility); } } @SmallTest public void testSetBackButtonVisibleFalse() { final Window window = createWindowWithSystemUiVisibility(0x456); SystemBarHelper.setBackButtonVisible(window, false); if (VERSION.SDK_INT >= VERSION_CODES.HONEYCOMB) { assertEquals("STATUS_BAR_DISABLE_BACK should be added to systemUiVisibility", 0x456 | STATUS_BAR_DISABLE_BACK, window.getAttributes().systemUiVisibility); } } private View createViewWithSystemUiVisibility(int vis) { final View view = new View(getContext()); if (VERSION.SDK_INT >= VERSION_CODES.HONEYCOMB) { view.setSystemUiVisibility(vis); } return view; } private Window createWindowWithSystemUiVisibility(int vis) { final Window window = new TestWindow(getContext(), createViewWithSystemUiVisibility(vis)); if (VERSION.SDK_INT >= VERSION_CODES.HONEYCOMB) { WindowManager.LayoutParams attrs = window.getAttributes(); attrs.systemUiVisibility = vis; window.setAttributes(attrs); } return window; } private static class TestWindow extends Window { private View mDecorView; public TestWindow(Context context, View decorView) { super(context); mDecorView = decorView; } @Override public void takeSurface(Callback2 callback2) { } @Override public void takeInputQueue(InputQueue.Callback callback) { } @Override public boolean isFloating() { return false; } @Override public void setContentView(int i) { } @Override public void setContentView(View view) { } @Override public void setContentView(View view, LayoutParams layoutParams) { } @Override public void addContentView(View view, LayoutParams layoutParams) { } @Override public View getCurrentFocus() { return null; } @Override public LayoutInflater getLayoutInflater() { return LayoutInflater.from(getContext()); } @Override public void setTitle(CharSequence charSequence) { } @Override public void setTitleColor(int i) { } @Override public void openPanel(int i, KeyEvent keyEvent) { } @Override public void closePanel(int i) { } @Override public void togglePanel(int i, KeyEvent keyEvent) { } @Override public void invalidatePanelMenu(int i) { } @Override public boolean performPanelShortcut(int i, int i2, KeyEvent keyEvent, int i3) { return false; } @Override public boolean performPanelIdentifierAction(int i, int i2, int i3) { return false; } @Override public void closeAllPanels() { } @Override public boolean performContextMenuIdentifierAction(int i, int i2) { return false; } @Override public void onConfigurationChanged(Configuration configuration) { } @Override public void setBackgroundDrawable(Drawable drawable) { } @Override public void setFeatureDrawableResource(int i, int i2) { } @Override public void setFeatureDrawableUri(int i, Uri uri) { } @Override public void setFeatureDrawable(int i, Drawable drawable) { } @Override public void setFeatureDrawableAlpha(int i, int i2) { } @Override public void setFeatureInt(int i, int i2) { } @Override public void takeKeyEvents(boolean b) { } @Override public boolean superDispatchKeyEvent(KeyEvent keyEvent) { return false; } @Override public boolean superDispatchKeyShortcutEvent(KeyEvent keyEvent) { return false; } @Override public boolean superDispatchTouchEvent(MotionEvent motionEvent) { return false; } @Override public boolean superDispatchTrackballEvent(MotionEvent motionEvent) { return false; } @Override public boolean superDispatchGenericMotionEvent(MotionEvent motionEvent) { return false; } @Override public View getDecorView() { return mDecorView; } @Override public View peekDecorView() { return mDecorView; } @Override public Bundle saveHierarchyState() { return null; } @Override public void restoreHierarchyState(Bundle bundle) { } @Override protected void onActive() { } @Override public void setChildDrawable(int i, Drawable drawable) { } @Override public void setChildInt(int i, int i2) { } @Override public boolean isShortcutKey(int i, KeyEvent keyEvent) { return false; } @Override public void setVolumeControlStream(int i) { } @Override public int getVolumeControlStream() { return 0; } @Override public int getStatusBarColor() { return 0; } @Override public void setStatusBarColor(int i) { } @Override public int getNavigationBarColor() { return 0; } @Override public void setNavigationBarColor(int i) { } } }