diff --git a/modules/mogo-module-common/src/main/java/com/mogo/module/common/wm/DialogImpl.java b/modules/mogo-module-common/src/main/java/com/mogo/module/common/wm/DialogImpl.java
index 72c5960fd4..a7bcb305c1 100644
--- a/modules/mogo-module-common/src/main/java/com/mogo/module/common/wm/DialogImpl.java
+++ b/modules/mogo-module-common/src/main/java/com/mogo/module/common/wm/DialogImpl.java
@@ -29,6 +29,11 @@ class DialogImpl implements IWindowManagerView {
return dialog.isShowing();
}
+ @Override
+ public void handleTouchEvent(OnViewClickListener listener) {
+ // do nothings.
+ }
+
@Override
public void show() {
dialog.show();
diff --git a/modules/mogo-module-common/src/main/java/com/mogo/module/common/wm/IWindowManagerView.java b/modules/mogo-module-common/src/main/java/com/mogo/module/common/wm/IWindowManagerView.java
index d610cea67a..14891ed7d6 100644
--- a/modules/mogo-module-common/src/main/java/com/mogo/module/common/wm/IWindowManagerView.java
+++ b/modules/mogo-module-common/src/main/java/com/mogo/module/common/wm/IWindowManagerView.java
@@ -1,18 +1,27 @@
package com.mogo.module.common.wm;
+import android.view.View;
+
interface IWindowManagerView {
/**
* 初始化
+ *
* @param params contentView包装类
*/
- void init(WindowManagerView.WMViewParams params);
+ void init( WindowManagerView.WMViewParams params );
/**
* 是否显示
+ *
* @return true - 显示中
*/
boolean isShowing();
+ /**
+ * 支持手势拖动,该操作只支持触发点击操作
+ */
+ void handleTouchEvent(OnViewClickListener listener);
+
/**
* 显示
*/
@@ -22,4 +31,8 @@ interface IWindowManagerView {
* 隐藏
*/
void hide();
+
+ interface OnViewClickListener {
+ void onClick( View view );
+ }
}
diff --git a/modules/mogo-module-common/src/main/java/com/mogo/module/common/wm/WindowManagerImpl.java b/modules/mogo-module-common/src/main/java/com/mogo/module/common/wm/WindowManagerImpl.java
index 7aa61980f9..d4314d4106 100644
--- a/modules/mogo-module-common/src/main/java/com/mogo/module/common/wm/WindowManagerImpl.java
+++ b/modules/mogo-module-common/src/main/java/com/mogo/module/common/wm/WindowManagerImpl.java
@@ -3,12 +3,9 @@ package com.mogo.module.common.wm;
import android.content.Context;
import android.graphics.PixelFormat;
import android.os.Build;
-import android.view.Gravity;
+import android.view.MotionEvent;
import android.view.WindowManager;
-import com.mogo.module.common.utils.CarSeries;
-import com.mogo.utils.WindowUtils;
-
/**
* 采用windowManager实现接口
*/
@@ -19,10 +16,13 @@ class WindowManagerImpl implements IWindowManagerView {
private WindowManagerView.WMViewParams mParams;
private boolean isShowing;
+ private float mLastX, mLastY;
+ private int mOldOffsetX, mOldOffsetY;
+
@Override
- public void init(WindowManagerView.WMViewParams params) {
+ public void init( WindowManagerView.WMViewParams params ) {
mParams = params;
- mWindowManager = (WindowManager) mParams.mContext.getApplicationContext().getSystemService( Context.WINDOW_SERVICE );
+ mWindowManager = ( WindowManager ) mParams.mContext.getApplicationContext().getSystemService( Context.WINDOW_SERVICE );
mLayoutParams = new WindowManager.LayoutParams();
if ( Build.VERSION.SDK_INT >= Build.VERSION_CODES.O ) {
mLayoutParams.type = WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY;
@@ -35,8 +35,8 @@ class WindowManagerImpl implements IWindowManagerView {
mLayoutParams.width = mParams.mWidth;
mLayoutParams.height = mParams.mHeight;
- mLayoutParams.x = mParams.mX;
- mLayoutParams.y = mParams.mY;
+ mOldOffsetX = mLayoutParams.x = mParams.mX;
+ mOldOffsetY = mLayoutParams.y = mParams.mY;
mLayoutParams.dimAmount = 0.5f;
}
@@ -45,18 +45,46 @@ class WindowManagerImpl implements IWindowManagerView {
return isShowing;
}
+ @Override
+ public void handleTouchEvent(OnViewClickListener listener) {
+ mParams.mContentView.setOnTouchListener( ( v, event ) -> {
+ final int action = event.getAction();
+ float x = event.getX();
+ float y = event.getY();
+ if ( action == MotionEvent.ACTION_DOWN ) {
+ mLastX = x;
+ mLastY = y;
+ } else if ( action == MotionEvent.ACTION_MOVE ) {
+ mLayoutParams.x += ( int ) ( x - mLastX ) / 3; // 减小偏移量,防止过度抖动
+ mLayoutParams.y += ( int ) ( y - mLastY ) / 3; // 减小偏移量,防止过度抖动
+ mWindowManager.updateViewLayout( mParams.mContentView, mLayoutParams );
+ } else if ( action == MotionEvent.ACTION_UP ) {
+ int newOffsetX = mLayoutParams.x;
+ int newOffsetY = mLayoutParams.y;
+ // 只要按钮一动位置不是很大,就认为是点击事件
+ if ( Math.abs( mOldOffsetX - newOffsetX ) <= 20
+ && Math.abs( mOldOffsetY - newOffsetY ) <= 20 ) {
+ listener.onClick( mParams.mContentView );
+ }
+ mOldOffsetX = newOffsetX;
+ mOldOffsetY = newOffsetY;
+ }
+ return true;
+ } );
+ }
+
@Override
public void show() {
- if(!isShowing){
+ if ( !isShowing ) {
isShowing = true;
- mWindowManager.addView(mParams.mContentView,mLayoutParams);
+ mWindowManager.addView( mParams.mContentView, mLayoutParams );
}
}
@Override
public void hide() {
- if (isShowing && mParams != null) {
- mWindowManager.removeView(mParams.mContentView);
+ if ( isShowing && mParams != null ) {
+ mWindowManager.removeView( mParams.mContentView );
isShowing = false;
}
}
diff --git a/modules/mogo-module-common/src/main/java/com/mogo/module/common/wm/WindowManagerView.java b/modules/mogo-module-common/src/main/java/com/mogo/module/common/wm/WindowManagerView.java
index 215f832b6c..db2b244273 100644
--- a/modules/mogo-module-common/src/main/java/com/mogo/module/common/wm/WindowManagerView.java
+++ b/modules/mogo-module-common/src/main/java/com/mogo/module/common/wm/WindowManagerView.java
@@ -33,6 +33,10 @@ public class WindowManagerView {
return mParams.mContentView.findViewById( id );
}
+ public void attachTouchEvent( IWindowManagerView.OnViewClickListener listener ) {
+ mManagerView.handleTouchEvent(listener);
+ }
+
public void show() {
mManagerView.show();
}
diff --git a/modules/mogo-module-service/src/main/java/com/mogo/module/service/intent/AutoNaviIntentHandler.java b/modules/mogo-module-service/src/main/java/com/mogo/module/service/intent/AutoNaviIntentHandler.java
index 7e98a5a052..67be36f424 100644
--- a/modules/mogo-module-service/src/main/java/com/mogo/module/service/intent/AutoNaviIntentHandler.java
+++ b/modules/mogo-module-service/src/main/java/com/mogo/module/service/intent/AutoNaviIntentHandler.java
@@ -2,9 +2,7 @@ package com.mogo.module.service.intent;
import android.content.Context;
import android.content.Intent;
-import android.text.TextUtils;
import android.view.Gravity;
-import android.view.View;
import android.view.WindowManager;
import com.mogo.commons.AbsMogoApplication;
@@ -12,8 +10,6 @@ import com.mogo.commons.debug.DebugConfig;
import com.mogo.module.common.wm.WindowManagerView;
import com.mogo.module.service.MarkerServiceHandler;
import com.mogo.module.service.R;
-import com.mogo.module.service.receiver.MogoReceiver;
-import com.mogo.utils.AppUtils;
import com.mogo.utils.LaunchUtils;
import com.mogo.utils.ResourcesHelper;
import com.mogo.utils.logger.Logger;
@@ -96,11 +92,10 @@ class AutoNaviIntentHandler implements IntentHandler {
mWindowManagerView = new WindowManagerView.Builder( AbsMogoApplication.getApp() )
.contentView( R.layout.module_service_app_entrance )
.size( WindowManager.LayoutParams.WRAP_CONTENT, WindowManager.LayoutParams.WRAP_CONTENT )
+ .gravity( Gravity.LEFT | Gravity.TOP )
.position( ResourcesHelper.getDimensionPixelSize( context, R.dimen.module_services_app_entrance_x ), ResourcesHelper.getDimensionPixelSize( AbsMogoApplication.getApp(), R.dimen.module_services_app_entrance_y ) )
- .gravity( Gravity.LEFT|Gravity.TOP )
.showInWindowManager();
- View root = mWindowManagerView.findViewById( R.id.module_service_app_entrance_root );
- root.setOnClickListener( view -> {
+ mWindowManagerView.attachTouchEvent( view -> {
try {
if ( DebugConfig.isLauncher() ) {
MarkerServiceHandler.getLauncher().backToLauncher( context );
diff --git a/modules/mogo-module-service/src/main/res/layout/module_service_app_entrance.xml b/modules/mogo-module-service/src/main/res/layout/module_service_app_entrance.xml
index 7c54d93ab8..0c8bb8cadd 100644
--- a/modules/mogo-module-service/src/main/res/layout/module_service_app_entrance.xml
+++ b/modules/mogo-module-service/src/main/res/layout/module_service_app_entrance.xml
@@ -7,9 +7,9 @@
android:orientation="vertical">
diff --git a/modules/mogo-module-service/src/main/res/values-ldpi/dimens.xml b/modules/mogo-module-service/src/main/res/values-ldpi/dimens.xml
index 4114da3f4b..871507f1ab 100644
--- a/modules/mogo-module-service/src/main/res/values-ldpi/dimens.xml
+++ b/modules/mogo-module-service/src/main/res/values-ldpi/dimens.xml
@@ -22,9 +22,12 @@
64px
6.5px
10px
- 19px
+ 20px
15px
2px
- 24px
- 498px
+ 112px
+ 929px
+ 10px
+ 15px
+ 71px
\ No newline at end of file
diff --git a/modules/mogo-module-service/src/main/res/values-mdpi/dimens.xml b/modules/mogo-module-service/src/main/res/values-mdpi/dimens.xml
index 4114da3f4b..871507f1ab 100644
--- a/modules/mogo-module-service/src/main/res/values-mdpi/dimens.xml
+++ b/modules/mogo-module-service/src/main/res/values-mdpi/dimens.xml
@@ -22,9 +22,12 @@
64px
6.5px
10px
- 19px
+ 20px
15px
2px
- 24px
- 498px
+ 112px
+ 929px
+ 10px
+ 15px
+ 71px
\ No newline at end of file
diff --git a/modules/mogo-module-service/src/main/res/values-xhdpi-1920x1000/dimens.xml b/modules/mogo-module-service/src/main/res/values-xhdpi-1920x1000/dimens.xml
index 1ccedd1fee..1e58e34c84 100644
--- a/modules/mogo-module-service/src/main/res/values-xhdpi-1920x1000/dimens.xml
+++ b/modules/mogo-module-service/src/main/res/values-xhdpi-1920x1000/dimens.xml
@@ -27,4 +27,7 @@
4px
48px
1000px
+ 10px
+ 15px
+ 71px
\ No newline at end of file
diff --git a/modules/mogo-module-service/src/main/res/values-xhdpi/dimens.xml b/modules/mogo-module-service/src/main/res/values-xhdpi/dimens.xml
index 1ccedd1fee..1e58e34c84 100644
--- a/modules/mogo-module-service/src/main/res/values-xhdpi/dimens.xml
+++ b/modules/mogo-module-service/src/main/res/values-xhdpi/dimens.xml
@@ -27,4 +27,7 @@
4px
48px
1000px
+ 10px
+ 15px
+ 71px
\ No newline at end of file
diff --git a/modules/mogo-module-service/src/main/res/values/dimens.xml b/modules/mogo-module-service/src/main/res/values/dimens.xml
index 1ccedd1fee..1e58e34c84 100644
--- a/modules/mogo-module-service/src/main/res/values/dimens.xml
+++ b/modules/mogo-module-service/src/main/res/values/dimens.xml
@@ -27,4 +27,7 @@
4px
48px
1000px
+ 10px
+ 15px
+ 71px
\ No newline at end of file
diff --git a/modules/mogo-module-service/src/main/res/values/strings.xml b/modules/mogo-module-service/src/main/res/values/strings.xml
index 00488f2df6..e25a4adb00 100644
--- a/modules/mogo-module-service/src/main/res/values/strings.xml
+++ b/modules/mogo-module-service/src/main/res/values/strings.xml
@@ -1,4 +1,4 @@
mogo-module-service
- 切换辅助驾驶模式
+ 辅助\n驾驶