diff --git a/app/build.gradle b/app/build.gradle index ea2855c..1162f70 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -38,7 +38,7 @@ android { defaultConfig { applicationId "com.techbeloved.hymnbook" minSdkVersion 21 - targetSdkVersion 34 + targetSdkVersion 35 versionCode 32 versionName "2.3.9" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" diff --git a/shared/build.gradle.kts b/shared/build.gradle.kts index 3ff9e96..1362ca2 100644 --- a/shared/build.gradle.kts +++ b/shared/build.gradle.kts @@ -1,6 +1,5 @@ import org.jetbrains.kotlin.gradle.dsl.JvmTarget import org.jetbrains.kotlin.gradle.plugin.mpp.BitcodeEmbeddingMode -import org.jetbrains.kotlin.gradle.plugin.mpp.NativeBuildType plugins { alias(libs.plugins.kotlin.multiplatform) diff --git a/shared/src/commonMain/kotlin/com/techbeloved/hymnbook/shared/ui/AppScaffold.kt b/shared/src/commonMain/kotlin/com/techbeloved/hymnbook/shared/ui/AppScaffold.kt index 4b9f6da..06a96a8 100644 --- a/shared/src/commonMain/kotlin/com/techbeloved/hymnbook/shared/ui/AppScaffold.kt +++ b/shared/src/commonMain/kotlin/com/techbeloved/hymnbook/shared/ui/AppScaffold.kt @@ -4,12 +4,14 @@ package com.techbeloved.hymnbook.shared.ui import androidx.compose.foundation.layout.RowScope import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.filled.ArrowBack +import androidx.compose.material.icons.automirrored.filled.ArrowBack import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.Icon import androidx.compose.material3.IconButton +import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Text import androidx.compose.material3.TopAppBar +import androidx.compose.material3.TopAppBarDefaults import androidx.compose.material3.TopAppBarScrollBehavior import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier @@ -22,7 +24,7 @@ internal fun AppTopBar( modifier: Modifier = Modifier, showUpButton: Boolean = true, scrollBehaviour: TopAppBarScrollBehavior? = null, - actions: @Composable() (RowScope.() -> Unit) = {}, + actions: @Composable (RowScope.() -> Unit) = {}, ) { TopAppBar( title = { Text(title) }, @@ -30,12 +32,19 @@ internal fun AppTopBar( if (showUpButton) { val navigator = LocalNavigator.currentOrThrow IconButton(onClick = navigator::pop) { - Icon(Icons.Default.ArrowBack, contentDescription = "Navigate up") + Icon(Icons.AutoMirrored.Filled.ArrowBack, contentDescription = "Navigate up") } } }, actions = actions, modifier = modifier, scrollBehavior = scrollBehaviour, + colors = TopAppBarDefaults.centerAlignedTopAppBarColors( + containerColor = MaterialTheme.colorScheme.surface, + scrolledContainerColor = MaterialTheme.colorScheme.surface.copy(alpha = 0.5f), + navigationIconContentColor = MaterialTheme.colorScheme.onSurface, + titleContentColor = MaterialTheme.colorScheme.onSurface, + actionIconContentColor = MaterialTheme.colorScheme.onSurfaceVariant, + ), ) } diff --git a/shared/src/commonMain/kotlin/com/techbeloved/hymnbook/shared/ui/detail/SongDetailScreen.kt b/shared/src/commonMain/kotlin/com/techbeloved/hymnbook/shared/ui/detail/SongDetailScreen.kt index 849f972..35e299d 100644 --- a/shared/src/commonMain/kotlin/com/techbeloved/hymnbook/shared/ui/detail/SongDetailScreen.kt +++ b/shared/src/commonMain/kotlin/com/techbeloved/hymnbook/shared/ui/detail/SongDetailScreen.kt @@ -2,6 +2,8 @@ package com.techbeloved.hymnbook.shared.ui.detail import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.PaddingValues +import androidx.compose.foundation.layout.consumeWindowInsets import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding @@ -39,11 +41,14 @@ internal class SongDetailScreen(private val songbook: String, private val entry: val pagerState by pagerModel.state.collectAsState() when (val state = pagerState) { is SongDetailPagerState.Content -> { - SongPager(state, pageContent = { pageEntry -> + SongPager(state, pageContent = { pageEntry, contentPadding -> val screenModel = rememberScreenModel(pageEntry.toString()) { SongDetailScreenModel(pageEntry.id) } val uiDetail by screenModel.state.collectAsState() - SongDetailUi(uiDetail) + SongDetailUi( + state = uiDetail, + contentPadding = contentPadding, + ) }) } @@ -58,7 +63,11 @@ internal class SongDetailScreen(private val songbook: String, private val entry: } @Composable -private fun SongDetailUi(state: SongUiDetail, modifier: Modifier = Modifier) { +private fun SongDetailUi( + state: SongUiDetail, + contentPadding: PaddingValues, + modifier: Modifier = Modifier, +) { Column( modifier = modifier .fillMaxSize() @@ -68,7 +77,8 @@ private fun SongDetailUi(state: SongUiDetail, modifier: Modifier = Modifier) { CompositionLocalProvider(LocalContentColor provides MaterialTheme.colorScheme.onSurface) { Text( state.content, - modifier = Modifier.fillMaxWidth(), + modifier = Modifier.fillMaxWidth() + .padding(contentPadding), fontFamily = crimsonText, fontSize = 18.sp, ) @@ -81,22 +91,22 @@ private fun SongDetailUi(state: SongUiDetail, modifier: Modifier = Modifier) { @Composable private fun SongPager( state: SongDetailPagerState.Content, - pageContent: @Composable (entry: SongPageEntry) -> Unit, + pageContent: @Composable (entry: SongPageEntry, contentPadding: PaddingValues) -> Unit, modifier: Modifier = Modifier, ) { val scrollBehavior = TopAppBarDefaults.enterAlwaysScrollBehavior() Scaffold( - modifier = Modifier.nestedScroll(scrollBehavior.nestedScrollConnection), topBar = { AppTopBar("", scrollBehaviour = scrollBehavior) }, - ) { paddingValues -> + ) { innerPadding -> HorizontalPager( state = rememberPagerState(state.initialPage, pageCount = { state.pages.size }), - modifier = modifier.padding(paddingValues), - key = { state.pages[it].id } + key = { state.pages[it].id }, + modifier = modifier.consumeWindowInsets(innerPadding) + .nestedScroll(scrollBehavior.nestedScrollConnection), ) { page -> - pageContent(state.pages[page]) + pageContent(state.pages[page], innerPadding) } } }