diff --git a/android/src/main/kotlin/dev/note11/flutter_naver_map/flutter_naver_map/view/NaverMapView.kt b/android/src/main/kotlin/dev/note11/flutter_naver_map/flutter_naver_map/view/NaverMapView.kt index 008e787c..8dd92129 100644 --- a/android/src/main/kotlin/dev/note11/flutter_naver_map/flutter_naver_map/view/NaverMapView.kt +++ b/android/src/main/kotlin/dev/note11/flutter_naver_map/flutter_naver_map/view/NaverMapView.kt @@ -2,7 +2,8 @@ package dev.note11.flutter_naver_map.flutter_naver_map.view import android.app.Activity import android.app.Application -import android.content.Context +import android.content.ComponentCallbacks +import android.content.res.Configuration import android.os.Bundle import android.view.View import com.naver.maps.map.MapView @@ -18,24 +19,23 @@ import dev.note11.flutter_naver_map.flutter_naver_map.util.NLocationSource import io.flutter.plugin.common.MethodChannel import io.flutter.plugin.platform.PlatformView - internal class NaverMapView( - context: Context, private val activity: Activity, private val naverMapViewOptions: NaverMapViewOptions, private val channel: MethodChannel, private val overlayController: OverlayHandler, -) : PlatformView, Application.ActivityLifecycleCallbacks { +) : PlatformView, Application.ActivityLifecycleCallbacks, ComponentCallbacks { private lateinit var naverMap: NaverMap private lateinit var naverMapControlSender: NaverMapControlSender - private val mapView = MapView(context, naverMapViewOptions.naverMapOptions).apply { + private val mapView = MapView(activity, naverMapViewOptions.naverMapOptions).apply { setTempMethodCallHandler() getMapAsync { naverMap -> this@NaverMapView.naverMap = naverMap onMapReady() } } + private var isListenerRegistered = false private var rawNaverMapOptionTempCache: Any? = null init { @@ -45,9 +45,7 @@ internal class NaverMapView( private fun setTempMethodCallHandler() { channel.setMethodCallHandler { call, _ -> - if (call.method == "updateOptions") { // todo : test - rawNaverMapOptionTempCache = call.arguments - } + if (call.method == "updateOptions") rawNaverMapOptionTempCache = call.arguments } } @@ -73,6 +71,7 @@ internal class NaverMapView( } private fun setMapTapListener() { + isListenerRegistered = true naverMap.run { setOnMapClickListener { pointFPx, latLng -> naverMapControlSender.onMapTapped(NPoint.fromPointFWithPx(pointFPx), latLng) @@ -87,10 +86,23 @@ internal class NaverMapView( } } + private fun removeMapTapListener() { + if (isListenerRegistered) { + naverMap.run { + onMapClickListener = null + onSymbolClickListener = null + removeOnCameraChangeListener(naverMapControlSender::onCameraChange) + removeOnCameraIdleListener(naverMapControlSender::onCameraIdle) + removeOnIndoorSelectionChangeListener(naverMapControlSender::onSelectedIndoorChanged) + } + } + } + override fun getView(): View = mapView override fun dispose() { unRegisterLifecycleCallback() + removeMapTapListener() mapView.run { onPause() @@ -108,24 +120,20 @@ internal class NaverMapView( } private fun registerLifecycleCallback() { + mapView.onSaveInstanceState(Bundle()) + activity.registerComponentCallbacks(this) activity.application.registerActivityLifecycleCallbacks(this) } private fun unRegisterLifecycleCallback() { + activity.unregisterComponentCallbacks(this) activity.application.unregisterActivityLifecycleCallbacks(this) } - override fun onActivityCreated(activity: Activity, savedInstanceState: Bundle?) { - if (activity != this.activity) return - - mapView.onCreate(savedInstanceState) - } - - override fun onActivityStarted(activity: Activity) { - if (activity != this.activity) return + /** 실행되지 않음 */ + override fun onActivityCreated(activity: Activity, savedInstanceState: Bundle?) = Unit - mapView.onStart() - } + override fun onActivityStarted(activity: Activity) = Unit override fun onActivityResumed(activity: Activity) { if (activity != this.activity) return @@ -134,14 +142,6 @@ internal class NaverMapView( mapView.onResume() } - private fun reloadMap() { - if (this::naverMap.isInitialized) { - val nowMapType = naverMap.mapType - naverMap.mapType = NaverMap.MapType.None - naverMap.mapType = nowMapType - } - } - override fun onActivityPaused(activity: Activity) { if (activity != this.activity) return @@ -166,4 +166,18 @@ internal class NaverMapView( mapView.onDestroy() unRegisterLifecycleCallback() } + + override fun onConfigurationChanged(newConfig: Configuration) {} + + override fun onLowMemory() { + mapView.onLowMemory() + } + + private fun reloadMap() { + if (this::naverMap.isInitialized) { + val nowMapType = naverMap.mapType + naverMap.mapType = NaverMap.MapType.None + naverMap.mapType = nowMapType + } + } } \ No newline at end of file diff --git a/android/src/main/kotlin/dev/note11/flutter_naver_map/flutter_naver_map/view/NaverMapViewFactory.kt b/android/src/main/kotlin/dev/note11/flutter_naver_map/flutter_naver_map/view/NaverMapViewFactory.kt index 008940c7..030cf8c0 100644 --- a/android/src/main/kotlin/dev/note11/flutter_naver_map/flutter_naver_map/view/NaverMapViewFactory.kt +++ b/android/src/main/kotlin/dev/note11/flutter_naver_map/flutter_naver_map/view/NaverMapViewFactory.kt @@ -28,11 +28,10 @@ internal class NaverMapViewFactory( val options = NaverMapViewOptions.fromMessageable(convertedArgs) return NaverMapView( - context = context, activity = activity, naverMapViewOptions = options, channel = channel, - overlayController = overlayController + overlayController = overlayController, ) } }