Skip to content

Commit 12d71fd

Browse files
committed
feat: route_first_item, route_last_item 추가
1 parent 6237d73 commit 12d71fd

File tree

4 files changed

+324
-11
lines changed

4 files changed

+324
-11
lines changed

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

Lines changed: 57 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,43 +2,90 @@ package com.stop.ui.routedetail
22

33
import android.view.LayoutInflater
44
import android.view.ViewGroup
5+
import androidx.databinding.ViewDataBinding
56
import androidx.recyclerview.widget.DiffUtil
67
import androidx.recyclerview.widget.ListAdapter
78
import androidx.recyclerview.widget.RecyclerView
9+
import com.stop.databinding.RouteFirstItemBinding
10+
import com.stop.databinding.RouteLastItemBinding
811
import com.stop.databinding.RoutePathItemBinding
912
import com.stop.model.route.RouteItem
13+
import com.stop.model.route.RouteItemType
1014

1115
class RouteDetailAdapter(
1216
private val onRouteItemClickListener: OnRouteItemClickListener
1317
): ListAdapter<RouteItem, RecyclerView.ViewHolder>(diffUtil) {
14-
inner class PathViewHolder(
18+
class FirstViewHolder(
19+
private val binding: RouteFirstItemBinding
20+
) : RecyclerView.ViewHolder(binding.root) {
21+
fun bind(routeItem: RouteItem) {
22+
binding.routeItem = routeItem
23+
}
24+
}
25+
26+
class PathViewHolder(
1527
private val binding: RoutePathItemBinding
1628
) : RecyclerView.ViewHolder(binding.root) {
17-
init {
18-
binding.root.setOnClickListener {
19-
binding.routeItem?.let { routeItem ->
20-
onRouteItemClickListener.clickRouteItem(routeItem.coordinate)
21-
}
22-
}
29+
fun bind(routeItem: RouteItem) {
30+
binding.routeItem = routeItem
2331
}
32+
}
2433

34+
class LastViewHolder(
35+
private val binding: RouteLastItemBinding
36+
) : RecyclerView.ViewHolder(binding.root) {
2537
fun bind(routeItem: RouteItem) {
2638
binding.routeItem = routeItem
2739
}
2840
}
2941

3042
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder {
43+
val binding: ViewDataBinding
3144
val inflater = LayoutInflater.from(parent.context)
32-
val binding = RoutePathItemBinding.inflate(inflater, parent, false)
45+
val viewHolder: RecyclerView.ViewHolder = when (viewType) {
46+
TYPE_FIRST -> {
47+
binding = RouteFirstItemBinding.inflate(inflater, parent, false)
48+
FirstViewHolder(binding)
49+
}
50+
TYPE_PATH -> {
51+
binding = RoutePathItemBinding.inflate(inflater, parent, false)
52+
PathViewHolder(binding)
53+
}
54+
TYPE_LAST -> {
55+
binding = RouteLastItemBinding.inflate(inflater, parent, false)
56+
LastViewHolder(binding)
57+
}
58+
else -> throw IllegalArgumentException("Invalid ViewType")
59+
}
60+
61+
binding.root.setOnClickListener {
62+
onRouteItemClickListener.clickRouteItem(getItem(viewHolder.adapterPosition).coordinate)
63+
}
3364

34-
return PathViewHolder(binding)
65+
return viewHolder
3566
}
3667

3768
override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
38-
(holder as PathViewHolder).bind(getItem(position))
69+
when (holder) {
70+
is FirstViewHolder -> holder.bind(getItem(position))
71+
is PathViewHolder -> holder.bind(getItem(position))
72+
is LastViewHolder -> holder.bind(getItem(position))
73+
}
74+
}
75+
76+
override fun getItemViewType(position: Int): Int {
77+
return when ((getItem(position) as RouteItem).type) {
78+
RouteItemType.FIRST -> TYPE_FIRST
79+
RouteItemType.PATH -> TYPE_PATH
80+
RouteItemType.LAST -> TYPE_LAST
81+
}
3982
}
4083

4184
companion object {
85+
private const val TYPE_FIRST = 0
86+
private const val TYPE_PATH = 1
87+
private const val TYPE_LAST = 2
88+
4289
private val diffUtil = object : DiffUtil.ItemCallback<RouteItem>() {
4390
override fun areItemsTheSame(oldItem: RouteItem, newItem: RouteItem): Boolean {
4491
return oldItem.name == newItem.name
Lines changed: 132 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,132 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<layout
3+
xmlns:android="http://schemas.android.com/apk/res/android"
4+
xmlns:app="http://schemas.android.com/apk/res-auto"
5+
xmlns:tools="http://schemas.android.com/tools">
6+
7+
<data>
8+
<import type="com.stop.ui.util.DrawerStringUtils" />
9+
10+
<variable
11+
name="routeItem"
12+
type="com.stop.model.route.RouteItem" />
13+
</data>
14+
15+
<androidx.constraintlayout.widget.ConstraintLayout
16+
android:layout_width="match_parent"
17+
android:layout_height="100dp"
18+
android:background="@color/white">
19+
20+
<androidx.constraintlayout.widget.Guideline
21+
android:id="@+id/guideline_start"
22+
android:layout_width="wrap_content"
23+
android:layout_height="wrap_content"
24+
android:orientation="vertical"
25+
app:layout_constraintGuide_begin="30dp" />
26+
27+
<androidx.constraintlayout.widget.Guideline
28+
android:id="@+id/guideline_end"
29+
android:layout_width="wrap_content"
30+
android:layout_height="wrap_content"
31+
android:orientation="vertical"
32+
app:layout_constraintGuide_end="30dp" />
33+
34+
<TextView
35+
android:id="@+id/text_view_name"
36+
android:layout_width="wrap_content"
37+
android:layout_height="wrap_content"
38+
android:layout_marginStart="15dp"
39+
android:text="@{routeItem.name}"
40+
android:textColor="@color/main_dark_grey"
41+
android:textSize="15sp"
42+
android:gravity="center_vertical"
43+
app:layout_constraintStart_toEndOf="@id/image_view_current_line"
44+
app:layout_constraintTop_toTopOf="@id/image_view_current_line"
45+
app:layout_constraintBottom_toBottomOf="@id/image_view_current_line"
46+
tools:text="이엔씨드림타워3차" />
47+
48+
<TextView
49+
android:id="@+id/text_view_information"
50+
android:layout_width="wrap_content"
51+
android:layout_height="wrap_content"
52+
android:layout_marginTop="5dp"
53+
android:text="@{DrawerStringUtils.getRouteItemInformationString(routeItem)}"
54+
android:textSize="13sp"
55+
android:textColor="@color/main_light_grey"
56+
android:gravity="center_vertical"
57+
app:layout_constraintStart_toStartOf="@id/text_view_name"
58+
app:layout_constraintTop_toBottomOf="@id/text_view_name"
59+
tools:text="512m 16분"/>
60+
61+
<TextView
62+
android:id="@+id/text_view_last_time_1"
63+
android:layout_width="wrap_content"
64+
android:layout_height="wrap_content"
65+
android:layout_marginEnd="5dp"
66+
android:text="@{routeItem.lastTime != null ? @string/last_time : null}"
67+
android:textSize="12sp"
68+
android:textColor="@color/main_light_grey"
69+
android:gravity="center_vertical"
70+
app:layout_constraintEnd_toStartOf="@id/text_view_last_time_2"
71+
app:layout_constraintTop_toTopOf="@id/text_view_last_time_2"
72+
app:layout_constraintBottom_toBottomOf="@id/text_view_last_time_2"
73+
tools:text="현재 막차"/>
74+
75+
<TextView
76+
android:id="@+id/text_view_last_time_2"
77+
android:layout_width="wrap_content"
78+
android:layout_height="wrap_content"
79+
android:layout_marginBottom="15dp"
80+
android:text="@{routeItem.lastTime}"
81+
android:textSize="15sp"
82+
android:textColor="@color/main_dark_grey"
83+
android:gravity="center_vertical"
84+
app:layout_constraintEnd_toEndOf="@id/guideline_end"
85+
app:layout_constraintBottom_toBottomOf="parent"
86+
tools:text="23:17:50"/>
87+
88+
<View
89+
android:id="@+id/view_current_line"
90+
android:layout_width="6dp"
91+
android:layout_height="0dp"
92+
android:layout_marginTop="-5dp"
93+
android:background="@{routeItem.currentColor}"
94+
app:layout_constraintStart_toStartOf="@id/guideline_start"
95+
app:layout_constraintTop_toBottomOf="@id/image_view_current_line"
96+
app:layout_constraintBottom_toBottomOf="parent"
97+
tools:background="@color/main_light_grey" />
98+
99+
<androidx.appcompat.widget.AppCompatImageView
100+
android:id="@+id/image_view_current_line"
101+
android:layout_width="wrap_content"
102+
android:layout_height="wrap_content"
103+
android:layout_marginStart="18dp"
104+
android:layout_marginTop="15dp"
105+
android:tint="@{routeItem.currentColor}"
106+
app:layout_constraintStart_toStartOf="parent"
107+
app:layout_constraintTop_toTopOf="parent"
108+
app:srcCompat="@drawable/ic_circle"
109+
tools:tint="@color/main_light_grey" />
110+
111+
<ImageView
112+
android:layout_width="15dp"
113+
android:layout_height="15dp"
114+
app:layout_constraintStart_toStartOf="@+id/image_view_current_line"
115+
app:layout_constraintEnd_toEndOf="@+id/image_view_current_line"
116+
app:layout_constraintTop_toTopOf="@+id/image_view_current_line"
117+
app:layout_constraintBottom_toBottomOf="@+id/image_view_current_line"
118+
app:imageResource="@{routeItem.mode}"
119+
tools:src="@drawable/ic_walk_white" />
120+
121+
<View
122+
android:id="@+id/view_line"
123+
android:layout_width="0dp"
124+
android:layout_height="1dp"
125+
android:layout_marginStart="15dp"
126+
android:layout_marginEnd="15dp"
127+
android:background="@color/main_lighter_grey"
128+
app:layout_constraintStart_toEndOf="@id/view_before_line"
129+
app:layout_constraintEnd_toEndOf="parent"
130+
app:layout_constraintTop_toTopOf="parent" />
131+
</androidx.constraintlayout.widget.ConstraintLayout>
132+
</layout>
Lines changed: 132 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,132 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<layout
3+
xmlns:android="http://schemas.android.com/apk/res/android"
4+
xmlns:app="http://schemas.android.com/apk/res-auto"
5+
xmlns:tools="http://schemas.android.com/tools">
6+
7+
<data>
8+
<import type="com.stop.ui.util.DrawerStringUtils" />
9+
10+
<variable
11+
name="routeItem"
12+
type="com.stop.model.route.RouteItem" />
13+
</data>
14+
15+
<androidx.constraintlayout.widget.ConstraintLayout
16+
android:layout_width="match_parent"
17+
android:layout_height="100dp"
18+
android:background="@color/white">
19+
20+
<androidx.constraintlayout.widget.Guideline
21+
android:id="@+id/guideline_start"
22+
android:layout_width="wrap_content"
23+
android:layout_height="wrap_content"
24+
android:orientation="vertical"
25+
app:layout_constraintGuide_begin="30dp" />
26+
27+
<androidx.constraintlayout.widget.Guideline
28+
android:id="@+id/guideline_end"
29+
android:layout_width="wrap_content"
30+
android:layout_height="wrap_content"
31+
android:orientation="vertical"
32+
app:layout_constraintGuide_end="30dp" />
33+
34+
<TextView
35+
android:id="@+id/text_view_name"
36+
android:layout_width="wrap_content"
37+
android:layout_height="wrap_content"
38+
android:layout_marginStart="15dp"
39+
android:text="@{routeItem.name}"
40+
android:textColor="@color/main_dark_grey"
41+
android:textSize="15sp"
42+
android:gravity="center_vertical"
43+
app:layout_constraintStart_toEndOf="@id/image_view_current_line"
44+
app:layout_constraintTop_toTopOf="@id/image_view_current_line"
45+
app:layout_constraintBottom_toBottomOf="@id/image_view_current_line"
46+
tools:text="이엔씨드림타워3차" />
47+
48+
<TextView
49+
android:id="@+id/text_view_information"
50+
android:layout_width="wrap_content"
51+
android:layout_height="wrap_content"
52+
android:layout_marginTop="5dp"
53+
android:text="@{DrawerStringUtils.getRouteItemInformationString(routeItem)}"
54+
android:textSize="13sp"
55+
android:textColor="@color/main_light_grey"
56+
android:gravity="center_vertical"
57+
app:layout_constraintStart_toStartOf="@id/text_view_name"
58+
app:layout_constraintTop_toBottomOf="@id/text_view_name"
59+
tools:text="512m 16분"/>
60+
61+
<TextView
62+
android:id="@+id/text_view_last_time_1"
63+
android:layout_width="wrap_content"
64+
android:layout_height="wrap_content"
65+
android:layout_marginEnd="5dp"
66+
android:text="@{routeItem.lastTime != null ? @string/last_time : null}"
67+
android:textSize="12sp"
68+
android:textColor="@color/main_light_grey"
69+
android:gravity="center_vertical"
70+
app:layout_constraintEnd_toStartOf="@id/text_view_last_time_2"
71+
app:layout_constraintTop_toTopOf="@id/text_view_last_time_2"
72+
app:layout_constraintBottom_toBottomOf="@id/text_view_last_time_2"
73+
tools:text="현재 막차"/>
74+
75+
<TextView
76+
android:id="@+id/text_view_last_time_2"
77+
android:layout_width="wrap_content"
78+
android:layout_height="wrap_content"
79+
android:layout_marginBottom="15dp"
80+
android:text="@{routeItem.lastTime}"
81+
android:textSize="15sp"
82+
android:textColor="@color/main_dark_grey"
83+
android:gravity="center_vertical"
84+
app:layout_constraintEnd_toEndOf="@id/guideline_end"
85+
app:layout_constraintBottom_toBottomOf="parent"
86+
tools:text="23:17:50"/>
87+
88+
<View
89+
android:id="@+id/view_before_line"
90+
android:layout_width="6dp"
91+
android:layout_height="0dp"
92+
android:layout_marginBottom="-5dp"
93+
android:background="@{routeItem.beforeColor}"
94+
app:layout_constraintStart_toStartOf="@id/guideline_start"
95+
app:layout_constraintTop_toTopOf="parent"
96+
app:layout_constraintBottom_toTopOf="@id/image_view_current_line"
97+
tools:background="@color/main_yellow" />
98+
99+
<androidx.appcompat.widget.AppCompatImageView
100+
android:id="@+id/image_view_current_line"
101+
android:layout_width="wrap_content"
102+
android:layout_height="wrap_content"
103+
android:layout_marginStart="18dp"
104+
android:layout_marginTop="15dp"
105+
android:tint="@{routeItem.currentColor}"
106+
app:layout_constraintStart_toStartOf="parent"
107+
app:layout_constraintTop_toTopOf="parent"
108+
app:srcCompat="@drawable/ic_circle"
109+
tools:tint="@color/main_light_grey" />
110+
111+
<ImageView
112+
android:layout_width="15dp"
113+
android:layout_height="15dp"
114+
app:layout_constraintStart_toStartOf="@+id/image_view_current_line"
115+
app:layout_constraintEnd_toEndOf="@+id/image_view_current_line"
116+
app:layout_constraintTop_toTopOf="@+id/image_view_current_line"
117+
app:layout_constraintBottom_toBottomOf="@+id/image_view_current_line"
118+
app:imageResource="@{routeItem.mode}"
119+
tools:src="@drawable/ic_walk_white" />
120+
121+
<View
122+
android:id="@+id/view_line"
123+
android:layout_width="0dp"
124+
android:layout_height="1dp"
125+
android:layout_marginStart="15dp"
126+
android:layout_marginEnd="15dp"
127+
android:background="@color/main_lighter_grey"
128+
app:layout_constraintStart_toEndOf="@id/view_before_line"
129+
app:layout_constraintEnd_toEndOf="parent"
130+
app:layout_constraintTop_toTopOf="parent" />
131+
</androidx.constraintlayout.widget.ConstraintLayout>
132+
</layout>

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

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
xmlns:tools="http://schemas.android.com/tools">
66

77
<data>
8+
<import type="android.view.View"/>
89
<import type="com.stop.ui.util.DrawerStringUtils" />
910

1011
<variable
@@ -63,9 +64,10 @@
6364
android:layout_width="wrap_content"
6465
android:layout_height="wrap_content"
6566
android:layout_marginEnd="5dp"
66-
android:text="@{routeItem.lastTime != null ? @string/last_time : null}"
67+
android:text="@string/last_time"
6768
android:textSize="12sp"
6869
android:textColor="@color/main_light_grey"
70+
android:visibility="@{routeItem.lastTime != null ? View.VISIBLE : View.INVISIBLE}"
6971
android:gravity="center_vertical"
7072
app:layout_constraintEnd_toStartOf="@id/text_view_last_time_2"
7173
app:layout_constraintTop_toTopOf="@id/text_view_last_time_2"

0 commit comments

Comments
 (0)