Procházet zdrojové kódy

[feat]键盘插件,实现设置页切换

hezihao před 8 měsíci
rodič
revize
24ab1d5f71

+ 18 - 0
plugins/keyboard_android/android/src/main/kotlin/com/atmob/keyboard_android/component/child/impl/KeyBoardContainerComponent.kt

@@ -6,6 +6,9 @@ import android.view.View
 import com.atmob.keyboard_android.R
 import com.atmob.keyboard_android.component.base.BaseUIComponent
 import com.atmob.keyboard_android.component.child.IKeyBoardContainerComponent
+import com.atmob.keyboard_android.ext.setGone
+import com.atmob.keyboard_android.ext.setVisible
+import com.atmob.keyboard_android.util.KeyboardHolder
 
 /**
  * 键盘容器组件,包含多个键盘,例如拼音键盘和AI键盘,顶部是工具栏组件
@@ -14,14 +17,29 @@ class KeyBoardContainerComponent @JvmOverloads constructor(
     context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0
 ) : BaseUIComponent<IKeyBoardContainerComponent>(context, attrs, defStyleAttr),
     IKeyBoardContainerComponent {
+    private lateinit var vKeyboardContent: View
+
     override fun onInflateViewId(): Int {
         return R.layout.component_key_board_container
     }
 
     override fun findView(view: View) {
+        vKeyboardContent = view.findViewById(R.id.keyboard_content)
     }
 
     override fun bindView(view: View) {
+        // 监听设置页是否打开,打开时,隐藏键盘内容
+        KeyboardHolder.getKeyboardService()?.run {
+            getKeyboardViewModel().let {
+                it.settingPageShowing.observe(getLifecycleOwner()) { isShowSettingPage ->
+                    if (isShowSettingPage) {
+                        vKeyboardContent.setGone()
+                    } else {
+                        vKeyboardContent.setVisible()
+                    }
+                }
+            }
+        }
     }
 
     override fun getComponentInterfaceClazz(): Class<IKeyBoardContainerComponent> {

+ 3 - 7
plugins/keyboard_android/android/src/main/kotlin/com/atmob/keyboard_android/component/child/impl/PasteBarComponent.kt

@@ -35,19 +35,15 @@ class PasteBarComponent @JvmOverloads constructor(
     override fun bindView(view: View) {
         vClear.click {
             // 清空用户粘贴的内容
-            val keyboardService = KeyboardHolder.getKeyboardService()
-            keyboardService?.getKeyboardViewModel()?.let {
-                it.updateUserClipboardData("")
-            }
+            KeyboardHolder.getKeyboardService()?.getKeyboardViewModel()?.updateUserClipboardData("")
         }
         setData()
     }
 
     private fun setData() {
         // 监听用户的剪切板复制内容
-        val keyboardService = KeyboardHolder.getKeyboardService()
-        keyboardService?.getKeyboardViewModel()?.let {
-            it.userClipboardData.observeForever { userClipboardData ->
+        KeyboardHolder.getKeyboardService()?.run {
+            getKeyboardViewModel().userClipboardData.observe(getLifecycleOwner()) { userClipboardData ->
                 render(userClipboardData)
             }
         }

+ 17 - 3
plugins/keyboard_android/android/src/main/kotlin/com/atmob/keyboard_android/component/child/impl/SettingComponent.kt

@@ -6,6 +6,9 @@ import android.view.View
 import com.atmob.keyboard_android.R
 import com.atmob.keyboard_android.component.base.BaseUIComponent
 import com.atmob.keyboard_android.component.child.ISettingComponent
+import com.atmob.keyboard_android.ext.click
+import com.atmob.keyboard_android.util.KeyboardHolder
+import com.blankj.utilcode.util.ToastUtils
 
 /**
  * 设置页
@@ -13,6 +16,7 @@ import com.atmob.keyboard_android.component.child.ISettingComponent
 class SettingComponent @JvmOverloads constructor(
     context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0
 ) : BaseUIComponent<ISettingComponent>(context, attrs, defStyleAttr), ISettingComponent {
+    private lateinit var vBackBtn: View
     private lateinit var vSettingCustomPersonLayout: View
     private lateinit var vSettingMarketLayout: View
     private lateinit var vSettingUnlockVipLayout: View
@@ -22,17 +26,27 @@ class SettingComponent @JvmOverloads constructor(
     }
 
     override fun findView(view: View) {
+        vBackBtn = view.findViewById(R.id.back_btn)
         vSettingCustomPersonLayout = view.findViewById(R.id.setting_custom_person_layout)
         vSettingMarketLayout = view.findViewById(R.id.setting_market_layout)
         vSettingUnlockVipLayout = view.findViewById(R.id.setting_unlock_vip_layout)
     }
 
     override fun bindView(view: View) {
-        vSettingCustomPersonLayout.setOnClickListener {
+        vBackBtn.click {
+            hide(onStart = {
+                KeyboardHolder.getKeyboardService()?.getKeyboardViewModel()
+                    ?.updateSettingPageShowing(false)
+            })
         }
-        vSettingMarketLayout.setOnClickListener {
+        vSettingCustomPersonLayout.click {
+            ToastUtils.showShort("跳转 => 定制人设")
         }
-        vSettingUnlockVipLayout.setOnClickListener {
+        vSettingMarketLayout.click {
+            ToastUtils.showShort("跳转 => 人设市场")
+        }
+        vSettingUnlockVipLayout.click {
+            ToastUtils.showShort("跳转 => 解锁会员")
         }
     }
 

+ 11 - 3
plugins/keyboard_android/android/src/main/kotlin/com/atmob/keyboard_android/component/child/impl/ToolBarComponent.kt

@@ -6,11 +6,12 @@ import android.view.View
 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.child.ISettingComponent
 import com.atmob.keyboard_android.component.child.IToolBarComponent
 import com.atmob.keyboard_android.component.page.ILoginPageComponent
-import com.atmob.keyboard_android.component.page.IVipPageComponent
 import com.atmob.keyboard_android.ext.click
 import com.atmob.keyboard_android.keyboard.InputMethodPickerActivity
+import com.atmob.keyboard_android.util.KeyboardHolder
 
 /**
  * 工具类组件
@@ -34,9 +35,16 @@ class ToolBarComponent @JvmOverloads constructor(
 
     override fun bindView(view: View) {
         vIcon.click {
+            // 切换到设置页
+            val settingComponent = ComponentMediator.findComponent(ISettingComponent::class.java)
+            settingComponent?.show(onStart = {
+                KeyboardHolder.getKeyboardService()?.getKeyboardViewModel()
+                    ?.updateSettingPageShowing(true)
+            })
+
             // TODO: hezhiao,测试显示vip页
-            val vipPageComponent = ComponentMediator.findComponent(IVipPageComponent::class.java)
-            vipPageComponent?.show()
+//            val vipPageComponent = ComponentMediator.findComponent(IVipPageComponent::class.java)
+//            vipPageComponent?.show()
         }
         vKeyboardSwitchBtn.click {
             // 打开系统输入法选择器

+ 2 - 1
plugins/keyboard_android/android/src/main/kotlin/com/atmob/keyboard_android/floating/FloatingButtonService.kt

@@ -16,6 +16,7 @@ import android.view.View
 import android.view.WindowManager
 import android.widget.ImageView
 import com.atmob.keyboard_android.R
+import com.atmob.keyboard_android.ext.click
 import com.atmob.keyboard_android.keyboard.InputMethodPickerActivity
 import kotlin.math.abs
 
@@ -136,7 +137,7 @@ class FloatingButtonService : Service() {
         })
 
         // 点击按钮,弹出输入法选择框
-        floatingButton.setOnClickListener {
+        floatingButton.click {
             InputMethodPickerActivity.start(this)
         }
 

+ 5 - 0
plugins/keyboard_android/android/src/main/kotlin/com/atmob/keyboard_android/keyboard/CustomKeyboardService.kt

@@ -8,6 +8,7 @@ import android.widget.Button
 import android.widget.EditText
 import android.widget.GridLayout
 import android.widget.Toast
+import androidx.lifecycle.LifecycleOwner
 import com.atmob.keyboard_android.R
 import com.atmob.keyboard_android.keyboard.ext.InputMethodLifecycleService
 import com.atmob.keyboard_android.mvvm.ViewModelManager
@@ -222,4 +223,8 @@ class CustomKeyboardService : InputMethodLifecycleService(), ICustomKeyboardServ
     override fun getKeyboardViewModel(): KeyboardViewModel {
         return mKeyboardViewModel
     }
+
+    override fun getLifecycleOwner(): LifecycleOwner {
+        return this
+    }
 }

+ 6 - 0
plugins/keyboard_android/android/src/main/kotlin/com/atmob/keyboard_android/keyboard/ICustomKeyboardService.kt

@@ -1,6 +1,7 @@
 package com.atmob.keyboard_android.keyboard
 
 import android.view.Window
+import androidx.lifecycle.LifecycleOwner
 import com.atmob.keyboard_android.mvvm.viewmodel.KeyboardViewModel
 
 /**
@@ -16,4 +17,9 @@ interface ICustomKeyboardService {
      * 获取键盘ViewModel
      */
     fun getKeyboardViewModel(): KeyboardViewModel
+
+    /**
+     * 获取LifecycleOwner
+     */
+    fun getLifecycleOwner(): LifecycleOwner
 }

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

@@ -11,14 +11,28 @@ class KeyboardViewModel : ViewModel() {
     /**
      * 用户的剪切板数据
      */
-    private val _userClipboardData = MutableLiveData<String>("")
+    private val _userClipboardData = MutableLiveData("")
 
     val userClipboardData: LiveData<String> = _userClipboardData
 
     /**
+     * 设置页是否展示
+     */
+    private val _settingPageShowing = MutableLiveData(false)
+
+    val settingPageShowing = _settingPageShowing
+
+    /**
      * 更新用户的剪切板数据
      */
     fun updateUserClipboardData(newText: String) {
         _userClipboardData.value = newText
     }
+
+    /**
+     * 更新设置页是否显示
+     */
+    fun updateSettingPageShowing(isShowing: Boolean) {
+        _settingPageShowing.value = isShowing
+    }
 }

+ 2 - 1
plugins/keyboard_android/android/src/main/kotlin/com/atmob/keyboard_android/ui/popup/ModeSwitchPopupWindow.kt

@@ -11,6 +11,7 @@ import androidx.recyclerview.widget.LinearLayoutManager
 import androidx.recyclerview.widget.RecyclerView
 import com.atmob.keyboard_android.R
 import com.atmob.keyboard_android.enums.Mode
+import com.atmob.keyboard_android.ext.click
 import com.atmob.keyboard_android.model.ModeItem
 import com.atmob.keyboard_android.ui.popup.item.ModeListItemViewBinder
 import com.blankj.utilcode.util.ConvertUtils
@@ -53,7 +54,7 @@ class ModeSwitchPopupWindow() {
             val currentSelectMode: TextView = contentView.findViewById(R.id.current_select_mode)
             val list: RecyclerView = contentView.findViewById(R.id.list)
 
-            currentSelectModeLayout.setOnClickListener {
+            currentSelectModeLayout.click {
                 dismiss()
             }
 

+ 2 - 1
plugins/keyboard_android/android/src/main/kotlin/com/atmob/keyboard_android/ui/popup/item/ModeListItemViewBinder.kt

@@ -7,6 +7,7 @@ import android.view.ViewGroup
 import android.widget.TextView
 import androidx.recyclerview.widget.RecyclerView
 import com.atmob.keyboard_android.R
+import com.atmob.keyboard_android.ext.click
 import com.atmob.keyboard_android.model.ModeItem
 import me.drakeet.multitype.ItemViewBinder
 
@@ -45,7 +46,7 @@ class ModeListItemViewBinder(
                 setBackgroundDrawable(null)
             }
         }
-        holder.itemView.setOnClickListener {
+        holder.itemView.click {
             onItemClick.invoke(item)
         }
     }

+ 2 - 0
plugins/keyboard_android/android/src/main/res/layout/component_key_board_container.xml

@@ -11,7 +11,9 @@
         android:layout_height="wrap_content"
         android:layout_marginTop="16dp" />
 
+    <!-- 键盘内容 -->
     <FrameLayout
+        android:id="@+id/keyboard_content"
         android:layout_width="match_parent"
         android:layout_height="0dp"
         android:layout_marginTop="16dp"