Selaa lähdekoodia

feat: 申请陪玩师优先跳转H5

DoggyZhang 2 kuukautta sitten
vanhempi
sitoutus
498a88458d

+ 2 - 2
app/dependencies/releaseRuntimeClasspath.txt

@@ -229,7 +229,7 @@ com.wenext.android:frame-aab:6.0.3
 com.wenext.android:frame-apm:6.0.1
 com.wenext.android:frame-audio:6.0.0
 com.wenext.android:frame-base:6.0.4
-com.wenext.android:frame-bom:6.2.5
+com.wenext.android:frame-bom:6.2.7
 com.wenext.android:frame-coroutine:6.0.0
 com.wenext.android:frame-crash:6.0.1
 com.wenext.android:frame-data:6.0.0
@@ -258,7 +258,7 @@ com.wenext.android:frame-spi:6.0.0
 com.wenext.android:frame-startup:6.0.1
 com.wenext.android:frame-statistics:6.1.0
 com.wenext.android:frame-storage:6.0.7
-com.wenext.android:frame-util:6.0.5
+com.wenext.android:frame-util:6.0.7
 com.wenext.android:frame-zero:6.0.0
 com.wenext.android:retrofit:6.0.0
 com.wenext.android:zxing:6.1.0

+ 2 - 0
app/src/main/java/com/adealink/weparty/module/joinus/Router.kt

@@ -14,6 +14,8 @@ interface JoinUs {
     interface JoinUs {
         companion object {
             const val PATH = Common.PATH
+
+            const val EXTRA_JOIN_US = "extra_join_us"
         }
     }
 

+ 1 - 1
app/src/main/java/com/adealink/weparty/webview/WebViewActivity.kt

@@ -30,7 +30,7 @@ class WebViewActivity : BaseActivity(), IWebViewFragmentCallback {
     var url: String? = null
 
     @BindExtra(name = Web.Common.EXTRA_SHOW_TOPBAR, desc = "显示顶部栏")
-    var showTopbar: Boolean = true
+    var showTopbar: Boolean = false
 
     @BindExtra(name = Web.Common.EXTRA_SAFE_AREA, desc = "控制安全区域(顶部状态栏)")
     var safeArea: Boolean = false

+ 3 - 2
app/src/main/java/com/adealink/weparty/webview/WebViewFragment.kt

@@ -32,7 +32,8 @@ import com.adealink.frame.router.annotation.BindExtra
 import com.adealink.frame.util.AppUtil
 import com.adealink.frame.util.PackageUtil
 import com.adealink.frame.util.getDeviceName
-import com.adealink.frame.util.statusBarHeight
+import com.adealink.frame.util.naviBarHeightDp
+import com.adealink.frame.util.statusBarHeightDp
 import com.adealink.weparty.App
 import com.adealink.weparty.BuildConfig
 import com.adealink.weparty.R
@@ -254,7 +255,7 @@ class WebViewFragment : BaseFragment(R.layout.fragment_webview),
         loadJSUrl(
             "javascript:window.GAMI_BRIDGE={" +
                     "\"requestHeader\":${requestHeader()}," +
-                    "\"safeArea\":\"${(activity?.statusBarHeight() ?: 0)} 0\"" +
+                    "\"safeArea\":\"${(activity?.statusBarHeightDp() ?: 0)} ${(activity?.naviBarHeightDp() ?: 0)}\"" +
                     "}"
         )
     }

+ 3 - 0
app/src/main/java/com/adealink/weparty/webview/scheme/CloseWindowScheme.kt

@@ -3,6 +3,9 @@ package com.adealink.weparty.webview.scheme
 import android.net.Uri
 import com.adealink.weparty.webview.IWebView
 
+/**
+ * gami://web/closeWindow
+ */
 class CloseWindowScheme(webView: IWebView) :
     WebSchemeHandler(webView, arrayOf(WebScheme.CloseWindow.PATH)) {
 

+ 21 - 0
app/src/main/java/com/adealink/weparty/webview/scheme/PlaymateApplyScheme.kt

@@ -0,0 +1,21 @@
+package com.adealink.weparty.webview.scheme
+
+import android.net.Uri
+import com.adealink.frame.router.Router
+import com.adealink.weparty.commonui.ext.getActivity
+import com.adealink.weparty.module.joinus.JoinUs
+import com.adealink.weparty.webview.IWebView
+
+/**
+ * gami://web/playmateApply
+ */
+class PlaymateApplyScheme(webView: IWebView) :
+    WebSchemeHandler(webView, arrayOf(WebScheme.PlaymateApply.PATH)) {
+    override fun handle(uri: Uri) {
+        val activity = webView.getWebView().context?.getActivity() ?: return
+        Router.build(activity, JoinUs.JoinUs.PATH)
+            .start()
+
+        webView.webViewCallback?.closeWebView()
+    }
+}

+ 1 - 0
app/src/main/java/com/adealink/weparty/webview/scheme/SchemeHandlerExt.kt

@@ -7,4 +7,5 @@ fun CommonWebViewClient.registerCommonSchemeHandler(webView: IWebView) {
     addSchemeHandler(CloseWindowScheme(webView))
     addSchemeHandler(UserCancellationScheme(webView))
     addSchemeHandler(OpenNewPageScheme(webView))
+    addSchemeHandler(PlaymateApplyScheme(webView))
 }

+ 3 - 0
app/src/main/java/com/adealink/weparty/webview/scheme/UserCancellationScheme.kt

@@ -4,6 +4,9 @@ import android.net.Uri
 import com.adealink.weparty.module.account.AccountModule
 import com.adealink.weparty.webview.IWebView
 
+/**
+ * gami://web/userCancellation
+ */
 class UserCancellationScheme(webView: IWebView) :
     WebSchemeHandler(webView, arrayOf(WebScheme.UserCancellation.PATH)) {
     override fun handle(uri: Uri) {

+ 6 - 0
app/src/main/java/com/adealink/weparty/webview/scheme/WebScheme.kt

@@ -35,6 +35,12 @@ interface WebScheme {
         }
     }
 
+    interface PlaymateApply {
+        companion object {
+            const val PATH = "/playmateApply"
+        }
+    }
+
 }
 
 abstract class WebSchemeHandler(val webView: IWebView, val paths: Array<String>) : UriHandler() {

+ 1 - 1
gradle/libs.versions.toml

@@ -157,7 +157,7 @@ appleAppauth = "0.11.1"
 tiktok = "2.3.0"
 
 # frame
-frameBom = "6.2.5"
+frameBom = "6.2.7"
 
 frameRouterCompiler = "6.0.0"
 frameTrace = "1.0.0"

+ 19 - 5
module/joinus/src/main/java/com/adealink/weparty/joinus/JoinUsActivity.kt

@@ -8,6 +8,7 @@ import androidx.core.view.updateLayoutParams
 import androidx.core.view.updatePadding
 import com.adealink.frame.mvvm.view.viewBinding
 import com.adealink.frame.router.Router
+import com.adealink.frame.router.annotation.BindExtra
 import com.adealink.frame.router.annotation.RouterUri
 import com.adealink.frame.util.statusBarHeight
 import com.adealink.weparty.commonui.BaseActivity
@@ -18,6 +19,7 @@ import com.adealink.weparty.commonui.ext.onWindowInsets
 import com.adealink.weparty.commonui.ext.show
 import com.adealink.weparty.commonui.toast.util.showFailedToast
 import com.adealink.weparty.joinus.comp.JoinStepProgressComp
+import com.adealink.weparty.joinus.data.JoinUsData
 import com.adealink.weparty.joinus.data.JoinUsStep
 import com.adealink.weparty.joinus.databinding.ActivityJoinUsBinding
 import com.adealink.weparty.joinus.review.JoinUsStepReviewFragment
@@ -29,9 +31,16 @@ import com.adealink.weparty.joinus.viewmodel.JoinUsViewModelFactory
 import com.adealink.weparty.module.joinus.JoinUs
 import com.adealink.weparty.R as APP_R
 
-@RouterUri(path = [JoinUs.JoinUs.PATH], desc = "陪玩师入住")
+@RouterUri(
+    path = [JoinUs.JoinUs.PATH],
+    interceptors = [JoinUsInterceptor::class],
+    desc = "陪玩师入住"
+)
 class JoinUsActivity : BaseActivity() {
 
+    @BindExtra(JoinUs.JoinUs.EXTRA_JOIN_US)
+    var joinUsData: JoinUsData? = null
+
     private val binding by viewBinding(ActivityJoinUsBinding::inflate)
 
     private val viewModel by viewModels<JoinUsViewModel> { JoinUsViewModelFactory() }
@@ -73,10 +82,15 @@ class JoinUsActivity : BaseActivity() {
 
     override fun loadData() {
         super.loadData()
-        showLoading()
-        viewModel.loadApplyProgress().observe(this) {
-            dismissLoading()
-            showFailedToast(it)
+        val joinUsData = joinUsData
+        if (joinUsData == null) {
+            showLoading()
+            viewModel.loadApplyProgress().observe(this) {
+                dismissLoading()
+                showFailedToast(it)
+            }
+        } else {
+            viewModel.setJoinProgress(joinUsData)
         }
     }
 

+ 52 - 0
module/joinus/src/main/java/com/adealink/weparty/joinus/JoinUsInterceptor.kt

@@ -0,0 +1,52 @@
+package com.adealink.weparty.joinus
+
+import androidx.fragment.app.FragmentActivity
+import com.adealink.frame.base.Rlt
+import com.adealink.frame.coroutine.dispatcher.Dispatcher
+import com.adealink.frame.log.Log
+import com.adealink.frame.router.interceptor.UriInterceptor
+import com.adealink.weparty.App
+import com.adealink.weparty.commonui.BaseActivity
+import com.adealink.weparty.commonui.toast.util.showFailedToast
+import com.adealink.weparty.joinus.data.TAG_JOINUS
+import com.adealink.weparty.joinus.datasource.remote.JoinUsHttpService
+import com.adealink.weparty.module.joinus.JoinUs
+import kotlinx.coroutines.CoroutineScope
+import kotlinx.coroutines.launch
+
+class JoinUsInterceptor : UriInterceptor {
+
+    private val joinUsHttpService by lazy {
+        App.instance.networkService.getHttpService(JoinUsHttpService::class.java)
+    }
+
+    override fun intercept(chain: UriInterceptor.Chain) {
+        val request = chain.request()
+        val activity = request.ctx as? FragmentActivity
+        if (activity == null) {
+            Log.e(TAG_JOINUS, "JoinUsInterceptor, activity is null")
+            return
+        }
+        CoroutineScope(Dispatcher.UI).launch {
+            (activity as? BaseActivity)?.showLoading()
+            val rlt = joinUsHttpService.loadJoinUsProgress()
+            (activity as? BaseActivity)?.dismissLoading()
+            when (rlt) {
+                is Rlt.Failed -> {
+                    showFailedToast(rlt)
+                    chain.abort()
+                    return@launch
+                    //Ntd.
+                }
+
+                is Rlt.Success -> {
+                    val progressData = rlt.data.data
+                    request.intent.putExtra(JoinUs.JoinUs.EXTRA_JOIN_US, progressData)
+                    chain.proceed(request)
+                }
+            }
+
+        }
+    }
+
+}

+ 16 - 7
module/joinus/src/main/java/com/adealink/weparty/joinus/data/FieldData.kt

@@ -1,5 +1,6 @@
 package com.adealink.weparty.joinus.data
 
+import android.os.Parcelable
 import com.adealink.frame.base.Rlt
 import com.adealink.frame.data.json.froJsonErrorNull
 import com.adealink.frame.data.json.toJsonErrorNull
@@ -13,9 +14,11 @@ import com.google.gson.JsonSerializer
 import com.google.gson.annotations.GsonNullable
 import com.google.gson.annotations.JsonAdapter
 import com.google.gson.annotations.SerializedName
+import kotlinx.parcelize.Parcelize
 import java.lang.reflect.Type
 
 @JsonAdapter(StepFieldParser::class)
+@Parcelize
 sealed class StepField<T>(
     @SerializedName("fieldCode") val fieldCode: String = "", //字段编码
     @SerializedName("fieldName") val fieldName: String = "", //字段名称
@@ -29,7 +32,7 @@ sealed class StepField<T>(
     @SerializedName("validate") val validate: StepFieldValidate? = null, //校验器
     @GsonNullable
     @SerializedName("example") val example: StepFieldExample? = null //示例
-) {
+) : Parcelable {
 
     open fun validate(inputValue: T?): Rlt<Any> {
         return Rlt.Success(Unit)
@@ -314,11 +317,13 @@ data class DoubleArrayStepFieldValue(
 ) : StepFieldValue()
 
 
+@Parcelize
 data class StepFieldConstant(
     @SerializedName("key") val key: String,
     @SerializedName("value") val value: String,
-)
+) : Parcelable
 
+@Parcelize
 data class StepFieldValidate(
     @GsonNullable
     @SerializedName("required") val required: Boolean?, //是否必填
@@ -330,30 +335,33 @@ data class StepFieldValidate(
     @SerializedName("arraySize") val arraySize: StepFieldArraySize?, //数组长度(多选)
     @GsonNullable
     @SerializedName("regex") val desc: String?, //正则
-)
+) : Parcelable
 
+@Parcelize
 data class StepFieldValueSize(
     @SerializedName("min") val min: Int, //最小长度
     @SerializedName("max") val max: Int, //最大长度
-) {
+) : Parcelable {
     fun isValid(): Boolean {
         return min < max && max > 0
     }
 }
 
+@Parcelize
 data class StepFieldNumLimit(
     @SerializedName("min") val min: Double, //最小数字
     @SerializedName("max") val max: Double, //最大数字
-) {
+) : Parcelable {
     fun isValid(): Boolean {
         return min < max && max > 0
     }
 }
 
+@Parcelize
 data class StepFieldArraySize(
     @SerializedName("min") val min: Int, //最小数字
     @SerializedName("max") val max: Int, //最大数字
-) {
+) : Parcelable {
     fun isValid(): Boolean {
         return min < max && max > 0
     }
@@ -375,6 +383,7 @@ enum class ExampleType(val type: Int) {
     }
 }
 
+@Parcelize
 data class StepFieldExample(
     @SerializedName("type") val type: Int, //0:图片,1:声音,2:视频,3:url
     @SerializedName("value") val value: String, //数值
@@ -382,4 +391,4 @@ data class StepFieldExample(
     @SerializedName("title") val title: String?, //标题
     @GsonNullable
     @SerializedName("desc") val desc: String?, //描述
-)
+) : Parcelable

+ 10 - 4
module/joinus/src/main/java/com/adealink/weparty/joinus/data/JoinUsData.kt

@@ -1,7 +1,9 @@
 package com.adealink.weparty.joinus.data
 
+import android.os.Parcelable
 import com.google.gson.annotations.GsonNullable
 import com.google.gson.annotations.SerializedName
+import kotlinx.parcelize.Parcelize
 
 enum class JoinUsStep(val step: String) {
     UNDER_REVIEW("under_review"), //等待审核
@@ -10,6 +12,7 @@ enum class JoinUsStep(val step: String) {
     STEP_3("step_3"), //步骤3
 }
 
+@Parcelize
 data class JoinUsData(
     @SerializedName("underReview") val underReview: Boolean, //是否有申请正在审核中
 
@@ -24,7 +27,7 @@ data class JoinUsData(
     @SerializedName("step3Complete") val step3Complete: Boolean,//步骤3是否完成
     @GsonNullable
     @SerializedName("setp3") val step3: JoinStep3? = null,//步骤3
-) {
+) : Parcelable {
     fun getCurrentStep(): JoinUsStep {
         return when {
             underReview -> {
@@ -51,10 +54,11 @@ data class JoinUsData(
 }
 
 
+@Parcelize
 data class JoinStep1(
     @SerializedName("mobileNum") val mobile: String, //手机号
     @SerializedName("mobileCode") val regionCode: String, //手机区号
-)
+) : Parcelable
 
 
 data class SendPhoneVerifyReq(
@@ -73,6 +77,7 @@ data class MobileData(
     @SerializedName("num") val num: String,
 )
 
+@Parcelize
 data class JoinStep2(
     @GsonNullable
     @SerializedName("avatar") val avatar: String?, //头像
@@ -86,7 +91,7 @@ data class JoinStep2(
     @SerializedName("languageCodes") val languageCodes: List<String>?, //语言-从通用常量配置获取
     @GsonNullable
     @SerializedName("intro") val intro: String?, //简介
-)
+) : Parcelable
 
 
 data class ImproveUserInfoReq(
@@ -98,8 +103,9 @@ data class ImproveUserInfoReq(
     @SerializedName("intro") val intro: String?, //简介
 )
 
+@Parcelize
 data class JoinStep3(
     @SerializedName("bizCategoryCode") val categoryCode: String, //品类
     @SerializedName("fields") val fields: List<StepField<*>>, //申请步骤
-)
+) : Parcelable
 

+ 5 - 0
module/joinus/src/main/java/com/adealink/weparty/joinus/viewmodel/JoinUsViewModel.kt

@@ -25,6 +25,11 @@ class JoinUsViewModel : BaseViewModel(), IJoinUsViewModel {
     }
 
     val joinProgressLD = ExtMutableLiveData<JoinUsData?>()
+
+    fun setJoinProgress(data: JoinUsData?) {
+        joinProgressLD.send(data)
+    }
+
     fun loadApplyProgress(): LiveData<Rlt<Any>> {
         val liveData = OnceMutableLiveData<Rlt<Any>>()
         viewModelScope.launch {