From 2e51ad024d0f4f7f0b396bd6e756a087cd51d826 Mon Sep 17 00:00:00 2001 From: renhaoting <370797079@qq.com> Date: Mon, 27 Oct 2025 18:40:30 +0800 Subject: [PATCH] =?UTF-8?q?chat=E8=8F=9C=E5=8D=95=E5=88=9D=E6=AD=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../remax/visualnovel/ui/chat/ChatActivity.kt | 9 +- .../visualnovel/widget/toolbar/BaseToolbar.kt | 172 ++++++++++++++++++ .../main/res/layout/activity_actor_chat2.xml | 71 ++++++++ .../main/res/layout/base_toolbar_layout.xml | 60 ++++++ .../main/res/layout/include_setting_item.xml | 59 ++++++ .../main/res/layout/layout_chat_menu_view.xml | 144 +++++++++++++++ .../res/mipmap-xxhdpi/chat_send_but_bg.webp | Bin 0 -> 17670 bytes .../res/mipmap-xxhdpi/chat_title_setting.webp | Bin 0 -> 1850 bytes .../res/mipmap-xxhdpi/setting_ai_model.webp | Bin 0 -> 1698 bytes .../res/mipmap-xxhdpi/setting_arrow_down.webp | Bin 0 -> 850 bytes .../mipmap-xxhdpi/setting_arrow_right.webp | Bin 0 -> 768 bytes .../res/mipmap-xxhdpi/setting_delete.webp | Bin 0 -> 1856 bytes .../app/src/main/res/values/colors.xml | 4 + .../app/src/main/res/values/strings.xml | 8 + 14 files changed, 525 insertions(+), 2 deletions(-) create mode 100644 VisualNovel/app/src/main/java/com/remax/visualnovel/widget/toolbar/BaseToolbar.kt create mode 100644 VisualNovel/app/src/main/res/layout/activity_actor_chat2.xml create mode 100644 VisualNovel/app/src/main/res/layout/base_toolbar_layout.xml create mode 100644 VisualNovel/app/src/main/res/layout/include_setting_item.xml create mode 100644 VisualNovel/app/src/main/res/layout/layout_chat_menu_view.xml create mode 100644 VisualNovel/app/src/main/res/mipmap-xxhdpi/chat_send_but_bg.webp create mode 100644 VisualNovel/app/src/main/res/mipmap-xxhdpi/chat_title_setting.webp create mode 100644 VisualNovel/app/src/main/res/mipmap-xxhdpi/setting_ai_model.webp create mode 100644 VisualNovel/app/src/main/res/mipmap-xxhdpi/setting_arrow_down.webp create mode 100644 VisualNovel/app/src/main/res/mipmap-xxhdpi/setting_arrow_right.webp create mode 100644 VisualNovel/app/src/main/res/mipmap-xxhdpi/setting_delete.webp diff --git a/VisualNovel/app/src/main/java/com/remax/visualnovel/ui/chat/ChatActivity.kt b/VisualNovel/app/src/main/java/com/remax/visualnovel/ui/chat/ChatActivity.kt index 78a832e..ced159f 100644 --- a/VisualNovel/app/src/main/java/com/remax/visualnovel/ui/chat/ChatActivity.kt +++ b/VisualNovel/app/src/main/java/com/remax/visualnovel/ui/chat/ChatActivity.kt @@ -3,6 +3,7 @@ package com.remax.visualnovel.ui.chat import android.graphics.Point import androidx.activity.viewModels +import androidx.core.view.marginTop import androidx.lifecycle.Observer import androidx.lifecycle.lifecycleScope import com.alibaba.android.arouter.facade.annotation.Route @@ -16,12 +17,14 @@ import com.remax.visualnovel.utils.Routers import com.remax.visualnovel.utils.StatusBarUtils import com.pengxr.modular.eventbus.generated.events.EventDefineOfUserEvents import com.remax.visualnovel.R +import com.remax.visualnovel.databinding.ActivityActorChat2Binding import com.remax.visualnovel.databinding.ActivityActorChatBinding import com.remax.visualnovel.entity.request.ChatSetting import com.remax.visualnovel.event.model.OnLoginEvent import com.remax.visualnovel.extension.countDownCoroutines import com.remax.visualnovel.extension.launchAndLoadingCollect import com.remax.visualnovel.extension.launchWithRequest +import com.remax.visualnovel.extension.setMargin import com.remax.visualnovel.extension.toast import com.remax.visualnovel.manager.nim.NimManager import com.remax.visualnovel.ui.chat.setting.model.ChatModelDialog @@ -35,7 +38,7 @@ import kotlin.getValue @AndroidEntryPoint @Route(path = Routers.CHAT) -class ChatActivity : BaseBindingActivity() { +class ChatActivity : BaseBindingActivity() { private val chatViewModel by viewModels() private val mRecordAssist = RecordAssist() @@ -45,10 +48,12 @@ class ChatActivity : BaseBindingActivity() { override fun initView() { ARouter.getInstance().inject(this) - //setToolbar(R.string.setting) StatusBarUtils.setStatusBarAndNavBarIsLight(this, false) StatusBarUtils.setTransparent(this) + binding.root.setMargin(topMargin = StatusBarUtils.statusBarHeight) + binding.toolbar.addRightIcon(R.mipmap.chat_title_setting) + with(binding) { initInputPanelEvents() diff --git a/VisualNovel/app/src/main/java/com/remax/visualnovel/widget/toolbar/BaseToolbar.kt b/VisualNovel/app/src/main/java/com/remax/visualnovel/widget/toolbar/BaseToolbar.kt new file mode 100644 index 0000000..671aa00 --- /dev/null +++ b/VisualNovel/app/src/main/java/com/remax/visualnovel/widget/toolbar/BaseToolbar.kt @@ -0,0 +1,172 @@ +package com.remax.visualnovel.widget.toolbar + + +import android.content.Context +import android.graphics.drawable.Drawable +import android.util.AttributeSet +import android.view.LayoutInflater +import android.view.View +import android.widget.ImageView +import android.widget.LinearLayout +import android.widget.TextView +import androidx.annotation.DrawableRes +import com.remax.visualnovel.R +import com.remax.visualnovel.widget.uitoken.view.UITokenImageView +import com.remax.visualnovel.widget.uitoken.view.UITokenLinearLayout +import com.remax.visualnovel.widget.uitoken.view.UITokenTextView + +class BaseToolbar @JvmOverloads constructor( + context: Context, + attrs: AttributeSet? = null, + defStyleAttr: Int = 0 +) : LinearLayout(context, attrs, defStyleAttr) { + + private val ivBack: UITokenImageView + private val llCenter: UITokenLinearLayout + private val ivTitle: UITokenTextView + private val llRight: UITokenLinearLayout + + + private var onChildClickListener: ((View) -> Unit)? = null + + init { + LayoutInflater.from(context).inflate(R.layout.base_toolbar_layout, this, true) + ivBack = findViewById(R.id.iv_left) + llCenter = findViewById(R.id.ll_center) + ivTitle = findViewById(R.id.iv_title) + llRight = findViewById(R.id.ll_right) + + + setOnChildClickListener { view -> + when (view.id) { + R.id.iv_left -> { + // 默认返回按钮处理 + performBackAction() + } + // TODO - 其他子view + } + } + } + + /** + * 设置标题文本 + */ + fun setTitle(text: String) { + ivTitle.text = text + } + + /** + * 设置标题文本 + */ + fun setTitle(resId: Int) { + ivTitle.setText(resId) + } + + /** + * 向中心区域添加自定义视图 + */ + fun addCenterView(view: View) { + llCenter.removeAllViews() + llCenter.addView(view) + setupClickListener(view) + } + + /** + * 向右侧区域添加图标 + */ + fun addRightIcon(@DrawableRes resId: Int, tag: String? = null): ImageView { + val imageView = ImageView(context).apply { + setImageResource(resId) + scaleType = ImageView.ScaleType.CENTER_INSIDE + layoutParams = LinearLayout.LayoutParams( + LayoutParams.WRAP_CONTENT, + LayoutParams.WRAP_CONTENT + ).apply { + setMargins(16, 0, 16, 0) + } + this.tag = tag + } + llRight.addView(imageView) + setupClickListener(imageView) + return imageView + } + + /** + * 向右侧区域添加自定义视图 + */ + fun addRightView(view: View, tag: String? = null) { + view.tag = tag + llRight.addView(view) + setupClickListener(view) + } + + /** + * 清除右侧所有视图 + */ + fun clearRightViews() { + llRight.removeAllViews() + } + + /** + * 设置子视图点击监听器 + */ + fun setOnChildClickListener(listener: (View) -> Unit) { + this.onChildClickListener = listener + setupClickListeners() + } + + /** + * 设置返回按钮可见性 + */ + fun setBackButtonVisible(visible: Boolean) { + ivBack.visibility = if (visible) View.VISIBLE else View.GONE + } + + /** + * 设置返回按钮图标 + */ + fun setBackButtonIcon(@DrawableRes resId: Int) { + ivBack.setImageResource(resId) + } + + /** + * 设置返回按钮图标 + */ + fun setBackButtonIcon(drawable: Drawable) { + ivBack.setImageDrawable(drawable) + } + + /** + * 获取右侧指定tag的视图 + */ + fun findRightViewByTag(tag: String): View? { + for (i in 0 until llRight.childCount) { + val child = llRight.getChildAt(i) + if (child.tag == tag) { + return child + } + } + return null + } + + private fun setupClickListeners() { + setupClickListener(ivBack) + setupClickListener(llCenter) + setupClickListener(ivTitle) + + // 为右侧所有子视图设置监听 + for (i in 0 until llRight.childCount) { + setupClickListener(llRight.getChildAt(i)) + } + } + + private fun setupClickListener(view: View) { + view.setOnClickListener { v -> + onChildClickListener?.invoke(v) + } + } + + private fun performBackAction() { + (context as? android.app.Activity)?.onBackPressed() + } +} \ No newline at end of file diff --git a/VisualNovel/app/src/main/res/layout/activity_actor_chat2.xml b/VisualNovel/app/src/main/res/layout/activity_actor_chat2.xml new file mode 100644 index 0000000..ffecc34 --- /dev/null +++ b/VisualNovel/app/src/main/res/layout/activity_actor_chat2.xml @@ -0,0 +1,71 @@ + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/VisualNovel/app/src/main/res/layout/base_toolbar_layout.xml b/VisualNovel/app/src/main/res/layout/base_toolbar_layout.xml new file mode 100644 index 0000000..4d640c9 --- /dev/null +++ b/VisualNovel/app/src/main/res/layout/base_toolbar_layout.xml @@ -0,0 +1,60 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/VisualNovel/app/src/main/res/layout/include_setting_item.xml b/VisualNovel/app/src/main/res/layout/include_setting_item.xml new file mode 100644 index 0000000..9aaedf8 --- /dev/null +++ b/VisualNovel/app/src/main/res/layout/include_setting_item.xml @@ -0,0 +1,59 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/VisualNovel/app/src/main/res/layout/layout_chat_menu_view.xml b/VisualNovel/app/src/main/res/layout/layout_chat_menu_view.xml new file mode 100644 index 0000000..3615eb3 --- /dev/null +++ b/VisualNovel/app/src/main/res/layout/layout_chat_menu_view.xml @@ -0,0 +1,144 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/VisualNovel/app/src/main/res/mipmap-xxhdpi/chat_send_but_bg.webp b/VisualNovel/app/src/main/res/mipmap-xxhdpi/chat_send_but_bg.webp new file mode 100644 index 0000000000000000000000000000000000000000..95481573c70f7eaba5e05d0228a511d09533a89d GIT binary patch literal 17670 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 literal 0 HcmV?d00001 diff --git a/VisualNovel/app/src/main/res/mipmap-xxhdpi/setting_delete.webp b/VisualNovel/app/src/main/res/mipmap-xxhdpi/setting_delete.webp new file mode 100644 index 0000000000000000000000000000000000000000..5d047135850675362d07fde2b2468c363057e473 GIT binary patch literal 1856 zcmcgpc~H|w6kcwRQbbM#D-KX2hzJgqGg=TZh=C+Rps8pQlW--(aH|okTt@I1i6jDo zP^2Kl3X&A%u!5qT$`Qm6KnkQS35N)BSm-Y>4mzX#v){gb`|W$*?7rQHM!31zssVs? zb@ul4w)I;B0N4pl_a#HPxOhKRfVM#4soX0=DJm_3fp&K`^7H?}NUa|zKw}AbVmN)7 zebz&&Y2mWA-Qu%~{|>G`MhYiFl5uF7Frdq!nzSLVO&sgxNDYmY-zA6qbzhNaJ{V|S1x-T`4$#o|ILqG;?IDEa z0$@7@fYRla7=a6bAOQgVS1U1-8~`-p0pPc;#8&=V2*e?Yyhp8eoxHV@a^ z@{-|e$G4z(P`4JB$|CH?ZyC<)FEsSn)H%Ah;ZmKw>x;9D|q64@PF>yrw`TvV8nT3qO3IMrI^E~ z3W6TQ5{TM&sRm^lFl$_lQD_{Tnj`vKy4UWmAID#JfqwAr$&xs}{ZBZ(`!9mhHj3Jy01 zL`CLJ%d$$hH-2Psr}IQ{VU+?s%`YNIG(dVwDf%+9Q$jjt+Cs!*e_=)Z zncru(fpG-ga#B;Rh0kP{3T08jm^{yta~5#zjGJ7ezKs~1q~n_lZ#Y+R zIvCtw2Mgx9X>FYZDT|EzHK{eL7dDHVx(<&{)@a+E*`r|vj|v{MOTxBflo&8;Ui>yi zPGYuIN(SMq2_9ztk*RRP%w|tW^bwQOXq|iQTINZX?^{?CrI>j>niE%o_MULgWxFET zwF2ZQTi?sJT!;P0xFXiqwxS@T9^p`KgA&?TxD%S_!6$R2#~B!cCp~yRS9<&0Pe@s4 z+AbuGo^l!~W27BG@}lWF(~se-=nKPAszhk#COKg%=~1oI@9$`Fw|hP4ruNJF&O70# z={Y}^)#Li8v=Sr@c}A5KLy1qU(9J=$xcLtc1|(0M#mvJS(vhP!M~B%BM}zdn+QmBQ z=4EHPGGAd)a5`fQyLjpd!BG!sTS~!8bY@UoNn>Oh0Q6}g%^8?aZXjw zIY-PYTx2f!6W&fKO}zS%4OSzu9i&5;D#BXz$q*bQ#~!Osx>h$y^HRUqMoBWLk2_U7OP+rbHtIumn2Yz)+a8G;7o`qoEE?3< z-_5p9l+@IR33ny*FyYqjy;vAlSo=3wsW3s4j@y(@tqSIbZvOF<&3KAI3h$28r#-m` fKf1NiSWDWbq36M@jT)g{Ie-6vXt8VZFaZAoS-i!Q literal 0 HcmV?d00001 diff --git a/VisualNovel/app/src/main/res/values/colors.xml b/VisualNovel/app/src/main/res/values/colors.xml index 22a56f7..9c1c1b2 100644 --- a/VisualNovel/app/src/main/res/values/colors.xml +++ b/VisualNovel/app/src/main/res/values/colors.xml @@ -188,6 +188,10 @@ #FFFF00 #FF8800 #ff565563 + #ff333333 + #ff666666 + #fff6f6f6 + diff --git a/VisualNovel/app/src/main/res/values/strings.xml b/VisualNovel/app/src/main/res/values/strings.xml index c789ab3..7031a90 100644 --- a/VisualNovel/app/src/main/res/values/strings.xml +++ b/VisualNovel/app/src/main/res/values/strings.xml @@ -462,11 +462,19 @@ Contact Us: support@VisualNovel.ai All + + from Hold to Talk Type a message Swipe Up to Cancel Release to Send Release to Cancel + Switch Model + Sound + Appearance + Background + History Archives + DELETE \ No newline at end of file