|
|
@@ -1,18 +1,28 @@
|
|
|
package com.atmob.keyboard_android.component.child.impl
|
|
|
|
|
|
+import android.annotation.SuppressLint
|
|
|
import android.content.Context
|
|
|
import android.util.AttributeSet
|
|
|
import android.view.View
|
|
|
+import androidx.recyclerview.widget.GridLayoutManager
|
|
|
+import androidx.recyclerview.widget.RecyclerView
|
|
|
import com.atmob.keyboard_android.R
|
|
|
-import com.atmob.keyboard_android.component.adapter.AiKeyboardPagerAdapter
|
|
|
+import com.atmob.keyboard_android.component.ComponentMediator
|
|
|
import com.atmob.keyboard_android.component.base.BaseUIComponent
|
|
|
+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.enums.Mode
|
|
|
+import com.atmob.keyboard_android.ext.click
|
|
|
import com.atmob.keyboard_android.ext.setGone
|
|
|
-import com.atmob.keyboard_android.widget.NoSwipeViewPager
|
|
|
+import com.atmob.keyboard_android.ext.setVisible
|
|
|
+import com.atmob.keyboard_android.model.AiKeyboardKeyModel
|
|
|
+import com.atmob.keyboard_android.util.recyclerview.GridDivider
|
|
|
import com.atmob.keyboard_android.widget.indicator.TabPagerTitleView
|
|
|
import com.blankj.utilcode.util.ConvertUtils
|
|
|
+import me.drakeet.multitype.Items
|
|
|
+import me.drakeet.multitype.MultiTypeAdapter
|
|
|
import net.lucode.hackware.magicindicator.MagicIndicator
|
|
|
-import net.lucode.hackware.magicindicator.ViewPagerHelper
|
|
|
import net.lucode.hackware.magicindicator.buildins.UIUtil
|
|
|
import net.lucode.hackware.magicindicator.buildins.commonnavigator.CommonNavigator
|
|
|
import net.lucode.hackware.magicindicator.buildins.commonnavigator.abs.CommonNavigatorAdapter
|
|
|
@@ -28,13 +38,25 @@ class AiKeyboardComponent @JvmOverloads constructor(
|
|
|
) : BaseUIComponent<IAiKeyboardComponent>(context, attrs, defStyleAttr), IAiKeyboardComponent {
|
|
|
private lateinit var vTabBarLayout: View
|
|
|
private lateinit var vMagicIndicator: MagicIndicator
|
|
|
- private lateinit var vViewPager: NoSwipeViewPager
|
|
|
+ private lateinit var vPasteBarLayout: View
|
|
|
+ private lateinit var vKeyList: RecyclerView
|
|
|
+ private lateinit var vDeleteBtn: View
|
|
|
+ private lateinit var vClearBtn: View
|
|
|
+ private lateinit var vSendBtn: View
|
|
|
+
|
|
|
+ private lateinit var mKeyListItems: Items
|
|
|
+ private lateinit var mKeyListAdapter: MultiTypeAdapter
|
|
|
|
|
|
/**
|
|
|
* Tab列表
|
|
|
*/
|
|
|
private lateinit var mTabList: List<String>
|
|
|
|
|
|
+ /**
|
|
|
+ * 当前选中的Tab的索引
|
|
|
+ */
|
|
|
+ private var mCurrentTabIndex = 0
|
|
|
+
|
|
|
override fun onInflateViewId(): Int {
|
|
|
return R.layout.component_ai_keyboard
|
|
|
}
|
|
|
@@ -42,12 +64,18 @@ class AiKeyboardComponent @JvmOverloads constructor(
|
|
|
override fun findView(view: View) {
|
|
|
vTabBarLayout = view.findViewById(R.id.tar_bar_layout)
|
|
|
vMagicIndicator = view.findViewById(R.id.magic_indicator)
|
|
|
- vViewPager = view.findViewById(R.id.view_pager)
|
|
|
+ vPasteBarLayout = view.findViewById(R.id.paste_bar_layout)
|
|
|
+ vKeyList = view.findViewById(R.id.key_list)
|
|
|
+ vDeleteBtn = view.findViewById(R.id.delete_btn)
|
|
|
+ vClearBtn = view.findViewById(R.id.clear_btn)
|
|
|
+ vSendBtn = view.findViewById(R.id.send_btn)
|
|
|
}
|
|
|
|
|
|
override fun bindView(view: View) {
|
|
|
setupTabBar()
|
|
|
- setupViewPager()
|
|
|
+ setupKeyList()
|
|
|
+ setupActionBtn()
|
|
|
+ setData()
|
|
|
}
|
|
|
|
|
|
override fun getComponentInterfaceClazz(): Class<IAiKeyboardComponent> {
|
|
|
@@ -58,9 +86,6 @@ class AiKeyboardComponent @JvmOverloads constructor(
|
|
|
* 配置Tab栏
|
|
|
*/
|
|
|
private fun setupTabBar() {
|
|
|
- // TODO: 隐藏Tab栏,用于测试
|
|
|
- vTabBarLayout.setGone()
|
|
|
-
|
|
|
mTabList = listOf(
|
|
|
"发起聊天",
|
|
|
"邀约话术",
|
|
|
@@ -71,6 +96,7 @@ class AiKeyboardComponent @JvmOverloads constructor(
|
|
|
// 配置指示器
|
|
|
vMagicIndicator.setNavigator(CommonNavigator(context).apply {
|
|
|
scrollPivotX = 0.35f
|
|
|
+ // 设置适配器
|
|
|
setAdapter(object : CommonNavigatorAdapter() {
|
|
|
override fun getCount(): Int {
|
|
|
return mTabList.size
|
|
|
@@ -104,7 +130,15 @@ class AiKeyboardComponent @JvmOverloads constructor(
|
|
|
// 点击Tab,切换页面
|
|
|
titleView.setOnClickListener(object : OnClickListener {
|
|
|
override fun onClick(v: View?) {
|
|
|
- vViewPager.setCurrentItem(index, false)
|
|
|
+ if (mCurrentTabIndex == index) {
|
|
|
+ return
|
|
|
+ }
|
|
|
+ // 根据Tab类型,刷新内容
|
|
|
+ val tab = mTabList[index]
|
|
|
+ refreshContent(tab)
|
|
|
+ // 切换Tab
|
|
|
+ mCurrentTabIndex = index
|
|
|
+ vMagicIndicator.onPageSelected(index)
|
|
|
}
|
|
|
})
|
|
|
return titleView
|
|
|
@@ -128,13 +162,96 @@ class AiKeyboardComponent @JvmOverloads constructor(
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * 配置ViewPager
|
|
|
+ * 设置列表
|
|
|
*/
|
|
|
- private fun setupViewPager() {
|
|
|
- // 配置ViewPager
|
|
|
- vViewPager.setSwipeEnabled(false)
|
|
|
- vViewPager.adapter = AiKeyboardPagerAdapter(mTabList)
|
|
|
- // 绑定ViewPager和MagicIndicator
|
|
|
- ViewPagerHelper.bind(vMagicIndicator, vViewPager)
|
|
|
+ private fun setupKeyList() {
|
|
|
+ // 列数
|
|
|
+ val spanCount = 3
|
|
|
+ vKeyList.apply {
|
|
|
+ mKeyListItems = Items()
|
|
|
+ mKeyListAdapter = MultiTypeAdapter(mKeyListItems).apply {
|
|
|
+ register(AiKeyboardKeyModel::class.java, AiKeyboardKeyViewBinder {
|
|
|
+ // 点击键盘按键,打开AI生成内容面板
|
|
|
+ val aiChatComponent =
|
|
|
+ ComponentMediator.findComponent(IAiChatComponent::class.java)
|
|
|
+ aiChatComponent?.show()
|
|
|
+ // 隐藏键盘列表
|
|
|
+ vKeyList.setGone()
|
|
|
+ })
|
|
|
+ }
|
|
|
+ layoutManager = GridLayoutManager(context, spanCount)
|
|
|
+ adapter = mKeyListAdapter
|
|
|
+ // 分割线
|
|
|
+ addItemDecoration(GridDivider(spanCount, ConvertUtils.dp2px(6f)))
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 设置操作按钮
|
|
|
+ */
|
|
|
+ private fun setupActionBtn() {
|
|
|
+ vDeleteBtn.click {
|
|
|
+ }
|
|
|
+ vClearBtn.click {
|
|
|
+ }
|
|
|
+ vSendBtn.click {
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 填充数据
|
|
|
+ */
|
|
|
+ @SuppressLint("NotifyDataSetChanged")
|
|
|
+ private fun setData() {
|
|
|
+ val newList = mutableListOf<AiKeyboardKeyModel>().apply {
|
|
|
+ add(AiKeyboardKeyModel("暧昧推拉"))
|
|
|
+ add(AiKeyboardKeyModel("欲拒还迎"))
|
|
|
+ add(AiKeyboardKeyModel("哄女友"))
|
|
|
+ add(AiKeyboardKeyModel("暧昧推拉"))
|
|
|
+ add(AiKeyboardKeyModel("甜蜜暴击"))
|
|
|
+ add(AiKeyboardKeyModel("暧昧推拉"))
|
|
|
+ add(AiKeyboardKeyModel("彩虹屁专家"))
|
|
|
+ add(AiKeyboardKeyModel("恋爱脑"))
|
|
|
+ add(AiKeyboardKeyModel("调皮回复"))
|
|
|
+ }
|
|
|
+ mKeyListItems.clear()
|
|
|
+ // 随机打乱顺序
|
|
|
+ mKeyListItems.addAll(newList.shuffled())
|
|
|
+ mKeyListAdapter.notifyDataSetChanged()
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 刷新内容
|
|
|
+ *
|
|
|
+ * @param tab 选择了哪个Tab
|
|
|
+ */
|
|
|
+ private fun refreshContent(tab: String) {
|
|
|
+ setData()
|
|
|
+ }
|
|
|
+
|
|
|
+ override fun updateKeyboardMode(mode: Mode) {
|
|
|
+ // 根据不同的模式,切换不同的键盘
|
|
|
+ if (Mode.OPEN_REMARKS == mode) {
|
|
|
+ // 开场白,显示Tab布局,隐藏粘贴栏
|
|
|
+ vTabBarLayout.setVisible()
|
|
|
+ vPasteBarLayout.setGone()
|
|
|
+ } else {
|
|
|
+ // 其他模式,隐藏Tab布局,显示粘贴栏
|
|
|
+ vTabBarLayout.setGone()
|
|
|
+ vPasteBarLayout.setVisible()
|
|
|
+ }
|
|
|
+ // 隐藏AI生成内容面板
|
|
|
+ val aiChatComponent =
|
|
|
+ ComponentMediator.findComponent(IAiChatComponent::class.java)
|
|
|
+ aiChatComponent?.hide()
|
|
|
+ // 显示键盘列表
|
|
|
+ vKeyList.setVisible()
|
|
|
+ }
|
|
|
+
|
|
|
+ override fun reset() {
|
|
|
+ vKeyList.setVisible()
|
|
|
+ val aiChatComponent =
|
|
|
+ ComponentMediator.findComponent(IAiChatComponent::class.java)
|
|
|
+ aiChatComponent?.hide()
|
|
|
}
|
|
|
}
|