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();
}
}
}