Skip to content

Commit 3b195d8

Browse files
committed
feat: 데이터 연결
1 parent 4f6374c commit 3b195d8

File tree

8 files changed

+110
-117
lines changed

8 files changed

+110
-117
lines changed

presentation/src/main/java/com/stop/ui/route/RouteFragment.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@ import androidx.navigation.navGraphViewModels
1616
import com.stop.R
1717
import com.stop.databinding.FragmentRouteBinding
1818
import com.stop.domain.model.route.tmap.custom.Itinerary
19+
import com.stop.domain.model.route.tmap.custom.TransportRoute
20+
import com.stop.domain.model.route.tmap.custom.WalkRoute
1921
import dagger.hilt.android.AndroidEntryPoint
2022

2123
@AndroidEntryPoint

presentation/src/main/java/com/stop/ui/route/RouteResultViewModel.kt

Lines changed: 91 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,18 @@
11
package com.stop.ui.route
22

3+
import android.graphics.Color
34
import androidx.lifecycle.LiveData
45
import androidx.lifecycle.MutableLiveData
56
import androidx.lifecycle.ViewModel
7+
import com.stop.R
68
import com.stop.domain.model.route.TransportLastTime
79
import com.stop.domain.model.route.tmap.custom.Itinerary
8-
import com.stop.model.route.Place
10+
import com.stop.domain.model.route.tmap.custom.MoveType
11+
import com.stop.domain.model.route.tmap.custom.Route
12+
import com.stop.domain.model.route.tmap.custom.TransportRoute
13+
import com.stop.model.route.*
914

1015
class RouteResultViewModel : ViewModel() {
11-
1216
private val _itinerary = MutableLiveData<Itinerary>()
1317
val itinerary: LiveData<Itinerary>
1418
get() = _itinerary
@@ -25,6 +29,8 @@ class RouteResultViewModel : ViewModel() {
2529
val destination: LiveData<Place>
2630
get() = _destination
2731

32+
private var routeItemColor = 0
33+
2834
fun setItineraries(itinerary: Itinerary) {
2935
_itinerary.value = itinerary
3036
}
@@ -40,4 +46,87 @@ class RouteResultViewModel : ViewModel() {
4046
fun setDestination(destinationPlace: Place?) {
4147
_destination.value = destinationPlace ?: return
4248
}
49+
50+
fun getRouteItems(): List<RouteItem> {
51+
val routeItems = mutableListOf<RouteItem>()
52+
53+
itinerary.value?.routes?.forEachIndexed { index, route ->
54+
routeItems.add(
55+
RouteItem(
56+
name = getRouteItemName(index, route),
57+
coordinate = route.start.coordinate,
58+
mode = getRouteItemMode(route),
59+
distance = getRouteItemDistance(route),
60+
travelTime = route.sectionTime.toInt(),
61+
lastTime = lastTimes.value?.get(index)?.lastTime,
62+
beforeColor = getRouteItemColor(route, false),
63+
currentColor = getRouteItemColor(route, true),
64+
type = RouteItemType.PATH
65+
)
66+
)
67+
}
68+
routeItems.add(0, routeItems.first().toFirstRouteItem())
69+
destination.value?.let {
70+
routeItems.add(routeItems.last().toLastRouteItem(it.name, it.coordinate))
71+
}
72+
73+
return routeItems.toList()
74+
}
75+
76+
private fun getRouteItemName(index: Int, route: Route): String {
77+
return if (index == 0) {
78+
origin.value?.name ?: ""
79+
} else {
80+
route.start.name
81+
}
82+
}
83+
84+
private fun getRouteItemMode(route: Route): Int {
85+
return when (route.mode) {
86+
MoveType.WALK -> R.drawable.ic_walk_white
87+
MoveType.BUS -> R.drawable.ic_bus_white
88+
MoveType.SUBWAY -> R.drawable.ic_subway_white
89+
MoveType.TRANSFER -> R.drawable.ic_transfer_white
90+
else -> R.drawable.ic_star_white
91+
}
92+
}
93+
94+
private fun getRouteItemDistance(route: Route): Double {
95+
return if (route.mode == MoveType.TRANSFER) {
96+
val startPoint = android.location.Location("Start")
97+
val endPoint = android.location.Location("End")
98+
99+
startPoint.latitude = route.start.coordinate.latitude.toDouble()
100+
startPoint.longitude = route.start.coordinate.longitude.toDouble()
101+
endPoint.latitude = route.end.coordinate.latitude.toDouble()
102+
endPoint.longitude = route.end.coordinate.longitude.toDouble()
103+
startPoint.distanceTo(endPoint).toDouble()
104+
} else {
105+
route.distance
106+
}
107+
}
108+
109+
private fun getRouteItemColor(route: Route, isCurrent: Boolean): Int {
110+
return if (isCurrent) {
111+
routeItemColor = if (route is TransportRoute) {
112+
Color.parseColor("#${route.routeColor}")
113+
} else if (route.mode == MoveType.WALK) {
114+
Color.parseColor(MAIN_WALK_GREY)
115+
} else {
116+
Color.parseColor(MAIN_YELLOW)
117+
}
118+
routeItemColor
119+
} else {
120+
if (routeItemColor != 0) {
121+
routeItemColor
122+
} else {
123+
getRouteItemColor(route, true)
124+
}
125+
}
126+
}
127+
128+
companion object {
129+
private const val MAIN_WALK_GREY = "#C0C5CA"
130+
private const val MAIN_YELLOW = "#FFC766"
131+
}
43132
}
Lines changed: 1 addition & 91 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,16 @@
11
package com.stop.ui.route
22

3-
import android.graphics.Color
43
import androidx.lifecycle.LiveData
54
import androidx.lifecycle.MutableLiveData
65
import androidx.lifecycle.ViewModel
76
import androidx.lifecycle.viewModelScope
8-
import com.stop.R
97
import com.stop.domain.model.route.TransportLastTime
108
import com.stop.domain.model.route.tmap.RouteRequest
119
import com.stop.domain.model.route.tmap.custom.*
1210
import com.stop.domain.usecase.route.GetLastTransportTimeUseCase
1311
import com.stop.domain.usecase.route.GetRouteUseCase
1412
import com.stop.model.ErrorType
1513
import com.stop.model.Event
16-
import com.stop.model.route.*
1714
import com.stop.model.route.Place
1815
import dagger.hilt.android.lifecycle.HiltViewModel
1916
import kotlinx.coroutines.launch
@@ -25,7 +22,7 @@ class RouteViewModel @Inject constructor(
2522
private val getLastTransportTimeUseCase: GetLastTransportTimeUseCase,
2623
) : ViewModel() {
2724

28-
var clickedItineraryIndex: Int = -1
25+
private var clickedItineraryIndex: Int = -1
2926

3027
private val _origin = MutableLiveData<Place>()
3128
val origin: LiveData<Place>
@@ -47,10 +44,6 @@ class RouteViewModel @Inject constructor(
4744
val errorMessage: LiveData<Event<ErrorType>>
4845
get() = _errorMessage
4946

50-
var tempItinerary: Itinerary = Itinerary("", listOf(), 0.0, 0, 0, 0)
51-
var tempLastTime = mutableListOf<String?>()
52-
var routeItemColor = 0
53-
5447
fun getRoute() {
5548
val originValue = _origin.value ?: let {
5649
_errorMessage.value = Event(ErrorType.NO_START)
@@ -97,87 +90,4 @@ class RouteViewModel @Inject constructor(
9790
fun setDestination(place: Place) {
9891
_destination.value = place
9992
}
100-
101-
fun getRouteItems(): List<RouteItem> {
102-
val routeItems = mutableListOf<RouteItem>()
103-
104-
tempItinerary.routes.forEachIndexed { index, route ->
105-
routeItems.add(
106-
RouteItem(
107-
name = getRouteItemName(index, route),
108-
coordinate = route.start.coordinate,
109-
mode = getRouteItemMode(route),
110-
distance = getRouteItemDistance(route),
111-
travelTime = route.sectionTime.toInt(),
112-
lastTime = tempLastTime[index],
113-
beforeColor = getRouteItemColor(route, false),
114-
currentColor = getRouteItemColor(route, true),
115-
type = RouteItemType.PATH
116-
)
117-
)
118-
}
119-
routeItems.add(0, routeItems.first().toFirstRouteItem())
120-
destination.value?.let {
121-
routeItems.add(routeItems.last().toLastRouteItem(it.name, it.coordinate))
122-
}
123-
124-
return routeItems.toList()
125-
}
126-
127-
private fun getRouteItemName(index: Int, route: Route): String {
128-
return if (index == 0) {
129-
origin.value?.name ?: ""
130-
} else {
131-
route.start.name
132-
}
133-
}
134-
135-
private fun getRouteItemMode(route: Route): Int {
136-
return when (route.mode) {
137-
MoveType.WALK -> R.drawable.ic_walk_white
138-
MoveType.BUS -> R.drawable.ic_bus_white
139-
MoveType.SUBWAY -> R.drawable.ic_subway_white
140-
MoveType.TRANSFER -> R.drawable.ic_transfer_white
141-
else -> R.drawable.ic_star_white
142-
}
143-
}
144-
145-
private fun getRouteItemDistance(route: Route): Double {
146-
return if (route.mode == MoveType.TRANSFER) {
147-
val startPoint = android.location.Location("Start")
148-
val endPoint = android.location.Location("End")
149-
150-
startPoint.latitude = route.start.coordinate.latitude.toDouble()
151-
startPoint.longitude = route.start.coordinate.longitude.toDouble()
152-
endPoint.latitude = route.end.coordinate.latitude.toDouble()
153-
endPoint.longitude = route.end.coordinate.longitude.toDouble()
154-
startPoint.distanceTo(endPoint).toDouble()
155-
} else {
156-
route.distance
157-
}
158-
}
159-
160-
private fun getRouteItemColor(route: Route, isCurrent: Boolean): Int {
161-
return if (isCurrent) {
162-
routeItemColor = if (route is TransportRoute) {
163-
Color.parseColor("#${route.routeColor}")
164-
} else if (route.mode == MoveType.WALK) {
165-
Color.parseColor(MAIN_WALK_GREY)
166-
} else {
167-
Color.parseColor(MAIN_YELLOW)
168-
}
169-
routeItemColor
170-
} else {
171-
if (routeItemColor != 0) {
172-
routeItemColor
173-
} else {
174-
getRouteItemColor(route, true)
175-
}
176-
}
177-
}
178-
179-
companion object {
180-
private const val MAIN_WALK_GREY = "#C0C5CA"
181-
private const val MAIN_YELLOW = "#FFC766"
182-
}
18393
}

presentation/src/main/java/com/stop/ui/routedetail/RouteDetailFragment.kt

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -6,15 +6,12 @@ import android.view.LayoutInflater
66
import android.view.View
77
import android.view.ViewGroup
88
import androidx.core.view.GravityCompat
9-
import androidx.fragment.app.activityViewModels
109
import androidx.navigation.findNavController
11-
import com.stop.R
1210
import androidx.navigation.fragment.findNavController
13-
import androidx.navigation.navGraphViewModels
1411
import com.stop.R
12+
import androidx.navigation.navGraphViewModels
1513
import com.stop.databinding.FragmentRouteDetailBinding
1614
import com.stop.domain.model.route.tmap.custom.Coordinate
17-
import com.stop.ui.route.RouteViewModel
1815
import com.stop.ui.route.RouteResultViewModel
1916
import dagger.hilt.android.AndroidEntryPoint
2017

@@ -23,10 +20,9 @@ class RouteDetailFragment : Fragment(), RouteDetailHandler {
2320
private var _binding: FragmentRouteDetailBinding? = null
2421
private val binding get() = _binding!!
2522

26-
private val routeViewModel: RouteViewModel by activityViewModels()
23+
private val routeResultViewModel: RouteResultViewModel by navGraphViewModels(R.id.route_nav_graph)
2724

2825
private lateinit var tMap: RouteDetailTMap
29-
private val routeResultViewModel: RouteResultViewModel by navGraphViewModels(R.id.route_nav_graph)
3026

3127
override fun onCreateView(
3228
inflater: LayoutInflater, container: ViewGroup?,
@@ -47,14 +43,15 @@ class RouteDetailFragment : Fragment(), RouteDetailHandler {
4743
}
4844

4945
override fun alertTMapReady() {
50-
tMap.drawRoutes(routeViewModel.tempItinerary.routes)
46+
routeResultViewModel.itinerary.value?.let {
47+
tMap.drawRoutes(it.routes)
48+
}
5149
}
5250

5351
private fun initBinding() {
5452
binding.lifecycleOwner = viewLifecycleOwner
5553
binding.routeResultViewModel = routeResultViewModel
56-
binding.routeViewModel = routeViewModel
57-
binding.itinerary = routeViewModel.tempItinerary
54+
binding.itinerary = routeResultViewModel.itinerary.value
5855
}
5956

6057
private fun initTMap() {
@@ -76,7 +73,10 @@ class RouteDetailFragment : Fragment(), RouteDetailHandler {
7673
}
7774

7875
binding.imageViewClose.setOnClickListener {
79-
binding.root.findNavController().navigate(R.id.action_routeDetailFragment_to_mapFragment)
76+
findNavController().apply {
77+
setGraph(R.navigation.nav_graph)
78+
navigate(R.id.action_global_mapFragment)
79+
}
8080
}
8181
}
8282

@@ -89,7 +89,7 @@ class RouteDetailFragment : Fragment(), RouteDetailHandler {
8989
})
9090

9191
binding.routeDetailDrawer.recyclerViewRouteDetail.adapter = adapter
92-
adapter.submitList(routeViewModel.getRouteItems())
92+
adapter.submitList(routeResultViewModel.getRouteItems())
9393
}
9494

9595
override fun onDestroyView() {

presentation/src/main/java/com/stop/ui/routedetail/RouteDetailTMap.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ class RouteDetailTMap(
6161
else -> ContextCompat.getColor(context, R.color.main_light_grey)
6262
}
6363

64-
return TMapPolyLine(route.start.name, tMapPoints).apply {
64+
return TMapPolyLine(route.start.name + route.end.name, tMapPoints).apply {
6565
this.lineColor = lineColor
6666
lineWidth = LINE_WIDTH
6767
outLineColor = Color.WHITE

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

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,6 @@
1010
name="routeResultViewModel"
1111
type="com.stop.ui.route.RouteResultViewModel" />
1212

13-
<variable
14-
name="routeViewModel"
15-
type="com.stop.ui.route.RouteViewModel" />
16-
1713
<variable
1814
name="itinerary"
1915
type="com.stop.domain.model.route.tmap.custom.Itinerary" />
@@ -68,7 +64,7 @@
6864
android:maxLines="1"
6965
android:ellipsize="end"
7066
android:gravity="center_vertical|center_horizontal"
71-
android:text="@{routeViewModel.origin.name}"
67+
android:text="@{routeResultViewModel.origin.name}"
7268
android:textSize="17sp"
7369
android:textColor="@color/main_light_grey"
7470
app:layout_constraintStart_toStartOf="parent"
@@ -95,7 +91,7 @@
9591
android:maxLines="1"
9692
android:ellipsize="end"
9793
android:gravity="center_vertical|center_horizontal"
98-
android:text="@{routeViewModel.destination.name}"
94+
android:text="@{routeResultViewModel.destination.name}"
9995
android:textSize="17sp"
10096
android:textColor="@color/main_light_grey"
10197
app:layout_constraintStart_toEndOf="@id/image_view_arrow_right"

presentation/src/main/res/navigation/nav_graph.xml

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -62,12 +62,6 @@
6262
app:destination="@id/mapFragment" />
6363
</fragment>
6464

65-
<fragment
66-
android:id="@+id/bookMarkFragment"
67-
android:name="com.stop.ui.bookmark.BookMarkFragment"
68-
android:label="fragment_book_mark"
69-
tools:layout="@layout/fragment_book_mark" />
70-
7165
<fragment
7266
android:id="@+id/alarmStartFragment"
7367
android:name="com.stop.ui.alarmstart.AlarmStartFragment"

presentation/src/main/res/navigation/route_nav_graph.xml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
app:argType="com.stop.model.route.Place"
2525
app:nullable="true" />
2626
</fragment>
27+
2728
<fragment
2829
android:id="@+id/routeDetailFragment"
2930
tools:layout="@layout/fragment_route_detail"
@@ -33,6 +34,7 @@
3334
android:id="@+id/action_routeDetailFragment_to_alarmSetting"
3435
app:destination="@id/alarmSetting" />
3536
</fragment>
37+
3638
<fragment
3739
android:id="@+id/alarmSetting"
3840
android:name="com.stop.ui.alarmsetting.AlarmSettingFragment"

0 commit comments

Comments
 (0)