Переглянути джерело

feat: 补充打开通用弹窗deeplink,open_dialog

XiaodongLin 7 місяців тому
батько
коміт
daff326900

+ 33 - 1
app/src/main/java/com/adealink/weparty/util/IntentUtil.kt

@@ -2,6 +2,8 @@ package com.adealink.weparty.util
 
 import android.content.Context
 import android.content.Intent
+import android.net.Uri
+import android.os.Bundle
 import androidx.core.net.toUri
 import androidx.fragment.app.FragmentActivity
 import com.adealink.frame.aab.util.getCompatString
@@ -12,6 +14,7 @@ import com.adealink.frame.util.PackageUtil
 import com.adealink.frame.util.getParamsFromUri
 import com.adealink.weparty.R
 import com.adealink.weparty.commonui.BaseActivity
+import com.adealink.weparty.commonui.dialogfragment.BaseDialogFragment
 import com.adealink.weparty.commonui.toast.util.showToast
 import com.adealink.weparty.module.game.GameModule
 import com.adealink.weparty.module.game.data.GameEntranceType
@@ -64,6 +67,29 @@ fun goLocalLinkPage(context: Context?, link: String?) {
                 }
             }
 
+            //指定弹窗
+            link.startsWith(AppBaseInfo.deeplinkScheme) && link.contains(INTENT_DIALOG) -> {
+                //打开指定弹窗
+                val activity = context as? FragmentActivity ?: return
+                val uri = Uri.parse(link)
+                val paramsMap = uri.queryParameterNames.associateWith { uri.getQueryParameter(it) }
+                val routerPath = paramsMap["page"]?.let {
+                    if (it.startsWith("/")) it else "/$it"
+                }
+                val dialogTag = paramsMap["dialog_tag"] ?: ""
+                if (!routerPath.isNullOrEmpty()) {
+                    Router.getRouterInstance<BaseDialogFragment>(routerPath)?.apply {
+                        arguments = Bundle().apply {
+                            for ((key, value) in paramsMap) {
+                                if (value != null) {
+                                    putString(key, value)
+                                }
+                            }
+                        }
+                    }?.show(activity.supportFragmentManager, dialogTag)
+                }
+            }
+
             // 2.Deeplink连接
             link.startsWith(AppBaseInfo.deeplinkScheme) -> {
                 // 通过DeepLink 跳转的指定页面
@@ -98,4 +124,10 @@ fun goLocalLinkPage(context: Context?, link: String?) {
     } catch (e: Exception) {
         //ntd.
     }
-}
+}
+
+
+/**
+ * 定义打开弹窗的deepLink
+ */
+const val INTENT_DIALOG = "open_dialog"