123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905 |
- package com.edufound.mobile.video;
- import android.app.Dialog;
- import android.content.Context;
- import android.content.Intent;
- import android.graphics.Bitmap;
- import android.graphics.BitmapFactory;
- import android.graphics.Color;
- import android.graphics.drawable.AnimationDrawable;
- import android.graphics.drawable.Drawable;
- import android.media.AudioManager;
- import android.media.MediaPlayer;
- import android.net.Uri;
- import android.os.Bundle;
- import android.os.Handler;
- import android.os.Message;
- import android.view.Display;
- import android.view.GestureDetector;
- import android.view.Gravity;
- import android.view.KeyEvent;
- import android.view.LayoutInflater;
- import android.view.MotionEvent;
- import android.view.View;
- import android.view.ViewGroup;
- import android.view.Window;
- import android.view.WindowManager;
- import android.widget.FrameLayout;
- import android.widget.ImageView;
- import android.widget.LinearLayout;
- import android.widget.SeekBar;
- import android.widget.TextView;
- import com.edufound.mobile.R;
- import com.edufound.mobile.application.EApplication;
- import com.edufound.mobile.base.BaseModel;
- import com.edufound.mobile.base.BasePersenter;
- import com.edufound.mobile.util.AesUtil;
- import com.edufound.mobile.util.ContextUtil;
- import com.edufound.mobile.util.DeviceUtil;
- import com.edufound.mobile.util.DrawableUtil;
- import com.edufound.mobile.util.EduFoundUtil;
- import com.edufound.mobile.util.Logger;
- import com.edufound.mobile.util.ToastUtil;
- import com.edufound.mobile.view.ErrorView;
- import com.google.gson.Gson;
- import com.warkiz.widget.IndicatorSeekBar;
- import com.warkiz.widget.TickMarkType;
- public class VideoPersenter implements VideoIPersenter, GestureDetector.OnGestureListener, GestureDetector.OnDoubleTapListener {
- private VideoPersenter mPersenter;
- private VideoAView mView = null;
- private VideoModel mModel = null;
- private FrameLayout mFrameController;
- private LinearLayout mPlayerController;
- private FrameLayout mOtherFrame;
- private ImageView mPlayerBack;
- private ImageView mPlayerLoading;
- public ImageView mPlayerStatus;
- private Gson mGson;
- private VideoJsonBean[] mVideoBean;
- private TextView mVideoName;
- private ImageView mLittleIcon;
- private TextView mCurrent;
- private SeekBar mSeekbar;
- private int SEEK_COUNT = 1; //用来控制长按快进的seek_progress
- final int SEEK_PROGRESS = 1000;
- final int HIDE_CONTROLLER_TIME = 5000;
- final int SET_INFO = 0x7891;
- final int SHOW_CONTROLLER = 0x7892;
- final int HIDE_CONTROLLER = 0x7893;
- final int STATUS_PLAY = 0x8891;
- final int STATUS_PAUSE = 0x8892;
- final int STATUS_FORWARD = 0x8893;
- final int STATUS_REWIND = 0x8894;
- final int SHOW_STATUS_IMAGE = 0x8895;
- final int HIDE_STATUS_IMAGE = 0x8896;
- final int PLAY_NEXT = 0x8897;
- final int DISCONNECT_NETWORK = 0x8898;
- final int CONNECT_NETWORK = 0x9989;
- final int SHOW_TOUCHVIEW = 0x8899;
- final int HIDE_TOUCHVIEW = 0x8890;
- //单独播放,播放完成直接关闭
- final int TYPE_SEPARATELY_PLAY = 0;
- //单独循环播放,一直循环
- final int TYPE_SINGLECYCLE_PLAY = 1;
- //列表播放,播放完列表关闭
- final int TYPE_LIST_PLAY = 2;
- AnimationDrawable mLoadingAnim;
- private int mStatusCode;
- Bitmap mStatusPlayBitmap;
- Bitmap mLittleIconPlayBitmap;
- Bitmap mLittleIconPauseBitmap;
- int mPlayIndex;
- int mPlayType;
- String mPlayingId;
- String mPlayNeedPost;
- int mPlayStartTime;
- String SINGLECYCLE_URL = "";
- ErrorView mErrorView;
- Dialog mErrorViewDialog;
- int mPlayerBackTime;
- String mPlayerModuleType;
- int mNetWorkErrorTime;
- boolean isPrepared = false;
- boolean isControllerShow = true;
- private GestureDetector gestureDetector;
- DeviceUtil deviceUtil;
- IndicatorSeekBar mTouchSeek;
- FrameLayout mTouchView;
- TextView mTouchText;
- ImageView mTouchIcon;
- boolean isSaveState = false;
- int oneVolume = 0;
- public VideoPersenter(VideoAView view) {
- mPersenter = this;
- mView = view;
- mModel = new VideoModel();
- mGson = new Gson();
- audiomanager = (AudioManager) mView.getActivity().getSystemService(Context.AUDIO_SERVICE);
- maxVolume = audiomanager.getStreamMaxVolume(AudioManager.STREAM_MUSIC); // 获取系统最大音量
- currentVolume = audiomanager.getStreamVolume(AudioManager.STREAM_MUSIC); // 获取当前值
- oneVolume = maxVolume / 10;
- deviceUtil = new DeviceUtil();
- playerWidth = deviceUtil.getWidth(mView.getActivity());
- gestureDetector = new GestureDetector(mView.getActivity(), this);
- gestureDetector.setIsLongpressEnabled(true);
- mFrameController = (FrameLayout) LayoutInflater.from(ContextUtil.getContext()).inflate(R.layout.player_controller, null);
- mOtherFrame = mFrameController.findViewById(R.id.player_other_frame);
- mPlayerController = mFrameController.findViewById(R.id.player_controller_layout);
- mPlayerBack = mPlayerController.findViewById(R.id.player_back);
- mVideoName = mFrameController.findViewById(R.id.player_name);
- mLittleIcon = mFrameController.findViewById(R.id.player_little_icon);
- mCurrent = mFrameController.findViewById(R.id.player_current);
- mSeekbar = mFrameController.findViewById(R.id.player_seekbar);
- Drawable drawable = DrawableUtil.getNewDrawable(mView.getActivity(), R.drawable.seekbar_thumb, 36 * 2, 60 * 2);
- mSeekbar.setThumb(drawable);
- mPlayerStatus = mFrameController.findViewById(R.id.player_status);
- mPlayerLoading = mFrameController.findViewById(R.id.player_loading);
- mLoadingAnim = (AnimationDrawable) mPlayerLoading.getBackground();
- mLoadingAnim.start();
- mSeekbar.setFocusable(true);
- mStatusPlayBitmap = BitmapFactory.decodeResource(ContextUtil.getContext().getResources(), R.drawable.edufound_player_play);
- mLittleIconPlayBitmap = BitmapFactory.decodeResource(ContextUtil.getContext().getResources(), R.drawable.player_little_icon_play);
- mLittleIconPauseBitmap = BitmapFactory.decodeResource(ContextUtil.getContext().getResources(), R.drawable.player_little_icon_pause);
- mTouchView = (FrameLayout) LayoutInflater.from(mView.getActivity()).inflate(R.layout.player_touch_view, null);
- mTouchText = (TextView) mTouchView.findViewById(R.id.player_touch_text);
- mTouchIcon = (ImageView) mTouchView.findViewById(R.id.player_touch_icon);
- FrameLayout mTouchSeekFrame = (FrameLayout) mTouchView.findViewById(R.id.player_touch_seekbar_frame);
- mTouchSeek = IndicatorSeekBar
- .with(mView.getActivity())
- .max(10)
- .min(0)
- .progress(0)
- .tickCount(11)
- .showTickMarksType(TickMarkType.DIVIDER)
- .tickMarksColor(mView.getActivity().getResources().getColor(R.color.result_view))
- .tickMarksSize(10)//dp
- .tickMarksEndsHide(true)
- .trackProgressColor(mView.getActivity().getResources().getColor(R.color.white))
- .trackProgressSize(10)
- .trackBackgroundColor(mView.getActivity().getResources().getColor(R.color.gray))
- .trackBackgroundSize(10)
- .thumbSize(0)
- .build();
- FrameLayout.LayoutParams touch_seek_params = new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
- touch_seek_params.gravity = Gravity.CENTER;
- mTouchSeek.setLayoutParams(touch_seek_params);
- FrameLayout.LayoutParams touch_params = new FrameLayout.LayoutParams(deviceUtil.getWidth(mView.getActivity()) / 4, deviceUtil.getHeight(mView.getActivity()) / 3);
- touch_params.gravity = Gravity.CENTER;
- mTouchView.setLayoutParams(touch_params);
- mTouchSeekFrame.addView(mTouchSeek);
- mOtherFrame.addView(mTouchView);
- mTouchView.setVisibility(View.GONE);
- setListener();
- }
- void setListener() {
- mPlayerBack.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- removeHandler();
- mView.activityFinish();
- }
- });
- mLittleIcon.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- if (mView.isPlaying()) {
- mView.pause();
- checkStatus(STATUS_PLAY);
- mVideoHandler.sendEmptyMessage(SHOW_STATUS_IMAGE);
- mVideoHandler.sendEmptyMessage(SHOW_CONTROLLER);
- } else {
- mView.start();
- checkStatus(STATUS_PAUSE);
- mPlayerStatus.setVisibility(View.INVISIBLE);
- mVideoHandler.sendEmptyMessage(SHOW_CONTROLLER);
- }
- }
- });
- mSeekbar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
- @Override
- public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
- mVideoHandler.removeMessages(SET_INFO);
- mCurrent.setText(EduFoundUtil.getTime(progress) + "/" + EduFoundUtil.getTime(mView.getDuration()));
- }
- @Override
- public void onStartTrackingTouch(SeekBar seekBar) {
- mVideoHandler.removeMessages(SHOW_CONTROLLER);
- mVideoHandler.removeMessages(HIDE_CONTROLLER);
- }
- @Override
- public void onStopTrackingTouch(SeekBar seekBar) {
- if (seekBar.getProgress() >= mView.getDuration()) {
- playerCompletion();
- return;
- }
- mView.seek(seekBar.getProgress());
- mCurrent.setText(EduFoundUtil.getTime(mView.getCurrent()) + "/" + EduFoundUtil.getTime(mView.getDuration()));
- mVideoHandler.sendEmptyMessage(SET_INFO);
- mVideoHandler.sendEmptyMessage(SHOW_CONTROLLER);
- }
- });
- mPlayerStatus.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- mView.start();
- checkStatus(STATUS_PAUSE);
- mPlayerStatus.setVisibility(View.INVISIBLE);
- mVideoHandler.sendEmptyMessage(SHOW_CONTROLLER);
- }
- });
- }
- @Override
- public void loadData() {
- mModel.LoadData(new BaseModel.LoadDataBack() {
- @Override
- public void success(String datajson) {
- Logger.DebugE("datajson:" + datajson);
- mView.showData(datajson);
- }
- @Override
- public void failure() {
- Logger.e("failure");
- }
- });
- }
- @Override
- public void onDisConnNetWork() {
- // ToastUtil.showToast("播放器界面断网了...");
- mView.stop();
- mNetWorkErrorTime = mSeekbar.getProgress();
- mVideoHandler.sendEmptyMessage(DISCONNECT_NETWORK);
- }
- @Override
- public void onConnNetWork() {
- mVideoHandler.removeMessages(DISCONNECT_NETWORK);
- }
- @Override
- public void loadVideo(Intent intent) {
- try {
- String play_jsons = intent.getStringExtra("play_jsons");
- mPlayIndex = intent.getIntExtra("play_index", 0);
- mPlayType = intent.getIntExtra("play_type", 0);
- mPlayerModuleType = intent.getStringExtra("play_moduletype");
- mVideoBean = mGson.fromJson(play_jsons, VideoJsonBean[].class);
- // mVideoBean = mGson.fromJson(video_json, VideoJsonBean.class);
- mPlayingId = mVideoBean[mPlayIndex].videoid;
- mPlayNeedPost = mVideoBean[mPlayIndex].videoneedpost;
- mPlayStartTime = Integer.valueOf(mVideoBean[mPlayIndex].videoplaytime);
- if (mVideoBean[mPlayIndex].videourl == null || mVideoBean[mPlayIndex].videourl.equals("") || mVideoBean[mPlayIndex].videourl.length() == 0) {
- ToastUtil.showToast("URL是空的");
- mView.activityFinish();
- return;
- }
- // Logger.DebugE("mVideoBean[mPlayIndex].videourl:" + mVideoBean[mPlayIndex].videourl);
- String decrypt = AesUtil.Decrypt(mVideoBean[mPlayIndex].videourl);
- // Logger.DebugE("解密:" + decrypt);
- if (mPlayType == TYPE_SINGLECYCLE_PLAY) {
- SINGLECYCLE_URL = decrypt;
- }
- // decrypt = "http://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4";
- if (decrypt == null || !decrypt.contains("http")) {
- ToastUtil.showToast("视频格式出现问题");
- // mView.activityFinish();
- return;
- }
- mView.setVideoUri(Uri.parse(decrypt));
- mVideoName.setText(mVideoBean[mPlayIndex].videoname);
- mVideoHandler.sendEmptyMessage(SET_INFO);
- if (mPlayStartTime > 0) {
- mView.seek(mPlayStartTime);
- }
- mView.start();
- mVideoHandler.sendEmptyMessageDelayed(HIDE_CONTROLLER, HIDE_CONTROLLER_TIME);
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- @Override
- public boolean onKeyDown(int keycode, KeyEvent event) {
- if (!isPrepared || (mView.getDuration() == 0) || mSeekbar.getMax() == 0) {
- if (keycode == KeyEvent.KEYCODE_BACK || keycode == KeyEvent.KEYCODE_ESCAPE) {
- }
- return true;
- }
- switch (keycode) {
- case KeyEvent.KEYCODE_BACK:
- case KeyEvent.KEYCODE_ESCAPE:
- return true;
- }
- return false;
- }
- @Override
- public boolean onKeyUp(int keycode, KeyEvent event) {
- if (!isPrepared || (mView.getDuration() == 0) || mSeekbar.getMax() == 0) {
- if (keycode == KeyEvent.KEYCODE_BACK || keycode == KeyEvent.KEYCODE_ESCAPE) {
- mView.activityFinish();
- }
- return true;
- }
- switch (keycode) {
- case KeyEvent.KEYCODE_BACK:
- case KeyEvent.KEYCODE_ESCAPE:
- removeHandler();
- mView.activityFinish();
- return true;
- }
- return false;
- }
- @Override
- public void removeHandler() {
- mVideoHandler.removeMessages(SET_INFO);
- mVideoHandler.removeMessages(SHOW_CONTROLLER);
- mVideoHandler.removeMessages(HIDE_CONTROLLER);
- }
- @Override
- public View getPlayerController() {
- return mFrameController;
- }
- @Override
- public void showController() {
- mVideoHandler.sendEmptyMessage(SHOW_CONTROLLER);
- }
- @Override
- public void hideController() {
- mVideoHandler.sendEmptyMessage(HIDE_CONTROLLER);
- }
- @Override
- public boolean isShowController() {
- return isControllerShow;
- }
- @Override
- public void onCompletion() {
- playerCompletion();
- }
- @Override
- public void onPrepared() {
- mLoadingAnim.stop();
- isPrepared = true;
- mPlayerLoading.setVisibility(View.INVISIBLE);
- }
- @Override
- public void onInfo(int what, int extra) {
- switch (what) {
- case MediaPlayer.MEDIA_INFO_BUFFERING_START:
- mLoadingAnim.start();
- mPlayerLoading.setVisibility(View.VISIBLE);
- break;
- case MediaPlayer.MEDIA_INFO_BUFFERING_END:
- mLoadingAnim.stop();
- mPlayerLoading.setVisibility(View.INVISIBLE);
- break;
- }
- }
- @Override
- public boolean onError(int what, int extra) {
- switch (what) {
- case -10000:
- mVideoHandler.sendEmptyMessage(DISCONNECT_NETWORK);
- ToastUtil.showToast("网络出现异常");
- break;
- default:
- mView.stop();
- ToastUtil.showToast("视频异常--what:" + what + "--extra:" + extra);
- mVideoHandler.postDelayed(new Runnable() {
- @Override
- public void run() {
- mView.activityFinish();
- }
- }, 2000);
- break;
- }
- return true;
- }
- @Override
- public void destroy() {
- NotificationWebPlayerTime();
- if (mStatusPlayBitmap != null && !mStatusPlayBitmap.isRecycled()) {
- // 回收并且置为null
- mStatusPlayBitmap.recycle();
- mLittleIconPauseBitmap.recycle();
- mLittleIconPlayBitmap.recycle();
- mStatusPlayBitmap = null;
- mLittleIconPauseBitmap = null;
- mLittleIconPlayBitmap = null;
- }
- System.gc();
- }
- @Override
- public boolean onTouchEvent(MotionEvent event) {
- if (event.getAction() == MotionEvent.ACTION_UP) {
- GESTURE_FLAG = 0;// 手指离开屏幕后,重置调节音量或进度的标志
- mVideoHandler.sendEmptyMessageDelayed(HIDE_TOUCHVIEW, 3000);
- }
- return gestureDetector.onTouchEvent(event);
- }
- @Override
- public void onSaveInstanceState(Bundle outState) {
- //保存
- // removeHandler();
- mView.pause();
- isSaveState = true;
- Logger.e("onSaveInstanceState");
- }
- @Override
- public void onRestoreInstanceState(Bundle savedInstanceState) {
- //重新读取
- }
- @Override
- public void onResume() {
- if (isSaveState && (mErrorViewDialog.isShowing() == false)) {
- mView.start();
- checkStatus(STATUS_PAUSE);
- mPlayerStatus.setVisibility(View.INVISIBLE);
- mVideoHandler.sendEmptyMessage(SHOW_CONTROLLER);
- }
- }
- Handler mVideoHandler = new Handler(new Handler.Callback() {
- @Override
- public boolean handleMessage(Message msg) {
- switch (msg.what) {
- case SET_INFO:
- mPlayerBackTime = mView.getCurrent();
- mSeekbar.setProgress(mView.getCurrent());
- mSeekbar.setMax(mView.getDuration());
- mCurrent.setText(EduFoundUtil.getTime(mView.getCurrent()) + "/" + EduFoundUtil.getTime(mView.getDuration()));
- mVideoHandler.sendEmptyMessageDelayed(SET_INFO, 1000);
- break;
- case SHOW_CONTROLLER:
- isControllerShow = true;
- mVideoHandler.removeMessages(HIDE_CONTROLLER);
- mPlayerController.setVisibility(View.VISIBLE);
- mVideoHandler.sendEmptyMessageDelayed(HIDE_CONTROLLER, HIDE_CONTROLLER_TIME);
- break;
- case HIDE_CONTROLLER:
- isControllerShow = false;
- mPlayerController.setVisibility(View.INVISIBLE);
- break;
- case SHOW_STATUS_IMAGE:
- mPlayerStatus.setVisibility(View.VISIBLE);
- break;
- case HIDE_STATUS_IMAGE:
- mPlayerStatus.setVisibility(View.INVISIBLE);
- break;
- case PLAY_NEXT:
- removeHandler();
- mPlayIndex++;
- if (mPlayIndex > mVideoBean.length - 1) {
- mView.activityFinish();
- } else {
- try {
- ToastUtil.showToast("即将为您播放下一个:" + mVideoBean[mPlayIndex].videoname);
- mVideoName.setText(mVideoBean[mPlayIndex].videoname);
- mPlayingId = mVideoBean[mPlayIndex].videoid;
- mPlayNeedPost = mVideoBean[mPlayIndex].videoneedpost;
- mPlayStartTime = Integer.valueOf(mVideoBean[mPlayIndex].videoplaytime);
- if (Uri.parse(AesUtil.Decrypt(mVideoBean[mPlayIndex].videourl)) == null || Uri.parse(AesUtil.Decrypt(mVideoBean[mPlayIndex].videourl)).equals("")) {
- //可能是没权限,直接退出
- mView.activityFinish();
- // return true;
- } else {
- mVideoHandler.sendEmptyMessage(SET_INFO);
- mView.setVideoUri(Uri.parse(AesUtil.Decrypt(mVideoBean[mPlayIndex].videourl)));
- mVideoHandler.sendEmptyMessage(SHOW_CONTROLLER);
- mVideoHandler.sendEmptyMessage(SHOW_STATUS_IMAGE);
- mVideoHandler.sendEmptyMessageDelayed(HIDE_STATUS_IMAGE, 500);
- mView.start();
- }
- } catch (Exception e) {
- e.printStackTrace();
- mView.activityFinish();
- }
- }
- break;
- case DISCONNECT_NETWORK:
- mVideoHandler.post(new Runnable() {
- @Override
- public void run() {
- showDisConnNeWorkWindow();
- }
- });
- break;
- case CONNECT_NETWORK:
- try {
- if (mErrorViewDialog != null) {
- mErrorViewDialog.dismiss();
- }
- mView.stop();
- mView.releaseVideo();
- mView.setVideoUri(Uri.parse(AesUtil.Decrypt(mVideoBean[mPlayIndex].videourl)));
- mErrorViewDialog.dismiss();
- mView.seek(mNetWorkErrorTime);
- mView.start();
- } catch (Exception e) {
- e.printStackTrace();
- }
- break;
- case SHOW_TOUCHVIEW:
- mTouchView.setVisibility(View.VISIBLE);
- break;
- case HIDE_TOUCHVIEW:
- mTouchView.setVisibility(View.GONE);
- break;
- }
- return false;
- }
- });
- /*
- * 切换status图片
- * */
- void checkStatus(final int status) {
- mLittleIcon.post(new Runnable() {
- @Override
- public void run() {
- switch (status) {
- case STATUS_PLAY:
- if (mStatusCode != STATUS_PLAY) {
- mStatusCode = STATUS_PLAY;
- mPlayerStatus.setImageBitmap(mStatusPlayBitmap);
- mLittleIcon.setImageBitmap(mLittleIconPlayBitmap);
- }
- break;
- case STATUS_PAUSE:
- if (mStatusCode != STATUS_PAUSE) {
- mStatusCode = STATUS_PAUSE;
- mLittleIcon.setImageBitmap(mLittleIconPauseBitmap);
- }
- break;
- case STATUS_FORWARD:
- if (mStatusCode != STATUS_FORWARD) {
- mStatusCode = STATUS_FORWARD;
- }
- break;
- case STATUS_REWIND:
- if (mStatusCode != STATUS_REWIND) {
- mStatusCode = STATUS_REWIND;
- }
- break;
- }
- }
- });
- }
- void showDisConnNeWorkWindow() {
- if (mErrorView == null) {
- mErrorViewDialog = new Dialog(mView.getActivity());
- try {
- int dividerID = mView.getActivity().getResources().getIdentifier("android:id/titleDivider", null, null);
- View divider = mErrorViewDialog.findViewById(dividerID);
- divider.setBackgroundColor(Color.TRANSPARENT);
- } catch (Exception e) {
- //上面的代码,是用来去除Holo主题的蓝色线条
- e.printStackTrace();
- }
- mErrorView = new ErrorView(mView);
- mErrorView.setBtnClickListener(new ErrorView.BtnClickListener() {
- @Override
- public void clickRelase() {
- // mView.start();
- try {
- if (ContextUtil.getNetWorkState()) {
- mView.stop();
- mView.releaseVideo();
- mView.setVideoUri(Uri.parse(AesUtil.Decrypt(mVideoBean[mPlayIndex].videourl)));
- mErrorViewDialog.dismiss();
- mView.seek(mNetWorkErrorTime);
- mView.start();
- } else {
- ToastUtil.showToast("请检查网络连接状况");
- }
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- @Override
- public void clickExit() {
- mErrorViewDialog.dismiss();
- EApplication.clearActivity();
- Intent intent_restart = new Intent(ContextUtil.CLOSE_ACTIVITY_MAIN);
- mView.getActivity().sendBroadcast(intent_restart);
- System.exit(0);
- }
- });
- mErrorViewDialog.setCancelable(false);
- mErrorViewDialog.setContentView(mErrorView);
- Window dialogWindow = mErrorViewDialog.getWindow();
- dialogWindow.setGravity(Gravity.CENTER);
- dialogWindow.getDecorView().setPadding(0, 0, 0, 0);
- dialogWindow.getDecorView().setBackgroundColor(Color.parseColor("#80000000"));
- WindowManager m = mView.getActivity().getWindowManager();
- Display d = m.getDefaultDisplay(); // 获取屏幕宽、高用
- WindowManager.LayoutParams p = dialogWindow.getAttributes(); // 获取对话框当前的参数值
- p.height = (int) (d.getHeight() * 1);
- p.width = WindowManager.LayoutParams.MATCH_PARENT;
- p.horizontalMargin = 0;
- dialogWindow.setAttributes(p);
- }
- if (!mErrorViewDialog.isShowing()) {
- mErrorViewDialog.show();
- }
- }
- void playerCompletion() {
- mPlayerBackTime = 0;
- switch (mPlayType) {
- case TYPE_SEPARATELY_PLAY:
- ToastUtil.showToast("播放完成");
- removeHandler();
- mView.activityFinish();
- break;
- case TYPE_SINGLECYCLE_PLAY:
- ToastUtil.showToast("重新播放");
- removeHandler();
- mVideoHandler.sendEmptyMessage(SET_INFO);
- mView.seek(0);
- mView.start();
- return;
- case TYPE_LIST_PLAY:
- NotificationWebPlayerTime();
- mVideoHandler.sendEmptyMessage(PLAY_NEXT);
- return;
- }
- }
- public void NotificationWebPlayerTime() {
- Intent intent = new Intent(ContextUtil.NOTIFICATION_WEB_PLAYERTIME);
- intent.putExtra("over_time", String.valueOf(mPlayerBackTime));
- intent.putExtra("over_id", String.valueOf(mPlayingId));
- intent.putExtra("over_neetpost", mPlayNeedPost);
- intent.putExtra("over_moduletype", mPlayerModuleType);
- mView.getActivity().sendBroadcast(intent);
- }
- private boolean firstScroll = false;
- private int GESTURE_FLAG = 0;// 1,调节进度,2,调节音量,3.调节亮度
- private static final int GESTURE_MODIFY_PROGRESS = 1;
- private static final int GESTURE_MODIFY_VOLUME = 2;
- private static final int GESTURE_MODIFY_BRIGHT = 3;
- private int playerWidth;
- private int maxVolume, currentVolume;
- private AudioManager audiomanager;
- private float mBrightness = -1f; // 亮度
- private static final float STEP_PROGRESS = 3f;// 设定进度滑动时的步长,避免每次滑动都改变,导致改变过快
- private static final float STEP_VOLUME = 3f;// 协调音量滑动时的步长,避免每次滑动都改变,导致改变过快
- @Override
- public boolean onDown(MotionEvent e) {
- firstScroll = true;// 设定是触摸屏幕后第一次scroll的标志
- return false;
- }
- @Override
- public void onShowPress(MotionEvent e) {
- }
- @Override
- public boolean onSingleTapUp(MotionEvent e) {
- return true;
- }
- @Override
- public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
- // TODO Auto-generated method stub
- mVideoHandler.removeMessages(HIDE_TOUCHVIEW);
- float mOldX = e1.getX(), mOldY = e1.getY();
- int y = (int) e2.getRawY();
- if (firstScroll) {// 以触摸屏幕后第一次滑动为标准,避免在屏幕上操作切换混乱
- // 横向的距离变化大则调整进度,纵向的变化大则调整音量
- if (Math.abs(distanceX) >= Math.abs(distanceY)) {
- GESTURE_FLAG = GESTURE_MODIFY_PROGRESS;
- } else {
- if (mOldX > playerWidth / 2.0f) {// 音量
- GESTURE_FLAG = GESTURE_MODIFY_VOLUME;
- } else if (mOldX < playerWidth / 2.0f) {// 亮度
- GESTURE_FLAG = GESTURE_MODIFY_BRIGHT;
- }
- }
- }
- // 如果每次触摸屏幕后第一次scroll是调节进度,那之后的scroll事件都处理音量进度,直到离开屏幕执行下一次操作
- if (GESTURE_FLAG == GESTURE_MODIFY_PROGRESS) {
- }
- // 如果每次触摸屏幕后第一次scroll是调节音量,那之后的scroll事件都处理音量调节,直到离开屏幕执行下一次操作
- else if (GESTURE_FLAG == GESTURE_MODIFY_VOLUME) {
- currentVolume = audiomanager.getStreamVolume(AudioManager.STREAM_MUSIC); // 获取当前值
- mTouchSeek.setProgress(currentVolume);
- if (Math.abs(distanceY) > Math.abs(distanceX)) {// 纵向移动大于横向移动
- if (distanceY >= dip2px(STEP_VOLUME)) {// 音量调大,注意横屏时的坐标体系,尽管左上角是原点,但横向向上滑动时distanceY为正
- if (currentVolume < maxVolume) {// 为避免调节过快,distanceY应大于一个设定值
- currentVolume = currentVolume + oneVolume;
- }
- // gesture_iv_player_volume.setImageResource(R.drawable.souhu_player_volume);
- } else if (distanceY <= -dip2px(STEP_VOLUME)) {// 音量调小
- if (currentVolume > 0) {
- currentVolume = currentVolume - oneVolume;
- if (currentVolume == 0) {// 静音,设定静音独有的图片
- // gesture_iv_player_volume
- // .setImageResource(R.drawable.souhu_player_silence);
- }
- }
- }
- // geture_tv_volume_percentage.setText(percentage + "%");
- mTouchText.setText("音量");
- mTouchIcon.setImageBitmap(BitmapFactory.decodeResource(mView.getActivity().getResources(), R.drawable.player_volume_icon));
- mVideoHandler.sendEmptyMessage(SHOW_TOUCHVIEW);
- mTouchSeek.setProgress((currentVolume));
- audiomanager.setStreamVolume(AudioManager.STREAM_MUSIC, currentVolume, 0);
- }
- }
- // 如果每次触摸屏幕后第一次scroll是调节亮度,那之后的scroll事件都处理亮度调节,直到离开屏幕执行下一次操作
- else if (GESTURE_FLAG == GESTURE_MODIFY_BRIGHT) {
- Logger.e("亮度....");
- WindowManager.LayoutParams lpa = mView.getActivity().getWindow().getAttributes();
- // gesture_iv_player_bright.setImageResource(R.drawable.souhu_player_bright);
- mTouchSeek.setProgress(lpa.screenBrightness);
- if (mBrightness < 0) {
- mBrightness = mView.getActivity().getWindow().getAttributes().screenBrightness;
- if (mBrightness <= 0.00f)
- mBrightness = 0.00f;
- }
- if (Math.abs(distanceY) > Math.abs(distanceX)) {// 纵向移动大于横向移动
- if (distanceY >= dip2px(STEP_VOLUME)) {
- if (mBrightness < 1.0f) {// 为避免调节过快,distanceY应大于一个设定值
- mBrightness += 0.1f;
- }
- } else if (distanceY <= -dip2px(STEP_VOLUME)) {
- if (mBrightness > 0) {
- mBrightness -= 0.1f;
- }
- }
- }
- if (mBrightness > 1.0f) {
- mBrightness = 1.0f;
- } else if (mBrightness < 0.01f) {
- mBrightness = 0.01f;
- }
- lpa.screenBrightness = mBrightness;
- mTouchText.setText("亮度");
- mTouchIcon.setImageBitmap(BitmapFactory.decodeResource(mView.getActivity().getResources(), R.drawable.player_brightness_icon));
- mVideoHandler.sendEmptyMessage(SHOW_TOUCHVIEW);
- mTouchSeek.setProgress((mBrightness * 10));
- mView.getActivity().getWindow().setAttributes(lpa);
- // geture_tv_bright_percentage.setText((int) (lpa.screenBrightness * 100) + "%");
- }
- firstScroll = false;// 第一次scroll执行完成,修改标志
- return false;
- }
- public int dip2px(float dpValue) {
- final float scale = mView.getActivity().getResources().getDisplayMetrics().density;
- return (int) (dpValue * scale + 0.5f);
- }
- @Override
- public void onLongPress(MotionEvent e) {
- }
- @Override
- public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
- return false;
- }
- @Override
- public boolean onSingleTapConfirmed(MotionEvent e) {
- Logger.e("onSingleTapConfirmed");
- if (mPersenter.isShowController()) {
- mPersenter.hideController();
- } else {
- mPersenter.showController();
- }
- return false;
- }
- @Override
- public boolean onDoubleTap(MotionEvent e) {
- Logger.e("onDoubleTap");
- if (mView.isPlaying()) {
- mView.pause();
- mPersenter.checkStatus(mPersenter.STATUS_PLAY);
- mPersenter.mVideoHandler.sendEmptyMessage(mPersenter.SHOW_STATUS_IMAGE);
- mPersenter.mVideoHandler.sendEmptyMessage(mPersenter.SHOW_CONTROLLER);
- } else {
- mView.start();
- mPersenter.checkStatus(mPersenter.STATUS_PAUSE);
- mPersenter.mPlayerStatus.setVisibility(View.INVISIBLE);
- mPersenter.mVideoHandler.sendEmptyMessage(mPersenter.SHOW_CONTROLLER);
- }
- return false;
- }
- @Override
- public boolean onDoubleTapEvent(MotionEvent e) {
- return false;
- }
- }
- interface VideoIPersenter extends BasePersenter {
- void loadVideo(Intent intent);
- boolean onKeyDown(int keycode, KeyEvent event);
- boolean onKeyUp(int keycode, KeyEvent event);
- void removeHandler();
- View getPlayerController();
- void showController();
- void hideController();
- boolean isShowController();
- void onCompletion();
- void onPrepared();
- void onInfo(int what, int extra);
- boolean onError(int what, int extra);
- void destroy();
- boolean onTouchEvent(MotionEvent event);
- void onSaveInstanceState(Bundle outState);
- void onRestoreInstanceState(Bundle savedInstanceState);
- void onResume();
- }
- class VideoJsonBean {
- public String videourl;
- public String videoname;
- public String videoid;
- public String videoplaytime;
- public String videoneedpost;
- }
|