From eae7df140e10d03f95b43f35bb45cc1a036bc7b9 Mon Sep 17 00:00:00 2001 From: Louis CAD Date: Wed, 5 Mar 2025 11:58:57 +0100 Subject: [PATCH] fix: Show error in notification when upload is waiting for internet --- .../upload/UploadForegroundService.kt | 25 ++++++++++++------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/app/src/main/java/com/infomaniak/swisstransfer/upload/UploadForegroundService.kt b/app/src/main/java/com/infomaniak/swisstransfer/upload/UploadForegroundService.kt index 1df6a8f2a..19f3ca0bd 100644 --- a/app/src/main/java/com/infomaniak/swisstransfer/upload/UploadForegroundService.kt +++ b/app/src/main/java/com/infomaniak/swisstransfer/upload/UploadForegroundService.kt @@ -34,6 +34,7 @@ import com.infomaniak.multiplatform_swisstransfer.network.exceptions.NetworkExce import com.infomaniak.multiplatform_swisstransfer.utils.FileUtils import com.infomaniak.swisstransfer.ui.screen.newtransfer.PickedFile import com.infomaniak.swisstransfer.ui.utils.NotificationsUtils +import com.infomaniak.swisstransfer.upload.UploadState.Ongoing.Status import com.infomaniak.swisstransfer.workers.FileChunkSizeManager import dagger.hilt.android.AndroidEntryPoint import kotlinx.coroutines.* @@ -165,12 +166,7 @@ class UploadForegroundService : ForegroundService(Companion, redeliverIntentIfKi // it should be because we have uris of picked/shared files, i.e. a transfer draft. notificationsUtils.buildTransferDraftNotification() } - is UploadState.Ongoing -> notificationsUtils.buildUploadProgressNotification( - authorEmail = state.info.authorEmail, - transferType = state.info.type, - totalBytes = state.info.totalSize, - uploadedBytes = state.uploadedBytes, - ) + is UploadState.Ongoing -> buildOngoingNotification(state) is UploadState.Retry -> { notificationsUtils.buildUploadFailedNotification(canRetry = true) } @@ -182,6 +178,17 @@ class UploadForegroundService : ForegroundService(Companion, redeliverIntentIfKi } } + private fun buildOngoingNotification(state: UploadState.Ongoing): Notification = when (state.status) { + Status.InProgress, Status.Initializing -> notificationsUtils.buildUploadProgressNotification( + authorEmail = state.info.authorEmail, + transferType = state.info.type, + totalBytes = state.info.totalSize, + uploadedBytes = state.uploadedBytes, + ) + //TODO[UL-retry]: Show the progress as above but change the message once we support retries. + Status.WaitingForInternet -> notificationsUtils.buildUploadFailedNotification(canRetry = true) + } + private var currentState by _state::value override suspend fun run(): Nothing = Dispatchers.Default { @@ -189,7 +196,7 @@ class UploadForegroundService : ForegroundService(Companion, redeliverIntentIfKi repeatWhileActive { val startRequest: StartUploadRequest = startSignal.receive() currentState = UploadState.Ongoing( - status = UploadState.Ongoing.Status.Initializing, + status = Status.Initializing, uploadedBytes = 0L, info = startRequest.info ) @@ -201,7 +208,7 @@ class UploadForegroundService : ForegroundService(Companion, redeliverIntentIfKi val transferUuid = isInternetConnectedFlow.mapLatest { isInternetConnected -> if (isInternetConnected.not()) { currentState = uploadStateFlow.filterIsInstance().first().copy( - status = UploadState.Ongoing.Status.WaitingForInternet + status = Status.WaitingForInternet ) awaitCancellation() } @@ -269,7 +276,7 @@ class UploadForegroundService : ForegroundService(Companion, redeliverIntentIfKi val info = startRequest.info updateState( UploadState.Ongoing( - status = UploadState.Ongoing.Status.Initializing, + status = Status.Initializing, uploadedBytes = 0L, info = info, )