annotate app/src/main/java/com/example/musicplayer/MainActivity.java @ 2:3485a304a057

adding new branch with the original tutorial code -- later merge to main and mod
author kshalle
date Thu, 23 Apr 2015 10:53:54 -0700
parents
children
rev   line source
kshalle@2 1 package com.example.musicplayer;
kshalle@2 2
kshalle@2 3 import com.example.musicplayer.util.SystemUiHider;
kshalle@2 4
kshalle@2 5 import android.annotation.TargetApi;
kshalle@2 6 import android.app.Activity;
kshalle@2 7 import android.os.Build;
kshalle@2 8 import android.os.Bundle;
kshalle@2 9 import android.os.Handler;
kshalle@2 10 import android.view.MotionEvent;
kshalle@2 11 import android.view.View;
kshalle@2 12
kshalle@2 13
kshalle@2 14 /**
kshalle@2 15 * An example full-screen activity that shows and hides the system UI (i.e.
kshalle@2 16 * status bar and navigation/system bar) with user interaction.
kshalle@2 17 *
kshalle@2 18 * @see SystemUiHider
kshalle@2 19 */
kshalle@2 20 public class MainActivity extends Activity {
kshalle@2 21 /**
kshalle@2 22 * Whether or not the system UI should be auto-hidden after
kshalle@2 23 * {@link #AUTO_HIDE_DELAY_MILLIS} milliseconds.
kshalle@2 24 */
kshalle@2 25 private static final boolean AUTO_HIDE = true;
kshalle@2 26
kshalle@2 27 /**
kshalle@2 28 * If {@link #AUTO_HIDE} is set, the number of milliseconds to wait after
kshalle@2 29 * user interaction before hiding the system UI.
kshalle@2 30 */
kshalle@2 31 private static final int AUTO_HIDE_DELAY_MILLIS = 3000;
kshalle@2 32
kshalle@2 33 /**
kshalle@2 34 * If set, will toggle the system UI visibility upon interaction. Otherwise,
kshalle@2 35 * will show the system UI visibility upon interaction.
kshalle@2 36 */
kshalle@2 37 private static final boolean TOGGLE_ON_CLICK = true;
kshalle@2 38
kshalle@2 39 /**
kshalle@2 40 * The flags to pass to {@link SystemUiHider#getInstance}.
kshalle@2 41 */
kshalle@2 42 private static final int HIDER_FLAGS = SystemUiHider.FLAG_HIDE_NAVIGATION;
kshalle@2 43
kshalle@2 44 /**
kshalle@2 45 * The instance of the {@link SystemUiHider} for this activity.
kshalle@2 46 */
kshalle@2 47 private SystemUiHider mSystemUiHider;
kshalle@2 48
kshalle@2 49 @Override
kshalle@2 50 protected void onCreate(Bundle savedInstanceState) {
kshalle@2 51 super.onCreate(savedInstanceState);
kshalle@2 52
kshalle@2 53 setContentView(R.layout.activity_main);
kshalle@2 54
kshalle@2 55 final View controlsView = findViewById(R.id.fullscreen_content_controls);
kshalle@2 56 final View contentView = findViewById(R.id.fullscreen_content);
kshalle@2 57
kshalle@2 58 // Set up an instance of SystemUiHider to control the system UI for
kshalle@2 59 // this activity.
kshalle@2 60 mSystemUiHider = SystemUiHider.getInstance(this, contentView, HIDER_FLAGS);
kshalle@2 61 mSystemUiHider.setup();
kshalle@2 62 mSystemUiHider
kshalle@2 63 .setOnVisibilityChangeListener(new SystemUiHider.OnVisibilityChangeListener() {
kshalle@2 64 // Cached values.
kshalle@2 65 int mControlsHeight;
kshalle@2 66 int mShortAnimTime;
kshalle@2 67
kshalle@2 68 @Override
kshalle@2 69 @TargetApi(Build.VERSION_CODES.HONEYCOMB_MR2)
kshalle@2 70 public void onVisibilityChange(boolean visible) {
kshalle@2 71 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB_MR2) {
kshalle@2 72 // If the ViewPropertyAnimator API is available
kshalle@2 73 // (Honeycomb MR2 and later), use it to animate the
kshalle@2 74 // in-layout UI controls at the bottom of the
kshalle@2 75 // screen.
kshalle@2 76 if (mControlsHeight == 0) {
kshalle@2 77 mControlsHeight = controlsView.getHeight();
kshalle@2 78 }
kshalle@2 79 if (mShortAnimTime == 0) {
kshalle@2 80 mShortAnimTime = getResources().getInteger(
kshalle@2 81 android.R.integer.config_shortAnimTime);
kshalle@2 82 }
kshalle@2 83 controlsView.animate()
kshalle@2 84 .translationY(visible ? 0 : mControlsHeight)
kshalle@2 85 .setDuration(mShortAnimTime);
kshalle@2 86 } else {
kshalle@2 87 // If the ViewPropertyAnimator APIs aren't
kshalle@2 88 // available, simply show or hide the in-layout UI
kshalle@2 89 // controls.
kshalle@2 90 controlsView.setVisibility(visible ? View.VISIBLE : View.GONE);
kshalle@2 91 }
kshalle@2 92
kshalle@2 93 if (visible && AUTO_HIDE) {
kshalle@2 94 // Schedule a hide().
kshalle@2 95 delayedHide(AUTO_HIDE_DELAY_MILLIS);
kshalle@2 96 }
kshalle@2 97 }
kshalle@2 98 });
kshalle@2 99
kshalle@2 100 // Set up the user interaction to manually show or hide the system UI.
kshalle@2 101 contentView.setOnClickListener(new View.OnClickListener() {
kshalle@2 102 @Override
kshalle@2 103 public void onClick(View view) {
kshalle@2 104 if (TOGGLE_ON_CLICK) {
kshalle@2 105 mSystemUiHider.toggle();
kshalle@2 106 } else {
kshalle@2 107 mSystemUiHider.show();
kshalle@2 108 }
kshalle@2 109 }
kshalle@2 110 });
kshalle@2 111
kshalle@2 112 // Upon interacting with UI controls, delay any scheduled hide()
kshalle@2 113 // operations to prevent the jarring behavior of controls going away
kshalle@2 114 // while interacting with the UI.
kshalle@2 115 findViewById(R.id.dummy_button).setOnTouchListener(mDelayHideTouchListener);
kshalle@2 116 }
kshalle@2 117
kshalle@2 118 @Override
kshalle@2 119 protected void onPostCreate(Bundle savedInstanceState) {
kshalle@2 120 super.onPostCreate(savedInstanceState);
kshalle@2 121
kshalle@2 122 // Trigger the initial hide() shortly after the activity has been
kshalle@2 123 // created, to briefly hint to the user that UI controls
kshalle@2 124 // are available.
kshalle@2 125 delayedHide(100);
kshalle@2 126 }
kshalle@2 127
kshalle@2 128
kshalle@2 129 /**
kshalle@2 130 * Touch listener to use for in-layout UI controls to delay hiding the
kshalle@2 131 * system UI. This is to prevent the jarring behavior of controls going away
kshalle@2 132 * while interacting with activity UI.
kshalle@2 133 */
kshalle@2 134 View.OnTouchListener mDelayHideTouchListener = new View.OnTouchListener() {
kshalle@2 135 @Override
kshalle@2 136 public boolean onTouch(View view, MotionEvent motionEvent) {
kshalle@2 137 if (AUTO_HIDE) {
kshalle@2 138 delayedHide(AUTO_HIDE_DELAY_MILLIS);
kshalle@2 139 }
kshalle@2 140 return false;
kshalle@2 141 }
kshalle@2 142 };
kshalle@2 143
kshalle@2 144 Handler mHideHandler = new Handler();
kshalle@2 145 Runnable mHideRunnable = new Runnable() {
kshalle@2 146 @Override
kshalle@2 147 public void run() {
kshalle@2 148 mSystemUiHider.hide();
kshalle@2 149 }
kshalle@2 150 };
kshalle@2 151
kshalle@2 152 /**
kshalle@2 153 * Schedules a call to hide() in [delay] milliseconds, canceling any
kshalle@2 154 * previously scheduled calls.
kshalle@2 155 */
kshalle@2 156 private void delayedHide(int delayMillis) {
kshalle@2 157 mHideHandler.removeCallbacks(mHideRunnable);
kshalle@2 158 mHideHandler.postDelayed(mHideRunnable, delayMillis);
kshalle@2 159 }
kshalle@2 160 }