feat:完善红包入口逻辑
feat:初步可以领取红包
This commit is contained in:
@@ -77,18 +77,17 @@ class RedPackageOpenDialog : BaseDialog<DialogRedPackageOpenBinding>() {
|
||||
|
||||
@SuppressLint("CheckResult")
|
||||
private fun startRedPacketAnim(v: View) {
|
||||
RedPackageModel.openRedPackage(redPackageNotifyInfo.redEnvelopeId)
|
||||
RedPackageModel.openRedPackage(redPackageNotifyInfo.redEnvelopeId.toLong())
|
||||
.subscribe({
|
||||
redPackageInfo = it
|
||||
if (mObjectAnimator?.isRunning == false) {
|
||||
openRedPackage()
|
||||
}
|
||||
}
|
||||
, {
|
||||
binding?.ivOpen?.isEnabled = true
|
||||
mObjectAnimator?.cancel()
|
||||
SingleToastUtil.showToast(it.message)
|
||||
})
|
||||
}, {
|
||||
binding?.ivOpen?.isEnabled = true
|
||||
mObjectAnimator?.cancel()
|
||||
SingleToastUtil.showToast(it.message)
|
||||
})
|
||||
|
||||
mObjectAnimator = ObjectAnimator.ofFloat(v, "rotationY", 0f, 360f)
|
||||
mObjectAnimator?.let {
|
||||
@@ -120,31 +119,45 @@ class RedPackageOpenDialog : BaseDialog<DialogRedPackageOpenBinding>() {
|
||||
binding?.clOpened?.visibility = View.VISIBLE
|
||||
binding?.clRed?.visibility = View.GONE
|
||||
binding?.tvNicknameOpened?.text = redPackageNotifyInfo.sendUserNick
|
||||
ImageLoadUtils.loadAvatar(context, redPackageNotifyInfo.sendUserAvatar, binding?.ivAvatarOpened)
|
||||
ImageLoadUtils.loadAvatar(
|
||||
context,
|
||||
redPackageNotifyInfo.sendUserAvatar,
|
||||
binding?.ivAvatarOpened
|
||||
)
|
||||
packageInfo.redEnvelopeVO?.apply {
|
||||
binding?.tvContentOpened?.text = message
|
||||
when (packageInfo.redEnvelopeState) {
|
||||
SUCCESS -> {
|
||||
packageInfo.redEnvelopeItemVOs?.firstOrNull { item -> item.userVO.uid == UserUtils.getUserUid() }?.let {
|
||||
it.redEnvelopeGiftItemVOs?.apply {
|
||||
if (!isEmpty()) {
|
||||
val adapter = RedPackageGiftAdapter(R.layout.item_red_package_gift_top)
|
||||
binding?.rvGift?.visibility = View.VISIBLE
|
||||
binding?.tvDiamondNum?.visibility = View.GONE
|
||||
binding?.rvGift?.layoutManager = LinearLayoutManager(context, RecyclerView.HORIZONTAL, false)
|
||||
binding?.rvGift?.adapter = adapter
|
||||
adapter.setNewData(this)
|
||||
binding?.tvTips?.setTextColor(Color.WHITE)
|
||||
binding?.tvTips?.text = MessageView.SpannableBuilder(binding?.tvTips)
|
||||
.append(ResUtil.getString(R.string.avroom_redpackage_redpackageopendialog_03))
|
||||
.append(it.amount, ForegroundColorSpan(Color.parseColor("#FDCD00")))
|
||||
.append(ResUtil.getString(R.string.avroom_redpackage_redpackageopendialog_04))
|
||||
.build()
|
||||
packageInfo.redEnvelopeItemVOs?.firstOrNull { item -> item.userVO.uid == UserUtils.getUserUid() }
|
||||
?.let {
|
||||
it.redEnvelopeGiftItemVOs?.apply {
|
||||
if (!isEmpty()) {
|
||||
val adapter =
|
||||
RedPackageGiftAdapter(R.layout.item_red_package_gift_top)
|
||||
binding?.rvGift?.visibility = View.VISIBLE
|
||||
binding?.tvDiamondNum?.visibility = View.GONE
|
||||
binding?.rvGift?.layoutManager = LinearLayoutManager(
|
||||
context,
|
||||
RecyclerView.HORIZONTAL,
|
||||
false
|
||||
)
|
||||
binding?.rvGift?.adapter = adapter
|
||||
adapter.setNewData(this)
|
||||
binding?.tvTips?.setTextColor(Color.WHITE)
|
||||
binding?.tvTips?.text =
|
||||
MessageView.SpannableBuilder(binding?.tvTips)
|
||||
.append(ResUtil.getString(R.string.avroom_redpackage_redpackageopendialog_03))
|
||||
.append(
|
||||
it.amount,
|
||||
ForegroundColorSpan(Color.parseColor("#FDCD00"))
|
||||
)
|
||||
.append(ResUtil.getString(R.string.avroom_redpackage_redpackageopendialog_04))
|
||||
.build()
|
||||
}
|
||||
}
|
||||
binding?.tvDiamondNum?.text = it.amount.substringBefore(".")
|
||||
}
|
||||
binding?.tvDiamondNum?.text = it.amount.substringBefore(".")
|
||||
}
|
||||
if (!AvRoomDataManager.get().isRoomFans){
|
||||
if (!AvRoomDataManager.get().isRoomFans) {
|
||||
AvRoomDataManager.get().roomUid.let {
|
||||
CollectionRoomModel.get().followRoom("1", it)
|
||||
.subscribe { _: String? ->
|
||||
@@ -154,6 +167,7 @@ class RedPackageOpenDialog : BaseDialog<DialogRedPackageOpenBinding>() {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
TIME_OUT, REMAIN_ZERO, TIME_OUT_BACK -> {
|
||||
binding?.clOpened?.setBackgroundResource(R.drawable.room_red_package_get_bg)
|
||||
binding?.tvDiamondNum?.visibility = View.GONE
|
||||
|
@@ -9,15 +9,19 @@ import androidx.constraintlayout.widget.ConstraintLayout
|
||||
import androidx.core.view.isVisible
|
||||
import androidx.lifecycle.Observer
|
||||
import com.chuhai.utils.ServiceTime
|
||||
import com.chuhai.utils.ktx.singleClick
|
||||
import com.yizhuan.erban.R
|
||||
import com.yizhuan.erban.avroom.redpackage.open.RedPackageOpenDialog2
|
||||
import com.yizhuan.xchat_android_core.redpackage.RedPackageModel
|
||||
import com.yizhuan.xchat_android_core.redpackage.RedPackageNotifyInfo
|
||||
import com.yizhuan.xchat_android_core.support.room.RoomContext
|
||||
import com.yizhuan.xchat_android_core.support.room.RoomView
|
||||
import com.yizhuan.xchat_android_core.support.room.RoomWidget
|
||||
import io.reactivex.Observable
|
||||
import io.reactivex.android.schedulers.AndroidSchedulers
|
||||
import io.reactivex.disposables.CompositeDisposable
|
||||
import io.reactivex.disposables.Disposable
|
||||
import java.lang.RuntimeException
|
||||
import okhttp3.internal.toLongOrDefault
|
||||
import java.text.SimpleDateFormat
|
||||
import java.util.TimeZone
|
||||
import java.util.concurrent.TimeUnit
|
||||
@@ -29,7 +33,9 @@ import java.util.concurrent.TimeUnit
|
||||
class RedPackageWidget : ConstraintLayout, RoomWidget {
|
||||
private var roomView: RoomView? = null
|
||||
private var textView: TextView? = null
|
||||
private var numView: TextView? = null
|
||||
private var countDownDisposable: Disposable? = null
|
||||
private var data: RedPackageNotifyInfo? = null
|
||||
|
||||
// 倒计时格式(分:秒)
|
||||
private val mmssFormat by lazy(LazyThreadSafetyMode.NONE) {
|
||||
@@ -51,6 +57,8 @@ class RedPackageWidget : ConstraintLayout, RoomWidget {
|
||||
}
|
||||
}
|
||||
|
||||
private val compositeDisposable = CompositeDisposable()
|
||||
|
||||
constructor(context: Context) : super(context)
|
||||
constructor(context: Context, attrs: AttributeSet?) : super(context, attrs)
|
||||
constructor(context: Context, attrs: AttributeSet?, defStyleAttr: Int) : super(
|
||||
@@ -72,7 +80,13 @@ class RedPackageWidget : ConstraintLayout, RoomWidget {
|
||||
LayoutInflater.from(context)
|
||||
.inflate(R.layout.red_package_widget, this, true)
|
||||
textView = findViewById(R.id.tv_text)
|
||||
numView = findViewById(R.id.tv_num)
|
||||
this.setBackgroundResource(R.drawable.red_package_widget_bg)
|
||||
singleClick {
|
||||
data?.let {
|
||||
tryShowRedPackage(it)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -85,23 +99,19 @@ class RedPackageWidget : ConstraintLayout, RoomWidget {
|
||||
switchUI(false)
|
||||
return
|
||||
}
|
||||
logD("startCountDown() count:$count")
|
||||
countDownDisposable = Observable.intervalRange(0, count, 0, 500L, TimeUnit.MILLISECONDS)
|
||||
.observeOn(AndroidSchedulers.mainThread())
|
||||
.doOnNext {
|
||||
val gap = time - ServiceTime.time
|
||||
if (gap >= 0) {
|
||||
textView?.text = mmssFormat.format(gap)
|
||||
} else {
|
||||
switchUI(false)
|
||||
throw RuntimeException("状态已更新")
|
||||
countDownDisposable =
|
||||
Observable.intervalRange(0, count / 1000, 0, 1000L, TimeUnit.MILLISECONDS)
|
||||
.observeOn(AndroidSchedulers.mainThread())
|
||||
.doOnNext {
|
||||
val gap = time - ServiceTime.time
|
||||
if (gap >= 0) {
|
||||
textView?.text = mmssFormat.format(gap)
|
||||
}
|
||||
}
|
||||
}
|
||||
.doOnComplete {
|
||||
logD("doOnComplete()")
|
||||
switchUI(false)
|
||||
}
|
||||
.subscribe()
|
||||
.doOnComplete {
|
||||
switchUI(false)
|
||||
}
|
||||
.subscribe()
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -144,8 +154,21 @@ class RedPackageWidget : ConstraintLayout, RoomWidget {
|
||||
* 更新数据
|
||||
*/
|
||||
private fun loadData(data: RedPackageNotifyInfo?) {
|
||||
logD("loadData() data:$data")
|
||||
this.data = data
|
||||
stopCountDown()
|
||||
if (data != null) {
|
||||
val num = data.redEnvelopeNum
|
||||
if (num > 0) {
|
||||
if (num > 99) {
|
||||
numView?.text = "99+"
|
||||
} else {
|
||||
numView?.text = num.toString()
|
||||
}
|
||||
numView?.isVisible = true
|
||||
} else {
|
||||
numView?.isVisible = false
|
||||
}
|
||||
if (data.validityType == 1) {
|
||||
// 限时生效
|
||||
switchUI(true)
|
||||
@@ -160,7 +183,23 @@ class RedPackageWidget : ConstraintLayout, RoomWidget {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 尝试展示红包
|
||||
*/
|
||||
private fun tryShowRedPackage(data: RedPackageNotifyInfo) {
|
||||
val disposable = RedPackageModel.getRedPackage(data.redEnvelopeId.toLongOrDefault(0))
|
||||
.subscribe({ data ->
|
||||
roomView?.getActivity().let {
|
||||
RedPackageOpenDialog2.newInstance(data).show(it)
|
||||
}
|
||||
}, {
|
||||
// TODO 待实现
|
||||
})
|
||||
compositeDisposable.add(disposable)
|
||||
}
|
||||
|
||||
override fun onStop() {
|
||||
compositeDisposable.dispose()
|
||||
RoomContext.contextLiveData.removeObserver(contextObserver)
|
||||
stopCountDown()
|
||||
this.roomView = null
|
||||
|
@@ -6,17 +6,39 @@ import android.animation.AnimatorListenerAdapter
|
||||
import android.animation.ObjectAnimator
|
||||
import android.animation.ValueAnimator
|
||||
import android.annotation.SuppressLint
|
||||
import android.os.Bundle
|
||||
import android.view.View
|
||||
import android.view.WindowManager
|
||||
import android.view.animation.AccelerateDecelerateInterpolator
|
||||
import androidx.core.view.isVisible
|
||||
import com.chuhai.utils.ServiceTime
|
||||
import com.chuhai.utils.ktx.getColorById
|
||||
import com.chuhai.utils.ktx.singleClick
|
||||
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.xchat_android_core.auth.AuthModel
|
||||
import com.yizhuan.xchat_android_core.home.event.FollowRoomEvent
|
||||
import com.yizhuan.xchat_android_core.home.model.CollectionRoomModel
|
||||
import com.yizhuan.xchat_android_core.manager.AvRoomDataManager
|
||||
import com.yizhuan.xchat_android_core.pay.PayModel
|
||||
import com.yizhuan.xchat_android_core.redpackage.*
|
||||
import com.yizhuan.xchat_android_core.support.config.Constants
|
||||
import com.yizhuan.xchat_android_library.annatation.ActLayoutRes
|
||||
import com.yizhuan.xchat_android_library.utils.SingleToastUtil
|
||||
import io.reactivex.Observable
|
||||
import io.reactivex.android.schedulers.AndroidSchedulers
|
||||
import io.reactivex.disposables.Disposable
|
||||
import org.greenrobot.eventbus.EventBus
|
||||
import java.text.SimpleDateFormat
|
||||
import java.util.TimeZone
|
||||
import java.util.concurrent.TimeUnit
|
||||
|
||||
/**
|
||||
* Created by Max on 2023/10/24 10:14
|
||||
@@ -25,7 +47,36 @@ import com.yizhuan.xchat_android_library.utils.SingleToastUtil
|
||||
@ActLayoutRes(R.layout.red_package_open_dialog)
|
||||
class RedPackageOpenDialog2 : BaseDialog<RedPackageOpenDialogBinding>() {
|
||||
|
||||
private var mObjectAnimator: ObjectAnimator? = null
|
||||
private var btnAnimator: ObjectAnimator? = null
|
||||
|
||||
private var countDownDisposable: Disposable? = null
|
||||
|
||||
// 倒计时格式(分:秒)
|
||||
private val mmssFormat by lazy(LazyThreadSafetyMode.NONE) {
|
||||
SimpleDateFormat("mm:ss").apply {
|
||||
timeZone = TimeZone.getTimeZone("GMT+00:00")
|
||||
}
|
||||
}
|
||||
|
||||
private val data by lazy(LazyThreadSafetyMode.NONE) {
|
||||
arguments?.getSerializable(Constants.KEY_INTENT) as? RedPackageData
|
||||
}
|
||||
|
||||
// 打开红包的结果
|
||||
private var openResultRunnable: (() -> Unit)? = null
|
||||
|
||||
// 按钮动画是否有效(至少转过了一周期)
|
||||
private var isValidOfBtnAnimator: Boolean = false
|
||||
|
||||
companion object {
|
||||
fun newInstance(data: RedPackageData): RedPackageOpenDialog2 {
|
||||
return RedPackageOpenDialog2().apply {
|
||||
arguments = Bundle().apply {
|
||||
putSerializable(Constants.KEY_INTENT, data)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun onStart() {
|
||||
width = WindowManager.LayoutParams.MATCH_PARENT
|
||||
@@ -34,36 +85,275 @@ class RedPackageOpenDialog2 : BaseDialog<RedPackageOpenDialogBinding>() {
|
||||
}
|
||||
|
||||
override fun init() {
|
||||
val data = this.data
|
||||
if (data == null) {
|
||||
dismissAllowingStateLoss()
|
||||
return
|
||||
}
|
||||
dialog?.setCanceledOnTouchOutside(false)
|
||||
|
||||
binding.ivClose.setOnClickListener {
|
||||
binding.ivClose.singleClick {
|
||||
dismissAllowingStateLoss()
|
||||
}
|
||||
|
||||
binding.layoutBtn.setOnClickListener {
|
||||
startRedPacketAnim(it)
|
||||
binding.layoutBtn.singleClick {
|
||||
openRedPackage(data)
|
||||
}
|
||||
loadData(data)
|
||||
}
|
||||
|
||||
/**
|
||||
* 加载红包数据
|
||||
*/
|
||||
private fun loadData(data: RedPackageData) {
|
||||
// 默认不可见先
|
||||
binding.groupOpen.isVisible = true
|
||||
binding.groupResult.isVisible = false
|
||||
binding.ivSendAvatar.loadAvatar(data.avatar)
|
||||
binding.tvSendName.text = data.nick
|
||||
loadTips(data)
|
||||
loadBtnState(data)
|
||||
}
|
||||
|
||||
/**
|
||||
* 加载红包提示
|
||||
*/
|
||||
private fun loadTips(data: RedPackageData) {
|
||||
binding.tvOpenTips.isVisible = false
|
||||
when (data.kind) {
|
||||
2 -> {
|
||||
binding.tvOpenTips.setText(R.string.red_package_open_tips_follow)
|
||||
binding.tvOpenTips.isVisible = true
|
||||
}
|
||||
|
||||
3 -> {
|
||||
binding.tvOpenTips.setText(R.string.red_package_open_tips_share)
|
||||
binding.tvOpenTips.isVisible = true
|
||||
}
|
||||
|
||||
4 -> {
|
||||
binding.tvOpenTips.spannableBuilder()
|
||||
.appendText(text = R.string.red_package_open_tips_msg1.toStringRes())
|
||||
.appendText(
|
||||
text = data.message ?: "",
|
||||
textColor = getColorById(R.color.color_FFF87A)
|
||||
)
|
||||
.appendText(text = R.string.red_package_open_tips_msg2.toStringRes()).apply()
|
||||
binding.tvOpenTips.isVisible = true
|
||||
}
|
||||
|
||||
else -> {
|
||||
loadTips(data.message)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 加载按钮状态
|
||||
*/
|
||||
private fun loadBtnState(data: RedPackageData) {
|
||||
binding.groupBtnTime.isVisible = false
|
||||
binding.ivBtnGet.isVisible = false
|
||||
binding.tvBtnMsg.isVisible = false
|
||||
binding.layoutBtn.isEnabled = false
|
||||
|
||||
val gap = (data.beginTime ?: 0) - ServiceTime.time
|
||||
// 开始了?
|
||||
val started = gap < 0
|
||||
if (data.kind == 0) {
|
||||
// 旧厅内红包or全服红包
|
||||
switchToOpenState()
|
||||
return
|
||||
}
|
||||
if (data.kind == 1 || data.finish == true) {
|
||||
if (started) {
|
||||
switchToOpenState()
|
||||
} else {
|
||||
startCountDown(data.beginTime ?: 0)
|
||||
}
|
||||
} else {
|
||||
binding.tvBtnMsg.isVisible = true
|
||||
if (started) {
|
||||
binding.tvBtnMsg.setText(R.string.red_package_open_btn_no)
|
||||
} else {
|
||||
when (data.kind) {
|
||||
2 -> {
|
||||
binding.tvBtnMsg.setText(R.string.red_package_open_btn_follow)
|
||||
}
|
||||
|
||||
3 -> {
|
||||
binding.tvBtnMsg.setText(R.string.red_package_open_btn_share)
|
||||
}
|
||||
|
||||
4 -> {
|
||||
binding.tvBtnMsg.setText(R.string.red_package_open_btn_msg)
|
||||
}
|
||||
|
||||
else -> {
|
||||
binding.tvBtnMsg.text = ""
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 开始倒计时
|
||||
* @param time 开抢时间
|
||||
*/
|
||||
private fun startCountDown(time: Long) {
|
||||
stopCountDown()
|
||||
val count = time - ServiceTime.time
|
||||
if (count <= 0) {
|
||||
switchToOpenState()
|
||||
return
|
||||
}
|
||||
binding.groupBtnTime.isVisible = true
|
||||
countDownDisposable =
|
||||
Observable.intervalRange(0, count / 1000, 0, 1000L, TimeUnit.MILLISECONDS)
|
||||
.observeOn(AndroidSchedulers.mainThread())
|
||||
.doOnNext {
|
||||
val gap = time - ServiceTime.time
|
||||
if (gap >= 0) {
|
||||
binding.tvBtnTime.text = mmssFormat.format(gap)
|
||||
}
|
||||
}
|
||||
.doOnComplete {
|
||||
switchToOpenState()
|
||||
}
|
||||
.subscribe()
|
||||
}
|
||||
|
||||
|
||||
private fun stopCountDown() {
|
||||
if (countDownDisposable?.isDisposed == false) {
|
||||
countDownDisposable?.dispose()
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 切换为可抢状态
|
||||
*/
|
||||
private fun switchToOpenState() {
|
||||
binding.tvBtnMsg.isVisible = false
|
||||
binding.groupBtnTime.isVisible = false
|
||||
binding.ivBtnGet.isVisible = true
|
||||
binding.layoutBtn.isEnabled = true
|
||||
}
|
||||
|
||||
private fun loadTips(msg: String?) {
|
||||
if (msg.isNullOrEmpty()) {
|
||||
binding.tvOpenTips.isVisible = false
|
||||
} else {
|
||||
binding.tvOpenTips.text = msg
|
||||
binding.tvOpenTips.isVisible = true
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 打开红包
|
||||
*/
|
||||
private fun openRedPackage(data: RedPackageData) {
|
||||
binding.layoutBtn.isEnabled = false
|
||||
openResultRunnable = null
|
||||
startRedPacketAnim(binding.layoutBtn)
|
||||
RedPackageModel.openRedPackage(data.id ?: 0)
|
||||
.compose(bindUntilEvent(FragmentEvent.DESTROY_VIEW)).subscribe({
|
||||
if (isValidOfBtnAnimator) {
|
||||
btnAnimator?.cancel()
|
||||
openSuccess(it)
|
||||
} else {
|
||||
openResultRunnable = {
|
||||
openSuccess(it)
|
||||
}
|
||||
}
|
||||
}, {
|
||||
if (isValidOfBtnAnimator) {
|
||||
btnAnimator?.cancel()
|
||||
openFail(it)
|
||||
} else {
|
||||
openResultRunnable = {
|
||||
openFail(it)
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 打开红包响应成功
|
||||
* @param data 结果
|
||||
*/
|
||||
private fun openSuccess(data: RedPackageInfo) {
|
||||
binding.layoutContent.setBackgroundResource(R.drawable.red_package_result_bg)
|
||||
binding.groupOpen.isVisible = false
|
||||
binding.groupResult.isVisible = true
|
||||
binding.tvResultEmptyTips.isVisible = false
|
||||
binding.ivResultSendAvatar.loadAvatar(data.redEnvelopeVO?.userVO?.avatar)
|
||||
binding.tvResultSendName.text = data.redEnvelopeVO?.userVO?.nick ?: ""
|
||||
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)
|
||||
|
||||
val adapter = RedPackageResultAdapter()
|
||||
binding.recyclerView.adapter = adapter
|
||||
adapter.setNewData(data.redEnvelopeItemVOs)
|
||||
PayModel.get().getWalletInfo(AuthModel.get().currentUid).subscribe()
|
||||
|
||||
when (data.redEnvelopeState) {
|
||||
RedEnvelopeState.SUCCESS -> {
|
||||
val item = data.redEnvelopeItemVOs?.firstOrNull {
|
||||
it.userVO.uid == UserUtils.getUserUid()
|
||||
}
|
||||
binding.tvMoney.text = item?.amount?.substringBefore(".")
|
||||
|
||||
// 下面是延续老代码保留的
|
||||
if (!AvRoomDataManager.get().isRoomFans) {
|
||||
AvRoomDataManager.get().roomUid.let {
|
||||
CollectionRoomModel.get().followRoom("1", it)
|
||||
.subscribe { _: String? ->
|
||||
AvRoomDataManager.get().isRoomFans = true
|
||||
EventBus.getDefault().post(FollowRoomEvent())
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
RedEnvelopeState.TIME_OUT, RedEnvelopeState.REMAIN_ZERO, RedEnvelopeState.TIME_OUT_BACK -> {
|
||||
binding.groupResultMoney.isVisible = false
|
||||
binding.tvResultEmptyTips.isVisible = true
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 打开红包响应失败
|
||||
*/
|
||||
private fun openFail(throwable: Throwable) {
|
||||
switchToOpenState()
|
||||
btnAnimator?.cancel()
|
||||
SingleToastUtil.showToast(throwable.message)
|
||||
}
|
||||
|
||||
@SuppressLint("CheckResult")
|
||||
private fun startRedPacketAnim(v: View) {
|
||||
mObjectAnimator = ObjectAnimator.ofFloat(v, "rotationY", 0f, 360f)
|
||||
mObjectAnimator?.let {
|
||||
if (btnAnimator?.isRunning == true) {
|
||||
btnAnimator?.cancel()
|
||||
}
|
||||
isValidOfBtnAnimator = false
|
||||
btnAnimator = ObjectAnimator.ofFloat(v, "rotationY", 0f, 360f)
|
||||
btnAnimator?.let {
|
||||
it.duration = 1500
|
||||
it.repeatCount = ValueAnimator.INFINITE
|
||||
it.repeatMode = ValueAnimator.RESTART
|
||||
it.interpolator = AccelerateDecelerateInterpolator()
|
||||
it.addListener(object : AnimatorListenerAdapter() {
|
||||
|
||||
var isCanceled = false
|
||||
override fun onAnimationCancel(animation: Animator) {
|
||||
isCanceled = true
|
||||
}
|
||||
|
||||
override fun onAnimationEnd(animation: Animator) {
|
||||
if (!isCanceled) {
|
||||
SingleToastUtil.showToast("End")
|
||||
override fun onAnimationRepeat(animation: Animator) {
|
||||
super.onAnimationRepeat(animation)
|
||||
isValidOfBtnAnimator = true
|
||||
if (openResultRunnable != null) {
|
||||
animation.cancel()
|
||||
openResultRunnable?.invoke()
|
||||
}
|
||||
}
|
||||
})
|
||||
@@ -73,37 +363,13 @@ class RedPackageOpenDialog2 : BaseDialog<RedPackageOpenDialogBinding>() {
|
||||
|
||||
override fun onDestroyView() {
|
||||
super.onDestroyView()
|
||||
mObjectAnimator?.cancel()
|
||||
mObjectAnimator = null
|
||||
btnAnimator?.cancel()
|
||||
btnAnimator = null
|
||||
stopCountDown()
|
||||
}
|
||||
|
||||
override fun onPause() {
|
||||
super.onPause()
|
||||
dismissAllowingStateLoss()
|
||||
}
|
||||
|
||||
/**
|
||||
* 待领取状态
|
||||
*/
|
||||
private fun switchToPending(data: RedPackageNotifyInfo) {
|
||||
binding.layoutContent.setBackgroundResource(R.drawable.red_package_open_bg)
|
||||
binding.groupOpened.isVisible = false
|
||||
binding.groupOpen.isVisible = true
|
||||
|
||||
binding.ivSendAvatar.loadAvatar(data.sendUserAvatar)
|
||||
binding.tvSendName.text = data.sendUserNick
|
||||
}
|
||||
|
||||
/**
|
||||
* 打开状态
|
||||
*/
|
||||
private fun switchToOpened(data: RedPackageInfo) {
|
||||
binding.layoutContent.setBackgroundResource(R.drawable.red_package_opened_bg)
|
||||
binding.groupOpen.isVisible = false
|
||||
binding.groupOpened.isVisible = true
|
||||
|
||||
binding.ivOpenedSendAvatar.loadAvatar(data.redEnvelopeVO?.userVO?.avatar)
|
||||
binding.tvOpenedSendName.text = data.redEnvelopeVO?.userVO?.nick ?: ""
|
||||
binding.tvMoney.text = ""
|
||||
}
|
||||
}
|
@@ -0,0 +1,43 @@
|
||||
package com.yizhuan.erban.avroom.redpackage.open
|
||||
|
||||
import android.graphics.Color
|
||||
import android.widget.ImageView
|
||||
import com.chad.library.adapter.base.BaseQuickAdapter
|
||||
import com.chad.library.adapter.base.BaseViewHolder
|
||||
import com.yizhuan.erban.R
|
||||
import com.yizhuan.erban.ui.utils.loadAvatar
|
||||
import com.yizhuan.erban.utils.UserUtils
|
||||
import com.yizhuan.xchat_android_core.redpackage.RedEnvelopeItemVO
|
||||
import com.yizhuan.xchat_android_core.utils.subAndReplaceDot
|
||||
import com.yizhuan.xchat_android_library.utils.ResUtil
|
||||
import java.text.SimpleDateFormat
|
||||
import java.util.Locale
|
||||
|
||||
/**
|
||||
* Created by Max on 2023/10/27 20:24
|
||||
* Desc:红包领取结果
|
||||
**/
|
||||
class RedPackageResultAdapter :
|
||||
BaseQuickAdapter<RedEnvelopeItemVO, BaseViewHolder>(R.layout.red_package_open_item_result) {
|
||||
private val dateFormat = SimpleDateFormat(
|
||||
ResUtil.getString(R.string.avroom_redpackage_redpackageopenadapter_01),
|
||||
Locale.CHINA
|
||||
)
|
||||
|
||||
override fun convert(helper: BaseViewHolder, item: RedEnvelopeItemVO) {
|
||||
helper.getView<ImageView>(R.id.iv_avatar).loadAvatar(item.userVO.avatar)
|
||||
val isSelf = item.userVO.uid == UserUtils.getUserUid()
|
||||
helper.setText(
|
||||
R.id.tv_name,
|
||||
if (isSelf) ResUtil.getString(R.string.avroom_redpackage_redpackageopenadapter_02) else item.userVO.nick.subAndReplaceDot(
|
||||
6
|
||||
)
|
||||
)
|
||||
helper.setText(R.id.tv_money, item.amount.substringBefore("."))
|
||||
try {
|
||||
helper.setText(R.id.tv_time, dateFormat.format(item.createTime))
|
||||
} catch (e: Exception) {
|
||||
helper.setText(R.id.tv_time, "")
|
||||
}
|
||||
}
|
||||
}
|
@@ -36,7 +36,7 @@ class PublicRedPackageEditorFragment : BaseBindingFragment<RedPackagePublicFragm
|
||||
mBinding.etText.addDisableFilter("\n")
|
||||
mBinding.etText.setOnInputChangedListener {
|
||||
mBinding.tvTextLength.text =
|
||||
R.string.red_package_opened_count_format.toStringRes().format(this, 20)
|
||||
R.string.red_package_result_count_format.toStringRes().format(this, 20)
|
||||
true
|
||||
}
|
||||
|
||||
|
Before Width: | Height: | Size: 115 KiB After Width: | Height: | Size: 115 KiB |
9
app/src/main/res/drawable/red_package_bg_num.xml
Normal file
9
app/src/main/res/drawable/red_package_bg_num.xml
Normal file
@@ -0,0 +1,9 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<shape xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:shape="rectangle"
|
||||
android:useLevel="false">
|
||||
|
||||
<corners android:radius="6dp" />
|
||||
<solid android:color="#FFF44646" />
|
||||
|
||||
</shape>
|
@@ -2,6 +2,6 @@
|
||||
<shape xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:shape="rectangle">
|
||||
|
||||
<corners android:radius="28dp"/>
|
||||
<corners android:radius="8dp"/>
|
||||
<solid android:color="#FFE03654"/>
|
||||
</shape>
|
@@ -170,7 +170,8 @@
|
||||
android:id="@+id/group_open"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
app:constraint_referenced_ids="layout_btn,iv_send_avatar,tv_send_name,tv_open_tips" />
|
||||
app:constraint_referenced_ids="layout_btn,iv_send_avatar,tv_send_name,tv_open_tips"
|
||||
tools:visibility="visible" />
|
||||
|
||||
<androidx.constraintlayout.widget.Guideline
|
||||
android:id="@+id/line_money_top"
|
||||
@@ -180,7 +181,14 @@
|
||||
app:layout_constraintGuide_percent="0.1909" />
|
||||
|
||||
<androidx.constraintlayout.widget.Guideline
|
||||
android:id="@+id/line_opened_send_avatar_top"
|
||||
android:id="@+id/line_empty_tips_top"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="horizontal"
|
||||
app:layout_constraintGuide_percent="0.236" />
|
||||
|
||||
<androidx.constraintlayout.widget.Guideline
|
||||
android:id="@+id/line_result_send_avatar_top"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="horizontal"
|
||||
@@ -222,37 +230,50 @@
|
||||
android:id="@+id/tv_money_tips"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/red_package_opened_money_tips"
|
||||
android:text="@string/red_package_result_money_tips"
|
||||
android:textColor="@color/color_767585"
|
||||
android:textSize="12sp"
|
||||
android:textSize="12dp"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@id/tv_money" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tv_result_empty_tips"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/red_package_result_empty_tips"
|
||||
android:textColor="@color/color_767585"
|
||||
android:textSize="12dp"
|
||||
android:visibility="gone"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toTopOf="@id/line_empty_tips_top"
|
||||
tools:visibility="visible" />
|
||||
|
||||
<com.yizhuan.erban.common.widget.CircleImageView
|
||||
android:id="@+id/iv_opened_send_avatar"
|
||||
android:id="@+id/iv_result_send_avatar"
|
||||
android:layout_width="26dp"
|
||||
android:layout_height="26dp"
|
||||
app:cborder_color="@color/white"
|
||||
app:cborder_width="1dp"
|
||||
app:layout_constraintEnd_toStartOf="@id/tv_opened_send_name"
|
||||
app:layout_constraintEnd_toStartOf="@id/tv_result_send_name"
|
||||
app:layout_constraintHorizontal_chainStyle="packed"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toTopOf="@id/line_opened_send_avatar_top"
|
||||
app:layout_constraintTop_toTopOf="@id/line_result_send_avatar_top"
|
||||
tools:src="@drawable/default_avatar" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tv_opened_send_name"
|
||||
android:id="@+id/tv_result_send_name"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginStart="3dp"
|
||||
android:maxLines="1"
|
||||
android:textColor="@color/white"
|
||||
android:textSize="14sp"
|
||||
app:layout_constraintBottom_toBottomOf="@id/iv_opened_send_avatar"
|
||||
android:textSize="14dp"
|
||||
app:layout_constraintBottom_toBottomOf="@id/iv_result_send_avatar"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toEndOf="@id/iv_opened_send_avatar"
|
||||
app:layout_constraintTop_toTopOf="@id/iv_opened_send_avatar"
|
||||
app:layout_constraintStart_toEndOf="@id/iv_result_send_avatar"
|
||||
app:layout_constraintTop_toTopOf="@id/iv_result_send_avatar"
|
||||
tools:text="Name" />
|
||||
|
||||
<TextView
|
||||
@@ -266,10 +287,10 @@
|
||||
android:maxLines="1"
|
||||
android:text="@string/red_package_msg_def"
|
||||
android:textColor="@color/white"
|
||||
android:textSize="14sp"
|
||||
android:textSize="14dp"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@id/iv_opened_send_avatar" />
|
||||
app:layout_constraintTop_toBottomOf="@id/iv_result_send_avatar" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tv_count"
|
||||
@@ -277,9 +298,9 @@
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginEnd="8dp"
|
||||
android:alpha="0.8"
|
||||
android:text="@string/red_package_opened_count_format"
|
||||
android:text="@string/red_package_result_count_format"
|
||||
android:textColor="@color/white"
|
||||
android:textSize="10sp"
|
||||
android:textSize="10dp"
|
||||
app:layout_constraintEnd_toEndOf="@id/recyclerView"
|
||||
app:layout_constraintTop_toBottomOf="@id/line_count_top" />
|
||||
|
||||
@@ -289,7 +310,7 @@
|
||||
android:layout_height="0dp"
|
||||
android:layout_marginTop="8dp"
|
||||
android:layout_marginBottom="5dp"
|
||||
android:background="@drawable/shape_e03654_28"
|
||||
android:background="@drawable/shape_e03654_8"
|
||||
android:orientation="vertical"
|
||||
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
|
||||
app:layout_constraintBottom_toTopOf="@id/tv_count"
|
||||
@@ -297,14 +318,23 @@
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@id/tv_message"
|
||||
app:layout_constraintWidth_percent="0.6819"
|
||||
tools:listitem="@layout/red_package_open_item_record" />
|
||||
tools:listitem="@layout/red_package_open_item_result" />
|
||||
|
||||
<androidx.constraintlayout.widget.Group
|
||||
android:id="@+id/group_opened"
|
||||
android:id="@+id/group_result_money"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:visibility="gone"
|
||||
app:constraint_referenced_ids="recyclerView,tv_count,tv_message,tv_opened_send_name,iv_opened_send_avatar,tv_money,tv_money_tips,iv_money" />
|
||||
app:constraint_referenced_ids="tv_money,tv_money_tips,iv_money"
|
||||
tools:visibility="visible" />
|
||||
|
||||
<androidx.constraintlayout.widget.Group
|
||||
android:id="@+id/group_result"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:visibility="gone"
|
||||
app:constraint_referenced_ids="recyclerView,tv_count,tv_message,tv_result_send_name,iv_result_send_avatar,tv_money,tv_money_tips,iv_money,tv_result_empty_tips"
|
||||
tools:visibility="gone" />
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
|
@@ -4,9 +4,9 @@
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
tools:layout_width="58dp"
|
||||
tools:layout_height="58dp"
|
||||
android:background="@drawable/red_package_widget_bg"
|
||||
tools:layout_height="58dp"
|
||||
tools:layout_width="58dp"
|
||||
tools:parentTag="androidx.constraintlayout.widget.ConstraintLayout">
|
||||
|
||||
<TextView
|
||||
@@ -16,6 +16,7 @@
|
||||
android:layout_marginBottom="10dp"
|
||||
android:background="@drawable/red_package_widget_bg_text"
|
||||
android:gravity="center"
|
||||
android:includeFontPadding="false"
|
||||
android:text="@string/red_package_widget_get"
|
||||
android:textColor="@color/white"
|
||||
android:textSize="9dp"
|
||||
@@ -23,4 +24,20 @@
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tv_num"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="12dp"
|
||||
android:layout_marginTop="4dp"
|
||||
android:layout_marginEnd="4dp"
|
||||
android:background="@drawable/red_package_bg_num"
|
||||
android:gravity="center"
|
||||
android:includeFontPadding="false"
|
||||
android:minWidth="12dp"
|
||||
android:paddingHorizontal="3dp"
|
||||
android:text="1"
|
||||
android:textColor="@color/white"
|
||||
android:textSize="9dp"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent" />
|
||||
</merge>
|
@@ -708,4 +708,5 @@
|
||||
<color name="color_EBEEF5">#EBEEF5</color>
|
||||
<color name="color_94959C">#94959C</color>
|
||||
<color name="color_BF461F">#FFBF461F</color>
|
||||
<color name="color_FFF87A">#FFFFF87A</color>
|
||||
</resources>
|
||||
|
@@ -5167,8 +5167,18 @@
|
||||
<string name="red_package_msg_def">恭喜發財,大吉大利!</string>
|
||||
<string name="red_package_open_btn_await">後開搶</string>
|
||||
<string name="red_package_open_btn_msg">發彈幕\n搶紅包</string>
|
||||
<string name="red_package_opened_money_tips">已存入錢包,請到我的收益確認</string>
|
||||
<string name="red_package_opened_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_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_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_msg1">發送彈幕</string>
|
||||
<string name="red_package_open_tips_msg2">可搶紅包</string>
|
||||
<string name="red_package_result_empty_tips">搶完了,下次早點來哦~</string>
|
||||
|
||||
|
||||
</resources>
|
Reference in New Issue
Block a user