From dde4a01f10a3a28655b0834639c3e456e1bd3a37 Mon Sep 17 00:00:00 2001 From: kimyujin-com <80165026+kimyujin-com@users.noreply.github.com> Date: Wed, 14 Feb 2024 03:29:37 +0900 Subject: [PATCH 1/2] =?UTF-8?q?Feat:=20=EC=A1=B8=EC=97=85=EC=98=88?= =?UTF-8?q?=EC=A0=95=EC=9D=BC=20=EC=88=98=EC=A0=95=ED=95=98=EA=B8=B0=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../project/ui/board/GradDateFragment.kt | 36 +++++++++++++++---- .../ui/board/viewmodel/GradDateViewModel.kt | 27 ++++++++++---- .../main/res/layout/fragment_grad_date.xml | 31 ++++++++-------- 3 files changed, 68 insertions(+), 26 deletions(-) diff --git a/app/src/main/java/umc/com/mobile/project/ui/board/GradDateFragment.kt b/app/src/main/java/umc/com/mobile/project/ui/board/GradDateFragment.kt index 31c4cdb..c42e9c3 100644 --- a/app/src/main/java/umc/com/mobile/project/ui/board/GradDateFragment.kt +++ b/app/src/main/java/umc/com/mobile/project/ui/board/GradDateFragment.kt @@ -3,6 +3,7 @@ package umc.com.mobile.project.ui.board import android.content.Context import android.os.Bundle import android.text.Editable +import android.util.Log import androidx.fragment.app.Fragment import android.view.LayoutInflater import android.view.View @@ -16,6 +17,7 @@ import umc.com.mobile.project.databinding.FragmentGradDateBinding import umc.com.mobile.project.databinding.FragmentGradDateBottomBinding import umc.com.mobile.project.ui.board.viewmodel.GradDateViewModel import umc.com.mobile.project.ui.common.NavigationUtil.navigate +import java.text.ParseException import java.text.SimpleDateFormat import java.time.LocalDateTime import java.time.format.DateTimeFormatter @@ -34,6 +36,7 @@ class GradDateFragment : Fragment() { savedInstanceState: Bundle? ): View { _binding = FragmentGradDateBinding.inflate(inflater, container, false) + binding.vm = viewModel mContext = requireContext() bottomSheetBinding = FragmentGradDateBottomBinding.inflate(layoutInflater) // bottomSheetBinding 초기화 @@ -62,12 +65,23 @@ class GradDateFragment : Fragment() { val originalFormat = SimpleDateFormat("yyyy-M월-d", Locale.KOREA) val targetFormat = SimpleDateFormat("yyyy-MM-dd", Locale.KOREA) - val date = originalFormat.parse(viewModel.selectedDateRequest.value) - val formattedDate = targetFormat.format(date) - viewModel.updateCheeringMessage(binding.tvGradDateMemo.text.toString()) - viewModel.updateDateInfo(formattedDate) - Toast.makeText(context, "저장되었습니다.", Toast.LENGTH_LONG).show() - navigate(R.id.action_fragment_date_to_fragment_home) + val dateString = viewModel.selectedDateRequest.value + if (dateString != null) { + try { + val date = originalFormat.parse(dateString) + val formattedDate = targetFormat.format(date) + viewModel.updateCheeringMessage(binding.tvGradDateMemo.text.toString()) + viewModel.updateDateInfo(formattedDate) + Toast.makeText(context, "저장되었습니다.", Toast.LENGTH_LONG).show() + navigate(R.id.action_fragment_date_to_fragment_home) + viewModel.onEditButtonClick() + } catch (e: ParseException) { + Log.e("GradDateFragment", "Error parsing date", e) + Toast.makeText(context, "날짜를 올바른 형식으로 입력해주세요.", Toast.LENGTH_LONG).show() + } + } else { + Toast.makeText(context, "졸업예정일을 선택해주세요.", Toast.LENGTH_LONG).show() + } } return binding.root @@ -104,6 +118,16 @@ class GradDateFragment : Fragment() { viewModel.cheeringMessage.observe(viewLifecycleOwner) { message -> binding.tvGradDateMemo.text = Editable.Factory.getInstance().newEditable(message) } + + viewModel.isEditMode.observe(viewLifecycleOwner, Observer { isEditMode -> + if (isEditMode) { + binding.tvGradDateEdit.visibility = View.GONE + binding.btnSave.visibility = View.VISIBLE + } else { + binding.tvGradDateEdit.visibility = View.VISIBLE + binding.btnSave.visibility = View.GONE + } + }) } override fun onDestroyView() { diff --git a/app/src/main/java/umc/com/mobile/project/ui/board/viewmodel/GradDateViewModel.kt b/app/src/main/java/umc/com/mobile/project/ui/board/viewmodel/GradDateViewModel.kt index 7e4d761..a15184e 100644 --- a/app/src/main/java/umc/com/mobile/project/ui/board/viewmodel/GradDateViewModel.kt +++ b/app/src/main/java/umc/com/mobile/project/ui/board/viewmodel/GradDateViewModel.kt @@ -1,5 +1,6 @@ package umc.com.mobile.project.ui.board.viewmodel import android.util.Log +import androidx.databinding.ObservableBoolean import androidx.lifecycle.LiveData import androidx.lifecycle.MediatorLiveData import androidx.lifecycle.MutableLiveData @@ -16,6 +17,7 @@ import java.time.LocalDate import java.time.format.DateTimeFormatter import java.time.temporal.ChronoUnit + class GradDateViewModel : ViewModel() { val _selectedDate: MutableLiveData = MutableLiveData() val selectedDate: LiveData @@ -30,24 +32,26 @@ class GradDateViewModel : ViewModel() { private val _dateResponse: MutableLiveData = MutableLiveData() val dateResponse: MutableLiveData get() = _dateResponse + private val _updateDateResponse: MutableLiveData = MutableLiveData() val updateDateResponse: MutableLiveData get() = _updateDateResponse + private val _error: MutableLiveData = MutableLiveData() val error: LiveData get() = _error + val _dday: MutableLiveData = MutableLiveData() val dday: LiveData get() = _dday + private val _cheeringMessage: MutableLiveData = MutableLiveData() val cheeringMessage: LiveData get() = _cheeringMessage - val isFilledMemo: LiveData = MediatorLiveData().apply { - addSource(cheeringMessage) { value = isFieldFilled() } - } - private fun isFieldFilled(): Boolean { - return !cheeringMessage.value.isNullOrEmpty() - } + + private val _isEditMode = MutableLiveData(false) + val isEditMode: LiveData + get() = _isEditMode fun init(value: GradDateResponse) { _dday.postValue(value.result.dday) @@ -56,6 +60,13 @@ class GradDateViewModel : ViewModel() { _cheeringMessage.postValue(value.result.message) } + val isFilledMemo: LiveData = MediatorLiveData().apply { + addSource(cheeringMessage) { value = isFieldFilled() } + } + fun isFieldFilled(): Boolean { + return !cheeringMessage.value.isNullOrEmpty() + } + fun updateSelectedDate(year: String, month: String, day: String) { val selectedDateString = "졸업 예정일 ${year}년 $month ${day}일" _selectedDate.value = selectedDateString @@ -78,6 +89,10 @@ class GradDateViewModel : ViewModel() { _cheeringMessage.value = message } + fun onEditButtonClick() { + _isEditMode.value = !_isEditMode.value!! + } + fun getDateInfo() { dateInfoApiService.getDateInfo().enqueue(object : Callback { override fun onResponse( diff --git a/app/src/main/res/layout/fragment_grad_date.xml b/app/src/main/res/layout/fragment_grad_date.xml index d219957..c178b0e 100644 --- a/app/src/main/res/layout/fragment_grad_date.xml +++ b/app/src/main/res/layout/fragment_grad_date.xml @@ -44,7 +44,7 @@ + + - - \ No newline at end of file From 468078394e783e20195e875a64f1fc7c630115b3 Mon Sep 17 00:00:00 2001 From: kimyujin-com <80165026+kimyujin-com@users.noreply.github.com> Date: Wed, 14 Feb 2024 03:42:08 +0900 Subject: [PATCH 2/2] =?UTF-8?q?Design:=20=EC=A1=B8=EC=97=85=EC=98=88?= =?UTF-8?q?=EC=A0=95=EC=9D=BC=20bottom=20frag=20=EB=86=92=EC=9D=B4=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../res/layout/fragment_grad_date_bottom.xml | 21 +++++++------------ 1 file changed, 8 insertions(+), 13 deletions(-) diff --git a/app/src/main/res/layout/fragment_grad_date_bottom.xml b/app/src/main/res/layout/fragment_grad_date_bottom.xml index a62c4ff..c8ea91c 100644 --- a/app/src/main/res/layout/fragment_grad_date_bottom.xml +++ b/app/src/main/res/layout/fragment_grad_date_bottom.xml @@ -1,5 +1,4 @@ - -