From 64fdf6f4acbad869df3fdb9dfef78f0a1a2ed75b Mon Sep 17 00:00:00 2001 From: renhaoting <370797079@qq.com> Date: Wed, 29 Oct 2025 11:44:32 +0800 Subject: [PATCH] =?UTF-8?q?sound,bg,bubble=20=E7=AD=89=E5=85=B6=E4=BB=96ex?= =?UTF-8?q?pandView=20=E5=88=9D=E6=AD=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/assets/uitoken/token_sys.json | 9 +- .../visualnovel/entity/response/ChatBubble.kt | 4 +- .../visualnovel/entity/response/ChatSound.kt | 60 ++++++++++++ .../ui/chat/ui/ChatSettingItemView.kt | 35 ------- .../ui/expandableSelector/ExpandBgSubView.kt | 42 ++++++++ .../expandableSelector/ExpandBubbleSubView.kt | 41 ++++++++ ...MaxNumView.kt => ExpandSoundSelectView.kt} | 91 +++-------------- .../expandableSelector/ExpandSoundSubView.kt | 91 +++++++++++++++++ .../main/res/layout/layout_chat_menu_view.xml | 2 +- .../layout_expand_sound_select_view.xml | 58 +++++++++++ .../res/layout/layout_item_setting_bg.xml | 64 ++++++++++++ .../res/layout/layout_item_setting_bubble.xml | 92 ++++++++++++++++++ .../res/layout/layout_item_setting_sound.xml | 88 +++++++++++++++++ .../res/layout/layout_setting_bg_sub_view.xml | 17 ++++ .../layout/layout_setting_bubble_sub_view.xml | 16 +++ .../layout/layout_setting_sound_sub_view.xml | 50 ++++++++++ .../res/mipmap-xxhdpi/setting_sound_play.webp | Bin 0 -> 1456 bytes .../main/res/mipmap-xxhdpi/temp_avatar.jpg | Bin 0 -> 20654 bytes .../app/src/main/res/values/colors.xml | 6 ++ .../app/src/main/res/values/ui_tokens.xml | 5 + 20 files changed, 652 insertions(+), 119 deletions(-) create mode 100644 VisualNovel/app/src/main/java/com/remax/visualnovel/entity/response/ChatSound.kt delete 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/ExpandBgSubView.kt create mode 100644 VisualNovel/app/src/main/java/com/remax/visualnovel/ui/chat/ui/expandableSelector/ExpandBubbleSubView.kt rename VisualNovel/app/src/main/java/com/remax/visualnovel/ui/chat/ui/expandableSelector/{MaxNumView.kt => ExpandSoundSelectView.kt} (61%) create mode 100644 VisualNovel/app/src/main/java/com/remax/visualnovel/ui/chat/ui/expandableSelector/ExpandSoundSubView.kt create mode 100644 VisualNovel/app/src/main/res/layout/layout_expand_sound_select_view.xml create mode 100644 VisualNovel/app/src/main/res/layout/layout_item_setting_bg.xml create mode 100644 VisualNovel/app/src/main/res/layout/layout_item_setting_bubble.xml create mode 100644 VisualNovel/app/src/main/res/layout/layout_item_setting_sound.xml create mode 100644 VisualNovel/app/src/main/res/layout/layout_setting_bg_sub_view.xml create mode 100644 VisualNovel/app/src/main/res/layout/layout_setting_bubble_sub_view.xml create mode 100644 VisualNovel/app/src/main/res/layout/layout_setting_sound_sub_view.xml create mode 100644 VisualNovel/app/src/main/res/mipmap-xxhdpi/setting_sound_play.webp create mode 100644 VisualNovel/app/src/main/res/mipmap-xxhdpi/temp_avatar.jpg diff --git a/VisualNovel/app/src/main/assets/uitoken/token_sys.json b/VisualNovel/app/src/main/assets/uitoken/token_sys.json index 6f19e8a..2d24f54 100644 --- a/VisualNovel/app/src/main/assets/uitoken/token_sys.json +++ b/VisualNovel/app/src/main/assets/uitoken/token_sys.json @@ -202,7 +202,14 @@ "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" + "color.switch.view.stroke": "$glo.color.switchview.stroke", + + "female.text.color": "$female.text.color", + "male.text.color": "$male.text.color", + "female.bg": "$female.bg", + "male.bg": "$male.bg" + + } diff --git a/VisualNovel/app/src/main/java/com/remax/visualnovel/entity/response/ChatBubble.kt b/VisualNovel/app/src/main/java/com/remax/visualnovel/entity/response/ChatBubble.kt index 9fd0233..a13570b 100644 --- a/VisualNovel/app/src/main/java/com/remax/visualnovel/entity/response/ChatBubble.kt +++ b/VisualNovel/app/src/main/java/com/remax/visualnovel/entity/response/ChatBubble.kt @@ -3,9 +3,7 @@ package com.remax.visualnovel.entity.response import android.os.Parcelable import kotlinx.parcelize.Parcelize -/** - * Created by HJW on 2025/8/18 - */ + @Parcelize data class ChatBubble( /** diff --git a/VisualNovel/app/src/main/java/com/remax/visualnovel/entity/response/ChatSound.kt b/VisualNovel/app/src/main/java/com/remax/visualnovel/entity/response/ChatSound.kt new file mode 100644 index 0000000..e3b0354 --- /dev/null +++ b/VisualNovel/app/src/main/java/com/remax/visualnovel/entity/response/ChatSound.kt @@ -0,0 +1,60 @@ +package com.remax.visualnovel.entity.response + +import android.os.Parcelable +import kotlinx.parcelize.Parcelize + + +@Parcelize +data class ChatSound( + /** + * code + */ + val code: String, + + /** + * id + */ + val id: Long, + + /** + * 图片url + */ + val imgUrl: String?, + + /** + * 名称 + */ + val name: String, + + /** + * 名称 + */ + val description: String, + + /** + * actor 性别 + */ + var isMale: Boolean, + + /** + * 当前用户是否解锁 false:未解锁,true:解锁 + */ + val isUnlock: Boolean? = null, + + /** + * 解锁心动等级 类型为HEARTBEAT_LEVEL时才有用 + */ + val unlockHeartbeatLevel: String? = null, + + /** + * 解锁类型 MEMBER:会员 HEARTBEAT_LEVEL:心动等级 + */ + val unlockType: String? = null, + var isDefault: Boolean, + var select: Boolean = false +) : Parcelable { + companion object { + const val MEMBER = "MEMBER" + const val HEARTBEAT_LEVEL = "HEARTBEAT_LEVEL" + } +} 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 deleted file mode 100644 index 1f98741..0000000 --- a/VisualNovel/app/src/main/java/com/remax/visualnovel/ui/chat/ui/ChatSettingItemView.kt +++ /dev/null @@ -1,35 +0,0 @@ -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/expandableSelector/ExpandBgSubView.kt b/VisualNovel/app/src/main/java/com/remax/visualnovel/ui/chat/ui/expandableSelector/ExpandBgSubView.kt new file mode 100644 index 0000000..60cc574 --- /dev/null +++ b/VisualNovel/app/src/main/java/com/remax/visualnovel/ui/chat/ui/expandableSelector/ExpandBgSubView.kt @@ -0,0 +1,42 @@ +package com.remax.visualnovel.ui.chat.ui.expandableSelector + +import android.content.Context +import android.util.AttributeSet +import android.view.LayoutInflater +import android.widget.LinearLayout +import androidx.recyclerview.widget.RecyclerView +import com.drake.brv.annotaion.DividerOrientation +import com.drake.brv.utils.divider +import com.drake.brv.utils.grid +import com.drake.brv.utils.setup +import com.remax.visualnovel.databinding.LayoutSettingBgSubViewBinding + +class ExpandBgSubView @JvmOverloads constructor( + context: Context, + attrs: AttributeSet? = null, + defStyleAttr: Int = 0 +) : LinearLayout(context, attrs, defStyleAttr) { + + private var mBinding: LayoutSettingBgSubViewBinding + + + init { + mBinding = LayoutSettingBgSubViewBinding.inflate(LayoutInflater.from(context)) + with(mBinding) { + initRv(itemsRv) + } + } + + + private fun initRv(itemsRv: RecyclerView) { + itemsRv.grid(2) + .divider { + setDivider(16, true) + orientation = DividerOrientation.VERTICAL + }.setup { + + } + } + + +} \ No newline at end of file diff --git a/VisualNovel/app/src/main/java/com/remax/visualnovel/ui/chat/ui/expandableSelector/ExpandBubbleSubView.kt b/VisualNovel/app/src/main/java/com/remax/visualnovel/ui/chat/ui/expandableSelector/ExpandBubbleSubView.kt new file mode 100644 index 0000000..b488795 --- /dev/null +++ b/VisualNovel/app/src/main/java/com/remax/visualnovel/ui/chat/ui/expandableSelector/ExpandBubbleSubView.kt @@ -0,0 +1,41 @@ +package com.remax.visualnovel.ui.chat.ui.expandableSelector + +import android.content.Context +import android.util.AttributeSet +import android.view.LayoutInflater +import android.widget.LinearLayout +import androidx.recyclerview.widget.RecyclerView +import com.drake.brv.annotaion.DividerOrientation +import com.drake.brv.utils.divider +import com.drake.brv.utils.grid +import com.drake.brv.utils.setup +import com.remax.visualnovel.databinding.LayoutSettingBubbleSubViewBinding + +class ExpandBubbleSubView @JvmOverloads constructor( + context: Context, + attrs: AttributeSet? = null, + defStyleAttr: Int = 0 +) : LinearLayout(context, attrs, defStyleAttr) { + + private var mBinding: LayoutSettingBubbleSubViewBinding + + + init { + mBinding = LayoutSettingBubbleSubViewBinding.inflate(LayoutInflater.from(context)) + with(mBinding) { + initRv(itemsRv) + } + } + + private fun initRv(itemsRv: RecyclerView) { + itemsRv.grid(2) + .divider { + setDivider(16, true) + orientation = DividerOrientation.VERTICAL + }.setup { + + } + } + + +} \ No newline at end of file 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/ExpandSoundSelectView.kt similarity index 61% rename from VisualNovel/app/src/main/java/com/remax/visualnovel/ui/chat/ui/expandableSelector/MaxNumView.kt rename to VisualNovel/app/src/main/java/com/remax/visualnovel/ui/chat/ui/expandableSelector/ExpandSoundSelectView.kt index e0c871e..8360981 100644 --- 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/ExpandSoundSelectView.kt @@ -5,29 +5,25 @@ 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.ViewGroup 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 +import com.remax.visualnovel.databinding.LayoutExpandSoundSelectViewBinding -class MaxNumView @JvmOverloads constructor( +class ExpandSoundSelectView @JvmOverloads constructor( context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0 ) : LinearLayout(context, attrs, defStyleAttr) { - private lateinit var mBinding: LayoutExpandSelectViewBinding + private lateinit var mBinding: LayoutExpandSoundSelectViewBinding private var isExpanded = false private var animationDuration = 300 - private var items: List = emptyList() private var itemSelectedListener: OnItemSelectedListener? = null init { @@ -35,7 +31,7 @@ class MaxNumView @JvmOverloads constructor( } private fun initView(context: Context, attrs: AttributeSet?) { - mBinding = LayoutExpandSelectViewBinding.inflate(LayoutInflater.from(context), this, true) + mBinding = LayoutExpandSoundSelectViewBinding.inflate(LayoutInflater.from(context)) setupAttributes(attrs) setupClickListeners() } @@ -63,76 +59,6 @@ class MaxNumView @JvmOverloads constructor( 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() @@ -208,4 +134,11 @@ class MaxNumView @JvmOverloads constructor( interface OnItemSelectedListener { fun onItemSelected(position: Int, item: SelectorItem) } + + + /* new added */ + fun setCustomExpandView(expandView: ViewGroup) { + mBinding.itemsContainer.addView(expandView) + } + } \ No newline at end of file diff --git a/VisualNovel/app/src/main/java/com/remax/visualnovel/ui/chat/ui/expandableSelector/ExpandSoundSubView.kt b/VisualNovel/app/src/main/java/com/remax/visualnovel/ui/chat/ui/expandableSelector/ExpandSoundSubView.kt new file mode 100644 index 0000000..fc98a3e --- /dev/null +++ b/VisualNovel/app/src/main/java/com/remax/visualnovel/ui/chat/ui/expandableSelector/ExpandSoundSubView.kt @@ -0,0 +1,91 @@ +package com.remax.visualnovel.ui.chat.ui.expandableSelector + +import android.content.Context +import android.util.AttributeSet +import android.view.LayoutInflater +import android.widget.LinearLayout +import androidx.recyclerview.widget.RecyclerView +import com.drake.brv.annotaion.DividerOrientation +import com.drake.brv.utils.bindingAdapter +import com.drake.brv.utils.divider +import com.drake.brv.utils.grid +import com.drake.brv.utils.setup +import com.remax.visualnovel.R +import com.remax.visualnovel.databinding.LayoutItemSettingSoundBinding +import com.remax.visualnovel.databinding.LayoutSettingSoundSubViewBinding +import com.remax.visualnovel.entity.response.ChatSound +import com.remax.visualnovel.widget.uitoken.changeBackground +import com.remax.visualnovel.widget.uitoken.view.UITokenLinearLayout + +class ExpandSoundSubView @JvmOverloads constructor( + context: Context, + attrs: AttributeSet? = null, + defStyleAttr: Int = 0 +) : LinearLayout(context, attrs, defStyleAttr) { + private var mBinding: LayoutSettingSoundSubViewBinding + + + init { + mBinding = LayoutSettingSoundSubViewBinding.inflate(LayoutInflater.from(context)) + with(mBinding) { + initRadioGroup(radioGroup) + initRv(itemsRv) + } + } + + private fun initRadioGroup(radioGroup: UITokenLinearLayout) { + // TODO("Not yet implemented") + } + + fun playActorSound(bubble : ChatSound) { + + } + + fun setSelectedSound() { + + } + + private fun initRv(itemsRv: RecyclerView) { + itemsRv.grid(2) + .divider { + setDivider(16, true) + orientation = DividerOrientation.VERTICAL + }.setup { + addType(R.layout.layout_item_setting_sound) + + onClick(R.id.left_container) { + val bubble = getModel() + playActorSound(bubble) + } + + onClick(R.id.tv_select) { + val bubble = getModel() + if (!bubble.select) { + itemsRv.bindingAdapter.models?.filterIsInstance()?.forEach { item -> + item.select = item == bubble + } + itemsRv.bindingAdapter.notifyDataSetChanged() + setSelectedSound() + } + } + + onBind { + val item = getModel() + with(getBinding()) { + if (!item.imgUrl.isNullOrEmpty()) { + userAvatar.setImageResource(R.mipmap.sex_man_big) + } else { + userAvatar.setImageResource(if (item.isMale) R.mipmap.ic_gender_male else R.mipmap.ic_gender_female) + } + + tvSoundName.text = item.name + itemRoot.changeBackground(backgroundUIColorToken = if (item.isMale) R.string.male_bg else R.string.female_bg) + tvSoundDescrible.setTextColor(context.resources.getColor(if (item.isMale) R.color.male_text_color else R.color.female_text_color)) + tvSoundDescrible.text = item.description + } + } + } + } + + +} \ 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 index 48623c3..722ec86 100644 --- a/VisualNovel/app/src/main/res/layout/layout_chat_menu_view.xml +++ b/VisualNovel/app/src/main/res/layout/layout_chat_menu_view.xml @@ -120,7 +120,7 @@ android:layout_marginTop="10dp" > - + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/VisualNovel/app/src/main/res/layout/layout_item_setting_bg.xml b/VisualNovel/app/src/main/res/layout/layout_item_setting_bg.xml new file mode 100644 index 0000000..cfdf1f7 --- /dev/null +++ b/VisualNovel/app/src/main/res/layout/layout_item_setting_bg.xml @@ -0,0 +1,64 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/VisualNovel/app/src/main/res/layout/layout_item_setting_bubble.xml b/VisualNovel/app/src/main/res/layout/layout_item_setting_bubble.xml new file mode 100644 index 0000000..b606fd1 --- /dev/null +++ b/VisualNovel/app/src/main/res/layout/layout_item_setting_bubble.xml @@ -0,0 +1,92 @@ + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/VisualNovel/app/src/main/res/layout/layout_item_setting_sound.xml b/VisualNovel/app/src/main/res/layout/layout_item_setting_sound.xml new file mode 100644 index 0000000..8b7e488 --- /dev/null +++ b/VisualNovel/app/src/main/res/layout/layout_item_setting_sound.xml @@ -0,0 +1,88 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/VisualNovel/app/src/main/res/layout/layout_setting_bg_sub_view.xml b/VisualNovel/app/src/main/res/layout/layout_setting_bg_sub_view.xml new file mode 100644 index 0000000..26d6d57 --- /dev/null +++ b/VisualNovel/app/src/main/res/layout/layout_setting_bg_sub_view.xml @@ -0,0 +1,17 @@ + + + + + + \ No newline at end of file diff --git a/VisualNovel/app/src/main/res/layout/layout_setting_bubble_sub_view.xml b/VisualNovel/app/src/main/res/layout/layout_setting_bubble_sub_view.xml new file mode 100644 index 0000000..c17fc60 --- /dev/null +++ b/VisualNovel/app/src/main/res/layout/layout_setting_bubble_sub_view.xml @@ -0,0 +1,16 @@ + + + + + \ No newline at end of file diff --git a/VisualNovel/app/src/main/res/layout/layout_setting_sound_sub_view.xml b/VisualNovel/app/src/main/res/layout/layout_setting_sound_sub_view.xml new file mode 100644 index 0000000..a7ba96e --- /dev/null +++ b/VisualNovel/app/src/main/res/layout/layout_setting_sound_sub_view.xml @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/VisualNovel/app/src/main/res/mipmap-xxhdpi/setting_sound_play.webp b/VisualNovel/app/src/main/res/mipmap-xxhdpi/setting_sound_play.webp new file mode 100644 index 0000000000000000000000000000000000000000..803a4fa2065a4923d09f1d1dee3eaa0247e88eb1 GIT binary patch literal 1456 zcmWIYbaPw5%D@or>J$(bU=hK^z`$St#MWTs>FgYEf)U7NU_1dLS%6Zxc_l?b?oJ93 zkx>fl4;UDM5DXHNiwhtutRzs?w`&l!mvynKz%R&|l3JV$RPq6cRf>R?1KlJ7WQ(Lj z*cu>q5`=97VwaZ`lmOKPfY?PLLC!#S3XrXlj>JwvVkZ|AfzZ zZ((5Ab{-*y2$O=uqC~K9EI^VeEscTU({cs|-be-p;R_55T+v`TAc4be3P33tpu6&c zFr6WXA(cUa!IL46A(=rB$T9*(sv(0JFou10GBYsfTOZ&PV1K%xSH->P>^s(F$K?;! zDll%$RdE+uz3Tkl)AqOL*LU=)Xii!jXj*Wl{C{~x!}odt7FWYS9v=~IVPSn1$3nLc z{SR6eSSWEcwaPa=>Pk?Gut-XL(9@W-s6t7CLyb-EhDMWu{}u(27KIS5ViBoUr=>xh zy@zC+1eTq-xT3|f&)k^n^})K}naXDbxLO}~Yxe$C3hCp2$h)wpHnF8Nn zdwZL8Zu#-IH%|V$s`7pA=JS>I0vGGq@}xaimM!ElKXdUX6ELVCpy66ddFhYItwKqb zv%hTL@dg;^P_V#o?{ecgFI`DeCfkzf zyLNZ;oQtzJ6@9k~>gd?yaq8gB%+6IiOr*AMym-{Y`4XqCPkq)i+sk*>PrUg5bkdUE zhw+zq{`<+fyXD!n_Qh4;E_iRzuz_NK2>QCm>EtblQW3UMlalNT< zd)>bXAr9{OQik^)%Y;vf+VubB0j^3F9_h=c_dc4{Yr1Vtm7lq3-jW#>-!nyA181}u z&wt*byq5ig$j=9T&E@;gOb+Js;rB1(($|g_yQo+Cg00X8DR{#J2 literal 0 HcmV?d00001 diff --git a/VisualNovel/app/src/main/res/mipmap-xxhdpi/temp_avatar.jpg b/VisualNovel/app/src/main/res/mipmap-xxhdpi/temp_avatar.jpg new file mode 100644 index 0000000000000000000000000000000000000000..69e254c5dc78412e04206c14c7a42f4b376dc0d3 GIT binary patch literal 20654 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 D7}gZ; 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 545a157..126a3a6 100644 --- a/VisualNovel/app/src/main/res/values/colors.xml +++ b/VisualNovel/app/src/main/res/values/colors.xml @@ -203,6 +203,12 @@ #ffececf9 + #ff7326ae + #ff4876c9 + #ffe5c4ff + #ffc7dbff + + diff --git a/VisualNovel/app/src/main/res/values/ui_tokens.xml b/VisualNovel/app/src/main/res/values/ui_tokens.xml index caa2105..194b317 100644 --- a/VisualNovel/app/src/main/res/values/ui_tokens.xml +++ b/VisualNovel/app/src/main/res/values/ui_tokens.xml @@ -211,4 +211,9 @@ color.switch.view.stroke + female.text.color + male.text.color + female.bg + male.bg + \ No newline at end of file