feat(chat-character): 캐릭터 탭 모든 액션

- 로그인과 본인인증이 되어 있어야 가능하도록 수정
This commit is contained in:
2025-08-13 01:09:34 +09:00
parent 0c3bca0f9e
commit f102c84ea6

View File

@@ -26,6 +26,11 @@ import kr.co.vividnext.sodalive.common.SharedPreferenceManager
import kr.co.vividnext.sodalive.databinding.FragmentCharacterTabBinding
import kr.co.vividnext.sodalive.extensions.dpToPx
import kr.co.vividnext.sodalive.main.MainActivity
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.splash.SplashActivity
import com.google.gson.Gson
import org.koin.android.ext.android.inject
// 캐릭터 탭 프래그먼트
@@ -34,6 +39,7 @@ class CharacterTabFragment : BaseFragment<FragmentCharacterTabBinding>(
FragmentCharacterTabBinding::inflate
) {
private val viewModel: CharacterTabViewModel by inject()
private val myPageViewModel: MyPageViewModel by inject()
private lateinit var contentBannerAdapter: CharacterBannerAdapter
private lateinit var recentCharacterAdapter: RecentCharacterAdapter
@@ -75,14 +81,12 @@ class CharacterTabFragment : BaseFragment<FragmentCharacterTabBinding>(
pagerWidth,
pagerHeight
) {
if (SharedPreferenceManager.token.isNotBlank()) {
ensureLoginAndAuth {
startActivity(
Intent(requireContext(), CharacterDetailActivity::class.java).apply {
putExtra(EXTRA_CHARACTER_ID, it.characterId)
}
)
} else {
(requireActivity() as MainActivity).showLoginActivity()
}
}
@@ -353,6 +357,47 @@ class CharacterTabFragment : BaseFragment<FragmentCharacterTabBinding>(
}
}
private fun ensureLoginAndAuth(onAuthed: () -> Unit) {
if (SharedPreferenceManager.token.isBlank()) {
(requireActivity() as MainActivity).showLoginActivity()
return
}
if (!SharedPreferenceManager.isAuth) {
Toast.makeText(requireContext(), "본인인증이 필요합니다.", Toast.LENGTH_LONG).show()
startAuthFlow()
return
}
onAuthed()
}
private fun startAuthFlow() {
Auth.auth(requireActivity(), requireContext()) { json ->
val bootpayResponse = Gson().fromJson(
json,
kr.co.vividnext.sodalive.mypage.auth.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()
}
}
}
}
private fun observeViewModel() {
viewModel.isLoading.observe(viewLifecycleOwner) {
if (it) {
@@ -372,14 +417,12 @@ class CharacterTabFragment : BaseFragment<FragmentCharacterTabBinding>(
}
private fun onCharacterClick(characterId: Long) {
if (SharedPreferenceManager.token.isNotBlank()) {
ensureLoginAndAuth {
startActivity(
Intent(requireContext(), CharacterDetailActivity::class.java).apply {
putExtra(EXTRA_CHARACTER_ID, characterId)
}
)
} else {
(requireActivity() as MainActivity).showLoginActivity()
}
}
}