diff --git a/app/src/main/java/kr/co/vividnext/sodalive/live/LiveApi.kt b/app/src/main/java/kr/co/vividnext/sodalive/live/LiveApi.kt index c086888..6afd2dd 100644 --- a/app/src/main/java/kr/co/vividnext/sodalive/live/LiveApi.kt +++ b/app/src/main/java/kr/co/vividnext/sodalive/live/LiveApi.kt @@ -21,6 +21,7 @@ import kr.co.vividnext.sodalive.live.room.donation.GetLiveRoomDonationStatusResp import kr.co.vividnext.sodalive.live.room.donation.GetLiveRoomDonationTotalResponse import kr.co.vividnext.sodalive.live.room.donation.LiveRoomDonationMessage import kr.co.vividnext.sodalive.live.room.donation.LiveRoomDonationRequest +import kr.co.vividnext.sodalive.live.room.donation.LiveRoomDonationResponse import kr.co.vividnext.sodalive.live.room.info.GetRoomInfoResponse import kr.co.vividnext.sodalive.live.room.kick_out.LiveRoomKickOutRequest import kr.co.vividnext.sodalive.live.room.profile.GetLiveRoomUserProfileResponse @@ -156,11 +157,11 @@ interface LiveApi { @Header("Authorization") authHeader: String ): Single> - @POST("/live/room/donation") + @POST("/live/room/donation/v2") fun donation( @Body request: LiveRoomDonationRequest, @Header("Authorization") authHeader: String - ): Single> + ): Single> @POST("/live/room/donation/refund/{id}") fun refundDonation( diff --git a/app/src/main/java/kr/co/vividnext/sodalive/live/LiveRepository.kt b/app/src/main/java/kr/co/vividnext/sodalive/live/LiveRepository.kt index fd9a555..2987c8c 100644 --- a/app/src/main/java/kr/co/vividnext/sodalive/live/LiveRepository.kt +++ b/app/src/main/java/kr/co/vividnext/sodalive/live/LiveRepository.kt @@ -14,6 +14,7 @@ import kr.co.vividnext.sodalive.live.room.create.CreateLiveRoomResponse import kr.co.vividnext.sodalive.live.room.detail.GetRoomDetailResponse import kr.co.vividnext.sodalive.live.room.donation.DeleteLiveRoomDonationMessage import kr.co.vividnext.sodalive.live.room.donation.LiveRoomDonationRequest +import kr.co.vividnext.sodalive.live.room.donation.LiveRoomDonationResponse import kr.co.vividnext.sodalive.live.room.kick_out.LiveRoomKickOutRequest import kr.co.vividnext.sodalive.live.room.menu.MenuApi import kr.co.vividnext.sodalive.user.CreatorFollowRequestRequest @@ -163,7 +164,7 @@ class LiveRepository( can: Int, message: String, token: String - ): Single> { + ): Single> { return api.donation( request = LiveRoomDonationRequest( roomId = roomId, diff --git a/app/src/main/java/kr/co/vividnext/sodalive/live/room/LiveRoomActivity.kt b/app/src/main/java/kr/co/vividnext/sodalive/live/room/LiveRoomActivity.kt index 1870d5f..722885d 100644 --- a/app/src/main/java/kr/co/vividnext/sodalive/live/room/LiveRoomActivity.kt +++ b/app/src/main/java/kr/co/vividnext/sodalive/live/room/LiveRoomActivity.kt @@ -68,6 +68,7 @@ import kr.co.vividnext.sodalive.live.room.donation.LiveRoomDonationDialog import kr.co.vividnext.sodalive.live.room.donation.LiveRoomDonationMessageDialog import kr.co.vividnext.sodalive.live.room.donation.LiveRoomDonationMessageViewModel import kr.co.vividnext.sodalive.live.room.donation.LiveRoomDonationRankingDialog +import kr.co.vividnext.sodalive.live.room.donation.LiveRoomDonationResponse import kr.co.vividnext.sodalive.live.room.info.GetRoomInfoResponse import kr.co.vividnext.sodalive.live.room.profile.LiveRoomProfileDialog import kr.co.vividnext.sodalive.live.room.profile.LiveRoomProfileListAdapter @@ -124,6 +125,16 @@ class LiveRoomActivity : BaseActivity(ActivityLiveRoomB } } + private val signatureList = mutableListOf() + private var signature: LiveRoomDonationResponse? = null + set(value) { + field = value + + if (field != null) { + showSignatureImage() + } + } + private var isShowSignatureImage = false private val countDownTimer = object : CountDownTimer(remainingNoChattingTime * 1000, 1000) { @@ -1270,13 +1281,14 @@ class LiveRoomActivity : BaseActivity(ActivityLiveRoomB private fun donation(can: Int, message: String) { val rawMessage = "${can}캔을 후원하셨습니다.\uD83D\uDCB0\uD83E\uDE99" - viewModel.donation(roomId, can, message) { signatureImage -> + viewModel.donation(roomId, can, message) { signature -> val donationRawMessage = Gson().toJson( LiveRoomChatRawMessage( type = LiveRoomChatRawMessageType.DONATION, message = rawMessage, can = can, - signatureImageUrl = signatureImage, + signature = signature, + signatureImageUrl = signature?.imageUrl, donationMessage = message ) ) @@ -1300,7 +1312,7 @@ class LiveRoomActivity : BaseActivity(ActivityLiveRoomB ) invalidateChat() viewModel.addDonationCan(can) - addSignatureImage(signatureImage) + addSignature(signature) } }, onFailure = { @@ -1407,9 +1419,12 @@ class LiveRoomActivity : BaseActivity(ActivityLiveRoomB ) invalidateChat() viewModel.addDonationCan(rawMessage.can) - addSignatureImage( - imageUrl = rawMessage.signatureImageUrl ?: "" - ) + + if (rawMessage.signature != null) { + addSignature(rawMessage.signature) + } else if (rawMessage.signatureImageUrl != null) { + addSignatureImage(rawMessage.signatureImageUrl) + } } } @@ -1762,8 +1777,37 @@ class LiveRoomActivity : BaseActivity(ActivityLiveRoomB } } + private fun addSignature(signature: LiveRoomDonationResponse?) { + if (signature != null) { + if (!isShowSignatureImage) { + this.signature = signature + isShowSignatureImage = true + } else { + signatureList.add(signature) + } + } + } + private fun showSignatureImage() { - if (signatureImageUrl.isNotBlank()) { + if (signature != null) { + Glide + .with(this) + .load(signature!!.imageUrl) + .into(binding.ivSignature) + + binding.ivSignature.visibility = View.VISIBLE + + handler.postDelayed({ + if (signatureList.isNotEmpty()) { + signature = signatureList.removeAt(0) + } else { + signature = null + isShowSignatureImage = false + binding.ivSignature.setImageDrawable(null) + binding.ivSignature.visibility = View.GONE + } + }, signature!!.time * 1000L) + } else if (signatureImageUrl.isNotBlank()) { Glide .with(this) .load(signatureImageUrl) diff --git a/app/src/main/java/kr/co/vividnext/sodalive/live/room/LiveRoomViewModel.kt b/app/src/main/java/kr/co/vividnext/sodalive/live/room/LiveRoomViewModel.kt index 884f036..208ff61 100644 --- a/app/src/main/java/kr/co/vividnext/sodalive/live/room/LiveRoomViewModel.kt +++ b/app/src/main/java/kr/co/vividnext/sodalive/live/room/LiveRoomViewModel.kt @@ -17,6 +17,7 @@ import kr.co.vividnext.sodalive.base.BaseViewModel import kr.co.vividnext.sodalive.common.SharedPreferenceManager import kr.co.vividnext.sodalive.live.LiveRepository import kr.co.vividnext.sodalive.live.room.donation.GetLiveRoomDonationStatusResponse +import kr.co.vividnext.sodalive.live.room.donation.LiveRoomDonationResponse import kr.co.vividnext.sodalive.live.room.info.GetRoomInfoResponse import kr.co.vividnext.sodalive.live.room.menu.GetMenuPresetResponse import kr.co.vividnext.sodalive.live.room.profile.GetLiveRoomUserProfileResponse @@ -508,7 +509,7 @@ class LiveRoomViewModel( ) } - fun donation(roomId: Long, can: Int, message: String, onSuccess: (String) -> Unit) { + fun donation(roomId: Long, can: Int, message: String, onSuccess: (LiveRoomDonationResponse?) -> Unit) { _isLoading.postValue(true) compositeDisposable.add( repository.donation(roomId, can, message, "Bearer ${SharedPreferenceManager.token}") @@ -519,7 +520,7 @@ class LiveRoomViewModel( _isLoading.value = false if (it.success) { SharedPreferenceManager.can -= can - onSuccess(it.data ?: "") + onSuccess(it.data) } else { if (it.message != null) { _toastLiveData.postValue(it.message) diff --git a/app/src/main/java/kr/co/vividnext/sodalive/live/room/chat/LiveRoomChatRawMessage.kt b/app/src/main/java/kr/co/vividnext/sodalive/live/room/chat/LiveRoomChatRawMessage.kt index 0b4fcbe..26db20e 100644 --- a/app/src/main/java/kr/co/vividnext/sodalive/live/room/chat/LiveRoomChatRawMessage.kt +++ b/app/src/main/java/kr/co/vividnext/sodalive/live/room/chat/LiveRoomChatRawMessage.kt @@ -1,11 +1,13 @@ package kr.co.vividnext.sodalive.live.room.chat import com.google.gson.annotations.SerializedName +import kr.co.vividnext.sodalive.live.room.donation.LiveRoomDonationResponse data class LiveRoomChatRawMessage( @SerializedName("type") val type: LiveRoomChatRawMessageType, @SerializedName("message") val message: String, @SerializedName("can") val can: Int, + @SerializedName("signature") val signature: LiveRoomDonationResponse? = null, @SerializedName("signatureImageUrl") val signatureImageUrl: String? = null, @SerializedName("donationMessage") val donationMessage: String?, @SerializedName("isActiveRoulette") val isActiveRoulette: Boolean? = null diff --git a/app/src/main/java/kr/co/vividnext/sodalive/live/room/donation/LiveRoomDonationResponse.kt b/app/src/main/java/kr/co/vividnext/sodalive/live/room/donation/LiveRoomDonationResponse.kt new file mode 100644 index 0000000..033af2c --- /dev/null +++ b/app/src/main/java/kr/co/vividnext/sodalive/live/room/donation/LiveRoomDonationResponse.kt @@ -0,0 +1,8 @@ +package kr.co.vividnext.sodalive.live.room.donation + +import com.google.gson.annotations.SerializedName + +data class LiveRoomDonationResponse( + @SerializedName("imageUrl") val imageUrl: String, + @SerializedName("time") val time: Int +)