diff --git a/app/src/main/java/kr/co/vividnext/sodalive/v2/main/MainV2Activity.kt b/app/src/main/java/kr/co/vividnext/sodalive/v2/main/MainV2Activity.kt index d7a0df92..3f74e8a3 100644 --- a/app/src/main/java/kr/co/vividnext/sodalive/v2/main/MainV2Activity.kt +++ b/app/src/main/java/kr/co/vividnext/sodalive/v2/main/MainV2Activity.kt @@ -50,7 +50,9 @@ import kr.co.vividnext.sodalive.message.MessageActivity 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 kr.co.vividnext.sodalive.v2.access.AccessRequirement +import kr.co.vividnext.sodalive.v2.access.ensureV2Access +import kr.co.vividnext.sodalive.v2.access.isV2AccessAllowed import kr.co.vividnext.sodalive.v2.common.data.ContentSort import kr.co.vividnext.sodalive.v2.creator.channel.CreatorChannelActivity import kr.co.vividnext.sodalive.v2.main.chat.ChatMainFragment @@ -88,12 +90,12 @@ class MainV2Activity : BaseActivity(ActivityMainV2Binding pushTokenUpdate() handler.postDelayed({ - if (!handleAudioNotificationRoute(intent) && isLoggedIn()) { + if (!handleAudioNotificationRoute(intent) && isV2AccessAllowed(AccessRequirement.Login)) { executeDeeplink(intent) } }, 1000) - if (isLoggedIn()) { + if (isV2AccessAllowed(AccessRequirement.Login)) { updatePidAndGaid() getEventPopup() observePlayerState() @@ -124,7 +126,7 @@ class MainV2Activity : BaseActivity(ActivityMainV2Binding return } - if (!handleAudioNotificationRoute(intent) && isLoggedIn()) { + if (!handleAudioNotificationRoute(intent) && isV2AccessAllowed(AccessRequirement.Login)) { executeDeeplink(intent) } } @@ -176,23 +178,14 @@ class MainV2Activity : BaseActivity(ActivityMainV2Binding } } - fun showLoginActivity() { - if (!isLoggedIn()) { - 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) - } - ) - } - } - fun openChatTab() { selectChatTabWithLoginGuard() } + fun showLoginActivity() { + ensureV2Access(AccessRequirement.Login) + } + fun openContentAllTab(type: MainContentAllType, sort: ContentSort = ContentSort.LATEST) { if (viewModel.currentTab.value != MainV2Tab.CONTENT) { viewModel.clickTab(MainV2Tab.CONTENT) @@ -292,13 +285,9 @@ class MainV2Activity : BaseActivity(ActivityMainV2Binding } private fun selectChatTabWithLoginGuard(): Boolean { - if (!isLoggedIn()) { - showLoginActivity() - return false + return ensureV2Access(AccessRequirement.Login) { + viewModel.clickTab(MainV2Tab.CHAT) } - - viewModel.clickTab(MainV2Tab.CHAT) - return true } private fun observePlayerState() { @@ -434,10 +423,8 @@ class MainV2Activity : BaseActivity(ActivityMainV2Binding return when (route) { ROUTE_AUDIO_PLAYER -> { - if (isLoggedIn()) { + ensureV2Access(AccessRequirement.Login) { showPlayerFragment() - } else { - showLoginActivity() } true } @@ -445,14 +432,16 @@ class MainV2Activity : BaseActivity(ActivityMainV2Binding ROUTE_AUDIO_DETAIL -> { val contentId = intent.getLongExtra(Constants.EXTRA_AUDIO_CONTENT_ID, 0) intent.removeExtra(Constants.EXTRA_AUDIO_CONTENT_ID) - if (contentId > 0 && isLoggedIn()) { - startActivity( - Intent(applicationContext, AudioContentDetailActivity::class.java).apply { - putExtra(Constants.EXTRA_AUDIO_CONTENT_ID, contentId) - } - ) - } else if (!isLoggedIn()) { - showLoginActivity() + if (contentId > 0) { + ensureV2Access(AccessRequirement.Login) { + startActivity( + Intent(applicationContext, AudioContentDetailActivity::class.java).apply { + putExtra(Constants.EXTRA_AUDIO_CONTENT_ID, contentId) + } + ) + } + } else if (!isV2AccessAllowed(AccessRequirement.Login)) { + ensureV2Access(AccessRequirement.Login) } contentId > 0 } @@ -503,7 +492,7 @@ class MainV2Activity : BaseActivity(ActivityMainV2Binding val pushToken = it.result if (pushToken != null) { SharedPreferenceManager.pushToken = pushToken - if (isLoggedIn()) { + if (isV2AccessAllowed(AccessRequirement.Login)) { viewModel.pushTokenUpdate(pushToken) } } @@ -517,7 +506,7 @@ class MainV2Activity : BaseActivity(ActivityMainV2Binding } private fun getMemberInfo() { - if (isLoggedIn()) { + if (isV2AccessAllowed(AccessRequirement.Login)) { viewModel.getMemberInfo(context = applicationContext) { notificationSettingsDialog.show(screenWidth) } @@ -786,10 +775,6 @@ class MainV2Activity : BaseActivity(ActivityMainV2Binding SharedPreferenceManager.marketingLinkValueId = 0 } - private fun isLoggedIn(): Boolean { - return SharedPreferenceManager.token.isNotBlank() && SharedPreferenceManager.token.length > 10 - } - 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/test/java/kr/co/vividnext/sodalive/v2/main/MainV2ActivitySourceTest.kt b/app/src/test/java/kr/co/vividnext/sodalive/v2/main/MainV2ActivitySourceTest.kt index afe7d1b6..af9a165e 100644 --- a/app/src/test/java/kr/co/vividnext/sodalive/v2/main/MainV2ActivitySourceTest.kt +++ b/app/src/test/java/kr/co/vividnext/sodalive/v2/main/MainV2ActivitySourceTest.kt @@ -18,6 +18,13 @@ class MainV2ActivitySourceTest { assertTrue(source.contains("val roomId = bundle.getString(\"room_id\")?.toLongOrNull()")) assertTrue(source.contains("DmChatRoomActivity.newIntentByRoomId(applicationContext, roomId)")) assertTrue(source.contains("if (isDmChatDeepLink(bundle) && roomId != null && roomId > 0)")) + assertFalse(source.contains("private fun isLoggedIn()")) + assertTrue(source.contains("fun showLoginActivity()")) + assertBefore( + source.substringFrom("fun showLoginActivity()"), + "ensureV2Access(AccessRequirement.Login)", + "fun openContentAllTab" + ) } @Test @@ -53,9 +60,10 @@ class MainV2ActivitySourceTest { assertTrue(source.contains("private fun selectChatTabWithLoginGuard(): Boolean")) val guardSource = source.substringFrom("private fun selectChatTabWithLoginGuard(): Boolean") - assertBefore(guardSource, "if (!isLoggedIn())", "viewModel.clickTab(MainV2Tab.CHAT)") - assertBefore(guardSource, "showLoginActivity()", "return false") - assertTrue(guardSource.contains("return true")) + assertTrue(guardSource.contains("return ensureV2Access(AccessRequirement.Login)")) + assertBefore(guardSource, "ensureV2Access(AccessRequirement.Login)", "viewModel.clickTab(MainV2Tab.CHAT)") + assertFalse(guardSource.contains("isLoggedIn()")) + assertFalse(guardSource.contains("showLoginActivity()")) val setupViewSource = source.substringFrom("override fun setupView()") assertTrue(setupViewSource.contains("selectChatTabWithLoginGuard()")) diff --git a/app/src/test/java/kr/co/vividnext/sodalive/v2/main/MainV2AudioNotificationRouteSourceTest.kt b/app/src/test/java/kr/co/vividnext/sodalive/v2/main/MainV2AudioNotificationRouteSourceTest.kt index 27e7c2b9..1ae55ce5 100644 --- a/app/src/test/java/kr/co/vividnext/sodalive/v2/main/MainV2AudioNotificationRouteSourceTest.kt +++ b/app/src/test/java/kr/co/vividnext/sodalive/v2/main/MainV2AudioNotificationRouteSourceTest.kt @@ -26,11 +26,11 @@ class MainV2AudioNotificationRouteSourceTest { fun `오디오 알림 route는 채팅 필터 이후 딥링크 이전에 처리된다`() { val onNewIntentSource = source.substringFrom("override fun onNewIntent(intent: Intent)") assertBefore(onNewIntentSource, "if (intent.hasExtra(EXTRA_CHAT_FILTER))", "handleAudioNotificationRoute(intent)") - assertBefore(onNewIntentSource, "handleAudioNotificationRoute(intent)", "isLoggedIn()") + assertBefore(onNewIntentSource, "handleAudioNotificationRoute(intent)", "isV2AccessAllowed(AccessRequirement.Login)") assertBefore(onNewIntentSource, "handleAudioNotificationRoute(intent)", "executeDeeplink(intent)") val onCreateSource = source.substringFrom("override fun onCreate(savedInstanceState: Bundle?)") - assertBefore(onCreateSource, "handleAudioNotificationRoute(intent)", "isLoggedIn()") + assertBefore(onCreateSource, "handleAudioNotificationRoute(intent)", "isV2AccessAllowed(AccessRequirement.Login)") assertBefore(onCreateSource, "handleAudioNotificationRoute(intent)", "executeDeeplink(intent)") }