Selaa lähdekoodia

feat: 设置亮度、销毁PreloadManager提供JS方法

pengwuliang 1 vuosi sitten
vanhempi
sitoutus
a67c7c329a

+ 14 - 6
app/src/main/java/com/adealink/weparty/ui/home/BaseHomeFragment.kt

@@ -1,11 +1,13 @@
 package com.adealink.weparty.ui.home
 
 import android.annotation.SuppressLint
+import android.net.Uri
 import android.os.Bundle
 import androidx.annotation.CallSuper
 import androidx.annotation.LayoutRes
 import androidx.fragment.app.viewModels
 import androidx.lifecycle.Observer
+import androidx.lifecycle.lifecycleScope
 import androidx.recyclerview.widget.RecyclerView
 import androidx.viewpager2.widget.ViewPager2
 import com.adealink.frame.base.fastLazy
@@ -39,7 +41,6 @@ import com.adealink.weparty.module.level.data.TAG_LEVEL
 import com.adealink.weparty.module.medal.Medal
 import com.adealink.weparty.module.medal.MedalModule
 import com.adealink.weparty.module.medal.data.MedalData
-import com.adealink.weparty.module.message.MessageModule
 import com.adealink.weparty.module.operation.Operation
 import com.adealink.weparty.module.operation.OperationModule
 import com.adealink.weparty.module.profile.ProfileModule
@@ -55,6 +56,8 @@ import com.adealink.weparty.url.urlConfigService
 import com.adealink.weparty.webview.manager.PreloadWebViewManager
 import com.google.android.material.tabs.TabLayout
 import com.google.android.material.tabs.TabLayoutMediator
+import kotlinx.coroutines.delay
+import kotlinx.coroutines.launch
 
 /**
  * Created by sunxiaodong on 2022/10/9.
@@ -309,11 +312,16 @@ abstract class BaseHomeFragment : BaseFragment, ITabManager {
     }
 
     private fun preloadWebViewResource() {
-        if (!PreloadWebViewManager.isUrlPreloaded(urlConfigService.getH5Url(H5Page.PREFETCH))) {
-            PreloadWebViewManager.preloadWebResources(
-                requireContext(),
-                urlConfigService.getH5Url(H5Page.PREFETCH)
-            )
+        val url = urlConfigService.getH5Url(H5Page.PREFETCH)
+        val keepAliveTime = Uri.parse(url).getQueryParameter("maxAge")?.toInt() ?: 0
+        if (!PreloadWebViewManager.isUrlPreloaded(url)) {
+            PreloadWebViewManager.preloadWebResources(requireContext(), url)
+        }
+        if (keepAliveTime > 0) {
+            lifecycleScope.launch {
+                delay(keepAliveTime * 1000L)
+                PreloadWebViewManager.destroy()
+            }
         }
     }
 

+ 4 - 0
module/webview/src/main/java/com/adealink/weparty/webview/WeNextWebView.kt

@@ -11,6 +11,7 @@ import com.adealink.weparty.webview.jsbridge.JSBridge
 import com.adealink.weparty.webview.jsbridge.JSBridgeImpl
 import com.adealink.weparty.webview.jsbridge.method.LogJSNativeMethod
 import com.adealink.weparty.webview.jsbridge.method.StatJSNativeMethod
+import com.adealink.weparty.webview.jsnativemethod.ClosePreloadManagerJSNativeMethod
 import com.adealink.weparty.webview.jsnativemethod.CloseWebViewJSNativeMethod
 import com.adealink.weparty.webview.jsnativemethod.CommonJSNativeMethod
 import com.adealink.weparty.webview.jsnativemethod.CopyToClipBoardJSNativeMethod
@@ -42,6 +43,7 @@ import com.adealink.weparty.webview.jsnativemethod.SearchUsesJSNativeMethod
 import com.adealink.weparty.webview.jsnativemethod.SendEmailJSNativeMethod
 import com.adealink.weparty.webview.jsnativemethod.SetImmersionModeJSNativeMethod
 import com.adealink.weparty.webview.jsnativemethod.SetNavigationBarModeJSNativeMethod
+import com.adealink.weparty.webview.jsnativemethod.SetupBrightnessJSNativeMethod
 import com.adealink.weparty.webview.jsnativemethod.ShareLinkJSNativeMethod
 import com.adealink.weparty.webview.jsnativemethod.ShowGoogleRechargeDialogJSNativeMethod
 import com.adealink.weparty.webview.jsnativemethod.ShowInviteFriendJoinFamilyJSNativeMethod
@@ -115,6 +117,8 @@ class WeNextWebView : BaseWebView {
         jsBridge.addNativeMethod(GetSafeAreaInfoJSNativeMethod(this))
         jsBridge.addNativeMethod(ShowGoogleRechargeDialogJSNativeMethod())
         jsBridge.addNativeMethod(ShowUserCertificationJSNativeMethod())
+        jsBridge.addNativeMethod(SetupBrightnessJSNativeMethod(this))
+        jsBridge.addNativeMethod(ClosePreloadManagerJSNativeMethod())
     }
 
     override fun loadUrl(urlP: String) {

+ 17 - 0
module/webview/src/main/java/com/adealink/weparty/webview/jsnativemethod/ClosePreloadManagerJSNativeMethod.kt

@@ -0,0 +1,17 @@
+package com.adealink.weparty.webview.jsnativemethod
+
+import com.adealink.weparty.webview.jsbridge.callback.JSBridgeCallback
+import com.adealink.weparty.webview.jsbridge.method.JSNativeMethod
+import com.adealink.weparty.webview.manager.PreloadWebViewManager
+
+/**
+ * Created by PengWuLiang on 2025/4/1
+ */
+class ClosePreloadManagerJSNativeMethod: JSNativeMethod<Any, Any> {
+
+    override val methodName: String = "closePreloadManager"
+
+    override fun handleMethodCall(data: Any, callback: JSBridgeCallback<Any>?) {
+        PreloadWebViewManager.destroy()
+    }
+}

+ 25 - 0
module/webview/src/main/java/com/adealink/weparty/webview/jsnativemethod/SetupBrightnessJSNativeMethod.kt

@@ -0,0 +1,25 @@
+package com.adealink.weparty.webview.jsnativemethod
+
+import com.adealink.weparty.commonui.BaseActivity
+import com.adealink.weparty.webview.IWebView
+import com.adealink.weparty.webview.jsbridge.callback.JSBridgeCallback
+import com.adealink.weparty.webview.jsbridge.method.JSNativeMethod
+import com.google.gson.annotations.SerializedName
+
+/**
+ * Created by PengWuLiang on 2025/4/1
+ */
+data class BrightnessInfo(
+    @SerializedName("brightness") val brightness: Float,
+)
+
+class SetupBrightnessJSNativeMethod(private val webView: IWebView): JSNativeMethod<BrightnessInfo, Any> {
+
+    override val methodName: String = "setupBrightness"
+
+    override fun handleMethodCall(data: BrightnessInfo, callback: JSBridgeCallback<Any>?) {
+        val activity = webView.webViewCallback?.getActivity() as? BaseActivity ?: return
+        activity.window.attributes.screenBrightness = data.brightness
+    }
+
+}