diff --git a/OCH/mogo-och-taxi-passenger/src/main/AndroidManifest.xml b/OCH/mogo-och-taxi-passenger/src/main/AndroidManifest.xml
index 8b529701ba..27faf9deaa 100644
--- a/OCH/mogo-och-taxi-passenger/src/main/AndroidManifest.xml
+++ b/OCH/mogo-och-taxi-passenger/src/main/AndroidManifest.xml
@@ -1,5 +1,16 @@
+
- /
+
+
+
+
+
\ No newline at end of file
diff --git a/OCH/mogo-och-taxi-passenger/src/main/aidl/com/mogo/och/taxi/passenger/mulprocess/IOrderService.aidl b/OCH/mogo-och-taxi-passenger/src/main/aidl/com/mogo/och/taxi/passenger/mulprocess/IOrderService.aidl
new file mode 100644
index 0000000000..415109c249
--- /dev/null
+++ b/OCH/mogo-och-taxi-passenger/src/main/aidl/com/mogo/och/taxi/passenger/mulprocess/IOrderService.aidl
@@ -0,0 +1,14 @@
+// IOrderService.aidl
+package com.mogo.och.taxi.passenger.mulprocess;
+
+// Declare any non-default types here with import statements
+
+interface IOrderService {
+
+ /**
+ * 向主进程传输坐标
+ */
+ boolean transmission(int x, int action);
+
+ void open();
+}
\ No newline at end of file
diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/mulprocess/BinderCursor.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/mulprocess/BinderCursor.java
new file mode 100644
index 0000000000..c1d1c3c5bd
--- /dev/null
+++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/mulprocess/BinderCursor.java
@@ -0,0 +1,64 @@
+package com.mogo.och.taxi.passenger.mulprocess;
+
+import android.database.MatrixCursor;
+import android.os.Bundle;
+import android.os.IBinder;
+import android.os.Parcel;
+import android.os.Parcelable;
+
+public class BinderCursor extends MatrixCursor {
+
+ static final String KEY_BINDER = "binder";
+
+ Bundle mBinderExtra = new Bundle();
+
+ public static class BinderParcelable implements Parcelable {
+
+ public IBinder mBinder;
+
+ public static final Creator CREATOR = new Creator() {
+ @Override
+ public BinderParcelable createFromParcel(Parcel source) {
+ return new BinderParcelable(source);
+ }
+
+ @Override
+ public BinderParcelable[] newArray(int size) {
+ return new BinderParcelable[size];
+ }
+ };
+
+ BinderParcelable(IBinder binder) {
+ mBinder = binder;
+ }
+
+ BinderParcelable(Parcel source) {
+ mBinder = source.readStrongBinder();
+ }
+
+ @Override
+ public int describeContents() {
+ return 0;
+ }
+
+ @Override
+ public void writeToParcel(Parcel dest, int flags) {
+ dest.writeStrongBinder(mBinder);
+ }
+ }
+
+ public BinderCursor(String[] columnNames, IBinder binder) {
+ super(columnNames);
+
+ if (binder != null) {
+ Parcelable value = new BinderParcelable(binder);
+ mBinderExtra.putParcelable(KEY_BINDER, value);
+ }
+ }
+
+ @Override
+ public Bundle getExtras() {
+ return mBinderExtra;
+ }
+
+}
\ No newline at end of file
diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/mulprocess/BinderProvider.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/mulprocess/BinderProvider.java
new file mode 100644
index 0000000000..a5aedc83b1
--- /dev/null
+++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/mulprocess/BinderProvider.java
@@ -0,0 +1,55 @@
+package com.mogo.och.taxi.passenger.mulprocess;
+
+import static android.os.Binder.getCallingUid;
+
+import android.content.ContentProvider;
+import android.content.ContentValues;
+import android.database.Cursor;
+import android.net.Uri;
+import android.os.IBinder;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+
+
+public class BinderProvider extends ContentProvider {
+
+ public static final String TAG = BinderProvider.class.getSimpleName();
+
+ public static final String AUTHORITY = "com.mogo.och.taxi.passenger.leftmenu";
+ public static final Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY + "/binder");
+ public static final String SERVICE_LEFTMENU = "lefmenu";
+
+ @Override
+ public boolean onCreate() {
+ return true;
+ }
+
+
+ @Override
+ public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) {
+ getCallingUid();
+ IBinder binder;
+ if (selectionArgs[0].equals(BinderProvider.SERVICE_LEFTMENU)) {
+ binder = new OrderServiceImpl();
+ } else {
+ return null;
+ }
+ BinderCursor cursor = new BinderCursor(new String[]{"service"}, binder);
+ return cursor;
+ }
+
+
+ @Override
+ public String getType(Uri uri) {return null;}
+
+
+ @Override
+ public Uri insert(Uri uri, ContentValues values) {return null;}
+
+ @Override
+ public int delete(Uri uri, String selection, String[] selectionArgs) {return 0;}
+
+ @Override
+ public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) {return 0;}
+}
diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/mulprocess/OrderServiceImpl.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/mulprocess/OrderServiceImpl.java
new file mode 100644
index 0000000000..8854f392cc
--- /dev/null
+++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/mulprocess/OrderServiceImpl.java
@@ -0,0 +1,25 @@
+package com.mogo.och.taxi.passenger.mulprocess;
+
+import android.app.Application;
+import android.os.Build;
+import android.os.RemoteException;
+
+import androidx.annotation.RequiresApi;
+
+import com.mogo.eagle.core.utilcode.util.UiThreadHandler;
+import com.mogo.eagle.core.utilcode.util.Utils;
+import com.mogo.och.taxi.passenger.ui.leftmenu.LeftMenuOpen;
+import com.mogo.och.taxi.passenger.ui.leftmenu.OverlayLeftViewUtils;
+
+public class OrderServiceImpl extends IOrderService.Stub {
+
+ @Override
+ public boolean transmission(int x, int action) throws RemoteException {
+ return LeftMenuOpen.INSTANCE.dragAndOpen(x,action);
+ }
+
+ @Override
+ public void open() throws RemoteException {
+ UiThreadHandler.getsUiHandler().post(() -> OverlayLeftViewUtils.INSTANCE.open());
+ }
+}
\ No newline at end of file
diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/TaxiPassengerBaseFragment.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/TaxiPassengerBaseFragment.java
index d7ed74a9d6..bf1dee6175 100644
--- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/TaxiPassengerBaseFragment.java
+++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/TaxiPassengerBaseFragment.java
@@ -1,5 +1,6 @@
package com.mogo.och.taxi.passenger.ui;
+import android.content.Intent;
import android.os.Build;
import android.os.Handler;
import android.os.Looper;
@@ -18,6 +19,7 @@ import com.mogo.eagle.core.function.call.hmi.CallerHmiManager;
import com.mogo.eagle.core.function.call.map.CallerSmpManager;
import com.mogo.eagle.core.utilcode.util.OverlayViewUtils;
import com.mogo.eagle.core.utilcode.util.UiThreadHandler;
+import com.mogo.eagle.core.utilcode.util.Utils;
import com.mogo.map.MogoMapUIController;
import com.mogo.map.MogoMarkerManager;
import com.mogo.map.listener.IMogoMapListener;
@@ -29,6 +31,7 @@ import com.mogo.och.taxi.passenger.callback.ITPClickStartAutopilotCallback;
import com.mogo.och.taxi.passenger.presenter.BaseTaxiPassengerPresenter;
import com.mogo.och.taxi.passenger.ui.comment.TaxiPassengerArrivedView;
import com.mogo.och.taxi.passenger.ui.leftmenu.OverlayLeftViewUtils;
+import com.mogo.och.taxi.passenger.ui.video.VideoActivity;
import java.lang.ref.WeakReference;
@@ -128,15 +131,15 @@ public class TaxiPassengerBaseFragment extends MvpFragment {
-// OverlayLeftViewUtils.INSTANCE.showOverlayView(getActivity());
-// OverlayLeftViewUtils.INSTANCE.dragTarget(vOpenLeft);
+ Intent intent = new Intent(getContext(), VideoActivity.class);
+ startActivity(intent);
+ OverlayLeftViewUtils.INSTANCE.showOverlayView(getActivity());
+ OverlayLeftViewUtils.INSTANCE.dragTarget(vOpenLeft);
//showOrHideArrivedEndLayout(true, "北京北京北京", "1527481606997577728");
//showOrHidePressengerCheckPager(true, "开始站点开", "开始站点开始站点开始", "2", "京A888888", "18811539480");
//OCHFloatWindowManager.getInstance().ShowFloatWindow(getContext());
//OverlayViewUtils.showOverlayView(getActivity(),new TaxiPassengerMogoConsultView(getContext()));
});
-
- vOpenLeft.setOnClickListener(v -> OverlayLeftViewUtils.INSTANCE.open());
}
private void initArrivedView(){
diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/leftmenu/ItemViewTouchListener.kt b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/leftmenu/ItemViewTouchListener.kt
index a45e01036c..ac30241751 100644
--- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/leftmenu/ItemViewTouchListener.kt
+++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/leftmenu/ItemViewTouchListener.kt
@@ -1,74 +1,36 @@
package com.mogo.och.taxi.passenger.ui.leftmenu
+import android.annotation.SuppressLint
import android.view.MotionEvent
import android.view.View
import android.view.WindowManager
+import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger
+import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant
-class ItemViewTouchListener(
- private val windowView: View,
- private val wl: WindowManager.LayoutParams,
- private val windowManager: WindowManager?,
- private val close: (view:View,windowManager: WindowManager?) -> Unit,
- private val open : (view:View,windowManager: WindowManager?) -> Unit
-) :
+class ItemViewTouchListener :
View.OnTouchListener {
- private var x = 0
// 判断并放跑点击事件
private var dragTime = 0L
- private val DEVIATION = 10
- private val NEGATIVEDEVIATION = -10
+ @SuppressLint("ClickableViewAccessibility")
override fun onTouch(view: View, motionEvent: MotionEvent): Boolean {
when (motionEvent.action) {
MotionEvent.ACTION_DOWN -> {
- x = motionEvent.rawX.toInt()
+ LeftMenuOpen.dragAndOpenOwnProcess(motionEvent.rawX.toInt(),motionEvent.action)
dragTime = System.currentTimeMillis()
}
MotionEvent.ACTION_MOVE -> {
- val nowX = motionEvent.rawX.toInt()
- val movedX = nowX - x
- x = nowX
- wl.apply {
- x += movedX
- }
- if (wl.x > 0 || wl.x < OverlayLeftViewUtils.DEVIATION_WIDTH) {
- wl.apply {
- x -= movedX
- }
+ if (LeftMenuOpen.dragAndOpenOwnProcess(motionEvent.rawX.toInt(),motionEvent.action)) {
return false
}
-
- if (wl.x > NEGATIVEDEVIATION && movedX > 0) {
- open(windowView,windowManager)
- }else{
- //更新悬浮球控件位置
- windowManager?.updateViewLayout(windowView, wl)
- }
- if (wl.x < OverlayLeftViewUtils.DEVIATION_WIDTH +DEVIATION && movedX < 0) {
- close(windowView,windowManager)
- }else{
- //更新悬浮球控件位置
- windowManager?.updateViewLayout(windowView, wl)
- }
-
-
}
MotionEvent.ACTION_UP -> {
- val startX = wl.x
- if (startX > OverlayLeftViewUtils.DEVIATION_WIDTH /2 && startX < 0) {
- //拖动距离大于一半 自动打开
- open(windowView,windowManager)
- } else if (startX < OverlayLeftViewUtils.DEVIATION_WIDTH /2 && startX >= OverlayLeftViewUtils.DEVIATION_WIDTH) {
- // 拖动距离小于一半自动关闭
- close(windowView,windowManager)
- }
+ LeftMenuOpen.dragAndOpenOwnProcess(motionEvent.rawX.toInt(),motionEvent.action)
if (System.currentTimeMillis() - dragTime > 500) {
dragTime = 0
return true
}
}
- else -> {
-
- }
+ else -> {}
}
return false
}
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
new file mode 100644
index 0000000000..2c334cbd80
--- /dev/null
+++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/leftmenu/LeftMenuOpen.kt
@@ -0,0 +1,206 @@
+package com.mogo.och.taxi.passenger.ui.leftmenu
+
+import android.annotation.SuppressLint
+import android.content.ContentResolver
+import android.database.Cursor
+import android.os.IBinder
+import android.os.RemoteException
+import android.view.MotionEvent
+import android.view.View
+import android.view.WindowManager
+import com.mogo.eagle.core.utilcode.util.UiThreadHandler
+import com.mogo.eagle.core.utilcode.util.Utils
+import com.mogo.och.taxi.passenger.mulprocess.BinderCursor
+import com.mogo.och.taxi.passenger.mulprocess.BinderProvider
+import com.mogo.och.taxi.passenger.mulprocess.IOrderService
+
+@SuppressLint("StaticFieldLeak")
+object LeftMenuOpen {
+
+ private var windowView: View? = null
+ private var wl: WindowManager.LayoutParams? = null
+ private var windowManager: WindowManager? = null
+ private var close: ((view: View, windowManager: WindowManager?) -> Unit)? = null
+ private var open: ((view: View, windowManager: WindowManager?) -> Unit)? = null
+
+
+ private var cu: Cursor? = null
+
+ // 两部分主进程和子进程
+ private var dragList = mutableSetOf()
+
+ private var orderService: IOrderService? = null
+
+ // 主进程
+ fun setValue(
+ windowView: View,
+ wl: WindowManager.LayoutParams?,
+ windowManager: WindowManager?,
+ close: (view: View, windowManager: WindowManager?) -> Unit,
+ open: (view: View, windowManager: WindowManager?) -> Unit
+ ) {
+ this.open = open
+ this.close = close
+ this.windowView = windowView
+ this.windowManager = windowManager
+ this.wl = wl
+ dragList.forEach {
+ registerDragView(it)
+ }
+ registerC()
+ }
+
+ // 主进程
+ fun clearValue() {
+ this.open = null
+ this.close = null
+ this.windowView = null
+ this.windowManager = null
+ this.wl = null
+
+ cu?.let {
+ it.close()
+ orderService = null
+ }
+ val iterator = dragList.iterator()
+ while (iterator.hasNext()) {
+ val next = iterator.next()
+ unRegisterDragView(next)
+ }
+ }
+
+
+ private var x = 0
+
+ // 判断并放跑点击事件
+ private const val DEVIATION = 10
+ private const val NEGATIVEDEVIATION = -10
+
+ fun dragAndOpenOwnProcess(newX: Int, action: Int): Boolean {
+ return orderService?.transmission(newX, action) ?: false
+ }
+
+ fun dragAndOpen(newX: Int, action: Int): Boolean {
+ when (action) {
+ MotionEvent.ACTION_DOWN -> {
+ x = newX
+ }
+ MotionEvent.ACTION_MOVE -> {
+ val nowX = newX
+ val movedX = nowX - x
+ x = nowX
+ wl?.let { it ->
+ it.x += movedX
+ if (it.x > 0 || it.x < OverlayLeftViewUtils.DEVIATION_WIDTH) {
+ it.apply {
+ x -= movedX
+ }
+ return true
+ }
+ windowView?.let { windowView ->
+ windowManager?.let { windowManager ->
+ if (it.x > NEGATIVEDEVIATION && movedX > 0) {
+ open?.let { it1 ->
+ UiThreadHandler.getsUiHandler().post {
+ it1(windowView, windowManager)
+ }
+ }
+ } else {
+ //更新悬浮球控件位置
+ UiThreadHandler.getsUiHandler().post {
+ windowManager.updateViewLayout(windowView, it)
+ }
+ }
+ if (it.x < OverlayLeftViewUtils.DEVIATION_WIDTH + DEVIATION && movedX < 0) {
+ close?.let { it1 ->
+ UiThreadHandler.getsUiHandler().post {
+ it1(windowView, windowManager)
+ }
+ }
+ } else {
+ //更新悬浮球控件位置
+ UiThreadHandler.getsUiHandler().post {
+ windowManager.updateViewLayout(windowView, it)
+ }
+ }
+ }
+
+ }
+
+ }
+ }
+ MotionEvent.ACTION_UP -> {
+ wl?.let { wl ->
+ val startX = wl.x
+ if (startX > OverlayLeftViewUtils.DEVIATION_WIDTH / 2 && startX < 0) {
+ //拖动距离大于一半 自动打开
+ open?.let {
+ UiThreadHandler.getsUiHandler().post {
+ it(windowView!!, windowManager)
+ }
+ }
+ } else if (startX < OverlayLeftViewUtils.DEVIATION_WIDTH / 2 && startX >= OverlayLeftViewUtils.DEVIATION_WIDTH) {
+ // 拖动距离小于一半自动关闭
+ close?.let {
+ UiThreadHandler.getsUiHandler().post {
+ it(windowView!!, windowManager)
+ }
+ }
+ } else {
+
+ }
+ }
+ }
+ }
+ return false
+ }
+
+ fun registerDragView(view: View?) {
+ if (view != null) {
+ dragList.add(view)
+ if (orderService == null) {
+ registerC()
+ }
+ view.setOnTouchListener(ItemViewTouchListener())
+ view.setOnClickListener {
+ orderService?.open()
+ }
+ }
+ }
+
+ fun unRegisterDragView(view: View?) {
+ dragList.remove(view)
+ view?.let {
+ it.setOnTouchListener(null)
+ it.setOnClickListener(null)
+ }
+ }
+
+ private fun registerC() {
+ val resolver: ContentResolver = Utils.getApp().contentResolver
+
+ cu = resolver.query(
+ BinderProvider.CONTENT_URI,
+ null,
+ null,
+ arrayOf(BinderProvider.SERVICE_LEFTMENU),
+ null
+ ) ?: return
+
+ val binder: IBinder = getBinder(cu!!)
+ try {
+ orderService = IOrderService.Stub.asInterface(binder)
+ } catch (e: RemoteException) {
+ e.printStackTrace()
+ cu?.close()
+ cu = null
+ }
+ }
+
+ private fun getBinder(cursor: Cursor): IBinder {
+ val extras = cursor.extras
+ extras.classLoader = BinderCursor.BinderParcelable::class.java.classLoader
+ val w = extras.getParcelable("binder")
+ return w!!.mBinder
+ }
+}
\ No newline at end of file
diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/leftmenu/OverlayLeftViewUtils.kt b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/leftmenu/OverlayLeftViewUtils.kt
index 7c6a68910f..aa5d261540 100644
--- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/leftmenu/OverlayLeftViewUtils.kt
+++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/leftmenu/OverlayLeftViewUtils.kt
@@ -6,13 +6,18 @@ import android.annotation.SuppressLint
import android.app.Activity
import android.content.Context
import android.graphics.PixelFormat
-import android.graphics.Rect
-import android.view.*
+import android.view.Gravity
+import android.view.LayoutInflater
+import android.view.View
+import android.view.WindowManager
import android.view.animation.LinearInterpolator
import android.widget.ListView
import androidx.appcompat.widget.AppCompatImageView
import androidx.constraintlayout.widget.ConstraintLayout
+import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger
+import com.mogo.eagle.core.utilcode.util.IAppStateListener
import com.mogo.eagle.core.utilcode.util.OverlayViewUtils
+import com.mogo.eagle.core.utilcode.util.ProcessUtils
import com.mogo.och.taxi.passenger.R
import com.mogo.och.taxi.passenger.ui.leftmenu.model.LeftMenuModel
import com.mogo.och.taxi.passenger.ui.video.FullVideoUtils
@@ -51,13 +56,26 @@ object OverlayLeftViewUtils {
private var taxiPassengerMogoMoviesView: TaxiPassengerMogoMoviesView? = null
private var acivOpenClose: AppCompatImageView?=null
- private var dragList = mutableListOf()
+
+ private val appStatesListener = object : IAppStateListener {
+ override fun onAppStateChanged(isForeground: Boolean) {
+ if (isForeground) {
+ CallerLogger.d("FinalizeCrashFixer", "--- 切换到前台 ---")
+ } else {
+ CallerLogger.d("FinalizeCrashFixer", "--- 切换到后台 ---")
+ }
+ }
+ }
/**
* 添加覆盖View在Activity上面
*/
@JvmOverloads
fun showOverlayView(context: Activity, ani: Int = -1) {
+ if (!ProcessUtils.isMainProcess(context)) {
+ // 只有主进程可以启动
+ return
+ }
if (isShowing) {
return
}
@@ -84,13 +102,7 @@ object OverlayLeftViewUtils {
val vDragField = view.findViewById(R.id.v_drag_field)
acivOpenClose = view.findViewById(R.id.aciv_open_close)
- dragList.forEach {
- it.setOnTouchListener(ItemViewTouchListener(
- overlayView!!,params!!, windowManager, ::close,
- ::open))
- }
- vDragField.setOnTouchListener(ItemViewTouchListener(overlayView!!,params!!, windowManager, ::close,
- ::open))
+ vDragField.setOnTouchListener(ItemViewTouchListener())
vDragField.setOnClickListener {
val start: Int = params!!.x
if (start > DEVIATION_WIDTH /2 && start < 10) {
@@ -136,6 +148,9 @@ object OverlayLeftViewUtils {
integers.add(LeftMenuModel(R.drawable.taxi_p_mogo_consult_select,R.drawable.taxi_p_mogo_consult_selected,false,consultSelect))
integers.add(LeftMenuModel(R.drawable.taxi_p_mogo_entertainment_select,R.drawable.taxi_p_mogo_entertainment_selected,false,entertainmentSelect))
lvSelectItem.adapter = ListAdapter(context, integers)
+
+ //AppStateManager.registerAppStateListener(appStatesListener)
+ LeftMenuOpen.setValue(view, params, windowManager,::close,::open)
try {
windowManager!!.addView(overlayView, params)
isShowing = true
@@ -182,22 +197,12 @@ object OverlayLeftViewUtils {
}
}
- fun dragTarget(view :View){
- if(view!=null) {
- dragList.add(view)
- params?.let {
- view.setOnTouchListener(
- ItemViewTouchListener(
- overlayView!!, params!!, windowManager, ::close,
- ::open
- )
- )
- }
- }
+ fun dragTarget(view :View?){
+ LeftMenuOpen.registerDragView(view)
}
- fun removeDragTarget(view: View){
- dragList.remove(view)
+ fun removeDragTarget(view: View?){
+ LeftMenuOpen.unRegisterDragView(view)
}
private fun closeByTime(
@@ -262,7 +267,7 @@ object OverlayLeftViewUtils {
it.y = 0
it.format = PixelFormat.RGBA_8888
// 设置窗口类型为应用子窗口,和PopupWindow同类型
- it.type = WindowManager.LayoutParams.TYPE_APPLICATION_SUB_PANEL
+ it.type = WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY
// 没有边界限制,允许窗口扩展到屏幕外
it.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE or
WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS or
@@ -281,17 +286,15 @@ object OverlayLeftViewUtils {
if (!isShowing) {
return
}
+ //AppStateManager.unRegisterAppStateListener(appStatesListener)
subscribe?.let {
if (!it.isDisposed) {
it.dispose()
}
}
+ LeftMenuOpen.clearValue()
FullVideoUtils.dismissOverlayView(true)
// 管理的要关闭都得关闭
- dragList.forEach {
- it.setOnTouchListener(null)
- }
- dragList.clear()
closeConsult()
closeMovice()
subscribe = null
@@ -323,7 +326,4 @@ object OverlayLeftViewUtils {
System.gc()
}
- private fun getViewBounds(view: View): Rect {
- return Rect(view.left, view.top, view.right, view.bottom)
- }
}
\ No newline at end of file
diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/video/TaxiPassengerMogoConsultView.kt b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/video/TaxiPassengerMogoConsultView.kt
index d6f5799311..3bd0c79020 100644
--- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/video/TaxiPassengerMogoConsultView.kt
+++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/video/TaxiPassengerMogoConsultView.kt
@@ -59,9 +59,6 @@ class TaxiPassengerMogoConsultView :RelativeLayout {
clContain = findViewById(R.id.cl_contain)
vOpenLeft = findViewById(R.id.v_open_left)
- vOpenLeft.setOnClickListener {
- OverlayLeftViewUtils.open()
- }
OverlayLeftViewUtils.dragTarget(vOpenLeft)
val arrayListOf = ArrayList()
diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/video/TaxiPassengerMogoMoviesView.kt b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/video/TaxiPassengerMogoMoviesView.kt
index 2693764339..99c5aca7d3 100644
--- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/video/TaxiPassengerMogoMoviesView.kt
+++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/video/TaxiPassengerMogoMoviesView.kt
@@ -60,9 +60,6 @@ class TaxiPassengerMogoMoviesView :RelativeLayout {
clContain = findViewById(R.id.cl_contain)
vOpenLeft = findViewById(R.id.v_open_left)
- vOpenLeft.setOnClickListener {
- OverlayLeftViewUtils.open()
- }
OverlayLeftViewUtils.dragTarget(vOpenLeft)
val arrayListOf = ArrayList()
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
new file mode 100644
index 0000000000..659c725555
--- /dev/null
+++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/video/VideoActivity.kt
@@ -0,0 +1,301 @@
+package com.mogo.och.taxi.passenger.ui.video
+
+import android.content.ContentResolver
+import android.database.Cursor
+import android.graphics.Bitmap
+import android.graphics.Color
+import android.graphics.drawable.BitmapDrawable
+import android.net.Uri
+import android.os.Bundle
+import android.os.IBinder
+import android.os.RemoteException
+import android.view.View
+import androidx.appcompat.app.AppCompatActivity
+import androidx.constraintlayout.widget.ConstraintLayout
+import androidx.recyclerview.widget.RecyclerView
+import com.bumptech.glide.Glide
+import com.bumptech.glide.request.RequestOptions
+import com.bumptech.glide.request.target.SimpleTarget
+import com.bumptech.glide.request.transition.Transition
+import com.mogo.eagle.core.utilcode.util.ToastUtils
+import com.mogo.och.taxi.passenger.R
+import com.mogo.och.taxi.passenger.bean.TaxiPassengerVideoPlay
+import com.mogo.och.taxi.passenger.ui.leftmenu.OverlayLeftViewUtils
+import com.mogo.och.taxi.passenger.ui.video.layoutmanage.CarouselLayoutManager
+import com.mogo.och.taxi.passenger.ui.video.layoutmanage.CarouselZoomPostLayoutListener
+import com.mogo.och.taxi.passenger.ui.video.layoutmanage.CenterScrollListener
+import com.mogo.och.taxi.passenger.utils.blur.GlideBlurTransform
+import com.mogo.och.taxi.passenger.widget.ConsultVideoPlayer
+import com.mogo.och.taxi.passenger.widget.indicator.IndicatorView
+import com.mogo.och.taxi.passenger.widget.indicator.enums.IndicatorOrientation
+import com.mogo.och.taxi.passenger.widget.indicator.enums.IndicatorSlideMode
+import com.mogo.och.taxi.passenger.widget.indicator.enums.IndicatorStyle
+import com.shuyu.gsyvideoplayer.listener.GSYSampleCallBack
+import com.shuyu.gsyvideoplayer.video.base.GSYVideoView
+import kotlin.math.floor
+
+
+class VideoActivity : AppCompatActivity() {
+
+ private lateinit var rvVideoPlaylist: RecyclerView
+ private lateinit var indicatorView: IndicatorView
+ private lateinit var clContain: ConstraintLayout
+ private lateinit var vOpenLeft: View
+
+ companion object{
+ const val SERVICE_ORDER = "order"
+ }
+
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ setContentView(R.layout.activity_video)
+
+ initView()
+ initListener()
+ initData()
+ }
+
+ private fun initData() {
+ val arrayListOf = ArrayList()
+ arrayListOf.add(
+ TaxiPassengerVideoPlay(
+ "https://img.zhidaohulian.com/fileServer/online_car_hailing/1655708596763/全车型混剪增加红旗车队.m4v",
+ "https://img.zhidaohulian.com/fileServer/online_car_hailing/1655969511280/车队.png",
+ "蘑菇车联覆盖生活的方方面面"
+ )
+ )
+ arrayListOf.add(
+ TaxiPassengerVideoPlay(
+ "https://img.zhidaohulian.com/fileServer/online_car_hailing/1655708554279/红旗车队.m4v",
+ "https://img.zhidaohulian.com/fileServer/online_car_hailing/1655969553174/红旗重新排版.png",
+ "蘑菇车联之红旗车队"
+ )
+ )
+ arrayListOf.add(
+ TaxiPassengerVideoPlay(
+ "https://img.zhidaohulian.com/fileServer/online_car_hailing/1655708499497/大运会合作解说版.m4v",
+ "https://img.zhidaohulian.com/fileServer/online_car_hailing/1655969536177/大运会.png",
+ "蘑菇车联牵手成都大运会"
+ )
+ )
+ arrayListOf.add(
+ TaxiPassengerVideoPlay(
+ "https://img.zhidaohulian.com/fileServer/online_car_hailing/1655708409810/20210610重新排版3屏.m4v",
+ "https://img.zhidaohulian.com/fileServer/online_car_hailing/1655969579713/三屏.png",
+ "多视角体验蘑菇车联自动驾驶"
+ )
+ )
+ val recyclerVideoAdapter = RecyclerVideoAdapter(this, arrayListOf)
+ val carouselLayoutManager = CarouselLayoutManager(CarouselLayoutManager.HORIZONTAL, true)
+ carouselLayoutManager.setPostLayoutListener(CarouselZoomPostLayoutListener())
+ carouselLayoutManager.maxVisibleItems = 1
+ indicatorView.notifyDataChanged(arrayListOf.size)
+ indicatorView.setSlideMode(IndicatorSlideMode.SCALE)
+ indicatorView.setOrientation(IndicatorOrientation.INDICATOR_HORIZONTAL)
+ indicatorView.setIndicatorStyle(IndicatorStyle.ROUND_RECT)
+ indicatorView.setSliderColor(
+ Color.parseColor("#80FFFFFF"), Color.parseColor("#2972FF"),
+ Color.parseColor("#27C8FF")
+ )
+ indicatorView.setSliderWidth(16f, 101f)
+ indicatorView.setSliderHeight(16f)
+ indicatorView.setSliderGap(30f)
+ rvVideoPlaylist.addOnScrollListener(object : CenterScrollListener() {
+ var prePlayerPosition = 0
+ override fun pageSelect(recyclerView: RecyclerView?, newState: Int) {
+ //播放视频
+ val (centerItemPosition: kotlin.Int, player) = getPlayer(carouselLayoutManager)
+ indicatorView.onPageSelected(centerItemPosition)
+ if (player is ConsultVideoPlayer) {
+ if (prePlayerPosition != centerItemPosition) {
+ if (player.currentState == GSYVideoView.CURRENT_STATE_PAUSE) {
+ player.onVideoReset()
+ } else {
+ }
+ val playerHolder =
+ carouselLayoutManager.findViewByPosition(prePlayerPosition)
+ val prePlayer =
+ playerHolder?.findViewById(R.id.video_item_player)
+ prePlayer?.let {
+ if (it is ConsultVideoPlayer) {
+ it.onVideoReset()
+ }
+ }
+ val taxiPassengerVideoPlay = arrayListOf[centerItemPosition]
+ setBackageAndPlayNext(taxiPassengerVideoPlay, player, centerItemPosition)
+ } else {
+ player.onVideoResume(false)
+ }
+ }
+ prePlayerPosition = centerItemPosition
+ }
+
+ override fun pageStop() {
+ val (centerItemPosition: kotlin.Int, player) = getPlayer(carouselLayoutManager)
+ if (player is ConsultVideoPlayer) {
+ player.onVideoPause()
+ }
+ }
+
+ })
+ carouselLayoutManager.addOnDargAutoDiffListener { adapterPosition, currentPosition ->
+ val fl = adapterPosition - floor(adapterPosition)
+ var currentIndex = currentPosition
+ if (fl > 0.5) {
+ if (currentPosition == 0) {
+ currentIndex = rvVideoPlaylist.adapter!!.itemCount - 1
+ } else {
+ currentIndex -= 1
+ }
+ }
+ indicatorView.onPageScrolled(currentIndex, fl, 0)
+ }
+ recyclerVideoAdapter.setOnThumbImageClilckListener {
+ val (centerItemPosition: kotlin.Int, player) = getPlayer(carouselLayoutManager)
+ if (player is ConsultVideoPlayer) {
+ player.onVideoReset()
+ player.thumbImageViewLayout.visibility = View.VISIBLE
+ }
+ rvVideoPlaylist.smoothScrollToPosition(it)
+ }
+ rvVideoPlaylist.layoutManager = carouselLayoutManager
+ rvVideoPlaylist.setHasFixedSize(true)
+ rvVideoPlaylist.adapter = recyclerVideoAdapter
+ }
+
+ private fun getPlayer(carouselLayoutManager: CarouselLayoutManager): Pair {
+ val centerItemPosition: Int = carouselLayoutManager.centerItemPosition
+ val playerHolder = carouselLayoutManager.findViewByPosition(centerItemPosition)
+ val player = playerHolder?.findViewById(R.id.video_item_player)
+ return Pair(centerItemPosition, player)
+ }
+
+ private fun initListener() {
+ OverlayLeftViewUtils.dragTarget(vOpenLeft)
+ }
+
+ private fun initView() {
+ rvVideoPlaylist = findViewById(R.id.rv_video_playlist)
+ indicatorView = findViewById(R.id.indicatorView)
+ clContain = findViewById(R.id.cl_contain)
+ vOpenLeft = findViewById(R.id.v_open_left)
+ }
+
+
+ private fun setBackageAndPlayNext(
+ taxiPassengerVideoPlay: TaxiPassengerVideoPlay,
+ player: ConsultVideoPlayer,
+ centerItemPosition: Int,
+ ) {
+ // 设置背景图片
+ Glide.with(this).asBitmap()
+ .load(taxiPassengerVideoPlay.imageUrl)
+ .apply(
+ RequestOptions().transform(
+ GlideBlurTransform(this, taxiPassengerVideoPlay.imageUrl, 100)
+ )
+ )
+ .into(object : SimpleTarget() {
+ override fun onResourceReady(
+ resource: Bitmap,
+ transition: Transition?
+ ) {
+ clContain.background = BitmapDrawable(resources, resource)
+ }
+ })
+ if (player.getVideoAllCallBack() == null) {
+ player.setVideoAllCallBack(object : GSYSampleCallBack() {
+ override fun onAutoComplete(url: String?, vararg objects: Any?) {
+ player.onVideoReset()
+ val itemCount = rvVideoPlaylist.adapter?.itemCount
+ itemCount?.let {
+ if (centerItemPosition == itemCount - 1) {
+ rvVideoPlaylist.smoothScrollToPosition(0)
+ } else {
+ rvVideoPlaylist.smoothScrollToPosition(centerItemPosition + 1)
+ }
+ }
+ }
+
+ override fun onClickBlank(url: String?, vararg objects: Any?) {
+ super.onClickBlank(url, *objects)
+ rvVideoPlaylist.smoothScrollToPosition(centerItemPosition)
+ }
+
+ override fun onPlayError(url: String?, vararg objects: Any?) {
+ super.onPlayError(url, *objects)
+ ToastUtils.showLong("哎呀,出错了,看看其他视频吧")
+ }
+
+ override fun onClickStartError(url: String?, vararg objects: Any?) {
+ super.onClickStartError(url, *objects)
+ ToastUtils.showLong("哎呀,出错了,看看其他视频吧")
+ }
+ })
+ }
+ }
+
+ override fun onResume() {
+ super.onResume()
+ val carouselLayoutManager = rvVideoPlaylist.layoutManager as CarouselLayoutManager
+ val (centerItemPosition: Int, player) = getPlayer(carouselLayoutManager)
+ player?.let {
+ if (player is ConsultVideoPlayer) {
+
+ // 恢复播放和开始播放
+ if (player.isIfCurrentIsFullscreen) {// 全屏了
+
+ } else {
+ when (player.currentState) {
+ GSYVideoView.CURRENT_STATE_PAUSE -> {
+ player.onVideoResume(false)
+ }
+ GSYVideoView.CURRENT_STATE_PLAYING -> {
+ }
+ else -> {
+ val recyclerVideoAdapter =
+ rvVideoPlaylist.adapter as RecyclerVideoAdapter
+ setBackageAndPlayNext(
+ recyclerVideoAdapter.getItemByPosition(centerItemPosition),
+ player, centerItemPosition
+ )
+ //player.startPlayLogic()
+ }
+ }
+ }
+ }
+
+ }
+
+ }
+
+ override fun onPause() {
+ super.onPause()
+ val carouselLayoutManager = rvVideoPlaylist.layoutManager as CarouselLayoutManager
+ val (centerItemPosition: Int, player) = getPlayer(carouselLayoutManager)
+ player?.let {
+ if (player is ConsultVideoPlayer) {
+ // 离开应用 暂停视频
+ // 关闭 onDetachedFromWindow 会reset
+ if (player.isIfCurrentIsFullscreen) {// 全屏了
+ } else {
+ player.onVideoPause()
+ }
+ }
+ }
+ }
+
+ override fun onDestroy() {
+ super.onDestroy()
+ val carouselLayoutManager = rvVideoPlaylist.layoutManager as CarouselLayoutManager
+ val (_: Int, player) = getPlayer(carouselLayoutManager)
+ player?.let {
+ if(player is ConsultVideoPlayer){
+ player.currentPlayer.release()
+ player.onVideoReset()
+ }
+ }
+ OverlayLeftViewUtils.removeDragTarget(vOpenLeft)
+ }
+
+}
\ No newline at end of file
diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/widget/ConsultVideoPlayer.kt b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/widget/ConsultVideoPlayer.kt
index 797e69c1a1..10f9d251c4 100644
--- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/widget/ConsultVideoPlayer.kt
+++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/widget/ConsultVideoPlayer.kt
@@ -76,9 +76,6 @@ class ConsultVideoPlayer : StandardGSYVideoPlayer {
aivStartPlay.scaleY = 0.8f
vPpenLeft = findViewById(R.id.v_open_left)
- vPpenLeft.setOnClickListener {
- OverlayLeftViewUtils.open()
- }
OverlayLeftViewUtils.dragTarget(vPpenLeft)
}
diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/layout/activity_video.xml b/OCH/mogo-och-taxi-passenger/src/main/res/layout/activity_video.xml
new file mode 100644
index 0000000000..6d7db62b32
--- /dev/null
+++ b/OCH/mogo-och-taxi-passenger/src/main/res/layout/activity_video.xml
@@ -0,0 +1,74 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/values/strings.xml b/OCH/mogo-och-taxi-passenger/src/main/res/values/strings.xml
index bc93dc9da1..e26ceacfa4 100644
--- a/OCH/mogo-och-taxi-passenger/src/main/res/values/strings.xml
+++ b/OCH/mogo-och-taxi-passenger/src/main/res/values/strings.xml
@@ -31,7 +31,7 @@
请输出手机号后4位:
小蘑菇
删除
-
+
点击开始
启动中...
自动驾驶启动失败,请与司机确认车辆状态