1*90c8c64dSAndroid Build Coastguard Worker /* 2*90c8c64dSAndroid Build Coastguard Worker * Copyright (C) 2012 The Android Open Source Project 3*90c8c64dSAndroid Build Coastguard Worker * 4*90c8c64dSAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License"); 5*90c8c64dSAndroid Build Coastguard Worker * you may not use this file except in compliance with the License. 6*90c8c64dSAndroid Build Coastguard Worker * You may obtain a copy of the License at 7*90c8c64dSAndroid Build Coastguard Worker * 8*90c8c64dSAndroid Build Coastguard Worker * http://www.apache.org/licenses/LICENSE-2.0 9*90c8c64dSAndroid Build Coastguard Worker * 10*90c8c64dSAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software 11*90c8c64dSAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS, 12*90c8c64dSAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13*90c8c64dSAndroid Build Coastguard Worker * See the License for the specific language governing permissions and 14*90c8c64dSAndroid Build Coastguard Worker * limitations under the License. 15*90c8c64dSAndroid Build Coastguard Worker */ 16*90c8c64dSAndroid Build Coastguard Worker package com.example.android.advancedimmersivemode; 17*90c8c64dSAndroid Build Coastguard Worker 18*90c8c64dSAndroid Build Coastguard Worker import android.os.Bundle; 19*90c8c64dSAndroid Build Coastguard Worker import android.support.v4.app.Fragment; 20*90c8c64dSAndroid Build Coastguard Worker import android.view.LayoutInflater; 21*90c8c64dSAndroid Build Coastguard Worker import android.view.View; 22*90c8c64dSAndroid Build Coastguard Worker import android.view.ViewGroup; 23*90c8c64dSAndroid Build Coastguard Worker import android.widget.Button; 24*90c8c64dSAndroid Build Coastguard Worker import android.widget.CheckBox; 25*90c8c64dSAndroid Build Coastguard Worker 26*90c8c64dSAndroid Build Coastguard Worker import com.example.android.common.logger.Log; 27*90c8c64dSAndroid Build Coastguard Worker 28*90c8c64dSAndroid Build Coastguard Worker /** 29*90c8c64dSAndroid Build Coastguard Worker * Demonstrates how to update the app's UI by toggling immersive mode. 30*90c8c64dSAndroid Build Coastguard Worker * Checkboxes are also made available for toggling other UI flags which can 31*90c8c64dSAndroid Build Coastguard Worker * alter the behavior of immersive mode. 32*90c8c64dSAndroid Build Coastguard Worker */ 33*90c8c64dSAndroid Build Coastguard Worker public class AdvancedImmersiveModeFragment extends Fragment { 34*90c8c64dSAndroid Build Coastguard Worker 35*90c8c64dSAndroid Build Coastguard Worker public static final String TAG = "AdvancedImmersiveModeFragment"; 36*90c8c64dSAndroid Build Coastguard Worker public CheckBox mHideNavCheckbox; 37*90c8c64dSAndroid Build Coastguard Worker public CheckBox mHideStatusBarCheckBox; 38*90c8c64dSAndroid Build Coastguard Worker public CheckBox mImmersiveModeCheckBox; 39*90c8c64dSAndroid Build Coastguard Worker public CheckBox mImmersiveModeStickyCheckBox; 40*90c8c64dSAndroid Build Coastguard Worker public CheckBox mLowProfileCheckBox; 41*90c8c64dSAndroid Build Coastguard Worker 42*90c8c64dSAndroid Build Coastguard Worker 43*90c8c64dSAndroid Build Coastguard Worker @Override onCreate(Bundle savedInstanceState)44*90c8c64dSAndroid Build Coastguard Worker public void onCreate(Bundle savedInstanceState) { 45*90c8c64dSAndroid Build Coastguard Worker super.onCreate(savedInstanceState); 46*90c8c64dSAndroid Build Coastguard Worker setHasOptionsMenu(true); 47*90c8c64dSAndroid Build Coastguard Worker } 48*90c8c64dSAndroid Build Coastguard Worker 49*90c8c64dSAndroid Build Coastguard Worker @Override onCreateView(LayoutInflater inflater, ViewGroup container, Bundle state)50*90c8c64dSAndroid Build Coastguard Worker public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle state) { 51*90c8c64dSAndroid Build Coastguard Worker final View flagsView = inflater.inflate(R.layout.fragment_flags, container, false); 52*90c8c64dSAndroid Build Coastguard Worker mLowProfileCheckBox = (CheckBox) flagsView.findViewById(R.id.flag_enable_lowprof); 53*90c8c64dSAndroid Build Coastguard Worker mHideNavCheckbox = (CheckBox) flagsView.findViewById(R.id.flag_hide_navbar); 54*90c8c64dSAndroid Build Coastguard Worker mHideStatusBarCheckBox = (CheckBox) flagsView.findViewById(R.id.flag_hide_statbar); 55*90c8c64dSAndroid Build Coastguard Worker mImmersiveModeCheckBox = (CheckBox) flagsView.findViewById(R.id.flag_enable_immersive); 56*90c8c64dSAndroid Build Coastguard Worker mImmersiveModeStickyCheckBox = 57*90c8c64dSAndroid Build Coastguard Worker (CheckBox) flagsView.findViewById(R.id.flag_enable_immersive_sticky); 58*90c8c64dSAndroid Build Coastguard Worker 59*90c8c64dSAndroid Build Coastguard Worker Button toggleFlagsButton = (Button) flagsView.findViewById(R.id.btn_changeFlags); 60*90c8c64dSAndroid Build Coastguard Worker toggleFlagsButton.setOnClickListener(new View.OnClickListener() { 61*90c8c64dSAndroid Build Coastguard Worker @Override 62*90c8c64dSAndroid Build Coastguard Worker public void onClick(View view) { 63*90c8c64dSAndroid Build Coastguard Worker toggleUiFlags(); 64*90c8c64dSAndroid Build Coastguard Worker } 65*90c8c64dSAndroid Build Coastguard Worker }); 66*90c8c64dSAndroid Build Coastguard Worker 67*90c8c64dSAndroid Build Coastguard Worker Button presetsImmersiveModeButton = (Button) flagsView.findViewById(R.id.btn_immersive); 68*90c8c64dSAndroid Build Coastguard Worker presetsImmersiveModeButton.setOnClickListener(new View.OnClickListener() { 69*90c8c64dSAndroid Build Coastguard Worker @Override 70*90c8c64dSAndroid Build Coastguard Worker public void onClick(View view) { 71*90c8c64dSAndroid Build Coastguard Worker 72*90c8c64dSAndroid Build Coastguard Worker // BEGIN_INCLUDE(immersive_presets) 73*90c8c64dSAndroid Build Coastguard Worker // For immersive mode, the FULLSCREEN, HIDE_HAVIGATION and IMMERSIVE 74*90c8c64dSAndroid Build Coastguard Worker // flags should be set (you can use IMMERSIVE_STICKY instead of IMMERSIVE 75*90c8c64dSAndroid Build Coastguard Worker // as appropriate for your app). The LOW_PROFILE flag should be cleared. 76*90c8c64dSAndroid Build Coastguard Worker 77*90c8c64dSAndroid Build Coastguard Worker // Immersive mode is primarily for situations where the user will be 78*90c8c64dSAndroid Build Coastguard Worker // interacting with the screen, like games or reading books. 79*90c8c64dSAndroid Build Coastguard Worker int uiOptions = flagsView.getSystemUiVisibility(); 80*90c8c64dSAndroid Build Coastguard Worker uiOptions &= ~View.SYSTEM_UI_FLAG_LOW_PROFILE; 81*90c8c64dSAndroid Build Coastguard Worker uiOptions |= View.SYSTEM_UI_FLAG_FULLSCREEN; 82*90c8c64dSAndroid Build Coastguard Worker uiOptions |= View.SYSTEM_UI_FLAG_HIDE_NAVIGATION; 83*90c8c64dSAndroid Build Coastguard Worker uiOptions |= View.SYSTEM_UI_FLAG_IMMERSIVE; 84*90c8c64dSAndroid Build Coastguard Worker uiOptions &= ~View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY; 85*90c8c64dSAndroid Build Coastguard Worker flagsView.setSystemUiVisibility(uiOptions); 86*90c8c64dSAndroid Build Coastguard Worker // END_INCLUDE(immersive_presets) 87*90c8c64dSAndroid Build Coastguard Worker 88*90c8c64dSAndroid Build Coastguard Worker dumpFlagStateToLog(uiOptions); 89*90c8c64dSAndroid Build Coastguard Worker 90*90c8c64dSAndroid Build Coastguard Worker // The below code just updates the checkboxes to reflect which flags have been set. 91*90c8c64dSAndroid Build Coastguard Worker mLowProfileCheckBox.setChecked(false); 92*90c8c64dSAndroid Build Coastguard Worker mHideNavCheckbox.setChecked(true); 93*90c8c64dSAndroid Build Coastguard Worker mHideStatusBarCheckBox.setChecked(true); 94*90c8c64dSAndroid Build Coastguard Worker mImmersiveModeCheckBox.setChecked(true); 95*90c8c64dSAndroid Build Coastguard Worker mImmersiveModeStickyCheckBox.setChecked(false); 96*90c8c64dSAndroid Build Coastguard Worker } 97*90c8c64dSAndroid Build Coastguard Worker }); 98*90c8c64dSAndroid Build Coastguard Worker 99*90c8c64dSAndroid Build Coastguard Worker 100*90c8c64dSAndroid Build Coastguard Worker Button presetsLeanbackModeButton = (Button) flagsView.findViewById(R.id.btn_leanback); 101*90c8c64dSAndroid Build Coastguard Worker presetsLeanbackModeButton.setOnClickListener(new View.OnClickListener() { 102*90c8c64dSAndroid Build Coastguard Worker @Override 103*90c8c64dSAndroid Build Coastguard Worker public void onClick(View view) { 104*90c8c64dSAndroid Build Coastguard Worker // BEGIN_INCLUDE(leanback_presets) 105*90c8c64dSAndroid Build Coastguard Worker // For leanback mode, only the HIDE_NAVE and HIDE_STATUSBAR flags 106*90c8c64dSAndroid Build Coastguard Worker // should be checked. In this case IMMERSIVE should *not* be set, 107*90c8c64dSAndroid Build Coastguard Worker // since this mode is left as soon as the user touches the screen. 108*90c8c64dSAndroid Build Coastguard Worker int uiOptions = flagsView.getSystemUiVisibility(); 109*90c8c64dSAndroid Build Coastguard Worker uiOptions &= ~View.SYSTEM_UI_FLAG_LOW_PROFILE; 110*90c8c64dSAndroid Build Coastguard Worker uiOptions |= View.SYSTEM_UI_FLAG_FULLSCREEN; 111*90c8c64dSAndroid Build Coastguard Worker uiOptions |= View.SYSTEM_UI_FLAG_HIDE_NAVIGATION; 112*90c8c64dSAndroid Build Coastguard Worker uiOptions &= ~View.SYSTEM_UI_FLAG_IMMERSIVE; 113*90c8c64dSAndroid Build Coastguard Worker uiOptions &= ~View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY; 114*90c8c64dSAndroid Build Coastguard Worker flagsView.setSystemUiVisibility(uiOptions); 115*90c8c64dSAndroid Build Coastguard Worker // END_INCLUDE(leanback_presets) 116*90c8c64dSAndroid Build Coastguard Worker 117*90c8c64dSAndroid Build Coastguard Worker dumpFlagStateToLog(uiOptions); 118*90c8c64dSAndroid Build Coastguard Worker 119*90c8c64dSAndroid Build Coastguard Worker // The below code just updates the checkboxes to reflect which flags have been set. 120*90c8c64dSAndroid Build Coastguard Worker mLowProfileCheckBox.setChecked(false); 121*90c8c64dSAndroid Build Coastguard Worker mHideNavCheckbox.setChecked(true); 122*90c8c64dSAndroid Build Coastguard Worker mHideStatusBarCheckBox.setChecked(true); 123*90c8c64dSAndroid Build Coastguard Worker mImmersiveModeCheckBox.setChecked(false); 124*90c8c64dSAndroid Build Coastguard Worker mImmersiveModeStickyCheckBox.setChecked(false); 125*90c8c64dSAndroid Build Coastguard Worker } 126*90c8c64dSAndroid Build Coastguard Worker }); 127*90c8c64dSAndroid Build Coastguard Worker 128*90c8c64dSAndroid Build Coastguard Worker // Setting these flags makes the content appear under the navigation 129*90c8c64dSAndroid Build Coastguard Worker // bars, so that showing/hiding the nav bars doesn't resize the content 130*90c8c64dSAndroid Build Coastguard Worker // window, which can be jarring. 131*90c8c64dSAndroid Build Coastguard Worker int uiOptions = flagsView.getSystemUiVisibility(); 132*90c8c64dSAndroid Build Coastguard Worker uiOptions |= View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION; 133*90c8c64dSAndroid Build Coastguard Worker uiOptions |= View.SYSTEM_UI_FLAG_LAYOUT_STABLE; 134*90c8c64dSAndroid Build Coastguard Worker uiOptions |= View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN; 135*90c8c64dSAndroid Build Coastguard Worker flagsView.setSystemUiVisibility(uiOptions); 136*90c8c64dSAndroid Build Coastguard Worker 137*90c8c64dSAndroid Build Coastguard Worker return flagsView; 138*90c8c64dSAndroid Build Coastguard Worker } 139*90c8c64dSAndroid Build Coastguard Worker 140*90c8c64dSAndroid Build Coastguard Worker /** 141*90c8c64dSAndroid Build Coastguard Worker * Helper method to dump flag state to the log. 142*90c8c64dSAndroid Build Coastguard Worker * @param uiFlags Set of UI flags to inspect 143*90c8c64dSAndroid Build Coastguard Worker */ dumpFlagStateToLog(int uiFlags)144*90c8c64dSAndroid Build Coastguard Worker public void dumpFlagStateToLog(int uiFlags) { 145*90c8c64dSAndroid Build Coastguard Worker if ((uiFlags & View.SYSTEM_UI_FLAG_LOW_PROFILE) != 0) { 146*90c8c64dSAndroid Build Coastguard Worker Log.i(TAG, "SYSTEM_UI_FLAG_LOW_PROFILE is set"); 147*90c8c64dSAndroid Build Coastguard Worker } else { 148*90c8c64dSAndroid Build Coastguard Worker Log.i(TAG, "SYSTEM_UI_FLAG_LOW_PROFILE is unset"); 149*90c8c64dSAndroid Build Coastguard Worker } 150*90c8c64dSAndroid Build Coastguard Worker 151*90c8c64dSAndroid Build Coastguard Worker if ((uiFlags & View.SYSTEM_UI_FLAG_FULLSCREEN) != 0) { 152*90c8c64dSAndroid Build Coastguard Worker Log.i(TAG, "SYSTEM_UI_FLAG_FULLSCREEN is set"); 153*90c8c64dSAndroid Build Coastguard Worker } else { 154*90c8c64dSAndroid Build Coastguard Worker Log.i(TAG, "SYSTEM_UI_FLAG_FULLSCREEN is unset"); 155*90c8c64dSAndroid Build Coastguard Worker } 156*90c8c64dSAndroid Build Coastguard Worker 157*90c8c64dSAndroid Build Coastguard Worker if ((uiFlags & View.SYSTEM_UI_FLAG_HIDE_NAVIGATION) != 0) { 158*90c8c64dSAndroid Build Coastguard Worker Log.i(TAG, "SYSTEM_UI_FLAG_HIDE_NAVIGATION is set"); 159*90c8c64dSAndroid Build Coastguard Worker } else { 160*90c8c64dSAndroid Build Coastguard Worker Log.i(TAG, "SYSTEM_UI_FLAG_HIDE_NAVIGATION is unset"); 161*90c8c64dSAndroid Build Coastguard Worker } 162*90c8c64dSAndroid Build Coastguard Worker 163*90c8c64dSAndroid Build Coastguard Worker if ((uiFlags & View.SYSTEM_UI_FLAG_IMMERSIVE) != 0) { 164*90c8c64dSAndroid Build Coastguard Worker Log.i(TAG, "SYSTEM_UI_FLAG_IMMERSIVE is set"); 165*90c8c64dSAndroid Build Coastguard Worker } else { 166*90c8c64dSAndroid Build Coastguard Worker Log.i(TAG, "SYSTEM_UI_FLAG_IMMERSIVE is unset"); 167*90c8c64dSAndroid Build Coastguard Worker } 168*90c8c64dSAndroid Build Coastguard Worker 169*90c8c64dSAndroid Build Coastguard Worker if ((uiFlags & View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY) != 0) { 170*90c8c64dSAndroid Build Coastguard Worker Log.i(TAG, "SYSTEM_UI_FLAG_IMMERSIVE_STICKY is set"); 171*90c8c64dSAndroid Build Coastguard Worker } else { 172*90c8c64dSAndroid Build Coastguard Worker Log.i(TAG, "SYSTEM_UI_FLAG_IMMERSIVE_STICKY is unset"); 173*90c8c64dSAndroid Build Coastguard Worker } 174*90c8c64dSAndroid Build Coastguard Worker } 175*90c8c64dSAndroid Build Coastguard Worker 176*90c8c64dSAndroid Build Coastguard Worker /** 177*90c8c64dSAndroid Build Coastguard Worker * Detects and toggles immersive mode (also known as "hidey bar" mode). 178*90c8c64dSAndroid Build Coastguard Worker */ toggleUiFlags()179*90c8c64dSAndroid Build Coastguard Worker public void toggleUiFlags() { 180*90c8c64dSAndroid Build Coastguard Worker 181*90c8c64dSAndroid Build Coastguard Worker // BEGIN_INCLUDE (get_current_ui_flags) 182*90c8c64dSAndroid Build Coastguard Worker // The "Decor View" is the parent view of the Activity. It's also conveniently the easiest 183*90c8c64dSAndroid Build Coastguard Worker // one to find from within a fragment, since there's a handy helper method to pull it, and 184*90c8c64dSAndroid Build Coastguard Worker // we don't have to bother with picking a view somewhere deeper in the hierarchy and calling 185*90c8c64dSAndroid Build Coastguard Worker // "findViewById" on it. 186*90c8c64dSAndroid Build Coastguard Worker View decorView = getActivity().getWindow().getDecorView(); 187*90c8c64dSAndroid Build Coastguard Worker int uiOptions = decorView.getSystemUiVisibility(); 188*90c8c64dSAndroid Build Coastguard Worker int newUiOptions = uiOptions; 189*90c8c64dSAndroid Build Coastguard Worker // END_INCLUDE (get_current_ui_flags) 190*90c8c64dSAndroid Build Coastguard Worker 191*90c8c64dSAndroid Build Coastguard Worker // BEGIN_INCLUDE (toggle_lowprofile_mode) 192*90c8c64dSAndroid Build Coastguard Worker // Low profile mode doesn't resize the screen at all, but it covers the nav & status bar 193*90c8c64dSAndroid Build Coastguard Worker // icons with black so they're less distracting. Unlike "full screen" and "hide nav bar," 194*90c8c64dSAndroid Build Coastguard Worker // this mode doesn't interact with immersive mode at all, but it's instructive when running 195*90c8c64dSAndroid Build Coastguard Worker // this sample to observe the differences in behavior. 196*90c8c64dSAndroid Build Coastguard Worker if (mLowProfileCheckBox.isChecked()) { 197*90c8c64dSAndroid Build Coastguard Worker newUiOptions |= View.SYSTEM_UI_FLAG_LOW_PROFILE; 198*90c8c64dSAndroid Build Coastguard Worker } else { 199*90c8c64dSAndroid Build Coastguard Worker newUiOptions &= ~View.SYSTEM_UI_FLAG_LOW_PROFILE; 200*90c8c64dSAndroid Build Coastguard Worker } 201*90c8c64dSAndroid Build Coastguard Worker // END_INCLUDE (toggle_lowprofile_mode) 202*90c8c64dSAndroid Build Coastguard Worker 203*90c8c64dSAndroid Build Coastguard Worker // BEGIN_INCLUDE (toggle_fullscreen_mode) 204*90c8c64dSAndroid Build Coastguard Worker // When enabled, this flag hides non-critical UI, such as the status bar, 205*90c8c64dSAndroid Build Coastguard Worker // which usually shows notification icons, battery life, etc 206*90c8c64dSAndroid Build Coastguard Worker // on phone-sized devices. The bar reappears when the user swipes it down. When immersive 207*90c8c64dSAndroid Build Coastguard Worker // mode is also enabled, the app-drawable area expands, and when the status bar is swiped 208*90c8c64dSAndroid Build Coastguard Worker // down, it appears semi-transparently and slides in over the app, instead of pushing it 209*90c8c64dSAndroid Build Coastguard Worker // down. 210*90c8c64dSAndroid Build Coastguard Worker if (mHideStatusBarCheckBox.isChecked()) { 211*90c8c64dSAndroid Build Coastguard Worker newUiOptions |= View.SYSTEM_UI_FLAG_FULLSCREEN; 212*90c8c64dSAndroid Build Coastguard Worker } else { 213*90c8c64dSAndroid Build Coastguard Worker newUiOptions &= ~View.SYSTEM_UI_FLAG_FULLSCREEN; 214*90c8c64dSAndroid Build Coastguard Worker } 215*90c8c64dSAndroid Build Coastguard Worker // END_INCLUDE (toggle_fullscreen_mode) 216*90c8c64dSAndroid Build Coastguard Worker 217*90c8c64dSAndroid Build Coastguard Worker // BEGIN_INCLUDE (toggle_hidenav_mode) 218*90c8c64dSAndroid Build Coastguard Worker // When enabled, this flag hides the black nav bar along the bottom, 219*90c8c64dSAndroid Build Coastguard Worker // where the home/back buttons are. The nav bar normally instantly reappears 220*90c8c64dSAndroid Build Coastguard Worker // when the user touches the screen. When immersive mode is also enabled, the nav bar 221*90c8c64dSAndroid Build Coastguard Worker // stays hidden until the user swipes it back. 222*90c8c64dSAndroid Build Coastguard Worker if (mHideNavCheckbox.isChecked()) { 223*90c8c64dSAndroid Build Coastguard Worker newUiOptions |= View.SYSTEM_UI_FLAG_HIDE_NAVIGATION; 224*90c8c64dSAndroid Build Coastguard Worker } else { 225*90c8c64dSAndroid Build Coastguard Worker newUiOptions &= ~View.SYSTEM_UI_FLAG_HIDE_NAVIGATION; 226*90c8c64dSAndroid Build Coastguard Worker } 227*90c8c64dSAndroid Build Coastguard Worker // END_INCLUDE (toggle_hidenav_mode) 228*90c8c64dSAndroid Build Coastguard Worker 229*90c8c64dSAndroid Build Coastguard Worker // BEGIN_INCLUDE (toggle_immersive_mode) 230*90c8c64dSAndroid Build Coastguard Worker // Immersive mode doesn't do anything without at least one of the previous flags 231*90c8c64dSAndroid Build Coastguard Worker // enabled. When enabled, it allows the user to swipe the status and/or nav bars 232*90c8c64dSAndroid Build Coastguard Worker // off-screen. When the user swipes the bars back onto the screen, the flags are cleared 233*90c8c64dSAndroid Build Coastguard Worker // and immersive mode is automatically disabled. 234*90c8c64dSAndroid Build Coastguard Worker if (mImmersiveModeCheckBox.isChecked()) { 235*90c8c64dSAndroid Build Coastguard Worker newUiOptions |= View.SYSTEM_UI_FLAG_IMMERSIVE; 236*90c8c64dSAndroid Build Coastguard Worker } else { 237*90c8c64dSAndroid Build Coastguard Worker newUiOptions &= ~View.SYSTEM_UI_FLAG_IMMERSIVE; 238*90c8c64dSAndroid Build Coastguard Worker } 239*90c8c64dSAndroid Build Coastguard Worker // END_INCLUDE (toggle_immersive_mode) 240*90c8c64dSAndroid Build Coastguard Worker 241*90c8c64dSAndroid Build Coastguard Worker // BEGIN_INCLUDE (toggle_immersive_mode_sticky) 242*90c8c64dSAndroid Build Coastguard Worker // There's actually two forms of immersive mode, normal and "sticky". Sticky immersive mode 243*90c8c64dSAndroid Build Coastguard Worker // is different in 2 key ways: 244*90c8c64dSAndroid Build Coastguard Worker // 245*90c8c64dSAndroid Build Coastguard Worker // * Uses semi-transparent bars for the nav and status bars 246*90c8c64dSAndroid Build Coastguard Worker // * This UI flag will *not* be cleared when the user interacts with the UI. 247*90c8c64dSAndroid Build Coastguard Worker // When the user swipes, the bars will temporarily appear for a few seconds and then 248*90c8c64dSAndroid Build Coastguard Worker // disappear again. 249*90c8c64dSAndroid Build Coastguard Worker if (mImmersiveModeStickyCheckBox.isChecked()) { 250*90c8c64dSAndroid Build Coastguard Worker newUiOptions |= View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY; 251*90c8c64dSAndroid Build Coastguard Worker } else { 252*90c8c64dSAndroid Build Coastguard Worker newUiOptions &= ~View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY; 253*90c8c64dSAndroid Build Coastguard Worker } 254*90c8c64dSAndroid Build Coastguard Worker // END_INCLUDE (toggle_immersive_mode_sticky) 255*90c8c64dSAndroid Build Coastguard Worker 256*90c8c64dSAndroid Build Coastguard Worker // BEGIN_INCLUDE (set_ui_flags) 257*90c8c64dSAndroid Build Coastguard Worker //Set the new UI flags. 258*90c8c64dSAndroid Build Coastguard Worker decorView.setSystemUiVisibility(newUiOptions); 259*90c8c64dSAndroid Build Coastguard Worker // END_INCLUDE (set_ui_flags) 260*90c8c64dSAndroid Build Coastguard Worker 261*90c8c64dSAndroid Build Coastguard Worker dumpFlagStateToLog(uiOptions); 262*90c8c64dSAndroid Build Coastguard Worker } 263*90c8c64dSAndroid Build Coastguard Worker } 264