Skip to content

Commit bf19862

Browse files
committed
fix : 시간 오버시 미션 종료 버그 수정
- broadcast Receiver를 destroy 해주니 해결됨 - intent도 removeExtra해줘서 미션이 끝나면 더이상 intent 하지 않도록 구현 - 처음에 null을 반환해서 문제였음 -> null이 아닐 때 라는 if문 추가
1 parent 6301112 commit bf19862

File tree

2 files changed

+32
-24
lines changed

2 files changed

+32
-24
lines changed

presentation/src/main/java/com/stop/ui/mission/MissionFragment.kt

Lines changed: 19 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -54,15 +54,18 @@ class MissionFragment : Fragment(), MissionHandler {
5454

5555
private lateinit var backPressedCallback: OnBackPressedCallback
5656

57+
private lateinit var userInfoReceiver: BroadcastReceiver
58+
private lateinit var timeReceiver: BroadcastReceiver
59+
5760
var personCurrentLocation = Location(37.553836, 126.969652)
5861
var firstTime = 0
5962

6063
override fun onCreate(savedInstanceState: Bundle?) {
6164
super.onCreate(savedInstanceState)
6265

6366
setMissionService()
64-
setBroadcastReceiver()
65-
//setTimeOverBroadcastReceiver()
67+
setUserInfoBroadcastReceiver()
68+
setTimeOverBroadcastReceiver()
6669
missionViewModel.missionStatus.value = MissionStatus.ONGOING
6770
}
6871

@@ -103,9 +106,12 @@ class MissionFragment : Fragment(), MissionHandler {
103106
}
104107

105108
override fun onDestroy() {
106-
super.onDestroy()
107-
108109
tMap.onDestroy()
110+
111+
requireActivity().unregisterReceiver(userInfoReceiver)
112+
requireActivity().unregisterReceiver(timeReceiver)
113+
114+
super.onDestroy()
109115
}
110116

111117
private fun setMissionService() {
@@ -117,28 +123,28 @@ class MissionFragment : Fragment(), MissionHandler {
117123
}
118124
}
119125

120-
private fun setBroadcastReceiver() {
126+
private fun setUserInfoBroadcastReceiver() {
121127
val intentFilter = IntentFilter().apply {
122128
addAction(MissionService.MISSION_USER_INFO)
123129
}
124130

125-
val receiver = object : BroadcastReceiver() {
131+
userInfoReceiver = object : BroadcastReceiver() {
126132
override fun onReceive(context: Context?, intent: Intent?) {
127133
missionViewModel.lastTime.value = intent?.getStringExtra(MISSION_LAST_TIME)
128134
missionViewModel.userLocations.value =
129135
intent?.getParcelableArrayListExtra<Location>(MISSION_LOCATIONS) as ArrayList<Location>
130136
}
131137
}
132138

133-
requireActivity().registerReceiver(receiver, intentFilter)
139+
requireActivity().registerReceiver(userInfoReceiver, intentFilter)
134140
}
135141

136142
private fun setTimeOverBroadcastReceiver() {
137143
val intentFilter = IntentFilter().apply {
138144
addAction(MISSION_TIME_OVER)
139145
}
140146

141-
val receiver = object : BroadcastReceiver() {
147+
timeReceiver = object : BroadcastReceiver() {
142148
override fun onReceive(context: Context?, intent: Intent?) {
143149
if (intent?.getBooleanExtra(MISSION_TIME_OVER, false) == true) {
144150
Snackbar.make(
@@ -151,7 +157,7 @@ class MissionFragment : Fragment(), MissionHandler {
151157

152158
}
153159
}
154-
requireActivity().registerReceiver(receiver, intentFilter)
160+
requireActivity().registerReceiver(timeReceiver, intentFilter)
155161
}
156162

157163
private fun setTimer() {
@@ -161,6 +167,8 @@ class MissionFragment : Fragment(), MissionHandler {
161167
} else {
162168
requireActivity().startService(missionServiceIntent)
163169
}
170+
171+
missionServiceIntent.removeExtra(MISSION_LAST_TIME)
164172
}
165173

166174
private fun setDataBinding() {
@@ -338,7 +346,7 @@ class MissionFragment : Fragment(), MissionHandler {
338346
}
339347

340348
private fun setSuccessAnimation() {
341-
with (binding.lottieSuccess) {
349+
with(binding.lottieSuccess) {
342350
playAnimation()
343351
addAnimatorListener(object : Animator.AnimatorListener {
344352
override fun onAnimationStart(animation: Animator) {
@@ -358,7 +366,7 @@ class MissionFragment : Fragment(), MissionHandler {
358366
}
359367

360368
private fun setFailAnimation() {
361-
with (binding.lottieFail) {
369+
with(binding.lottieFail) {
362370
visibility = View.VISIBLE
363371
playAnimation()
364372
addAnimatorListener(object : Animator.AnimatorListener {

presentation/src/main/java/com/stop/ui/mission/MissionService.kt

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -140,19 +140,19 @@ class MissionService : LifecycleService() {
140140

141141
private fun getTimer(intent: Intent?) {
142142
val lastTimeString = intent?.getStringExtra(MISSION_LAST_TIME)
143-
val lastTimeMillis = makeFullTime(lastTimeString ?: "").timeInMillis
144-
val nowTimeMillis = System.currentTimeMillis()
145-
var diffTimeMillis = if (lastTimeMillis > nowTimeMillis) lastTimeMillis - nowTimeMillis else 0L
146-
147-
timer.cancel()
148-
timer = lifecycleScope.launch(Dispatchers.IO) {
149-
while (diffTimeMillis > 0L) {
150-
lastTime = convertTimeMillisToString(diffTimeMillis)
151-
sendUserInfo()
152-
diffTimeMillis -= 1_000L
153-
delay(1_000L)
154-
}
155-
if (diffTimeMillis == 0L) {
143+
if (lastTimeString != null) {
144+
val lastTimeMillis = makeFullTime(lastTimeString).timeInMillis
145+
val nowTimeMillis = System.currentTimeMillis()
146+
var diffTimeMillis = if (lastTimeMillis > nowTimeMillis) lastTimeMillis - nowTimeMillis else 0L
147+
148+
timer.cancel()
149+
timer = lifecycleScope.launch(Dispatchers.IO) {
150+
while (diffTimeMillis > 0L) {
151+
lastTime = convertTimeMillisToString(diffTimeMillis)
152+
sendUserInfo()
153+
diffTimeMillis -= 1_000L
154+
delay(1_000L)
155+
}
156156
sendMissionOver()
157157
}
158158
}

0 commit comments

Comments
 (0)