| package ${packageName}.util; |
| |
| import android.annotation.TargetApi; |
| import android.app.Activity; |
| import android.os.Build; |
| import android.view.View; |
| import android.view.WindowManager; |
| |
| /** |
| * An API 11+ implementation of {@link SystemUiHider}. Uses APIs available in |
| * Honeycomb and later (specifically {@link View#setSystemUiVisibility(int)}) to |
| * show and hide the system UI. |
| */ |
| @TargetApi(Build.VERSION_CODES.HONEYCOMB) |
| public class SystemUiHiderHoneycomb extends SystemUiHiderBase { |
| /** |
| * Flags for {@link View#setSystemUiVisibility(int)} to use when showing the |
| * system UI. |
| */ |
| private int mShowFlags; |
| |
| /** |
| * Flags for {@link View#setSystemUiVisibility(int)} to use when hiding the |
| * system UI. |
| */ |
| private int mHideFlags; |
| |
| /** |
| * Flags to test against the first parameter in |
| * {@link android.view.View.OnSystemUiVisibilityChangeListener#onSystemUiVisibilityChange(int)} |
| * to determine the system UI visibility state. |
| */ |
| private int mTestFlags; |
| |
| /** |
| * Whether or not the system UI is currently visible. This is cached from |
| * {@link android.view.View.OnSystemUiVisibilityChangeListener}. |
| */ |
| private boolean mVisible = true; |
| |
| /** |
| * Constructor not intended to be called by clients. Use |
| * {@link SystemUiHider#getInstance} to obtain an instance. |
| */ |
| protected SystemUiHiderHoneycomb(Activity activity, View anchorView, int flags) { |
| super(activity, anchorView, flags); |
| |
| mShowFlags = View.SYSTEM_UI_FLAG_VISIBLE; |
| mHideFlags = View.SYSTEM_UI_FLAG_LOW_PROFILE; |
| mTestFlags = View.SYSTEM_UI_FLAG_LOW_PROFILE; |
| |
| if ((mFlags & FLAG_FULLSCREEN) != 0) { |
| // If the client requested fullscreen, add flags relevant to hiding |
| // the status bar. Note that some of these constants are new as of |
| // API 16 (Jelly Bean). It is safe to use them, as they are inlined |
| // at compile-time and do nothing on pre-Jelly Bean devices. |
| mShowFlags |= View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN; |
| mHideFlags |= View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN |
| | View.SYSTEM_UI_FLAG_FULLSCREEN; |
| } |
| |
| if ((mFlags & FLAG_HIDE_NAVIGATION) != 0) { |
| // If the client requested hiding navigation, add relevant flags. |
| mShowFlags |= View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION; |
| mHideFlags |= View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION |
| | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION; |
| mTestFlags = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION; |
| } |
| } |
| |
| /** {@inheritDoc} */ |
| @Override |
| public void setup() { |
| mAnchorView.setOnSystemUiVisibilityChangeListener(mSystemUiVisibilityChangeListener); |
| } |
| |
| /** {@inheritDoc} */ |
| @Override |
| public void hide() { |
| mAnchorView.setSystemUiVisibility(mHideFlags); |
| } |
| |
| /** {@inheritDoc} */ |
| @Override |
| public void show() { |
| mAnchorView.setSystemUiVisibility(mShowFlags); |
| } |
| |
| /** {@inheritDoc} */ |
| @Override |
| public boolean isVisible() { |
| return mVisible; |
| } |
| |
| private View.OnSystemUiVisibilityChangeListener mSystemUiVisibilityChangeListener |
| = new View.OnSystemUiVisibilityChangeListener() { |
| @Override |
| public void onSystemUiVisibilityChange(int vis) { |
| // Test against mTestFlags to see if the system UI is visible. |
| if ((vis & mTestFlags) != 0) { |
| if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN) { |
| // Pre-Jelly Bean, we must manually hide the action bar |
| // and use the old window flags API. |
| mActivity.getActionBar().hide(); |
| mActivity.getWindow().setFlags( |
| WindowManager.LayoutParams.FLAG_FULLSCREEN, |
| WindowManager.LayoutParams.FLAG_FULLSCREEN); |
| } |
| |
| // Trigger the registered listener and cache the visibility |
| // state. |
| mOnVisibilityChangeListener.onVisibilityChange(false); |
| mVisible = false; |
| |
| } else { |
| mAnchorView.setSystemUiVisibility(mShowFlags); |
| if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN) { |
| // Pre-Jelly Bean, we must manually show the action bar |
| // and use the old window flags API. |
| mActivity.getActionBar().show(); |
| mActivity.getWindow().setFlags( |
| 0, |
| WindowManager.LayoutParams.FLAG_FULLSCREEN); |
| } |
| |
| // Trigger the registered listener and cache the visibility |
| // state. |
| mOnVisibilityChangeListener.onVisibilityChange(true); |
| mVisible = true; |
| } |
| } |
| }; |
| } |