|  | @@ -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();
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +}
 |