From 6c429a362c1a3b393bf74416dba161138c93ba8a Mon Sep 17 00:00:00 2001 From: Semper-Viventem Date: Wed, 10 Jan 2024 01:56:42 +0200 Subject: [PATCH] Improve BootBroadcastReceiver --- .../software/service/BootBroadcastReceiver.kt | 28 +++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/f/cking/software/service/BootBroadcastReceiver.kt b/app/src/main/java/f/cking/software/service/BootBroadcastReceiver.kt index 0f22358..e361591 100644 --- a/app/src/main/java/f/cking/software/service/BootBroadcastReceiver.kt +++ b/app/src/main/java/f/cking/software/service/BootBroadcastReceiver.kt @@ -5,12 +5,21 @@ import android.content.Context import android.content.Intent import f.cking.software.data.helpers.PermissionHelper import f.cking.software.data.repo.SettingsRepository +import f.cking.software.domain.interactor.SaveReportInteractor +import f.cking.software.domain.model.JournalEntry +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.SupervisorJob +import kotlinx.coroutines.launch import org.koin.java.KoinJavaComponent.inject +import timber.log.Timber class BootBroadcastReceiver : BroadcastReceiver() { private val permissionHelper: PermissionHelper by inject(PermissionHelper::class.java) private val settingsRepository: SettingsRepository by inject(SettingsRepository::class.java) + private val saveReportInteractor: SaveReportInteractor by inject(SaveReportInteractor::class.java) + private val scope = CoroutineScope(SupervisorJob() + Dispatchers.Main) override fun onReceive(context: Context, intent: Intent) { if (intent.action == Intent.ACTION_BOOT_COMPLETED) { @@ -19,8 +28,23 @@ class BootBroadcastReceiver : BroadcastReceiver() { } private fun tryToRunService(context: Context) { - if (settingsRepository.getRunOnStartup() && permissionHelper.checkAllPermissions()) { - BgScanService.start(context) + if (settingsRepository.getRunOnStartup()) { + if (permissionHelper.checkAllPermissions()) { + try { + BgScanService.start(context) + } catch (error: Exception) { + Timber.e(error, "Failed to start service from the boot receiver") + val report = JournalEntry.Report.Error( + title = "[Launch on system startup error]: ${error.message ?: error::class.java}", + stackTrace = error.stackTraceToString(), + ) + scope.launch { + saveReportInteractor.execute(report) + } + } + } else { + Timber.e("Not all permissions granted, can't start service from the boot receiver") + } } } } \ No newline at end of file