From 94467ea83b635bd25300326aca6abdb492fcc313 Mon Sep 17 00:00:00 2001 From: renhaoting <370797079@qq.com> Date: Tue, 28 Oct 2025 17:09:32 +0800 Subject: [PATCH] =?UTF-8?q?=E5=BC=95=E5=85=A5ai=20model=20=E5=8F=AF?= =?UTF-8?q?=E9=80=89UI?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/assets/uitoken/token_sys.json | 6 +- .../remax/visualnovel/ui/chat/ChatActivity.kt | 10 +- .../ui/chat/ui/ChatSettingItemView.kt | 35 +++ .../visualnovel/ui/chat/ui/ChatSettingView.kt | 48 ++++ .../ui/expandableSelector/ExpandSelectView.kt | 31 ++- .../chat/ui/expandableSelector/MaxNumView.kt | 211 ++++++++++++++++++ .../remax/visualnovel/widget/ui/SwitchView.kt | 16 +- .../res/drawable/bg_expand_view_items.xml | 16 ++ .../main/res/layout/activity_actor_chat.xml | 7 +- ...setting_item.xml => chat_setting_item.xml} | 8 +- .../main/res/layout/layout_chat_menu_view.xml | 145 +++++++++++- .../res/layout/layout_expand_select_view.xml | 15 +- .../res/layout/layout_expand_view_item.xml | 100 ++++----- .../main/res/layout/layout_max_num_view.xml | 53 +++++ .../res/mipmap-xxhdpi/setting_short_text.webp | Bin 0 -> 1104 bytes .../app/src/main/res/values/colors.xml | 13 +- .../app/src/main/res/values/strings.xml | 3 + .../app/src/main/res/values/ui_tokens.xml | 6 + 18 files changed, 623 insertions(+), 100 deletions(-) create mode 100644 VisualNovel/app/src/main/java/com/remax/visualnovel/ui/chat/ui/ChatSettingItemView.kt create mode 100644 VisualNovel/app/src/main/java/com/remax/visualnovel/ui/chat/ui/expandableSelector/MaxNumView.kt create mode 100644 VisualNovel/app/src/main/res/drawable/bg_expand_view_items.xml rename VisualNovel/app/src/main/res/layout/{include_setting_item.xml => chat_setting_item.xml} (91%) create mode 100644 VisualNovel/app/src/main/res/layout/layout_max_num_view.xml create mode 100644 VisualNovel/app/src/main/res/mipmap-xxhdpi/setting_short_text.webp diff --git a/VisualNovel/app/src/main/assets/uitoken/token_sys.json b/VisualNovel/app/src/main/assets/uitoken/token_sys.json index e457763..6f19e8a 100644 --- a/VisualNovel/app/src/main/assets/uitoken/token_sys.json +++ b/VisualNovel/app/src/main/assets/uitoken/token_sys.json @@ -199,6 +199,10 @@ "border.m": "$glo.border.2", "border.l": "$glo.border.4", - "color.chat.setting.item.bg": "$glo.color.chat.setting.item.bg" + "color.chat.setting.item.bg": "$glo.color.chat.setting.item.bg", + "color.switch.view.normal": "$glo.color.switchview.normal", + "color.switch.view.checked": "$glo.color.switchview.checked", + "color.switch.view.stroke": "$glo.color.switchview.stroke" + } 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 98dbfc9..e935808 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 @@ -28,6 +28,7 @@ import com.remax.visualnovel.manager.nim.NimManager import com.remax.visualnovel.ui.chat.setting.model.ChatModelDialog import com.remax.visualnovel.ui.chat.ui.HoldToTalkDialog import com.remax.visualnovel.utils.RecordHelper +import com.remax.visualnovel.utils.StatusBarUtil2 import dagger.hilt.android.AndroidEntryPoint import kotlinx.coroutines.Job import timber.log.Timber @@ -45,11 +46,12 @@ class ChatActivity : BaseBindingActivity() { override fun initView() { - ARouter.getInstance().inject(this) - + /*ARouter.getInstance().inject(this) StatusBarUtils.setStatusBarAndNavBarIsLight(this, false) - StatusBarUtils.setTransparent(this) - binding.root.setPadding(binding.root.paddingLeft, binding.root.paddingTop + StatusBarUtils.statusBarHeight, binding.root.paddingRight, binding.root.paddingBottom) + StatusBarUtils.setTransparent(this)*/ + StatusBarUtil2.initImmersive(this, lightStatusBar = true) + binding.root.setPadding(binding.root.paddingStart, binding.root.paddingTop + StatusBarUtil2.getStatusBarHeight(this) * 2, + binding.root.paddingEnd, binding.root.paddingBottom) binding.toolbar.addRightIcon(R.mipmap.chat_title_setting) { binding.drawerMenu.openDrawer(GravityCompat.END) } diff --git a/VisualNovel/app/src/main/java/com/remax/visualnovel/ui/chat/ui/ChatSettingItemView.kt b/VisualNovel/app/src/main/java/com/remax/visualnovel/ui/chat/ui/ChatSettingItemView.kt new file mode 100644 index 0000000..1f98741 --- /dev/null +++ b/VisualNovel/app/src/main/java/com/remax/visualnovel/ui/chat/ui/ChatSettingItemView.kt @@ -0,0 +1,35 @@ +package com.remax.visualnovel.ui.chat.ui + + +import android.content.Context +import android.util.AttributeSet +import android.view.LayoutInflater +import android.view.View +import android.widget.LinearLayout +import com.remax.visualnovel.databinding.ChatSettingItemBinding + +class ChatSettingItemView @JvmOverloads constructor( + context: Context, + attrs: AttributeSet? = null, + defStyleAttr: Int = 0 +) : LinearLayout(context, attrs, defStyleAttr) { + + private var mLeftIconRes : Int = 0 + private var mTitleRes : Int = 0 + private var mRightIconRes : Int = 0 + private lateinit var mRightView : View + + private var mBinding = ChatSettingItemBinding.inflate(LayoutInflater.from(context)) + + + fun setItemClickListener (clickHandler: () -> Unit) { + setOnClickListener { + clickHandler.invoke() + } + } + + fun setLeftIconRes (leftIconRes: Int) { + + } + +} diff --git a/VisualNovel/app/src/main/java/com/remax/visualnovel/ui/chat/ui/ChatSettingView.kt b/VisualNovel/app/src/main/java/com/remax/visualnovel/ui/chat/ui/ChatSettingView.kt index 517cb88..ac008f0 100644 --- a/VisualNovel/app/src/main/java/com/remax/visualnovel/ui/chat/ui/ChatSettingView.kt +++ b/VisualNovel/app/src/main/java/com/remax/visualnovel/ui/chat/ui/ChatSettingView.kt @@ -2,11 +2,14 @@ package com.remax.visualnovel.ui.chat.ui import android.content.Context +import android.graphics.Color import android.util.AttributeSet import android.view.LayoutInflater import android.widget.LinearLayout +import androidx.core.graphics.toColorInt import com.remax.visualnovel.R import com.remax.visualnovel.databinding.LayoutChatMenuViewBinding +import com.remax.visualnovel.ui.chat.ui.expandableSelector.SelectorItem class ChatSettingView @JvmOverloads constructor( context: Context, @@ -18,7 +21,52 @@ class ChatSettingView @JvmOverloads constructor( init { + with(mBinding) { + + } + + initAiModelList() + } + + + fun initAiModelList() { + val items = listOf( + SelectorItem( + name = "Max-0618", + description = "Previous-generation large model", + pointsInfo = "0.3 points / 1K tokens", + color = "#FF6B35".toColorInt(), + isRecommended = true + ), + SelectorItem( + name = "Turbo-0826-32K", + description = "Previous-generation large model", + pointsInfo = "0.3 points / 1K tokens", + color = Color.parseColor("#4285F4") + ), + SelectorItem( + name = "XL-0430", + description = "Previous-generation large model", + pointsInfo = "0.3 points / 1K tokens", + color = Color.parseColor("#34A853") + ), + SelectorItem( + name = "XL-0826-32K", + description = "Previous-generation large model", + pointsInfo = "0.3 points / 1K tokens", + color = Color.parseColor("#FBBC05"), + isSelected = true // 默认选中 + ) + ) + + //aiModelSelector.setOnItemSelectedListener() + mBinding.aiModelSelector.setTitleIcon(R.mipmap.setting_ai_model) + mBinding.aiModelSelector.setItems(items) + mBinding.aiModelSelector.selectItem(0) + //mBinding.aiModelSelector.setTitleText(R.string.xxxx) + } + } diff --git a/VisualNovel/app/src/main/java/com/remax/visualnovel/ui/chat/ui/expandableSelector/ExpandSelectView.kt b/VisualNovel/app/src/main/java/com/remax/visualnovel/ui/chat/ui/expandableSelector/ExpandSelectView.kt index ab07aa4..9b30504 100644 --- a/VisualNovel/app/src/main/java/com/remax/visualnovel/ui/chat/ui/expandableSelector/ExpandSelectView.kt +++ b/VisualNovel/app/src/main/java/com/remax/visualnovel/ui/chat/ui/expandableSelector/ExpandSelectView.kt @@ -5,7 +5,6 @@ import android.animation.AnimatorListenerAdapter import android.animation.ObjectAnimator import android.animation.ValueAnimator import android.content.Context -import android.graphics.Color import android.graphics.drawable.GradientDrawable import android.util.AttributeSet import android.view.LayoutInflater @@ -15,6 +14,7 @@ import android.widget.LinearLayout import android.widget.TextView import com.remax.visualnovel.R import com.remax.visualnovel.databinding.LayoutExpandSelectViewBinding +import com.remax.visualnovel.utils.spannablex.utils.dp class ExpandSelectView @JvmOverloads constructor( @@ -35,7 +35,7 @@ class ExpandSelectView @JvmOverloads constructor( } private fun initView(context: Context, attrs: AttributeSet?) { - mBinding = LayoutExpandSelectViewBinding.inflate(LayoutInflater.from(context)) + mBinding = LayoutExpandSelectViewBinding.inflate(LayoutInflater.from(context), this, true) setupAttributes(attrs) setupClickListeners() } @@ -59,16 +59,17 @@ class ExpandSelectView @JvmOverloads constructor( mBinding.icon.setImageResource(resId) } - fun setTitleText(title: String) { - mBinding.titleText.text = title + fun setTitleText(titleRes: Int) { + mBinding.titleText.text = context.resources.getString(titleRes) } - fun setPopItems(newItems: List) { + fun setItems(newItems: List) { items = newItems updateItemsView() } + private fun updateItemsView() { mBinding.itemsContainer.removeAllViews() @@ -89,24 +90,16 @@ class ExpandSelectView @JvmOverloads constructor( val colorIndicator = itemView.findViewById(R.id.colorIndicator) val itemName = itemView.findViewById(R.id.itemName) val itemDesc = itemView.findViewById(R.id.itemDesc) - val pointsInfo = itemView.findViewById(R.id.pointsInfo) val recommendedTag = itemView.findViewById(R.id.recommendedTag) val selectedDot = itemView.findViewById(R.id.selectedDot) - // 设置颜色指示器 (colorIndicator.background as? GradientDrawable)?.setColor(item.color) itemName.text = item.name itemDesc.text = item.description - pointsInfo.text = item.pointsInfo - - // 显示推荐标签 - recommendedTag.visibility = if (item.isRecommended) View.VISIBLE else View.GONE - - // 显示选中圆点 + recommendedTag.text = item.pointsInfo selectedDot.visibility = if (item.isSelected) View.VISIBLE else View.GONE - // 设置点击事件 itemView.setOnClickListener { selectItem(position) itemSelectedListener?.onItemSelected(position, item) @@ -117,8 +110,10 @@ class ExpandSelectView @JvmOverloads constructor( private fun addDivider() { val divider = View(context).apply { - layoutParams = LayoutParams(LayoutParams.MATCH_PARENT, 1).apply { - setBackgroundColor(Color.parseColor("#EEEEEE")) + layoutParams = LayoutParams(LayoutParams.MATCH_PARENT, 1.dp).apply { + setBackgroundColor(context.resources.getColor(R.color.chat_setting_divider_color)) + marginStart = 10.dp + marginEnd = 10.dp } } mBinding.itemsContainer.addView(divider) @@ -148,7 +143,7 @@ class ExpandSelectView @JvmOverloads constructor( isExpanded = true mBinding.itemsContainer.visibility = View.VISIBLE - animateArrow(0f, 180f) + animateArrow(0f, 90f) // param height anim val animator = ValueAnimator.ofInt(0, getItemsHeight()) animator.duration = animationDuration.toLong() @@ -167,7 +162,7 @@ class ExpandSelectView @JvmOverloads constructor( if (!isExpanded) return isExpanded = false - animateArrow(180f, 0f) + animateArrow(90f, 0f) // param height anim val animator = ValueAnimator.ofInt(getItemsHeight(), 0) animator.duration = animationDuration.toLong() diff --git a/VisualNovel/app/src/main/java/com/remax/visualnovel/ui/chat/ui/expandableSelector/MaxNumView.kt b/VisualNovel/app/src/main/java/com/remax/visualnovel/ui/chat/ui/expandableSelector/MaxNumView.kt new file mode 100644 index 0000000..e0c871e --- /dev/null +++ b/VisualNovel/app/src/main/java/com/remax/visualnovel/ui/chat/ui/expandableSelector/MaxNumView.kt @@ -0,0 +1,211 @@ +package com.remax.visualnovel.ui.chat.ui.expandableSelector + +import android.animation.Animator +import android.animation.AnimatorListenerAdapter +import android.animation.ObjectAnimator +import android.animation.ValueAnimator +import android.content.Context +import android.graphics.drawable.GradientDrawable +import android.util.AttributeSet +import android.view.LayoutInflater +import android.view.View +import android.view.animation.AccelerateDecelerateInterpolator +import android.widget.LinearLayout +import android.widget.TextView +import com.remax.visualnovel.R +import com.remax.visualnovel.databinding.LayoutExpandSelectViewBinding +import com.remax.visualnovel.utils.spannablex.utils.dp + + +class MaxNumView @JvmOverloads constructor( + context: Context, + attrs: AttributeSet? = null, + defStyleAttr: Int = 0 +) : LinearLayout(context, attrs, defStyleAttr) { + + private lateinit var mBinding: LayoutExpandSelectViewBinding + + private var isExpanded = false + private var animationDuration = 300 + private var items: List = emptyList() + private var itemSelectedListener: OnItemSelectedListener? = null + + init { + initView(context, attrs) + } + + private fun initView(context: Context, attrs: AttributeSet?) { + mBinding = LayoutExpandSelectViewBinding.inflate(LayoutInflater.from(context), this, true) + setupAttributes(attrs) + setupClickListeners() + } + + private fun setupAttributes(attrs: AttributeSet?) { + attrs?.let { + val typedArray = context.obtainStyledAttributes(it, R.styleable.ExpandableSelector) + val title = typedArray.getString(R.styleable.ExpandableSelector_titleText) + title?.let { mBinding.titleText.text = it } + animationDuration = typedArray.getInt(R.styleable.ExpandableSelector_animationDuration, 300) + typedArray.recycle() + } + } + + private fun setupClickListeners() { + mBinding.titleLayout.setOnClickListener { toggle() } + } + + + fun setTitleIcon(resId: Int) { + mBinding.icon.setImageResource(resId) + } + + fun setTitleText(titleRes: Int) { + mBinding.titleText.text = context.resources.getString(titleRes) + } + + fun setItems(newItems: List) { + items = newItems + updateItemsView() + } + + + + private fun updateItemsView() { + mBinding.itemsContainer.removeAllViews() + + items.forEachIndexed { index, item -> + val itemView = createItemView(item, index) + mBinding.itemsContainer.addView(itemView) + + if (index < items.size - 1) { + addDivider() + } + } + } + + private fun createItemView(item: SelectorItem, position: Int): View { + val itemView = LayoutInflater.from(context) + .inflate(R.layout.layout_expand_view_item, mBinding.itemsContainer, false) + + val colorIndicator = itemView.findViewById(R.id.colorIndicator) + val itemName = itemView.findViewById(R.id.itemName) + val itemDesc = itemView.findViewById(R.id.itemDesc) + val recommendedTag = itemView.findViewById(R.id.recommendedTag) + val selectedDot = itemView.findViewById(R.id.selectedDot) + + (colorIndicator.background as? GradientDrawable)?.setColor(item.color) + + itemName.text = item.name + itemDesc.text = item.description + recommendedTag.text = item.pointsInfo + selectedDot.visibility = if (item.isSelected) VISIBLE else GONE + + itemView.setOnClickListener { + selectItem(position) + itemSelectedListener?.onItemSelected(position, item) + } + + return itemView + } + + private fun addDivider() { + val divider = View(context).apply { + layoutParams = LayoutParams(LayoutParams.MATCH_PARENT, 1.dp).apply { + setBackgroundColor(context.resources.getColor(R.color.chat_setting_divider_color)) + marginStart = 10.dp + marginEnd = 10.dp + } + } + mBinding.itemsContainer.addView(divider) + } + + + fun selectItem(position: Int) { + items.forEachIndexed { index, item -> + item.isSelected = index == position + } + updateItemsView() + + if (position in items.indices) { + mBinding.titleText.text = items[position].name + } + + collapse() + } + + + fun toggle() { + if (isExpanded) collapse() else expand() + } + + fun expand() { + if (isExpanded) return + + isExpanded = true + mBinding.itemsContainer.visibility = VISIBLE + animateArrow(0f, 90f) + // param height anim + val animator = ValueAnimator.ofInt(0, getItemsHeight()) + animator.duration = animationDuration.toLong() + animator.interpolator = AccelerateDecelerateInterpolator() + animator.addUpdateListener { animation -> + val value = animation.animatedValue as Int + val params = mBinding.itemsContainer.layoutParams + params.height = value + mBinding.itemsContainer.layoutParams = params + } + animator.start() + } + + + fun collapse() { + if (!isExpanded) return + + isExpanded = false + animateArrow(90f, 0f) + // param height anim + val animator = ValueAnimator.ofInt(getItemsHeight(), 0) + animator.duration = animationDuration.toLong() + animator.interpolator = AccelerateDecelerateInterpolator() + animator.addUpdateListener { animation -> + val value = animation.animatedValue as Int + val params = mBinding.itemsContainer.layoutParams + params.height = value + mBinding.itemsContainer.layoutParams = params + } + animator.addListener(object : AnimatorListenerAdapter() { + override fun onAnimationEnd(animation: Animator) { + mBinding.itemsContainer.visibility = GONE + } + }) + animator.start() + } + + private fun animateArrow(from: Float, to: Float) { + val rotation = ObjectAnimator.ofFloat(mBinding.arrow, "rotation", from, to) + rotation.duration = animationDuration.toLong() + rotation.interpolator = AccelerateDecelerateInterpolator() + rotation.start() + } + + private fun getItemsHeight(): Int { + var height = 0 + for (i in 0 until mBinding.itemsContainer.childCount) { + val child = mBinding.itemsContainer.getChildAt(i) + child.measure( + MeasureSpec.makeMeasureSpec(width, MeasureSpec.EXACTLY), + MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED) + ) + height += child.measuredHeight + } + return height + } + + fun setOnItemSelectedListener(listener: OnItemSelectedListener) { + this.itemSelectedListener = listener + } + + interface OnItemSelectedListener { + fun onItemSelected(position: Int, item: SelectorItem) + } +} \ No newline at end of file diff --git a/VisualNovel/app/src/main/java/com/remax/visualnovel/widget/ui/SwitchView.kt b/VisualNovel/app/src/main/java/com/remax/visualnovel/widget/ui/SwitchView.kt index 2fe2a31..ceb541b 100644 --- a/VisualNovel/app/src/main/java/com/remax/visualnovel/widget/ui/SwitchView.kt +++ b/VisualNovel/app/src/main/java/com/remax/visualnovel/widget/ui/SwitchView.kt @@ -94,8 +94,8 @@ class SwitchView @JvmOverloads constructor( val normal: Int val checked: Int if (style == 0) { - normal = R.string.color_surface_white_normal - checked = R.string.color_surface_white_normal + normal = R.string.switch_view_normal + checked = R.string.switch_view_checked } else { normal = R.string.color_txt_secondary_normal checked = R.string.color_surface_white_normal @@ -147,13 +147,13 @@ class SwitchView @JvmOverloads constructor( val stroke: Int if (style == 0) { if (isBg) { - normal = R.string.color_transparent - checked = R.string.color_primary_normal - stroke = R.string.color_surface_element_normal + normal = R.string.switch_view_stroke + checked = R.string.switch_view_stroke + stroke = R.string.switch_view_stroke } else { - normal = R.string.color_surface_element_normal - checked = R.string.color_transparent - stroke = R.string.color_transparent + normal = R.string.switch_view_stroke + checked = R.string.switch_view_stroke + stroke = R.string.switch_view_stroke } } else { if (isBg) { diff --git a/VisualNovel/app/src/main/res/drawable/bg_expand_view_items.xml b/VisualNovel/app/src/main/res/drawable/bg_expand_view_items.xml new file mode 100644 index 0000000..660f968 --- /dev/null +++ b/VisualNovel/app/src/main/res/drawable/bg_expand_view_items.xml @@ -0,0 +1,16 @@ + + + + + + + \ No newline at end of file diff --git a/VisualNovel/app/src/main/res/layout/activity_actor_chat.xml b/VisualNovel/app/src/main/res/layout/activity_actor_chat.xml index de6276a..e2079a7 100644 --- a/VisualNovel/app/src/main/res/layout/activity_actor_chat.xml +++ b/VisualNovel/app/src/main/res/layout/activity_actor_chat.xml @@ -4,7 +4,9 @@ xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/drawer_menu" android:layout_width="match_parent" - android:layout_height="match_parent" > + android:layout_height="match_parent" + android:fitsSystemWindows="false" + > diff --git a/VisualNovel/app/src/main/res/layout/include_setting_item.xml b/VisualNovel/app/src/main/res/layout/chat_setting_item.xml similarity index 91% rename from VisualNovel/app/src/main/res/layout/include_setting_item.xml rename to VisualNovel/app/src/main/res/layout/chat_setting_item.xml index 9aaedf8..9c46c7e 100644 --- a/VisualNovel/app/src/main/res/layout/include_setting_item.xml +++ b/VisualNovel/app/src/main/res/layout/chat_setting_item.xml @@ -3,11 +3,11 @@ xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" - android:layout_height="56dp" + android:layout_height="wrap_content" android:gravity="center_vertical" android:orientation="horizontal" - app:backgroundColorToken="@string/color_surface_base_disabled" - app:radiusToken="@string/radius_l" + app:backgroundColorToken="@string/color_chat_setting_item_bg" + app:radiusToken="@string/radius_m" android:padding="@dimen/dp_12" > @@ -44,7 +44,7 @@ - + + + + + + + + + + + + + + + + + + + + + + + - + + + + + + + + + + - + android:layout_height="wrap_content" + app:backgroundColorToken="@string/color_chat_setting_item_bg" + app:radiusToken="@string/radius_m" + android:padding="@dimen/dp_12" + > - + \ No newline at end of file diff --git a/VisualNovel/app/src/main/res/layout/layout_expand_view_item.xml b/VisualNovel/app/src/main/res/layout/layout_expand_view_item.xml index 42db3ba..361564e 100644 --- a/VisualNovel/app/src/main/res/layout/layout_expand_view_item.xml +++ b/VisualNovel/app/src/main/res/layout/layout_expand_view_item.xml @@ -1,67 +1,63 @@ - + android:layout_height="wrap_content" + android:padding="@dimen/dp_12" > - - - - - - - - + android:visibility="visible"/> + + + + + + + + + + + + \ No newline at end of file diff --git a/VisualNovel/app/src/main/res/layout/layout_max_num_view.xml b/VisualNovel/app/src/main/res/layout/layout_max_num_view.xml new file mode 100644 index 0000000..6b0de7f --- /dev/null +++ b/VisualNovel/app/src/main/res/layout/layout_max_num_view.xml @@ -0,0 +1,53 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/VisualNovel/app/src/main/res/mipmap-xxhdpi/setting_short_text.webp b/VisualNovel/app/src/main/res/mipmap-xxhdpi/setting_short_text.webp new file mode 100644 index 0000000000000000000000000000000000000000..223234953e5bfc30ceb4431d96e0c27f3477feb6 GIT binary patch literal 1104 zcmWIYbaV4yVPFV%bqWXzu!!JdU|=u+VmmPMbaoCn!3g9sFrEOBEI_H;ypp0IcPE92 z$S4K&2Mmlr2nLDC#RU)+RuZV{+ck*V%eq)q;1}dfNi9wWD)|7!Dn&rcfo>83vPIG% zYz+`Q3BtAkvCB&eN`PttK=2?(*InG6iuTNxN6ZXv`}7BDdI zw=ghlJC6`Ugh@eSQ6ktlU~DijrKK@2d|J-Hz#GZHAbf#=fh!s;2PAN~O#vt+19VqD z5T-NaFr+dlFnBWLF(fnS0a-@CNHt_I1IDmV6cYo3zFh;q!25${lT_4;9|fANoVdTa zeeKa)sT^g`A|rLV)X7pmtt)Os-PzQua`NPyiYdNXPu@RB%q~2=Ay?(-&XY2ijad{J z8d4)~Z0jwJJ#6CpabN!V&ueP$J6|t-_`hC7_W%Fs>t3g%eXPAdWoAg|N-bthr9c1w z%L;l_sop#@Yss5;tF%;7%jZvGC@2pNWd;$(n>AL>ntA5UbP+~oGh=Tq2S&9C4Gb;} z3W9MnV`S+dM@16A=@yegwFYKAO_lkU-vHG&ZH*R1c zkOXE#-P^PBtFjU*c(k}~<7Shoi}x;%b8&HL6rS6@wrdZ_w2gf(V?;9 z@(t<2!k3CS^>_Z>60>%$pUcCY+auSWKH~kkVyQ#InfWHd{oAjmz3QAg`KD5%Y4x0n zHKEl%J=UBN=Q=a>Nb>$$UcZ#Pp|UGqTt0HqUsKxRT@I*7aiRZtrw4pX9;6uhQuG!YK2}>ik6+ z-xdb+npHmgbTBJZa@Fs@x3j$RcVB+&@O$m^_-W7A8uId9 on}0dgRx+w5^}B7-k8fM;_x=3zuO@ko^X#2R@4WddFHy<_0FYl`(EtDd 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 48e9418..545a157 100644 --- a/VisualNovel/app/src/main/res/values/colors.xml +++ b/VisualNovel/app/src/main/res/values/colors.xml @@ -193,7 +193,18 @@ #fff6f6f6 - #fff6f6f6 + #F6F6F6 + #FFFFFF + #ff00cc88 + #ff020025 + + #ff9494c3 + #ff0066ff + + #ffececf9 + + + diff --git a/VisualNovel/app/src/main/res/values/strings.xml b/VisualNovel/app/src/main/res/values/strings.xml index 7031a90..b34a6a7 100644 --- a/VisualNovel/app/src/main/res/values/strings.xml +++ b/VisualNovel/app/src/main/res/values/strings.xml @@ -476,5 +476,8 @@ Background History Archives DELETE + Short Text Mode + Play dialogue only + Maximum number of response tokens \ No newline at end of file diff --git a/VisualNovel/app/src/main/res/values/ui_tokens.xml b/VisualNovel/app/src/main/res/values/ui_tokens.xml index ea4ec4d..caa2105 100644 --- a/VisualNovel/app/src/main/res/values/ui_tokens.xml +++ b/VisualNovel/app/src/main/res/values/ui_tokens.xml @@ -205,4 +205,10 @@ color.chat.setting.item.bg + + color.switch.view.normal + color.switch.view.checked + color.switch.view.stroke + + \ No newline at end of file