RemoteCallbackList 实时使用实时创建
This commit is contained in:
@@ -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<ICallback> = RemoteCallbackList<ICallback>()
|
||||
private var icallbacks: RemoteCallbackList<ICallback>? = 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<String?>().subscribeOn(Schedulers.io())
|
||||
.subscribe(object : Observer<String?> {
|
||||
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<ICallback>()
|
||||
}
|
||||
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<String?>().subscribeOn(Schedulers.io())
|
||||
.subscribe(object : Observer<String?> {
|
||||
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<String?>().subscribeOn(Schedulers.io())
|
||||
.subscribe(object : Observer<String?> {
|
||||
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<String?>().subscribeOn(Schedulers.io())
|
||||
.subscribe(object : Observer<String?> {
|
||||
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<BinderCursor.BinderParcelable>("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 -> {}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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()
|
||||
|
||||
@@ -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()
|
||||
|
||||
Reference in New Issue
Block a user