Android Open Source - android-example-app System Ui Hider






From Project

Back to project page android-example-app.

License

The source code is released under:

This is free and unencumbered software released into the public domain. Anyone is free to copy, modify, publish, use, compile, sell, or distribute this software, either in source code form or as a co...

If you think the Android project android-example-app listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

package com.heyzap.ads.example.integration.util;
/*from w w w.j a v a 2  s. c  o  m*/
import android.app.Activity;
import android.os.Build;
import android.view.View;

/**
 * A utility class that helps with showing and hiding system UI such as the
 * status bar and navigation/system bar. This class uses backward-compatibility
 * techniques described in <a href=
 * "http://developer.android.com/training/backward-compatible-ui/index.html">
 * Creating Backward-Compatible UIs</a> to ensure that devices running any
 * version of ndroid OS are supported. More specifically, there are separate
 * implementations of this abstract class: for newer devices,
 * {@link #getInstance} will return a {@link SystemUiHiderHoneycomb} instance,
 * while on older devices {@link #getInstance} will return a
 * {@link SystemUiHiderBase} instance.
 * <p>
 * For more on system bars, see <a href=
 * "http://developer.android.com/design/get-started/ui-overview.html#system-bars"
 * > System Bars</a>.
 * 
 * @see android.view.View#setSystemUiVisibility(int)
 * @see android.view.WindowManager.LayoutParams#FLAG_FULLSCREEN
 */
public abstract class SystemUiHider {
  /**
   * When this flag is set, the
   * {@link android.view.WindowManager.LayoutParams#FLAG_LAYOUT_IN_SCREEN}
   * flag will be set on older devices, making the status bar "float" on top
   * of the activity layout. This is most useful when there are no controls at
   * the top of the activity layout.
   * <p>
   * This flag isn't used on newer devices because the <a
   * href="http://developer.android.com/design/patterns/actionbar.html">action
   * bar</a>, the most important structural element of an Android app, should
   * be visible and not obscured by the system UI.
   */
  public static final int FLAG_LAYOUT_IN_SCREEN_OLDER_DEVICES = 0x1;

  /**
   * When this flag is set, {@link #show()} and {@link #hide()} will toggle
   * the visibility of the status bar. If there is a navigation bar, show and
   * hide will toggle low profile mode.
   */
  public static final int FLAG_FULLSCREEN = 0x2;

  /**
   * When this flag is set, {@link #show()} and {@link #hide()} will toggle
   * the visibility of the navigation bar, if it's present on the device and
   * the device allows hiding it. In cases where the navigation bar is present
   * but cannot be hidden, show and hide will toggle low profile mode.
   */
  public static final int FLAG_HIDE_NAVIGATION = FLAG_FULLSCREEN | 0x4;

  /**
   * The activity associated with this UI hider object.
   */
  protected Activity mActivity;

  /**
   * The view on which {@link View#setSystemUiVisibility(int)} will be called.
   */
  protected View mAnchorView;

  /**
   * The current UI hider flags.
   * 
   * @see #FLAG_FULLSCREEN
   * @see #FLAG_HIDE_NAVIGATION
   * @see #FLAG_LAYOUT_IN_SCREEN_OLDER_DEVICES
   */
  protected int mFlags;

  /**
   * The current visibility callback.
   */
  protected OnVisibilityChangeListener mOnVisibilityChangeListener = sDummyListener;

  /**
   * Creates and returns an instance of {@link SystemUiHider} that is
   * appropriate for this device. The object will be either a
   * {@link SystemUiHiderBase} or {@link SystemUiHiderHoneycomb} depending on
   * the device.
   * 
   * @param activity
   *            The activity whose window's system UI should be controlled by
   *            this class.
   * @param anchorView
   *            The view on which {@link View#setSystemUiVisibility(int)} will
   *            be called.
   * @param flags
   *            Either 0 or any combination of {@link #FLAG_FULLSCREEN},
   *            {@link #FLAG_HIDE_NAVIGATION}, and
   *            {@link #FLAG_LAYOUT_IN_SCREEN_OLDER_DEVICES}.
   */
  public static SystemUiHider getInstance(Activity activity, View anchorView,
      int flags) {
      return new SystemUiHiderBase(activity, anchorView, flags);
  }

  protected SystemUiHider(Activity activity, View anchorView, int flags) {
    mActivity = activity;
    mAnchorView = anchorView;
    mFlags = flags;
  }

  /**
   * Sets up the system UI hider. Should be called from
   * {@link Activity#onCreate}.
   */
  public abstract void setup();

  /**
   * Returns whether or not the system UI is visible.
   */
  public abstract boolean isVisible();

  /**
   * Hide the system UI.
   */
  public abstract void hide();

  /**
   * Show the system UI.
   */
  public abstract void show();

  /**
   * Toggle the visibility of the system UI.
   */
  public void toggle() {
    if (isVisible()) {
      hide();
    } else {
      show();
    }
  }

  /**
   * Registers a callback, to be triggered when the system UI visibility
   * changes.
   */
  public void setOnVisibilityChangeListener(
      OnVisibilityChangeListener listener) {
    if (listener == null) {
      listener = sDummyListener;
    }

    mOnVisibilityChangeListener = listener;
  }

  /**
   * A dummy no-op callback for use when there is no other listener set.
   */
  private static OnVisibilityChangeListener sDummyListener = new OnVisibilityChangeListener() {
    @Override
    public void onVisibilityChange(boolean visible) {
    }
  };

  /**
   * A callback interface used to listen for system UI visibility changes.
   */
  public interface OnVisibilityChangeListener {
    /**
     * Called when the system UI visibility has changed.
     * 
     * @param visible
     *            True if the system UI is visible.
     */
    public void onVisibilityChange(boolean visible);
  }
}




Java Source Code List

com.heyzap.ads.example.integration.HeyzapActivity.java
com.heyzap.ads.example.integration.util.SystemUiHiderBase.java
com.heyzap.ads.example.integration.util.SystemUiHider.java