Explorar o código

[feat]键盘插件,增加组件注册和解注册的日志打印

hezihao hai 8 meses
pai
achega
fd1a9602ec

+ 7 - 3
plugins/keyboard_android/android/src/main/kotlin/com/atmob/keyboard_android/KeyboardAndroidPlugin.kt

@@ -2,8 +2,10 @@ package com.atmob.keyboard_android
 
 import android.content.Context
 import android.os.Build
+import com.atmob.keyboard_android.component.ComponentMediator
 import com.atmob.keyboard_android.component.base.interceptor.LoginRouteInterceptor
 import com.atmob.keyboard_android.component.base.interceptor.RouteInterceptorManager
+import com.atmob.keyboard_android.component.listener.ComponentUpdateLoggingListener
 import com.atmob.keyboard_android.floating.FloatingButtonService
 import com.atmob.keyboard_android.util.InputMethodUtil
 import com.atmob.keyboard_android.util.LogUtil
@@ -24,14 +26,16 @@ class KeyboardAndroidPlugin : FlutterPlugin, MethodCallHandler {
     companion object {
         init {
             // 伴生对象的初始化,相当于Java的静态代码块,只初始化一次
-            initRouteInterceptor()
+            initComponentApi()
         }
 
         /**
-         * 初始化组件路由拦截器
+         * 初始化组件相关Api
          */
         @JvmStatic
-        private fun initRouteInterceptor() {
+        private fun initComponentApi() {
+            // 注册组件更新监听器
+            ComponentMediator.setOnComponentUpdateListener(ComponentUpdateLoggingListener())
             // 登录拦截器
             RouteInterceptorManager.registerInterceptor(LoginRouteInterceptor())
         }

+ 32 - 3
plugins/keyboard_android/android/src/main/kotlin/com/atmob/keyboard_android/component/ComponentMediator.kt

@@ -11,6 +11,27 @@ object ComponentMediator {
      */
     private val mComponentMap: MutableMap<String, IUIComponent> = mutableMapOf()
 
+    private var mOnComponentUpdateListener: OnComponentUpdateListener? = null
+
+    interface OnComponentUpdateListener {
+        /**
+         * 组件注册时回调
+         */
+        fun onComponentRegister(componentName: String, component: IUIComponent)
+
+        /**
+         * 组件解注册时回调
+         */
+        fun onComponentUnRegister(componentName: String, component: IUIComponent)
+    }
+
+    /**
+     * 设置监听器
+     */
+    fun setOnComponentUpdateListener(listener: OnComponentUpdateListener) {
+        this.mOnComponentUpdateListener = listener
+    }
+
     /**
      * 注册组件
      *
@@ -21,7 +42,7 @@ object ComponentMediator {
         componentInterfaceClazz: Class<T>,
         component: IUIComponent
     ) {
-        mComponentMap[componentInterfaceClazz.name] = component
+        registerComponent(componentInterfaceClazz.name, component)
     }
 
     /**
@@ -34,7 +55,12 @@ object ComponentMediator {
         componentName: String,
         component: IUIComponent
     ) {
+        // 如果已经注册过了,不能重复注册
+        if (mComponentMap.contains(componentName)) {
+            throw RuntimeException("组件不能重复注册,请保证组件名称唯一性")
+        }
         mComponentMap[componentName] = component
+        mOnComponentUpdateListener?.onComponentRegister(componentName, component)
     }
 
     /**
@@ -43,7 +69,7 @@ object ComponentMediator {
      * @param componentInterfaceClazz 组件的接口Class类
      */
     fun <T : IUIComponent> unRegisterComponent(componentInterfaceClazz: Class<T>) {
-        mComponentMap.remove(componentInterfaceClazz.name)
+        unRegisterComponent(componentInterfaceClazz.name)
     }
 
     /**
@@ -52,7 +78,10 @@ object ComponentMediator {
      * @param componentName 组件名称
      */
     fun unRegisterComponent(componentName: String) {
-        mComponentMap.remove(componentName)
+        val component = mComponentMap.remove(componentName)
+        if (component != null) {
+            mOnComponentUpdateListener?.onComponentUnRegister(componentName, component)
+        }
     }
 
     /**

+ 24 - 0
plugins/keyboard_android/android/src/main/kotlin/com/atmob/keyboard_android/component/listener/ComponentUpdateLoggingListener.kt

@@ -0,0 +1,24 @@
+package com.atmob.keyboard_android.component.listener
+
+import com.atmob.keyboard_android.component.ComponentMediator.OnComponentUpdateListener
+import com.atmob.keyboard_android.component.base.IUIComponent
+import com.atmob.keyboard_android.util.LogUtil
+
+/**
+ * 组件注册和解注册的监听器
+ */
+class ComponentUpdateLoggingListener : OnComponentUpdateListener {
+    override fun onComponentRegister(
+        componentName: String,
+        component: IUIComponent
+    ) {
+        LogUtil.d("组件注册 => $componentName,${component.javaClass.name}")
+    }
+
+    override fun onComponentUnRegister(
+        componentName: String,
+        component: IUIComponent
+    ) {
+        LogUtil.d("组件注销 => $componentName,${component.javaClass.name}")
+    }
+}