Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01R9CBCVP5oDu2sfoYPisNCQ
41 lines
1.5 KiB
Kotlin
41 lines
1.5 KiB
Kotlin
package com.jttools.datacontrol.service
|
|
|
|
import android.content.BroadcastReceiver
|
|
import android.content.Context
|
|
import android.content.Intent
|
|
import com.jttools.datacontrol.data.SettingsRepository
|
|
import dagger.hilt.android.AndroidEntryPoint
|
|
import kotlinx.coroutines.CoroutineScope
|
|
import kotlinx.coroutines.Dispatchers
|
|
import kotlinx.coroutines.launch
|
|
import kotlinx.coroutines.flow.first
|
|
import dagger.hilt.android.EntryPointAccessors
|
|
import dagger.hilt.InstallIn
|
|
import dagger.hilt.components.SingletonComponent
|
|
import dagger.hilt.EntryPoint
|
|
|
|
class BootReceiver : BroadcastReceiver() {
|
|
|
|
@EntryPoint
|
|
@InstallIn(SingletonComponent::class)
|
|
interface BootReceiverEntryPoint {
|
|
fun settingsRepository(): SettingsRepository
|
|
}
|
|
|
|
override fun onReceive(context: Context, intent: Intent?) {
|
|
// Redémarrage de l'appareil, ou DataControl vient d'être mis à jour (déploiement depuis le serveur).
|
|
if (intent?.action != Intent.ACTION_BOOT_COMPLETED && intent?.action != Intent.ACTION_MY_PACKAGE_REPLACED) return
|
|
val appContext = context.applicationContext
|
|
val entryPoint = EntryPointAccessors.fromApplication(appContext, BootReceiverEntryPoint::class.java)
|
|
val pendingResult = goAsync()
|
|
CoroutineScope(Dispatchers.Default).launch {
|
|
try {
|
|
val enabled = entryPoint.settingsRepository().settingsFlow.first().controlEnabled
|
|
if (enabled) DataMonitorService.start(appContext)
|
|
} finally {
|
|
pendingResult.finish()
|
|
}
|
|
}
|
|
}
|
|
}
|