package com.wpc.library.videocomponents;
|
|
import android.app.Activity;
|
import android.content.Context;
|
import android.media.AudioManager;
|
import android.util.Log;
|
import android.view.GestureDetector;
|
import android.view.MotionEvent;
|
import android.view.View;
|
import android.view.ViewTreeObserver.OnGlobalLayoutListener;
|
import android.view.WindowManager;
|
|
public class GestureMediaController {
|
|
private static final int ADJUST_NONE = 0;
|
|
private static final int ADJUST_BRIGHTNESS = 1;
|
|
private static final int ADJUST_VOLUME = 2;
|
|
private static final int ADJUST_PROGRESS = 3;
|
|
private int mAdjustMode = ADJUST_NONE;
|
|
private int mRangeX;
|
|
private int mRangeY;
|
|
private boolean mEnabled;
|
|
private GestureTransportController mTransportController;
|
|
private GestureDetector mGestureDetector;
|
|
public GestureMediaController(View view, GestureTransportController transportController) {
|
mTransportController = transportController;
|
mEnabled = true;
|
init(view);
|
}
|
|
private void init(final View view) {
|
if (mTransportController == null) {
|
throw new NullPointerException("GestureMediaController must not be null");
|
}
|
mRangeX = view.getWidth();
|
mRangeY = view.getHeight();
|
view.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
|
|
@Override
|
public void onGlobalLayout() {
|
mRangeX = view.getWidth();
|
mRangeY = view.getHeight();
|
}
|
});
|
mGestureDetector = new GestureDetector(view.getContext(), mSimpleOnGestureListener);
|
}
|
|
public void setEnabled(boolean enabled) {
|
mEnabled = enabled;
|
}
|
|
private GestureDetector.SimpleOnGestureListener mSimpleOnGestureListener = new GestureDetector.SimpleOnGestureListener() {
|
|
@Override
|
public boolean onSingleTapUp(MotionEvent e) {
|
mTransportController.onSingleTapUp();
|
return true;
|
}
|
|
@Override
|
public boolean onDoubleTap(MotionEvent e) {
|
if (mEnabled) {
|
mTransportController.onDoubleTap();
|
}
|
return true;
|
}
|
|
@Override
|
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
|
float deltaX = e1.getX() - e2.getX();
|
float deltaY = e1.getY() - e2.getY();
|
if (mAdjustMode == ADJUST_NONE) {
|
float absDeltaX = Math.abs(deltaX);
|
float absDeltaY = Math.abs(deltaY);
|
if (absDeltaX < absDeltaY) {
|
if (e1.getX() < mRangeX / 2) {
|
mAdjustMode = ADJUST_BRIGHTNESS;
|
} else {
|
mAdjustMode = ADJUST_VOLUME;
|
}
|
} else {
|
mAdjustMode = ADJUST_PROGRESS;
|
}
|
if (mEnabled) {
|
mTransportController.onStartAdjust();
|
}
|
} else {
|
if (mAdjustMode == ADJUST_BRIGHTNESS) {
|
if (mEnabled) {
|
mTransportController.adjustBrightness(deltaY * 100 / mRangeY);
|
}
|
} else if (mAdjustMode == ADJUST_VOLUME) {
|
if (mEnabled) {
|
mTransportController.adjustVolume(deltaY * 100 / mRangeY);
|
}
|
} else if (mAdjustMode == ADJUST_PROGRESS) {
|
if (mEnabled) {
|
mTransportController.adjustProgress(-deltaX * 100 / mRangeX);
|
}
|
}
|
}
|
return true;
|
}
|
};
|
|
public boolean onTouchEvent(MotionEvent ev) {
|
switch (ev.getAction()) {
|
case MotionEvent.ACTION_UP:
|
if (mAdjustMode != ADJUST_NONE) {
|
if (mEnabled) {
|
Log.i("pptv_play", "手势控制 -------onTouchEvent");
|
mTransportController.onStopAdjust();
|
}
|
}
|
mAdjustMode = ADJUST_NONE;
|
break;
|
default:
|
break;
|
}
|
mGestureDetector.onTouchEvent(ev);
|
return true;
|
}
|
|
/**
|
* 播放器手势控制
|
*
|
* @author weikou2015
|
*/
|
|
public interface GestureTransportController {
|
|
void adjustBrightness(float percentage);// 亮度控制
|
|
void adjustVolume(float percentage);
|
|
void adjustProgress(float percentage);
|
|
void onStartAdjust();
|
|
void onStopAdjust();
|
|
void onSingleTapUp();
|
|
void onDoubleTap();
|
}
|
|
/**
|
* 播放器手势控制
|
*
|
* @author weikou2015
|
*/
|
public abstract static class SimpleGestureTransportController implements GestureTransportController {
|
|
private AudioManager mAudioManager;// 音量控制
|
|
private float mStartBrightness;// 初始亮度
|
|
private int mStartVolume;// 初始音量
|
|
private int mRequestProgress;
|
|
public abstract Activity getActivityInstance();
|
|
public abstract long getCurrentPosition();// 当前位置
|
|
public abstract long getDuration();// 显示持续时间
|
|
public abstract void toggleController();// 切换控制
|
|
public abstract void togglePausePlay();// 播放暂停切换
|
|
public abstract void stopAdjustProgress(int requestProgress);// 暂停时进度条位置
|
|
public abstract void showAdjustVolume(int requestVolumeness, int maxVolume);// 音量设置
|
|
public abstract void showAdjustBrightness(float requestBrightness);// 亮度设置
|
|
public abstract void showAdjustProgress(int requestProgress);
|
|
@Override
|
public void onStartAdjust() {
|
// if (Build.VERSION.SDK_INT == Build.VERSION_CODES.KITKAT && android.os.Build.BRAND.contains("HuaWei")) {
|
// Log.i("mResult", "当前手机是:--HuaWei 4.4系统");
|
// return;
|
// }
|
mStartBrightness = ScreenBrightnessUtil.getBrightness(getActivityInstance());
|
if (mStartBrightness == WindowManager.LayoutParams.BRIGHTNESS_OVERRIDE_NONE) {
|
mStartBrightness = ScreenBrightnessUtil.getSystemBrightness(getActivityInstance().getContentResolver())
|
/ 255f;
|
}
|
if (mAudioManager == null) {
|
mAudioManager = (AudioManager) getActivityInstance().getSystemService(Context.AUDIO_SERVICE);
|
}
|
mStartVolume = mAudioManager.getStreamVolume(AudioManager.STREAM_MUSIC);
|
|
mRequestProgress = 0;
|
}
|
|
@Override
|
public void onStopAdjust() {
|
if (mRequestProgress != 0) {
|
stopAdjustProgress(mRequestProgress);
|
}
|
}
|
|
@Override
|
public void onSingleTapUp() {
|
toggleController();
|
}
|
|
@Override
|
public void onDoubleTap() {
|
togglePausePlay();
|
}
|
|
@Override
|
public void adjustVolume(float percentage) {
|
// if (Build.VERSION.SDK_INT == Build.VERSION_CODES.KITKAT && android.os.Build.BRAND.contains("HuaWei")) {
|
// Log.i("mResult", "当前手机是:--HuaWei 4.4系统");
|
// return;
|
// }
|
int maxVolume = mAudioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
|
int requestVolumeness = (int) (mStartVolume + maxVolume * percentage / 100);
|
if (requestVolumeness < 0) {
|
requestVolumeness = 0;
|
}
|
if (requestVolumeness > maxVolume) {
|
requestVolumeness = maxVolume;
|
}
|
mAudioManager.setStreamVolume(AudioManager.STREAM_MUSIC, requestVolumeness, 0);
|
|
showAdjustVolume(requestVolumeness, maxVolume);
|
}
|
|
|
@Override
|
public void adjustProgress(float percentage) {
|
int requestProgress = (int) (percentage * 600 / 100);
|
long destination = getCurrentPosition() + requestProgress * 1000;
|
if (destination > getDuration() || destination < 0) {
|
return;
|
}
|
mRequestProgress = requestProgress;
|
showAdjustProgress(requestProgress);
|
}
|
|
@Override
|
public void adjustBrightness(float percentage) {
|
float requestBrightness = mStartBrightness + percentage / 100f;
|
if (requestBrightness < 0.01f) {
|
requestBrightness = 0.01f;
|
}
|
if (requestBrightness > 1.0f) {
|
requestBrightness = 1.0f;
|
}
|
ScreenBrightnessUtil.setBrightness(getActivityInstance(), requestBrightness);
|
showAdjustBrightness(requestBrightness);
|
}
|
}
|
}
|