feat(main): 로그인 가드 헬퍼를 추가한다
This commit is contained in:
@@ -0,0 +1,78 @@
|
|||||||
|
package kr.co.vividnext.sodalive.v2.main
|
||||||
|
|
||||||
|
import android.content.Intent
|
||||||
|
import android.view.Gravity
|
||||||
|
import androidx.fragment.app.Fragment
|
||||||
|
import com.google.gson.Gson
|
||||||
|
import kr.co.vividnext.sodalive.R
|
||||||
|
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.mypage.MyPageViewModel
|
||||||
|
import kr.co.vividnext.sodalive.mypage.auth.Auth
|
||||||
|
import kr.co.vividnext.sodalive.mypage.auth.AuthVerifyRequest
|
||||||
|
import kr.co.vividnext.sodalive.mypage.auth.BootpayResponse
|
||||||
|
import kr.co.vividnext.sodalive.settings.ContentSettingsActivity
|
||||||
|
import kr.co.vividnext.sodalive.splash.SplashActivity
|
||||||
|
import org.koin.android.ext.android.get
|
||||||
|
|
||||||
|
fun Fragment.ensureMainV2NavigationAllowed(
|
||||||
|
requiresAdultContentAccess: Boolean = false,
|
||||||
|
onAllowed: () -> Unit
|
||||||
|
) {
|
||||||
|
if (SharedPreferenceManager.token.isBlank()) {
|
||||||
|
(activity as? MainV2Activity)?.showLoginActivity()
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
if (requiresAdultContentAccess) {
|
||||||
|
val isKoreanCountry = SharedPreferenceManager.countryCode.ifBlank { "KR" } == "KR"
|
||||||
|
if (isKoreanCountry && !SharedPreferenceManager.isAuth) {
|
||||||
|
showMainV2AuthDialog()
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!SharedPreferenceManager.isAdultContentVisible) {
|
||||||
|
startActivity(
|
||||||
|
Intent(requireContext(), ContentSettingsActivity::class.java).apply {
|
||||||
|
putExtra(Constants.EXTRA_SHOW_SENSITIVE_CONTENT_GUIDE, true)
|
||||||
|
}
|
||||||
|
)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
onAllowed()
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun Fragment.showMainV2AuthDialog() {
|
||||||
|
SodaDialog(
|
||||||
|
activity = requireActivity(),
|
||||||
|
layoutInflater = layoutInflater,
|
||||||
|
title = getString(R.string.auth_title),
|
||||||
|
desc = getString(R.string.auth_desc_live),
|
||||||
|
confirmButtonTitle = getString(R.string.auth_go),
|
||||||
|
confirmButtonClick = { startMainV2AuthFlow() },
|
||||||
|
cancelButtonTitle = getString(R.string.cancel),
|
||||||
|
cancelButtonClick = {},
|
||||||
|
descGravity = Gravity.CENTER
|
||||||
|
).show(resources.displayMetrics.widthPixels)
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun Fragment.startMainV2AuthFlow() {
|
||||||
|
val myPageViewModel: MyPageViewModel = get()
|
||||||
|
Auth.auth(requireActivity(), requireContext()) { json ->
|
||||||
|
val bootpayResponse = Gson().fromJson(json, BootpayResponse::class.java)
|
||||||
|
val request = AuthVerifyRequest(receiptId = bootpayResponse.data.receiptId)
|
||||||
|
requireActivity().runOnUiThread {
|
||||||
|
myPageViewModel.authVerify(request) {
|
||||||
|
startActivity(
|
||||||
|
Intent(requireContext(), SplashActivity::class.java).apply {
|
||||||
|
addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK or Intent.FLAG_ACTIVITY_NEW_TASK)
|
||||||
|
}
|
||||||
|
)
|
||||||
|
requireActivity().finish()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,38 @@
|
|||||||
|
package kr.co.vividnext.sodalive.v2.main
|
||||||
|
|
||||||
|
import org.junit.Assert.assertFalse
|
||||||
|
import org.junit.Assert.assertTrue
|
||||||
|
import org.junit.Test
|
||||||
|
import java.io.File
|
||||||
|
|
||||||
|
class MainV2LoginGuardSourceTest {
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun `MainV2 로그인 가드는 v2 Activity 로그인 진입점과 성인 콘텐츠 설정을 사용한다`() {
|
||||||
|
val source = projectFile("app/src/main/java/kr/co/vividnext/sodalive/v2/main/MainV2LoginGuard.kt").readText()
|
||||||
|
|
||||||
|
assertTrue(source.contains("fun Fragment.ensureMainV2NavigationAllowed("))
|
||||||
|
assertTrue(source.contains("requiresAdultContentAccess: Boolean = false"))
|
||||||
|
assertTrue(source.contains("SharedPreferenceManager.token.isBlank()"))
|
||||||
|
assertTrue(source.contains("(activity as? MainV2Activity)?.showLoginActivity()"))
|
||||||
|
assertTrue(source.contains("SharedPreferenceManager.countryCode.ifBlank { \"KR\" }"))
|
||||||
|
assertTrue(source.contains("SharedPreferenceManager.isAuth"))
|
||||||
|
assertTrue(source.contains("SodaDialog("))
|
||||||
|
assertTrue(source.contains("Auth.auth(requireActivity(), requireContext())"))
|
||||||
|
assertTrue(source.contains("Gson().fromJson(json, BootpayResponse::class.java)"))
|
||||||
|
assertTrue(source.contains("AuthVerifyRequest(receiptId = bootpayResponse.data.receiptId)"))
|
||||||
|
assertTrue(source.contains("myPageViewModel.authVerify(request)"))
|
||||||
|
assertTrue(source.contains("SplashActivity::class.java"))
|
||||||
|
assertTrue(source.contains("SharedPreferenceManager.isAdultContentVisible"))
|
||||||
|
assertTrue(source.contains("ContentSettingsActivity::class.java"))
|
||||||
|
assertTrue(source.contains("putExtra(Constants.EXTRA_SHOW_SENSITIVE_CONTENT_GUIDE, true)"))
|
||||||
|
assertFalse(source.contains("Auth.auth(requireActivity(), requireContext()) {}"))
|
||||||
|
assertFalse(source.contains("kr.co.vividnext.sodalive.main.MainActivity"))
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun projectFile(relativePath: String): File {
|
||||||
|
val candidates = listOf(File(relativePath), File("../$relativePath"))
|
||||||
|
return candidates.firstOrNull { it.exists() }
|
||||||
|
?: error("Project file not found: $relativePath")
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user