From 0dabc249cd67651aff68108de037781605aeab07 Mon Sep 17 00:00:00 2001 From: Yuri Schimke Date: Wed, 8 May 2024 12:30:31 +0100 Subject: [PATCH] Add beyondViewportPageCount and friends to PagerScreen (#2230) --- compose-layout/api/current.api | 4 ++-- .../horologist/compose/pager/PagerScreen.kt | 20 +++++++++++++++++-- .../compose/pager/VerticalPagerScreen.kt | 16 +++++++++++++++ 3 files changed, 36 insertions(+), 4 deletions(-) diff --git a/compose-layout/api/current.api b/compose-layout/api/current.api index 867266dc22..d95ec6708c 100644 --- a/compose-layout/api/current.api +++ b/compose-layout/api/current.api @@ -185,7 +185,7 @@ package com.google.android.horologist.compose.pager { } public final class PagerScreenKt { - method @androidx.compose.runtime.Composable public static void PagerScreen(optional androidx.compose.ui.Modifier modifier, androidx.compose.foundation.pager.PagerState state, kotlin.jvm.functions.Function1 content); + method @androidx.compose.runtime.Composable public static void PagerScreen(androidx.compose.foundation.pager.PagerState state, optional androidx.compose.ui.Modifier modifier, optional int beyondViewportPageCount, optional boolean userScrollEnabled, optional boolean reverseLayout, optional kotlin.jvm.functions.Function1? key, optional androidx.compose.ui.input.nestedscroll.NestedScrollConnection pageNestedScrollConnection, kotlin.jvm.functions.Function1 content); } public final class VerticalPageIndicatorKt { @@ -193,7 +193,7 @@ package com.google.android.horologist.compose.pager { } public final class VerticalPagerScreenKt { - method @androidx.compose.runtime.Composable @com.google.android.horologist.annotations.ExperimentalHorologistApi public static void VerticalPagerScreen(androidx.compose.foundation.pager.PagerState state, optional androidx.compose.ui.Modifier modifier, kotlin.jvm.functions.Function1 content); + method @androidx.compose.runtime.Composable @com.google.android.horologist.annotations.ExperimentalHorologistApi public static void VerticalPagerScreen(androidx.compose.foundation.pager.PagerState state, optional androidx.compose.ui.Modifier modifier, optional int beyondViewportPageCount, optional boolean userScrollEnabled, optional boolean reverseLayout, optional kotlin.jvm.functions.Function1? key, optional androidx.compose.ui.input.nestedscroll.NestedScrollConnection pageNestedScrollConnection, kotlin.jvm.functions.Function1 content); } } diff --git a/compose-layout/src/main/java/com/google/android/horologist/compose/pager/PagerScreen.kt b/compose-layout/src/main/java/com/google/android/horologist/compose/pager/PagerScreen.kt index eb6eb6f14d..e8333a0b9e 100644 --- a/compose-layout/src/main/java/com/google/android/horologist/compose/pager/PagerScreen.kt +++ b/compose-layout/src/main/java/com/google/android/horologist/compose/pager/PagerScreen.kt @@ -19,9 +19,11 @@ package com.google.android.horologist.compose.pager import androidx.compose.foundation.ExperimentalFoundationApi +import androidx.compose.foundation.gestures.Orientation import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.pager.HorizontalPager +import androidx.compose.foundation.pager.PagerDefaults import androidx.compose.foundation.pager.PagerState import androidx.compose.foundation.shape.CircleShape import androidx.compose.foundation.shape.RoundedCornerShape @@ -31,6 +33,7 @@ import androidx.compose.runtime.derivedStateOf import androidx.compose.runtime.remember import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip +import androidx.compose.ui.input.nestedscroll.NestedScrollConnection import androidx.compose.ui.platform.LocalConfiguration import androidx.wear.compose.foundation.ExperimentalWearFoundationApi import androidx.wear.compose.foundation.HierarchicalFocusCoordinator @@ -46,9 +49,17 @@ import com.google.android.horologist.compose.layout.PagerScaffold */ @Composable public fun PagerScreen( - modifier: Modifier = Modifier, state: PagerState, - content: @Composable ((Int) -> Unit), + modifier: Modifier = Modifier, + beyondViewportPageCount: Int = 0, + userScrollEnabled: Boolean = true, + reverseLayout: Boolean = false, + key: ((index: Int) -> Any)? = null, + pageNestedScrollConnection: NestedScrollConnection = PagerDefaults.pageNestedScrollConnection( + state, + Orientation.Horizontal, + ), + content: @Composable (Int) -> Unit, ) { PagerScaffold( modifier = Modifier.fillMaxSize(), @@ -57,6 +68,11 @@ public fun PagerScreen( HorizontalPager( modifier = modifier, state = state, + beyondViewportPageCount = beyondViewportPageCount, + userScrollEnabled = userScrollEnabled, + reverseLayout = reverseLayout, + key = key, + pageNestedScrollConnection = pageNestedScrollConnection, flingBehavior = HorizontalPagerDefaults.flingParams(state), ) { page -> ClippedBox(state) { diff --git a/compose-layout/src/main/java/com/google/android/horologist/compose/pager/VerticalPagerScreen.kt b/compose-layout/src/main/java/com/google/android/horologist/compose/pager/VerticalPagerScreen.kt index e05b035556..7957c00716 100644 --- a/compose-layout/src/main/java/com/google/android/horologist/compose/pager/VerticalPagerScreen.kt +++ b/compose-layout/src/main/java/com/google/android/horologist/compose/pager/VerticalPagerScreen.kt @@ -19,12 +19,15 @@ package com.google.android.horologist.compose.pager import androidx.compose.foundation.ExperimentalFoundationApi +import androidx.compose.foundation.gestures.Orientation import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.pager.PagerDefaults import androidx.compose.foundation.pager.PagerState import androidx.compose.foundation.pager.VerticalPager import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier +import androidx.compose.ui.input.nestedscroll.NestedScrollConnection import androidx.compose.ui.unit.dp import androidx.wear.compose.foundation.ExperimentalWearFoundationApi import androidx.wear.compose.foundation.rememberActiveFocusRequester @@ -45,6 +48,14 @@ import com.google.android.horologist.compose.rotaryinput.rotaryWithPager public fun VerticalPagerScreen( state: PagerState, modifier: Modifier = Modifier, + beyondViewportPageCount: Int = 0, + userScrollEnabled: Boolean = true, + reverseLayout: Boolean = false, + key: ((index: Int) -> Any)? = null, + pageNestedScrollConnection: NestedScrollConnection = PagerDefaults.pageNestedScrollConnection( + state, + Orientation.Vertical, + ), content: @Composable ((Int) -> Unit), ) { ScreenScaffold( @@ -61,6 +72,11 @@ public fun VerticalPagerScreen( .fillMaxSize() .rotaryWithPager(state, rememberActiveFocusRequester()), state = state, + beyondViewportPageCount = beyondViewportPageCount, + userScrollEnabled = userScrollEnabled, + reverseLayout = reverseLayout, + key = key, + pageNestedScrollConnection = pageNestedScrollConnection, flingBehavior = HorizontalPagerDefaults.flingParams(state), ) { page -> ClippedBox(state) {