Skip to content

Commit 3643fc1

Browse files
committed
feat: RouteItem 추가 및 getRouteItems 함수 구현
1 parent 0fcb046 commit 3643fc1

File tree

7 files changed

+118
-17
lines changed

7 files changed

+118
-17
lines changed
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
package com.stop.model.route
2+
3+
import com.stop.domain.model.route.tmap.custom.Coordinate
4+
import com.stop.domain.model.route.tmap.custom.MoveType
5+
6+
data class RouteItem(
7+
val name: String,
8+
val coordinate: Coordinate,
9+
val mode: MoveType,
10+
val distance: Double,
11+
val travelTime: Int,
12+
val lastTime: String?,
13+
val beforeColor: Int,
14+
val currentColor: Int,
15+
val type: RouteItemType
16+
)
17+
18+
fun RouteItem.toFirstRouteItem(): RouteItem {
19+
return this.copy(
20+
type = RouteItemType.FIRST
21+
)
22+
}
23+
24+
fun RouteItem.toLastRouteItem(name: String, coordinate: com.stop.model.route.Coordinate): RouteItem {
25+
return this.copy(
26+
name = name,
27+
coordinate = Coordinate(coordinate.latitude, coordinate.longitude),
28+
type = RouteItemType.LAST
29+
)
30+
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
package com.stop.model.route
2+
3+
enum class RouteItemType {
4+
FIRST, PATH, LAST
5+
}

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

Lines changed: 60 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,17 @@
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
67
import androidx.lifecycle.viewModelScope
78
import com.stop.domain.model.route.tmap.RouteRequest
8-
import com.stop.domain.model.route.tmap.custom.Itinerary
9+
import com.stop.domain.model.route.tmap.custom.*
910
import com.stop.domain.usecase.route.GetLastTransportTimeUseCase
1011
import com.stop.domain.usecase.route.GetRouteUseCase
1112
import com.stop.model.ErrorType
1213
import com.stop.model.Event
14+
import com.stop.model.route.*
1315
import com.stop.model.route.Place
1416
import dagger.hilt.android.lifecycle.HiltViewModel
1517
import kotlinx.coroutines.launch
@@ -45,6 +47,7 @@ class RouteViewModel @Inject constructor(
4547

4648
var tempItinerary: Itinerary = Itinerary("", listOf(), 0.0, 0, 0, 0)
4749
var tempLastTime = mutableListOf<String?>()
50+
var routeItemColor = 0
4851

4952
fun getRoute() {
5053
val originValue = _origin.value ?: let {
@@ -96,4 +99,60 @@ class RouteViewModel @Inject constructor(
9699
"${route.start.name}(${lastTimes.peekContent()[index]})"
97100
}.joinToString(" -> ")
98101
}
102+
103+
fun getRouteItems(): List<RouteItem> {
104+
val routeItems = mutableListOf<RouteItem>()
105+
106+
tempItinerary.routes.forEachIndexed { index, route ->
107+
routeItems.add(
108+
RouteItem(
109+
name = getRouteItemName(index, route),
110+
coordinate = route.start.coordinate,
111+
mode = route.mode,
112+
distance = route.distance,
113+
travelTime = route.sectionTime.toInt(),
114+
lastTime = tempLastTime[index],
115+
beforeColor = getRouteItemColor(route, false),
116+
currentColor = getRouteItemColor(route, true),
117+
type = RouteItemType.PATH
118+
)
119+
)
120+
}
121+
routeItems.add(0, routeItems.first().toFirstRouteItem())
122+
destination.value?.let {
123+
routeItems.add(routeItems.last().toLastRouteItem(it.name, it.coordinate))
124+
}
125+
126+
return routeItems.toList()
127+
}
128+
129+
private fun getRouteItemName(index: Int, route: Route): String {
130+
return if (index == 0) {
131+
origin.value?.name ?: ""
132+
} else {
133+
route.start.name
134+
}
135+
}
136+
137+
private fun getRouteItemColor(route: Route, isCurrent: Boolean): Int {
138+
return if (isCurrent) {
139+
routeItemColor = when (route) {
140+
is TransportRoute -> Color.parseColor("#${route.routeColor}")
141+
is WalkRoute -> Color.parseColor(MAIN_YELLOW)
142+
else -> Color.parseColor(MAIN_LIGHT_GREY)
143+
}
144+
routeItemColor
145+
} else {
146+
if (routeItemColor != 0) {
147+
routeItemColor
148+
} else {
149+
getRouteItemColor(route, true)
150+
}
151+
}
152+
}
153+
154+
companion object {
155+
private const val MAIN_YELLOW = "#FFC766"
156+
private const val MAIN_LIGHT_GREY = "#808590"
157+
}
99158
}

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

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -6,16 +6,16 @@ import androidx.recyclerview.widget.DiffUtil
66
import androidx.recyclerview.widget.ListAdapter
77
import androidx.recyclerview.widget.RecyclerView
88
import com.stop.databinding.RoutePathItemBinding
9-
import com.stop.domain.model.route.tmap.custom.Route
9+
import com.stop.model.route.RouteItem
1010

1111
class RouteDetailAdapter(
1212
// private val onRouteDetailClickListener: OnRouteDetailClickListener
13-
): ListAdapter<Route, RecyclerView.ViewHolder>(diffUtil) {
13+
): ListAdapter<RouteItem, RecyclerView.ViewHolder>(diffUtil) {
1414
class PathViewHolder(
1515
private val binding: RoutePathItemBinding
1616
) : RecyclerView.ViewHolder(binding.root) {
17-
fun bind(route: Route) {
18-
binding.route = route
17+
fun bind(routeItem: RouteItem) {
18+
binding.routeItem = routeItem
1919
}
2020
}
2121

@@ -30,13 +30,13 @@ class RouteDetailAdapter(
3030
}
3131

3232
companion object {
33-
private val diffUtil = object : DiffUtil.ItemCallback<Route>() {
34-
override fun areItemsTheSame(oldRoute: Route, newRoute: Route): Boolean {
35-
return oldRoute.start.name == newRoute.start.name
33+
private val diffUtil = object : DiffUtil.ItemCallback<RouteItem>() {
34+
override fun areItemsTheSame(oldItem: RouteItem, newItem: RouteItem): Boolean {
35+
return oldItem.name == newItem.name
3636
}
3737

38-
override fun areContentsTheSame(oldRoute: Route, newRoute: Route): Boolean {
39-
return oldRoute::class == newRoute::class
38+
override fun areContentsTheSame(oldItem: RouteItem, newItem: RouteItem): Boolean {
39+
return oldItem == newItem
4040
}
4141
}
4242
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ class RouteDetailFragment : Fragment(), RouteDetailHandler {
7373
val adapter = RouteDetailAdapter()
7474

7575
binding.routeDetailDrawer.recyclerViewRouteDetail.adapter = adapter
76-
adapter.submitList(routeViewModel.tempItinerary.routes)
76+
adapter.submitList(routeViewModel.getRouteItems())
7777
}
7878

7979
override fun onDestroyView() {

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

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,20 +8,19 @@ object DrawerStringUtils {
88
fun getTimeString(time: Int): String {
99
val timeString = StringBuilder()
1010
val hour = time / 3600
11-
val minute = (time % 3600) / 60
1211

1312
if (hour != 0) {
1413
timeString.append("${hour}시간 ")
1514
}
1615

17-
return timeString.append("${minute}").toString()
16+
return timeString.append("${(time % 3600) / 60}").toString()
1817
}
1918

2019
@JvmStatic
2120
fun getInformationString(itinerary: Itinerary): String {
2221
val informationString = StringBuilder()
2322

24-
informationString.append("${(itinerary.totalDistance / 1000).toInt()}km ")
23+
informationString.append("${getDistanceString(itinerary.totalDistance)} ")
2524
informationString.append("도보 ${getTimeString(itinerary.walkTime)} ")
2625
informationString.append(
2726
"${DecimalFormat("#,###").format(itinerary.totalFare.dropLast(0).toInt())}"
@@ -30,4 +29,12 @@ object DrawerStringUtils {
3029

3130
return informationString.toString()
3231
}
32+
33+
private fun getDistanceString(distance: Double): String {
34+
return if (distance >= 1000) {
35+
"${(distance / 1000).toInt()}km"
36+
} else {
37+
"${distance.toInt()}m"
38+
}
39+
}
3340
}

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@
66

77
<data>
88
<variable
9-
name="route"
10-
type="com.stop.domain.model.route.tmap.custom.Route" />
9+
name="routeItem"
10+
type="com.stop.model.route.RouteItem" />
1111
</data>
1212

1313
<androidx.constraintlayout.widget.ConstraintLayout
@@ -18,7 +18,7 @@
1818
<TextView
1919
android:layout_width="0dp"
2020
android:layout_height="150dp"
21-
android:text="@{route.start.name}"
21+
android:text="@{routeItem.name}"
2222
android:textSize="15sp"
2323
android:gravity="center"
2424
app:layout_constraintStart_toStartOf="parent"

0 commit comments

Comments
 (0)