StandardGSYVideoPlayer.java 32.4 KB
Newer Older
S
shuyu 已提交
1 2 3 4 5 6 7
package com.shuyu.gsyvideoplayer.video;

import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.Context;
import android.content.DialogInterface;
S
1.2.6  
shuyu 已提交
8
import android.graphics.Point;
S
1.1.8  
shuyu 已提交
9
import android.graphics.drawable.Drawable;
S
shuyu 已提交
10 11 12 13 14 15 16 17 18 19 20
import android.text.TextUtils;
import android.util.AttributeSet;
import android.view.Gravity;
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.ImageView;
import android.widget.ProgressBar;
S
shuyu 已提交
21
import android.widget.RelativeLayout;
S
shuyu 已提交
22 23 24 25 26 27 28 29
import android.widget.TextView;
import android.widget.Toast;


import com.shuyu.gsyvideoplayer.GSYVideoPlayer;
import com.shuyu.gsyvideoplayer.R;
import com.shuyu.gsyvideoplayer.listener.StandardVideoAllCallBack;
import com.shuyu.gsyvideoplayer.utils.CommonUtil;
S
1.1.9  
shuyu 已提交
30
import com.shuyu.gsyvideoplayer.utils.Debuger;
S
shuyu 已提交
31
import com.shuyu.gsyvideoplayer.utils.NetworkUtils;
S
shuyu 已提交
32

S
1.3.0  
shuyu 已提交
33
import java.io.File;
S
shuyu 已提交
34 35 36
import java.util.Timer;
import java.util.TimerTask;

S
shuyu 已提交
37 38 39
import moe.codeest.enviews.ENDownloadView;
import moe.codeest.enviews.ENPlayView;

S
shuyu 已提交
40
/**
S
shuyu 已提交
41
 * 标准播放器
S
shuyu 已提交
42 43 44 45 46 47
 * Created by shuyu on 2016/11/11.
 */

public class StandardGSYVideoPlayer extends GSYVideoPlayer {


S
shuyu 已提交
48
    protected Timer DISSMISS_CONTROL_VIEW_TIMER;
S
shuyu 已提交
49

S
shuyu 已提交
50 51 52
    protected ProgressBar mBottomProgressBar;

    private ENDownloadView mLoadingProgressBar;
S
shuyu 已提交
53 54 55 56 57 58

    protected TextView mTitleTextView; //title

    protected RelativeLayout mThumbImageViewLayout;//封面父布局

    private View mThumbImageView; //封面
S
shuyu 已提交
59 60

    protected Dialog mBrightnessDialog;
S
shuyu 已提交
61

S
shuyu 已提交
62
    protected TextView mBrightnessDialogTv;
S
shuyu 已提交
63

S
shuyu 已提交
64
    protected Dialog mVolumeDialog;
S
shuyu 已提交
65

S
shuyu 已提交
66
    protected ProgressBar mDialogVolumeProgressBar;
S
shuyu 已提交
67 68 69 70

    protected StandardVideoAllCallBack mStandardVideoAllCallBack;//标准播放器的回调

    protected DismissControlViewTimerTask mDismissControlViewTimerTask;
S
shuyu 已提交
71

S
shuyu 已提交
72 73 74 75 76
    protected Dialog mProgressDialog;
    protected ProgressBar mDialogProgressBar;
    protected TextView mDialogSeekTime;
    protected TextView mDialogTotalTime;
    protected ImageView mDialogIcon;
S
shuyu 已提交
77
    protected ImageView mLockScreen;
S
shuyu 已提交
78

S
1.1.8  
shuyu 已提交
79 80 81 82 83 84
    protected Drawable mBottomProgressDrawable;
    protected Drawable mBottomShowProgressDrawable;
    protected Drawable mBottomShowProgressThumbDrawable;
    protected Drawable mVolumeProgressDrawable;
    protected Drawable mDialogProgressBarDrawable;

S
shuyu 已提交
85 86 87 88 89 90
    protected boolean mLockCurScreen;//锁定屏幕点击

    protected boolean mNeedLockFull;//是否需要锁定屏幕

    private boolean mThumbPlay;//是否点击封面播放

S
1.1.8  
shuyu 已提交
91 92 93 94
    private int mDialogProgressHighLightColor = -11;

    private int mDialogProgressNormalColor = -11;

S
shuyu 已提交
95

S
shuyu 已提交
96
    public void setStandardVideoAllCallBack(StandardVideoAllCallBack standardVideoAllCallBack) {
S
shuyu 已提交
97
        this.mStandardVideoAllCallBack = standardVideoAllCallBack;
S
shuyu 已提交
98
        setVideoAllCallBack(standardVideoAllCallBack);
S
shuyu 已提交
99 100 101 102 103 104 105 106 107 108 109 110 111
    }

    public StandardGSYVideoPlayer(Context context) {
        super(context);
    }

    public StandardGSYVideoPlayer(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    @Override
    protected void init(Context context) {
        super.init(context);
S
shuyu 已提交
112 113 114
        mBottomProgressBar = (ProgressBar) findViewById(R.id.bottom_progressbar);
        mTitleTextView = (TextView) findViewById(R.id.title);
        mThumbImageViewLayout = (RelativeLayout) findViewById(R.id.thumb);
S
shuyu 已提交
115
        mLockScreen = (ImageView) findViewById(R.id.lock_screen);
116

S
shuyu 已提交
117
        mLoadingProgressBar = (ENDownloadView) findViewById(R.id.loading);
S
shuyu 已提交
118 119 120 121

        mThumbImageViewLayout.setVisibility(GONE);
        mThumbImageViewLayout.setOnClickListener(this);
        mBackButton.setOnClickListener(this);
122
        if (mThumbImageView != null && !mIfCurrentIsFullscreen) {
S
shuyu 已提交
123 124
            mThumbImageViewLayout.removeAllViews();
            resolveThumbImage(mThumbImageView);
S
shuyu 已提交
125
        }
S
shuyu 已提交
126

S
1.1.8  
shuyu 已提交
127 128 129 130 131 132 133 134 135 136 137 138 139

        if (mBottomProgressDrawable != null) {
            mBottomProgressBar.setProgressDrawable(mBottomProgressDrawable);
        }

        if (mBottomShowProgressDrawable != null) {
            mProgressBar.setProgressDrawable(mBottomProgressDrawable);
        }

        if (mBottomShowProgressThumbDrawable != null) {
            mProgressBar.setThumb(mBottomShowProgressThumbDrawable);
        }

S
shuyu 已提交
140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155
        mLockScreen.setVisibility(GONE);

        mLockScreen.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                if (mLockCurScreen) {
                    mLockScreen.setImageResource(R.drawable.unlock);
                    mLockCurScreen = false;
                } else {
                    mLockScreen.setImageResource(R.drawable.lock);
                    mLockCurScreen = true;
                    hideAllWidget();
                }
            }
        });

S
shuyu 已提交
156 157 158 159
    }

    @Override
    public boolean setUp(String url, boolean cacheWithPlay, Object... objects) {
S
1.3.0  
shuyu 已提交
160 161 162 163 164 165 166 167 168
        return setUp(url, cacheWithPlay, (File) null, objects);
    }

    @Override
    public boolean setUp(String url, boolean cacheWithPlay, File cachePath, Object... objects) {
        if (super.setUp(url, cacheWithPlay, cachePath, objects)) {
            if (objects != null && objects.length > 0) {
                mTitleTextView.setText(objects[0].toString());
            }
S
shuyu 已提交
169
            if (mIfCurrentIsFullscreen) {
S
shuyu 已提交
170
                mFullscreenButton.setImageResource(R.drawable.video_shrink);
S
shuyu 已提交
171
            } else {
S
shuyu 已提交
172 173
                mFullscreenButton.setImageResource(R.drawable.video_enlarge);
                mBackButton.setVisibility(View.GONE);
S
shuyu 已提交
174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209
            }
            return true;
        }
        return false;
    }

    @Override
    public int getLayoutId() {
        return R.layout.video_layout_standard;
    }

    @Override
    protected void setStateAndUi(int state) {
        super.setStateAndUi(state);
        switch (mCurrentState) {
            case CURRENT_STATE_NORMAL:
                changeUiToNormal();
                break;
            case CURRENT_STATE_PREPAREING:
                changeUiToPrepareingShow();
                startDismissControlViewTimer();
                break;
            case CURRENT_STATE_PLAYING:
                changeUiToPlayingShow();
                startDismissControlViewTimer();
                break;
            case CURRENT_STATE_PAUSE:
                changeUiToPauseShow();
                cancelDismissControlViewTimer();
                break;
            case CURRENT_STATE_ERROR:
                changeUiToError();
                break;
            case CURRENT_STATE_AUTO_COMPLETE:
                changeUiToCompleteShow();
                cancelDismissControlViewTimer();
S
shuyu 已提交
210
                mBottomProgressBar.setProgress(100);
S
shuyu 已提交
211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231
                break;
            case CURRENT_STATE_PLAYING_BUFFERING_START:
                changeUiToPlayingBufferingShow();
                break;
        }
    }

    @Override
    public boolean onTouch(View v, MotionEvent event) {
        int id = v.getId();
        if (id == R.id.surface_container) {
            switch (event.getAction()) {
                case MotionEvent.ACTION_DOWN:
                    break;
                case MotionEvent.ACTION_MOVE:
                    break;
                case MotionEvent.ACTION_UP:
                    startDismissControlViewTimer();
                    if (mChangePosition) {
                        int duration = getDuration();
                        int progress = mSeekTimePosition * 100 / (duration == 0 ? 1 : duration);
S
shuyu 已提交
232
                        mBottomProgressBar.setProgress(progress);
S
shuyu 已提交
233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248
                    }
                    if (!mChangePosition && !mChangeVolume && !mBrightness) {
                        onClickUiToggle();
                    }
                    break;
            }
        } else if (id == R.id.progress) {
            switch (event.getAction()) {
                case MotionEvent.ACTION_DOWN:
                    cancelDismissControlViewTimer();
                    break;
                case MotionEvent.ACTION_UP:
                    startDismissControlViewTimer();
                    break;
            }
        }
S
shuyu 已提交
249 250 251 252 253

        if (mIfCurrentIsFullscreen && mLockCurScreen && mNeedLockFull) {
            return true;
        }

S
shuyu 已提交
254 255 256 257 258 259 260 261
        return super.onTouch(v, event);
    }

    @Override
    public void onClick(View v) {
        super.onClick(v);
        int i = v.getId();
        if (i == R.id.thumb) {
S
1.3.0  
shuyu 已提交
262 263 264
            if (!mThumbPlay) {
                return;
            }
S
shuyu 已提交
265 266 267 268 269 270 271 272 273
            if (TextUtils.isEmpty(mUrl)) {
                Toast.makeText(getContext(), getResources().getString(R.string.no_url), Toast.LENGTH_SHORT).show();
                return;
            }
            if (mCurrentState == CURRENT_STATE_NORMAL) {
                if (!mUrl.startsWith("file") && !CommonUtil.isWifiConnected(getContext()) && !WIFI_TIP_DIALOG_SHOWED) {
                    showWifiDialog();
                    return;
                }
S
shuyu 已提交
274
                startPlayLogic();
S
shuyu 已提交
275 276 277 278
            } else if (mCurrentState == CURRENT_STATE_AUTO_COMPLETE) {
                onClickUiToggle();
            }
        } else if (i == R.id.surface_container) {
S
shuyu 已提交
279
            if (mStandardVideoAllCallBack != null && isCurrentMediaListener()) {
S
shuyu 已提交
280
                if (mIfCurrentIsFullscreen) {
S
1.1.9  
shuyu 已提交
281
                    Debuger.printfLog("onClickBlankFullscreen");
S
shuyu 已提交
282
                    mStandardVideoAllCallBack.onClickBlankFullscreen(mUrl, mObjects);
S
shuyu 已提交
283
                } else {
S
1.1.9  
shuyu 已提交
284
                    Debuger.printfLog("onClickBlank");
S
shuyu 已提交
285
                    mStandardVideoAllCallBack.onClickBlank(mUrl, mObjects);
S
shuyu 已提交
286 287 288 289 290 291 292 293 294
                }
            }
            startDismissControlViewTimer();
        }
    }

    @Override
    public void showWifiDialog() {
        super.showWifiDialog();
S
shuyu 已提交
295 296 297 298
        if (!NetworkUtils.isAvailable(mContext)) {
            Toast.makeText(mContext, getResources().getString(R.string.no_net), Toast.LENGTH_LONG).show();
            return;
        }
S
shuyu 已提交
299 300 301 302 303 304
        AlertDialog.Builder builder = new AlertDialog.Builder(getContext());
        builder.setMessage(getResources().getString(R.string.tips_not_wifi));
        builder.setPositiveButton(getResources().getString(R.string.tips_not_wifi_confirm), new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                dialog.dismiss();
S
shuyu 已提交
305
                startPlayLogic();
S
shuyu 已提交
306 307 308 309 310 311 312 313 314 315 316 317
                WIFI_TIP_DIALOG_SHOWED = true;
            }
        });
        builder.setNegativeButton(getResources().getString(R.string.tips_not_wifi_cancel), new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                dialog.dismiss();
            }
        });
        builder.create().show();
    }

S
shuyu 已提交
318 319

    @Override
S
shuyu 已提交
320
    public void startPlayLogic() {
S
shuyu 已提交
321
        if (mStandardVideoAllCallBack != null) {
S
1.1.9  
shuyu 已提交
322
            Debuger.printfLog("onClickStartThumb");
S
shuyu 已提交
323
            mStandardVideoAllCallBack.onClickStartThumb(mUrl, mObjects);
S
shuyu 已提交
324 325 326 327 328
        }
        prepareVideo();
        startDismissControlViewTimer();
    }

S
shuyu 已提交
329 330
    @Override
    protected void onClickUiToggle() {
S
shuyu 已提交
331 332 333 334
        if (mIfCurrentIsFullscreen && mLockCurScreen && mNeedLockFull) {
            mLockScreen.setVisibility(VISIBLE);
            return;
        }
S
shuyu 已提交
335
        if (mCurrentState == CURRENT_STATE_PREPAREING) {
S
shuyu 已提交
336
            if (mBottomContainer.getVisibility() == View.VISIBLE) {
S
shuyu 已提交
337 338 339 340 341
                changeUiToPrepareingClear();
            } else {
                changeUiToPrepareingShow();
            }
        } else if (mCurrentState == CURRENT_STATE_PLAYING) {
S
shuyu 已提交
342
            if (mBottomContainer.getVisibility() == View.VISIBLE) {
S
shuyu 已提交
343 344 345 346 347
                changeUiToPlayingClear();
            } else {
                changeUiToPlayingShow();
            }
        } else if (mCurrentState == CURRENT_STATE_PAUSE) {
S
shuyu 已提交
348
            if (mBottomContainer.getVisibility() == View.VISIBLE) {
S
shuyu 已提交
349 350 351 352 353
                changeUiToPauseClear();
            } else {
                changeUiToPauseShow();
            }
        } else if (mCurrentState == CURRENT_STATE_AUTO_COMPLETE) {
S
shuyu 已提交
354
            if (mBottomContainer.getVisibility() == View.VISIBLE) {
S
shuyu 已提交
355 356 357 358 359
                changeUiToCompleteClear();
            } else {
                changeUiToCompleteShow();
            }
        } else if (mCurrentState == CURRENT_STATE_PLAYING_BUFFERING_START) {
S
shuyu 已提交
360
            if (mBottomContainer.getVisibility() == View.VISIBLE) {
S
shuyu 已提交
361 362 363 364 365 366 367 368 369 370
                changeUiToPlayingBufferingClear();
            } else {
                changeUiToPlayingBufferingShow();
            }
        }
    }

    @Override
    protected void setProgressAndTime(int progress, int secProgress, int currentTime, int totalTime) {
        super.setProgressAndTime(progress, secProgress, currentTime, totalTime);
S
shuyu 已提交
371
        if (progress != 0) mBottomProgressBar.setProgress(progress);
372
        if (secProgress != 0 && !mCacheFile) mBottomProgressBar.setSecondaryProgress(secProgress);
S
shuyu 已提交
373 374 375 376 377
    }

    @Override
    protected void resetProgressAndTime() {
        super.resetProgressAndTime();
S
shuyu 已提交
378 379
        mBottomProgressBar.setProgress(0);
        mBottomProgressBar.setSecondaryProgress(0);
S
shuyu 已提交
380 381 382 383
    }

    //Unified management Ui
    private void changeUiToNormal() {
S
1.3.5  
shuyu 已提交
384
        Debuger.printfLog("changeUiToNormal");
S
shuyu 已提交
385 386 387 388
        mTopContainer.setVisibility(View.VISIBLE);
        mBottomContainer.setVisibility(View.INVISIBLE);
        mStartButton.setVisibility(View.VISIBLE);
        mLoadingProgressBar.setVisibility(View.INVISIBLE);
S
shuyu 已提交
389
        mLoadingProgressBar.reset();
S
shuyu 已提交
390 391 392
        mThumbImageViewLayout.setVisibility(View.VISIBLE);
        mCoverImageView.setVisibility(View.VISIBLE);
        mBottomProgressBar.setVisibility(View.INVISIBLE);
S
shuyu 已提交
393
        mLockScreen.setVisibility((mIfCurrentIsFullscreen && mNeedLockFull) ? VISIBLE : GONE);
S
shuyu 已提交
394 395 396 397
        updateStartImage();
    }

    private void changeUiToPrepareingShow() {
S
1.3.5  
shuyu 已提交
398
        Debuger.printfLog("changeUiToPrepareingShow");
S
shuyu 已提交
399 400 401 402
        mTopContainer.setVisibility(View.VISIBLE);
        mBottomContainer.setVisibility(View.VISIBLE);
        mStartButton.setVisibility(View.INVISIBLE);
        mLoadingProgressBar.setVisibility(View.VISIBLE);
S
shuyu 已提交
403
        mLoadingProgressBar.start();
S
shuyu 已提交
404 405 406
        mThumbImageViewLayout.setVisibility(View.INVISIBLE);
        mCoverImageView.setVisibility(View.VISIBLE);
        mBottomProgressBar.setVisibility(View.INVISIBLE);
S
shuyu 已提交
407
        mLockScreen.setVisibility(GONE);
S
shuyu 已提交
408 409 410
    }

    private void changeUiToPrepareingClear() {
S
1.3.5  
shuyu 已提交
411
        Debuger.printfLog("changeUiToPrepareingClear");
S
shuyu 已提交
412 413 414 415 416 417
        mTopContainer.setVisibility(View.INVISIBLE);
        mBottomContainer.setVisibility(View.INVISIBLE);
        mStartButton.setVisibility(View.INVISIBLE);
        mThumbImageViewLayout.setVisibility(View.INVISIBLE);
        mBottomProgressBar.setVisibility(View.INVISIBLE);
        mCoverImageView.setVisibility(View.VISIBLE);
S
shuyu 已提交
418
        mLockScreen.setVisibility(GONE);
S
shuyu 已提交
419 420 421
    }

    private void changeUiToPlayingShow() {
S
1.3.5  
shuyu 已提交
422
        Debuger.printfLog("changeUiToPlayingShow");
S
shuyu 已提交
423 424 425 426
        mTopContainer.setVisibility(View.VISIBLE);
        mBottomContainer.setVisibility(View.VISIBLE);
        mStartButton.setVisibility(View.VISIBLE);
        mLoadingProgressBar.setVisibility(View.INVISIBLE);
S
shuyu 已提交
427
        mLoadingProgressBar.reset();
S
shuyu 已提交
428 429 430
        mThumbImageViewLayout.setVisibility(View.INVISIBLE);
        mCoverImageView.setVisibility(View.INVISIBLE);
        mBottomProgressBar.setVisibility(View.INVISIBLE);
S
shuyu 已提交
431
        mLockScreen.setVisibility((mIfCurrentIsFullscreen && mNeedLockFull)  ? VISIBLE : GONE);
S
shuyu 已提交
432 433 434 435
        updateStartImage();
    }

    private void changeUiToPlayingClear() {
S
1.3.5  
shuyu 已提交
436
        Debuger.printfLog("changeUiToPlayingClear");
S
shuyu 已提交
437
        changeUiToClear();
S
shuyu 已提交
438
        mBottomProgressBar.setVisibility(View.VISIBLE);
S
shuyu 已提交
439 440 441
    }

    private void changeUiToPauseShow() {
S
1.3.5  
shuyu 已提交
442
        Debuger.printfLog("changeUiToPauseShow");
S
shuyu 已提交
443 444 445 446
        mTopContainer.setVisibility(View.VISIBLE);
        mBottomContainer.setVisibility(View.VISIBLE);
        mStartButton.setVisibility(View.VISIBLE);
        mLoadingProgressBar.setVisibility(View.INVISIBLE);
S
shuyu 已提交
447
        mLoadingProgressBar.reset();
S
shuyu 已提交
448
        mThumbImageViewLayout.setVisibility(View.INVISIBLE);
449
        //mCoverImageView.setVisibility(View.INVISIBLE);
S
shuyu 已提交
450
        mBottomProgressBar.setVisibility(View.INVISIBLE);
S
shuyu 已提交
451
        mLockScreen.setVisibility((mIfCurrentIsFullscreen && mNeedLockFull)  ? VISIBLE : GONE);
S
shuyu 已提交
452
        updateStartImage();
453
        updatePauseCover();
S
shuyu 已提交
454 455 456
    }

    private void changeUiToPauseClear() {
S
1.3.5  
shuyu 已提交
457
        Debuger.printfLog("changeUiToPauseClear");
S
shuyu 已提交
458
        changeUiToClear();
S
shuyu 已提交
459
        mBottomProgressBar.setVisibility(View.VISIBLE);
460
        updatePauseCover();
S
shuyu 已提交
461 462 463
    }

    private void changeUiToPlayingBufferingShow() {
S
1.3.5  
shuyu 已提交
464
        Debuger.printfLog("changeUiToPlayingBufferingShow");
S
shuyu 已提交
465 466 467 468
        mTopContainer.setVisibility(View.VISIBLE);
        mBottomContainer.setVisibility(View.VISIBLE);
        mStartButton.setVisibility(View.INVISIBLE);
        mLoadingProgressBar.setVisibility(View.VISIBLE);
S
shuyu 已提交
469
        mLoadingProgressBar.start();
S
shuyu 已提交
470 471 472
        mThumbImageViewLayout.setVisibility(View.INVISIBLE);
        mCoverImageView.setVisibility(View.INVISIBLE);
        mBottomProgressBar.setVisibility(View.INVISIBLE);
S
shuyu 已提交
473
        mLockScreen.setVisibility(GONE);
S
shuyu 已提交
474 475 476
    }

    private void changeUiToPlayingBufferingClear() {
S
1.3.5  
shuyu 已提交
477
        Debuger.printfLog("changeUiToPlayingBufferingClear");
S
shuyu 已提交
478 479 480 481
        mTopContainer.setVisibility(View.INVISIBLE);
        mBottomContainer.setVisibility(View.INVISIBLE);
        mStartButton.setVisibility(View.INVISIBLE);
        mLoadingProgressBar.setVisibility(View.VISIBLE);
S
shuyu 已提交
482
        mLoadingProgressBar.start();
S
shuyu 已提交
483 484 485
        mThumbImageViewLayout.setVisibility(View.INVISIBLE);
        mCoverImageView.setVisibility(View.INVISIBLE);
        mBottomProgressBar.setVisibility(View.VISIBLE);
S
shuyu 已提交
486
        mLockScreen.setVisibility(GONE);
S
shuyu 已提交
487 488 489 490
        updateStartImage();
    }

    private void changeUiToClear() {
S
1.3.5  
shuyu 已提交
491
        Debuger.printfLog("changeUiToClear");
S
shuyu 已提交
492 493 494 495
        mTopContainer.setVisibility(View.INVISIBLE);
        mBottomContainer.setVisibility(View.INVISIBLE);
        mStartButton.setVisibility(View.INVISIBLE);
        mLoadingProgressBar.setVisibility(View.INVISIBLE);
S
shuyu 已提交
496
        mLoadingProgressBar.reset();
S
shuyu 已提交
497 498 499
        mThumbImageViewLayout.setVisibility(View.INVISIBLE);
        mCoverImageView.setVisibility(View.INVISIBLE);
        mBottomProgressBar.setVisibility(View.INVISIBLE);
S
shuyu 已提交
500
        mLockScreen.setVisibility(GONE);
S
shuyu 已提交
501 502 503
    }

    private void changeUiToCompleteShow() {
S
1.3.5  
shuyu 已提交
504
        Debuger.printfLog("changeUiToCompleteShow");
S
shuyu 已提交
505 506 507 508
        mTopContainer.setVisibility(View.VISIBLE);
        mBottomContainer.setVisibility(View.VISIBLE);
        mStartButton.setVisibility(View.VISIBLE);
        mLoadingProgressBar.setVisibility(View.INVISIBLE);
S
shuyu 已提交
509
        mLoadingProgressBar.reset();
S
shuyu 已提交
510 511 512
        mThumbImageViewLayout.setVisibility(View.VISIBLE);
        mCoverImageView.setVisibility(View.INVISIBLE);
        mBottomProgressBar.setVisibility(View.INVISIBLE);
S
shuyu 已提交
513
        mLockScreen.setVisibility((mIfCurrentIsFullscreen && mNeedLockFull)  ? VISIBLE : GONE);
S
shuyu 已提交
514 515 516 517
        updateStartImage();
    }

    private void changeUiToCompleteClear() {
S
1.3.5  
shuyu 已提交
518
        Debuger.printfLog("changeUiToCompleteClear");
S
shuyu 已提交
519 520 521 522
        mTopContainer.setVisibility(View.INVISIBLE);
        mBottomContainer.setVisibility(View.INVISIBLE);
        mStartButton.setVisibility(View.VISIBLE);
        mLoadingProgressBar.setVisibility(View.INVISIBLE);
S
shuyu 已提交
523
        mLoadingProgressBar.reset();
S
shuyu 已提交
524 525 526
        mThumbImageViewLayout.setVisibility(View.VISIBLE);
        mCoverImageView.setVisibility(View.INVISIBLE);
        mBottomProgressBar.setVisibility(View.VISIBLE);
S
shuyu 已提交
527
        mLockScreen.setVisibility((mIfCurrentIsFullscreen && mNeedLockFull)  ? VISIBLE : GONE);
S
shuyu 已提交
528 529 530 531
        updateStartImage();
    }

    private void changeUiToError() {
S
1.3.5  
shuyu 已提交
532
        Debuger.printfLog("changeUiToError");
S
shuyu 已提交
533 534 535 536
        mTopContainer.setVisibility(View.INVISIBLE);
        mBottomContainer.setVisibility(View.INVISIBLE);
        mStartButton.setVisibility(View.VISIBLE);
        mLoadingProgressBar.setVisibility(View.INVISIBLE);
S
shuyu 已提交
537
        mLoadingProgressBar.reset();
S
shuyu 已提交
538 539 540
        mThumbImageViewLayout.setVisibility(View.INVISIBLE);
        mCoverImageView.setVisibility(View.VISIBLE);
        mBottomProgressBar.setVisibility(View.INVISIBLE);
S
shuyu 已提交
541
        mLockScreen.setVisibility((mIfCurrentIsFullscreen && mNeedLockFull)  ? VISIBLE : GONE);
S
shuyu 已提交
542 543 544 545
        updateStartImage();
    }

    private void updateStartImage() {
S
shuyu 已提交
546 547
        ENPlayView enPlayView = (ENPlayView) mStartButton;
        enPlayView.setDuration(500);
S
shuyu 已提交
548
        if (mCurrentState == CURRENT_STATE_PLAYING) {
S
shuyu 已提交
549 550
            enPlayView.play();
            //mStartButton.setImageResource(R.drawable.video_click_pause_selector);
S
shuyu 已提交
551
        } else if (mCurrentState == CURRENT_STATE_ERROR) {
S
shuyu 已提交
552 553
            enPlayView.pause();
            //mStartButton.setImageResource(R.drawable.video_click_error_selector);
S
shuyu 已提交
554
        } else {
S
shuyu 已提交
555 556
            enPlayView.pause();
            //mStartButton.setImageResource(R.drawable.video_click_play_selector);
S
shuyu 已提交
557 558 559
        }
    }

560 561 562 563 564 565 566 567 568

    private void updatePauseCover() {
        if (mFullPauseBitmap == null || mFullPauseBitmap.isRecycled()) {
            Point point = CommonUtil.getPauseBitmapSize(getWidth(), getHeight());
            mFullPauseBitmap = mTextureView.getBitmap(point.x, point.y);
        }
        showPauseCover();
    }

S
shuyu 已提交
569 570 571 572 573 574
    @Override
    protected void showProgressDialog(float deltaX, String seekTime, int seekTimePosition, String totalTime, int totalTimeDuration) {
        super.showProgressDialog(deltaX, seekTime, seekTimePosition, totalTime, totalTimeDuration);
        if (mProgressDialog == null) {
            View localView = LayoutInflater.from(getContext()).inflate(R.layout.video_progress_dialog, null);
            mDialogProgressBar = ((ProgressBar) localView.findViewById(R.id.duration_progressbar));
S
1.1.8  
shuyu 已提交
575 576 577
            if (mDialogProgressBarDrawable != null) {
                mDialogProgressBar.setProgressDrawable(mDialogProgressBarDrawable);
            }
S
shuyu 已提交
578 579 580 581 582 583 584 585
            mDialogSeekTime = ((TextView) localView.findViewById(R.id.tv_current));
            mDialogTotalTime = ((TextView) localView.findViewById(R.id.tv_duration));
            mDialogIcon = ((ImageView) localView.findViewById(R.id.duration_image_tip));
            mProgressDialog = new Dialog(getContext(), R.style.video_style_dialog_progress);
            mProgressDialog.setContentView(localView);
            mProgressDialog.getWindow().addFlags(Window.FEATURE_ACTION_BAR);
            mProgressDialog.getWindow().addFlags(32);
            mProgressDialog.getWindow().addFlags(16);
586
            mProgressDialog.getWindow().setLayout(getWidth(), getHeight());
S
1.2.6  
shuyu 已提交
587
            if (mDialogProgressNormalColor != -11) {
S
1.1.8  
shuyu 已提交
588 589 590 591 592
                mDialogTotalTime.setTextColor(mDialogProgressNormalColor);
            }
            if (mDialogProgressHighLightColor != -11) {
                mDialogSeekTime.setTextColor(mDialogProgressHighLightColor);
            }
S
shuyu 已提交
593
            WindowManager.LayoutParams localLayoutParams = mProgressDialog.getWindow().getAttributes();
594 595 596
            localLayoutParams.gravity = Gravity.TOP;
            localLayoutParams.width = getWidth();
            localLayoutParams.height = getHeight();
597 598 599 600
            int location[] = new int[2];
            getLocationOnScreen(location);
            localLayoutParams.x = location[0];
            localLayoutParams.y = location[1];
S
shuyu 已提交
601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631
            mProgressDialog.getWindow().setAttributes(localLayoutParams);
        }
        if (!mProgressDialog.isShowing()) {
            mProgressDialog.show();
        }

        mDialogSeekTime.setText(seekTime);
        mDialogTotalTime.setText(" / " + totalTime);
        mDialogProgressBar.setProgress(seekTimePosition * 100 / totalTimeDuration);
        if (deltaX > 0) {
            mDialogIcon.setBackgroundResource(R.drawable.video_forward_icon);
        } else {
            mDialogIcon.setBackgroundResource(R.drawable.video_backward_icon);
        }

    }

    @Override
    protected void dismissProgressDialog() {
        super.dismissProgressDialog();
        if (mProgressDialog != null) {
            mProgressDialog.dismiss();
        }
    }

    @Override
    protected void showVolumeDialog(float deltaY, int volumePercent) {
        super.showVolumeDialog(deltaY, volumePercent);
        if (mVolumeDialog == null) {
            View localView = LayoutInflater.from(getContext()).inflate(R.layout.video_volume_dialog, null);
            mDialogVolumeProgressBar = ((ProgressBar) localView.findViewById(R.id.volume_progressbar));
S
1.1.8  
shuyu 已提交
632 633 634
            if (mVolumeProgressDrawable != null) {
                mDialogVolumeProgressBar.setProgressDrawable(mVolumeProgressDrawable);
            }
S
shuyu 已提交
635 636 637 638 639 640 641
            mVolumeDialog = new Dialog(getContext(), R.style.video_style_dialog_progress);
            mVolumeDialog.setContentView(localView);
            mVolumeDialog.getWindow().addFlags(8);
            mVolumeDialog.getWindow().addFlags(32);
            mVolumeDialog.getWindow().addFlags(16);
            mVolumeDialog.getWindow().setLayout(-2, -2);
            WindowManager.LayoutParams localLayoutParams = mVolumeDialog.getWindow().getAttributes();
642 643 644
            localLayoutParams.gravity = Gravity.TOP | Gravity.LEFT;
            localLayoutParams.width = getWidth();
            localLayoutParams.height = getHeight();
645 646 647 648
            int location[] = new int[2];
            getLocationOnScreen(location);
            localLayoutParams.x = location[0];
            localLayoutParams.y = location[1];
S
shuyu 已提交
649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677
            mVolumeDialog.getWindow().setAttributes(localLayoutParams);
        }
        if (!mVolumeDialog.isShowing()) {
            mVolumeDialog.show();
        }

        mDialogVolumeProgressBar.setProgress(volumePercent);
    }

    @Override
    protected void dismissVolumeDialog() {
        super.dismissVolumeDialog();
        if (mVolumeDialog != null) {
            mVolumeDialog.dismiss();
        }
    }

    @Override
    protected void showBrightnessDialog(float percent) {
        if (mBrightnessDialog == null) {
            View localView = LayoutInflater.from(getContext()).inflate(R.layout.video_brightness, null);
            mBrightnessDialogTv = (TextView) localView.findViewById(R.id.app_video_brightness);
            mBrightnessDialog = new Dialog(getContext(), R.style.video_style_dialog_progress);
            mBrightnessDialog.setContentView(localView);
            mBrightnessDialog.getWindow().addFlags(8);
            mBrightnessDialog.getWindow().addFlags(32);
            mBrightnessDialog.getWindow().addFlags(16);
            mBrightnessDialog.getWindow().setLayout(-2, -2);
            WindowManager.LayoutParams localLayoutParams = mBrightnessDialog.getWindow().getAttributes();
678 679 680
            localLayoutParams.gravity = Gravity.TOP | Gravity.RIGHT;
            localLayoutParams.width = getWidth();
            localLayoutParams.height = getHeight();
681 682 683 684
            int location[] = new int[2];
            getLocationOnScreen(location);
            localLayoutParams.x = location[0];
            localLayoutParams.y = location[1];
S
shuyu 已提交
685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701
            mBrightnessDialog.getWindow().setAttributes(localLayoutParams);
        }
        if (!mBrightnessDialog.isShowing()) {
            mBrightnessDialog.show();
        }
        if (mBrightnessDialogTv != null)
            mBrightnessDialogTv.setText((int) (percent * 100) + "%");
    }

    @Override
    protected void dismissBrightnessDialog() {
        super.dismissVolumeDialog();
        if (mBrightnessDialog != null) {
            mBrightnessDialog.dismiss();
        }
    }

S
1.2.6  
shuyu 已提交
702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720
    @Override
    protected void loopSetProgressAndTime() {
        super.loopSetProgressAndTime();
        mBottomProgressBar.setProgress(0);
    }


    @Override
    public void onBackFullscreen() {
        clearFullscreenLayout();
    }


    @Override
    public GSYBaseVideoPlayer startWindowFullscreen(Context context, boolean actionBar, boolean statusBar) {
        GSYBaseVideoPlayer gsyBaseVideoPlayer = super.startWindowFullscreen(context, actionBar, statusBar);
        if (gsyBaseVideoPlayer != null) {
            StandardGSYVideoPlayer gsyVideoPlayer = (StandardGSYVideoPlayer) gsyBaseVideoPlayer;
            gsyVideoPlayer.setStandardVideoAllCallBack(mStandardVideoAllCallBack);
S
shuyu 已提交
721
            gsyVideoPlayer.setNeedLockFull(isNeedLockFull());
S
1.2.6  
shuyu 已提交
722 723 724 725 726 727 728 729 730 731 732 733 734 735
        }
        return gsyBaseVideoPlayer;
    }


    @Override
    public GSYBaseVideoPlayer showSmallVideo(Point size, boolean actionBar, boolean statusBar) {
        GSYBaseVideoPlayer gsyBaseVideoPlayer = super.showSmallVideo(size, actionBar, statusBar);
        if (gsyBaseVideoPlayer != null) {
            StandardGSYVideoPlayer gsyVideoPlayer = (StandardGSYVideoPlayer) gsyBaseVideoPlayer;
            gsyVideoPlayer.setStandardVideoAllCallBack(mStandardVideoAllCallBack);
        }
        return gsyBaseVideoPlayer;
    }
S
shuyu 已提交
736

S
1.3.0  
shuyu 已提交
737 738 739 740 741 742 743
    /**
     * 初始化为正常状态
     */
    public void initUIState() {
        setStateAndUi(CURRENT_STATE_NORMAL);
    }

S
shuyu 已提交
744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771
    private void startDismissControlViewTimer() {
        cancelDismissControlViewTimer();
        DISSMISS_CONTROL_VIEW_TIMER = new Timer();
        mDismissControlViewTimerTask = new DismissControlViewTimerTask();
        DISSMISS_CONTROL_VIEW_TIMER.schedule(mDismissControlViewTimerTask, 2500);
    }

    private void cancelDismissControlViewTimer() {
        if (DISSMISS_CONTROL_VIEW_TIMER != null) {
            DISSMISS_CONTROL_VIEW_TIMER.cancel();
        }
        if (mDismissControlViewTimerTask != null) {
            mDismissControlViewTimerTask.cancel();
        }

    }

    protected class DismissControlViewTimerTask extends TimerTask {

        @Override
        public void run() {
            if (mCurrentState != CURRENT_STATE_NORMAL
                    && mCurrentState != CURRENT_STATE_ERROR
                    && mCurrentState != CURRENT_STATE_AUTO_COMPLETE) {
                if (getContext() != null && getContext() instanceof Activity) {
                    ((Activity) getContext()).runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
S
shuyu 已提交
772 773
                            hideAllWidget();
                            mLockScreen.setVisibility(GONE);
S
shuyu 已提交
774 775 776 777 778 779
                        }
                    });
                }
            }
        }
    }
S
shuyu 已提交
780

S
shuyu 已提交
781 782 783 784 785 786 787
    private void hideAllWidget() {
        mBottomContainer.setVisibility(View.INVISIBLE);
        mTopContainer.setVisibility(View.INVISIBLE);
        mBottomProgressBar.setVisibility(View.VISIBLE);
        mStartButton.setVisibility(View.INVISIBLE);
    }

S
shuyu 已提交
788
    private void resolveThumbImage(View thumb) {
S
shuyu 已提交
789
        mThumbImageViewLayout.addView(thumb);
S
shuyu 已提交
790 791 792 793 794 795 796 797 798 799
        ViewGroup.LayoutParams layoutParams = thumb.getLayoutParams();
        layoutParams.height = ViewGroup.LayoutParams.MATCH_PARENT;
        layoutParams.width = ViewGroup.LayoutParams.MATCH_PARENT;
        thumb.setLayoutParams(layoutParams);
    }

    /***
     * 设置封面
     */
    public void setThumbImageView(View view) {
S
shuyu 已提交
800 801
        if (mThumbImageViewLayout != null) {
            mThumbImageView = view;
S
shuyu 已提交
802 803 804 805 806 807 808 809
            resolveThumbImage(view);
        }
    }

    /***
     * 清除封面
     */
    public void clearThumbImageView() {
S
shuyu 已提交
810 811
        if (mThumbImageViewLayout != null) {
            mThumbImageViewLayout.removeAllViews();
S
shuyu 已提交
812 813 814
        }
    }

S
shuyu 已提交
815 816 817
    /**
     * 回去title
     */
S
shuyu 已提交
818
    public TextView getTitleTextView() {
S
shuyu 已提交
819
        return mTitleTextView;
S
shuyu 已提交
820 821
    }

S
shuyu 已提交
822

S
1.1.8  
shuyu 已提交
823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867
    /**
     * 底部进度条-弹出的
     */
    public void setBottomShowProgressBarDrawable(Drawable drawable, Drawable thumb) {
        mBottomShowProgressDrawable = drawable;
        mBottomShowProgressThumbDrawable = thumb;
        if (mProgressBar != null) {
            mProgressBar.setProgressDrawable(drawable);
            mProgressBar.setThumb(thumb);
        }
    }

    /**
     * 底部进度条-非弹出
     */
    public void setBottomProgressBarDrawable(Drawable drawable) {
        mBottomProgressDrawable = drawable;
        if (mBottomProgressBar != null) {
            mBottomProgressBar.setProgressDrawable(drawable);
        }
    }

    /**
     * 声音进度条
     */
    public void setDialogVolumeProgressBar(Drawable drawable) {
        mVolumeProgressDrawable = drawable;
    }


    /**
     * 中间进度条
     */
    public void setDialogProgressBar(Drawable drawable) {
        mDialogProgressBarDrawable = drawable;
    }

    /**
     * 中间进度条字体颜色
     */
    public void setDialogProgressColor(int highLightColor, int normalColor) {
        mDialogProgressHighLightColor = highLightColor;
        mDialogProgressNormalColor = normalColor;
    }

S
1.3.0  
shuyu 已提交
868 869 870 871 872 873 874 875 876 877 878 879 880
    /**
     * 是否点击封面可以播放
     */
    public void setThumbPlay(boolean thumbPlay) {
        this.mThumbPlay = thumbPlay;
    }

    /**
     * 封面布局
     */
    public RelativeLayout getThumbImageViewLayout() {
        return mThumbImageViewLayout;
    }
S
shuyu 已提交
881

S
shuyu 已提交
882 883 884 885 886 887 888 889 890 891 892 893 894

    public boolean isNeedLockFull() {
        return mNeedLockFull;
    }

    /**
     * 是否需要全屏锁定屏幕功能
     */
    public void setNeedLockFull(boolean needLoadFull) {
        this.mNeedLockFull = needLoadFull;
    }


S
shuyu 已提交
895
}