summaryrefslogtreecommitdiffstats
path: root/samples/browseable/AdvancedImmersiveMode/src/com.example.android.advancedimmersivemode/AdvancedImmersiveModeFragment.java
diff options
context:
space:
mode:
Diffstat (limited to 'samples/browseable/AdvancedImmersiveMode/src/com.example.android.advancedimmersivemode/AdvancedImmersiveModeFragment.java')
-rw-r--r--samples/browseable/AdvancedImmersiveMode/src/com.example.android.advancedimmersivemode/AdvancedImmersiveModeFragment.java149
1 files changed, 119 insertions, 30 deletions
diff --git a/samples/browseable/AdvancedImmersiveMode/src/com.example.android.advancedimmersivemode/AdvancedImmersiveModeFragment.java b/samples/browseable/AdvancedImmersiveMode/src/com.example.android.advancedimmersivemode/AdvancedImmersiveModeFragment.java
index fe11ecb4d..d8fb0d4eb 100644
--- a/samples/browseable/AdvancedImmersiveMode/src/com.example.android.advancedimmersivemode/AdvancedImmersiveModeFragment.java
+++ b/samples/browseable/AdvancedImmersiveMode/src/com.example.android.advancedimmersivemode/AdvancedImmersiveModeFragment.java
@@ -17,9 +17,10 @@ package com.example.android.advancedimmersivemode;
import android.os.Bundle;
import android.support.v4.app.Fragment;
-import android.view.MenuItem;
+import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
+import android.widget.Button;
import android.widget.CheckBox;
import com.example.android.common.logger.Log;
@@ -46,49 +47,136 @@ public class AdvancedImmersiveModeFragment extends Fragment {
}
@Override
- public void onActivityCreated(Bundle savedInstanceState) {
- super.onActivityCreated(savedInstanceState);
+ public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle state) {
+ final View flagsView = inflater.inflate(R.layout.fragment_flags, container, false);
+ mLowProfileCheckBox = (CheckBox) flagsView.findViewById(R.id.flag_enable_lowprof);
+ mHideNavCheckbox = (CheckBox) flagsView.findViewById(R.id.flag_hide_navbar);
+ mHideStatusBarCheckBox = (CheckBox) flagsView.findViewById(R.id.flag_hide_statbar);
+ mImmersiveModeCheckBox = (CheckBox) flagsView.findViewById(R.id.flag_enable_immersive);
+ mImmersiveModeStickyCheckBox =
+ (CheckBox) flagsView.findViewById(R.id.flag_enable_immersive_sticky);
- final View decorView = getActivity().getWindow().getDecorView();
- ViewGroup parentView = (ViewGroup) getActivity().getWindow().getDecorView()
- .findViewById(R.id.sample_main_layout);
+ Button toggleFlagsButton = (Button) flagsView.findViewById(R.id.btn_changeFlags);
+ toggleFlagsButton.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View view) {
+ toggleUiFlags();
+ }
+ });
- mLowProfileCheckBox = new CheckBox(getActivity());
- mLowProfileCheckBox.setText("Enable Low Profile mode.");
- parentView.addView(mLowProfileCheckBox);
+ Button presetsImmersiveModeButton = (Button) flagsView.findViewById(R.id.btn_immersive);
+ presetsImmersiveModeButton.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View view) {
- mHideNavCheckbox = new CheckBox(getActivity());
- mHideNavCheckbox.setChecked(true);
- mHideNavCheckbox.setText("Hide Navigation bar");
- parentView.addView(mHideNavCheckbox);
+ // BEGIN_INCLUDE(immersive_presets)
+ // For immersive mode, the FULLSCREEN, HIDE_HAVIGATION and IMMERSIVE
+ // flags should be set (you can use IMMERSIVE_STICKY instead of IMMERSIVE
+ // as appropriate for your app). The LOW_PROFILE flag should be cleared.
- mHideStatusBarCheckBox = new CheckBox(getActivity());
- mHideStatusBarCheckBox.setChecked(true);
- mHideStatusBarCheckBox.setText("Hide Status Bar");
- parentView.addView(mHideStatusBarCheckBox);
+ // Immersive mode is primarily for situations where the user will be
+ // interacting with the screen, like games or reading books.
+ int uiOptions = flagsView.getSystemUiVisibility();
+ uiOptions &= ~View.SYSTEM_UI_FLAG_LOW_PROFILE;
+ uiOptions |= View.SYSTEM_UI_FLAG_FULLSCREEN;
+ uiOptions |= View.SYSTEM_UI_FLAG_HIDE_NAVIGATION;
+ uiOptions |= View.SYSTEM_UI_FLAG_IMMERSIVE;
+ uiOptions &= ~View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY;
+ flagsView.setSystemUiVisibility(uiOptions);
+ // END_INCLUDE(immersive_presets)
- mImmersiveModeCheckBox = new CheckBox(getActivity());
- mImmersiveModeCheckBox.setText("Enable Immersive Mode.");
- parentView.addView(mImmersiveModeCheckBox);
+ dumpFlagStateToLog(uiOptions);
- mImmersiveModeStickyCheckBox = new CheckBox(getActivity());
- mImmersiveModeStickyCheckBox.setText("Enable Immersive Mode (Sticky)");
- parentView.addView(mImmersiveModeStickyCheckBox);
+ // The below code just updates the checkboxes to reflect which flags have been set.
+ mLowProfileCheckBox.setChecked(false);
+ mHideNavCheckbox.setChecked(true);
+ mHideStatusBarCheckBox.setChecked(true);
+ mImmersiveModeCheckBox.setChecked(true);
+ mImmersiveModeStickyCheckBox.setChecked(false);
+ }
+ });
+
+ Button presetsLeanbackModeButton = (Button) flagsView.findViewById(R.id.btn_leanback);
+ presetsLeanbackModeButton.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View view) {
+ // BEGIN_INCLUDE(leanback_presets)
+ // For leanback mode, only the HIDE_NAVE and HIDE_STATUSBAR flags
+ // should be checked. In this case IMMERSIVE should *not* be set,
+ // since this mode is left as soon as the user touches the screen.
+ int uiOptions = flagsView.getSystemUiVisibility();
+ uiOptions &= ~View.SYSTEM_UI_FLAG_LOW_PROFILE;
+ uiOptions |= View.SYSTEM_UI_FLAG_FULLSCREEN;
+ uiOptions |= View.SYSTEM_UI_FLAG_HIDE_NAVIGATION;
+ uiOptions &= ~View.SYSTEM_UI_FLAG_IMMERSIVE;
+ uiOptions &= ~View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY;
+ flagsView.setSystemUiVisibility(uiOptions);
+ // END_INCLUDE(leanback_presets)
+
+ dumpFlagStateToLog(uiOptions);
+
+ // The below code just updates the checkboxes to reflect which flags have been set.
+ mLowProfileCheckBox.setChecked(false);
+ mHideNavCheckbox.setChecked(true);
+ mHideStatusBarCheckBox.setChecked(true);
+ mImmersiveModeCheckBox.setChecked(false);
+ mImmersiveModeStickyCheckBox.setChecked(false);
+ }
+ });
+
+ // Setting these flags makes the content appear under the navigation
+ // bars, so that showing/hiding the nav bars doesn't resize the content
+ // window, which can be jarring.
+ int uiOptions = flagsView.getSystemUiVisibility();
+ uiOptions |= View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION;
+ uiOptions |= View.SYSTEM_UI_FLAG_LAYOUT_STABLE;
+ uiOptions |= View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN;
+ flagsView.setSystemUiVisibility(uiOptions);
+
+ return flagsView;
}
- @Override
- public boolean onOptionsItemSelected(MenuItem item) {
- if (item.getItemId() == R.id.sample_action) {
- toggleImmersiveMode();
+ /**
+ * Helper method to dump flag state to the log.
+ * @param uiFlags Set of UI flags to inspect
+ */
+ public void dumpFlagStateToLog(int uiFlags) {
+ if ((uiFlags & View.SYSTEM_UI_FLAG_LOW_PROFILE) != 0) {
+ Log.i(TAG, "SYSTEM_UI_FLAG_LOW_PROFILE is set");
+ } else {
+ Log.i(TAG, "SYSTEM_UI_FLAG_LOW_PROFILE is unset");
+ }
+
+ if ((uiFlags & View.SYSTEM_UI_FLAG_FULLSCREEN) != 0) {
+ Log.i(TAG, "SYSTEM_UI_FLAG_FULLSCREEN is set");
+ } else {
+ Log.i(TAG, "SYSTEM_UI_FLAG_FULLSCREEN is unset");
+ }
+
+ if ((uiFlags & View.SYSTEM_UI_FLAG_HIDE_NAVIGATION) != 0) {
+ Log.i(TAG, "SYSTEM_UI_FLAG_HIDE_NAVIGATION is set");
+ } else {
+ Log.i(TAG, "SYSTEM_UI_FLAG_HIDE_NAVIGATION is unset");
+ }
+
+ if ((uiFlags & View.SYSTEM_UI_FLAG_IMMERSIVE) != 0) {
+ Log.i(TAG, "SYSTEM_UI_FLAG_IMMERSIVE is set");
+ } else {
+ Log.i(TAG, "SYSTEM_UI_FLAG_IMMERSIVE is unset");
+ }
+
+ if ((uiFlags & View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY) != 0) {
+ Log.i(TAG, "SYSTEM_UI_FLAG_IMMERSIVE_STICKY is set");
+ } else {
+ Log.i(TAG, "SYSTEM_UI_FLAG_IMMERSIVE_STICKY is unset");
}
- return true;
}
/**
* Detects and toggles immersive mode (also known as "hidey bar" mode).
*/
- public void toggleImmersiveMode() {
+ public void toggleUiFlags() {
// BEGIN_INCLUDE (get_current_ui_flags)
// The "Decor View" is the parent view of the Activity. It's also conveniently the easiest
@@ -168,7 +256,8 @@ public class AdvancedImmersiveModeFragment extends Fragment {
// BEGIN_INCLUDE (set_ui_flags)
//Set the new UI flags.
decorView.setSystemUiVisibility(newUiOptions);
- Log.i(TAG, "Current height: " + decorView.getHeight() + ", width: " + decorView.getWidth());
// END_INCLUDE (set_ui_flags)
+
+ dumpFlagStateToLog(uiOptions);
}
}