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
}