Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions gradle/libs.versions.toml
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ androidx-exifinterface = { module = "androidx.exifinterface:exifinterface", vers
androidx-material-icons-extended = { module = "androidx.compose.material:material-icons-extended", version.ref = "materialIconsExtendedVersion" }
androidx-ui = { module = "androidx.compose.ui:ui", version.ref = "ui" }
androidx-ui-tooling-preview = { module = "androidx.compose.ui:ui-tooling-preview", version.ref = "ui" }
components-resources = { module = "org.jetbrains.compose.components:components-resources", version.ref = "compose" }
core = { module = "com.google.zxing:core", version.ref = "core" }
compose-ui = { module = "org.jetbrains.compose.ui:ui", version.ref = "compose" }
compose-animation = { module = "org.jetbrains.compose.animation:animation", version.ref = "compose" }
Expand All @@ -45,3 +46,4 @@ ktor-client-darwin = { module = "io.ktor:ktor-client-darwin", version.ref = "kto
androidLibrary = { id = "com.android.library", version.ref = "agp" }
kotlinMultiplatform = { id = "org.jetbrains.kotlin.multiplatform", version.ref = "kotlin" }
composeCompiler = { id = "org.jetbrains.kotlin.plugin.compose", version = "2.0.21" }
composeMultiplatform = { id = "org.jetbrains.compose", version.ref = "compose" }
3 changes: 2 additions & 1 deletion library/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ plugins {
alias(libs.plugins.kotlinMultiplatform)
alias(libs.plugins.androidLibrary)
alias(libs.plugins.composeCompiler)
alias(libs.plugins.composeMultiplatform)
id("com.vanniktech.maven.publish") version "0.33.0"
id("maven-publish")
id("jacoco")
Expand Down Expand Up @@ -382,6 +383,7 @@ kotlin {
implementation("io.coil-kt.coil3:coil-compose:3.2.0")
implementation("org.jetbrains.compose.material:material-icons-core:1.7.3")
implementation("org.jetbrains.compose.material:material-icons-extended:1.7.3")
implementation(libs.components.resources)
// OCR dependencies
implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.6.2")
// Ktor dependencies for HTTP client
Expand Down Expand Up @@ -417,7 +419,6 @@ kotlin {
tasks.withType<ProcessResources> {
duplicatesStrategy = DuplicatesStrategy.INCLUDE
}
resources.srcDir("src/commonMain/resources")
dependencies {
// Ktor iOS engine
implementation(libs.ktor.client.darwin)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,6 @@ import io.github.ismoy.imagepickerkmp.domain.config.PermissionAndConfirmationCon
import io.github.ismoy.imagepickerkmp.domain.extensions.loadBytes
import io.github.ismoy.imagepickerkmp.features.ocr.model.OCRProcessState
import io.github.ismoy.imagepickerkmp.features.ocr.model.ScanMode
import io.github.ismoy.imagepickerkmp.presentation.resources.StringResource
import io.github.ismoy.imagepickerkmp.presentation.resources.getStringResource
import io.github.ismoy.imagepickerkmp.presentation.ui.components.ImagePickerLauncher
import io.github.ismoy.imagepickerkmp.features.ocr.presentation.components.OCRProgressDialog
import io.github.ismoy.imagepickerkmp.presentation.ui.extensions.activity
Expand All @@ -32,7 +30,9 @@ import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.delay
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext

import org.jetbrains.compose.resources.stringResource
import imagepickerkmp.library.generated.resources.Res
import imagepickerkmp.library.generated.resources.invalid_context_error

@Suppress("FunctionNaming")
@Composable
Expand All @@ -42,9 +42,10 @@ actual fun ImagePickerLauncherOCR(
) {
val context = LocalContext.current
val activity = context.activity
val invalidContextErrorMsg = stringResource(Res.string.invalid_context_error)
if (activity !is ComponentActivity) {
LaunchedEffect(Unit) {
config.onError(Exception(getStringResource(StringResource.INVALID_CONTEXT_ERROR)))
config.onError(Exception(invalidContextErrorMsg))
}
return
}
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,10 @@ import io.github.ismoy.imagepickerkmp.domain.config.CameraCaptureConfig
import io.github.ismoy.imagepickerkmp.domain.models.GalleryPhotoResult
import io.github.ismoy.imagepickerkmp.domain.models.GalleryPickerConfig
import io.github.ismoy.imagepickerkmp.domain.models.MimeType
import io.github.ismoy.imagepickerkmp.presentation.resources.StringResource
import io.github.ismoy.imagepickerkmp.presentation.resources.getStringResource
import io.github.ismoy.imagepickerkmp.presentation.ui.components.gallery.GalleryPickerLauncherContent
import imagepickerkmp.library.generated.resources.Res
import imagepickerkmp.library.generated.resources.invalid_context_error
import org.jetbrains.compose.resources.stringResource

@Suppress("ReturnCount","LongParameterList")
@Composable
Expand All @@ -27,8 +28,9 @@ actual fun GalleryPickerLauncher(
) {
val context = LocalContext.current
val activity = context
val invalidContextMsg = stringResource(Res.string.invalid_context_error)
if (activity !is ComponentActivity) {
onError(Exception(getStringResource(StringResource.INVALID_CONTEXT_ERROR)))
onError(Exception(invalidContextMsg))
return
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,11 +40,17 @@ import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.unit.dp
import androidx.compose.ui.platform.LocalConfiguration
import coil3.compose.AsyncImage
import imagepickerkmp.library.generated.resources.Res
import imagepickerkmp.library.generated.resources.accept_button
import imagepickerkmp.library.generated.resources.hd_quality_description
import imagepickerkmp.library.generated.resources.image_confirmation_title
import imagepickerkmp.library.generated.resources.preview_image_description
import imagepickerkmp.library.generated.resources.retry_button
import imagepickerkmp.library.generated.resources.sd_quality_description
import io.github.ismoy.imagepickerkmp.domain.config.ImagePickerUiConstants
import io.github.ismoy.imagepickerkmp.domain.config.UiConfig
import io.github.ismoy.imagepickerkmp.domain.models.PhotoResult
import io.github.ismoy.imagepickerkmp.presentation.resources.StringResource
import io.github.ismoy.imagepickerkmp.presentation.resources.stringResource
import org.jetbrains.compose.resources.stringResource

@SuppressLint("ConfigurationScreenWidthHeight")
@Suppress("EndOfSentenceFormat","LongMethod","FunctionNaming")
Expand Down Expand Up @@ -102,7 +108,7 @@ fun ImageConfirmationViewWithCustomButtons(
.aspectRatio(ImagePickerUiConstants.ConfirmationCardImageAspectRatio)){
AsyncImage(
model = result.uri,
contentDescription = stringResource(StringResource.PREVIEW_IMAGE_DESCRIPTION),
contentDescription = stringResource(Res.string.preview_image_description),
modifier = Modifier
.fillMaxSize()
.aspectRatio(ImagePickerUiConstants.ConfirmationCardImageAspectRatio)
Expand All @@ -124,8 +130,8 @@ fun ImageConfirmationViewWithCustomButtons(
) {
Icon(
imageVector = if (isHD) Icons.Default.Hd else Icons.Default.Sd,
contentDescription = if (isHD) stringResource(StringResource.HD_QUALITY_DESCRIPTION)
else stringResource(StringResource.SD_QUALITY_DESCRIPTION),
contentDescription = if (isHD) stringResource(Res.string.hd_quality_description)
else stringResource(Res.string.sd_quality_description),
tint = resolvedIconColor
)
}
Expand All @@ -141,7 +147,7 @@ fun ImageConfirmationViewWithCustomButtons(
horizontalAlignment = Alignment.CenterHorizontally
) {
Text(
text = stringResource(StringResource.IMAGE_CONFIRMATION_TITLE),
text = stringResource(Res.string.image_confirmation_title),
color = ImagePickerUiConstants.ConfirmationCardTitleColor,
fontSize = ImagePickerUiConstants.ConfirmationCardTitleFontSize,
fontWeight = FontWeight.Bold,
Expand All @@ -168,13 +174,13 @@ fun ImageConfirmationViewWithCustomButtons(
) {
Icon(
imageVector = uiConfig.galleryIcon ?: Icons.Default.Refresh,
contentDescription = stringResource(StringResource.RETRY_BUTTON),
contentDescription = stringResource(Res.string.retry_button),
tint = resolvedIconColor,
modifier = Modifier
.padding(end = ImagePickerUiConstants.ConfirmationCardButtonIconPadding)
)
Text(
stringResource(StringResource.RETRY_BUTTON), color = resolvedIconColor,
stringResource(Res.string.retry_button), color = resolvedIconColor,
fontWeight = ImagePickerUiConstants.ConfirmationCardButtonTextFontWeight)
}
Button(
Expand All @@ -189,13 +195,13 @@ fun ImageConfirmationViewWithCustomButtons(
) {
Icon(
imageVector = Icons.Default.Check,
contentDescription = stringResource(StringResource.ACCEPT_BUTTON),
contentDescription = stringResource(Res.string.accept_button),
tint = resolvedIconColor,
modifier = Modifier
.padding(end = ImagePickerUiConstants.ConfirmationCardButtonIconPadding)
)
Text(
stringResource(StringResource.ACCEPT_BUTTON),
stringResource(Res.string.accept_button),
color = resolvedIconColor,
fontWeight = ImagePickerUiConstants.ConfirmationCardButtonTextFontWeight)
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@

package io.github.ismoy.imagepickerkmp.presentation.ui.components

import androidx.activity.ComponentActivity
Expand All @@ -7,19 +6,20 @@ import androidx.compose.ui.platform.LocalContext
import io.github.ismoy.imagepickerkmp.presentation.ui.screens.CameraCaptureView
import io.github.ismoy.imagepickerkmp.domain.config.ImagePickerConfig
import io.github.ismoy.imagepickerkmp.domain.config.CropConfig
import io.github.ismoy.imagepickerkmp.presentation.resources.getStringResource
import io.github.ismoy.imagepickerkmp.presentation.resources.StringResource
import io.github.ismoy.imagepickerkmp.presentation.ui.extensions.activity
import org.jetbrains.compose.resources.stringResource
import imagepickerkmp.library.generated.resources.Res
import imagepickerkmp.library.generated.resources.invalid_context_error

@Suppress("FunctionNaming")
@Composable
actual fun ImagePickerLauncher(
config: ImagePickerConfig
){
) {
val context = LocalContext.current
val activity = context.activity
if (activity !is ComponentActivity) {
config.onError(Exception(getStringResource(StringResource.INVALID_CONTEXT_ERROR)))
config.onError(Exception(stringResource(Res.string.invalid_context_error)))
return
}
CameraCaptureView(
Expand All @@ -40,7 +40,7 @@ actual fun ImagePickerLauncher(
} else if (config.enableCrop) {
CropConfig(
enabled = true,
circularCrop = true,
circularCrop = true,
squareCrop = true
)
} else {
Expand Down
Loading
Loading