diff options
| author | Jonatan Rhodin <jonatan.rhodin@mullvad.net> | 2023-12-19 13:38:19 +0100 |
|---|---|---|
| committer | Jonatan Rhodin <jonatan.rhodin@mullvad.net> | 2023-12-19 13:38:19 +0100 |
| commit | dce93ba278004b9dc05e2ddda35655bd372e03cc (patch) | |
| tree | 46dab435e0ace99600cbf1aba0297780a742d3f7 /android/app/src | |
| parent | a5e9e9626ae5c73e09d7c784a69cd5ab8c2bbe22 (diff) | |
| parent | 09240854d3196f0b53bd910f81f9ebe393f44653 (diff) | |
| download | mullvadvpn-dce93ba278004b9dc05e2ddda35655bd372e03cc.tar.xz mullvadvpn-dce93ba278004b9dc05e2ddda35655bd372e03cc.zip | |
Merge branch 'scroll-to-selected-relay-in-select-location-screen-droid-564'
Diffstat (limited to 'android/app/src')
| -rw-r--r-- | android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/SelectLocationScreen.kt | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/SelectLocationScreen.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/SelectLocationScreen.kt index d113ca258d..8f0624cf8a 100644 --- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/SelectLocationScreen.kt +++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/SelectLocationScreen.kt @@ -2,6 +2,7 @@ package net.mullvad.mullvadvpn.compose.screen import androidx.compose.animation.animateContentSize import androidx.compose.foundation.background +import androidx.compose.foundation.gestures.animateScrollBy import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Spacer @@ -11,6 +12,7 @@ import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size import androidx.compose.foundation.lazy.LazyColumn +import androidx.compose.foundation.lazy.LazyListState import androidx.compose.foundation.lazy.rememberLazyListState import androidx.compose.material3.Icon import androidx.compose.material3.IconButton @@ -161,6 +163,18 @@ fun SelectLocationScreen( } Spacer(modifier = Modifier.height(height = Dimens.verticalSpace)) val lazyListState = rememberLazyListState() + if (uiState is SelectLocationUiState.ShowData && uiState.selectedRelay != null) { + LaunchedEffect(uiState.selectedRelay) { + val index = + uiState.countries.indexOfFirst { + it.location.location.country == + uiState.selectedRelay.location.location.country + } + + lazyListState.scrollToItem(index) + lazyListState.animateScrollAndCentralizeItem(index) + } + } LazyColumn( modifier = Modifier.fillMaxSize() @@ -239,3 +253,14 @@ fun SelectLocationScreen( } } } + +suspend fun LazyListState.animateScrollAndCentralizeItem(index: Int) { + val itemInfo = this.layoutInfo.visibleItemsInfo.firstOrNull { it.index == index } + if (itemInfo != null) { + val center = layoutInfo.viewportEndOffset / 2 + val childCenter = itemInfo.offset + itemInfo.size / 2 + animateScrollBy((childCenter - center).toFloat()) + } else { + animateScrollToItem(index) + } +} |
