Forráskód Böngészése

添加时区功能

zhaofuxin 3 éve
szülő
commit
da7c4e5eb3

+ 1 - 1
.idea/gradle.xml

@@ -4,7 +4,7 @@
   <component name="GradleSettings">
     <option name="linkedExternalProjectsSettings">
       <GradleProjectSettings>
-        <option name="testRunner" value="PLATFORM" />
+        <option name="testRunner" value="GRADLE" />
         <option name="distributionType" value="DEFAULT_WRAPPED" />
         <option name="externalProjectPath" value="$PROJECT_DIR$" />
         <option name="gradleJvm" value="1.8 (2)" />

+ 8 - 0
.idea/misc.xml

@@ -1,5 +1,13 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <project version="4">
+  <component name="DesignSurface">
+    <option name="filePathToZoomLevelMap">
+      <map>
+        <entry key="..\:/AndroidDemo/smartvod/app/src/main/res/xml/root_preferences.xml" value="0.24140625" />
+        <entry key="..\:/AndroidDemo/smartvod/library_zhy_CircleMenu/src/main/res/layout/circle_menu_item.xml" value="0.3423772609819121" />
+      </map>
+    </option>
+  </component>
   <component name="ProjectRootManager" version="2" languageLevel="JDK_1_8" default="true" project-jdk-name="1.8" project-jdk-type="JavaSDK">
     <output url="file://$PROJECT_DIR$/build/classes" />
   </component>

+ 2 - 1
app/build.gradle

@@ -28,7 +28,7 @@ android {
         applicationId "com.jld.vod"
         minSdkVersion 23
         targetSdkVersion 29
-        versionCode 199
+        versionCode 200
         versionName "1.0"
         testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
     }
@@ -56,6 +56,7 @@ dependencies {
     implementation fileTree(dir: "libs", include: ["*.jar"])
     implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
     implementation 'androidx.core:core-ktx:1.3.0'
+
     implementation 'androidx.appcompat:appcompat:1.1.0'
     implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
     implementation project(path: ':library_zhy_CircleMenu')

+ 20 - 0
app/debug/output.json

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

+ 2 - 0
app/src/main/AndroidManifest.xml

@@ -8,6 +8,8 @@
     <!-- android:sharedUserId="android.uid.system" -->
     <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
     <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
+    <uses-permission android:name="android.permission.SET_TIME" />
+    <uses-permission android:name="android.permission.SET_TIME_ZONE" />
     <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
     <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
     <uses-permission android:name="android.permission.INTERNET" />

+ 14 - 1
app/src/main/java/com/jld/vod/base/MyApplication.kt

@@ -2,13 +2,16 @@ package com.jld.vod.base
 
 import android.app.Activity
 import android.app.Application
-import android.content.Context
+import android.os.Build
 import android.os.Bundle
 import android.preference.PreferenceManager
 import android.util.Log
 import com.facebook.drawee.backends.pipeline.Fresco
 import com.jld.vod.model.bean.ContextBean
 import com.jld.vod.ui.XBasicLibInit
+import com.jld.vod.utils.AppUtil
+import com.jld.vod.utils.LogUtils
+import com.jld.vod.utils.Utils
 import com.jld.vod.utils.http.RetrofitUtils
 import com.xuexiang.xui.XUI
 import com.zzhoujay.richtext.RichText
@@ -16,6 +19,9 @@ import org.mapsforge.map.android.graphics.AndroidGraphicFactory
 import org.mapsforge.map.layer.renderer.MapWorkerPool
 import org.mapsforge.map.model.DisplayModel
 import org.mapsforge.map.reader.MapFile
+import java.lang.reflect.Constructor
+import java.lang.reflect.Field
+import java.lang.reflect.Method
 
 /**
  * @author ZhaoFuXin
@@ -48,9 +54,14 @@ class MyApplication : Application(){
     }
     override fun onCreate() {
         super.onCreate()
+
         app = this
         RetrofitUtils.init()
         Fresco.initialize(app)
+
+        Utils.init(app)
+
+        //AppUtil.hookWebView()
         /**
          * 地图
          */
@@ -113,4 +124,6 @@ class MyApplication : Application(){
         XUI.init(this)
         XUI.debug(isDebug())
     }
+
+
 }

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

@@ -7,10 +7,10 @@ package com.jld.vod.config
  * @date :2020/7/21 14:18
  */
 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.106:8088"
-    const val ApiBaseUrlDebug : String = "http://192.168.0.106:8088"
+    const val ApiBaseUrl : String = "http://172.20.5.76:8088"
+    const val ApiBaseUrlDebug : String = "http://172.20.5.76: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
 //   进入设置的密码

+ 6 - 0
app/src/main/java/com/jld/vod/interfaces/remote/Apis.kt

@@ -377,4 +377,10 @@ interface Apis {
      */
     @GET("/orderFood/changeStatus")
     fun changeStatus(@Query("status") status:String,@Query("id") id:String):  Observable<BaseBean<String>>
+
+    /**
+     * 时间和时区
+     */
+    @GET("/sys/findTime")
+    fun findTime():  Observable<BaseBean<SysFindTimeBean>>
 }

+ 8 - 0
app/src/main/java/com/jld/vod/model/bean/SysFindTimeBean.kt

@@ -0,0 +1,8 @@
+package com.jld.vod.model.bean
+
+data class SysFindTimeBean(
+
+    val timeZone: String,
+    val timestamp: Long,
+    val wholeData: String
+)

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

@@ -8,6 +8,7 @@ import android.content.pm.ApplicationInfo;
 import android.content.pm.PackageInfo;
 import android.content.pm.PackageManager;
 import android.content.res.Configuration;
+import android.os.Build;
 import android.text.TextUtils;
 import android.util.Log;
 import android.view.View;
@@ -17,6 +18,8 @@ import android.widget.Toast;
 import androidx.core.content.ContextCompat;
 
 import java.io.File;
+import java.lang.reflect.Constructor;
+import java.lang.reflect.Field;
 import java.lang.reflect.Method;
 import java.util.Locale;
 
@@ -193,4 +196,41 @@ public class AppUtil {
         }
         return dir.delete();
     }
+    public static void hookWebView() {
+        int sdkInt = Build.VERSION.SDK_INT;
+        try {
+            Class<?> factoryClass = Class.forName("android.webkit.WebViewFactory");
+            Field field = factoryClass.getDeclaredField("sProviderInstance");
+            field.setAccessible(true);
+            Object sProviderInstance = field.get(null);
+            if (sProviderInstance != null) {
+                LogUtils.INSTANCE.logD("sProviderInstance isn't null");
+                return;
+            }
+            Method getProviderClassMethod;
+            if (sdkInt > 22) {
+                getProviderClassMethod = factoryClass.getDeclaredMethod("getProviderClass");
+            } else if (sdkInt == 22) {
+                getProviderClassMethod = factoryClass.getDeclaredMethod("getFactoryClass");
+            } else {
+                LogUtils.INSTANCE.logD("Don't need to Hook WebView");
+                return;
+            }
+            getProviderClassMethod.setAccessible(true);
+            Class<?> providerClass = (Class<?>) getProviderClassMethod.invoke(factoryClass);
+            Class<?> delegateClass = Class.forName("android.webkit.WebViewDelegate");
+            Constructor<?> providerConstructor = providerClass.getConstructor(delegateClass);
+            if (providerConstructor != null) {
+                providerConstructor.setAccessible(true);
+                Constructor<?> declaredConstructor = delegateClass.getDeclaredConstructor();
+                declaredConstructor.setAccessible(true);
+                sProviderInstance = providerConstructor.newInstance(declaredConstructor.newInstance());
+                LogUtils.INSTANCE.logD("sProviderInstance:{}", sProviderInstance.toString());
+                field.set("sProviderInstance", sProviderInstance);
+            }
+            LogUtils.INSTANCE.logD("Hook done!");
+        } catch (Throwable e) {
+            LogUtils.INSTANCE.logD(e.toString());
+        }
+    }
 }

+ 25 - 16
app/src/main/java/com/jld/vod/utils/DateUtils.kt

@@ -1,5 +1,7 @@
 package com.jld.vod.utils
 
+import android.app.AlarmManager
+import android.content.Context
 import com.jld.vod.R
 import com.xuexiang.xui.utils.ResUtils.getString
 import java.io.DataOutputStream
@@ -21,13 +23,13 @@ object DateUtils {
      */
     fun getTime(date: Date?): String? {
         var simpleDateFormat: SimpleDateFormat = SimpleDateFormat("HH:mm")// HH:mm:ss
-        simpleDateFormat.timeZone = TimeZone.getTimeZone("Asia/Shanghai")
+      //  simpleDateFormat.timeZone = TimeZone.getTimeZone("Asia/Shanghai")
         return simpleDateFormat.format(date)
     }
 
     fun getDate(date: Date?): String? {
         var simpleDateFormat: SimpleDateFormat = SimpleDateFormat("yyyy/MM/dd")// HH:mm:ss
-        simpleDateFormat.timeZone = TimeZone.getTimeZone("Asia/Shanghai")
+       // simpleDateFormat.timeZone = TimeZone.getTimeZone("Asia/Shanghai")
         return simpleDateFormat.format(date)
     }
 
@@ -60,21 +62,28 @@ object DateUtils {
      * 设置系统时间
      * 【时间格式 yyyyMMdd.HHmmss】
      */
-    fun setSystemDate(times: Long) {
-        try {
-            val datetimes = "yyyyMMdd.HHmmss" //时间格式
-            var datetime =convertTimestamp2Date(times,datetimes)//格式化
-            val process = Runtime.getRuntime().exec("su")//获取root权限
-
-            val os = DataOutputStream(process.outputStream)
-            os.writeBytes("setprop persist.sys.timezone GMT\n")
-            os.writeBytes("/system/bin/date -s $datetime\n")
-            os.writeBytes("clock -w\n")
-            os.writeBytes("exit\n")
-            os.flush()
-        } catch (e: IOException) {
-            e.printStackTrace()
+    fun setSystemDate(times: Long, timeZone:String,mContext:Context) {
+        val mAlarm = (mContext.getSystemService(Context.ALARM_SERVICE) as AlarmManager)
+        if (mAlarm !=null)
+        {
+           // LogUtils.logD("setSystemDate"+timeZone)
+            mAlarm.setTimeZone(timeZone)
+            mAlarm.setTime(times)
         }
+//        try {
+//            val datetimes = "yyyyMMdd.HHmmss" //时间格式
+//            var datetime =convertTimestamp2Date(times,datetimes)//格式化
+//            val process = Runtime.getRuntime().exec("su")//获取root权限
+//
+//            val os = DataOutputStream(process.outputStream)
+//            os.writeBytes("setprop persist.sys.timezone GMT\n")
+//            os.writeBytes("/system/bin/date -s $datetime\n")
+//            os.writeBytes("clock -w\n")
+//            os.writeBytes("exit\n")
+//            os.flush()
+//        } catch (e: IOException) {
+//            e.printStackTrace()
+//        }
     }
 
     /**

+ 450 - 0
app/src/main/java/com/jld/vod/utils/ToastUtils.java

@@ -0,0 +1,450 @@
+package com.jld.vod.utils;
+
+import android.content.Context;
+import android.os.Handler;
+import android.os.Looper;
+
+import android.text.SpannableString;
+import android.text.Spanned;
+import android.text.style.ForegroundColorSpan;
+import android.view.Gravity;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.widget.TextView;
+import android.widget.Toast;
+
+import androidx.annotation.ColorInt;
+import androidx.annotation.DrawableRes;
+import androidx.annotation.LayoutRes;
+import androidx.annotation.StringRes;
+
+import com.jld.vod.R;
+
+import java.lang.ref.WeakReference;
+
+/**
+ * 吐司工具类
+ */
+public final class ToastUtils {
+
+    private static final int DEFAULT_COLOR = 0x12000000;
+    private static Toast sToast;
+    private static int gravity         = Gravity.CENTER_HORIZONTAL | Gravity.BOTTOM;
+    private static int xOffset         = 0;
+    private static int yOffset         = (int) (64 * Utils.getContext().getResources().getDisplayMetrics().density + 0.5);
+    private static int backgroundColor = DEFAULT_COLOR;
+    private static int bgResource      = -1;
+    private static int messageColor    = DEFAULT_COLOR;
+    private static WeakReference<View> sViewWeakReference;
+    private static Handler sHandler = new Handler(Looper.getMainLooper());
+
+    private ToastUtils() {
+        throw new UnsupportedOperationException("u can't instantiate me...");
+    }
+
+    /**
+     * 设置吐司位置
+     *
+     * @param gravity 位置
+     * @param xOffset x偏移
+     * @param yOffset y偏移
+     */
+    public static void setGravity(int gravity, int xOffset, int yOffset) {
+        ToastUtils.gravity = gravity;
+        ToastUtils.xOffset = xOffset;
+        ToastUtils.yOffset = yOffset;
+    }
+
+    /**
+     * 设置吐司view
+     *
+     * @param layoutId 视图
+     */
+    public static void setView(@LayoutRes int layoutId) {
+        LayoutInflater inflate = (LayoutInflater) Utils.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
+        sViewWeakReference = new WeakReference<>(inflate.inflate(layoutId, null));
+    }
+
+    /**
+     * 设置吐司view
+     *
+     * @param view 视图
+     */
+    public static void setView(View view) {
+        sViewWeakReference = view == null ? null : new WeakReference<>(view);
+    }
+
+    /**
+     * 获取吐司view
+     *
+     * @return view
+     */
+    public static View getView() {
+        if (sViewWeakReference != null) {
+            final View view = sViewWeakReference.get();
+            if (view != null) {
+                return view;
+            }
+        }
+        if (sToast != null) return sToast.getView();
+        return null;
+    }
+
+    /**
+     * 设置背景颜色
+     *
+     * @param backgroundColor 背景色
+     */
+    public static void setBackgroundColor(@ColorInt int backgroundColor) {
+        ToastUtils.backgroundColor = backgroundColor;
+    }
+
+    /**
+     * 设置背景资源
+     *
+     * @param bgResource 背景资源
+     */
+    public static void setBgResource(@DrawableRes int bgResource) {
+        ToastUtils.bgResource = bgResource;
+    }
+
+    /**
+     * 设置消息颜色
+     *
+     * @param messageColor 颜色
+     */
+    public static void setMessageColor(@ColorInt int messageColor) {
+        ToastUtils.messageColor = messageColor;
+    }
+
+    /**
+     * 安全地显示短时吐司
+     *
+     * @param text 文本
+     */
+    public static void showShortSafe(final CharSequence text) {
+        sHandler.post(new Runnable() {
+            @Override
+            public void run() {
+                show(text, Toast.LENGTH_SHORT);
+            }
+        });
+    }
+
+    /**
+     * 安全地显示短时吐司
+     *
+     * @param resId 资源Id
+     */
+    public static void showShortSafe(final @StringRes int resId) {
+        sHandler.post(new Runnable() {
+            @Override
+            public void run() {
+                show(resId, Toast.LENGTH_SHORT);
+            }
+        });
+    }
+
+    /**
+     * 安全地显示短时吐司
+     *
+     * @param resId 资源Id
+     * @param args  参数
+     */
+    public static void showShortSafe(final @StringRes int resId, final Object... args) {
+        sHandler.post(new Runnable() {
+            @Override
+            public void run() {
+                show(resId, Toast.LENGTH_SHORT, args);
+            }
+        });
+    }
+
+    /**
+     * 安全地显示短时吐司
+     *
+     * @param format 格式
+     * @param args   参数
+     */
+    public static void showShortSafe(final String format, final Object... args) {
+        sHandler.post(new Runnable() {
+            @Override
+            public void run() {
+                show(format, Toast.LENGTH_SHORT, args);
+            }
+        });
+    }
+
+    /**
+     * 安全地显示长时吐司
+     *
+     * @param text 文本
+     */
+    public static void showLongSafe(final CharSequence text) {
+        sHandler.post(new Runnable() {
+            @Override
+            public void run() {
+                show(text, Toast.LENGTH_LONG);
+            }
+        });
+    }
+
+    /**
+     * 安全地显示长时吐司
+     *
+     * @param resId 资源Id
+     */
+    public static void showLongSafe(final @StringRes int resId) {
+        sHandler.post(new Runnable() {
+            @Override
+            public void run() {
+                show(resId, Toast.LENGTH_LONG);
+            }
+        });
+    }
+
+    /**
+     * 安全地显示长时吐司
+     *
+     * @param resId 资源Id
+     * @param args  参数
+     */
+    public static void showLongSafe(final @StringRes int resId, final Object... args) {
+        sHandler.post(new Runnable() {
+            @Override
+            public void run() {
+                show(resId, Toast.LENGTH_LONG, args);
+            }
+        });
+    }
+
+    /**
+     * 安全地显示长时吐司
+     *
+     * @param format 格式
+     * @param args   参数
+     */
+    public static void showLongSafe(final String format, final Object... args) {
+        sHandler.post(new Runnable() {
+            @Override
+            public void run() {
+                show(format, Toast.LENGTH_LONG, args);
+            }
+        });
+    }
+
+    /**
+     * 显示短时吐司
+     *
+     * @param text 文本
+     */
+    public static void showShort(CharSequence text) {
+        show(text, Toast.LENGTH_SHORT);
+    }
+
+    /**
+     * 显示短时吐司
+     *
+     * @param resId 资源Id
+     */
+    public static void showShort(@StringRes int resId) {
+        show(resId, Toast.LENGTH_SHORT);
+    }
+
+    /**
+     * 显示短时吐司
+     *
+     * @param resId 资源Id
+     * @param args  参数
+     */
+    public static void showShort(@StringRes int resId, Object... args) {
+        show(resId, Toast.LENGTH_SHORT, args);
+    }
+
+    /**
+     * 显示短时吐司
+     *
+     * @param format 格式
+     * @param args   参数
+     */
+    public static void showShort(String format, Object... args) {
+        show(format, Toast.LENGTH_SHORT, args);
+    }
+
+    /**
+     * 显示长时吐司
+     *
+     * @param text 文本
+     */
+    public static void showLong(CharSequence text) {
+        show(text, Toast.LENGTH_LONG);
+    }
+
+    /**
+     * 显示长时吐司
+     *
+     * @param resId 资源Id
+     */
+    public static void showLong(@StringRes int resId) {
+        show(resId, Toast.LENGTH_LONG);
+    }
+
+    /**
+     * 显示长时吐司
+     *
+     * @param resId 资源Id
+     * @param args  参数
+     */
+    public static void showLong(@StringRes int resId, Object... args) {
+        show(resId, Toast.LENGTH_LONG, args);
+    }
+
+    /**
+     * 显示长时吐司
+     *
+     * @param format 格式
+     * @param args   参数
+     */
+    public static void showLong(String format, Object... args) {
+        show(format, Toast.LENGTH_LONG, args);
+    }
+
+    /**
+     * 安全地显示短时自定义吐司
+     */
+    public static void showCustomShortSafe() {
+        sHandler.post(new Runnable() {
+            @Override
+            public void run() {
+                show("", Toast.LENGTH_SHORT);
+            }
+        });
+    }
+
+    /**
+     * 安全地显示长时自定义吐司
+     */
+    public static void showCustomLongSafe() {
+        sHandler.post(new Runnable() {
+            @Override
+            public void run() {
+                show("", Toast.LENGTH_LONG);
+            }
+        });
+    }
+
+    /**
+     * 显示短时自定义吐司
+     */
+    public static void showCustomShort() {
+        show("", Toast.LENGTH_SHORT);
+    }
+
+    /**
+     * 显示长时自定义吐司
+     */
+    public static void showCustomLong() {
+        show("", Toast.LENGTH_LONG);
+    }
+
+    /**
+     * 显示吐司
+     *
+     * @param resId    资源Id
+     * @param duration 显示时长
+     */
+    private static void show(@StringRes int resId, int duration) {
+        show(Utils.getContext().getResources().getText(resId).toString(), duration);
+    }
+
+    /**
+     * 显示吐司
+     *
+     * @param resId    资源Id
+     * @param duration 显示时长
+     * @param args     参数
+     */
+    private static void show(@StringRes int resId, int duration, Object... args) {
+        show(String.format(Utils.getContext().getResources().getString(resId), args), duration);
+    }
+
+    /**
+     * 显示吐司
+     *
+     * @param format   格式
+     * @param duration 显示时长
+     * @param args     参数
+     */
+    private static void show(String format, int duration, Object... args) {
+        show(String.format(format, args), duration);
+    }
+
+    /**
+     * 显示吐司
+     *
+     * @param text     文本
+     * @param duration 显示时长
+     */
+    private static void show(CharSequence text, int duration) {
+        cancel();
+        boolean isCustom = false;
+        if (sViewWeakReference != null) {
+            final View view = sViewWeakReference.get();
+            if (view != null) {
+                sToast = new Toast(Utils.getContext());
+                sToast.setView(view);
+                sToast.setDuration(duration);
+                isCustom = true;
+            }
+        }
+        if (!isCustom) {
+            if (messageColor != DEFAULT_COLOR) {
+                SpannableString spannableString = new SpannableString(text);
+                ForegroundColorSpan colorSpan = new ForegroundColorSpan(messageColor);
+                spannableString.setSpan(colorSpan, 0, spannableString.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
+                sToast = Toast.makeText(Utils.getContext(), spannableString, duration);
+            } else {
+                sToast = Toast.makeText(Utils.getContext(), text, duration);
+            }
+        }
+        View view = sToast.getView();
+        if (bgResource != -1) {
+            view.setBackgroundResource(bgResource);
+        } else if (backgroundColor != DEFAULT_COLOR) {
+            view.setBackgroundColor(backgroundColor);
+        }
+        sToast.setGravity(gravity, xOffset, yOffset);
+        sToast.show();
+    }
+
+    /**
+     * 取消吐司显示
+     */
+    public static void cancel() {
+        if (sToast != null) {
+            sToast.cancel();
+            sToast = null;
+        }
+    }
+
+//    public static void showText(String msg) {
+//        Toast currentToast = Toast.makeText(Utils.getContext(), "", Toast.LENGTH_LONG);
+//        LayoutInflater inf = (LayoutInflater) Utils.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
+//        View toastLayout = inf.inflate(R.layout.layout_x_toast, null);
+//        TextView toastTextView = toastLayout.findViewById(R.id.toast_text);
+//        toastTextView.setText(msg);
+//        currentToast.setView(toastLayout);
+//        currentToast.show();
+//    }
+//
+//    public static void e(String msg) {
+//        Toast currentToast = Toast.makeText(Utils.getContext(), "", Toast.LENGTH_LONG);
+//        LayoutInflater inf = (LayoutInflater) Utils.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
+//        View toastLayout = inf.inflate(R.layout.layout_x_toast_e, null);
+//        TextView toastTextView = toastLayout.findViewById(R.id.toast_text);
+//        toastTextView.setText(msg);
+//        currentToast.setView(toastLayout);
+//        currentToast.show();
+//    }
+
+}

A különbségek nem kerülnek megjelenítésre, a fájl túl nagy
+ 87 - 0
app/src/main/java/com/jld/vod/utils/Utils.java


+ 9 - 0
app/src/main/java/com/jld/vod/utils/http/RetrofitUtils.kt

@@ -451,5 +451,14 @@ object RetrofitUtils {
                 .subscribe(observer, error)
         return disposable
     }
+
+    /**
+     * 时区和时间
+     */
+    fun findTime( observer: (userBean: BaseBean<SysFindTimeBean>) -> Unit, error: (t: Throwable) -> Unit): Disposable {
+        val disposable = apis.findTime().subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread())
+            .subscribe(observer, error)
+        return disposable
+    }
 }
 

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

@@ -161,8 +161,8 @@ class HomeActivity : BaseActivity() {
                         bpos.putInt("pos", pos)
                         bpos.putString("rtName", res[pos].rtName)
 
-                        LogUtils.logD("rtName"+res[pos].rtName)
-                        LogUtils.logD("rtName"+res)
+                       // LogUtils.logD("rtName"+res[pos].rtName)
+                        //LogUtils.logD("rtName"+res)
                         //旋转动画
                         ratateImage!!.startSpin()
 

+ 14 - 12
app/src/main/java/com/jld/vod/view/MainActivity.kt

@@ -348,8 +348,9 @@ class MainActivity : BaseActivity() {
      */
     private fun initIconRes() {
         viewModel.findAllModularRotateImgBeanLiveData.observe(this){it->
-            //LogUtils.logD("initIconRes"+it)
-            if(it.data!!.size != 0) {
+            LogUtils.logD("initIconRes"+it)
+
+            if(it.code==20000 && it.data!!.size != 0) {
                 mUpCircleMenuLayout!!.setMenuItemIconsAndTexts(it.data)
                 mAllModularRotateImgBean = it.data
                 //LogUtils.logD("AllModularRotateImgBean"+it.data+"==" + it.data.get(pos).mid+"=="+pos)
@@ -515,16 +516,17 @@ class MainActivity : BaseActivity() {
         super.onStart()
         //初始化当前时间
         LogUtils.logD("初始化当前时间")
-        var dateString =  SharedPrefUtils.getString(this,"newDate")
-        Log.d("onStart", "onStart: $dateString")
-        Log.d("onStart——系统时间", "onStart:"+System.currentTimeMillis())
-//        var date: Date = Date(System.currentTimeMillis())
-        var dateLong =0L
-        try {
-             dateLong = dateString.toLong()
-        } catch ( e : NumberFormatException){
-            Log.e(TAG, "onStart: ", e)
-        }
+//        var dateString =  SharedPrefUtils.getString(this,"newDate")
+//        Log.d("onStart", "onStart: $dateString")
+//        Log.d("onStart——系统时间", "onStart:"+System.currentTimeMillis())
+////        var date: Date = Date(System.currentTimeMillis())
+//        var dateLong =0L
+//        try {
+//             dateLong = dateString.toLong()
+//        } catch ( e : NumberFormatException){
+//            Log.e(TAG, "onStart: ", e)
+//        }
+        var dateLong =  System.currentTimeMillis()
         var date: Date = Date(dateLong)
         val time = DateUtils.getTime(date)
         val dates = DateUtils.getDate(date)

+ 11 - 0
app/src/main/java/com/jld/vod/view/SettingsActivity.kt

@@ -10,6 +10,7 @@ import android.view.WindowManager
 import androidx.appcompat.app.AppCompatActivity
 import androidx.preference.Preference
 import androidx.preference.PreferenceFragmentCompat
+import androidx.preference.SwitchPreference
 import com.jld.vod.R
 import com.jld.vod.config.Config
 import com.jld.vod.model.event.ReceiveEvent
@@ -83,6 +84,7 @@ class SettingsActivity : AppCompatActivity() {
             sendSocketManager!!.startUdpConnection()
 
             setPreferencesFromResource(R.xml.root_preferences, rootKey)
+            val home_settings = findPreference<Preference>("home_settings")
             val wifi_settings = findPreference<Preference>("wifi_settings")
             val seat_settings = findPreference<Preference>("seat_settings")
             val order_system = findPreference<Preference>("order_system")
@@ -90,6 +92,14 @@ class SettingsActivity : AppCompatActivity() {
             val ads_control = findPreference<Preference>("ads_control")
             val screen_control = findPreference<Preference>("screen_control")
 
+            home_settings!!.onPreferenceClickListener = Preference.OnPreferenceClickListener {
+                var i: Intent? = Intent()
+                i = Intent(Settings.ACTION_SETTINGS)
+                startActivity(i)
+
+                false
+            }
+
 
             wifi_settings!!.onPreferenceClickListener = Preference.OnPreferenceClickListener {
                 var i: Intent? = Intent()
@@ -111,6 +121,7 @@ class SettingsActivity : AppCompatActivity() {
                 false
             }
 
+
             //一键广告播放
             ads_control!!.onPreferenceChangeListener = Preference.OnPreferenceChangeListener { preference, newValue ->
                 LogUtils.logD("preference"+preference+"newValue"+newValue)

+ 24 - 16
app/src/main/java/com/jld/vod/view/SplashActivity.kt

@@ -137,7 +137,7 @@ class SplashActivity : BaseActivity(){
 
                 }
                 5->{
-                    findGameByNoInstall()
+                  //  findGameByNoInstall()
                 }
                 6->{
                     val result: String = message.obj.toString()
@@ -205,6 +205,8 @@ class SplashActivity : BaseActivity(){
 
         //初始化车辆信息
         initCarInfo()
+        //初始化为安装的游戏
+        initGameByNoInstall()
         //初始游戏安装
         initGameInstall()
         //初始化apk更新
@@ -212,6 +214,7 @@ class SplashActivity : BaseActivity(){
         //初始化卸载游戏
         initDelGame()
 
+
     }
     override fun initEvent() {
         super.initEvent()
@@ -302,10 +305,11 @@ class SplashActivity : BaseActivity(){
         Thread(Runnable {
             ajaxInfo(getString(R.string.inspection_application_welcome)+"....",null)
             try {
-                val response: Response = OkHttpUtils.getInstance()
-                        .getData(Config.ApiBaseUrl + "/synchronization/findGameInstalledPath/"+deviceSN)
+                val response: Response = OkHttpUtils.getInstance().getData(Config.ApiBaseUrl + "/synchronization/findGameInstalledPath/"+deviceSN)
                 val res = response.body!!.string()
                 val resultData = gson!!.fromJson(res, TerminalInstallBean::class.java)
+
+                LogUtils.logD("resultData"+resultData.data)
                 if (resultData.flag){
                     var ids:StringBuilder= StringBuilder("")
                     resultData!!.data!!.forEach {
@@ -321,16 +325,18 @@ class SplashActivity : BaseActivity(){
                         val responseDel: Response = OkHttpUtils.getInstance()
                                 .getData(Config.ApiBaseUrl + "/synchronization/delGameInstalledPath/"+ids.toString())
                         val resDel = responseDel.body!!.string()
+
                         val resultData = gson!!.fromJson(resDel, TerminalInstallBean::class.java)
+                        LogUtils.logD("responseDel"+resultData)
                         if(resultData.flag){
                             //放置主线程上运行
-                            handlerGetGameByNoInstall()
+                           // handlerGetGameByNoInstall()
                         }
                     }else {
-                        handlerGetGameByNoInstall()
+                      //  handlerGetGameByNoInstall()
                     }
                 }else{
-                    handlerGetGameByNoInstall()
+                  //  handlerGetGameByNoInstall()
                 }
             } catch (e: Exception) {
                 e.printStackTrace()
@@ -490,8 +496,9 @@ class SplashActivity : BaseActivity(){
                 }else{
                     //地图存在,获取未安装的apk
                     ajaxInfo(getString(R.string.map_loaded_successfully)+"....",null)
-                    handlerGetGameByNoInstall()
+
                     splashViewmodel.findGameByNoInstall(deviceSN)
+                  //  handlerGetGameByNoInstall()
                 }
             }else if(res == "20001")//未绑定
             {
@@ -609,21 +616,20 @@ class SplashActivity : BaseActivity(){
     /**
      * 通知主线程获取未安装apk
      */
-    fun handlerGetGameByNoInstall(){
-        val msg = Message()
-        msg.what = 5
-        mHandler.sendMessage(msg)
-    }
+//    fun handlerGetGameByNoInstall(){
+//        val msg = Message()
+//        msg.what = 5
+//        mHandler.sendMessage(msg)
+//    }
     /**
      * 获取未安装apk
      */
-    fun findGameByNoInstall(){
+    fun initGameByNoInstall(){
         splashViewmodel.findGameByNoInstallliveData.observe(this){ res->
-            LogUtils.logD("地图加载成功..$res")
             ajaxInfo(getString(R.string.get_no_app_installed)+"....",null)
             when (res?.code) {
                 BaseBean.SUCCESS -> {
-                    LogUtils.logD("走到这")
+                    //LogUtils.logD("走到这")
                     val list = res.data
                     if(list!!.size != 0) {
                         totalitem = res.data.size//总共待安装的数组数量
@@ -669,6 +675,7 @@ class SplashActivity : BaseActivity(){
     private fun initDelGame() {
 
 
+
         splashViewmodel.NuInstallGameLiveData.observe(this) { res ->
             ajaxInfo(getString(R.string.del_game)+"....",null)
             when (res?.code) {
@@ -874,8 +881,9 @@ class SplashActivity : BaseActivity(){
                     offNoWiFiConnectionTiming()//关闭计时
                     splashViewmodel.findLanguageAll()
                     splashViewmodel.getCarInfo()
-                    splashViewmodel.getCarRunInfo()
+                    splashViewmodel.getCarRunInfo(this)
                     splashViewmodel.findHomePageImg()
+                    splashViewmodel.findTime(this)//获取时区和时间
                     finishLoading()
                     flagwifi = false
                     getDebugStatus(deviceSN)

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

@@ -114,6 +114,7 @@ class WebActivity : AppCompatActivity() {
         var factoryClass: Class<*>? = null
         try {
 
+
             factoryClass = Class.forName("android.webkit.WebViewFactory")
             var getProviderClassMethod: Method? = null
             var sProviderInstance: Any? = null

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

@@ -1,6 +1,7 @@
 package com.jld.vod.viewmodel
 
 import android.app.Application
+import android.content.Context
 import android.util.Log
 import androidx.lifecycle.AndroidViewModel
 import androidx.lifecycle.MutableLiveData
@@ -10,7 +11,9 @@ import com.jld.vod.db.LanguageDatabase
 import com.jld.vod.model.bean.*
 import com.jld.vod.utils.DateUtils
 import com.jld.vod.utils.LogUtils
+import com.jld.vod.utils.ToastUtils
 import com.jld.vod.utils.http.RetrofitUtils
+import com.xuexiang.xui.widget.toast.XToast
 
 /**
  * Create by zhaofuxin on 2020/7/14
@@ -40,6 +43,8 @@ class SplashViewModel(app: Application) : AndroidViewModel(app) {
     val NuInstallGameLiveData: MutableLiveData<BaseBean<List<NuInstallGameBean>>> = MutableLiveData()
     val updateUserLiveData: MutableLiveData<Boolean> = MutableLiveData()
 
+    val findTimeliveData: MutableLiveData<BaseBean<SysFindTimeBean>> = MutableLiveData()
+
     /**
      * 获取所有语言信息
      */
@@ -120,16 +125,16 @@ class SplashViewModel(app: Application) : AndroidViewModel(app) {
     /**
      * 获取车辆运行信息
      */
-    fun getCarRunInfo(): MutableLiveData<BaseBean<CarRunInfoBean>> {
+    fun getCarRunInfo(mContext:Context): MutableLiveData<BaseBean<CarRunInfoBean>> {
         carRunInfoliveData.postValue(BaseBean.loading(null))
         RetrofitUtils.carRunInfo(
             { t ->
                 when (t.code) {
                     20000 -> {
-                        if (t.data != null)
-                        {
-                            DateUtils.setSystemDate(t.data.date)//设置系统时间
-                        }
+//                        if (t.data != null)
+//                        {
+//                            DateUtils.setSystemDate(t.data.date,mContext)//设置系统时间
+//                        }
                         carRunInfoliveData.postValue(BaseBean.success(t.data))
                     }
                     else -> carRunInfoliveData.postValue(BaseBean.error(t.message, t.data))
@@ -257,8 +262,7 @@ class SplashViewModel(app: Application) : AndroidViewModel(app) {
      * 获取未安装游戏列表
      */
     fun findGameByNoInstall(terminal:String): MutableLiveData<BaseBean<List<FindGameByNoInstallBean>>> {
-        LogUtils.logD("findGameInstalledPath: 正在查询未安装游戏")
-        findGameByNoInstallliveData.postValue(null)
+        //findGameByNoInstallliveData.postValue(null)
         RetrofitUtils.findGameByNoInstall(terminal, { t ->
                 when (t.code) {
                     20000 ->{
@@ -275,6 +279,7 @@ class SplashViewModel(app: Application) : AndroidViewModel(app) {
                 }
             },
             { ex ->
+
                 LogUtils.logD("获取游戏未安装,获取游戏未安装$ex")
                 findGameByNoInstallliveData.postValue(BaseBean.error(ex.message!!, null))
             }
@@ -379,4 +384,30 @@ class SplashViewModel(app: Application) : AndroidViewModel(app) {
         )
         return updateUserLiveData
     }
+
+    /**
+     * 获取车辆运行信息
+     */
+    fun findTime(mContext:Context): MutableLiveData<BaseBean<SysFindTimeBean>> {
+        findTimeliveData.postValue(BaseBean.loading(null))
+        RetrofitUtils.findTime(
+            { t ->
+                when (t.code) {
+                    20000 -> {
+                        if (t.data != null)
+                        {
+                            DateUtils.setSystemDate(t.data.timestamp,t.data.timeZone,mContext)//设置系统时间
+                        }
+                        findTimeliveData.postValue(BaseBean.success(t.data))
+                    }
+                    else -> findTimeliveData.postValue(BaseBean.error(t.message, t.data))
+                }
+            },
+            { ex ->
+
+                findTimeliveData.postValue(BaseBean.error(ex.message!!, null))
+            }
+        )
+        return findTimeliveData
+    }
 }

BIN
app/src/main/res/mipmap-hdpi/home_default.png


+ 6 - 2
app/src/main/res/xml/root_preferences.xml

@@ -2,7 +2,10 @@
     xmlns:android="http://schemas.android.com/apk/res/android">
 
     <PreferenceCategory app:title="Settings">
-
+        <Preference
+            app:key="home_settings"
+            app:title="Home Settings"
+            />
         <Preference
             app:key="wifi_settings"
             app:title="WIFI Settings"
@@ -23,7 +26,8 @@
             app:key="screen_control"
             app:title="Screen Control"
             />
-<!--        <EditTextPreference-->
+
+        <!--        <EditTextPreference-->
 <!--            app:key="Password"-->
 <!--            app:title="Password"-->
 <!--            app:useSimpleSummaryProvider="true"-->

A különbségek nem kerülnek megjelenítésre, a fájl túl nagy
+ 0 - 375
hs_err_pid17268.log


A különbségek nem kerülnek megjelenítésre, a fájl túl nagy
+ 0 - 351
hs_err_pid37232.log


+ 10 - 10
keystore.properties

@@ -1,10 +1,10 @@
-#android 6.0系统签
-#storePassWord=android
-#keyPassWord=android
-#keyAlias=androiddebugkey
-#storeFile=./platform.jks
-#android 10系统签
-storePassWord=vod123456
-keyPassWord=vod123456
-keyAlias=vod
-storeFile=./platform.keystore
+#android 6.0系统签锟斤拷
+storePassWord=android
+keyPassWord=android
+keyAlias=androiddebugkey
+storeFile=./platform.jks
+#android 10系统签锟斤拷
+#storePassWord=vod123456
+#keyPassWord=vod123456
+#keyAlias=vod
+#storeFile=./platform.keystore

+ 8 - 1
library_zhy_CircleMenu/src/main/java/com/zhy/view/CircleMenuLayout.java

@@ -15,6 +15,7 @@ import android.widget.TextView;
 import com.bumptech.glide.Glide;
 import com.zhy.ccbCricleMenu.R;
 
+
 import java.util.List;
 
 /**
@@ -485,7 +486,13 @@ public class CircleMenuLayout extends ViewGroup
 			if (iv != null)
 			{
 				iv.setVisibility(View.VISIBLE);
-				Glide.with(this).load(mItemImgs.get(i)).into(iv);
+				Glide.with(this).load(mItemImgs.get(i))
+			//			.placeholder()
+						.into(iv);
+
+//				.placeholder(.app_logo)//设置加载中图片
+//					.fallback( R.mipmap.app_logo)
+//					.error(R.mipmap.app_logo)
 				//iv.setImageResource(mItemImgs[i]);
 				iv.setOnClickListener(new OnClickListener()
 				{