diff --git a/presentation/src/main/java/com/depromeet/presentation/viewfinder/StadiumDetailActivity.kt b/presentation/src/main/java/com/depromeet/presentation/viewfinder/StadiumDetailActivity.kt index 32a103cb..ea97696d 100644 --- a/presentation/src/main/java/com/depromeet/presentation/viewfinder/StadiumDetailActivity.kt +++ b/presentation/src/main/java/com/depromeet/presentation/viewfinder/StadiumDetailActivity.kt @@ -8,6 +8,7 @@ import com.depromeet.core.base.BaseActivity import com.depromeet.presentation.R import com.depromeet.presentation.databinding.ActivityStadiumDetailBinding import com.depromeet.presentation.viewfinder.compose.StadiumDetailScreen +import com.depromeet.presentation.viewfinder.dialog.StadiumFilterMonthsDialog import com.depromeet.presentation.viewfinder.dialog.StadiumSelectSeatDialog import com.depromeet.presentation.viewfinder.sample.ReviewContent import com.depromeet.presentation.viewfinder.viewmodel.StadiumDetailViewModel @@ -50,6 +51,10 @@ class StadiumDetailActivity : BaseActivity({ StadiumSelectSeatDialog.newInstance() .show(supportFragmentManager, StadiumSelectSeatDialog.TAG) }, + onClickFilterMonthly = { + StadiumFilterMonthsDialog.newInstance() + .show(supportFragmentManager, StadiumFilterMonthsDialog.TAG) + }, } ) } diff --git a/presentation/src/main/java/com/depromeet/presentation/viewfinder/dialog/StadiumFilterMonthsDialog.kt b/presentation/src/main/java/com/depromeet/presentation/viewfinder/dialog/StadiumFilterMonthsDialog.kt new file mode 100644 index 00000000..8333c28f --- /dev/null +++ b/presentation/src/main/java/com/depromeet/presentation/viewfinder/dialog/StadiumFilterMonthsDialog.kt @@ -0,0 +1,62 @@ +package com.depromeet.presentation.viewfinder.dialog + +import android.os.Bundle +import android.view.View +import androidx.fragment.app.activityViewModels +import com.depromeet.core.base.BindingBottomSheetDialog +import com.depromeet.presentation.R +import com.depromeet.presentation.databinding.FragmentStadiumFilterMonthsDialogBinding +import com.depromeet.presentation.viewfinder.viewmodel.StadiumDetailViewModel + +class StadiumFilterMonthsDialog : + BindingBottomSheetDialog( + R.layout.fragment_stadium_filter_months_dialog, + FragmentStadiumFilterMonthsDialogBinding::inflate + ) { + companion object { + const val TAG = "StadiumFilterMonthsDialog" + + fun newInstance(): StadiumFilterMonthsDialog { + val args = Bundle() + + val fragment = StadiumFilterMonthsDialog() + fragment.arguments = args + return fragment + } + } + + private val months = arrayOf( + "1월", "2월", "3월", "4월", "5월", "6월", "7월", "8월", "9월", "10월", "11월", "12월" + ) + + private val viewModel: StadiumDetailViewModel by activityViewModels() + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setStyle(STYLE_NORMAL, R.style.TransparentBottomSheetNumberPickerDialogFragment) + } + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + setLayoutSizeRatio(widthPercent = 1f, heightPercent = 0.44f) + + binding.npMonths.minValue = 0 + binding.npMonths.maxValue = months.size - 1 + binding.npMonths.value = viewModel.month.value + binding.npMonths.displayedValues = months + binding.npMonths.wrapSelectorWheel = false + + binding.npMonths.setOnValueChangedListener { picker, oldVal, newVal -> + viewModel.updateMonth(newVal) + } + } + + private fun setLayoutSizeRatio(widthPercent: Float, heightPercent: Float) { + context?.resources?.displayMetrics?.let { metrics -> + binding.root.layoutParams.apply { + width = ((metrics.widthPixels * widthPercent).toInt()) + height = ((metrics.heightPixels * heightPercent).toInt()) + } + } + } +} \ No newline at end of file diff --git a/presentation/src/main/java/com/depromeet/presentation/viewfinder/viewmodel/StadiumDetailViewModel.kt b/presentation/src/main/java/com/depromeet/presentation/viewfinder/viewmodel/StadiumDetailViewModel.kt index 84b58a9a..2fdaebb5 100644 --- a/presentation/src/main/java/com/depromeet/presentation/viewfinder/viewmodel/StadiumDetailViewModel.kt +++ b/presentation/src/main/java/com/depromeet/presentation/viewfinder/viewmodel/StadiumDetailViewModel.kt @@ -4,15 +4,22 @@ import android.util.Log import androidx.lifecycle.ViewModel import dagger.hilt.android.lifecycle.HiltViewModel import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.asStateFlow import javax.inject.Inject @HiltViewModel class StadiumDetailViewModel @Inject constructor() : ViewModel() { private val _scrollState = MutableStateFlow(false) - val scrollState = _scrollState + val scrollState = _scrollState.asStateFlow() + + private val _month = MutableStateFlow(0) + val month = _month.asStateFlow() fun updateScrollState(state: Boolean) { _scrollState.value = state } + fun updateMonth(month: Int) { + _month.value = month + } } \ No newline at end of file diff --git a/presentation/src/main/res/layout/fragment_stadium_filter_months_dialog.xml b/presentation/src/main/res/layout/fragment_stadium_filter_months_dialog.xml new file mode 100644 index 00000000..76536141 --- /dev/null +++ b/presentation/src/main/res/layout/fragment_stadium_filter_months_dialog.xml @@ -0,0 +1,17 @@ + + + + + + \ No newline at end of file