diff --git a/app/src/main/java/com/sopt/geonppang/presentation/bakeryList/BakeryListFragment.kt b/app/src/main/java/com/sopt/geonppang/presentation/bakeryList/BakeryListFragment.kt index 91585ea7..8f655255 100644 --- a/app/src/main/java/com/sopt/geonppang/presentation/bakeryList/BakeryListFragment.kt +++ b/app/src/main/java/com/sopt/geonppang/presentation/bakeryList/BakeryListFragment.kt @@ -7,7 +7,9 @@ import androidx.fragment.app.viewModels import androidx.lifecycle.flowWithLifecycle import androidx.lifecycle.lifecycleScope import com.sopt.geonppang.R +import com.sopt.geonppang.data.datasource.local.GPDataSource import com.sopt.geonppang.databinding.FragmentBakeryListBinding +import com.sopt.geonppang.presentation.common.LoginNeededDialog import com.sopt.geonppang.presentation.detail.DetailActivity import com.sopt.geonppang.presentation.detail.DetailActivity.Companion.SOURCE import com.sopt.geonppang.presentation.detail.DetailActivity.Companion.VIEW_DETAIL_PAGE_AT @@ -15,6 +17,8 @@ import com.sopt.geonppang.presentation.filterSetting.FilterSettingActivity import com.sopt.geonppang.presentation.search.SearchActivity import com.sopt.geonppang.presentation.type.BakerySortType import com.sopt.geonppang.presentation.type.FilterInfoType +import com.sopt.geonppang.presentation.type.LoginNeededType +import com.sopt.geonppang.presentation.type.UserRoleType import com.sopt.geonppang.util.AmplitudeUtils import com.sopt.geonppang.util.CustomItemDecoration import com.sopt.geonppang.util.UiState @@ -32,6 +36,7 @@ class BakeryListFragment : private val viewModel: BakeryListViewModel by viewModels() private lateinit var bakeryAdapter: BakeryListAdapter + private lateinit var gpDataSource: GPDataSource override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) @@ -44,7 +49,9 @@ class BakeryListFragment : } private fun initLayout() { - viewModel.getUserFilter() + gpDataSource = GPDataSource(requireContext()) + if (gpDataSource.userRoleType != UserRoleType.NONE_MEMBER.name) + viewModel.getUserFilter() bakeryAdapter = BakeryListAdapter(::moveToDetail) binding.rvBakeryList.apply { adapter = bakeryAdapter @@ -52,6 +59,7 @@ class BakeryListFragment : } } + private fun addListeners() { binding.layoutBakeryListSortFilter.setOnClickListener { showBakeryListSortDialog() @@ -62,10 +70,13 @@ class BakeryListFragment : moveToSearch() } - // TODO 주영 - 비회원이 필터 선택하는 경우 로그인 유도 필터 띄우기 binding.ivBakeryListFilter.setOnClickListener { AmplitudeUtils.trackEvent(START_FILTER_LIST) - moveToFilter() + gpDataSource = GPDataSource(requireContext()) + if (gpDataSource.userRoleType == UserRoleType.NONE_MEMBER.name) + showLoginNeedDialog() + else + moveToFilter() } binding.includeHomeSpeechBubble.ivSpeechBubbleClose.setOnClickListener { binding.includeHomeSpeechBubble.root.visibility = View.INVISIBLE @@ -143,6 +154,13 @@ class BakeryListFragment : bakeryListSortBottomSheetDialog.show(parentFragmentManager, "bakeryListSortDialog") } + private fun showLoginNeedDialog() { + LoginNeededDialog(LoginNeededType.LOGIN_NEEDED_FILTER).show( + parentFragmentManager, + "bakeryListLoginNeedDialog" + ) + } + // BakeryListDialog에서 부터 받아온 데이터를 처리 override fun onBakerySortTypeSelected(bakerySortType: BakerySortType) { viewModel.setBakerySortType(bakerySortType) diff --git a/app/src/main/java/com/sopt/geonppang/presentation/detail/DetailActivity.kt b/app/src/main/java/com/sopt/geonppang/presentation/detail/DetailActivity.kt index 3370bc87..1f578dd3 100644 --- a/app/src/main/java/com/sopt/geonppang/presentation/detail/DetailActivity.kt +++ b/app/src/main/java/com/sopt/geonppang/presentation/detail/DetailActivity.kt @@ -80,6 +80,11 @@ class DetailActivity : BindingActivity(R.layout.activity_ binding.rvDetail.adapter = concatAdapter } + private fun getUserRole(): Boolean { + gpDataSource = GPDataSource(this) + return gpDataSource.userRoleType == UserRoleType.NONE_MEMBER.name + } + private fun addListeners() { binding.ivDetailArrowLeft.setOnClickListener { finish() diff --git a/app/src/main/java/com/sopt/geonppang/presentation/myPage/MyPageFragment.kt b/app/src/main/java/com/sopt/geonppang/presentation/myPage/MyPageFragment.kt index 587dc3ee..eb42afa1 100644 --- a/app/src/main/java/com/sopt/geonppang/presentation/myPage/MyPageFragment.kt +++ b/app/src/main/java/com/sopt/geonppang/presentation/myPage/MyPageFragment.kt @@ -9,10 +9,14 @@ import androidx.lifecycle.flowWithLifecycle import androidx.lifecycle.lifecycleScope import com.sopt.geonppang.BuildConfig import com.sopt.geonppang.R +import com.sopt.geonppang.data.datasource.local.GPDataSource import com.sopt.geonppang.databinding.FragmentMyPageBinding +import com.sopt.geonppang.presentation.common.LoginNeededDialog import com.sopt.geonppang.presentation.common.WebViewActivity import com.sopt.geonppang.presentation.filterSetting.FilterSettingActivity import com.sopt.geonppang.presentation.type.FilterInfoType +import com.sopt.geonppang.presentation.type.LoginNeededType +import com.sopt.geonppang.presentation.type.UserRoleType import com.sopt.geonppang.util.AmplitudeUtils import com.sopt.geonppang.util.binding.BindingFragment import com.sopt.geonppang.util.extension.setOnSingleClickListener @@ -25,6 +29,7 @@ import kotlinx.coroutines.flow.onEach @AndroidEntryPoint class MyPageFragment : BindingFragment(R.layout.fragment_my_page) { private val viewModel by viewModels() + private lateinit var gpDataSource: GPDataSource override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) @@ -38,34 +43,52 @@ class MyPageFragment : BindingFragment(R.layout.fragment_ } private fun initLayout() { - viewModel.fetchProfileInfo() + if (!getUserRole()) + viewModel.fetchProfileInfo() binding.includeMyPageSpeechBubble.ivSpeechBubble.setBackgroundResource(R.drawable.background_left_speech_bubble) binding.tvMyPageAppVersion.text = getString(R.string.tv_my_page_app_version, APP_VERSION) } + // 이렇게 함수를 만들어서 매번 호출하는게 좋은 것인지 + // BakeryListFragment 처럼 버튼을 누를 때마다 해당 뷰의 context를 전달하는게 맞는지 고민 + private fun getUserRole(): Boolean { + gpDataSource = GPDataSource(requireContext()) + return gpDataSource.userRoleType == UserRoleType.NONE_MEMBER.name + } + private fun addListeners() { - // TODO 주영 - 비회원인 경우 마이페이지 요소를 누른다면 모두 dialog 띄움 binding.layoutMyPageBookmark.setOnSingleClickListener { AmplitudeUtils.trackEvent(CLICK_MY_STORE) - moveToStoreBakeryList() + if (getUserRole()) + showLoginNeedDialog() + else + moveToStoreBakeryList() } binding.layoutMyPageReview.setOnSingleClickListener { AmplitudeUtils.trackEvent(CLICK_MY_REVIEW) - moveToMyReview() + if (getUserRole()) + showLoginNeedDialog() + else moveToMyReview() } binding.ivMyPageProfileRightArrow.setOnClickListener { AmplitudeUtils.trackEvent(START_FILTER_MY) - moveToFilter() + if (getUserRole()) + showLoginNeedDialog() + else moveToFilter() } binding.tvMyPageLogout.setOnClickListener { - showLogoutDialog() + if (getUserRole()) + showLoginNeedDialog() + else showLogoutDialog() } binding.tvMyPageWithdraw.setOnClickListener { - showWithdrawDialog() + if (getUserRole()) + showLoginNeedDialog() + else showWithdrawDialog() } binding.includeMyPageSpeechBubble.ivSpeechBubbleClose.setOnClickListener { @@ -73,11 +96,15 @@ class MyPageFragment : BindingFragment(R.layout.fragment_ } binding.tvMyPageTermsOfUse.setOnClickListener { - moveToWebPage(TERMS_OF_USE) + if (getUserRole()) + showLoginNeedDialog() + else moveToWebPage(TERMS_OF_USE) } binding.tvMyPageInquiry.setOnClickListener { - moveToWebBrowser(INQUIRY) + if (getUserRole()) + showLoginNeedDialog() + else moveToWebBrowser(INQUIRY) } } @@ -128,6 +155,13 @@ class MyPageFragment : BindingFragment(R.layout.fragment_ WithdrawDialog().show(childFragmentManager, DIALOG) } + private fun showLoginNeedDialog() { + LoginNeededDialog(LoginNeededType.LOGIN_NEEDED_MY_PAGE).show( + parentFragmentManager, + "myPageLoginNeedDialog" + ) + } + companion object { const val FILTER_INFO = "filterInfo" const val APP_VERSION = BuildConfig.VERSION_NAME diff --git a/app/src/main/java/com/sopt/geonppang/presentation/type/LoginNeededType.kt b/app/src/main/java/com/sopt/geonppang/presentation/type/LoginNeededType.kt index bde77243..96ffafa8 100644 --- a/app/src/main/java/com/sopt/geonppang/presentation/type/LoginNeededType.kt +++ b/app/src/main/java/com/sopt/geonppang/presentation/type/LoginNeededType.kt @@ -19,6 +19,6 @@ enum class LoginNeededType( R.string.login_needed_phrase_bakery_write_review ), LOGIN_NEEDED_MY_PAGE( - R.string.login_needed_phrase_bakery_write_review + R.string.login_needed_phrase_my_page ) }