diff --git a/README.md b/README.md index a1ea003..9c92bb5 100644 --- a/README.md +++ b/README.md @@ -35,7 +35,7 @@ repositories { ```groovy dependencies { - implementation 'com.github.germainkevinbusiness:CollapsingTopBarCompose:1.0.0-beta07' + implementation 'com.github.germainkevinbusiness:CollapsingTopBarCompose:1.0.0-beta08' } ``` diff --git a/app/build.gradle b/app/build.gradle index cca8cd2..8a013e8 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -11,7 +11,7 @@ android { minSdk 21 targetSdk 32 versionCode 1 - versionName "1.0.0-beta07" + versionName "1.0.0-beta08" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" vectorDrawables { diff --git a/app/src/main/java/com/germainkevin/collapsingtopbarcompose/MainActivity.kt b/app/src/main/java/com/germainkevin/collapsingtopbarcompose/MainActivity.kt index 90d5a28..14b9847 100644 --- a/app/src/main/java/com/germainkevin/collapsingtopbarcompose/MainActivity.kt +++ b/app/src/main/java/com/germainkevin/collapsingtopbarcompose/MainActivity.kt @@ -14,6 +14,7 @@ import androidx.compose.material.icons.Icons import androidx.compose.material.icons.filled.Menu import androidx.compose.material.rememberScaffoldState import androidx.compose.material3.* +import androidx.compose.runtime.Composable import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.ui.Modifier import androidx.compose.ui.input.nestedscroll.nestedScroll @@ -24,6 +25,7 @@ import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import com.germainkevin.collapsingtopbar.CollapsingTopBar +import com.germainkevin.collapsingtopbar.CollapsingTopBarScrollBehavior import com.germainkevin.collapsingtopbar.rememberCollapsingTopBarScrollBehavior import com.germainkevin.collapsingtopbarcompose.ui.ContactListNames import com.germainkevin.collapsingtopbarcompose.ui.LeftDrawer @@ -66,45 +68,15 @@ class MainActivity : ComponentActivity() { centeredTitleAndSubtitle = false, expandedTopBarMaxHeight = 156.dp, ) + Scaffold( modifier = Modifier.nestedScroll(scrollBehavior.nestedScrollConnection), scaffoldState = scaffoldState, drawerContent = { LeftDrawer(closeLeftDrawer = closeLeftDrawer) }, topBar = { - CollapsingTopBar( + OurCollapsingTopBar( scrollBehavior = scrollBehavior, - title = { - Text( - stringResource(id = R.string.all_contacts), - style = LocalTextStyle.current.copy( - fontSize = 24.sp, - fontWeight = FontWeight.Normal, - color = MaterialTheme.colorScheme.onPrimary - ) - ) - }, - subtitle = { - Text( - stringResource( - id = R.string.contactNamesCount, - contactNames.size.toString() - ), - style = LocalTextStyle.current.copy( - fontWeight = FontWeight.Normal, - color = MaterialTheme.colorScheme.onPrimary - ) - ) - }, - navigationIcon = { - IconButton(onClick = openLeftDrawer) { - Icon( - imageVector = Icons.Filled.Menu, - contentDescription = stringResource(id = R.string.hamburger_menu), - tint = MaterialTheme.colorScheme.onPrimary - ) - } - }, - actions = { MoreMenuIcons() }, + contactNames = contactNames, openLeftDrawer = openLeftDrawer ) }, content = { innerPadding -> @@ -129,4 +101,47 @@ class MainActivity : ComponentActivity() { } } } +} + +@Composable +fun OurCollapsingTopBar( + scrollBehavior: CollapsingTopBarScrollBehavior, + contactNames: Array, + openLeftDrawer: () -> Unit, +) { + CollapsingTopBar( + scrollBehavior = scrollBehavior, + title = { + Text( + stringResource(id = R.string.all_contacts), + style = LocalTextStyle.current.copy( + fontSize = 24.sp, + fontWeight = FontWeight.Normal, + color = MaterialTheme.colorScheme.onPrimary + ) + ) + }, + subtitle = { + Text( + stringResource( + id = R.string.contactNamesCount, + contactNames.size.toString() + ), + style = LocalTextStyle.current.copy( + fontWeight = FontWeight.Normal, + color = MaterialTheme.colorScheme.onPrimary + ) + ) + }, + navigationIcon = { + IconButton(onClick = openLeftDrawer) { + Icon( + imageVector = Icons.Filled.Menu, + contentDescription = stringResource(id = R.string.hamburger_menu), + tint = MaterialTheme.colorScheme.onPrimary + ) + } + }, + actions = { MoreMenuIcons() }, + ) } \ No newline at end of file diff --git a/collapsingtopbar/build.gradle b/collapsingtopbar/build.gradle index ecbc7da..8f6be43 100644 --- a/collapsingtopbar/build.gradle +++ b/collapsingtopbar/build.gradle @@ -24,7 +24,7 @@ afterEvaluate { // You can then customize attributes of the publication as shown below. groupId = 'com.germainkevin.collapsingtopbarcompose' artifactId = 'collapsingtopbarcompose' - version = '1.0.0-beta07' + version = '1.0.0-beta08' } } } diff --git a/collapsingtopbar/src/main/java/com/germainkevin/collapsingtopbar/CollapsingTopBar.kt b/collapsingtopbar/src/main/java/com/germainkevin/collapsingtopbar/CollapsingTopBar.kt index 65cf4e3..852591c 100644 --- a/collapsingtopbar/src/main/java/com/germainkevin/collapsingtopbar/CollapsingTopBar.kt +++ b/collapsingtopbar/src/main/java/com/germainkevin/collapsingtopbar/CollapsingTopBar.kt @@ -94,7 +94,7 @@ fun CollapsingTopBar( * @param elevation The size of the shadow below the [Surface] * */ @Composable -internal fun CollapsingTopBarLayout( +private fun CollapsingTopBarLayout( modifier: Modifier, title: @Composable () -> Unit, subtitle: @Composable () -> Unit, @@ -183,7 +183,7 @@ internal fun CollapsingTopBarLayout( } } -internal val navigationIconRow: @Composable (@Composable (() -> Unit)?) -> Unit = +private val navigationIconRow: @Composable (@Composable (() -> Unit)?) -> Unit = { navigationIcon -> if (navigationIcon == null) Spacer(modifier = noNavIconSpacerModifier) else { @@ -195,7 +195,7 @@ internal val navigationIconRow: @Composable (@Composable (() -> Unit)?) -> Unit } } -internal val collapsedTitle: @Composable (Boolean, Float, @Composable () -> Unit) -> Unit = +private val collapsedTitle: @Composable (Boolean, Float, @Composable () -> Unit) -> Unit = { centeredTitleAndSubtitle, collapsedTitleAlpha, title -> val enterAnimation = if (centeredTitleAndSubtitle) expandVertically( @@ -216,7 +216,7 @@ internal val collapsedTitle: @Composable (Boolean, Float, @Composable () -> Unit /** * The Section where all the options menu items will be laid out on * */ -internal val actionsRow: @Composable (@Composable RowScope.() -> Unit) -> Unit = { +private val actionsRow: @Composable (@Composable RowScope.() -> Unit) -> Unit = { Row( modifier = Modifier.fillMaxHeight(), horizontalArrangement = Arrangement.End, @@ -266,7 +266,7 @@ internal val actionsRow: @Composable (@Composable RowScope.() -> Unit) -> Unit = * [currentTopBarHeight] reaches past [collapsedTopBarHeight] + [margin] */ @Composable -internal fun getTitleAndSubtitleColumnAlpha( +private fun getTitleAndSubtitleColumnAlpha( currentTopBarHeight: Dp, collapsedTopBarHeight: Dp, expandedTopBarMaxHeight: Dp, @@ -287,7 +287,7 @@ internal fun getTitleAndSubtitleColumnAlpha( * Collapsed Title section should become invisible * */ @Composable -internal fun getCollapsedTitleAlpha( +private fun getCollapsedTitleAlpha( currentTopBarHeight: Dp, visibleValue: Dp, invisibleValue: Dp diff --git a/collapsingtopbar/src/main/java/com/germainkevin/collapsingtopbar/CollapsingTopBarDefaults.kt b/collapsingtopbar/src/main/java/com/germainkevin/collapsingtopbar/CollapsingTopBarDefaults.kt index ebcaa35..9f1f662 100644 --- a/collapsingtopbar/src/main/java/com/germainkevin/collapsingtopbar/CollapsingTopBarDefaults.kt +++ b/collapsingtopbar/src/main/java/com/germainkevin/collapsingtopbar/CollapsingTopBarDefaults.kt @@ -92,12 +92,21 @@ fun rememberCollapsingTopBarScrollBehavior( centeredTitleAndSubtitle: Boolean = true, collapsedTopBarHeight: Dp = defaultMinimumTopBarHeight, expandedTopBarMaxHeight: Dp = defaultMaximumTopBarHeight, -): CollapsingTopBarScrollBehavior = remember { - CollapsingTopBarDefaults.scrollBehavior( - isAlwaysCollapsed = isAlwaysCollapsed, - isExpandedWhenFirstDisplayed = isExpandedWhenFirstDisplayed, - centeredTitleAndSubtitle = centeredTitleAndSubtitle, - collapsedTopBarHeight = collapsedTopBarHeight, - expandedTopBarMaxHeight = expandedTopBarMaxHeight - ) +): CollapsingTopBarScrollBehavior { + return remember( + isAlwaysCollapsed, + isExpandedWhenFirstDisplayed, + centeredTitleAndSubtitle, + collapsedTopBarHeight, + collapsedTopBarHeight, + expandedTopBarMaxHeight + ) { + CollapsingTopBarDefaults.scrollBehavior( + isAlwaysCollapsed = isAlwaysCollapsed, + isExpandedWhenFirstDisplayed = isExpandedWhenFirstDisplayed, + centeredTitleAndSubtitle = centeredTitleAndSubtitle, + collapsedTopBarHeight = collapsedTopBarHeight, + expandedTopBarMaxHeight = expandedTopBarMaxHeight + ) + } } \ No newline at end of file diff --git a/collapsingtopbar/src/main/java/com/germainkevin/collapsingtopbar/CollapsingTopBarScrollBehavior.kt b/collapsingtopbar/src/main/java/com/germainkevin/collapsingtopbar/CollapsingTopBarScrollBehavior.kt index 343d759..2f8b0a7 100644 --- a/collapsingtopbar/src/main/java/com/germainkevin/collapsingtopbar/CollapsingTopBarScrollBehavior.kt +++ b/collapsingtopbar/src/main/java/com/germainkevin/collapsingtopbar/CollapsingTopBarScrollBehavior.kt @@ -1,8 +1,7 @@ package com.germainkevin.collapsingtopbar -import androidx.compose.runtime.getValue -import androidx.compose.runtime.mutableStateOf -import androidx.compose.runtime.setValue +import androidx.compose.animation.core.animateFloatAsState +import androidx.compose.runtime.* import androidx.compose.ui.geometry.Offset import androidx.compose.ui.input.nestedscroll.NestedScrollConnection import androidx.compose.ui.input.nestedscroll.NestedScrollSource @@ -79,9 +78,6 @@ interface CollapsingTopBarScrollBehavior { val nestedScrollConnection: NestedScrollConnection } -/** - * Here lies the logic on how the [CollapsingTopBar] behaves at all times - * */ class DefaultBehaviorOnScroll( override var isAlwaysCollapsed: Boolean, override var isExpandedWhenFirstDisplayed: Boolean,