From bda2df009bd2b1d2d26e7c27b8330efca1d18793 Mon Sep 17 00:00:00 2001 From: yangyakun Date: Tue, 9 Aug 2022 18:13:18 +0800 Subject: [PATCH] =?UTF-8?q?RemoteCallbackList=20=E5=AE=9E=E6=97=B6?= =?UTF-8?q?=E4=BD=BF=E7=94=A8=E5=AE=9E=E6=97=B6=E5=88=9B=E5=BB=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../passenger/ui/leftmenu/LeftMenuOpen.kt | 178 +++++++++++++----- .../ui/video/FloatingDistanceInfoUtils.kt | 16 ++ .../taxi/passenger/ui/video/VideoActivity.kt | 44 +---- 3 files changed, 154 insertions(+), 84 deletions(-) diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/leftmenu/LeftMenuOpen.kt b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/leftmenu/LeftMenuOpen.kt index 39cb1770a3..bc5bf31413 100644 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/leftmenu/LeftMenuOpen.kt +++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/leftmenu/LeftMenuOpen.kt @@ -14,14 +14,21 @@ import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.Companion.M_TAXI_P import com.mogo.eagle.core.utilcode.util.UiThreadHandler import com.mogo.eagle.core.utilcode.util.Utils +import com.mogo.och.common.module.utils.DateTimeUtil +import com.mogo.och.common.module.utils.NumberFormatUtil import com.mogo.och.taxi.passenger.R +import com.mogo.och.taxi.passenger.event.FinishActivity import com.mogo.och.taxi.passenger.mulprocess.BinderCursor import com.mogo.och.taxi.passenger.mulprocess.BinderProvider import com.mogo.och.taxi.passenger.mulprocess.ICallback import com.mogo.och.taxi.passenger.mulprocess.ILeftMenuService +import com.mogo.och.taxi.passenger.ui.video.FloatingDistanceInfoUtils +import com.mogo.och.taxi.passenger.ui.video.VideoActivity +import org.greenrobot.eventbus.EventBus import rx.Observable import rx.Observer import rx.schedulers.Schedulers +import java.util.* @SuppressLint("StaticFieldLeak") @@ -43,7 +50,7 @@ object LeftMenuOpen { private var orderService: ILeftMenuService? = null - private var icallbacks: RemoteCallbackList = RemoteCallbackList() + private var icallbacks: RemoteCallbackList? = null var checkIndex = OverlayLeftViewUtils.LIVE private var lastClickTime = 0L @@ -80,6 +87,7 @@ object LeftMenuOpen { cu?.let { it.close() + cu = null orderService = null } val iterator = dragList.iterator() @@ -175,9 +183,6 @@ object LeftMenuOpen { fun registerDragView(view: View?) { if (view != null) { dragList.add(view) -// if (orderService == null) { -// registerC() -// } view.setOnTouchListener(ItemViewTouchListener()) view.setOnClickListener { open?.let { it1 -> it1(windowView!!, windowManager) } @@ -200,46 +205,84 @@ object LeftMenuOpen { } fun transmissionIndex(index:Int){ - CallerLogger.d(M_TAXI_P + TAG, "tran--transmissionIndex---$index") - if (orderService == null) { - registerC() - } - orderService?.transmissionIndex(index) + Observable.empty().subscribeOn(Schedulers.io()) + .subscribe(object : Observer { + override fun onCompleted() { + CallerLogger.d(M_TAXI_P + TAG, "tran--transmissionIndex---$index") + if (orderService == null) { + registerC() + } + orderService?.transmissionIndex(index) + } + override fun onError(e: Throwable?) {} + override fun onNext(t: String?) {} + }) } + /** + * 主进程调用 + */ fun registerCallbackHost(cb:ICallback?){ -// if (orderService == null) { -// registerC() -// } + if(icallbacks==null){ + icallbacks = RemoteCallbackList() + } cb?.let { - icallbacks.register(it) + icallbacks?.register(it) } } + /** + * 主进程调用 反注册 + */ fun unregisterCallbackHost(cb:ICallback?){ cb?.let { - icallbacks.unregister(it) + icallbacks?.unregister(it) } + icallbacks?.kill() + icallbacks = null } - + /** + * 子进程调用 注册回调 主进程中调用 + * 方便主进程传递到子进程 速度、剩余公里、剩余时间、到达时间 + */ fun registerCallback(cb:ICallback?){ - CallerLogger.d(M_TAXI_P + TAG, "tran--registerCallback--注册") - if (orderService == null) { - registerC() - } - cb?.let { - orderService?.registerCallback(it) - } + Observable.empty().subscribeOn(Schedulers.io()) + .subscribe(object : Observer { + override fun onCompleted() { + CallerLogger.d(M_TAXI_P + TAG, "tran--registerCallback--注册") + if (orderService == null) { + registerC() + } + cb?.let { + orderService?.registerCallback(it) + } + } + override fun onError(e: Throwable?) {} + override fun onNext(t: String?) {} + }) } + /** + * 子进程调用 反注册 + */ fun unregisterCallback(cb:ICallback?){ - CallerLogger.d(M_TAXI_P + TAG, "tran--unregisterCallback--反注册") - cb?.let { - orderService?.unRegisterCallback(it) - } + Observable.empty().subscribeOn(Schedulers.io()) + .subscribe(object : Observer { + override fun onCompleted() { + CallerLogger.d(M_TAXI_P + TAG, "tran--unregisterCallback--反注册") + cb?.let { + orderService?.unRegisterCallback(it) + } + } + override fun onError(e: Throwable?) {} + override fun onNext(t: String?) {} + }) } + /** + * 主进程调用 向子进程传输 剩余距离、剩余时间、和速度 + */ fun callCallBack(meters: Long,timeInSecond: Long,speed:Float){ if(checkIndex == OverlayLeftViewUtils.CONSULT||checkIndex == OverlayLeftViewUtils.MOVIE) { if (System.currentTimeMillis() - lastClickTime < FAST_CLICK_DELAY_TIME){ @@ -252,15 +295,17 @@ object LeftMenuOpen { override fun onCompleted() { CallerLogger.d(M_TAXI_P + TAG, "callCallBack$meters--$timeInSecond--$speed") try { - val len = icallbacks.beginBroadcast() - for (i in 0 until len) { - try { - icallbacks.getBroadcastItem(i).onResult(meters, timeInSecond, speed) - } catch (e: RemoteException) { - e.printStackTrace() + val len = icallbacks?.beginBroadcast() + len?.let { + for (i in 0 until len) { + try { + icallbacks?.getBroadcastItem(i)?.onResult(meters, timeInSecond, speed) + } catch (e: RemoteException) { + e.printStackTrace() + } } } - icallbacks.finishBroadcast() + icallbacks?.finishBroadcast() }catch (e:Exception){ CallerLogger.e(M_TAXI_P + TAG, "callCallBack${e.message}") } @@ -272,15 +317,24 @@ object LeftMenuOpen { } fun invoKeyByEventType(typeID:Int){ - val len = icallbacks.beginBroadcast() - for (i in 0 until len) { - try { - icallbacks.getBroadcastItem(i).postEvent(typeID) - } catch (e: RemoteException) { - e.printStackTrace() - } - } - icallbacks.finishBroadcast() + Observable.empty().subscribeOn(Schedulers.io()) + .subscribe(object : Observer { + override fun onCompleted() { + val len = icallbacks?.beginBroadcast() + len?.let { + for (i in 0 until it) { + try { + icallbacks?.getBroadcastItem(i)?.postEvent(typeID) + } catch (e: RemoteException) { + e.printStackTrace() + } + } + } + icallbacks?.finishBroadcast() + } + override fun onError(e: Throwable?) {} + override fun onNext(t: String?) {} + }) } /** @@ -320,4 +374,44 @@ object LeftMenuOpen { val w = extras.getParcelable("binder") return w!!.mBinder } + + val callBack = object : ICallback.Stub() { + override fun onResult(meters :Long, timeInSecond:Long,speed:Float) { + if(speed<0){ + // 距离单位 + var disUnit = "公里" + // 距离 + var remainDis: String? = "0" + + if (meters > 0) { + if (meters / 1000 < 1) { + disUnit = "米" + remainDis = Math.round(meters.toFloat()).toString() + } else { + disUnit = "公里" + remainDis = NumberFormatUtil.formatLong(meters.toDouble() / 1000) + } + } + // 剩余时间 + val time = Math.ceil(timeInSecond.toDouble() / 60f).toInt() + + val beforeTime = Calendar.getInstance() + beforeTime.add(Calendar.MINUTE, time) + //到达时间 + val arriveTime = DateTimeUtil.formatCalendarToString(beforeTime, DateTimeUtil.TAXI_HH_mm) + FloatingDistanceInfoUtils.setDistance(meters,remainDis,disUnit,time,arriveTime) + }else{ + FloatingDistanceInfoUtils.setSpeed(speed) + } + } + + override fun postEvent(type: Int) { + when (type) { + VideoActivity.EVENT_FINISH -> { + EventBus.getDefault().post(FinishActivity()) + } + else -> {} + } + } + } } \ No newline at end of file diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/video/FloatingDistanceInfoUtils.kt b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/video/FloatingDistanceInfoUtils.kt index c5f8d6ad39..5122739983 100644 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/video/FloatingDistanceInfoUtils.kt +++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/video/FloatingDistanceInfoUtils.kt @@ -227,6 +227,22 @@ object FloatingDistanceInfoUtils { if(processView!=null){ processView = null } + actvDistancew?.let { + actvDistancew = null + } + actvDistancewUnit?.let { + actvDistancewUnit = null + } + actvSurplusTime?.let { + actvSurplusTime = null + } + actvArrivedTime?.let { + actvArrivedTime = null + } + actvSpeed?.let { + actvSpeed = null + } + isShowing = false } catch (e: Exception) { e.printStackTrace() diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/video/VideoActivity.kt b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/video/VideoActivity.kt index f2b1d190ea..d743fd517a 100644 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/video/VideoActivity.kt +++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/video/VideoActivity.kt @@ -77,46 +77,6 @@ class VideoActivity : AppCompatActivity() { private var videotype = VIDEOTYPE_CONSULT - val callBack = object : ICallback.Stub() { - override fun onResult(meters :Long, timeInSecond:Long,speed:Float) { - if(speed<0){ - // 距离单位 - var disUnit = "公里" - // 距离 - var remainDis: String? = "0" - - if (meters > 0) { - if (meters / 1000 < 1) { - disUnit = "米" - remainDis = Math.round(meters.toFloat()).toString() - } else { - disUnit = "公里" - remainDis = NumberFormatUtil.formatLong(meters.toDouble() / 1000) - } - } - // 剩余时间 - val time = Math.ceil(timeInSecond.toDouble() / 60f).toInt() - - val beforeTime = Calendar.getInstance() - beforeTime.add(Calendar.MINUTE, time) - //到达时间 - val arriveTime = DateTimeUtil.formatCalendarToString(beforeTime, DateTimeUtil.TAXI_HH_mm) - FloatingDistanceInfoUtils.setDistance(meters,remainDis,disUnit,time,arriveTime) - }else{ - FloatingDistanceInfoUtils.setSpeed(speed) - } - } - - override fun postEvent(type: Int) { - when (type) { - EVENT_FINISH -> { - finish() - } - else -> {} - } - } - } - override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) EventBus.getDefault().register(this) @@ -150,7 +110,7 @@ class VideoActivity : AppCompatActivity() { } initListener() initData() - LeftMenuOpen.registerCallback(callBack) + LeftMenuOpen.registerCallback(LeftMenuOpen.callBack) } private fun initConsultData(){ @@ -409,7 +369,7 @@ class VideoActivity : AppCompatActivity() { CallerLogger.d(SceneConstant.M_TAXI_P + TAG, "onDestroy()") super.onDestroy() EventBus.getDefault().unregister(this) - LeftMenuOpen.unregisterCallback(callBack) + LeftMenuOpen.unregisterCallback(LeftMenuOpen.callBack) releaseOnNewInstance() OverlayLeftViewUtils.dismissOverlayView(false) FloatingDistanceInfoUtils.dismissOverlayView()