diff --git a/app/build.gradle b/app/build.gradle index 826a20fa..3d9e757f 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -21,7 +21,7 @@ android { applicationId "com.sopt.geonppang" minSdk 28 targetSdk 34 - versionCode 5 + versionCode 6 versionName "1.0.0" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" diff --git a/app/src/main/java/com/sopt/geonppang/domain/model/BakeryListFilterType.kt b/app/src/main/java/com/sopt/geonppang/domain/model/BakeryListFilterType.kt index 576ade4c..a6991b37 100644 --- a/app/src/main/java/com/sopt/geonppang/domain/model/BakeryListFilterType.kt +++ b/app/src/main/java/com/sopt/geonppang/domain/model/BakeryListFilterType.kt @@ -4,7 +4,7 @@ import com.sopt.geonppang.presentation.type.BakerySortType data class BakeryListFilterType( val sortType: BakerySortType = BakerySortType.DEFAULT, - val isPersonalFilterApplied: Boolean? = null, + val isPersonalFilterApplied: Boolean, val isHard: Boolean = false, val isDessert: Boolean = false, val isBrunch: Boolean = false 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 5ab5d2f4..e15dab91 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 @@ -59,14 +59,12 @@ class BakeryListFragment : addItemDecoration(CustomItemDecoration(requireContext())) } - val isFilterSelectedMember = - bakeryListViewModel.userRoleType.value == UserRoleType.FILTER_SELECTED_MEMBER.name + val isFilterUnSelectedMember = + bakeryListViewModel.userRoleType.value == UserRoleType.FILTER_UNSELECTED_MEMBER.name with(binding) { - includeHomeSpeechBubble.root.setVisibility(bakeryListViewModel.userRoleType.value == UserRoleType.FILTER_UNSELECTED_MEMBER.name) - checkBakeryListMyFilter.isEnabled = isFilterSelectedMember - checkBakeryListMyFilter.isChecked = isFilterSelectedMember - layoutBakeryListMyFiltaerApply.isEnabled = isFilterSelectedMember + includeHomeSpeechBubble.root.setVisibility(isFilterUnSelectedMember) + layoutBakeryListMyFilterApply.isEnabled = !isFilterUnSelectedMember } } @@ -91,15 +89,20 @@ class BakeryListFragment : // 비회원, 회원 분기처리 binding.ivBakeryListFilter.setOnClickListener { - val isMember = bakeryListViewModel.userRoleType.value == UserRoleType.NONE_MEMBER.name + val isNoneMember = + bakeryListViewModel.userRoleType.value == UserRoleType.NONE_MEMBER.name - if (isMember) { + if (isNoneMember) { showLoginNeedDialog() } else { moveToFilter() AmplitudeUtils.trackEvent(START_FILTER_LIST) } } + + binding.layoutBakeryListMyFilterApply.setOnClickListener { + onApplyPersonalFilterClicked() + } } private fun collectData() { @@ -116,7 +119,7 @@ class BakeryListFragment : .map { it.isPersonalFilterApplied } .distinctUntilChanged() .flowWithLifecycle(viewLifecycleOwner.lifecycle).onEach { isPersonalFilterApplied -> - if (isPersonalFilterApplied == false) { + if (!isPersonalFilterApplied) { AmplitudeUtils.trackEvent(CLICK_PERSONAL_FILTER_APPLY_OFF) } }.launchIn(viewLifecycleOwner.lifecycleScope) @@ -200,6 +203,17 @@ class BakeryListFragment : bakeryListViewModel.setBakerySortType(bakerySortType) } + private fun onApplyPersonalFilterClicked() { + val isNoneMember = + bakeryListViewModel.userRoleType.value == UserRoleType.NONE_MEMBER.name + + if (isNoneMember) { + showLoginNeedDialog() + } else { + bakeryListViewModel.setIsPersonalFilterAppliedState() + } + } + companion object { const val BAKERY_ID = "bakeryId" const val FILTER_INFO = "filterInfo" diff --git a/app/src/main/java/com/sopt/geonppang/presentation/bakeryList/BakeryListViewModel.kt b/app/src/main/java/com/sopt/geonppang/presentation/bakeryList/BakeryListViewModel.kt index e4e7a901..20c56f4f 100644 --- a/app/src/main/java/com/sopt/geonppang/presentation/bakeryList/BakeryListViewModel.kt +++ b/app/src/main/java/com/sopt/geonppang/presentation/bakeryList/BakeryListViewModel.kt @@ -10,6 +10,7 @@ import com.sopt.geonppang.domain.model.BakeryInformation import com.sopt.geonppang.domain.model.BakeryListFilterType import com.sopt.geonppang.presentation.type.BakeryCategoryType import com.sopt.geonppang.presentation.type.BakerySortType +import com.sopt.geonppang.presentation.type.UserRoleType import dagger.hilt.android.lifecycle.HiltViewModel import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.MutableStateFlow @@ -22,7 +23,11 @@ class BakeryListViewModel @Inject constructor( private val bakeryListPagingRepository: BakeryListPagingRepository, private val gpDataSource: GPDataSource ) : ViewModel() { - private var _bakeryListFilterState = MutableStateFlow(BakeryListFilterType()) + private var _bakeryListFilterState = MutableStateFlow( + BakeryListFilterType( + isPersonalFilterApplied = gpDataSource.userRoleType == UserRoleType.FILTER_SELECTED_MEMBER.name + ) + ) val bakeryListFilterType get() = _bakeryListFilterState.asStateFlow() private val _userRoleType = MutableStateFlow(gpDataSource.userRoleType) @@ -37,7 +42,7 @@ class BakeryListViewModel @Inject constructor( // TODO: dana update 로직 수정 필요 fun setIsPersonalFilterAppliedState() { _bakeryListFilterState.update { - it.copy(isPersonalFilterApplied = it.isPersonalFilterApplied == false) + it.copy(isPersonalFilterApplied = !it.isPersonalFilterApplied) } } diff --git a/app/src/main/res/layout/fragment_bakery_list.xml b/app/src/main/res/layout/fragment_bakery_list.xml index bc680647..88ea14a0 100644 --- a/app/src/main/res/layout/fragment_bakery_list.xml +++ b/app/src/main/res/layout/fragment_bakery_list.xml @@ -149,11 +149,10 @@ app:layout_constraintTop_toBottomOf="@id/view_line_bottom"> @@ -163,7 +162,9 @@ style="@style/Style.CheckBox" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:onClick="@{() -> viewModel.setIsPersonalFilterAppliedState()}" /> + android:checked="@{viewModel.bakeryListFilterType.personalFilterApplied}" + android:clickable="false" + android:focusable="false" />