Skip to content

Commit d76e2a9

Browse files
authored
Merge pull request #279 from YAPP-Github/bugfix/#278-fortune-create-status
[BUGFIX] ์˜ค๋Š˜์˜ ์šด์„ธ ์ƒ์„ฑ์— ์‹คํŒจํ•  ์‹œ ๋‹ค์Œ๋‚ ์ด ๋˜๊ธฐ ์ „๊นŒ์ง€ ๊ณ„์† ์šด์„ธ ์ƒ์„ฑ์— ์‹คํŒจํ•˜๋Š” ๋ฌธ์ œ
2 parents c05e27b + f58ce2e commit d76e2a9

File tree

25 files changed

+171
-632
lines changed

25 files changed

+171
-632
lines changed

โ€Žapp/build.gradle.ktsโ€Ž

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -64,8 +64,6 @@ dependencies {
6464

6565
implementation(libs.compose.material)
6666
implementation(libs.kotlin.reflect)
67-
implementation(libs.hilt.worker)
68-
implementation(libs.androidx.work.runtime)
6967

7068
implementation(platform(libs.firebase.bom))
7169
implementation(libs.firebase.analytics)

โ€Žapp/src/main/AndroidManifest.xmlโ€Ž

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -80,14 +80,5 @@
8080
android:name="com.yapp.alarm.services.AlarmService"
8181
android:foregroundServiceType="mediaPlayback" />
8282

83-
<provider
84-
android:name="androidx.startup.InitializationProvider"
85-
android:authorities="${applicationId}.androidx-startup"
86-
android:exported="false"
87-
tools:node="merge">
88-
<meta-data
89-
android:name="androidx.work.WorkManagerInitializer"
90-
tools:node="remove" />
91-
</provider>
9283
</application>
9384
</manifest>
Lines changed: 1 addition & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,13 @@
11
package com.yapp.orbit
22

33
import android.app.Application
4-
import androidx.hilt.work.HiltWorkerFactory
5-
import androidx.work.Configuration
64
import com.google.android.gms.ads.MobileAds
75
import dagger.hilt.android.HiltAndroidApp
8-
import javax.inject.Inject
96

107
@HiltAndroidApp
11-
class OrbitApplication() : Application(), Configuration.Provider {
12-
13-
@Inject lateinit var workerFactory: HiltWorkerFactory
14-
8+
class OrbitApplication() : Application() {
159
override fun onCreate() {
1610
super.onCreate()
1711
MobileAds.initialize(this)
1812
}
19-
20-
override val workManagerConfiguration: Configuration
21-
get() = Configuration.Builder()
22-
.setWorkerFactory(workerFactory)
23-
.build()
2413
}

โ€Žbuild-logic/src/main/java/com/yapp/convention/HiltAndroid.ktโ€Ž

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,7 @@ internal fun Project.configureHiltAndroid() {
1313
dependencies {
1414
"implementation"(libs.findLibrary("hilt.android").get())
1515
"ksp"(libs.findLibrary("hilt.android.compiler").get())
16-
"ksp"(libs.findLibrary("androidx-hilt-compiler").get())
1716
"implementation"(libs.findLibrary("hilt-navigation-compose").get())
18-
"implementation"(libs.findLibrary("hilt-worker").get())
1917
}
2018
}
2119

โ€Ž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 ->

โ€Žcore/alarm/src/main/java/com/yapp/alarm/scheduler/PostFortuneTaskScheduler.ktโ€Ž

Lines changed: 0 additions & 5 deletions
This file was deleted.

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

Lines changed: 25 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,17 +23,20 @@ import com.yapp.alarm.pendingIntent.interaction.createAlarmAlertPendingIntent
2323
import com.yapp.alarm.pendingIntent.interaction.createAlarmDismissPendingIntent
2424
import com.yapp.alarm.pendingIntent.interaction.createAlarmSnoozePendingIntent
2525
import com.yapp.alarm.pendingIntent.interaction.createNavigateToMissionPendingIntent
26-
import com.yapp.alarm.scheduler.PostFortuneTaskScheduler
2726
import com.yapp.domain.model.Alarm
2827
import com.yapp.domain.model.AlarmDay
2928
import com.yapp.domain.model.MissionType
3029
import com.yapp.domain.repository.AlarmRepository
30+
import com.yapp.domain.repository.FortuneRepository
31+
import com.yapp.domain.repository.UserInfoRepository
32+
import com.yapp.domain.tracker.FortuneCreationTracker
3133
import com.yapp.media.sound.SoundPlayer
3234
import dagger.hilt.android.AndroidEntryPoint
3335
import kotlinx.coroutines.CoroutineScope
3436
import kotlinx.coroutines.Dispatchers
3537
import kotlinx.coroutines.SupervisorJob
3638
import kotlinx.coroutines.cancel
39+
import kotlinx.coroutines.flow.first
3740
import kotlinx.coroutines.launch
3841
import javax.inject.Inject
3942

@@ -52,7 +55,13 @@ class AlarmService : Service() {
5255
lateinit var androidAlarmScheduler: AndroidAlarmScheduler
5356

5457
@Inject
55-
lateinit var postFortuneTaskScheduler: PostFortuneTaskScheduler
58+
lateinit var fortuneRepository: FortuneRepository
59+
60+
@Inject
61+
lateinit var userInfoRepository: UserInfoRepository
62+
63+
@Inject
64+
lateinit var fortuneCreationTracker: FortuneCreationTracker
5665

5766
private val serviceScope = CoroutineScope(Dispatchers.IO + SupervisorJob())
5867

@@ -79,7 +88,7 @@ class AlarmService : Service() {
7988
super.onDestroy()
8089
}
8190

82-
private fun handleIntent(intent: Intent) {
91+
private suspend fun handleIntent(intent: Intent) {
8392
val alarm: Alarm? = intent.getStringExtra(AlarmConstants.EXTRA_ALARM)?.let(Alarm::fromJson)
8493

8594
if (alarm == null) {
@@ -117,7 +126,19 @@ class AlarmService : Service() {
117126
turnOffAlarm(alarmId = notificationId)
118127
}
119128

120-
postFortuneTaskScheduler.enqueueOnceForToday()
129+
val shouldPostFortune = !fortuneRepository.hasTodayFortune()
130+
if (shouldPostFortune) {
131+
val userId = userInfoRepository.userIdFlow.first()
132+
userId?.let {
133+
fortuneCreationTracker.start()
134+
fortuneRepository.postFortune(userId).onSuccess { fortune ->
135+
fortuneCreationTracker.succeed(fortune.id)
136+
fortuneRepository.markFortuneAsCreated(fortune.id)
137+
}.onFailure {
138+
fortuneCreationTracker.fail()
139+
}
140+
}
141+
}
121142
}
122143

123144
private fun shouldNavigateToMission(
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package com.yapp.common.di
2+
3+
import com.yapp.common.tracker.InMemoryFortuneCreationTracker
4+
import com.yapp.domain.tracker.FortuneCreationTracker
5+
import dagger.Binds
6+
import dagger.Module
7+
import dagger.hilt.InstallIn
8+
import dagger.hilt.components.SingletonComponent
9+
import javax.inject.Singleton
10+
11+
@Module
12+
@InstallIn(SingletonComponent::class)
13+
abstract class FortuneTrackerModule {
14+
@Binds
15+
@Singleton
16+
abstract fun bindFortuneCreationTracker(
17+
impl: InMemoryFortuneCreationTracker,
18+
): FortuneCreationTracker
19+
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package com.yapp.common.tracker
2+
3+
import com.yapp.domain.model.FortuneCreationState
4+
import com.yapp.domain.tracker.FortuneCreationTracker
5+
import kotlinx.coroutines.flow.MutableStateFlow
6+
import kotlinx.coroutines.flow.StateFlow
7+
import kotlinx.coroutines.flow.asStateFlow
8+
import javax.inject.Inject
9+
import javax.inject.Singleton
10+
11+
@Singleton
12+
class InMemoryFortuneCreationTracker @Inject constructor() : FortuneCreationTracker {
13+
private val _state = MutableStateFlow<FortuneCreationState>(FortuneCreationState.Start)
14+
override val state: StateFlow<FortuneCreationState> = _state.asStateFlow()
15+
16+
override fun start() {
17+
_state.value = FortuneCreationState.Start
18+
}
19+
20+
override fun succeed(fortuneId: Long) {
21+
_state.value = FortuneCreationState.Success(fortuneId)
22+
}
23+
24+
override fun fail() {
25+
_state.value = FortuneCreationState.Failure
26+
}
27+
}

0 commit comments

Comments
ย (0)