diff --git a/app/src/main/java/io/nekohasekai/sfa/compose/screen/connections/ConnectionDetailsScreen.kt b/app/src/main/java/io/nekohasekai/sfa/compose/screen/connections/ConnectionDetailsScreen.kt index 2384d6d..f1f4563 100644 --- a/app/src/main/java/io/nekohasekai/sfa/compose/screen/connections/ConnectionDetailsScreen.kt +++ b/app/src/main/java/io/nekohasekai/sfa/compose/screen/connections/ConnectionDetailsScreen.kt @@ -10,6 +10,7 @@ import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.ScrollState import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.verticalScroll import androidx.compose.material.icons.Icons @@ -30,6 +31,11 @@ import androidx.compose.runtime.remember import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier +import androidx.compose.ui.geometry.Offset +import androidx.compose.ui.input.nestedscroll.NestedScrollConnection +import androidx.compose.ui.input.nestedscroll.NestedScrollSource +import androidx.compose.ui.input.nestedscroll.nestedScroll +import androidx.compose.ui.unit.Velocity import androidx.compose.ui.graphics.Color import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.font.FontFamily @@ -51,11 +57,14 @@ fun ConnectionDetailsScreen( ) { val dateTimeFormat = SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.getDefault()) var showMenu by remember { mutableStateOf(false) } + val scrollState = rememberScrollState() + val bounceBlockingConnection = rememberBounceBlockingNestedScrollConnection(scrollState) Column( modifier = modifier .fillMaxSize() - .verticalScroll(rememberScrollState()), + .nestedScroll(bounceBlockingConnection) + .verticalScroll(scrollState), ) { Row( modifier = Modifier @@ -332,3 +341,22 @@ private fun DetailRow( ) } } + +@Composable +private fun rememberBounceBlockingNestedScrollConnection( + scrollState: ScrollState +): NestedScrollConnection = remember(scrollState) { + object : NestedScrollConnection { + override fun onPostScroll( + consumed: Offset, + available: Offset, + source: NestedScrollSource + ): Offset { + return if (available.y < 0) available else Offset.Zero + } + + override suspend fun onPostFling(consumed: Velocity, available: Velocity): Velocity { + return if (available.y < 0) available else Velocity.Zero + } + } +}