Skip to content

Commit 2eefdad

Browse files
committed
[FIX] 미션 없음 선택 시 미션 화면 이동 방지
1 parent dae6d95 commit 2eefdad

File tree

5 files changed

+36
-21
lines changed

5 files changed

+36
-21
lines changed

core/alarm/src/main/java/com/yapp/alarm/receivers/AlarmInteractionActivityReceiver.kt

Lines changed: 19 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,10 @@ package com.yapp.alarm.receivers
33
import android.content.BroadcastReceiver
44
import android.content.Context
55
import android.content.Intent
6-
import android.util.Log
76
import androidx.activity.ComponentActivity
87
import androidx.core.net.toUri
98
import com.yapp.alarm.AlarmConstants
9+
import com.yapp.domain.model.MissionType
1010
import com.yapp.domain.repository.FortuneRepository
1111
import dagger.hilt.android.AndroidEntryPoint
1212
import kotlinx.coroutines.CoroutineScope
@@ -31,27 +31,33 @@ class AlarmInteractionActivityReceiver(private val activity: ComponentActivity)
3131

3232
if (!isSnoozed) {
3333
val notificationId = intent.getLongExtra(AlarmConstants.EXTRA_NOTIFICATION_ID, -1L)
34-
val missionType = intent.getIntExtra(AlarmConstants.EXTRA_MISSION_TYPE, -1)
34+
val missionTypeRaw = intent.getIntExtra(AlarmConstants.EXTRA_MISSION_TYPE, -1)
3535
val missionCount = intent.getIntExtra(AlarmConstants.EXTRA_MISSION_COUNT, -1)
3636

37-
if (notificationId == -1L || missionType == -1 || missionCount == -1) {
38-
Log.e("AlarmInteraction", "필수 값 누락")
39-
return
40-
}
37+
val missionType = MissionType.fromInt(missionTypeRaw)
38+
39+
val hasValidMissionData = (
40+
notificationId != -1L &&
41+
missionType != MissionType.NONE &&
42+
missionCount != -1
43+
)
44+
45+
if (!hasValidMissionData) return
4146

4247
CoroutineScope(Dispatchers.IO).launch {
4348
val fortuneDate = fortuneRepository.fortuneDateFlow.firstOrNull()
4449
val todayDate = LocalDate.now().format(DateTimeFormatter.ISO_DATE)
4550

46-
if (fortuneDate != todayDate) {
51+
val shouldLaunchMission = fortuneDate != todayDate
52+
53+
if (shouldLaunchMission) {
4754
context?.let {
4855
val uriString =
49-
"orbitapp://mission?notificationId=$notificationId&missionType=$missionType&missionCount=$missionCount"
50-
val missionIntent =
51-
Intent(Intent.ACTION_VIEW, uriString.toUri()).apply {
52-
addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
53-
setPackage(context.packageName)
54-
}
56+
"orbitapp://mission?notificationId=$notificationId&missionType=${missionType.value}&missionCount=$missionCount"
57+
val missionIntent = Intent(Intent.ACTION_VIEW, uriString.toUri()).apply {
58+
addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
59+
setPackage(it.packageName)
60+
}
5561
it.startActivity(missionIntent)
5662
}
5763
}

core/alarm/src/main/java/com/yapp/alarm/services/AlarmService.kt

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ import com.yapp.alarm.pendingIntent.interaction.createAlarmSnoozePendingIntent
2525
import com.yapp.alarm.pendingIntent.interaction.createNavigateToMissionPendingIntent
2626
import com.yapp.domain.model.Alarm
2727
import com.yapp.domain.model.AlarmDay
28+
import com.yapp.domain.model.MissionType
2829
import com.yapp.domain.repository.FortuneRepository
2930
import com.yapp.domain.usecase.AlarmUseCase
3031
import com.yapp.media.sound.SoundPlayer
@@ -113,7 +114,7 @@ class AlarmService : Service() {
113114
false -> {
114115
startForeground(
115116
notificationId.toInt(),
116-
createNotification(alarm, shouldNavigateToMission()),
117+
createNotification(alarm, shouldNavigateToMission(alarm.missionType)),
117118
)
118119
if (alarm.isVibrationEnabled) startVibration()
119120
if (alarm.isSoundEnabled) startSound(alarm.soundUri, alarm.soundVolume)
@@ -125,7 +126,11 @@ class AlarmService : Service() {
125126
}
126127
}
127128

128-
private suspend fun shouldNavigateToMission(): Boolean {
129+
private suspend fun shouldNavigateToMission(
130+
missionType: MissionType,
131+
): Boolean {
132+
if (missionType == MissionType.NONE) return false
133+
129134
val fortuneDate = fortuneRepository.fortuneDateFlow.firstOrNull()
130135
val todayDate = LocalDate.now().format(DateTimeFormatter.ISO_DATE)
131136
return fortuneDate != todayDate

feature/alarm-interaction/src/main/java/com/yapp/alarm/interaction/action/AlarmActionContract.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ class AlarmActionContract {
1414
val snoozeEnabled: Boolean = true,
1515
val snoozeInterval: Int = 5,
1616
val snoozeCount: Int = 5,
17-
val isFirstMission: Boolean? = null,
17+
val shouldShowMissionStart: Boolean? = null,
1818
) : UiState
1919

2020
sealed class Action {

feature/alarm-interaction/src/main/java/com/yapp/alarm/interaction/action/AlarmActionScreen.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ internal fun AlarmActionScreen(
8484
snoozeEnabled = state.snoozeEnabled,
8585
snoozeInterval = state.snoozeInterval,
8686
snoozeCount = state.snoozeCount,
87-
isFirstMission = state.isFirstMission,
87+
isFirstMission = state.shouldShowMissionStart,
8888
onSnoozeClick = { processAction(AlarmActionContract.Action.Snooze) },
8989
onDismissClick = {
9090
processAction(AlarmActionContract.Action.Dismiss)

feature/alarm-interaction/src/main/java/com/yapp/alarm/interaction/action/AlarmActionViewModel.kt

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import androidx.lifecycle.ViewModel
66
import com.yapp.alarm.pendingIntent.interaction.createAlarmDismissIntent
77
import com.yapp.alarm.pendingIntent.interaction.createAlarmSnoozeIntent
88
import com.yapp.domain.model.Alarm
9+
import com.yapp.domain.model.MissionType
910
import com.yapp.domain.repository.FortuneRepository
1011
import dagger.hilt.android.lifecycle.HiltViewModel
1112
import kotlinx.coroutines.delay
@@ -33,7 +34,7 @@ class AlarmActionViewModel @Inject constructor(
3334
override val container: Container<AlarmActionContract.State, AlarmActionContract.SideEffect> = container(
3435
initialState = AlarmActionContract.State(),
3536
) {
36-
fetchIsFirstMission()
37+
fetchShouldShowMissionStart()
3738
initializeAlarmState()
3839
startClock()
3940
}
@@ -58,13 +59,16 @@ class AlarmActionViewModel @Inject constructor(
5859
}
5960
}
6061

61-
private fun fetchIsFirstMission() = intent {
62+
private fun fetchShouldShowMissionStart() = intent {
63+
val missionType = alarm?.missionType
6264
val fortuneDate = fortuneRepository.fortuneDateFlow.firstOrNull()
6365
val todayDate = LocalDate.now().format(DateTimeFormatter.ISO_DATE)
64-
val isFirstMission = fortuneDate != todayDate
66+
val shouldShowMissionStart = missionType != null &&
67+
missionType != MissionType.NONE &&
68+
fortuneDate != todayDate
6569

6670
reduce {
67-
state.copy(isFirstMission = isFirstMission)
71+
state.copy(shouldShowMissionStart = shouldShowMissionStart)
6872
}
6973
}
7074

0 commit comments

Comments
 (0)