@@ -3,8 +3,9 @@ package net.mullvad.mullvadvpn.compose.screen
3
3
import android.content.Intent
4
4
import android.net.Uri
5
5
import androidx.compose.animation.animateContentSize
6
+ import androidx.compose.animation.core.animateFloatAsState
7
+ import androidx.compose.animation.core.tween
6
8
import androidx.compose.foundation.layout.Arrangement
7
- import androidx.compose.foundation.layout.Box
8
9
import androidx.compose.foundation.layout.Column
9
10
import androidx.compose.foundation.layout.Spacer
10
11
import androidx.compose.foundation.layout.defaultMinSize
@@ -19,6 +20,7 @@ import androidx.compose.material3.Text
19
20
import androidx.compose.runtime.Composable
20
21
import androidx.compose.runtime.LaunchedEffect
21
22
import androidx.compose.runtime.collectAsState
23
+ import androidx.compose.runtime.derivedStateOf
22
24
import androidx.compose.runtime.getValue
23
25
import androidx.compose.runtime.mutableFloatStateOf
24
26
import androidx.compose.runtime.mutableLongStateOf
@@ -61,8 +63,14 @@ import net.mullvad.mullvadvpn.compose.test.RECONNECT_BUTTON_TEST_TAG
61
63
import net.mullvad.mullvadvpn.compose.test.SCROLLABLE_COLUMN_TEST_TAG
62
64
import net.mullvad.mullvadvpn.compose.test.SELECT_LOCATION_BUTTON_TEST_TAG
63
65
import net.mullvad.mullvadvpn.compose.transitions.HomeTransition
66
+ import net.mullvad.mullvadvpn.constant.SECURE_ZOOM
67
+ import net.mullvad.mullvadvpn.constant.SECURE_ZOOM_ANIMATION_MILLIS
68
+ import net.mullvad.mullvadvpn.constant.UNSECURE_ZOOM
64
69
import net.mullvad.mullvadvpn.lib.common.util.openAccountPageInBrowser
65
- import net.mullvad.mullvadvpn.lib.map.Map
70
+ import net.mullvad.mullvadvpn.lib.map.AnimatedMap
71
+ import net.mullvad.mullvadvpn.lib.map.data.GlobeColors
72
+ import net.mullvad.mullvadvpn.lib.map.data.LocationMarkerColors
73
+ import net.mullvad.mullvadvpn.lib.map.data.Marker
66
74
import net.mullvad.mullvadvpn.lib.theme.AppTheme
67
75
import net.mullvad.mullvadvpn.lib.theme.Dimens
68
76
import net.mullvad.mullvadvpn.lib.theme.color.AlphaScrollbar
@@ -194,12 +202,29 @@ fun ConnectScreen(
194
202
) {
195
203
var progressIndicatorBias by remember { mutableFloatStateOf(0f ) }
196
204
197
- Map (
205
+ // Distance to marker when secure/unsecure
206
+ val baseZoom =
207
+ animateFloatAsState(
208
+ targetValue =
209
+ if (uiState.tunnelRealState is TunnelState .Connected ) SECURE_ZOOM
210
+ else UNSECURE_ZOOM ,
211
+ animationSpec = tween(SECURE_ZOOM_ANIMATION_MILLIS )
212
+ )
213
+
214
+ val markers = uiState.tunnelRealState.toMarker(uiState.location)?.let { listOf (it) }
215
+ ? : emptyList()
216
+
217
+ AnimatedMap (
198
218
modifier = Modifier .padding(top = it.calculateTopPadding()),
199
- uiState.animateMap,
200
- uiState.location?.toLatLong() ? : gothenburgLatLong,
201
- marker = uiState.tunnelRealState.toMarker(uiState.location),
202
- progressIndicatorBias,
219
+ cameraLocation = uiState.location?.toLatLong() ? : gothenburgLatLong,
220
+ cameraBaseZoom = baseZoom.value,
221
+ cameraVerticalBias = progressIndicatorBias,
222
+ markers = markers,
223
+ globeColors =
224
+ GlobeColors (
225
+ landColor = MaterialTheme .colorScheme.primary,
226
+ oceanColor = MaterialTheme .colorScheme.secondary,
227
+ )
203
228
)
204
229
205
230
NotificationBanner (
@@ -317,19 +342,21 @@ fun ConnectScreen(
317
342
}
318
343
}
319
344
320
- fun TunnelState.toMarker (location : GeoIpLocation ? ): net.mullvad.mullvadvpn.lib.map.data.Marker ? {
345
+ @Composable
346
+ fun TunnelState.toMarker (location : GeoIpLocation ? ): Marker ? {
321
347
if (location == null ) return null
322
348
return when (this ) {
323
349
is TunnelState .Connected ->
324
- net.mullvad.mullvadvpn.lib.map.data. Marker (
350
+ Marker (
325
351
location.toLatLong(),
326
- net.mullvad.mullvadvpn.lib.map.data.MarkerType .SECURE
352
+ colors =
353
+ LocationMarkerColors (centerColor = MaterialTheme .colorScheme.inversePrimary),
327
354
)
328
355
is TunnelState .Connecting -> null
329
356
is TunnelState .Disconnected ->
330
- net.mullvad.mullvadvpn.lib.map.data. Marker (
357
+ Marker (
331
358
location.toLatLong(),
332
- net.mullvad.mullvadvpn.lib.map.data. MarkerType . UNSECURE
359
+ colors = LocationMarkerColors (centerColor = MaterialTheme .colorScheme.error)
333
360
)
334
361
is TunnelState .Disconnecting -> null
335
362
is TunnelState .Error -> null
0 commit comments