package com.shoyoo.react.anavi.navi import android.content.Context import com.amap.api.navi.AMapNaviView import com.amap.api.navi.AMapNaviViewListener import com.facebook.react.bridge.Arguments import com.facebook.react.bridge.LifecycleEventListener import com.facebook.react.bridge.WritableMap import com.facebook.react.uimanager.ThemedReactContext import com.facebook.react.uimanager.events.RCTEventEmitter class ANaviView(context: Context, reactContext: ThemedReactContext): AMapNaviView(context), LifecycleEventListener, AMapNaviViewListener { private val eventEmitter: RCTEventEmitter = reactContext.getJSModule(RCTEventEmitter::class.java) init { setAMapNaviViewListener(this) reactContext.addLifecycleEventListener(this) } private fun emit(id: Int?, event: String, data: WritableMap = Arguments.createMap()) { id?.let { eventEmitter.receiveEvent(it, event, data) } } fun emit(event: String, data: WritableMap = Arguments.createMap()) { emit(id, event, data) } // region Implement LifecycleEventListener override fun onHostResume() { onResume() } override fun onHostPause() { onPause() } override fun onHostDestroy() { onDestroy() } // endregion // region Implement AMapNaviViewListener override fun onNaviSetting() { emit(id, "onNaviSetting") } override fun onNaviCancel() { emit(id, "onNaviCancel") } override fun onNaviBackClick(): Boolean { emit(id, "onNaviBackClick") return true } override fun onNaviMapMode(mode: Int) { emit(id, "onNaviMapViewTrackingModeChanged", Arguments.createMap().apply { putInt("mode", mode) }) } override fun onNaviTurnClick() { } override fun onNextRoadClick() { } override fun onScanViewButtonClick() { } override fun onLockMap(isLock: Boolean) { emit(id, "onLockMap", Arguments.createMap().apply { putBoolean("isLock", isLock) }) } override fun onNaviViewLoaded() { emit(id, "onNaviViewLoaded") } override fun onMapTypeChanged(type: Int) { emit(id, "onNaviMapViewModeChanged", Arguments.createMap().apply { putInt("mode", type) }) } override fun onNaviViewShowMode(mode: Int) { emit(id, "onNaviMapModeChanged", Arguments.createMap().apply { putInt("mode", mode) }) } // endregion }