@@ -8,15 +8,18 @@ import android.util.Log
8
8
import android.view.LayoutInflater
9
9
import android.view.View
10
10
import android.view.ViewGroup
11
- import android.widget.Toast
12
11
import androidx.activity.result.contract.ActivityResultContracts
13
12
import androidx.fragment.app.Fragment
13
+ import androidx.fragment.app.activityViewModels
14
14
import androidx.fragment.app.viewModels
15
15
import androidx.lifecycle.lifecycleScope
16
16
import com.skt.tmap.TMapPoint
17
17
import com.stop.R
18
18
import com.stop.databinding.FragmentMissionBinding
19
+ import com.stop.domain.model.route.tmap.custom.Place
20
+ import com.stop.domain.model.route.tmap.custom.WalkRoute
19
21
import com.stop.model.Location
22
+ import com.stop.ui.alarmsetting.AlarmSettingViewModel
20
23
import com.stop.ui.util.Marker
21
24
import dagger.hilt.android.AndroidEntryPoint
22
25
import kotlinx.coroutines.launch
@@ -28,7 +31,8 @@ class MissionFragment : Fragment(), MissionHandler {
28
31
private val binding: FragmentMissionBinding
29
32
get() = _binding !!
30
33
31
- private val viewModel: MissionViewModel by viewModels()
34
+ private val missionViewModel: MissionViewModel by viewModels()
35
+ private val alarmSettingViewModel: AlarmSettingViewModel by activityViewModels<AlarmSettingViewModel >()
32
36
33
37
private lateinit var tMap: MissionTMap
34
38
@@ -60,7 +64,7 @@ class MissionFragment : Fragment(), MissionHandler {
60
64
61
65
private fun setDataBinding () {
62
66
binding.lifecycleOwner = viewLifecycleOwner
63
- binding.viewModel = viewModel
67
+ binding.viewModel = missionViewModel
64
68
binding.fragment = this @MissionFragment
65
69
}
66
70
@@ -72,8 +76,7 @@ class MissionFragment : Fragment(), MissionHandler {
72
76
}
73
77
74
78
private fun initViewModel () {
75
- viewModel.setDestination(DESTINATION )
76
- viewModel.countDownWith(LEFT_TIME )
79
+ missionViewModel.countDownWith(LEFT_TIME )
77
80
}
78
81
79
82
fun setCompassMode () {
@@ -82,8 +85,8 @@ class MissionFragment : Fragment(), MissionHandler {
82
85
83
86
fun setPersonCurrent () {
84
87
tMap.tMapView.setCenterPoint(
85
- viewModel .personCurrentLocation.latitude,
86
- viewModel .personCurrentLocation.longitude,
88
+ missionViewModel .personCurrentLocation.latitude,
89
+ missionViewModel .personCurrentLocation.longitude,
87
90
true
88
91
)
89
92
@@ -95,10 +98,10 @@ class MissionFragment : Fragment(), MissionHandler {
95
98
with (tMap) {
96
99
latitudes.clear()
97
100
longitudes.clear()
98
- latitudes.add(TEST_DESTINATION . latitude)
99
- longitudes.add(TEST_DESTINATION . longitude)
100
- latitudes.add(viewModel .personCurrentLocation.latitude)
101
- longitudes.add(viewModel .personCurrentLocation.longitude)
101
+ latitudes.add((missionViewModel.destination.value?.coordinate?. latitude ? : " 37.553836 " ).toDouble() )
102
+ longitudes.add((missionViewModel.destination.value?.coordinate?. longitude ? : " 126.969652 " ).toDouble() )
103
+ latitudes.add(missionViewModel .personCurrentLocation.latitude)
104
+ longitudes.add(missionViewModel .personCurrentLocation.longitude)
102
105
setRouteDetailFocus()
103
106
isTracking = false
104
107
}
@@ -108,7 +111,7 @@ class MissionFragment : Fragment(), MissionHandler {
108
111
val shortAnimationDuration =
109
112
resources.getInteger(android.R .integer.config_shortAnimTime)
110
113
111
- viewModel .timeIncreased.observe(viewLifecycleOwner) {
114
+ missionViewModel .timeIncreased.observe(viewLifecycleOwner) {
112
115
val sign = if (it > 0 ) {
113
116
PLUS
114
117
} else {
@@ -134,26 +137,11 @@ class MissionFragment : Fragment(), MissionHandler {
134
137
})
135
138
}
136
139
}
137
-
138
- viewModel.errorMessage.observe(viewLifecycleOwner) {
139
- it.getContentIfNotHandled()?.let { errorType ->
140
- val message = getString(errorType.stringResourcesId)
141
-
142
- Toast .makeText(requireContext(), message, Toast .LENGTH_SHORT ).show()
143
- }
144
- }
145
- viewModel.transportIsArrived.observe(viewLifecycleOwner) {
146
- it.getContentIfNotHandled()?.let { isArrived ->
147
- if (isArrived) {
148
- Toast .makeText(requireContext(), " 도착했습니다." , Toast .LENGTH_LONG ).show()
149
- }
150
- }
151
- }
152
140
}
153
141
154
142
override fun alertTMapReady () {
155
143
requestPermissionsLauncher.launch(PERMISSIONS )
156
- makeDestinationMarker ()
144
+ getAlarmInfo ()
157
145
}
158
146
159
147
override fun setOnEnableScrollWithZoomLevelListener () {
@@ -176,7 +164,7 @@ class MissionFragment : Fragment(), MissionHandler {
176
164
var first = 0
177
165
lateinit var beforeLocation: Location
178
166
lifecycleScope.launch {
179
- viewModel .userLocation.collect { userLocation ->
167
+ missionViewModel .userLocation.collect { userLocation ->
180
168
when (first) {
181
169
0 -> {
182
170
first + = 1
@@ -188,7 +176,7 @@ class MissionFragment : Fragment(), MissionHandler {
188
176
Marker .PERSON_MARKER_IMG ,
189
177
TMapPoint (userLocation.latitude, userLocation.longitude)
190
178
)
191
- viewModel .personCurrentLocation = userLocation
179
+ missionViewModel .personCurrentLocation = userLocation
192
180
tMap.latitudes.add(userLocation.latitude)
193
181
tMap.longitudes.add(userLocation.longitude)
194
182
tMap.setRouteDetailFocus()
@@ -204,7 +192,7 @@ class MissionFragment : Fragment(), MissionHandler {
204
192
Marker .PERSON_LINE_COLOR
205
193
)
206
194
tMap.addMarker(Marker .PERSON_MARKER , Marker .PERSON_MARKER_IMG , nowLocation)
207
- viewModel .personCurrentLocation = userLocation
195
+ missionViewModel .personCurrentLocation = userLocation
208
196
if (tMap.isTracking) {
209
197
tMap.tMapView.setCenterPoint(userLocation.latitude, userLocation.longitude)
210
198
}
@@ -217,15 +205,43 @@ class MissionFragment : Fragment(), MissionHandler {
217
205
}
218
206
}
219
207
220
- private fun makeDestinationMarker () {
221
- tMap.addMarker(Marker .DESTINATION_MARKER , Marker .DESTINATION_MARKER_IMG , TEST_DESTINATION )
222
- tMap.latitudes.add(TEST_DESTINATION .latitude)
223
- tMap.longitudes.add(TEST_DESTINATION .longitude)
208
+ private fun getAlarmInfo () {
209
+ alarmSettingViewModel.getAlarm()
210
+ val linePoints = arrayListOf<TMapPoint >()
211
+ val walkInfo = alarmSettingViewModel.alarmItem.value?.routes?.first() as WalkRoute
212
+ Log .d(" MissionWorker" , " route 그리기 ${alarmSettingViewModel.alarmItem.value?.routes?.first()} " )
213
+ drawWalkRoute(walkInfo, linePoints)
214
+ tMap.drawWalkLines(linePoints, Marker .WALK_LINE , Marker .WALK_LINE_COLOR )
215
+
216
+ missionViewModel.destination.value = walkInfo.end
217
+ makeDestinationMarker(walkInfo.end)
218
+ }
219
+
220
+ private fun makeDestinationMarker (destination : Place ) {
221
+ val latitude = destination.coordinate.latitude.toDouble()
222
+ val longitude = destination.coordinate.longitude.toDouble()
223
+ tMap.addMarker(
224
+ Marker .DESTINATION_MARKER ,
225
+ Marker .DESTINATION_MARKER_IMG ,
226
+ TMapPoint (latitude, longitude)
227
+ )
228
+ tMap.latitudes.add(latitude)
229
+ tMap.longitudes.add(longitude)
230
+ }
231
+
232
+
233
+ private fun drawWalkRoute (route : WalkRoute , linePoints : ArrayList <TMapPoint >) {
234
+ route.steps.forEach { step ->
235
+ step.lineString.split(" " ).forEach { coordinate ->
236
+ val points = coordinate.split(" ," )
237
+
238
+ linePoints.add(TMapPoint (points.last().toDouble(), points.first().toDouble()))
239
+ }
240
+ }
224
241
}
225
242
226
243
companion object {
227
244
228
- private const val DESTINATION = " 구로3동현대아파트"
229
245
private const val PLUS = " +"
230
246
private const val MINUS = " "
231
247
private const val LEFT_TIME = 60
@@ -235,7 +251,5 @@ class MissionFragment : Fragment(), MissionHandler {
235
251
private val PERMISSIONS =
236
252
arrayOf(Manifest .permission.ACCESS_FINE_LOCATION , Manifest .permission.ACCESS_COARSE_LOCATION )
237
253
238
- private val TEST_DESTINATION = TMapPoint (37.553836 , 126.969652 )
239
-
240
254
}
241
255
}
0 commit comments