Jelajahi Sumber

[feat]键盘插件,Ai生成列表,增加Loading状态条目

hezihao 7 bulan lalu
induk
melakukan
a44473125e

+ 13 - 2
plugins/keyboard_android/android/src/main/kotlin/com/atmob/keyboard_android/component/child/impl/AiChatComponent.kt

@@ -11,10 +11,12 @@ import com.atmob.keyboard_android.component.base.BaseUIComponent
 import com.atmob.keyboard_android.component.base.animator.impl.TransitionAnimator
 import com.atmob.keyboard_android.component.child.IAiChatComponent
 import com.atmob.keyboard_android.component.item.AiChatViewBinder
+import com.atmob.keyboard_android.component.item.AiGenerateLoadingViewBinder
 import com.atmob.keyboard_android.component.item.EmptyPlaceholderViewBinder
 import com.atmob.keyboard_android.constant.Constants
 import com.atmob.keyboard_android.ext.click
 import com.atmob.keyboard_android.model.AiChatModel
+import com.atmob.keyboard_android.model.AiGenerateLoadingModel
 import com.atmob.keyboard_android.model.EmptyPlaceholderModel
 import com.atmob.keyboard_android.util.InputMethodUtil
 import com.atmob.keyboard_android.util.KeyboardHolder
@@ -63,6 +65,8 @@ class AiChatComponent @JvmOverloads constructor(
             mListAdapter = MultiTypeAdapter(mListItems).apply {
                 // 空占位条目
                 register(EmptyPlaceholderModel::class.java, EmptyPlaceholderViewBinder())
+                // 加载中条目
+                register(AiGenerateLoadingModel::class.java, AiGenerateLoadingViewBinder())
                 // 生成内容条目
                 register(AiChatModel::class.java, AiChatViewBinder { item ->
                     // 先全部取消选中
@@ -139,11 +143,18 @@ class AiChatComponent @JvmOverloads constructor(
             // 空占位条目
             add(EmptyPlaceholderModel(ConvertUtils.dp2px(40f)))
             // 添加生成内容条目
-            addAll(list.map {
+            val aiChatItemList = list.map {
                 AiChatModel(
                     text = it
                 )
-            }.toList())
+            }.toList()
+            // 添加Loading条目
+            if (aiChatItemList.isEmpty()) {
+                add(AiGenerateLoadingModel())
+            } else {
+                // 生成条目
+                addAll(aiChatItemList)
+            }
         }
         mListAdapter.notifyDataSetChanged()
     }

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

@@ -25,7 +25,6 @@ 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.bridge.FlutterBridgeManager
-import com.atmob.keyboard_android.util.loading.WaitLoadingController
 import com.atmob.keyboard_android.util.recyclerview.GridDivider
 import com.atmob.keyboard_android.widget.LongTouchContainer
 import com.blankj.utilcode.util.ConvertUtils
@@ -57,8 +56,6 @@ class AiKeyboardCommonPanelComponent @JvmOverloads constructor(
     private lateinit var mKeyListItems: Items
     private lateinit var mKeyListAdapter: MultiTypeAdapter
 
-    private lateinit var mWaitLoadingController: WaitLoadingController
-
     /**
      * 当前点击的条目,用于点击重新生成时,重新生成内容
      */
@@ -81,11 +78,6 @@ class AiKeyboardCommonPanelComponent @JvmOverloads constructor(
     }
 
     override fun bindView(view: View) {
-        mWaitLoadingController =
-            WaitLoadingController(context, KeyboardHolder.getKeyboardService()?.getKeyboardWindow())
-        // 禁用Loading
-        mWaitLoadingController.setEnable(false)
-
         setupKeyList()
         setupActionBtn()
         setupViewModel()
@@ -339,12 +331,9 @@ class AiKeyboardCommonPanelComponent @JvmOverloads constructor(
      * @param characterId 人设Id
      */
     private fun doChatSuperReply(characterId: String) {
-        mWaitLoadingController.showWait()
         val viewModel = KeyboardHolder.getKeyboardService()?.getKeyboardViewModel()
         viewModel?.chatSuperReply(characterId, onSuccess = {
-            mWaitLoadingController.hideWait()
         }, onFail = {
-            mWaitLoadingController.hideWait()
             ToastUtils.showShort(it)
         })
     }
@@ -353,12 +342,9 @@ class AiKeyboardCommonPanelComponent @JvmOverloads constructor(
      * 生成<教你说>的内容
      */
     private fun doChatSuperSpeak(characterId: String) {
-        mWaitLoadingController.showWait()
         val viewModel = KeyboardHolder.getKeyboardService()?.getKeyboardViewModel()
         viewModel?.chatSuperSpeak(characterId, onSuccess = {
-            mWaitLoadingController.hideWait()
         }, onFail = {
-            mWaitLoadingController.hideWait()
             ToastUtils.showShort(it)
         })
     }
@@ -367,12 +353,9 @@ class AiKeyboardCommonPanelComponent @JvmOverloads constructor(
      * 生成<开场白>的内容
      */
     private fun doChatPrologue(name: String) {
-        mWaitLoadingController.showWait()
         val viewModel = KeyboardHolder.getKeyboardService()?.getKeyboardViewModel()
         viewModel?.chatPrologue(name, onSuccess = {
-            mWaitLoadingController.hideWait()
         }, onFail = {
-            mWaitLoadingController.hideWait()
             ToastUtils.showShort(it)
         })
     }

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

@@ -22,7 +22,6 @@ 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.loading.WaitLoadingController
 import com.atmob.keyboard_android.util.recyclerview.GridDivider
 import com.atmob.keyboard_android.widget.LongTouchContainer
 import com.atmob.keyboard_android.widget.indicator.TabPagerTitleView
@@ -67,8 +66,6 @@ class AiKeyboardProloguePanelComponent @JvmOverloads constructor(
      */
     private lateinit var mTabList: MutableList<String>
 
-    private lateinit var mWaitLoadingController: WaitLoadingController
-
     /**
      * 当前点击的条目,用于点击重新生成时,重新生成内容
      */
@@ -91,10 +88,6 @@ class AiKeyboardProloguePanelComponent @JvmOverloads constructor(
     }
 
     override fun bindView(view: View) {
-        mWaitLoadingController =
-            WaitLoadingController(context, KeyboardHolder.getKeyboardService()?.getKeyboardWindow())
-        mWaitLoadingController.setEnable(true)
-
         setupTabBar()
         setupKeyList()
         setupActionBtn()
@@ -416,12 +409,9 @@ class AiKeyboardProloguePanelComponent @JvmOverloads constructor(
      * @param characterId 人设Id
      */
     private fun doChatSuperReply(characterId: String) {
-        mWaitLoadingController.showWait()
         val viewModel = KeyboardHolder.getKeyboardService()?.getKeyboardViewModel()
         viewModel?.chatSuperReply(characterId, onSuccess = {
-            mWaitLoadingController.hideWait()
         }, onFail = {
-            mWaitLoadingController.hideWait()
             ToastUtils.showShort(it)
         })
     }
@@ -430,12 +420,9 @@ class AiKeyboardProloguePanelComponent @JvmOverloads constructor(
      * 生成<教你说>的内容
      */
     private fun doChatSuperSpeak(characterId: String) {
-        mWaitLoadingController.showWait()
         val viewModel = KeyboardHolder.getKeyboardService()?.getKeyboardViewModel()
         viewModel?.chatSuperSpeak(characterId, onSuccess = {
-            mWaitLoadingController.hideWait()
         }, onFail = {
-            mWaitLoadingController.hideWait()
             ToastUtils.showShort(it)
         })
     }
@@ -444,12 +431,9 @@ class AiKeyboardProloguePanelComponent @JvmOverloads constructor(
      * 生成<开场白>的内容
      */
     private fun doChatPrologue(name: String) {
-        mWaitLoadingController.showWait()
         val viewModel = KeyboardHolder.getKeyboardService()?.getKeyboardViewModel()
         viewModel?.chatPrologue(name, onSuccess = {
-            mWaitLoadingController.hideWait()
         }, onFail = {
-            mWaitLoadingController.hideWait()
             ToastUtils.showShort(it)
         })
     }

+ 36 - 0
plugins/keyboard_android/android/src/main/kotlin/com/atmob/keyboard_android/component/item/AiGenerateLoadingViewBinder.kt

@@ -0,0 +1,36 @@
+package com.atmob.keyboard_android.component.item
+
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import androidx.recyclerview.widget.RecyclerView
+import com.atmob.keyboard_android.R
+import com.atmob.keyboard_android.model.AiGenerateLoadingModel
+import me.drakeet.multitype.ItemViewBinder
+
+/**
+ * Ai生成内容的Loading中的列表项
+ */
+class AiGenerateLoadingViewBinder :
+    ItemViewBinder<AiGenerateLoadingModel, AiGenerateLoadingViewBinder.InnerViewBinder>() {
+    override fun onCreateViewHolder(
+        inflater: LayoutInflater,
+        parent: ViewGroup
+    ): InnerViewBinder {
+        return InnerViewBinder(
+            inflater.inflate(
+                R.layout.item_ai_generate_loading,
+                parent,
+                false
+            )
+        )
+    }
+
+    override fun onBindViewHolder(
+        holder: InnerViewBinder,
+        item: AiGenerateLoadingModel
+    ) {
+    }
+
+    inner class InnerViewBinder(itemView: View) : RecyclerView.ViewHolder(itemView)
+}

+ 8 - 0
plugins/keyboard_android/android/src/main/kotlin/com/atmob/keyboard_android/model/AiGenerateLoadingModel.kt

@@ -0,0 +1,8 @@
+package com.atmob.keyboard_android.model
+
+import java.io.Serializable
+
+/**
+ * Ai生成内容,Loading中的模型
+ */
+class AiGenerateLoadingModel : Serializable

+ 11 - 0
plugins/keyboard_android/android/src/main/res/drawable/bg_ai_generate_loading.xml

@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android"
+    android:shape="rectangle">
+
+    <solid android:color="@color/text_color_white" />
+    <corners
+        android:bottomLeftRadius="0dp"
+        android:bottomRightRadius="20dp"
+        android:topLeftRadius="14dp"
+        android:topRightRadius="20dp" />
+</shape>

+ 29 - 0
plugins/keyboard_android/android/src/main/res/layout/item_ai_generate_loading.xml

@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:orientation="vertical">
+
+    <LinearLayout
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:background="@drawable/bg_ai_generate_loading"
+        android:gravity="center_vertical"
+        android:paddingTop="8dp"
+        android:paddingBottom="8dp">
+
+        <ImageView
+            android:layout_width="14dp"
+            android:layout_height="14dp"
+            android:layout_marginStart="10dp"
+            android:layout_marginEnd="8dp"
+            android:src="@mipmap/ic_loading" />
+
+        <TextView
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:text="@string/loading_tip"
+            android:textColor="@color/text_color_placeholder2"
+            android:textSize="12sp" />
+    </LinearLayout>
+</LinearLayout>

TEMPAT SAMPAH
plugins/keyboard_android/android/src/main/res/mipmap-xxxhdpi/ic_loading.webp


+ 1 - 0
plugins/keyboard_android/android/src/main/res/values/colors.xml

@@ -6,6 +6,7 @@
     <color name="text_color_secondary">#99000000</color>
     <!-- 占位符文字色彩 -->
     <color name="text_color_placeholder">#66000000</color>
+    <color name="text_color_placeholder2">#66000000</color>
     <!-- 文字disabled态 -->
     <color name="text_color_disabled">#42000000</color>
     <!-- 文字反色色彩 -->

+ 1 - 1
plugins/keyboard_android/android/src/main/res/values/string.xml

@@ -29,6 +29,6 @@
     <string name="how_to_confess">如何告白</string>
     <string name="promotion_relationship">关系升温</string>
     <string name="no_clipboard_data_tip">还没有复制内容喔</string>
-    <string name="loading_tip">加载中</string>
+    <string name="loading_tip">加载中...</string>
     <string name="add_character">添加人设</string>
 </resources>