From 7b1df82eec28755ffa39a624ec694e4f1ca31dbd Mon Sep 17 00:00:00 2001 From: Chaohui Wang Date: Wed, 7 Jun 2023 11:02:06 +0800 Subject: [PATCH] Move page count to rememberPagerState Because androidx.compose.foundation.pager API updated. Fix: 286126109 Test: Unit test Test: Manually with Settings Change-Id: Ia02c8c30690b726d56ea7d33bfbc6be1acff4794 --- .../spa/widget/scaffold/SettingsPager.kt | 50 +------------------ 1 file changed, 2 insertions(+), 48 deletions(-) diff --git a/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/widget/scaffold/SettingsPager.kt b/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/widget/scaffold/SettingsPager.kt index 79635a0c8280a..aa148b022b923 100644 --- a/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/widget/scaffold/SettingsPager.kt +++ b/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/widget/scaffold/SettingsPager.kt @@ -20,20 +20,12 @@ import androidx.compose.foundation.ExperimentalFoundationApi import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.padding import androidx.compose.foundation.pager.HorizontalPager -import androidx.compose.foundation.pager.PagerState import androidx.compose.foundation.pager.rememberPagerState import androidx.compose.material3.TabRow import androidx.compose.runtime.Composable -import androidx.compose.runtime.LaunchedEffect -import androidx.compose.runtime.SideEffect -import androidx.compose.runtime.getValue -import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.rememberCoroutineScope -import androidx.compose.runtime.saveable.rememberSaveable -import androidx.compose.runtime.setValue import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color -import androidx.compose.ui.platform.LocalConfiguration import com.android.settingslib.spa.framework.theme.SettingsDimension import kotlin.math.absoluteValue import kotlinx.coroutines.launch @@ -49,7 +41,7 @@ fun SettingsPager(titles: List, content: @Composable (page: Int) -> Unit Column { val coroutineScope = rememberCoroutineScope() - val pagerState = rememberPageStateFixed() + val pagerState = rememberPagerState { titles.size } TabRow( selectedTabIndex = pagerState.currentPage, @@ -72,46 +64,8 @@ fun SettingsPager(titles: List, content: @Composable (page: Int) -> Unit } } - HorizontalPager(pageCount = titles.size, state = pagerState) { page -> + HorizontalPager(state = pagerState) { page -> content(page) } } } - -/** - * Gets the state of [PagerState]. - * - * This is a work around. - * - * TODO: Remove this and replace with rememberPageState() after the Compose Foundation 1.5.0-alpha04 - * updated in the platform. - */ -@Composable -@OptIn(ExperimentalFoundationApi::class) -private fun rememberPageStateFixed(): PagerState { - var currentPage by rememberSaveable { mutableStateOf(0) } - var targetPage by rememberSaveable { mutableStateOf(-1) } - val pagerState = rememberPagerState() - val configuration = LocalConfiguration.current - var lastScreenWidthDp by rememberSaveable { mutableStateOf(-1) } - val screenWidthDp = configuration.screenWidthDp - LaunchedEffect(screenWidthDp) { - // Reset pager state to fix an issue after configuration change. - // When we declare android:configChanges in the manifest, the pager state is in a weird - // state after configuration change. - targetPage = currentPage - lastScreenWidthDp = screenWidthDp - } - LaunchedEffect(targetPage) { - if (targetPage != -1) { - pagerState.scrollToPage(targetPage) - targetPage = -1 - } - } - SideEffect { - if (lastScreenWidthDp == screenWidthDp) { - currentPage = pagerState.currentPage - } - } - return pagerState -}