|
@@ -0,0 +1,617 @@
|
|
|
|
+package com.hc.webapp.yst;
|
|
|
|
+
|
|
|
|
+import android.animation.PropertyValuesHolder;
|
|
|
|
+import android.animation.ValueAnimator;
|
|
|
|
+import android.app.AlertDialog;
|
|
|
|
+import android.content.Intent;
|
|
|
|
+import android.database.Cursor;
|
|
|
|
+import android.graphics.drawable.Drawable;
|
|
|
|
+import android.net.Uri;
|
|
|
|
+import android.os.Bundle;
|
|
|
|
+import android.os.Handler;
|
|
|
|
+import android.support.annotation.Nullable;
|
|
|
|
+import android.text.TextUtils;
|
|
|
|
+import android.util.Log;
|
|
|
|
+import android.util.TypedValue;
|
|
|
|
+import android.view.Gravity;
|
|
|
|
+import android.view.KeyEvent;
|
|
|
|
+import android.view.View;
|
|
|
|
+import android.view.ViewGroup;
|
|
|
|
+import android.view.animation.LinearInterpolator;
|
|
|
|
+import android.webkit.WebView;
|
|
|
|
+import android.widget.FrameLayout;
|
|
|
|
+import android.widget.ImageView;
|
|
|
|
+import android.widget.TextView;
|
|
|
|
+import android.widget.Toast;
|
|
|
|
+
|
|
|
|
+import com.hc.lib.http.GetRequest;
|
|
|
|
+import com.hc.lib.http.GetRequestListener;
|
|
|
|
+import com.hc.viewmodel.BaseViewModel;
|
|
|
|
+import com.hc.viewmodel.UserViewModel;
|
|
|
|
+import com.hc.webapp.BaseApp;
|
|
|
|
+import com.hc.webapp.BuildConfig;
|
|
|
|
+import com.hc.webapp.R;
|
|
|
|
+import com.hc.webapp.model.VideoInfo;
|
|
|
|
+import com.hc.webapp.store.LastPlayTimeStore;
|
|
|
|
+import com.hc.webapp.video.VideoControlDelegate;
|
|
|
|
+import com.hc.webapp.web.AndroidToJS;
|
|
|
|
+import com.hc.webapp.web.BaseWebActivity;
|
|
|
|
+import com.hc.webapp.web.HCWebViewClient;
|
|
|
|
+import com.jewel.lib.android.CompatUtil;
|
|
|
|
+import com.jewel.lib.android.HandlerUtil;
|
|
|
|
+import com.jewel.lib.android.SharedPre;
|
|
|
|
+import com.jewel.lib.android.live.SingleLiveEvent;
|
|
|
|
+import com.jewel.lib.java.StringUtil;
|
|
|
|
+import com.jewel.util.view.inject.ViewInjectFactory;
|
|
|
|
+import com.orhanobut.logger.Logger;
|
|
|
|
+
|
|
|
|
+import org.json.JSONArray;
|
|
|
|
+import org.json.JSONObject;
|
|
|
|
+
|
|
|
|
+public class MainActivity extends BaseWebActivity implements OttLoginUtil.OnOttListener,
|
|
|
|
+ AndroidToJS.PlayVideoListener, HCWebViewClient.WebViewErrorListener, AndroidToJS.ThirdActivityManager {
|
|
|
|
+
|
|
|
|
+ final String url = com.hc.model.BuildConfig.Domain + com.hc.model.BuildConfig.port + "/h5v2/index.html";
|
|
|
|
+ private static final String KEY_INTENT = "params";
|
|
|
|
+
|
|
|
|
+ private SingleLiveEvent<String> loginMsg = new SingleLiveEvent<>();
|
|
|
|
+// public static final String[] urls = {"http://9890.vod.myqcloud.com/9890_4e292f9a3dd011e6b4078980237cc3d3.f20.mp4",
|
|
|
|
+// "https://hnh5pic.oss-cn-shenzhen.aliyuncs.com/20180910_test.ts"};
|
|
|
|
+
|
|
|
|
+ private YSTVideoPlayer YSTVideoPlayer;
|
|
|
|
+ private VideoControlDelegate controlDelegate;
|
|
|
|
+ private UserViewModel userViewModel;
|
|
|
|
+ private View messageView;
|
|
|
|
+
|
|
|
|
+ private boolean isFinish = false;
|
|
|
|
+
|
|
|
|
+ private int floatVideoX = -1, floatVideoY = -1;
|
|
|
|
+ private int floatVideoWidth = -1, floatVideoHeight = -1;
|
|
|
|
+ private boolean isFullScreenVideo = false;
|
|
|
|
+ private boolean hadFloatVideo = false;
|
|
|
|
+
|
|
|
|
+ private String newUrl = null;
|
|
|
|
+
|
|
|
|
+ private int adCount = 5;
|
|
|
|
+
|
|
|
|
+ private VideoInfo lastVideoInfo;
|
|
|
|
+
|
|
|
|
+ String TAG ="MainActivity";
|
|
|
|
+
|
|
|
|
+ @Override
|
|
|
|
+ protected void onCreate(@Nullable Bundle savedInstanceState) {
|
|
|
|
+ super.onCreate(savedInstanceState);
|
|
|
|
+ observer();
|
|
|
|
+ Log.d("weilai","loadH5");
|
|
|
|
+ loadH5();
|
|
|
|
+
|
|
|
|
+ String adImage = LocalStore.getInstance().getOpenAdImage();
|
|
|
|
+ if (!TextUtils.isEmpty(adImage)) {
|
|
|
|
+ ImageView imageView = new ImageView(this);
|
|
|
|
+ imageView.setScaleType(ImageView.ScaleType.FIT_XY);
|
|
|
|
+ imageView.setImageDrawable(Drawable.createFromPath(adImage));
|
|
|
|
+ ViewGroup viewGroup = (ViewGroup) getWindow().getDecorView();
|
|
|
|
+ viewGroup.addView(imageView);
|
|
|
|
+
|
|
|
|
+ TextView textView = new TextView(this);
|
|
|
|
+ textView.setText(StringUtil.get(getApplicationContext(), R.string.ad_finish, adCount));
|
|
|
|
+ textView.setBackgroundResource(R.drawable.bg_ad_time);
|
|
|
|
+ textView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 20);
|
|
|
|
+ textView.setPadding(10, 10 ,10, 10);
|
|
|
|
+ textView.setTextColor(CompatUtil.getColor(getApplicationContext(), android.R.color.black));
|
|
|
|
+ FrameLayout.LayoutParams layoutParams = new FrameLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
|
|
|
|
+ layoutParams.gravity = Gravity.RIGHT;
|
|
|
|
+ layoutParams.topMargin = 20;
|
|
|
|
+ layoutParams.rightMargin = 20;
|
|
|
|
+ viewGroup.addView(textView, layoutParams);
|
|
|
|
+ HandlerUtil.runOnUiThreadDelay(new Runnable() {
|
|
|
|
+ @Override
|
|
|
|
+ public void run() {
|
|
|
|
+ if(adCount <= 0) {
|
|
|
|
+ imageView.setImageDrawable(null);
|
|
|
|
+ viewGroup.removeView(imageView);
|
|
|
|
+ viewGroup.removeView(textView);
|
|
|
|
+ OttLoginUtil.getInstance().reportAd();
|
|
|
|
+ } else {
|
|
|
|
+ adCount --;
|
|
|
|
+ textView.setText(StringUtil.get(getApplicationContext(), R.string.ad_finish, adCount));
|
|
|
|
+ HandlerUtil.runOnUiThreadDelay(this, 1000);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }, 1000);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ YSTVideoPlayer = new YSTVideoPlayer(MainActivity.this);
|
|
|
|
+ YSTVideoPlayer.setWebView(getWebView());
|
|
|
|
+ controlDelegate = new VideoControlDelegate(this, YSTVideoPlayer);
|
|
|
|
+ controlDelegate.setWebView(getWebView());
|
|
|
|
+ controlDelegate.subscribeData();
|
|
|
|
+ controlDelegate.getExitPlayingEvent().observe(this, aBoolean -> {
|
|
|
|
+ if (hadFloatVideo) {
|
|
|
|
+ YSTVideoPlayer.hideAllWidget();
|
|
|
|
+ changeVideo2Float();
|
|
|
|
+ } else {
|
|
|
|
+ destroyVideo();
|
|
|
|
+ }
|
|
|
|
+ });
|
|
|
|
+ YSTVideoPlayer.setOnPlayerPausedListener(controlDelegate);
|
|
|
|
+ getJsEvent().setVideoPlayer(YSTVideoPlayer);
|
|
|
|
+
|
|
|
|
+ ottLogin();
|
|
|
|
+
|
|
|
|
+ if (BuildConfig.isDebug) {
|
|
|
|
+ /*Logger.d("序列号(%s), STB(%s), MAC(%s)", getJsEvent().getSerialNum(),
|
|
|
|
+ getJsEvent().getSTBId(),
|
|
|
|
+ getJsEvent().getMac());
|
|
|
|
+ Logger.d("用户(%s), Token(%s)", getJsEvent().getUser(),
|
|
|
|
+ getJsEvent().getToken());*/
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ private void observer() {
|
|
|
|
+ userViewModel = BaseViewModel.obtainViewModel(this, UserViewModel.class);
|
|
|
|
+ // 第一次使用app
|
|
|
|
+ if (SharedPre.getBoolean("FirstUse", true)) {
|
|
|
|
+ SharedPre.putBoolean("FirstUse", false);
|
|
|
|
+ userViewModel.newUse(getJsEvent().getMac());
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ private void ottLogin() {
|
|
|
|
+ loginMsg.observe(this, result -> {
|
|
|
|
+ Log.e("OTT", "认证结果:" + result);
|
|
|
|
+ new AlertDialog.Builder(this)
|
|
|
|
+ .setTitle("ott认证失败")
|
|
|
|
+ .setMessage("" + result)
|
|
|
|
+ .setPositiveButton("确定", (dialog, which) -> {
|
|
|
|
+ dialog.dismiss();
|
|
|
|
+ finish();
|
|
|
|
+ })
|
|
|
|
+ .show();
|
|
|
|
+ });
|
|
|
|
+ new Thread(() -> OttLoginUtil.getInstance().init(MainActivity.this, MainActivity.this)).start();
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ @Override
|
|
|
|
+ public void handleIntent(Intent intent) {
|
|
|
|
+ super.handleIntent(intent);
|
|
|
|
+ newUrl = intent.getStringExtra(KEY_INTENT);
|
|
|
|
+ Logger.d("获取新地址:%s", newUrl);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ @Override
|
|
|
|
+ protected String getIndexURL() {
|
|
|
|
+ if (TextUtils.isEmpty(newUrl)) {
|
|
|
|
+ Logger.d("请求地址:%s", url);
|
|
|
|
+ return url;
|
|
|
|
+ }
|
|
|
|
+ try {
|
|
|
|
+ String indexUrl = newUrl.replaceAll(";", "&");
|
|
|
|
+ Logger.d("转换后的新地址:%s", indexUrl);
|
|
|
|
+ return url + "?" + indexUrl;
|
|
|
|
+ } catch (Exception e) {
|
|
|
|
+ e.printStackTrace();
|
|
|
|
+ }
|
|
|
|
+ return url;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /*@Override
|
|
|
|
+ protected String getJsInvokeName() {
|
|
|
|
+ return "AndroidToJS";
|
|
|
|
+ }*/
|
|
|
|
+
|
|
|
|
+ @Override
|
|
|
|
+ public HCWebViewClient.WebViewErrorListener getWebViewErrorListener() {
|
|
|
|
+ return this;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ @Override
|
|
|
|
+ public void setAndroidToJSListener(AndroidToJS androidToJS) {
|
|
|
|
+ super.setAndroidToJSListener(androidToJS);
|
|
|
|
+ androidToJS.setPlayVideoListener(this);
|
|
|
|
+ androidToJS.setMainActivityManager(this);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ @Override
|
|
|
|
+ public boolean dispatchKeyEvent(KeyEvent event) {
|
|
|
|
+ int keyCode = event.getKeyCode();
|
|
|
|
+ Logger.d("当前按下键值:%s", keyCode);
|
|
|
|
+ if (isFullScreenVideo && YSTVideoPlayer.shouldOverrideKeyEvent(keyCode)) {
|
|
|
|
+ return controlDelegate.onKeyDown(keyCode, event);
|
|
|
|
+ }
|
|
|
|
+ return super.dispatchKeyEvent(event);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ @Override
|
|
|
|
+ public void playFloatVideo(String url, int x, int y, int width, int height, String uid, String sourceId, String title, String examineId, String examineType, int limitTime) {
|
|
|
|
+ if(url.isEmpty() || url == null){
|
|
|
|
+ Toast.makeText(this,"视频链接错误!",Toast.LENGTH_SHORT).show();
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+ if(!hasShowWebView){
|
|
|
|
+ hasOneFloatViewToShow = true;
|
|
|
|
+ lastVideoInfo = new VideoInfo(url,x,y,width,height,uid,sourceId,title,examineId,examineType,limitTime);
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+ isFullScreenVideo = false;
|
|
|
|
+ this.hadFloatVideo = true;
|
|
|
|
+ controlDelegate.setFullVideo(false);
|
|
|
|
+ userViewModel.getSingleBooleanEvent().setValue(true);
|
|
|
|
+ Logger.d("调用小窗口播放。地址(%s),坐标(%s, %s),宽高(%s, %s)", url, x, y, width, height);
|
|
|
|
+ runOnUiThread(() -> playVideo(url, title, uid, sourceId, x, y, width, height, examineId, examineType, limitTime));
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ @Override
|
|
|
|
+ public void playFullVideo(String url, String title, String uid, String sourceId, int limitTime, boolean hadFloatVideo, String examineId, String examineType, boolean isShowCompletedDialog) {
|
|
|
|
+ this.hadFloatVideo = hadFloatVideo;
|
|
|
|
+ runOnUiThread(() -> {
|
|
|
|
+// getWebView().setLayerType(View.LAYER_TYPE_SOFTWARE, null);
|
|
|
|
+ if (hadFloatVideo && TextUtils.isEmpty(url)) {
|
|
|
|
+ changeVideo2Full(limitTime, isShowCompletedDialog);
|
|
|
|
+ } else {
|
|
|
|
+ playVideo(url, title, uid, sourceId, limitTime, examineId, examineType, isShowCompletedDialog);
|
|
|
|
+ }
|
|
|
|
+ });
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ @Override
|
|
|
|
+ public void stopFloatVideo() {
|
|
|
|
+ runOnUiThread(this::destroyVideo);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 全屏播放逻辑
|
|
|
|
+ */
|
|
|
|
+ private void playVideo(String url, String title, String uid, String sourceId, int limitTime, String examineId, String examineType, boolean isShowCompletedDialog) {
|
|
|
|
+
|
|
|
|
+ isFullScreenVideo = true;
|
|
|
|
+ controlDelegate.setFullVideo(true);
|
|
|
|
+
|
|
|
|
+ if (YSTVideoPlayer.getParent() == null) {
|
|
|
|
+ ViewGroup viewGroup = (ViewGroup) getWindow().getDecorView();
|
|
|
|
+ viewGroup.addView(YSTVideoPlayer);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
|
|
|
|
+ YSTVideoPlayer.setLayoutParams(params);
|
|
|
|
+ YSTVideoPlayer.setX(0);
|
|
|
|
+ YSTVideoPlayer.setY(0);
|
|
|
|
+
|
|
|
|
+ controlDelegate.setUid(uid);
|
|
|
|
+ controlDelegate.setSourceId(sourceId);
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ VideoData data = videoDataFactory(url,title,sourceId,limitTime,examineId,examineType);
|
|
|
|
+ String lastTimePosition = new LastPlayTimeStore(this).getTimeBySourceId(sourceId);
|
|
|
|
+ if(lastTimePosition != null){
|
|
|
|
+ if(!lastTimePosition.isEmpty()){
|
|
|
|
+ data.setLastTimePosition(Integer.parseInt(lastTimePosition));
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ YSTVideoPlayer.setShowCompletedDialog(isShowCompletedDialog);
|
|
|
|
+ YSTVideoPlayer.setData(data,this);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ private VideoData videoDataFactory(String url, String title, String sourceId, int limitTime, String examineId, String examineType){
|
|
|
|
+ VideoData data = new VideoData();
|
|
|
|
+ data.setId(sourceId);
|
|
|
|
+ data.setUrl(url);
|
|
|
|
+ data.setTitle(title);
|
|
|
|
+ data.setLimitTime(limitTime * 1000);
|
|
|
|
+ data.setExamineId(examineId);
|
|
|
|
+ data.setExamineType(examineType);
|
|
|
|
+ return data;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 指定视频窗口位置和大小的播放逻辑
|
|
|
|
+ */
|
|
|
|
+ private void playVideo(String url, String title, String uid, String sourceId, int x, int y, int width, int height,
|
|
|
|
+ String examineId, String examineType, int limitTime) {
|
|
|
|
+ initVideoParamsIfNotInit(x, y, width, height);
|
|
|
|
+
|
|
|
|
+ controlDelegate.setUid(uid);
|
|
|
|
+ controlDelegate.setSourceId(sourceId);
|
|
|
|
+
|
|
|
|
+ VideoData data = new VideoData();
|
|
|
|
+ data.setId(sourceId);
|
|
|
|
+ data.setUrl(url);
|
|
|
|
+ data.setTitle(title);
|
|
|
|
+ data.setLimitTime(limitTime * 1000);
|
|
|
|
+ data.setExamineId(examineId);
|
|
|
|
+ data.setExamineType(examineType);
|
|
|
|
+ YSTVideoPlayer.setData(data,this);
|
|
|
|
+ YSTVideoPlayer.hideAllWidget();
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ private void initVideoParamsIfNotInit(int x, int y, int width, int height) {
|
|
|
|
+ floatVideoWidth = width;
|
|
|
|
+ floatVideoHeight = height;
|
|
|
|
+ FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
|
|
|
|
+ params.width = floatVideoWidth;
|
|
|
|
+ params.height = floatVideoHeight;
|
|
|
|
+ YSTVideoPlayer.setLayoutParams(params);
|
|
|
|
+
|
|
|
|
+ floatVideoX = x;
|
|
|
|
+ floatVideoY = y;
|
|
|
|
+ YSTVideoPlayer.setX(floatVideoX);
|
|
|
|
+ YSTVideoPlayer.setY(floatVideoY);
|
|
|
|
+
|
|
|
|
+ if (YSTVideoPlayer.getParent() == null) {
|
|
|
|
+ ViewGroup viewGroup = (ViewGroup) getWindow().getDecorView();
|
|
|
|
+ viewGroup.addView(YSTVideoPlayer);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 小窗转全屏
|
|
|
|
+ */
|
|
|
|
+ private void changeVideo2Full(int limitTime, boolean isShowCompletedDialog) {
|
|
|
|
+ if (isFullScreenVideo) {
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+ if (YSTVideoPlayer != null && YSTVideoPlayer.getIcntvPlayer() != null) {
|
|
|
|
+ if (limitTime > 0 && YSTVideoPlayer.isNeedToPay()) {
|
|
|
|
+ AndroidToJS.evaluateJavascript(getWebView(), AndroidToJS.JS_EVENT_PAY);
|
|
|
|
+ } else {
|
|
|
|
+ isFullScreenVideo = true;
|
|
|
|
+ controlDelegate.setFullVideo(true);
|
|
|
|
+// getWebView().setLayerType(View.LAYER_TYPE_HARDWARE, null);
|
|
|
|
+ getWebView().clearFocus();
|
|
|
|
+ YSTVideoPlayer.requestFocus();
|
|
|
|
+ animChanged(floatVideoX, 0, floatVideoY, 0,
|
|
|
|
+ floatVideoWidth, getResources().getDisplayMetrics().widthPixels,
|
|
|
|
+ floatVideoHeight, getResources().getDisplayMetrics().heightPixels);
|
|
|
|
+ YSTVideoPlayer.setShowCompletedDialog(isShowCompletedDialog);
|
|
|
|
+ YSTVideoPlayer.pauseOrPlay(true);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 全屏转小窗
|
|
|
|
+ */
|
|
|
|
+ private void changeVideo2Float() {
|
|
|
|
+ if (!isFullScreenVideo) {
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+ if (YSTVideoPlayer != null) {
|
|
|
|
+ AndroidToJS.evaluateJavascript(getWebView(), AndroidToJS.JS_EVENT_PLAY_FINISH);
|
|
|
|
+ isFullScreenVideo = false;
|
|
|
|
+ controlDelegate.setFullVideo(false);
|
|
|
|
+ YSTVideoPlayer.pauseOrPlay(true);
|
|
|
|
+ YSTVideoPlayer.clearFocus();
|
|
|
|
+ getWebView().requestFocus();
|
|
|
|
+ animChanged(0, floatVideoX, 0, floatVideoY,
|
|
|
|
+ getResources().getDisplayMetrics().widthPixels, floatVideoWidth,
|
|
|
|
+ getResources().getDisplayMetrics().heightPixels, floatVideoHeight);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ private void animChanged(int fromX, int toX, int fromY, int toY, int fromWidth, int toWidth, int fromHeight, int toHeight) {
|
|
|
|
+ ValueAnimator animator = new ValueAnimator();
|
|
|
|
+ animator.setValues(
|
|
|
|
+ PropertyValuesHolder.ofFloat("x", fromX, toX),
|
|
|
|
+ PropertyValuesHolder.ofFloat("y", fromY, toY),
|
|
|
|
+ PropertyValuesHolder.ofInt("width", fromWidth, toWidth),
|
|
|
|
+ PropertyValuesHolder.ofInt("height", fromHeight, toHeight)
|
|
|
|
+ );
|
|
|
|
+ animator.setDuration(200);
|
|
|
|
+ animator.setInterpolator(new LinearInterpolator());
|
|
|
|
+ animator.addUpdateListener(valueAnimator -> {
|
|
|
|
+ FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
|
|
|
|
+ params.width = (int) valueAnimator.getAnimatedValue("width");
|
|
|
|
+ params.height = (int) valueAnimator.getAnimatedValue("height");
|
|
|
|
+ YSTVideoPlayer.setLayoutParams(params);
|
|
|
|
+
|
|
|
|
+ YSTVideoPlayer.setX((Float) valueAnimator.getAnimatedValue("x"));
|
|
|
|
+ YSTVideoPlayer.setY((Float) valueAnimator.getAnimatedValue("y"));
|
|
|
|
+ });
|
|
|
|
+ animator.start();
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ @Override
|
|
|
|
+ protected void delayShowFloatView() {
|
|
|
|
+ //Log.d(TAG,"delayShowFloatView");
|
|
|
|
+ if(lastVideoInfo != null){
|
|
|
|
+ playFloatVideo(lastVideoInfo.url,lastVideoInfo.x,lastVideoInfo.y,lastVideoInfo.width,lastVideoInfo.height,
|
|
|
|
+ lastVideoInfo.uid,lastVideoInfo.sourceId,lastVideoInfo.title,lastVideoInfo.examineId,lastVideoInfo.examineType,
|
|
|
|
+ lastVideoInfo.limitTime);
|
|
|
|
+ hasOneFloatViewToShow = false;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ private void destroyVideo() {
|
|
|
|
+ if (isFullScreenVideo) {
|
|
|
|
+ AndroidToJS.evaluateJavascript(getWebView(), AndroidToJS.JS_EVENT_PLAY_FINISH);
|
|
|
|
+ }
|
|
|
|
+ isFullScreenVideo = false;
|
|
|
|
+ controlDelegate.setFullVideo(false);
|
|
|
|
+// getWebView().setLayerType(View.LAYER_TYPE_HARDWARE, null);
|
|
|
|
+ if (YSTVideoPlayer != null && YSTVideoPlayer.getParent() != null) {
|
|
|
|
+
|
|
|
|
+ YSTVideoPlayer.onVideoDestroy();
|
|
|
|
+
|
|
|
|
+ ViewGroup viewGroup = (ViewGroup) getWindow().getDecorView();
|
|
|
|
+ viewGroup.removeView(YSTVideoPlayer);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /*
|
|
|
|
+ * 视频窗口暂停对话框猜你喜欢视频播放
|
|
|
|
+ * */
|
|
|
|
+
|
|
|
|
+ public void favoritePlay(String sourceId,String title){
|
|
|
|
+ new LastPlayTimeStore(this).insert(title,sourceId);
|
|
|
|
+ String url = "http://112.35.32.145:8090/index.php?m=Home&c=Order&a=authorize&sourceId="
|
|
|
|
+ + sourceId + "&EpgServer=" + getUserEpgServer() + "&token=" + getUserToken();
|
|
|
|
+ new GetRequest().RequestAsync(url, new GetRequestListener() {
|
|
|
|
+ @Override
|
|
|
|
+ public void onResult(String msg) {
|
|
|
|
+ try{
|
|
|
|
+ JSONObject jsonObject = new JSONObject(msg);
|
|
|
|
+ if(jsonObject.getInt("code") == 0){
|
|
|
|
+ String data = jsonObject.getString("data");
|
|
|
|
+ JSONObject dataObject = new JSONObject(data);
|
|
|
|
+ if(dataObject.getString("returncode").equals("0")){
|
|
|
|
+ if(dataObject.has("urls")){
|
|
|
|
+ JSONArray urls = dataObject.getJSONArray("urls");
|
|
|
|
+ String playUrl = urls.getJSONObject(0).getString("playurl");
|
|
|
|
+ playUrl = "http://111.20.105.60:6060/GZHC/32/HC_SXYD_Movie_1640?AuthInfo=fYRn6wHTB6eMAGUKu9tiy1%2BoDGkdNRH1eBdnpkXBr1uXi01TWCEl%2Fzmj166sZ1RueACMTnEjP0frBL2xVTz0ZJ3iOictBjY4f8JCCb0%2BAijeL2gMxcVwASPkY0a8jA6k&version=v1.0&virtualDomain=GZHC.vod_hpd.zte.com&stbid=0057030000010070181058B42DAE192D&terminalflag=1&userid=58B42DAE192D";
|
|
|
|
+ VideoData data1 = videoDataFactory(playUrl,"测试","1618",-1,"10001","program");
|
|
|
|
+ MainActivity.this.runOnUiThread(new Runnable() {
|
|
|
|
+ @Override
|
|
|
|
+ public void run() {
|
|
|
|
+ YSTVideoPlayer.switchVideo(data1);
|
|
|
|
+ }
|
|
|
|
+ });
|
|
|
|
+ }else{
|
|
|
|
+ Log.i(TAG,"没有获取到播放链接");
|
|
|
|
+ }
|
|
|
|
+ }else{
|
|
|
|
+ Log.i(TAG,"鉴权失败");
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }catch (Exception e){
|
|
|
|
+ e.printStackTrace();
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ });
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /*
|
|
|
|
+ * 获取机顶盒信息
|
|
|
|
+ * */
|
|
|
|
+ private String getUserName(){
|
|
|
|
+ try{
|
|
|
|
+ Uri queryUri = Uri.parse("content://stbauthinfo/authentication/");
|
|
|
|
+ Cursor cursor = getContentResolver().query(queryUri,new String[]{"value"},"name='username'",null,null);
|
|
|
|
+ cursor.moveToFirst();
|
|
|
|
+ String userName = cursor.getString(cursor.getColumnIndexOrThrow("value"));
|
|
|
|
+ Log.d(TAG,"userName:" + userName);
|
|
|
|
+ return userName;
|
|
|
|
+ }catch (Exception e){
|
|
|
|
+ e.printStackTrace();
|
|
|
|
+ return "";
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ private String getUserToken(){
|
|
|
|
+ try{
|
|
|
|
+ Uri queryUri = Uri.parse("content://stbauthinfo/authentication/");
|
|
|
|
+ Cursor cursor = getContentResolver().query(queryUri,new String[]{"value"},"name='user_token'",null,null);
|
|
|
|
+ cursor.moveToFirst();
|
|
|
|
+ String userToken = cursor.getString(cursor.getColumnIndexOrThrow("value"));
|
|
|
|
+ //userToken = "Se48ja9jiqjq-Stjhd4izfd";
|
|
|
|
+ Log.d(TAG,"userToken:" + userToken);
|
|
|
|
+ return userToken;
|
|
|
|
+ }catch (Exception e){
|
|
|
|
+ e.printStackTrace();
|
|
|
|
+ return "";
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ private String getUserEpgServer(){
|
|
|
|
+ try{
|
|
|
|
+ Uri queryUri = Uri.parse("content://stbauthinfo/authentication/");
|
|
|
|
+ Cursor cursor = getContentResolver().query(queryUri,new String[]{"value"},"name='epg_server'",null,null);
|
|
|
|
+ cursor.moveToFirst();
|
|
|
|
+ String epgServer = cursor.getString(cursor.getColumnIndexOrThrow("value"));
|
|
|
|
+ //epgServer = "http://111.20.42.163:33200";
|
|
|
|
+ Log.d(TAG,"epgServer:" + epgServer);
|
|
|
|
+ return epgServer;
|
|
|
|
+ }catch (Exception e){
|
|
|
|
+ e.printStackTrace();
|
|
|
|
+ return "";
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ ////////////////////////////////////OTT登陆/////////////////////////////////////
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ @Override
|
|
|
|
+ public void onOttLoginSuccess() {
|
|
|
|
+// loginMsg.setValue("OTT登陆成功");
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ @Override
|
|
|
|
+ public void onOttLoginFail(String msg) {
|
|
|
|
+ loginMsg.setValue(msg);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ @Override
|
|
|
|
+ public void onOttLoginError(Throwable throwable) {
|
|
|
|
+ loginMsg.setValue(throwable == null ? "发生未知异常" : throwable.getMessage());
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ ////////////////////////////////////网页加载异常/////////////////////////////////////
|
|
|
|
+
|
|
|
|
+ @Override
|
|
|
|
+ public void onReceiveError(WebView view, int errorCode, String description, String failingUrl) {
|
|
|
|
+ if (messageView == null) {
|
|
|
|
+ messageView = View.inflate(this, R.layout.layout_tip_view, null);
|
|
|
|
+ }
|
|
|
|
+ switch (description) {
|
|
|
|
+ case HCWebViewClient.NETWORK_ACCESS_DENIED:
|
|
|
|
+ ((TextView) messageView.findViewById(R.id.tv_message)).setText("没有网络权限");
|
|
|
|
+ break;
|
|
|
|
+ case HCWebViewClient.UNKNOWN_URL_SCHEME:
|
|
|
|
+ ((TextView) messageView.findViewById(R.id.tv_message)).setText(String.format("%s\n该地址无法访问,请联系客服", failingUrl));
|
|
|
|
+ break;
|
|
|
|
+ case HCWebViewClient.INTERNET_DISCONNECTED:
|
|
|
|
+ ((TextView) messageView.findViewById(R.id.tv_message)).setText("网络未链接,请重新加载");
|
|
|
|
+ break;
|
|
|
|
+ default:
|
|
|
|
+ ((TextView) messageView.findViewById(R.id.tv_message)).setText("未定义的错误,请重新加载或联系客服");
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+ view.loadUrl("about:blank");
|
|
|
|
+ ViewInjectFactory.getInstance().inject(this, messageView);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ public void reloadWeb(View view) {
|
|
|
|
+ ViewInjectFactory.getInstance().revert(this);
|
|
|
|
+ getWebView().loadUrl(getIndexURL());
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ public void exitApp(View view) {
|
|
|
|
+ finish();
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ @Override
|
|
|
|
+ protected void onStop() {
|
|
|
|
+ super.onStop();
|
|
|
|
+ destroyVideo();
|
|
|
|
+ boolean isForeground = BaseApp.isRunningForeground(this);
|
|
|
|
+ if (!isForeground) {
|
|
|
|
+ TrackUtil.userEvent(LocalStore.getInstance().isVip(), LocalStore.getInstance().getUserID(), false);
|
|
|
|
+ Handler handler = new Handler(getMainLooper());
|
|
|
|
+ handler.postDelayed(() -> {
|
|
|
|
+ TrackUtil.exitApp();
|
|
|
|
+ if (!isFinish) {
|
|
|
|
+ BaseApp.exit();
|
|
|
|
+ }
|
|
|
|
+ }, 500);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ @Override
|
|
|
|
+ protected void onPause() {
|
|
|
|
+ super.onPause();
|
|
|
|
+ YSTVideoPlayer.onVideoDestroy();
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ @Override
|
|
|
|
+ protected void onDestroy() {
|
|
|
|
+ ViewInjectFactory.getInstance().destroy(this);
|
|
|
|
+ super.onDestroy();
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ @Override
|
|
|
|
+ public void finishActivity() {
|
|
|
|
+ isFinish = true;
|
|
|
|
+ finish();
|
|
|
|
+ }
|
|
|
|
+}
|