라이브방
- 하트 알림 바(채팅) 배경, 닉네임, 글자색 변경 - 하트 알림 바 위치 수정 : 채팅 -> 공지 밑
This commit is contained in:
parent
04151168ca
commit
f51f7ef412
|
@ -9,6 +9,7 @@ import android.content.ClipboardManager
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
import android.graphics.Rect
|
import android.graphics.Rect
|
||||||
|
import android.graphics.Typeface
|
||||||
import android.graphics.drawable.Drawable
|
import android.graphics.drawable.Drawable
|
||||||
import android.net.Uri
|
import android.net.Uri
|
||||||
import android.os.Build
|
import android.os.Build
|
||||||
|
@ -18,8 +19,11 @@ import android.os.Handler
|
||||||
import android.os.Looper
|
import android.os.Looper
|
||||||
import android.text.Spannable
|
import android.text.Spannable
|
||||||
import android.text.SpannableString
|
import android.text.SpannableString
|
||||||
|
import android.text.Spanned
|
||||||
import android.text.method.LinkMovementMethod
|
import android.text.method.LinkMovementMethod
|
||||||
import android.text.style.ClickableSpan
|
import android.text.style.ClickableSpan
|
||||||
|
import android.text.style.ForegroundColorSpan
|
||||||
|
import android.text.style.StyleSpan
|
||||||
import android.view.LayoutInflater
|
import android.view.LayoutInflater
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.view.animation.AccelerateDecelerateInterpolator
|
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.LiveRoomChatRawMessageType
|
||||||
import kr.co.vividnext.sodalive.live.room.chat.LiveRoomDonationChat
|
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.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.LiveRoomJoinChat
|
||||||
import kr.co.vividnext.sodalive.live.room.chat.LiveRoomNormalChat
|
import kr.co.vividnext.sodalive.live.room.chat.LiveRoomNormalChat
|
||||||
import kr.co.vividnext.sodalive.live.room.chat.LiveRoomRouletteDonationChat
|
import kr.co.vividnext.sodalive.live.room.chat.LiveRoomRouletteDonationChat
|
||||||
|
@ -129,7 +132,7 @@ class LiveRoomActivity : BaseActivity<ActivityLiveRoomBinding>(ActivityLiveRoomB
|
||||||
|
|
||||||
private var isHost = false
|
private var isHost = false
|
||||||
private var isNoChatting = false
|
private var isNoChatting = false
|
||||||
private var remainingNoChattingTime = noChattingTime
|
private var remainingNoChattingTime = NO_CHATTING_TIME
|
||||||
|
|
||||||
private val signatureImageUrlList = mutableListOf<String>()
|
private val signatureImageUrlList = mutableListOf<String>()
|
||||||
private var signatureImageUrl = ""
|
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 isShowSignatureImage = false
|
||||||
private var isAvailableLikeHeart = false
|
private var isAvailableLikeHeart = false
|
||||||
private var originalButtonPosition: IntArray? = null
|
private var originalButtonPosition: IntArray? = null
|
||||||
|
@ -162,7 +182,7 @@ class LiveRoomActivity : BaseActivity<ActivityLiveRoomBinding>(ActivityLiveRoomB
|
||||||
|
|
||||||
override fun onFinish() {
|
override fun onFinish() {
|
||||||
isNoChatting = false
|
isNoChatting = false
|
||||||
remainingNoChattingTime = noChattingTime
|
remainingNoChattingTime = NO_CHATTING_TIME
|
||||||
removeNoChatRoom()
|
removeNoChatRoom()
|
||||||
Toast.makeText(
|
Toast.makeText(
|
||||||
applicationContext,
|
applicationContext,
|
||||||
|
@ -1149,8 +1169,7 @@ class LiveRoomActivity : BaseActivity<ActivityLiveRoomBinding>(ActivityLiveRoomB
|
||||||
SharedPreferenceManager.userId.toInt()
|
SharedPreferenceManager.userId.toInt()
|
||||||
)
|
)
|
||||||
handler.post {
|
handler.post {
|
||||||
chatAdapter.items.add(LiveRoomHeartDonationChat(nickname))
|
addHeartMessage(nickname)
|
||||||
invalidateChat()
|
|
||||||
addHeartAnimation()
|
addHeartAnimation()
|
||||||
lifecycleScope.launch { viewModel.addHeartDonation() }
|
lifecycleScope.launch { viewModel.addHeartDonation() }
|
||||||
}
|
}
|
||||||
|
@ -1777,8 +1796,7 @@ class LiveRoomActivity : BaseActivity<ActivityLiveRoomBinding>(ActivityLiveRoomB
|
||||||
|
|
||||||
LiveRoomChatRawMessageType.HEART_DONATION -> {
|
LiveRoomChatRawMessageType.HEART_DONATION -> {
|
||||||
handler.post {
|
handler.post {
|
||||||
chatAdapter.items.add(LiveRoomHeartDonationChat(nickname))
|
addHeartMessage(nickname)
|
||||||
invalidateChat()
|
|
||||||
addHeartAnimation()
|
addHeartAnimation()
|
||||||
lifecycleScope.launch { viewModel.addHeartDonation() }
|
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) {
|
private fun addSignatureImage(imageUrl: String) {
|
||||||
if (imageUrl.isNotBlank()) {
|
if (imageUrl.isNotBlank()) {
|
||||||
if (!isShowSignatureImage) {
|
if (!isShowSignatureImage) {
|
||||||
|
@ -2228,6 +2286,6 @@ class LiveRoomActivity : BaseActivity<ActivityLiveRoomBinding>(ActivityLiveRoomB
|
||||||
}
|
}
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
private const val noChattingTime = 180L
|
private const val NO_CHATTING_TIME = 180L
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -403,39 +403,3 @@ data class LiveRoomRouletteDonationChat(
|
||||||
itemBinding.root.setPadding(33)
|
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)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
|
@ -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>
|
|
|
@ -56,6 +56,21 @@
|
||||||
app:layout_constraintStart_toStartOf="parent"
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
app:layout_constraintTop_toBottomOf="@+id/ll_top" />
|
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
|
<LinearLayout
|
||||||
android:id="@+id/ll_notice"
|
android:id="@+id/ll_notice"
|
||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
|
|
|
@ -126,5 +126,7 @@
|
||||||
<color name="color_333bb9f1">#333BB9F1</color>
|
<color name="color_333bb9f1">#333BB9F1</color>
|
||||||
<color name="color_672bff">#672BFF</color>
|
<color name="color_672bff">#672BFF</color>
|
||||||
<color name="color_ccffffff">#CCFFFFFF</color>
|
<color name="color_ccffffff">#CCFFFFFF</color>
|
||||||
|
<color name="color_cc777777">#CC777777</color>
|
||||||
<color name="color_ec3aa6">#EC3AA6</color>
|
<color name="color_ec3aa6">#EC3AA6</color>
|
||||||
|
<color name="color_f0c030">#F0C030</color>
|
||||||
</resources>
|
</resources>
|
||||||
|
|
Loading…
Reference in New Issue