diff --git a/core/data/src/main/java/ru/tech/imageresizershrinker/core/data/di/ImageModule.kt b/core/data/src/main/java/ru/tech/imageresizershrinker/core/data/di/ImageModule.kt index 7f80478f0..6382a9f0f 100644 --- a/core/data/src/main/java/ru/tech/imageresizershrinker/core/data/di/ImageModule.kt +++ b/core/data/src/main/java/ru/tech/imageresizershrinker/core/data/di/ImageModule.kt @@ -18,7 +18,6 @@ package ru.tech.imageresizershrinker.core.data.di import android.graphics.Bitmap -import androidx.exifinterface.media.ExifInterface import dagger.Binds import dagger.Module import dagger.hilt.InstallIn diff --git a/core/data/src/main/java/ru/tech/imageresizershrinker/core/data/image/AndroidImageCompressor.kt b/core/data/src/main/java/ru/tech/imageresizershrinker/core/data/image/AndroidImageCompressor.kt index 6717f681a..7baf39445 100644 --- a/core/data/src/main/java/ru/tech/imageresizershrinker/core/data/image/AndroidImageCompressor.kt +++ b/core/data/src/main/java/ru/tech/imageresizershrinker/core/data/image/AndroidImageCompressor.kt @@ -22,7 +22,6 @@ package ru.tech.imageresizershrinker.core.data.image import android.content.Context import android.graphics.Bitmap import androidx.core.net.toUri -import androidx.exifinterface.media.ExifInterface import com.t8rin.trickle.Trickle import dagger.Lazy import dagger.hilt.android.qualifiers.ApplicationContext diff --git a/core/data/src/main/java/ru/tech/imageresizershrinker/core/data/image/AndroidImageGetter.kt b/core/data/src/main/java/ru/tech/imageresizershrinker/core/data/image/AndroidImageGetter.kt index 9d0ef3dc5..e47a98fc5 100644 --- a/core/data/src/main/java/ru/tech/imageresizershrinker/core/data/image/AndroidImageGetter.kt +++ b/core/data/src/main/java/ru/tech/imageresizershrinker/core/data/image/AndroidImageGetter.kt @@ -22,7 +22,6 @@ import android.content.Context import android.graphics.Bitmap import android.webkit.MimeTypeMap import androidx.core.net.toUri -import androidx.exifinterface.media.ExifInterface import coil3.ImageLoader import coil3.gif.repeatCount import coil3.request.ImageRequest @@ -85,21 +84,19 @@ internal class AndroidImageGetter @Inject constructor( onFailure = onFailure )?.let { bitmap -> val newUri = uri.toUri().tryRequireOriginal(context) - - val fd = context.contentResolver.openFileDescriptor(newUri, "r") - val exif = fd?.fileDescriptor?.let { ExifInterface(it) } - fd?.close() - ImageData( - image = bitmap, - imageInfo = ImageInfo( - width = bitmap.width, - height = bitmap.height, - imageFormat = ImageFormat[getExtension(uri)], - originalUri = uri, - resizeType = settingsState.defaultResizeType - ), - metadata = exif?.toMetadata() - ) + context.contentResolver.openFileDescriptor(newUri, "r").use { + ImageData( + image = bitmap, + imageInfo = ImageInfo( + width = bitmap.width, + height = bitmap.height, + imageFormat = ImageFormat[getExtension(uri)], + originalUri = uri, + resizeType = settingsState.defaultResizeType + ), + metadata = it?.fileDescriptor?.toMetadata() + ) + } } } @@ -145,20 +142,19 @@ internal class AndroidImageGetter @Inject constructor( addSizeToRequest = originalSize )?.let { bitmap -> val newUri = uri.toUri().tryRequireOriginal(context) - val fd = context.contentResolver.openFileDescriptor(newUri, "r") - val exif = fd?.fileDescriptor?.let { ExifInterface(it) } - fd?.close() - ImageData( - image = bitmap, - imageInfo = ImageInfo( - width = bitmap.width, - height = bitmap.height, - imageFormat = ImageFormat[getExtension(uri)], - originalUri = uri, - resizeType = settingsState.defaultResizeType - ), - metadata = exif?.toMetadata() - ) + context.contentResolver.openFileDescriptor(newUri, "r").use { + ImageData( + image = bitmap, + imageInfo = ImageInfo( + width = bitmap.width, + height = bitmap.height, + imageFormat = ImageFormat[getExtension(uri)], + originalUri = uri, + resizeType = settingsState.defaultResizeType + ), + metadata = it?.fileDescriptor?.toMetadata() + ) + } } } diff --git a/core/data/src/main/java/ru/tech/imageresizershrinker/core/data/image/AndroidImagePreviewCreator.kt b/core/data/src/main/java/ru/tech/imageresizershrinker/core/data/image/AndroidImagePreviewCreator.kt index c57f8e66b..38d1daa7f 100644 --- a/core/data/src/main/java/ru/tech/imageresizershrinker/core/data/image/AndroidImagePreviewCreator.kt +++ b/core/data/src/main/java/ru/tech/imageresizershrinker/core/data/image/AndroidImagePreviewCreator.kt @@ -19,7 +19,6 @@ package ru.tech.imageresizershrinker.core.data.image import android.graphics.Bitmap import android.os.Build -import androidx.exifinterface.media.ExifInterface import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.onEach diff --git a/core/data/src/main/java/ru/tech/imageresizershrinker/core/data/image/AndroidMetadata.kt b/core/data/src/main/java/ru/tech/imageresizershrinker/core/data/image/AndroidMetadata.kt index b4f6acb8c..ee9058e3e 100644 --- a/core/data/src/main/java/ru/tech/imageresizershrinker/core/data/image/AndroidMetadata.kt +++ b/core/data/src/main/java/ru/tech/imageresizershrinker/core/data/image/AndroidMetadata.kt @@ -19,27 +19,30 @@ package ru.tech.imageresizershrinker.core.data.image import androidx.exifinterface.media.ExifInterface import ru.tech.imageresizershrinker.core.domain.image.Metadata +import ru.tech.imageresizershrinker.core.domain.image.model.MetadataTag +import java.io.FileDescriptor -private data class AndroidMetadata( +private data class ExifInterfaceMetadata( private val exifInterface: ExifInterface ) : Metadata { override fun saveAttributes() = exifInterface.saveAttributes() - override fun getAttribute(tag: String): String? = exifInterface.getAttribute(tag) + override fun getAttribute(tag: MetadataTag): String? = exifInterface.getAttribute(tag.key) override fun setAttribute( - tag: String, + tag: MetadataTag, value: String? - ) = exifInterface.setAttribute(tag, value) + ) = exifInterface.setAttribute(tag.key, value) - override fun removeAttribute( - tag: String + override fun clearAttribute( + tag: MetadataTag ) = setAttribute( tag = tag, value = null ) - } -internal fun ExifInterface.toMetadata(): Metadata = AndroidMetadata(this) \ No newline at end of file +internal fun ExifInterface.toMetadata(): Metadata = ExifInterfaceMetadata(this) + +internal fun FileDescriptor.toMetadata(): Metadata = ExifInterface(this).toMetadata() \ No newline at end of file diff --git a/core/data/src/main/java/ru/tech/imageresizershrinker/core/data/utils/ContextUtils.kt b/core/data/src/main/java/ru/tech/imageresizershrinker/core/data/utils/ContextUtils.kt index 650cc6917..b203d1686 100644 --- a/core/data/src/main/java/ru/tech/imageresizershrinker/core/data/utils/ContextUtils.kt +++ b/core/data/src/main/java/ru/tech/imageresizershrinker/core/data/utils/ContextUtils.kt @@ -24,11 +24,11 @@ import android.net.Uri import android.os.Build import androidx.compose.ui.unit.Density import androidx.core.content.ContextCompat -import androidx.exifinterface.media.ExifInterface import kotlinx.coroutines.coroutineScope import ru.tech.imageresizershrinker.core.data.image.toMetadata import ru.tech.imageresizershrinker.core.domain.image.Metadata -import ru.tech.imageresizershrinker.core.domain.image.model.MetadataTag +import ru.tech.imageresizershrinker.core.domain.image.clearAllAttributes +import ru.tech.imageresizershrinker.core.domain.image.copyTo import ru.tech.imageresizershrinker.core.domain.utils.readableByteCount import ru.tech.imageresizershrinker.core.domain.utils.runSuspendCatching import java.io.OutputStream @@ -49,41 +49,27 @@ suspend fun Context.copyMetadata( ) = runSuspendCatching { if (initialExif != null) { getFileDescriptorFor(fileUri)?.use { - val ex = ExifInterface(it.fileDescriptor) - initialExif.copyTo(ex.toMetadata()) - ex.saveAttributes() + initialExif.copyTo(it.fileDescriptor.toMetadata()) } } else if (keepOriginalMetadata) { val newUri = originalUri.tryRequireOriginal(this) val exif = contentResolver .openFileDescriptor(newUri, "r") - ?.use { ExifInterface(it.fileDescriptor) } + ?.use { it.fileDescriptor.toMetadata() } getFileDescriptorFor(fileUri)?.use { - val ex = ExifInterface(it.fileDescriptor).toMetadata() - exif?.toMetadata()?.copyTo(ex) - ex.saveAttributes() + exif?.copyTo(it.fileDescriptor.toMetadata()) } } else { getFileDescriptorFor(fileUri)?.use { - val ex = ExifInterface(it.fileDescriptor) - MetadataTag.entries.forEach { tag -> - ex.setAttribute(tag.key, null) + it.fileDescriptor.toMetadata().apply { + clearAllAttributes() + saveAttributes() } - ex.saveAttributes() } } } -suspend infix fun Metadata.copyTo( - newExif: Metadata -) = coroutineScope { - MetadataTag.entries.forEach { attr -> - getAttribute(attr.key).let { newExif.setAttribute(attr.key, it) } - } - newExif.saveAttributes() -} - fun Context.openWriteableStream( uri: Uri?, onFailure: (Throwable) -> Unit = {} diff --git a/core/domain/src/main/kotlin/ru/tech/imageresizershrinker/core/domain/image/Metadata.kt b/core/domain/src/main/kotlin/ru/tech/imageresizershrinker/core/domain/image/Metadata.kt index 036f86e7a..ae6d3f097 100644 --- a/core/domain/src/main/kotlin/ru/tech/imageresizershrinker/core/domain/image/Metadata.kt +++ b/core/domain/src/main/kotlin/ru/tech/imageresizershrinker/core/domain/image/Metadata.kt @@ -17,15 +17,40 @@ package ru.tech.imageresizershrinker.core.domain.image +import ru.tech.imageresizershrinker.core.domain.image.model.MetadataTag + interface Metadata { fun saveAttributes() - fun getAttribute(tag: String): String? + fun getAttribute(tag: MetadataTag): String? fun setAttribute( - tag: String, + tag: MetadataTag, value: String? ) - fun removeAttribute(tag: String) + fun clearAttribute(tag: MetadataTag) +} + +fun Metadata.clearAttributes( + attributes: List +): Metadata = apply { + attributes.forEach(::clearAttribute) +} + +fun Metadata.clearAllAttributes() = clearAttributes(attributes = MetadataTag.entries) + +fun Metadata.toMap(): Map = mutableMapOf().apply { + MetadataTag.entries.forEach { tag -> + getAttribute(tag)?.let { put(tag, it) } + } +} + +fun Metadata.copyTo(metadata: Metadata): Metadata { + MetadataTag.entries.forEach { attr -> + getAttribute(attr).let { metadata.setAttribute(attr, it) } + } + metadata.saveAttributes() + + return metadata } \ No newline at end of file diff --git a/core/ui/src/main/kotlin/ru/tech/imageresizershrinker/core/ui/utils/helper/ImageUtils.kt b/core/ui/src/main/kotlin/ru/tech/imageresizershrinker/core/ui/utils/helper/ImageUtils.kt index 065c7f9f9..360ff7bb2 100644 --- a/core/ui/src/main/kotlin/ru/tech/imageresizershrinker/core/ui/utils/helper/ImageUtils.kt +++ b/core/ui/src/main/kotlin/ru/tech/imageresizershrinker/core/ui/utils/helper/ImageUtils.kt @@ -31,9 +31,8 @@ import androidx.compose.ui.graphics.ImageBitmap import androidx.compose.ui.platform.LocalContext import androidx.core.graphics.BitmapCompat import androidx.core.graphics.drawable.toBitmap +import androidx.core.graphics.scale import androidx.core.text.isDigitsOnly -import androidx.exifinterface.media.ExifInterface -import ru.tech.imageresizershrinker.core.domain.image.Metadata import ru.tech.imageresizershrinker.core.domain.image.model.ImageInfo import ru.tech.imageresizershrinker.core.domain.image.model.MetadataTag import ru.tech.imageresizershrinker.core.resources.R @@ -45,14 +44,6 @@ object ImageUtils { fun Drawable.toBitmap(): Bitmap = toBitmap(config = getSuitableConfig()) - fun Metadata.toMap(): Map { - val hashMap = HashMap() - MetadataTag.entries.forEach { tag -> - getAttribute(tag.key)?.let { hashMap[tag] = it } - } - return hashMap - } - fun MetadataTag.localizedName( context: Context, locale: Locale? = null @@ -283,9 +274,7 @@ object ImageUtils { true ) } else { - Bitmap.createScaledBitmap( - this, width, height, true - ) + this.scale(width, height) } } diff --git a/core/ui/src/main/kotlin/ru/tech/imageresizershrinker/core/ui/widget/sheets/EditExifSheet.kt b/core/ui/src/main/kotlin/ru/tech/imageresizershrinker/core/ui/widget/sheets/EditExifSheet.kt index 1ca27f3a6..7a81da3af 100644 --- a/core/ui/src/main/kotlin/ru/tech/imageresizershrinker/core/ui/widget/sheets/EditExifSheet.kt +++ b/core/ui/src/main/kotlin/ru/tech/imageresizershrinker/core/ui/widget/sheets/EditExifSheet.kt @@ -58,13 +58,12 @@ import androidx.compose.ui.text.input.ImeAction import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp -import androidx.exifinterface.media.ExifInterface import ru.tech.imageresizershrinker.core.domain.image.Metadata import ru.tech.imageresizershrinker.core.domain.image.model.MetadataTag +import ru.tech.imageresizershrinker.core.domain.image.toMap import ru.tech.imageresizershrinker.core.resources.R import ru.tech.imageresizershrinker.core.resources.icons.Exif import ru.tech.imageresizershrinker.core.ui.utils.helper.ImageUtils.localizedName -import ru.tech.imageresizershrinker.core.ui.utils.helper.ImageUtils.toMap import ru.tech.imageresizershrinker.core.ui.widget.enhanced.EnhancedAlertDialog import ru.tech.imageresizershrinker.core.ui.widget.enhanced.EnhancedBottomSheetDefaults import ru.tech.imageresizershrinker.core.ui.widget.enhanced.EnhancedButton diff --git a/feature/apng-tools/src/main/java/ru/tech/imageresizershrinker/feature/apng_tools/presentation/screenLogic/ApngToolsComponent.kt b/feature/apng-tools/src/main/java/ru/tech/imageresizershrinker/feature/apng_tools/presentation/screenLogic/ApngToolsComponent.kt index 33293456d..7420e271b 100644 --- a/feature/apng-tools/src/main/java/ru/tech/imageresizershrinker/feature/apng_tools/presentation/screenLogic/ApngToolsComponent.kt +++ b/feature/apng-tools/src/main/java/ru/tech/imageresizershrinker/feature/apng_tools/presentation/screenLogic/ApngToolsComponent.kt @@ -26,7 +26,6 @@ import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableIntStateOf import androidx.compose.runtime.mutableStateOf import androidx.core.net.toUri -import androidx.exifinterface.media.ExifInterface import com.arkivanov.decompose.ComponentContext import dagger.assisted.Assisted import dagger.assisted.AssistedFactory diff --git a/feature/audio-cover-extractor/src/main/java/ru/tech/imageresizershrinker/feature/audio_cover_extractor/ui/screenLogic/AudioCoverExtractorComponent.kt b/feature/audio-cover-extractor/src/main/java/ru/tech/imageresizershrinker/feature/audio_cover_extractor/ui/screenLogic/AudioCoverExtractorComponent.kt index f3614201c..218e71fde 100644 --- a/feature/audio-cover-extractor/src/main/java/ru/tech/imageresizershrinker/feature/audio_cover_extractor/ui/screenLogic/AudioCoverExtractorComponent.kt +++ b/feature/audio-cover-extractor/src/main/java/ru/tech/imageresizershrinker/feature/audio_cover_extractor/ui/screenLogic/AudioCoverExtractorComponent.kt @@ -24,7 +24,6 @@ import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableIntStateOf import androidx.compose.runtime.mutableStateOf import androidx.core.net.toUri -import androidx.exifinterface.media.ExifInterface import com.arkivanov.decompose.ComponentContext import dagger.assisted.Assisted import dagger.assisted.AssistedFactory 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 26bd33929..b8c67861b 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 @@ -23,7 +23,6 @@ import androidx.compose.runtime.MutableState import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.core.net.toUri -import androidx.exifinterface.media.ExifInterface import com.arkivanov.decompose.ComponentContext import dagger.assisted.Assisted import dagger.assisted.AssistedFactory diff --git a/feature/collage-maker/src/main/java/ru/tech/imageresizershrinker/collage_maker/presentation/screenLogic/CollageMakerComponent.kt b/feature/collage-maker/src/main/java/ru/tech/imageresizershrinker/collage_maker/presentation/screenLogic/CollageMakerComponent.kt index 60069613c..6e56d41dd 100644 --- a/feature/collage-maker/src/main/java/ru/tech/imageresizershrinker/collage_maker/presentation/screenLogic/CollageMakerComponent.kt +++ b/feature/collage-maker/src/main/java/ru/tech/imageresizershrinker/collage_maker/presentation/screenLogic/CollageMakerComponent.kt @@ -25,7 +25,6 @@ import androidx.compose.runtime.mutableFloatStateOf import androidx.compose.runtime.mutableStateOf import androidx.compose.ui.graphics.Color import androidx.core.net.toUri -import androidx.exifinterface.media.ExifInterface import com.arkivanov.decompose.ComponentContext import com.t8rin.collages.CollageType import dagger.assisted.Assisted diff --git a/feature/compare/src/main/java/ru/tech/imageresizershrinker/feature/compare/presentation/screenLogic/CompareComponent.kt b/feature/compare/src/main/java/ru/tech/imageresizershrinker/feature/compare/presentation/screenLogic/CompareComponent.kt index 46b2dbc54..afc586b67 100644 --- a/feature/compare/src/main/java/ru/tech/imageresizershrinker/feature/compare/presentation/screenLogic/CompareComponent.kt +++ b/feature/compare/src/main/java/ru/tech/imageresizershrinker/feature/compare/presentation/screenLogic/CompareComponent.kt @@ -25,7 +25,6 @@ import androidx.compose.runtime.mutableFloatStateOf import androidx.compose.runtime.mutableStateOf import androidx.compose.ui.graphics.toArgb import androidx.core.net.toUri -import androidx.exifinterface.media.ExifInterface import coil3.transform.Transformation import com.arkivanov.decompose.ComponentContext import com.t8rin.opencv_tools.image_comparison.ImageDiffTool diff --git a/feature/crop/src/main/java/ru/tech/imageresizershrinker/feature/crop/presentation/screenLogic/CropComponent.kt b/feature/crop/src/main/java/ru/tech/imageresizershrinker/feature/crop/presentation/screenLogic/CropComponent.kt index cf10a7b06..ed425bb06 100644 --- a/feature/crop/src/main/java/ru/tech/imageresizershrinker/feature/crop/presentation/screenLogic/CropComponent.kt +++ b/feature/crop/src/main/java/ru/tech/imageresizershrinker/feature/crop/presentation/screenLogic/CropComponent.kt @@ -23,7 +23,6 @@ import androidx.compose.runtime.MutableState import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.core.net.toUri -import androidx.exifinterface.media.ExifInterface import com.arkivanov.decompose.ComponentContext import com.smarttoolfactory.cropper.model.AspectRatio import com.smarttoolfactory.cropper.model.OutlineType diff --git a/feature/delete-exif/src/main/java/ru/tech/imageresizershrinker/feature/delete_exif/presentation/screenLogic/DeleteExifComponent.kt b/feature/delete-exif/src/main/java/ru/tech/imageresizershrinker/feature/delete_exif/presentation/screenLogic/DeleteExifComponent.kt index 990076bca..c3ffab3e1 100644 --- a/feature/delete-exif/src/main/java/ru/tech/imageresizershrinker/feature/delete_exif/presentation/screenLogic/DeleteExifComponent.kt +++ b/feature/delete-exif/src/main/java/ru/tech/imageresizershrinker/feature/delete_exif/presentation/screenLogic/DeleteExifComponent.kt @@ -34,6 +34,7 @@ import ru.tech.imageresizershrinker.core.domain.dispatchers.DispatchersHolder import ru.tech.imageresizershrinker.core.domain.image.ImageGetter import ru.tech.imageresizershrinker.core.domain.image.ImageScaler import ru.tech.imageresizershrinker.core.domain.image.ShareProvider +import ru.tech.imageresizershrinker.core.domain.image.clearAttributes import ru.tech.imageresizershrinker.core.domain.image.model.MetadataTag import ru.tech.imageresizershrinker.core.domain.saving.FileController import ru.tech.imageresizershrinker.core.domain.saving.FilenameCreator @@ -156,11 +157,7 @@ class DeleteExifComponent @AssistedInject internal constructor( imageGetter.getImage(uri.toString()) }.getOrNull()?.let { val metadata = if (selectedTags.isNotEmpty()) { - it.metadata?.apply { - selectedTags.forEach { tag -> - setAttribute(tag.key, null) - } - } + it.metadata?.clearAttributes(selectedTags) } else null results.add( @@ -254,11 +251,7 @@ class DeleteExifComponent @AssistedInject internal constructor( uri.toString() )?.let { val metadata = if (selectedTags.isNotEmpty()) { - it.metadata?.apply { - selectedTags.forEach { tag -> - setAttribute(tag.key, null) - } - } + it.metadata?.clearAttributes(selectedTags) } else null shareProvider.cacheData( diff --git a/feature/document-scanner/src/main/java/ru/tech/imageresizershrinker/feature/document_scanner/presentation/screenLogic/DocumentScannerComponent.kt b/feature/document-scanner/src/main/java/ru/tech/imageresizershrinker/feature/document_scanner/presentation/screenLogic/DocumentScannerComponent.kt index 0ece4fb43..7d0f4b578 100644 --- a/feature/document-scanner/src/main/java/ru/tech/imageresizershrinker/feature/document_scanner/presentation/screenLogic/DocumentScannerComponent.kt +++ b/feature/document-scanner/src/main/java/ru/tech/imageresizershrinker/feature/document_scanner/presentation/screenLogic/DocumentScannerComponent.kt @@ -24,7 +24,6 @@ import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableIntStateOf import androidx.compose.runtime.mutableStateOf import androidx.core.net.toUri -import androidx.exifinterface.media.ExifInterface import com.arkivanov.decompose.ComponentContext import dagger.assisted.Assisted import dagger.assisted.AssistedFactory diff --git a/feature/draw/src/main/java/ru/tech/imageresizershrinker/feature/draw/data/AndroidImageDrawApplier.kt b/feature/draw/src/main/java/ru/tech/imageresizershrinker/feature/draw/data/AndroidImageDrawApplier.kt index 8498a243c..c177b5a33 100644 --- a/feature/draw/src/main/java/ru/tech/imageresizershrinker/feature/draw/data/AndroidImageDrawApplier.kt +++ b/feature/draw/src/main/java/ru/tech/imageresizershrinker/feature/draw/data/AndroidImageDrawApplier.kt @@ -46,7 +46,7 @@ import androidx.compose.ui.graphics.toArgb import androidx.compose.ui.unit.LayoutDirection import androidx.core.content.res.ResourcesCompat import androidx.core.graphics.applyCanvas -import androidx.exifinterface.media.ExifInterface +import androidx.core.graphics.createBitmap import dagger.hilt.android.qualifiers.ApplicationContext import ru.tech.imageresizershrinker.core.data.utils.density import ru.tech.imageresizershrinker.core.data.utils.safeConfig @@ -92,11 +92,7 @@ internal class AndroidImageDrawApplier @Inject constructor( } is DrawBehavior.Background -> { - Bitmap.createBitmap( - drawBehavior.width, - drawBehavior.height, - Bitmap.Config.ARGB_8888 - ).apply { + createBitmap(drawBehavior.width, drawBehavior.height).apply { val canvas = Canvas(this) val paint = NativePaint().apply { color = drawBehavior.color @@ -192,10 +188,9 @@ internal class AndroidImageDrawApplier @Inject constructor( val filter = filterProvider.filterToTransformation( createFilter, Filter.SpotHeal>( Triple( - first = Bitmap.createBitmap( + first = createBitmap( canvasSize.width, - canvasSize.height, - Bitmap.Config.ARGB_8888 + canvasSize.height ).applyCanvas { drawColor(Color.Black.toArgb()) drawPath( @@ -531,7 +526,7 @@ internal class AndroidImageDrawApplier @Inject constructor( private fun Bitmap.overlay(overlay: Bitmap): Bitmap { val image = this val config = safeConfig.toSoftware() - val finalBitmap = Bitmap.createBitmap(image.width, image.height, config) + val finalBitmap = createBitmap(image.width, image.height, config) val canvas = Canvas(finalBitmap) canvas.drawBitmap(image, Matrix(), null) canvas.drawBitmap(overlay.toSoftware(), 0f, 0f, null) diff --git a/feature/draw/src/main/java/ru/tech/imageresizershrinker/feature/draw/presentation/screenLogic/DrawComponent.kt b/feature/draw/src/main/java/ru/tech/imageresizershrinker/feature/draw/presentation/screenLogic/DrawComponent.kt index b4abf9aae..48db73700 100644 --- a/feature/draw/src/main/java/ru/tech/imageresizershrinker/feature/draw/presentation/screenLogic/DrawComponent.kt +++ b/feature/draw/src/main/java/ru/tech/imageresizershrinker/feature/draw/presentation/screenLogic/DrawComponent.kt @@ -27,7 +27,6 @@ import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.Path import androidx.compose.ui.graphics.toArgb import androidx.core.net.toUri -import androidx.exifinterface.media.ExifInterface import com.arkivanov.decompose.ComponentContext import com.arkivanov.decompose.childContext import dagger.assisted.Assisted diff --git a/feature/edit-exif/src/main/java/ru/tech/imageresizershrinker/feature/edit_exif/presentation/screenLogic/EditExifComponent.kt b/feature/edit-exif/src/main/java/ru/tech/imageresizershrinker/feature/edit_exif/presentation/screenLogic/EditExifComponent.kt index e530eb0b3..8909fe397 100644 --- a/feature/edit-exif/src/main/java/ru/tech/imageresizershrinker/feature/edit_exif/presentation/screenLogic/EditExifComponent.kt +++ b/feature/edit-exif/src/main/java/ru/tech/imageresizershrinker/feature/edit_exif/presentation/screenLogic/EditExifComponent.kt @@ -32,6 +32,7 @@ import ru.tech.imageresizershrinker.core.domain.dispatchers.DispatchersHolder import ru.tech.imageresizershrinker.core.domain.image.ImageGetter import ru.tech.imageresizershrinker.core.domain.image.Metadata import ru.tech.imageresizershrinker.core.domain.image.ShareProvider +import ru.tech.imageresizershrinker.core.domain.image.clearAllAttributes import ru.tech.imageresizershrinker.core.domain.image.model.ImageFormat import ru.tech.imageresizershrinker.core.domain.image.model.MetadataTag import ru.tech.imageresizershrinker.core.domain.saving.FileController @@ -160,13 +161,8 @@ class EditExifComponent @AssistedInject internal constructor( } fun clearExif() { - val tempExif = _exif.value - MetadataTag.entries.forEach { - tempExif?.setAttribute(it.key, null) - } - _exif.update { - tempExif - } + val tempExif = _exif.value?.clearAllAttributes() + _exif.update { tempExif } registerChanges() } @@ -177,7 +173,7 @@ class EditExifComponent @AssistedInject internal constructor( fun removeExifTag(tag: MetadataTag) { val exifInterface = _exif.value - exifInterface?.setAttribute(tag.key, null) + exifInterface?.clearAttribute(tag) updateExif(exifInterface) } @@ -186,7 +182,7 @@ class EditExifComponent @AssistedInject internal constructor( value: String, ) { val exifInterface = _exif.value - exifInterface?.setAttribute(tag.key, value) + exifInterface?.setAttribute(tag, value) updateExif(exifInterface) } diff --git a/feature/erase-background/src/main/java/ru/tech/imageresizershrinker/feature/erase_background/presentation/screenLogic/EraseBackgroundComponent.kt b/feature/erase-background/src/main/java/ru/tech/imageresizershrinker/feature/erase_background/presentation/screenLogic/EraseBackgroundComponent.kt index c79eb4f54..cbdd8e289 100644 --- a/feature/erase-background/src/main/java/ru/tech/imageresizershrinker/feature/erase_background/presentation/screenLogic/EraseBackgroundComponent.kt +++ b/feature/erase-background/src/main/java/ru/tech/imageresizershrinker/feature/erase_background/presentation/screenLogic/EraseBackgroundComponent.kt @@ -25,7 +25,6 @@ import androidx.compose.runtime.mutableStateOf import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.Path import androidx.core.net.toUri -import androidx.exifinterface.media.ExifInterface import com.arkivanov.decompose.ComponentContext import dagger.assisted.Assisted import dagger.assisted.AssistedFactory diff --git a/feature/filters/src/main/java/ru/tech/imageresizershrinker/feature/filters/data/model/LUT512x512Filter.kt b/feature/filters/src/main/java/ru/tech/imageresizershrinker/feature/filters/data/model/LUT512x512Filter.kt index c0a89126d..44de12cad 100644 --- a/feature/filters/src/main/java/ru/tech/imageresizershrinker/feature/filters/data/model/LUT512x512Filter.kt +++ b/feature/filters/src/main/java/ru/tech/imageresizershrinker/feature/filters/data/model/LUT512x512Filter.kt @@ -18,7 +18,6 @@ package ru.tech.imageresizershrinker.feature.filters.data.model import android.graphics.Bitmap -import androidx.exifinterface.media.ExifInterface import com.t8rin.trickle.Trickle import dagger.assisted.Assisted import dagger.assisted.AssistedFactory diff --git a/feature/filters/src/main/java/ru/tech/imageresizershrinker/feature/filters/data/model/PaletteTransferFilter.kt b/feature/filters/src/main/java/ru/tech/imageresizershrinker/feature/filters/data/model/PaletteTransferFilter.kt index 7cc1dbb8d..ca2487c3b 100644 --- a/feature/filters/src/main/java/ru/tech/imageresizershrinker/feature/filters/data/model/PaletteTransferFilter.kt +++ b/feature/filters/src/main/java/ru/tech/imageresizershrinker/feature/filters/data/model/PaletteTransferFilter.kt @@ -18,7 +18,6 @@ package ru.tech.imageresizershrinker.feature.filters.data.model import android.graphics.Bitmap -import androidx.exifinterface.media.ExifInterface import com.t8rin.trickle.Trickle import dagger.assisted.Assisted import dagger.assisted.AssistedFactory diff --git a/feature/filters/src/main/java/ru/tech/imageresizershrinker/feature/filters/data/model/PaletteTransferVariantFilter.kt b/feature/filters/src/main/java/ru/tech/imageresizershrinker/feature/filters/data/model/PaletteTransferVariantFilter.kt index 50a5fcae2..725bc2bb7 100644 --- a/feature/filters/src/main/java/ru/tech/imageresizershrinker/feature/filters/data/model/PaletteTransferVariantFilter.kt +++ b/feature/filters/src/main/java/ru/tech/imageresizershrinker/feature/filters/data/model/PaletteTransferVariantFilter.kt @@ -18,7 +18,6 @@ package ru.tech.imageresizershrinker.feature.filters.data.model import android.graphics.Bitmap -import androidx.exifinterface.media.ExifInterface import com.awxkee.aire.Aire import dagger.assisted.Assisted import dagger.assisted.AssistedFactory diff --git a/feature/filters/src/main/java/ru/tech/imageresizershrinker/feature/filters/data/model/SpotHealFilter.kt b/feature/filters/src/main/java/ru/tech/imageresizershrinker/feature/filters/data/model/SpotHealFilter.kt index 4b53b68c8..1833b2e16 100644 --- a/feature/filters/src/main/java/ru/tech/imageresizershrinker/feature/filters/data/model/SpotHealFilter.kt +++ b/feature/filters/src/main/java/ru/tech/imageresizershrinker/feature/filters/data/model/SpotHealFilter.kt @@ -18,7 +18,6 @@ package ru.tech.imageresizershrinker.feature.filters.data.model import android.graphics.Bitmap -import androidx.exifinterface.media.ExifInterface import com.t8rin.opencv_tools.spot_heal.SpotHealer import dagger.assisted.Assisted import dagger.assisted.AssistedFactory diff --git a/feature/filters/src/main/java/ru/tech/imageresizershrinker/feature/filters/presentation/screenLogic/FiltersComponent.kt b/feature/filters/src/main/java/ru/tech/imageresizershrinker/feature/filters/presentation/screenLogic/FiltersComponent.kt index 05b24c92a..5e32f3b52 100644 --- a/feature/filters/src/main/java/ru/tech/imageresizershrinker/feature/filters/presentation/screenLogic/FiltersComponent.kt +++ b/feature/filters/src/main/java/ru/tech/imageresizershrinker/feature/filters/presentation/screenLogic/FiltersComponent.kt @@ -26,7 +26,6 @@ import androidx.compose.runtime.mutableStateOf import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.Path import androidx.core.net.toUri -import androidx.exifinterface.media.ExifInterface import coil3.transform.Transformation import com.arkivanov.decompose.ComponentContext import com.arkivanov.decompose.childContext diff --git a/feature/format-conversion/src/main/java/ru/tech/imageresizershrinker/feature/format_conversion/presentation/screenLogic/FormatConversionComponent.kt b/feature/format-conversion/src/main/java/ru/tech/imageresizershrinker/feature/format_conversion/presentation/screenLogic/FormatConversionComponent.kt index cd752830e..5cb6884a6 100644 --- a/feature/format-conversion/src/main/java/ru/tech/imageresizershrinker/feature/format_conversion/presentation/screenLogic/FormatConversionComponent.kt +++ b/feature/format-conversion/src/main/java/ru/tech/imageresizershrinker/feature/format_conversion/presentation/screenLogic/FormatConversionComponent.kt @@ -24,7 +24,6 @@ import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableIntStateOf import androidx.compose.runtime.mutableStateOf import androidx.core.net.toUri -import androidx.exifinterface.media.ExifInterface import com.arkivanov.decompose.ComponentContext import dagger.assisted.Assisted import dagger.assisted.AssistedFactory diff --git a/feature/generate-palette/src/main/java/ru/tech/imageresizershrinker/feature/generate_palette/presentation/screenLogic/GeneratePaletteComponent.kt b/feature/generate-palette/src/main/java/ru/tech/imageresizershrinker/feature/generate_palette/presentation/screenLogic/GeneratePaletteComponent.kt index a7fcfa3e7..e3c171318 100644 --- a/feature/generate-palette/src/main/java/ru/tech/imageresizershrinker/feature/generate_palette/presentation/screenLogic/GeneratePaletteComponent.kt +++ b/feature/generate-palette/src/main/java/ru/tech/imageresizershrinker/feature/generate_palette/presentation/screenLogic/GeneratePaletteComponent.kt @@ -22,7 +22,6 @@ import android.net.Uri import androidx.compose.runtime.MutableState import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf -import androidx.exifinterface.media.ExifInterface import com.arkivanov.decompose.ComponentContext import dagger.assisted.Assisted import dagger.assisted.AssistedFactory diff --git a/feature/gif-tools/src/main/java/ru/tech/imageresizershrinker/feature/gif_tools/presentation/screenLogic/GifToolsComponent.kt b/feature/gif-tools/src/main/java/ru/tech/imageresizershrinker/feature/gif_tools/presentation/screenLogic/GifToolsComponent.kt index ec746f72c..b4ba4f961 100644 --- a/feature/gif-tools/src/main/java/ru/tech/imageresizershrinker/feature/gif_tools/presentation/screenLogic/GifToolsComponent.kt +++ b/feature/gif-tools/src/main/java/ru/tech/imageresizershrinker/feature/gif_tools/presentation/screenLogic/GifToolsComponent.kt @@ -25,7 +25,6 @@ import androidx.compose.runtime.MutableState import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableIntStateOf import androidx.compose.runtime.mutableStateOf -import androidx.exifinterface.media.ExifInterface import com.arkivanov.decompose.ComponentContext import dagger.assisted.Assisted import dagger.assisted.AssistedFactory diff --git a/feature/gradient-maker/src/main/java/ru/tech/imageresizershrinker/feature/gradient_maker/presentation/screenLogic/GradientMakerComponent.kt b/feature/gradient-maker/src/main/java/ru/tech/imageresizershrinker/feature/gradient_maker/presentation/screenLogic/GradientMakerComponent.kt index 5d3449a8f..b62e7d855 100644 --- a/feature/gradient-maker/src/main/java/ru/tech/imageresizershrinker/feature/gradient_maker/presentation/screenLogic/GradientMakerComponent.kt +++ b/feature/gradient-maker/src/main/java/ru/tech/imageresizershrinker/feature/gradient_maker/presentation/screenLogic/GradientMakerComponent.kt @@ -30,7 +30,6 @@ import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.ShaderBrush import androidx.compose.ui.graphics.TileMode import androidx.core.net.toUri -import androidx.exifinterface.media.ExifInterface import coil3.transform.Transformation import com.arkivanov.decompose.ComponentContext import dagger.assisted.Assisted diff --git a/feature/image-cutting/src/main/java/ru/tech/imageresizershrinker/image_cutting/data/AndroidImageCutter.kt b/feature/image-cutting/src/main/java/ru/tech/imageresizershrinker/image_cutting/data/AndroidImageCutter.kt index 643aa4f1a..d0b93cc67 100644 --- a/feature/image-cutting/src/main/java/ru/tech/imageresizershrinker/image_cutting/data/AndroidImageCutter.kt +++ b/feature/image-cutting/src/main/java/ru/tech/imageresizershrinker/image_cutting/data/AndroidImageCutter.kt @@ -19,7 +19,7 @@ package ru.tech.imageresizershrinker.image_cutting.data import android.graphics.Bitmap import androidx.core.graphics.applyCanvas -import androidx.exifinterface.media.ExifInterface +import androidx.core.graphics.createBitmap import kotlinx.coroutines.coroutineScope import kotlinx.coroutines.withContext import ru.tech.imageresizershrinker.core.data.utils.safeConfig @@ -53,7 +53,7 @@ internal class AndroidImageCutter @Inject constructor( override suspend fun cutAndMerge( image: Bitmap, params: CutParams - ): Bitmap? = withContext(defaultDispatcher) { + ): Bitmap = withContext(defaultDispatcher) { runSuspendCatching { val verticalStart = params.vertical.takeIf { it != PivotPair(0f, 1f) } ?.let { (it.start * image.width).roundToInt() } @@ -180,7 +180,7 @@ internal class AndroidImageCutter @Inject constructor( val mergedWidth = parts.maxOf { it.width } val mergedHeight = parts.sumOf { it.height } - Bitmap.createBitmap(mergedWidth, mergedHeight, source.safeConfig) + createBitmap(mergedWidth, mergedHeight, source.safeConfig) .applyCanvas { var offsetY = 0f for (part in parts) { @@ -257,7 +257,7 @@ internal class AndroidImageCutter @Inject constructor( val mergedWidth = parts.sumOf { it.width } val mergedHeight = parts.maxOf { it.height } - Bitmap.createBitmap(mergedWidth, mergedHeight, source.safeConfig) + createBitmap(mergedWidth, mergedHeight, source.safeConfig) .applyCanvas { var offsetX = 0f for (part in parts) { diff --git a/feature/image-cutting/src/main/java/ru/tech/imageresizershrinker/image_cutting/presentation/screenLogic/ImageCutterComponent.kt b/feature/image-cutting/src/main/java/ru/tech/imageresizershrinker/image_cutting/presentation/screenLogic/ImageCutterComponent.kt index 613b016b1..dde31c649 100644 --- a/feature/image-cutting/src/main/java/ru/tech/imageresizershrinker/image_cutting/presentation/screenLogic/ImageCutterComponent.kt +++ b/feature/image-cutting/src/main/java/ru/tech/imageresizershrinker/image_cutting/presentation/screenLogic/ImageCutterComponent.kt @@ -24,7 +24,6 @@ import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableIntStateOf import androidx.compose.runtime.mutableStateOf import androidx.core.net.toUri -import androidx.exifinterface.media.ExifInterface import coil3.transform.Transformation import com.arkivanov.decompose.ComponentContext import dagger.assisted.Assisted @@ -324,11 +323,11 @@ class ImageCutterComponent @AssistedInject internal constructor( else null fun getCutTransformation(): List = listOf( - GenericTransformation { + GenericTransformation { image: Bitmap -> val bitmap = imageCutter.cutAndMerge( - image = it, + image = image, params = params - ) ?: it + ) ?: image imagePreviewCreator.createPreview( image = bitmap, @@ -340,7 +339,7 @@ class ImageCutterComponent @AssistedInject internal constructor( ), transformations = emptyList(), onGetByteCount = {} - ) ?: it + ) ?: image }.toCoil() ) diff --git a/feature/image-preview/src/main/java/ru/tech/imageresizershrinker/feature/image_preview/presentation/screenLogic/ImagePreviewComponent.kt b/feature/image-preview/src/main/java/ru/tech/imageresizershrinker/feature/image_preview/presentation/screenLogic/ImagePreviewComponent.kt index 070799ca1..4294c8093 100644 --- a/feature/image-preview/src/main/java/ru/tech/imageresizershrinker/feature/image_preview/presentation/screenLogic/ImagePreviewComponent.kt +++ b/feature/image-preview/src/main/java/ru/tech/imageresizershrinker/feature/image_preview/presentation/screenLogic/ImagePreviewComponent.kt @@ -23,7 +23,6 @@ import androidx.compose.runtime.MutableState import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.core.net.toUri -import androidx.exifinterface.media.ExifInterface import com.arkivanov.decompose.ComponentContext import dagger.assisted.Assisted import dagger.assisted.AssistedFactory diff --git a/feature/image-splitting/src/main/java/ru/tech/imageresizershrinker/image_splitting/data/AndroidImageSplitter.kt b/feature/image-splitting/src/main/java/ru/tech/imageresizershrinker/image_splitting/data/AndroidImageSplitter.kt index c101bbcd4..4df3bb5df 100644 --- a/feature/image-splitting/src/main/java/ru/tech/imageresizershrinker/image_splitting/data/AndroidImageSplitter.kt +++ b/feature/image-splitting/src/main/java/ru/tech/imageresizershrinker/image_splitting/data/AndroidImageSplitter.kt @@ -18,7 +18,6 @@ package ru.tech.imageresizershrinker.image_splitting.data import android.graphics.Bitmap -import androidx.exifinterface.media.ExifInterface import kotlinx.coroutines.Deferred import kotlinx.coroutines.async import kotlinx.coroutines.withContext diff --git a/feature/image-stacking/src/main/java/ru/tech/imageresizershrinker/feature/image_stacking/data/AndroidImageStacker.kt b/feature/image-stacking/src/main/java/ru/tech/imageresizershrinker/feature/image_stacking/data/AndroidImageStacker.kt index 96bd823d9..7cc5fc7ef 100644 --- a/feature/image-stacking/src/main/java/ru/tech/imageresizershrinker/feature/image_stacking/data/AndroidImageStacker.kt +++ b/feature/image-stacking/src/main/java/ru/tech/imageresizershrinker/feature/image_stacking/data/AndroidImageStacker.kt @@ -21,7 +21,7 @@ import android.graphics.Bitmap import android.graphics.Canvas import android.graphics.Paint import android.graphics.PorterDuffXfermode -import androidx.exifinterface.media.ExifInterface +import androidx.core.graphics.createBitmap import kotlinx.coroutines.withContext import ru.tech.imageresizershrinker.core.data.image.utils.drawBitmap import ru.tech.imageresizershrinker.core.data.image.utils.toPorterDuffMode @@ -67,10 +67,10 @@ internal class AndroidImageStacker @Inject constructor( return@withContext null } - val outputBitmap = Bitmap.createBitmap( - resultSize.width, - resultSize.height, - getSuitableConfig() + val outputBitmap = createBitmap( + width = resultSize.width, + height = resultSize.height, + config = getSuitableConfig() ) val canvas = Canvas(outputBitmap) diff --git a/feature/image-stitch/src/main/java/ru/tech/imageresizershrinker/feature/image_stitch/data/AndroidImageCombiner.kt b/feature/image-stitch/src/main/java/ru/tech/imageresizershrinker/feature/image_stitch/data/AndroidImageCombiner.kt index cc4a05b06..3d146c210 100644 --- a/feature/image-stitch/src/main/java/ru/tech/imageresizershrinker/feature/image_stitch/data/AndroidImageCombiner.kt +++ b/feature/image-stitch/src/main/java/ru/tech/imageresizershrinker/feature/image_stitch/data/AndroidImageCombiner.kt @@ -22,7 +22,7 @@ import android.graphics.Canvas import android.graphics.PorterDuff import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.toArgb -import androidx.exifinterface.media.ExifInterface +import androidx.core.graphics.createBitmap import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.onEach @@ -106,7 +106,7 @@ internal class AndroidImageCombiner @Inject constructor( } else image } - val bitmap = Bitmap.createBitmap(size.width, size.height, getSuitableConfig()) + val bitmap = createBitmap(size.width, size.height, getSuitableConfig()) val canvas = Canvas(bitmap).apply { drawColor(Color.Transparent.toArgb(), PorterDuff.Mode.CLEAR) drawColor(combiningParams.backgroundColor) diff --git a/feature/jxl-tools/src/main/java/ru/tech/imageresizershrinker/feature/jxl_tools/data/AndroidJxlConverter.kt b/feature/jxl-tools/src/main/java/ru/tech/imageresizershrinker/feature/jxl_tools/data/AndroidJxlConverter.kt index f8e49b6b9..6d0470390 100644 --- a/feature/jxl-tools/src/main/java/ru/tech/imageresizershrinker/feature/jxl_tools/data/AndroidJxlConverter.kt +++ b/feature/jxl-tools/src/main/java/ru/tech/imageresizershrinker/feature/jxl_tools/data/AndroidJxlConverter.kt @@ -22,7 +22,6 @@ import android.graphics.Bitmap import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.toArgb import androidx.core.net.toUri -import androidx.exifinterface.media.ExifInterface import com.awxkee.jxlcoder.JxlAnimatedEncoder import com.awxkee.jxlcoder.JxlAnimatedImage import com.awxkee.jxlcoder.JxlChannelsConfiguration diff --git a/feature/jxl-tools/src/main/java/ru/tech/imageresizershrinker/feature/jxl_tools/presentation/screenLogic/JxlToolsComponent.kt b/feature/jxl-tools/src/main/java/ru/tech/imageresizershrinker/feature/jxl_tools/presentation/screenLogic/JxlToolsComponent.kt index a8bd01471..c6e8b9620 100644 --- a/feature/jxl-tools/src/main/java/ru/tech/imageresizershrinker/feature/jxl_tools/presentation/screenLogic/JxlToolsComponent.kt +++ b/feature/jxl-tools/src/main/java/ru/tech/imageresizershrinker/feature/jxl_tools/presentation/screenLogic/JxlToolsComponent.kt @@ -25,7 +25,6 @@ import androidx.compose.runtime.MutableState import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableIntStateOf import androidx.compose.runtime.mutableStateOf -import androidx.exifinterface.media.ExifInterface import com.arkivanov.decompose.ComponentContext import dagger.assisted.Assisted import dagger.assisted.AssistedFactory diff --git a/feature/limits-resize/src/main/java/ru/tech/imageresizershrinker/feature/limits_resize/presentation/screenLogic/LimitsResizeComponent.kt b/feature/limits-resize/src/main/java/ru/tech/imageresizershrinker/feature/limits_resize/presentation/screenLogic/LimitsResizeComponent.kt index fd6976c23..445cf3b0c 100644 --- a/feature/limits-resize/src/main/java/ru/tech/imageresizershrinker/feature/limits_resize/presentation/screenLogic/LimitsResizeComponent.kt +++ b/feature/limits-resize/src/main/java/ru/tech/imageresizershrinker/feature/limits_resize/presentation/screenLogic/LimitsResizeComponent.kt @@ -25,7 +25,6 @@ import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableIntStateOf import androidx.compose.runtime.mutableStateOf import androidx.core.net.toUri -import androidx.exifinterface.media.ExifInterface import com.arkivanov.decompose.ComponentContext import dagger.assisted.Assisted import dagger.assisted.AssistedFactory diff --git a/feature/load-net-image/src/main/java/ru/tech/imageresizershrinker/feature/load_net_image/presentation/screenLogic/LoadNetImageComponent.kt b/feature/load-net-image/src/main/java/ru/tech/imageresizershrinker/feature/load_net_image/presentation/screenLogic/LoadNetImageComponent.kt index cedada0e5..9ec0b487f 100644 --- a/feature/load-net-image/src/main/java/ru/tech/imageresizershrinker/feature/load_net_image/presentation/screenLogic/LoadNetImageComponent.kt +++ b/feature/load-net-image/src/main/java/ru/tech/imageresizershrinker/feature/load_net_image/presentation/screenLogic/LoadNetImageComponent.kt @@ -25,7 +25,6 @@ import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableIntStateOf import androidx.compose.runtime.mutableStateOf import androidx.core.net.toUri -import androidx.exifinterface.media.ExifInterface import com.arkivanov.decompose.ComponentContext import dagger.assisted.Assisted import dagger.assisted.AssistedFactory 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 228986c07..72cc288de 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 @@ -29,8 +29,8 @@ import androidx.compose.ui.graphics.ImageBitmap import androidx.compose.ui.graphics.asAndroidBitmap import androidx.compose.ui.graphics.toArgb import androidx.core.graphics.applyCanvas +import androidx.core.graphics.createBitmap import androidx.core.net.toUri -import androidx.exifinterface.media.ExifInterface import com.arkivanov.decompose.ComponentContext import dagger.assisted.Assisted import dagger.assisted.AssistedFactory @@ -277,8 +277,7 @@ class MarkupLayersComponent @AssistedInject internal constructor( private suspend fun Bitmap.overlay(overlay: Bitmap): Bitmap { val image = this val config = image.safeConfig.toSoftware() - val finalBitmap = - Bitmap.createBitmap(image.width, image.height, config) + val finalBitmap = createBitmap(image.width, image.height, config) val canvas = Canvas(finalBitmap) canvas.drawBitmap(image, Matrix(), null) canvas.drawBitmap( diff --git a/feature/mesh-gradients/src/main/java/ru/tech/imageresizershrinker/feature/mesh_gradients/presentation/screenLogic/MeshGradientsComponent.kt b/feature/mesh-gradients/src/main/java/ru/tech/imageresizershrinker/feature/mesh_gradients/presentation/screenLogic/MeshGradientsComponent.kt index 51653ef96..e8b1b8ef2 100644 --- a/feature/mesh-gradients/src/main/java/ru/tech/imageresizershrinker/feature/mesh_gradients/presentation/screenLogic/MeshGradientsComponent.kt +++ b/feature/mesh-gradients/src/main/java/ru/tech/imageresizershrinker/feature/mesh_gradients/presentation/screenLogic/MeshGradientsComponent.kt @@ -23,7 +23,6 @@ import androidx.compose.runtime.MutableState import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.core.net.toUri -import androidx.exifinterface.media.ExifInterface import com.arkivanov.decompose.ComponentContext import dagger.assisted.Assisted import dagger.assisted.AssistedFactory diff --git a/feature/pick-color/src/main/java/ru/tech/imageresizershrinker/feature/pick_color/presentation/screenLogic/PickColorFromImageComponent.kt b/feature/pick-color/src/main/java/ru/tech/imageresizershrinker/feature/pick_color/presentation/screenLogic/PickColorFromImageComponent.kt index 2a2b4725e..5422f43ff 100644 --- a/feature/pick-color/src/main/java/ru/tech/imageresizershrinker/feature/pick_color/presentation/screenLogic/PickColorFromImageComponent.kt +++ b/feature/pick-color/src/main/java/ru/tech/imageresizershrinker/feature/pick_color/presentation/screenLogic/PickColorFromImageComponent.kt @@ -23,7 +23,6 @@ import androidx.compose.runtime.MutableState import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.ui.graphics.Color -import androidx.exifinterface.media.ExifInterface import com.arkivanov.decompose.ComponentContext import dagger.assisted.Assisted import dagger.assisted.AssistedFactory diff --git a/feature/recognize-text/src/main/java/ru/tech/imageresizershrinker/feature/recognize/text/data/AndroidImageTextReader.kt b/feature/recognize-text/src/main/java/ru/tech/imageresizershrinker/feature/recognize/text/data/AndroidImageTextReader.kt index 3c108c792..fb97585c7 100644 --- a/feature/recognize-text/src/main/java/ru/tech/imageresizershrinker/feature/recognize/text/data/AndroidImageTextReader.kt +++ b/feature/recognize-text/src/main/java/ru/tech/imageresizershrinker/feature/recognize/text/data/AndroidImageTextReader.kt @@ -20,7 +20,6 @@ package ru.tech.imageresizershrinker.feature.recognize.text.data import android.content.Context import android.graphics.Bitmap import androidx.core.net.toUri -import androidx.exifinterface.media.ExifInterface import com.googlecode.tesseract.android.TessBaseAPI import dagger.hilt.android.qualifiers.ApplicationContext import kotlinx.coroutines.isActive diff --git a/feature/recognize-text/src/main/java/ru/tech/imageresizershrinker/feature/recognize/text/presentation/screenLogic/RecognizeTextComponent.kt b/feature/recognize-text/src/main/java/ru/tech/imageresizershrinker/feature/recognize/text/presentation/screenLogic/RecognizeTextComponent.kt index c38bd96bd..99a9dc28b 100644 --- a/feature/recognize-text/src/main/java/ru/tech/imageresizershrinker/feature/recognize/text/presentation/screenLogic/RecognizeTextComponent.kt +++ b/feature/recognize-text/src/main/java/ru/tech/imageresizershrinker/feature/recognize/text/presentation/screenLogic/RecognizeTextComponent.kt @@ -26,7 +26,6 @@ import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableFloatStateOf import androidx.compose.runtime.mutableIntStateOf import androidx.compose.runtime.mutableStateOf -import androidx.exifinterface.media.ExifInterface import com.arkivanov.decompose.ComponentContext import com.smarttoolfactory.cropper.model.AspectRatio import com.smarttoolfactory.cropper.model.OutlineType @@ -385,7 +384,7 @@ class RecognizeTextComponent @AssistedInject internal constructor( sequenceNumber = null, metadata = it.metadata?.apply { setAttribute( - MetadataTag.UserComment.key, + MetadataTag.UserComment, txtString.takeIf { it.isNotEmpty() } ) }, @@ -771,7 +770,7 @@ class RecognizeTextComponent @AssistedInject internal constructor( val exif = it.metadata?.apply { setAttribute( - MetadataTag.UserComment.key, + MetadataTag.UserComment, txtString.takeIf { it.isNotEmpty() } ) } diff --git a/feature/resize-convert/src/main/java/ru/tech/imageresizershrinker/feature/resize_convert/presentation/screenLogic/ResizeAndConvertComponent.kt b/feature/resize-convert/src/main/java/ru/tech/imageresizershrinker/feature/resize_convert/presentation/screenLogic/ResizeAndConvertComponent.kt index d13a4aed8..59fcefc27 100644 --- a/feature/resize-convert/src/main/java/ru/tech/imageresizershrinker/feature/resize_convert/presentation/screenLogic/ResizeAndConvertComponent.kt +++ b/feature/resize-convert/src/main/java/ru/tech/imageresizershrinker/feature/resize_convert/presentation/screenLogic/ResizeAndConvertComponent.kt @@ -38,6 +38,7 @@ import ru.tech.imageresizershrinker.core.domain.image.ImageScaler import ru.tech.imageresizershrinker.core.domain.image.ImageTransformer import ru.tech.imageresizershrinker.core.domain.image.Metadata import ru.tech.imageresizershrinker.core.domain.image.ShareProvider +import ru.tech.imageresizershrinker.core.domain.image.clearAllAttributes import ru.tech.imageresizershrinker.core.domain.image.model.ImageData import ru.tech.imageresizershrinker.core.domain.image.model.ImageFormat import ru.tech.imageresizershrinker.core.domain.image.model.ImageInfo @@ -519,10 +520,7 @@ class ResizeAndConvertComponent @AssistedInject internal constructor( fun canShow(): Boolean = bitmap?.let { imagePreviewCreator.canShow(it) } == true fun clearExif() { - val tempExif = _exif.value - MetadataTag.entries.forEach { - tempExif?.setAttribute(it.key, null) - } + val tempExif = _exif.value?.clearAllAttributes() _exif.update { tempExif } } @@ -533,7 +531,7 @@ class ResizeAndConvertComponent @AssistedInject internal constructor( fun removeExifTag(tag: MetadataTag) { val exifInterface = _exif.value - exifInterface?.setAttribute(tag.key, null) + exifInterface?.clearAttribute(tag) updateExif(exifInterface) } @@ -542,7 +540,7 @@ class ResizeAndConvertComponent @AssistedInject internal constructor( value: String ) { val exifInterface = _exif.value - exifInterface?.setAttribute(tag.key, value) + exifInterface?.setAttribute(tag, value) updateExif(exifInterface) } diff --git a/feature/scan-qr-code/src/main/java/ru/tech/imageresizershrinker/feature/scan_qr_code/presentation/screenLogic/ScanQrCodeComponent.kt b/feature/scan-qr-code/src/main/java/ru/tech/imageresizershrinker/feature/scan_qr_code/presentation/screenLogic/ScanQrCodeComponent.kt index 190de4907..b4c19d2be 100644 --- a/feature/scan-qr-code/src/main/java/ru/tech/imageresizershrinker/feature/scan_qr_code/presentation/screenLogic/ScanQrCodeComponent.kt +++ b/feature/scan-qr-code/src/main/java/ru/tech/imageresizershrinker/feature/scan_qr_code/presentation/screenLogic/ScanQrCodeComponent.kt @@ -24,7 +24,6 @@ import androidx.compose.runtime.MutableState import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.core.net.toUri -import androidx.exifinterface.media.ExifInterface import com.arkivanov.decompose.ComponentContext import dagger.assisted.Assisted import dagger.assisted.AssistedFactory diff --git a/feature/settings/src/main/java/ru/tech/imageresizershrinker/feature/settings/presentation/screenLogic/SettingsComponent.kt b/feature/settings/src/main/java/ru/tech/imageresizershrinker/feature/settings/presentation/screenLogic/SettingsComponent.kt index eb8450a73..9b10e1345 100644 --- a/feature/settings/src/main/java/ru/tech/imageresizershrinker/feature/settings/presentation/screenLogic/SettingsComponent.kt +++ b/feature/settings/src/main/java/ru/tech/imageresizershrinker/feature/settings/presentation/screenLogic/SettingsComponent.kt @@ -24,7 +24,6 @@ import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.toArgb -import androidx.exifinterface.media.ExifInterface import com.arkivanov.decompose.ComponentContext import com.arkivanov.decompose.value.Value import com.t8rin.dynamic.theme.ColorTuple diff --git a/feature/single-edit/src/main/java/ru/tech/imageresizershrinker/feature/single_edit/presentation/screenLogic/SingleEditComponent.kt b/feature/single-edit/src/main/java/ru/tech/imageresizershrinker/feature/single_edit/presentation/screenLogic/SingleEditComponent.kt index 5fb46095e..69626a8f1 100644 --- a/feature/single-edit/src/main/java/ru/tech/imageresizershrinker/feature/single_edit/presentation/screenLogic/SingleEditComponent.kt +++ b/feature/single-edit/src/main/java/ru/tech/imageresizershrinker/feature/single_edit/presentation/screenLogic/SingleEditComponent.kt @@ -45,6 +45,7 @@ import ru.tech.imageresizershrinker.core.domain.image.ImageScaler import ru.tech.imageresizershrinker.core.domain.image.ImageTransformer import ru.tech.imageresizershrinker.core.domain.image.Metadata import ru.tech.imageresizershrinker.core.domain.image.ShareProvider +import ru.tech.imageresizershrinker.core.domain.image.clearAllAttributes import ru.tech.imageresizershrinker.core.domain.image.model.ImageData import ru.tech.imageresizershrinker.core.domain.image.model.ImageFormat import ru.tech.imageresizershrinker.core.domain.image.model.ImageInfo @@ -563,13 +564,8 @@ class SingleEditComponent @AssistedInject internal constructor( } fun clearExif() { - val tempExif = _exif.value - MetadataTag.entries.forEach { - tempExif?.setAttribute(it.key, null) - } - _exif.update { - tempExif - } + val tempExif = _exif.value?.clearAllAttributes() + _exif.update { tempExif } registerChanges() } @@ -580,7 +576,7 @@ class SingleEditComponent @AssistedInject internal constructor( fun removeExifTag(tag: MetadataTag) { val exifInterface = _exif.value - exifInterface?.setAttribute(tag.key, null) + exifInterface?.clearAttribute(tag) updateExif(exifInterface) } @@ -589,7 +585,7 @@ class SingleEditComponent @AssistedInject internal constructor( value: String, ) { val exifInterface = _exif.value - exifInterface?.setAttribute(tag.key, value) + exifInterface?.setAttribute(tag, value) updateExif(exifInterface) } diff --git a/feature/svg-maker/src/main/java/ru/tech/imageresizershrinker/feature/svg_maker/data/AndroidSvgManager.kt b/feature/svg-maker/src/main/java/ru/tech/imageresizershrinker/feature/svg_maker/data/AndroidSvgManager.kt index 04f838e35..ccf4ecada 100644 --- a/feature/svg-maker/src/main/java/ru/tech/imageresizershrinker/feature/svg_maker/data/AndroidSvgManager.kt +++ b/feature/svg-maker/src/main/java/ru/tech/imageresizershrinker/feature/svg_maker/data/AndroidSvgManager.kt @@ -21,7 +21,6 @@ package ru.tech.imageresizershrinker.feature.svg_maker.data import android.content.Context import android.graphics.Bitmap -import androidx.exifinterface.media.ExifInterface import com.t8rin.image.toolbox.svg.ImageTracerAndroid import com.t8rin.image.toolbox.svg.ImageTracerAndroid.SvgListener import dagger.hilt.android.qualifiers.ApplicationContext diff --git a/feature/svg-maker/src/main/java/ru/tech/imageresizershrinker/feature/svg_maker/presentation/screenLogic/SvgMakerComponent.kt b/feature/svg-maker/src/main/java/ru/tech/imageresizershrinker/feature/svg_maker/presentation/screenLogic/SvgMakerComponent.kt index 49095690e..f536d9bdb 100644 --- a/feature/svg-maker/src/main/java/ru/tech/imageresizershrinker/feature/svg_maker/presentation/screenLogic/SvgMakerComponent.kt +++ b/feature/svg-maker/src/main/java/ru/tech/imageresizershrinker/feature/svg_maker/presentation/screenLogic/SvgMakerComponent.kt @@ -25,7 +25,6 @@ import androidx.compose.runtime.MutableState import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableIntStateOf import androidx.compose.runtime.mutableStateOf -import androidx.exifinterface.media.ExifInterface import com.arkivanov.decompose.ComponentContext import dagger.assisted.Assisted import dagger.assisted.AssistedFactory diff --git a/feature/watermarking/src/main/java/ru/tech/imageresizershrinker/feature/watermarking/data/AndroidWatermarkApplier.kt b/feature/watermarking/src/main/java/ru/tech/imageresizershrinker/feature/watermarking/data/AndroidWatermarkApplier.kt index 46645745a..7da702165 100644 --- a/feature/watermarking/src/main/java/ru/tech/imageresizershrinker/feature/watermarking/data/AndroidWatermarkApplier.kt +++ b/feature/watermarking/src/main/java/ru/tech/imageresizershrinker/feature/watermarking/data/AndroidWatermarkApplier.kt @@ -27,7 +27,6 @@ import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.toArgb import androidx.core.content.res.ResourcesCompat import androidx.core.graphics.applyCanvas -import androidx.exifinterface.media.ExifInterface import coil3.transform.RoundedCornersTransformation import com.watermark.androidwm.WatermarkBuilder import com.watermark.androidwm.bean.WatermarkImage diff --git a/feature/watermarking/src/main/java/ru/tech/imageresizershrinker/feature/watermarking/presentation/screenLogic/WatermarkingComponent.kt b/feature/watermarking/src/main/java/ru/tech/imageresizershrinker/feature/watermarking/presentation/screenLogic/WatermarkingComponent.kt index 9223673f8..7feffbeb0 100644 --- a/feature/watermarking/src/main/java/ru/tech/imageresizershrinker/feature/watermarking/presentation/screenLogic/WatermarkingComponent.kt +++ b/feature/watermarking/src/main/java/ru/tech/imageresizershrinker/feature/watermarking/presentation/screenLogic/WatermarkingComponent.kt @@ -24,7 +24,6 @@ import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableIntStateOf import androidx.compose.runtime.mutableStateOf import androidx.core.net.toUri -import androidx.exifinterface.media.ExifInterface import coil3.transform.Transformation import com.arkivanov.decompose.ComponentContext import dagger.assisted.Assisted diff --git a/feature/webp-tools/src/main/java/ru/tech/imageresizershrinker/feature/webp_tools/data/AndroidWebpConverter.kt b/feature/webp-tools/src/main/java/ru/tech/imageresizershrinker/feature/webp_tools/data/AndroidWebpConverter.kt index 19428e00c..5777aa3b8 100644 --- a/feature/webp-tools/src/main/java/ru/tech/imageresizershrinker/feature/webp_tools/data/AndroidWebpConverter.kt +++ b/feature/webp-tools/src/main/java/ru/tech/imageresizershrinker/feature/webp_tools/data/AndroidWebpConverter.kt @@ -22,7 +22,6 @@ import android.graphics.Bitmap import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.toArgb import androidx.core.net.toUri -import androidx.exifinterface.media.ExifInterface import com.t8rin.awebp.decoder.AnimatedWebpDecoder import com.t8rin.awebp.encoder.AnimatedWebpEncoder import dagger.hilt.android.qualifiers.ApplicationContext diff --git a/feature/webp-tools/src/main/java/ru/tech/imageresizershrinker/feature/webp_tools/presentation/screenLogic/WebpToolsComponent.kt b/feature/webp-tools/src/main/java/ru/tech/imageresizershrinker/feature/webp_tools/presentation/screenLogic/WebpToolsComponent.kt index d97fdf4e0..575b89fe6 100644 --- a/feature/webp-tools/src/main/java/ru/tech/imageresizershrinker/feature/webp_tools/presentation/screenLogic/WebpToolsComponent.kt +++ b/feature/webp-tools/src/main/java/ru/tech/imageresizershrinker/feature/webp_tools/presentation/screenLogic/WebpToolsComponent.kt @@ -24,7 +24,6 @@ import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableIntStateOf import androidx.compose.runtime.mutableStateOf import androidx.core.net.toUri -import androidx.exifinterface.media.ExifInterface import com.arkivanov.decompose.ComponentContext import dagger.assisted.Assisted import dagger.assisted.AssistedFactory diff --git a/feature/weight-resize/src/main/java/ru/tech/imageresizershrinker/feature/weight_resize/presentation/screenLogic/WeightResizeComponent.kt b/feature/weight-resize/src/main/java/ru/tech/imageresizershrinker/feature/weight_resize/presentation/screenLogic/WeightResizeComponent.kt index 1840573e4..b53f217e7 100644 --- a/feature/weight-resize/src/main/java/ru/tech/imageresizershrinker/feature/weight_resize/presentation/screenLogic/WeightResizeComponent.kt +++ b/feature/weight-resize/src/main/java/ru/tech/imageresizershrinker/feature/weight_resize/presentation/screenLogic/WeightResizeComponent.kt @@ -25,7 +25,6 @@ import androidx.compose.runtime.mutableIntStateOf import androidx.compose.runtime.mutableLongStateOf import androidx.compose.runtime.mutableStateOf import androidx.core.net.toUri -import androidx.exifinterface.media.ExifInterface import com.arkivanov.decompose.ComponentContext import dagger.assisted.Assisted import dagger.assisted.AssistedFactory