From af19f2e73457942e04e5f3ffe947bee0ade55e0d Mon Sep 17 00:00:00 2001 From: crownjoe Date: Wed, 28 Feb 2024 01:19:02 +0900 Subject: [PATCH 01/11] =?UTF-8?q?[FEAT/#212]=20=EC=97=AC=ED=96=89=20?= =?UTF-8?q?=EC=A0=95=EB=B3=B4=20=EC=88=98=EC=A0=95=20=EB=B7=B0=20UI=20?= =?UTF-8?q?=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../res/layout/activity_edit_trip_info.xml | 197 ++++++++++++++++++ presentation/src/main/res/values/strings.xml | 13 ++ 2 files changed, 210 insertions(+) create mode 100644 presentation/src/main/res/layout/activity_edit_trip_info.xml diff --git a/presentation/src/main/res/layout/activity_edit_trip_info.xml b/presentation/src/main/res/layout/activity_edit_trip_info.xml new file mode 100644 index 00000000..ae2940a8 --- /dev/null +++ b/presentation/src/main/res/layout/activity_edit_trip_info.xml @@ -0,0 +1,197 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/presentation/src/main/res/values/strings.xml b/presentation/src/main/res/values/strings.xml index a3bec57e..f6b0d738 100644 --- a/presentation/src/main/res/values/strings.xml +++ b/presentation/src/main/res/values/strings.xml @@ -212,5 +212,18 @@ 카카오톡 초대코드 오류 브라우저 오류 + + 여행 정보 + 어떤 여행인가요? + 이번 여행 이름을 입력해 주세요 + 여행 일정을 알려주세요 + 시작일 + - + 종료일 + 나가기 + 수정하기 + %1$d.%2$d.%3$d + 시작일을 먼저 입력해 주세요 + From 59129a5b8daaedcb9aa9136ed75b0bad751a88cb Mon Sep 17 00:00:00 2001 From: crownjoe Date: Wed, 28 Feb 2024 02:27:57 +0900 Subject: [PATCH 02/11] =?UTF-8?q?[FEAT/#212]=20=EB=8D=B0=EC=9D=B4=ED=8A=B8?= =?UTF-8?q?=ED=94=BC=EC=BB=A4=20ui=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../todo/editinfo/BottomSheetDateFragment.kt | 112 ++++++++++++++++++ .../fragment_bottom_sheet_edit_date_trip.xml | 58 +++++++++ 2 files changed, 170 insertions(+) create mode 100644 presentation/src/main/java/com/going/presentation/todo/editinfo/BottomSheetDateFragment.kt create mode 100644 presentation/src/main/res/layout/fragment_bottom_sheet_edit_date_trip.xml diff --git a/presentation/src/main/java/com/going/presentation/todo/editinfo/BottomSheetDateFragment.kt b/presentation/src/main/java/com/going/presentation/todo/editinfo/BottomSheetDateFragment.kt new file mode 100644 index 00000000..96379a3d --- /dev/null +++ b/presentation/src/main/java/com/going/presentation/todo/editinfo/BottomSheetDateFragment.kt @@ -0,0 +1,112 @@ +package com.going.presentation.todo.editinfo + +import android.os.Bundle +import android.view.View +import com.going.presentation.R +import com.going.presentation.databinding.FragmentBottomSheetEditDateTripBinding +import com.going.ui.base.BaseBottomSheet +import com.going.ui.extension.setOnSingleClickListener +import com.going.ui.extension.toast +import java.util.Calendar + +class BottomSheetDateFragment(val viewModel: EditTripInfoViewModel, val isStart: Boolean) : + BaseBottomSheet(R.layout.fragment_bottom_sheet_edit_date_trip) { + + override fun onStart() { + super.onStart() + dialog?.window?.setBackgroundDrawableResource(R.color.transparent) + if (isStart) customStartDate() else customEndDate() + observeIsAvailableDateRange() + } + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + binding.lifecycleOwner = viewLifecycleOwner + initFinishBtnClickListener() + } + + private fun customStartDate() { + val datePicker = binding.dpEditTripDate + val calendar = Calendar.getInstance() + + val currentStartYear = calendar.get(Calendar.YEAR) + val currentStartMonth = calendar.get(Calendar.MONTH) + val currentStartDay = calendar.get(Calendar.DAY_OF_MONTH) + + calendar.set(2000, 0, 1) + datePicker.minDate = calendar.timeInMillis + + calendar.set(2100, 0, 1) + datePicker.maxDate = calendar.timeInMillis + + datePicker.updateDate(currentStartYear, currentStartMonth, currentStartDay) + } + + private fun customEndDate() { + val datePicker = binding.dpEditTripDate + val calendar = Calendar.getInstance() + + val currentEndYear = viewModel.startYear.value ?: 0 + val currentEndMonth = viewModel.startMonth.value ?: 0 + val currentEndDay = viewModel.startDay.value ?: 0 + + calendar.set(currentEndYear, currentEndMonth - 1, currentEndDay) + datePicker.minDate = calendar.timeInMillis + + calendar.set(2100, 0, 1) + datePicker.maxDate = calendar.timeInMillis + } + + private fun observeIsAvailableDateRange() { + viewModel.isAvailableDateRange.observe(this) { + when (it) { + null -> return@observe + true -> return@observe + false -> toast(getString(R.string.date_set_error)) + } + } + } + + private fun sendDateInfo() { + if (isStart) { + viewModel.startYear.value = binding.dpEditTripDate.year + viewModel.startMonth.value = binding.dpEditTripDate.month + 1 + viewModel.startDay.value = binding.dpEditTripDate.dayOfMonth + viewModel.checkStartDateAvailable() + } else { + customEndDate() + viewModel.endYear.value = binding.dpEditTripDate.year + viewModel.endMonth.value = binding.dpEditTripDate.month + 1 + viewModel.endDay.value = binding.dpEditTripDate.dayOfMonth + viewModel.checkEndDateAvailable() + } + } + + private fun initFinishBtnClickListener() { + binding.btnEditTripSelect.setOnSingleClickListener { + sendDateInfo() + if (viewModel.isStartDateAvailable.value == true && viewModel.isEndDateAvailable.value == true) { + val calendar = Calendar.getInstance() + + calendar.set(Calendar.YEAR, viewModel.startYear.value ?: 0) + calendar.set(Calendar.MONTH, viewModel.startMonth.value ?: 0) + calendar.set(Calendar.DAY_OF_MONTH, viewModel.startDay.value ?: 0) + val startDate = calendar.time + + calendar.set(Calendar.YEAR, viewModel.endYear.value ?: 0) + calendar.set(Calendar.MONTH, viewModel.endMonth.value ?: 0) + calendar.set(Calendar.DAY_OF_MONTH, viewModel.endDay.value ?: 0) + val endDate = calendar.time + + if (startDate.before(endDate) || startDate.equals(endDate)) { + viewModel.checkStartDateAvailable() + viewModel.checkEndDateAvailable() + } + viewModel.checkIsAvailableDateRange() + } + viewModel.checkTripAvailable() + dismiss() + } + } +} + diff --git a/presentation/src/main/res/layout/fragment_bottom_sheet_edit_date_trip.xml b/presentation/src/main/res/layout/fragment_bottom_sheet_edit_date_trip.xml new file mode 100644 index 00000000..662f7572 --- /dev/null +++ b/presentation/src/main/res/layout/fragment_bottom_sheet_edit_date_trip.xml @@ -0,0 +1,58 @@ + + + + + + + + + + + + + + + + + From 80e7b3769651fc7871bb611e726c308d0d2077b8 Mon Sep 17 00:00:00 2001 From: crownjoe Date: Wed, 28 Feb 2024 02:51:04 +0900 Subject: [PATCH 03/11] =?UTF-8?q?[FEAT/#212]=20=EC=97=AC=ED=96=89=20?= =?UTF-8?q?=EC=A0=95=EB=B3=B4=20=EC=88=98=EC=A0=95=20=EB=B7=B0=20=EB=A1=9C?= =?UTF-8?q?=EC=A7=81=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...ment.kt => BottomSheetEditDateFragment.kt} | 3 +- .../todo/editinfo/EditTripInfoActivity.kt | 132 ++++++++++++++++++ .../todo/editinfo/EditTripInfoViewModel.kt | 76 ++++++++++ .../res/layout/activity_edit_trip_info.xml | 9 +- presentation/src/main/res/values/strings.xml | 5 +- 5 files changed, 215 insertions(+), 10 deletions(-) rename presentation/src/main/java/com/going/presentation/todo/editinfo/{BottomSheetDateFragment.kt => BottomSheetEditDateFragment.kt} (96%) create mode 100644 presentation/src/main/java/com/going/presentation/todo/editinfo/EditTripInfoActivity.kt create mode 100644 presentation/src/main/java/com/going/presentation/todo/editinfo/EditTripInfoViewModel.kt diff --git a/presentation/src/main/java/com/going/presentation/todo/editinfo/BottomSheetDateFragment.kt b/presentation/src/main/java/com/going/presentation/todo/editinfo/BottomSheetEditDateFragment.kt similarity index 96% rename from presentation/src/main/java/com/going/presentation/todo/editinfo/BottomSheetDateFragment.kt rename to presentation/src/main/java/com/going/presentation/todo/editinfo/BottomSheetEditDateFragment.kt index 96379a3d..99d51b59 100644 --- a/presentation/src/main/java/com/going/presentation/todo/editinfo/BottomSheetDateFragment.kt +++ b/presentation/src/main/java/com/going/presentation/todo/editinfo/BottomSheetEditDateFragment.kt @@ -9,7 +9,7 @@ import com.going.ui.extension.setOnSingleClickListener import com.going.ui.extension.toast import java.util.Calendar -class BottomSheetDateFragment(val viewModel: EditTripInfoViewModel, val isStart: Boolean) : +class BottomSheetEditDateFragment(val viewModel: EditTripInfoViewModel, val isStart: Boolean) : BaseBottomSheet(R.layout.fragment_bottom_sheet_edit_date_trip) { override fun onStart() { @@ -102,7 +102,6 @@ class BottomSheetDateFragment(val viewModel: EditTripInfoViewModel, val isStart: viewModel.checkStartDateAvailable() viewModel.checkEndDateAvailable() } - viewModel.checkIsAvailableDateRange() } viewModel.checkTripAvailable() dismiss() diff --git a/presentation/src/main/java/com/going/presentation/todo/editinfo/EditTripInfoActivity.kt b/presentation/src/main/java/com/going/presentation/todo/editinfo/EditTripInfoActivity.kt new file mode 100644 index 00000000..97a2aca1 --- /dev/null +++ b/presentation/src/main/java/com/going/presentation/todo/editinfo/EditTripInfoActivity.kt @@ -0,0 +1,132 @@ +package com.going.presentation.todo.editinfo + +import android.content.Intent +import android.os.Bundle +import android.widget.TextView +import androidx.activity.viewModels +import androidx.core.content.res.ResourcesCompat +import com.going.domain.entity.NameState +import com.going.presentation.R +import com.going.presentation.databinding.ActivityEditTripInfoBinding +import com.going.presentation.entertrip.createtrip.preference.EnterPreferenceActivity +import com.going.ui.base.BaseActivity +import com.going.ui.extension.setOnSingleClickListener +import com.going.ui.extension.toast + +class EditTripInfoActivity : + BaseActivity(R.layout.activity_edit_trip_info) { + private val viewModel by viewModels() + + private lateinit var startBottomSheetDialog: BottomSheetEditDateFragment + private lateinit var endBottomSheetDialog: BottomSheetEditDateFragment + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + + initBindingViewModel() + observeIsNameAvailable() + initStartDateClickListener() + initEndDateClickListener() + initNextBtnClickListener() + initQuitBtnClickListener() + initBackBtnClickListener() + } + + private fun initBindingViewModel() { + binding.viewModel = viewModel + } + + private fun observeIsNameAvailable() { + viewModel.isNameAvailable.observe(this) { state -> + setColors( + state, + binding.tvNameCounter, + ) { background -> + binding.etEditTripInfoName.background = ResourcesCompat.getDrawable( + this.resources, + background, + theme, + ) + } + } + } + + private fun setColors( + state: NameState, + counter: TextView, + setBackground: (Int) -> Unit, + ) { + val (color, background) = when (state) { + NameState.Empty -> R.color.gray_200 to R.drawable.shape_rect_4_gray200_line + NameState.Success -> R.color.gray_700 to R.drawable.shape_rect_4_gray700_line + NameState.Blank -> R.color.red_500 to R.drawable.shape_rect_4_red500_line + NameState.OVER -> R.color.red_500 to R.drawable.shape_rect_4_red500_line + } + + setCounterColor(counter, color) + setBackground(background) + } + + private fun setCounterColor(counter: TextView, color: Int) { + counter.setTextColor(getColor(color)) + } + + private fun initStartDateClickListener() { + binding.tvEditTripInfoStartDate.setOnSingleClickListener { + startBottomSheetDialog = BottomSheetEditDateFragment(viewModel, true) + startBottomSheetDialog.show(supportFragmentManager, startBottomSheetDialog.tag) + } + } + + private fun initEndDateClickListener() { + binding.tvEditTripInfoEndDate.setOnSingleClickListener { + + if (viewModel.startYear.value != null && viewModel.startMonth.value != null && viewModel.startDay.value != null) { + endBottomSheetDialog = BottomSheetEditDateFragment(viewModel, false) + endBottomSheetDialog.show(supportFragmentManager, endBottomSheetDialog.tag) + } else { + toast(getString(R.string.create_trip_toast_error)) + } + } + } + + private fun initNextBtnClickListener() { + //어느 뷰로 보내는지 확실히 + binding.btnEditTripInfoEdit.setOnSingleClickListener { + Intent(this, EnterPreferenceActivity::class.java).apply { + putExtra(NAME, viewModel.name.value) + putExtra(START_YEAR, viewModel.startYear.value) + putExtra(START_MONTH, viewModel.startMonth.value) + putExtra(START_DAY, viewModel.startDay.value) + putExtra(END_YEAR, viewModel.endYear.value) + putExtra(END_MONTH, viewModel.endMonth.value) + putExtra(END_DAY, viewModel.endDay.value) + addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP) + startActivity(this) + } + } + } + + private fun initQuitBtnClickListener() { + binding.btnEditTripInfoBack.setOnSingleClickListener { + //다이얼로그 띄우기 + } + } + + private fun initBackBtnClickListener() { + binding.btnEditTripInfoBack.setOnSingleClickListener { + finish() + } + } + + companion object { + const val NAME = "name" + const val START_YEAR = "startYear" + const val START_MONTH = "startMonth" + const val START_DAY = "startDay" + const val END_YEAR = "endYear" + const val END_MONTH = "endMonth" + const val END_DAY = "endDay" + } +} + diff --git a/presentation/src/main/java/com/going/presentation/todo/editinfo/EditTripInfoViewModel.kt b/presentation/src/main/java/com/going/presentation/todo/editinfo/EditTripInfoViewModel.kt new file mode 100644 index 00000000..b5d2bb1b --- /dev/null +++ b/presentation/src/main/java/com/going/presentation/todo/editinfo/EditTripInfoViewModel.kt @@ -0,0 +1,76 @@ +package com.going.presentation.todo.editinfo + +import androidx.lifecycle.MutableLiveData +import androidx.lifecycle.ViewModel +import com.going.domain.entity.NameState +import com.going.ui.extension.getGraphemeLength + +class EditTripInfoViewModel : ViewModel() { + val name = MutableLiveData() + val nameLength = MutableLiveData(0) + + val startYear = MutableLiveData() + val startMonth = MutableLiveData() + val startDay = MutableLiveData() + + val endYear = MutableLiveData() + val endMonth = MutableLiveData() + val endDay = MutableLiveData() + + val isStartDateAvailable = MutableLiveData(false) + val isEndDateAvailable = MutableLiveData(false) + val isAvailableDateRange = MutableLiveData(null) + + val isNameAvailable = MutableLiveData(NameState.Empty) + private val isTripAvailable = MutableLiveData(false) + var isCheckTripAvailable = MutableLiveData(false) + + fun checkNameAvailable() { + nameLength.value = name.value?.getGraphemeLength() + + isNameAvailable.value = when { + nameLength.value == 0 -> NameState.Empty + (nameLength.value ?: 0) > MAX_TRIP_LEN -> NameState.OVER + name.value.isNullOrBlank() -> NameState.Blank + else -> NameState.Success + } + + val isInfoAvailable = nameLength.value in 1..MAX_TRIP_LEN + + isTripAvailable.value = + (isNameAvailable.value == NameState.Success) && isInfoAvailable + + checkTripAvailable() + } + + fun checkStartDateAvailable() { + if (startYear.value != null && startMonth.value != null && startDay.value != null) { + isStartDateAvailable.value = true + checkTripAvailable() + } else { + isStartDateAvailable.value = false + checkTripAvailable() + } + } + + + fun checkEndDateAvailable() { + if (endYear.value != null && endMonth.value != null && endDay.value != null) { + isEndDateAvailable.value = true + checkTripAvailable() + } else { + isEndDateAvailable.value = false + checkTripAvailable() + } + } + + fun checkTripAvailable() { + isCheckTripAvailable.value = + (isTripAvailable.value == true && isStartDateAvailable.value == true && isEndDateAvailable.value == true) + } + + companion object { + const val MAX_TRIP_LEN = 15 + } +} + diff --git a/presentation/src/main/res/layout/activity_edit_trip_info.xml b/presentation/src/main/res/layout/activity_edit_trip_info.xml index ae2940a8..0a8a3e58 100644 --- a/presentation/src/main/res/layout/activity_edit_trip_info.xml +++ b/presentation/src/main/res/layout/activity_edit_trip_info.xml @@ -24,7 +24,7 @@ android:id="@+id/tb_edit_trip_info" android:layout_width="0dp" android:layout_height="wrap_content" - android:background="@drawable/layer_list_preference_tag_gray100_line" + android:background="@drawable/shape_rect_4_gray200_line" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent"> @@ -75,6 +75,7 @@ android:imeOptions="actionDone" android:inputType="text" android:maxLines="3" + android:background="@drawable/shape_rect_4_gray700_line" android:text="@={viewModel.name}" android:textAppearance="@style/TextAppearance.Doorip.Detail1.Regular" app:layout_constraintEnd_toEndOf="parent" @@ -129,8 +130,7 @@ android:layout_height="wrap_content" android:layout_marginHorizontal="24dp" android:layout_weight="1" - android:background="@drawable/shape_rect_4_gray200_line" - android:hint="@string/edit_trip_info_start_date" + android:background="@drawable/shape_rect_4_gray700_line" android:maxLines="2" android:paddingHorizontal="12dp" android:paddingVertical="16dp" @@ -150,8 +150,7 @@ android:layout_height="wrap_content" android:layout_marginHorizontal="24dp" android:layout_weight="1" - android:background="@drawable/shape_rect_4_gray200_line" - android:hint="@string/edit_trip_info_end_date" + android:background="@drawable/shape_rect_4_gray700_line" android:maxLines="2" android:paddingHorizontal="12dp" android:paddingVertical="16dp" diff --git a/presentation/src/main/res/values/strings.xml b/presentation/src/main/res/values/strings.xml index f6b0d738..7ca8154d 100644 --- a/presentation/src/main/res/values/strings.xml +++ b/presentation/src/main/res/values/strings.xml @@ -215,13 +215,12 @@ 여행 정보 어떤 여행인가요? - 이번 여행 이름을 입력해 주세요 여행 일정을 알려주세요 - 시작일 + 이번 여행 이름을 입력해 주세요 - - 종료일 나가기 수정하기 + 선택하기 %1$d.%2$d.%3$d 시작일을 먼저 입력해 주세요 From a9ce1cfe3cdb123a447b66cd1f2606c43a445ec0 Mon Sep 17 00:00:00 2001 From: crownjoe Date: Wed, 28 Feb 2024 03:07:43 +0900 Subject: [PATCH 04/11] =?UTF-8?q?[FEAT/#212]=20=EC=97=AC=ED=96=89=20?= =?UTF-8?q?=EB=82=98=EA=B0=80=EA=B8=B0=20=EB=B7=B0=20ui=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../todo/editinfo/EditTripInfoActivity.kt | 19 +++-- .../todo/editinfo/TripQuitDialogFragment.kt | 43 +++++++++++ .../res/layout/fragment_trip_quit_dialog.xml | 71 +++++++++++++++++++ presentation/src/main/res/values/strings.xml | 4 ++ 4 files changed, 133 insertions(+), 4 deletions(-) create mode 100644 presentation/src/main/java/com/going/presentation/todo/editinfo/TripQuitDialogFragment.kt create mode 100644 presentation/src/main/res/layout/fragment_trip_quit_dialog.xml diff --git a/presentation/src/main/java/com/going/presentation/todo/editinfo/EditTripInfoActivity.kt b/presentation/src/main/java/com/going/presentation/todo/editinfo/EditTripInfoActivity.kt index 97a2aca1..58a6bcbb 100644 --- a/presentation/src/main/java/com/going/presentation/todo/editinfo/EditTripInfoActivity.kt +++ b/presentation/src/main/java/com/going/presentation/todo/editinfo/EditTripInfoActivity.kt @@ -19,6 +19,7 @@ class EditTripInfoActivity : private lateinit var startBottomSheetDialog: BottomSheetEditDateFragment private lateinit var endBottomSheetDialog: BottomSheetEditDateFragment + private var quitDialog: TripQuitDialogFragment? = null override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) @@ -27,7 +28,7 @@ class EditTripInfoActivity : observeIsNameAvailable() initStartDateClickListener() initEndDateClickListener() - initNextBtnClickListener() + initEditBtnClickListener() initQuitBtnClickListener() initBackBtnClickListener() } @@ -90,7 +91,7 @@ class EditTripInfoActivity : } } - private fun initNextBtnClickListener() { + private fun initEditBtnClickListener() { //어느 뷰로 보내는지 확실히 binding.btnEditTripInfoEdit.setOnSingleClickListener { Intent(this, EnterPreferenceActivity::class.java).apply { @@ -108,17 +109,27 @@ class EditTripInfoActivity : } private fun initQuitBtnClickListener() { - binding.btnEditTripInfoBack.setOnSingleClickListener { - //다이얼로그 띄우기 + binding.btnEditTripInfoQuit.setOnSingleClickListener { + showQuitDialog() } } + private fun showQuitDialog() { + quitDialog = TripQuitDialogFragment() + quitDialog?.show(supportFragmentManager, quitDialog?.tag) + } + private fun initBackBtnClickListener() { binding.btnEditTripInfoBack.setOnSingleClickListener { finish() } } + override fun onDestroy() { + super.onDestroy() + if (quitDialog?.isAdded == true) quitDialog?.dismiss() + } + companion object { const val NAME = "name" const val START_YEAR = "startYear" diff --git a/presentation/src/main/java/com/going/presentation/todo/editinfo/TripQuitDialogFragment.kt b/presentation/src/main/java/com/going/presentation/todo/editinfo/TripQuitDialogFragment.kt new file mode 100644 index 00000000..11271e94 --- /dev/null +++ b/presentation/src/main/java/com/going/presentation/todo/editinfo/TripQuitDialogFragment.kt @@ -0,0 +1,43 @@ +package com.going.presentation.todo.editinfo + +import android.os.Bundle +import android.view.View +import android.view.WindowManager +import com.going.presentation.R +import com.going.presentation.databinding.FragmentTripQuitDialogBinding +import com.going.ui.base.BaseDialog +import com.going.ui.extension.setOnSingleClickListener + +class TripQuitDialogFragment : + BaseDialog(R.layout.fragment_trip_quit_dialog) { + + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + + initNegativeClickListener() + initPositiveClickListener() + } + + override fun onStart() { + super.onStart() + dialog?.window?.apply { + setLayout( + WindowManager.LayoutParams.MATCH_PARENT, + WindowManager.LayoutParams.WRAP_CONTENT, + ) + } + } + + private fun initPositiveClickListener() { + binding.tvDialogPositive.setOnSingleClickListener { + dismiss() + } + } + + private fun initNegativeClickListener() { + binding.tvDialogNegative.setOnSingleClickListener { + //대시보드 뷰로 이동 + } + } +} diff --git a/presentation/src/main/res/layout/fragment_trip_quit_dialog.xml b/presentation/src/main/res/layout/fragment_trip_quit_dialog.xml new file mode 100644 index 00000000..df99a086 --- /dev/null +++ b/presentation/src/main/res/layout/fragment_trip_quit_dialog.xml @@ -0,0 +1,71 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/presentation/src/main/res/values/strings.xml b/presentation/src/main/res/values/strings.xml index 7ca8154d..0722f7a5 100644 --- a/presentation/src/main/res/values/strings.xml +++ b/presentation/src/main/res/values/strings.xml @@ -223,6 +223,10 @@ 선택하기 %1$d.%2$d.%3$d 시작일을 먼저 입력해 주세요 + 여행방 나가기 + 나가기를 하면 정보가 모두 삭제되고,\n 여행 목록에서도 삭제됩니다. + 나가기 + 취소 From 1bba2ce9f56c708a1e2b725a359053504c253451 Mon Sep 17 00:00:00 2001 From: crownjoe Date: Wed, 28 Feb 2024 19:29:10 +0900 Subject: [PATCH 05/11] =?UTF-8?q?[FEAT/#212]=20=EB=8D=B0=EC=9D=B4=ED=8A=B8?= =?UTF-8?q?=ED=94=BC=EC=BB=A4=20=EB=A1=9C=EC=A7=81=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../BottomSheetDateContentFragment.kt | 1 - .../choosedate/CreateTripViewModel.kt | 14 +-------- .../editinfo/BottomSheetEditDateFragment.kt | 31 ++++++++++--------- .../todo/editinfo/EditTripInfoActivity.kt | 10 +++--- .../todo/editinfo/EditTripInfoViewModel.kt | 1 - .../res/layout/activity_edit_trip_info.xml | 8 +++-- 6 files changed, 28 insertions(+), 37 deletions(-) diff --git a/presentation/src/main/java/com/going/presentation/entertrip/createtrip/choosedate/BottomSheetDateContentFragment.kt b/presentation/src/main/java/com/going/presentation/entertrip/createtrip/choosedate/BottomSheetDateContentFragment.kt index 2d04f4ee..cf121988 100644 --- a/presentation/src/main/java/com/going/presentation/entertrip/createtrip/choosedate/BottomSheetDateContentFragment.kt +++ b/presentation/src/main/java/com/going/presentation/entertrip/createtrip/choosedate/BottomSheetDateContentFragment.kt @@ -102,7 +102,6 @@ class BottomSheetDateContentFragment(val viewModel: CreateTripViewModel, val isS viewModel.checkStartDateAvailable() viewModel.checkEndDateAvailable() } - viewModel.checkIsAvailableDateRange() } viewModel.checkTripAvailable() dismiss() diff --git a/presentation/src/main/java/com/going/presentation/entertrip/createtrip/choosedate/CreateTripViewModel.kt b/presentation/src/main/java/com/going/presentation/entertrip/createtrip/choosedate/CreateTripViewModel.kt index 0c08b650..c7b4f81f 100644 --- a/presentation/src/main/java/com/going/presentation/entertrip/createtrip/choosedate/CreateTripViewModel.kt +++ b/presentation/src/main/java/com/going/presentation/entertrip/createtrip/choosedate/CreateTripViewModel.kt @@ -55,18 +55,6 @@ class CreateTripViewModel : ViewModel() { } } - fun checkIsAvailableDateRange() { - if (isStartDateAvailable.value == true && isEndDateAvailable.value == true) { - isAvailableDateRange.value = null - isAvailableDateRange.value = when { - (startYear.value ?: 0) > (endYear.value ?: 0) -> false - (startMonth.value ?: 0) > (endMonth.value ?: 0) -> false - (startDay.value ?: 0) > (endDay.value ?: 0) -> false - else -> true - } - } - } - fun checkEndDateAvailable() { if (endYear.value != null && endMonth.value != null && endDay.value != null) { isEndDateAvailable.value = true @@ -79,7 +67,7 @@ class CreateTripViewModel : ViewModel() { fun checkTripAvailable() { isCheckTripAvailable.value = - (isTripAvailable.value == true && isStartDateAvailable.value == true && isEndDateAvailable.value == true && isAvailableDateRange.value == true) + (isTripAvailable.value == true && isStartDateAvailable.value == true && isEndDateAvailable.value == true) } fun saveIntentData() { diff --git a/presentation/src/main/java/com/going/presentation/todo/editinfo/BottomSheetEditDateFragment.kt b/presentation/src/main/java/com/going/presentation/todo/editinfo/BottomSheetEditDateFragment.kt index 99d51b59..513edbb4 100644 --- a/presentation/src/main/java/com/going/presentation/todo/editinfo/BottomSheetEditDateFragment.kt +++ b/presentation/src/main/java/com/going/presentation/todo/editinfo/BottomSheetEditDateFragment.kt @@ -6,7 +6,6 @@ import com.going.presentation.R import com.going.presentation.databinding.FragmentBottomSheetEditDateTripBinding import com.going.ui.base.BaseBottomSheet import com.going.ui.extension.setOnSingleClickListener -import com.going.ui.extension.toast import java.util.Calendar class BottomSheetEditDateFragment(val viewModel: EditTripInfoViewModel, val isStart: Boolean) : @@ -15,8 +14,9 @@ class BottomSheetEditDateFragment(val viewModel: EditTripInfoViewModel, val isSt override fun onStart() { super.onStart() dialog?.window?.setBackgroundDrawableResource(R.color.transparent) - if (isStart) customStartDate() else customEndDate() - observeIsAvailableDateRange() + if (isStart) + customStartDate() + else customEndDate() } override fun onViewCreated(view: View, savedInstanceState: Bundle?) { @@ -36,8 +36,17 @@ class BottomSheetEditDateFragment(val viewModel: EditTripInfoViewModel, val isSt calendar.set(2000, 0, 1) datePicker.minDate = calendar.timeInMillis - calendar.set(2100, 0, 1) - datePicker.maxDate = calendar.timeInMillis + if (viewModel.endYear.value != null && viewModel.endMonth.value != null && viewModel.endDay.value != null) { + calendar.set( + viewModel.endYear.value ?: 0, + (viewModel.endMonth.value ?: 0) - 1, + viewModel.endDay.value ?: 0 + ) + datePicker.maxDate = calendar.timeInMillis + } else { + calendar.set(2100, 0, 1) + datePicker.maxDate = calendar.timeInMillis + } datePicker.updateDate(currentStartYear, currentStartMonth, currentStartDay) } @@ -57,22 +66,13 @@ class BottomSheetEditDateFragment(val viewModel: EditTripInfoViewModel, val isSt datePicker.maxDate = calendar.timeInMillis } - private fun observeIsAvailableDateRange() { - viewModel.isAvailableDateRange.observe(this) { - when (it) { - null -> return@observe - true -> return@observe - false -> toast(getString(R.string.date_set_error)) - } - } - } - private fun sendDateInfo() { if (isStart) { viewModel.startYear.value = binding.dpEditTripDate.year viewModel.startMonth.value = binding.dpEditTripDate.month + 1 viewModel.startDay.value = binding.dpEditTripDate.dayOfMonth viewModel.checkStartDateAvailable() + } else { customEndDate() viewModel.endYear.value = binding.dpEditTripDate.year @@ -82,6 +82,7 @@ class BottomSheetEditDateFragment(val viewModel: EditTripInfoViewModel, val isSt } } + private fun initFinishBtnClickListener() { binding.btnEditTripSelect.setOnSingleClickListener { sendDateInfo() diff --git a/presentation/src/main/java/com/going/presentation/todo/editinfo/EditTripInfoActivity.kt b/presentation/src/main/java/com/going/presentation/todo/editinfo/EditTripInfoActivity.kt index 58a6bcbb..7260ee2a 100644 --- a/presentation/src/main/java/com/going/presentation/todo/editinfo/EditTripInfoActivity.kt +++ b/presentation/src/main/java/com/going/presentation/todo/editinfo/EditTripInfoActivity.kt @@ -7,8 +7,8 @@ import androidx.activity.viewModels import androidx.core.content.res.ResourcesCompat import com.going.domain.entity.NameState import com.going.presentation.R +import com.going.presentation.dashboard.DashBoardActivity import com.going.presentation.databinding.ActivityEditTripInfoBinding -import com.going.presentation.entertrip.createtrip.preference.EnterPreferenceActivity import com.going.ui.base.BaseActivity import com.going.ui.extension.setOnSingleClickListener import com.going.ui.extension.toast @@ -81,7 +81,6 @@ class EditTripInfoActivity : private fun initEndDateClickListener() { binding.tvEditTripInfoEndDate.setOnSingleClickListener { - if (viewModel.startYear.value != null && viewModel.startMonth.value != null && viewModel.startDay.value != null) { endBottomSheetDialog = BottomSheetEditDateFragment(viewModel, false) endBottomSheetDialog.show(supportFragmentManager, endBottomSheetDialog.tag) @@ -92,9 +91,8 @@ class EditTripInfoActivity : } private fun initEditBtnClickListener() { - //어느 뷰로 보내는지 확실히 binding.btnEditTripInfoEdit.setOnSingleClickListener { - Intent(this, EnterPreferenceActivity::class.java).apply { + Intent(this, DashBoardActivity::class.java).apply { putExtra(NAME, viewModel.name.value) putExtra(START_YEAR, viewModel.startYear.value) putExtra(START_MONTH, viewModel.startMonth.value) @@ -117,6 +115,10 @@ class EditTripInfoActivity : private fun showQuitDialog() { quitDialog = TripQuitDialogFragment() quitDialog?.show(supportFragmentManager, quitDialog?.tag) + Intent(this, DashBoardActivity::class.java).apply { + //정보 지워지게 구성 + startActivity(this) + } } private fun initBackBtnClickListener() { diff --git a/presentation/src/main/java/com/going/presentation/todo/editinfo/EditTripInfoViewModel.kt b/presentation/src/main/java/com/going/presentation/todo/editinfo/EditTripInfoViewModel.kt index b5d2bb1b..97f74c7c 100644 --- a/presentation/src/main/java/com/going/presentation/todo/editinfo/EditTripInfoViewModel.kt +++ b/presentation/src/main/java/com/going/presentation/todo/editinfo/EditTripInfoViewModel.kt @@ -19,7 +19,6 @@ class EditTripInfoViewModel : ViewModel() { val isStartDateAvailable = MutableLiveData(false) val isEndDateAvailable = MutableLiveData(false) - val isAvailableDateRange = MutableLiveData(null) val isNameAvailable = MutableLiveData(NameState.Empty) private val isTripAvailable = MutableLiveData(false) diff --git a/presentation/src/main/res/layout/activity_edit_trip_info.xml b/presentation/src/main/res/layout/activity_edit_trip_info.xml index 0a8a3e58..dd0bfa9b 100644 --- a/presentation/src/main/res/layout/activity_edit_trip_info.xml +++ b/presentation/src/main/res/layout/activity_edit_trip_info.xml @@ -71,11 +71,11 @@ android:layout_marginHorizontal="24dp" android:layout_marginTop="8dp" android:afterTextChanged="@{(text) -> viewModel.checkNameAvailable()}" + android:background="@drawable/shape_rect_4_gray700_line" android:hint="@string/edit_trip_info_et_name_hint" android:imeOptions="actionDone" android:inputType="text" android:maxLines="3" - android:background="@drawable/shape_rect_4_gray700_line" android:text="@={viewModel.name}" android:textAppearance="@style/TextAppearance.Doorip.Detail1.Regular" app:layout_constraintEnd_toEndOf="parent" @@ -134,7 +134,8 @@ android:maxLines="2" android:paddingHorizontal="12dp" android:paddingVertical="16dp" - android:text="@{viewModel.isStartDateAvailable() == true ? @string/create_trip_date(viewModel.startYear, viewModel.startMonth, viewModel.startDay) : @string/create_trip_start_date}" /> + android:text="@{viewModel.isStartDateAvailable() == true ? @string/create_trip_date(viewModel.startYear, viewModel.startMonth, viewModel.startDay) : @string/create_trip_start_date}" + android:textColor="@color/gray_700" /> + android:text="@{viewModel.isEndDateAvailable() == true ? @string/create_trip_date(viewModel.endYear, viewModel.endMonth, viewModel.endDay) : @string/create_trip_end_date}" + android:textColor="@color/gray_700" /> Date: Wed, 28 Feb 2024 19:36:24 +0900 Subject: [PATCH 06/11] =?UTF-8?q?[FEAT/#212]=20=EC=97=AC=ED=96=89=20?= =?UTF-8?q?=EC=83=9D=EC=84=B1=20=EB=B7=B0=20=EB=8D=B0=EC=9D=B4=ED=8A=B8?= =?UTF-8?q?=ED=94=BC=EC=BB=A4=20=EB=A1=9C=EC=A7=81=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/AndroidManifest.xml | 8 ++++++- .../BottomSheetDateContentFragment.kt | 24 +++++++++---------- 2 files changed, 18 insertions(+), 14 deletions(-) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index d1cff6e4..c5818107 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -4,7 +4,8 @@ - @@ -153,6 +154,11 @@ android:exported="false" android:screenOrientation="portrait" /> + + diff --git a/presentation/src/main/java/com/going/presentation/entertrip/createtrip/choosedate/BottomSheetDateContentFragment.kt b/presentation/src/main/java/com/going/presentation/entertrip/createtrip/choosedate/BottomSheetDateContentFragment.kt index cf121988..a4fcc06e 100644 --- a/presentation/src/main/java/com/going/presentation/entertrip/createtrip/choosedate/BottomSheetDateContentFragment.kt +++ b/presentation/src/main/java/com/going/presentation/entertrip/createtrip/choosedate/BottomSheetDateContentFragment.kt @@ -16,7 +16,6 @@ class BottomSheetDateContentFragment(val viewModel: CreateTripViewModel, val isS super.onStart() dialog?.window?.setBackgroundDrawableResource(R.color.transparent) if (isStart) customStartDate() else customEndDate() - observeIsAvailableDateRange() } override fun onViewCreated(view: View, savedInstanceState: Bundle?) { @@ -36,8 +35,17 @@ class BottomSheetDateContentFragment(val viewModel: CreateTripViewModel, val isS calendar.set(2000, 0, 1) datePicker.minDate = calendar.timeInMillis - calendar.set(2100, 0, 1) - datePicker.maxDate = calendar.timeInMillis + if (viewModel.endYear.value != null && viewModel.endMonth.value != null && viewModel.endDay.value != null) { + calendar.set( + viewModel.endYear.value ?: 0, + (viewModel.endMonth.value ?: 0) - 1, + viewModel.endDay.value ?: 0 + ) + datePicker.maxDate = calendar.timeInMillis + } else { + calendar.set(2100, 0, 1) + datePicker.maxDate = calendar.timeInMillis + } datePicker.updateDate(currentStartYear, currentStartMonth, currentStartDay) } @@ -57,16 +65,6 @@ class BottomSheetDateContentFragment(val viewModel: CreateTripViewModel, val isS datePicker.maxDate = calendar.timeInMillis } - private fun observeIsAvailableDateRange() { - viewModel.isAvailableDateRange.observe(this) { - when (it) { - null -> return@observe - true -> return@observe - false -> toast(getString(R.string.date_set_error)) - } - } - } - private fun sendDateInfo() { if (isStart) { viewModel.startYear.value = binding.dpCreateTripDate.year From 435897aeebe8704c96d3441c0fd71ed13fec31d4 Mon Sep 17 00:00:00 2001 From: crownjoe Date: Wed, 28 Feb 2024 23:51:57 +0900 Subject: [PATCH 07/11] =?UTF-8?q?[FEAT/#212]=20=EB=8D=B0=EC=9D=B4=ED=8A=B8?= =?UTF-8?q?=20=ED=94=BC=EC=BB=A4=20=EC=BD=94=EB=A6=AC=20=EB=B0=98=EC=98=81?= =?UTF-8?q?=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../editinfo/BottomSheetEditDateFragment.kt | 39 ++++--------------- .../todo/editinfo/EditTripInfoViewModel.kt | 17 +++++++- .../res/layout/activity_edit_trip_info.xml | 4 +- 3 files changed, 24 insertions(+), 36 deletions(-) diff --git a/presentation/src/main/java/com/going/presentation/todo/editinfo/BottomSheetEditDateFragment.kt b/presentation/src/main/java/com/going/presentation/todo/editinfo/BottomSheetEditDateFragment.kt index 513edbb4..c7542348 100644 --- a/presentation/src/main/java/com/going/presentation/todo/editinfo/BottomSheetEditDateFragment.kt +++ b/presentation/src/main/java/com/going/presentation/todo/editinfo/BottomSheetEditDateFragment.kt @@ -67,44 +67,19 @@ class BottomSheetEditDateFragment(val viewModel: EditTripInfoViewModel, val isSt } private fun sendDateInfo() { - if (isStart) { - viewModel.startYear.value = binding.dpEditTripDate.year - viewModel.startMonth.value = binding.dpEditTripDate.month + 1 - viewModel.startDay.value = binding.dpEditTripDate.dayOfMonth - viewModel.checkStartDateAvailable() - - } else { - customEndDate() - viewModel.endYear.value = binding.dpEditTripDate.year - viewModel.endMonth.value = binding.dpEditTripDate.month + 1 - viewModel.endDay.value = binding.dpEditTripDate.dayOfMonth - viewModel.checkEndDateAvailable() + with(binding.dpEditTripDate) { + if (isStart) { + viewModel.setStartDate(year, month + 1, dayOfMonth) + } else { + customEndDate() + viewModel.setEndDate(year, month + 1, dayOfMonth) + } } } - private fun initFinishBtnClickListener() { binding.btnEditTripSelect.setOnSingleClickListener { sendDateInfo() - if (viewModel.isStartDateAvailable.value == true && viewModel.isEndDateAvailable.value == true) { - val calendar = Calendar.getInstance() - - calendar.set(Calendar.YEAR, viewModel.startYear.value ?: 0) - calendar.set(Calendar.MONTH, viewModel.startMonth.value ?: 0) - calendar.set(Calendar.DAY_OF_MONTH, viewModel.startDay.value ?: 0) - val startDate = calendar.time - - calendar.set(Calendar.YEAR, viewModel.endYear.value ?: 0) - calendar.set(Calendar.MONTH, viewModel.endMonth.value ?: 0) - calendar.set(Calendar.DAY_OF_MONTH, viewModel.endDay.value ?: 0) - val endDate = calendar.time - - if (startDate.before(endDate) || startDate.equals(endDate)) { - viewModel.checkStartDateAvailable() - viewModel.checkEndDateAvailable() - } - } - viewModel.checkTripAvailable() dismiss() } } diff --git a/presentation/src/main/java/com/going/presentation/todo/editinfo/EditTripInfoViewModel.kt b/presentation/src/main/java/com/going/presentation/todo/editinfo/EditTripInfoViewModel.kt index 97f74c7c..ad071a1b 100644 --- a/presentation/src/main/java/com/going/presentation/todo/editinfo/EditTripInfoViewModel.kt +++ b/presentation/src/main/java/com/going/presentation/todo/editinfo/EditTripInfoViewModel.kt @@ -42,13 +42,27 @@ class EditTripInfoViewModel : ViewModel() { checkTripAvailable() } + fun setStartDate(year: Int, month: Int, day: Int) { + startYear.value = year + startMonth.value = month + startDay.value = day + checkStartDateAvailable() + } + + fun setEndDate(year: Int, month: Int, day: Int) { + endYear.value = year + endMonth.value = month + endDay.value = day + checkEndDateAvailable() + } + + fun checkStartDateAvailable() { if (startYear.value != null && startMonth.value != null && startDay.value != null) { isStartDateAvailable.value = true checkTripAvailable() } else { isStartDateAvailable.value = false - checkTripAvailable() } } @@ -59,7 +73,6 @@ class EditTripInfoViewModel : ViewModel() { checkTripAvailable() } else { isEndDateAvailable.value = false - checkTripAvailable() } } diff --git a/presentation/src/main/res/layout/activity_edit_trip_info.xml b/presentation/src/main/res/layout/activity_edit_trip_info.xml index dd0bfa9b..0560acc9 100644 --- a/presentation/src/main/res/layout/activity_edit_trip_info.xml +++ b/presentation/src/main/res/layout/activity_edit_trip_info.xml @@ -111,7 +111,7 @@ android:layout_height="wrap_content" android:layout_marginTop="37dp" android:text="@string/edit_trip_info_one_line_info_tv_title" - android:textColor="@color/black_000" + android:textColor="@color/gray_700" app:layout_constraintStart_toStartOf="@id/et_edit_trip_info_name" app:layout_constraintTop_toBottomOf="@id/et_edit_trip_info_name" /> @@ -141,7 +141,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/edit_trip_info_slash" - android:textColor="@color/black_000" + android:textColor="@color/gray_700" app:layout_constraintStart_toStartOf="@id/et_edit_trip_info_name" app:layout_constraintTop_toBottomOf="@id/et_edit_trip_info_name" /> From 88753f9103c2b06db7263f70c19186f91408424c Mon Sep 17 00:00:00 2001 From: crownjoe Date: Thu, 29 Feb 2024 00:28:43 +0900 Subject: [PATCH 08/11] =?UTF-8?q?[FEAT/#212]=20=EC=BB=A4=EC=8A=A4=ED=85=80?= =?UTF-8?q?=20=EB=B7=B0=20=EB=B0=98=EC=98=81=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../BottomSheetDateContentFragment.kt | 18 +++--- .../choosedate/CreateTripViewModel.kt | 14 +++++ .../todo/editinfo/EditTripInfoActivity.kt | 43 ++++---------- .../todo/editinfo/EditTripInfoViewModel.kt | 26 +++------ .../res/layout/activity_edit_trip_info.xml | 57 ++++--------------- presentation/src/main/res/values/strings.xml | 1 + 6 files changed, 50 insertions(+), 109 deletions(-) diff --git a/presentation/src/main/java/com/going/presentation/entertrip/createtrip/choosedate/BottomSheetDateContentFragment.kt b/presentation/src/main/java/com/going/presentation/entertrip/createtrip/choosedate/BottomSheetDateContentFragment.kt index a4fcc06e..f4343ad5 100644 --- a/presentation/src/main/java/com/going/presentation/entertrip/createtrip/choosedate/BottomSheetDateContentFragment.kt +++ b/presentation/src/main/java/com/going/presentation/entertrip/createtrip/choosedate/BottomSheetDateContentFragment.kt @@ -66,17 +66,13 @@ class BottomSheetDateContentFragment(val viewModel: CreateTripViewModel, val isS } private fun sendDateInfo() { - if (isStart) { - viewModel.startYear.value = binding.dpCreateTripDate.year - viewModel.startMonth.value = binding.dpCreateTripDate.month + 1 - viewModel.startDay.value = binding.dpCreateTripDate.dayOfMonth - viewModel.checkStartDateAvailable() - } else { - customEndDate() - viewModel.endYear.value = binding.dpCreateTripDate.year - viewModel.endMonth.value = binding.dpCreateTripDate.month + 1 - viewModel.endDay.value = binding.dpCreateTripDate.dayOfMonth - viewModel.checkEndDateAvailable() + with(binding.dpCreateTripDate) { + if (isStart) { + viewModel.setStartDate(year, month + 1, dayOfMonth) + } else { + customEndDate() + viewModel.setEndDate(year, month + 1, dayOfMonth) + } } } diff --git a/presentation/src/main/java/com/going/presentation/entertrip/createtrip/choosedate/CreateTripViewModel.kt b/presentation/src/main/java/com/going/presentation/entertrip/createtrip/choosedate/CreateTripViewModel.kt index c7b4f81f..f296270b 100644 --- a/presentation/src/main/java/com/going/presentation/entertrip/createtrip/choosedate/CreateTripViewModel.kt +++ b/presentation/src/main/java/com/going/presentation/entertrip/createtrip/choosedate/CreateTripViewModel.kt @@ -45,6 +45,20 @@ class CreateTripViewModel : ViewModel() { checkTripAvailable() } + fun setStartDate(year: Int, month: Int, day: Int) { + startYear.value = year + startMonth.value = month + startDay.value = day + checkStartDateAvailable() + } + + fun setEndDate(year: Int, month: Int, day: Int) { + endYear.value = year + endMonth.value = month + endDay.value = day + checkEndDateAvailable() + } + fun checkStartDateAvailable() { if (startYear.value != null && startMonth.value != null && startDay.value != null) { isStartDateAvailable.value = true diff --git a/presentation/src/main/java/com/going/presentation/todo/editinfo/EditTripInfoActivity.kt b/presentation/src/main/java/com/going/presentation/todo/editinfo/EditTripInfoActivity.kt index 7260ee2a..1e4cd3d9 100644 --- a/presentation/src/main/java/com/going/presentation/todo/editinfo/EditTripInfoActivity.kt +++ b/presentation/src/main/java/com/going/presentation/todo/editinfo/EditTripInfoActivity.kt @@ -2,10 +2,8 @@ package com.going.presentation.todo.editinfo import android.content.Intent import android.os.Bundle -import android.widget.TextView import androidx.activity.viewModels -import androidx.core.content.res.ResourcesCompat -import com.going.domain.entity.NameState +import androidx.core.widget.doAfterTextChanged import com.going.presentation.R import com.going.presentation.dashboard.DashBoardActivity import com.going.presentation.databinding.ActivityEditTripInfoBinding @@ -25,7 +23,8 @@ class EditTripInfoActivity : super.onCreate(savedInstanceState) initBindingViewModel() - observeIsNameAvailable() + setEtInfoNameArguments() + observeInfoNameTextChanged() initStartDateClickListener() initEndDateClickListener() initEditBtnClickListener() @@ -37,40 +36,20 @@ class EditTripInfoActivity : binding.viewModel = viewModel } - private fun observeIsNameAvailable() { - viewModel.isNameAvailable.observe(this) { state -> - setColors( - state, - binding.tvNameCounter, - ) { background -> - binding.etEditTripInfoName.background = ResourcesCompat.getDrawable( - this.resources, - background, - theme, - ) - } + private fun setEtInfoNameArguments() { + with(binding.etEditTripInfoName) { + setMaxLen(viewModel.getMaxTripLen()) + overWarning = getString(R.string.trip_over_error) + blankWarning = getString(R.string.trip_blank_error) } } - private fun setColors( - state: NameState, - counter: TextView, - setBackground: (Int) -> Unit, - ) { - val (color, background) = when (state) { - NameState.Empty -> R.color.gray_200 to R.drawable.shape_rect_4_gray200_line - NameState.Success -> R.color.gray_700 to R.drawable.shape_rect_4_gray700_line - NameState.Blank -> R.color.red_500 to R.drawable.shape_rect_4_red500_line - NameState.OVER -> R.color.red_500 to R.drawable.shape_rect_4_red500_line + private fun observeInfoNameTextChanged() { + binding.etEditTripInfoName.editText.doAfterTextChanged { text -> + viewModel.setNameState(text.toString(), binding.etEditTripInfoName.state) } - - setCounterColor(counter, color) - setBackground(background) } - private fun setCounterColor(counter: TextView, color: Int) { - counter.setTextColor(getColor(color)) - } private fun initStartDateClickListener() { binding.tvEditTripInfoStartDate.setOnSingleClickListener { diff --git a/presentation/src/main/java/com/going/presentation/todo/editinfo/EditTripInfoViewModel.kt b/presentation/src/main/java/com/going/presentation/todo/editinfo/EditTripInfoViewModel.kt index ad071a1b..446c6a43 100644 --- a/presentation/src/main/java/com/going/presentation/todo/editinfo/EditTripInfoViewModel.kt +++ b/presentation/src/main/java/com/going/presentation/todo/editinfo/EditTripInfoViewModel.kt @@ -2,12 +2,11 @@ package com.going.presentation.todo.editinfo import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel -import com.going.domain.entity.NameState -import com.going.ui.extension.getGraphemeLength +import com.going.presentation.designsystem.edittext.EditTextState +import kotlinx.coroutines.flow.MutableStateFlow class EditTripInfoViewModel : ViewModel() { val name = MutableLiveData() - val nameLength = MutableLiveData(0) val startYear = MutableLiveData() val startMonth = MutableLiveData() @@ -20,26 +19,15 @@ class EditTripInfoViewModel : ViewModel() { val isStartDateAvailable = MutableLiveData(false) val isEndDateAvailable = MutableLiveData(false) - val isNameAvailable = MutableLiveData(NameState.Empty) + val isNameAvailable = MutableStateFlow(false) private val isTripAvailable = MutableLiveData(false) var isCheckTripAvailable = MutableLiveData(false) - fun checkNameAvailable() { - nameLength.value = name.value?.getGraphemeLength() + fun getMaxTripLen() = MAX_TRIP_LEN - isNameAvailable.value = when { - nameLength.value == 0 -> NameState.Empty - (nameLength.value ?: 0) > MAX_TRIP_LEN -> NameState.OVER - name.value.isNullOrBlank() -> NameState.Blank - else -> NameState.Success - } - - val isInfoAvailable = nameLength.value in 1..MAX_TRIP_LEN - - isTripAvailable.value = - (isNameAvailable.value == NameState.Success) && isInfoAvailable - - checkTripAvailable() + fun setNameState(newName: String, state: EditTextState) { + name.value = newName + isNameAvailable.value = state == EditTextState.SUCCESS } fun setStartDate(year: Int, month: Int, day: Int) { diff --git a/presentation/src/main/res/layout/activity_edit_trip_info.xml b/presentation/src/main/res/layout/activity_edit_trip_info.xml index 0560acc9..4be158d6 100644 --- a/presentation/src/main/res/layout/activity_edit_trip_info.xml +++ b/presentation/src/main/res/layout/activity_edit_trip_info.xml @@ -52,67 +52,30 @@ - - - + app:layout_constraintTop_toBottomOf="@id/tb_edit_trip_info" + app:title="@string/edit_trip_info_tv_title" /> - - - 나가기를 하면 정보가 모두 삭제되고,\n 여행 목록에서도 삭제됩니다. 나가기 취소 + 여행 이름에는 공백만 입력할 수 없어요 From 8e6fe03461340eef893eba1ae0f72d55868f94b7 Mon Sep 17 00:00:00 2001 From: crownjoe Date: Thu, 29 Feb 2024 00:50:52 +0900 Subject: [PATCH 09/11] =?UTF-8?q?[FEAT/#212]=20=EC=BD=94=EB=A6=AC=20?= =?UTF-8?q?=EB=B0=98=EC=98=81=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../BottomSheetDateContentFragment.kt | 19 ------------------- .../choosedate/CreateTripActivity.kt | 1 - .../choosedate/CreateTripViewModel.kt | 1 - presentation/src/main/res/values/strings.xml | 2 +- 4 files changed, 1 insertion(+), 22 deletions(-) diff --git a/presentation/src/main/java/com/going/presentation/entertrip/createtrip/choosedate/BottomSheetDateContentFragment.kt b/presentation/src/main/java/com/going/presentation/entertrip/createtrip/choosedate/BottomSheetDateContentFragment.kt index f4343ad5..258b09f5 100644 --- a/presentation/src/main/java/com/going/presentation/entertrip/createtrip/choosedate/BottomSheetDateContentFragment.kt +++ b/presentation/src/main/java/com/going/presentation/entertrip/createtrip/choosedate/BottomSheetDateContentFragment.kt @@ -79,25 +79,6 @@ class BottomSheetDateContentFragment(val viewModel: CreateTripViewModel, val isS private fun initFinishBtnClickListener() { binding.btnCreateTripFinish.setOnSingleClickListener { sendDateInfo() - if (viewModel.isStartDateAvailable.value == true && viewModel.isEndDateAvailable.value == true) { - val calendar = Calendar.getInstance() - - calendar.set(Calendar.YEAR, viewModel.startYear.value ?: 0) - calendar.set(Calendar.MONTH, viewModel.startMonth.value ?: 0) - calendar.set(Calendar.DAY_OF_MONTH, viewModel.startDay.value ?: 0) - val startDate = calendar.time - - calendar.set(Calendar.YEAR, viewModel.endYear.value ?: 0) - calendar.set(Calendar.MONTH, viewModel.endMonth.value ?: 0) - calendar.set(Calendar.DAY_OF_MONTH, viewModel.endDay.value ?: 0) - val endDate = calendar.time - - if (startDate.before(endDate) || startDate.equals(endDate)) { - viewModel.checkStartDateAvailable() - viewModel.checkEndDateAvailable() - } - } - viewModel.checkTripAvailable() dismiss() } } diff --git a/presentation/src/main/java/com/going/presentation/entertrip/createtrip/choosedate/CreateTripActivity.kt b/presentation/src/main/java/com/going/presentation/entertrip/createtrip/choosedate/CreateTripActivity.kt index 5aed5155..159af9d2 100644 --- a/presentation/src/main/java/com/going/presentation/entertrip/createtrip/choosedate/CreateTripActivity.kt +++ b/presentation/src/main/java/com/going/presentation/entertrip/createtrip/choosedate/CreateTripActivity.kt @@ -139,7 +139,6 @@ class CreateTripActivity : BaseActivity(R.layout.acti private fun initEndDateClickListener() { binding.tvCreateTripEndDate.setOnSingleClickListener { - if (viewModel.startYear.value != null && viewModel.startMonth.value != null && viewModel.startDay.value != null) { endBottomSheetDialog = BottomSheetDateContentFragment(viewModel, false) endBottomSheetDialog.show(supportFragmentManager, endBottomSheetDialog.tag) diff --git a/presentation/src/main/java/com/going/presentation/entertrip/createtrip/choosedate/CreateTripViewModel.kt b/presentation/src/main/java/com/going/presentation/entertrip/createtrip/choosedate/CreateTripViewModel.kt index f296270b..305c5e36 100644 --- a/presentation/src/main/java/com/going/presentation/entertrip/createtrip/choosedate/CreateTripViewModel.kt +++ b/presentation/src/main/java/com/going/presentation/entertrip/createtrip/choosedate/CreateTripViewModel.kt @@ -22,7 +22,6 @@ class CreateTripViewModel : ViewModel() { val isStartDateAvailable = MutableLiveData(false) val isEndDateAvailable = MutableLiveData(false) - val isAvailableDateRange = MutableLiveData(null) val isNameAvailable = MutableLiveData(NameState.Empty) private val isTripAvailable = MutableLiveData(false) diff --git a/presentation/src/main/res/values/strings.xml b/presentation/src/main/res/values/strings.xml index b0233050..8c003b69 100644 --- a/presentation/src/main/res/values/strings.xml +++ b/presentation/src/main/res/values/strings.xml @@ -225,7 +225,7 @@ %1$d.%2$d.%3$d 시작일을 먼저 입력해 주세요 여행방 나가기 - 나가기를 하면 정보가 모두 삭제되고,\n 여행 목록에서도 삭제됩니다. + 나가기를 하면 정보가 모두 삭제되고,\n 여행 목록에서도 삭제됩니다 나가기 취소 여행 이름에는 공백만 입력할 수 없어요 From ae98b9902a9422b9b47e2561466a2ae6ffa65e48 Mon Sep 17 00:00:00 2001 From: crownjoe Date: Sun, 3 Mar 2024 21:04:23 +0900 Subject: [PATCH 10/11] =?UTF-8?q?[FEAT/#212]=20=EC=BD=94=EB=A6=AC=20?= =?UTF-8?q?=EB=B0=98=EC=98=81=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../choosedate/CreateTripActivity.kt | 8 +-- ...tFragment.kt => DateContentBottomSheet.kt} | 6 +-- ...DateFragment.kt => EditDateBottomSheet.kt} | 50 +++++++++---------- .../todo/editinfo/EditTripInfoActivity.kt | 12 ++--- .../main/res/layout/activity_create_trip.xml | 2 + .../res/layout/activity_edit_trip_info.xml | 8 ++- ... fragment_edit_date_trip_bottom_sheet.xml} | 0 7 files changed, 43 insertions(+), 43 deletions(-) rename presentation/src/main/java/com/going/presentation/entertrip/createtrip/choosedate/{BottomSheetDateContentFragment.kt => DateContentBottomSheet.kt} (94%) rename presentation/src/main/java/com/going/presentation/todo/editinfo/{BottomSheetEditDateFragment.kt => EditDateBottomSheet.kt} (61%) rename presentation/src/main/res/layout/{fragment_bottom_sheet_edit_date_trip.xml => fragment_edit_date_trip_bottom_sheet.xml} (100%) diff --git a/presentation/src/main/java/com/going/presentation/entertrip/createtrip/choosedate/CreateTripActivity.kt b/presentation/src/main/java/com/going/presentation/entertrip/createtrip/choosedate/CreateTripActivity.kt index 159af9d2..350ee805 100644 --- a/presentation/src/main/java/com/going/presentation/entertrip/createtrip/choosedate/CreateTripActivity.kt +++ b/presentation/src/main/java/com/going/presentation/entertrip/createtrip/choosedate/CreateTripActivity.kt @@ -15,8 +15,8 @@ import com.going.ui.extension.toast class CreateTripActivity : BaseActivity(R.layout.activity_create_trip) { private val viewModel by viewModels() - private lateinit var startBottomSheetDialog: BottomSheetDateContentFragment - private lateinit var endBottomSheetDialog: BottomSheetDateContentFragment + private lateinit var startBottomSheetDialog: DateContentBottomSheet + private lateinit var endBottomSheetDialog: DateContentBottomSheet override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) @@ -132,7 +132,7 @@ class CreateTripActivity : BaseActivity(R.layout.acti private fun initStartDateClickListener() { binding.tvCreateTripStartDate.setOnSingleClickListener { - startBottomSheetDialog = BottomSheetDateContentFragment(viewModel, true) + startBottomSheetDialog = DateContentBottomSheet(true) startBottomSheetDialog.show(supportFragmentManager, startBottomSheetDialog.tag) } } @@ -140,7 +140,7 @@ class CreateTripActivity : BaseActivity(R.layout.acti private fun initEndDateClickListener() { binding.tvCreateTripEndDate.setOnSingleClickListener { if (viewModel.startYear.value != null && viewModel.startMonth.value != null && viewModel.startDay.value != null) { - endBottomSheetDialog = BottomSheetDateContentFragment(viewModel, false) + endBottomSheetDialog = DateContentBottomSheet(false) endBottomSheetDialog.show(supportFragmentManager, endBottomSheetDialog.tag) } else { toast(getString(R.string.create_trip_toast_error)) diff --git a/presentation/src/main/java/com/going/presentation/entertrip/createtrip/choosedate/BottomSheetDateContentFragment.kt b/presentation/src/main/java/com/going/presentation/entertrip/createtrip/choosedate/DateContentBottomSheet.kt similarity index 94% rename from presentation/src/main/java/com/going/presentation/entertrip/createtrip/choosedate/BottomSheetDateContentFragment.kt rename to presentation/src/main/java/com/going/presentation/entertrip/createtrip/choosedate/DateContentBottomSheet.kt index 258b09f5..e23cf41c 100644 --- a/presentation/src/main/java/com/going/presentation/entertrip/createtrip/choosedate/BottomSheetDateContentFragment.kt +++ b/presentation/src/main/java/com/going/presentation/entertrip/createtrip/choosedate/DateContentBottomSheet.kt @@ -2,16 +2,16 @@ package com.going.presentation.entertrip.createtrip.choosedate import android.os.Bundle import android.view.View +import androidx.fragment.app.activityViewModels import com.going.presentation.R import com.going.presentation.databinding.FragmentBottomSheetDateContentBinding import com.going.ui.base.BaseBottomSheet import com.going.ui.extension.setOnSingleClickListener -import com.going.ui.extension.toast import java.util.Calendar -class BottomSheetDateContentFragment(val viewModel: CreateTripViewModel, val isStart: Boolean) : +class DateContentBottomSheet(val isStart: Boolean) : BaseBottomSheet(R.layout.fragment_bottom_sheet_date_content) { - + private val viewModel by activityViewModels() override fun onStart() { super.onStart() dialog?.window?.setBackgroundDrawableResource(R.color.transparent) diff --git a/presentation/src/main/java/com/going/presentation/todo/editinfo/BottomSheetEditDateFragment.kt b/presentation/src/main/java/com/going/presentation/todo/editinfo/EditDateBottomSheet.kt similarity index 61% rename from presentation/src/main/java/com/going/presentation/todo/editinfo/BottomSheetEditDateFragment.kt rename to presentation/src/main/java/com/going/presentation/todo/editinfo/EditDateBottomSheet.kt index c7542348..d94d2482 100644 --- a/presentation/src/main/java/com/going/presentation/todo/editinfo/BottomSheetEditDateFragment.kt +++ b/presentation/src/main/java/com/going/presentation/todo/editinfo/EditDateBottomSheet.kt @@ -2,20 +2,21 @@ package com.going.presentation.todo.editinfo import android.os.Bundle import android.view.View +import androidx.fragment.app.activityViewModels import com.going.presentation.R -import com.going.presentation.databinding.FragmentBottomSheetEditDateTripBinding +import com.going.presentation.databinding.FragmentEditDateTripBottomSheetBinding import com.going.ui.base.BaseBottomSheet import com.going.ui.extension.setOnSingleClickListener import java.util.Calendar -class BottomSheetEditDateFragment(val viewModel: EditTripInfoViewModel, val isStart: Boolean) : - BaseBottomSheet(R.layout.fragment_bottom_sheet_edit_date_trip) { +class EditDateBottomSheet(val isStart: Boolean) : + BaseBottomSheet(R.layout.fragment_edit_date_trip_bottom_sheet) { + private val viewModel by activityViewModels() override fun onStart() { super.onStart() dialog?.window?.setBackgroundDrawableResource(R.color.transparent) - if (isStart) - customStartDate() + if (isStart) customStartDate() else customEndDate() } @@ -26,13 +27,14 @@ class BottomSheetEditDateFragment(val viewModel: EditTripInfoViewModel, val isSt } private fun customStartDate() { - val datePicker = binding.dpEditTripDate val calendar = Calendar.getInstance() - - val currentStartYear = calendar.get(Calendar.YEAR) - val currentStartMonth = calendar.get(Calendar.MONTH) - val currentStartDay = calendar.get(Calendar.DAY_OF_MONTH) - + val datePicker = binding.dpEditTripDate.apply { + updateDate( + calendar.get(Calendar.YEAR), + calendar.get(Calendar.MONTH), + calendar.get(Calendar.DAY_OF_MONTH) + ) + } calendar.set(2000, 0, 1) datePicker.minDate = calendar.timeInMillis @@ -47,23 +49,21 @@ class BottomSheetEditDateFragment(val viewModel: EditTripInfoViewModel, val isSt calendar.set(2100, 0, 1) datePicker.maxDate = calendar.timeInMillis } - - datePicker.updateDate(currentStartYear, currentStartMonth, currentStartDay) } private fun customEndDate() { - val datePicker = binding.dpEditTripDate - val calendar = Calendar.getInstance() - - val currentEndYear = viewModel.startYear.value ?: 0 - val currentEndMonth = viewModel.startMonth.value ?: 0 - val currentEndDay = viewModel.startDay.value ?: 0 - - calendar.set(currentEndYear, currentEndMonth - 1, currentEndDay) - datePicker.minDate = calendar.timeInMillis - - calendar.set(2100, 0, 1) - datePicker.maxDate = calendar.timeInMillis + binding.dpEditTripDate.apply { + minDate = Calendar.getInstance().apply { + set( + viewModel.startYear.value ?: 0, + (viewModel.startMonth.value ?: 0) - 1, + viewModel.startDay.value ?: 0 + ) + }.timeInMillis + maxDate = Calendar.getInstance().apply { + set(2100, 0, 1) + }.timeInMillis + } } private fun sendDateInfo() { diff --git a/presentation/src/main/java/com/going/presentation/todo/editinfo/EditTripInfoActivity.kt b/presentation/src/main/java/com/going/presentation/todo/editinfo/EditTripInfoActivity.kt index 1e4cd3d9..136b94a0 100644 --- a/presentation/src/main/java/com/going/presentation/todo/editinfo/EditTripInfoActivity.kt +++ b/presentation/src/main/java/com/going/presentation/todo/editinfo/EditTripInfoActivity.kt @@ -15,8 +15,8 @@ class EditTripInfoActivity : BaseActivity(R.layout.activity_edit_trip_info) { private val viewModel by viewModels() - private lateinit var startBottomSheetDialog: BottomSheetEditDateFragment - private lateinit var endBottomSheetDialog: BottomSheetEditDateFragment + private var startBottomSheetDialog: EditDateBottomSheet? = null + private var endBottomSheetDialog: EditDateBottomSheet? = null private var quitDialog: TripQuitDialogFragment? = null override fun onCreate(savedInstanceState: Bundle?) { @@ -53,16 +53,16 @@ class EditTripInfoActivity : private fun initStartDateClickListener() { binding.tvEditTripInfoStartDate.setOnSingleClickListener { - startBottomSheetDialog = BottomSheetEditDateFragment(viewModel, true) - startBottomSheetDialog.show(supportFragmentManager, startBottomSheetDialog.tag) + startBottomSheetDialog = EditDateBottomSheet(true) + startBottomSheetDialog?.show(supportFragmentManager, startBottomSheetDialog?.tag) } } private fun initEndDateClickListener() { binding.tvEditTripInfoEndDate.setOnSingleClickListener { if (viewModel.startYear.value != null && viewModel.startMonth.value != null && viewModel.startDay.value != null) { - endBottomSheetDialog = BottomSheetEditDateFragment(viewModel, false) - endBottomSheetDialog.show(supportFragmentManager, endBottomSheetDialog.tag) + endBottomSheetDialog = EditDateBottomSheet(false) + endBottomSheetDialog?.show(supportFragmentManager, endBottomSheetDialog?.tag) } else { toast(getString(R.string.create_trip_toast_error)) } diff --git a/presentation/src/main/res/layout/activity_create_trip.xml b/presentation/src/main/res/layout/activity_create_trip.xml index 01a1794d..a06b86d3 100644 --- a/presentation/src/main/res/layout/activity_create_trip.xml +++ b/presentation/src/main/res/layout/activity_create_trip.xml @@ -125,6 +125,7 @@ - - - - @@ -71,10 +67,10 @@ style="@style/TextAppearance.Doorip.Body3.Bold" android:layout_width="wrap_content" android:layout_height="wrap_content" + android:layout_marginStart="24dp" android:layout_marginTop="16dp" android:text="@string/edit_trip_info_one_line_info_tv_title" android:textColor="@color/gray_700" - android:layout_marginStart="24dp" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@id/et_edit_trip_info_name" /> @@ -89,6 +85,7 @@ Date: Mon, 4 Mar 2024 09:35:13 +0900 Subject: [PATCH 11/11] =?UTF-8?q?[FEAT/#212]=20=EC=BD=94=EB=A6=AC=20?= =?UTF-8?q?=EB=B0=98=EC=98=81=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../entertrip/createtrip/choosedate/CreateTripActivity.kt | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/presentation/src/main/java/com/going/presentation/entertrip/createtrip/choosedate/CreateTripActivity.kt b/presentation/src/main/java/com/going/presentation/entertrip/createtrip/choosedate/CreateTripActivity.kt index 350ee805..1bcccb4c 100644 --- a/presentation/src/main/java/com/going/presentation/entertrip/createtrip/choosedate/CreateTripActivity.kt +++ b/presentation/src/main/java/com/going/presentation/entertrip/createtrip/choosedate/CreateTripActivity.kt @@ -15,8 +15,8 @@ import com.going.ui.extension.toast class CreateTripActivity : BaseActivity(R.layout.activity_create_trip) { private val viewModel by viewModels() - private lateinit var startBottomSheetDialog: DateContentBottomSheet - private lateinit var endBottomSheetDialog: DateContentBottomSheet + private var startBottomSheetDialog: DateContentBottomSheet? = null + private var endBottomSheetDialog: DateContentBottomSheet? = null override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) @@ -133,7 +133,7 @@ class CreateTripActivity : BaseActivity(R.layout.acti private fun initStartDateClickListener() { binding.tvCreateTripStartDate.setOnSingleClickListener { startBottomSheetDialog = DateContentBottomSheet(true) - startBottomSheetDialog.show(supportFragmentManager, startBottomSheetDialog.tag) + startBottomSheetDialog?.show(supportFragmentManager, startBottomSheetDialog?.tag) } } @@ -141,7 +141,7 @@ class CreateTripActivity : BaseActivity(R.layout.acti binding.tvCreateTripEndDate.setOnSingleClickListener { if (viewModel.startYear.value != null && viewModel.startMonth.value != null && viewModel.startDay.value != null) { endBottomSheetDialog = DateContentBottomSheet(false) - endBottomSheetDialog.show(supportFragmentManager, endBottomSheetDialog.tag) + endBottomSheetDialog?.show(supportFragmentManager, endBottomSheetDialog?.tag) } else { toast(getString(R.string.create_trip_toast_error)) }