diff --git a/.idea/deploymentTargetSelector.xml b/.idea/deploymentTargetSelector.xml
index b268ef3..31986fb 100644
--- a/.idea/deploymentTargetSelector.xml
+++ b/.idea/deploymentTargetSelector.xml
@@ -4,6 +4,14 @@
+
+
+
+
+
+
+
+
diff --git a/.idea/other.xml b/.idea/other.xml
index 4604c44..ffb43c5 100644
--- a/.idea/other.xml
+++ b/.idea/other.xml
@@ -69,6 +69,17 @@
+
+
+
+
+
+
+
+
+
+
+
@@ -146,6 +157,17 @@
+
+
+
+
+
+
+
+
+
+
+
@@ -235,6 +257,17 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/java/kr/co/vividnext/sodalive/agora/Agora.kt b/app/src/main/java/kr/co/vividnext/sodalive/agora/Agora.kt
index c877a00..bed1213 100644
--- a/app/src/main/java/kr/co/vividnext/sodalive/agora/Agora.kt
+++ b/app/src/main/java/kr/co/vividnext/sodalive/agora/Agora.kt
@@ -172,13 +172,14 @@ class Agora(
fun sendRawMessageToPeer(
receiverUid: String,
- requestType: LiveRoomRequestType,
+ requestType: LiveRoomRequestType? = null,
+ rawMessage: ByteArray? = null,
onSuccess: () -> Unit
) {
val option = SendMessageOptions()
val message = rtmClient!!.createMessage()
- message.rawMessage = requestType.toString().toByteArray()
+ message.rawMessage = rawMessage ?: requestType.toString().toByteArray()
rtmClient!!.sendMessageToPeer(
receiverUid,
diff --git a/app/src/main/java/kr/co/vividnext/sodalive/audio_content/detail/AudioContentDetailActivity.kt b/app/src/main/java/kr/co/vividnext/sodalive/audio_content/detail/AudioContentDetailActivity.kt
index d308f48..305e71b 100644
--- a/app/src/main/java/kr/co/vividnext/sodalive/audio_content/detail/AudioContentDetailActivity.kt
+++ b/app/src/main/java/kr/co/vividnext/sodalive/audio_content/detail/AudioContentDetailActivity.kt
@@ -271,7 +271,7 @@ class AudioContentDetailActivity : BaseActivity
+ ) { can, message, _ ->
if (can <= 0) {
showToast("1캔 이상 후원하실 수 있습니다.")
} else if (message.isBlank()) {
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 2987c8c..e032c60 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
@@ -163,12 +163,14 @@ class LiveRepository(
roomId: Long,
can: Int,
message: String,
+ isSecret: Boolean,
token: String
): Single> {
return api.donation(
request = LiveRoomDonationRequest(
roomId = roomId,
can = can,
+ isSecret = isSecret,
message = message,
container = "aos"
),
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 306a894..1bf62a3 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
@@ -464,10 +464,11 @@ class LiveRoomActivity : BaseActivity(ActivityLiveRoomB
binding.flDonation.setOnClickListener {
val dialog = LiveRoomDonationDialog(
this,
- LayoutInflater.from(this)
- ) { can, message ->
+ LayoutInflater.from(this),
+ isLiveDonation = true
+ ) { can, message, isSecret ->
if (can > 0) {
- donation(can, message)
+ donation(can, message, isSecret)
} else {
showToast("1캔 이상 후원하실 수 있습니다.")
}
@@ -1305,13 +1306,21 @@ class LiveRoomActivity : BaseActivity(ActivityLiveRoomB
}
}
- private fun donation(can: Int, message: String) {
- val rawMessage = "${can}캔을 후원하셨습니다.\uD83D\uDCB0\uD83E\uDE99"
+ private fun donation(can: Int, message: String, isSecret: Boolean) {
+ val rawMessage = if (isSecret) {
+ "${can}캔을 비밀후원하셨습니다.\uD83D\uDCB0\uD83E\uDE99"
+ } else {
+ "${can}캔을 후원하셨습니다.\uD83D\uDCB0\uD83E\uDE99"
+ }
- viewModel.donation(roomId, can, message) { signature ->
+ viewModel.donation(roomId, can, message, isSecret) { signature ->
val donationRawMessage = Gson().toJson(
LiveRoomChatRawMessage(
- type = LiveRoomChatRawMessageType.DONATION,
+ type = if (isSecret) {
+ LiveRoomChatRawMessageType.SECRET_DONATION
+ } else {
+ LiveRoomChatRawMessageType.DONATION
+ },
message = rawMessage,
can = can,
signature = signature,
@@ -1320,9 +1329,11 @@ class LiveRoomActivity : BaseActivity(ActivityLiveRoomB
)
)
- agora.sendRawMessageToGroup(
- rawMessage = donationRawMessage.toByteArray(),
- onSuccess = {
+ if (isSecret) {
+ agora.sendRawMessageToPeer(
+ receiverUid = viewModel.roomInfoResponse.creatorId.toString(),
+ rawMessage = donationRawMessage.toByteArray()
+ ) {
handler.post {
val nickname =
viewModel.getUserNickname(SharedPreferenceManager.userId.toInt())
@@ -1338,14 +1349,37 @@ class LiveRoomActivity : BaseActivity(ActivityLiveRoomB
)
)
invalidateChat()
- viewModel.addDonationCan(can)
addSignature(signature)
}
- },
- onFailure = {
- viewModel.refundDonation(roomId)
}
- )
+ } else {
+ agora.sendRawMessageToGroup(
+ rawMessage = donationRawMessage.toByteArray(),
+ onSuccess = {
+ handler.post {
+ val nickname =
+ viewModel.getUserNickname(SharedPreferenceManager.userId.toInt())
+ val profileUrl =
+ viewModel.getUserProfileUrl(SharedPreferenceManager.userId.toInt())
+ chatAdapter.items.add(
+ LiveRoomDonationChat(
+ profileUrl,
+ nickname,
+ rawMessage,
+ can,
+ donationMessage = message
+ )
+ )
+ invalidateChat()
+ viewModel.addDonationCan(can)
+ addSignature(signature)
+ }
+ },
+ onFailure = {
+ viewModel.refundDonation(roomId)
+ }
+ )
+ }
}
}
@@ -1491,6 +1525,8 @@ class LiveRoomActivity : BaseActivity(ActivityLiveRoomB
viewModel.addDonationCan(rawMessage.can)
}
}
+
+ else -> {}
}
} else {
val chat = message.text
@@ -1789,6 +1825,35 @@ class LiveRoomActivity : BaseActivity(ActivityLiveRoomB
}
return
}
+
+ val message = Gson().fromJson(
+ rawMessage,
+ LiveRoomChatRawMessage::class.java
+ )
+
+ if (message.type == LiveRoomChatRawMessageType.SECRET_DONATION) {
+ val nickname = viewModel.getUserNickname(peerId.toInt())
+ val profileUrl = viewModel.getUserProfileUrl(peerId.toInt())
+
+ handler.post {
+ chatAdapter.items.add(
+ LiveRoomDonationChat(
+ profileUrl,
+ nickname,
+ message.message,
+ message.can,
+ message.donationMessage ?: ""
+ )
+ )
+ invalidateChat()
+
+ if (message.signature != null) {
+ addSignature(message.signature)
+ } else if (message.signatureImageUrl != null) {
+ addSignatureImage(message.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 6579b56..44b2c60 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
@@ -521,11 +521,12 @@ class LiveRoomViewModel(
roomId: Long,
can: Int,
message: String,
+ isSecret: Boolean,
onSuccess: (LiveRoomDonationResponse?) -> Unit
) {
_isLoading.postValue(true)
compositeDisposable.add(
- repository.donation(roomId, can, message, "Bearer ${SharedPreferenceManager.token}")
+ repository.donation(roomId, can, message, isSecret, "Bearer ${SharedPreferenceManager.token}")
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(
diff --git a/app/src/main/java/kr/co/vividnext/sodalive/live/room/chat/LiveRoomChat.kt b/app/src/main/java/kr/co/vividnext/sodalive/live/room/chat/LiveRoomChat.kt
index 020495e..9f51087 100644
--- a/app/src/main/java/kr/co/vividnext/sodalive/live/room/chat/LiveRoomChat.kt
+++ b/app/src/main/java/kr/co/vividnext/sodalive/live/room/chat/LiveRoomChat.kt
@@ -304,37 +304,43 @@ data class LiveRoomDonationChat(
itemBinding.llMessageBg.setPadding(0)
itemBinding.llMessageBg.background = null
- itemBinding.root.setBackgroundResource(
- when {
- can >= 10000 -> {
- R.drawable.bg_round_corner_6_7_ccc25264
- }
+ if (spChat.contains("비밀")) {
+ itemBinding.root.setBackgroundResource(
+ R.drawable.bg_round_corner_6_7_cc333333
+ )
+ } else {
+ itemBinding.root.setBackgroundResource(
+ when {
+ can >= 10000 -> {
+ R.drawable.bg_round_corner_6_7_ccc25264
+ }
- can >= 5000 -> {
- R.drawable.bg_round_corner_6_7_ccd85e37
- }
+ can >= 5000 -> {
+ R.drawable.bg_round_corner_6_7_ccd85e37
+ }
- can >= 1000 -> {
- R.drawable.bg_round_corner_6_7_ccd38c38
- }
+ can >= 1000 -> {
+ R.drawable.bg_round_corner_6_7_ccd38c38
+ }
- can >= 500 -> {
- R.drawable.bg_round_corner_6_7_cc59548f
- }
+ can >= 500 -> {
+ R.drawable.bg_round_corner_6_7_cc59548f
+ }
- can >= 100 -> {
- R.drawable.bg_round_corner_6_7_cc4d6aa4
- }
+ can >= 100 -> {
+ R.drawable.bg_round_corner_6_7_cc4d6aa4
+ }
- can >= 50 -> {
- R.drawable.bg_round_corner_6_7_cc2d7390
- }
+ can >= 50 -> {
+ R.drawable.bg_round_corner_6_7_cc2d7390
+ }
- else -> {
- R.drawable.bg_round_corner_6_7_cc548f7d
+ else -> {
+ R.drawable.bg_round_corner_6_7_cc548f7d
+ }
}
- }
- )
+ )
+ }
itemBinding.root.setPadding(33)
}
}
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 77c5d10..03659e7 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
@@ -19,6 +19,9 @@ enum class LiveRoomChatRawMessageType {
@SerializedName("DONATION")
DONATION,
+ @SerializedName("SECRET_DONATION")
+ SECRET_DONATION,
+
@SerializedName("SET_MANAGER")
SET_MANAGER,
diff --git a/app/src/main/java/kr/co/vividnext/sodalive/live/room/donation/LiveRoomDonationDialog.kt b/app/src/main/java/kr/co/vividnext/sodalive/live/room/donation/LiveRoomDonationDialog.kt
index bd2b518..8cb4e5c 100644
--- a/app/src/main/java/kr/co/vividnext/sodalive/live/room/donation/LiveRoomDonationDialog.kt
+++ b/app/src/main/java/kr/co/vividnext/sodalive/live/room/donation/LiveRoomDonationDialog.kt
@@ -24,7 +24,8 @@ import kr.co.vividnext.sodalive.mypage.can.charge.CanChargeActivity
class LiveRoomDonationDialog(
private val activity: AppCompatActivity,
layoutInflater: LayoutInflater,
- onClickDonation: (Int, String) -> Unit
+ isLiveDonation: Boolean = false,
+ onClickDonation: (Int, String, Boolean) -> Unit
) {
private val bottomSheetDialog: BottomSheetDialog = BottomSheetDialog(activity)
@@ -53,7 +54,7 @@ class LiveRoomDonationDialog(
if (can > 0) {
bottomSheetDialog.dismiss()
- onClickDonation(can, message)
+ onClickDonation(can, message, dialogView.chkSecret.isChecked)
} else {
Toast.makeText(
activity,
@@ -70,6 +71,12 @@ class LiveRoomDonationDialog(
}
}
+ dialogView.rlSecret.visibility = if (isLiveDonation) {
+ View.VISIBLE
+ } else {
+ View.GONE
+ }
+
setupView()
}
diff --git a/app/src/main/java/kr/co/vividnext/sodalive/live/room/donation/LiveRoomDonationRequest.kt b/app/src/main/java/kr/co/vividnext/sodalive/live/room/donation/LiveRoomDonationRequest.kt
index 37f83cf..b1896fe 100644
--- a/app/src/main/java/kr/co/vividnext/sodalive/live/room/donation/LiveRoomDonationRequest.kt
+++ b/app/src/main/java/kr/co/vividnext/sodalive/live/room/donation/LiveRoomDonationRequest.kt
@@ -7,6 +7,7 @@ import com.google.gson.annotations.SerializedName
data class LiveRoomDonationRequest(
@SerializedName("roomId") val roomId: Long,
@SerializedName("can") val can: Int,
+ @SerializedName("isSecret") val isSecret: Boolean,
@SerializedName("message") val message: String,
@SerializedName("container") val container: String
)
diff --git a/app/src/main/res/drawable/bg_round_corner_6_7_cc333333.xml b/app/src/main/res/drawable/bg_round_corner_6_7_cc333333.xml
new file mode 100644
index 0000000..ac1ea9a
--- /dev/null
+++ b/app/src/main/res/drawable/bg_round_corner_6_7_cc333333.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/dialog_live_room_donation.xml b/app/src/main/res/layout/dialog_live_room_donation.xml
index 2788ab4..94459db 100644
--- a/app/src/main/res/layout/dialog_live_room_donation.xml
+++ b/app/src/main/res/layout/dialog_live_room_donation.xml
@@ -70,6 +70,26 @@
android:layout_marginVertical="16dp"
android:background="@color/color_909090" />
+
+
+
+
+
#CC59548F
#CCD38C38
#CCD85E37
+ #CC333333
#33FFFFFF
#303030
#555555