1 /* 2 * Copyright (C) 2013 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 package com.example.android.basicimmersivemode; 17 18 import android.os.Bundle; 19 import android.support.v4.app.Fragment; 20 import android.view.MenuItem; 21 import android.view.View; 22 23 import com.example.android.common.logger.Log; 24 25 public class BasicImmersiveModeFragment extends Fragment { 26 27 public static final String TAG = "BasicImmersiveModeFragment"; 28 29 @Override 30 public void onCreate(Bundle savedInstanceState) { 31 super.onCreate(savedInstanceState); 32 setHasOptionsMenu(true); 33 } 34 35 @Override 36 public void onActivityCreated(Bundle savedInstanceState) { 37 super.onActivityCreated(savedInstanceState); 38 final View decorView = getActivity().getWindow().getDecorView(); 39 decorView.setOnSystemUiVisibilityChangeListener( 40 new View.OnSystemUiVisibilityChangeListener() { 41 @Override 42 public void onSystemUiVisibilityChange(int i) { 43 int height = decorView.getHeight(); 44 Log.i(TAG, "Current height: " + height); 45 } 46 }); 47 } 48 49 @Override 50 public boolean onOptionsItemSelected(MenuItem item) { 51 if (item.getItemId() == R.id.sample_action) { 52 toggleHideyBar(); 53 } 54 return true; 55 } 56 57 /** 58 * Detects and toggles immersive mode. 59 */ 60 public void toggleHideyBar() { 62 // The UI options currently enabled are represented by a bitfield. 63 // getSystemUiVisibility() gives us that bitfield. 64 int uiOptions = getActivity().getWindow().getDecorView().getSystemUiVisibility(); 65 int newUiOptions = uiOptions; 68 boolean isImmersiveModeEnabled = 69 ((uiOptions | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY) == uiOptions); 70 if (isImmersiveModeEnabled) { 71 Log.i(TAG, "Turning immersive mode mode off. "); 72 } else { 73 Log.i(TAG, "Turning immersive mode mode on."); 74 } 75 76 // Immersive mode: Backward compatible to KitKat (API 19). 77 // Note that this flag doesn't do anything by itself, it only augments the behavior 78 // of HIDE_NAVIGATION and FLAG_FULLSCREEN. For the purposes of this sample 79 // all three flags are being toggled together. 80 // This sample uses the "sticky" form of immersive mode, which will let the user swipe 81 // the bars back in again, but will automatically make them disappear a few seconds later. 82 newUiOptions ^= View.SYSTEM_UI_FLAG_HIDE_NAVIGATION; 83 newUiOptions ^= View.SYSTEM_UI_FLAG_FULLSCREEN; 84 newUiOptions ^= View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY; 85 getActivity().getWindow().getDecorView().setSystemUiVisibility(newUiOptions); 87 } 88 }