Skip to content

Commit e1d67ba

Browse files
committed
feat : 남은 시간 textView에 띄우기 구현
1 parent adb54eb commit e1d67ba

File tree

3 files changed

+11
-119
lines changed

3 files changed

+11
-119
lines changed

presentation/src/main/java/com/stop/ui/mission/MissionFragment.kt

Lines changed: 3 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ package com.stop.ui.mission
22

33
import android.Manifest
44
import android.animation.Animator
5-
import android.animation.AnimatorListenerAdapter
65
import android.os.Bundle
76
import android.util.Log
87
import android.view.LayoutInflater
@@ -35,7 +34,7 @@ class MissionFragment : Fragment(), MissionHandler {
3534
get() = _binding!!
3635

3736
private val missionViewModel: MissionViewModel by viewModels()
38-
private val alarmSettingViewModel: AlarmSettingViewModel by activityViewModels<AlarmSettingViewModel>()
37+
private val alarmSettingViewModel: AlarmSettingViewModel by activityViewModels()
3938

4039
private lateinit var tMap: MissionTMap
4140

@@ -54,9 +53,7 @@ class MissionFragment : Fragment(), MissionHandler {
5453
super.onViewCreated(view, savedInstanceState)
5554

5655
setDataBinding()
57-
initViewModel()
5856
initTMap()
59-
setObserve()
6057
setMissionOver()
6158

6259
}
@@ -69,7 +66,8 @@ class MissionFragment : Fragment(), MissionHandler {
6966

7067
private fun setDataBinding() {
7168
binding.lifecycleOwner = viewLifecycleOwner
72-
binding.viewModel = missionViewModel
69+
binding.missionViewModel = missionViewModel
70+
binding.alarmSettingViewModel = alarmSettingViewModel
7371
binding.fragment = this@MissionFragment
7472
}
7573

@@ -80,10 +78,6 @@ class MissionFragment : Fragment(), MissionHandler {
8078
binding.constraintLayoutContainer.addView(tMap.tMapView)
8179
}
8280

83-
private fun initViewModel() {
84-
missionViewModel.countDownWith(LEFT_TIME)
85-
}
86-
8781
fun setCompassMode() {
8882
tMap.tMapView.isCompassMode = tMap.tMapView.isCompassMode.not()
8983
}
@@ -118,38 +112,6 @@ class MissionFragment : Fragment(), MissionHandler {
118112
findNavController().navigate(R.id.action_missionFragment_to_mapFragment)
119113
}
120114

121-
private fun setObserve() {
122-
val shortAnimationDuration =
123-
resources.getInteger(android.R.integer.config_shortAnimTime)
124-
125-
missionViewModel.timeIncreased.observe(viewLifecycleOwner) {
126-
val sign = if (it > 0) {
127-
PLUS
128-
} else {
129-
MINUS
130-
}
131-
binding.textViewChangedTime.text =
132-
resources.getString(R.string.number_format).format(sign, it)
133-
binding.textViewChangedTime.apply {
134-
alpha = 0f
135-
visibility = View.VISIBLE
136-
animate().alpha(1f)
137-
.setDuration(shortAnimationDuration.toLong())
138-
.setListener(object : AnimatorListenerAdapter() {
139-
override fun onAnimationEnd(animation: Animator?) {
140-
animate().alpha(0f)
141-
.setDuration(shortAnimationDuration.toLong())
142-
.setListener(object : AnimatorListenerAdapter() {
143-
override fun onAnimationEnd(animation: Animator?) {
144-
binding.textViewChangedTime.visibility = View.GONE
145-
}
146-
})
147-
}
148-
})
149-
}
150-
}
151-
}
152-
153115
override fun alertTMapReady() {
154116
requestPermissionsLauncher.launch(PERMISSIONS)
155117
getAlarmInfo()
@@ -326,10 +288,6 @@ class MissionFragment : Fragment(), MissionHandler {
326288
}
327289

328290
companion object {
329-
private const val PLUS = "+"
330-
private const val MINUS = ""
331-
private const val LEFT_TIME = 60
332-
333291
private var PERSON_LINE_NUM = 0
334292

335293
private val PERMISSIONS =
Lines changed: 1 addition & 71 deletions
Original file line numberDiff line numberDiff line change
@@ -1,49 +1,23 @@
11
package com.stop.ui.mission
22

3-
import android.util.Log
4-
import androidx.lifecycle.*
3+
import androidx.lifecycle.ViewModel
54
import androidx.work.OneTimeWorkRequestBuilder
65
import androidx.work.WorkManager
76
import com.stop.domain.model.route.tmap.custom.Coordinate
87
import com.stop.domain.model.route.tmap.custom.Place
98
import dagger.hilt.android.lifecycle.HiltViewModel
10-
import kotlinx.coroutines.delay
119
import kotlinx.coroutines.flow.MutableStateFlow
12-
import kotlinx.coroutines.launch
1310
import java.util.*
1411
import javax.inject.Inject
15-
import kotlin.random.Random
1612

1713
@HiltViewModel
1814
class MissionViewModel @Inject constructor(
1915
private val workManager: WorkManager,
2016
missionManager: MissionManager
2117
) : ViewModel() {
2218

23-
private val random = Random(System.currentTimeMillis())
24-
2519
val destination = MutableStateFlow(Place("null",Coordinate("37.553836", "126.969652")))
2620

27-
private val _timeIncreased = MutableLiveData<Int>()
28-
val timeIncreased: LiveData<Int>
29-
get() = _timeIncreased
30-
31-
private val _estimatedTimeRemaining = MutableLiveData<Int>()
32-
val estimatedTimeRemaining: LiveData<Int>
33-
get() = _estimatedTimeRemaining
34-
35-
val leftMinute: LiveData<String> = Transformations.switchMap(estimatedTimeRemaining) {
36-
MutableLiveData<String>().apply {
37-
value = (it / TIME_UNIT).toString().padStart(TIME_DIGIT, '0')
38-
}
39-
}
40-
41-
val leftSecond: LiveData<String> = Transformations.switchMap(estimatedTimeRemaining) {
42-
MutableLiveData<String>().apply {
43-
value = (it % TIME_UNIT).toString().padStart(TIME_DIGIT, '0')
44-
}
45-
}
46-
4721
val userLocation = missionManager.userLocation
4822
val isMissionOver = missionManager.isMissionOver
4923

@@ -53,39 +27,6 @@ class MissionViewModel @Inject constructor(
5327
makeMissionWorker()
5428
}
5529

56-
fun countDownWith(startTime: Int) {
57-
_estimatedTimeRemaining.value = startTime
58-
var leftTime = startTime
59-
viewModelScope.launch {
60-
while (leftTime > TIME_ZERO) {
61-
delay(DELAY_TIME)
62-
leftTime -= ONE_SECOND
63-
if (leftTime <= TIME_ZERO) {
64-
break
65-
}
66-
_estimatedTimeRemaining.value = leftTime
67-
}
68-
}
69-
70-
viewModelScope.launch {
71-
while (leftTime > TIME_ZERO) {
72-
delay(DELAY_TIME)
73-
if (random.nextInt(ZERO, RANDOM_LIMIT) == ZERO) {
74-
val increasedTime = random.nextInt(-RANDOM_LIMIT, RANDOM_LIMIT)
75-
if (increasedTime == ZERO) {
76-
continue
77-
}
78-
leftTime += increasedTime
79-
_timeIncreased.value = increasedTime
80-
}
81-
if (leftTime < TIME_ZERO) {
82-
leftTime = 0
83-
}
84-
_estimatedTimeRemaining.value = leftTime
85-
}
86-
}
87-
}
88-
8930
private fun makeMissionWorker() {
9031
val workRequest = OneTimeWorkRequestBuilder<MissionWorker>()
9132
.build()
@@ -96,18 +37,7 @@ class MissionViewModel @Inject constructor(
9637
}
9738

9839
fun cancelMission() {
99-
Log.d("MissionWorker","취소 되나연")
10040
workManager.cancelWorkById(requestId)
10141
}
10242

103-
companion object {
104-
private const val DELAY_TIME = 1000L
105-
private const val TIME_ZERO = 0
106-
private const val TIME_UNIT = 60
107-
private const val TIME_DIGIT = 2
108-
private const val ONE_SECOND = 1
109-
private const val RANDOM_LIMIT = 5
110-
private const val ZERO = 0
111-
112-
}
11343
}

presentation/src/main/res/layout/fragment_mission.xml

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,16 @@
66
<data>
77

88
<variable
9-
name="viewModel"
9+
name="missionViewModel"
1010
type="com.stop.ui.mission.MissionViewModel" />
1111

1212
<variable
1313
name="fragment"
1414
type="com.stop.ui.mission.MissionFragment" />
15+
16+
<variable
17+
name="alarmSettingViewModel"
18+
type="com.stop.ui.alarmsetting.AlarmSettingViewModel" />
1519
</data>
1620

1721
<androidx.constraintlayout.widget.ConstraintLayout
@@ -62,7 +66,7 @@
6266
android:layout_height="0dp"
6367
android:layout_marginHorizontal="10dp"
6468
android:gravity="center_vertical"
65-
android:text="@{viewModel.destination.name}"
69+
android:text="@{missionViewModel.destination.name}"
6670
android:textColor="@color/main_dark_grey"
6771
android:textSize="17sp"
6872
android:textStyle="bold"
@@ -86,7 +90,7 @@
8690
android:shadowDx="7.0"
8791
android:shadowDy="7.0"
8892
android:shadowRadius="15.0"
89-
android:text="@{@string/minute_and_second(viewModel.leftMinute, viewModel.leftSecond)}"
93+
android:text="@{alarmSettingViewModel.lastTimeCountDown}"
9094
android:textColor="@color/main_dark_grey"
9195
android:textSize="48sp"
9296
app:layout_constraintEnd_toEndOf="parent"

0 commit comments

Comments
 (0)