From 4079e96bd1e0bb38d682b285da9add1c23373503 Mon Sep 17 00:00:00 2001 From: Manuel Vivo Date: Thu, 17 Jun 2021 12:47:06 +0200 Subject: [PATCH] [Crane] Inline Map lifecycle observer (#575) --- .../samples/crane/details/MapViewUtils.kt | 29 +++++++++---------- 1 file changed, 13 insertions(+), 16 deletions(-) diff --git a/Crane/app/src/main/java/androidx/compose/samples/crane/details/MapViewUtils.kt b/Crane/app/src/main/java/androidx/compose/samples/crane/details/MapViewUtils.kt index 897fbe54dc..ee26a3e2fd 100644 --- a/Crane/app/src/main/java/androidx/compose/samples/crane/details/MapViewUtils.kt +++ b/Crane/app/src/main/java/androidx/compose/samples/crane/details/MapViewUtils.kt @@ -41,10 +41,10 @@ fun rememberMapViewWithLifecycle(): MapView { } } - // Makes MapView follow the lifecycle of this composable - val lifecycleObserver = rememberMapLifecycleObserver(mapView) val lifecycle = LocalLifecycleOwner.current.lifecycle - DisposableEffect(lifecycle) { + DisposableEffect(lifecycle, mapView) { + // Make MapView follow the current lifecycle + val lifecycleObserver = getMapLifecycleObserver(mapView) lifecycle.addObserver(lifecycleObserver) onDispose { lifecycle.removeObserver(lifecycleObserver) @@ -54,19 +54,16 @@ fun rememberMapViewWithLifecycle(): MapView { return mapView } -@Composable -private fun rememberMapLifecycleObserver(mapView: MapView): LifecycleEventObserver = - remember(mapView) { - LifecycleEventObserver { _, event -> - when (event) { - Lifecycle.Event.ON_CREATE -> mapView.onCreate(Bundle()) - Lifecycle.Event.ON_START -> mapView.onStart() - Lifecycle.Event.ON_RESUME -> mapView.onResume() - Lifecycle.Event.ON_PAUSE -> mapView.onPause() - Lifecycle.Event.ON_STOP -> mapView.onStop() - Lifecycle.Event.ON_DESTROY -> mapView.onDestroy() - else -> throw IllegalStateException() - } +private fun getMapLifecycleObserver(mapView: MapView): LifecycleEventObserver = + LifecycleEventObserver { _, event -> + when (event) { + Lifecycle.Event.ON_CREATE -> mapView.onCreate(Bundle()) + Lifecycle.Event.ON_START -> mapView.onStart() + Lifecycle.Event.ON_RESUME -> mapView.onResume() + Lifecycle.Event.ON_PAUSE -> mapView.onPause() + Lifecycle.Event.ON_STOP -> mapView.onStop() + Lifecycle.Event.ON_DESTROY -> mapView.onDestroy() + else -> throw IllegalStateException() } }