Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
package com.runnect.runnect.binding

import android.content.Intent
import android.os.Bundle
import android.view.View
import android.widget.Button
import androidx.annotation.LayoutRes
import androidx.core.view.isVisible
import androidx.databinding.ViewDataBinding
import com.runnect.runnect.R
import com.runnect.runnect.presentation.MainActivity
import com.runnect.runnect.presentation.login.LoginActivity

abstract class BaseVisitorFragment<T : ViewDataBinding>(
@LayoutRes private val layoutRes: Int
) : BindingFragment<T>(layoutRes) {

abstract val visitorContainer: View
abstract val contentViews: List<View>

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)

if (MainActivity.isVisitorMode) {
showVisitorMode()
} else {
showContent()
onContentModeInit()
}
}

private fun showVisitorMode() {
visitorContainer.isVisible = true
visitorContainer.findViewById<Button>(R.id.btn_visitor_mode)?.setOnClickListener {
navigateToLogin()
}
contentViews.forEach { it.isVisible = false }
}

private fun showContent() {
visitorContainer.isVisible = false
contentViews.forEach { it.isVisible = true }
}

private fun navigateToLogin() {
val intent = Intent(requireContext(), LoginActivity::class.java)
startActivity(intent)
requireActivity().finish()
}

abstract fun onContentModeInit()
}
Original file line number Diff line number Diff line change
@@ -1,10 +1,9 @@
package com.runnect.runnect.presentation.mypage

import android.app.Activity
import android.app.Activity.RESULT_OK
import android.content.ContentValues
import android.content.Intent
import android.os.Bundle
import android.view.View
import androidx.activity.result.ActivityResultLauncher
import androidx.activity.result.contract.ActivityResultContracts
import androidx.core.view.isVisible
Expand All @@ -15,10 +14,8 @@ import com.kakao.sdk.common.util.KakaoCustomTabsClient
import com.kakao.sdk.talk.TalkApiClient
import com.runnect.runnect.BuildConfig
import com.runnect.runnect.R
import com.runnect.runnect.binding.BindingFragment
import com.runnect.runnect.binding.BaseVisitorFragment
import com.runnect.runnect.databinding.FragmentMyPageBinding
import com.runnect.runnect.presentation.MainActivity
import com.runnect.runnect.presentation.login.LoginActivity
import com.runnect.runnect.presentation.mypage.editname.MyPageEditNameActivity
import com.runnect.runnect.presentation.mypage.history.MyHistoryActivity
import com.runnect.runnect.presentation.mypage.reward.MyRewardActivity
Expand All @@ -31,106 +28,63 @@ import com.runnect.runnect.util.analytics.EventName.EVENT_CLICK_RUNNING_RECORD
import com.runnect.runnect.util.analytics.EventName.EVENT_CLICK_UPLOADED_COURSE
import com.runnect.runnect.util.extension.getStampResId
import dagger.hilt.android.AndroidEntryPoint
import timber.log.Timber

@AndroidEntryPoint
class MyPageFragment : BindingFragment<FragmentMyPageBinding>(R.layout.fragment_my_page) {
class MyPageFragment : BaseVisitorFragment<FragmentMyPageBinding>(R.layout.fragment_my_page) {
private val viewModel: MyPageViewModel by activityViewModels()
private lateinit var resultEditNameLauncher: ActivityResultLauncher<Intent>
var isVisitorMode: Boolean = MainActivity.isVisitorMode
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
if (isVisitorMode) {
activateVisitorMode()
} else {
deactivateVisitorMode()
}

}
override val visitorContainer by lazy { binding.clVisitorMode }
override val contentViews by lazy { listOf(binding.constraintInside) }

private fun activateVisitorMode() {
with(binding) {
ivVisitorMode.isVisible = true
tvVisitorMode.isVisible = true
btnVisitorMode.isVisible = true
constraintInside.isVisible = false

btnVisitorMode.setOnClickListener {
val intent = Intent(requireContext(), LoginActivity::class.java)
startActivity(intent)
requireActivity().finish()
}
}
}

private fun deactivateVisitorMode() {
with(binding) {
ivVisitorMode.isVisible = false
tvVisitorMode.isVisible = false
btnVisitorMode.isVisible = false
constraintInside.isVisible = true

binding.vm = viewModel
binding.lifecycleOwner = this@MyPageFragment.viewLifecycleOwner
viewModel.getUserInfo()
addListener()
addObserver()
setResultEditNameLauncher()
}
override fun onContentModeInit() {
binding.vm = viewModel
binding.lifecycleOwner = this@MyPageFragment.viewLifecycleOwner
viewModel.getUserInfo()
addListener()
addObserver()
setResultEditNameLauncher()
}

private fun setResultEditNameLauncher() {
resultEditNameLauncher =
registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result ->
if (result.resultCode == RESULT_OK) {
val name =
result.data?.getStringExtra(EXTRA_NICK_NAME) ?: viewModel.nickName.value
val name = result.data?.getStringExtra(EXTRA_NICK_NAME) ?: viewModel.nickName.value
viewModel.setNickName(name!!)
}
}
}

private fun addListener() {
binding.ivMyPageEditFrame.setOnClickListener {
val intent = Intent(requireContext(), MyPageEditNameActivity::class.java)
intent.putExtra(EXTRA_NICK_NAME, "${viewModel.nickName.value}")
val stampResId = requireContext().getStampResId(
stampId = viewModel.stampId.value,
resNameParam = RES_NAME,
resType = RES_STAMP_TYPE,
packageName = requireContext().packageName
)
intent.putExtra(EXTRA_PROFILE, stampResId)
resultEditNameLauncher.launch(intent)
}
with(binding) {
ivMyPageEditFrame.setOnClickListener {
val intent = Intent(requireContext(), MyPageEditNameActivity::class.java)
intent.putExtra(EXTRA_NICK_NAME, "${viewModel.nickName.value}")
val stampResId = getStampResourceId()
intent.putExtra(EXTRA_PROFILE, stampResId)
resultEditNameLauncher.launch(intent)
}

binding.viewMyPageMainRewardFrame.setOnClickListener {
Analytics.logClickedItemEvent(EVENT_CLICK_GOAL_REWARD)
startActivity(Intent(requireContext(), MyRewardActivity::class.java))
requireActivity().overridePendingTransition(
R.anim.slide_in_right, R.anim.slide_out_left
)
}
binding.viewMyPageMainHistoryFrame.setOnClickListener {
Analytics.logClickedItemEvent(EVENT_CLICK_RUNNING_RECORD)
startActivity(Intent(requireContext(), MyHistoryActivity::class.java))
requireActivity().overridePendingTransition(
R.anim.slide_in_right, R.anim.slide_out_left
)
}
viewMyPageMainRewardFrame.setOnClickListener {
Analytics.logClickedItemEvent(EVENT_CLICK_GOAL_REWARD)
navigateTo<MyRewardActivity>()
}
viewMyPageMainHistoryFrame.setOnClickListener {
Analytics.logClickedItemEvent(EVENT_CLICK_RUNNING_RECORD)
navigateTo<MyHistoryActivity>()
}

binding.viewMyPageMainUploadFrame.setOnClickListener {
Analytics.logClickedItemEvent(EVENT_CLICK_UPLOADED_COURSE)
startActivity(Intent(requireContext(), MyUploadActivity::class.java))
requireActivity().overridePendingTransition(
R.anim.slide_in_right, R.anim.slide_out_left
)
}
binding.viewMyPageMainSettingFrame.setOnClickListener {
moveToSettingFragment()
}
binding.viewMyPageMainKakaoChannelInquiryFrame.setOnClickListener {
inquiryKakao()
viewMyPageMainUploadFrame.setOnClickListener {
Analytics.logClickedItemEvent(EVENT_CLICK_UPLOADED_COURSE)
navigateTo<MyUploadActivity>()
}
viewMyPageMainSettingFrame.setOnClickListener {
moveToSettingFragment()
}
viewMyPageMainKakaoChannelInquiryFrame.setOnClickListener {
inquiryKakao()
}
}
}

Expand All @@ -149,30 +103,14 @@ class MyPageFragment : BindingFragment<FragmentMyPageBinding>(R.layout.fragment_

viewModel.userInfoState.observe(viewLifecycleOwner) {
when (it) {
UiState.Empty -> binding.indeterminateBar.isVisible = false
UiState.Loading -> {
binding.indeterminateBar.isVisible = true
binding.ivMyPageEditFrame.isClickable = false
binding.viewMyPageMainSettingFrame.isClickable = false
}

UiState.Empty -> setLoadingState(false)
UiState.Loading -> setLoadingState(true)
UiState.Success -> {
binding.indeterminateBar.isVisible = false
val stampResId = requireContext().getStampResId(
viewModel.stampId.value,
RES_NAME,
RES_STAMP_TYPE,
requireContext().packageName
)
setLoadingState(false)
val stampResId = getStampResourceId()
viewModel.setProfileImg(stampResId)
binding.ivMyPageEditFrame.isClickable = true
binding.viewMyPageMainSettingFrame.isClickable = true
}

UiState.Failure -> {
binding.indeterminateBar.isVisible = false
Timber.tag(ContentValues.TAG).d("Failure : ${viewModel.errorMessage.value}")
}
UiState.Failure -> setLoadingState(false)
}
}
}
Expand All @@ -182,6 +120,30 @@ class MyPageFragment : BindingFragment<FragmentMyPageBinding>(R.layout.fragment_
KakaoCustomTabsClient.openWithDefault(requireActivity(), url)
}

private fun getStampResourceId(): Int {
return requireContext().getStampResId(
stampId = viewModel.stampId.value,
resNameParam = RES_NAME,
resType = RES_STAMP_TYPE,
packageName = requireContext().packageName
)
}

private fun setLoadingState(isLoading: Boolean) {
with(binding) {
indeterminateBar.isVisible = isLoading
ivMyPageEditFrame.isClickable = !isLoading
viewMyPageMainSettingFrame.isClickable = !isLoading
}
}

private inline fun <reified T : Activity> navigateTo() {
startActivity(Intent(requireContext(), T::class.java))
requireActivity().overridePendingTransition(
R.anim.slide_in_right, R.anim.slide_out_left
)
}

companion object {
const val RES_NAME = "mypage_img_stamp_"
const val RES_STAMP_TYPE = "drawable"
Expand Down
Original file line number Diff line number Diff line change
@@ -1,68 +1,30 @@
package com.runnect.runnect.presentation.storage

import android.content.Intent
import android.os.Bundle
import android.view.View
import androidx.core.view.isVisible
import androidx.fragment.app.add
import androidx.fragment.app.commit
import androidx.fragment.app.replace
import androidx.fragment.app.viewModels
import com.google.android.material.tabs.TabLayout
import com.runnect.runnect.R
import com.runnect.runnect.binding.BindingFragment
import com.runnect.runnect.binding.BaseVisitorFragment
import com.runnect.runnect.databinding.FragmentStorageMainBinding
import com.runnect.runnect.presentation.MainActivity
import com.runnect.runnect.presentation.login.LoginActivity
import com.runnect.runnect.util.analytics.Analytics
import com.runnect.runnect.util.analytics.EventName.EVENT_CLICK_MY_DRAW_STORAGE_COURSE_DRAWING_START
import com.runnect.runnect.util.analytics.EventName.EVENT_CLICK_SCRAP_COURSE
import dagger.hilt.android.AndroidEntryPoint
import timber.log.Timber

@AndroidEntryPoint
class StorageMainFragment :
BindingFragment<FragmentStorageMainBinding>(R.layout.fragment_storage_main) {
BaseVisitorFragment<FragmentStorageMainBinding>(R.layout.fragment_storage_main) {
val viewModel: StorageViewModel by viewModels()
var isVisitorMode: Boolean = MainActivity.isVisitorMode

override val visitorContainer by lazy { binding.clVisitorMode }
override val contentViews by lazy { listOf(binding.storageTab, binding.tabUnderLine) }

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
if (isVisitorMode) {
activateVisitorMode()
} else {
deactivateVisitorMode()
}
}

private fun activateVisitorMode() {
with(binding) {
ivVisitorMode.isVisible = true
tvVisitorMode.isVisible = true
btnVisitorMode.isVisible = true
storageTab.isVisible = false
tabUnderLine.isVisible = false

btnVisitorMode.setOnClickListener {
val intent = Intent(requireContext(), LoginActivity::class.java)
startActivity(intent)
requireActivity().finish()
}
}
}

private fun deactivateVisitorMode() {
with(binding) {
ivVisitorMode.isVisible = false
tvVisitorMode.isVisible = false
btnVisitorMode.isVisible = false
storageTab.isVisible = true
tabUnderLine.isVisible = true

binding.lifecycleOwner = requireActivity()
initView()
tabLayoutAction()
}
override fun onContentModeInit() {
binding.lifecycleOwner = requireActivity()
initView()
tabLayoutAction()
}

private fun initView() {
Expand All @@ -81,16 +43,16 @@ class StorageMainFragment :
EVENT_CLICK_MY_DRAW_STORAGE_COURSE_DRAWING_START
)
replace<StorageMyDrawFragment>(R.id.fl_main)
Timber.tag("hu").d("내가 그린 코스로 이동하였음")
}

1 -> childFragmentManager.commit {
Analytics.logClickedItemEvent(EVENT_CLICK_SCRAP_COURSE)
replace<StorageScrapFragment>(R.id.fl_main)
Timber.tag("hu").d("스크랩으로 이동하였음")
}

else -> IllegalArgumentException("${this::class.java.simpleName} Not found menu item id")
else -> childFragmentManager.commit {
replace<StorageMyDrawFragment>(R.id.fl_main)
}
}
}

Expand Down
Loading
Loading