Add underlying pull-to-refresh support to BitwardenScaffold (#610)

This commit is contained in:
David Perez 2024-01-14 17:58:03 -06:00 committed by Álison Fernandes
parent d6d179a27f
commit 18af449e1f
2 changed files with 28 additions and 2 deletions

View file

@ -1,22 +1,30 @@
package com.x8bit.bitwarden.ui.platform.components
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.PaddingValues
import androidx.compose.foundation.layout.WindowInsets
import androidx.compose.foundation.layout.exclude
import androidx.compose.foundation.layout.navigationBars
import androidx.compose.foundation.layout.padding
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.FabPosition
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Scaffold
import androidx.compose.material3.ScaffoldDefaults
import androidx.compose.material3.contentColorFor
import androidx.compose.material3.pulltorefresh.PullToRefreshContainer
import androidx.compose.material3.pulltorefresh.PullToRefreshState
import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.input.nestedscroll.nestedScroll
/**
* Direct passthrough to [Scaffold] but contains a few specific override values. Everything is
* still overridable if necessary.
*/
@OptIn(ExperimentalMaterial3Api::class)
@Composable
fun BitwardenScaffold(
modifier: Modifier = Modifier,
@ -25,6 +33,7 @@ fun BitwardenScaffold(
snackbarHost: @Composable () -> Unit = { },
floatingActionButton: @Composable () -> Unit = { },
floatingActionButtonPosition: FabPosition = FabPosition.End,
pullToRefreshState: PullToRefreshState? = null,
containerColor: Color = MaterialTheme.colorScheme.surface,
contentColor: Color = contentColorFor(containerColor),
contentWindowInsets: WindowInsets = ScaffoldDefaults
@ -33,7 +42,9 @@ fun BitwardenScaffold(
content: @Composable (PaddingValues) -> Unit,
) {
Scaffold(
modifier = modifier,
modifier = Modifier
.run { pullToRefreshState?.let { nestedScroll(it.nestedScrollConnection) } ?: this }
.then(modifier),
topBar = topBar,
bottomBar = bottomBar,
snackbarHost = snackbarHost,
@ -42,6 +53,19 @@ fun BitwardenScaffold(
containerColor = containerColor,
contentColor = contentColor,
contentWindowInsets = contentWindowInsets,
content = content,
content = { paddingValues ->
Box {
content(paddingValues)
pullToRefreshState?.let {
PullToRefreshContainer(
state = it,
modifier = Modifier
.padding(paddingValues)
.align(Alignment.TopCenter),
)
}
}
},
)
}

View file

@ -12,6 +12,7 @@ import androidx.compose.foundation.layout.navigationBars
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.statusBars
import androidx.compose.material3.BottomAppBar
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.Icon
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.NavigationBarItem
@ -139,6 +140,7 @@ fun VaultUnlockedNavBarScreen(
* Scaffold that contains the bottom nav bar for the [VaultUnlockedNavBarScreen]
*/
@Composable
@OptIn(ExperimentalMaterial3Api::class)
@Suppress("LongMethod")
private fun VaultUnlockedNavBarScaffold(
navController: NavHostController,