Skip to content

Commit 93ddd96

Browse files
committed
feat : 경로 화면에서 로딩 모달 다이얼로그 구현
1 parent b77684c commit 93ddd96

File tree

4 files changed

+48
-2
lines changed

4 files changed

+48
-2
lines changed

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

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

3+
import android.app.AlertDialog
34
import android.os.Bundle
45
import android.view.LayoutInflater
56
import android.view.View
67
import android.view.ViewGroup
78
import android.widget.Toast
89
import androidx.fragment.app.Fragment
10+
import androidx.fragment.app.activityViewModels
911
import androidx.navigation.findNavController
1012
import androidx.navigation.fragment.navArgs
11-
import androidx.fragment.app.activityViewModels
1213
import com.stop.R
1314
import com.stop.databinding.FragmentRouteBinding
1415
import com.stop.domain.model.route.tmap.custom.Itinerary
@@ -22,11 +23,12 @@ class RouteFragment : Fragment() {
2223
get() = _binding!!
2324

2425
private val routeViewModel: RouteViewModel by activityViewModels()
25-
private val clickRouteViewModel : ClickRouteViewModel by activityViewModels()
26+
private val clickRouteViewModel: ClickRouteViewModel by activityViewModels()
2627

2728
private val args: RouteFragmentArgs by navArgs()
2829

2930
private lateinit var adapter: RouteAdapter
31+
private var progressDialog: AlertDialog? = null
3032

3133
override fun onCreateView(
3234
inflater: LayoutInflater, container: ViewGroup?,
@@ -44,6 +46,7 @@ class RouteFragment : Fragment() {
4446
setRecyclerView()
4547
setStartAndDestinationText()
4648
setObserve()
49+
initDialog()
4750
}
4851

4952
private fun setBinding() {
@@ -69,6 +72,7 @@ class RouteFragment : Fragment() {
6972
* UI가 ViewModel을 직접 호출하면 안 되지만, 테스트를 위해 막차 조회 함수를 호출했습니다.
7073
* 여기서 UI가 ViewModel을 직접 호출하지 않으면서 막차 조회 함수를 호출할 수 있을까요?
7174
*/
75+
progressDialog?.show()
7276
routeViewModel.calculateLastTransportTime(itinerary)
7377
clickRouteViewModel.clickRoute = itinerary
7478
}
@@ -95,6 +99,7 @@ class RouteFragment : Fragment() {
9599
routeViewModel.lastTimeResponse.observe(viewLifecycleOwner) { event ->
96100
event.getContentIfNotHandled()?.let { response ->
97101
routeViewModel.lastTimes = response
102+
progressDialog?.dismiss()
98103
binding.root.findNavController().navigate(R.id.action_routeFragment_to_routeDetailFragment)
99104
}
100105
}
@@ -110,6 +115,15 @@ class RouteFragment : Fragment() {
110115
routeViewModel.getRoute()
111116
}
112117

118+
private fun initDialog() {
119+
val dialogView = layoutInflater.inflate(R.layout.dialog_progress, null)
120+
progressDialog = AlertDialog.Builder(requireContext())
121+
.setView(dialogView)
122+
.setCancelable(false)
123+
.create()
124+
progressDialog?.window?.setBackgroundDrawableResource(R.color.transparent)
125+
}
126+
113127
override fun onDestroyView() {
114128
_binding = null
115129

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
3+
xmlns:app="http://schemas.android.com/apk/res-auto"
4+
xmlns:tools="http://schemas.android.com/tools"
5+
android:layout_width="wrap_content"
6+
android:layout_height="wrap_content"
7+
tools:theme="@style/Theme.Material3.Light.NoActionBar">
8+
9+
<com.google.android.material.progressindicator.CircularProgressIndicator
10+
android:id="@+id/circular_progress"
11+
android:layout_width="wrap_content"
12+
android:layout_height="wrap_content"
13+
android:indeterminate="true"
14+
app:layout_constraintBottom_toTopOf="@id/text_view_loading"
15+
app:layout_constraintEnd_toEndOf="parent"
16+
app:layout_constraintStart_toStartOf="parent"
17+
app:layout_constraintTop_toTopOf="parent" />
18+
19+
<TextView
20+
android:id="@+id/text_view_loading"
21+
android:layout_width="wrap_content"
22+
android:layout_height="wrap_content"
23+
android:text="@string/loading_text"
24+
android:textColor="@color/black"
25+
android:textStyle="bold"
26+
app:layout_constraintEnd_toEndOf="@id/circular_progress"
27+
app:layout_constraintStart_toStartOf="@id/circular_progress"
28+
app:layout_constraintTop_toBottomOf="@id/circular_progress" />
29+
30+
</androidx.constraintlayout.widget.ConstraintLayout>

presentation/src/main/res/values/colors.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,4 +13,5 @@
1313
<color name="gray_d9">#D9D9D9</color>
1414
<color name="main_dark_grey">#404550</color>
1515
<color name="main_light_grey">#808590</color>
16+
<color name="transparent">#00FFFFFF</color>
1617
</resources>

presentation/src/main/res/values/strings.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,4 +62,5 @@
6262
<string name="image_view_swap_origin_with_destination_content_description">출발지와 도착지를 바꿉니다.</string>
6363
<string name="image_view_exit_content_description">경로 검색 화면을 종료합니다.</string>
6464
<string name="image_view_icon_content_description">승차지의 종류를 나타내는 아이콘입니다.</string>
65+
<string name="loading_text">Loading..</string>
6566
</resources>

0 commit comments

Comments
 (0)