Explorar o código

commit by xulin
20180926

lyn %!s(int64=6) %!d(string=hai) anos
pai
achega
a5fb0b8407
Modificáronse 32 ficheiros con 1090 adicións e 65 borrados
  1. 2 2
      app/build.gradle
  2. BIN=BIN
      app/release/djbl109.apk
  3. BIN=BIN
      app/release/djbl110.apk
  4. 1 1
      app/release/output.json
  5. 9 5
      app/src/main/AndroidManifest.xml
  6. 39 5
      app/src/main/java/com/guangzhou/haochuan/jxtv/activity/CntvPlayerActivity.java
  7. 39 1
      app/src/main/java/com/guangzhou/haochuan/jxtv/activity/DjblPayActivity.java
  8. 120 31
      app/src/main/java/com/guangzhou/haochuan/jxtv/activity/MainActivity.java
  9. 53 5
      app/src/main/java/com/guangzhou/haochuan/jxtv/activity/LoginActivity.java
  10. 126 6
      app/src/main/java/com/guangzhou/haochuan/jxtv/activity/PayActivity.java
  11. 273 0
      app/src/main/java/com/guangzhou/haochuan/jxtv/activity/StartVideoActivity.java
  12. 35 0
      app/src/main/java/com/guangzhou/haochuan/jxtv/model/MiniVideo.java
  13. 19 0
      app/src/main/java/com/guangzhou/haochuan/jxtv/model/UvRequestResult.java
  14. 22 0
      app/src/main/java/com/guangzhou/haochuan/jxtv/util/FileUtil.java
  15. 4 2
      app/src/main/java/com/guangzhou/haochuan/jxtv/util/HCQuery.java
  16. 14 2
      app/src/main/java/com/guangzhou/haochuan/jxtv/util/LocalHttpRequest.java
  17. 20 0
      app/src/main/java/com/guangzhou/haochuan/jxtv/util/UrlManager.java
  18. 70 0
      app/src/main/java/com/guangzhou/haochuan/jxtv/viewModel/MiniVideoViewModel.java
  19. 87 0
      app/src/main/java/com/guangzhou/haochuan/jxtv/viewModel/UvRequestViewModel.java
  20. 13 0
      app/src/main/java/com/guangzhou/haochuan/jxtv/web/retrofitFactory/MiniVideoFactory.java
  21. 11 0
      app/src/main/java/com/guangzhou/haochuan/jxtv/web/retrofitFactory/UvRequestFactory.java
  22. 15 0
      app/src/main/java/com/guangzhou/haochuan/jxtv/web/retrofitService/MiniVideoService.java
  23. 16 0
      app/src/main/java/com/guangzhou/haochuan/jxtv/web/retrofitService/UvRequestService.java
  24. 4 5
      app/src/main/res/layout/activity_main.xml
  25. 42 0
      app/src/main/res/layout/activity_start_video.xml
  26. 8 0
      app/src/main/res/values-hdpi/dimens.xml
  27. 8 0
      app/src/main/res/values-ldpi/dimens.xml
  28. 8 0
      app/src/main/res/values-mdpi-1280x720/dimens.xml
  29. 8 0
      app/src/main/res/values-mdpi-1920x1080/dimens.xml
  30. 8 0
      app/src/main/res/values-xhdpi/dimens.xml
  31. 8 0
      app/src/main/res/values-xxhdpi/dimens.xml
  32. 8 0
      app/src/main/res/values-xxxhdpi/dimens.xml

+ 2 - 2
app/build.gradle

@@ -7,8 +7,8 @@ android {
         applicationId "com.guangzhou.haochuan.jxtv"
         applicationId "com.guangzhou.haochuan.jxtv"
         minSdkVersion 16
         minSdkVersion 16
         targetSdkVersion 27
         targetSdkVersion 27
-        versionCode 9
-        versionName "1.0.9"
+        versionCode 12
+        versionName "1.1.2"
         testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
         testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
         ndk {
         ndk {
             abiFilters "armeabi-v7a"
             abiFilters "armeabi-v7a"

BIN=BIN
app/release/djbl109.apk


BIN=BIN
app/release/djbl110.apk


+ 1 - 1
app/release/output.json

@@ -1 +1 @@
-[{"outputType":{"type":"APK"},"apkInfo":{"type":"MAIN","splits":[],"versionCode":9},"path":"app-release.apk","properties":{"packageId":"com.guangzhou.haochuan.jxtv","split":"","minSdkVersion":"16"}}]
+[{"outputType":{"type":"APK"},"apkInfo":{"type":"MAIN","splits":[],"versionCode":12},"path":"app-release.apk","properties":{"packageId":"com.guangzhou.haochuan.jxtv","split":"","minSdkVersion":"16"}}]

+ 9 - 5
app/src/main/AndroidManifest.xml

@@ -4,6 +4,7 @@
 
 
     <!-- app所需权限 -->
     <!-- app所需权限 -->
     <uses-permission android:name="android.permission.INTERNET" />
     <uses-permission android:name="android.permission.INTERNET" />
+    <uses-permission android:name="android.permission.KILL_BACKGROUND_PROCESSES" />
     <uses-permission android:name="android.permission.RECORD_AUDIO" />
     <uses-permission android:name="android.permission.RECORD_AUDIO" />
     <uses-permission android:name="android.permission.WAKE_LOCK" />
     <uses-permission android:name="android.permission.WAKE_LOCK" />
     <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
     <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
@@ -36,24 +37,27 @@
         android:supportsRtl="true"
         android:supportsRtl="true"
         android:theme="@style/AppTheme">
         android:theme="@style/AppTheme">
         <activity
         <activity
-            android:name=".activity.MainActivity"
+            android:name=".activity.DjblWebActivity"
             android:hardwareAccelerated="true"
             android:hardwareAccelerated="true"
-            android:launchMode="singleTop"
-            android:process=":remote"
+            android:launchMode="singleTask"
             android:screenOrientation="landscape"></activity>
             android:screenOrientation="landscape"></activity>
         <activity
         <activity
             android:name=".activity.LoginActivity"
             android:name=".activity.LoginActivity"
             android:screenOrientation="landscape">
             android:screenOrientation="landscape">
             <intent-filter>
             <intent-filter>
                 <action android:name="android.intent.action.MAIN" />
                 <action android:name="android.intent.action.MAIN" />
+
                 <category android:name="android.intent.category.LAUNCHER" />
                 <category android:name="android.intent.category.LAUNCHER" />
             </intent-filter>
             </intent-filter>
         </activity>
         </activity>
         <activity
         <activity
             android:name=".activity.CntvPlayerActivity"
             android:name=".activity.CntvPlayerActivity"
+            android:process=":remote"
             android:screenOrientation="landscape" />
             android:screenOrientation="landscape" />
-        <activity android:name=".activity.DjblPayActivity"
-            android:screenOrientation="landscape"></activity>
+        <activity
+            android:name=".activity.DjblPayActivity"
+            android:screenOrientation="landscape" />
+        <activity android:name=".activity.StartVideoActivity"></activity>
     </application>
     </application>
 
 
 </manifest>
 </manifest>

+ 39 - 5
app/src/main/java/com/guangzhou/haochuan/jxtv/activity/CntvPlayerActivity.java

@@ -1,9 +1,11 @@
 package com.guangzhou.haochuan.jxtv.activity;
 package com.guangzhou.haochuan.jxtv.activity;
 
 
 import android.app.Activity;
 import android.app.Activity;
+import android.app.ActivityManager;
 import android.app.AlertDialog;
 import android.app.AlertDialog;
 import android.content.DialogInterface;
 import android.content.DialogInterface;
 import android.content.Intent;
 import android.content.Intent;
+import android.content.res.Configuration;
 import android.graphics.drawable.AnimationDrawable;
 import android.graphics.drawable.AnimationDrawable;
 import android.os.Bundle;
 import android.os.Bundle;
 import android.os.Handler;
 import android.os.Handler;
@@ -25,6 +27,7 @@ import com.guangzhou.haochuan.jxtv.util.LocalStore;
 import com.guangzhou.haochuan.jxtv.util.OttLoginUtil;
 import com.guangzhou.haochuan.jxtv.util.OttLoginUtil;
 
 
 import java.util.LinkedHashMap;
 import java.util.LinkedHashMap;
+import java.util.List;
 import java.util.Timer;
 import java.util.Timer;
 import java.util.TimerTask;
 import java.util.TimerTask;
 
 
@@ -83,6 +86,12 @@ public class CntvPlayerActivity extends Activity implements iICntvPlayInterface,
     String TAG = "CntvPlayerActivity";
     String TAG = "CntvPlayerActivity";
 
 
     @Override
     @Override
+    public void onConfigurationChanged(Configuration configuration){
+        super.onConfigurationChanged(configuration);
+    }
+
+
+    @Override
     protected void onCreate(Bundle savedInstanceState) {
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         super.onCreate(savedInstanceState);
         setContentView(R.layout.activity_cntv_player);
         setContentView(R.layout.activity_cntv_player);
@@ -110,6 +119,7 @@ public class CntvPlayerActivity extends Activity implements iICntvPlayInterface,
                                     playerRelease();
                                     playerRelease();
                                     destroyPayTask();
                                     destroyPayTask();
                                     CntvPlayerActivity.this.finish();
                                     CntvPlayerActivity.this.finish();
+                                    System.exit(0);
                                 }
                                 }
                             }).show();
                             }).show();
                 }
                 }
@@ -146,6 +156,7 @@ public class CntvPlayerActivity extends Activity implements iICntvPlayInterface,
         super.onStop();
         super.onStop();
         playerRelease();
         playerRelease();
         destroyPayTask();
         destroyPayTask();
+        killWebProcess();
     }
     }
 
 
     private void getDataFromIntent(){
     private void getDataFromIntent(){
@@ -225,11 +236,16 @@ public class CntvPlayerActivity extends Activity implements iICntvPlayInterface,
         playerContainer = findViewById(R.id.video_view);
         playerContainer = findViewById(R.id.video_view);
         videoTitle.setText(videoTitleValue);
         videoTitle.setText(videoTitleValue);
 
 
-        if(isFee.equals("2")){
-            payNotice.setVisibility(View.VISIBLE);
-        }else if(isFee.equals("1")){
+        if(!LocalStore.getInstance().getIsVip(this)){
+            if(isFee.equals("1")){
+                payNotice.setVisibility(View.INVISIBLE);
+            }else {
+                payNotice.setVisibility(View.VISIBLE);
+            }
+        }else{
             payNotice.setVisibility(View.INVISIBLE);
             payNotice.setVisibility(View.INVISIBLE);
         }
         }
+
         //开启加载动画
         //开启加载动画
         initLoadingAnimation();
         initLoadingAnimation();
     }
     }
@@ -508,7 +524,7 @@ public class CntvPlayerActivity extends Activity implements iICntvPlayInterface,
         duration.setText(convertLongTimeToStr(icntvPlayer.getDuration()));
         duration.setText(convertLongTimeToStr(icntvPlayer.getDuration()));
 
 
         if(!LocalStore.getInstance().getIsVip(this)){
         if(!LocalStore.getInstance().getIsVip(this)){
-            if(isFee.equals("2")){
+            if(!isFee.equals("1")){
                 initPayTimeTask();
                 initPayTimeTask();
             }
             }
         }
         }
@@ -539,6 +555,7 @@ public class CntvPlayerActivity extends Activity implements iICntvPlayInterface,
                                                     setResult(3);
                                                     setResult(3);
                                                     destroyPayTask();
                                                     destroyPayTask();
                                                     CntvPlayerActivity.this.finish();
                                                     CntvPlayerActivity.this.finish();
+                                                    System.exit(0);
                                                 }
                                                 }
                                             });
                                             });
                                         }
                                         }
@@ -607,6 +624,7 @@ public class CntvPlayerActivity extends Activity implements iICntvPlayInterface,
                         playerRelease();
                         playerRelease();
                         destroyPayTask();
                         destroyPayTask();
                         CntvPlayerActivity.this.finish();
                         CntvPlayerActivity.this.finish();
+                        System.exit(0);
                     }
                     }
                 }).show();
                 }).show();
             Toast.makeText(this,"视频超时,退出",Toast.LENGTH_SHORT).show();
             Toast.makeText(this,"视频超时,退出",Toast.LENGTH_SHORT).show();
@@ -708,8 +726,24 @@ public class CntvPlayerActivity extends Activity implements iICntvPlayInterface,
     public void onExit() {
     public void onExit() {
         playerRelease();
         playerRelease();
         destroyPayTask();
         destroyPayTask();
-        setResult(3);
+       // killWebProcess();
         this.finish();
         this.finish();
+        System.exit(0);
+    }
+
+
+    /*
+    * 因为DjblWebActivity是单独一个线程,如果退出的话,必须还要关闭DjblWebActivity线程才能起作用
+    * */
+    private void killWebProcess(){
+        ActivityManager am = (ActivityManager) getSystemService(ACTIVITY_SERVICE);
+        List<ActivityManager.RunningAppProcessInfo> runningAppProcessInfos = am.getRunningAppProcesses();
+        if(!runningAppProcessInfos.get(0).processName.equals("com.guangzhou.haochuan.jxtv")){
+            am.killBackgroundProcesses("com.guangzhou.haochuan.jxtv"); // API Level至少为8才能使用
+            this.finish();
+            System.exit(0);
+        }
+
     }
     }
 
 
     @Override
     @Override

+ 39 - 1
app/src/main/java/com/guangzhou/haochuan/jxtv/activity/DjblPayActivity.java

@@ -1,16 +1,54 @@
 package com.guangzhou.haochuan.jxtv.activity;
 package com.guangzhou.haochuan.jxtv.activity;
 
 
+import android.app.AlertDialog;
+import android.content.DialogInterface;
 import android.os.Bundle;
 import android.os.Bundle;
+import android.util.Log;
+import android.widget.Toast;
 
 
 import com.guangzhou.haochuan.jxtv.R;
 import com.guangzhou.haochuan.jxtv.R;
+import com.guangzhou.haochuan.jxtv.util.LocalHttpRequest;
+import com.ystgame.sdk.billing.api.GameInterface;
+
+import tv.icntv.icntvplayersdk.act.MainActivity;
 
 
 public class DjblPayActivity extends PayActivity {
 public class DjblPayActivity extends PayActivity {
 
 
+    //电信计费参数
+    private int appId = 252;             //唯一用户标识,在AndroidMainfest.xml里的Meta-Data里设置
+    private String appName = "电竞部落";
+    private String providerName = "广州浩传";       //内容提供商
+    private String serviceTel = "020-38468029";
+
     @Override
     @Override
     protected void onCreate(Bundle savedInstanceState) {
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         super.onCreate(savedInstanceState);
         setContentView(R.layout.activity_djbl_pay);
         setContentView(R.layout.activity_djbl_pay);
-        monthPay();
+        //判断当前计费系统是否正常
+        runOnUiThread(new Runnable() {
+            @Override
+            public void run() {
+                try{
+                    GameInterface.initializeApp(DjblPayActivity.this,appId,appName,providerName,serviceTel,new GameInterface.IAppUidCallback(){
+                        @Override
+                        public void onResult(int i, String s) {
+                            switch (i){
+                                case 0:
+                                    monthPay();
+                                    //Toast.makeText(TelecomPayActivity.this,"易视腾初始化成功",Toast.LENGTH_SHORT).show();
+                                    break;
+                                default:
+                                    Toast.makeText(DjblPayActivity.this,"计费失败",Toast.LENGTH_SHORT).show();
+                                    onPayFail();
+                                    break;
+                            }
+                        }
+                    });
+                }catch (Exception e){
+                    e.printStackTrace();
+                }
+            }
+        });
     }
     }
 
 
     @Override
     @Override

+ 120 - 31
app/src/main/java/com/guangzhou/haochuan/jxtv/activity/MainActivity.java

@@ -1,13 +1,21 @@
 package com.guangzhou.haochuan.jxtv.activity;
 package com.guangzhou.haochuan.jxtv.activity;
 
 
 import android.app.Activity;
 import android.app.Activity;
+import android.app.ActivityManager;
+import android.content.Context;
 import android.content.Intent;
 import android.content.Intent;
 import android.content.pm.PackageInfo;
 import android.content.pm.PackageInfo;
 import android.graphics.Bitmap;
 import android.graphics.Bitmap;
 import android.os.Build;
 import android.os.Build;
 import android.os.Bundle;
 import android.os.Bundle;
+import android.os.Process;
+import android.util.Log;
+import android.view.KeyEvent;
+import android.view.MotionEvent;
+import android.view.View;
 import android.view.ViewGroup;
 import android.view.ViewGroup;
 import android.view.WindowManager;
 import android.view.WindowManager;
+import android.view.inputmethod.InputMethodManager;
 import android.webkit.JavascriptInterface;
 import android.webkit.JavascriptInterface;
 import android.webkit.ValueCallback;
 import android.webkit.ValueCallback;
 import android.webkit.WebChromeClient;
 import android.webkit.WebChromeClient;
@@ -25,39 +33,43 @@ import com.android.volley.toolbox.Volley;
 import com.guangzhou.haochuan.jxtv.R;
 import com.guangzhou.haochuan.jxtv.R;
 import com.guangzhou.haochuan.jxtv.model.H5Switch;
 import com.guangzhou.haochuan.jxtv.model.H5Switch;
 import com.guangzhou.haochuan.jxtv.model.LoadingImage;
 import com.guangzhou.haochuan.jxtv.model.LoadingImage;
+import com.guangzhou.haochuan.jxtv.model.MiniVideo;
 import com.guangzhou.haochuan.jxtv.util.FileUtil;
 import com.guangzhou.haochuan.jxtv.util.FileUtil;
 import com.guangzhou.haochuan.jxtv.util.LocalHttpRequest;
 import com.guangzhou.haochuan.jxtv.util.LocalHttpRequest;
 import com.guangzhou.haochuan.jxtv.util.LocalStore;
 import com.guangzhou.haochuan.jxtv.util.LocalStore;
 import com.guangzhou.haochuan.jxtv.util.ScreenUtil;
 import com.guangzhou.haochuan.jxtv.util.ScreenUtil;
+import com.guangzhou.haochuan.jxtv.util.UrlManager;
 import com.guangzhou.haochuan.jxtv.viewModel.DeviceInfoViewModel;
 import com.guangzhou.haochuan.jxtv.viewModel.DeviceInfoViewModel;
 import com.guangzhou.haochuan.jxtv.viewModel.H5SwitchViewModel;
 import com.guangzhou.haochuan.jxtv.viewModel.H5SwitchViewModel;
 import com.guangzhou.haochuan.jxtv.viewModel.LoadingImageViewModel;
 import com.guangzhou.haochuan.jxtv.viewModel.LoadingImageViewModel;
+import com.guangzhou.haochuan.jxtv.viewModel.MiniVideoViewModel;
+import com.ystgame.sdk.billing.api.GameInterface;
 
 
 import java.io.File;
 import java.io.File;
 import java.io.FileNotFoundException;
 import java.io.FileNotFoundException;
 import java.io.FileOutputStream;
 import java.io.FileOutputStream;
 import java.io.IOException;
 import java.io.IOException;
+import java.util.List;
 import java.util.Observable;
 import java.util.Observable;
-import java.util.Observer;
 
 
-public class MainActivity extends PayActivity {
+public class DjblWebActivity extends PayActivity {
 
 
-    String TAG = "MainActivity";
+    String TAG = "DjblWebActivity";
     WebView webView;
     WebView webView;
     int playerRequestCode = 2;
     int playerRequestCode = 2;
-    int payRequestCode = 2;
+    int payRequestCode = 3;
 
 
     Boolean isPlaying = false;
     Boolean isPlaying = false;
+    Boolean isPaying = false;
+    Boolean isExiting = false;
     FrameLayout container;
     FrameLayout container;
     @Override
     @Override
     protected void onCreate(Bundle savedInstanceState) {
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         super.onCreate(savedInstanceState);
         setContentView(R.layout.activity_main);
         setContentView(R.layout.activity_main);
-        getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
         init();
         init();
     }
     }
 
 
-
     @Override
     @Override
     protected void onActivityResult(int requestCode,int resultCode,Intent data){
     protected void onActivityResult(int requestCode,int resultCode,Intent data){
         super.onActivityResult(requestCode,resultCode,data);
         super.onActivityResult(requestCode,resultCode,data);
@@ -69,25 +81,33 @@ public class MainActivity extends PayActivity {
             }
             }
         }else if(requestCode == payRequestCode){
         }else if(requestCode == payRequestCode){
             onPayBack(resultCode);
             onPayBack(resultCode);
+            isPaying = false;
         }
         }
     }
     }
     
     
     private void gotoPayActivity(){
     private void gotoPayActivity(){
+        isPaying = true;
+        if(LocalStore.getInstance().getIsVip(this)){
+            return;
+        }
         Intent intent = new Intent(this,DjblPayActivity.class);
         Intent intent = new Intent(this,DjblPayActivity.class);
-        MainActivity.this.startActivityForResult(intent,payRequestCode);
+        DjblWebActivity.this.startActivityForResult(intent,payRequestCode);
     }
     }
 
 
     private void init(){
     private void init(){
         container = findViewById(R.id.webview_container);
         container = findViewById(R.id.webview_container);
-        String url = "http://117.169.11.222:8000/h5v2/index.html";
-        webView = new WebView(this);
-        container.addView(webView,new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,ViewGroup.LayoutParams.MATCH_PARENT));
+        String url = UrlManager.getInstance().getWebIndexPageUrl();
+        //url = "http://117.169.11.222:8018/tv/h5v2/activity/20180720/index.html";
+        //url= "http://117.169.11.222:8018/tv/h5v2/test.html";
+        webView = findViewById(R.id.h5_web);
+        //container.addView(webView,new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,ViewGroup.LayoutParams.MATCH_PARENT));
         webView.getSettings().setJavaScriptEnabled(true);
         webView.getSettings().setJavaScriptEnabled(true);
         webView.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);
         webView.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);
+        webView.setVisibility(View.INVISIBLE);
         webView.setWebChromeClient(new WebChromeClient() {
         webView.setWebChromeClient(new WebChromeClient() {
             @Override
             @Override
             public void onProgressChanged(WebView view, int progress) {
             public void onProgressChanged(WebView view, int progress) {
-                MainActivity.this.setProgress(progress * 1000);
+                DjblWebActivity.this.setProgress(progress * 1000);
             }
             }
         });
         });
         webView.setWebViewClient(new WebViewClient() {
         webView.setWebViewClient(new WebViewClient() {
@@ -95,11 +115,12 @@ public class MainActivity extends PayActivity {
             public void onPageFinished(WebView view, String url)
             public void onPageFinished(WebView view, String url)
             {
             {
                 super.onPageFinished(view, url);
                 super.onPageFinished(view, url);
+                webView.setVisibility(View.VISIBLE);
             }
             }
 
 
             @Override
             @Override
             public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
             public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
-                Toast.makeText(MainActivity.this, "Oh no! " + description, Toast.LENGTH_SHORT).show();
+                Toast.makeText(DjblWebActivity.this, "Oh no! " + description, Toast.LENGTH_SHORT).show();
             }
             }
         });
         });
         webView.addJavascriptInterface(new AndroidToJs(h5Result),"djbl2");
         webView.addJavascriptInterface(new AndroidToJs(h5Result),"djbl2");
@@ -108,11 +129,13 @@ public class MainActivity extends PayActivity {
         //下载loading图
         //下载loading图
         new LoadingImageViewModel(ScreenUtil.getInstance().getDpiType(this)).addObserver(this);
         new LoadingImageViewModel(ScreenUtil.getInstance().getDpiType(this)).addObserver(this);
 
 
+        //下载miniVideo图
+        new MiniVideoViewModel(ScreenUtil.getInstance().getDpiType(this)).addObserver(this);
 
 
-        //活动开关
+       /* //活动开关
         if(!LocalStore.getInstance().getDeviceInfoSaved(this)){
         if(!LocalStore.getInstance().getDeviceInfoSaved(this)){
             new H5SwitchViewModel().addObserver(this);
             new H5SwitchViewModel().addObserver(this);
-        }
+        }*/
     }
     }
 
 
     String deviceId = "";
     String deviceId = "";
@@ -122,22 +145,22 @@ public class MainActivity extends PayActivity {
         localHttpRequest.getUrls(this, new LocalHttpRequest.GetUrlsListener() {
         localHttpRequest.getUrls(this, new LocalHttpRequest.GetUrlsListener() {
             @Override
             @Override
             public void onFinished() {
             public void onFinished() {
-                localHttpRequest.getParam1(MainActivity.this, new LocalHttpRequest.ResultListener() {
+                localHttpRequest.getParam1(DjblWebActivity.this, new LocalHttpRequest.ResultListener() {
                     @Override
                     @Override
                     public void onResult(String result) {
                     public void onResult(String result) {
                         if(result != null){
                         if(result != null){
                             deviceId = result;
                             deviceId = result;
                         }
                         }
-                        localHttpRequest.getParam2(MainActivity.this, new LocalHttpRequest.ResultListener() {
+                        localHttpRequest.getParam2(DjblWebActivity.this, new LocalHttpRequest.ResultListener() {
                             @Override
                             @Override
                             public void onResult(String result) {
                             public void onResult(String result) {
                                 final String token = result ==null?"":result;
                                 final String token = result ==null?"":result;
-                                localHttpRequest.getParam3(MainActivity.this, new LocalHttpRequest.ResultListener() {
+                                localHttpRequest.getParam3(DjblWebActivity.this, new LocalHttpRequest.ResultListener() {
                                     @Override
                                     @Override
                                     public void onResult(String result) {
                                     public void onResult(String result) {
                                         String phone = result;
                                         String phone = result;
-                                        int isVip = LocalStore.getInstance().getIsVip(MainActivity.this)?1:0;
-                                        String uId = LocalStore.getInstance().getUserId(MainActivity.this);
+                                        int isVip = LocalStore.getInstance().getIsVip(DjblWebActivity.this)?1:0;
+                                        String uId = LocalStore.getInstance().getUserId(DjblWebActivity.this);
                                         new DeviceInfoViewModel(deviceId,phone,token,isVip,uId);
                                         new DeviceInfoViewModel(deviceId,phone,token,isVip,uId);
                                     }
                                     }
                                 });
                                 });
@@ -171,6 +194,26 @@ public class MainActivity extends PayActivity {
         }));
         }));
     }
     }
 
 
+    //下载miniVideo背景图
+    private void downloadMiniVideoImage(String imageUrl){
+        final String path = FileUtil.getInstance().getMiniVideoImageSavePath(this,ScreenUtil.getInstance().getDpiType(this));
+        File file = new File(path);
+        if(file.exists()){
+            file.delete();
+        }
+        Volley.newRequestQueue(this).add(new ImageRequest(imageUrl, new Response.Listener<Bitmap>() {
+            @Override
+            public void onResponse(Bitmap response) {
+                saveImage(path,response);
+            }
+        },2000,2000,ImageView.ScaleType.CENTER, null,new Response.ErrorListener() {
+            @Override
+            public void onErrorResponse(VolleyError error) {
+
+            }
+        }));
+    }
+
     public void saveImage(String imagePath,Bitmap bmp) {
     public void saveImage(String imagePath,Bitmap bmp) {
         File file = new File(imagePath);
         File file = new File(imagePath);
         try {
         try {
@@ -192,10 +235,10 @@ public class MainActivity extends PayActivity {
                 return;
                 return;
             }
             }
             if(!examineStatus.equals("10")){
             if(!examineStatus.equals("10")){
-                Toast.makeText(MainActivity.this,"视频未通过审核,或已下架",Toast.LENGTH_SHORT).show();
+                Toast.makeText(DjblWebActivity.this,"视频未通过审核,或已下架",Toast.LENGTH_SHORT).show();
                 return;
                 return;
             }
             }
-            Intent intent = new Intent(MainActivity.this,CntvPlayerActivity.class);
+            Intent intent = new Intent(DjblWebActivity.this,CntvPlayerActivity.class);
             intent.putExtra("url",url);
             intent.putExtra("url",url);
             intent.putExtra("title",title);
             intent.putExtra("title",title);
             intent.putExtra("sourceId",sourceId);
             intent.putExtra("sourceId",sourceId);
@@ -203,11 +246,12 @@ public class MainActivity extends PayActivity {
             intent.putExtra("examineId",examineId);
             intent.putExtra("examineId",examineId);
             intent.putExtra("examineStatus",examineStatus);
             intent.putExtra("examineStatus",examineStatus);
             intent.putExtra("examineType",examineType);
             intent.putExtra("examineType",examineType);
-            MainActivity.this.startActivityForResult(intent,playerRequestCode);
+            DjblWebActivity.this.startActivityForResult(intent,playerRequestCode);
             isPlaying = true;
             isPlaying = true;
         }
         }
     };
     };
 
 
+
     //将原生Toast包含在UI线程中
     //将原生Toast包含在UI线程中
     private void Toast(final Activity activity, final String msg){
     private void Toast(final Activity activity, final String msg){
         activity.runOnUiThread(new Runnable() {
         activity.runOnUiThread(new Runnable() {
@@ -239,34 +283,34 @@ public class MainActivity extends PayActivity {
 
 
         @JavascriptInterface
         @JavascriptInterface
         public void appExit(){
         public void appExit(){
-            MainActivity.this.runOnUiThread(new Runnable() {
+            DjblWebActivity.this.runOnUiThread(new Runnable() {
                 @Override
                 @Override
                 public void run() {
                 public void run() {
-                    MainActivity.this.finish();
+                    onExit();
                 }
                 }
             });
             });
         }
         }
 
 
         @JavascriptInterface
         @JavascriptInterface
         public String getUser(){
         public String getUser(){
-            return LocalStore.getInstance().getUserId(MainActivity.this);
+            return LocalStore.getInstance().getUserId(DjblWebActivity.this);
         }
         }
 
 
         @JavascriptInterface
         @JavascriptInterface
         public int  getVipState(){
         public int  getVipState(){
-            boolean vipState = LocalStore.getInstance().getIsVip(MainActivity.this);
+            boolean vipState = LocalStore.getInstance().getIsVip(DjblWebActivity.this);
             return vipState?1:-1;
             return vipState?1:-1;
         }
         }
 
 
         @JavascriptInterface
         @JavascriptInterface
         public String getMac(){
         public String getMac(){
-            return LocalStore.getInstance().getMac(MainActivity.this);
+            return LocalStore.getInstance().getMac(DjblWebActivity.this);
         }
         }
 
 
         @JavascriptInterface
         @JavascriptInterface
         public int getVersionCode(){
         public int getVersionCode(){
             try{
             try{
-                PackageInfo packageInfo = MainActivity.this.getPackageManager().getPackageInfo(MainActivity.this.getPackageName(),0);
+                PackageInfo packageInfo = DjblWebActivity.this.getPackageManager().getPackageInfo(DjblWebActivity.this.getPackageName(),0);
                 return packageInfo.versionCode;
                 return packageInfo.versionCode;
             }catch (Exception e){
             }catch (Exception e){
                 e.printStackTrace();
                 e.printStackTrace();
@@ -277,7 +321,7 @@ public class MainActivity extends PayActivity {
         @JavascriptInterface
         @JavascriptInterface
         public String getVersionName(){
         public String getVersionName(){
             try{
             try{
-                PackageInfo packageInfo = MainActivity.this.getPackageManager().getPackageInfo(MainActivity.this.getPackageName(),0);
+                PackageInfo packageInfo = DjblWebActivity.this.getPackageManager().getPackageInfo(DjblWebActivity.this.getPackageName(),0);
                 return packageInfo.versionName;
                 return packageInfo.versionName;
             }catch (Exception e){
             }catch (Exception e){
                 e.printStackTrace();
                 e.printStackTrace();
@@ -286,6 +330,17 @@ public class MainActivity extends PayActivity {
         }
         }
     }
     }
 
 
+    private void onExit(){
+        isExiting = true;
+        GameInterface.finishAllDialog();
+        //GameInterface.exit();
+        this.finish();
+        Intent intent = new Intent(Intent.ACTION_MAIN);
+        intent.addCategory(Intent.CATEGORY_HOME);
+        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+        startActivity(intent);
+    }
+
     @Override
     @Override
     public void onBackPressed() {
     public void onBackPressed() {
         onJsBack();
         onJsBack();
@@ -341,6 +396,30 @@ public class MainActivity extends PayActivity {
                               String isFee,String examineId,String examineStatus,String examineType);
                               String isFee,String examineId,String examineStatus,String examineType);
     }
     }
 
 
+    @Override
+    protected void onStop(){
+        super.onStop();
+         killOriginProcess();
+    }
+
+    /*
+    * 因为本activity是单独一个线程,如果退出的话,必须还要关闭原先线程才能起作用
+    * */
+    private void killOriginProcess(){
+        ActivityManager am = (ActivityManager) getSystemService(ACTIVITY_SERVICE);
+        List<ActivityManager.RunningAppProcessInfo> runningAppProcessInfos = am.getRunningAppProcesses();
+        Log.d("djbl","index 0 pacagename:" + runningAppProcessInfos.get(0).processName);
+        if(!runningAppProcessInfos.get(0).processName.equals("com.guangzhou.haochuan.jxtv")
+                &&!runningAppProcessInfos.get(0).processName.equals("com.guangzhou.haochuan.jxtv:remote")
+                && !isPaying){
+            am.killBackgroundProcesses("com.guangzhou.haochuan.jxtv:remote"); // API Level至少为8才能使用
+            am.killBackgroundProcesses("com.guangzhou.haochuan.jxtv");
+            DjblWebActivity.this.finish();
+            System.exit(0);
+        }
+
+    }
+
 
 
     @Override
     @Override
     protected void onDestroy(){
     protected void onDestroy(){
@@ -362,10 +441,11 @@ public class MainActivity extends PayActivity {
         if(container != null){
         if(container != null){
             container = null;
             container = null;
         }
         }
-
         super.onDestroy();
         super.onDestroy();
     }
     }
 
 
+
+
     @Override
     @Override
     public void update(Observable o, Object arg) {
     public void update(Observable o, Object arg) {
         super.update(o,arg);
         super.update(o,arg);
@@ -375,7 +455,7 @@ public class MainActivity extends PayActivity {
             if(loadingImage.code == 0){
             if(loadingImage.code == 0){
                 downloadLoadingImage(loadingImage.data.imgUrl);
                 downloadLoadingImage(loadingImage.data.imgUrl);
             }
             }
-        }if(o instanceof H5SwitchViewModel){
+        }else if(o instanceof H5SwitchViewModel){
             H5SwitchViewModel h5SwitchViewModel = (H5SwitchViewModel)o;
             H5SwitchViewModel h5SwitchViewModel = (H5SwitchViewModel)o;
             H5Switch h5Switch = h5SwitchViewModel.getH5Switch();
             H5Switch h5Switch = h5SwitchViewModel.getH5Switch();
             if(h5Switch.code == 0){
             if(h5Switch.code == 0){
@@ -383,6 +463,15 @@ public class MainActivity extends PayActivity {
                     saveInfo();
                     saveInfo();
                 }
                 }
             }
             }
+        }else if(o instanceof MiniVideoViewModel){
+            MiniVideoViewModel miniVideoViewModel = (MiniVideoViewModel)o;
+            MiniVideo miniVideo = miniVideoViewModel.getMiniVideo();
+            if(miniVideo.code == 0){
+                MiniVideo.MiniVideoData miniVideoData = miniVideo.data;
+                if(miniVideoData != null){
+                    downloadMiniVideoImage(miniVideoData.videoWindowImage);
+                }
+            }
         }
         }
     }
     }
 }
 }

+ 53 - 5
app/src/main/java/com/guangzhou/haochuan/jxtv/activity/LoginActivity.java

@@ -11,11 +11,13 @@ import android.os.Looper;
 import android.util.Log;
 import android.util.Log;
 import android.widget.RelativeLayout;
 import android.widget.RelativeLayout;
 
 
+import com.guangzhou.haochuan.jxtv.model.MiniVideo;
 import com.guangzhou.haochuan.jxtv.util.FileUtil;
 import com.guangzhou.haochuan.jxtv.util.FileUtil;
 import com.guangzhou.haochuan.jxtv.util.LocalStore;
 import com.guangzhou.haochuan.jxtv.util.LocalStore;
 import com.guangzhou.haochuan.jxtv.util.OttLoginUtil;
 import com.guangzhou.haochuan.jxtv.util.OttLoginUtil;
 import com.guangzhou.haochuan.jxtv.R;
 import com.guangzhou.haochuan.jxtv.R;
 import com.guangzhou.haochuan.jxtv.util.ScreenUtil;
 import com.guangzhou.haochuan.jxtv.util.ScreenUtil;
+import com.guangzhou.haochuan.jxtv.viewModel.MiniVideoViewModel;
 import com.ystgame.sdk.billing.api.GameInterface;
 import com.ystgame.sdk.billing.api.GameInterface;
 import com.ystgame.sdk.billing.api.MonthAuthResult;
 import com.ystgame.sdk.billing.api.MonthAuthResult;
 
 
@@ -23,7 +25,7 @@ import java.io.File;
 import java.util.Observable;
 import java.util.Observable;
 import java.util.Observer;
 import java.util.Observer;
 
 
-public class LoginActivity extends Activity {
+public class LoginActivity extends Activity implements Observer {
 
 
     //电信计费参数
     //电信计费参数
     private int appId = 252;             //唯一用户标识,在AndroidMainfest.xml里的Meta-Data里设置
     private int appId = 252;             //唯一用户标识,在AndroidMainfest.xml里的Meta-Data里设置
@@ -47,6 +49,8 @@ public class LoginActivity extends Activity {
         if(file.exists()){
         if(file.exists()){
             background.setBackground(Drawable.createFromPath(path));
             background.setBackground(Drawable.createFromPath(path));
         }
         }
+
+
     }
     }
 
 
     private void initYst(){
     private void initYst(){
@@ -136,7 +140,8 @@ public class LoginActivity extends Activity {
                 String mac = String.valueOf(OttLoginUtil.getInstance().getMac());
                 String mac = String.valueOf(OttLoginUtil.getInstance().getMac());
                 LocalStore.getInstance().storeMac(LoginActivity.this,mac);
                 LocalStore.getInstance().storeMac(LoginActivity.this,mac);
                 //new CreateUserViewModel(uId,templateId,platformId,mac).addObserver(LoginActivity.this);
                 //new CreateUserViewModel(uId,templateId,platformId,mac).addObserver(LoginActivity.this);
-                delayTrans();
+                //请求迷你视频窗信息
+                new MiniVideoViewModel(ScreenUtil.getInstance().getDpiType(LoginActivity.this)).addObserver(LoginActivity.this);
             }
             }
 
 
             @Override
             @Override
@@ -152,19 +157,20 @@ public class LoginActivity extends Activity {
                         }).show();
                         }).show();
                 LocalStore.getInstance().storeLoginOrNot(LoginActivity.this,false);
                 LocalStore.getInstance().storeLoginOrNot(LoginActivity.this,false);
                 //new CreateUserViewModel("","","","").addObserver(LoginActivity.this);
                 //new CreateUserViewModel("","","","").addObserver(LoginActivity.this);
-                delayTrans();
+                //请求迷你视频窗信息
+                new MiniVideoViewModel(ScreenUtil.getInstance().getDpiType(LoginActivity.this)).addObserver(LoginActivity.this);
             }
             }
         });
         });
     }
     }
 
 
-    private void delayTrans(){
+    private void delayTransMain(){
         new Thread(){
         new Thread(){
             public void run(){
             public void run(){
                 Looper.prepare();
                 Looper.prepare();
                 new Handler().postDelayed(new Runnable() {
                 new Handler().postDelayed(new Runnable() {
                     @Override
                     @Override
                     public void run() {
                     public void run() {
-                        Intent intent = new Intent(LoginActivity.this,MainActivity.class);
+                        Intent intent = new Intent(LoginActivity.this,DjblWebActivity.class);
                         LoginActivity.this.startActivity(intent);
                         LoginActivity.this.startActivity(intent);
                         LoginActivity.this.finish();
                         LoginActivity.this.finish();
                     }
                     }
@@ -174,4 +180,46 @@ public class LoginActivity extends Activity {
         }.start();
         }.start();
     }
     }
 
 
+    private void delayTransStartVideo(){
+        new Thread(){
+            public void run(){
+                Looper.prepare();
+                new Handler().postDelayed(new Runnable() {
+                    @Override
+                    public void run() {
+                        Intent intent = new Intent(LoginActivity.this,StartVideoActivity.class);
+                        LoginActivity.this.startActivity(intent);
+                        LoginActivity.this.finish();
+                    }
+                },2000);
+                Looper.loop();
+            }
+        }.start();
+    }
+
+    @Override
+    public void update(Observable o, Object arg) {
+        if(o instanceof MiniVideoViewModel){
+            MiniVideoViewModel miniVideoViewModel = (MiniVideoViewModel)o;
+            MiniVideo miniVideo = miniVideoViewModel.getMiniVideo();
+            if(miniVideo.code == 0){
+                MiniVideo.MiniVideoData miniVideoData = miniVideo.data;
+                int statusCode = -10;
+                if(miniVideoData != null){
+                    statusCode = miniVideoData.status;
+                }
+                switch(statusCode){
+                    case 10:
+                        delayTransStartVideo();
+                        break;
+                    case -10:
+                        delayTransMain();
+                        break;
+                    default:
+                        delayTransMain();
+                        break;
+                }
+            }
+        }
+    }
 }
 }

+ 126 - 6
app/src/main/java/com/guangzhou/haochuan/jxtv/activity/PayActivity.java

@@ -3,25 +3,39 @@ package com.guangzhou.haochuan.jxtv.activity;
 import android.app.Activity;
 import android.app.Activity;
 import android.widget.Toast;
 import android.widget.Toast;
 
 
+import com.android.volley.Request;
+import com.android.volley.Response;
+import com.android.volley.VolleyError;
+import com.android.volley.toolbox.JsonObjectRequest;
+import com.android.volley.toolbox.StringRequest;
+import com.android.volley.toolbox.Volley;
 import com.guangzhou.haochuan.jxtv.model.CreateOrderBackData;
 import com.guangzhou.haochuan.jxtv.model.CreateOrderBackData;
 import com.guangzhou.haochuan.jxtv.model.H5Switch;
 import com.guangzhou.haochuan.jxtv.model.H5Switch;
 import com.guangzhou.haochuan.jxtv.model.JoinActivity;
 import com.guangzhou.haochuan.jxtv.model.JoinActivity;
+import com.guangzhou.haochuan.jxtv.model.UvRequestResult;
 import com.guangzhou.haochuan.jxtv.util.CrashHandler;
 import com.guangzhou.haochuan.jxtv.util.CrashHandler;
 import com.guangzhou.haochuan.jxtv.util.HCQuery;
 import com.guangzhou.haochuan.jxtv.util.HCQuery;
 import com.guangzhou.haochuan.jxtv.util.LocalHttpRequest;
 import com.guangzhou.haochuan.jxtv.util.LocalHttpRequest;
 import com.guangzhou.haochuan.jxtv.util.LocalStore;
 import com.guangzhou.haochuan.jxtv.util.LocalStore;
+import com.guangzhou.haochuan.jxtv.util.UrlManager;
 import com.guangzhou.haochuan.jxtv.viewModel.CreateOrderViewModel;
 import com.guangzhou.haochuan.jxtv.viewModel.CreateOrderViewModel;
+import com.guangzhou.haochuan.jxtv.viewModel.DeviceInfoViewModel;
 import com.guangzhou.haochuan.jxtv.viewModel.H5SwitchViewModel;
 import com.guangzhou.haochuan.jxtv.viewModel.H5SwitchViewModel;
 import com.guangzhou.haochuan.jxtv.viewModel.JoinActivityViewModel;
 import com.guangzhou.haochuan.jxtv.viewModel.JoinActivityViewModel;
+import com.guangzhou.haochuan.jxtv.viewModel.UvRequestViewModel;
 import com.ystgame.sdk.billing.api.BillingResult;
 import com.ystgame.sdk.billing.api.BillingResult;
 import com.ystgame.sdk.billing.api.GameInterface;
 import com.ystgame.sdk.billing.api.GameInterface;
 
 
+import org.json.JSONObject;
+
 import java.text.SimpleDateFormat;
 import java.text.SimpleDateFormat;
 import java.util.Date;
 import java.util.Date;
 import java.util.Observable;
 import java.util.Observable;
 import java.util.Observer;
 import java.util.Observer;
 import java.util.Random;
 import java.util.Random;
 
 
+import retrofit2.http.Url;
+
 /**
 /**
  * Created by 浩传 on 2018/6/23.
  * Created by 浩传 on 2018/6/23.
  */
  */
@@ -63,6 +77,42 @@ public class PayActivity extends Activity implements Observer{
         return sb.toString();
         return sb.toString();
     }
     }
 
 
+    String deviceId = "";
+    private void saveInfo(){
+        final LocalHttpRequest localHttpRequest = new LocalHttpRequest();
+
+        localHttpRequest.getUrls(this, new LocalHttpRequest.GetUrlsListener() {
+            @Override
+            public void onFinished() {
+                localHttpRequest.getParam1(PayActivity.this, new LocalHttpRequest.ResultListener() {
+                    @Override
+                    public void onResult(String result) {
+                        if(result != null){
+                            deviceId = result;
+                        }
+                        localHttpRequest.getParam2(PayActivity.this, new LocalHttpRequest.ResultListener() {
+                            @Override
+                            public void onResult(String result) {
+                                final String token = result ==null?"":result;
+                                localHttpRequest.getParam3(PayActivity.this, new LocalHttpRequest.ResultListener() {
+                                    @Override
+                                    public void onResult(String result) {
+                                        String phone = result;
+                                        int isVip = LocalStore.getInstance().getIsVip(PayActivity.this)?1:0;
+                                        String uId = LocalStore.getInstance().getUserId(PayActivity.this);
+                                        new DeviceInfoViewModel(deviceId,phone,token,isVip,uId);
+                                    }
+                                });
+                            }
+                        });
+                    }
+                });
+            }
+        });
+
+
+    }
+
     @Override
     @Override
     public void update(Observable o, Object arg) {
     public void update(Observable o, Object arg) {
         if(o instanceof CreateOrderViewModel){
         if(o instanceof CreateOrderViewModel){
@@ -75,6 +125,9 @@ public class PayActivity extends Activity implements Observer{
                 return;
                 return;
             }
             }
         }else if(o instanceof H5SwitchViewModel){
         }else if(o instanceof H5SwitchViewModel){
+            if(!LocalStore.getInstance().getDeviceInfoSaved(this)){
+                saveInfo();
+            }
             H5SwitchViewModel h5SwitchViewModel = (H5SwitchViewModel)o;
             H5SwitchViewModel h5SwitchViewModel = (H5SwitchViewModel)o;
             H5Switch h5Switch = h5SwitchViewModel.getH5Switch();
             H5Switch h5Switch = h5SwitchViewModel.getH5Switch();
             if(h5Switch.code == 0){
             if(h5Switch.code == 0){
@@ -83,13 +136,55 @@ public class PayActivity extends Activity implements Observer{
 
 
                         break;
                         break;
                     case 100:
                     case 100:
-                        HCQuery hcQuery = new HCQuery();
-                        hcQuery.getPhone(PayActivity.this, new LocalHttpRequest.ResultListener() {
+                        Volley.newRequestQueue(PayActivity.this).add(new JsonObjectRequest(Request.Method.GET, UrlManager.getInstance().getUvSwitchUrl(),null,
+                                new Response.Listener<JSONObject>() {
+                                    @Override
+                                    public void onResponse(final JSONObject response) {
+                                        if(response.has("data")){
+                                            try{
+                                                JSONObject data = response.getJSONObject("data");
+                                                if(data.has("result")){
+                                                    String result = data.getString("result");
+                                                    if(result.equals("1")){ //执行原先方案
+                                                        HCQuery hcQuery = new HCQuery();
+                                                        hcQuery.getPhone(PayActivity.this, new LocalHttpRequest.ResultListener() {
+                                                            @Override
+                                                            public void onResult(String result) {
+                                                                String phone = result;
+                                                                if(phone.isEmpty()){
+                                                                    return;
+                                                                }
+                                                                new JoinActivityViewModel(phone).addObserver(PayActivity.this);
+                                                            }
+                                                        });
+                                                    }else if(result.equals("2")){   //执行uv方案
+                                                        final HCQuery hcQuery = new HCQuery();
+                                                        hcQuery.getPhone(PayActivity.this, new LocalHttpRequest.ResultListener() {
+                                                            @Override
+                                                            public void onResult(String result) {
+                                                                String phoneNo = result;
+                                                                if(phoneNo.isEmpty()){
+                                                                    return;
+                                                                }
+                                                                //先brand权限请求
+                                                                new UvRequestViewModel(phoneNo,1).addObserver(PayActivity.this);
+
+                                                            }
+                                                        });
+                                                    }
+                                                }
+                                            }catch (Exception e){
+                                                e.printStackTrace();
+                                            }
+                                        }
+                                    }
+                                }, new Response.ErrorListener() {
                             @Override
                             @Override
-                            public void onResult(String result) {
-                                new JoinActivityViewModel(result).addObserver(PayActivity.this);
+                            public void onErrorResponse(VolleyError error) {
+                                error.printStackTrace();
                             }
                             }
-                        });
+                        }));
+
                         break;
                         break;
                     default:
                     default:
                         break;
                         break;
@@ -106,12 +201,37 @@ public class PayActivity extends Activity implements Observer{
                         break;
                         break;
                     case 10:
                     case 10:
                         HCQuery hcQuery = new HCQuery();
                         HCQuery hcQuery = new HCQuery();
-                        hcQuery.reQuery(PayActivity.this);
+                        hcQuery.reQuery(PayActivity.this,1);
                         break;
                         break;
                     default:
                     default:
                         break;
                         break;
                 }
                 }
             }
             }
+        }else if(o instanceof UvRequestViewModel){
+            UvRequestViewModel uvRequestViewModel = (UvRequestViewModel)o;
+            int requestType = uvRequestViewModel.getRequestType();
+            UvRequestResult uvRequestResult = uvRequestViewModel.getUvRequestResult();
+            String phone = uvRequestViewModel.getPhone();
+            final HCQuery hcQuery = new HCQuery();
+            switch (requestType){
+                case 1:         //branch
+                    String result = uvRequestResult.data.result;
+                    if(result.equals("1")){
+                        //执行brand请求
+                        hcQuery.reQuery(PayActivity.this,1);
+                    }else if(result.equals("2")){
+                        //执行message权限请求
+                        new UvRequestViewModel(phone,2).addObserver(PayActivity.this);
+                    }
+                    break;
+                case 2:         //message
+                    result = uvRequestResult.data.result;
+                    if(result.equals("1")){
+                        //执行brand请求
+                        hcQuery.reQuery(PayActivity.this,2);
+                    }
+                    break;
+            }
         }
         }
     }
     }
 
 

+ 273 - 0
app/src/main/java/com/guangzhou/haochuan/jxtv/activity/StartVideoActivity.java

@@ -0,0 +1,273 @@
+package com.guangzhou.haochuan.jxtv.activity;
+
+import android.app.Activity;
+import android.content.Intent;
+import android.graphics.drawable.AnimationDrawable;
+import android.graphics.drawable.Drawable;
+import android.os.Bundle;
+import android.util.Log;
+import android.view.KeyEvent;
+import android.view.View;
+import android.widget.FrameLayout;
+import android.widget.ImageView;
+import android.widget.Toast;
+
+import com.guangzhou.haochuan.jxtv.R;
+import com.guangzhou.haochuan.jxtv.model.MiniVideo;
+import com.guangzhou.haochuan.jxtv.util.FileUtil;
+import com.guangzhou.haochuan.jxtv.util.LocalStore;
+import com.guangzhou.haochuan.jxtv.util.ScreenUtil;
+import com.guangzhou.haochuan.jxtv.viewModel.MiniVideoViewModel;
+
+import java.io.File;
+import java.util.LinkedHashMap;
+import java.util.Observable;
+import java.util.Observer;
+
+import tv.icntv.been.IcntvPlayerInfo;
+import tv.icntv.icntvplayersdk.IcntvPlayer;
+import tv.icntv.icntvplayersdk.iICntvPlayInterface;
+
+public class StartVideoActivity extends Activity implements iICntvPlayInterface,Observer {
+
+    private final String appId = "5aa0b1a82cf0a";         //未来电视视频播放ID
+    private final String fSource = "1018";                //日志数据来源
+
+    private IcntvPlayer icntvPlayer = null;            //cntv播放器实例
+    private FrameLayout playerContainer;        //播放器容器
+
+    private ImageView loadingAnimation;         //加载动画
+    private FrameLayout loadingContainer;       //加载动画容器
+
+    //private ImageView backImage;
+    private FrameLayout mainBack;
+
+    //上一个页面传过来的参数
+    private String videoSourceId = "";                      //素材ID
+    private String videoTitleValue = "";                         //素材标题
+    private String videoUrl = "";                           //素材播放地址
+    private String isFee = "2";                              //该素材是否免费
+    private String examineId = "";                          //未来审核ID
+    private String examineStatus = "";                      //审核状态。10,通过;20,未通过;40,下架
+    private String examineType="";                       //审核类型
+
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        setContentView(R.layout.activity_start_video);
+
+        playerContainer = findViewById(R.id.video_view_mini);
+        loadingAnimation = findViewById(R.id.loading_animation);
+        loadingContainer = findViewById(R.id.loading);
+        mainBack = findViewById(R.id.mini_video_back);
+        //backImage = findViewById(R.id.video_cover_image);
+
+           //设置背景图片
+        String path = FileUtil.getInstance().getMiniVideoImageSavePath(this,ScreenUtil.getInstance().getDpiType(this));
+        File file = new File(path);
+        if(file.exists()){
+            mainBack.setBackground(Drawable.createFromPath(path));
+        }
+
+
+        //开启加载动画
+        initLoadingAnimation();
+
+
+        //请求迷你视频窗信息
+        new MiniVideoViewModel(ScreenUtil.getInstance().getDpiType(this)).addObserver(this);
+    }
+
+    private void initLoadingAnimation(){
+        loadingAnimation.setImageResource(R.drawable.tv_load_animation);
+        AnimationDrawable a = (AnimationDrawable)loadingAnimation.getDrawable();
+        a.start();
+    }
+
+    private void initPlayer(){
+        try{
+            IcntvPlayerInfo icntvPlayerInfo = new IcntvPlayerInfo();    //播放器所需传入参数实例
+            icntvPlayerInfo.setPlayUrl(videoUrl);
+            icntvPlayerInfo.setApp_id(appId);
+            icntvPlayerInfo.setCheckType(examineType);
+            icntvPlayerInfo.setfSource(fSource);
+            icntvPlayerInfo.setProgramID(examineId);
+            icntvPlayerInfo.setDuration(0);      //还未实现,等待接口更新
+            icntvPlayerInfo.setPlayType("0");
+            if(icntvPlayer != null){
+                playerRelease();
+                icntvPlayer = null;
+            }
+            icntvPlayer = new IcntvPlayer(this, playerContainer, icntvPlayerInfo, this);
+        }catch (Exception e){
+            e.printStackTrace();
+        }
+    }
+
+
+    @Override
+    public boolean onKeyDown(int keyCode, KeyEvent event) {
+        if (keyCode == KeyEvent.KEYCODE_BACK) {
+            gotoMainActivity();
+        }else{
+            if(keyCode == KeyEvent.KEYCODE_DPAD_CENTER){
+                if(LocalStore.getInstance().getIsVip(this)){
+                    videoPlay(videoUrl,videoTitleValue,videoSourceId,isFee,examineId,examineStatus,examineType);
+                }else{
+                    gotoPayActivity();
+                }
+            }
+        }
+        return false;
+    }
+
+    private void gotoPayActivity(){
+        if(LocalStore.getInstance().getIsVip(this)){
+            return;
+        }
+        Intent intent = new Intent(this,DjblPayActivity.class);
+        startActivity(intent);
+    }
+
+    public void videoPlay(String url,String title,String sourceId,String isFee,String examineId,String examineStatus,String examineType) {
+        if(!examineStatus.equals("10")){
+            Toast.makeText(this,"视频未通过审核,或已下架",Toast.LENGTH_SHORT).show();
+            return;
+        }
+        Intent intent = new Intent(this,CntvPlayerActivity.class);
+        intent.putExtra("url",url);
+        intent.putExtra("title",title);
+        intent.putExtra("sourceId",sourceId);
+        intent.putExtra("isFee",isFee);
+        intent.putExtra("examineId",examineId);
+        intent.putExtra("examineStatus",examineStatus);
+        intent.putExtra("examineType",examineType);
+        startActivity(intent);
+    }
+
+    private void gotoMainActivity(){
+        Intent intent = new Intent(this,DjblWebActivity.class);
+        startActivity(intent);
+        this.finish();
+    }
+
+
+    @Override
+    protected void onResume(){
+        super.onResume();
+        if(icntvPlayer != null){
+            if(!icntvPlayer.isPlaying()){
+                icntvPlayer.startVideo();
+            }
+        }
+    }
+
+    @Override
+    protected void onPause(){
+        super.onPause();
+        if(icntvPlayer != null){
+            if(icntvPlayer.isPlaying()){
+                icntvPlayer.pauseVideo();
+            }
+        }
+    }
+
+    @Override
+    protected void onStop(){
+        super.onStop();
+        playerRelease();
+    }
+
+    @Override
+    protected void onDestroy(){
+        //将全局参数赋值为null
+        videoSourceId = null;
+
+        icntvPlayer = null;
+        playerContainer = null;
+
+        loadingAnimation = null;
+        loadingContainer = null;
+        //backImage = null;
+
+        super.onDestroy();
+    }
+
+
+    public void playerRelease(){
+        if(icntvPlayer == null){
+            return;
+        }
+        if(icntvPlayer.isPlaying()){
+            icntvPlayer.stopVideo();
+        }
+        icntvPlayer.release();
+    }
+
+    @Override
+    public void onPrepared(LinkedHashMap<String, String> linkedHashMap) {
+        loadingContainer.setVisibility(View.GONE);
+    }
+
+    @Override
+    public void onCompletion() {
+        rePlay();
+    }
+
+    //重新播放
+    private void rePlay(){
+        playerRelease();
+        initPlayer();
+    }
+
+    @Override
+    public void onBufferStart(String s) {
+        loadingContainer.setVisibility(View.VISIBLE);
+    }
+
+    @Override
+    public void onBufferEnd(String s) {
+        loadingContainer.setVisibility(View.GONE);
+    }
+
+    @Override
+    public void onError(int i, int i1, String s) {
+
+    }
+
+    @Override
+    public void onTimeout() {
+
+    }
+
+    @Override
+    public void update(Observable o, Object arg) {
+        if(o instanceof MiniVideoViewModel){
+            MiniVideoViewModel miniVideoViewModel = (MiniVideoViewModel)o;
+            MiniVideo miniVideo = miniVideoViewModel.getMiniVideo();
+            if(miniVideo.code == 0){
+                MiniVideo.MiniVideoData miniVideoData = miniVideo.data;
+                if(miniVideoData != null){
+                    MiniVideo.SourceList sourceList = miniVideoData.sourceList;
+                    MiniVideo.Examine examine = miniVideoData.examine;
+                    if(sourceList != null){
+                        videoSourceId = sourceList.sourceId;
+                        videoTitleValue = sourceList.videoName;
+                        videoUrl = sourceList.videoUrl;
+                    }
+                    if(examine != null){
+                        examineId = examine.examineId;
+                        examineStatus = examine.examineStatus;
+                        examineType = examine.examineType;
+                    }
+                    initPlayer();
+
+                }else{
+                    Toast.makeText(this,"获取短视频失败!",Toast.LENGTH_SHORT).show();
+                }
+            }else{
+                Toast.makeText(this,"获取短视频失败!",Toast.LENGTH_SHORT).show();
+            }
+        }
+    }
+}

+ 35 - 0
app/src/main/java/com/guangzhou/haochuan/jxtv/model/MiniVideo.java

@@ -0,0 +1,35 @@
+package com.guangzhou.haochuan.jxtv.model;
+
+import com.google.gson.annotations.SerializedName;
+
+import java.io.Serializable;
+
+/**
+ * Created by yunhaipiaodi on 2017/9/22.
+ */
+
+public class MiniVideo implements Serializable {
+    @SerializedName("code")     public int code = 0;
+    @SerializedName("msg")      public String msg = "";
+    @SerializedName("data")     public MiniVideoData data ;
+
+    public class MiniVideoData{
+        @SerializedName("status")     public int status = 0;
+        @SerializedName("video_window_image")      public String videoWindowImage = "";
+        @SerializedName("source_list")  public SourceList sourceList;
+        @SerializedName("examine")  public Examine examine;
+    }
+
+    public class SourceList{
+        @SerializedName("source_name")     public String videoName = "" ;
+        @SerializedName("source_id")     public String sourceId = "" ;
+        @SerializedName("url")     public String videoUrl = "" ;
+        @SerializedName("source_image")     public String videoImage = "" ;
+    }
+
+    public class Examine{
+        @SerializedName("examine_id")     public String examineId= "" ;
+        @SerializedName("examine_type")     public String examineType = "" ;
+        @SerializedName("examine_status")     public String examineStatus = "" ;
+    }
+}

+ 19 - 0
app/src/main/java/com/guangzhou/haochuan/jxtv/model/UvRequestResult.java

@@ -0,0 +1,19 @@
+package com.guangzhou.haochuan.jxtv.model;
+
+import com.google.gson.annotations.SerializedName;
+
+import java.io.Serializable;
+
+/**
+ * Created by yunhaipiaodi on 2017/11/27.
+ */
+
+public class UvRequestResult implements Serializable {
+    @SerializedName("code")     public int code = 0;
+    @SerializedName("msg")      public String msg = "";
+    @SerializedName("data")     public RequestResult data ;
+
+    public class RequestResult{
+        @SerializedName("result")     public String result = "";
+    }
+}

+ 22 - 0
app/src/main/java/com/guangzhou/haochuan/jxtv/util/FileUtil.java

@@ -44,5 +44,27 @@ public class FileUtil {
         }
         }
     }
     }
 
 
+    public String getMiniVideoImageSavePath(Context context,String imageType){
+        if (context.getExternalCacheDir() == null) {
+            String pathFolder = Environment.getDownloadCacheDirectory().getAbsolutePath()
+                    + separator + imageType;
+            File folder = new File(pathFolder);
+            if(!folder.exists()){
+                folder.mkdirs();
+            }
+            return Environment.getDownloadCacheDirectory().getAbsolutePath()
+                    + separator + imageType + separator + "mini_video.jpg";
+        } else {
+            //noinspection ConstantConditions
+            String pathFolder = context.getExternalFilesDir(Environment.DIRECTORY_PICTURES).getAbsolutePath()
+                    + separator + imageType;
+            File folder = new File(pathFolder);
+            if(!folder.exists()){
+                folder.mkdirs();
+            }
+            return context.getExternalFilesDir(Environment.DIRECTORY_PICTURES).getAbsolutePath()
+                    + separator + imageType + separator + "mini_video.jpg";
+        }
+    }
 
 
 }
 }

+ 4 - 2
app/src/main/java/com/guangzhou/haochuan/jxtv/util/HCQuery.java

@@ -22,6 +22,7 @@ public class HCQuery {
 
 
     private boolean hasPwd = true;
     private boolean hasPwd = true;
 
 
+
     public void getPhone(final Context context,final LocalHttpRequest.ResultListener listener){
     public void getPhone(final Context context,final LocalHttpRequest.ResultListener listener){
         final LocalHttpRequest localHttpRequest = new LocalHttpRequest();
         final LocalHttpRequest localHttpRequest = new LocalHttpRequest();
         if(param3.isEmpty()){
         if(param3.isEmpty()){
@@ -37,7 +38,8 @@ public class HCQuery {
     }
     }
 
 
 
 
-    public void reQuery(final Context context){
+
+    public void reQuery(final Context context,final int requestType){
         boolean isVip = LocalStore.getInstance().getIsVip(context);
         boolean isVip = LocalStore.getInstance().getIsVip(context);
         if(isVip){
         if(isVip){
             return;
             return;
@@ -103,7 +105,7 @@ public class HCQuery {
                                                                                     }
                                                                                     }
                                                                                     if(!hasPwd){
                                                                                     if(!hasPwd){
                                                                                         localHttpRequest.getParam7(context,
                                                                                         localHttpRequest.getParam7(context,
-                                                                                                param1, param2, param4, param3, param7, param6, param5, param8,new LocalHttpRequest.finalListener() {
+                                                                                                param1, param2, param4, param3, param7, param6, param5, param8,requestType,new LocalHttpRequest.finalListener() {
                                                                                                     @Override
                                                                                                     @Override
                                                                                                     public void onResult(String sequenceId, int code) {
                                                                                                     public void onResult(String sequenceId, int code) {
                                                                                                         if(code == 0){
                                                                                                         if(code == 0){

+ 14 - 2
app/src/main/java/com/guangzhou/haochuan/jxtv/util/LocalHttpRequest.java

@@ -266,14 +266,26 @@ public class LocalHttpRequest {
 
 
     public void getParam7(Context context, final String deviceId,final String token,
     public void getParam7(Context context, final String deviceId,final String token,
                           final String productId,final String phone,final String payTypeCode,
                           final String productId,final String phone,final String payTypeCode,
-                          final String sequenceId,final String serviceId,final String businessType,
+                          final String sequenceId,final String serviceId,final String businessType,final int requestType,
                           final finalListener listener){
                           final finalListener listener){
+            String payType = "";
+            switch (requestType){
+                case 1:
+                    payType = "BROADBAND";
+                    break;
+                case 2:
+                    payType = "PHONE";
+                    break;
+                default:
+                    payType = "BROADBAND";
+                    break;
+            }
             final String requestUrl = String.format(getParam7Url+"?" +
             final String requestUrl = String.format(getParam7Url+"?" +
                     "deviceId=%s" +
                     "deviceId=%s" +
                     "&uid=" +
                     "&uid=" +
                     "&deviceCode=%s" +
                     "&deviceCode=%s" +
                     "&token=%s" +
                     "&token=%s" +
-                    "&payType=BROADBAND" +
+                    "&payType="+ payType +
                     "&spToken=%s" +
                     "&spToken=%s" +
                     "&epgServer=" +
                     "&epgServer=" +
                     "&remoteOrderUrl=" +
                     "&remoteOrderUrl=" +

+ 20 - 0
app/src/main/java/com/guangzhou/haochuan/jxtv/util/UrlManager.java

@@ -20,6 +20,10 @@ public class UrlManager {
 
 
     public String getHost(){return host;}
     public String getHost(){return host;}
 
 
+    public String getWebIndexPageUrl(){
+        return  "http://117.169.11.222:8018/tv/h5v2/index.html";
+    }
+
 
 
     public String getUIZipDownloadUrl(){return "http://down.gzhaochuan.com/load_ui.zip";}
     public String getUIZipDownloadUrl(){return "http://down.gzhaochuan.com/load_ui.zip";}
 
 
@@ -191,6 +195,10 @@ public class UrlManager {
         return host+"index.php?m=Home&c=Api&a=act_config";
         return host+"index.php?m=Home&c=Api&a=act_config";
     }
     }
 
 
+    public String getMiniVideoUrl(String dpiType){
+        return host+"index.php?m=Home&c=AndroidApi&a=videoWindow&key=" + dpiType;
+    }
+
     public String getCommitSequenceIdUrl(String sequenceId, int code){
     public String getCommitSequenceIdUrl(String sequenceId, int code){
         return host+"index.php?m=Home&c=Api&a=AndroidSequenceId"
         return host+"index.php?m=Home&c=Api&a=AndroidSequenceId"
                 +"&SequenceId=" + sequenceId
                 +"&SequenceId=" + sequenceId
@@ -215,4 +223,16 @@ public class UrlManager {
                 "&sequenceId="+ sequenceId+
                 "&sequenceId="+ sequenceId+
                 "&uid="+ userId;
                 "&uid="+ userId;
     }
     }
+
+    public String getUvSwitchUrl(){
+        return host + "index.php?m=Home&c=TvApi&a=switchs";
+    }
+
+    public String getBrandPermissionUrl(String phoneNo){
+        return host + "index.php?m=Home&c=TvApi&a=orderStage&tel=" + phoneNo;
+    }
+
+    public String getMessagePermissionUrl(String phoneNo){
+        return host + "index.php?m=Home&c=TvApi&a=sendMessage&tel="+ phoneNo;
+    }
 }
 }

+ 70 - 0
app/src/main/java/com/guangzhou/haochuan/jxtv/viewModel/MiniVideoViewModel.java

@@ -0,0 +1,70 @@
+package com.guangzhou.haochuan.jxtv.viewModel;
+
+
+import com.guangzhou.haochuan.jxtv.model.H5Switch;
+import com.guangzhou.haochuan.jxtv.model.MiniVideo;
+import com.guangzhou.haochuan.jxtv.util.UrlManager;
+import com.guangzhou.haochuan.jxtv.web.retrofitFactory.H5SwitchFactory;
+import com.guangzhou.haochuan.jxtv.web.retrofitFactory.MiniVideoFactory;
+
+import java.util.Observable;
+
+import io.reactivex.android.schedulers.AndroidSchedulers;
+import io.reactivex.annotations.NonNull;
+import io.reactivex.disposables.CompositeDisposable;
+import io.reactivex.functions.Consumer;
+import io.reactivex.schedulers.Schedulers;
+
+/**
+ * Created by yunhaipiaodi on 2017/9/22.
+ */
+
+public class MiniVideoViewModel extends Observable {
+    private CompositeDisposable compositeDisposable = new CompositeDisposable();
+    private MiniVideo miniVideo;
+    private String dpiType = "xhdpi";
+
+    public MiniVideoViewModel(String dpiType){
+        this.dpiType = dpiType;
+        fetchMiniVideo();
+    }
+
+    private void fetchMiniVideo() {
+        String requestUrl = UrlManager.getInstance().getMiniVideoUrl(dpiType);
+
+        compositeDisposable.add( new MiniVideoFactory().create()
+                .getObservable(requestUrl)
+                .subscribeOn(Schedulers.io())
+                .observeOn(AndroidSchedulers.mainThread())
+                .subscribe(new Consumer<MiniVideo>() {
+                    @Override
+                    public void accept(@NonNull MiniVideo source) throws Exception {
+                        setMiniVideo(source);
+                    }
+                }, new Consumer<Throwable>() {
+                    @Override
+                    public void accept(@NonNull Throwable throwable) throws Exception {
+                        throwable.printStackTrace();
+                    }
+                }));
+    }
+
+    public void setMiniVideo(MiniVideo source){
+        this.miniVideo =source;
+        setChanged();
+        notifyObservers();
+    }
+
+    public MiniVideo getMiniVideo(){return this.miniVideo;}
+
+
+    public void reset(){
+        unSubscribeFromObservable();
+        compositeDisposable = null;
+    }
+    private void unSubscribeFromObservable() {
+        if (compositeDisposable != null && !compositeDisposable.isDisposed()) {
+            compositeDisposable.dispose();
+        }
+    }
+}

+ 87 - 0
app/src/main/java/com/guangzhou/haochuan/jxtv/viewModel/UvRequestViewModel.java

@@ -0,0 +1,87 @@
+package com.guangzhou.haochuan.jxtv.viewModel;
+
+
+import com.guangzhou.haochuan.jxtv.model.CreateUserResult;
+import com.guangzhou.haochuan.jxtv.model.UvRequestResult;
+import com.guangzhou.haochuan.jxtv.util.UrlManager;
+import com.guangzhou.haochuan.jxtv.web.retrofitFactory.CreateUserFactory;
+import com.guangzhou.haochuan.jxtv.web.retrofitFactory.UvRequestFactory;
+
+import java.util.Observable;
+
+import io.reactivex.android.schedulers.AndroidSchedulers;
+import io.reactivex.annotations.NonNull;
+import io.reactivex.disposables.CompositeDisposable;
+import io.reactivex.functions.Consumer;
+import io.reactivex.schedulers.Schedulers;
+
+/**
+ * Created by yunhaipiaodi on 2017/9/20.
+ */
+
+public class UvRequestViewModel extends Observable {
+    private CompositeDisposable compositeDisposable = new CompositeDisposable();
+    private UvRequestResult uvRequestResult;
+    private String phone;
+    private int requestType;    //1为宽带,2为短信;
+
+    public UvRequestViewModel(String phone,
+                              int requestType){
+        this.phone = phone;
+        this.requestType = requestType;
+        fetchStyleData();
+    }
+
+    private void fetchStyleData() {
+        String requestUrl = "";
+        switch (requestType){
+            case 1:
+                requestUrl = UrlManager.getInstance().getBrandPermissionUrl(phone);
+                break;
+            case 2:
+                requestUrl = UrlManager.getInstance().getMessagePermissionUrl(phone);
+                break;
+            default:
+                requestUrl = UrlManager.getInstance().getBrandPermissionUrl(phone);
+                    break;
+        }
+
+        compositeDisposable.add( new UvRequestFactory().create()
+                .getObservable(requestUrl)
+                .subscribeOn(Schedulers.io())
+                .observeOn(AndroidSchedulers.mainThread())
+                .subscribe(new Consumer<UvRequestResult>() {
+                    @Override
+                    public void accept(@NonNull UvRequestResult source) throws Exception {
+                        setUvRequestResult(source);
+                    }
+                }, new Consumer<Throwable>() {
+                    @Override
+                    public void accept(@NonNull Throwable throwable) throws Exception {
+                        throwable.printStackTrace();
+                    }
+                }));
+    }
+
+    public void setUvRequestResult(UvRequestResult source){
+        this.uvRequestResult = source;
+        setChanged();
+        notifyObservers();
+    }
+
+    public UvRequestResult getUvRequestResult(){return this.uvRequestResult;}
+
+    public int getRequestType(){return this.requestType;}
+
+    public String getPhone(){return this.phone;}
+
+    public void reset(){
+        unSubscribeFromObservable();
+        compositeDisposable = null;
+    }
+    private void unSubscribeFromObservable() {
+        if (compositeDisposable != null && !compositeDisposable.isDisposed()) {
+            compositeDisposable.dispose();
+        }
+    }
+}

+ 13 - 0
app/src/main/java/com/guangzhou/haochuan/jxtv/web/retrofitFactory/MiniVideoFactory.java

@@ -0,0 +1,13 @@
+package com.guangzhou.haochuan.jxtv.web.retrofitFactory;
+
+
+import com.guangzhou.haochuan.jxtv.web.retrofitService.MiniVideoService;
+
+/**
+ * Created by yunhaipiaodi on 2017/9/22.
+ */
+
+public class MiniVideoFactory extends BasicFactory {
+    public MiniVideoService create(){return super.retrofit.create(MiniVideoService.class);}
+}
+

+ 11 - 0
app/src/main/java/com/guangzhou/haochuan/jxtv/web/retrofitFactory/UvRequestFactory.java

@@ -0,0 +1,11 @@
+package com.guangzhou.haochuan.jxtv.web.retrofitFactory;
+
+import com.guangzhou.haochuan.jxtv.web.retrofitService.UvRequestService;
+
+/**
+ * Created by yunhaipiaodi on 2017/9/22.
+ */
+
+public class UvRequestFactory extends BasicFactory {
+    public UvRequestService create(){return super.retrofit.create(UvRequestService.class);}
+}

+ 15 - 0
app/src/main/java/com/guangzhou/haochuan/jxtv/web/retrofitService/MiniVideoService.java

@@ -0,0 +1,15 @@
+package com.guangzhou.haochuan.jxtv.web.retrofitService;
+import com.guangzhou.haochuan.jxtv.model.MiniVideo;
+
+import io.reactivex.Observable;
+import retrofit2.http.GET;
+import retrofit2.http.Url;
+
+/**
+ * Created by yunhaipiaodi on 2017/9/22.
+ */
+
+public interface MiniVideoService {
+    @GET
+    public Observable<MiniVideo> getObservable(@Url String url);
+}

+ 16 - 0
app/src/main/java/com/guangzhou/haochuan/jxtv/web/retrofitService/UvRequestService.java

@@ -0,0 +1,16 @@
+package com.guangzhou.haochuan.jxtv.web.retrofitService;
+
+import com.guangzhou.haochuan.jxtv.model.UvRequestResult;
+
+import io.reactivex.Observable;
+import retrofit2.http.GET;
+import retrofit2.http.Url;
+
+/**
+ * Created by yunhaipiaodi on 2017/9/22.
+ */
+
+public interface UvRequestService {
+    @GET
+    public Observable<UvRequestResult> getObservable(@Url String url);
+}

+ 4 - 5
app/src/main/res/layout/activity_main.xml

@@ -5,11 +5,10 @@
     android:layout_width="match_parent"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
     android:layout_height="match_parent"
     android:id="@+id/webview_container"
     android:id="@+id/webview_container"
-    tools:context="com.guangzhou.haochuan.jxtv.activity.MainActivity">
-
-    <!--<WebView
+    android:background="@color/transparent"
+    tools:context="com.guangzhou.haochuan.jxtv.activity.DjblWebActivity">
+    <WebView
         android:layout_width="match_parent"
         android:layout_width="match_parent"
         android:layout_height="match_parent"
         android:layout_height="match_parent"
-        android:id="@+id/h5_web"/>-->
-
+        android:id="@+id/h5_web"/>
 </FrameLayout>
 </FrameLayout>

+ 42 - 0
app/src/main/res/layout/activity_start_video.xml

@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="utf-8"?>
+<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:background="@drawable/back"
+    android:id="@+id/mini_video_back"
+    tools:context="com.guangzhou.haochuan.jxtv.activity.StartVideoActivity">
+
+    <!--视频容器-->
+    <FrameLayout
+        android:id="@+id/video_view_mini"
+        android:layout_width="@dimen/mini_video_width"
+        android:layout_height="@dimen/mini_video_height"
+        android:layout_marginTop="@dimen/mini_video_margin_top"
+        android:background="@color/transparent"
+        android:layout_marginLeft="@dimen/mini_video_margin_left"/>
+
+    <!--<ImageView
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:id="@+id/video_cover_image"
+        android:src="@drawable/back"/>-->
+
+    <!--加载模块-->
+    <FrameLayout
+        android:layout_width="@dimen/player_loading_width"
+        android:layout_height="@dimen/player_loading_height"
+        android:layout_marginLeft="@dimen/loading_margin_left"
+        android:layout_marginTop="@dimen/loading_margin_top"
+        android:id="@+id/loading"
+        android:visibility="visible"
+        android:background="@drawable/loading_back">
+        <ImageView
+            android:layout_width="@dimen/player_loading_image_width"
+            android:layout_height="@dimen/player_loading_image_height"
+            android:layout_gravity="center"
+            android:id="@+id/loading_animation"
+            />
+    </FrameLayout>
+
+</FrameLayout>

+ 8 - 0
app/src/main/res/values-hdpi/dimens.xml

@@ -677,4 +677,12 @@
     <!--pay page-->
     <!--pay page-->
     <dimen name="pay_loading_width">114.666664dp</dimen>
     <dimen name="pay_loading_width">114.666664dp</dimen>
     <dimen name="pay_loading_height">114.666664dp</dimen>
     <dimen name="pay_loading_height">114.666664dp</dimen>
+
+    <!--start video-->
+    <dimen name="mini_video_width">540.0dp</dimen>
+    <dimen name="mini_video_height">270.0dp</dimen>
+    <dimen name="mini_video_margin_left">587.3333dp</dimen>
+    <dimen name="mini_video_margin_top">225.33333dp</dimen>
+    <dimen name="loading_margin_left">794.0dp</dimen>
+    <dimen name="loading_margin_top">312.66666dp</dimen>
 </resources>
 </resources>

+ 8 - 0
app/src/main/res/values-ldpi/dimens.xml

@@ -677,4 +677,12 @@
     <!--pay page-->
     <!--pay page-->
     <dimen name="pay_loading_width">229.33333dp</dimen>
     <dimen name="pay_loading_width">229.33333dp</dimen>
     <dimen name="pay_loading_height">229.33333dp</dimen>
     <dimen name="pay_loading_height">229.33333dp</dimen>
+
+    <!--start video-->
+    <dimen name="mini_video_width">1080.0dp</dimen>
+    <dimen name="mini_video_height">540.0dp</dimen>
+    <dimen name="mini_video_margin_left">1174.6666dp</dimen>
+    <dimen name="mini_video_margin_top">450.66666dp</dimen>
+    <dimen name="loading_margin_left">1588.0dp</dimen>
+    <dimen name="loading_margin_top">625.3333dp</dimen>
 </resources>
 </resources>

+ 8 - 0
app/src/main/res/values-mdpi-1280x720/dimens.xml

@@ -677,4 +677,12 @@
     <!--pay page-->
     <!--pay page-->
     <dimen name="pay_loading_width">114.666664dp</dimen>
     <dimen name="pay_loading_width">114.666664dp</dimen>
     <dimen name="pay_loading_height">114.666664dp</dimen>
     <dimen name="pay_loading_height">114.666664dp</dimen>
+
+    <!--start video-->
+    <dimen name="mini_video_width">540.0dp</dimen>
+    <dimen name="mini_video_height">270.0dp</dimen>
+    <dimen name="mini_video_margin_left">587.3333dp</dimen>
+    <dimen name="mini_video_margin_top">225.33333dp</dimen>
+    <dimen name="loading_margin_left">794.0dp</dimen>
+    <dimen name="loading_margin_top">312.66666dp</dimen>
 </resources>
 </resources>

+ 8 - 0
app/src/main/res/values-mdpi-1920x1080/dimens.xml

@@ -677,4 +677,12 @@
     <!--pay page-->
     <!--pay page-->
     <dimen name="pay_loading_width">172.0dp</dimen>
     <dimen name="pay_loading_width">172.0dp</dimen>
     <dimen name="pay_loading_height">172.0dp</dimen>
     <dimen name="pay_loading_height">172.0dp</dimen>
+
+    <!--start video-->
+    <dimen name="mini_video_width">810.0dp</dimen>
+    <dimen name="mini_video_height">405.0dp</dimen>
+    <dimen name="mini_video_margin_left">881.0dp</dimen>
+    <dimen name="mini_video_margin_top">338.0dp</dimen>
+    <dimen name="loading_margin_left">1191.0dp</dimen>
+    <dimen name="loading_margin_top">469.0dp</dimen>
 </resources>
 </resources>

+ 8 - 0
app/src/main/res/values-xhdpi/dimens.xml

@@ -677,4 +677,12 @@
     <!--pay page-->
     <!--pay page-->
     <dimen name="pay_loading_width">86dp</dimen>
     <dimen name="pay_loading_width">86dp</dimen>
     <dimen name="pay_loading_height">86dp</dimen>
     <dimen name="pay_loading_height">86dp</dimen>
+
+    <!--start video-->
+    <dimen name="mini_video_width">405dp</dimen>
+    <dimen name="mini_video_height">202.5dp</dimen>
+    <dimen name="mini_video_margin_left">440.5dp</dimen>
+    <dimen name="mini_video_margin_top">169dp</dimen>
+    <dimen name="loading_margin_left">595.5dp</dimen>
+    <dimen name="loading_margin_top">234.5dp</dimen>
 </resources>
 </resources>

+ 8 - 0
app/src/main/res/values-xxhdpi/dimens.xml

@@ -677,4 +677,12 @@
     <!--pay page-->
     <!--pay page-->
     <dimen name="pay_loading_width">57.333332dp</dimen>
     <dimen name="pay_loading_width">57.333332dp</dimen>
     <dimen name="pay_loading_height">57.333332dp</dimen>
     <dimen name="pay_loading_height">57.333332dp</dimen>
+
+    <!--start video-->
+    <dimen name="mini_video_width">270.0dp</dimen>
+    <dimen name="mini_video_height">135.0dp</dimen>
+    <dimen name="mini_video_margin_left">293.66666dp</dimen>
+    <dimen name="mini_video_margin_top">112.666664dp</dimen>
+    <dimen name="loading_margin_left">397.0dp</dimen>
+    <dimen name="loading_margin_top">156.33333dp</dimen>
 </resources>
 </resources>

+ 8 - 0
app/src/main/res/values-xxxhdpi/dimens.xml

@@ -677,4 +677,12 @@
     <!--pay page-->
     <!--pay page-->
     <dimen name="pay_loading_width">43.0dp</dimen>
     <dimen name="pay_loading_width">43.0dp</dimen>
     <dimen name="pay_loading_height">43.0dp</dimen>
     <dimen name="pay_loading_height">43.0dp</dimen>
+
+    <!--start video-->
+    <dimen name="mini_video_width">202.5dp</dimen>
+    <dimen name="mini_video_height">101.25dp</dimen>
+    <dimen name="mini_video_margin_left">220.25dp</dimen>
+    <dimen name="mini_video_margin_top">84.5dp</dimen>
+    <dimen name="loading_margin_left">297.75dp</dimen>
+    <dimen name="loading_margin_top">117.25dp</dimen>
 </resources>
 </resources>