diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 7be8dc2..560dffb 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -24,8 +24,8 @@ android { applicationId = "com.hotdeal.alarm" minSdk = 31 targetSdk = 35 - versionCode = 21 - versionName = "1.11.4" + versionCode = 22 + versionName = "1.11.5" testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" vectorDrawables { diff --git a/app/src/main/java/com/hotdeal/alarm/presentation/main/MainActivity.kt b/app/src/main/java/com/hotdeal/alarm/presentation/main/MainActivity.kt index b006ce3..9bc05dd 100644 --- a/app/src/main/java/com/hotdeal/alarm/presentation/main/MainActivity.kt +++ b/app/src/main/java/com/hotdeal/alarm/presentation/main/MainActivity.kt @@ -42,8 +42,7 @@ class MainActivity : ComponentActivity() { // EdgeToEdge 설정 (One UI 7+ 대응) setupEdgeToEdge() - // 2분 간격으로 폴링 시작 - workerScheduler.schedulePeriodicPolling(2) + // 폴링은 MainViewModel에서 초기화 시 시작됨 setContent { HotDealTheme { @@ -176,15 +175,14 @@ class MainActivity : ComponentActivity() { } // 비저빌리티 콜백 - 백그라운드에서 포어그라운드 전환 시 새로고침 - private var isInBackground = false + private var isInBackground = true override fun onResume() { super.onResume() if (isInBackground) { - // 백그라운드에서 돌아왔을 때 새로고침 workerScheduler.executeOnce() - isInBackground = false } + isInBackground = false } override fun onPause() { diff --git a/app/src/main/java/com/hotdeal/alarm/util/BootReceiver.kt b/app/src/main/java/com/hotdeal/alarm/util/BootReceiver.kt index da35541..87f7f46 100644 --- a/app/src/main/java/com/hotdeal/alarm/util/BootReceiver.kt +++ b/app/src/main/java/com/hotdeal/alarm/util/BootReceiver.kt @@ -3,25 +3,33 @@ package com.hotdeal.alarm.util import android.content.BroadcastReceiver import android.content.Context import android.content.Intent -import androidx.work.WorkManager -import com.hotdeal.alarm.worker.HotDealPollingWorker +import com.hotdeal.alarm.data.local.preferences.AppSettings +import com.hotdeal.alarm.worker.WorkerScheduler +import dagger.hilt.android.AndroidEntryPoint +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.flow.first +import kotlinx.coroutines.launch +import javax.inject.Inject /** * 부팅 완료 시 자동 시작 리시버 */ +@AndroidEntryPoint class BootReceiver : BroadcastReceiver() { - + + @Inject + lateinit var workerScheduler: WorkerScheduler + + @Inject + lateinit var appSettings: AppSettings + override fun onReceive(context: Context, intent: Intent) { if (intent.action == Intent.ACTION_BOOT_COMPLETED) { - // 부팅 완료 시 폴링 재시작 - val workManager = WorkManager.getInstance(context) - workManager.enqueueUniquePeriodicWork( - HotDealPollingWorker.WORK_NAME, - androidx.work.ExistingPeriodicWorkPolicy.KEEP, - androidx.work.PeriodicWorkRequestBuilder( - 15, java.util.concurrent.TimeUnit.MINUTES - ).build() - ) + CoroutineScope(Dispatchers.IO).launch { + val savedInterval = appSettings.pollingInterval.first().toLong() + workerScheduler.schedulePeriodicPolling(savedInterval) + } } } } diff --git a/app/src/main/java/com/hotdeal/alarm/worker/WorkerScheduler.kt b/app/src/main/java/com/hotdeal/alarm/worker/WorkerScheduler.kt index 3a9a957..44c6219 100644 --- a/app/src/main/java/com/hotdeal/alarm/worker/WorkerScheduler.kt +++ b/app/src/main/java/com/hotdeal/alarm/worker/WorkerScheduler.kt @@ -31,11 +31,10 @@ class WorkerScheduler @Inject constructor( // 최소/최대 값 제한 val safeInterval = intervalMinutes.coerceIn(MIN_INTERVAL_MINUTES, MAX_INTERVAL_MINUTES) - val constraints = Constraints.Builder() - .setRequiredNetworkType(NetworkType.CONNECTED) - .setRequiresBatteryNotLow(true) // 배터리 부족 시 실행 안 함 - .setRequiresDeviceIdle(false) // 화면 켜진 상태에서도 실행 - .build() + val constraints = Constraints.Builder() + .setRequiredNetworkType(NetworkType.CONNECTED) + .setRequiresDeviceIdle(false) + .build() // 유연한 실행 시간 (±25%) val flexTime = (safeInterval * 0.25).toLong().coerceAtLeast(1) diff --git a/version.json b/version.json index 57a4bb8..910dbf9 100644 --- a/version.json +++ b/version.json @@ -1,10 +1,11 @@ { - "version": "1.11.4", - "versionCode": 21, - "updateUrl": "https://git.webpluss.net/sanjeok77/hotdeal_alarm/releases/download/v1.11.4/app-release.apk", + "version": "1.11.5", + "versionCode": 22, + "updateUrl": "https://git.webpluss.net/sanjeok77/hotdeal_alarm/releases/download/v1.11.5/app-release.apk", "changelog": [ - "업데이트 설치 버그 수정", - "Android 12+ 호환성 개선", - "다운로드 리시버 생명주기 관리 개선" + "비저빌리티 새로고침 버그 수정", + "폴링 간격 설정이 저장되지 않던 문제 수정", + "배터리 부족 시에도 폴링 동작하도록 개선", + "부팅 시 저장된 폴링 간격 사용하도록 수정" ] }