honghengqiang 2 tahun lalu
induk
melakukan
2d745d682c

+ 0 - 1
.idea/gradle.xml

@@ -20,7 +20,6 @@
             <option value="$PROJECT_DIR$/user" />
           </set>
         </option>
-        <option name="resolveModulePerSourceSet" value="false" />
       </GradleProjectSettings>
     </option>
   </component>

+ 6 - 5
app/src/main/java/com/swago/app/SplashActivity.kt

@@ -26,11 +26,12 @@ class SplashActivity : AppCompatActivity() {
         super.onCreate(savedInstanceState)
         setContentView(R.layout.activity_splash)
 
-        if (UserInfo.getLoginModel() == null){
-            ARouter.getInstance().build(ARouteConstant.Login.login).navigation()
-            finish()
-        }else{
-            splashVm.loginByAuto()
+        splashVm.getApiDomain()
+        splashVm.jumpToLoginLiveData.observe(this){
+            if (!it){
+                ARouter.getInstance().build(ARouteConstant.Login.login).navigation()
+                finish()
+            }
         }
     }
 

+ 109 - 5
app/src/main/java/com/swago/app/SplashVm.kt

@@ -1,19 +1,19 @@
 package com.swago.app
 
+import android.annotation.SuppressLint
 import android.app.Application
 import android.content.Intent
-import android.util.Log
-import android.widget.Toast
+import android.os.Handler
+import android.os.Message
 import androidx.lifecycle.MutableLiveData
 import com.alibaba.android.arouter.launcher.ARouter
 import com.google.gson.Gson
 import com.swago.baseswago.constant.ARouteConstant
 import com.swago.baseswago.constant.UrlConstant
+import com.swago.baseswago.http.RetrofitManager
 import com.swago.baseswago.inter.ApiManager
-import com.swago.baseswago.model.ConfigModel
 import com.swago.baseswago.util.*
-import com.tencent.qcloud.tim.uikit.TUIKit
-import com.tencent.qcloud.tim.uikit.base.IUIKitCallBack
+import org.jsoup.Jsoup
 
 /**
  *@date 2022/2/26 11:33
@@ -25,6 +25,110 @@ class SplashVm (application: Application) : BaseViewModel(application) {
         Gson()
     }
 
+    val jumpToLoginLiveData by lazy {
+        MutableLiveData<Boolean>()
+    }
+
+    var retry = 0
+
+    private val executorService by lazy {
+        ThreadPoolUtils.getInstance().executorService
+    }
+
+    private val mHandler = @SuppressLint("HandlerLeak")
+    object: Handler(){
+        override fun handleMessage(msg: Message) {
+            if (UserInfo.getLoginModel() == null){
+                jumpToLoginLiveData.value = false
+            }else{
+                loginByAuto()
+            }
+        }
+    }
+
+    fun getApiDomain(){
+        requestData2 {
+            requestData {
+                val data = ApiManager.configApi.getApiDomain()
+                if (BuildConfig.DEBUG) {
+                    UrlConstant.BASE_URL = "http:test-api.swago.cn"
+                } else {
+                    UrlConstant.BASE_URL = data.host
+                }
+                RetrofitManager.resetUrl()
+                if (UserInfo.getLoginModel() == null){
+                    jumpToLoginLiveData.value = false
+                }else{
+                    loginByAuto()
+                }
+            }
+
+            requestError {
+                retry++
+                if (BuildConfig.DEBUG){
+                    executorService.execute {
+                        val document = Jsoup.connect("https://github.com/whyNotBanMagna/MvpProject/blob/master/README.md").timeout(2000).get()
+                        val list = document.text().split(" ")
+                        list.forEach {
+                            if (it.length==32){
+                                if (BuildConfig.DEBUG) {
+                                    UrlConstant.BASE_URL = "http:test-api.swago.cn"
+                                } else {
+                                    UrlConstant.BASE_URL =  MD5Util.decodeBase64(it)
+                                }
+                                RetrofitManager.resetUrl()
+                                mHandler.sendEmptyMessage(0)
+                                return@execute
+                            }
+                        }
+                    }
+                }else{
+                    when(retry){
+                        1 -> {
+                            getApiDomain()
+                        }
+                        2 -> {
+                            executorService.execute {
+                                val document = Jsoup.connect("https://github.com/whyNotBanMagna/MvpProject/blob/master/README.md").timeout(2000).get()
+                                val list = document.text().split(" ")
+                                list.forEach {
+                                    if (it.length==32){
+                                        if (BuildConfig.DEBUG) {
+                                            UrlConstant.BASE_URL = "http:test-api.swago.cn"
+                                        } else {
+                                            UrlConstant.BASE_URL =  MD5Util.decodeBase64(it)
+                                        }
+                                        RetrofitManager.resetUrl()
+                                        mHandler.sendEmptyMessage(0)
+                                        return@execute
+                                    }
+                                }
+                            }
+                        }
+                        3 -> {
+                            executorService.execute {
+                                val document = Jsoup.connect("https://github.com/whyNotBanMagna/MvpProject/blob/master/README.md").timeout(2000).get()
+                                val list = document.text().split(" ")
+                                list.forEach {
+                                    if (it.length==32){
+                                        if (BuildConfig.DEBUG) {
+                                            UrlConstant.BASE_URL = "http:test-api.swago.cn"
+                                        } else {
+                                            UrlConstant.BASE_URL =  MD5Util.decodeBase64(it)
+                                        }
+                                        RetrofitManager.resetUrl()
+                                        mHandler.sendEmptyMessage(0)
+                                        return@execute
+                                    }
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+        }
+    }
+
     fun loginByAuto() {
         requestData {
             val configModel = ApiManager.configApi.getAppConfig()

+ 31 - 0
app/src/main/java/com/swago/app/ThreadPoolUtils.java

@@ -0,0 +1,31 @@
+package com.swago.app;
+
+import java.util.concurrent.BlockingQueue;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.LinkedBlockingQueue;
+import java.util.concurrent.ThreadPoolExecutor;
+import java.util.concurrent.TimeUnit;
+
+public class ThreadPoolUtils {
+    private static int NUMBER_OF_CORES = Runtime.getRuntime().availableProcessors();
+    private static int KEEP_ALIVE_TIME = 1;
+    private static TimeUnit KEEP_ALIVE_TIME_UNIT = TimeUnit.SECONDS;
+    private ExecutorService executorService;
+
+    private ThreadPoolUtils(){
+        BlockingQueue<Runnable> taskQueue = new LinkedBlockingQueue<>();
+        executorService = new ThreadPoolExecutor(NUMBER_OF_CORES, NUMBER_OF_CORES * 2, KEEP_ALIVE_TIME, KEEP_ALIVE_TIME_UNIT, taskQueue);
+    }
+
+    public static ThreadPoolUtils getInstance(){
+        return ThreadPoolUtilsHolder.sInstance;
+    }
+
+    private static class ThreadPoolUtilsHolder{
+        private static final ThreadPoolUtils sInstance = new ThreadPoolUtils();
+    }
+
+    public ExecutorService  getExecutorService(){
+        return executorService;
+    }
+}

+ 2 - 0
baseswago/build.gradle

@@ -127,4 +127,6 @@ dependencies {
     api 'com.google.firebase:firebase-auth-ktx'
     api 'com.google.firebase:firebase-firestore-ktx'
     api 'com.google.firebase:firebase-perf-ktx'
+    //jsoup
+    api 'org.jsoup:jsoup:1.12.1'
 }

+ 6 - 4
baseswago/src/main/java/com/swago/baseswago/activity/WebViewActivity.kt

@@ -1,12 +1,10 @@
 package com.swago.baseswago.activity
 
 import android.annotation.SuppressLint
+import android.os.Build
 import android.view.KeyEvent
 import android.view.ViewGroup
-import android.webkit.JavascriptInterface
-import android.webkit.WebResourceRequest
-import android.webkit.WebView
-import android.webkit.WebViewClient
+import android.webkit.*
 import android.widget.FrameLayout
 import androidx.constraintlayout.widget.ConstraintLayout
 import com.alibaba.android.arouter.facade.annotation.Autowired
@@ -60,6 +58,10 @@ class WebViewActivity : BaseXActivity<ActivityWebBinding>() {
                 e.printStackTrace()
             }
 
+            if (Build.VERSION.SDK_INT >= 21) {
+                settings.mixedContentMode = WebSettings.MIXED_CONTENT_ALWAYS_ALLOW
+            }
+
             settings.javaScriptEnabled = true
             addJavascriptInterface(jsLoad, "jsLoad")
             settings.allowUniversalAccessFromFileURLs = true

+ 1 - 3
baseswago/src/main/java/com/swago/baseswago/constant/UrlConstant.kt

@@ -15,13 +15,11 @@ import java.io.File
  */
 object UrlConstant {
 
-    val BASE_URL by lazy {
-        if (BuildConfig.DEBUG) {
+    var BASE_URL = if (BuildConfig.DEBUG) {
             "http:test-api.swago.cn"
         } else {
             "https://pro-api.swago.cn"
         }
-    }
 
     private val BASE_WEB_URL by lazy {
         if (BuildConfig.DEBUG) {

+ 1 - 0
baseswago/src/main/java/com/swago/baseswago/http/RetrofitManager.kt

@@ -22,6 +22,7 @@ object RetrofitManager {
 
     init {
         val okHttpClientBuilder = OkHttpClient.Builder()
+        okHttpClientBuilder.addInterceptor(UrlChangeInterceptor())
         if (BuildConfig.DEBUG){
             okHttpClientBuilder.addInterceptor(ChuckInterceptor(AppContext.getContext()))
         }

+ 49 - 0
baseswago/src/main/java/com/swago/baseswago/http/UrlChangeInterceptor.kt

@@ -0,0 +1,49 @@
+package com.swago.baseswago.http
+
+import android.text.TextUtils
+import android.util.Log
+import com.swago.baseswago.constant.UrlConstant
+import okhttp3.HttpUrl.Companion.toHttpUrlOrNull
+import okhttp3.HttpUrl
+import okhttp3.Interceptor
+import okhttp3.Response
+
+class UrlChangeInterceptor : Interceptor {
+
+    private var baseURL: HttpUrl? = null
+
+    override fun intercept(chain: Interceptor.Chain): Response {
+        val request = chain.request()
+        val headerValue = request.header("urlFlag")
+        if (!TextUtils.isEmpty(headerValue)){
+            baseURL = when(headerValue){
+                "apiDomain" -> {
+                    "http://doc.swago.cn".toHttpUrlOrNull()
+                }
+
+                else -> {
+                    UrlConstant.BASE_URL.toHttpUrlOrNull()
+                }
+            }
+
+            val newBuilder = request.newBuilder()
+            newBuilder.removeHeader("urlFlag")
+            baseURL?.let {
+                val newHttpUrl = request.url.newBuilder()
+                    .scheme(it.scheme)
+                    .host(it.host)
+                    .port(it.port)
+                    .build()
+                Log.i("zkc","转换的:${it.host}   ${it.port}")
+
+                val newRequest = newBuilder.url(newHttpUrl).build()
+                return chain.proceed(newRequest)
+            }
+
+        }else{
+            return chain.proceed(request)
+        }
+
+        return chain.proceed(request)
+    }
+}

+ 9 - 0
baseswago/src/main/java/com/swago/baseswago/inter/ConfigApi.kt

@@ -1,7 +1,9 @@
 package com.swago.baseswago.inter
 
 import com.swago.baseswago.model.ConfigModel
+import com.swago.baseswago.model.DomainConfig
 import retrofit2.http.GET
+import retrofit2.http.Headers
 import retrofit2.http.POST
 
 /**
@@ -16,4 +18,11 @@ interface ConfigApi {
     @POST("/v1/home/config")
     suspend fun getAppConfig(): ConfigModel
 
+    /**
+     * 获取api接口
+     */
+    @Headers("urlFlag:apiDomain")
+    @GET("/domain/domain.json")
+    suspend fun getApiDomain(): DomainConfig
+
 }

+ 5 - 0
baseswago/src/main/java/com/swago/baseswago/model/DomainConfig.kt

@@ -0,0 +1,5 @@
+package com.swago.baseswago.model
+
+data class DomainConfig(
+    val host:String=""
+)

+ 19 - 0
baseswago/src/main/java/com/swago/baseswago/util/MD5Util.java

@@ -1,7 +1,9 @@
 package com.swago.baseswago.util;
 
+import com.google.android.gms.common.util.Base64Utils;
 import com.google.android.gms.common.util.Hex;
 
+import java.nio.charset.StandardCharsets;
 import java.security.MessageDigest;
 
 public class MD5Util {
@@ -18,4 +20,21 @@ public class MD5Util {
             throw new RuntimeException("md5加密失败", e);
         }
     }
+
+
+    public static String encodeBase64(String str){
+        try {
+            return Base64Utils.encodeUrlSafe(str.getBytes(StandardCharsets.UTF_8));
+        }catch (Exception e){
+            throw new RuntimeException("加密失败",e);
+        }
+    }
+
+    public static String decodeBase64(String str) {
+        try {
+            return new String(Base64Utils.decodeUrlSafe(str),"UTF-8");
+        } catch (Exception e) {
+            throw new RuntimeException("解密失败", e);
+        }
+    }
 }

+ 6 - 0
build.gradle

@@ -25,6 +25,12 @@ allprojects {
         mavenCentral()
         maven { url "https://mirrors.tencent.com/nexus/repository/maven-public/" }
     }
+
+    configurations.all{
+        resolutionStrategy{
+            force 'com.squareup.okhttp3:okhttp:4.9.1'
+        }
+    }
 }
 
 task clean(type: Delete) {