From d948a0ab0be4d24c281f11610b21013784f918d0 Mon Sep 17 00:00:00 2001 From: T8RIN Date: Thu, 20 Mar 2025 02:52:49 +0300 Subject: [PATCH] Code refactors --- .../core/data/utils/UriUtils.kt | 1 - .../core/domain/utils/StringUtils.kt | 4 +- .../core/ui/widget/AdaptiveLayoutScreen.kt | 10 +- .../sliders/custom_slider/CustomSlider.kt | 1 - .../screenLogic/Base64ToolsComponent.kt | 1 - .../data/AndroidChecksumManager.kt | 1 - .../presentation/components/ColorHarmonies.kt | 3 +- .../presentation/components/ColorInfo.kt | 3 +- .../presentation/components/ColorMixing.kt | 3 +- .../presentation/components/ColorShading.kt | 3 +- .../components/DrawPathModeSelector.kt | 3 +- .../components/UiPathPaintCanvasAction.kt | 3 +- .../components/model/UiDrawPathMode.kt | 6 + .../data/utils/MeshGradientRenderer.kt | 35 +++++- .../addEditMaskSheet/AddMaskSheetComponent.kt | 2 - .../presentation/components/EditBoxState.kt | 10 +- .../components/MarkupLayersActions.kt | 4 +- .../components/MarkupLayersNoDataControls.kt | 116 +++++++++--------- .../components/MarkupLayersSideMenu.kt | 2 +- .../MarkupLayersTopAppBarActions.kt | 4 +- .../screenLogic/MarkupLayersComponent.kt | 16 +-- .../media_picker/data/utils/MediaObserver.kt | 5 +- .../components/DownloadedLanguageItem.kt | 2 +- .../RecognizeLanguageSelectorSheetContent.kt | 1 - 24 files changed, 140 insertions(+), 99 deletions(-) diff --git a/core/data/src/main/java/ru/tech/imageresizershrinker/core/data/utils/UriUtils.kt b/core/data/src/main/java/ru/tech/imageresizershrinker/core/data/utils/UriUtils.kt index 7f02db7ae..a17a2075a 100644 --- a/core/data/src/main/java/ru/tech/imageresizershrinker/core/data/utils/UriUtils.kt +++ b/core/data/src/main/java/ru/tech/imageresizershrinker/core/data/utils/UriUtils.kt @@ -31,7 +31,6 @@ import ru.tech.imageresizershrinker.core.domain.model.ImageModel import ru.tech.imageresizershrinker.core.resources.R import java.net.URLDecoder import java.util.LinkedList -import kotlin.io.use fun ImageModel.toUri(): Uri? = when (data) { is Uri -> data as Uri diff --git a/core/domain/src/main/kotlin/ru/tech/imageresizershrinker/core/domain/utils/StringUtils.kt b/core/domain/src/main/kotlin/ru/tech/imageresizershrinker/core/domain/utils/StringUtils.kt index b2d0274d5..673a9566a 100644 --- a/core/domain/src/main/kotlin/ru/tech/imageresizershrinker/core/domain/utils/StringUtils.kt +++ b/core/domain/src/main/kotlin/ru/tech/imageresizershrinker/core/domain/utils/StringUtils.kt @@ -53,7 +53,7 @@ private fun diffHelper( ): Pair { val key = (a.length.toLong()) shl 32 or b.length.toLong() if (!lookup.containsKey(key)) { - var value: Pair = if (a.isEmpty() || b.isEmpty()) { + val value: Pair = if (a.isEmpty() || b.isEmpty()) { a to b } else if (a[0] == b[0]) { diffHelper( @@ -71,7 +71,7 @@ private fun diffHelper( bb.first to (b[0].toString() + bb.second) } } - lookup.put(key, value) + lookup[key] = value } return lookup.getOrElse(key) { "" to "" } } diff --git a/core/ui/src/main/kotlin/ru/tech/imageresizershrinker/core/ui/widget/AdaptiveLayoutScreen.kt b/core/ui/src/main/kotlin/ru/tech/imageresizershrinker/core/ui/widget/AdaptiveLayoutScreen.kt index c980e19f9..47e94d0ab 100644 --- a/core/ui/src/main/kotlin/ru/tech/imageresizershrinker/core/ui/widget/AdaptiveLayoutScreen.kt +++ b/core/ui/src/main/kotlin/ru/tech/imageresizershrinker/core/ui/widget/AdaptiveLayoutScreen.kt @@ -214,11 +214,11 @@ fun AdaptiveLayoutScreen( ) val cutout = if (!placeImagePreview && addHorizontalCutoutPaddingIfNoPreview) { - WindowInsets - .displayCutout - .asPaddingValues() - .calculateStartPadding(direction) - } else 0.dp + WindowInsets + .displayCutout + .asPaddingValues() + .calculateStartPadding(direction) + } else 0.dp val listState = rememberLazyListState() var isScrolled by rememberSaveable(canShowScreenData) { diff --git a/core/ui/src/main/kotlin/ru/tech/imageresizershrinker/core/ui/widget/sliders/custom_slider/CustomSlider.kt b/core/ui/src/main/kotlin/ru/tech/imageresizershrinker/core/ui/widget/sliders/custom_slider/CustomSlider.kt index f82660be0..04edf233e 100644 --- a/core/ui/src/main/kotlin/ru/tech/imageresizershrinker/core/ui/widget/sliders/custom_slider/CustomSlider.kt +++ b/core/ui/src/main/kotlin/ru/tech/imageresizershrinker/core/ui/widget/sliders/custom_slider/CustomSlider.kt @@ -436,7 +436,6 @@ private fun Modifier.sliderSemantics( } - @Stable private fun Modifier.sliderTapModifier( state: CustomSliderState, diff --git a/feature/base64-tools/src/main/java/ru/tech/imageresizershrinker/feature/base64_tools/presentation/screenLogic/Base64ToolsComponent.kt b/feature/base64-tools/src/main/java/ru/tech/imageresizershrinker/feature/base64_tools/presentation/screenLogic/Base64ToolsComponent.kt index 61c3c3c35..70642acd6 100644 --- a/feature/base64-tools/src/main/java/ru/tech/imageresizershrinker/feature/base64_tools/presentation/screenLogic/Base64ToolsComponent.kt +++ b/feature/base64-tools/src/main/java/ru/tech/imageresizershrinker/feature/base64_tools/presentation/screenLogic/Base64ToolsComponent.kt @@ -49,7 +49,6 @@ import ru.tech.imageresizershrinker.feature.base64_tools.domain.Base64Converter import java.text.SimpleDateFormat import java.util.Date import java.util.Locale -import kotlin.toString class Base64ToolsComponent @AssistedInject internal constructor( @Assisted componentContext: ComponentContext, diff --git a/feature/checksum-tools/src/main/java/ru/tech/imageresizershrinker/feature/checksum_tools/data/AndroidChecksumManager.kt b/feature/checksum-tools/src/main/java/ru/tech/imageresizershrinker/feature/checksum_tools/data/AndroidChecksumManager.kt index ce76500e8..51f5cd15d 100644 --- a/feature/checksum-tools/src/main/java/ru/tech/imageresizershrinker/feature/checksum_tools/data/AndroidChecksumManager.kt +++ b/feature/checksum-tools/src/main/java/ru/tech/imageresizershrinker/feature/checksum_tools/data/AndroidChecksumManager.kt @@ -31,7 +31,6 @@ import ru.tech.imageresizershrinker.core.domain.saving.io.Readable import ru.tech.imageresizershrinker.feature.checksum_tools.domain.ChecksumManager import ru.tech.imageresizershrinker.feature.checksum_tools.domain.ChecksumSource import javax.inject.Inject -import kotlin.text.encodeToByteArray internal class AndroidChecksumManager @Inject constructor( @ApplicationContext private val context: Context, diff --git a/feature/color-tools/src/main/java/ru/tech/imageresizershrinker/color_tools/presentation/components/ColorHarmonies.kt b/feature/color-tools/src/main/java/ru/tech/imageresizershrinker/color_tools/presentation/components/ColorHarmonies.kt index ac0aaceb4..97ad4467d 100644 --- a/feature/color-tools/src/main/java/ru/tech/imageresizershrinker/color_tools/presentation/components/ColorHarmonies.kt +++ b/feature/color-tools/src/main/java/ru/tech/imageresizershrinker/color_tools/presentation/components/ColorHarmonies.kt @@ -41,13 +41,14 @@ import androidx.compose.material.icons.rounded.ContentPaste import androidx.compose.material3.Icon import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Text -import androidx.compose.runtime.* import androidx.compose.runtime.Composable import androidx.compose.runtime.derivedStateOf +import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.runtime.saveable.rememberSaveable +import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip diff --git a/feature/color-tools/src/main/java/ru/tech/imageresizershrinker/color_tools/presentation/components/ColorInfo.kt b/feature/color-tools/src/main/java/ru/tech/imageresizershrinker/color_tools/presentation/components/ColorInfo.kt index 870ed908e..e542a515e 100644 --- a/feature/color-tools/src/main/java/ru/tech/imageresizershrinker/color_tools/presentation/components/ColorInfo.kt +++ b/feature/color-tools/src/main/java/ru/tech/imageresizershrinker/color_tools/presentation/components/ColorInfo.kt @@ -34,13 +34,14 @@ import androidx.compose.material.icons.rounded.ContentPaste import androidx.compose.material.icons.rounded.Info import androidx.compose.material3.Icon import androidx.compose.material3.Text -import androidx.compose.runtime.* import androidx.compose.runtime.Composable import androidx.compose.runtime.derivedStateOf +import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.runtime.saveable.rememberSaveable +import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip diff --git a/feature/color-tools/src/main/java/ru/tech/imageresizershrinker/color_tools/presentation/components/ColorMixing.kt b/feature/color-tools/src/main/java/ru/tech/imageresizershrinker/color_tools/presentation/components/ColorMixing.kt index 86405c084..c9502e5bc 100644 --- a/feature/color-tools/src/main/java/ru/tech/imageresizershrinker/color_tools/presentation/components/ColorMixing.kt +++ b/feature/color-tools/src/main/java/ru/tech/imageresizershrinker/color_tools/presentation/components/ColorMixing.kt @@ -36,14 +36,15 @@ import androidx.compose.material.icons.rounded.ContentPaste import androidx.compose.material3.Icon import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Text -import androidx.compose.runtime.* import androidx.compose.runtime.Composable import androidx.compose.runtime.derivedStateOf +import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableIntStateOf import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.runtime.saveable.rememberSaveable +import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip diff --git a/feature/color-tools/src/main/java/ru/tech/imageresizershrinker/color_tools/presentation/components/ColorShading.kt b/feature/color-tools/src/main/java/ru/tech/imageresizershrinker/color_tools/presentation/components/ColorShading.kt index 961eeca20..401e45de5 100644 --- a/feature/color-tools/src/main/java/ru/tech/imageresizershrinker/color_tools/presentation/components/ColorShading.kt +++ b/feature/color-tools/src/main/java/ru/tech/imageresizershrinker/color_tools/presentation/components/ColorShading.kt @@ -36,13 +36,14 @@ import androidx.compose.material.icons.rounded.ContentPaste import androidx.compose.material3.Icon import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Text -import androidx.compose.runtime.* import androidx.compose.runtime.Composable import androidx.compose.runtime.derivedStateOf +import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableIntStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.runtime.saveable.rememberSaveable +import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip diff --git a/feature/draw/src/main/java/ru/tech/imageresizershrinker/feature/draw/presentation/components/DrawPathModeSelector.kt b/feature/draw/src/main/java/ru/tech/imageresizershrinker/feature/draw/presentation/components/DrawPathModeSelector.kt index 0928d82d9..093b8578d 100644 --- a/feature/draw/src/main/java/ru/tech/imageresizershrinker/feature/draw/presentation/components/DrawPathModeSelector.kt +++ b/feature/draw/src/main/java/ru/tech/imageresizershrinker/feature/draw/presentation/components/DrawPathModeSelector.kt @@ -49,7 +49,8 @@ import ru.tech.imageresizershrinker.feature.draw.presentation.components.element import ru.tech.imageresizershrinker.feature.draw.presentation.components.element.PolygonParamsSelector import ru.tech.imageresizershrinker.feature.draw.presentation.components.element.RectParamsSelector import ru.tech.imageresizershrinker.feature.draw.presentation.components.element.StarParamsSelector -import ru.tech.imageresizershrinker.feature.draw.presentation.components.utils.* +import ru.tech.imageresizershrinker.feature.draw.presentation.components.utils.getIcon +import ru.tech.imageresizershrinker.feature.draw.presentation.components.utils.saveState @Composable fun DrawPathModeSelector( diff --git a/feature/draw/src/main/java/ru/tech/imageresizershrinker/feature/draw/presentation/components/UiPathPaintCanvasAction.kt b/feature/draw/src/main/java/ru/tech/imageresizershrinker/feature/draw/presentation/components/UiPathPaintCanvasAction.kt index c0baf7bf2..ed880ad8e 100644 --- a/feature/draw/src/main/java/ru/tech/imageresizershrinker/feature/draw/presentation/components/UiPathPaintCanvasAction.kt +++ b/feature/draw/src/main/java/ru/tech/imageresizershrinker/feature/draw/presentation/components/UiPathPaintCanvasAction.kt @@ -18,12 +18,13 @@ package ru.tech.imageresizershrinker.feature.draw.presentation.components import android.graphics.Bitmap -import androidx.compose.runtime.* import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.derivedStateOf +import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue import androidx.compose.ui.geometry.Offset import androidx.compose.ui.graphics.BlendMode import androidx.compose.ui.graphics.Canvas diff --git a/feature/draw/src/main/java/ru/tech/imageresizershrinker/feature/draw/presentation/components/model/UiDrawPathMode.kt b/feature/draw/src/main/java/ru/tech/imageresizershrinker/feature/draw/presentation/components/model/UiDrawPathMode.kt index 52f8975c4..040e8d319 100644 --- a/feature/draw/src/main/java/ru/tech/imageresizershrinker/feature/draw/presentation/components/model/UiDrawPathMode.kt +++ b/feature/draw/src/main/java/ru/tech/imageresizershrinker/feature/draw/presentation/components/model/UiDrawPathMode.kt @@ -119,6 +119,7 @@ fun DrawPathMode.toUi(): UiDrawPathMode = when (this) { sizeScale = sizeScale, angle = angle ) + DrawPathMode.Free -> UiDrawPathMode.Free DrawPathMode.Lasso -> UiDrawPathMode.Lasso DrawPathMode.Line -> UiDrawPathMode.Line @@ -126,6 +127,7 @@ fun DrawPathMode.toUi(): UiDrawPathMode = when (this) { sizeScale = sizeScale, angle = angle ) + DrawPathMode.OutlinedOval -> UiDrawPathMode.OutlinedOval is DrawPathMode.OutlinedPolygon -> UiDrawPathMode.OutlinedPolygon( vertices = vertices, @@ -147,6 +149,7 @@ fun DrawPathMode.toUi(): UiDrawPathMode = when (this) { sizeScale = sizeScale, angle = angle ) + is DrawPathMode.Polygon -> UiDrawPathMode.Polygon( vertices = vertices, rotationDegrees = rotationDegrees, @@ -174,6 +177,7 @@ fun UiDrawPathMode.toDomain(): DrawPathMode = when (this) { sizeScale = sizeScale, angle = angle ) + UiDrawPathMode.Free -> DrawPathMode.Free UiDrawPathMode.Lasso -> DrawPathMode.Lasso UiDrawPathMode.Line -> DrawPathMode.Line @@ -181,6 +185,7 @@ fun UiDrawPathMode.toDomain(): DrawPathMode = when (this) { sizeScale = sizeScale, angle = angle ) + UiDrawPathMode.OutlinedOval -> DrawPathMode.OutlinedOval is UiDrawPathMode.OutlinedPolygon -> DrawPathMode.OutlinedPolygon( vertices = vertices, @@ -202,6 +207,7 @@ fun UiDrawPathMode.toDomain(): DrawPathMode = when (this) { sizeScale = sizeScale, angle = angle ) + is UiDrawPathMode.Polygon -> DrawPathMode.Polygon( vertices = vertices, rotationDegrees = rotationDegrees, diff --git a/feature/filters/src/main/java/ru/tech/imageresizershrinker/feature/filters/data/utils/MeshGradientRenderer.kt b/feature/filters/src/main/java/ru/tech/imageresizershrinker/feature/filters/data/utils/MeshGradientRenderer.kt index 19fdc8a58..fae530996 100644 --- a/feature/filters/src/main/java/ru/tech/imageresizershrinker/feature/filters/data/utils/MeshGradientRenderer.kt +++ b/feature/filters/src/main/java/ru/tech/imageresizershrinker/feature/filters/data/utils/MeshGradientRenderer.kt @@ -15,19 +15,44 @@ * along with this program. If not, see . */ +@file:Suppress("unused") + package ru.tech.imageresizershrinker.feature.filters.data.utils -import android.opengl.GLES20.* +import android.opengl.GLES20.GL_COLOR_BUFFER_BIT +import android.opengl.GLES20.GL_COMPILE_STATUS +import android.opengl.GLES20.GL_DEPTH_BUFFER_BIT +import android.opengl.GLES20.GL_FLOAT +import android.opengl.GLES20.GL_FRAGMENT_SHADER +import android.opengl.GLES20.GL_TRIANGLES +import android.opengl.GLES20.GL_VERTEX_SHADER +import android.opengl.GLES20.glAttachShader +import android.opengl.GLES20.glClear +import android.opengl.GLES20.glClearColor +import android.opengl.GLES20.glCompileShader +import android.opengl.GLES20.glCreateProgram +import android.opengl.GLES20.glCreateShader +import android.opengl.GLES20.glDeleteShader +import android.opengl.GLES20.glDisableVertexAttribArray +import android.opengl.GLES20.glDrawArrays +import android.opengl.GLES20.glEnableVertexAttribArray +import android.opengl.GLES20.glGetAttribLocation +import android.opengl.GLES20.glGetShaderiv +import android.opengl.GLES20.glGetUniformLocation +import android.opengl.GLES20.glLinkProgram +import android.opengl.GLES20.glShaderSource +import android.opengl.GLES20.glUniform1f +import android.opengl.GLES20.glUniform2f +import android.opengl.GLES20.glUniform3fv +import android.opengl.GLES20.glUseProgram +import android.opengl.GLES20.glVertexAttribPointer +import android.opengl.GLES20.glViewport import android.opengl.GLSurfaceView.Renderer -import java.lang.RuntimeException import java.nio.ByteBuffer import java.nio.ByteOrder import java.nio.FloatBuffer import javax.microedition.khronos.egl.EGLConfig import javax.microedition.khronos.opengles.GL10 -import kotlin.also -import kotlin.apply -import kotlin.run // from https://www.shadertoy.com/view/wdyczG, Created by hahnzhu in 2020-10-20 diff --git a/feature/filters/src/main/java/ru/tech/imageresizershrinker/feature/filters/presentation/components/addEditMaskSheet/AddMaskSheetComponent.kt b/feature/filters/src/main/java/ru/tech/imageresizershrinker/feature/filters/presentation/components/addEditMaskSheet/AddMaskSheetComponent.kt index 0b5b4ed3f..4ba05af08 100644 --- a/feature/filters/src/main/java/ru/tech/imageresizershrinker/feature/filters/presentation/components/addEditMaskSheet/AddMaskSheetComponent.kt +++ b/feature/filters/src/main/java/ru/tech/imageresizershrinker/feature/filters/presentation/components/addEditMaskSheet/AddMaskSheetComponent.kt @@ -49,8 +49,6 @@ import ru.tech.imageresizershrinker.feature.draw.presentation.components.UiPathP import ru.tech.imageresizershrinker.feature.draw.presentation.components.toUiPathPaint import ru.tech.imageresizershrinker.feature.filters.domain.FilterMaskApplier import ru.tech.imageresizershrinker.feature.filters.presentation.components.UiFilterMask -import kotlin.collections.minus -import kotlin.collections.plus class AddMaskSheetComponent @AssistedInject internal constructor( @Assisted componentContext: ComponentContext, diff --git a/feature/markup-layers/src/main/java/ru/tech/imageresizershrinker/feature/markup_layers/presentation/components/EditBoxState.kt b/feature/markup-layers/src/main/java/ru/tech/imageresizershrinker/feature/markup_layers/presentation/components/EditBoxState.kt index 656d130b5..743adcca1 100644 --- a/feature/markup-layers/src/main/java/ru/tech/imageresizershrinker/feature/markup_layers/presentation/components/EditBoxState.kt +++ b/feature/markup-layers/src/main/java/ru/tech/imageresizershrinker/feature/markup_layers/presentation/components/EditBoxState.kt @@ -17,8 +17,10 @@ package ru.tech.imageresizershrinker.feature.markup_layers.presentation.components -import androidx.compose.runtime.* +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableFloatStateOf import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.setValue import androidx.compose.ui.geometry.Offset import androidx.compose.ui.unit.Density import androidx.compose.ui.unit.DpSize @@ -95,10 +97,10 @@ class EditBoxState( scale = (scale * zoomChange).fastCoerceIn(0.3f, 10f) val panChange = (offsetChange * scale).rotateBy(rotation) - val contentSize = contentSize.rotateBy(rotation) + val rotatedSize = contentSize.rotateBy(rotation) - val extraWidth = (parentMaxWidth - contentSize.width * scale).absoluteValue - val extraHeight = (parentMaxHeight - contentSize.height * scale).absoluteValue + val extraWidth = (parentMaxWidth - rotatedSize.width * scale).absoluteValue + val extraHeight = (parentMaxHeight - rotatedSize.height * scale).absoluteValue val maxX = extraWidth / 2 // + contentSize.width * scale / 2 val maxY = extraHeight / 2 // + contentSize.height * scale / 2 diff --git a/feature/markup-layers/src/main/java/ru/tech/imageresizershrinker/feature/markup_layers/presentation/components/MarkupLayersActions.kt b/feature/markup-layers/src/main/java/ru/tech/imageresizershrinker/feature/markup_layers/presentation/components/MarkupLayersActions.kt index b05d6fdae..c2a4ee43f 100644 --- a/feature/markup-layers/src/main/java/ru/tech/imageresizershrinker/feature/markup_layers/presentation/components/MarkupLayersActions.kt +++ b/feature/markup-layers/src/main/java/ru/tech/imageresizershrinker/feature/markup_layers/presentation/components/MarkupLayersActions.kt @@ -32,9 +32,11 @@ import androidx.compose.material.icons.outlined.Image import androidx.compose.material.icons.rounded.TextFields import androidx.compose.material3.Icon import androidx.compose.material3.MaterialTheme -import androidx.compose.runtime.* +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.saveable.rememberSaveable +import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color diff --git a/feature/markup-layers/src/main/java/ru/tech/imageresizershrinker/feature/markup_layers/presentation/components/MarkupLayersNoDataControls.kt b/feature/markup-layers/src/main/java/ru/tech/imageresizershrinker/feature/markup_layers/presentation/components/MarkupLayersNoDataControls.kt index d33ce8dfc..649db310f 100644 --- a/feature/markup-layers/src/main/java/ru/tech/imageresizershrinker/feature/markup_layers/presentation/components/MarkupLayersNoDataControls.kt +++ b/feature/markup-layers/src/main/java/ru/tech/imageresizershrinker/feature/markup_layers/presentation/components/MarkupLayersNoDataControls.kt @@ -41,11 +41,13 @@ import androidx.compose.material.icons.outlined.FormatPaint import androidx.compose.material.icons.rounded.FormatColorFill import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Text -import androidx.compose.runtime.* +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableIntStateOf import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.saveable.rememberSaveable +import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color @@ -165,67 +167,67 @@ internal fun MarkupLayersNoDataControls( }, sheetContent = { Column(Modifier.verticalScroll(rememberScrollState())) { - Row( - Modifier - .padding(16.dp) - .container(shape = RoundedCornerShape(24.dp)) - ) { - RoundedTextField( - value = width.takeIf { it != 0 }?.toString() ?: "", - onValueChange = { - width = it.restrict(8192).toIntOrNull() ?: 0 - }, - shape = RoundedCornerShape(12.dp), - keyboardOptions = KeyboardOptions( - keyboardType = KeyboardType.Number - ), - label = { - Text(stringResource(R.string.width, " ")) - }, - modifier = Modifier - .weight(1f) - .padding( - start = 8.dp, - top = 8.dp, - bottom = 4.dp, - end = 4.dp - ) - ) - RoundedTextField( - value = height.takeIf { it != 0 }?.toString() ?: "", - onValueChange = { - height = it.restrict(8192).toIntOrNull() ?: 0 - }, - keyboardOptions = KeyboardOptions( - keyboardType = KeyboardType.Number - ), - shape = RoundedCornerShape(12.dp), - label = { - Text(stringResource(R.string.height, " ")) - }, - modifier = Modifier - .weight(1f) - .padding( - start = 4.dp, - top = 8.dp, - bottom = 4.dp, - end = 8.dp - ), - ) - } - ColorRowSelector( - value = sheetBackgroundColor, - onValueChange = { sheetBackgroundColor = it }, - icon = Icons.Rounded.FormatColorFill, + Row( + Modifier + .padding(16.dp) + .container(shape = RoundedCornerShape(24.dp)) + ) { + RoundedTextField( + value = width.takeIf { it != 0 }?.toString() ?: "", + onValueChange = { + width = it.restrict(8192).toIntOrNull() ?: 0 + }, + shape = RoundedCornerShape(12.dp), + keyboardOptions = KeyboardOptions( + keyboardType = KeyboardType.Number + ), + label = { + Text(stringResource(R.string.width, " ")) + }, modifier = Modifier + .weight(1f) .padding( - start = 16.dp, - end = 16.dp, - bottom = 16.dp + start = 8.dp, + top = 8.dp, + bottom = 4.dp, + end = 4.dp ) - .container(RoundedCornerShape(24.dp)) + ) + RoundedTextField( + value = height.takeIf { it != 0 }?.toString() ?: "", + onValueChange = { + height = it.restrict(8192).toIntOrNull() ?: 0 + }, + keyboardOptions = KeyboardOptions( + keyboardType = KeyboardType.Number + ), + shape = RoundedCornerShape(12.dp), + label = { + Text(stringResource(R.string.height, " ")) + }, + modifier = Modifier + .weight(1f) + .padding( + start = 4.dp, + top = 8.dp, + bottom = 4.dp, + end = 8.dp + ), ) } + ColorRowSelector( + value = sheetBackgroundColor, + onValueChange = { sheetBackgroundColor = it }, + icon = Icons.Rounded.FormatColorFill, + modifier = Modifier + .padding( + start = 16.dp, + end = 16.dp, + bottom = 16.dp + ) + .container(RoundedCornerShape(24.dp)) + ) + } }, visible = showBackgroundDrawingSetup, onDismiss = { diff --git a/feature/markup-layers/src/main/java/ru/tech/imageresizershrinker/feature/markup_layers/presentation/components/MarkupLayersSideMenu.kt b/feature/markup-layers/src/main/java/ru/tech/imageresizershrinker/feature/markup_layers/presentation/components/MarkupLayersSideMenu.kt index f46b4bd3e..4a7e1d745 100644 --- a/feature/markup-layers/src/main/java/ru/tech/imageresizershrinker/feature/markup_layers/presentation/components/MarkupLayersSideMenu.kt +++ b/feature/markup-layers/src/main/java/ru/tech/imageresizershrinker/feature/markup_layers/presentation/components/MarkupLayersSideMenu.kt @@ -45,8 +45,8 @@ import androidx.compose.material.icons.rounded.Delete import androidx.compose.material3.Icon import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Surface -import androidx.compose.runtime.* import androidx.compose.runtime.Composable +import androidx.compose.runtime.derivedStateOf import androidx.compose.runtime.getValue import androidx.compose.runtime.remember import androidx.compose.ui.Alignment diff --git a/feature/markup-layers/src/main/java/ru/tech/imageresizershrinker/feature/markup_layers/presentation/components/MarkupLayersTopAppBarActions.kt b/feature/markup-layers/src/main/java/ru/tech/imageresizershrinker/feature/markup_layers/presentation/components/MarkupLayersTopAppBarActions.kt index 4660bcc60..16edea989 100644 --- a/feature/markup-layers/src/main/java/ru/tech/imageresizershrinker/feature/markup_layers/presentation/components/MarkupLayersTopAppBarActions.kt +++ b/feature/markup-layers/src/main/java/ru/tech/imageresizershrinker/feature/markup_layers/presentation/components/MarkupLayersTopAppBarActions.kt @@ -23,9 +23,11 @@ import androidx.compose.material.icons.rounded.Tune import androidx.compose.material3.BottomSheetScaffoldState import androidx.compose.material3.Icon import androidx.compose.material3.SheetValue -import androidx.compose.runtime.* +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.res.stringResource import kotlinx.coroutines.launch diff --git a/feature/markup-layers/src/main/java/ru/tech/imageresizershrinker/feature/markup_layers/presentation/screenLogic/MarkupLayersComponent.kt b/feature/markup-layers/src/main/java/ru/tech/imageresizershrinker/feature/markup_layers/presentation/screenLogic/MarkupLayersComponent.kt index 7ddbad29c..08f3bf901 100644 --- a/feature/markup-layers/src/main/java/ru/tech/imageresizershrinker/feature/markup_layers/presentation/screenLogic/MarkupLayersComponent.kt +++ b/feature/markup-layers/src/main/java/ru/tech/imageresizershrinker/feature/markup_layers/presentation/screenLogic/MarkupLayersComponent.kt @@ -21,9 +21,9 @@ import android.graphics.Bitmap import android.graphics.Canvas import android.graphics.Matrix import android.net.Uri -import androidx.compose.runtime.* import androidx.compose.runtime.MutableState import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.ImageBitmap import androidx.compose.ui.graphics.asAndroidBitmap @@ -201,7 +201,7 @@ class MarkupLayersComponent @AssistedInject internal constructor( ) { savingJob = componentScope.launch { _isSaving.value = true - getDrawingBitmap()?.let { localBitmap -> + getDrawingBitmap().let { localBitmap -> onComplete( fileController.save( saveTarget = ImageSaveTarget( @@ -302,7 +302,7 @@ class MarkupLayersComponent @AssistedInject internal constructor( } } - private suspend fun getDrawingBitmap(): Bitmap? = withContext(defaultDispatcher) { + private suspend fun getDrawingBitmap(): Bitmap = withContext(defaultDispatcher) { coroutineScope { deactivateAllLayers() delay(500) @@ -313,9 +313,9 @@ class MarkupLayersComponent @AssistedInject internal constructor( layers.setHasAlpha(true) val background = imageGetter.getImage(data = _uri.value) ?: (backgroundBehavior as? BackgroundBehavior.Color)?.run { - ImageBitmap(width, height).asAndroidBitmap() - .applyCanvas { drawColor(color) } - } + ImageBitmap(width, height).asAndroidBitmap() + .applyCanvas { drawColor(color) } + } background?.overlay(layers) ?: layers } @@ -351,7 +351,7 @@ class MarkupLayersComponent @AssistedInject internal constructor( fun shareBitmap(onComplete: () -> Unit) { savingJob = componentScope.launch { _isSaving.value = true - getDrawingBitmap()?.let { + getDrawingBitmap().let { shareProvider.shareImage( image = it, imageInfo = ImageInfo( @@ -375,7 +375,7 @@ class MarkupLayersComponent @AssistedInject internal constructor( fun cacheCurrentImage(onComplete: (Uri) -> Unit) { savingJob = componentScope.launch { _isSaving.value = true - getDrawingBitmap()?.let { image -> + getDrawingBitmap().let { image -> shareProvider.cacheImage( image = image, imageInfo = ImageInfo( diff --git a/feature/media-picker/src/main/java/ru/tech/imageresizershrinker/feature/media_picker/data/utils/MediaObserver.kt b/feature/media-picker/src/main/java/ru/tech/imageresizershrinker/feature/media_picker/data/utils/MediaObserver.kt index 0e3907272..43a797520 100644 --- a/feature/media-picker/src/main/java/ru/tech/imageresizershrinker/feature/media_picker/data/utils/MediaObserver.kt +++ b/feature/media-picker/src/main/java/ru/tech/imageresizershrinker/feature/media_picker/data/utils/MediaObserver.kt @@ -26,11 +26,14 @@ import android.database.MergeCursor import android.net.Uri import android.os.Build import android.provider.MediaStore -import kotlinx.coroutines.* +import kotlinx.coroutines.Job import kotlinx.coroutines.channels.awaitClose +import kotlinx.coroutines.coroutineScope +import kotlinx.coroutines.delay import kotlinx.coroutines.flow.callbackFlow import kotlinx.coroutines.flow.conflate import kotlinx.coroutines.flow.onEach +import kotlinx.coroutines.launch import ru.tech.imageresizershrinker.feature.media_picker.domain.model.FULL_DATE_FORMAT import ru.tech.imageresizershrinker.feature.media_picker.domain.model.Media import ru.tech.imageresizershrinker.feature.media_picker.domain.model.MediaOrder diff --git a/feature/recognize-text/src/main/java/ru/tech/imageresizershrinker/feature/recognize/text/presentation/components/DownloadedLanguageItem.kt b/feature/recognize-text/src/main/java/ru/tech/imageresizershrinker/feature/recognize/text/presentation/components/DownloadedLanguageItem.kt index bf8c45af5..01f6da4c1 100644 --- a/feature/recognize-text/src/main/java/ru/tech/imageresizershrinker/feature/recognize/text/presentation/components/DownloadedLanguageItem.kt +++ b/feature/recognize-text/src/main/java/ru/tech/imageresizershrinker/feature/recognize/text/presentation/components/DownloadedLanguageItem.kt @@ -44,9 +44,9 @@ import androidx.compose.material3.LocalMinimumInteractiveComponentSize import androidx.compose.material3.LocalTextStyle import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Text -import androidx.compose.runtime.* import androidx.compose.runtime.Composable import androidx.compose.runtime.derivedStateOf +import androidx.compose.runtime.getValue import androidx.compose.runtime.remember import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.ui.Alignment diff --git a/feature/recognize-text/src/main/java/ru/tech/imageresizershrinker/feature/recognize/text/presentation/components/RecognizeLanguageSelectorSheetContent.kt b/feature/recognize-text/src/main/java/ru/tech/imageresizershrinker/feature/recognize/text/presentation/components/RecognizeLanguageSelectorSheetContent.kt index df5517265..254b7ed19 100644 --- a/feature/recognize-text/src/main/java/ru/tech/imageresizershrinker/feature/recognize/text/presentation/components/RecognizeLanguageSelectorSheetContent.kt +++ b/feature/recognize-text/src/main/java/ru/tech/imageresizershrinker/feature/recognize/text/presentation/components/RecognizeLanguageSelectorSheetContent.kt @@ -51,7 +51,6 @@ import ru.tech.imageresizershrinker.core.resources.R import ru.tech.imageresizershrinker.core.ui.widget.other.LoadingIndicator import ru.tech.imageresizershrinker.feature.recognize.text.domain.OCRLanguage import ru.tech.imageresizershrinker.feature.recognize.text.domain.RecognitionType -import kotlin.collections.indexOf @Composable internal fun RecognizeLanguageSelectorSheetContent(