diff --git a/app/build.gradle.kts b/app/build.gradle.kts index d71821b..e063b3d 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -4,7 +4,6 @@ plugins { id("com.google.dagger.hilt.android") id("com.google.gms.google-services") id("com.google.firebase.crashlytics") - id("org.jetbrains.kotlin.kapt") id("com.google.devtools.ksp") } @@ -80,7 +79,7 @@ android { } composeOptions { - kotlinCompilerExtensionVersion = "1.5.3" + kotlinCompilerExtensionVersion = "1.5.7" } packaging { @@ -96,7 +95,7 @@ android { dependencies { implementation("androidx.core:core-ktx:1.12.0") - implementation("androidx.activity:activity-compose:1.8.0") + implementation("androidx.activity:activity-compose:1.8.2") // Compose implementation("androidx.compose.ui:ui:1.5.4") @@ -110,10 +109,10 @@ dependencies { implementation("androidx.constraintlayout:constraintlayout-compose:1.0.1") // Navigation - implementation("androidx.navigation:navigation-compose:2.7.5") + implementation("androidx.navigation:navigation-compose:2.7.6") // Accompanist - implementation("com.google.accompanist:accompanist-placeholder:0.30.1") + implementation("com.google.accompanist:accompanist-placeholder:0.32.0") // Splash Screen support prior to Android 12 implementation("androidx.core:core-splashscreen:1.0.1") @@ -130,7 +129,7 @@ dependencies { ) // Import the BoM for the Firebase platform - implementation(platform("com.google.firebase:firebase-bom:32.3.1")) + implementation(platform("com.google.firebase:firebase-bom:32.7.0")) implementation("com.google.firebase:firebase-crashlytics-ktx") implementation("com.google.firebase:firebase-analytics-ktx") implementation("com.google.firebase:firebase-auth-ktx") @@ -138,11 +137,12 @@ dependencies { // Hilt: Dependency injection implementation("androidx.hilt:hilt-navigation-compose:1.1.0") - implementation("com.google.dagger:hilt-android:2.48") - kapt("com.google.dagger:hilt-compiler:2.48") + implementation("com.google.dagger:hilt-android:2.50") + ksp("com.google.dagger:hilt-android-compiler:2.50") + ksp("com.google.dagger:hilt-compiler:2.50") // Image - implementation("io.coil-kt:coil-compose:2.4.0") + implementation("io.coil-kt:coil-compose:2.5.0") } java { diff --git a/app/src/main/java/com/pixelized/rplexicon/ui/composable/error/FetchErrorUio.kt b/app/src/main/java/com/pixelized/rplexicon/ui/composable/error/FetchErrorUio.kt index b4ec8a3..1d800ae 100644 --- a/app/src/main/java/com/pixelized/rplexicon/ui/composable/error/FetchErrorUio.kt +++ b/app/src/main/java/com/pixelized/rplexicon/ui/composable/error/FetchErrorUio.kt @@ -46,7 +46,7 @@ sealed class FetchErrorUio { fun HandleFetchError( snack: SnackbarHostState = LocalSnack.current, errors: Flow, - onStructureError: suspend (context: Context, snack: SnackbarHostState, error: FetchErrorUio.Structure) -> Unit = { context, snack, error -> + onStructureError: suspend (context: Context, snack: SnackbarHostState, error: FetchErrorUio.Structure) -> Unit = { context, snackHost, error -> val messageResources = when (error.type) { FetchErrorUio.Structure.Type.UNKNOWN -> R.string.error_structure_unknowed FetchErrorUio.Structure.Type.ACTION -> R.string.error_structure_action @@ -63,15 +63,15 @@ fun HandleFetchError( FetchErrorUio.Structure.Type.LOCATION -> R.string.error_structure_location FetchErrorUio.Structure.Type.QUEST -> R.string.error_structure_quest } - snack.showSnackbar(message = context.getString(messageResources)) + snackHost.showSnackbar(message = context.getString(messageResources)) }, - onFirebaseError: suspend (context: Context, snack: SnackbarHostState, error: FetchErrorUio.Firebase) -> Unit = { context, snack, error -> - snack.showSnackbar( + onFirebaseError: suspend (context: Context, snack: SnackbarHostState, error: FetchErrorUio.Firebase) -> Unit = { context, snackHost, error -> + snackHost.showSnackbar( message = error.exception.localizedMessage ?: context.getString(R.string.error_generic) ) }, - onDefaultError: suspend (context: Context, snack: SnackbarHostState, error: FetchErrorUio.Default) -> Unit = { context, snack, _ -> - snack.showSnackbar(message = context.getString(R.string.error_generic)) + onDefaultError: suspend (context: Context, snack: SnackbarHostState, error: FetchErrorUio.Default) -> Unit = { context, snackHost, _ -> + snackHost.showSnackbar(message = context.getString(R.string.error_generic)) }, ) { val context = LocalContext.current diff --git a/app/src/main/java/com/pixelized/rplexicon/ui/screens/character/composable/character/ResourcePoint.kt b/app/src/main/java/com/pixelized/rplexicon/ui/screens/character/composable/character/ResourcePoint.kt index 436923a..095e9c5 100644 --- a/app/src/main/java/com/pixelized/rplexicon/ui/screens/character/composable/character/ResourcePoint.kt +++ b/app/src/main/java/com/pixelized/rplexicon/ui/screens/character/composable/character/ResourcePoint.kt @@ -39,14 +39,14 @@ fun ResourcePoint( valueStyle: TextStyle = MaterialTheme.typography.headlineSmall, maxStyle: TextStyle = MaterialTheme.typography.titleSmall, resource: ResourcePointUio, - onClick: (ResourcePointUio) -> Unit, + onClick: ((ResourcePointUio) -> Unit)?, ) { Column( modifier = Modifier .clickable( interactionSource = remember { MutableInteractionSource() }, indication = rememberRipple(bounded = false), - onClick = { onClick(resource) } + onClick = { onClick?.invoke(resource) } ) .then(other = modifier), horizontalAlignment = Alignment.CenterHorizontally diff --git a/app/src/main/java/com/pixelized/rplexicon/ui/screens/lexicon/detail/LexiconDetailScreen.kt b/app/src/main/java/com/pixelized/rplexicon/ui/screens/lexicon/detail/LexiconDetailScreen.kt index e203986..e2411e1 100644 --- a/app/src/main/java/com/pixelized/rplexicon/ui/screens/lexicon/detail/LexiconDetailScreen.kt +++ b/app/src/main/java/com/pixelized/rplexicon/ui/screens/lexicon/detail/LexiconDetailScreen.kt @@ -92,7 +92,7 @@ fun LexiconDetailScreen( ) { LexiconDetailContent( modifier = Modifier.fillMaxSize(), - item = viewModel.character, + lexicon = viewModel.character, highlight = viewModel.highlight, haveCharacterSheet = viewModel.haveCharacterSheet, onBack = { screen.popBackStack() }, @@ -111,7 +111,7 @@ fun LexiconDetailScreen( private fun LexiconDetailContent( modifier: Modifier = Modifier, state: ScrollState = rememberScrollState(), - item: State, + lexicon: State, highlight: String?, haveCharacterSheet: State, onBack: () -> Unit, @@ -122,7 +122,7 @@ private fun LexiconDetailContent( val highlightRegex = remember(highlight) { highlightRegex(terms = highlight.searchCriterion()) } val dropCapRegex = remember { dropCapRegex() } - val item = item.value + val item = lexicon.value val backgroundUri = remember(item) { item?.portrait?.firstOrNull() } @@ -400,7 +400,7 @@ private fun LexiconDetailPreview() { } LexiconDetailContent( modifier = Modifier.fillMaxSize(), - item = character, + lexicon = character, highlight = "Bru poule faible", haveCharacterSheet = remember { mutableStateOf(true) }, onBack = { }, diff --git a/app/src/main/java/com/pixelized/rplexicon/utilitary/extentions/ModifierEx.kt b/app/src/main/java/com/pixelized/rplexicon/utilitary/extentions/ModifierEx.kt index 429af35..92946f3 100644 --- a/app/src/main/java/com/pixelized/rplexicon/utilitary/extentions/ModifierEx.kt +++ b/app/src/main/java/com/pixelized/rplexicon/utilitary/extentions/ModifierEx.kt @@ -54,7 +54,7 @@ fun Modifier.placeholder( contentFadeTransitionSpec: @Composable Transition.Segment.() -> FiniteAnimationSpec = { spring() }, visible: () -> Boolean, ): Modifier = composed { - placeholder( + this then Modifier.placeholder( visible = visible(), color = if (color == Color.Unspecified) MaterialTheme.lexicon.colorScheme.placeholder else color, shape = shape, @@ -67,8 +67,7 @@ fun Modifier.placeholder( fun Modifier.zoomable() = composed { var offset by remember { mutableStateOf(Offset.Zero) } var zoom by remember { mutableFloatStateOf(1f) } - - return@composed this + this then Modifier .pointerInput(Unit) { detectTransformGestures( onGesture = { centroid, pan, gestureZoom, _ -> @@ -93,7 +92,7 @@ fun Modifier.zoomable() = composed { @Stable fun Modifier.cell() = composed { - Modifier + this then Modifier .fillMaxWidth() .heightIn(min = MaterialTheme.lexicon.dimens.item) .padding(horizontal = 16.dp, vertical = 4.dp) @@ -105,11 +104,11 @@ fun Modifier.scrollOffset( block: Density.(Dp) -> Dp ): Modifier = composed { val density = LocalDensity.current - this.offset(y = with(density) { block(scrollState.value.toDp()) }) + this then Modifier.offset(y = with(density) { block(scrollState.value.toDp()) }) } fun Modifier.clickableInterceptor(): Modifier = composed { - this.clickable( + this then Modifier.clickable( interactionSource = remember { MutableInteractionSource() }, indication = null, onClick = { }, @@ -127,8 +126,7 @@ fun Modifier.ddBorder( val isDarkTheme = isSystemInDarkTheme() val elevation = remember { derivedStateOf { if (isDarkTheme) 2.dp else 0.dp } } val colorScheme = MaterialTheme.lexicon.colorScheme - - return@composed this then Modifier + this then Modifier .border( width = outlineWidth, color = colorScheme.characterSheet.outlineBorder, @@ -156,22 +154,24 @@ fun Modifier.ddBorder( ) } -fun Modifier.lexiconShadow() = composed { - if (isSystemInDarkTheme()) { - val color = DividerDefaults.color - drawWithContent { - drawContent() - val thickness = DividerDefaults.Thickness.toPx() - val y = size.height - drawLine( - color = color, - start = Offset(0f, y), - end = Offset(size.width, y), - strokeWidth = thickness - ) +fun Modifier.lexiconShadow(): Modifier { + return this then composed { + if (isSystemInDarkTheme()) { + val color = DividerDefaults.color + drawWithContent { + drawContent() + val thickness = DividerDefaults.Thickness.toPx() + val y = size.height + drawLine( + color = color, + start = Offset(0f, y), + end = Offset(size.width, y), + strokeWidth = thickness + ) + } + } else { + shadow(elevation = 4.dp) } - } else { - shadow(elevation = 4.dp) } } diff --git a/build.gradle.kts b/build.gradle.kts index 9ec20cf..40c8efe 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,10 +1,10 @@ // Top-level build file where you can add configuration options common to all sub-projects/modules. plugins { - id("com.android.application") version "8.1.4" apply false - id("org.jetbrains.kotlin.android") version "1.9.10" apply false + id("com.android.application") version "8.2.1" apply false + id("org.jetbrains.kotlin.android") version "1.9.21" apply false id("com.google.gms.google-services") version "4.3.14" apply false - id("com.google.dagger.hilt.android") version "2.44" apply false + id("com.google.dagger.hilt.android") version "2.50" apply false id("com.google.firebase.crashlytics") version "2.9.7" apply false id("org.jetbrains.kotlin.kapt") version "1.9.10" apply false - id("com.google.devtools.ksp") version "1.9.10-1.0.13" apply false + id("com.google.devtools.ksp") version "1.9.21-1.0.16" apply false } diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 33a8bca..8bc04fb 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ #Wed Jul 12 18:52:35 CEST 2023 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.0-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.2-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists