Code refactor

This commit is contained in:
T8RIN
2025-04-01 02:23:38 +03:00
parent 547e79e613
commit fad8750bbf
44 changed files with 85 additions and 135 deletions

View File

@ -52,6 +52,7 @@ import androidx.compose.material3.rememberBottomSheetScaffoldState
import androidx.compose.material3.rememberStandardBottomSheetState
import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.getValue
import androidx.compose.runtime.rememberCoroutineScope
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
@ -66,6 +67,7 @@ import kotlinx.coroutines.launch
import ru.tech.imageresizershrinker.core.resources.R
import ru.tech.imageresizershrinker.core.settings.presentation.provider.LocalSettingsState
import ru.tech.imageresizershrinker.core.ui.utils.animation.fancySlideTransition
import ru.tech.imageresizershrinker.core.ui.utils.helper.isPortraitOrientationAsState
import ru.tech.imageresizershrinker.core.ui.utils.provider.LocalScreenSize
import ru.tech.imageresizershrinker.core.ui.utils.provider.ProvideContainerDefaults
import ru.tech.imageresizershrinker.core.ui.widget.dialogs.ExitBackHandler
@ -81,7 +83,6 @@ fun AdaptiveBottomScaffoldLayoutScreen(
title: @Composable () -> Unit,
onGoBack: () -> Unit,
shouldDisableBackHandler: Boolean,
isPortrait: Boolean,
actions: @Composable RowScope.(BottomSheetScaffoldState) -> Unit,
modifier: Modifier = Modifier,
topAppBarPersistentActions: @Composable RowScope.(BottomSheetScaffoldState) -> Unit = {},
@ -96,6 +97,7 @@ fun AdaptiveBottomScaffoldLayoutScreen(
autoClearFocus: Boolean = true,
enableNoDataScroll: Boolean = true
) {
val isPortrait by isPortraitOrientationAsState()
val screenWidthPx = LocalScreenSize.current.widthPx
val settingsState = LocalSettingsState.current

View File

@ -73,6 +73,7 @@ import kotlinx.coroutines.launch
import ru.tech.imageresizershrinker.core.resources.R
import ru.tech.imageresizershrinker.core.settings.presentation.provider.LocalSettingsState
import ru.tech.imageresizershrinker.core.ui.utils.animation.fancySlideTransition
import ru.tech.imageresizershrinker.core.ui.utils.helper.isPortraitOrientationAsState
import ru.tech.imageresizershrinker.core.ui.utils.provider.LocalScreenSize
import ru.tech.imageresizershrinker.core.ui.widget.dialogs.ExitBackHandler
import ru.tech.imageresizershrinker.core.ui.widget.enhanced.EnhancedIconButton
@ -97,7 +98,6 @@ fun AdaptiveLayoutScreen(
noDataControls: @Composable () -> Unit = {},
canShowScreenData: Boolean,
forceImagePreviewToMax: Boolean = false,
isPortrait: Boolean,
contentPadding: Dp = 20.dp,
showImagePreviewAsStickyHeader: Boolean = true,
autoClearFocus: Boolean = true,
@ -111,6 +111,7 @@ fun AdaptiveLayoutScreen(
)
)
) {
val isPortrait by isPortraitOrientationAsState()
val settingsState = LocalSettingsState.current
var imageState by rememberImageState()

View File

@ -59,6 +59,7 @@ import androidx.compose.material3.Icon
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.runtime.remember
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
@ -69,14 +70,14 @@ import androidx.compose.ui.res.stringResource
import androidx.compose.ui.unit.dp
import ru.tech.imageresizershrinker.core.resources.R
import ru.tech.imageresizershrinker.core.ui.theme.takeColorFromScheme
import ru.tech.imageresizershrinker.core.ui.utils.helper.isPortraitOrientationAsState
import ru.tech.imageresizershrinker.core.ui.widget.enhanced.EnhancedFloatingActionButton
import ru.tech.imageresizershrinker.core.ui.widget.modifier.container
import ru.tech.imageresizershrinker.core.ui.widget.modifier.drawHorizontalStroke
//TODO: Refactor from pair
@Composable
fun BottomButtonsBlock(
targetState: Pair<Boolean, Boolean>,
isNoData: Boolean,
onSecondaryButtonClick: () -> Unit,
onSecondaryButtonLongClick: (() -> Unit)? = null,
secondaryButtonIcon: ImageVector = Icons.Rounded.AddPhotoAlternate,
@ -93,13 +94,14 @@ fun BottomButtonsBlock(
isPrimaryButtonEnabled: Boolean = true,
showColumnarFabInRow: Boolean = false,
) {
val isPortrait by isPortraitOrientationAsState()
AnimatedContent(
targetState = targetState,
targetState = isNoData to isPortrait,
transitionSpec = {
fadeIn() + slideInVertically { it / 2 } togetherWith fadeOut() + slideOutVertically { it / 2 }
}
) { (isNull, inside) ->
if (isNull) {
) { (isEmptyState, inside) ->
if (isEmptyState) {
val button = @Composable {
Row(
modifier = Modifier
@ -119,14 +121,19 @@ fun BottomButtonsBlock(
onLongClick = onSecondaryButtonLongClick,
content = {
Spacer(Modifier.width(16.dp))
Icon(secondaryButtonIcon, null)
Icon(
imageVector = secondaryButtonIcon,
contentDescription = null
)
Spacer(Modifier.width(16.dp))
Text(secondaryButtonText)
Spacer(Modifier.width(16.dp))
}
)
if (showColumnarFabInRow && columnarFab != null) {
Column { columnarFab() }
Column(
content = columnarFab
)
}
}
}

View File

@ -423,7 +423,7 @@ fun ApngToolsContent(
mutableStateOf(false)
}
BottomButtonsBlock(
targetState = (component.type == null) to isPortrait,
isNoData = component.type == null,
onSecondaryButtonClick = {
when (component.type) {
is Screen.ApngTools.Type.ApngToImage -> pickSingleApngLauncher.pickFile()
@ -527,7 +527,6 @@ fun ApngToolsContent(
}
}
},
isPortrait = isPortrait,
canShowScreenData = component.type != null
)

View File

@ -264,7 +264,7 @@ fun AudioCoverExtractorContent(
}
BottomButtonsBlock(
targetState = covers.isEmpty() to isPortrait,
isNoData = covers.isEmpty(),
isPrimaryButtonEnabled = canSave,
onSecondaryButtonClick = audioPicker::pickFile,
isPrimaryButtonVisible = covers.isNotEmpty(),
@ -286,8 +286,7 @@ fun AudioCoverExtractorContent(
onSaveRequest = save
)
},
canShowScreenData = covers.isNotEmpty(),
isPortrait = isPortrait
canShowScreenData = covers.isNotEmpty()
)
ExitWithoutSavingDialog(

View File

@ -214,7 +214,7 @@ fun Base64ToolsContent(
mutableStateOf(false)
}
BottomButtonsBlock(
targetState = (component.base64String.isEmpty() && isPortrait) to isPortrait,
isNoData = component.base64String.isEmpty() && isPortrait,
isPrimaryButtonVisible = isPortrait || component.base64String.isNotEmpty(),
onSecondaryButtonClick = pickImage,
onSecondaryButtonLongClick = {
@ -243,8 +243,7 @@ fun Base64ToolsContent(
visible = showOneTimeImagePickingDialog
)
},
canShowScreenData = true,
isPortrait = isPortrait,
canShowScreenData = true
)
LoadingDialog(

View File

@ -40,7 +40,6 @@ import androidx.compose.material3.Badge
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.runtime.remember
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
@ -50,7 +49,6 @@ import androidx.compose.ui.res.stringResource
import androidx.compose.ui.unit.dp
import ru.tech.imageresizershrinker.core.domain.model.HashingType
import ru.tech.imageresizershrinker.core.resources.R
import ru.tech.imageresizershrinker.core.ui.utils.helper.isPortraitOrientationAsState
import ru.tech.imageresizershrinker.core.ui.utils.helper.plus
import ru.tech.imageresizershrinker.core.ui.utils.provider.rememberLocalEssentials
import ru.tech.imageresizershrinker.core.ui.widget.AdaptiveLayoutScreen
@ -73,8 +71,6 @@ fun ChecksumToolsContent(
val essentials = rememberLocalEssentials()
val showConfetti: () -> Unit = essentials::showConfetti
val isPortrait by isPortraitOrientationAsState()
val pagerState = rememberPagerState { ChecksumPage.ENTRIES_COUNT }
AdaptiveLayoutScreen(
@ -114,7 +110,6 @@ fun ChecksumToolsContent(
addHorizontalCutoutPaddingIfNoPreview = false,
showImagePreviewAsStickyHeader = false,
canShowScreenData = true,
isPortrait = isPortrait,
underTopAppBarContent = {
ChecksumToolsTabs(pagerState)
},

View File

@ -144,7 +144,7 @@ fun CipherContent(
actions = {},
buttons = {
BottomButtonsBlock(
targetState = (component.uri == null) to isPortrait,
isNoData = component.uri == null,
onSecondaryButtonClick = filePicker::pickFile,
secondaryButtonIcon = Icons.Rounded.FileOpen,
secondaryButtonText = stringResource(R.string.pick_file),
@ -194,7 +194,6 @@ fun CipherContent(
imagePreview = {},
showImagePreviewAsStickyHeader = false,
placeImagePreview = false,
isPortrait = isPortrait,
showActionsInTopAppBar = false
)

View File

@ -183,7 +183,6 @@ fun CollageMakerContent(
)
},
onGoBack = onBack,
isPortrait = isPortrait,
shouldDisableBackHandler = !component.haveChanges,
actions = { scaffoldState ->
var editSheetData by remember {
@ -455,7 +454,7 @@ fun CollageMakerContent(
mutableStateOf(false)
}
BottomButtonsBlock(
targetState = (component.uris.isNullOrEmpty()) to isPortrait,
isNoData = component.uris.isNullOrEmpty(),
onSecondaryButtonClick = pickImage,
onPrimaryButtonClick = {
saveBitmaps(null)

View File

@ -126,7 +126,6 @@ fun ColorToolsContent(
},
buttons = {},
placeImagePreview = false,
canShowScreenData = true,
isPortrait = isPortrait
canShowScreenData = true
)
}

View File

@ -152,7 +152,6 @@ fun CropContent(
)
},
onGoBack = onBack,
isPortrait = isPortrait,
shouldDisableBackHandler = component.bitmap == null,
actions = {
var job by remember { mutableStateOf<Job?>(null) }
@ -314,7 +313,7 @@ fun CropContent(
}
var job by remember { mutableStateOf<Job?>(null) }
BottomButtonsBlock(
targetState = (component.bitmap == null) to isPortrait,
isNoData = component.bitmap == null,
onSecondaryButtonClick = pickImage,
onSecondaryButtonLongClick = {
showOneTimeImagePickingDialog = true

View File

@ -234,7 +234,7 @@ fun DeleteExifContent(
mutableStateOf(false)
}
BottomButtonsBlock(
targetState = (component.uris.isNullOrEmpty()) to isPortrait,
isNoData = component.uris.isNullOrEmpty(),
onSecondaryButtonClick = pickImage,
onPrimaryButtonClick = {
saveBitmaps(null)
@ -264,8 +264,7 @@ fun DeleteExifContent(
noDataControls = {
ImageNotPickedWidget(onPickImage = pickImage)
},
canShowScreenData = !component.uris.isNullOrEmpty(),
isPortrait = isPortrait
canShowScreenData = !component.uris.isNullOrEmpty()
)
LoadingDialog(

View File

@ -288,7 +288,7 @@ fun DocumentScannerContent(
mutableStateOf(false)
}
BottomButtonsBlock(
targetState = component.uris.isEmpty() to isPortrait,
isNoData = component.uris.isEmpty(),
onSecondaryButtonClick = {
runCatching {
documentScanner.scan()
@ -320,8 +320,7 @@ fun DocumentScannerContent(
formatForFilenameSelection = component.getFormatForFilenameSelection()
)
},
canShowScreenData = component.uris.isNotEmpty(),
isPortrait = isPortrait
canShowScreenData = component.uris.isNotEmpty()
)
ExitWithoutSavingDialog(

View File

@ -207,7 +207,6 @@ fun DrawContent(
)
},
onGoBack = onBack,
isPortrait = isPortrait,
shouldDisableBackHandler = component.drawBehavior is DrawBehavior.None,
actions = {
secondaryControls()
@ -331,7 +330,7 @@ fun DrawContent(
mutableStateOf(false)
}
BottomButtonsBlock(
targetState = (component.drawBehavior is DrawBehavior.None) to isPortrait,
isNoData = component.drawBehavior is DrawBehavior.None,
onSecondaryButtonClick = pickImage,
onSecondaryButtonLongClick = {
showOneTimeImagePickingDialog = true

View File

@ -85,7 +85,6 @@ fun EditExifContent(
AutoContentBasedColors(component.uri)
var showOriginal by rememberSaveable { mutableStateOf(false) }
var showExitDialog by rememberSaveable { mutableStateOf(false) }
val imagePicker = rememberImagePicker(onSuccess = component::setUri)
@ -231,7 +230,7 @@ fun EditExifContent(
mutableStateOf(false)
}
BottomButtonsBlock(
targetState = (component.uri == Uri.EMPTY) to isPortrait,
isNoData = component.uri == Uri.EMPTY,
onSecondaryButtonClick = pickImage,
onSecondaryButtonLongClick = {
showOneTimeImagePickingDialog = true
@ -263,9 +262,7 @@ fun EditExifContent(
if (!component.isImageLoading) {
ImageNotPickedWidget(onPickImage = pickImage)
}
},
forceImagePreviewToMax = showOriginal,
isPortrait = isPortrait
}
)
ExitWithoutSavingDialog(

View File

@ -221,7 +221,6 @@ fun EraseBackgroundContent(
)
},
onGoBack = onBack,
isPortrait = isPortrait,
shouldDisableBackHandler = !component.haveChanges,
actions = {
secondaryControls()
@ -451,7 +450,7 @@ fun EraseBackgroundContent(
mutableStateOf(false)
}
BottomButtonsBlock(
targetState = (component.bitmap == null) to isPortrait,
isNoData = component.bitmap == null,
onSecondaryButtonClick = pickImage,
onSecondaryButtonLongClick = {
showOneTimeImagePickingDialog = true

View File

@ -263,14 +263,13 @@ fun FiltersContent(
)
},
forceImagePreviewToMax = showOriginal,
isPortrait = isPortrait,
controls = {
FiltersContentControls(component)
},
buttons = { actions ->
buttons = { bottomActions ->
FiltersContentActionButtons(
component = component,
actions = actions,
actions = bottomActions,
imagePicker = imagePicker,
pickSingleImagePicker = pickSingleImagePicker,
selectionFilterPicker = selectionFilterPicker

View File

@ -79,7 +79,7 @@ internal fun FiltersContentActionButtons(
mutableStateOf(false)
}
BottomButtonsBlock(
targetState = (component.basicFilterState.uris.isNullOrEmpty() && component.maskingFilterState.uri == null) to isPortrait,
isNoData = component.basicFilterState.uris.isNullOrEmpty() && component.maskingFilterState.uri == null,
onSecondaryButtonClick = {
when (filterType) {
is Screen.Filter.Type.Basic -> imagePicker.pickImage()

View File

@ -237,7 +237,7 @@ fun FormatConversionContent(
mutableStateOf(false)
}
BottomButtonsBlock(
targetState = (component.uris.isNullOrEmpty()) to isPortrait,
isNoData = component.uris.isNullOrEmpty(),
onSecondaryButtonClick = pickImage,
onPrimaryButtonClick = {
saveBitmaps(null)
@ -284,8 +284,7 @@ fun FormatConversionContent(
if (!component.isImageLoading) {
ImageNotPickedWidget(onPickImage = pickImage)
}
},
isPortrait = isPortrait
}
)
val transformations by remember(component.imageInfo) {

View File

@ -269,7 +269,7 @@ fun GeneratePaletteContent(
}
BottomButtonsBlock(
targetState = (useMaterialYouPalette == null || component.bitmap == null) to isPortrait,
isNoData = useMaterialYouPalette == null || component.bitmap == null,
onSecondaryButtonClick = pickImage,
isPrimaryButtonVisible = false,
onPrimaryButtonClick = {},
@ -297,8 +297,7 @@ fun GeneratePaletteContent(
noDataControls = {
preferences()
},
canShowScreenData = useMaterialYouPalette != null && component.bitmap != null,
isPortrait = isPortrait
canShowScreenData = useMaterialYouPalette != null && component.bitmap != null
)
var colorPickerValue by rememberSaveable(stateSaver = ColorSaver) {

View File

@ -248,7 +248,7 @@ fun GifToolsContent(
}
BottomButtonsBlock(
targetState = (component.type == null) to isPortrait,
isNoData = component.type == null,
onSecondaryButtonClick = {
when (component.type) {
is Screen.GifTools.Type.GifToImage -> pickSingleGifLauncher.pickFile()
@ -302,7 +302,6 @@ fun GifToolsContent(
}
)
},
isPortrait = isPortrait,
canShowScreenData = component.type != null
)

View File

@ -32,7 +32,6 @@ import androidx.compose.ui.unit.dp
import ru.tech.imageresizershrinker.core.resources.R
import ru.tech.imageresizershrinker.core.ui.utils.content_pickers.rememberImagePicker
import ru.tech.imageresizershrinker.core.ui.utils.helper.asClip
import ru.tech.imageresizershrinker.core.ui.utils.helper.isPortraitOrientationAsState
import ru.tech.imageresizershrinker.core.ui.utils.provider.LocalComponentActivity
import ru.tech.imageresizershrinker.core.ui.utils.provider.rememberLocalEssentials
import ru.tech.imageresizershrinker.core.ui.widget.AdaptiveLayoutScreen
@ -82,11 +81,8 @@ fun GradientMakerContent(
val pickImage = imagePicker::pickImage
val isPortrait by isPortraitOrientationAsState()
AdaptiveLayoutScreen(
shouldDisableBackHandler = !component.haveChanges,
isPortrait = isPortrait,
canShowScreenData = allowPickingImage != null,
title = {
TopAppBarTitle(

View File

@ -57,7 +57,7 @@ internal fun GradientMakerBottomButtons(
mutableStateOf(false)
}
BottomButtonsBlock(
targetState = (component.allowPickingImage == null) to isPortrait,
isNoData = component.allowPickingImage == null,
onSecondaryButtonClick = imagePicker::pickImage,
isSecondaryButtonVisible = component.allowPickingImage == true,
isPrimaryButtonVisible = component.brush != null,

View File

@ -215,7 +215,7 @@ fun ImageCutterContent(
mutableStateOf(false)
}
BottomButtonsBlock(
targetState = (component.uris.isNullOrEmpty()) to isPortrait,
isNoData = component.uris.isNullOrEmpty(),
onSecondaryButtonClick = pickImage,
onPrimaryButtonClick = {
saveBitmaps(null)
@ -307,8 +307,7 @@ fun ImageCutterContent(
if (!component.isImageLoading) {
ImageNotPickedWidget(onPickImage = pickImage)
}
},
isPortrait = isPortrait
}
)
ExitWithoutSavingDialog(

View File

@ -199,7 +199,7 @@ fun ImageSplitterContent(
mutableStateOf(false)
}
BottomButtonsBlock(
targetState = (component.uris.isEmpty()) to isPortrait,
isNoData = component.uris.isEmpty(),
onSecondaryButtonClick = pickImage,
onPrimaryButtonClick = {
saveBitmaps(null)
@ -234,8 +234,7 @@ fun ImageSplitterContent(
if (!component.isImageLoading) {
ImageNotPickedWidget(onPickImage = pickImage)
}
},
isPortrait = isPortrait
}
)
ExitWithoutSavingDialog(

View File

@ -273,8 +273,8 @@ fun ImageStackingContent(
mutableStateOf(false)
}
BottomButtonsBlock(
isNoData = component.stackImages.isEmpty(),
isPrimaryButtonVisible = component.stackImages.isNotEmpty(),
targetState = (component.stackImages.isEmpty()) to isPortrait,
onSecondaryButtonClick = pickImage,
onPrimaryButtonClick = {
saveBitmaps(null)
@ -307,8 +307,7 @@ fun ImageStackingContent(
ImageNotPickedWidget(onPickImage = pickImage)
}
},
canShowScreenData = component.stackImages.isNotEmpty(),
isPortrait = isPortrait
canShowScreenData = component.stackImages.isNotEmpty()
)
LoadingDialog(

View File

@ -266,8 +266,8 @@ fun ImageStitchingContent(
mutableStateOf(false)
}
BottomButtonsBlock(
isNoData = component.uris.isNullOrEmpty(),
isPrimaryButtonVisible = component.previewBitmap != null,
targetState = (component.uris.isNullOrEmpty()) to isPortrait,
onSecondaryButtonClick = pickImage,
onPrimaryButtonClick = {
saveBitmaps(null)
@ -300,8 +300,7 @@ fun ImageStitchingContent(
ImageNotPickedWidget(onPickImage = pickImage)
}
},
canShowScreenData = !component.uris.isNullOrEmpty(),
isPortrait = isPortrait
canShowScreenData = !component.uris.isNullOrEmpty()
)
LoadingDialog(

View File

@ -33,7 +33,6 @@ import ru.tech.imageresizershrinker.core.resources.icons.Jxl
import ru.tech.imageresizershrinker.core.ui.utils.content_pickers.rememberFilePicker
import ru.tech.imageresizershrinker.core.ui.utils.content_pickers.rememberImagePicker
import ru.tech.imageresizershrinker.core.ui.utils.helper.isJxl
import ru.tech.imageresizershrinker.core.ui.utils.helper.isPortraitOrientationAsState
import ru.tech.imageresizershrinker.core.ui.utils.navigation.Screen
import ru.tech.imageresizershrinker.core.ui.utils.provider.LocalComponentActivity
import ru.tech.imageresizershrinker.core.ui.utils.provider.rememberLocalEssentials
@ -175,8 +174,6 @@ fun JxlToolsContent(
else component.onGoBack()
}
val isPortrait by isPortraitOrientationAsState()
AdaptiveLayoutScreen(
shouldDisableBackHandler = !component.haveChanges,
title = {
@ -239,7 +236,6 @@ fun JxlToolsContent(
noDataControls = {
JxlToolsNoDataControls(::pickImage)
},
isPortrait = isPortrait,
canShowScreenData = component.type != null
)

View File

@ -30,7 +30,6 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.unit.dp
import ru.tech.imageresizershrinker.core.ui.utils.content_pickers.ImagePicker
import ru.tech.imageresizershrinker.core.ui.utils.content_pickers.Picker
import ru.tech.imageresizershrinker.core.ui.utils.helper.isPortraitOrientationAsState
import ru.tech.imageresizershrinker.core.ui.utils.navigation.Screen
import ru.tech.imageresizershrinker.core.ui.utils.provider.rememberLocalEssentials
import ru.tech.imageresizershrinker.core.ui.widget.buttons.BottomButtonsBlock
@ -54,7 +53,6 @@ internal fun JxlToolsButtons(
null -> null
} ?: emptyList()
val isPortrait by isPortraitOrientationAsState()
val essentials = rememberLocalEssentials()
val save: (oneTimeSaveLocationUri: String?) -> Unit = {
@ -70,7 +68,7 @@ internal fun JxlToolsButtons(
mutableStateOf(false)
}
BottomButtonsBlock(
targetState = (component.type == null) to isPortrait,
isNoData = component.type == null,
onSecondaryButtonClick = onPickImage,
isPrimaryButtonVisible = component.canSave,
onPrimaryButtonClick = {

View File

@ -246,8 +246,8 @@ fun LimitsResizeContent(
mutableStateOf(false)
}
BottomButtonsBlock(
isNoData = component.uris.isNullOrEmpty(),
isPrimaryButtonVisible = component.canSave,
targetState = (component.uris.isNullOrEmpty()) to isPortrait,
onSecondaryButtonClick = pickImage,
onPrimaryButtonClick = {
saveBitmaps(null)
@ -280,8 +280,7 @@ fun LimitsResizeContent(
TopAppBarEmoji()
}
},
canShowScreenData = component.bitmap != null,
isPortrait = isPortrait
canShowScreenData = component.bitmap != null
)
LoadingDialog(

View File

@ -20,11 +20,9 @@ package ru.tech.imageresizershrinker.feature.load_net_image.presentation
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Column
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.unit.dp
import ru.tech.imageresizershrinker.core.resources.R
import ru.tech.imageresizershrinker.core.ui.utils.helper.isPortraitOrientationAsState
import ru.tech.imageresizershrinker.core.ui.widget.AdaptiveLayoutScreen
import ru.tech.imageresizershrinker.core.ui.widget.dialogs.LoadingDialog
import ru.tech.imageresizershrinker.core.ui.widget.text.TopAppBarTitle
@ -43,8 +41,6 @@ fun LoadNetImageContent(
) {
AutoContentBasedColors(component.bitmap)
val isPortrait by isPortraitOrientationAsState()
AdaptiveLayoutScreen(
shouldDisableBackHandler = true,
title = {
@ -79,8 +75,7 @@ fun LoadNetImageContent(
actions = actions
)
},
canShowScreenData = true,
isPortrait = isPortrait
canShowScreenData = true
)
LoadingDialog(

View File

@ -27,7 +27,7 @@ import androidx.compose.runtime.remember
import androidx.compose.runtime.saveable.rememberSaveable
import androidx.compose.runtime.setValue
import ru.tech.imageresizershrinker.core.resources.icons.ImageEdit
import ru.tech.imageresizershrinker.core.ui.utils.helper.isLandscapeOrientationAsState
import ru.tech.imageresizershrinker.core.ui.utils.helper.isPortraitOrientationAsState
import ru.tech.imageresizershrinker.core.ui.utils.provider.rememberLocalEssentials
import ru.tech.imageresizershrinker.core.ui.widget.buttons.BottomButtonsBlock
import ru.tech.imageresizershrinker.core.ui.widget.dialogs.OneTimeSaveLocationSelectionDialog
@ -39,7 +39,7 @@ internal fun LoadNetImageActionButtons(
component: LoadNetImageComponent,
actions: @Composable RowScope.() -> Unit
) {
val isLandscape by isLandscapeOrientationAsState()
val isPortrait by isPortraitOrientationAsState()
val essentials = rememberLocalEssentials()
val saveBitmap: (oneTimeSaveLocationUri: String?) -> Unit = {
@ -56,7 +56,7 @@ internal fun LoadNetImageActionButtons(
mutableStateOf(listOf<Uri>())
}
BottomButtonsBlock(
targetState = false to !isLandscape,
isNoData = false,
onSecondaryButtonClick = {
component.cacheImages {
editSheetData = it
@ -72,7 +72,7 @@ internal fun LoadNetImageActionButtons(
showFolderSelectionDialog = true
},
actions = {
if (!isLandscape) actions()
if (isPortrait) actions()
}
)
OneTimeSaveLocationSelectionDialog(

View File

@ -207,7 +207,6 @@ fun MarkupLayersContent(
}
},
onGoBack = onBack,
isPortrait = isPortrait,
shouldDisableBackHandler = component.backgroundBehavior is BackgroundBehavior.None,
actions = {
MarkupLayersActions(
@ -356,7 +355,7 @@ fun MarkupLayersContent(
mutableStateOf(false)
}
BottomButtonsBlock(
targetState = (component.backgroundBehavior is BackgroundBehavior.None) to isPortrait,
isNoData = component.backgroundBehavior is BackgroundBehavior.None,
onSecondaryButtonClick = pickImage,
onSecondaryButtonLongClick = {
showOneTimeImagePickingDialog = true

View File

@ -42,7 +42,6 @@ import ru.tech.imageresizershrinker.core.domain.image.model.ImageInfo
import ru.tech.imageresizershrinker.core.resources.R
import ru.tech.imageresizershrinker.core.ui.utils.animation.animate
import ru.tech.imageresizershrinker.core.ui.utils.helper.asClip
import ru.tech.imageresizershrinker.core.ui.utils.helper.isPortraitOrientationAsState
import ru.tech.imageresizershrinker.core.ui.utils.provider.LocalComponentActivity
import ru.tech.imageresizershrinker.core.ui.utils.provider.rememberLocalEssentials
import ru.tech.imageresizershrinker.core.ui.utils.state.derivedValueOf
@ -72,8 +71,6 @@ fun NoiseGenerationContent(
val essentials = rememberLocalEssentials()
val showConfetti: () -> Unit = essentials::showConfetti
val isPortrait by isPortraitOrientationAsState()
val saveBitmap: (oneTimeSaveLocationUri: String?) -> Unit = {
component.saveNoise(
oneTimeSaveLocationUri = it,
@ -174,7 +171,7 @@ fun NoiseGenerationContent(
mutableStateOf(false)
}
BottomButtonsBlock(
targetState = false to isPortrait,
isNoData = false,
isSecondaryButtonVisible = false,
onSecondaryButtonClick = {},
onPrimaryButtonClick = {
@ -194,8 +191,7 @@ fun NoiseGenerationContent(
formatForFilenameSelection = component.getFormatForFilenameSelection()
)
},
canShowScreenData = true,
isPortrait = isPortrait
canShowScreenData = true
)
LoadingDialog(

View File

@ -321,7 +321,6 @@ fun RecognizeTextContent(
if (component.type == null) 12.dp
else 20.dp
).value,
isPortrait = isPortrait,
canShowScreenData = type != null
)

View File

@ -77,7 +77,7 @@ internal fun RecognizeTextButtons(
)
}
BottomButtonsBlock(
targetState = (type == null) to isPortrait,
isNoData = type == null,
onSecondaryButtonClick = multipleImagePicker::pickImage,
onSecondaryButtonLongClick = {
showOneTimeImagePickingDialog = true

View File

@ -336,7 +336,7 @@ fun ResizeAndConvertContent(
mutableStateOf(false)
}
BottomButtonsBlock(
targetState = (component.uris.isNullOrEmpty()) to isPortrait,
isNoData = component.uris.isNullOrEmpty(),
onSecondaryButtonClick = pickImage,
onPrimaryButtonClick = {
saveBitmaps(null)
@ -383,8 +383,7 @@ fun ResizeAndConvertContent(
if (!component.isImageLoading) {
ImageNotPickedWidget(onPickImage = pickImage)
}
},
isPortrait = isPortrait
}
)
ResetDialog(

View File

@ -50,7 +50,7 @@ import ru.tech.imageresizershrinker.core.ui.theme.takeColorFromScheme
import ru.tech.imageresizershrinker.core.ui.utils.content_pickers.Picker
import ru.tech.imageresizershrinker.core.ui.utils.content_pickers.rememberImagePicker
import ru.tech.imageresizershrinker.core.ui.utils.helper.asClip
import ru.tech.imageresizershrinker.core.ui.utils.helper.isLandscapeOrientationAsState
import ru.tech.imageresizershrinker.core.ui.utils.helper.isPortraitOrientationAsState
import ru.tech.imageresizershrinker.core.ui.utils.helper.rememberBarcodeScanner
import ru.tech.imageresizershrinker.core.ui.utils.provider.LocalComponentActivity
import ru.tech.imageresizershrinker.core.ui.utils.provider.rememberLocalEssentials
@ -127,7 +127,7 @@ fun ScanQrCodeContent(
)
}
val isLandscape by isLandscapeOrientationAsState()
val isPortrait by isPortraitOrientationAsState()
AdaptiveLayoutScreen(
shouldDisableBackHandler = true,
@ -185,7 +185,7 @@ fun ScanQrCodeContent(
},
showImagePreviewAsStickyHeader = false,
imagePreview = {
if (isLandscape) {
if (!isPortrait) {
QrCodePreview(
captureController = captureController,
isLandscape = true,
@ -194,7 +194,7 @@ fun ScanQrCodeContent(
}
},
controls = {
if (!isLandscape) {
if (isPortrait) {
Spacer(modifier = Modifier.height(20.dp))
QrCodePreview(
captureController = captureController,
@ -215,7 +215,7 @@ fun ScanQrCodeContent(
mutableStateOf(false)
}
BottomButtonsBlock(
targetState = (params.content.isEmpty() && !isLandscape) to !isLandscape,
isNoData = params.content.isEmpty() && isPortrait,
secondaryButtonIcon = Icons.Outlined.QrCodeScanner,
secondaryButtonText = stringResource(R.string.start_scanning),
onSecondaryButtonClick = scanner::scan,
@ -229,10 +229,10 @@ fun ScanQrCodeContent(
showFolderSelectionDialog = true
},
actions = {
if (!isLandscape) actions()
if (isPortrait) actions()
},
showColumnarFabInRow = true,
isPrimaryButtonVisible = !isLandscape || params.content.isNotEmpty(),
isPrimaryButtonVisible = isPortrait || params.content.isNotEmpty(),
columnarFab = {
EnhancedFloatingActionButton(
onClick = analyzerImagePicker::pickImage,
@ -269,8 +269,7 @@ fun ScanQrCodeContent(
visible = showOneTimeImagePickingDialog
)
},
canShowScreenData = true,
isPortrait = !isLandscape
canShowScreenData = true
)
LoadingDialog(

View File

@ -319,7 +319,7 @@ fun SingleEditContent(
mutableStateOf(false)
}
BottomButtonsBlock(
targetState = (component.uri == Uri.EMPTY) to isPortrait,
isNoData = component.uri == Uri.EMPTY,
onSecondaryButtonClick = pickImage,
onSecondaryButtonLongClick = {
showOneTimeImagePickingDialog = true
@ -353,8 +353,7 @@ fun SingleEditContent(
ImageNotPickedWidget(onPickImage = pickImage)
}
},
forceImagePreviewToMax = showOriginal,
isPortrait = isPortrait
forceImagePreviewToMax = showOriginal
)
ResetDialog(

View File

@ -170,7 +170,7 @@ fun SvgMakerContent(
mutableStateOf(false)
}
BottomButtonsBlock(
targetState = component.uris.isEmpty() to isPortrait,
isNoData = component.uris.isEmpty(),
onSecondaryButtonClick = imagePicker::pickImage,
isPrimaryButtonVisible = component.uris.isNotEmpty(),
onPrimaryButtonClick = {
@ -198,8 +198,7 @@ fun SvgMakerContent(
visible = showOneTimeImagePickingDialog
)
},
canShowScreenData = component.uris.isNotEmpty(),
isPortrait = isPortrait
canShowScreenData = component.uris.isNotEmpty()
)
ResetDialog(

View File

@ -248,7 +248,7 @@ fun WatermarkingContent(
mutableStateOf(false)
}
BottomButtonsBlock(
targetState = (component.uris.isEmpty()) to isPortrait,
isNoData = component.uris.isEmpty(),
onSecondaryButtonClick = pickImage,
onPrimaryButtonClick = {
saveBitmaps(null)
@ -279,7 +279,6 @@ fun WatermarkingContent(
noDataControls = {
ImageNotPickedWidget(onPickImage = pickImage)
},
isPortrait = isPortrait,
canShowScreenData = component.uris.isNotEmpty()
)

View File

@ -336,7 +336,7 @@ fun WebpToolsContent(
mutableStateOf(false)
}
BottomButtonsBlock(
targetState = (component.type == null) to isPortrait,
isNoData = component.type == null,
onSecondaryButtonClick = {
when (component.type) {
is Screen.WebpTools.Type.WebpToImage -> pickSingleWebpLauncher.pickFile()
@ -426,7 +426,6 @@ fun WebpToolsContent(
}
}
},
isPortrait = isPortrait,
canShowScreenData = component.type != null
)

View File

@ -296,7 +296,7 @@ fun WeightResizeContent(
mutableStateOf(false)
}
BottomButtonsBlock(
targetState = (component.uris.isNullOrEmpty()) to isPortrait,
isNoData = component.uris.isNullOrEmpty(),
onSecondaryButtonClick = pickImage,
onPrimaryButtonClick = {
saveBitmaps(null)
@ -333,8 +333,7 @@ fun WeightResizeContent(
if (!component.isImageLoading) {
ImageNotPickedWidget(onPickImage = pickImage)
}
},
isPortrait = isPortrait
}
)
LoadingDialog(

View File

@ -32,7 +32,6 @@ import androidx.compose.ui.res.stringResource
import androidx.compose.ui.unit.dp
import ru.tech.imageresizershrinker.core.resources.R
import ru.tech.imageresizershrinker.core.ui.utils.content_pickers.rememberFilePicker
import ru.tech.imageresizershrinker.core.ui.utils.helper.isPortraitOrientationAsState
import ru.tech.imageresizershrinker.core.ui.utils.provider.rememberLocalEssentials
import ru.tech.imageresizershrinker.core.ui.widget.AdaptiveLayoutScreen
import ru.tech.imageresizershrinker.core.ui.widget.buttons.BottomButtonsBlock
@ -68,8 +67,6 @@ fun ZipContent(
isPickedAlready = !component.initialUris.isNullOrEmpty()
)
val isPortrait by isPortraitOrientationAsState()
AdaptiveLayoutScreen(
shouldDisableBackHandler = !(component.uris.isNotEmpty() && component.byteArray != null),
title = {
@ -97,7 +94,7 @@ fun ZipContent(
},
buttons = {
BottomButtonsBlock(
targetState = component.uris.isEmpty() to isPortrait,
isNoData = component.uris.isEmpty(),
onSecondaryButtonClick = filePicker::pickFile,
secondaryButtonIcon = Icons.Rounded.FileOpen,
secondaryButtonText = stringResource(R.string.pick_file),
@ -117,8 +114,7 @@ fun ZipContent(
}
)
},
canShowScreenData = component.uris.isNotEmpty(),
isPortrait = isPortrait
canShowScreenData = component.uris.isNotEmpty()
)
ExitWithoutSavingDialog(