diff --git a/infra/core/src/main/java/com/simprints/core/tools/utils/BatteryOptimizationUtils.kt b/infra/core/src/main/java/com/simprints/core/tools/utils/BatteryOptimizationUtils.kt new file mode 100644 index 0000000000..61e5b4842f --- /dev/null +++ b/infra/core/src/main/java/com/simprints/core/tools/utils/BatteryOptimizationUtils.kt @@ -0,0 +1,15 @@ +package com.simprints.core.tools.utils + +import android.content.Context +import android.os.PowerManager +import com.simprints.core.ExcludedFromGeneratedTestCoverageReports + +@ExcludedFromGeneratedTestCoverageReports("Platform glue code") +object BatteryOptimizationUtils { + + fun isFollowingBatteryOptimizations(context: Context): Boolean = + (context.getSystemService(Context.POWER_SERVICE) as PowerManager) + .isIgnoringBatteryOptimizations(context.packageName) + .not() + +} diff --git a/infra/core/src/main/java/com/simprints/core/workers/SimCoroutineWorker.kt b/infra/core/src/main/java/com/simprints/core/workers/SimCoroutineWorker.kt index cf9ddf4e16..ad06909f05 100644 --- a/infra/core/src/main/java/com/simprints/core/workers/SimCoroutineWorker.kt +++ b/infra/core/src/main/java/com/simprints/core/workers/SimCoroutineWorker.kt @@ -13,6 +13,7 @@ import androidx.work.Data import androidx.work.ForegroundInfo import androidx.work.WorkerParameters import com.simprints.core.ExcludedFromGeneratedTestCoverageReports +import com.simprints.core.tools.utils.BatteryOptimizationUtils import com.simprints.infra.logging.LoggingConstants.CrashReportTag import com.simprints.infra.logging.Simber import com.simprints.infra.network.exceptions.NetworkConnectionException @@ -58,6 +59,9 @@ abstract class SimCoroutineWorker( protected suspend fun showProgressNotification() { try { + if (BatteryOptimizationUtils.isFollowingBatteryOptimizations(context)) { + return + } setForeground(getForegroundInfo()) } catch (setForegroundException: Throwable) { // Setting foreground (showing the notification) may be restricted by the system diff --git a/infra/event-sync/src/main/java/com/simprints/infra/eventsync/sync/down/workers/EventDownSyncDownloaderWorker.kt b/infra/event-sync/src/main/java/com/simprints/infra/eventsync/sync/down/workers/EventDownSyncDownloaderWorker.kt index 7fa133f457..4fc678e921 100644 --- a/infra/event-sync/src/main/java/com/simprints/infra/eventsync/sync/down/workers/EventDownSyncDownloaderWorker.kt +++ b/infra/event-sync/src/main/java/com/simprints/infra/eventsync/sync/down/workers/EventDownSyncDownloaderWorker.kt @@ -76,8 +76,8 @@ internal class EventDownSyncDownloaderWorker @AssistedInject constructor( override suspend fun doWork(): Result = withContext(dispatcher) { try { - Simber.tag(SYNC_LOG_TAG).d("[DOWNLOADER] Started") showProgressNotification() + Simber.tag(SYNC_LOG_TAG).d("[DOWNLOADER] Started") val workerId = this@EventDownSyncDownloaderWorker.id.toString() var count = syncCache.readProgress(workerId) diff --git a/infra/event-sync/src/main/java/com/simprints/infra/eventsync/sync/master/EventEndSyncReporterWorker.kt b/infra/event-sync/src/main/java/com/simprints/infra/eventsync/sync/master/EventEndSyncReporterWorker.kt index f80f3c44df..dec4b9d700 100644 --- a/infra/event-sync/src/main/java/com/simprints/infra/eventsync/sync/master/EventEndSyncReporterWorker.kt +++ b/infra/event-sync/src/main/java/com/simprints/infra/eventsync/sync/master/EventEndSyncReporterWorker.kt @@ -32,9 +32,9 @@ internal class EventEndSyncReporterWorker @AssistedInject constructor( override suspend fun doWork(): Result = withContext(dispatcher) { try { + showProgressNotification() val syncId = inputData.getString(SYNC_ID_TO_MARK_AS_COMPLETED) crashlyticsLog("Start - Params: $syncId") - showProgressNotification() inputData.getString(EVENT_DOWN_SYNC_SCOPE_TO_CLOSE)?.let { scopeId -> eventRepository.closeEventScope(scopeId, EventScopeEndCause.WORKFLOW_ENDED) diff --git a/infra/event-sync/src/main/java/com/simprints/infra/eventsync/sync/master/EventStartSyncReporterWorker.kt b/infra/event-sync/src/main/java/com/simprints/infra/eventsync/sync/master/EventStartSyncReporterWorker.kt index 417250e36d..fd06c6f0a9 100644 --- a/infra/event-sync/src/main/java/com/simprints/infra/eventsync/sync/master/EventStartSyncReporterWorker.kt +++ b/infra/event-sync/src/main/java/com/simprints/infra/eventsync/sync/master/EventStartSyncReporterWorker.kt @@ -30,9 +30,9 @@ internal class EventStartSyncReporterWorker @AssistedInject constructor( override suspend fun doWork(): Result = withContext(dispatcher) { try { + showProgressNotification() val syncId = inputData.getString(SYNC_ID_STARTED) crashlyticsLog("Start - Params: $syncId") - showProgressNotification() success(inputData) } catch (t: Throwable) { fail(t) diff --git a/infra/event-sync/src/main/java/com/simprints/infra/eventsync/sync/master/EventSyncMasterWorker.kt b/infra/event-sync/src/main/java/com/simprints/infra/eventsync/sync/master/EventSyncMasterWorker.kt index 83830bc093..924f631261 100644 --- a/infra/event-sync/src/main/java/com/simprints/infra/eventsync/sync/master/EventSyncMasterWorker.kt +++ b/infra/event-sync/src/main/java/com/simprints/infra/eventsync/sync/master/EventSyncMasterWorker.kt @@ -63,10 +63,10 @@ class EventSyncMasterWorker @AssistedInject internal constructor( override suspend fun doWork(): Result = withContext(dispatcher) { try { + showProgressNotification() // check if device is rooted before starting the sync securityManager.checkIfDeviceIsRooted() crashlyticsLog("Start") - showProgressNotification() val configuration = configRepository.getProjectConfiguration() if (!configuration.canSyncDataToSimprints() && !isEventDownSyncAllowed(configuration)) return@withContext success( diff --git a/infra/event-sync/src/main/java/com/simprints/infra/eventsync/sync/up/workers/EventUpSyncUploaderWorker.kt b/infra/event-sync/src/main/java/com/simprints/infra/eventsync/sync/up/workers/EventUpSyncUploaderWorker.kt index acbd0f75d0..e2bcdfc30e 100644 --- a/infra/event-sync/src/main/java/com/simprints/infra/eventsync/sync/up/workers/EventUpSyncUploaderWorker.kt +++ b/infra/event-sync/src/main/java/com/simprints/infra/eventsync/sync/up/workers/EventUpSyncUploaderWorker.kt @@ -74,8 +74,8 @@ internal class EventUpSyncUploaderWorker @AssistedInject constructor( override suspend fun doWork(): Result = withContext(dispatcher) { try { - Simber.tag(SYNC_LOG_TAG).d("[UPLOADER] Started") showProgressNotification() + Simber.tag(SYNC_LOG_TAG).d("[UPLOADER] Started") val workerId = this@EventUpSyncUploaderWorker.id.toString() var count = eventSyncCache.readProgress(workerId) diff --git a/infra/sync/src/main/java/com/simprints/infra/sync/config/worker/DeviceConfigDownSyncWorker.kt b/infra/sync/src/main/java/com/simprints/infra/sync/config/worker/DeviceConfigDownSyncWorker.kt index 22184eeecc..d2f46734a8 100644 --- a/infra/sync/src/main/java/com/simprints/infra/sync/config/worker/DeviceConfigDownSyncWorker.kt +++ b/infra/sync/src/main/java/com/simprints/infra/sync/config/worker/DeviceConfigDownSyncWorker.kt @@ -27,8 +27,8 @@ internal class DeviceConfigDownSyncWorker @AssistedInject constructor( override suspend fun doWork(): Result = withContext(dispatcher) { - crashlyticsLog("Fetching device config state") showProgressNotification() + crashlyticsLog("Fetching device config state") try { val state = configRepository.getDeviceState()