Skip to content

Commit 360666f

Browse files
committed
[REFACTOR/#278] 운세 생성 상태 관리를 FortuneCreationTracker로 이관
1 parent 8a85fca commit 360666f

File tree

3 files changed

+22
-32
lines changed

3 files changed

+22
-32
lines changed

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

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,10 @@ import android.content.Intent
66
import androidx.activity.ComponentActivity
77
import androidx.core.net.toUri
88
import com.yapp.alarm.AlarmConstants
9-
import com.yapp.domain.model.FortuneCreateStatus
9+
import com.yapp.domain.model.FortuneCreationState
1010
import com.yapp.domain.model.MissionType
1111
import com.yapp.domain.repository.FortuneRepository
12+
import com.yapp.domain.tracker.FortuneCreationTracker
1213
import dagger.hilt.android.AndroidEntryPoint
1314
import kotlinx.coroutines.CoroutineScope
1415
import kotlinx.coroutines.Dispatchers
@@ -23,6 +24,9 @@ class AlarmInteractionActivityReceiver(private val activity: ComponentActivity)
2324
@Inject
2425
lateinit var fortuneRepository: FortuneRepository
2526

27+
@Inject
28+
lateinit var fortuneCreationTracker: FortuneCreationTracker
29+
2630
override fun onReceive(context: Context?, intent: Intent?) {
2731
val isSnoozed = intent?.getBooleanExtra(AlarmConstants.EXTRA_IS_SNOOZED, false) ?: false
2832

@@ -46,16 +50,15 @@ class AlarmInteractionActivityReceiver(private val activity: ComponentActivity)
4650
CoroutineScope(Dispatchers.Main).launch {
4751
try {
4852
if (!hasValidMissionData) {
49-
val (fortuneCreateStatus, hasUnseenFortune) = withContext(Dispatchers.IO) {
50-
val status = fortuneRepository.fortuneCreateStatusFlow.first()
53+
val (fortuneCreationState, hasUnseenFortune) = withContext(Dispatchers.IO) {
54+
val todayFortune = fortuneCreationTracker.state.first()
5155
val unseen = fortuneRepository.hasUnseenFortuneFlow.first()
52-
status to unseen
56+
57+
todayFortune to unseen
5358
}
5459

55-
when (fortuneCreateStatus) {
56-
is FortuneCreateStatus.Creating,
57-
is FortuneCreateStatus.Failure,
58-
-> {
60+
when (fortuneCreationState) {
61+
is FortuneCreationState.Start -> {
5962
context?.let { ctx ->
6063
val uri = "orbitapp://fortune".toUri()
6164
val fortuneIntent = Intent(Intent.ACTION_VIEW, uri).apply {
@@ -65,8 +68,7 @@ class AlarmInteractionActivityReceiver(private val activity: ComponentActivity)
6568
ctx.startActivity(fortuneIntent)
6669
}
6770
}
68-
69-
is FortuneCreateStatus.Success -> {
71+
is FortuneCreationState.Success -> {
7072
if (hasUnseenFortune) {
7173
context?.let { ctx ->
7274
val uri = "orbitapp://fortune".toUri()
@@ -79,8 +81,7 @@ class AlarmInteractionActivityReceiver(private val activity: ComponentActivity)
7981
}
8082
}
8183
}
82-
83-
FortuneCreateStatus.Idle -> { }
84+
is FortuneCreationState.Failure -> { }
8485
}
8586
} else {
8687
context?.let { ctx ->

feature/fortune/src/main/java/com/yapp/fortune/FortuneViewModel.kt

Lines changed: 7 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,9 @@ import android.app.Application
44
import android.util.Log
55
import androidx.annotation.DrawableRes
66
import androidx.lifecycle.ViewModel
7-
import com.yapp.domain.model.FortuneCreateStatus
7+
import com.yapp.domain.model.FortuneCreationState
88
import com.yapp.domain.repository.FortuneRepository
9+
import com.yapp.domain.tracker.FortuneCreationTracker
910
import com.yapp.fortune.page.toFortunePages
1011
import com.yapp.media.decoder.ImageUtils
1112
import com.yapp.media.storage.ImageSaver
@@ -25,6 +26,7 @@ class FortuneViewModel @Inject constructor(
2526
private val application: Application,
2627
private val fortuneRepository: FortuneRepository,
2728
private val imageSaver: ImageSaver,
29+
private val fortuneCreationTracker: FortuneCreationTracker,
2830
) : ViewModel(), ContainerHost<FortuneContract.State, FortuneContract.SideEffect> {
2931

3032
override val container: Container<FortuneContract.State, FortuneContract.SideEffect> = container(
@@ -51,33 +53,27 @@ class FortuneViewModel @Inject constructor(
5153
}
5254

5355
private fun observeFortune() = intent {
54-
fortuneRepository.fortuneCreateStatusFlow.collect { status ->
56+
fortuneCreationTracker.state.collect { status ->
5557
when (status) {
56-
is FortuneCreateStatus.Creating -> {
58+
is FortuneCreationState.Start -> {
5759
reduce { state.copy(isLoading = true) }
5860
}
5961

60-
is FortuneCreateStatus.Success -> {
62+
is FortuneCreationState.Success -> {
6163
fetchAndUpdateFortune(
6264
fortuneId = status.fortuneId,
6365
isFirstAlarmDismissedToday = fortuneRepository.isFirstAlarmDismissedTodayFlow.first(),
6466
)
6567
}
6668

67-
is FortuneCreateStatus.Failure -> {
69+
FortuneCreationState.Failure -> {
6870
reduce {
6971
state.copy(
7072
isLoading = false,
7173
isCreateFailureDialogVisible = true,
7274
)
7375
}
7476
}
75-
76-
is FortuneCreateStatus.Idle -> {
77-
if (!state.isCreateFailureDialogVisible) {
78-
postSideEffect(FortuneContract.SideEffect.NavigateToHome)
79-
}
80-
}
8177
}
8278
}
8379
}

feature/mission/src/main/java/com/yapp/mission/MissionViewModel.kt

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ import androidx.lifecycle.ViewModel
66
import com.yapp.alarm.pendingIntent.interaction.createAlarmDismissIntent
77
import com.yapp.analytics.AnalyticsEvent
88
import com.yapp.analytics.AnalyticsHelper
9-
import com.yapp.domain.model.FortuneCreateStatus
109
import com.yapp.domain.model.MissionMode
1110
import com.yapp.domain.model.MissionType
1211
import com.yapp.domain.repository.FortuneRepository
@@ -139,16 +138,10 @@ class MissionViewModel @Inject constructor(
139138
return@intent
140139
}
141140

142-
val fortuneCreateStatus = fortuneRepository.fortuneCreateStatusFlow.first()
141+
val hasTodayFortune = fortuneRepository.hasTodayFortune()
143142
val hasUnseenFortune = fortuneRepository.hasUnseenFortuneFlow.first()
144143

145-
val shouldOpenFortune = when (fortuneCreateStatus) {
146-
is FortuneCreateStatus.Creating,
147-
is FortuneCreateStatus.Failure,
148-
-> true
149-
is FortuneCreateStatus.Success -> hasUnseenFortune
150-
FortuneCreateStatus.Idle -> false
151-
}
144+
val shouldOpenFortune = !hasTodayFortune || hasUnseenFortune
152145

153146
postSideEffect(
154147
if (shouldOpenFortune) {

0 commit comments

Comments
 (0)