feat:完善抢红包文案和交互

This commit is contained in:
Max
2023-10-27 11:21:13 +08:00
parent b9a2f03184
commit d7da6d4be4
15 changed files with 104 additions and 47 deletions

View File

@@ -1300,6 +1300,9 @@ open class BaseRoomFragment<V : IBaseRoomView?, P : BaseRoomPresenter<V>?> :
val dialog = RoomOperationDialog(mContext)
dialog.setOnActionListener {
redPackageSendDialog = RedPackageSendDialog2()
redPackageSendDialog?.setOnDismissListener {
redPackageSendDialog = null
}
redPackageSendDialog?.show(activity)
}
dialog.show()

View File

@@ -18,11 +18,10 @@ import com.chuhai.utils.ktx.toStringRes
import com.chuhai.utils.spannable.spannableBuilder
import com.trello.rxlifecycle3.android.FragmentEvent
import com.yizhuan.erban.R
import com.yizhuan.erban.avroom.redpackage.RedPackageOpenDialog
import com.yizhuan.erban.base.BaseDialog
import com.yizhuan.erban.databinding.RedPackageOpenDialogBinding
import com.yizhuan.erban.ui.utils.loadAvatar
import com.yizhuan.erban.utils.UserUtils
import com.yizhuan.erban.ui.widget.recyclerview.decoration.ColorDecoration
import com.yizhuan.xchat_android_core.auth.AuthModel
import com.yizhuan.xchat_android_core.home.event.FollowRoomEvent
import com.yizhuan.xchat_android_core.home.model.CollectionRoomModel
@@ -68,6 +67,12 @@ class RedPackageOpenDialog2 : BaseDialog<RedPackageOpenDialogBinding>() {
// 按钮动画是否有效(至少转过了一周期)
private var isValidOfBtnAnimator: Boolean = false
// 按钮执行函数
private var btnRunnable: (() -> Unit)? = null
// 打开红包接口请求中
private var opening = false
companion object {
fun newInstance(data: RedPackageData): RedPackageOpenDialog2 {
return RedPackageOpenDialog2().apply {
@@ -97,7 +102,7 @@ class RedPackageOpenDialog2 : BaseDialog<RedPackageOpenDialogBinding>() {
}
binding.layoutBtn.singleClick {
openRedPackage(data)
btnRunnable?.invoke()
}
loadData(data)
}
@@ -122,12 +127,22 @@ class RedPackageOpenDialog2 : BaseDialog<RedPackageOpenDialogBinding>() {
binding.tvOpenTips.isVisible = false
when (data.kind) {
2 -> {
binding.tvOpenTips.setText(R.string.red_package_open_tips_follow)
binding.tvOpenTips.spannableBuilder()
.appendText(
text = R.string.red_package_open_tips_follow.toStringRes(),
textColor = getColorById(R.color.color_FFF87A)
)
.appendText(text = R.string.red_package_open_tips_msg_end.toStringRes()).apply()
binding.tvOpenTips.isVisible = true
}
3 -> {
binding.tvOpenTips.setText(R.string.red_package_open_tips_share)
binding.tvOpenTips.spannableBuilder()
.appendText(
text = R.string.red_package_open_tips_share.toStringRes(),
textColor = getColorById(R.color.color_FFF87A)
)
.appendText(text = R.string.red_package_open_tips_msg_end.toStringRes()).apply()
binding.tvOpenTips.isVisible = true
}
@@ -138,7 +153,7 @@ class RedPackageOpenDialog2 : BaseDialog<RedPackageOpenDialogBinding>() {
text = data.message ?: "",
textColor = getColorById(R.color.color_FFF87A)
)
.appendText(text = R.string.red_package_open_tips_msg2.toStringRes()).apply()
.appendText(text = R.string.red_package_open_tips_msg_end.toStringRes()).apply()
binding.tvOpenTips.isVisible = true
}
@@ -155,7 +170,7 @@ class RedPackageOpenDialog2 : BaseDialog<RedPackageOpenDialogBinding>() {
binding.groupBtnTime.isVisible = false
binding.ivBtnGet.isVisible = false
binding.tvBtnMsg.isVisible = false
binding.layoutBtn.isEnabled = false
btnRunnable = null
val gap = (data.beginTime ?: 0) - ServiceTime.time
// 开始了?
@@ -175,18 +190,30 @@ class RedPackageOpenDialog2 : BaseDialog<RedPackageOpenDialogBinding>() {
binding.tvBtnMsg.isVisible = true
if (started) {
binding.tvBtnMsg.setText(R.string.red_package_open_btn_no)
btnRunnable = {
SingleToastUtil.showToast(R.string.red_package_open_no_tips)
}
} else {
when (data.kind) {
2 -> {
binding.tvBtnMsg.setText(R.string.red_package_open_btn_follow)
btnRunnable = {
SingleToastUtil.showToast("2")
}
}
3 -> {
binding.tvBtnMsg.setText(R.string.red_package_open_btn_share)
btnRunnable = {
SingleToastUtil.showToast("3")
}
}
4 -> {
binding.tvBtnMsg.setText(R.string.red_package_open_btn_msg)
btnRunnable = {
SingleToastUtil.showToast("4")
}
}
else -> {
@@ -239,7 +266,13 @@ class RedPackageOpenDialog2 : BaseDialog<RedPackageOpenDialogBinding>() {
binding.tvBtnMsg.isVisible = false
binding.groupBtnTime.isVisible = false
binding.ivBtnGet.isVisible = true
binding.layoutBtn.isEnabled = true
btnRunnable = {
if (!opening) {
this.data?.let {
openRedPackage(it)
}
}
}
}
private fun loadTips(msg: String?) {
@@ -255,29 +288,29 @@ class RedPackageOpenDialog2 : BaseDialog<RedPackageOpenDialogBinding>() {
* 打开红包
*/
private fun openRedPackage(data: RedPackageData) {
binding.layoutBtn.isEnabled = false
opening = true
openResultRunnable = null
startRedPacketAnim(binding.layoutBtn)
RedPackageModel.openRedPackage(data.id ?: 0)
.compose(bindUntilEvent(FragmentEvent.DESTROY_VIEW)).subscribe({
if (isValidOfBtnAnimator) {
btnAnimator?.cancel()
openSuccess(it)
} else {
openResultRunnable = {
if (isValidOfBtnAnimator) {
btnAnimator?.cancel()
openSuccess(it)
} else {
openResultRunnable = {
openSuccess(it)
}
}
}
}, {
if (isValidOfBtnAnimator) {
btnAnimator?.cancel()
openFail(it)
} else {
openResultRunnable = {
}, {
if (isValidOfBtnAnimator) {
btnAnimator?.cancel()
openFail(it)
} else {
openResultRunnable = {
openFail(it)
}
}
}
})
})
}
/**
@@ -291,6 +324,8 @@ class RedPackageOpenDialog2 : BaseDialog<RedPackageOpenDialogBinding>() {
binding.tvResultEmptyTips.isVisible = false
binding.ivResultSendAvatar.loadAvatar(data.redEnvelopeVO?.userVO?.avatar)
binding.tvResultSendName.text = data.redEnvelopeVO?.userVO?.nick ?: ""
val name = data.redEnvelopeVO?.userVO?.nick ?: ""
binding.tvResultSendName.text = name.take(8) + "..的紅包"
binding.tvMessage.text = data.redEnvelopeVO?.message
binding.tvCount.text = R.string.red_package_result_count_format.toStringRes()
.format(data.redEnvelopeVO?.pickNum ?: 0, data.redEnvelopeVO?.totalNum ?: 0)
@@ -302,10 +337,8 @@ class RedPackageOpenDialog2 : BaseDialog<RedPackageOpenDialogBinding>() {
when (data.redEnvelopeState) {
RedEnvelopeState.SUCCESS -> {
val item = data.redEnvelopeItemVOs?.firstOrNull {
it.userVO.uid == UserUtils.getUserUid()
}
binding.tvMoney.text = item?.amount?.substringBefore(".")
binding.tvMoney.text = data.currentUserAmount.toString().substringBefore(".")
binding.groupResultMoney.isVisible = true
// 下面是延续老代码保留的
if (!AvRoomDataManager.get().isRoomFans) {
@@ -324,6 +357,7 @@ class RedPackageOpenDialog2 : BaseDialog<RedPackageOpenDialogBinding>() {
binding.tvResultEmptyTips.isVisible = true
}
}
opening = false
}
/**
@@ -333,6 +367,7 @@ class RedPackageOpenDialog2 : BaseDialog<RedPackageOpenDialogBinding>() {
switchToOpenState()
btnAnimator?.cancel()
SingleToastUtil.showToast(throwable.message)
opening = false
}
@SuppressLint("CheckResult")

View File

@@ -1,7 +1,8 @@
package com.yizhuan.erban.avroom.redpackage.open
import android.graphics.Color
import android.view.View
import android.widget.ImageView
import androidx.core.view.isVisible
import com.chad.library.adapter.base.BaseQuickAdapter
import com.chad.library.adapter.base.BaseViewHolder
import com.yizhuan.erban.R
@@ -39,5 +40,6 @@ class RedPackageResultAdapter :
} catch (e: Exception) {
helper.setText(R.id.tv_time, "")
}
helper.getView<View>(R.id.v_line).isVisible = helper.bindingAdapterPosition != itemCount - 1
}
}

View File

@@ -4,7 +4,6 @@ package com.yizhuan.erban.avroom.redpackage.send
import android.annotation.SuppressLint
import android.view.Gravity
import android.view.WindowManager
import com.bumptech.glide.manager.Lifecycle
import com.chuhai.utils.ktx.singleClick
import com.chuhai.utils.ktx.toStringRes
import com.yizhuan.erban.R

View File

@@ -71,6 +71,7 @@ abstract class BaseDialog<T : ViewBinding> : RxDialogFragment() {
override fun onDestroyView() {
super.onDestroyView()
_binding = null
this.onDismissListener = null
}
abstract fun init()

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 115 KiB

After

Width:  |  Height:  |  Size: 113 KiB

View File

@@ -2,6 +2,6 @@
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<corners android:radius="8dp"/>
<corners android:radius="10dp"/>
<solid android:color="#FFE03654"/>
</shape>

View File

@@ -143,6 +143,7 @@
android:id="@+id/tv_btn_msg"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"
android:text="@string/red_package_open_btn_msg"
android:textColor="@color/color_BF461F"
android:textSize="14dp"
@@ -199,7 +200,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
app:layout_constraintGuide_percent="0.8969" />
app:layout_constraintGuide_percent="0.854" />
<ImageView
android:id="@+id/iv_money"
@@ -310,8 +311,9 @@
android:layout_height="0dp"
android:layout_marginTop="8dp"
android:layout_marginBottom="5dp"
android:background="@drawable/shape_e03654_8"
android:background="@drawable/shape_e03654_10"
android:orientation="vertical"
android:scrollbars="none"
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
app:layout_constraintBottom_toTopOf="@id/tv_count"
app:layout_constraintEnd_toEndOf="parent"

View File

@@ -76,5 +76,16 @@
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@id/tv_money"
app:layout_constraintTop_toTopOf="parent" />
<View
android:id="@+id/v_line"
android:layout_width="match_parent"
android:layout_height="2px"
android:layout_marginHorizontal="14dp"
android:background="@color/color_ffffff_30"
android:visibility="gone"
app:layout_constraintBottom_toBottomOf="parent"
tools:visibility="visible" />
</androidx.constraintlayout.widget.ConstraintLayout>
</layout>

View File

@@ -709,4 +709,5 @@
<color name="color_94959C">#94959C</color>
<color name="color_BF461F">#FFBF461F</color>
<color name="color_FFF87A">#FFFFF87A</color>
<color name="color_ffffff_30">#4CFFFFFF</color>
</resources>

View File

@@ -5170,14 +5170,15 @@
<string name="red_package_open_btn_share">分享房間\n搶紅包</string>
<string name="red_package_open_btn_follow">關注主播\n搶紅包</string>
<string name="red_package_open_btn_no">未參與活動</string>
<string name="red_package_open_no_tips">未參與活動,無法搶該紅包</string>
<string name="red_package_result_money_tips">已存入錢包,請到我的收益確認</string>
<string name="red_package_result_count_format">已領取%s/%s個</string>
<string name="red_package_widget_get">搶紅包</string>
<string name="red_package_msg_empty_tips">請輸入彈幕內容</string>
<string name="red_package_open_tips_follow">關注主播可搶紅包</string>
<string name="red_package_open_tips_share">分享房間可搶紅包</string>
<string name="red_package_open_tips_follow">關注主播</string>
<string name="red_package_open_tips_share">对外分享房間</string>
<string name="red_package_open_tips_msg1">發送彈幕</string>
<string name="red_package_open_tips_msg2">可搶紅包</string>
<string name="red_package_open_tips_msg_end">可搶紅包</string>
<string name="red_package_result_empty_tips">搶完了,下次早點來哦~</string>

View File

@@ -8,7 +8,7 @@ import java.io.Serializable
* Desc:红包数据
**/
data class RedPackageData(
val amount: Long?,
val amount: Double?,
val avatar: String?,
val beginTime: Long?,
val commissionAmount: Long?,

View File

@@ -2,17 +2,19 @@ package com.yizhuan.xchat_android_core.redpackage
data class RedPackageInfo(
var redEnvelopeItemVOs: List<RedEnvelopeItemVO>? = null,
var redEnvelopeVO: RedEnvelopeVO? = null,
var redEnvelopeItemVOs: List<RedEnvelopeItemVO>? = null,
var redEnvelopeVO: RedEnvelopeVO? = null,
/**
* ING(1, “开抢中”)
* TIME_OUT(2, “过时”)
* REMAIN_ZERO(3, “抢光了”)
* SUCCESS(4, “抢到了”)
* WILL(5, “将要开始”)
* TIME_OUT_BACK(6, “超时已退还”)
*/
var redEnvelopeState: Int = 0
/**
* ING(1, “开抢中”)
* TIME_OUT(2, “过时”)
* REMAIN_ZERO(3, “抢光了”)
* SUCCESS(4, “抢到了”)
* WILL(5, “将要开始”)
* TIME_OUT_BACK(6, “超时已退还”)
*/
var redEnvelopeState: Int = 0,
// 领取金额
var currentUserAmount: Double?
)