summaryrefslogtreecommitdiffhomepage
path: root/android/app/src
diff options
context:
space:
mode:
authorJonatan Rhodin <jonatan.rhodin@mullvad.net>2023-12-19 13:38:19 +0100
committerJonatan Rhodin <jonatan.rhodin@mullvad.net>2023-12-19 13:38:19 +0100
commitdce93ba278004b9dc05e2ddda35655bd372e03cc (patch)
tree46dab435e0ace99600cbf1aba0297780a742d3f7 /android/app/src
parenta5e9e9626ae5c73e09d7c784a69cd5ab8c2bbe22 (diff)
parent09240854d3196f0b53bd910f81f9ebe393f44653 (diff)
downloadmullvadvpn-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.kt25
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)
+ }
+}