Skip to content

Commit

Permalink
Merge branch 'develop' of https://github.com/Team-Going/Going-Android
Browse files Browse the repository at this point in the history
…into ui/#216-preference-tag
  • Loading branch information
leeeyubin committed Mar 4, 2024
2 parents f801421 + 2137e52 commit 5280644
Show file tree
Hide file tree
Showing 13 changed files with 684 additions and 68 deletions.
5 changes: 5 additions & 0 deletions app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -160,6 +160,11 @@
android:exported="false"
android:screenOrientation="portrait" />

<activity
android:name="com.going.presentation.todo.editinfo.EditTripInfoActivity"
android:exported="false"
android:screenOrientation="portrait" />

</application>

</manifest>
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,8 @@ import com.going.ui.extension.toast
class CreateTripActivity : BaseActivity<ActivityCreateTripBinding>(R.layout.activity_create_trip) {
private val viewModel by viewModels<CreateTripViewModel>()

private lateinit var startBottomSheetDialog: BottomSheetDateContentFragment
private lateinit var endBottomSheetDialog: BottomSheetDateContentFragment
private var startBottomSheetDialog: DateContentBottomSheet? = null
private var endBottomSheetDialog: DateContentBottomSheet? = null

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
Expand Down Expand Up @@ -132,17 +132,16 @@ class CreateTripActivity : BaseActivity<ActivityCreateTripBinding>(R.layout.acti

private fun initStartDateClickListener() {
binding.tvCreateTripStartDate.setOnSingleClickListener {
startBottomSheetDialog = BottomSheetDateContentFragment(viewModel, true)
startBottomSheetDialog.show(supportFragmentManager, startBottomSheetDialog.tag)
startBottomSheetDialog = DateContentBottomSheet(true)
startBottomSheetDialog?.show(supportFragmentManager, startBottomSheetDialog?.tag)
}
}

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)
endBottomSheetDialog = DateContentBottomSheet(false)
endBottomSheetDialog?.show(supportFragmentManager, endBottomSheetDialog?.tag)
} else {
toast(getString(R.string.create_trip_toast_error))
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,6 @@ class CreateTripViewModel : ViewModel() {

val isStartDateAvailable = MutableLiveData(false)
val isEndDateAvailable = MutableLiveData(false)
val isAvailableDateRange = MutableLiveData<Boolean?>(null)

val isNameAvailable = MutableLiveData(NameState.Empty)
private val isTripAvailable = MutableLiveData(false)
Expand All @@ -45,6 +44,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
Expand All @@ -55,18 +68,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
Expand All @@ -79,7 +80,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() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,21 +2,20 @@ 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<FragmentBottomSheetDateContentBinding>(R.layout.fragment_bottom_sheet_date_content) {

private val viewModel by activityViewModels<CreateTripViewModel>()
override fun onStart() {
super.onStart()
dialog?.window?.setBackgroundDrawableResource(R.color.transparent)
if (isStart) customStartDate() else customEndDate()
observeIsAvailableDateRange()
}

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
Expand All @@ -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)
}
Expand All @@ -57,54 +65,20 @@ 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
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)
}
}
}

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.checkIsAvailableDateRange()
}
viewModel.checkTripAvailable()
dismiss()
}
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
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.FragmentEditDateTripBottomSheetBinding
import com.going.ui.base.BaseBottomSheet
import com.going.ui.extension.setOnSingleClickListener
import java.util.Calendar

class EditDateBottomSheet(val isStart: Boolean) :
BaseBottomSheet<FragmentEditDateTripBottomSheetBinding>(R.layout.fragment_edit_date_trip_bottom_sheet) {
private val viewModel by activityViewModels<EditTripInfoViewModel>()

override fun onStart() {
super.onStart()
dialog?.window?.setBackgroundDrawableResource(R.color.transparent)
if (isStart) customStartDate()
else customEndDate()
}

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
binding.lifecycleOwner = viewLifecycleOwner
initFinishBtnClickListener()
}

private fun customStartDate() {
val calendar = Calendar.getInstance()
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

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

private fun customEndDate() {
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() {
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()
dismiss()
}
}
}

Loading

0 comments on commit 5280644

Please sign in to comment.