Skip to content

Commit

Permalink
Added ability to see original size when compressing by #747
Browse files Browse the repository at this point in the history
  • Loading branch information
T8RIN committed Sep 18, 2024
1 parent 553fa6b commit 964fde9
Show file tree
Hide file tree
Showing 4 changed files with 72 additions and 12 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -21,19 +21,26 @@ import androidx.compose.animation.AnimatedContent
import androidx.compose.animation.fadeIn
import androidx.compose.animation.fadeOut
import androidx.compose.animation.togetherWith
import androidx.compose.material3.LocalTextStyle
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.buildAnnotatedString
import androidx.compose.ui.text.withStyle
import ru.tech.imageresizershrinker.core.domain.utils.readableByteCount
import ru.tech.imageresizershrinker.core.resources.R
import ru.tech.imageresizershrinker.core.ui.theme.Green
import ru.tech.imageresizershrinker.core.ui.theme.blend
import ru.tech.imageresizershrinker.core.ui.theme.takeColorFromScheme

@Composable
fun <T : Any> TopAppBarTitle(
title: String,
input: T?,
isLoading: Boolean,
size: Long?,
originalSize: Long? = null,
updateOnSizeChange: Boolean = true
) {
if (updateOnSizeChange) {
Expand All @@ -55,12 +62,35 @@ fun <T : Any> TopAppBarTitle(
Text(it)
}
} else {
Text(
stringResource(
R.string.size,
readableByteCount(size)
AnimatedContent(originalSize) { originalSize ->
val readableOriginal = readableByteCount(originalSize ?: 0)
val readableCompressed = readableByteCount(size)
val isSizesEqual =
size == originalSize || readableCompressed == readableOriginal
val color = takeColorFromScheme {
when {
isSizesEqual || originalSize == null -> onBackground
size > originalSize -> error.blend(errorContainer)
else -> Green
}
}
Text(
text = buildAnnotatedString {
append(
if (originalSize == null || isSizesEqual) {
stringResource(R.string.size, readableCompressed)
} else ""
)
originalSize?.takeIf { !isSizesEqual }?.let {
append(readableOriginal)
append(" -> ")
withStyle(LocalTextStyle.current.toSpanStyle().copy(color)) {
append(readableCompressed)
}
}
}
)
)
}
}
}
} else {
Expand All @@ -78,11 +108,32 @@ fun <T : Any> TopAppBarTitle(
Text(it)
}
} else {
val readableOriginal = readableByteCount(originalSize ?: 0)
val readableCompressed = readableByteCount(size)
val isSizesEqual =
size == originalSize || readableCompressed == readableOriginal
val color = takeColorFromScheme {
when {
isSizesEqual || originalSize == null -> onBackground
size > originalSize -> error.blend(errorContainer)
else -> Green
}
}
Text(
stringResource(
R.string.size,
readableByteCount(size)
)
text = buildAnnotatedString {
append(
if (originalSize == null || isSizesEqual) {
stringResource(R.string.size, readableCompressed)
} else ""
)
originalSize?.takeIf { !isSizesEqual }?.let {
append(readableOriginal)
append(" -> ")
withStyle(LocalTextStyle.current.toSpanStyle().copy(color)) {
append(readableCompressed)
}
}
}
)
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@ import com.t8rin.dynamic.theme.LocalDynamicThemeState
import dev.olshevski.navigation.reimagined.hilt.hiltViewModel
import kotlinx.coroutines.delay
import kotlinx.coroutines.launch
import ru.tech.imageresizershrinker.core.data.utils.fileSize
import ru.tech.imageresizershrinker.core.domain.image.model.Preset
import ru.tech.imageresizershrinker.core.resources.R
import ru.tech.imageresizershrinker.core.settings.presentation.provider.LocalSettingsState
Expand Down Expand Up @@ -189,7 +190,8 @@ fun FormatConversionContent(
title = stringResource(R.string.format_conversion),
input = viewModel.bitmap,
isLoading = viewModel.isImageLoading,
size = viewModel.imageInfo.sizeInBytes.toLong()
size = viewModel.imageInfo.sizeInBytes.toLong(),
originalSize = viewModel.selectedUri?.fileSize(context)
)
},
onGoBack = onBack,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,7 @@ import com.t8rin.dynamic.theme.LocalDynamicThemeState
import dev.olshevski.navigation.reimagined.hilt.hiltViewModel
import kotlinx.coroutines.delay
import kotlinx.coroutines.launch
import ru.tech.imageresizershrinker.core.data.utils.fileSize
import ru.tech.imageresizershrinker.core.domain.image.model.Preset
import ru.tech.imageresizershrinker.core.resources.R
import ru.tech.imageresizershrinker.core.resources.icons.ImageReset
Expand Down Expand Up @@ -209,7 +210,8 @@ fun ResizeAndConvertContent(
title = stringResource(R.string.resize_and_convert),
input = viewModel.bitmap,
isLoading = viewModel.isImageLoading,
size = viewModel.imageInfo.sizeInBytes.toLong()
size = viewModel.imageInfo.sizeInBytes.toLong(),
originalSize = viewModel.selectedUri?.fileSize(context)
)
},
onGoBack = onBack,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@ import com.t8rin.dynamic.theme.LocalDynamicThemeState
import dev.olshevski.navigation.reimagined.hilt.hiltViewModel
import kotlinx.coroutines.delay
import kotlinx.coroutines.launch
import ru.tech.imageresizershrinker.core.data.utils.fileSize
import ru.tech.imageresizershrinker.core.domain.image.model.Preset
import ru.tech.imageresizershrinker.core.resources.R
import ru.tech.imageresizershrinker.core.resources.icons.ImageReset
Expand Down Expand Up @@ -206,13 +207,17 @@ fun SingleEditContent(
var showDrawing by rememberSaveable { mutableStateOf(false) }
var showEraseBackground by rememberSaveable { mutableStateOf(false) }


AdaptiveLayoutScreen(
title = {
val originalSize = viewModel.uri.fileSize(context) ?: 0
val compressedSize = viewModel.imageInfo.sizeInBytes.toLong()
TopAppBarTitle(
title = stringResource(R.string.single_edit),
input = viewModel.bitmap,
isLoading = viewModel.isImageLoading,
size = viewModel.imageInfo.sizeInBytes.toLong()
size = compressedSize,
originalSize = originalSize
)
},
onGoBack = onBack,
Expand Down

0 comments on commit 964fde9

Please sign in to comment.