diff options
Diffstat (limited to 'android')
3 files changed, 28 insertions, 31 deletions
diff --git a/android/lib/map/build.gradle.kts b/android/lib/map/build.gradle.kts index 347adb4d31..bc43c56bce 100644 --- a/android/lib/map/build.gradle.kts +++ b/android/lib/map/build.gradle.kts @@ -43,5 +43,8 @@ dependencies { implementation(libs.androidx.lifecycle.runtime) implementation(libs.compose.ui) implementation(libs.compose.foundation) + // UI tooling + implementation(libs.compose.ui.tooling.preview) + debugImplementation(libs.compose.ui.tooling) implementation(libs.kermit) } diff --git a/android/lib/map/src/main/kotlin/net/mullvad/mullvadvpn/lib/map/Map.kt b/android/lib/map/src/main/kotlin/net/mullvad/mullvadvpn/lib/map/Map.kt index 05b8d59701..f590637bbb 100644 --- a/android/lib/map/src/main/kotlin/net/mullvad/mullvadvpn/lib/map/Map.kt +++ b/android/lib/map/src/main/kotlin/net/mullvad/mullvadvpn/lib/map/Map.kt @@ -1,12 +1,8 @@ package net.mullvad.mullvadvpn.lib.map import androidx.compose.runtime.Composable -import androidx.compose.runtime.DisposableEffect -import androidx.compose.runtime.remember import androidx.compose.ui.Modifier import androidx.compose.ui.viewinterop.AndroidView -import androidx.lifecycle.Lifecycle -import androidx.lifecycle.LifecycleEventObserver import androidx.lifecycle.compose.LocalLifecycleOwner import net.mullvad.mullvadvpn.lib.map.data.CameraPosition import net.mullvad.mullvadvpn.lib.map.data.GlobeColors @@ -51,33 +47,15 @@ fun AnimatedMap( @Composable internal fun Map(modifier: Modifier = Modifier, mapViewState: MapViewState) { - var view: MapGLSurfaceView? = remember { null } - val lifeCycleState = LocalLifecycleOwner.current.lifecycle - DisposableEffect(key1 = lifeCycleState) { - val observer = LifecycleEventObserver { _, event -> - when (event) { - Lifecycle.Event.ON_RESUME -> { - view?.onResume() - } - Lifecycle.Event.ON_PAUSE -> { - view?.onPause() - } - else -> {} - } - } - lifeCycleState.addObserver(observer) - - onDispose { - lifeCycleState.removeObserver(observer) - view?.onPause() - view = null - } - } - - AndroidView(modifier = modifier, factory = { MapGLSurfaceView(it) }) { glSurfaceView -> - view = glSurfaceView - glSurfaceView.setData(mapViewState) - } + AndroidView( + modifier = modifier, + factory = { MapGLSurfaceView(it) }, + update = { glSurfaceView -> + glSurfaceView.lifecycle = lifeCycleState + glSurfaceView.setData(mapViewState) + }, + onRelease = { it.lifecycle = null }, + ) } diff --git a/android/lib/map/src/main/kotlin/net/mullvad/mullvadvpn/lib/map/internal/MapGLSurfaceView.kt b/android/lib/map/src/main/kotlin/net/mullvad/mullvadvpn/lib/map/internal/MapGLSurfaceView.kt index 19dd085524..32b8cfe8e3 100644 --- a/android/lib/map/src/main/kotlin/net/mullvad/mullvadvpn/lib/map/internal/MapGLSurfaceView.kt +++ b/android/lib/map/src/main/kotlin/net/mullvad/mullvadvpn/lib/map/internal/MapGLSurfaceView.kt @@ -2,12 +2,28 @@ package net.mullvad.mullvadvpn.lib.map.internal import android.content.Context import android.opengl.GLSurfaceView +import androidx.lifecycle.Lifecycle +import androidx.lifecycle.LifecycleEventObserver import net.mullvad.mullvadvpn.lib.map.BuildConfig import net.mullvad.mullvadvpn.lib.map.data.MapViewState internal class MapGLSurfaceView(context: Context) : GLSurfaceView(context) { private val renderer: MapGLRenderer + var lifecycle: Lifecycle? = null + set(value) { + field?.removeObserver(observer) + value?.addObserver(observer) + field = value + } + + private val observer = LifecycleEventObserver { source, event -> + when (event) { + Lifecycle.Event.ON_RESUME -> onResume() + Lifecycle.Event.ON_PAUSE -> onPause() + else -> {} + } + } init { // Create an OpenGL ES 2.0 context |
