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 cb22b2dcbd..a25949c8e4 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.os.Build; import android.os.Handler; import android.os.Looper; import android.view.View; @@ -54,6 +55,8 @@ public class TaxiPassengerBaseFragment extends MvpFragment mArrivedCheckView; private WeakReference mStartAutopilotView; + private View vOpenLeft; + protected TaxiPassengerServingOrderFragment ochServingOrderFragment = null; private Handler mHandler = new Handler(Looper.getMainLooper()); @@ -83,6 +86,7 @@ public class TaxiPassengerBaseFragment extends MvpFragment OverlayLeftViewUtils.INSTANCE.open()); + OverlayLeftViewUtils.INSTANCE.dragTarget(vOpenLeft); } private void initArrivedView(){ @@ -223,6 +230,7 @@ public class TaxiPassengerBaseFragment extends MvpFragment Unit, @@ -38,16 +38,16 @@ class ItemViewTouchListener( } if (wl.x > NEGATIVEDEVIATION && movedX > 0) { - open(view.rootView,windowManager) + open(windowView,windowManager) }else{ //更新悬浮球控件位置 - windowManager?.updateViewLayout(view.rootView, wl) + windowManager?.updateViewLayout(windowView, wl) } if (wl.x < OverlayLeftViewUtils.DEVIATION_WIDTH +DEVIATION && movedX < 0) { - close(view.rootView,windowManager) + close(windowView,windowManager) }else{ //更新悬浮球控件位置 - windowManager?.updateViewLayout(view.rootView, wl) + windowManager?.updateViewLayout(windowView, wl) } @@ -56,10 +56,10 @@ class ItemViewTouchListener( val startX = wl.x if (startX > OverlayLeftViewUtils.DEVIATION_WIDTH /2 && startX < 0) { //拖动距离大于一半 自动打开 - open(view.rootView,windowManager) + open(windowView,windowManager) } else if (startX < OverlayLeftViewUtils.DEVIATION_WIDTH /2 && startX >= OverlayLeftViewUtils.DEVIATION_WIDTH) { // 拖动距离小于一半自动关闭 - close(view.rootView,windowManager) + close(windowView,windowManager) } if (System.currentTimeMillis() - dragTime > 500) { dragTime = 0 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 32c2795070..e276a09ede 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 @@ -7,7 +7,6 @@ import android.app.Activity import android.content.Context import android.graphics.PixelFormat import android.graphics.Rect -import android.graphics.Region import android.view.* import android.view.animation.LinearInterpolator import android.widget.ListView @@ -19,8 +18,6 @@ import com.mogo.och.taxi.passenger.ui.leftmenu.model.LeftMenuModel import com.mogo.och.taxi.passenger.ui.video.FullVideoUtils import com.mogo.och.taxi.passenger.ui.video.TaxiPassengerMogoConsultView import com.mogo.och.taxi.passenger.ui.video.TaxiPassengerMogoMoviesView -import com.mogo.och.taxi.passenger.utils.windowdispatch.OnComputeInternalInsetsListener -import com.mogo.och.taxi.passenger.utils.windowdispatch.ReflectionUtils import io.reactivex.Observable import io.reactivex.android.schedulers.AndroidSchedulers import io.reactivex.disposables.Disposable @@ -40,9 +37,6 @@ object OverlayLeftViewUtils { @Volatile private var isShowing = false - - private var mInvocationHandler: OnComputeInternalInsetsListener? = null - private val mTouchRegion = Region() private var params:WindowManager.LayoutParams?=null const val WIDTH = 810 @@ -57,6 +51,7 @@ object OverlayLeftViewUtils { private var taxiPassengerMogoMoviesView: TaxiPassengerMogoMoviesView? = null private var acivOpenClose: AppCompatImageView?=null + private var dragList = mutableListOf() /** * 添加覆盖View在Activity上面 @@ -89,7 +84,12 @@ object OverlayLeftViewUtils { val vDragField = view.findViewById(R.id.v_drag_field) acivOpenClose = view.findViewById(R.id.aciv_open_close) - vDragField.setOnTouchListener(ItemViewTouchListener(params!!, windowManager, ::close, + dragList.forEach { + it.setOnTouchListener(ItemViewTouchListener( + overlayView!!,params!!, windowManager, ::close, + ::open)) + } + vDragField.setOnTouchListener(ItemViewTouchListener(overlayView!!,params!!, windowManager, ::close, ::open)) vDragField.setOnClickListener { val start: Int = params!!.x @@ -136,26 +136,7 @@ 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) - - view.viewTreeObserver - .addOnGlobalLayoutListener(object :ViewTreeObserver.OnGlobalLayoutListener{ - override fun onGlobalLayout() { - mTouchRegion.setEmpty() - mTouchRegion.op(getViewBounds(vDragField), Region.Op.UNION) - mTouchRegion.op(getViewBounds(lvSelectItem), Region.Op.UNION) - mInvocationHandler?.touchRegion = mTouchRegion - view.viewTreeObserver.removeOnGlobalLayoutListener(this) - } - }) try { - mInvocationHandler = - OnComputeInternalInsetsListener() - ReflectionUtils.removeOnComputeInternalInsetsListener(view.viewTreeObserver) - ReflectionUtils.addOnComputeInternalInsetsListener( - view.viewTreeObserver, - mInvocationHandler?.getListener() - ) - mInvocationHandler?.touchRegion = mTouchRegion windowManager!!.addView(overlayView, params) isShowing = true } catch (e: Exception) { @@ -184,6 +165,10 @@ object OverlayLeftViewUtils { rotation = 0f } closeByTime(overlayView, windowManager) + params?.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE or + WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS or + WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL + windowManager?.updateViewLayout(overlayView, params) } override fun onAnimationCancel(animation: Animator?) {} override fun onAnimationRepeat(animation: Animator?) {} @@ -191,6 +176,24 @@ object OverlayLeftViewUtils { valueAnimator.start() } + fun open(){ + if(isShowing) { + overlayView?.let { open(it, windowManager) } + } + } + + fun dragTarget(view :View){ + dragList.add(view) + params?.let { + view.setOnTouchListener(ItemViewTouchListener(overlayView!!,params!!, windowManager, ::close, + ::open)) + } + } + + fun removeDragTarget(view: View){ + dragList.remove(view) + } + private fun closeByTime( overlayView: View, windowManager: WindowManager? @@ -228,6 +231,11 @@ object OverlayLeftViewUtils { pivotY = (height /2).toFloat() rotation = 180f } + params?.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE or + WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS or + WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE or + WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL + windowManager?.updateViewLayout(overlayView, params) } override fun onAnimationCancel(animation: Animator?) {} override fun onAnimationRepeat(animation: Animator?) {} @@ -243,7 +251,7 @@ object OverlayLeftViewUtils { it.width = WIDTH it.height = WindowManager.LayoutParams.MATCH_PARENT it.alpha = 1.0f - it.gravity = Gravity.START or Gravity.TOP + it.gravity = Gravity.START or Gravity.CENTER_HORIZONTAL it.x = 0 it.y = 0 it.format = PixelFormat.RGBA_8888 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 135e5e77cc..d6f5799311 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 @@ -17,6 +17,7 @@ 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 @@ -28,7 +29,6 @@ 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 java.util.* import kotlin.math.floor @@ -50,12 +50,19 @@ class TaxiPassengerMogoConsultView :RelativeLayout { private lateinit var rvVideoPlaylist: RecyclerView private lateinit var indicatorView: IndicatorView private lateinit var clContain: ConstraintLayout + private lateinit var vOpenLeft: View private fun initView(context: Context) { LayoutInflater.from(context).inflate(R.layout.taxi_p_arrived_mogo_consult, this, true) 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) + + vOpenLeft.setOnClickListener { + OverlayLeftViewUtils.open() + } + OverlayLeftViewUtils.dragTarget(vOpenLeft) 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","蘑菇车联覆盖生活的方方面面")) @@ -249,6 +256,7 @@ class TaxiPassengerMogoConsultView :RelativeLayout { player.onVideoReset() } } + OverlayLeftViewUtils.removeDragTarget(vOpenLeft) super.onDetachedFromWindow() } 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 bcd7287c82..2693764339 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 @@ -17,6 +17,7 @@ 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 @@ -50,6 +51,7 @@ class TaxiPassengerMogoMoviesView :RelativeLayout { private lateinit var rvVideoPlaylist: RecyclerView private lateinit var indicatorView: IndicatorView private lateinit var clContain: ConstraintLayout + private lateinit var vOpenLeft: View private fun initView(context: Context) { LayoutInflater.from(context).inflate(R.layout.taxi_p_mogo_movies, this, true) @@ -57,6 +59,12 @@ class TaxiPassengerMogoMoviesView :RelativeLayout { indicatorView = findViewById(R.id.indicatorView) clContain = findViewById(R.id.cl_contain) + vOpenLeft = findViewById(R.id.v_open_left) + vOpenLeft.setOnClickListener { + OverlayLeftViewUtils.open() + } + OverlayLeftViewUtils.dragTarget(vOpenLeft) + val arrayListOf = ArrayList() arrayListOf.add(TaxiPassengerVideoPlay("https://img.zhidaohulian.com/fileServer/online_car_hailing/1656558672856/小宝宝.mp4","https://img.zhidaohulian.com/fileServer/online_car_hailing/1656559345882/1.png","小宝宝")) arrayListOf.add(TaxiPassengerVideoPlay("https://img.zhidaohulian.com/fileServer/online_car_hailing/1656558697055/小猫.mp4","https://img.zhidaohulian.com/fileServer/online_car_hailing/1656559367261/2.png","小猫")) @@ -249,6 +257,7 @@ class TaxiPassengerMogoMoviesView :RelativeLayout { player.onVideoReset() } } + OverlayLeftViewUtils.removeDragTarget(vOpenLeft) super.onDetachedFromWindow() } diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/utils/windowdispatch/OnComputeInternalInsetsListener.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/utils/windowdispatch/OnComputeInternalInsetsListener.java deleted file mode 100644 index 6fd67ae232..0000000000 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/utils/windowdispatch/OnComputeInternalInsetsListener.java +++ /dev/null @@ -1,55 +0,0 @@ -package com.mogo.och.taxi.passenger.utils.windowdispatch; - -import android.graphics.Region; -import android.inputmethodservice.InputMethodService; - -import java.lang.reflect.Field; -import java.lang.reflect.InvocationHandler; -import java.lang.reflect.Method; -import java.lang.reflect.Proxy; - -public class OnComputeInternalInsetsListener implements InvocationHandler { - - private Region touchRegion = null; - public Object getListener() { - Object target = null; - try { - Class class1 = Class.forName("android.view.ViewTreeObserver$OnComputeInternalInsetsListener"); - target = Proxy.newProxyInstance(OnComputeInternalInsetsListener.class.getClassLoader(), - new Class[]{class1}, this); - } catch (Exception e) { - e.printStackTrace(); - } - return target; - } - - public Region getTouchRegion() { - return touchRegion; - } - - public void setTouchRegion(Region touchRegion) { - this.touchRegion = touchRegion; - } - - @Override - public Object invoke(Object proxy, Method method, Object[] args) { - try { - Field regionField = args[0].getClass() - .getDeclaredField("touchableRegion"); - regionField.setAccessible(true); - Field insetField = args[0].getClass() - .getDeclaredField("mTouchableInsets"); - insetField.setAccessible(true); - if (touchRegion != null) { - Region region = (Region) regionField.get(args[0]); - region.set(touchRegion); - insetField.set(args[0], InputMethodService.Insets.TOUCHABLE_INSETS_REGION); - } else { - insetField.set(args[0], InputMethodService.Insets.TOUCHABLE_INSETS_FRAME); - } - } catch (Exception e) { - e.printStackTrace(); - } - return null; - } -} diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/utils/windowdispatch/ReflectionUtils.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/utils/windowdispatch/ReflectionUtils.java deleted file mode 100644 index 1ade41a62d..0000000000 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/utils/windowdispatch/ReflectionUtils.java +++ /dev/null @@ -1,51 +0,0 @@ -package com.mogo.och.taxi.passenger.utils.windowdispatch; - -import android.view.ViewTreeObserver; - -import java.lang.reflect.Field; -import java.lang.reflect.Method; -import java.util.ArrayList; - -public class ReflectionUtils { - - private ReflectionUtils() { - - } - - public static void removeOnComputeInternalInsetsListener(ViewTreeObserver viewTree) { - if (viewTree == null) { - return; - } - try { - Class clazz = Class.forName("android.view.ViewTreeObserver"); - Field field = viewTree.getClass().getDeclaredField("mOnComputeInternalInsetsListeners"); - field.setAccessible(true); - Object listenerList = field.get(viewTree); - Method method = listenerList.getClass().getDeclaredMethod("getArray"); - method.setAccessible(true); - ArrayList list = (ArrayList) method.invoke(listenerList); - Class classes[] = {Class.forName("android.view.ViewTreeObserver$OnComputeInternalInsetsListener")}; - if (list != null && list.size() > 0) { - clazz.getDeclaredMethod("removeOnComputeInternalInsetsListener", classes).invoke(viewTree, - list.get(0)); - } - } catch (Exception e) { - e.printStackTrace(); - } - } - - public static void addOnComputeInternalInsetsListener(ViewTreeObserver viewTree, Object object) { - if (viewTree == null) { - return; - } - try { - Class classes[] = {Class.forName("android.view.ViewTreeObserver$OnComputeInternalInsetsListener")}; - Class clazz = Class.forName("android.view.ViewTreeObserver"); - clazz.getDeclaredMethod("addOnComputeInternalInsetsListener", classes).invoke(viewTree, - object); - } catch (Exception e) { - e.printStackTrace(); - } - } - -} 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 ff39bc21ab..e3e6cd0723 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 @@ -3,6 +3,7 @@ package com.mogo.och.taxi.passenger.widget import android.app.Activity import android.content.Context import android.graphics.Color +import android.os.Build import android.util.AttributeSet import android.util.TypedValue import android.view.Gravity @@ -19,6 +20,7 @@ import com.mogo.eagle.core.utilcode.util.TimeTransformUtils import com.mogo.eagle.core.utilcode.util.ToastUtils import com.mogo.eagle.core.widget.media.video.TextureVideoViewOutlineProvider import com.mogo.och.taxi.passenger.R +import com.mogo.och.taxi.passenger.ui.leftmenu.OverlayLeftViewUtils import com.mogo.och.taxi.passenger.ui.video.FullVideoUtils import com.shuyu.gsyvideoplayer.listener.VideoAllCallBack import com.shuyu.gsyvideoplayer.utils.GSYVideoType @@ -42,6 +44,7 @@ class ConsultVideoPlayer : StandardGSYVideoPlayer { private lateinit var totalTimeTextView: TextView private lateinit var aivStartPlay: AppCompatImageView private lateinit var layoutBottom: ConstraintLayout + private lateinit var vPpenLeft: View private var fullVideoPlayer:ConsultVideoPlayer?=null var smalllPlayer:ConsultVideoPlayer?=null @@ -71,6 +74,12 @@ class ConsultVideoPlayer : StandardGSYVideoPlayer { GSYVideoType.setShowType(GSYVideoType.SCREEN_TYPE_FULL) aivStartPlay.scaleX = 0.8f aivStartPlay.scaleY = 0.8f + vPpenLeft = findViewById(R.id.v_open_left) + + vPpenLeft.setOnClickListener { + OverlayLeftViewUtils.open() + } + OverlayLeftViewUtils.dragTarget(vPpenLeft) } override fun getLayoutId(): Int { @@ -163,6 +172,7 @@ class ConsultVideoPlayer : StandardGSYVideoPlayer { setVideoAllCallBack(null) } dismissProgressDialog() + OverlayLeftViewUtils.removeDragTarget(vPpenLeft) super.onDetachedFromWindow() } diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/layout/taxi_p_arrived_mogo_consult.xml b/OCH/mogo-och-taxi-passenger/src/main/res/layout/taxi_p_arrived_mogo_consult.xml index 6e24c51294..6d7db62b32 100644 --- a/OCH/mogo-och-taxi-passenger/src/main/res/layout/taxi_p_arrived_mogo_consult.xml +++ b/OCH/mogo-och-taxi-passenger/src/main/res/layout/taxi_p_arrived_mogo_consult.xml @@ -61,6 +61,14 @@ app:vpi_slider_radius="@dimen/dp_20" app:vpi_style="round_rect" /> + + \ No newline at end of file diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/layout/taxi_p_base_fragment.xml b/OCH/mogo-och-taxi-passenger/src/main/res/layout/taxi_p_base_fragment.xml index 0cfb6db266..d4613508df 100644 --- a/OCH/mogo-och-taxi-passenger/src/main/res/layout/taxi_p_base_fragment.xml +++ b/OCH/mogo-och-taxi-passenger/src/main/res/layout/taxi_p_base_fragment.xml @@ -28,6 +28,14 @@ app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintTop_toTopOf="parent" /> + + + + \ No newline at end of file diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/layout/taxi_p_video_show.xml b/OCH/mogo-och-taxi-passenger/src/main/res/layout/taxi_p_video_show.xml index e4fb69b7c6..8db7c4d559 100644 --- a/OCH/mogo-och-taxi-passenger/src/main/res/layout/taxi_p_video_show.xml +++ b/OCH/mogo-och-taxi-passenger/src/main/res/layout/taxi_p_video_show.xml @@ -124,4 +124,12 @@ android:textColor="@android:color/white"/> + +