라이브방

- 하트 알림 바(채팅) 배경, 닉네임, 글자색 변경
- 하트 알림 바 위치 수정 : 채팅 -> 공지 밑
This commit is contained in:
klaus 2024-10-27 23:35:21 +09:00
parent 04151168ca
commit f51f7ef412
5 changed files with 83 additions and 52 deletions

View File

@ -9,6 +9,7 @@ import android.content.ClipboardManager
import android.content.Context
import android.content.Intent
import android.graphics.Rect
import android.graphics.Typeface
import android.graphics.drawable.Drawable
import android.net.Uri
import android.os.Build
@ -18,8 +19,11 @@ import android.os.Handler
import android.os.Looper
import android.text.Spannable
import android.text.SpannableString
import android.text.Spanned
import android.text.method.LinkMovementMethod
import android.text.style.ClickableSpan
import android.text.style.ForegroundColorSpan
import android.text.style.StyleSpan
import android.view.LayoutInflater
import android.view.View
import android.view.animation.AccelerateDecelerateInterpolator
@ -74,7 +78,6 @@ import kr.co.vividnext.sodalive.live.room.chat.LiveRoomChatRawMessage
import kr.co.vividnext.sodalive.live.room.chat.LiveRoomChatRawMessageType
import kr.co.vividnext.sodalive.live.room.chat.LiveRoomDonationChat
import kr.co.vividnext.sodalive.live.room.chat.LiveRoomDonationStatusChat
import kr.co.vividnext.sodalive.live.room.chat.LiveRoomHeartDonationChat
import kr.co.vividnext.sodalive.live.room.chat.LiveRoomJoinChat
import kr.co.vividnext.sodalive.live.room.chat.LiveRoomNormalChat
import kr.co.vividnext.sodalive.live.room.chat.LiveRoomRouletteDonationChat
@ -129,7 +132,7 @@ class LiveRoomActivity : BaseActivity<ActivityLiveRoomBinding>(ActivityLiveRoomB
private var isHost = false
private var isNoChatting = false
private var remainingNoChattingTime = noChattingTime
private var remainingNoChattingTime = NO_CHATTING_TIME
private val signatureImageUrlList = mutableListOf<String>()
private var signatureImageUrl = ""
@ -151,6 +154,23 @@ class LiveRoomActivity : BaseActivity<ActivityLiveRoomBinding>(ActivityLiveRoomB
}
}
private val heartNicknameList = mutableListOf<String>()
private var heartNickname = ""
set(value) {
field = value
if (field.isNotBlank()) {
showHeartMessage()
handler.postDelayed({
if (heartNicknameList.isNotEmpty()) {
heartNickname = heartNicknameList.removeAt(0)
} else {
hideHeartMessage()
}
}, 1000)
}
}
private var isShowSignatureImage = false
private var isAvailableLikeHeart = false
private var originalButtonPosition: IntArray? = null
@ -162,7 +182,7 @@ class LiveRoomActivity : BaseActivity<ActivityLiveRoomBinding>(ActivityLiveRoomB
override fun onFinish() {
isNoChatting = false
remainingNoChattingTime = noChattingTime
remainingNoChattingTime = NO_CHATTING_TIME
removeNoChatRoom()
Toast.makeText(
applicationContext,
@ -1149,8 +1169,7 @@ class LiveRoomActivity : BaseActivity<ActivityLiveRoomBinding>(ActivityLiveRoomB
SharedPreferenceManager.userId.toInt()
)
handler.post {
chatAdapter.items.add(LiveRoomHeartDonationChat(nickname))
invalidateChat()
addHeartMessage(nickname)
addHeartAnimation()
lifecycleScope.launch { viewModel.addHeartDonation() }
}
@ -1777,8 +1796,7 @@ class LiveRoomActivity : BaseActivity<ActivityLiveRoomBinding>(ActivityLiveRoomB
LiveRoomChatRawMessageType.HEART_DONATION -> {
handler.post {
chatAdapter.items.add(LiveRoomHeartDonationChat(nickname))
invalidateChat()
addHeartMessage(nickname)
addHeartAnimation()
lifecycleScope.launch { viewModel.addHeartDonation() }
}
@ -2120,6 +2138,46 @@ class LiveRoomActivity : BaseActivity<ActivityLiveRoomBinding>(ActivityLiveRoomB
}
}
private fun addHeartMessage(nickname: String) {
if (heartNickname.isBlank()) {
heartNickname = nickname
} else {
heartNicknameList.add(nickname)
}
}
private fun showHeartMessage() {
val str = "'${heartNickname}'님이 마음을 전했습니다 : \uD83D\uDC95"
val spStr = SpannableString(str)
spStr.setSpan(
ForegroundColorSpan(
ContextCompat.getColor(
applicationContext,
R.color.color_f0c030
)
),
str.indexOf("'") + 1,
str.indexOf("'님"),
Spanned.SPAN_EXCLUSIVE_EXCLUSIVE
)
spStr.setSpan(
StyleSpan(Typeface.BOLD),
str.indexOf("'"),
str.indexOf("'님"),
Spanned.SPAN_EXCLUSIVE_EXCLUSIVE
)
binding.tvHeartMessage.text = spStr
binding.tvHeartMessage.visibility = View.VISIBLE
}
private fun hideHeartMessage() {
heartNickname = ""
binding.tvHeartMessage.text = ""
binding.tvHeartMessage.visibility = View.GONE
}
private fun addSignatureImage(imageUrl: String) {
if (imageUrl.isNotBlank()) {
if (!isShowSignatureImage) {
@ -2228,6 +2286,6 @@ class LiveRoomActivity : BaseActivity<ActivityLiveRoomBinding>(ActivityLiveRoomB
}
companion object {
private const val noChattingTime = 180L
private const val NO_CHATTING_TIME = 180L
}
}

View File

@ -403,39 +403,3 @@ data class LiveRoomRouletteDonationChat(
itemBinding.root.setPadding(33)
}
}
@Keep
data class LiveRoomHeartDonationChat(
val nickname: String
) : LiveRoomChat() {
override var type = LiveRoomChatType.JOIN
override fun bind(context: Context, binding: ViewBinding, onClickProfile: ((Long) -> Unit)?) {
(binding as ItemLiveRoomJoinChatBinding).tvJoin.setTextColor(
ContextCompat.getColor(context, R.color.color_111111)
)
val str = "'$nickname'님이 마음을 전했습니다 : \uD83D\uDC95"
val spStr = SpannableString(str)
spStr.setSpan(
ForegroundColorSpan(
ContextCompat.getColor(
context,
R.color.color_ec3aa6
)
),
str.indexOf("'") + 1,
str.indexOf("'님"),
Spanned.SPAN_EXCLUSIVE_EXCLUSIVE
)
spStr.setSpan(
StyleSpan(Typeface.BOLD),
str.indexOf("'"),
str.indexOf("'님"),
Spanned.SPAN_EXCLUSIVE_EXCLUSIVE
)
(binding as ItemLiveRoomJoinChatBinding).tvJoin.text = spStr
binding.root.setBackgroundResource(R.drawable.bg_round_corner_4_7_ccffffff)
}
}

View File

@ -1,8 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="@color/color_ccffffff" />
<corners android:radius="4.7dp" />
<stroke
android:width="1dp"
android:color="@color/color_ccffffff" />
</shape>

View File

@ -56,6 +56,21 @@
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/ll_top" />
<TextView
android:id="@+id/tv_heart_message"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/color_cc777777"
android:gravity="center"
android:paddingVertical="6.7dp"
android:text="dsfjkldfsjfsdkl"
android:textColor="@color/white"
android:textSize="12sp"
android:visibility="gone"
app:layout_constraintEnd_toEndOf="@+id/fl_margin"
app:layout_constraintStart_toStartOf="@+id/fl_margin"
app:layout_constraintTop_toBottomOf="@+id/fl_margin" />
<LinearLayout
android:id="@+id/ll_notice"
android:layout_width="0dp"

View File

@ -126,5 +126,7 @@
<color name="color_333bb9f1">#333BB9F1</color>
<color name="color_672bff">#672BFF</color>
<color name="color_ccffffff">#CCFFFFFF</color>
<color name="color_cc777777">#CC777777</color>
<color name="color_ec3aa6">#EC3AA6</color>
<color name="color_f0c030">#F0C030</color>
</resources>