61 lines
2.1 KiB
Kotlin
61 lines
2.1 KiB
Kotlin
package com.hotdeal.alarm
|
|
|
|
import android.app.Application
|
|
import android.util.Log
|
|
import androidx.hilt.work.HiltWorkerFactory
|
|
import androidx.work.Configuration
|
|
import com.hotdeal.alarm.data.local.preferences.AppSettings
|
|
import com.hotdeal.alarm.worker.WorkerScheduler
|
|
import dagger.hilt.android.HiltAndroidApp
|
|
import kotlinx.coroutines.CoroutineScope
|
|
import kotlinx.coroutines.Dispatchers
|
|
import kotlinx.coroutines.SupervisorJob
|
|
import kotlinx.coroutines.flow.first
|
|
import kotlinx.coroutines.launch
|
|
import javax.inject.Inject
|
|
|
|
@HiltAndroidApp
|
|
class HotDealApplication : Application(), Configuration.Provider {
|
|
|
|
@Inject
|
|
lateinit var workerFactory: HiltWorkerFactory
|
|
|
|
@Inject
|
|
lateinit var workerScheduler: WorkerScheduler
|
|
|
|
@Inject
|
|
lateinit var appSettings: AppSettings
|
|
|
|
private val applicationScope = CoroutineScope(SupervisorJob() + Dispatchers.Main)
|
|
|
|
override val workManagerConfiguration: Configuration
|
|
get() = Configuration.Builder()
|
|
.setWorkerFactory(workerFactory)
|
|
.setMinimumLoggingLevel(Log.DEBUG)
|
|
.build()
|
|
|
|
override fun onCreate() {
|
|
super.onCreate()
|
|
// 앱 시작 시 백그라운드 폴링 즉시 등록/갱신
|
|
ensurePollingScheduled()
|
|
}
|
|
|
|
/**
|
|
* 앱이 시작될 때마다 백그라운드 폴링이 등록되어 있는지 확인하고,
|
|
* 없으면 즉시 등록합니다. UPDATE 정책으로 항상 최신 Worker가 동작합니다.
|
|
*/
|
|
private fun ensurePollingScheduled() {
|
|
applicationScope.launch {
|
|
try {
|
|
val interval = appSettings.pollingInterval.first()
|
|
Log.d("HotDealApp", "백그라운드 폴링 등록/갱신: ${interval}분 간격")
|
|
workerScheduler.schedulePeriodicPolling(interval.toLong())
|
|
} catch (e: Exception) {
|
|
Log.e("HotDealApp", "폴링 스케줄 등록 실패: ${e.message}", e)
|
|
// 기본값으로 폴백
|
|
workerScheduler.schedulePeriodicPolling(WorkerScheduler.DEFAULT_INTERVAL_MINUTES)
|
|
}
|
|
}
|
|
}
|
|
}
|