diff --git a/VisualNovel/app/src/main/java/com/remax/visualnovel/extension/DialogExt.kt b/VisualNovel/app/src/main/java/com/remax/visualnovel/extension/DialogExt.kt index 3b4dfa9..659a79b 100644 --- a/VisualNovel/app/src/main/java/com/remax/visualnovel/extension/DialogExt.kt +++ b/VisualNovel/app/src/main/java/com/remax/visualnovel/extension/DialogExt.kt @@ -6,8 +6,10 @@ import android.text.method.ScrollingMovementMethod import android.view.Gravity import android.view.ViewGroup import androidx.annotation.DrawableRes +import androidx.annotation.StringRes import androidx.core.view.isVisible import com.remax.visualnovel.R +import com.remax.visualnovel.databinding.DialogConfirmBinding import com.remax.visualnovel.databinding.DialogDoubleBtnBinding import com.remax.visualnovel.databinding.DialogSingleBtnLayout2Binding import com.remax.visualnovel.databinding.DialogSingleBtnLayoutBinding @@ -22,9 +24,48 @@ import com.remax.visualnovel.widget.uitoken.changeTextStyle import com.remax.visualnovel.widget.uitoken.view.UITokenTextView import kotlin.math.min + /** - * Created by HJW on 2025/7/18 + * 底部水平布局 两个按钮的dialog */ +fun Activity.showConfirmDialog( + @DrawableRes dialogBg: Int? = null, + @StringRes title: Int? = null, + @StringRes description: Int? = null, + @DrawableRes topBtnIconRes: Int? = null, + topBtnClick: (() -> Unit)? = null, + @StringRes bottomLeftStrRes: Int? = null, + @StringRes bottomRightStrRes: Int? = null, + bottomRightClick: (() -> Unit)? = null, +): LBindingDialog { + + val dialog = LBindingDialog(this, DialogConfirmBinding::inflate) + .with() + .setCenter() + + dialog.setCanceledOnTouchOutside(false) + dialog.setCancelable(false) + + dialog.binding.run { + setOnClick(ivTop, tvRight, tvLeft) { + when (this) { + tvRight -> bottomRightClick?.invoke() + ivTop -> topBtnClick?.invoke() + } + dialog.dismiss() + } + + if (dialogBg != null) root.background = getDrawable(dialogBg) + if (topBtnIconRes != null) ivTop.setImageResource(topBtnIconRes) else tvTitle.isVisible = false + if (title != null) tvTitle.text = getString(title) else tvTitle.isVisible = false + if (description != null) tvDescription.text = getString(description) else tvDescription.isVisible = false + if (bottomLeftStrRes != null) tvLeft.text = getString(bottomLeftStrRes) else tvLeft.isVisible = false + if (bottomRightStrRes != null) tvRight.text = getString(bottomRightStrRes) else tvRight.isVisible = false + } + + dialog.show() + return dialog +} /** * 双按钮的全局统一的dialog样式 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 7012379..4499c58 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 @@ -7,7 +7,6 @@ import android.util.AttributeSet import android.view.LayoutInflater import android.view.View import android.widget.LinearLayout -import androidx.core.content.ContextCompat.getString import androidx.core.graphics.toColorInt import com.remax.visualnovel.R import com.remax.visualnovel.databinding.LayoutChatMenuViewBinding @@ -16,7 +15,7 @@ import com.remax.visualnovel.entity.response.ChatBubble import com.remax.visualnovel.entity.response.ChatHistory import com.remax.visualnovel.entity.response.ChatMode import com.remax.visualnovel.entity.response.ChatSound -import com.remax.visualnovel.extension.showDoubleBtnDialog +import com.remax.visualnovel.extension.showConfirmDialog import com.remax.visualnovel.ui.chat.ui.expandableSelector.ExpandAiModelSelectView import com.remax.visualnovel.ui.chat.ui.expandableSelector.ExpandBubbleSelectView import com.remax.visualnovel.ui.chat.ui.expandableSelector.ExpandChatModeSelectView @@ -55,12 +54,15 @@ class ChatSettingView @JvmOverloads constructor( private fun initOtherClickEvent() { with (mBinding) { llDelete.setOnClickListener { - activity?.showDoubleBtnDialog( - getString(context, R.string.delete_chat), - getString(context, R.string.delete_chat_hint), - isDel = true, - topBtnText = getString(context, R.string.sure), - topBtnClick = { + activity?.showConfirmDialog ( + dialogBg = R.drawable.chat_delete_bg, + R.string.delete_chat, + R.string.delete_chat_hint, + R.mipmap.setting_delete, + null, + R.string.no, + R.string.sure, + { // TODO - do delete the chat } ) 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 index 92657b4..5a36360 100644 --- 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 @@ -112,7 +112,7 @@ class ExpandSoundSubView @JvmOverloads constructor( } tvSoundName.text = item.name - itemRoot.setBgColorDirectly(bgColor = ResUtil.getColor(if (item.isMale) R.color.male_bg else R.color.female_bg), radius = ResUtil.getPixelSize(R.dimen.dp_10).toFloat()) + itemRoot.setBgColorDirectly(bgColor = ResUtil.getColor(if (item.isMale) R.color.male_bg else R.color.female_bg), radius = ResUtil.getPixelSize(R.dimen.dp_10).toFloat(), bgDrawable = null) tvSoundDescrible.setTextColor(ResUtil.getColor(if (item.isMale) R.color.male_text_color else R.color.female_text_color)) tvSoundDescrible.text = item.description ivSelect.setImageResource(if (item.select) R.drawable.sound_item_selected else R.drawable.sound_item_unselected) diff --git a/VisualNovel/app/src/main/java/com/remax/visualnovel/widget/uitoken/CustomViewTokenExt.kt b/VisualNovel/app/src/main/java/com/remax/visualnovel/widget/uitoken/CustomViewTokenExt.kt index 4a4f015..790ef0e 100644 --- a/VisualNovel/app/src/main/java/com/remax/visualnovel/widget/uitoken/CustomViewTokenExt.kt +++ b/VisualNovel/app/src/main/java/com/remax/visualnovel/widget/uitoken/CustomViewTokenExt.kt @@ -7,6 +7,7 @@ import android.graphics.Outline import android.graphics.Shader import android.graphics.drawable.Drawable import android.graphics.drawable.GradientDrawable +import android.graphics.drawable.LayerDrawable import android.graphics.drawable.StateListDrawable import android.os.Build import android.util.TypedValue @@ -184,10 +185,12 @@ fun View.changeBackground(customViewToken: CustomViewToken) { customViewToken.run { if (advRadius > 0 || advStrokeWidth > 0 || advTopRightRadius > 0 || advTopLeftRadius > 0 || - advBottomLeftRadius > 0 || advBottomRightRadius > 0) { + advBottomLeftRadius > 0 || advBottomRightRadius > 0 + || advBgDrawable != null) { setBgColorDirectly( bgColor = advBgColor, radius = advRadius, + bgDrawable = advBgDrawable, topLeftRadius = if (advTopLeftRadius > 0F) advTopLeftRadius else advRadius, topRightRadius = if (advTopRightRadius > 0F) advTopRightRadius else advRadius, bottomRightRadius = if (advBottomRightRadius > 0F) advBottomRightRadius else advRadius, @@ -522,6 +525,7 @@ fun View.getGradientDrawable( fun View.setBgColorDirectly( bgColor: Int = 0, radius: Float = 0F, + bgDrawable: Drawable?, topLeftRadius: Float = radius, topRightRadius: Float = radius, bottomRightRadius: Float = radius, @@ -532,6 +536,7 @@ fun View.setBgColorDirectly( val resDrawable = StateListDrawable() val normalDrawable = getGradientDrawableDirectly( bgColor, + bgDrawable, topLeftRadius, topRightRadius, bottomRightRadius, @@ -546,6 +551,7 @@ fun View.setBgColorDirectly( fun View.getGradientDrawableDirectly( bgColor: Int = 0, + bgDrawable: Drawable?, topLeftRadius: Float = 0F, topRightRadius: Float = 0F, bottomRightRadius: Float = 0F, @@ -571,6 +577,6 @@ fun View.getGradientDrawableDirectly( bottomLeftRadius, bottomLeftRadius ) - return gradientDrawable -} + return if (bgDrawable != null) LayerDrawable(arrayOf(bgDrawable, gradientDrawable)) else gradientDrawable +} diff --git a/VisualNovel/app/src/main/java/com/remax/visualnovel/widget/uitoken/bean/CustomViewToken.kt b/VisualNovel/app/src/main/java/com/remax/visualnovel/widget/uitoken/bean/CustomViewToken.kt index 1b2890c..b3286ba 100644 --- a/VisualNovel/app/src/main/java/com/remax/visualnovel/widget/uitoken/bean/CustomViewToken.kt +++ b/VisualNovel/app/src/main/java/com/remax/visualnovel/widget/uitoken/bean/CustomViewToken.kt @@ -1,6 +1,7 @@ package com.remax.visualnovel.widget.uitoken.bean import android.graphics.Color +import android.graphics.drawable.Drawable /** * Created by HJW on 2022/9/1 @@ -47,6 +48,7 @@ data class CustomViewToken( //---------------------- New added ----------------------- var advBgColor:Int = Color.TRANSPARENT, + var advBgDrawable: Drawable? = null, var advRadius:Float = 0F, var advTopLeftRadius:Float = 0F, var advTopRightRadius:Float = 0F, diff --git a/VisualNovel/app/src/main/java/com/remax/visualnovel/widget/uitoken/view/UITokenTextView.kt b/VisualNovel/app/src/main/java/com/remax/visualnovel/widget/uitoken/view/UITokenTextView.kt index 2473292..0d1448f 100644 --- a/VisualNovel/app/src/main/java/com/remax/visualnovel/widget/uitoken/view/UITokenTextView.kt +++ b/VisualNovel/app/src/main/java/com/remax/visualnovel/widget/uitoken/view/UITokenTextView.kt @@ -81,6 +81,7 @@ open class UITokenTextView @JvmOverloads constructor(context: Context, private v // advBgColor = getColor(R.styleable.UITokenTextView_advBgColor, advBgColor) + advBgDrawable = getDrawable(R.styleable.UITokenTextView_advBgDrawable) advRadius = getDimension(R.styleable.UITokenTextView_advRadius, advRadius) advTopLeftRadius = getDimension(R.styleable.UITokenTextView_advTopLeftRadius, advTopLeftRadius) advTopRightRadius = getDimension(R.styleable.UITokenTextView_advTopRightRadius, advTopRightRadius) diff --git a/VisualNovel/app/src/main/res/layout/dialog_confirm.xml b/VisualNovel/app/src/main/res/layout/dialog_confirm.xml new file mode 100644 index 0000000..a8f6e90 --- /dev/null +++ b/VisualNovel/app/src/main/res/layout/dialog_confirm.xml @@ -0,0 +1,107 @@ + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/VisualNovel/app/src/main/res/layout/dialog_double_btn_2.xml b/VisualNovel/app/src/main/res/layout/dialog_double_btn_2.xml deleted file mode 100644 index 2ecc28b..0000000 --- a/VisualNovel/app/src/main/res/layout/dialog_double_btn_2.xml +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/VisualNovel/app/src/main/res/values/attrs.xml b/VisualNovel/app/src/main/res/values/attrs.xml index b6d23d3..c9f350c 100644 --- a/VisualNovel/app/src/main/res/values/attrs.xml +++ b/VisualNovel/app/src/main/res/values/attrs.xml @@ -61,6 +61,7 @@ + @@ -112,6 +113,7 @@ + @@ -150,6 +152,7 @@ + @@ -183,6 +186,7 @@ + @@ -216,6 +220,7 @@ + @@ -249,6 +254,7 @@ + @@ -282,6 +288,7 @@ + @@ -315,6 +322,7 @@ + diff --git a/VisualNovel/app/src/main/res/values/strings.xml b/VisualNovel/app/src/main/res/values/strings.xml index 49accbb..ece6d14 100644 --- a/VisualNovel/app/src/main/res/values/strings.xml +++ b/VisualNovel/app/src/main/res/values/strings.xml @@ -486,7 +486,7 @@ Connecting... Network connection issue. Please check your connection and try again. Start New Chat - Delete Chat + DELETE CHAT This will permanently remove all data. This action is irreversible. Are you sure? SURE NO