Compare commits

..

No commits in common. "5a37ba8be02264cbb4ff61123e89226158ba5a61" and "a4ff89cec07ccdcf6f46410d97c4d55b82a4d526" have entirely different histories.

29 changed files with 736 additions and 1391 deletions

View File

@ -256,17 +256,6 @@
<option name="screenX" value="1812" />
<option name="screenY" value="2176" />
</PersistentDeviceSelectionData>
<PersistentDeviceSelectionData>
<option name="api" value="34" />
<option name="brand" value="samsung" />
<option name="codename" value="q6q" />
<option name="id" value="q6q" />
<option name="manufacturer" value="Samsung" />
<option name="name" value="SM-F956B" />
<option name="screenDensity" value="420" />
<option name="screenX" value="1856" />
<option name="screenY" value="2160" />
</PersistentDeviceSelectionData>
<PersistentDeviceSelectionData>
<option name="api" value="30" />
<option name="brand" value="google" />
@ -323,6 +312,17 @@
<option name="screenX" value="1080" />
<option name="screenY" value="2424" />
</PersistentDeviceSelectionData>
<PersistentDeviceSelectionData>
<option name="api" value="29" />
<option name="brand" value="samsung" />
<option name="codename" value="x1q" />
<option name="id" value="x1q" />
<option name="manufacturer" value="Samsung" />
<option name="name" value="Galaxy S20" />
<option name="screenDensity" value="480" />
<option name="screenX" value="1440" />
<option name="screenY" value="3200" />
</PersistentDeviceSelectionData>
</list>
</option>
</component>

View File

@ -35,8 +35,8 @@ android {
applicationId "kr.co.vividnext.sodalive"
minSdk 23
targetSdk 34
versionCode 122
versionName "1.22.3"
versionCode 117
versionName "1.21.2"
}
buildTypes {
@ -159,6 +159,4 @@ dependencies {
kapt "androidx.room:room-compiler:2.5.0"
implementation "androidx.room:room-ktx:2.5.0"
implementation "androidx.room:room-runtime:2.5.0"
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.4"
}

View File

@ -636,7 +636,7 @@ class AudioContentDetailActivity : BaseActivity<ActivityAudioContentDetailBindin
response.price > 0
if (
response.creator.creatorId != SharedPreferenceManager.userId && !response.existOrdered &&
!response.existOrdered &&
response.totalContentCount != null && response.remainingContentCount != null &&
response.remainingContentCount <= 0
) {
@ -948,7 +948,7 @@ class AudioContentDetailActivity : BaseActivity<ActivityAudioContentDetailBindin
putExtra(
"can",
if (orderType == OrderType.RENTAL) {
ceil(audioContent.price * 0.7).toInt()
ceil(audioContent.price * 0.6).toInt()
} else {
audioContent.price
}

View File

@ -65,14 +65,14 @@ class AudioContentOrderConfirmDialog(
if (SharedPreferenceManager.userId == 17958L) {
dialogView.ivCan.visibility = View.GONE
dialogView.tvPrice.text = if (orderType == OrderType.RENTAL && !isOnlyRental) {
"${(ceil(price * 0.7).toInt() * 110).moneyFormat()}"
"${(ceil(price * 0.6).toInt() * 110).moneyFormat()}"
} else {
"${(price * 110).moneyFormat()}"
}
} else {
dialogView.ivCan.visibility = View.VISIBLE
dialogView.tvPrice.text = if (orderType == OrderType.RENTAL && !isOnlyRental) {
ceil(price * 0.7).toInt().moneyFormat()
ceil(price * 0.6).toInt().moneyFormat()
} else {
price.moneyFormat()
}

View File

@ -53,10 +53,10 @@ class AudioContentOrderFragment(
} else {
if (SharedPreferenceManager.userId == 17958L) {
binding.tvKeep.text = "${(price * 110).moneyFormat()}"
binding.tvRental.text = "${(ceil(price * 0.7).toInt() * 110).moneyFormat()}"
binding.tvRental.text = "${(ceil(price * 0.6).toInt() * 110).moneyFormat()}"
} else {
binding.tvKeep.text = price.moneyFormat()
binding.tvRental.text = ceil(price * 0.7).toInt().moneyFormat()
binding.tvRental.text = ceil(price * 0.6).toInt().moneyFormat()
}
binding.rlKeep.visibility = View.VISIBLE

View File

@ -46,11 +46,3 @@ fun String.fontSpan(typeface: Typeface?, text: String): SpannableString {
return spannableString
}
fun String.prefix(length: Int): String {
return if (this.length >= length) {
this.substring(0, length)
} else {
this
}
}

View File

@ -24,10 +24,9 @@ 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.like.GetLiveRoomHeartTotalResponse
import kr.co.vividnext.sodalive.live.room.like.LiveRoomLikeHeartRequest
import kr.co.vividnext.sodalive.live.room.profile.GetLiveRoomUserProfileResponse
import kr.co.vividnext.sodalive.live.room.tag.GetLiveTagResponse
import kr.co.vividnext.sodalive.settings.ContentType
import okhttp3.MultipartBody
import okhttp3.RequestBody
import retrofit2.http.Body
@ -214,16 +213,4 @@ interface LiveApi {
@Body request: CancelLiveReservationRequest,
@Header("Authorization") authHeader: String
): Single<ApiResponse<Any>>
@POST("/live/room/like-heart")
fun likeHeart(
@Body request: LiveRoomLikeHeartRequest,
@Header("Authorization") authHeader: String
): Single<ApiResponse<Any>>
@GET("/live/room/{id}/heart-total")
fun getTotalHeartCount(
@Path("id") id: Long,
@Header("Authorization") authHeader: String
): Single<ApiResponse<GetLiveRoomHeartTotalResponse>>
}

View File

@ -17,7 +17,6 @@ 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.like.LiveRoomLikeHeartRequest
import kr.co.vividnext.sodalive.live.room.menu.MenuApi
import kr.co.vividnext.sodalive.user.CreatorFollowRequestRequest
import kr.co.vividnext.sodalive.user.UserApi
@ -243,17 +242,4 @@ class LiveRepository(
creatorId = creatorId,
authHeader = token
)
fun likeHeart(roomId: Long, token: String) = api.likeHeart(
request = LiveRoomLikeHeartRequest(
roomId = roomId,
container = "aos"
),
authHeader = token
)
fun getTotalHeartCount(roomId: Long, token: String) = api.getTotalHeartCount(
roomId,
authHeader = token
)
}

View File

@ -1,6 +1,5 @@
package kr.co.vividnext.sodalive.live.room
import android.animation.ObjectAnimator
import android.annotation.SuppressLint
import android.app.AlertDialog
import android.app.Service
@ -9,7 +8,6 @@ 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
@ -19,25 +17,17 @@ 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
import android.view.inputmethod.EditorInfo
import android.view.inputmethod.InputMethodManager
import android.widget.FrameLayout
import android.widget.ImageView
import android.widget.TextView
import android.widget.Toast
import androidx.activity.OnBackPressedCallback
import androidx.activity.result.contract.ActivityResultContracts
import androidx.appcompat.widget.PopupMenu
import androidx.core.content.ContextCompat
import androidx.lifecycle.lifecycleScope
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import coil.transform.CircleCropTransformation
@ -58,7 +48,6 @@ import io.agora.rtm.RtmChannelMember
import io.agora.rtm.RtmClientListener
import io.agora.rtm.RtmMessage
import io.agora.rtm.RtmMessageType
import kotlinx.coroutines.launch
import kr.co.vividnext.sodalive.R
import kr.co.vividnext.sodalive.agora.Agora
import kr.co.vividnext.sodalive.base.BaseActivity
@ -100,7 +89,6 @@ import kr.co.vividnext.sodalive.report.UserReportDialog
import kr.co.vividnext.sodalive.settings.notification.MemberRole
import org.koin.android.ext.android.inject
import java.util.regex.Pattern
import kotlin.random.Random
class LiveRoomActivity : BaseActivity<ActivityLiveRoomBinding>(ActivityLiveRoomBinding::inflate) {
@ -130,9 +118,8 @@ class LiveRoomActivity : BaseActivity<ActivityLiveRoomBinding>(ActivityLiveRoomB
private var isMicrophoneMute = false
private var isSpeaker = false
private var isHost = false
private var isNoChatting = false
private var remainingNoChattingTime = NO_CHATTING_TIME
private var remainingNoChattingTime = noChattingTime
private val signatureImageUrlList = mutableListOf<String>()
private var signatureImageUrl = ""
@ -154,26 +141,7 @@ 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 buttonPosition = IntArray(2)
private val countDownTimer = object : CountDownTimer(remainingNoChattingTime * 1000, 1000) {
override fun onTick(millisUntilFinished: Long) {
@ -182,7 +150,7 @@ class LiveRoomActivity : BaseActivity<ActivityLiveRoomBinding>(ActivityLiveRoomB
override fun onFinish() {
isNoChatting = false
remainingNoChattingTime = NO_CHATTING_TIME
remainingNoChattingTime = noChattingTime
removeNoChatRoom()
Toast.makeText(
applicationContext,
@ -288,6 +256,17 @@ class LiveRoomActivity : BaseActivity<ActivityLiveRoomBinding>(ActivityLiveRoomB
viewModel.getMemberCan()
viewModel.getRoomInfo(roomId)
viewModel.getBlockedMemberIdList()
binding.etChat.setOnFocusChangeListener { view, hasFocus ->
if (isNoChatting && hasFocus) {
Toast.makeText(
applicationContext,
"${remainingNoChattingTime}초 동안 채팅하실 수 없습니다",
Toast.LENGTH_SHORT
).show()
view.clearFocus()
}
}
}
override fun onStart() {
@ -469,16 +448,6 @@ class LiveRoomActivity : BaseActivity<ActivityLiveRoomBinding>(ActivityLiveRoomB
}
)
binding.etChat.setOnFocusChangeListener { view, hasFocus ->
if (isNoChatting && hasFocus) {
Toast.makeText(
applicationContext,
"${remainingNoChattingTime}초 동안 채팅하실 수 없습니다",
Toast.LENGTH_SHORT
).show()
view.clearFocus()
}
}
binding.tvQuit.setOnClickListener { onClickQuit() }
binding.flMicrophoneMute.setOnClickListener {
microphoneMute()
@ -498,18 +467,8 @@ class LiveRoomActivity : BaseActivity<ActivityLiveRoomBinding>(ActivityLiveRoomB
binding.ivSpeakerMute.setImageResource(R.drawable.ic_speaker_on)
}
}
binding.etChat.setOnEditorActionListener { _, actionId, _ ->
if (actionId == EditorInfo.IME_ACTION_DONE || actionId == EditorInfo.IME_ACTION_SEND) {
inputChat()
true
} else {
false
}
}
binding.ivSend.setOnClickListener { inputChat() }
binding.flDonation.setOnClickListener {
hideKeyboard {
val dialog = LiveRoomDonationDialog(
this,
LayoutInflater.from(this),
@ -524,7 +483,6 @@ class LiveRoomActivity : BaseActivity<ActivityLiveRoomBinding>(ActivityLiveRoomB
dialog.show(screenWidth)
}
}
binding.tvNotification.setOnClickListener { viewModel.toggleShowNotice() }
binding.tvMenuPan.setOnClickListener { viewModel.toggleShowMenuPan() }
@ -554,120 +512,6 @@ class LiveRoomActivity : BaseActivity<ActivityLiveRoomBinding>(ActivityLiveRoomB
super.onDestroy()
}
private fun setHeartButtonPosition() {
handler.postDelayed(
{
// 버튼의 위치
val button = if (isHost) {
binding.flRouletteSettings
} else {
binding.flLikeHeart
}
buttonPosition = IntArray(2)
button.getLocationInWindow(buttonPosition)
},
500
)
}
private fun secondToMillis(second: Float): Long {
return (second * 1000).toLong()
}
private fun addHeartAnimation() {
val button = if (isHost) {
binding.flRouletteSettings
} else {
binding.flLikeHeart
}
// 하트 이미지뷰 생성
val heart = ImageView(this).apply {
setImageResource(R.drawable.ic_heart_pink) // 투명한 하트 이미지
layoutParams = FrameLayout.LayoutParams(
33.3f.dpToPx().toInt(),
33.3f.dpToPx().toInt()
) // 하트 크기 설정
}
// 하트의 초기 위치를 버튼의 위치로 설정
heart.x = (buttonPosition[0] + button.width / 2f - 50) // X축 (가운데 정렬)
heart.y = (buttonPosition[1] - 100).toFloat() // Y축 (버튼 바로 위에 생성)
binding.flRoot.addView(heart)
// 하트가 위로 올라가는 애니메이션
val animateDuration = secondToMillis(2.5f)
val moveUpAnimator = ObjectAnimator.ofFloat(
heart,
"translationY",
heart.y,
heart.y - (screenHeight * 1000 / 2337)
).apply {
duration = animateDuration
interpolator = AccelerateDecelerateInterpolator()
}
val isNegativeFirst = Random.nextBoolean()
// 좌우 이동 범위를 랜덤으로 설정
val x = 13.3f
val startX = if (isNegativeFirst) (0 - x).dpToPx() else x.dpToPx()
val endX = if (isNegativeFirst) x.dpToPx() else (0 - x).dpToPx()
val moveAnimator = ObjectAnimator.ofFloat(
heart,
"translationX",
heart.x + startX,
heart.x + endX
).apply {
duration = secondToMillis(1.5f)
repeatCount = ObjectAnimator.INFINITE
repeatMode = ObjectAnimator.REVERSE
interpolator = AccelerateDecelerateInterpolator()
}
val scaleXAnimator = ObjectAnimator.ofFloat(
heart,
"scaleX",
0.5f,
1.0f
).apply {
duration = animateDuration
}
val scaleYAnimator = ObjectAnimator.ofFloat(
heart,
"scaleY",
0.5f,
1.0f
).apply {
duration = animateDuration
}
// 하트 투명도 애니메이션
val fadeOutAnimator = ObjectAnimator.ofFloat(
heart,
"alpha",
1f,
0f
).apply {
duration = animateDuration
}
// 애니메이션 실행
moveUpAnimator.start()
moveAnimator.start()
fadeOutAnimator.start()
scaleXAnimator.start()
scaleYAnimator.start()
// 애니메이션이 끝나면 하트 제거
handler.postDelayed({
binding.flRoot.removeView(heart)
}, animateDuration)
}
private fun showOptionMenu(
context: Context,
userId: Long,
@ -894,7 +738,6 @@ class LiveRoomActivity : BaseActivity<ActivityLiveRoomBinding>(ActivityLiveRoomB
}
binding.flDonationMessageList.setOnClickListener {
hideKeyboard {
LiveRoomDonationMessageDialog(
layoutInflater = LayoutInflater.from(this),
creatorId = response.creatorId,
@ -924,7 +767,6 @@ class LiveRoomActivity : BaseActivity<ActivityLiveRoomBinding>(ActivityLiveRoomB
}
).show()
}
}
speakerListAdapter.managerId = response.creatorId
speakerListAdapter.updateList(
@ -1052,10 +894,11 @@ class LiveRoomActivity : BaseActivity<ActivityLiveRoomBinding>(ActivityLiveRoomB
binding.ivCreatorFollow.visibility = View.GONE
}
isHost = response.creatorId == SharedPreferenceManager.userId
initLikeHeartButton()
initRouletteSettingButton()
activatingRouletteButton(isActiveRoulette = response.isActiveRoulette)
initRouletteSettingButton(isHost = response.creatorId == SharedPreferenceManager.userId)
activatingRouletteButton(
isHost = response.creatorId == SharedPreferenceManager.userId,
isActiveRoulette = response.isActiveRoulette
)
if (response.menuPan.isNotBlank()) {
binding.tvMenuPan.visibility = View.VISIBLE
@ -1131,80 +974,15 @@ class LiveRoomActivity : BaseActivity<ActivityLiveRoomBinding>(ActivityLiveRoomB
binding.tvTotalCan.text = it.moneyFormat()
}
viewModel.totalHeartCount.observe(this) {
binding.tvTotalHeart.text = it.moneyFormat()
}
viewModel.coverImageUrlLiveData.observe(this) {
binding.ivCover.loadUrl(it)
}
}
private fun initLikeHeartButton() {
if (!isHost) {
binding.flLikeHeart.visibility = View.VISIBLE
binding.flLikeHeart.setOnClickListener {
if (isAvailableLikeHeart) {
binding.flLikeHeart.isEnabled = false
viewModel.likeHeart(
roomId = roomId,
onSuccess = {
val donationRawMessage = Gson().toJson(
LiveRoomChatRawMessage(
type = LiveRoomChatRawMessageType.HEART_DONATION,
message = "",
can = 1,
signature = null,
signatureImageUrl = null,
donationMessage = null
)
)
agora.sendRawMessageToGroup(
rawMessage = donationRawMessage.toByteArray(),
onSuccess = {
val nickname = viewModel.getUserNickname(
SharedPreferenceManager.userId.toInt()
)
handler.post {
addHeartMessage(nickname)
addHeartAnimation()
lifecycleScope.launch { viewModel.addHeartDonation() }
}
},
onFailure = {
viewModel.refundDonation(roomId)
}
)
binding.flLikeHeart.isEnabled = true
},
onFailure = {
binding.flLikeHeart.isEnabled = true
}
)
} else {
SodaDialog(
activity = this@LiveRoomActivity,
layoutInflater = layoutInflater,
title = "안내",
desc = "'좋아해요'는 유료 후원입니다.\n" +
"클릭시 1캔이 소진됩니다.",
confirmButtonTitle = "확인",
confirmButtonClick = { isAvailableLikeHeart = true }
).show(screenWidth)
}
}
} else {
binding.flLikeHeart.visibility = View.GONE
}
}
private fun initRouletteSettingButton() {
private fun initRouletteSettingButton(isHost: Boolean) {
if (isHost) {
binding.flRouletteSettings.visibility = View.VISIBLE
binding.flRouletteSettings.setOnClickListener {
hideKeyboard {
rouletteConfigResult.launch(
Intent(
applicationContext,
@ -1212,19 +990,15 @@ class LiveRoomActivity : BaseActivity<ActivityLiveRoomBinding>(ActivityLiveRoomB
)
)
}
}
} else {
binding.flRouletteSettings.visibility = View.GONE
}
}
private fun activatingRouletteButton(isActiveRoulette: Boolean) {
handler.postDelayed(
{
private fun activatingRouletteButton(isHost: Boolean, isActiveRoulette: Boolean) {
if (!isHost && isActiveRoulette) {
binding.flRoulette.visibility = View.VISIBLE
binding.flRoulette.setOnClickListener {
hideKeyboard {
viewModel.showRoulette {
RoulettePreviewDialog(
activity = this,
@ -1236,14 +1010,10 @@ class LiveRoomActivity : BaseActivity<ActivityLiveRoomBinding>(ActivityLiveRoomB
).show()
}
}
}
} else {
binding.flRoulette.visibility = View.GONE
}
},
500
)
}
private fun setNoticeAndClickableUrl(textView: TextView, text: String) {
@ -1639,7 +1409,7 @@ class LiveRoomActivity : BaseActivity<ActivityLiveRoomBinding>(ActivityLiveRoomB
)
)
invalidateChat()
lifecycleScope.launch { viewModel.addDonationCan(can) }
viewModel.addDonationCan(can)
addSignature(signature)
}
},
@ -1680,7 +1450,7 @@ class LiveRoomActivity : BaseActivity<ActivityLiveRoomBinding>(ActivityLiveRoomB
)
)
invalidateChat()
lifecycleScope.launch { viewModel.addDonationCan(can) }
viewModel.addDonationCan(can)
}
},
onFailure = {
@ -1747,9 +1517,7 @@ class LiveRoomActivity : BaseActivity<ActivityLiveRoomBinding>(ActivityLiveRoomB
)
)
invalidateChat()
lifecycleScope.launch {
viewModel.addDonationCan(rawMessage.can)
}
if (rawMessage.signature != null) {
addSignature(rawMessage.signature)
@ -1772,10 +1540,15 @@ class LiveRoomActivity : BaseActivity<ActivityLiveRoomBinding>(ActivityLiveRoomB
}
LiveRoomChatRawMessageType.TOGGLE_ROULETTE -> {
handler.post {
activatingRouletteButton(
isHost = viewModel
.roomInfoResponse
.creatorId == SharedPreferenceManager.userId,
isActiveRoulette = rawMessage.isActiveRoulette ?: false
)
}
}
LiveRoomChatRawMessageType.ROULETTE_DONATION -> {
handler.post {
@ -1787,19 +1560,9 @@ class LiveRoomActivity : BaseActivity<ActivityLiveRoomBinding>(ActivityLiveRoomB
)
)
invalidateChat()
lifecycleScope.launch {
viewModel.addDonationCan(rawMessage.can)
}
}
}
LiveRoomChatRawMessageType.HEART_DONATION -> {
handler.post {
addHeartMessage(nickname)
addHeartAnimation()
lifecycleScope.launch { viewModel.addHeartDonation() }
}
}
else -> {}
}
@ -1867,7 +1630,6 @@ class LiveRoomActivity : BaseActivity<ActivityLiveRoomBinding>(ActivityLiveRoomB
if (containNoChatRoom()) {
startNoChatting()
}
setHeartButtonPosition()
},
rtmChannelJoinFail = {
agoraConnectFail()
@ -2123,6 +1885,7 @@ class LiveRoomActivity : BaseActivity<ActivityLiveRoomBinding>(ActivityLiveRoomB
)
)
invalidateChat()
viewModel.addDonationCan(message.can)
if (message.signature != null) {
addSignature(message.signature)
@ -2135,46 +1898,6 @@ 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) {
@ -2283,6 +2006,6 @@ class LiveRoomActivity : BaseActivity<ActivityLiveRoomBinding>(ActivityLiveRoomB
}
companion object {
private const val NO_CHATTING_TIME = 180L
private const val noChattingTime = 180L
}
}

View File

@ -13,8 +13,6 @@ import com.google.gson.Gson
import com.orhanobut.logger.Logger
import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers
import io.reactivex.rxjava3.schedulers.Schedulers
import kotlinx.coroutines.sync.Mutex
import kotlinx.coroutines.sync.withLock
import kr.co.vividnext.sodalive.base.BaseViewModel
import kr.co.vividnext.sodalive.common.SharedPreferenceManager
import kr.co.vividnext.sodalive.live.LiveRepository
@ -66,10 +64,6 @@ class LiveRoomViewModel(
val totalDonationCan: LiveData<Int>
get() = _totalDonationCan
private val _totalHeartCount = MutableLiveData(0)
val totalHeartCount: LiveData<Int>
get() = _totalHeartCount
private val _userProfileLiveData = MutableLiveData<GetLiveRoomUserProfileResponse>()
val userProfileLiveData: LiveData<GetLiveRoomUserProfileResponse>
get() = _userProfileLiveData
@ -102,8 +96,6 @@ class LiveRoomViewModel(
private val blockedMemberIdList: MutableList<Long> = mutableListOf()
val mutex = Mutex()
fun getUserNickname(memberId: Int): String {
for (manager in roomInfoResponse.managerList) {
if (manager.id.toInt() == memberId) {
@ -223,7 +215,6 @@ class LiveRoomViewModel(
}
getTotalDonationCan(roomId = roomId)
getTotalHeart(roomId = roomId)
if (it.data.isAdult && !SharedPreferenceManager.isAuth) {
_changeIsAdultLiveData.value = true
@ -567,36 +558,6 @@ class LiveRoomViewModel(
)
}
fun likeHeart(roomId: Long, onSuccess: () -> Unit, onFailure: () -> Unit) {
compositeDisposable.add(
repository.likeHeart(roomId, token = "Bearer ${SharedPreferenceManager.token}")
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(
{
if (it.success) {
SharedPreferenceManager.can -= 1
onSuccess()
} else {
if (it.message != null) {
_toastLiveData.postValue(it.message)
} else {
_toastLiveData.postValue(
"알 수 없는 오류가 발생했습니다. 다시 시도해 주세요."
)
}
onFailure()
}
},
{
it.message?.let { message -> Logger.e(message) }
_toastLiveData.postValue("알 수 없는 오류가 발생했습니다. 다시 시도해 주세요.")
onFailure()
}
)
)
}
fun donation(
roomId: Long,
can: Int,
@ -676,17 +637,9 @@ class LiveRoomViewModel(
)
}
suspend fun addDonationCan(can: Int) {
mutex.withLock {
fun addDonationCan(can: Int) {
_totalDonationCan.postValue(totalDonationCan.value!! + can)
}
}
suspend fun addHeartDonation() {
mutex.withLock {
_totalHeartCount.postValue(totalHeartCount.value!! + 1)
}
}
fun donationStatus(roomId: Long, onSuccess: (GetLiveRoomDonationStatusResponse) -> Unit) {
_isLoading.value = true
@ -729,27 +682,6 @@ class LiveRoomViewModel(
}
}
private fun getTotalHeart(roomId: Long) {
compositeDisposable.add(
repository.getTotalHeartCount(
roomId = roomId,
token = "Bearer ${SharedPreferenceManager.token}"
)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(
{
if (it.success && it.data != null) {
_totalHeartCount.postValue(it.data.totalHeartCount)
}
},
{
_totalHeartCount.postValue(0)
}
)
)
}
private fun getTotalDonationCan(roomId: Long) {
compositeDisposable.add(
repository.getTotalDonationCan(

View File

@ -53,9 +53,6 @@ data class LiveRoomJoinChat(
) : 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_eeeeee)
)
val str = "'$nickname'님이 입장하셨습니다."
val spStr = SpannableString(str)
@ -79,7 +76,6 @@ data class LiveRoomJoinChat(
)
(binding as ItemLiveRoomJoinChatBinding).tvJoin.text = spStr
binding.root.setBackgroundResource(R.drawable.bg_round_corner_4_7_cc004462)
}
}

View File

@ -35,8 +35,5 @@ enum class LiveRoomChatRawMessageType {
TOGGLE_ROULETTE,
@SerializedName("ROULETTE_DONATION")
ROULETTE_DONATION,
@SerializedName("HEART_DONATION")
HEART_DONATION
ROULETTE_DONATION
}

View File

@ -7,8 +7,7 @@ import com.google.gson.annotations.SerializedName
data class GetLiveRoomDonationStatusResponse(
@SerializedName("donationList") val donationList: List<GetLiveRoomDonationItem>,
@SerializedName("totalCount") val totalCount: Int,
@SerializedName("totalCan") val totalCan: Int,
@SerializedName("totalSecretCan") val totalSecretCan: Int
@SerializedName("totalCan") val totalCan: Int
)
@Keep
@ -16,6 +15,5 @@ data class GetLiveRoomDonationItem(
@SerializedName("profileImage") val profileImage: String,
@SerializedName("nickname") val nickname: String,
@SerializedName("userId") val userId: Long,
@SerializedName("can") val can: Int,
@SerializedName("secretCan") val secretCan: Int
@SerializedName("can") val can: Int
)

View File

@ -19,7 +19,6 @@ import kr.co.vividnext.sodalive.common.Constants
import kr.co.vividnext.sodalive.common.SharedPreferenceManager
import kr.co.vividnext.sodalive.databinding.DialogLiveRoomDonationBinding
import kr.co.vividnext.sodalive.extensions.moneyFormat
import kr.co.vividnext.sodalive.extensions.prefix
import kr.co.vividnext.sodalive.mypage.can.charge.CanChargeActivity
class LiveRoomDonationDialog(
@ -51,11 +50,11 @@ class LiveRoomDonationDialog(
dialogView.tvDonation.setOnClickListener {
try {
val can = dialogView.etDonationCan.text.toString().toInt()
val message = dialogView.etDonationMessage.text.toString().prefix(200)
val message = dialogView.etDonationMessage.text.toString()
if (can > 0) {
bottomSheetDialog.dismiss()
onClickDonation(can, message, dialogView.tvSecret.isSelected)
onClickDonation(can, message, dialogView.chkSecret.isChecked)
} else {
Toast.makeText(
activity,
@ -72,20 +71,10 @@ class LiveRoomDonationDialog(
}
}
if (isLiveDonation) {
dialogView.rlSecret.visibility = View.VISIBLE
dialogView.tvSecret.setOnClickListener {
val isSelected = dialogView.tvSecret.isSelected
dialogView.tvSecret.isSelected = !isSelected
dialogView.etDonationMessage.hint = if (!isSelected) {
"함께 보낼 비밀 메시지 입력(최대 200자)"
dialogView.rlSecret.visibility = if (isLiveDonation) {
View.VISIBLE
} else {
"함께 보낼 메시지 입력(최대 200자)"
}
}
dialogView.tvSecret.isSelected = false
} else {
dialogView.rlSecret.visibility = View.GONE
View.GONE
}
setupView()

View File

@ -50,12 +50,6 @@ class LiveRoomDonationRankingAdapter :
}
binding.tvDonationCan.text = item.can.moneyFormat()
binding.tvDonationSecretCan.text = item.secretCan.moneyFormat()
binding.llDonationSecret.visibility = if (item.secretCan > 0) {
View.VISIBLE
} else {
View.GONE
}
val lp = binding.rlDonationRanking.layoutParams as FrameLayout.LayoutParams

View File

@ -37,17 +37,6 @@ class LiveRoomDonationRankingDialog(
adapter.notifyDataSetChanged()
dialogView.tvTotalCan.text = it.totalCan.moneyFormat()
dialogView.tvTotalCount.text = it.totalCount.moneyFormat()
dialogView.tvTotalSecretCan.text = it.totalSecretCan.moneyFormat()
if (it.totalSecretCan > 0) {
dialogView.llTotalCanSubTitle.visibility = View.VISIBLE
dialogView.tvTotalSecretCan.visibility = View.VISIBLE
dialogView.tvTotalCanSlash.visibility = View.VISIBLE
} else {
dialogView.llTotalCanSubTitle.visibility = View.GONE
dialogView.tvTotalSecretCan.visibility = View.GONE
dialogView.tvTotalCanSlash.visibility = View.GONE
}
}
}

View File

@ -1,9 +0,0 @@
package kr.co.vividnext.sodalive.live.room.like
import androidx.annotation.Keep
import com.google.gson.annotations.SerializedName
@Keep
data class GetLiveRoomHeartTotalResponse(
@SerializedName("totalHeartCount") val totalHeartCount: Int
)

View File

@ -1,10 +0,0 @@
package kr.co.vividnext.sodalive.live.room.like
import androidx.annotation.Keep
import com.google.gson.annotations.SerializedName
@Keep
data class LiveRoomLikeHeartRequest(
@SerializedName("roomId") val roomId: Long,
@SerializedName("container") val container: String
)

View File

@ -195,6 +195,7 @@ class AlarmListActivity : BaseActivity<ActivityAlarmListBinding>(
val permissions = mutableListOf<String>()
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
permissions.add(Manifest.permission.USE_FULL_SCREEN_INTENT)
permissions.add(Manifest.permission.POST_NOTIFICATIONS)
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 KiB

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_fedc00" />
<corners android:radius="2.7dp" />
<stroke
android:width="1dp"
android:color="@color/color_fedc00" />
</shape>

View File

@ -479,10 +479,8 @@
android:layout_marginTop="8dp"
android:ellipsize="end"
android:maxLines="2"
android:fontFamily="@font/gmarket_sans_medium"
android:lineSpacingExtra="5dp"
android:textColor="@color/color_909090"
android:textSize="14sp"
android:textColor="@color/color_777777"
android:textSize="13.3sp"
tools:text="작품설명 작품설명 작품설명 작품설명 작품설명 작품설명 작품설명 작품설명 작품설명 작품설명 작품설명 작품설명 작품설명 작품설명 작품설명 작품설명" />
</LinearLayout>
@ -679,7 +677,7 @@
android:background="@drawable/bg_round_corner_10_13181b_3bb9f1"
android:hint="댓글을 입력해 보세요"
android:importantForAutofill="no"
android:inputType="text|textMultiLine"
android:inputType="text"
android:paddingVertical="13.3dp"
android:paddingStart="13.3dp"
android:paddingEnd="50.7dp"

View File

@ -1,16 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/fl_root"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/black"
android:keepScreenOn="true">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
android:keepScreenOn="true"
tools:background="@color/black">
<ImageView
android:id="@+id/iv_cover"
@ -42,7 +37,7 @@
android:paddingStart="20dp"
android:paddingEnd="0dp"
app:layout_constraintBottom_toTopOf="@+id/rl_input_chat"
app:layout_constraintEnd_toStartOf="@+id/ll_option_buttons"
app:layout_constraintEnd_toStartOf="@+id/rl_option_buttons"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/fl_margin"
app:layout_goneMarginEnd="0dp" />
@ -56,21 +51,6 @@
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"
@ -423,7 +403,7 @@
android:paddingVertical="5.3dp"
android:text="공지"
android:textColor="@color/color_bbbbbb"
android:textSize="11sp"
android:textSize="12sp"
tools:ignore="SmallSp" />
<TextView
@ -439,7 +419,8 @@
android:paddingVertical="5.3dp"
android:text="메뉴판"
android:textColor="@color/color_bbbbbb"
android:textSize="11sp"
android:textSize="12sp"
android:visibility="gone"
tools:ignore="SmallSp" />
<LinearLayout
@ -449,43 +430,13 @@
android:orientation="horizontal"
tools:ignore="RelativeOverlap">
<LinearLayout
android:id="@+id/ll_heart"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/bg_round_corner_5_3_transparent_bbbbbb"
android:gravity="center"
android:paddingHorizontal="8dp"
android:paddingVertical="5.3dp"
tools:ignore="RelativeOverlap">
<ImageView
android:layout_width="14dp"
android:layout_height="14dp"
android:contentDescription="@null"
android:src="@drawable/ic_heart_pink" />
<TextView
android:id="@+id/tv_total_heart"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="6.7dp"
android:fontFamily="@font/gmarket_sans_medium"
android:gravity="center_vertical"
android:textColor="@color/color_bbbbbb"
android:textSize="11sp"
tools:ignore="SmallSp"
tools:text="999,999" />
</LinearLayout>
<LinearLayout
android:id="@+id/ll_donation"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="5.3dp"
android:background="@drawable/bg_round_corner_5_3_transparent_bbbbbb"
android:gravity="center"
android:paddingHorizontal="8dp"
android:paddingHorizontal="10dp"
android:paddingVertical="5.3dp"
tools:ignore="RelativeOverlap">
@ -503,9 +454,9 @@
android:fontFamily="@font/gmarket_sans_medium"
android:gravity="center_vertical"
android:textColor="@color/color_bbbbbb"
android:textSize="11sp"
android:textSize="12sp"
tools:ignore="SmallSp"
tools:text="999,999" />
tools:text="999,999,999,999" />
</LinearLayout>
<LinearLayout
@ -515,7 +466,7 @@
android:layout_marginStart="5.3dp"
android:background="@drawable/bg_round_corner_5_3_transparent_bbbbbb"
android:orientation="horizontal"
android:paddingHorizontal="8dp"
android:paddingHorizontal="11dp"
android:paddingVertical="5.3dp"
tools:ignore="RelativeOverlap">
@ -525,7 +476,7 @@
android:fontFamily="@font/gmarket_sans_medium"
android:text="참여자"
android:textColor="@color/color_bbbbbb"
android:textSize="11sp"
android:textSize="12sp"
tools:ignore="SmallSp" />
<TextView
@ -535,9 +486,9 @@
android:layout_marginStart="6.7dp"
android:fontFamily="@font/gmarket_sans_bold"
android:textColor="@color/color_bbbbbb"
android:textSize="11sp"
android:textSize="12sp"
tools:ignore="RelativeOverlap,SmallSp"
tools:text="777" />
tools:text="18" />
</LinearLayout>
</LinearLayout>
</RelativeLayout>
@ -555,15 +506,21 @@
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<LinearLayout
android:id="@+id/ll_option_buttons"
<RelativeLayout
android:id="@+id/rl_option_buttons"
android:layout_width="wrap_content"
android:layout_height="0dp"
android:orientation="vertical"
android:paddingStart="6.7dp"
android:paddingEnd="13.3dp"
app:layout_constraintBottom_toTopOf="@+id/rl_input_chat"
app:layout_constraintEnd_toEndOf="parent">
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toBottomOf="@+id/fl_margin">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:orientation="vertical">
<FrameLayout
android:id="@+id/fl_speaker_mute"
@ -582,6 +539,40 @@
android:src="@drawable/ic_speaker_on" />
</FrameLayout>
<FrameLayout
android:id="@+id/fl_roulette"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="13.3dp"
android:background="@drawable/bg_round_corner_10_99525252"
android:padding="10dp"
android:visibility="gone">
<ImageView
android:layout_width="24dp"
android:layout_height="24dp"
android:layout_gravity="center"
android:contentDescription="@null"
android:src="@drawable/ic_roulette" />
</FrameLayout>
<FrameLayout
android:id="@+id/fl_roulette_settings"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="13.3dp"
android:background="@drawable/bg_round_corner_10_99525252"
android:padding="10dp"
android:visibility="gone">
<ImageView
android:layout_width="24dp"
android:layout_height="24dp"
android:layout_gravity="center"
android:contentDescription="@null"
android:src="@drawable/ic_roulette_settings" />
</FrameLayout>
<FrameLayout
android:id="@+id/fl_microphone_mute"
android:layout_width="wrap_content"
@ -617,48 +608,13 @@
android:src="@drawable/ic_donation_message_list" />
</FrameLayout>
<FrameLayout
android:id="@+id/fl_roulette"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="13.3dp"
android:background="@drawable/bg_round_corner_10_99525252"
android:padding="10dp"
android:visibility="gone">
<ImageView
android:layout_width="24dp"
android:layout_height="24dp"
android:layout_gravity="center"
android:contentDescription="@null"
android:src="@drawable/ic_roulette" />
</FrameLayout>
<FrameLayout
android:id="@+id/fl_roulette_settings"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="13.3dp"
android:background="@drawable/bg_round_corner_10_99525252"
android:padding="10dp"
android:visibility="gone">
<ImageView
android:layout_width="24dp"
android:layout_height="24dp"
android:layout_gravity="center"
android:contentDescription="@null"
android:src="@drawable/ic_roulette_settings" />
</FrameLayout>
<FrameLayout
android:id="@+id/fl_donation"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="13.3dp"
android:background="@drawable/bg_round_corner_10_99525252"
android:padding="10dp"
android:visibility="gone">
android:padding="10dp">
<ImageView
android:layout_width="24dp"
@ -667,25 +623,8 @@
android:contentDescription="@null"
android:src="@drawable/ic_donation" />
</FrameLayout>
<FrameLayout
android:id="@+id/fl_like_heart"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="13.3dp"
android:background="@drawable/bg_round_corner_10_99525252"
android:padding="10dp"
android:visibility="gone">
<ImageView
android:id="@+id/iv_like_heart"
android:layout_width="24dp"
android:layout_height="24dp"
android:layout_gravity="center"
android:contentDescription="@null"
android:src="@drawable/ic_heart_pink" />
</FrameLayout>
</LinearLayout>
</RelativeLayout>
<TextView
android:id="@+id/tv_new_chat"
@ -722,9 +661,8 @@
android:fontFamily="@font/gmarket_sans_medium"
android:gravity="center_vertical"
android:hint="채팅을 입력하세요"
android:imeOptions="actionSend"
android:importantForAutofill="no"
android:inputType="text"
android:inputType="text|textMultiLine"
android:paddingVertical="16.7dp"
android:paddingStart="13.3dp"
android:paddingEnd="45dp"
@ -758,4 +696,3 @@
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
</FrameLayout>

View File

@ -78,19 +78,16 @@
android:layout_marginBottom="13.3dp"
android:visibility="gone">
<TextView
android:id="@+id/tv_secret"
<CheckBox
android:id="@+id/chk_secret"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:button="@null"
android:drawablePadding="8dp"
android:button="@drawable/ic_select_square"
android:fontFamily="@font/gmarket_sans_medium"
android:gravity="center"
android:paddingHorizontal="8dp"
android:text="비밀후원"
android:textColor="@color/color_check_secret"
app:drawableStartCompat="@drawable/ic_select_square" />
android:textColor="@color/color_check_secret" />
</RelativeLayout>
<EditText
@ -107,7 +104,7 @@
android:textColor="@color/color_eeeeee"
android:textColorHint="@color/color_777777"
android:textCursorDrawable="@drawable/edit_text_cursor"
android:textSize="13.3sp"
android:textSize="14.7sp"
tools:ignore="LabelFor" />
<LinearLayout
@ -198,16 +195,16 @@
android:layout_marginStart="10.3dp"
android:background="@drawable/bg_round_corner_6_7_88333333"
android:fontFamily="@font/gmarket_sans_medium"
android:hint="함께 보낼 메시지 입력(최대 200자)"
android:hint="함께 보낼 메시지 입력(최대 50자)"
android:importantForAutofill="no"
android:inputType="text"
android:maxLength="200"
android:maxLength="50"
android:maxLines="1"
android:padding="13.3dp"
android:textColor="@color/color_eeeeee"
android:textColorHint="@color/color_777777"
android:textCursorDrawable="@drawable/edit_text_cursor"
android:textSize="13.3sp"
android:textSize="14.7sp"
tools:ignore="LabelFor" />
</LinearLayout>

View File

@ -41,113 +41,31 @@
android:paddingHorizontal="18.7dp"
android:paddingVertical="10.7dp">
<LinearLayout
android:id="@+id/ll_total_can_title"
<TextView
android:id="@+id/tv_total_can_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentStart="true"
android:layout_centerVertical="true"
android:orientation="horizontal">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:fontFamily="@font/gmarket_sans_bold"
android:text="합계"
android:textColor="@color/color_d2d2d2"
android:textSize="13.3sp" />
<LinearLayout
android:id="@+id/ll_total_can_sub_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:visibility="gone">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:fontFamily="@font/gmarket_sans_bold"
android:text=" ("
android:textColor="@color/color_d2d2d2"
android:textSize="13.3sp" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:fontFamily="@font/gmarket_sans_medium"
android:text="일반"
android:textColor="@color/color_3bb9f1"
android:textSize="13.3sp" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:fontFamily="@font/gmarket_sans_medium"
android:text="/"
android:textColor="@color/color_d2d2d2"
android:textSize="13.3sp" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:fontFamily="@font/gmarket_sans_medium"
android:text="비밀"
android:textColor="@color/color_fedc00"
android:textSize="13.3sp" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:fontFamily="@font/gmarket_sans_bold"
android:text=")"
android:textColor="@color/color_d2d2d2"
android:textSize="13.3sp" />
</LinearLayout>
</LinearLayout>
<LinearLayout
android:id="@+id/tv_total_can"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_marginEnd="2.7dp"
android:layout_toStartOf="@+id/tv_total_can_unit"
android:layout_toEndOf="@+id/ll_total_can_title"
android:gravity="end">
<TextView
android:id="@+id/tv_total_can"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toEndOf="@+id/tv_total_can_title"
android:fontFamily="@font/gmarket_sans_medium"
android:gravity="end"
android:textColor="@color/color_80d8ff"
android:textSize="14sp"
android:textSize="16sp"
tools:text="1,999,999" />
<TextView
android:id="@+id/tv_total_can_slash"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:fontFamily="@font/gmarket_sans_medium"
android:gravity="end"
android:text="/"
android:textColor="@color/white"
android:textSize="14sp"
android:visibility="gone" />
<TextView
android:id="@+id/tv_total_secret_can"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:fontFamily="@font/gmarket_sans_medium"
android:gravity="end"
android:textColor="@color/color_fedc00"
android:textSize="14sp"
android:visibility="gone"
tools:text="1,999,999" />
</LinearLayout>
<TextView
android:id="@+id/tv_total_can_unit"
android:layout_width="wrap_content"

View File

@ -111,7 +111,7 @@
android:background="@drawable/bg_round_corner_10_232323_3bb9f1"
android:hint="댓글을 입력해 보세요"
android:importantForAutofill="no"
android:inputType="text|textMultiLine"
android:inputType="text"
android:paddingVertical="13.3dp"
android:paddingStart="13.3dp"
android:paddingEnd="50.7dp"

View File

@ -193,7 +193,7 @@
android:background="@drawable/bg_round_corner_10_232323_3bb9f1"
android:hint="댓글을 입력해 보세요"
android:importantForAutofill="no"
android:inputType="text|textMultiLine"
android:inputType="text"
android:paddingVertical="13.3dp"
android:paddingStart="13.3dp"
android:paddingEnd="50.7dp"

View File

@ -2,8 +2,7 @@
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
tools:background="@color/black">
android:layout_height="wrap_content">
<RelativeLayout
android:id="@+id/rl_donation_ranking"
@ -70,26 +69,14 @@
android:textSize="13.3sp"
tools:text="Remix" />
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_centerVertical="true"
android:layout_marginHorizontal="13.3dp"
android:layout_toEndOf="@+id/tv_nickname"
android:gravity="end|center_vertical"
android:orientation="vertical">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
android:id="@+id/tv_donation_can"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_marginEnd="4dp"
android:layout_toStartOf="@+id/tv_donation_can_unit"
android:layout_toEndOf="@+id/tv_nickname"
android:fontFamily="@font/gmarket_sans_medium"
android:gravity="end"
android:textColor="@color/color_3bb9f1"
@ -100,56 +87,14 @@
android:id="@+id/tv_donation_can_unit"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_centerVertical="true"
android:layout_marginEnd="13.3dp"
android:fontFamily="@font/gmarket_sans_medium"
android:gravity="end"
android:text="캔"
android:textColor="@color/color_eeeeee"
android:textSize="10.7sp"
tools:ignore="SmallSp" />
</LinearLayout>
<LinearLayout
android:id="@+id/ll_donation_secret"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:orientation="horizontal"
android:visibility="gone">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/bg_round_corner_2_7_fedc00"
android:fontFamily="@font/gmarket_sans_medium"
android:gravity="end"
android:paddingHorizontal="3.33dp"
android:paddingVertical="2.67dp"
android:text="비밀"
android:textColor="@color/color_111111"
android:textSize="12sp"
tools:ignore="SmallSp" />
<TextView
android:id="@+id/tv_donation_secret_can"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginHorizontal="4dp"
android:fontFamily="@font/gmarket_sans_medium"
android:gravity="end"
android:textColor="@color/color_fedc00"
android:textSize="13.3sp"
tools:text="1000" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:fontFamily="@font/gmarket_sans_medium"
android:gravity="end"
android:text="캔"
android:textColor="@color/color_eeeeee"
android:textSize="10.7sp"
tools:ignore="SmallSp" />
</LinearLayout>
</LinearLayout>
</RelativeLayout>
</FrameLayout>

View File

@ -33,7 +33,6 @@
<color name="color_a285eb">#A285EB</color>
<color name="color_3d2a6c">#3D2A6C</color>
<color name="color_ffdc00">#FFDC00</color>
<color name="color_fedc00">#FEDC00</color>
<color name="color_4999e3">#4999E3</color>
<color name="color_35c2ff">#35C2FF</color>
<color name="color_97aeff">#97AEFF</color>
@ -126,8 +125,4 @@
<color name="color_ff14d9">#FF14D9</color>
<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>