Browse Source

commit by xulin
20190315

lyn 6 years ago
parent
commit
8f7ca90d16
29 changed files with 648 additions and 77 deletions
  1. 5 3
      app/build.gradle
  2. 1 1
      app/release/output.json
  3. 118 0
      app/src/main/java/com/hc/webapp/BToast.java
  4. 6 1
      app/src/main/java/com/hc/webapp/BaseApp.java
  5. 215 21
      app/src/main/java/com/hc/webapp/MainActivity.java
  6. 7 7
      app/src/main/java/com/hc/webapp/NetworkConnectChangedReceiver.java
  7. 0 1
      app/src/main/java/com/hc/webapp/video/VideoControlDelegate.java
  8. 102 15
      app/src/main/java/com/hc/webapp/web/AndroidToJS.java
  9. 31 7
      app/src/main/java/com/hc/webapp/web/BaseWebActivity.java
  10. 5 0
      app/src/main/res/drawable/toast_back.xml
  11. 1 0
      app/src/main/res/layout/activity_main.xml
  12. 21 0
      app/src/main/res/layout/toast_layout.xml
  13. 2 0
      lib/src/main/java/com/hc/lib/video/IVideoPlayer.java
  14. 45 20
      lib/src/main/java/com/hc/lib/video/MVideoPlayer.java
  15. 11 0
      lib/src/main/res/drawable/my_progressbar.xml
  16. 11 0
      lib/src/main/res/drawable/my_ring.xml
  17. 1 0
      lib/src/main/res/layout/layout_m_player.xml
  18. 1 0
      lib/src/main/res/values-hdpi/dimens.xml
  19. 1 0
      lib/src/main/res/values-ldpi/dimens.xml
  20. 1 0
      lib/src/main/res/values-mdpi-1280x720/dimens.xml
  21. 1 0
      lib/src/main/res/values-mdpi-1920x1080/dimens.xml
  22. 1 0
      lib/src/main/res/values-xhdpi/dimens.xml
  23. 1 0
      lib/src/main/res/values-xxhdpi/dimens.xml
  24. 1 0
      lib/src/main/res/values-xxxhdpi/dimens.xml
  25. 15 0
      model/src/main/java/com/hc/request/Config.java
  26. 3 0
      model/src/main/java/com/hc/request/core/CallServer.java
  27. 39 0
      model/src/main/java/com/hc/request/core/parse/FastGetRequest.java
  28. 1 0
      model/src/main/java/com/hc/request/core/parse/FastJsonRequest.java
  29. 1 1
      model/src/main/java/com/hc/viewmodel/SingleLiveEvent.java

+ 5 - 3
app/build.gradle

@@ -14,8 +14,8 @@ android {
         applicationId "com.hc.webapp"
         applicationId "com.hc.webapp"
         minSdkVersion versions.minSdk
         minSdkVersion versions.minSdk
         targetSdkVersion versions.targetSdk
         targetSdkVersion versions.targetSdk
-        versionCode 6
-        versionName "v2.0.1"
+        versionCode 10
+        versionName "v2.0.5"
         ndk {
         ndk {
             //APP的build.gradle设置支持的SO库架构
             //APP的build.gradle设置支持的SO库架构
             abiFilters 'armeabi', 'armeabi-v7a'
             abiFilters 'armeabi', 'armeabi-v7a'
@@ -24,12 +24,13 @@ android {
     }
     }
     buildTypes {
     buildTypes {
         debug {
         debug {
-            buildConfigField "Boolean", "isDebug", "true"
+            buildConfigField "Boolean", "isDebug", "false"
 //            zipAlignEnabled true
 //            zipAlignEnabled true
 //            shrinkResources true
 //            shrinkResources true
 //            debuggable true
 //            debuggable true
             minifyEnabled false
             minifyEnabled false
             proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
             proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
+            signingConfig signingConfigs.config
         }
         }
         release {
         release {
             buildConfigField "Boolean", "isDebug", "false"
             buildConfigField "Boolean", "isDebug", "false"
@@ -64,4 +65,5 @@ dependencies {
     implementation('com.jewel.lib:JLib:1.0.9') {
     implementation('com.jewel.lib:JLib:1.0.9') {
         exclude group: "com.android.support"
         exclude group: "com.android.support"
     }
     }
+    implementation 'com.android.volley:volley:1.1.1'
 }
 }

+ 1 - 1
app/release/output.json

@@ -1 +1 @@
-[{"outputType":{"type":"APK"},"apkInfo":{"type":"MAIN","splits":[],"versionCode":6,"versionName":"v2.0.1","enabled":true,"outputFile":"app-release.apk","fullName":"release","baseName":"release"},"path":"app-release.apk","properties":{}}]
+[{"outputType":{"type":"APK"},"apkInfo":{"type":"MAIN","splits":[],"versionCode":10,"versionName":"v2.0.5","enabled":true,"outputFile":"app-release.apk","fullName":"release","baseName":"release"},"path":"app-release.apk","properties":{}}]

+ 118 - 0
app/src/main/java/com/hc/webapp/BToast.java

@@ -0,0 +1,118 @@
+package com.hc.webapp;
+
+import android.app.Activity;
+import android.app.Application;
+import android.content.Context;
+import android.view.Gravity;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.widget.ImageView;
+import android.widget.TextView;
+import android.widget.Toast;
+
+public class BToast extends Toast {
+
+    /**
+     * Toast单例
+     */
+    private static BToast toast;
+
+
+    /**
+     * Construct an empty Toast object.  You must call {@link #setView} before you
+     * can call {@link #show}.
+     *
+     * @param context The context to use.  Usually your {@link Application}
+     *                or {@link Activity} object.
+     */
+    public BToast(Context context) {
+        super(context);
+    }
+
+    /**
+     * 隐藏当前Toast
+     */
+    public static void cancelToast() {
+        if (toast != null) {
+            toast.cancel();
+        }
+    }
+
+    public void cancel() {
+        try {
+            super.cancel();
+        } catch (Exception e) {
+
+        }
+    }
+
+    @Override
+    public void show() {
+        try {
+            super.show();
+        } catch (Exception e) {
+
+        }
+    }
+
+    private static void initToast(Context context, CharSequence text) {
+        try {
+            cancelToast();
+
+            toast = new BToast(context);
+
+            // 获取LayoutInflater对象
+            LayoutInflater inflater =
+                    (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
+
+            // 由layout文件创建一个View对象
+            View layout = inflater.inflate(R.layout.toast_layout, null);
+
+
+            // 吐司上的文字
+            TextView toast_text = (TextView) layout.findViewById(R.id.toast_text);
+            toast_text.setText(text);
+            toast.setView(layout);
+            toast.setGravity(Gravity.CENTER, 0, 240);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+    /**
+     * 图标状态 不显示图标
+     */
+    private static final int TYPE_HIDE = -1;
+    /**
+     * 图标状态 显示√
+     */
+    private static final int TYPE_TRUE = 0;
+    /**
+     * 图标状态 显示×
+     */
+    private static final int TYPE_FALSE = 1;
+
+    /**
+     * 显示Toast
+     *
+     * @param context 上下文
+     * @param text    显示的文本
+     * @param time    显示时长
+     * @param imgType 图标状态
+     */
+    public static void showToast(Context context, CharSequence text, int time) {
+        // 初始化一个新的Toast对象
+        initToast(context, text);
+
+        // 设置显示时长
+        if (time == Toast.LENGTH_LONG) {
+            toast.setDuration(Toast.LENGTH_LONG);
+        } else {
+            toast.setDuration(Toast.LENGTH_SHORT);
+        }
+
+
+        // 显示Toast
+        toast.show();
+    }
+}

+ 6 - 1
app/src/main/java/com/hc/webapp/BaseApp.java

@@ -61,7 +61,12 @@ public class BaseApp extends Application {
 
 
     private void initLogger() {
     private void initLogger() {
         FormatStrategy formatStrategy = PrettyFormatStrategy.newBuilder().tag(getApplicationContext().getPackageName()).build();
         FormatStrategy formatStrategy = PrettyFormatStrategy.newBuilder().tag(getApplicationContext().getPackageName()).build();
-        com.orhanobut.logger.Logger.addLogAdapter(new AndroidLogAdapter(formatStrategy));
+        com.orhanobut.logger.Logger.addLogAdapter(new AndroidLogAdapter(formatStrategy){
+            @Override
+            public boolean isLoggable(int priority, String tag) {
+                return BuildConfig.isDebug;
+            }
+        });
     }
     }
 
 
     private void initVideo() {
     private void initVideo() {

File diff suppressed because it is too large
+ 215 - 21
app/src/main/java/com/hc/webapp/MainActivity.java


+ 7 - 7
app/src/main/java/com/hc/webapp/NetworkConnectChangedReceiver.java

@@ -45,11 +45,11 @@ public class NetworkConnectChangedReceiver extends BroadcastReceiver {
 
 
     @Override
     @Override
     public void onReceive(Context context, Intent intent) {
     public void onReceive(Context context, Intent intent) {
-        //MyToast("action:" + intent.getAction());
+        //BToast("action:" + intent.getAction());
         /*if (WifiManager.WIFI_STATE_CHANGED_ACTION.equals(intent.getAction())) {// 监听wifi的打开与关闭,与wifi的连接无关
         /*if (WifiManager.WIFI_STATE_CHANGED_ACTION.equals(intent.getAction())) {// 监听wifi的打开与关闭,与wifi的连接无关
             int wifiState = intent.getIntExtra(WifiManager.EXTRA_WIFI_STATE, 0);
             int wifiState = intent.getIntExtra(WifiManager.EXTRA_WIFI_STATE, 0);
             Log.e(TAG, "wifiState:" + wifiState);
             Log.e(TAG, "wifiState:" + wifiState);
-            MyToast("wifiState:" + wifiState);
+            BToast("wifiState:" + wifiState);
             switch (wifiState) {
             switch (wifiState) {
                 case WifiManager.WIFI_STATE_DISABLED:
                 case WifiManager.WIFI_STATE_DISABLED:
                     Log.d(TAG,"WIFI_STATE_DISABLED");
                     Log.d(TAG,"WIFI_STATE_DISABLED");
@@ -71,7 +71,7 @@ public class NetworkConnectChangedReceiver extends BroadcastReceiver {
                 //判断网络是否已经连接
                 //判断网络是否已经连接
                 boolean isConnected = state == NetworkInfo.State.CONNECTED;
                 boolean isConnected = state == NetworkInfo.State.CONNECTED;
                 Log.e(TAG, "isConnected:" + isConnected);
                 Log.e(TAG, "isConnected:" + isConnected);
-                MyToast("isConnected:" + isConnected);
+                BToast("isConnected:" + isConnected);
                 if (isConnected) {
                 if (isConnected) {
                 } else {
                 } else {
 
 
@@ -89,11 +89,11 @@ public class NetworkConnectChangedReceiver extends BroadcastReceiver {
                     if (info.getType() == ConnectivityManager.TYPE_WIFI
                     if (info.getType() == ConnectivityManager.TYPE_WIFI
                             || info.getType() == ConnectivityManager.TYPE_MOBILE) {
                             || info.getType() == ConnectivityManager.TYPE_MOBILE) {
                         Log.i(TAG, getConnectionType(info.getType()) + "连上");
                         Log.i(TAG, getConnectionType(info.getType()) + "连上");
-                        MyToast(getConnectionType(info.getType()) + "连上");
+                        BToast(getConnectionType(info.getType()) + "连上");
                     }
                     }
                 } else {
                 } else {
                     Log.i(TAG, getConnectionType(info.getType()) + "断开");
                     Log.i(TAG, getConnectionType(info.getType()) + "断开");
-                   MyToast(getConnectionType(info.getType()) + "断开");
+                   BToast(getConnectionType(info.getType()) + "断开");
                 }
                 }
             }
             }
 
 
@@ -101,10 +101,10 @@ public class NetworkConnectChangedReceiver extends BroadcastReceiver {
 
 
         boolean isConnected = isNetworkAvailable(context);
         boolean isConnected = isNetworkAvailable(context);
         if(isConnected){
         if(isConnected){
-            //MyToast("连上");
+            //BToast("连上");
             networkConnectChangedListener.onConnected();
             networkConnectChangedListener.onConnected();
         }else {
         }else {
-            //MyToast("断开");
+            //BToast("断开");
             networkConnectChangedListener.onDisConnected();
             networkConnectChangedListener.onDisConnected();
         }
         }
     }
     }

+ 0 - 1
app/src/main/java/com/hc/webapp/video/VideoControlDelegate.java

@@ -125,7 +125,6 @@ public class VideoControlDelegate implements VideoPauseDialog.OnPlayItemSelected
     public boolean onKeyDown(int keyCode, KeyEvent event) {
     public boolean onKeyDown(int keyCode, KeyEvent event) {
         if (keyCode == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_DOWN) {
         if (keyCode == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_DOWN) {
             playResume(false);
             playResume(false);
-
         }
         }
         else {
         else {
             videoPlayer.onKeyDown(keyCode, event);
             videoPlayer.onKeyDown(keyCode, event);

+ 102 - 15
app/src/main/java/com/hc/webapp/web/AndroidToJS.java

@@ -15,18 +15,25 @@ import android.webkit.JavascriptInterface;
 import android.webkit.WebView;
 import android.webkit.WebView;
 import android.widget.TextView;
 import android.widget.TextView;
 
 
+import com.alibaba.fastjson.JSON;
 import com.hc.lib.DownloadUtils;
 import com.hc.lib.DownloadUtils;
 import com.hc.lib.MacUtil;
 import com.hc.lib.MacUtil;
+import com.hc.model.BaseResponse;
 import com.hc.model.YNYD.YNYDContentProvider;
 import com.hc.model.YNYD.YNYDContentProvider;
 import com.hc.model.YNYD.YNYDService;
 import com.hc.model.YNYD.YNYDService;
 import com.hc.request.Config;
 import com.hc.request.Config;
+import com.hc.request.core.CallServer;
 import com.hc.request.core.DefaultCallback;
 import com.hc.request.core.DefaultCallback;
+import com.hc.request.core.parse.FastGetRequest;
+import com.hc.request.core.parse.FastJsonRequest;
 import com.hc.webapp.BuildConfig;
 import com.hc.webapp.BuildConfig;
 import com.jewel.lib.java.StringUtil;
 import com.jewel.lib.java.StringUtil;
 import com.orhanobut.logger.Logger;
 import com.orhanobut.logger.Logger;
+import com.yanzhenjie.nohttp.rest.Request;
 
 
 import java.lang.annotation.Retention;
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
 import java.lang.annotation.RetentionPolicy;
+import java.lang.reflect.Method;
 import java.util.regex.Pattern;
 import java.util.regex.Pattern;
 
 
 import static com.hc.lib.video.IVideoPlayer.PLAY_TIME_NO_LIMIT;
 import static com.hc.lib.video.IVideoPlayer.PLAY_TIME_NO_LIMIT;
@@ -39,6 +46,8 @@ public class AndroidToJS {
     public static final String JS_EVENT_PLAY_FINISH = "javascript:onPlayBackEvent()";
     public static final String JS_EVENT_PLAY_FINISH = "javascript:onPlayBackEvent()";
     private static final String JS_EVENT_AUTH_RESULT = "javascript:onAuthResult(%s, %s)";
     private static final String JS_EVENT_AUTH_RESULT = "javascript:onAuthResult(%s, %s)";
     public static final String JS_EVENT_PLAY_NEXT = "javascript:onPlayNextEvent()";
     public static final String JS_EVENT_PLAY_NEXT = "javascript:onPlayNextEvent()";
+    public static final String JS_PAY_BACK = "javascript:onPayBack()";
+    public static final String WEB_REQUEST_RESPONSE = "javascript:onWebRequestResponse()";
 
 
     private static final String HAD_FLOAT_VIDEO = "1"; // 当前H5页面存在小窗视频
     private static final String HAD_FLOAT_VIDEO = "1"; // 当前H5页面存在小窗视频
     private static final String NEED_MUTE = "0";
     private static final String NEED_MUTE = "0";
@@ -50,7 +59,7 @@ public class AndroidToJS {
     /**
     /**
      * JS调用类型
      * JS调用类型
      */
      */
-    @StringDef({JS_EVENT_BACK, JS_EVENT_PLAY_FINISH, JS_EVENT_PLAY_NEXT})
+    @StringDef({JS_EVENT_BACK, JS_EVENT_PLAY_FINISH, JS_EVENT_PLAY_NEXT,JS_PAY_BACK,WEB_REQUEST_RESPONSE})
     @Retention(RetentionPolicy.SOURCE)
     @Retention(RetentionPolicy.SOURCE)
     private @interface JsEvent {
     private @interface JsEvent {
 
 
@@ -63,11 +72,35 @@ public class AndroidToJS {
     private PlayVideoListener playVideoListener;
     private PlayVideoListener playVideoListener;
     private long playTime = PLAY_TIME_NO_LIMIT;
     private long playTime = PLAY_TIME_NO_LIMIT;
 
 
+    //陕西广电盒子参数
+    String stbId = "";
+    String token = "";
+    String userName = "";
+    String cardId="";
+    String versionType="";
+    String mac ="";
+
     public AndroidToJS(Context context, WebView webView) {
     public AndroidToJS(Context context, WebView webView) {
         this.context = context;
         this.context = context;
         this.webView = webView;
         this.webView = webView;
         contentProvider = new YNYDContentProvider(context);
         contentProvider = new YNYDContentProvider(context);
         service = new YNYDService(context);
         service = new YNYDService(context);
+        getDeviceInfo();
+    }
+
+    public void getDeviceInfo(){
+        try{
+            Method localMethod = Class.forName("android.os.SystemProperties").getMethod("get", new Class[] { String.class });
+            stbId = (String)localMethod.invoke(null, new Object[] { "ro.di.stb_id" });
+            token = (String)localMethod.invoke(null, new Object[] { "sys.auth.AAAtoken" });
+            userName = (String)localMethod.invoke(null, new Object[] { "sys.auth.username" });
+            cardId = (String)localMethod.invoke(null, new Object[] { "sys.ca.cardid" });
+            versionType = (String)localMethod.invoke(null, new Object[] { "ro.di.hw_version" });
+            mac=(String)localMethod.invoke(null, new Object[] { "ro.di.mac" });
+            Log.d("android_js","token:" + token + "; versionType:" + versionType);
+        }catch (Exception e){
+            e.printStackTrace();
+        }
     }
     }
 
 
     public void setPlayVideoListener(PlayVideoListener playVideoListener) {
     public void setPlayVideoListener(PlayVideoListener playVideoListener) {
@@ -84,7 +117,7 @@ public class AndroidToJS {
      */
      */
     @JavascriptInterface
     @JavascriptInterface
     public void playFull(String url, String sourceId, String title, String time, String hadFloatVideo, String isNextVideo, String showCompleteDialog) {
     public void playFull(String url, String sourceId, String title, String time, String hadFloatVideo, String isNextVideo, String showCompleteDialog) {
-        Logger.d("调用全屏播放。源ID(%s),标题(%s),播放地址(%s)", sourceId, title, url);
+        //Logger.d("调用全屏播放。源ID(%s),标题(%s),播放地址(%s)", sourceId, title, url);
         if (playVideoListener != null) {
         if (playVideoListener != null) {
 
 
             playTime = PLAY_TIME_NO_LIMIT;
             playTime = PLAY_TIME_NO_LIMIT;
@@ -94,7 +127,7 @@ public class AndroidToJS {
             boolean hadFloat = TextUtils.equals(HAD_FLOAT_VIDEO, hadFloatVideo);
             boolean hadFloat = TextUtils.equals(HAD_FLOAT_VIDEO, hadFloatVideo);
             boolean isCurrentNextVideo = TextUtils.equals(HAD_FLOAT_VIDEO, isNextVideo);
             boolean isCurrentNextVideo = TextUtils.equals(HAD_FLOAT_VIDEO, isNextVideo);
             boolean isShowCompleteDialog = TextUtils.equals(HAD_FLOAT_VIDEO, showCompleteDialog);
             boolean isShowCompleteDialog = TextUtils.equals(HAD_FLOAT_VIDEO, showCompleteDialog);
-            Logger.d("调用全屏播放。有小窗(%s),当前为非初始视频(%s),显示结束弹窗(%s)", hadFloat, isCurrentNextVideo, isShowCompleteDialog);
+            //Logger.d("调用全屏播放。有小窗(%s),当前为非初始视频(%s),显示结束弹窗(%s)", hadFloat, isCurrentNextVideo, isShowCompleteDialog);
             ((Activity) context).runOnUiThread(() -> playFull(url, sourceId, title, playTime, hadFloat, isCurrentNextVideo, isShowCompleteDialog, 0));
             ((Activity) context).runOnUiThread(() -> playFull(url, sourceId, title, playTime, hadFloat, isCurrentNextVideo, isShowCompleteDialog, 0));
         }
         }
     }
     }
@@ -110,7 +143,7 @@ public class AndroidToJS {
      */
      */
     @JavascriptInterface
     @JavascriptInterface
     public void playFull(String url, String sourceId, String title, String time, String hadFloatVideo, String isNextVideo, String showCompleteDialog, int seekTime) {
     public void playFull(String url, String sourceId, String title, String time, String hadFloatVideo, String isNextVideo, String showCompleteDialog, int seekTime) {
-        Logger.d("调用全屏播放。源ID(%s),标题(%s),播放地址(%s)", sourceId, title, url);
+        //Logger.d("调用全屏播放。源ID(%s),标题(%s),播放地址(%s)", sourceId, title, url);
         if (playVideoListener != null) {
         if (playVideoListener != null) {
 
 
             playTime = PLAY_TIME_NO_LIMIT;
             playTime = PLAY_TIME_NO_LIMIT;
@@ -120,7 +153,7 @@ public class AndroidToJS {
             boolean hadFloat = TextUtils.equals(HAD_FLOAT_VIDEO, hadFloatVideo);
             boolean hadFloat = TextUtils.equals(HAD_FLOAT_VIDEO, hadFloatVideo);
             boolean isCurrentNextVideo = TextUtils.equals(HAD_FLOAT_VIDEO, isNextVideo);
             boolean isCurrentNextVideo = TextUtils.equals(HAD_FLOAT_VIDEO, isNextVideo);
             boolean isShowCompleteDialog = TextUtils.equals(HAD_FLOAT_VIDEO, showCompleteDialog);
             boolean isShowCompleteDialog = TextUtils.equals(HAD_FLOAT_VIDEO, showCompleteDialog);
-            Logger.d("调用全屏播放。有小窗(%s),当前为非初始视频(%s),显示结束弹窗(%s),快进时间(%s)", hadFloat, isCurrentNextVideo, isShowCompleteDialog, seekTime);
+            //Logger.d("调用全屏播放。有小窗(%s),当前为非初始视频(%s),显示结束弹窗(%s),快进时间(%s)", hadFloat, isCurrentNextVideo, isShowCompleteDialog, seekTime);
             ((Activity) context).runOnUiThread(() -> playFull(url, sourceId, title, playTime, hadFloat, isCurrentNextVideo, isShowCompleteDialog, seekTime));
             ((Activity) context).runOnUiThread(() -> playFull(url, sourceId, title, playTime, hadFloat, isCurrentNextVideo, isShowCompleteDialog, seekTime));
         }
         }
     }
     }
@@ -147,10 +180,10 @@ public class AndroidToJS {
     @JavascriptInterface
     @JavascriptInterface
     public void playFloat(String url, String sourceId, String title,
     public void playFloat(String url, String sourceId, String title,
                           final String x, final String y, final String width, final String height, String needMute) {
                           final String x, final String y, final String width, final String height, String needMute) {
-        Logger.d("调用小窗口播放。播放地址(%s), 源ID(%s),标题(%s)", url, sourceId, title);
-        Logger.d("调用小窗口播放。坐标(%s, %s),宽高(%s, %s)", x, y, width, height);
+        //Logger.d("调用小窗口播放。播放地址(%s), 源ID(%s),标题(%s)", url, sourceId, title);
+        //Logger.d("调用小窗口播放。坐标(%s, %s),宽高(%s, %s)", x, y, width, height);
         boolean isMute = TextUtils.equals(NEED_MUTE, needMute);
         boolean isMute = TextUtils.equals(NEED_MUTE, needMute);
-        Logger.d("调用小窗口播放。需要静音:%s", isMute);
+        //Logger.d("调用小窗口播放。需要静音:%s", isMute);
         if (isDigitsOnly(x) && isDigitsOnly(y) && isDigitsOnly(width) && isDigitsOnly(height) && playVideoListener != null) {
         if (isDigitsOnly(x) && isDigitsOnly(y) && isDigitsOnly(width) && isDigitsOnly(height) && playVideoListener != null) {
             ((Activity) context).runOnUiThread(() -> playFloat(url, sourceId, title,
             ((Activity) context).runOnUiThread(() -> playFloat(url, sourceId, title,
                     (int) Float.parseFloat(x),
                     (int) Float.parseFloat(x),
@@ -171,7 +204,7 @@ public class AndroidToJS {
      */
      */
     @JavascriptInterface
     @JavascriptInterface
     public void closeFloat() {
     public void closeFloat() {
-        Logger.d("关闭小窗口播放。");
+        //Logger.d("关闭小窗口播放。");
         if (playVideoListener != null) {
         if (playVideoListener != null) {
             playVideoListener.stopFloatVideo();
             playVideoListener.stopFloatVideo();
         }
         }
@@ -204,8 +237,15 @@ public class AndroidToJS {
     }
     }
 
 
     @JavascriptInterface
     @JavascriptInterface
+    public void webRequest(String tag,String url){
+       playVideoListener.webRequest(tag,url);
+    }
+
+
+
+    @JavascriptInterface
     public String getUser() {
     public String getUser() {
-        return contentProvider.getUserName();
+        return userName;
     }
     }
 
 
     @JavascriptInterface
     @JavascriptInterface
@@ -219,8 +259,18 @@ public class AndroidToJS {
     }
     }
 
 
     @JavascriptInterface
     @JavascriptInterface
+    public String getStbId() {
+        return stbId;
+    }
+
+    @JavascriptInterface
     public String getToken() {
     public String getToken() {
-        return contentProvider.getToken();
+        return token;
+    }
+
+    @JavascriptInterface
+    public String getCardId() {
+        return cardId;
     }
     }
 
 
     @JavascriptInterface
     @JavascriptInterface
@@ -240,11 +290,28 @@ public class AndroidToJS {
 
 
     @JavascriptInterface
     @JavascriptInterface
     public String getMac() {
     public String getMac() {
-        return MacUtil.getMac(context);
+        return mac;
+    }
+
+    @JavascriptInterface
+    public String getVersionType() {
+        return versionType;
+    }
+
+    @JavascriptInterface
+    public void toast(String msg){
+        playVideoListener.Toast(msg);
+    }
+
+    @JavascriptInterface
+    public void pay(String orderNum) {
+        Log.d("SXGD","pay, num:" + orderNum);
+        playVideoListener.pay(orderNum);
     }
     }
 
 
     @JavascriptInterface
     @JavascriptInterface
-    public void pay() {
+    public void reLogin() {
+        playVideoListener.reLogin();
     }
     }
 
 
     @JavascriptInterface
     @JavascriptInterface
@@ -316,7 +383,7 @@ public class AndroidToJS {
      * 调用js事件
      * 调用js事件
      *
      *
      * @param webView webView
      * @param webView webView
-     * @param script  {@link AndroidToJS#JS_EVENT_BACK}、{@link AndroidToJS#JS_EVENT_PLAY_FINISH}
+     * @param script  {@link AndroidToJS#JS_EVENT_BACK}、{@link AndroidToJS#JS_EVENT_PLAY_FINISH}、{@link AndroidToJS#JS_PAY_BACK、{@link AndroidToJS#WEB_REQUEST_RESPONSE}
      */
      */
     public static void evaluateJavascript(WebView webView, @JsEvent String script) {
     public static void evaluateJavascript(WebView webView, @JsEvent String script) {
         if (webView == null) {
         if (webView == null) {
@@ -378,7 +445,7 @@ public class AndroidToJS {
          * @param sourceId      源ID
          * @param sourceId      源ID
          * @param playTime      可播放时间。如果为{@link com.hc.lib.video.IVideoPlayer#PLAY_TIME_NO_LIMIT},代表无限制播放
          * @param playTime      可播放时间。如果为{@link com.hc.lib.video.IVideoPlayer#PLAY_TIME_NO_LIMIT},代表无限制播放
          * @param hadFloatVideo 当前H5页面是否有小窗
          * @param hadFloatVideo 当前H5页面是否有小窗
-         * @param seekTime 全屏时需要快进的时间
+         * @param seekTime      全屏时需要快进的时间
          */
          */
         void playFullVideo(String url, String title, String uid, String sourceId, long playTime, boolean hadFloatVideo, boolean showCompleteDialog, int seekTime);
         void playFullVideo(String url, String title, String uid, String sourceId, long playTime, boolean hadFloatVideo, boolean showCompleteDialog, int seekTime);
 
 
@@ -386,5 +453,25 @@ public class AndroidToJS {
          * 结束小窗播放
          * 结束小窗播放
          */
          */
         void stopFloatVideo();
         void stopFloatVideo();
+
+        /*
+        * 支付
+        * */
+        void pay(String orderNum);
+
+        /*
+         * 前端网络访问;
+         * */
+        void webRequest(String tag,String url);
+
+        /*
+         * 提示;
+         * */
+        void Toast(String msg);
+
+        /*
+         * 重新令牌登陆
+         * */
+        void reLogin();
     }
     }
 }
 }

+ 31 - 7
app/src/main/java/com/hc/webapp/web/BaseWebActivity.java

@@ -23,8 +23,11 @@ import android.webkit.WebViewClient;
 import android.widget.FrameLayout;
 import android.widget.FrameLayout;
 import android.widget.ImageView;
 import android.widget.ImageView;
 import android.widget.RelativeLayout;
 import android.widget.RelativeLayout;
+import android.widget.Toast;
 
 
+import com.hc.webapp.BToast;
 import com.hc.webapp.BuildConfig;
 import com.hc.webapp.BuildConfig;
+import com.hc.webapp.MainActivity;
 import com.hc.webapp.NetworkConnectChangedListener;
 import com.hc.webapp.NetworkConnectChangedListener;
 import com.hc.webapp.NetworkConnectChangedReceiver;
 import com.hc.webapp.NetworkConnectChangedReceiver;
 import com.hc.webapp.R;
 import com.hc.webapp.R;
@@ -42,7 +45,9 @@ public abstract class BaseWebActivity extends AppCompatActivity {
     private ImageView noticeImage;
     private ImageView noticeImage;
     protected FrameLayout webViewContainer;
     protected FrameLayout webViewContainer;
     protected boolean hasShowWebView = false;
     protected boolean hasShowWebView = false;
-    protected boolean hasOneFloatViewToShow = true;
+    protected boolean hasOneFloatViewToShow = false;
+    private boolean isShowNoNet = false;
+
     /**
     /**
      * JS调用对象名
      * JS调用对象名
      */
      */
@@ -111,12 +116,20 @@ public abstract class BaseWebActivity extends AppCompatActivity {
 
 
     }
     }
 
 
+    protected void GdToast(final String msg){
+        runOnUiThread(new Runnable() {
+            @Override
+            public void run() {
+                BToast.showToast(BaseWebActivity.this,msg,Toast.LENGTH_SHORT);
+            }
+        });
+    }
+
     //检查网络是否可用,add by 许林2018/12/5
     //检查网络是否可用,add by 许林2018/12/5
     public boolean isNetworkAvailable(Context context) {
     public boolean isNetworkAvailable(Context context) {
         ConnectivityManager manager = (ConnectivityManager) context
         ConnectivityManager manager = (ConnectivityManager) context
                 .getApplicationContext().getSystemService(
                 .getApplicationContext().getSystemService(
                         Context.CONNECTIVITY_SERVICE);
                         Context.CONNECTIVITY_SERVICE);
-
         if (manager == null) {
         if (manager == null) {
             return false;
             return false;
         }
         }
@@ -206,10 +219,10 @@ public abstract class BaseWebActivity extends AppCompatActivity {
 
 
     private void CheckNetWorkLoop(CheckNetWorkListener listener){
     private void CheckNetWorkLoop(CheckNetWorkListener listener){
         if(!isNetworkAvailable(this)){
         if(!isNetworkAvailable(this)){
-            showNoNetImage();
             new Timer().schedule(new TimerTask() {
             new Timer().schedule(new TimerTask() {
                 @Override
                 @Override
                 public void run() {
                 public void run() {
+                    showNoNetImage();
                     CheckNetWorkLoop(listener);
                     CheckNetWorkLoop(listener);
                 }
                 }
             },5000);
             },5000);
@@ -228,17 +241,15 @@ public abstract class BaseWebActivity extends AppCompatActivity {
         super.onCreate(savedInstanceState);
         super.onCreate(savedInstanceState);
 
 
         setContentView(R.layout.activity_main);
         setContentView(R.layout.activity_main);
-        //hasOneFloatViewToShow = true;
+        hasOneFloatViewToShow = true;
         if (getIntent() != null) {
         if (getIntent() != null) {
             handleIntent(getIntent());
             handleIntent(getIntent());
         }
         }
 
 
-
         webViewContainer = findViewById(R.id.webview_container);
         webViewContainer = findViewById(R.id.webview_container);
         background = findViewById(R.id.background);
         background = findViewById(R.id.background);
         noticeImage = findViewById(R.id.notice_image);
         noticeImage = findViewById(R.id.notice_image);
 
 
-
         webView = new WebView(this);
         webView = new WebView(this);
         webView.setBackgroundColor(ContextCompat.getColor(this, android.R.color.transparent));
         webView.setBackgroundColor(ContextCompat.getColor(this, android.R.color.transparent));
 //        webView.setBackgroundResource(R.drawable.img_start_bg);
 //        webView.setBackgroundResource(R.drawable.img_start_bg);
@@ -257,6 +268,7 @@ public abstract class BaseWebActivity extends AppCompatActivity {
                         BaseWebActivity.this.runOnUiThread(new Runnable() {
                         BaseWebActivity.this.runOnUiThread(new Runnable() {
                             @Override
                             @Override
                             public void run() {
                             public void run() {
+                                Log.d("SXYD","load url 1");
                                 webView.loadUrl(getIndexURL());
                                 webView.loadUrl(getIndexURL());
                                 registerReceiver();
                                 registerReceiver();
                             }
                             }
@@ -268,12 +280,17 @@ public abstract class BaseWebActivity extends AppCompatActivity {
             });
             });
         }else{
         }else{
             setShouldOverrideBackPressToJS(true);
             setShouldOverrideBackPressToJS(true);
+            Log.d("SXYD","load url 2");
             webView.loadUrl(getIndexURL());
             webView.loadUrl(getIndexURL());
             registerReceiver();
             registerReceiver();
         }
         }
 
 
     }
     }
 
 
+    private void checkLoop(){
+
+    }
+
     /*
     /*
     * add by xulin 20181221 start
     * add by xulin 20181221 start
     * */
     * */
@@ -298,6 +315,7 @@ public abstract class BaseWebActivity extends AppCompatActivity {
                 destroyWebView();
                 destroyWebView();
                 destroyVideoView();
                 destroyVideoView();
                 noticeImage.setVisibility(View.VISIBLE);
                 noticeImage.setVisibility(View.VISIBLE);
+                isShowNoNet = true;
             }
             }
         });
         });
     };
     };
@@ -314,7 +332,10 @@ public abstract class BaseWebActivity extends AppCompatActivity {
         BaseWebActivity.this.runOnUiThread(new Runnable() {
         BaseWebActivity.this.runOnUiThread(new Runnable() {
             @Override
             @Override
             public void run() {
             public void run() {
-                reloadWebView();
+                if(isShowNoNet){
+                    reloadWebView();
+                }
+                isShowNoNet = false;
                 noticeImage.setVisibility(View.VISIBLE);
                 noticeImage.setVisibility(View.VISIBLE);
             }
             }
         });
         });
@@ -322,6 +343,7 @@ public abstract class BaseWebActivity extends AppCompatActivity {
 
 
     private void reloadWebView(){
     private void reloadWebView(){
         webView.setVisibility(View.VISIBLE);
         webView.setVisibility(View.VISIBLE);
+        Log.d("SXYD","load url 3");
         webView.loadUrl(getIndexURL());
         webView.loadUrl(getIndexURL());
     }
     }
 
 
@@ -369,11 +391,13 @@ public abstract class BaseWebActivity extends AppCompatActivity {
                 webView.setVisibility(View.VISIBLE);
                 webView.setVisibility(View.VISIBLE);
                 if(hasOneFloatViewToShow){
                 if(hasOneFloatViewToShow){
                     delayShowFloatView();
                     delayShowFloatView();
+                    hasOneFloatViewToShow = false;
                 }
                 }
             }
             }
 
 
             @Override
             @Override
             public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
             public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
+                GdToast("网络连接异常,请检查网络或联系96766");
             }
             }
         });
         });
 
 

+ 5 - 0
app/src/main/res/drawable/toast_back.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android" >
+    <corners android:radius="12dp" />
+    <solid android:color="#b2000000"/>
+</shape>

+ 1 - 0
app/src/main/res/layout/activity_main.xml

@@ -22,4 +22,5 @@
             android:src="@drawable/notice"
             android:src="@drawable/notice"
             android:visibility="invisible"/>
             android:visibility="invisible"/>
     </RelativeLayout>
     </RelativeLayout>
+
 </FrameLayout>
 </FrameLayout>

+ 21 - 0
app/src/main/res/layout/toast_layout.xml

@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="wrap_content"
+    android:layout_height="wrap_content"
+    android:background="@drawable/toast_back"
+    android:gravity="center_vertical"
+    android:padding="16dp"
+    android:orientation="vertical" >
+
+    <TextView
+        android:id="@+id/toast_text"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_gravity="center_horizontal"
+        android:layout_marginLeft="10dp"
+        android:layout_marginRight="10dp"
+        android:textColor="#FFFFFF"
+        android:gravity="center"
+        android:textSize="30sp" />
+
+</LinearLayout>

+ 2 - 0
lib/src/main/java/com/hc/lib/video/IVideoPlayer.java

@@ -42,4 +42,6 @@ public interface IVideoPlayer {
     void onVideoDestroy();
     void onVideoDestroy();
 
 
     void restart();
     void restart();
+
+    boolean getIsPrepared();
 }
 }

+ 45 - 20
lib/src/main/java/com/hc/lib/video/MVideoPlayer.java

@@ -21,7 +21,6 @@ import com.jewel.mplayer.CoreVideoView;
 import com.jewel.mplayer.OnVideoChangeListener;
 import com.jewel.mplayer.OnVideoChangeListener;
 import com.jewel.mplayer.content.VideoData;
 import com.jewel.mplayer.content.VideoData;
 import com.jewel.mplayer.system.SystemVideoView;
 import com.jewel.mplayer.system.SystemVideoView;
-import com.orhanobut.logger.Logger;
 
 
 import java.util.Calendar;
 import java.util.Calendar;
 import java.util.Timer;
 import java.util.Timer;
@@ -45,10 +44,6 @@ public class MVideoPlayer extends FrameLayout implements IVideoPlayer{
     private boolean needSeek = false;
     private boolean needSeek = false;
 
 
 
 
-    //private ErrorLisenter errorLisenter;
-
-
-
     private VideoHideControlViewRunnable videoHideControlViewRunnable;
     private VideoHideControlViewRunnable videoHideControlViewRunnable;
     private OnPlayerPausedListener onPlayerPausedListener;
     private OnPlayerPausedListener onPlayerPausedListener;
 
 
@@ -76,6 +71,7 @@ public class MVideoPlayer extends FrameLayout implements IVideoPlayer{
 
 
 
 
 
 
+
     public void setMargins (int l, int t, int r, int b) {
     public void setMargins (int l, int t, int r, int b) {
         if (videoView.getLayoutParams() instanceof ViewGroup.MarginLayoutParams) {
         if (videoView.getLayoutParams() instanceof ViewGroup.MarginLayoutParams) {
             ViewGroup.MarginLayoutParams p = (ViewGroup.MarginLayoutParams) videoView.getLayoutParams();
             ViewGroup.MarginLayoutParams p = (ViewGroup.MarginLayoutParams) videoView.getLayoutParams();
@@ -84,6 +80,8 @@ public class MVideoPlayer extends FrameLayout implements IVideoPlayer{
         }
         }
     }
     }
 
 
+
+
     public MVideoPlayer(Context context) {
     public MVideoPlayer(Context context) {
         super(context);
         super(context);
 
 
@@ -113,7 +111,7 @@ public class MVideoPlayer extends FrameLayout implements IVideoPlayer{
                     mProgress = progress;
                     mProgress = progress;
                 }*/
                 }*/
                 mProgress = progress;
                 mProgress = progress;
-                Log.d(TAG,"progress:" + progress);
+                ////Log.d(TAG,"progress:" + progress);
                 percentText.setText(mProgress/10 + "%");
                 percentText.setText(mProgress/10 + "%");
 
 
                 if(progress<=0){
                 if(progress<=0){
@@ -176,7 +174,7 @@ public class MVideoPlayer extends FrameLayout implements IVideoPlayer{
                     if (seekTime >= duration) {
                     if (seekTime >= duration) {
                         return;
                         return;
                     }
                     }
-                    Logger.d("视频开始播放时快进时长:%s秒", seekTime);
+                    //Logger.d("视频开始播放时快进时长:%s秒", seekTime);
                     videoView.seekTo(seekTime);
                     videoView.seekTo(seekTime);
                 }
                 }
             }
             }
@@ -210,12 +208,11 @@ public class MVideoPlayer extends FrameLayout implements IVideoPlayer{
                 if(videoView == null || videoView.getVideo() == null) {
                 if(videoView == null || videoView.getVideo() == null) {
                     return;
                     return;
                 }
                 }
-                Logger.d("视频结束播放,时长(%s秒), 视频id(%s)", videoView.getVideo().getCurrentPosition(), videoView.getVideo().getId());
+                //Logger.d("视频结束播放,时长(%s秒), 视频id(%s)", videoView.getVideo().getCurrentPosition(), videoView.getVideo().getId());
             }
             }
 
 
             @Override
             @Override
             public void onVideoError(CoreVideoView coreVideoView, int errorCode, String msg) {
             public void onVideoError(CoreVideoView coreVideoView, int errorCode, String msg) {
-                //errorLisenter.onError();
             }
             }
         });
         });
     }
     }
@@ -235,6 +232,9 @@ public class MVideoPlayer extends FrameLayout implements IVideoPlayer{
                 showControlWidget();
                 showControlWidget();
             }
             }
         }
         }
+        if(layoutLoading != null){
+            layoutLoading.setVisibility(VISIBLE);
+        }
     }
     }
 
 
     public void start() {
     public void start() {
@@ -297,7 +297,7 @@ public class MVideoPlayer extends FrameLayout implements IVideoPlayer{
      */
      */
     private void initTimer(){
     private void initTimer(){
         if(mainActivity == null){
         if(mainActivity == null){
-            Log.d(TAG,"请向播放器传递activity实例");
+            ////Log.d(TAG,"请向播放器传递activity实例");
             return;
             return;
         }
         }
         if(timer == null){
         if(timer == null){
@@ -312,8 +312,13 @@ public class MVideoPlayer extends FrameLayout implements IVideoPlayer{
                         long myCurrentTime = Calendar.getInstance().getTimeInMillis();
                         long myCurrentTime = Calendar.getInstance().getTimeInMillis();
                         if(myCurrentTime - currentTime > 3){
                         if(myCurrentTime - currentTime > 3){
                             int position = seekBar.getProgress();
                             int position = seekBar.getProgress();
-                            position = position* getDuration()/1000;
-                            Log.d(TAG,"finally seek position:" + position);
+                            ////Log.d(TAG,"seek bar progress:" + position);
+                            int duration = getDuration();
+                            ////Log.d(TAG,"duration:" + duration);
+                            float fPostion = position;
+                            float fDuration = duration;
+                            position = (int)(fPostion*fDuration/1000);
+                            ////Log.d(TAG,"finally seek position:" + position);
                             seekTo(position);
                             seekTo(position);
                             seekContainer.setVisibility(GONE);
                             seekContainer.setVisibility(GONE);
                         }
                         }
@@ -334,7 +339,7 @@ public class MVideoPlayer extends FrameLayout implements IVideoPlayer{
 
 
     @Override
     @Override
     public boolean onKeyDown(int keyCode, KeyEvent event) {
     public boolean onKeyDown(int keyCode, KeyEvent event) {
-        Logger.d("HCVideoPlayer onKeyDown start: %s, %s", keyCode, event.getAction());
+        //Logger.d("HCVideoPlayer onKeyDown start: %s, %s", keyCode, event.getAction());
         switch (keyCode) {
         switch (keyCode) {
             case KeyEvent.KEYCODE_DPAD_LEFT:
             case KeyEvent.KEYCODE_DPAD_LEFT:
                 /*if (event.getAction() == KeyEvent.ACTION_DOWN) {
                 /*if (event.getAction() == KeyEvent.ACTION_DOWN) {
@@ -376,18 +381,22 @@ public class MVideoPlayer extends FrameLayout implements IVideoPlayer{
                 break;
                 break;
             case KeyEvent.KEYCODE_DPAD_CENTER:
             case KeyEvent.KEYCODE_DPAD_CENTER:
                 if (event.getAction() == KeyEvent.ACTION_DOWN) {
                 if (event.getAction() == KeyEvent.ACTION_DOWN) {
-                    pauseOrPlay(false);
+                    if(videoView.isPlaying()){
+                        pauseOrPlay(false);
+                    }
                 }
                 }
                 break;
                 break;
             case KeyEvent.KEYCODE_ENTER:
             case KeyEvent.KEYCODE_ENTER:
                 if (event.getAction() == KeyEvent.ACTION_DOWN) {
                 if (event.getAction() == KeyEvent.ACTION_DOWN) {
-                    pauseOrPlay(false);
+                    if(videoView.isPlaying()){
+                        pauseOrPlay(false);
+                    }
                 }
                 }
                 break;
                 break;
             default:
             default:
                 break;
                 break;
         }
         }
-        Logger.d("HCVideoPlayer onKeyDown end: %s", keyCode);
+        //Logger.d("HCVideoPlayer onKeyDown end: %s", keyCode);
         return super.onKeyDown(keyCode, event);
         return super.onKeyDown(keyCode, event);
     }
     }
 
 
@@ -405,7 +414,12 @@ public class MVideoPlayer extends FrameLayout implements IVideoPlayer{
                 public void run() {
                 public void run() {
                     hideAllWidget();
                     hideAllWidget();
                     seekContainer.setVisibility(VISIBLE);
                     seekContainer.setVisibility(VISIBLE);
-                    int position = (videoView.getCurrentPositionWhenPlaying() * 1000)/ videoView.getDuration();
+                    int currentPos = videoView.getCurrentPositionWhenPlaying();
+                    //Log.d(TAG,"seekBack currentPos:" + currentPos);
+                    int durationSec = videoView.getDuration()/1000;
+                    //Log.d(TAG,"durationSec:" + durationSec);
+                    int position = currentPos/ durationSec;
+                    //Log.d(TAG,"seekBack back position:" + position);
                     seekBar.setProgress(position);
                     seekBar.setProgress(position);
                     currentTime =Calendar.getInstance().getTimeInMillis();
                     currentTime =Calendar.getInstance().getTimeInMillis();
                 }
                 }
@@ -430,7 +444,13 @@ public class MVideoPlayer extends FrameLayout implements IVideoPlayer{
                 public void run() {
                 public void run() {
                     hideAllWidget();
                     hideAllWidget();
                     seekContainer.setVisibility(VISIBLE);
                     seekContainer.setVisibility(VISIBLE);
-                    int position = (videoView.getCurrentPositionWhenPlaying() * 1000)/ videoView.getDuration();
+                    //float currentPos = (float)videoView.getCurrentPositionWhenPlaying()*1000;
+                    int currentPos = videoView.getCurrentPositionWhenPlaying();
+                    //Log.d(TAG,"seekForward currentPos:" + currentPos);
+                    int durationSec = videoView.getDuration()/1000;
+                    //Log.d(TAG,"durationSec:" + durationSec);
+                    int position = currentPos/ durationSec;
+                    //Log.d(TAG,"seekForward forward position:" + position);
                     seekBar.setProgress(position);
                     seekBar.setProgress(position);
                     currentTime =Calendar.getInstance().getTimeInMillis();
                     currentTime =Calendar.getInstance().getTimeInMillis();
                 }
                 }
@@ -438,7 +458,7 @@ public class MVideoPlayer extends FrameLayout implements IVideoPlayer{
         }
         }
 
 
         int position = seekBar.getProgress() + seekPercent* 10;
         int position = seekBar.getProgress() + seekPercent* 10;
-        Log.d(TAG,"seek position:" + position);
+        ////Log.d(TAG,"seek position:" + position);
         seek(position);
         seek(position);
     }
     }
 
 
@@ -526,8 +546,10 @@ public class MVideoPlayer extends FrameLayout implements IVideoPlayer{
     }
     }
 
 
     @Override
     @Override
-    public void pauseOrPlay(boolean play) {
+    public boolean getIsPrepared(){return this.isPrepared;}
 
 
+    @Override
+    public void pauseOrPlay(boolean play) {
         if (videoView.isPlaying() && play) { //已是播放状态,忽略
         if (videoView.isPlaying() && play) { //已是播放状态,忽略
             return;
             return;
         }
         }
@@ -546,6 +568,9 @@ public class MVideoPlayer extends FrameLayout implements IVideoPlayer{
         }
         }
     }
     }
 
 
+
+
+
     @Override
     @Override
     public void onVideoResume() {
     public void onVideoResume() {
         videoView.resume();
         videoView.resume();

+ 11 - 0
lib/src/main/res/drawable/my_progressbar.xml

@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8"?>
+<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
+    <item>
+        <rotate
+            android:drawable="@drawable/my_ring"
+            android:pivotX="50%"
+            android:pivotY="50%"
+            android:fromDegrees="0"
+            android:toDegrees="1080"/>
+    </item>
+</layer-list>

+ 11 - 0
lib/src/main/res/drawable/my_ring.xml

@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android"
+    android:shape="ring"
+    android:thickness="@dimen/ring_width"
+    android:useLevel="false" >
+    <gradient
+        android:endColor="#888888"
+        android:startColor="#cccccc"
+        android:type="sweep"
+        android:useLevel="false" />
+</shape>

+ 1 - 0
lib/src/main/res/layout/layout_m_player.xml

@@ -26,6 +26,7 @@
             android:id="@+id/loading_animation"
             android:id="@+id/loading_animation"
             android:layout_width="@dimen/player_loading_image_width"
             android:layout_width="@dimen/player_loading_image_width"
             android:layout_height="@dimen/player_loading_image_height"
             android:layout_height="@dimen/player_loading_image_height"
+            android:indeterminateDrawable="@drawable/my_progressbar"
             android:layout_gravity="center" />
             android:layout_gravity="center" />
     </FrameLayout>
     </FrameLayout>
 
 

+ 1 - 0
lib/src/main/res/values-hdpi/dimens.xml

@@ -707,4 +707,5 @@
     <dimen name="video_bottom_padding">50.0dp</dimen>
     <dimen name="video_bottom_padding">50.0dp</dimen>
 
 
     <dimen name="video_bottom_text_margin">5.0dp</dimen>
     <dimen name="video_bottom_text_margin">5.0dp</dimen>
+    <dimen name="ring_width">5.0dp</dimen>
 </resources>
 </resources>

+ 1 - 0
lib/src/main/res/values-ldpi/dimens.xml

@@ -707,4 +707,5 @@
     <dimen name="video_bottom_padding">100.0dp</dimen>
     <dimen name="video_bottom_padding">100.0dp</dimen>
 
 
     <dimen name="video_bottom_text_margin">10.0dp</dimen>
     <dimen name="video_bottom_text_margin">10.0dp</dimen>
+    <dimen name="ring_width">10.0dp</dimen>
 </resources>
 </resources>

+ 1 - 0
lib/src/main/res/values-mdpi-1280x720/dimens.xml

@@ -707,4 +707,5 @@
     <dimen name="video_bottom_padding">50.0dp</dimen>
     <dimen name="video_bottom_padding">50.0dp</dimen>
 
 
     <dimen name="video_bottom_text_margin">5.0dp</dimen>
     <dimen name="video_bottom_text_margin">5.0dp</dimen>
+    <dimen name="ring_width">5.0dp</dimen>
 </resources>
 </resources>

+ 1 - 0
lib/src/main/res/values-mdpi-1920x1080/dimens.xml

@@ -707,4 +707,5 @@
     <dimen name="video_bottom_padding">75.0dp</dimen>
     <dimen name="video_bottom_padding">75.0dp</dimen>
 
 
     <dimen name="video_bottom_text_margin">7.5dp</dimen>
     <dimen name="video_bottom_text_margin">7.5dp</dimen>
+    <dimen name="ring_width">7.5dp</dimen>
 </resources>
 </resources>

+ 1 - 0
lib/src/main/res/values-xhdpi/dimens.xml

@@ -707,4 +707,5 @@
     <dimen name="video_bottom_padding">37.5dp</dimen>
     <dimen name="video_bottom_padding">37.5dp</dimen>
 
 
     <dimen name="video_bottom_text_margin">3.75dp</dimen>
     <dimen name="video_bottom_text_margin">3.75dp</dimen>
+    <dimen name="ring_width">3.75dp</dimen>
 </resources>
 </resources>

+ 1 - 0
lib/src/main/res/values-xxhdpi/dimens.xml

@@ -707,4 +707,5 @@
     <dimen name="video_bottom_padding">25.0dp</dimen>
     <dimen name="video_bottom_padding">25.0dp</dimen>
 
 
     <dimen name="video_bottom_text_margin">2.5dp</dimen>
     <dimen name="video_bottom_text_margin">2.5dp</dimen>
+    <dimen name="ring_width">2.5dp</dimen>
 </resources>
 </resources>

+ 1 - 0
lib/src/main/res/values-xxxhdpi/dimens.xml

@@ -707,4 +707,5 @@
     <dimen name="video_bottom_padding">18.75dp</dimen>
     <dimen name="video_bottom_padding">18.75dp</dimen>
 
 
     <dimen name="video_bottom_text_margin">1.875dp</dimen>
     <dimen name="video_bottom_text_margin">1.875dp</dimen>
+    <dimen name="ring_width">1.875dp</dimen>
 </resources>
 </resources>

+ 15 - 0
model/src/main/java/com/hc/request/Config.java

@@ -40,6 +40,11 @@ public final class Config {
          * 删除观看历史,我的收藏
          * 删除观看历史,我的收藏
          */
          */
         public static final String COLLECT_CANCEL = BASE + "/index.php?m=Home&c=TvApi&a=delWatchCollectLog";
         public static final String COLLECT_CANCEL = BASE + "/index.php?m=Home&c=TvApi&a=delWatchCollectLog";
+
+        /**
+         * 更新支付状态
+         */
+        public static final String NOTIFY_PAY = BASE + "/index.php?m=Home&c=TvApi&a=OnNotify";
     }
     }
 
 
     /**
     /**
@@ -60,6 +65,16 @@ public final class Config {
          * 请求为{@link URL#COLLECT}时,对应值为{@link VALUES#COLLECT_TYPE_COLLECTION}和{@link VALUES#COLLECT_TYPE_HISTORY}
          * 请求为{@link URL#COLLECT}时,对应值为{@link VALUES#COLLECT_TYPE_COLLECTION}和{@link VALUES#COLLECT_TYPE_HISTORY}
          */
          */
         public static final String TYPE = "type";
         public static final String TYPE = "type";
+
+        /**
+         * 订单号
+         */
+        public static final String ORDER_NUM = "orderNum";
+
+        /**
+         * 计费结果状态
+         */
+        public static final String STATUS= "status";
     }
     }
 
 
     /**
     /**

+ 3 - 0
model/src/main/java/com/hc/request/core/CallServer.java

@@ -1,6 +1,7 @@
 package com.hc.request.core;
 package com.hc.request.core;
 
 
 import android.support.annotation.NonNull;
 import android.support.annotation.NonNull;
+import android.util.Log;
 
 
 import com.yanzhenjie.nohttp.NoHttp;
 import com.yanzhenjie.nohttp.NoHttp;
 import com.yanzhenjie.nohttp.rest.OnResponseListener;
 import com.yanzhenjie.nohttp.rest.OnResponseListener;
@@ -59,6 +60,8 @@ public class CallServer {
                     return;
                     return;
                 }
                 }
                 T result = response.get();
                 T result = response.get();
+                Log.d("SXGD","response get:" + response.get());
+                Log.d("SXGD","response:" + response.toString());
                 if (result == null) {
                 if (result == null) {
                     callback.onFail(what, "返回数据为空");
                     callback.onFail(what, "返回数据为空");
                     return;
                     return;

+ 39 - 0
model/src/main/java/com/hc/request/core/parse/FastGetRequest.java

@@ -0,0 +1,39 @@
+package com.hc.request.core.parse;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.TypeReference;
+import com.hc.model.BaseResponse;
+import com.yanzhenjie.nohttp.Headers;
+import com.yanzhenjie.nohttp.RequestMethod;
+import com.yanzhenjie.nohttp.rest.Request;
+import com.yanzhenjie.nohttp.rest.StringRequest;
+
+import java.lang.reflect.Type;
+
+/**
+ * @author Jewel
+ * @version 1.0
+ * @since 2018/04/02
+ */
+public class FastGetRequest<T> extends Request<BaseResponse<T>> {
+
+    private Class<T> clz;
+    private final Type type ;
+
+    public FastGetRequest(String url, Class<T> clz) {
+        this(url, RequestMethod.GET, clz);
+    }
+
+    public FastGetRequest(String url, RequestMethod requestMethod, Class<T> clz) {
+        super(url, requestMethod);
+        setAccept(Headers.HEAD_VALUE_CONTENT_TYPE_URLENCODED);
+        type = new TypeReference<BaseResponse<T>>(clz){}.getType();
+    }
+
+
+    @Override
+    public BaseResponse<T> parseResponse(Headers responseHeaders, byte[] responseBody) {
+        String result = StringRequest.parseResponseString(responseHeaders, responseBody);
+        return JSON.parseObject(result, type);
+    }
+}

+ 1 - 0
model/src/main/java/com/hc/request/core/parse/FastJsonRequest.java

@@ -30,6 +30,7 @@ public class FastJsonRequest<T> extends Request<BaseResponse<T>> {
         type = new TypeReference<BaseResponse<T>>(clz){}.getType();
         type = new TypeReference<BaseResponse<T>>(clz){}.getType();
     }
     }
 
 
+
     @Override
     @Override
     public BaseResponse<T> parseResponse(Headers responseHeaders, byte[] responseBody) {
     public BaseResponse<T> parseResponse(Headers responseHeaders, byte[] responseBody) {
         String result = StringRequest.parseResponseString(responseHeaders, responseBody);
         String result = StringRequest.parseResponseString(responseHeaders, responseBody);

+ 1 - 1
model/src/main/java/com/hc/viewmodel/SingleLiveEvent.java

@@ -28,7 +28,7 @@ public class SingleLiveEvent<T> extends MutableLiveData<T> {
     @Override
     @Override
     public void observe(@NonNull LifecycleOwner owner, @NonNull final Observer<T> observer) {
     public void observe(@NonNull LifecycleOwner owner, @NonNull final Observer<T> observer) {
         if (hasActiveObservers()) {
         if (hasActiveObservers()) {
-            Log.w(TAG, "Multiple observers registered but only one will be notified of changes.");
+            //Log.w(TAG, "Multiple observers registered but only one will be notified of changes.");
         }
         }
         super.observe(owner, new Observer<T>() {
         super.observe(owner, new Observer<T>() {
                     @Override
                     @Override