content: package com.xiaochao.lcrapiddeveloplibrary.Video;
  
  import android.app.Activity;
  import android.app.AlertDialog;
  import android.app.Dialog;
  import android.content.Context;
  import android.content.DialogInterface;
  import android.text.TextUtils;
  import android.util.AttributeSet;
  import android.view.LayoutInflater;
  import android.view.MotionEvent;
  import android.view.View;
  import android.view.Window;
  import android.view.WindowManager;
  import android.widget.ImageView;
  import android.widget.ProgressBar;
  import android.widget.TextView;
  import android.widget.Toast;
  
  import com.xiaochao.lcrapiddeveloplibrary.R;
  
  import java.util.Timer;
  import java.util.TimerTask;
  
  /**
   * Created by Nathen
   * On 2016/04/18 16:15
   */
  public class JCVideoPlayerStandard extends JCVideoPlayer {
  
      public ImageView backButton;
      public ProgressBar bottomProgressBar, loadingProgressBar;
      public TextView titleTextView;
      public ImageView thumbImageView;
      public ImageView coverImageView;
  
      protected static Timer DISSMISS_CONTROL_VIEW_TIMER;
      protected DismissControlViewTimerTask mDismissControlViewTimerTask;
  
      protected static JCBuriedPointStandard JC_BURIED_POINT_STANDARD;
  
      public JCVideoPlayerStandard(Context context) {
          super(context);
      }
  
      public JCVideoPlayerStandard(Context context, AttributeSet attrs) {
          super(context, attrs);
      }
  
      @Override
      protected void init(Context context) {
          super.init(context);
          bottomProgressBar = (ProgressBar) findViewById(R.id.bottom_progressbar);
          titleTextView = (TextView) findViewById(R.id.title);
          backButton = (ImageView) findViewById(R.id.back);
          thumbImageView = (ImageView) findViewById(R.id.thumb);
          coverImageView = (ImageView) findViewById(R.id.cover);
          loadingProgressBar = (ProgressBar) findViewById(R.id.loading);
  
          thumbImageView.setOnClickListener(this);
          backButton.setOnClickListener(this);
  
      }
  
      @Override
      public boolean setUp(String url, Object... objects) {
          if (objects.length == 0) return false;
          if (super.setUp(url, objects)) {
              titleTextView.setText(objects[0].toString());
              if (mIfCurrentIsFullscreen) {
                  fullscreenButton.setImageResource(R.drawable.jc_shrink);
              } else {
                  fullscreenButton.setImageResource(R.drawable.jc_enlarge);
                  backButton.setVisibility(View.GONE);
              }
              return true;
          }
          return false;
      }
  
      @Override
      public int getLayoutId() {
          return R.layout.jc_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();
                  bottomProgressBar.setProgress(100);
                  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);
                          bottomProgressBar.setProgress(progress);
                      }
                      if (!mChangePosition && !mChangeVolume) {
                          onClickUiToggle();
                      }
                      break;
              }
          } else if (id == R.id.progress) {
              switch (event.getAction()) {
                  case MotionEvent.ACTION_DOWN:
                      cancelDismissControlViewTimer();
                      break;
                  case MotionEvent.ACTION_UP:
                      startDismissControlViewTimer();
                      break;
              }
          }
          return super.onTouch(v, event);
      }
  
      @Override
      public void onClick(View v) {
          super.onClick(v);
          int i = v.getId();
          if (i == R.id.thumb) {
              if (TextUtils.isEmpty(mUrl)) {
                  Toast.makeText(getContext(), getResources().getString(R.string.no_url), Toast.LENGTH_SHORT).show();
                  return;
              }
              if (mCurrentState == CURRENT_STATE_NORMAL) {
                  if (!Utils.isWifiConnected(getContext()) && !WIFI_TIP_DIALOG_SHOWED) {
                      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();
                              startPlayLocic();
                              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();
                      return;
                  }
                  startPlayLocic();
              } else if (mCurrentState == CURRENT_STATE_AUTO_COMPLETE) {
                  onClickUiToggle();
              }
          } else if (i == R.id.surface_container) {
              if (JC_BURIED_POINT_STANDARD != null && JCMediaManager.instance().listener == this) {
                  if (mIfCurrentIsFullscreen) {
                      JC_BURIED_POINT_STANDARD.onClickBlankFullscreen(mUrl, mObjects);
                  } else {
                      JC_BURIED_POINT_STANDARD.onClickBlank(mUrl, mObjects);
                  }
              }
              startDismissControlViewTimer();
          } else if (i == R.id.back) {
              backFullscreen();
          }
      }
  
      private void startPlayLocic() {
          if (JC_BURIED_POINT_STANDARD != null) {
              JC_BURIED_POINT_STANDARD.onClickStartThumb(mUrl, mObjects);
          }
          prepareVideo();
          startDismissControlViewTimer();
      }
  
      private void onClickUiToggle() {
          if (mCurrentState == CURRENT_STATE_PREPAREING) {
              if (bottomContainer.getVisibility() == View.VISIBLE) {
                  changeUiToPrepareingClear();
              } else {
                  changeUiToPrepareingShow();
              }
          } else if (mCurrentState == CURRENT_STATE_PLAYING) {
              if (bottomContainer.getVisibility() == View.VISIBLE) {
                  changeUiToPlayingClear();
              } else {
                  changeUiToPlayingShow();
              }
          } else if (mCurrentState == CURRENT_STATE_PAUSE) {
              if (bottomContainer.getVisibility() == View.VISIBLE) {
                  changeUiToPauseClear();
              } else {
                  changeUiToPauseShow();
              }
          } else if (mCurrentState == CURRENT_STATE_AUTO_COMPLETE) {
              if (bottomContainer.getVisibility() == View.VISIBLE) {
                  changeUiToCompleteClear();
              } else {
                  changeUiToCompleteShow();
              }
          } else if (mCurrentState == CURRENT_STATE_PLAYING_BUFFERING_START) {
              if (bottomContainer.getVisibility() == View.VISIBLE) {
                  changeUiToPlayingBufferingClear();
              } else {
                  changeUiToPlayingBufferingShow();
              }
          }
      }
  
      @Override
      protected void setProgressAndTime(int progress, int secProgress, int currentTime, int totalTime) {
          super.setProgressAndTime(progress, secProgress, currentTime, totalTime);
          if (progress != 0) bottomProgressBar.setProgress(progress);
          if (secProgress != 0) bottomProgressBar.setSecondaryProgress(secProgress);
      }
  
      @Override
      protected void resetProgressAndTime() {
          super.resetProgressAndTime();
          bottomProgressBar.setProgress(0);
          bottomProgressBar.setSecondaryProgress(0);
      }
  
      //Unified management Ui
      private void changeUiToNormal() {
          topContainer.setVisibility(View.VISIBLE);
          bottomContainer.setVisibility(View.INVISIBLE);
          startButton.setVisibility(View.VISIBLE);
          loadingProgressBar.setVisibility(View.INVISIBLE);
          thumbImageView.setVisibility(View.VISIBLE);
          coverImageView.setVisibility(View.VISIBLE);
          bottomProgressBar.setVisibility(View.INVISIBLE);
          updateStartImage();
      }
  
      private void changeUiToPrepareingShow() {
          topContainer.setVisibility(View.VISIBLE);
          bottomContainer.setVisibility(View.VISIBLE);
          startButton.setVisibility(View.INVISIBLE);
          loadingProgressBar.setVisibility(View.VISIBLE);
          thumbImageView.setVisibility(View.INVISIBLE);
          coverImageView.setVisibility(View.VISIBLE);
          bottomProgressBar.setVisibility(View.INVISIBLE);
      }
  
      private void changeUiToPrepareingClear() {
          topContainer.setVisibility(View.INVISIBLE);
          bottomContainer.setVisibility(View.INVISIBLE);
          startButton.setVisibility(View.INVISIBLE);
          thumbImageView.setVisibility(View.INVISIBLE);
          bottomProgressBar.setVisibility(View.INVISIBLE);
          coverImageView.setVisibility(View.VISIBLE);
      }
  
      private void changeUiToPlayingShow() {
          topContainer.setVisibility(View.VISIBLE);
          bottomContainer.setVisibility(View.VISIBLE);
          startButton.setVisibility(View.VISIBLE);
          loadingProgressBar.setVisibility(View.INVISIBLE);
          thumbImageView.setVisibility(View.INVISIBLE);
          coverImageView.setVisibility(View.INVISIBLE);
          bottomProgressBar.setVisibility(View.INVISIBLE);
          updateStartImage();
      }
  
      private void changeUiToPlayingClear() {
          changeUiToClear();
          bottomProgressBar.setVisibility(View.VISIBLE);
      }
  
      private void changeUiToPauseShow() {
          topContainer.setVisibility(View.VISIBLE);
          bottomContainer.setVisibility(View.VISIBLE);
          startButton.setVisibility(View.VISIBLE);
          loadingProgressBar.setVisibility(View.INVISIBLE);
          thumbImageView.setVisibility(View.INVISIBLE);
          coverImageView.setVisibility(View.INVISIBLE);
          bottomProgressBar.setVisibility(View.INVISIBLE);
          updateStartImage();
      }
  
      private void changeUiToPauseClear() {
          changeUiToClear();
          bottomProgressBar.setVisibility(View.VISIBLE);
      }
  
      private void changeUiToPlayingBufferingShow() {
          topContainer.setVisibility(View.VISIBLE);
          bottomContainer.setVisibility(View.VISIBLE);
          startButton.setVisibility(View.INVISIBLE);
          loadingProgressBar.setVisibility(View.VISIBLE);
          thumbImageView.setVisibility(View.INVISIBLE);
          coverImageView.setVisibility(View.INVISIBLE);
          bottomProgressBar.setVisibility(View.INVISIBLE);
      }
  
      private void changeUiToPlayingBufferingClear() {
          topContainer.setVisibility(View.INVISIBLE);
          bottomContainer.setVisibility(View.INVISIBLE);
          startButton.setVisibility(View.INVISIBLE);
          loadingProgressBar.setVisibility(View.VISIBLE);
          thumbImageView.setVisibility(View.INVISIBLE);
          coverImageView.setVisibility(View.INVISIBLE);
          bottomProgressBar.setVisibility(View.VISIBLE);
          updateStartImage();
      }
  
      private void changeUiToClear() {
          topContainer.setVisibility(View.INVISIBLE);
          bottomContainer.setVisibility(View.INVISIBLE);
          startButton.setVisibility(View.INVISIBLE);
          loadingProgressBar.setVisibility(View.INVISIBLE);
          thumbImageView.setVisibility(View.INVISIBLE);
          coverImageView.setVisibility(View.INVISIBLE);
          bottomProgressBar.setVisibility(View.INVISIBLE);
      }
  
      private void changeUiToCompleteShow() {
          topContainer.setVisibility(View.VISIBLE);
          bottomContainer.setVisibility(View.VISIBLE);
          startButton.setVisibility(View.VISIBLE);
          loadingProgressBar.setVisibility(View.INVISIBLE);
          thumbImageView.setVisibility(View.VISIBLE);
          coverImageView.setVisibility(View.INVISIBLE);
          bottomProgressBar.setVisibility(View.INVISIBLE);
          updateStartImage();
      }
  
      private void changeUiToCompleteClear() {
          topContainer.setVisibility(View.INVISIBLE);
          bottomContainer.setVisibility(View.INVISIBLE);
          startButton.setVisibility(View.VISIBLE);
          loadingProgressBar.setVisibility(View.INVISIBLE);
          thumbImageView.setVisibility(View.VISIBLE);
          coverImageView.setVisibility(View.INVISIBLE);
          bottomProgressBar.setVisibility(View.VISIBLE);
          updateStartImage();
      }
  
      private void changeUiToError() {
          topContainer.setVisibility(View.INVISIBLE);
          bottomContainer.setVisibility(View.INVISIBLE);
          startButton.setVisibility(View.VISIBLE);
          loadingProgressBar.setVisibility(View.INVISIBLE);
          thumbImageView.setVisibility(View.INVISIBLE);
          coverImageView.setVisibility(View.VISIBLE);
          bottomProgressBar.setVisibility(View.INVISIBLE);
          updateStartImage();
      }
  
      private void updateStartImage() {
          if (mCurrentState == CURRENT_STATE_PLAYING) {
              startButton.setImageResource(R.drawable.jc_click_pause_selector);
          } else if (mCurrentState == CURRENT_STATE_ERROR) {
              startButton.setImageResource(R.drawable.jc_click_error_selector);
          } else {
              startButton.setImageResource(R.drawable.jc_click_play_selector);
          }
      }
  
      protected Dialog mProgressDialog;
      protected ProgressBar mDialogProgressBar;
      protected TextView mDialogSeekTime;
      protected TextView mDialogTotalTime;
      protected ImageView mDialogIcon;
  
      @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.jc_progress_dialog, null);
              mDialogProgressBar = ((ProgressBar) localView.findViewById(R.id.duration_progressbar));
              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.jc_style_dialog_progress);
              mProgressDialog.setContentView(localView);
              mProgressDialog.getWindow().addFlags(Window.FEATURE_ACTION_BAR);
              mProgressDialog.getWindow().addFlags(32);
              mProgressDialog.getWindow().addFlags(16);
              mProgressDialog.getWindow().setLayout(-2, -2);
              WindowManager.LayoutParams localLayoutParams = mProgressDialog.getWindow().getAttributes();
              localLayoutParams.gravity = 49;
              localLayoutParams.y = getResources().getDimensionPixelOffset(R.dimen.jc_progress_dialog_margin_top);
              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.jc_forward_icon);
          } else {
              mDialogIcon.setBackgroundResource(R.drawable.jc_backward_icon);
          }
  
      }
  
      @Override
      protected void dismissProgressDialog() {
          super.dismissProgressDialog();
          if (mProgressDialog != null) {
              mProgressDialog.dismiss();
          }
      }
  
  
      protected Dialog mVolumeDialog;
      protected ProgressBar mDialogVolumeProgressBar;
  
      @Override
      protected void showVolumDialog(float deltaY, int volumePercent) {
          super.showVolumDialog(deltaY, volumePercent);
          if (mVolumeDialog == null) {
              View localView = LayoutInflater.from(getContext()).inflate(R.layout.jc_volume_dialog, null);
              mDialogVolumeProgressBar = ((ProgressBar) localView.findViewById(R.id.volume_progressbar));
              mVolumeDialog = new Dialog(getContext(), R.style.jc_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();
              localLayoutParams.gravity = 19;
              localLayoutParams.x = getContext().getResources().getDimensionPixelOffset(R.dimen.jc_volume_dialog_margin_left);
              mVolumeDialog.getWindow().setAttributes(localLayoutParams);
          }
          if (!mVolumeDialog.isShowing()) {
              mVolumeDialog.show();
          }
  
          mDialogVolumeProgressBar.setProgress(volumePercent);
      }
  
      @Override
      protected void dismissVolumDialog() {
          super.dismissVolumDialog();
          if (mVolumeDialog != null) {
              mVolumeDialog.dismiss();
          }
      }
  
      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() {
                              bottomContainer.setVisibility(View.INVISIBLE);
                              topContainer.setVisibility(View.INVISIBLE);
                              bottomProgressBar.setVisibility(View.VISIBLE);
                              startButton.setVisibility(View.INVISIBLE);
                          }
                      });
                  }
              }
          }
      }
  
      public static void setJcBuriedPointStandard(JCBuriedPointStandard jcBuriedPointStandard) {
          JC_BURIED_POINT_STANDARD = jcBuriedPointStandard;
          JCVideoPlayer.setJcBuriedPoint(jcBuriedPointStandard);
      }
  
  }
  