Skip to content

Commit

Permalink
[feat] #219 비회원 건빵집리스트, 마이페이지 진입 가능하도록 구현 및 필터, 마이페이지 요소 클릭 시 바텀 시트 띄우기
Browse files Browse the repository at this point in the history
  • Loading branch information
jooyyoo committed Feb 16, 2024
1 parent e380e13 commit 8b98b22
Show file tree
Hide file tree
Showing 4 changed files with 70 additions and 13 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -7,14 +7,18 @@ 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
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
Expand All @@ -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)
Expand All @@ -44,14 +49,17 @@ 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
addItemDecoration(CustomItemDecoration(requireContext()))
}
}


private fun addListeners() {
binding.layoutBakeryListSortFilter.setOnClickListener {
showBakeryListSortDialog()
Expand All @@ -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
Expand Down Expand Up @@ -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)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,11 @@ class DetailActivity : BindingActivity<ActivityDetailBinding>(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()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -25,6 +29,7 @@ import kotlinx.coroutines.flow.onEach
@AndroidEntryPoint
class MyPageFragment : BindingFragment<FragmentMyPageBinding>(R.layout.fragment_my_page) {
private val viewModel by viewModels<MyPageViewModel>()
private lateinit var gpDataSource: GPDataSource

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
Expand All @@ -38,46 +43,68 @@ class MyPageFragment : BindingFragment<FragmentMyPageBinding>(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 {
binding.includeMyPageSpeechBubble.root.setInvisibility(false)
}

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)
}
}

Expand Down Expand Up @@ -128,6 +155,13 @@ class MyPageFragment : BindingFragment<FragmentMyPageBinding>(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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
)
}

0 comments on commit 8b98b22

Please sign in to comment.