Skip to content

Commit b745309

Browse files
authored
Merge pull request #80 from boostcampwm-2022/75-feature-alarm-modify
[PR]μ•ŒλžŒ μ„€μ •, μ‹œμž‘ UI μˆ˜μ •
2 parents 542dc0f + 347aeb0 commit b745309

15 files changed

+268
-171
lines changed

β€Žpresentation/src/main/AndroidManifest.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@
4848
android:excludeFromRecents="true"
4949
android:exported="true"
5050
android:launchMode="singleTask"
51+
android:screenOrientation="portrait"
5152
android:showOnLockScreen="true"
5253
android:theme="@style/Theme.Splash">
5354

β€Žpresentation/src/main/java/com/stop/TimeConverter.kt

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,4 +23,12 @@ fun makeFullTime(time: String): Calendar {
2323
calendar.time = dateTime
2424

2525
return calendar
26+
}
27+
28+
fun convertTimeMillisToString(time: Long): String {
29+
val hours = (time / 1000) / 60 / 60 % 24
30+
val minutes = (time / 1000) / 60 % 60
31+
val seconds = (time / 1000) % 60
32+
33+
return String.format("%02d:%02d:%02d", hours, minutes, seconds)
2634
}

β€Žpresentation/src/main/java/com/stop/ui/alarmsetting/AlarmSettingFragment.kt

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -40,8 +40,6 @@ class AlarmSettingFragment : Fragment() {
4040

4141
initView()
4242
setToggleListener()
43-
44-
// TODO λ·°λͺ¨λΈ κ°€μ Έμ™€μ„œ 경둜 λ§‰μ°¨μ‹œκ°„ λ“± μ—°κ²° μž‘μ—…ν•΄μ•Όν•¨
4543
}
4644

4745
private fun initBinding() {
@@ -57,8 +55,8 @@ class AlarmSettingFragment : Fragment() {
5755
binding.apply {
5856
lifecycleOwner = viewLifecycleOwner
5957
alarmViewModel = alarmSettingViewModel
60-
startPosition = itinerary.routes.first().start.name
61-
endPosition = itinerary.routes.last().end.name
58+
startPosition = routeResultViewModel.origin.value?.name
59+
endPosition = routeResultViewModel.destination.value?.name
6260
lastTime = transportLastTime.timeToBoard
6361
walkTime = (itinerary.routes.first().sectionTime.div(60)).roundToInt()
6462
fragment = this@AlarmSettingFragment
@@ -98,8 +96,8 @@ class AlarmSettingFragment : Fragment() {
9896
}.first()
9997

10098
val alarmUseCaseItem = AlarmUseCaseItem(
101-
startPosition = itinerary.routes.first().start.name,
102-
endPosition = itinerary.routes.last().end.name,
99+
startPosition = routeResultViewModel.origin.value?.name ?: "",
100+
endPosition = routeResultViewModel.destination.value?.name ?: "",
103101
routes = itinerary.routes,
104102
lastTime = transportLastTime.timeToBoard,
105103
walkTime = (itinerary.routes.first().sectionTime.div(60)).roundToInt(),
@@ -110,7 +108,7 @@ class AlarmSettingFragment : Fragment() {
110108

111109
alarmSettingViewModel.saveAlarm(alarmUseCaseItem)
112110
alarmSettingViewModel.callAlarm(transportLastTime.timeToBoard)
113-
alarmSettingViewModel.makeAlarmWorker(transportLastTime.timeToBoard)
111+
//alarmSettingViewModel.makeAlarmWorker(transportLastTime.timeToBoard)
114112

115113
val navController = findNavController()
116114
navController.setGraph(R.navigation.nav_graph)

β€Žpresentation/src/main/java/com/stop/ui/alarmsetting/AlarmSettingViewModel.kt

Lines changed: 28 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package com.stop.ui.alarmsetting
22

3-
import android.util.Log
3+
import androidx.lifecycle.LiveData
44
import androidx.lifecycle.MutableLiveData
55
import androidx.lifecycle.ViewModel
66
import androidx.lifecycle.viewModelScope
@@ -9,10 +9,12 @@ import androidx.work.WorkManager
99
import androidx.work.workDataOf
1010
import com.stop.AlarmFunctions
1111
import com.stop.LastTimeCheckWorker
12+
import com.stop.convertTimeMillisToString
1213
import com.stop.domain.model.alarm.AlarmUseCaseItem
1314
import com.stop.domain.usecase.alarm.DeleteAlarmUseCase
1415
import com.stop.domain.usecase.alarm.GetAlarmUseCase
1516
import com.stop.domain.usecase.alarm.SaveAlarmUseCase
17+
import com.stop.makeFullTime
1618
import com.stop.ui.alarmsetting.AlarmSettingFragment.Companion.ALARM_CODE
1719
import com.stop.ui.alarmsetting.AlarmSettingFragment.Companion.ALARM_TIME
1820
import com.stop.ui.alarmsetting.AlarmSettingFragment.Companion.LAST_TIME
@@ -45,6 +47,9 @@ class AlarmSettingViewModel @Inject constructor(
4547

4648
private lateinit var workerId : UUID
4749

50+
private val _lastTimeCountDown = MutableLiveData("")
51+
val lastTimeCountDown: LiveData<String> = _lastTimeCountDown
52+
4853
fun saveAlarm(alarmUseCaseItem: AlarmUseCaseItem) {
4954
viewModelScope.launch(Dispatchers.IO) {
5055
saveAlarmUseCase.saveAlarm(alarmUseCaseItem.copy(alarmTime = alarmTime.value ?: 0, alarmMethod = alarmMethod))
@@ -55,7 +60,7 @@ class AlarmSettingViewModel @Inject constructor(
5560
viewModelScope.launch(Dispatchers.IO) {
5661
getAlarmUseCase.getAlarm().collectLatest {
5762
_alarmItem.value = it
58-
Log.d("MissonWorker","alarm viewModelμ—μ„œ κ°€μ Έμ˜€λ‚˜? ${_alarmItem.value} ${_alarmItem.value?.routes}")
63+
5964
_isAlarmItemNotNull.value = it != null
6065
}
6166
}
@@ -65,13 +70,14 @@ class AlarmSettingViewModel @Inject constructor(
6570
viewModelScope.launch(Dispatchers.IO) {
6671
deleteAlarmUseCase.deleteAlarm()
6772
}
73+
cancelAlarm()
6874
}
6975

7076
fun callAlarm(time: String) {
7177
alarmFunctions.callAlarm(time, alarmTime.value ?: 0, ALARM_CODE)
7278
}
7379

74-
fun cancelAlarm() {
80+
private fun cancelAlarm() {
7581
alarmFunctions.cancelAlarm(ALARM_CODE)
7682
}
7783

@@ -89,8 +95,26 @@ class AlarmSettingViewModel @Inject constructor(
8995
workManager.enqueue(workRequest)
9096
}
9197

92-
fun removeAlarmWorker(){
98+
fun removeAlarmWorker() {
9399
workManager.cancelWorkById(workerId)
94100
}
95101

102+
fun startCountDownTimer() {
103+
val lastTimeMillis = makeFullTime(_alarmItem.value?.lastTime ?: "").timeInMillis
104+
val nowTimeMillis = System.currentTimeMillis()
105+
var diffTimeMillis = if (lastTimeMillis > nowTimeMillis) lastTimeMillis - nowTimeMillis else 0L
106+
107+
viewModelScope.launch(Dispatchers.IO) {
108+
var oldTimeMillis = System.currentTimeMillis()
109+
while (diffTimeMillis > 0L) {
110+
val delayMillis = System.currentTimeMillis() - oldTimeMillis
111+
if (delayMillis == 1000L) {
112+
diffTimeMillis -= delayMillis
113+
_lastTimeCountDown.postValue(convertTimeMillisToString(diffTimeMillis))
114+
oldTimeMillis = System.currentTimeMillis()
115+
}
116+
}
117+
}
118+
}
119+
96120
}

β€Žpresentation/src/main/java/com/stop/ui/alarmstart/AlarmStartFragment.kt

Lines changed: 10 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -35,36 +35,25 @@ class AlarmStartFragment : Fragment() {
3535
return binding.root
3636
}
3737

38-
private fun initBinding(){
38+
private fun initBinding() {
3939
binding.apply {
4040
alarmSettingViewModel.getAlarm()
41+
alarmSettingViewModel.startCountDownTimer()
4142
lifecycleOwner = viewLifecycleOwner
4243
viewModel = alarmSettingViewModel
44+
fragment = this@AlarmStartFragment
4345
}
4446
}
4547

46-
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
47-
super.onViewCreated(view, savedInstanceState)
48-
49-
listenButton()
48+
fun clickAlarmTurnOff() {
49+
turnOffSoundService()
50+
alarmSettingViewModel.deleteAlarm()
51+
requireActivity().finish()
5052
}
5153

52-
private fun listenButton() {
53-
with(binding) {
54-
buttonAlarmTurnOff.setOnClickListener {
55-
turnOffSoundService()
56-
alarmSettingViewModel.deleteAlarm()
57-
alarmSettingViewModel.removeAlarmWorker()
58-
requireActivity().finish()
59-
}
60-
61-
textViewMissionStart.setOnClickListener {
62-
turnOffSoundService()
63-
root.findNavController().navigate(R.id.action_alarmStartFragment_to_missionFragment)
64-
alarmSettingViewModel.deleteAlarm()
65-
alarmSettingViewModel.removeAlarmWorker()
66-
}
67-
}
54+
fun clickMissionStart() {
55+
turnOffSoundService()
56+
binding.root.findNavController().navigate(R.id.action_alarmStartFragment_to_missionFragment)
6857
}
6958

7059
private fun turnOffSoundService() {

β€Žpresentation/src/main/java/com/stop/ui/map/MapFragment.kt

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ package com.stop.ui.map
33
import android.Manifest.permission
44
import android.content.Intent
55
import android.os.Bundle
6-
import android.util.Log
76
import android.view.LayoutInflater
87
import android.view.View
98
import android.view.ViewGroup
@@ -133,7 +132,7 @@ class MapFragment : Fragment(), MapHandler {
133132

134133
alarmViewModel.getAlarm()
135134

136-
alarmViewModel.isAlarmItemNotNull.asLiveData().observe(viewLifecycleOwner){
135+
alarmViewModel.isAlarmItemNotNull.asLiveData().observe(viewLifecycleOwner) {
137136
behavior.isDraggable = it
138137
}
139138

@@ -223,7 +222,7 @@ class MapFragment : Fragment(), MapHandler {
223222
}
224223
}
225224

226-
private fun listenButtonClick(){
225+
private fun listenButtonClick() {
227226
binding.homeBottomSheet.layoutStateExpanded.buttonAlarmTurnOff.setOnClickListener {
228227
alarmViewModel.deleteAlarm()
229228
turnOffSoundService()
@@ -252,8 +251,7 @@ class MapFragment : Fragment(), MapHandler {
252251
}
253252

254253
fun setMissionStart() {
255-
Log.d("MissionWorker","mission λ²„νŠΌ 클릭")
256-
findNavController().navigate(R.id.action_mapFragment_to_missionFragment)
254+
findNavController().navigate(R.id.action_mapFragment_to_missionFragment)
257255
}
258256

259257
companion object {

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

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import android.view.View
88
import android.view.ViewGroup
99
import android.widget.Toast
1010
import androidx.activity.OnBackPressedCallback
11+
import androidx.appcompat.app.AlertDialog
1112
import androidx.navigation.findNavController
1213
import androidx.navigation.fragment.navArgs
1314
import androidx.fragment.app.activityViewModels
@@ -32,6 +33,7 @@ class RouteFragment : Fragment() {
3233

3334
private lateinit var adapter: RouteAdapter
3435
private lateinit var backPressedCallback: OnBackPressedCallback
36+
private var progressDialog: AlertDialog? = null
3537

3638
override fun onCreateView(
3739
inflater: LayoutInflater, container: ViewGroup?,
@@ -62,6 +64,7 @@ class RouteFragment : Fragment() {
6264
setRecyclerView()
6365
setStartAndDestinationText()
6466
setObserve()
67+
initDialog()
6568
}
6669

6770
private fun setBinding() {
@@ -89,6 +92,7 @@ class RouteFragment : Fragment() {
8992
* UIκ°€ ViewModel을 직접 ν˜ΈμΆœν•˜λ©΄ μ•ˆ λ˜μ§€λ§Œ, ν…ŒμŠ€νŠΈλ₯Ό μœ„ν•΄ 막차 쑰회 ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν–ˆμŠ΅λ‹ˆλ‹€.
9093
* μ—¬κΈ°μ„œ UIκ°€ ViewModel을 직접 ν˜ΈμΆœν•˜μ§€ μ•ŠμœΌλ©΄μ„œ 막차 쑰회 ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•  수 μžˆμ„κΉŒμš”?
9194
*/
95+
progressDialog?.show()
9296
routeViewModel.calculateLastTransportTime(itinerary)
9397
routeResultViewModel.setItineraries(itinerary)
9498
}
@@ -117,6 +121,8 @@ class RouteFragment : Fragment() {
117121
routeResultViewModel.setLastTimes(response)
118122
routeResultViewModel.setOrigin(routeViewModel.origin.value)
119123
routeResultViewModel.setDestination(routeViewModel.destination.value)
124+
progressDialog?.dismiss()
125+
120126
binding.root.findNavController()
121127
.navigate(R.id.action_routeFragment_to_routeDetailFragment)
122128
}
@@ -133,6 +139,15 @@ class RouteFragment : Fragment() {
133139
routeViewModel.getRoute()
134140
}
135141

142+
private fun initDialog() {
143+
val dialogView = layoutInflater.inflate(R.layout.dialog_progress, null)
144+
progressDialog = AlertDialog.Builder(requireContext())
145+
.setView(dialogView)
146+
.setCancelable(false)
147+
.create()
148+
progressDialog?.window?.setBackgroundDrawableResource(R.color.transparent)
149+
}
150+
136151
override fun onDestroyView() {
137152
_binding = null
138153

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<shape xmlns:android="http://schemas.android.com/apk/res/android"
3+
android:shape="rectangle">
4+
5+
<corners android:radius="16dp" />
6+
<solid android:color="@color/main_dark_grey" />
7+
8+
</shape>
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
<vector android:autoMirrored="true" android:height="32dp"
2-
android:tint="#000000" android:viewportHeight="24"
2+
android:tint="@color/main_dark_grey" android:viewportHeight="24"
33
android:viewportWidth="24" android:width="32dp" xmlns:android="http://schemas.android.com/apk/res/android">
44
<path android:fillColor="@android:color/white" android:pathData="M13.5,5.5c1.1,0 2,-0.9 2,-2s-0.9,-2 -2,-2 -2,0.9 -2,2 0.9,2 2,2zM9.8,8.9L7,23h2.1l1.8,-8 2.1,2v6h2v-7.5l-2.1,-2 0.6,-3C14.8,12 16.8,13 19,13v-2c-1.9,0 -3.5,-1 -4.3,-2.4l-1,-1.6c-0.4,-0.6 -1,-1 -1.7,-1 -0.3,0 -0.5,0.1 -0.8,0.1L6,8.3V13h2V9.6l1.8,-0.7"/>
55
</vector>
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
<vector android:autoMirrored="true" android:height="48dp"
2+
android:tint="#404550" android:viewportHeight="24"
3+
android:viewportWidth="24" android:width="48dp" xmlns:android="http://schemas.android.com/apk/res/android">
4+
<path android:fillColor="@android:color/white" android:pathData="M18.5,12c0,-1.77 -1.02,-3.29 -2.5,-4.03v8.05c1.48,-0.73 2.5,-2.25 2.5,-4.02zM5,9v6h4l5,5V4L9,9H5z"/>
5+
</vector>

0 commit comments

Comments
Β (0)