diff --git a/app/src/main/java/kr/co/vividnext/sodalive/live/GetLatestFinishedLiveResponse.kt b/app/src/main/java/kr/co/vividnext/sodalive/live/GetLatestFinishedLiveResponse.kt index 124f5221..20bbb8e9 100644 --- a/app/src/main/java/kr/co/vividnext/sodalive/live/GetLatestFinishedLiveResponse.kt +++ b/app/src/main/java/kr/co/vividnext/sodalive/live/GetLatestFinishedLiveResponse.kt @@ -8,6 +8,6 @@ data class GetLatestFinishedLiveResponse( @SerializedName("memberId") val memberId: Long, @SerializedName("nickname") val nickname: String, @SerializedName("profileImageUrl") val profileImageUrl: String, - @SerializedName("title") val title: String, - @SerializedName("timeAgo") val timeAgo: String + @SerializedName("timeAgo") val timeAgo: String, + @SerializedName("following") val following: Boolean ) diff --git a/app/src/main/java/kr/co/vividnext/sodalive/live/LatestFinishedLiveAdapter.kt b/app/src/main/java/kr/co/vividnext/sodalive/live/LatestFinishedLiveAdapter.kt index cb4a8a8b..f2153a13 100644 --- a/app/src/main/java/kr/co/vividnext/sodalive/live/LatestFinishedLiveAdapter.kt +++ b/app/src/main/java/kr/co/vividnext/sodalive/live/LatestFinishedLiveAdapter.kt @@ -50,7 +50,6 @@ class LatestFinishedLiveAdapter( binding.tvNickname.text = item.nickname binding.tvTimeAgo.text = item.timeAgo - binding.tvTitle.text = item.title binding.root.setOnClickListener { onClick(item.memberId) } } } diff --git a/app/src/main/java/kr/co/vividnext/sodalive/live/LiveApi.kt b/app/src/main/java/kr/co/vividnext/sodalive/live/LiveApi.kt index 9e10c141..fa76b91b 100644 --- a/app/src/main/java/kr/co/vividnext/sodalive/live/LiveApi.kt +++ b/app/src/main/java/kr/co/vividnext/sodalive/live/LiveApi.kt @@ -29,6 +29,7 @@ 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 @@ -238,4 +239,12 @@ interface LiveApi { fun getLatestFinishedLive( @Header("Authorization") authHeader: String ): Flowable>> + + @GET("/api/live") + fun getLiveMain( + @Query("timezone") timezone: String, + @Query("contentType") contentType: ContentType, + @Query("isAdultContentVisible") isAdultContentVisible: Boolean, + @Header("Authorization") authHeader: String + ): Single> } diff --git a/app/src/main/java/kr/co/vividnext/sodalive/live/LiveFragment.kt b/app/src/main/java/kr/co/vividnext/sodalive/live/LiveFragment.kt index 66ba8ae7..5d2a7225 100644 --- a/app/src/main/java/kr/co/vividnext/sodalive/live/LiveFragment.kt +++ b/app/src/main/java/kr/co/vividnext/sodalive/live/LiveFragment.kt @@ -36,7 +36,6 @@ import kr.co.vividnext.sodalive.explorer.profile.creator_community.all.CreatorCo import kr.co.vividnext.sodalive.extensions.dpToPx import kr.co.vividnext.sodalive.extensions.moneyFormat import kr.co.vividnext.sodalive.following.FollowingCreatorActivity -import kr.co.vividnext.sodalive.home.AudioContentMainItem import kr.co.vividnext.sodalive.home.HomeContentAdapter import kr.co.vividnext.sodalive.live.now.LiveNowAdapter import kr.co.vividnext.sodalive.live.now.all.LiveNowAllActivity @@ -125,7 +124,7 @@ class LiveFragment : BaseFragment(FragmentLiveBinding::infl setupView() message = "라이브를 불러오고 있습니다." - viewModel.getSummary() + viewModel.getLiveMain() } override fun onDestroyView() { @@ -211,7 +210,7 @@ class LiveFragment : BaseFragment(FragmentLiveBinding::infl liveReservationAdapter.clear() message = "라이브를 불러오고 있습니다." - viewModel.getSummary() + viewModel.getLiveMain() } @SuppressLint("NotifyDataSetChanged") @@ -463,18 +462,7 @@ class LiveFragment : BaseFragment(FragmentLiveBinding::infl viewModel.replayContentListLiveData.observe(viewLifecycleOwner) { contentList -> if (contentList.isNotEmpty()) { - adapter.addItems( - contentList.map { - AudioContentMainItem( - contentId = it.contentId, - creatorId = it.creatorId, - title = it.title, - coverImageUrl = it.coverImageUrl, - creatorNickname = it.creatorNickname, - isPointAvailable = it.isPointAvailable - ) - } - ) + adapter.addItems(contentList) binding.llReplayLive.visibility = View.VISIBLE binding.rvReplayLive.visibility = View.VISIBLE @@ -757,7 +745,7 @@ class LiveFragment : BaseFragment(FragmentLiveBinding::infl private fun startLive(roomId: Long) { val onEnterRoomSuccess = { - viewModel.getSummary() + viewModel.getLiveMain() requireActivity().runOnUiThread { val intent = Intent(requireContext(), LiveRoomActivity::class.java) intent.putExtra(Constants.EXTRA_ROOM_ID, roomId) @@ -785,7 +773,7 @@ class LiveFragment : BaseFragment(FragmentLiveBinding::infl message = "라이브를 불러오고 있습니다." liveNowAdapter.clear() liveReservationAdapter.clear() - viewModel.getSummary() + viewModel.getLiveMain() } }, cancelButtonTitle = "닫기", diff --git a/app/src/main/java/kr/co/vividnext/sodalive/live/LiveMainResponse.kt b/app/src/main/java/kr/co/vividnext/sodalive/live/LiveMainResponse.kt new file mode 100644 index 00000000..f8c1a926 --- /dev/null +++ b/app/src/main/java/kr/co/vividnext/sodalive/live/LiveMainResponse.kt @@ -0,0 +1,26 @@ +package kr.co.vividnext.sodalive.live + +import androidx.annotation.Keep +import com.google.gson.annotations.SerializedName +import kr.co.vividnext.sodalive.explorer.profile.creator_community.GetCommunityPostListResponse +import kr.co.vividnext.sodalive.home.AudioContentMainItem +import kr.co.vividnext.sodalive.live.recommend.GetRecommendLiveResponse +import kr.co.vividnext.sodalive.live.recommend_channel.GetRecommendChannelResponse + +@Keep +data class LiveMainResponse( + @SerializedName("liveOnAirRoomList") + val liveOnAirRoomList: List, + @SerializedName("communityPostList") + val communityPostList: List, + @SerializedName("recommendLiveList") + val recommendLiveList: List, + @SerializedName("latestFinishedLiveList") + val latestFinishedLiveList: List, + @SerializedName("replayLive") + val replayLive: List, + @SerializedName("followingChannelList") + val followingChannelList: List, + @SerializedName("liveReservationRoomList") + val liveReservationRoomList: List +) 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 0d29135a..84685aba 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 @@ -19,6 +19,7 @@ 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.settings.ContentType import kr.co.vividnext.sodalive.user.CreatorFollowRequestRequest import kr.co.vividnext.sodalive.user.UserApi import okhttp3.MultipartBody @@ -265,4 +266,11 @@ class LiveRepository( fun getLatestFinishedLive(token: String) = api.getLatestFinishedLive( authHeader = token ) + + fun getLiveMain(token: String) = api.getLiveMain( + timezone = TimeZone.getDefault().id, + contentType = ContentType.values()[SharedPreferenceManager.contentPreference], + isAdultContentVisible = SharedPreferenceManager.isAdultContentVisible, + authHeader = token + ) } diff --git a/app/src/main/java/kr/co/vividnext/sodalive/live/LiveViewModel.kt b/app/src/main/java/kr/co/vividnext/sodalive/live/LiveViewModel.kt index 2a505c1d..8512433d 100644 --- a/app/src/main/java/kr/co/vividnext/sodalive/live/LiveViewModel.kt +++ b/app/src/main/java/kr/co/vividnext/sodalive/live/LiveViewModel.kt @@ -7,11 +7,11 @@ import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers import io.reactivex.rxjava3.core.Flowable import io.reactivex.rxjava3.schedulers.Schedulers import kr.co.vividnext.sodalive.audio_content.AudioContentRepository -import kr.co.vividnext.sodalive.audio_content.main.GetAudioContentMainItem import kr.co.vividnext.sodalive.base.BaseViewModel import kr.co.vividnext.sodalive.common.SharedPreferenceManager import kr.co.vividnext.sodalive.explorer.profile.creator_community.CreatorCommunityRepository import kr.co.vividnext.sodalive.explorer.profile.creator_community.GetCommunityPostListResponse +import kr.co.vividnext.sodalive.home.AudioContentMainItem import kr.co.vividnext.sodalive.live.recommend.GetRecommendLiveResponse import kr.co.vividnext.sodalive.live.recommend.LiveRecommendRepository import kr.co.vividnext.sodalive.live.recommend_channel.GetRecommendChannelResponse @@ -64,8 +64,8 @@ class LiveViewModel( val communityPostItemLiveData: LiveData> get() = _communityPostItemLiveData - private var _replayContentListLiveData = MutableLiveData>() - val replayContentListLiveData: LiveData> + private var _replayContentListLiveData = MutableLiveData>() + val replayContentListLiveData: LiveData> get() = _replayContentListLiveData private val _latestFinishedLiveListLiveData = @@ -266,12 +266,6 @@ class LiveViewModel( _latestFinishedLiveListLiveData.postValue(emptyList()) } - val replayLive = it.replayLive - if (replayLive.success && replayLive.data != null) { - val data = replayLive.data!! - _replayContentListLiveData.postValue(data) - } - _isLoading.postValue(false) }, { @@ -572,4 +566,45 @@ class LiveViewModel( ) } } + + fun getLiveMain() { + _isLoading.value = true + + compositeDisposable.add( + repository.getLiveMain( + "Bearer ${SharedPreferenceManager.token}" + ) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe( + { + _isLoading.value = false + if (it.success && it.data != null) { + val data = it.data!! + + _liveNowLiveData.value = data.liveOnAirRoomList + _recommendLiveData.value = data.recommendLiveList + _liveReservationLiveData.value = data.liveReservationRoomList + _communityPostItemLiveData.value = data.communityPostList + _recommendChannelLiveData.value = data.followingChannelList + _replayContentListLiveData.value = data.replayLive + _latestFinishedLiveListLiveData.value = data.latestFinishedLiveList + } else { + if (it.message != null) { + _toastLiveData.postValue(it.message) + } else { + _toastLiveData.postValue( + "알 수 없는 오류가 발생했습니다. 다시 시도해 주세요." + ) + } + } + }, + { + _isLoading.value = false + it.message?.let { message -> Logger.e(message) } + _toastLiveData.postValue("알 수 없는 오류가 발생했습니다. 다시 시도해 주세요.") + } + ) + ) + } } diff --git a/app/src/main/java/kr/co/vividnext/sodalive/live/reservation/all/LiveReservationAllActivity.kt b/app/src/main/java/kr/co/vividnext/sodalive/live/reservation/all/LiveReservationAllActivity.kt index 60c8f75d..64978a11 100644 --- a/app/src/main/java/kr/co/vividnext/sodalive/live/reservation/all/LiveReservationAllActivity.kt +++ b/app/src/main/java/kr/co/vividnext/sodalive/live/reservation/all/LiveReservationAllActivity.kt @@ -321,7 +321,7 @@ class LiveReservationAllActivity : BaseActivity - - - - - - - + app:layout_constraintTop_toTopOf="parent" /> + app:layout_constraintTop_toBottomOf="@+id/iv_profile"> - -