ソースを参照

'新提交代码'

xiaojian 3 年 前
コミット
2f07cf8f55
45 ファイル変更19219 行追加344 行削除
  1. 122 0
      .idea/codeStyles/Project.xml
  2. 5 0
      .idea/codeStyles/codeStyleConfig.xml
  3. 0 1
      .idea/gradle.xml
  4. 2 1
      app/build.gradle
  5. 0 20
      app/debug/debug/output.json
  6. 0 20
      app/debug/output.json
  7. BIN
      app/platform.keystore
  8. 25 28
      app/src/main/java/com/jld/vod/base/BaseActivity.kt
  9. 2 2
      app/src/main/java/com/jld/vod/config/Config.kt
  10. 1 1
      app/src/main/java/com/jld/vod/model/bean/GEOAdvertBean.kt
  11. 1 2
      app/src/main/java/com/jld/vod/service/SocketService.kt
  12. 2 0
      app/src/main/java/com/jld/vod/utils/AppUtil.java
  13. 4 0
      app/src/main/java/com/jld/vod/utils/FileFuUtils.kt
  14. 78 0
      app/src/main/java/com/jld/vod/utils/HttpFileUtils.java
  15. 2 1
      app/src/main/java/com/jld/vod/utils/WifiUtil.java
  16. 117 10
      app/src/main/java/com/jld/vod/utils/http/HttpFileUtil.java
  17. 1 1
      app/src/main/java/com/jld/vod/utils/http/OkHttpDownloadUtils.java
  18. 21 1
      app/src/main/java/com/jld/vod/utils/http/OkHttpUtils.java
  19. 144 0
      app/src/main/java/com/jld/vod/utils/http/ProgressFragmentRequestBody.java
  20. 2 3
      app/src/main/java/com/jld/vod/utils/http/RetrofitUtils.kt
  21. 0 1
      app/src/main/java/com/jld/vod/view/HomeActivity.kt
  22. 2 0
      app/src/main/java/com/jld/vod/view/MainActivity.kt
  23. 3 0
      app/src/main/java/com/jld/vod/view/MusicPlayActivity.kt
  24. 398 189
      app/src/main/java/com/jld/vod/view/PostFileActivity.kt
  25. 32 26
      app/src/main/java/com/jld/vod/view/SplashActivity.kt
  26. 2 0
      app/src/main/java/com/jld/vod/view/adapter/HostAllOrdersAdapter.kt
  27. 4 4
      app/src/main/java/com/jld/vod/view/adapter/MusicListAdapter.kt
  28. 1 0
      app/src/main/java/com/jld/vod/view/adapter/MyAllOrdersAdapter.kt
  29. 3 1
      app/src/main/java/com/jld/vod/view/fragment/HostAllOrdersFragment.kt
  30. 2 1
      app/src/main/java/com/jld/vod/view/fragment/HostNewOrdersFragment.kt
  31. 1 0
      app/src/main/java/com/jld/vod/view/widget/MyJzvdStd.kt
  32. 6 7
      app/src/main/java/com/jld/vod/viewmodel/SplashViewModel.kt
  33. 16 15
      app/src/main/res/layout/activity_musice_play.xml
  34. 1 1
      app/src/main/res/layout/fragment_maps.xml
  35. 1 1
      app/src/main/res/layout/fragment_order.xml
  36. BIN
      app/src/main/res/mipmap-mdpi/test_maps_1.png
  37. 91 0
      app/src/main/res/values-es-rES/strings.xml
  38. 3 0
      app/src/main/res/values-th-rTH/strings.xml
  39. 2 1
      app/src/main/res/values-zh-rCN/strings.xml
  40. 1 0
      app/src/main/res/values/strings.xml
  41. 2 2
      gradlew
  42. 375 0
      hs_err_pid17268.log
  43. 351 0
      hs_err_pid37232.log
  44. 10 4
      keystore.properties
  45. 17383 0
      replay_pid17268.log

+ 122 - 0
.idea/codeStyles/Project.xml

@@ -0,0 +1,122 @@
+<component name="ProjectCodeStyleConfiguration">
+  <code_scheme name="Project" version="173">
+    <JetCodeStyleSettings>
+      <option name="CODE_STYLE_DEFAULTS" value="KOTLIN_OFFICIAL" />
+    </JetCodeStyleSettings>
+    <codeStyleSettings language="XML">
+      <indentOptions>
+        <option name="CONTINUATION_INDENT_SIZE" value="4" />
+      </indentOptions>
+      <arrangement>
+        <rules>
+          <section>
+            <rule>
+              <match>
+                <AND>
+                  <NAME>xmlns:android</NAME>
+                  <XML_ATTRIBUTE />
+                  <XML_NAMESPACE>^$</XML_NAMESPACE>
+                </AND>
+              </match>
+            </rule>
+          </section>
+          <section>
+            <rule>
+              <match>
+                <AND>
+                  <NAME>xmlns:.*</NAME>
+                  <XML_ATTRIBUTE />
+                  <XML_NAMESPACE>^$</XML_NAMESPACE>
+                </AND>
+              </match>
+              <order>BY_NAME</order>
+            </rule>
+          </section>
+          <section>
+            <rule>
+              <match>
+                <AND>
+                  <NAME>.*:id</NAME>
+                  <XML_ATTRIBUTE />
+                  <XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
+                </AND>
+              </match>
+            </rule>
+          </section>
+          <section>
+            <rule>
+              <match>
+                <AND>
+                  <NAME>.*:name</NAME>
+                  <XML_ATTRIBUTE />
+                  <XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
+                </AND>
+              </match>
+            </rule>
+          </section>
+          <section>
+            <rule>
+              <match>
+                <AND>
+                  <NAME>name</NAME>
+                  <XML_ATTRIBUTE />
+                  <XML_NAMESPACE>^$</XML_NAMESPACE>
+                </AND>
+              </match>
+            </rule>
+          </section>
+          <section>
+            <rule>
+              <match>
+                <AND>
+                  <NAME>style</NAME>
+                  <XML_ATTRIBUTE />
+                  <XML_NAMESPACE>^$</XML_NAMESPACE>
+                </AND>
+              </match>
+            </rule>
+          </section>
+          <section>
+            <rule>
+              <match>
+                <AND>
+                  <NAME>.*</NAME>
+                  <XML_ATTRIBUTE />
+                  <XML_NAMESPACE>^$</XML_NAMESPACE>
+                </AND>
+              </match>
+              <order>BY_NAME</order>
+            </rule>
+          </section>
+          <section>
+            <rule>
+              <match>
+                <AND>
+                  <NAME>.*</NAME>
+                  <XML_ATTRIBUTE />
+                  <XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
+                </AND>
+              </match>
+              <order>ANDROID_ATTRIBUTE_ORDER</order>
+            </rule>
+          </section>
+          <section>
+            <rule>
+              <match>
+                <AND>
+                  <NAME>.*</NAME>
+                  <XML_ATTRIBUTE />
+                  <XML_NAMESPACE>.*</XML_NAMESPACE>
+                </AND>
+              </match>
+              <order>BY_NAME</order>
+            </rule>
+          </section>
+        </rules>
+      </arrangement>
+    </codeStyleSettings>
+    <codeStyleSettings language="kotlin">
+      <option name="CODE_STYLE_DEFAULTS" value="KOTLIN_OFFICIAL" />
+    </codeStyleSettings>
+  </code_scheme>
+</component>

+ 5 - 0
.idea/codeStyles/codeStyleConfig.xml

@@ -0,0 +1,5 @@
+<component name="ProjectCodeStyleConfiguration">
+  <state>
+    <option name="USE_PER_PROJECT_SETTINGS" value="true" />
+  </state>
+</component>

+ 0 - 1
.idea/gradle.xml

@@ -18,7 +18,6 @@
           </set>
         </option>
         <option name="resolveModulePerSourceSet" value="false" />
-        <option name="useQualifiedModuleNames" value="true" />
       </GradleProjectSettings>
     </option>
   </component>

+ 2 - 1
app/build.gradle

@@ -21,13 +21,14 @@ android {
                 throw new InvalidUserDataException(ex.toString())
             }
         }
+
     }
 
     defaultConfig {
         applicationId "com.jld.vod"
         minSdkVersion 23
         targetSdkVersion 29
-        versionCode 196
+        versionCode 199
         versionName "1.0"
         testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
     }

+ 0 - 20
app/debug/debug/output.json

@@ -1,20 +0,0 @@
-{
-  "version": 1,
-  "artifactType": {
-    "type": "APK",
-    "kind": "Directory"
-  },
-  "applicationId": "com.jld.vod",
-  "variantName": "debug",
-  "elements": [
-    {
-      "type": "SINGLE",
-      "filters": [],
-      "properties": [],
-      "versionCode": 193,
-      "versionName": "193",
-      "enabled": true,
-      "outputFile": "app-debug.apk"
-    }
-  ]
-}

+ 0 - 20
app/debug/output.json

@@ -1,20 +0,0 @@
-{
-  "version": 1,
-  "artifactType": {
-    "type": "APK",
-    "kind": "Directory"
-  },
-  "applicationId": "com.jld.vod",
-  "variantName": "debug",
-  "elements": [
-    {
-      "type": "SINGLE",
-      "filters": [],
-      "properties": [],
-      "versionCode": 193,
-      "versionName": "193",
-      "enabled": true,
-      "outputFile": "app-debug.apk"
-    }
-  ]
-}

BIN
app/platform.keystore


+ 25 - 28
app/src/main/java/com/jld/vod/base/BaseActivity.kt

@@ -35,14 +35,13 @@ abstract class BaseActivity : XPageActivity() {
     private var mToast: Toast? = null
     private var dialogs: KProgressHUD? = null
     private lateinit var viewModel: MainViewModel
-    private val handlerBaseActivity: Handler =  Handler()
+    private val handlerBaseActivity: Handler = Handler()
 
 
     //用户没操作了
     private val runnableBaseActivity = Runnable {
         LogUtils.logD("用户没操作了")
-        if (Config.isShowAd)
-        {
+        if (Config.isShowAd) {
             //获取固定广告
             viewModel.findPositionAdvert()
         }
@@ -54,39 +53,38 @@ abstract class BaseActivity : XPageActivity() {
         super.onCreate(savedInstanceState)
         setContentView(layoutId)
         mContext = this
-
-        viewModel = ViewModelProvider.AndroidViewModelFactory(application).create(MainViewModel::class.java)
-
+        viewModel =
+            ViewModelProvider.AndroidViewModelFactory(application).create(MainViewModel::class.java)
         initView()
         initData()
         initEvent()
         initAdVert()
 
         val activity = ContextBean.getInstance().getActivity();
-        if (activity == null) { return; }
-        LogUtils.logE("activity"+activity)
+        if (activity == null) {
+            return; }
+        LogUtils.logE("activity" + activity)
         val win = activity.getWindow();
 
-        win.setCallback(object :WinCallback(win.callback){
+        win.setCallback(object : WinCallback(win.callback) {
             override fun dispatchTouchEvent(event: MotionEvent?): Boolean {
                 when (event!!.getAction()) {
-                    MotionEvent.ACTION_DOWN->{
-                        LogUtils.logD( "dispatchTouchEvent:ACTION_DOWN");
+                    MotionEvent.ACTION_DOWN -> {
+                        LogUtils.logD("dispatchTouchEvent:ACTION_DOWN");
                         handlerBaseActivity.removeCallbacks(runnableBaseActivity);
                     }
-                    MotionEvent.ACTION_MOVE->{
-                       // LogUtils.logD("dispatchTouchEvent:activity窗口被触摸");
+                    MotionEvent.ACTION_MOVE -> {
+                        // LogUtils.logD("dispatchTouchEvent:activity窗口被触摸");
                         //handlerBaseActivity.removeCallbacks(runnableBaseActivity)
-                         }
-                    MotionEvent.ACTION_UP->
-                        {
+                    }
+                    MotionEvent.ACTION_UP -> {
 
-                            handlerBaseActivity.removeCallbacks(runnableBaseActivity)
-                            //handlerBaseActivity.postDelayed(runnableBaseActivity, 5 * 1000)
-                            handlerBaseActivity.postDelayed(runnableBaseActivity, 1800 * 1000)
+                        handlerBaseActivity.removeCallbacks(runnableBaseActivity)
+                        //handlerBaseActivity.postDelayed(runnableBaseActivity, 5 * 1000)
+                        handlerBaseActivity.postDelayed(runnableBaseActivity, 1800 * 1000)
 
-                            LogUtils.logD( "dispatchTouchEvent:ACTION_UP");
-                        }
+                        LogUtils.logD("dispatchTouchEvent:ACTION_UP");
+                    }
                 }
                 return super.dispatchTouchEvent(event)
             }
@@ -98,11 +96,10 @@ abstract class BaseActivity : XPageActivity() {
      * 初始化广告模块
      */
     private fun initAdVert() {
-        viewModel.findPositionAdvertLiveData.observe(this) {res->
+        viewModel.findPositionAdvertLiveData.observe(this) { res ->
             when (res?.code) {
                 BaseBean.SUCCESS -> {
-                    if (res.data!!.size != 0)
-                    {
+                    if (res.data != null && res.data.isNotEmpty()) {
                         EventBus.getDefault().post(res.data)
                     }
                     finishLoading()
@@ -117,16 +114,15 @@ abstract class BaseActivity : XPageActivity() {
     }
 
     override fun onWindowFocusChanged(hasFocus: Boolean) {
-        if(hasFocus)
-        {
+        if (hasFocus) {
             handlerBaseActivity.removeCallbacks(runnableBaseActivity)
             handlerBaseActivity.postDelayed(runnableBaseActivity, 1800 * 1000)
-        }else{
+        } else {
             handlerBaseActivity.removeCallbacks(runnableBaseActivity)
         }
 
         //Log.e("zhaofuxin", "onWindowFocusChanged: activity焦点变化=="+hasFocus );
-        super.onWindowFocusChanged(hasFocus )
+        super.onWindowFocusChanged(hasFocus)
     }
 
     open protected fun initView() {}
@@ -212,6 +208,7 @@ abstract class BaseActivity : XPageActivity() {
             dialogs!!.dismiss()
         }
     }
+
     /**
      * 打开fragment
      *

+ 2 - 2
app/src/main/java/com/jld/vod/config/Config.kt

@@ -9,8 +9,8 @@ package com.jld.vod.config
 object Config {
 //    const val ApiBaseUrl : String = "http://192.168.16.110:8088"
 //    const val ApiBaseUrlDebug : String = "http://192.168.16.110:8088"
-    const val ApiBaseUrl : String = "http://192.168.0.18:8088"
-    const val ApiBaseUrlDebug : String = "http://192.168.0.18:8088"
+    const val ApiBaseUrl : String = "http://192.168.0.106:8088"
+    const val ApiBaseUrlDebug : String = "http://192.168.0.106:8088"
 //    true--有线VOD false ---无线VOD
     const val Breed:Boolean = false
 //   进入设置的密码

+ 1 - 1
app/src/main/java/com/jld/vod/model/bean/GEOAdvertBean.kt

@@ -13,7 +13,7 @@ data class Datas(
     val depict: String,
     val filePath: String,
     val fileType: Int,
-    val sid: Int,
+    val sid: Long,
     val status: Int,
     val titleName: String,
     val type: Int,

+ 1 - 2
app/src/main/java/com/jld/vod/service/SocketService.kt

@@ -163,13 +163,12 @@ class SocketService : Service() {
             }
             override fun success(call: Call?, response: Response?) {
                 val json = response!!.body!!.string()
-
+                LogUtils.logD("数据项"+json)
                 val mGEOAdvertBean= gson!!.fromJson(json, GEOAdvertBean::class.java)
                 val msg = Message()
                 msg.what = GEOAD
                 msg.obj = mGEOAdvertBean
                 mHandler.sendMessage(msg)
-
             }
         })
     }

+ 2 - 0
app/src/main/java/com/jld/vod/utils/AppUtil.java

@@ -145,6 +145,8 @@ public class AppUtil {
         PackageManager pm = context.getPackageManager();
         PackageInfo info = pm.getPackageArchiveInfo(apkPath,
                 PackageManager.GET_ACTIVITIES);
+        Log.i("AppUtil", "getApkPackName: "+info);
+
         if (info != null) {
             ApplicationInfo appInfo = info.applicationInfo;
             appInfo.sourceDir = apkPath;

+ 4 - 0
app/src/main/java/com/jld/vod/utils/FileFuUtils.kt

@@ -2,6 +2,8 @@ package com.jld.vod.utils
 
 import java.io.File
 import java.io.FileFilter
+import java.io.IOException
+import java.io.RandomAccessFile
 
 /**
  * @author ZhaoFuXin
@@ -18,4 +20,6 @@ object FileFuUtils : FileFilter {
        return name.endsWith(".mp3")
     }
 
+
+
 }

+ 78 - 0
app/src/main/java/com/jld/vod/utils/HttpFileUtils.java

@@ -0,0 +1,78 @@
+package com.jld.vod.utils;
+
+import android.content.Context;
+import android.util.Log;
+
+import com.jld.vod.utils.http.ProgressFragmentRequestBody;
+import com.jld.vod.utils.http.ProgressListener;
+import com.jld.vod.utils.http.ProgressRequestBody;
+
+import java.io.File;
+import java.util.concurrent.TimeUnit;
+
+import okhttp3.MediaType;
+import okhttp3.MultipartBody;
+import okhttp3.OkHttpClient;
+import okhttp3.Request;
+import okhttp3.RequestBody;
+
+/**
+ * Created by zhaofuxin on 2019/9/12.
+ */
+
+public class HttpFileUtils {
+    private static OkHttpClient okHttpClient = new OkHttpClient.Builder().connectTimeout(10000, TimeUnit.MILLISECONDS)
+            .readTimeout(10000,TimeUnit.MILLISECONDS)
+            .writeTimeout(10000, TimeUnit.MILLISECONDS).
+                    build();
+
+    public static final MediaType JSON = MediaType.parse("application/json; charset=utf-8");
+    public static final MediaType MEDIA_TYPE_MARKDOWN = MediaType.parse("text/x-markdown; charset=utf-8");
+    public static void postFile(Context mContext, String url, final ProgressListener listener, okhttp3.Callback callback, File videopath, Long mid, Long resId){
+        okHttpClient.dispatcher().setMaxRequests(1);
+        okHttpClient.dispatcher().setMaxRequestsPerHost(5);
+        MultipartBody.Builder builder = new MultipartBody.Builder();
+        builder.setType(MultipartBody.FORM);
+
+
+        //第一个参数要与Servlet中的一致
+        builder.addFormDataPart("file",videopath.getName(), RequestBody.create(MediaType.parse("application/octet-stream"),videopath));
+        if (mid != 123456)
+        {
+            builder.addFormDataPart("mid",mid.toString());
+        }
+        builder.addFormDataPart("resId",resId.toString());
+
+        MultipartBody multipartBody = builder.build();
+        Request request  = new Request.Builder().url(url).post(new ProgressRequestBody(multipartBody,listener)).build();
+        okHttpClient.newCall(request).enqueue(callback);
+
+    }
+    /**
+     * 分片传输文件
+     */
+    public static void postFileByFragmentUpload(String url, final ProgressListener listener, okhttp3.Callback callback,
+                                         File videopath,int chunks, Long chunkSize,String md5,String fileName , int chunk, Long resId,Long mid){
+
+        okHttpClient.dispatcher().setMaxRequests(1);
+        okHttpClient.dispatcher().setMaxRequestsPerHost(5);
+        MultipartBody.Builder builder = new MultipartBody.Builder();
+        builder.setType(MultipartBody.FORM);
+        //第一个参数要与Servlet中的一致
+        builder.addFormDataPart("file",videopath.getName(), RequestBody.create(MediaType.parse("application/octet-stream"),videopath));
+        if (mid != 123456)
+        {
+            builder.addFormDataPart("mid",mid.toString());
+        }
+        builder.addFormDataPart("resId",resId.toString());
+        builder.addFormDataPart("chunks",String.valueOf(chunks));
+        builder.addFormDataPart("chunk",String.valueOf(chunk));
+        builder.addFormDataPart("md5",md5);
+        builder.addFormDataPart("fileName",fileName);
+        builder.addFormDataPart("chunkSize",chunkSize.toString());
+
+        MultipartBody multipartBody = builder.build();
+        Request request  = new Request.Builder().url(url).post(new ProgressFragmentRequestBody(multipartBody,listener)).build();
+        okHttpClient.newCall(request).enqueue(callback);
+    }
+}

+ 2 - 1
app/src/main/java/com/jld/vod/utils/WifiUtil.java

@@ -78,7 +78,8 @@ public class WifiUtil {
      * @return 优先获取网卡地址
      */
     public static String getBroadcastAddress() {
-        String broadcast = getBroadcastAddress("p2p");
+//        p2p
+        String broadcast = getBroadcastAddress("eth0");
         if (broadcast == null) {
             return getBroadcastAddress("wlan0");
         }

+ 117 - 10
app/src/main/java/com/jld/vod/utils/http/HttpFileUtil.java

@@ -2,9 +2,22 @@ package com.jld.vod.utils.http;
 
 import android.content.Context;
 import android.util.Log;
+
+import com.jld.vod.utils.LogUtils;
+
 import java.io.File;
+import java.security.SecureRandom;
+import java.security.cert.CertificateException;
+import java.security.cert.X509Certificate;
 import java.util.concurrent.TimeUnit;
 
+import javax.net.ssl.HostnameVerifier;
+import javax.net.ssl.SSLContext;
+import javax.net.ssl.SSLSession;
+import javax.net.ssl.SSLSocketFactory;
+import javax.net.ssl.TrustManager;
+import javax.net.ssl.X509TrustManager;
+
 import okhttp3.MediaType;
 import okhttp3.MultipartBody;
 import okhttp3.OkHttpClient;
@@ -16,20 +29,76 @@ import okhttp3.RequestBody;
  */
 
 public class HttpFileUtil {
-    private static OkHttpClient okHttpClient = new OkHttpClient.Builder().connectTimeout(10000, TimeUnit.MILLISECONDS)
-            .readTimeout(10000,TimeUnit.MILLISECONDS)
-            .writeTimeout(10000, TimeUnit.MILLISECONDS).
-                    build();
-
+    private static HttpFileUtil mInstance;
+    private OkHttpClient mOkHttpClient;
+    private static final byte[] LOCKER = new byte[0];
     public static final MediaType JSON = MediaType.parse("application/json; charset=utf-8");
     public static final MediaType MEDIA_TYPE_MARKDOWN = MediaType.parse("text/x-markdown; charset=utf-8");
-    public static void postFile(Context mContext,String url, final ProgressListener listener, okhttp3.Callback callback, File videopath,Long mid,Long resId){
-        okHttpClient.dispatcher().setMaxRequests(1);
-        okHttpClient.dispatcher().setMaxRequestsPerHost(5);
+
+
+    private HttpFileUtil() {
+        okhttp3.OkHttpClient.Builder ClientBuilder = new okhttp3.OkHttpClient.Builder();
+
+        ClientBuilder.readTimeout(10000, TimeUnit.SECONDS);//读取超时
+        ClientBuilder.connectTimeout(10000, TimeUnit.SECONDS);//连接超时
+        ClientBuilder.writeTimeout(10000, TimeUnit.SECONDS);//写入超时
+        //支持HTTPS请求,跳过证书验证
+        ClientBuilder.sslSocketFactory(createSSLSocketFactory());
+        ClientBuilder.hostnameVerifier(new HostnameVerifier() {
+            @Override
+            public boolean verify(String hostname, SSLSession session) {
+                return true;
+            }
+        });
+
+        mOkHttpClient = ClientBuilder.build();
+    }
+
+    /**
+     * 单例模式获取NetUtils
+     *
+     * @return
+     */
+    public static HttpFileUtil getInstance() {
+        if (mInstance == null) {
+            synchronized (LOCKER) {
+                if (mInstance == null) {
+                    mInstance = new HttpFileUtil();
+                }
+            }
+        }
+        return mInstance;
+    }
+
+    public  void postFile(Context mContext,String url, final ProgressListener listener, okhttp3.Callback callback, File videopath,Long mid,Long resId){
+        mOkHttpClient.dispatcher().setMaxRequests(1);
+        mOkHttpClient.dispatcher().setMaxRequestsPerHost(5);
         MultipartBody.Builder builder = new MultipartBody.Builder();
         builder.setType(MultipartBody.FORM);
+        //第一个参数要与Servlet中的一致
+        builder.addFormDataPart("file",videopath.getName(), RequestBody.create(MediaType.parse("application/octet-stream"),videopath));
+        if (mid != 123456)
+        {
+            builder.addFormDataPart("mid",mid.toString());
+        }
+        builder.addFormDataPart("resId",resId.toString());
+
+        MultipartBody multipartBody = builder.build();
+        Request request  = new Request.Builder().url(url).post(new ProgressRequestBody(multipartBody,listener)).build();
+        mOkHttpClient.newCall(request).enqueue(callback);
+    }
 
 
+    /**
+     * 分片传输文件
+     */
+    public void postFileByFragmentUpload(String url, final ProgressListener listener, okhttp3.Callback callback,
+                                File videopath,int chunks, Long chunkSize,String md5,String fileName , int chunk, Long resId,Long mid){
+
+//        okHttpClient.dispatcher().setMaxRequests(1);
+//        okHttpClient.dispatcher().setMaxRequestsPerHost(5);
+        MultipartBody.Builder builder = new MultipartBody.Builder();
+        builder.setType(MultipartBody.FORM);
         //第一个参数要与Servlet中的一致
         builder.addFormDataPart("file",videopath.getName(), RequestBody.create(MediaType.parse("application/octet-stream"),videopath));
         if (mid != 123456)
@@ -37,10 +106,48 @@ public class HttpFileUtil {
             builder.addFormDataPart("mid",mid.toString());
         }
         builder.addFormDataPart("resId",resId.toString());
+        builder.addFormDataPart("chunks",String.valueOf(chunks));
+        builder.addFormDataPart("chunk",String.valueOf(chunk));
+        builder.addFormDataPart("md5",md5);
+        builder.addFormDataPart("fileName",fileName);
+        builder.addFormDataPart("chunkSize",chunkSize.toString());
 
         MultipartBody multipartBody = builder.build();
-        Request request  = new Request.Builder().url(url).post(new ProgressRequestBody(multipartBody,listener)).build();
-        okHttpClient.newCall(request).enqueue(callback);
+        Request request  = new Request.Builder().url(url).post(new ProgressFragmentRequestBody(multipartBody,listener)).build();
+        mOkHttpClient.newCall(request).enqueue(callback);
+    }
+    /**
+     * 生成安全套接字工厂,用于https请求的证书跳过
+     *
+     * @return
+     */
+    public SSLSocketFactory createSSLSocketFactory() {
+        SSLSocketFactory ssfFactory = null;
+        try {
+            SSLContext sc = SSLContext.getInstance("TLS");
+            sc.init(null, new TrustManager[]{new TrustAllCerts()}, new SecureRandom());
+            ssfFactory = sc.getSocketFactory();
+        } catch (Exception e) {
+        }
+        return ssfFactory;
+    }
+
+    /**
+     * 用于信任所有证书
+     */
+    class TrustAllCerts implements X509TrustManager {
+        @Override
+        public void checkClientTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException {
+        }
 
+        @Override
+        public void checkServerTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException {
+
+        }
+
+        @Override
+        public X509Certificate[] getAcceptedIssuers() {
+            return new X509Certificate[0];
+        }
     }
 }

+ 1 - 1
app/src/main/java/com/jld/vod/utils/http/OkHttpDownloadUtils.java

@@ -58,7 +58,7 @@ public class OkHttpDownloadUtils {
         ClientBuilder.connectTimeout(CONNECT_TIMEOUT, TimeUnit.SECONDS);//连接超时
         ClientBuilder.writeTimeout(WRITE_TIMEOUT, TimeUnit.SECONDS);//写入超时
         //支持HTTPS请求,跳过证书验证
-        ClientBuilder.sslSocketFactory(createSSLSocketFactory());
+        ClientBuilder.sslSocketFactory(createSSLSocketFactory(),new TrustAllCerts());
         ClientBuilder.hostnameVerifier(new HostnameVerifier() {
             @Override
             public boolean verify(String hostname, SSLSession session) {

+ 21 - 1
app/src/main/java/com/jld/vod/utils/http/OkHttpUtils.java

@@ -40,6 +40,25 @@ import okhttp3.Response;
  * Created by fxjzzyo on 2017/7/12.
  */
 
+/**
+ * 用于信任所有证书
+ */
+class TrustAllCerts implements X509TrustManager {
+    @Override
+    public void checkClientTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException {
+    }
+
+    @Override
+    public void checkServerTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException {
+
+    }
+
+    @Override
+    public X509Certificate[] getAcceptedIssuers() {
+        return new X509Certificate[0];
+    }
+}
+
 public class OkHttpUtils {
     public final static int READ_TIMEOUT = 100;
     public final static int CONNECT_TIMEOUT = 60;
@@ -57,7 +76,8 @@ public class OkHttpUtils {
         ClientBuilder.connectTimeout(CONNECT_TIMEOUT, TimeUnit.SECONDS);//连接超时
         ClientBuilder.writeTimeout(WRITE_TIMEOUT, TimeUnit.SECONDS);//写入超时
         //支持HTTPS请求,跳过证书验证
-        ClientBuilder.sslSocketFactory(createSSLSocketFactory());
+        ClientBuilder.sslSocketFactory(createSSLSocketFactory(), new TrustAllCerts());
+
         ClientBuilder.hostnameVerifier(new HostnameVerifier() {
             @Override
             public boolean verify(String hostname, SSLSession session) {

+ 144 - 0
app/src/main/java/com/jld/vod/utils/http/ProgressFragmentRequestBody.java

@@ -0,0 +1,144 @@
+package com.jld.vod.utils.http;
+
+import android.os.Handler;
+import android.os.Looper;
+import android.os.Message;
+import android.util.Log;
+
+import androidx.annotation.NonNull;
+
+import com.jld.vod.model.ProgressModel;
+import com.jld.vod.utils.LogUtils;
+
+import java.io.IOException;
+
+import okhttp3.MediaType;
+import okhttp3.RequestBody;
+import okio.Buffer;
+import okio.BufferedSink;
+import okio.ForwardingSink;
+import okio.Okio;
+import okio.Sink;
+
+/**
+ * Created by zhaofuxin on 2019/9/11.
+ */
+
+public class ProgressFragmentRequestBody extends RequestBody {
+    public static final int UPDATE = 0x01;
+    private RequestBody requestBody;
+    private ProgressListener mListener;
+    private BufferedSink bufferedSink;
+    private Handler myHandler;
+    public ProgressFragmentRequestBody(RequestBody body, ProgressListener listener) {
+        requestBody = body;
+        mListener = listener;
+       if (myHandler==null){
+            myHandler = new MyHandler();
+        }
+//        WorkerThread wt = new WorkerThread() ;
+//        wt.start() ;
+    }
+
+//
+//    class WorkerThread extends Thread{
+//        @Override
+//        public void run() {
+//            super.run();
+//            Looper.prepare() ;
+//            myHandler = new Handler(){
+//                @Override
+//                public void handleMessage(@NonNull Message msg) {
+//                    super.handleMessage(msg);
+//                    switch (msg.what) {
+//                        case UPDATE:
+//                            ProgressModel progressModel = (ProgressModel) msg.obj;
+//                            LogUtils.INSTANCE.logD("bytesWritten=" + progressModel.getCurrentBytes() + "contentLength" + progressModel.getContentLength());
+//                            if (mListener != null)
+//                                mListener.onProgress(progressModel.getCurrentBytes(), progressModel.getContentLength(), progressModel.isDone());
+//                            break;
+//                    }
+//                }
+//            };
+//            Looper.loop() ;
+//        }
+//    }
+
+    class MyHandler extends Handler {
+
+        public MyHandler() {
+            super(Looper.getMainLooper());
+        }
+
+        @Override
+        public void handleMessage(Message msg) {
+            switch (msg.what){
+                case UPDATE:
+                    ProgressModel progressModel = (ProgressModel) msg.obj;
+                   // LogUtils.INSTANCE.logD("bytesWritten="+progressModel.getCurrentBytes()+"contentLength"+ progressModel.getContentLength());
+                    if (mListener!=null)mListener.onProgress(progressModel.getCurrentBytes(),progressModel.getContentLength(),progressModel.isDone());
+                    break;
+
+            }
+        }
+
+
+    }
+
+    @Override
+    public MediaType contentType() {
+        return requestBody.contentType();
+    }
+
+    @Override
+    public long contentLength() throws IOException {
+        return requestBody.contentLength();
+    }
+
+    @Override
+    public void writeTo(BufferedSink sink) throws IOException {
+
+        if (bufferedSink==null){
+            bufferedSink = Okio.buffer(sink(sink));
+        }
+        //写入
+        requestBody.writeTo(bufferedSink);
+        //刷新
+        bufferedSink.flush();
+    }
+
+    private Sink sink(BufferedSink sink) {
+
+        return new ForwardingSink(sink) {
+            long bytesWritten = 0L;
+            long contentLength = 0L;
+            @Override
+            public void write(Buffer source, long byteCount) throws IOException {
+                super.write(source, byteCount);
+                if (contentLength==0){
+                    contentLength = contentLength();
+                }
+                bytesWritten += byteCount;
+               // LogUtils.INSTANCE.logD("bytesWritten="+bytesWritten+"contentLength"+contentLength);
+                //回调
+//                Message msg = Message.obtain();
+//                msg.what = UPDATE;
+//                msg.obj =  new ProgressModel(bytesWritten,contentLength,bytesWritten==contentLength);
+//                myHandler.sendMessage(msg);
+               // LogUtils.INSTANCE.logD("isok="+isok);
+              //  sendMsg(msg);
+              //  if (mListener!=null)mListener.onProgress(bytesWritten,contentLength,bytesWritten==contentLength);
+            }
+        };
+    }
+
+    private void sendMsg(Message msg)
+    {
+       boolean isOk =  myHandler.sendMessage(msg);
+       if (!isOk)
+       {
+           myHandler.sendMessage(msg);
+       }
+    }
+
+}

+ 2 - 3
app/src/main/java/com/jld/vod/utils/http/RetrofitUtils.kt

@@ -3,10 +3,8 @@ package com.jld.vod.utils.http
 import com.google.gson.GsonBuilder
 import com.jld.vod.base.MyApplication
 import com.jld.vod.config.Config
-import com.jld.vod.model.bean.*
 import com.jld.vod.interfaces.remote.Apis
-import com.jld.vod.utils.http.FileRequestBody
-import com.jld.vod.utils.http.RetrofitCallback
+import com.jld.vod.model.bean.*
 import io.reactivex.android.schedulers.AndroidSchedulers
 import io.reactivex.disposables.Disposable
 import io.reactivex.schedulers.Schedulers
@@ -336,6 +334,7 @@ object RetrofitUtils {
     fun findGameByNoInstall(terminal :String,observer: (userBean: BaseBean<List<FindGameByNoInstallBean>>) -> Unit, error: (t: Throwable) -> Unit): Disposable {
         val disposable = apis.findGameByNoInstall(terminal).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread())
             .subscribe(observer, error)
+//        Lo
         return disposable
     }
 

+ 0 - 1
app/src/main/java/com/jld/vod/view/HomeActivity.kt

@@ -65,7 +65,6 @@ class HomeActivity : BaseActivity() {
     override fun initView() {
         super.initView()
 
-
         //开启获取经纬度服务
         startService(Intent(this,LatLongService::class.java))
         //开启固定广告服务

+ 2 - 0
app/src/main/java/com/jld/vod/view/MainActivity.kt

@@ -93,6 +93,8 @@ class MainActivity : BaseActivity() {
         {
             tv_plate.setText(carNum)
         }
+        //初始化版本号
+
 
         //动态背景图片
         val main_bg_img = SharedPrefUtils.getString(this,"main_bg_img")

+ 3 - 0
app/src/main/java/com/jld/vod/view/MusicPlayActivity.kt

@@ -504,11 +504,14 @@ class MusicPlayActivity : BaseActivity(),View.OnClickListener {
 //                }
                 this.audio = audioList[index]
                 play(audio)
+
             }
         }
         this.audio = audioList[musicId]
         play(audio)
+        LogUtils.logD("当前音乐"+audioList[musicId].name+ "---------"+audioList[musicId].author)
         this.runOnUiThread {
+
             tv_music_name.setText(audioList[musicId].name)
             tv_music_singer.setText(audioList[musicId].author)
         }

+ 398 - 189
app/src/main/java/com/jld/vod/view/PostFileActivity.kt

@@ -3,35 +3,30 @@ package com.jld.vod.view
 import android.app.ProgressDialog
 import android.content.Context
 import android.os.Handler
+import android.os.Looper
 import android.os.Message
 import android.widget.Toast
-import androidx.lifecycle.Observer
 import androidx.lifecycle.ViewModelProvider
-import androidx.lifecycle.ViewModelProviders
 import androidx.lifecycle.observe
+import com.google.gson.Gson
 import com.jld.vod.R
 import com.jld.vod.base.BaseActivity
 import com.jld.vod.config.Config
 import com.jld.vod.model.bean.BaseBean
-import com.jld.vod.model.bean.GameResByNotUploaded
-import com.jld.vod.model.bean.MovieResByNotUploaded
-import com.jld.vod.model.bean.MusicResByNotUploaded
+import com.jld.vod.model.bean.ResultBean
 import com.jld.vod.model.event.UsbStatusChangeEvent
+import com.jld.vod.utils.HttpFileUtils
 import com.jld.vod.utils.LogUtils
 import com.jld.vod.utils.http.HttpFileUtil
+import com.jld.vod.utils.http.ProgressFragmentRequestBody
 import com.jld.vod.utils.http.ProgressListener
-import com.jld.vod.utils.http.RetrofitCallback
 import com.jld.vod.viewmodel.MainViewModel
 import com.jld.vod.viewmodel.PostFileViewModel
-import com.jld.vod.viewmodel.SplashViewModel
 import okhttp3.Callback
 import org.greenrobot.eventbus.EventBus
 import org.greenrobot.eventbus.Subscribe
 import org.greenrobot.eventbus.ThreadMode
-import retrofit2.Call
-import retrofit2.Response
-import java.io.File
-import java.io.IOException
+import java.io.*
 
 /**
  * @author ZhaoFuXin
@@ -41,87 +36,88 @@ import java.io.IOException
  */
 class PostFileActivity : BaseActivity() {
 
-    private var strFilePath:String? = null
+    private var strFilePath: String? = null
+    private var gson: Gson? = null
     private lateinit var postFileViewModel: PostFileViewModel
     private lateinit var mainViewModel: MainViewModel
     private var progressdialog: ProgressDialog? = null
     private var totalitem = 0//数据大小
     private var lenitem = 1//当前上传数据下标
     private var flag = true
-    private var context:Context? = null
-    private val mHandler = Handler(Handler.Callback {
-        when(it.what)
-        {
-             0->{
-                 val id: Int = it.arg1
-                 val file = it.obj as String
-
-                 progressdialog!!.setTitle("Uploading Movie ( $lenitem/$totalitem )")
-                 progressdialog!!.progress = id
-                 progressdialog!!.setMessage(file)
-                 progressdialog!!.setCancelable(false)
-                 progressdialog!!.setCanceledOnTouchOutside(false)
-                 progressdialog!!.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL)
-                 progressdialog!!.show()
-
-                 if (id == 100)
-                 {
-                     progressdialog!!.dismiss()
-                 }
-             }
-            1->{
-                val id: Int = it.arg1
-                val file = it.obj as String
-                progressdialog!!.setTitle("Uploading Music ( $lenitem/$totalitem )")
-                progressdialog!!.progress = id
-                progressdialog!!.setMessage(file)
-                progressdialog!!.setCancelable(false)
-                progressdialog!!.setCanceledOnTouchOutside(false)
-                progressdialog!!.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL)
-                progressdialog!!.show()
-
-                if (id == 100)
-                {
-                    progressdialog!!.dismiss()
+    private var context: Context? = null
+    private lateinit var myHandler: Handler
+    private var progressitem:Int = 0
+    private val mHandler = object : Handler() {
+        override fun handleMessage(msg: Message) {
+            super.handleMessage(msg)
+
+            when (msg.what) {
+                0 -> {
+                    val id: Int = msg.arg1
+                    val file = msg.obj as String
+                    // LogUtils.logD("id===$id====file==$file")
+                    progressdialog!!.setTitle("Uploading Movie ( $lenitem/$totalitem )")
+                    progressdialog!!.progress = id
+                    progressdialog!!.setMessage(file)
+                    progressdialog!!.setCancelable(false)
+                    progressdialog!!.setCanceledOnTouchOutside(false)
+                    progressdialog!!.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL)
+                    progressdialog!!.show()
+
+                    if (id == 100) {
+                        progressdialog!!.dismiss()
+                    }
                 }
-            }
-            2->{
-                val id: Int = it.arg1
-                val file = it.obj as String
-
-                progressdialog!!.setTitle("Uploading Game ( $lenitem/$totalitem )")
-                progressdialog!!.progress = id
-                progressdialog!!.setMessage(file)
-                progressdialog!!.setCancelable(false)
-                progressdialog!!.setCanceledOnTouchOutside(false)
-                progressdialog!!.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL)
-                progressdialog!!.show()
-
-                if (id == 100)
-                {
-                    progressdialog!!.dismiss()
+                1 -> {
+                    val id: Int = msg.arg1
+                    val file = msg.obj as String
+                    progressdialog!!.setTitle("Uploading Music ( $lenitem/$totalitem )")
+                    progressdialog!!.progress = id
+                    progressdialog!!.setMessage(file)
+                    progressdialog!!.setCancelable(false)
+                    progressdialog!!.setCanceledOnTouchOutside(false)
+                    progressdialog!!.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL)
+                    progressdialog!!.show()
+
+                    if (id == 100) {
+                        progressdialog!!.dismiss()
+                    }
                 }
-            }
-            3->{
-                val id: Int = it.arg1
-                val file = it.obj as String
-
-                progressdialog!!.setTitle("Uploading Ads ( $lenitem/$totalitem )")
-                progressdialog!!.progress = id
-                progressdialog!!.setMessage(file)
-                progressdialog!!.setCancelable(false)
-                progressdialog!!.setCanceledOnTouchOutside(false)
-                progressdialog!!.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL)
-                progressdialog!!.show()
-
-                if (id == 100)
-                {
-                    progressdialog!!.dismiss()
+                2 -> {
+                    val id: Int = msg.arg1
+                    val file = msg.obj as String
+
+                    progressdialog!!.setTitle("Uploading Game ( $lenitem/$totalitem )")
+                    progressdialog!!.progress = id
+                    progressdialog!!.setMessage(file)
+                    progressdialog!!.setCancelable(false)
+                    progressdialog!!.setCanceledOnTouchOutside(false)
+                    progressdialog!!.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL)
+                    progressdialog!!.show()
+
+                    if (id == 100) {
+                        progressdialog!!.dismiss()
+                    }
+                }
+                3 -> {
+                    val id: Int = msg.arg1
+                    val file = msg.obj as String
+
+                    progressdialog!!.setTitle("Uploading Ads ( $lenitem/$totalitem )")
+                    progressdialog!!.progress = id
+                    progressdialog!!.setMessage(file)
+                    progressdialog!!.setCancelable(false)
+                    progressdialog!!.setCanceledOnTouchOutside(false)
+                    progressdialog!!.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL)
+                    progressdialog!!.show()
+
+                    if (id == 100) {
+                        progressdialog!!.dismiss()
+                    }
                 }
             }
         }
-        false
-    })
+    }
 
 
     override fun getLayoutId(): Int {
@@ -134,9 +130,18 @@ class PostFileActivity : BaseActivity() {
 
         context = this
         progressdialog = ProgressDialog(this@PostFileActivity)
+        //        if (myHandler==null){
+//            myHandler = new MyHandler();
+//        }
+        val WorkerThread = WorkerThread()
+        WorkerThread.start()
     }
+
     override fun initData() {
         super.initData()
+        //初始化gson
+        gson = Gson()
+
         //u盘路径
         val mIntent = intent
         strFilePath = mIntent.getStringExtra("path")
@@ -145,7 +150,8 @@ class PostFileActivity : BaseActivity() {
         EventBus.getDefault().register(this)
 
         //初始化viewmodel
-        postFileViewModel = ViewModelProvider.AndroidViewModelFactory(application).create(PostFileViewModel::class.java)
+        postFileViewModel = ViewModelProvider.AndroidViewModelFactory(application)
+            .create(PostFileViewModel::class.java)
 
 
         //获取未上传电影列表
@@ -165,32 +171,35 @@ class PostFileActivity : BaseActivity() {
      * 初始化电影列表
      */
     private fun initMovieList() {
-        postFileViewModel.findResByNotUploadedmovieliveData.observe(this){res->
-            LogUtils.logD("initMovieList"+res.data)
+        postFileViewModel.findResByNotUploadedmovieliveData.observe(this) { res ->
+            LogUtils.logD("initMovieList" + res.data)
             when (res?.code) {
                 BaseBean.SUCCESS -> {
                     finishLoading()
-                    if (res.data!!.size != 0)
-                    {
-                        for ((index,data) in res.data.withIndex())
-                        {
-                            val file = File(strFilePath, data.movieId.toString()+".mp4")
+                    if (res.data!!.size != 0) {
+//                        for ((index, data) in res.data.withIndex()) {
+//                            val file = File(strFilePath, data.movieId.toString() + ".mp4")
+//                            if (file.exists()) {
+//                                totalitem++
+//                            }
+//                        }
+                        for ((index, data) in res.data.withIndex()) {
+                            val file = File(strFilePath, data.movieId.toString() + ".mp4")
                             val mid = data.mid
                             val resId = data.movieId
-                            if (file.exists())
-                            {
+
+                            if (file.exists()) {
                                 //上传电影
-                                postFileMovie(file,mid,resId)
-                            }else{
-                                if (flag)
-                                {
+                                postFileMovie(file, mid, resId)
+                               // postFileMovieByFragmentUpload(file, mid, resId)
+                            } else {
+                                if (flag) {
                                     flag = false
                                     postFileViewModel.findResByNotUploadedmusic()//继续获取未上传音乐列表
                                 }
-
                             }
                         }
-                    }else{
+                    } else {
                         postFileViewModel.findResByNotUploadedmusic()//继续获取未上传音乐列表
                     }
                 }
@@ -207,31 +216,27 @@ class PostFileActivity : BaseActivity() {
      * 初始化音乐列表
      */
     private fun initMusicList() {
-        postFileViewModel.findResByNotUploadedmusicliveData.observe(this){res->
+        postFileViewModel.findResByNotUploadedmusicliveData.observe(this) { res ->
             when (res?.code) {
                 BaseBean.SUCCESS -> {
                     flag = true
                     finishLoading()
-                    if (res.data!!.size != 0)
-                    {
-                        for ((index,data) in res.data.withIndex())
-                        {
-                            val file = File(strFilePath, data.musicId.toString()+".mp3")
+                    if (res.data!!.size != 0) {
+                        for ((index, data) in res.data.withIndex()) {
+                            val file = File(strFilePath, data.musicId.toString() + ".mp3")
                             val mid = data.mid
                             val resId = data.musicId
-                            if (file.exists())
-                            {
+                            if (file.exists()) {
                                 //上传音乐
-                                postFileMusic(file,mid,resId)
-                            }else{
-                                if (flag)
-                                {
+                                postFileMusic(file, mid, resId)
+                            } else {
+                                if (flag) {
                                     flag = false
                                     postFileViewModel.findResByNotUploadedadvert()//继续获取未上传广告列表
                                 }
                             }
                         }
-                    }else{
+                    } else {
                         postFileViewModel.findResByNotUploadedadvert()//继续获取未上传广告列表
                     }
                 }
@@ -243,35 +248,32 @@ class PostFileActivity : BaseActivity() {
             }
         }
     }
+
     /**
      * 初始化广告列表
      */
     private fun initAdvertList() {
-        postFileViewModel.findResByNotUploadedadvertliveData.observe(this){res->
-            LogUtils.logD("initAdvertList"+res.data)
+        postFileViewModel.findResByNotUploadedadvertliveData.observe(this) { res ->
+            LogUtils.logD("initAdvertList" + res.data)
             when (res?.code) {
                 BaseBean.SUCCESS -> {
                     flag = true
                     finishLoading()
-                    if (res.data!!.size != 0)
-                    {
-                        for ((index,data) in res.data.withIndex())
-                        {
-                            val file = File(strFilePath, data.aid.toString()+".mp4")
+                    if (res.data!!.size != 0) {
+                        for ((index, data) in res.data.withIndex()) {
+                            val file = File(strFilePath, data.aid.toString() + ".mp4")
                             val resId = data.aid
-                            if (file.exists())
-                            {
+                            if (file.exists()) {
                                 //上传广告
-                                postFileAdvert(file,123456L,resId)
-                            }else{
-                                if (flag)
-                                {
+                                postFileAdvert(file, 123456L, resId)
+                            } else {
+                                if (flag) {
                                     flag = false
                                     postFileViewModel.findResByNotUploadedgame()//继续获取未上传游戏列表
                                 }
                             }
                         }
-                    }else{
+                    } else {
                         postFileViewModel.findResByNotUploadedgame()//继续获取未上传游戏列表
                     }
                 }
@@ -289,26 +291,23 @@ class PostFileActivity : BaseActivity() {
      */
     private fun initGameList() {
         //监听游戏列表
-        postFileViewModel.findResByNotUploadedgameliveData.observe(this){res->
-           // LogUtils.logD("game"+res)
+        postFileViewModel.findResByNotUploadedgameliveData.observe(this) { res ->
+            // LogUtils.logD("game"+res)
             when (res?.code) {
                 BaseBean.SUCCESS -> {
                     finishLoading()
 
-                    if (res.data!!.size != 0)
-                    {
-                        for ((index,data) in res.data.withIndex())
-                        {
-                            val file = File(strFilePath, data.gid.toString()+".apk")
+                    if (res.data!!.size != 0) {
+                        for ((index, data) in res.data.withIndex()) {
+                            val file = File(strFilePath, data.gid.toString() + ".apk")
                             val mid = data.mid
                             val resId = data.gid
-                            if (file.exists())
-                            {
+                            if (file.exists()) {
                                 //上传游戏
-                                postFileGame(file,mid,resId)
+                                postFileGame(file, mid, resId)
                             }
                         }
-                    }else{
+                    } else {
                         LogUtils.logD("上传数据为空")
                     }
                 }
@@ -320,20 +319,20 @@ class PostFileActivity : BaseActivity() {
             }
         }
     }
+
     /**
      * 上传游戏
      */
-    private fun postFileGame(file: File,mid : Long,resId:Long) {
+    private fun postFileGame(file: File, mid: Long, resId: Long) {
         totalitem++
-        HttpFileUtil.postFile(this, Config.ApiBaseUrl + "/game/upload",
+        HttpFileUtil.getInstance().postFile(this, Config.ApiBaseUrl + "/game/upload",
             object : ProgressListener {
                 override fun onProgress(currentBytes: Long, contentLength: Long, done: Boolean) {
                     //  Log.i(TAG, "file="+file.getName()+"id="+id+"currentBytes==" + currentBytes + "==contentLength==" + contentLength + "==done==" + done);
                     val progress = (currentBytes * 100 / contentLength).toInt()
                     if (done == true) {
                         lenitem++
-                        if (lenitem == totalitem)
-                        {
+                        if (lenitem == totalitem) {
                             //数据下标重置
                             lenitem = 1
                             totalitem = 0
@@ -356,23 +355,23 @@ class PostFileActivity : BaseActivity() {
                     val result = response.body!!.string()
                     LogUtils.logD(result.toString())
                 }
-            }, file,mid,resId)
+            }, file, mid, resId
+        )
     }
 
     /**
      * 上传音乐
      */
-    private fun postFileMusic(file: File,mid : Long,resId:Long) {
+    private fun postFileMusic(file: File, mid: Long, resId: Long) {
         totalitem++
-        HttpFileUtil.postFile(this, Config.ApiBaseUrl + "/music/upload",
+        HttpFileUtil.getInstance().postFile(this, Config.ApiBaseUrl + "/music/upload",
             object : ProgressListener {
                 override fun onProgress(currentBytes: Long, contentLength: Long, done: Boolean) {
                     //  Log.i(TAG, "file="+file.getName()+"id="+id+"currentBytes==" + currentBytes + "==contentLength==" + contentLength + "==done==" + done);
                     val progress = (currentBytes * 100 / contentLength).toInt()
                     if (done == true) {
                         lenitem++
-                        if (lenitem == totalitem)
-                        {
+                        if (lenitem == totalitem) {
                             //数据下标重置
                             lenitem = 1
                             totalitem = 0
@@ -395,72 +394,84 @@ class PostFileActivity : BaseActivity() {
                     val result = response.body!!.string()
                     LogUtils.logD(result.toString())
                 }
-            }, file,mid,resId)
+            }, file, mid, resId
+        )
     }
 
     /**
      * 上传音乐
      */
-    private fun postFileAdvert(file: File,mid : Long,resId:Long) {
+    private fun postFileAdvert(file: File, mid: Long, resId: Long) {
         totalitem++
-        HttpFileUtil.postFile(this, Config.ApiBaseUrl + "/advert/upload",
-                object : ProgressListener {
-                    override fun onProgress(currentBytes: Long, contentLength: Long, done: Boolean) {
-                        //  Log.i(TAG, "file="+file.getName()+"id="+id+"currentBytes==" + currentBytes + "==contentLength==" + contentLength + "==done==" + done);
-                        val progress = (currentBytes * 100 / contentLength).toInt()
-                        if (done == true) {
-                            lenitem++
-                            if (lenitem == totalitem)
-                            {
-                                //数据下标重置
-                                lenitem = 1
-                                totalitem = 0
-                                postFileViewModel.findResByNotUploadedgame()//继续获取未上传游戏列表
-                            }
+        HttpFileUtil.getInstance().postFile(this, Config.ApiBaseUrl + "/advert/upload",
+            object : ProgressListener {
+                override fun onProgress(currentBytes: Long, contentLength: Long, done: Boolean) {
+                    //  Log.i(TAG, "file="+file.getName()+"id="+id+"currentBytes==" + currentBytes + "==contentLength==" + contentLength + "==done==" + done);
+                    val progress = (currentBytes * 100 / contentLength).toInt()
+                    if (done == true) {
+                        lenitem++
+                        if (lenitem == totalitem) {
+                            //数据下标重置
+                            lenitem = 1
+                            totalitem = 0
+                            postFileViewModel.findResByNotUploadedgame()//继续获取未上传游戏列表
                         }
-                        val msg: Message = mHandler.obtainMessage()
-                        msg.arg1 = progress
-                        msg.what = 3
-                        msg.obj = file.name
-                        mHandler.sendMessage(msg)
                     }
-                }, object : Callback {
-            override fun onFailure(call: okhttp3.Call, e: IOException) {
-                LogUtils.logE(e.toString())
-            }
+                    val msg: Message = mHandler.obtainMessage()
+                    msg.arg1 = progress
+                    msg.what = 3
+                    msg.obj = file.name
+                    mHandler.sendMessage(msg)
+                }
+            }, object : Callback {
+                override fun onFailure(call: okhttp3.Call, e: IOException) {
+                    LogUtils.logE(e.toString())
+                }
 
-            @Throws(IOException::class)
-            override fun onResponse(call: okhttp3.Call, response: okhttp3.Response) {
-                val result = response.body!!.string()
-                LogUtils.logD(result.toString())
-            }
-        }, file,mid,resId)
+                @Throws(IOException::class)
+                override fun onResponse(call: okhttp3.Call, response: okhttp3.Response) {
+                    val result = response.body!!.string()
+                    LogUtils.logD(result.toString())
+                }
+            }, file, mid, resId
+        )
     }
+
     /**
      * 上传电影
      */
-    private fun postFileMovie(file: File,mid : Long,resId:Long) {
+
+    private fun postFileMovie(file: File, mid: Long, resId: Long) {
         totalitem++
-        HttpFileUtil.postFile(this, Config.ApiBaseUrl + "/movie/upload",
+        HttpFileUtil.getInstance().postFile(this, Config.ApiBaseUrl + "/movie/upload",
             object : ProgressListener {
                 override fun onProgress(currentBytes: Long, contentLength: Long, done: Boolean) {
-                    //  Log.i(TAG, "file="+file.getName()+"id="+id+"currentBytes==" + currentBytes + "==contentLength==" + contentLength + "==done==" + done);
+                    //  Log.i("PostFile====", "file="+file.getName()+"currentBytes==" + currentBytes + "==contentLength==" + contentLength + "==done==" + done);
                     val progress = (currentBytes * 100 / contentLength).toInt()
-                    if (done == true) {
-                        lenitem++
-                        if (lenitem == totalitem)
-                        {
+                    if (done) {
+
+                        if (lenitem == totalitem) {
                             //数据下标重置
                             lenitem = 1
                             totalitem = 0
                             postFileViewModel.findResByNotUploadedmusic()//继续获取未上传音乐列表
                         }
+                        lenitem++
                     }
-                    val msg: Message = mHandler.obtainMessage()
-                    msg.arg1 = progress
-                    msg.what = 0
-                    msg.obj = file.name
-                    mHandler.sendMessage(msg)
+                    if (progress > progressitem)
+                    {
+                        progressitem = progress
+                        val msg: Message = mHandler.obtainMessage()
+                        msg.arg1 = progress
+                        msg.what = 0
+                        msg.obj = file.name
+                        mHandler.sendMessage(msg)
+                        if (progress >= 100)
+                        {
+                            progressitem = 0
+                        }
+                    }
+
                 }
             }, object : Callback {
                 override fun onFailure(call: okhttp3.Call, e: IOException) {
@@ -472,12 +483,210 @@ class PostFileActivity : BaseActivity() {
                     val result = response.body!!.string()
                     LogUtils.logD(result.toString())
                 }
-            }, file,mid,resId)
+            }, file, mid, resId
+        )
     }
 
+
+    /**
+     * 电影上传分片
+     */
+    private fun postFileMovieByFragmentUpload(file: File, mid: Long, resId: Long) {
+        LogUtils.logD("进入分片上传")
+//        Thread {
+//            totalitem++
+//        }.start()
+
+////        //触发第一次UI
+        var msg: Message = myHandler.obtainMessage()
+        msg.arg1 = 0//当前进度  按分片进度进行
+        msg.what = 123
+        msg.obj = file.name
+        myHandler.sendMessage(msg)
+
+        //将数据分片
+        var s1 = file.name //文件名称
+        //计算文件总分片大小
+        var length = file.length() //当前文件大小
+        var total = 0 //总分片大小
+        var chunkSize = 100 * 1024 * 1024 //分片大小 最好是long型
+        total = if (length % chunkSize == 0L) {
+            (length / chunkSize).toInt()
+        } else {
+            (length / chunkSize).toInt() + 1
+        }
+        LogUtils.logD("当前分片数大小:$total")
+        var tmp = true //读取进度结束符
+        var index = 0
+        //获取缓存地址
+//        val cachePath = cacheDir
+        var uploadIndex = 0  //当前已上传的分片
+        while (tmp) {//这里true一直在循环就阻塞了
+            //判断当前已分个数 和已上传分片个数差值  现在只允许4个同时上传
+            if ((index - uploadIndex) < 1) {  //(index - uploadIndex) < 1
+//                Thread(Runnable {
+                var offset = chunkSize * index * 1L
+
+                var block: ByteArray? = getBlock(offset, file, chunkSize)
+                if (block != null) {
+                    var filePath =
+                        cacheDir.absolutePath + "/" + s1 + "_" + index + ".tmp" //缓存目录 外部自定义
+                    var out: OutputStream = FileOutputStream(filePath)
+                    var inputStream: InputStream = ByteArrayInputStream(block)
+                    var buff = ByteArray(1024)
+                    var len = 0
+                    while (inputStream.read(buff).also { len = it } != -1) {
+                        out.write(buff, 0, len)
+                    }
+                    inputStream.close()
+                    out.close()
+                    LogUtils.logD("开始上传" + filePath)
+                    HttpFileUtils.postFileByFragmentUpload(
+                        Config.ApiBaseUrl + "/movie/uploadFile",
+                        object : ProgressListener {
+                            override fun onProgress(
+                                currentBytes: Long,
+                                contentLength: Long,
+                                done: Boolean
+                            ) {
+                                //UI进度展示问题
+                                //LogUtils.logD("当前进度:currentBytes=$currentBytes====contentLength=$contentLength===" + done)
+
+//                                var msg: Message = myHandler.obtainMessage()
+//                                msg.arg1 = progress//当前进度  按分片进度进行
+//                                msg.what = 123
+//                                msg.obj = file.name
+//                                myHandler.sendMessage(msg)
+                                //一会在处理...
+                            }
+                        },
+                        object : Callback {
+                            override fun onFailure(call: okhttp3.Call, e: IOException) {
+                                LogUtils.logE(e.toString())
+                            }
+
+                            @Throws(IOException::class)
+                            override fun onResponse(
+                                call: okhttp3.Call,
+                                response: okhttp3.Response
+                            ) {
+                                val result = response.body!!.string()
+                                //      LogUtils.logD(result.toString())
+                                val resultData = gson!!.fromJson(result, ResultBean::class.java)
+                                //设置当前已完成的片数
+                                if (resultData.flag) {
+                                    //估计会有线程安全问题
+                                    uploadIndex++//计数已上传个数
+                                    File(filePath).delete()//删除缓存文件
+                                    //根据返回值判断是否上传完成
+                                    if (resultData.message == "1") {
+                                        // 通知
+                                        var msg: Message = myHandler.obtainMessage()
+                                        msg.what = 4
+                                        myHandler.sendMessage(msg)
+                                    }
+                                    // UI更新
+                                    var msg: Message = myHandler.obtainMessage()
+                                    msg.arg1 = (uploadIndex * 100 / total)//当前进度  按分片进度进行
+                                    msg.what = 123
+                                    msg.obj = file.name
+                                    myHandler.sendMessage(msg)
+                                    LogUtils.logD("当前上传进度uploadIndex=$uploadIndex==total=$total:" + (uploadIndex * 100 / total))
+                                }
+                            }
+                        }, File(filePath), total, chunkSize * 1L, "111", s1, index, resId, mid
+                    )
+                    index++
+                } else {
+                    tmp = false
+                }
+            }
+        }
+    }
+
+    inner class WorkerThread : Thread() {
+        override fun run() {
+            super.run()
+            Looper.prepare()
+            myHandler = object : Handler() {
+                override fun handleMessage(msg: Message) {
+                    super.handleMessage(msg)
+                    when (msg.what) {
+                        123 -> {
+                            val id: Int = msg.arg1
+                            val file = msg.obj as String
+                            //LogUtils.logD("id===$id====file==$file lenitem==$lenitem====totalitem==$totalitem ")
+                            progressdialog!!.setTitle("Uploading Movie ( $lenitem/$totalitem )")
+                            progressdialog!!.progress = id
+                            progressdialog!!.setMessage(file)
+                            progressdialog!!.setCancelable(false)
+                            progressdialog!!.setCanceledOnTouchOutside(false)
+                            progressdialog!!.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL)
+                            progressdialog!!.show()
+                            if (id == 100) {
+                                progressdialog!!.dismiss()
+                            }
+                        }
+                        4->{
+                            lenitem++
+                            if (lenitem == totalitem) {
+                                //数据下标重置
+                                lenitem = 1
+                                totalitem = 0
+                                postFileViewModel.findResByNotUploadedmusic()//继续获取未上传音乐列表
+                            }
+                        }
+                        5->{
+                            lenitem++
+                        }
+                    }
+                }
+            }
+            Looper.loop()
+        }
+    }
+
+    /**
+     * 文件分块工具
+     *
+     * @param offset    起始偏移位置
+     * @param file      文件
+     * @param blockSize 分块大小
+     * @return 分块数据
+     */
+    private fun getBlock(offset: Long, file: File?, blockSize: Int): ByteArray? {
+        val result = ByteArray(blockSize)
+        var accessFile: RandomAccessFile? = null
+        try {
+            accessFile = RandomAccessFile(file, "r")
+            accessFile.seek(offset)
+            val readSize: Int = accessFile.read(result)
+            return if (readSize == -1) {
+                null
+            } else if (readSize == blockSize) {
+                result
+            } else {
+                val tmpByte = ByteArray(readSize)
+                System.arraycopy(result, 0, tmpByte, 0, readSize)
+                tmpByte
+            }
+        } catch (e: IOException) {
+            e.printStackTrace()
+        } finally {
+            if (accessFile != null) {
+                try {
+                    accessFile.close()
+                } catch (e1: IOException) {
+                }
+            }
+        }
+        return null
+    }
+
+
     override fun onDestroy() {
         super.onDestroy()
-        progressdialog!!.dismiss()
+          progressdialog!!.dismiss()
         if (EventBus.getDefault().isRegistered(this)) {
             EventBus.getDefault().unregister(this)
         }

+ 32 - 26
app/src/main/java/com/jld/vod/view/SplashActivity.kt

@@ -23,7 +23,6 @@ import com.jld.vod.base.BaseActivity
 import com.jld.vod.config.Config
 import com.jld.vod.interfaces.IDownloadCallBack
 import com.jld.vod.model.bean.*
-import com.jld.vod.service.LatLongService
 import com.jld.vod.service.MyAccessibilityService
 import com.jld.vod.service.SocketService
 import com.jld.vod.utils.AppUtil
@@ -44,6 +43,7 @@ import kotlinx.android.synthetic.main.activity_splash.*
 import okhttp3.Response
 import java.io.File
 import java.util.*
+import kotlin.math.log
 
 
 /**
@@ -121,6 +121,7 @@ class SplashActivity : BaseActivity(){
                     val result: String = message.obj.toString()
                     val resultData = gson!!.fromJson(result, ResultBean::class.java)
                     Log.i(TAG, "handleMessage: 当前位置设置状态$resultData")
+
                     SharedPrefUtils.putString(this, "flagDebug", resultData.code.toString())
                     if(resultData.flag){
                         //进入调试界面
@@ -147,6 +148,10 @@ class SplashActivity : BaseActivity(){
                         networkFlag = true
                     }
                 }
+                7->{
+                   //获取座位号
+
+                }
             }
             false
         })
@@ -158,9 +163,7 @@ class SplashActivity : BaseActivity(){
         super.initView()
         progressdialog = ProgressDialog(this@SplashActivity)
         deviceSN =  AppUtil.getDeviceSN()
-
         startService(Intent(this, SocketService::class.java))
-
         //第一次进入标识
         SharedPrefUtils.putBoolean(this,"isFirstShowAds",true)
         //座位号显示
@@ -199,6 +202,7 @@ class SplashActivity : BaseActivity(){
 
         //如果WiFi没有连接,循环判断知道WiFi连接再请求网络
         requestWifiState()
+
         //初始化车辆信息
         initCarInfo()
         //初始游戏安装
@@ -235,17 +239,17 @@ class SplashActivity : BaseActivity(){
                     }
                 })
 
-//        if (!MyAccessibilityService.isRunning) {
-//            //默认开启全局返回服务
-//            Settings.Secure.putString(mContext.getContentResolver(),
-//                    Settings.Secure.ENABLED_ACCESSIBILITY_SERVICES,
-//                    "com.jld.vod/com.jld.vod.service.MyAccessibilityService");
-//
-//            Settings.Secure.putInt(mContext.getContentResolver(),
-//                    Settings.Secure.ACCESSIBILITY_ENABLED, 1);
-//            val mIntnet = Intent(mContext,MyAccessibilityService::class.java)
-//            startService(mIntnet)
-//        }
+        if (!MyAccessibilityService.isRunning) {
+            //默认开启全局返回服务
+            Settings.Secure.putString(mContext.getContentResolver(),
+                    Settings.Secure.ENABLED_ACCESSIBILITY_SERVICES,
+                    "com.jld.vod/com.jld.vod.service.MyAccessibilityService");
+
+            Settings.Secure.putInt(mContext.getContentResolver(),
+                    Settings.Secure.ACCESSIBILITY_ENABLED, 1);
+            val mIntnet = Intent(mContext,MyAccessibilityService::class.java)
+            startService(mIntnet)
+        }
     }
     /**
      * 初始apk版本更新
@@ -486,7 +490,7 @@ class SplashActivity : BaseActivity(){
                 }else{
                     //地图存在,获取未安装的apk
                     ajaxInfo(getString(R.string.map_loaded_successfully)+"....",null)
-                    Log.i(TAG, "eqCarliveData: 进入游戏未安装检测:"+mapFile.path)
+                    handlerGetGameByNoInstall()
                     splashViewmodel.findGameByNoInstall(deviceSN)
                 }
             }else if(res == "20001")//未绑定
@@ -593,7 +597,7 @@ class SplashActivity : BaseActivity(){
                     ajaxInfo(getString(R.string.download_games1)+getString(R.string.sum_total)+totalitem+getString(R.string.download_games2) +"${(totalitem-lenitem)}"+ getString(R.string.fail_sum)+failitem,null)
 
                     LogUtils.logD("lenitem$lenitem==$totalitem")
-                    if (lenitem == totalitem)
+                    if (lenitem >= totalitem)
                     {
                         lenitem = 0
                         totalitem = 0
@@ -615,6 +619,7 @@ class SplashActivity : BaseActivity(){
      */
     fun findGameByNoInstall(){
         splashViewmodel.findGameByNoInstallliveData.observe(this){ res->
+            LogUtils.logD("地图加载成功..$res")
             ajaxInfo(getString(R.string.get_no_app_installed)+"....",null)
             when (res?.code) {
                 BaseBean.SUCCESS -> {
@@ -649,6 +654,7 @@ class SplashActivity : BaseActivity(){
                     }
                 }
                 BaseBean.ERROR -> {
+
                     loaderror(false)//弹框设置 点击取消不回调
                     Toast.makeText(this, res.message, Toast.LENGTH_SHORT).show()
                 }
@@ -661,13 +667,13 @@ class SplashActivity : BaseActivity(){
      * 卸载游戏
      */
     private fun initDelGame() {
-        LogUtils.logD("开始卸载游戏")
+
 
         splashViewmodel.NuInstallGameLiveData.observe(this) { res ->
             ajaxInfo(getString(R.string.del_game)+"....",null)
             when (res?.code) {
                 BaseBean.SUCCESS -> {
-
+                    LogUtils.logD("开始卸载游戏"+res.data)
                     var delnum = 0
                     if (!res.data.isNullOrEmpty()){
                         LogUtils.logD("res"+res.data)
@@ -759,6 +765,8 @@ class SplashActivity : BaseActivity(){
                     //地图下载完成,获取未安装的apk
                     ajaxInfo(getString(R.string.map_download_successfully)+"....",null)
                     splashViewmodel.findGameByNoInstall(deviceSN)
+
+
                 }
 
                 override fun progress(progress: Int) {
@@ -977,7 +985,7 @@ class SplashActivity : BaseActivity(){
      */
     fun InstallGame(fileName: String?, packageName: String?,gid:Long) //
     {
-        if (fileName == null || fileName.length == 0) {
+        if (fileName == null || fileName.isEmpty()) {
             return
         }
 
@@ -1008,15 +1016,16 @@ class SplashActivity : BaseActivity(){
         }
         override fun packageInstalled(packageName: String?, returnCode: Int) { //如果returnCode == 1就为成功
             LogUtils.logD("GameObserver $packageName 下载完成安装完成.且更新安装状态:$returnCode")
+            lenitem++
             //是否安装成功
             if (returnCode == 1) {
-                lenitem++
+
                 try {
                     splashViewmodel.updateGameInstallState(gid.toString(),packageName!!,deviceSN)
                 }catch (e:Exception) {
                     e.printStackTrace()
                 }
-                if (lenitem == totalitem) {
+                if (lenitem >= totalitem) {
                     lenitem = 0
                     totalitem = 0
 
@@ -1026,14 +1035,11 @@ class SplashActivity : BaseActivity(){
             }else{
                 LogUtils.logD("游戏安装失败?")
                 failitem++
-                lenitem++
-                XToast.error(mContext,getString(R.string.fail_sum))
-
-                if (lenitem == totalitem) {
+                LogUtils.logD("lenitem$lenitem==$totalitem")
+                if (lenitem >= totalitem) {
                     lenitem = 0
                     totalitem = 0
                     splashViewmodel.getNuInstallGame(deviceSN)//开始卸载游戏
-
                 }
             }
 

+ 2 - 0
app/src/main/java/com/jld/vod/view/adapter/HostAllOrdersAdapter.kt

@@ -14,6 +14,7 @@ import com.jld.vod.R
 import com.jld.vod.model.bean.AllOrdersBean
 import com.jld.vod.model.bean.OrderFoodAllBean
 import com.jld.vod.utils.LogUtils
+import com.jld.vod.utils.SharedPrefUtils
 import com.jld.vod.view.adapter.HostAllOrderItemAdapter
 
 
@@ -92,6 +93,7 @@ class HostAllOrdersAdapter :
                     }
                 }
             })
+
             tv_all_orders_oid.text = itemView.context.getText(R.string.order_number).toString() + ":"+moviet!!.oid
 
             if (moviet.bigOrderStatus == "1")

+ 4 - 4
app/src/main/java/com/jld/vod/view/adapter/MusicListAdapter.kt

@@ -64,16 +64,16 @@ class MusicListAdapter :
         var tv = itemView.findViewById<TextView>(R.id.tv_music_title)
         val ll = itemView.findViewById<LinearLayout>(R.id.ll_item_music)
 
-        fun bindTo(moviet: MusicByMidBean?) {
+        fun bindTo(music: MusicByMidBean?) {
             Glide.with(itemView).load(com.jld.vod.config.Config.ApiBaseUrl+
-                    "/synchronization/previewImg?imgUrl="+moviet!!.musicImgUrl)
+                    "/synchronization/previewImg?imgUrl="+music!!.musicImgUrl)
                 .skipMemoryCache(true).diskCacheStrategy(
                 DiskCacheStrategy.ALL).into(img)
-            tv.text = moviet?.musicName
+            tv.text = music?.musicName
 
 
             ll.setOnClickListener {
-                 itemClickListener!!.onItemClickListener(position, moviet.cid,moviet.mid)
+                 itemClickListener!!.onItemClickListener(position, music.cid,music.mid)
             }
         }
     }

+ 1 - 0
app/src/main/java/com/jld/vod/view/adapter/MyAllOrdersAdapter.kt

@@ -11,6 +11,7 @@ import androidx.recyclerview.widget.RecyclerView
 import com.jld.vod.R
 import com.jld.vod.model.bean.AllOrdersBean
 import com.jld.vod.model.bean.OrderFoodAllBean
+import com.jld.vod.utils.SharedPrefUtils
 import com.jld.vod.view.adapter.MyAllOrderItemAdapter
 
 

+ 3 - 1
app/src/main/java/com/jld/vod/view/fragment/HostAllOrdersFragment.kt

@@ -55,7 +55,9 @@ class HostAllOrdersFragment : BaseFragment() {
          */
         listAdapter.setOnCompleteClickListener(object : HostAllOrdersAdapter.ICompleteItemClickListener{
             override fun onItemClickListener(oid: String?) {
-                myOrderViewModel.oneClickCompletion(oid!!)
+                val split = oid!!.split("-")
+                myOrderViewModel.oneClickCompletion(split[1])
+//                myOrderViewModel.oneClickCompletion(oid!!)
             }
         })
         /**

+ 2 - 1
app/src/main/java/com/jld/vod/view/fragment/HostNewOrdersFragment.kt

@@ -53,7 +53,8 @@ class HostNewOrdersFragment : BaseFragment() {
          */
         listAdapter.setOnCompleteClickListener(object : HostAllOrdersAdapter.ICompleteItemClickListener{
             override fun onItemClickListener(oid: String?) {
-                myOrderViewModel.oneClickCompletion(oid!!)
+                val split = oid!!.split("-")
+                myOrderViewModel.oneClickCompletion(split[1])
             }
         })
         /**

+ 1 - 0
app/src/main/java/com/jld/vod/view/widget/MyJzvdStd.kt

@@ -6,6 +6,7 @@ import android.view.View
 import android.widget.FrameLayout
 import android.widget.ImageView
 import cn.jzvd.JZUtils
+import cn.jzvd.Jzvd
 import cn.jzvd.JzvdStd
 import com.jld.vod.R
 

+ 6 - 7
app/src/main/java/com/jld/vod/viewmodel/SplashViewModel.kt

@@ -257,19 +257,18 @@ class SplashViewModel(app: Application) : AndroidViewModel(app) {
      * 获取未安装游戏列表
      */
     fun findGameByNoInstall(terminal:String): MutableLiveData<BaseBean<List<FindGameByNoInstallBean>>> {
-        LogUtils.logD("findGameInstalledPath: 正在未安装游戏")
+        LogUtils.logD("findGameInstalledPath: 正在查询未安装游戏")
         findGameByNoInstallliveData.postValue(null)
-        RetrofitUtils.findGameByNoInstall(terminal,
-            { t ->
+        RetrofitUtils.findGameByNoInstall(terminal, { t ->
                 when (t.code) {
                     20000 ->{
-
-                        if (t.data != null)
-                        {
-                            LogUtils.logD("findGameInstalledPath: 获取未安装游戏,$t----"+t.data)
+                        if (t.data != null ) {
+                            LogUtils.logD("findGameInstalledPath: 获取未安装游戏,$t----"+t.data+"-----------"+BaseBean.success(t.data))
                             findGameByNoInstallliveData.postValue(BaseBean.success(t.data))
                         }else{
+                            LogUtils.logD("findGameInstalledPath: 没有数据,$t----"+t.data+"-----------"+BaseBean.success(t.data))
                             findGameByNoInstallliveData.postValue(BaseBean.error(t.message, t.data))
+
                         }
                     }
                     else -> findGameByNoInstallliveData.postValue(BaseBean.error(t.message, t.data))

+ 16 - 15
app/src/main/res/layout/activity_musice_play.xml

@@ -125,34 +125,35 @@
                     android:textColor="#fff">
                 </TextView>
             </LinearLayout>
-            <LinearLayout
-                android:layout_width="wrap_content"
-                android:layout_height="wrap_content"
-                android:layout_marginTop="30dp"
+            <GridLayout
+                android:layout_width="500dp"
+                android:layout_height="80dp"
+                android:layout_marginTop="10dp"
                 android:layout_gravity="center">
+
                 <ImageView
                     android:id="@+id/act_audio_player_button_prebuttonId"
+                    android:layout_width="60dp"
+                    android:layout_height="60dp"
                     android:layout_margin="10dp"
-                    android:layout_width="wrap_content"
-                    android:layout_height="wrap_content"
-                    android:src="@mipmap/music_play_left">
-                </ImageView>
+                    android:layout_marginLeft="100dp"
+                    android:src="@mipmap/music_play_left"/>
                 <ImageView
                     android:id="@+id/act_audio_player_button_playId"
-                    android:paddingRight="30dp"
-                    android:paddingLeft="30dp"
-                    android:layout_width="wrap_content"
-                    android:layout_height="wrap_content"
+                    android:layout_marginStart="40dp"
+                    android:layout_marginEnd="40dp"
+                    android:layout_width="80dp"
+                    android:layout_height="80dp"
                     android:src="@mipmap/music_state_pause">
                 </ImageView>
                 <ImageView
                     android:id="@+id/act_audio_player_button_nextId"
                     android:layout_margin="10dp"
-                    android:layout_width="wrap_content"
-                    android:layout_height="wrap_content"
+                    android:layout_width="60dp"
+                    android:layout_height="60dp"
                     android:src="@mipmap/music_play_right">
                 </ImageView>
-            </LinearLayout>
+            </GridLayout>
         </LinearLayout>
         </RelativeLayout>
         <ImageView

+ 1 - 1
app/src/main/res/layout/fragment_maps.xml

@@ -22,7 +22,7 @@
             android:layout_marginRight="30dp"
             android:layout_width="match_parent"
             android:layout_height="380dp"
-            android:src="@mipmap/test_maps"
+            android:src="@mipmap/test_maps_1"
             android:id="@+id/bt_look_maps" />
         <LinearLayout
             android:orientation="vertical"

+ 1 - 1
app/src/main/res/layout/fragment_order.xml

@@ -26,7 +26,7 @@
             android:textColor="@color/white"
             android:textSize="24sp"
             android:layout_marginTop="10dp"
-            android:text="点餐"
+            android:text="@string/order_text"
             />
     </RelativeLayout>
 </RelativeLayout>

BIN
app/src/main/res/mipmap-mdpi/test_maps_1.png


+ 91 - 0
app/src/main/res/values-es-rES/strings.xml

@@ -0,0 +1,91 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+    <string name="app_name">Vod</string>
+    <string name="welcometext">Bienvenido al sistema Vod</string>
+    <string name="lab_monday">Lunes</string>
+    <string name="lab_tuesday">Martes</string>
+    <string name="lab_wednesday">Miércoles</string>
+    <string name="lab_thursday">Jueves</string>
+    <string name="lab_friday">Viernes</string>
+    <string name="lab_saturday">sábado</string>
+    <string name="lab_sunday">Domingo</string>
+    <string name="lab_director">Director</string>
+    <string name="lab_years">Año</string>
+    <string name="lab_type">Tipo</string>
+    <string name="lab_duration">Duración</string>
+    <string name="lab_actor">Actor</string>
+    <string name="lab_details">Detalles</string>
+    <string name="lab_play">Reproducir</string>
+    <string name="title_activity_main2">Interfaz principal</string>
+    <string name="first_fragment_label">Primer fragmento</string>
+    <string name="second_fragment_label">Segundo fragmento</string>
+    <string name="next">Siguiente</string>
+    <string name="previous">Antes</string>
+    <string name="hello_first_fragment">Hola primer clip</string>
+    <string name="hello_second_fragment">Hola segundo clip</string>
+    <string name="title_activity_settings">Configuración</string>
+    <string name="messages_header">Mensaje</string>
+    <string name="sync_header">Sincronización</string>
+    <string name="signature_title">Su firma</string>
+    <string name="reply_title">Acción de respuesta predeterminada</string>
+    <string name="sync_title">Responder periódicamente al correo electrónico</string>
+    <string name="attachment_title">Descargar archivos adjuntos entrantes</string>
+    <string name="attachment_summary_on">Descarga automática de archivos adjuntos de correo electrónico entrante</string>
+    <string name="attachment_summary_off">Descargar adjuntos sólo cuando se solicita manualmente</string>
+    <string name="lab_no_equipment">Sin equipo</string>
+    <string name="setting_name_start">Inicio de la vinculación del asiento</string>
+    <string name="setting_name_end">Fin de la vinculación</string>
+    <string name="setting_name_del">Borrar información de ubicación</string>
+    <string name="update_info">Modificar la información del asiento</string>
+    <string name="define">Determinar</string>
+    <string name="cancel">Cancelar</string>
+    <string name="please_network">¡Operación fallida!¡Por favor, compruebe la red!</string>
+    <string name="tips">Recordatorio</string>
+    <string name="tips_clear_info">Borrar la información de ubicación</string>
+    <string name="tips_end_linkage">Fin de la vinculación</string>
+    <string name="tips_seat_linkage">Conexión de asientos abierta</string>
+    <string name="tips_seat_err">¡Falló la apertura!¡El dispositivo está en estado de depuración!</string>
+    <string name="tips_success">¡Cierre exitoso!</string>
+    <string name="tips_off_failed">¡Falló el cierre!¡El dispositivo no está encendido para depurar!</string>
+    <string name="tips_clear_success">¡Limpieza exitosa!</string>
+    <string name="tips_clear_failed">¡Limpieza fallida!El dispositivo está en estado de depuración</string>
+    <string name="confirm_success">Confirmación exitosa</string>
+    <string name="confirmation_failed">Confirmación fallida</string>
+    <string name="cancel_confirmation_successful">Confirmación cancelada con éxito</string>
+    <string name="cancel_failed">Cancelación fallida</string>
+    <string name="internet_connection">Detección del Estado de conexión a la red</string>
+    <string name="resource_loaded_successfully">Acceso exitoso a los recursos estáticos de la página principal del sistema</string>
+    <string name="load_language">Idioma de inicialización</string>
+    <string name="Load_vehicle_information">Acceso a la información del vehículo</string>
+    <string name="no_vehicle">Sin vehículo para vincular</string>
+    <string name="inspection_application_welcome">Detectar el entorno de instalación del juego</string>
+    <string name="detection_map">Comprobar si el mapa está descargado</string>
+    <string name="download_map">Descargar mapa</string>
+    <string name="map_loaded_successfully">Mapa cargado con éxito</string>
+    <string name="check_for_version_updates">Detectar actualizaciones de versiones</string>
+    <string name="check_whether_the_vehicle_is_bound">Comprobar vinculación del vehículo </string>
+    <string name="User_binding_succeeded">Vinculación exitosa del usuario</string>
+    <string name="Failure_to_Bind_a_user">Falló la vinculación del usuario</string>
+    <string name="get_no_app_installed">Obtener aplicaciones de juego no instaladas</string>
+    <string name="data_loading_successfully">Finalización de la carga de datos</string>
+    <string name="map_download_successfully">Descargar mapa completo</string>
+    <string name="download_games1">Descargar e instalar juegos</string>
+    <string name="download_games2">No instalado</string>
+    <string name="sum_total">Total</string>
+    <string name="fail_sum">Fracaso</string>
+    <string name="del_game">Desinstalando juego</string>
+    <string name="affirm">Confirmar</string>
+    <string name="myoder">Mi orden</string>
+    <string name="totalprice">Precio total</string>
+    <string name="neworders">Nuevo pedido</string>
+    <string name="completeorders">Completado</string>
+    <string name="cancelorders">Cancelado</string>
+    <string name="allorders">Todos los pedidos</string>
+    <string name="order_number">Número de orden</string>
+    <string name="finished">Completado</string>
+    <string name="underway">En curso</string>
+    <string name="canceled">Cancelado</string>
+    <string name="finish">Complete</string>
+    <string name="unbound_vehicle">Vehículo no vinculado</string>
+    <string name="order_text">Ordenar</string>
+</resources>

+ 3 - 0
app/src/main/res/values-th-rTH/strings.xml

@@ -87,4 +87,7 @@
     <string name="canceled">ยกเลิก</string>
     <string name="unbound_vehicle">"ไม่มีการเชื่อมต่อรถ "</string>
     <string name="finish">"เรียบร้อยแล้ว "</string>
+    <string name="order_text">สั่งอาหาร</string>
+    <string name="User_binding_succeeded">ผูกผู้ใช้เรียบร้อยแล้ว</string>
+    <string name="Failure_to_Bind_a_user">ผูกผู้ใช้ล้มเหลว</string>
 </resources>

+ 2 - 1
app/src/main/res/values-zh-rCN/strings.xml

@@ -76,7 +76,7 @@
 
     <string name="sum_total">总数 </string>
     <string name="fail_sum">失败 </string>
-    <string name="download_games1">下载安装游戏,</string>
+    <string name="download_games1">下载安装游戏</string>
     <string name="download_games2">未安装</string>
     <string name="del_game">正在卸载游戏</string>
 
@@ -93,4 +93,5 @@
     <string name="underway">进行中</string>
     <string name="canceled">已取消</string>
     <string name="finish">完成</string>
+    <string name="order_text">点餐</string>
 </resources>

+ 1 - 0
app/src/main/res/values/strings.xml

@@ -140,4 +140,5 @@
     <string name="canceled">Canceled</string>
     <string name="finish">Finish</string>
     <string name="unbound_vehicle">Unbound vehicle</string>
+    <string name="order_text">order</string>
 </resources>

+ 2 - 2
gradlew

@@ -69,7 +69,7 @@ CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
 # Determine the Java command to use to start the JVM.
 if [ -n "$JAVA_HOME" ] ; then
     if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
-        # IBM'rank_mark JDK on AIX uses strange locations for the executables
+        # IBM's JDK on AIX uses strange locations for the executables
         JAVACMD="$JAVA_HOME/jre/sh/java"
     else
         JAVACMD="$JAVA_HOME/bin/java"
@@ -156,7 +156,7 @@ fi
 
 # Escape application args
 save () {
-    for i do printf %rank_mark\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
+    for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
     echo " "
 }
 APP_ARGS=$(save "$@")

ファイルの差分が大きいため隠しています
+ 375 - 0
hs_err_pid17268.log


ファイルの差分が大きいため隠しています
+ 351 - 0
hs_err_pid37232.log


+ 10 - 4
keystore.properties

@@ -1,4 +1,10 @@
-storePassWord=android
-keyPassWord=android
-keyAlias=androiddebugkey
-storeFile=./platform.jks
+#android 6.0ϵͳǩÃû
+#storePassWord=android
+#keyPassWord=android
+#keyAlias=androiddebugkey
+#storeFile=./platform.jks
+#android 10ϵͳǩÃû
+storePassWord=vod123456
+keyPassWord=vod123456
+keyAlias=vod
+storeFile=./platform.keystore

ファイルの差分が大きいため隠しています
+ 17383 - 0
replay_pid17268.log