package com.shuyu.gsyvideoplayer.utils;
import android.app.Activity;
import android.content.pm.ActivityInfo;
import android.provider.Settings;
import android.view.OrientationEventListener;
import com.shuyu.gsyvideoplayer.GSYVideoPlayer;
import com.shuyu.gsyvideoplayer.R;
import com.shuyu.gsyvideoplayer.video.GSYBaseVideoPlayer;
/**
* 处理屏幕旋转的的逻辑
* Created by shuyu on 2016/11/11.
*/
public class OrientationUtils {
private Activity activity;
private GSYBaseVideoPlayer gsyVideoPlayer;
private int screenType = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT;
private OrientationEventListener orientationEventListener;
private boolean mClick, mClickLand, mClickPort;
private int mIsLand;
private boolean mEnable = true;
/**
* @param activity
* @param gsyVideoPlayer
*/
public OrientationUtils(Activity activity, GSYBaseVideoPlayer gsyVideoPlayer) {
this.activity = activity;
this.gsyVideoPlayer = gsyVideoPlayer;
init();
}
private void init() {
orientationEventListener = new OrientationEventListener(activity) {
@Override
public void onOrientationChanged(int rotation) {
boolean autoRotateOn = (android.provider.Settings.System.getInt(activity.getContentResolver(), Settings.System.ACCELEROMETER_ROTATION, 0) == 1);
if (!autoRotateOn) {
//if (mIsLand == 0) {
return;
//}
}
// 设置竖屏
if (((rotation >= 0) && (rotation <= 30)) || (rotation >= 330)) {
if (mClick) {
if (mIsLand > 0 && !mClickLand) {
return;
} else {
mClickPort = true;
mClick = false;
mIsLand = 0;
}
} else {
if (mIsLand > 0) {
screenType = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT;
activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
if (gsyVideoPlayer.isIfCurrentIsFullscreen()) {
gsyVideoPlayer.getFullscreenButton().setImageResource(gsyVideoPlayer.getShrinkImageRes());
} else {
gsyVideoPlayer.getFullscreenButton().setImageResource(gsyVideoPlayer.getEnlargeImageRes());
}
mIsLand = 0;
mClick = false;
}
}
}
// 设置横屏
else if (((rotation >= 230) && (rotation <= 310))) {
if (mClick) {
if (!(mIsLand == 1) && !mClickPort) {
return;
} else {
mClickLand = true;
mClick = false;
mIsLand = 1;
}
} else {
if (!(mIsLand == 1)) {
screenType = ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE;
activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
gsyVideoPlayer.getFullscreenButton().setImageResource(gsyVideoPlayer.getShrinkImageRes());
mIsLand = 1;
mClick = false;
}
}
}
// 设置反向横屏
else if (rotation > 30 && rotation < 95) {
if (mClick) {
if (!(mIsLand == 2) && !mClickPort) {
return;
} else {
mClickLand = true;
mClick = false;
mIsLand = 2;
}
} else if (!(mIsLand == 2)) {
screenType = ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE;
activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE);
gsyVideoPlayer.getFullscreenButton().setImageResource(gsyVideoPlayer.getShrinkImageRes());
mIsLand = 2;
mClick = false;
}
}
}
};
orientationEventListener.enable();
}
/**
* 点击切换的逻辑,比如竖屏的时候点击了就是切换到横屏不会受屏幕的影响
*/
public void resolveByClick() {
mClick = true;
if (mIsLand == 0) {
screenType = ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE;
activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
gsyVideoPlayer.getFullscreenButton().setImageResource(gsyVideoPlayer.getShrinkImageRes());
mIsLand = 1;
mClickLand = false;
} else {
screenType = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT;
activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
if (gsyVideoPlayer.isIfCurrentIsFullscreen()) {
gsyVideoPlayer.getFullscreenButton().setImageResource(gsyVideoPlayer.getShrinkImageRes());
} else {
gsyVideoPlayer.getFullscreenButton().setImageResource(gsyVideoPlayer.getEnlargeImageRes());
}
mIsLand = 0;
mClickPort = false;
}
}
/**
* 列表返回的样式判断。因为立即旋转会导致界面跳动的问题
*/
public int backToProtVideo() {
if (mIsLand > 0) {
mClick = true;
activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
if (gsyVideoPlayer != null)
gsyVideoPlayer.getFullscreenButton().setImageResource(gsyVideoPlayer.getEnlargeImageRes());
mIsLand = 0;
mClickPort = false;
return 500;
}
return 0;
}
public boolean isEnable() {
return mEnable;
}
public void setEnable(boolean enable) {
this.mEnable = enable;
if (mEnable) {
orientationEventListener.enable();
} else {
orientationEventListener.disable();
}
}
public void releaseListener() {
if (orientationEventListener != null) {
orientationEventListener.disable();
}
}
public boolean isClick() {
return mClick;
}
public void setClick(boolean Click) {
this.mClick = mClick;
}
public boolean isClickLand() {
return mClickLand;
}
public void setClickLand(boolean ClickLand) {
this.mClickLand = ClickLand;
}
public int getIsLand() {
return mIsLand;
}
public void setIsLand(int IsLand) {
this.mIsLand = IsLand;
}
public boolean isClickPort() {
return mClickPort;
}
public void setClickPort(boolean ClickPort) {
this.mClickPort = ClickPort;
}
public int getScreenType() {
return screenType;
}
public void setScreenType(int screenType) {
this.screenType = screenType;
}
}