From 70fe5a4441bf8592f33244e0f238fb9c17417f5a Mon Sep 17 00:00:00 2001 From: klaus Date: Sat, 22 Mar 2025 04:07:54 +0900 Subject: [PATCH] =?UTF-8?q?=EC=BD=98=ED=85=90=EC=B8=A0=20=EB=A9=94?= =?UTF-8?q?=EC=9D=B8=20-=20=EB=A1=9C=EA=B7=B8=EC=9D=B8=20=ED=95=98?= =?UTF-8?q?=EC=A7=80=20=EC=95=8A=EA=B3=A0=EB=8F=84=20=ED=8E=98=EC=9D=B4?= =?UTF-8?q?=EC=A7=80=EB=A5=BC=20=EC=A1=B0=ED=9A=8C=ED=95=A0=20=EC=88=98=20?= =?UTF-8?q?=EC=9E=88=EB=8F=84=EB=A1=9D=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sodalive/audio_content/AudioContentApi.kt | 8 + .../home/AudioContentMainTabHomeFragment.kt | 167 +++++++++++++----- .../home/AudioContentMainTabHomeRepository.kt | 7 + .../home/AudioContentMainTabHomeViewModel.kt | 12 +- .../java/kr/co/vividnext/sodalive/di/AppDI.kt | 2 +- .../vividnext/sodalive/main/MainActivity.kt | 57 ++++-- .../sodalive/splash/SplashActivity.kt | 21 +-- .../fragment_audio_content_main_tab_home.xml | 30 ++-- 8 files changed, 204 insertions(+), 100 deletions(-) diff --git a/app/src/main/java/kr/co/vividnext/sodalive/audio_content/AudioContentApi.kt b/app/src/main/java/kr/co/vividnext/sodalive/audio_content/AudioContentApi.kt index f5fac1a..345d253 100644 --- a/app/src/main/java/kr/co/vividnext/sodalive/audio_content/AudioContentApi.kt +++ b/app/src/main/java/kr/co/vividnext/sodalive/audio_content/AudioContentApi.kt @@ -265,6 +265,14 @@ interface AudioContentApi { @Header("Authorization") authHeader: String ): Single>> + @GET("/v2/audio-content/main/home/content/ranking") + fun getContentMainHomeContentRanking( + @Query("sort-type") sortType: String, + @Query("isAdultContentVisible") isAdultContentVisible: Boolean, + @Query("contentType") contentType: ContentType, + @Header("Authorization") authHeader: String + ): Single>> + @GET("/v2/audio-content/main/series") fun getContentMainSeries( @Query("isAdultContentVisible") isAdultContentVisible: Boolean, diff --git a/app/src/main/java/kr/co/vividnext/sodalive/audio_content/main/v2/home/AudioContentMainTabHomeFragment.kt b/app/src/main/java/kr/co/vividnext/sodalive/audio_content/main/v2/home/AudioContentMainTabHomeFragment.kt index ecbf760..ad9f402 100644 --- a/app/src/main/java/kr/co/vividnext/sodalive/audio_content/main/v2/home/AudioContentMainTabHomeFragment.kt +++ b/app/src/main/java/kr/co/vividnext/sodalive/audio_content/main/v2/home/AudioContentMainTabHomeFragment.kt @@ -1,6 +1,7 @@ package kr.co.vividnext.sodalive.audio_content.main.v2.home import android.content.Intent +import android.content.SharedPreferences import android.graphics.Color import android.graphics.Rect import android.net.Uri @@ -72,14 +73,45 @@ class AudioContentMainTabHomeFragment : BaseFragment + // 특정 키에 대한 값이 변경될 때 UI 업데이트 + if (key == Constants.PREF_USER_ROLE) { + if ( + sharedPreferences.getString( + key, + MemberRole.USER.name + ) == MemberRole.CREATOR.name + ) { + binding.llUploadContent.visibility = View.VISIBLE + binding.llUploadContent.setOnClickListener { + startActivity( + Intent( + requireActivity(), + AudioContentUploadActivity::class.java + ) + ) + } + } else { + binding.llUploadContent.visibility = View.GONE + } + } + } + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) + SharedPreferenceManager.registerOnSharedPreferenceChangeListener(preferenceChangeListener) setupView() bindData() viewModel.fetchData() } + override fun onDestroyView() { + SharedPreferenceManager.unregisterOnSharedPreferenceChangeListener(preferenceChangeListener) + super.onDestroyView() + } + private fun bindData() { viewModel.toastLiveData.observe(viewLifecycleOwner) { it?.let { Toast.makeText(requireContext(), it, Toast.LENGTH_LONG).show() } @@ -125,22 +157,29 @@ class AudioContentMainTabHomeFragment : BaseFragment - startActivity( - Intent(requireActivity(), AudioContentDetailActivity::class.java).apply { - putExtra(Constants.EXTRA_AUDIO_CONTENT_ID, contentId) - } - ) + if (SharedPreferenceManager.token.isNotBlank()) { + startActivity( + Intent(requireActivity(), AudioContentDetailActivity::class.java).apply { + putExtra(Constants.EXTRA_AUDIO_CONTENT_ID, contentId) + } + ) + } else { + (requireActivity() as MainActivity).showLoginActivity() + } }, onClickCreator = { creatorId -> - startActivity( - Intent(requireActivity(), UserProfileActivity::class.java).apply { - putExtra(Constants.EXTRA_USER_ID, creatorId) - } - ) + if (SharedPreferenceManager.token.isNotBlank()) { + startActivity( + Intent(requireActivity(), UserProfileActivity::class.java).apply { + putExtra(Constants.EXTRA_USER_ID, creatorId) + } + ) + } } ) diff --git a/app/src/main/java/kr/co/vividnext/sodalive/audio_content/main/v2/home/AudioContentMainTabHomeRepository.kt b/app/src/main/java/kr/co/vividnext/sodalive/audio_content/main/v2/home/AudioContentMainTabHomeRepository.kt index 3deb5f0..f7f8aa6 100644 --- a/app/src/main/java/kr/co/vividnext/sodalive/audio_content/main/v2/home/AudioContentMainTabHomeRepository.kt +++ b/app/src/main/java/kr/co/vividnext/sodalive/audio_content/main/v2/home/AudioContentMainTabHomeRepository.kt @@ -20,4 +20,11 @@ class AudioContentMainTabHomeRepository(private val api: AudioContentApi) { contentType = ContentType.values()[SharedPreferenceManager.contentPreference], authHeader = token ) + + fun getContentRanking(sort: String, token: String) = api.getContentMainHomeContentRanking( + sortType = sort, + isAdultContentVisible = SharedPreferenceManager.isAdultContentVisible, + contentType = ContentType.values()[SharedPreferenceManager.contentPreference], + authHeader = token + ) } diff --git a/app/src/main/java/kr/co/vividnext/sodalive/audio_content/main/v2/home/AudioContentMainTabHomeViewModel.kt b/app/src/main/java/kr/co/vividnext/sodalive/audio_content/main/v2/home/AudioContentMainTabHomeViewModel.kt index a2c2699..d042e66 100644 --- a/app/src/main/java/kr/co/vividnext/sodalive/audio_content/main/v2/home/AudioContentMainTabHomeViewModel.kt +++ b/app/src/main/java/kr/co/vividnext/sodalive/audio_content/main/v2/home/AudioContentMainTabHomeViewModel.kt @@ -5,7 +5,6 @@ import androidx.lifecycle.MutableLiveData import com.orhanobut.logger.Logger import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers import io.reactivex.rxjava3.schedulers.Schedulers -import kr.co.vividnext.sodalive.audio_content.AudioContentRepository import kr.co.vividnext.sodalive.audio_content.main.ContentCreatorResponse import kr.co.vividnext.sodalive.audio_content.main.GetAudioContentBannerResponse import kr.co.vividnext.sodalive.audio_content.main.GetAudioContentRankingItem @@ -17,8 +16,7 @@ import kr.co.vividnext.sodalive.settings.event.EventItem import kr.co.vividnext.sodalive.settings.notice.NoticeItem class AudioContentMainTabHomeViewModel( - private val repository: AudioContentMainTabHomeRepository, - private val contentRepository: AudioContentRepository + private val repository: AudioContentMainTabHomeRepository ) : BaseViewModel() { private val _toastLiveData = MutableLiveData() val toastLiveData: LiveData @@ -112,10 +110,8 @@ class AudioContentMainTabHomeViewModel( fun getContentRanking(sort: String = "매출") { _isLoading.value = true compositeDisposable.add( - contentRepository.getContentRanking( - page = 1, - size = 12, - sortType = sort, + repository.getContentRanking( + sort = sort, token = "Bearer ${SharedPreferenceManager.token}" ) .subscribeOn(Schedulers.io()) @@ -124,7 +120,7 @@ class AudioContentMainTabHomeViewModel( { _isLoading.value = false if (it.success && it.data != null) { - _rankContentLiveData.value = it.data.items + _rankContentLiveData.value = it.data!! } else { if (it.message != null) { _toastLiveData.postValue(it.message) diff --git a/app/src/main/java/kr/co/vividnext/sodalive/di/AppDI.kt b/app/src/main/java/kr/co/vividnext/sodalive/di/AppDI.kt index 701136e..3f81e1a 100644 --- a/app/src/main/java/kr/co/vividnext/sodalive/di/AppDI.kt +++ b/app/src/main/java/kr/co/vividnext/sodalive/di/AppDI.kt @@ -309,7 +309,7 @@ class AppDI(private val context: Context, isDebugMode: Boolean) { viewModel { AuditionDetailViewModel(get()) } viewModel { AuditionRoleDetailViewModel(get()) } viewModel { AudioContentMainCreatorRankingViewModel(get()) } - viewModel { AudioContentMainTabHomeViewModel(get(), get()) } + viewModel { AudioContentMainTabHomeViewModel(get()) } viewModel { AudioContentMainTabSeriesViewModel(get()) } viewModel { AudioContentMainTabContentViewModel(get()) } viewModel { AudioContentMainTabAlarmViewModel(get()) } diff --git a/app/src/main/java/kr/co/vividnext/sodalive/main/MainActivity.kt b/app/src/main/java/kr/co/vividnext/sodalive/main/MainActivity.kt index e4dcc36..79053a8 100644 --- a/app/src/main/java/kr/co/vividnext/sodalive/main/MainActivity.kt +++ b/app/src/main/java/kr/co/vividnext/sodalive/main/MainActivity.kt @@ -59,6 +59,7 @@ import kr.co.vividnext.sodalive.message.SelectMessageRecipientAdapter import kr.co.vividnext.sodalive.mypage.MyPageFragment import kr.co.vividnext.sodalive.settings.event.EventDetailActivity import kr.co.vividnext.sodalive.settings.notification.NotificationSettingsDialog +import kr.co.vividnext.sodalive.user.login.LoginActivity import org.koin.android.ext.android.inject import java.util.concurrent.TimeUnit @@ -197,20 +198,27 @@ class MainActivity : BaseActivity(ActivityMainBinding::infl ) as InputMethodManager checkPermissions() - pushTokenUpdate() - updatePidAndGaid() - getEventPopup() + if ( + SharedPreferenceManager.token.isNotBlank() && + SharedPreferenceManager.token.length > 10 + ) { + pushTokenUpdate() + updatePidAndGaid() + getEventPopup() - SharedPreferenceManager.registerOnSharedPreferenceChangeListener(preferenceChangeListener) - if (SharedPreferenceManager.isPlayerServiceRunning) { - initAndVisibleMiniPlayer() - } else { - deInitMiniPlayer() + SharedPreferenceManager.registerOnSharedPreferenceChangeListener( + preferenceChangeListener + ) + if (SharedPreferenceManager.isPlayerServiceRunning) { + initAndVisibleMiniPlayer() + } else { + deInitMiniPlayer() + } + + handler.postDelayed({ executeDeeplink(intent) }, 500) } - handler.postDelayed({ executeDeeplink(intent) }, 500) - onBackPressedDispatcher.addCallback { if (isShowSearchBar) { hideSearchBar() @@ -276,7 +284,11 @@ class MainActivity : BaseActivity(ActivityMainBinding::infl private fun executeDeeplink(intent: Intent) { val bundle = intent.getBundleExtra(Constants.EXTRA_DATA) - if (bundle != null) { + if ( + SharedPreferenceManager.token.isNotBlank() && + SharedPreferenceManager.token.length > 10 && + bundle != null + ) { try { val roomId = bundle.getLong(Constants.EXTRA_ROOM_ID) val channelId = bundle.getLong(Constants.EXTRA_USER_ID) @@ -547,9 +559,13 @@ class MainActivity : BaseActivity(ActivityMainBinding::infl } private fun getMemberInfo() { - Logger.e("memberInfo") - viewModel.getMemberInfo(context = applicationContext) { - notificationSettingsDialog.show(screenWidth) + if ( + SharedPreferenceManager.token.isNotBlank() && + SharedPreferenceManager.token.length > 10 + ) { + viewModel.getMemberInfo(context = applicationContext) { + notificationSettingsDialog.show(screenWidth) + } } } @@ -666,6 +682,19 @@ class MainActivity : BaseActivity(ActivityMainBinding::infl } } + fun showLoginActivity() { + if (SharedPreferenceManager.token.isBlank()) { + val extras = intent.extras + startActivity( + Intent(applicationContext, LoginActivity::class.java).apply { + putExtra(Constants.EXTRA_DATA, extras) + addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP) + addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP) + } + ) + } + } + inner class AudioContentReceiver : BroadcastReceiver() { override fun onReceive(context: Context?, intent: Intent?) { val contentId = intent?.getLongExtra(Constants.EXTRA_AUDIO_CONTENT_ID, 0) diff --git a/app/src/main/java/kr/co/vividnext/sodalive/splash/SplashActivity.kt b/app/src/main/java/kr/co/vividnext/sodalive/splash/SplashActivity.kt index c5926f9..9f160df 100644 --- a/app/src/main/java/kr/co/vividnext/sodalive/splash/SplashActivity.kt +++ b/app/src/main/java/kr/co/vividnext/sodalive/splash/SplashActivity.kt @@ -18,10 +18,8 @@ import kr.co.vividnext.sodalive.BuildConfig import kr.co.vividnext.sodalive.base.BaseActivity import kr.co.vividnext.sodalive.base.SodaDialog import kr.co.vividnext.sodalive.common.Constants -import kr.co.vividnext.sodalive.common.SharedPreferenceManager import kr.co.vividnext.sodalive.databinding.ActivitySplashBinding import kr.co.vividnext.sodalive.main.MainActivity -import kr.co.vividnext.sodalive.user.login.LoginActivity @SuppressLint("CustomSplashScreen") class SplashActivity : BaseActivity(ActivitySplashBinding::inflate) { @@ -169,11 +167,7 @@ class SplashActivity : BaseActivity(ActivitySplashBinding null } - if (SharedPreferenceManager.token.isBlank()) { - showLoginActivity(extras) - } else { - showMainActivity(extras) - } + showMainActivity(extras) } @OptIn(UnstableApi::class) @@ -190,18 +184,5 @@ class SplashActivity : BaseActivity(ActivitySplashBinding }, 500) } - private fun showLoginActivity(extras: Bundle?) { - handler.postDelayed({ - startActivity( - Intent(applicationContext, LoginActivity::class.java).apply { - putExtra(Constants.EXTRA_DATA, extras) - addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP) - addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP) - } - ) - finish() - }, 500) - } - override fun setupView() {} } diff --git a/app/src/main/res/layout/fragment_audio_content_main_tab_home.xml b/app/src/main/res/layout/fragment_audio_content_main_tab_home.xml index 36f9a48..024780c 100644 --- a/app/src/main/res/layout/fragment_audio_content_main_tab_home.xml +++ b/app/src/main/res/layout/fragment_audio_content_main_tab_home.xml @@ -24,8 +24,8 @@ + android:textSize="18sp" /> + android:src="@drawable/ic_alarm_clock" + android:visibility="gone" /> + android:src="@drawable/ic_content_keep" + android:visibility="gone" /> + android:layout_marginTop="30dp" + android:visibility="gone" /> + android:layout_marginTop="6.7dp" + android:visibility="gone" /> @@ -138,13 +143,15 @@ + android:paddingVertical="13.3dp" + android:visibility="gone"> + android:padding="13.3dp" + android:visibility="gone">