Parcourir la source

[feat]键盘插件,增加判断用户是否登录、是否VIP的判断

hezihao il y a 8 mois
Parent
commit
d313015ac2

+ 15 - 1
plugins/keyboard_android/android/src/main/kotlin/com/atmob/keyboard_android/component/child/impl/AiKeyboardComponent.kt

@@ -6,12 +6,14 @@ import android.util.AttributeSet
 import android.view.View
 import androidx.recyclerview.widget.RecyclerView
 import com.atmob.keyboard_android.R
+import com.atmob.keyboard_android.component.ComponentMediator
 import com.atmob.keyboard_android.component.base.BaseUIComponent
 import com.atmob.keyboard_android.component.base.FakeComponent
 import com.atmob.keyboard_android.component.base.RouteComponent
 import com.atmob.keyboard_android.component.child.IAiChatComponent
 import com.atmob.keyboard_android.component.child.IAiKeyboardComponent
 import com.atmob.keyboard_android.component.item.AiKeyboardKeyViewBinder
+import com.atmob.keyboard_android.component.root.IKeyboardRootComponent
 import com.atmob.keyboard_android.constant.Constants
 import com.atmob.keyboard_android.enums.HelpMode
 import com.atmob.keyboard_android.enums.KeyboardGlobalType
@@ -22,6 +24,8 @@ import com.atmob.keyboard_android.ext.setVisible
 import com.atmob.keyboard_android.model.AiKeyboardKeyModel
 import com.atmob.keyboard_android.util.InputMethodUtil
 import com.atmob.keyboard_android.util.KeyboardHolder
+import com.atmob.keyboard_android.util.LogUtil
+import com.atmob.keyboard_android.util.UserInfoHelper
 import com.atmob.keyboard_android.util.recyclerview.GridDivider
 import com.atmob.keyboard_android.widget.LongTouchContainer
 import com.atmob.keyboard_android.widget.indicator.TabPagerTitleView
@@ -179,7 +183,17 @@ class AiKeyboardComponent @JvmOverloads constructor(
             mKeyListAdapter = MultiTypeAdapter(mKeyListItems).apply {
                 register(AiKeyboardKeyModel::class.java, AiKeyboardKeyViewBinder {
                     // 点击键盘按键,打开AI生成内容面板
-                    controlAiChatPageShowing(true)
+                    if (it.isVip) {
+                        // 检查是否VIP
+                        UserInfoHelper.checkVip {
+                            controlAiChatPageShowing(true)
+                            LogUtil.d("Ai键盘,已经是VIP,打开Ai内容面板")
+                        }
+                    } else {
+                        // 不需要VIP,直接打开
+                        controlAiChatPageShowing(true)
+                        LogUtil.d("Ai键盘,不需要VIP,直接打开Ai内容面板")
+                    }
                 })
             }
             // 水平分页布局管理器

+ 10 - 0
plugins/keyboard_android/android/src/main/kotlin/com/atmob/keyboard_android/enums/FlutterMethod.kt

@@ -5,6 +5,16 @@ package com.atmob.keyboard_android.enums
  */
 enum class FlutterMethod(val methodName: String) {
     /**
+     * 用户,是否已登录
+     */
+    IS_LOGIN("isLogin"),
+
+    /**
+     * 用户,是否是VIP会员
+     */
+    IS_MEMBER("isMember"),
+
+    /**
      * 获取键盘列表
      */
     GET_KEYBOARD_LIST("getKeyboardList"),

+ 20 - 0
plugins/keyboard_android/android/src/main/kotlin/com/atmob/keyboard_android/mvvm/repository/KeyboardRepository.kt

@@ -11,6 +11,26 @@ import com.atmob.keyboard_android.util.bridge.model.resp.KeyboardListResp
  */
 class KeyboardRepository {
     /**
+     * 用户是否已登录
+     */
+    fun isLogin(
+        onSuccess: (resultObj: Boolean) -> Unit,
+        onFail: (msg: String) -> Unit
+    ) {
+        FlutterBridgeManager.isLogin(onSuccess, onFail)
+    }
+
+    /**
+     * 用户是否为VIP
+     */
+    fun isMember(
+        onSuccess: (resultObj: Boolean) -> Unit,
+        onFail: (msg: String) -> Unit
+    ) {
+        FlutterBridgeManager.isMember(onSuccess, onFail)
+    }
+
+    /**
      * 获取键盘列表
      */
     fun getKeyboardList(

+ 20 - 0
plugins/keyboard_android/android/src/main/kotlin/com/atmob/keyboard_android/mvvm/viewmodel/KeyboardViewModel.kt

@@ -160,6 +160,26 @@ class KeyboardViewModel : ViewModel() {
     // ----------------------------------- 获取业务数据方法 -----------------------------------
 
     /**
+     * 用户是否已登录
+     */
+    fun isLogin(
+        onSuccess: (resultObj: Boolean) -> Unit,
+        onFail: (msg: String) -> Unit
+    ) {
+        mKeyboardRepository.isLogin(onSuccess, onFail)
+    }
+
+    /**
+     * 用户是否为VIP
+     */
+    fun isMember(
+        onSuccess: (resultObj: Boolean) -> Unit,
+        onFail: (msg: String) -> Unit
+    ) {
+        mKeyboardRepository.isMember(onSuccess, onFail)
+    }
+
+    /**
      * 获取键盘列表
      */
     fun getKeyboardList(onFail: (msg: String) -> Unit) {

+ 80 - 0
plugins/keyboard_android/android/src/main/kotlin/com/atmob/keyboard_android/util/UserInfoHelper.kt

@@ -0,0 +1,80 @@
+package com.atmob.keyboard_android.util
+
+import com.atmob.keyboard_android.component.ComponentMediator
+import com.atmob.keyboard_android.component.root.IKeyboardRootComponent
+import com.blankj.utilcode.util.ToastUtils
+
+/**
+ * 用户信息工具类
+ */
+object UserInfoHelper {
+    /**
+     * 是否已登录
+     */
+    fun isLogin(callback: (isLogin: Boolean) -> Unit) {
+        KeyboardHolder.getKeyboardService()?.getKeyboardViewModel()
+            ?.isLogin(onSuccess = {
+                callback.invoke(it)
+            }, onFail = {
+                ToastUtils.showShort(it)
+            })
+    }
+
+    /**
+     * 是否为VIP
+     */
+    fun isVip(callback: (isVip: Boolean) -> Unit) {
+        isLogin { isLogin ->
+            // 已登录,再检查是否VIP
+            if (isLogin) {
+                KeyboardHolder.getKeyboardService()?.getKeyboardViewModel()
+                    ?.isMember(onSuccess = {
+                        callback.invoke(it)
+                    }, onFail = {
+                        ToastUtils.showShort(it)
+                    })
+            } else {
+                // 未登录,则直接返回false
+                callback.invoke(false)
+            }
+        }
+    }
+
+    /**
+     * 已登录,才允许执行下一步
+     */
+    fun checkLogin(nextAction: () -> Unit) {
+        isLogin {
+            // 已登录,直接执行
+            if (it) {
+                nextAction.invoke()
+            } else {
+                // 未登录,切换到登录页
+                val keyboardRootComponent =
+                    ComponentMediator.findComponent(IKeyboardRootComponent::class.java)
+                keyboardRootComponent?.switchLoginPage()
+            }
+        }
+    }
+
+    /**
+     * 已经是VIP,才允许执行下一步
+     */
+    fun checkVip(nextAction: () -> Unit) {
+        // 先检查是否登录
+        checkLogin {
+            // 再检查,是否是VIP
+            isVip {
+                // 已经是VIP,直接执行
+                if (it) {
+                    nextAction.invoke()
+                } else {
+                    // 未登录,切换到VIP页
+                    val keyboardRootComponent =
+                        ComponentMediator.findComponent(IKeyboardRootComponent::class.java)
+                    keyboardRootComponent?.switchVipPage()
+                }
+            }
+        }
+    }
+}

+ 16 - 4
plugins/keyboard_android/android/src/main/kotlin/com/atmob/keyboard_android/util/bridge/FlutterBridgeManager.kt

@@ -39,12 +39,24 @@ object FlutterBridgeManager : IBridgeApi {
         mNativeMethodRegistry.init(flutterEngine)
     }
 
-    override fun isLogin(): Boolean {
-        return false
+    override fun isLogin(onSuccess: (Boolean) -> Unit, onFail: (String) -> Unit) {
+        mFlutterMethodCaller.callMethod<Boolean>(
+            FlutterMethod.IS_LOGIN.methodName,
+            isReturnJson = false,
+            modelClazz = Boolean::class.java,
+            onSuccess = onSuccess,
+            onFail = onFail
+        )
     }
 
-    override fun isVip(): Boolean {
-        return false
+    override fun isMember(onSuccess: (Boolean) -> Unit, onFail: (String) -> Unit) {
+        mFlutterMethodCaller.callMethod<Boolean>(
+            FlutterMethod.IS_MEMBER.methodName,
+            isReturnJson = false,
+            modelClazz = Boolean::class.java,
+            onSuccess = onSuccess,
+            onFail = onFail
+        )
     }
 
     override fun jump2CustomCharacterPage() {

+ 8 - 2
plugins/keyboard_android/android/src/main/kotlin/com/atmob/keyboard_android/util/bridge/api/UserApi.kt

@@ -7,10 +7,16 @@ interface UserApi {
     /**
      * 用户是否已登录
      */
-    fun isLogin(): Boolean
+    fun isLogin(
+        onSuccess: (resultObj: Boolean) -> Unit,
+        onFail: (msg: String) -> Unit
+    )
 
     /**
      * 用户是否为VIP
      */
-    fun isVip(): Boolean
+    fun isMember(
+        onSuccess: (resultObj: Boolean) -> Unit,
+        onFail: (msg: String) -> Unit
+    )
 }