Skip to content

Commit 95023a2

Browse files
committed
feat : 미션 종료 구현 - 정류장 도착시 & x 버튼 클릭시
- Snack bar 수정
1 parent 50412e1 commit 95023a2

File tree

5 files changed

+19
-23
lines changed

5 files changed

+19
-23
lines changed

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

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ import android.Manifest
44
import android.animation.Animator
55
import android.animation.AnimatorListenerAdapter
66
import android.os.Bundle
7-
import android.util.Log
87
import android.view.LayoutInflater
98
import android.view.View
109
import android.view.ViewGroup
@@ -23,6 +22,7 @@ import com.stop.model.Location
2322
import com.stop.ui.alarmsetting.AlarmSettingViewModel
2423
import com.stop.ui.util.Marker
2524
import dagger.hilt.android.AndroidEntryPoint
25+
import kotlinx.coroutines.flow.collectLatest
2626
import kotlinx.coroutines.launch
2727

2828
@AndroidEntryPoint
@@ -112,7 +112,7 @@ class MissionFragment : Fragment(), MissionHandler {
112112
}
113113

114114
fun clickMissionOver() {
115-
Snackbar.make(requireActivity().findViewById(com.airbnb.lottie.R.id.content), "미션을 취소합니다", Snackbar.LENGTH_SHORT).show()
115+
Snackbar.make(requireActivity().findViewById(R.id.constraint_layout_container), "미션을 취소합니다", Snackbar.LENGTH_SHORT).show()
116116
missionViewModel.isMissionOver.value = true
117117
}
118118

@@ -202,7 +202,8 @@ class MissionFragment : Fragment(), MissionHandler {
202202
addMarker(
203203
Marker.PERSON_MARKER,
204204
Marker.PERSON_MARKER_IMG,
205-
TMapPoint(nowLocation.latitude, nowLocation.longitude)
205+
TMapPoint(nowLocation.latitude, nowLocation.longitude),
206+
true
206207
)
207208
personCurrentLocation = nowLocation
208209
latitudes.add(nowLocation.latitude)
@@ -256,15 +257,17 @@ class MissionFragment : Fragment(), MissionHandler {
256257
) <= 10
257258
) {
258259
missionViewModel.isMissionOver.value = true
259-
Snackbar.make(requireActivity().findViewById(com.airbnb.lottie.R.id.content), "정류장에 도착했습니다!", Snackbar.LENGTH_SHORT).show()
260+
Snackbar.make(requireActivity().findViewById(R.id.constraint_layout_container), "정류장에 도착했습니다!", Snackbar.LENGTH_SHORT).show()
260261
}
261262
}
262263

263264
private fun setMissionOver() {
264-
missionViewModel.isMissionOver.observe(viewLifecycleOwner) { isMissionOver ->
265-
if (isMissionOver) {
266-
missionViewModel.cancelMission()
267-
alarmSettingViewModel.deleteAlarm()
265+
lifecycleScope.launch {
266+
missionViewModel.isMissionOver.collectLatest { isMissionOver ->
267+
if (isMissionOver) {
268+
missionViewModel.cancelMission()
269+
alarmSettingViewModel.deleteAlarm()
270+
}
268271
}
269272
}
270273
}

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,4 +7,6 @@ class MissionManager {
77

88
var userLocation = MutableStateFlow(Location(0.0, 0.0))
99

10+
var isMissionOver = MutableStateFlow(false)
11+
1012
}

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

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,9 @@ import androidx.work.OneTimeWorkRequestBuilder
66
import androidx.work.WorkManager
77
import com.stop.domain.model.route.tmap.custom.Coordinate
88
import com.stop.domain.model.route.tmap.custom.Place
9-
import com.stop.model.Location
109
import dagger.hilt.android.lifecycle.HiltViewModel
1110
import kotlinx.coroutines.delay
1211
import kotlinx.coroutines.flow.MutableStateFlow
13-
import kotlinx.coroutines.flow.StateFlow
1412
import kotlinx.coroutines.launch
1513
import java.util.*
1614
import javax.inject.Inject
@@ -34,8 +32,6 @@ class MissionViewModel @Inject constructor(
3432
val estimatedTimeRemaining: LiveData<Int>
3533
get() = _estimatedTimeRemaining
3634

37-
val isMissionOver = MutableLiveData(false)
38-
3935
val leftMinute: LiveData<String> = Transformations.switchMap(estimatedTimeRemaining) {
4036
MutableLiveData<String>().apply {
4137
value = (it / TIME_UNIT).toString().padStart(TIME_DIGIT, '0')
@@ -49,6 +45,7 @@ class MissionViewModel @Inject constructor(
4945
}
5046

5147
val userLocation = missionManager.userLocation
48+
val isMissionOver = missionManager.isMissionOver
5249

5350
lateinit var requestId: UUID
5451

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

Lines changed: 3 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@ import androidx.core.app.NotificationCompat
1616
import androidx.hilt.work.HiltWorker
1717
import androidx.work.CoroutineWorker
1818
import androidx.work.ForegroundInfo
19-
import androidx.work.WorkManager
2019
import androidx.work.WorkerParameters
2120
import com.google.android.gms.location.*
2221
import com.stop.MainActivity
@@ -44,7 +43,9 @@ class MissionWorker @AssistedInject constructor(
4443
override suspend fun doWork(): Result {
4544
setForeground(createForegroundInfo())
4645
getPersonLocation()
47-
test()
46+
while (missionManager.isMissionOver.value.not()) {
47+
delay(INTERVAL_UNIT)
48+
}
4849
fusedLocationClient.removeLocationUpdates(locationCallback)
4950
return Result.success()
5051
}
@@ -73,14 +74,6 @@ class MissionWorker @AssistedInject constructor(
7374
fusedLocationClient.requestLocationUpdates(locationRequest, locationCallback, Looper.getMainLooper())
7475
}
7576

76-
private suspend fun test() {
77-
while (NUM < 60) {
78-
Log.d("MissionWorker", "찍히나 테스트 ${NUM}")
79-
NUM += 1
80-
delay(5000)
81-
}
82-
}
83-
8477
private fun createForegroundInfo(): ForegroundInfo {
8578
val id = applicationContext.getString(R.string.mission_notification_channel_id)
8679
val title = applicationContext.getString(R.string.mission_notification_title)

presentation/src/main/java/com/stop/ui/util/TMap.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.stop.ui.util
22

33
import android.content.Context
4+
import android.util.Log
45
import androidx.core.content.ContextCompat
56
import androidx.core.graphics.drawable.toBitmap
67
import com.skt.tmap.TMapGpsManager
@@ -12,7 +13,6 @@ import com.stop.model.Location
1213
import com.stop.ui.map.MapHandler
1314
import com.stop.ui.mission.MissionHandler
1415
import com.stop.ui.routedetail.RouteDetailHandler
15-
import kotlin.math.round
1616

1717
open class TMap(
1818
private val context: Context,
@@ -98,6 +98,7 @@ open class TMap(
9898
if (isFirst.not()) {
9999
tMapView.removeTMapMarkerItem(id)
100100
}
101+
Log.d("MissionWorker","왜 마커가 null이라고 하는거임 $marker")
101102
tMapView.addTMapMarkerItem(marker)
102103
}
103104

0 commit comments

Comments
 (0)