Loading packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/widget/scaffold/SettingsPager.kt +36 −2 Original line number Diff line number Diff line Loading @@ -20,12 +20,21 @@ 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.rememberPagerState import androidx.compose.foundation.pager.PagerState import androidx.compose.material3.TabRow import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.SideEffect import androidx.compose.runtime.State import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember 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 Loading @@ -41,7 +50,7 @@ fun SettingsPager(titles: List<String>, content: @Composable (page: Int) -> Unit Column { val coroutineScope = rememberCoroutineScope() val pagerState = rememberPagerState() val pagerState by rememberPageStateFixed() TabRow( selectedTabIndex = pagerState.currentPage, Loading Loading @@ -69,3 +78,28 @@ fun SettingsPager(titles: List<String>, content: @Composable (page: Int) -> Unit } } } /** * 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(): State<PagerState> { var currentPage by rememberSaveable { mutableStateOf(0) } val pagerStateHolder = remember { mutableStateOf(PagerState(currentPage)) } LaunchedEffect(LocalConfiguration.current.orientation) { // Reset pager state to fix an issue after configuration change. // When we declare android:configChanges="orientation" in the manifest, the pager state is // in a weird state after configuration change. pagerStateHolder.value = PagerState(currentPage) } SideEffect { currentPage = pagerStateHolder.value.currentPage } return pagerStateHolder } Loading
packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/widget/scaffold/SettingsPager.kt +36 −2 Original line number Diff line number Diff line Loading @@ -20,12 +20,21 @@ 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.rememberPagerState import androidx.compose.foundation.pager.PagerState import androidx.compose.material3.TabRow import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.SideEffect import androidx.compose.runtime.State import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember 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 Loading @@ -41,7 +50,7 @@ fun SettingsPager(titles: List<String>, content: @Composable (page: Int) -> Unit Column { val coroutineScope = rememberCoroutineScope() val pagerState = rememberPagerState() val pagerState by rememberPageStateFixed() TabRow( selectedTabIndex = pagerState.currentPage, Loading Loading @@ -69,3 +78,28 @@ fun SettingsPager(titles: List<String>, content: @Composable (page: Int) -> Unit } } } /** * 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(): State<PagerState> { var currentPage by rememberSaveable { mutableStateOf(0) } val pagerStateHolder = remember { mutableStateOf(PagerState(currentPage)) } LaunchedEffect(LocalConfiguration.current.orientation) { // Reset pager state to fix an issue after configuration change. // When we declare android:configChanges="orientation" in the manifest, the pager state is // in a weird state after configuration change. pagerStateHolder.value = PagerState(currentPage) } SideEffect { currentPage = pagerStateHolder.value.currentPage } return pagerStateHolder }