Skip to content

Commit

Permalink
improve go back after saving
Browse files Browse the repository at this point in the history
  • Loading branch information
T8RIN committed May 3, 2024
1 parent 93a41f8 commit fefbc98
Show file tree
Hide file tree
Showing 6 changed files with 39 additions and 17 deletions.
Expand Up @@ -248,7 +248,7 @@ fun GifToolsScreen(
var showExitDialog by rememberSaveable { mutableStateOf(false) }

val onBack = {
if (viewModel.type != null) showExitDialog = true
if (viewModel.haveChanges) showExitDialog = true
else onGoBack()
}

Expand Down
Expand Up @@ -43,6 +43,7 @@ import ru.tech.imageresizershrinker.core.domain.saving.model.FileSaveTarget
import ru.tech.imageresizershrinker.core.domain.saving.model.ImageSaveTarget
import ru.tech.imageresizershrinker.core.domain.saving.model.SaveResult
import ru.tech.imageresizershrinker.core.domain.saving.model.SaveTarget
import ru.tech.imageresizershrinker.core.domain.saving.model.onSuccess
import ru.tech.imageresizershrinker.core.domain.utils.smartJob
import ru.tech.imageresizershrinker.core.ui.utils.BaseViewModel
import ru.tech.imageresizershrinker.core.ui.utils.navigation.Screen
Expand Down Expand Up @@ -163,10 +164,12 @@ class GifToolsViewModel @Inject constructor(
savingJob?.cancel()
savingJob = null
updateParams(GifParams.Default)
registerChangesCleared()
}

fun updateGifFrames(imageFrames: ImageFrames) {
_imageFrames.update { imageFrames }
registerChanges()
}

fun clearConvertedImagesSelection() = updateGifFrames(ImageFrames.ManualSelection(emptyList()))
Expand Down Expand Up @@ -222,7 +225,7 @@ class GifToolsViewModel @Inject constructor(
_left.value = gifFrames.getFramePositions(it).size
}
).onCompletion {
onResult(results)
onResult(results.onSuccess(::registerSave))
}.collect { uri ->
imageGetter.getImage(
data = uri,
Expand Down Expand Up @@ -302,7 +305,7 @@ class GifToolsViewModel @Inject constructor(
_done.update { it + 1 }
}

onResult(results)
onResult(results.onSuccess(::registerSave))
}

null -> Unit
Expand Down Expand Up @@ -348,6 +351,7 @@ class GifToolsViewModel @Inject constructor(
_type.update {
Screen.GifTools.Type.ImageToGif(uris)
}
registerChanges()
}
}

Expand All @@ -359,6 +363,7 @@ class GifToolsViewModel @Inject constructor(

Screen.GifTools.Type.ImageToGif(newUris)
}
registerChanges()
}
}

Expand All @@ -372,11 +377,13 @@ class GifToolsViewModel @Inject constructor(

Screen.GifTools.Type.ImageToGif(newUris)
}
registerChanges()
}
}

fun setImageFormat(imageFormat: ImageFormat) {
_imageFormat.update { imageFormat }
registerChanges()
}

fun setQuality(quality: Quality) {
Expand All @@ -385,6 +392,7 @@ class GifToolsViewModel @Inject constructor(

fun updateParams(params: GifParams) {
_params.update { params }
registerChanges()
}

fun performSharing(onComplete: () -> Unit) {
Expand Down Expand Up @@ -461,6 +469,7 @@ class GifToolsViewModel @Inject constructor(
_jxlQuality.update {
(quality as? Quality.Jxl) ?: Quality.Jxl()
}
registerChanges()
}

}
Expand Up @@ -307,7 +307,7 @@ fun JxlToolsScreen(
var showExitDialog by rememberSaveable { mutableStateOf(false) }

val onBack = {
if (viewModel.type != null) showExitDialog = true
if (viewModel.haveChanges) showExitDialog = true
else onGoBack()
}

Expand Down
Expand Up @@ -42,6 +42,7 @@ import ru.tech.imageresizershrinker.core.domain.saving.model.FileSaveTarget
import ru.tech.imageresizershrinker.core.domain.saving.model.ImageSaveTarget
import ru.tech.imageresizershrinker.core.domain.saving.model.SaveResult
import ru.tech.imageresizershrinker.core.domain.saving.model.SaveTarget
import ru.tech.imageresizershrinker.core.domain.saving.model.onSuccess
import ru.tech.imageresizershrinker.core.domain.utils.smartJob
import ru.tech.imageresizershrinker.core.ui.utils.BaseViewModel
import ru.tech.imageresizershrinker.core.ui.utils.navigation.Screen
Expand Down Expand Up @@ -114,12 +115,11 @@ class JxlToolsViewModel @Inject constructor(

else -> _type.update { type }
}
registerChanges()
if (_type.value == null) {
clearAll()
} else {
if (!_type.value!!::class.isInstance(type)) {
clearAll()
}
} else if (!_type.value!!::class.isInstance(type)) {
clearAll()
}
}

Expand Down Expand Up @@ -193,7 +193,7 @@ class JxlToolsViewModel @Inject constructor(
_done.update { it + 1 }
}

onResult(results)
onResult(results.onSuccess(::registerSave))
}

is Screen.JxlTools.Type.JxlToJpeg -> {
Expand All @@ -219,7 +219,7 @@ class JxlToolsViewModel @Inject constructor(
_done.update { it + 1 }
}

onResult(results)
onResult(results.onSuccess(::registerSave))
}

is Screen.JxlTools.Type.JxlToImage -> {
Expand All @@ -245,7 +245,7 @@ class JxlToolsViewModel @Inject constructor(
_left.value = imageFrames.getFramePositions(it).size
}
).onCompletion {
onResult(results)
onResult(results.onSuccess(::registerSave))
}.collect { uri ->
imageGetter.getImage(
data = uri,
Expand Down Expand Up @@ -306,7 +306,7 @@ class JxlToolsViewModel @Inject constructor(
saveTarget = JxlSaveTarget("", jxlBytes),
keepOriginalMetadata = true,
oneTimeSaveLocationUri = oneTimeSaveLocationUri
)
).onSuccess(::registerSave)
onResult(listOf(result))
}
}
Expand Down Expand Up @@ -479,6 +479,7 @@ class JxlToolsViewModel @Inject constructor(
savingJob?.cancel()
savingJob = null
updateParams(AnimatedJxlParams.Default)
registerChangesCleared()
}

fun removeUri(uri: Uri) {
Expand All @@ -495,14 +496,17 @@ class JxlToolsViewModel @Inject constructor(

fun setImageFormat(imageFormat: ImageFormat) {
_imageFormat.update { imageFormat }
registerChanges()
}

fun updateJxlFrames(imageFrames: ImageFrames) {
_imageFrames.update { imageFrames }
registerChanges()
}

fun updateParams(params: AnimatedJxlParams) {
_params.update { params }
registerChanges()
}

fun clearConvertedImagesSelection() = updateJxlFrames(ImageFrames.ManualSelection(emptyList()))
Expand Down
Expand Up @@ -188,7 +188,7 @@ fun PdfToolsScreen(
val onBack = {
if (type is Screen.PdfTools.Type.Preview) onGoBack()
else {
if (!viewModel.canGoBack()) showExitDialog = true
if (viewModel.haveChanges) showExitDialog = true
else if (viewModel.pdfType != null) {
viewModel.clearType()
} else onGoBack()
Expand Down
Expand Up @@ -37,6 +37,7 @@ import ru.tech.imageresizershrinker.core.domain.image.model.Quality
import ru.tech.imageresizershrinker.core.domain.saving.FileController
import ru.tech.imageresizershrinker.core.domain.saving.model.ImageSaveTarget
import ru.tech.imageresizershrinker.core.domain.saving.model.SaveResult
import ru.tech.imageresizershrinker.core.domain.saving.model.onSuccess
import ru.tech.imageresizershrinker.core.domain.utils.smartJob
import ru.tech.imageresizershrinker.core.ui.utils.BaseViewModel
import ru.tech.imageresizershrinker.core.ui.utils.navigation.Screen
Expand Down Expand Up @@ -119,16 +120,16 @@ class PdfToolsViewModel @Inject constructor(
_isSaving.value = false
}

fun canGoBack(): Boolean {
return _byteArray.value == null && _imageInfo.value == ImageInfo()
}
override val haveChanges: Boolean
get() = super.haveChanges || _byteArray.value != null

fun setType(type: Screen.PdfTools.Type) {
when (type) {
is Screen.PdfTools.Type.ImagesToPdf -> setImagesToPdf(type.imageUris)
is Screen.PdfTools.Type.PdfToImages -> setPdfToImagesUri(type.pdfUri)
is Screen.PdfTools.Type.Preview -> setPdfPreview(type.pdfUri)
}
registerChanges()
resetCalculatedData()
}

Expand Down Expand Up @@ -187,6 +188,7 @@ class PdfToolsViewModel @Inject constructor(
_showOOMWarning.value = false
_imageInfo.value = ImageInfo()
resetCalculatedData()
registerChangesCleared()
}

private val _done: MutableState<Int> = mutableIntStateOf(0)
Expand Down Expand Up @@ -239,7 +241,7 @@ class PdfToolsViewModel @Inject constructor(
},
onComplete = {
_isSaving.value = false
onComplete(results)
onComplete(results.onSuccess(::registerSave))
}
)
}
Expand Down Expand Up @@ -358,22 +360,26 @@ class PdfToolsViewModel @Inject constructor(
_imagesToPdfState.update {
it?.plus(uris)?.toSet()?.toList()
}
registerChanges()
}

fun removeImageToPdfAt(index: Int) {
runCatching {
_imagesToPdfState.update {
it?.toMutableList()?.apply { removeAt(index) }
}
registerChanges()
}
}

fun reorderImagesToPdf(uris: List<Uri>?) {
_imagesToPdfState.update { uris }
registerChanges()
}

fun toggleScaleSmallImagesToLarge() {
_scaleSmallImagesToLarge.update { !it }
registerChanges()
}

private var presetSelectionJob: Job? by smartJob()
Expand All @@ -393,6 +399,7 @@ class PdfToolsViewModel @Inject constructor(
}
}.getOrNull() ?: _showOOMWarning.update { false }
}
registerChanges()
}

fun selectPreset(preset: Preset.Percentage) {
Expand Down Expand Up @@ -422,12 +429,14 @@ class PdfToolsViewModel @Inject constructor(
_imageInfo.update {
it.copy(imageFormat = imageFormat)
}
registerChanges()
}

fun setQuality(quality: Quality) {
_imageInfo.update {
it.copy(quality = quality)
}
registerChanges()
}

}

0 comments on commit fefbc98

Please sign in to comment.