Skip to content

Commit

Permalink
Merge remote-tracking branch 'origin/main' into merge-send-transfer-s…
Browse files Browse the repository at this point in the history
…tates

# Conflicts:
#	app/src/main/java/com/infomaniak/swisstransfer/ui/screen/newtransfer/importfiles/ImportFilesScreen.kt
  • Loading branch information
LunarX committed Dec 20, 2024
2 parents 8c4265a + e5c5633 commit 0c12b48
Show file tree
Hide file tree
Showing 4 changed files with 26 additions and 12 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ fun NewTransferNavHost(navController: NavHostController, closeActivity: () -> Un
navController.navigate(UploadSuccessDestination(args.transferType, transferUrl))
},
navigateToUploadError = { navController.navigate(UploadErrorDestination) },
closeActivity = closeActivity,
navigateBackToImportFiles = { navController.popBackStack(route = ImportFilesDestination, inclusive = false) },
)
}
composable<UploadSuccessDestination> {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -155,8 +155,11 @@ private fun HandleSendActionResult(
LaunchedEffect(sendStatus()) {
when (val actionResult = sendStatus()) {
is SendStatus.Success -> {
navigateToUploadProgress(transferType(), actionResult.totalSize)
// If the user cancels the transfer while in UploadProgress, we're gonna popBackStack to ImportFiles.
// If we don't reset the ImportFiles state machine, we'll automatically navigate-back to UploadProgress again.
// So, before leaving ImportFiles to go to UploadProgress, we need to reset the ImportFiles state machine.
resetSendActionResult()
navigateToUploadProgress(transferType(), actionResult.totalSize)
}
is SendStatus.Refused -> {
snackbarHostState.showSnackbar(context.getString(R.string.errorAppIntegrity))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ fun UploadProgressScreen(
totalSizeInBytes: Long,
navigateToUploadSuccess: (String) -> Unit,
navigateToUploadError: () -> Unit,
closeActivity: () -> Unit,
navigateBackToImportFiles: () -> Unit,
uploadProgressViewModel: UploadProgressViewModel = hiltViewModel<UploadProgressViewModel>(),
) {
val uiState by uploadProgressViewModel.transferProgressUiState.collectAsStateWithLifecycle()
Expand All @@ -66,18 +66,15 @@ fun UploadProgressScreen(
uploadProgressViewModel.trackUploadProgress()
}

HandleProgressState({ uiState }, navigateToUploadSuccess, navigateToUploadError)
HandleProgressState({ uiState }, navigateToUploadSuccess, navigateToUploadError, navigateBackToImportFiles)

UploadProgressScreen(
progressState = { uiState },
isNetworkAvailable = { isNetworkAvailable },
totalSizeInBytes = totalSizeInBytes,
showBottomSheet = GetSetCallbacks(get = { showBottomSheet }, set = { showBottomSheet = it }),
adScreenType = adScreenType,
onCancel = {
uploadProgressViewModel.cancelUpload()
closeActivity()
}
onCancel = { uploadProgressViewModel.cancelUpload() }
)
}

Expand All @@ -86,12 +83,14 @@ private fun HandleProgressState(
uiState: () -> UploadProgressUiState,
navigateToUploadSuccess: (String) -> Unit,
navigateToUploadError: () -> Unit,
navigateBackToImportFiles: () -> Unit,
) {
val currentUiState = uiState()
LaunchedEffect(uiState()) {
when (currentUiState) {
is UploadProgressUiState.Success -> navigateToUploadSuccess(currentUiState.transferUrl)
is UploadProgressUiState.Error -> navigateToUploadError()
is UploadProgressUiState.Cancel -> navigateBackToImportFiles()
else -> Unit
}
}
Expand Down Expand Up @@ -129,7 +128,15 @@ private fun UploadProgressScreen(
Spacer(Modifier.height(Margin.Huge))
}

if (showBottomSheet.get()) CancelUploadBottomSheet(onCancel = onCancel, closeButtonSheet = { showBottomSheet.set(false) })
if (showBottomSheet.get()) {
CancelUploadBottomSheet(
onCancel = {
onCancel()
showBottomSheet.set(false)
},
closeButtonSheet = { showBottomSheet.set(false) },
)
}
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -124,7 +124,8 @@ class UploadWorker @AssistedInject constructor(
return@mapLatest when (workInfo.state) {
State.RUNNING -> UploadProgressUiState.Progress(workInfo.progress).also { lastUploadedSize = it.uploadedSize }
State.SUCCEEDED -> UploadProgressUiState.Success.create(workInfo.outputData, sharedApiUrlCreator)
State.FAILED, State.CANCELLED -> UploadProgressUiState.Error(lastUploadedSize)
State.FAILED -> UploadProgressUiState.Error(lastUploadedSize)
State.CANCELLED -> UploadProgressUiState.Cancel()
else -> UploadProgressUiState.Default(lastUploadedSize)
} ?: UploadProgressUiState.Error(lastUploadedSize)
}.filterNotNull()
Expand All @@ -138,7 +139,7 @@ class UploadWorker @AssistedInject constructor(

sealed class UploadProgressUiState(open val uploadedSize: Long) {
@Immutable
data class Default(override val uploadedSize: Long = 0) : UploadProgressUiState(uploadedSize)
data class Default(override val uploadedSize: Long = 0L) : UploadProgressUiState(uploadedSize)

@Immutable
data class Progress(override val uploadedSize: Long) : UploadProgressUiState(uploadedSize) {
Expand All @@ -159,7 +160,10 @@ class UploadWorker @AssistedInject constructor(
}

@Immutable
data class Error(override val uploadedSize: Long = 0) : UploadProgressUiState(uploadedSize)
data class Error(override val uploadedSize: Long = 0L) : UploadProgressUiState(uploadedSize)

@Immutable
data class Cancel(override val uploadedSize: Long = 0L) : UploadProgressUiState(uploadedSize)
}

companion object {
Expand Down

0 comments on commit 0c12b48

Please sign in to comment.