콘텐츠 상세 - 크리에이터 팔로우와 알림설정

- 팔로잉 상태에서 알림 켜기/끄기 상태 추가
This commit is contained in:
klaus 2024-09-20 11:44:13 +09:00
parent 5b2c5a6e2f
commit 2ed77a3332
4 changed files with 78 additions and 10 deletions

View File

@ -42,6 +42,7 @@ import kr.co.vividnext.sodalive.common.LoadingDialog
import kr.co.vividnext.sodalive.common.SharedPreferenceManager import kr.co.vividnext.sodalive.common.SharedPreferenceManager
import kr.co.vividnext.sodalive.common.Utils import kr.co.vividnext.sodalive.common.Utils
import kr.co.vividnext.sodalive.databinding.ActivityAudioContentDetailBinding import kr.co.vividnext.sodalive.databinding.ActivityAudioContentDetailBinding
import kr.co.vividnext.sodalive.explorer.profile.CreatorFollowNotifyFragment
import kr.co.vividnext.sodalive.explorer.profile.UserProfileActivity import kr.co.vividnext.sodalive.explorer.profile.UserProfileActivity
import kr.co.vividnext.sodalive.extensions.dpToPx import kr.co.vividnext.sodalive.extensions.dpToPx
import kr.co.vividnext.sodalive.extensions.moneyFormat import kr.co.vividnext.sodalive.extensions.moneyFormat
@ -843,21 +844,50 @@ class AudioContentDetailActivity : BaseActivity<ActivityAudioContentDetailBindin
if (creator.creatorId != SharedPreferenceManager.userId) { if (creator.creatorId != SharedPreferenceManager.userId) {
binding.ivFollow.visibility = View.VISIBLE binding.ivFollow.visibility = View.VISIBLE
if (creator.isFollowing) { if (creator.isFollow) {
binding.ivFollow.setImageResource(R.drawable.btn_following_big) binding.ivFollow.setImageResource(
if (creator.isNotify) {
R.drawable.btn_following_big
} else {
R.drawable.btn_following_no_alarm_big
}
)
binding.ivFollow.setOnClickListener { binding.ivFollow.setOnClickListener {
viewModel.unRegisterNotification( val notifyFragment = CreatorFollowNotifyFragment(
contentId = audioContentId, onClickNotifyAll = {
creatorId = creator.creatorId viewModel.follow(
contentId = audioContentId,
creatorId = creator.creatorId,
follow = true,
notify = true
)
},
onClickNotifyNone = {
viewModel.follow(
contentId = audioContentId,
creatorId = creator.creatorId,
follow = true,
notify = false
)
},
onClickUnFollow = {
viewModel.follow(
contentId = audioContentId,
creatorId = creator.creatorId,
follow = false,
notify = false
)
}
) )
if (notifyFragment.isAdded) return@setOnClickListener
notifyFragment.show(supportFragmentManager, notifyFragment.tag)
} }
} else { } else {
binding.ivFollow.setImageResource(R.drawable.btn_follow_big) binding.ivFollow.setImageResource(R.drawable.btn_follow_big)
binding.ivFollow.setOnClickListener { binding.ivFollow.setOnClickListener {
viewModel.registerNotification( viewModel.follow(contentId = audioContentId, creatorId = creator.creatorId)
contentId = audioContentId,
creatorId = creator.creatorId
)
} }
} }
} else { } else {

View File

@ -25,9 +25,11 @@ import kr.co.vividnext.sodalive.mypage.auth.AuthVerifyRequest
import kr.co.vividnext.sodalive.report.ReportRepository import kr.co.vividnext.sodalive.report.ReportRepository
import kr.co.vividnext.sodalive.report.ReportRequest import kr.co.vividnext.sodalive.report.ReportRequest
import kr.co.vividnext.sodalive.report.ReportType import kr.co.vividnext.sodalive.report.ReportType
import kr.co.vividnext.sodalive.user.UserRepository
class AudioContentDetailViewModel( class AudioContentDetailViewModel(
private val repository: AudioContentRepository, private val repository: AudioContentRepository,
private val userRepository: UserRepository,
private val authRepository: AuthRepository, private val authRepository: AuthRepository,
private val reportRepository: ReportRepository, private val reportRepository: ReportRepository,
private val commentRepository: AudioContentCommentRepository private val commentRepository: AudioContentCommentRepository
@ -102,6 +104,41 @@ class AudioContentDetailViewModel(
) )
} }
fun follow(contentId: Long, creatorId: Long, follow: Boolean = true, notify: Boolean = true) {
isLoading.value = true
compositeDisposable.add(
userRepository.creatorFollow(
creatorId = creatorId,
follow,
notify,
token = "Bearer ${SharedPreferenceManager.token}"
)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(
{
if (it.success && it.data != null) {
getAudioContentDetail(contentId)
} else {
if (it.message != null) {
_toastLiveData.postValue(it.message)
} else {
_toastLiveData.postValue(
"알 수 없는 오류가 발생했습니다. 다시 시도해 주세요."
)
}
}
isLoading.value = false
},
{
isLoading.value = false
it.message?.let { message -> Logger.e(message) }
_toastLiveData.postValue("알 수 없는 오류가 발생했습니다. 다시 시도해 주세요.")
}
)
)
}
fun registerNotification(contentId: Long, creatorId: Long) { fun registerNotification(contentId: Long, creatorId: Long) {
isLoading.value = true isLoading.value = true
compositeDisposable.add( compositeDisposable.add(

View File

@ -237,7 +237,7 @@ class AppDI(private val context: Context, isDebugMode: Boolean) {
viewModel { AudioContentUploadViewModel(get()) } viewModel { AudioContentUploadViewModel(get()) }
viewModel { AudioContentModifyViewModel(get()) } viewModel { AudioContentModifyViewModel(get()) }
viewModel { AudioContentThemeViewModel(get()) } viewModel { AudioContentThemeViewModel(get()) }
viewModel { AudioContentDetailViewModel(get(), get(), get(), get()) } viewModel { AudioContentDetailViewModel(get(), get(), get(), get(), get()) }
viewModel { AudioContentCommentListViewModel(get()) } viewModel { AudioContentCommentListViewModel(get()) }
viewModel { AudioContentCommentReplyViewModel(get()) } viewModel { AudioContentCommentReplyViewModel(get()) }
viewModel { FollowingCreatorViewModel(get(), get()) } viewModel { FollowingCreatorViewModel(get(), get()) }

View File

@ -82,6 +82,7 @@ class FollowingCreatorViewModel(
} }
fun follow(creatorId: Long, follow: Boolean = true, notify: Boolean = true) { fun follow(creatorId: Long, follow: Boolean = true, notify: Boolean = true) {
_isLoading.value = true
compositeDisposable.add( compositeDisposable.add(
userRepository.creatorFollow( userRepository.creatorFollow(
creatorId = creatorId, creatorId = creatorId,