package com.devbrackets.android.exomediademo.ui.activity; import android.annotation.TargetApi; import android.os.Build; import android.os.Bundle; import android.view.View; import com.devbrackets.android.exomedia.listener.VideoControlsVisibilityListener; import com.devbrackets.android.exomedia.ui.widget.VideoView; import com.devbrackets.android.exomedia.ui.widget.VideoControls; /** * A simple example of making a fullscreen video player activity. * <p> * <b><em>NOTE:</em></b> the VideoView setup is done in the {@link VideoPlayerActivity} */ public class FullScreenVideoPlayerActivity extends VideoPlayerActivity { private FullScreenListener fullScreenListener = new FullScreenListener(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); initUiFlags(); if (videoView.getVideoControls() != null) { videoView.getVideoControls().setVisibilityListener(new ControlsVisibilityListener()); } } @Override public void onDestroy() { super.onDestroy(); exitFullscreen(); } private void goFullscreen() { setUiFlags(true); } private void exitFullscreen() { setUiFlags(false); } /** * Correctly sets up the fullscreen flags to avoid popping when we switch * between fullscreen and not */ private void initUiFlags() { int flags = View.SYSTEM_UI_FLAG_VISIBLE; if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) { flags |= View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION; } View decorView = getWindow().getDecorView(); if (decorView != null) { decorView.setSystemUiVisibility(flags); decorView.setOnSystemUiVisibilityChangeListener(fullScreenListener); } } /** * Applies the correct flags to the windows decor view to enter * or exit fullscreen mode * * @param fullscreen True if entering fullscreen mode */ @TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH) private void setUiFlags(boolean fullscreen) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) { View decorView = getWindow().getDecorView(); if (decorView != null) { decorView.setSystemUiVisibility(fullscreen ? getFullscreenUiFlags() : View.SYSTEM_UI_FLAG_VISIBLE); } } } /** * Determines the appropriate fullscreen flags based on the * systems API version. * * @return The appropriate decor view flags to enter fullscreen mode when supported */ @TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH) private int getFullscreenUiFlags() { int flags = View.SYSTEM_UI_FLAG_LOW_PROFILE | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION; if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) { flags |= View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_FULLSCREEN | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION; } return flags; } /** * Listens to the system to determine when to show the default controls * for the {@link VideoView} */ private class FullScreenListener implements View.OnSystemUiVisibilityChangeListener { @Override public void onSystemUiVisibilityChange(int visibility) { if ((visibility & View.SYSTEM_UI_FLAG_FULLSCREEN) == 0) { videoView.showControls(); } } } /** * A Listener for the {@link VideoControls} * so that we can re-enter fullscreen mode when the controls are hidden. */ private class ControlsVisibilityListener implements VideoControlsVisibilityListener { @Override public void onControlsShown() { // No additional functionality performed } @Override public void onControlsHidden() { goFullscreen(); } } }