From a98ef5c44954ddb13e7d88784fdf79caa24b44c2 Mon Sep 17 00:00:00 2001 From: Shinokuni Date: Sun, 30 Jun 2024 17:23:10 +0200 Subject: [PATCH] Use TopAppBar scrollBehaviour in TimelineTab and FeedTab --- .../main/java/com/readrops/app/compose/feeds/FeedTab.kt | 8 +++++++- .../main/java/com/readrops/app/compose/home/HomeScreen.kt | 7 +++++++ .../main/java/com/readrops/app/compose/more/MoreTab.kt | 2 ++ .../java/com/readrops/app/compose/timelime/TimelineTab.kt | 7 ++++++- 4 files changed, 22 insertions(+), 2 deletions(-) diff --git a/appcompose/src/main/java/com/readrops/app/compose/feeds/FeedTab.kt b/appcompose/src/main/java/com/readrops/app/compose/feeds/FeedTab.kt index 690c8261..ed684de4 100644 --- a/appcompose/src/main/java/com/readrops/app/compose/feeds/FeedTab.kt +++ b/appcompose/src/main/java/com/readrops/app/compose/feeds/FeedTab.kt @@ -21,6 +21,8 @@ import androidx.compose.material3.SnackbarHost import androidx.compose.material3.SnackbarHostState import androidx.compose.material3.Text import androidx.compose.material3.TopAppBar +import androidx.compose.material3.TopAppBarDefaults +import androidx.compose.material3.rememberTopAppBarState import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.getValue @@ -28,6 +30,7 @@ import androidx.compose.runtime.remember import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.vector.rememberVectorPainter import androidx.compose.ui.hapticfeedback.HapticFeedbackType +import androidx.compose.ui.input.nestedscroll.nestedScroll import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalHapticFeedback import androidx.compose.ui.platform.LocalUriHandler @@ -71,6 +74,7 @@ object FeedTab : Tab { val state by viewModel.feedsState.collectAsStateWithLifecycle() val snackbarHostState = remember { SnackbarHostState() } + val topAppBarScrollBehavior = TopAppBarDefaults.pinnedScrollBehavior(rememberTopAppBarState()) LaunchedEffect(state.exception) { if (state.exception != null) { @@ -188,7 +192,8 @@ object FeedTab : Tab { contentDescription = null ) } - } + }, + scrollBehavior = topAppBarScrollBehavior ) }, floatingActionButton = { @@ -226,6 +231,7 @@ object FeedTab : Tab { modifier = Modifier .fillMaxSize() .padding(paddingValues) + .nestedScroll(topAppBarScrollBehavior.nestedScrollConnection) ) { when (state.foldersAndFeeds) { is FolderAndFeedsState.LoadedState -> { diff --git a/appcompose/src/main/java/com/readrops/app/compose/home/HomeScreen.kt b/appcompose/src/main/java/com/readrops/app/compose/home/HomeScreen.kt index f23aefd2..7089a798 100644 --- a/appcompose/src/main/java/com/readrops/app/compose/home/HomeScreen.kt +++ b/appcompose/src/main/java/com/readrops/app/compose/home/HomeScreen.kt @@ -3,8 +3,12 @@ package com.readrops.app.compose.home import android.annotation.SuppressLint import androidx.activity.compose.BackHandler import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.WindowInsets +import androidx.compose.foundation.layout.WindowInsetsSides import androidx.compose.foundation.layout.consumeWindowInsets import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.navigationBars +import androidx.compose.foundation.layout.only import androidx.compose.foundation.layout.padding import androidx.compose.material.icons.Icons import androidx.compose.material.icons.filled.AccountCircle @@ -37,6 +41,8 @@ class HomeScreen : AndroidScreen() { override fun Content() { val navigator = LocalNavigator.currentOrThrow + val scaffoldInsets = WindowInsets.navigationBars.only(WindowInsetsSides.Horizontal) + TabNavigator( tab = TimelineTab ) { tabNavigator -> @@ -93,6 +99,7 @@ class HomeScreen : AndroidScreen() { ) } }, + contentWindowInsets = scaffoldInsets ) { paddingValues -> Box( modifier = Modifier diff --git a/appcompose/src/main/java/com/readrops/app/compose/more/MoreTab.kt b/appcompose/src/main/java/com/readrops/app/compose/more/MoreTab.kt index d1aa8b4f..b26bb353 100644 --- a/appcompose/src/main/java/com/readrops/app/compose/more/MoreTab.kt +++ b/appcompose/src/main/java/com/readrops/app/compose/more/MoreTab.kt @@ -4,6 +4,7 @@ import androidx.compose.foundation.Image import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.size +import androidx.compose.foundation.layout.statusBarsPadding import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Text import androidx.compose.runtime.Composable @@ -38,6 +39,7 @@ object MoreTab : Tab { Column( horizontalAlignment = Alignment.CenterHorizontally, modifier = Modifier.fillMaxSize() + .statusBarsPadding() ) { LargeSpacer() diff --git a/appcompose/src/main/java/com/readrops/app/compose/timelime/TimelineTab.kt b/appcompose/src/main/java/com/readrops/app/compose/timelime/TimelineTab.kt index 514b3e52..1ffacffa 100644 --- a/appcompose/src/main/java/com/readrops/app/compose/timelime/TimelineTab.kt +++ b/appcompose/src/main/java/com/readrops/app/compose/timelime/TimelineTab.kt @@ -25,9 +25,11 @@ import androidx.compose.material3.SnackbarHostState import androidx.compose.material3.SnackbarResult import androidx.compose.material3.Text import androidx.compose.material3.TopAppBar +import androidx.compose.material3.TopAppBarDefaults import androidx.compose.material3.pulltorefresh.PullToRefreshContainer import androidx.compose.material3.pulltorefresh.rememberPullToRefreshState import androidx.compose.material3.rememberDrawerState +import androidx.compose.material3.rememberTopAppBarState import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.getValue @@ -85,6 +87,7 @@ object TimelineTab : Tab { val lazyListState = rememberLazyListState() val pullToRefreshState = rememberPullToRefreshState() val snackbarHostState = remember { SnackbarHostState() } + val topAppBarScrollBehavior = TopAppBarDefaults.pinnedScrollBehavior(rememberTopAppBarState()) LaunchedEffect(state.isRefreshing) { if (state.isRefreshing) { @@ -280,7 +283,8 @@ object TimelineTab : Tab { contentDescription = null ) } - } + }, + scrollBehavior = topAppBarScrollBehavior ) }, snackbarHost = { SnackbarHost(snackbarHostState) }, @@ -306,6 +310,7 @@ object TimelineTab : Tab { .padding(paddingValues) .fillMaxSize() .nestedScroll(pullToRefreshState.nestedScrollConnection) + .nestedScroll(topAppBarScrollBehavior.nestedScrollConnection) ) { when { state.displayRefreshScreen -> RefreshScreen(