diff --git a/README.md b/README.md index a65a0a17..5982908e 100644 --- a/README.md +++ b/README.md @@ -109,6 +109,8 @@ void overlayMain() { /// /// `enableDrag` to enable/disable dragging the overlay over the screen and default is "false" /// + /// `dragThreshold` to determine how easy it is to start dragging the overlay and default is 5 (device independant pixels) + /// /// `positionGravity` the overlay postion after drag and default is [PositionGravity.none] /// /// `startPosition` the overlay start position and default is null diff --git a/android/src/main/java/flutter/overlay/window/flutter_overlay_window/FlutterOverlayWindowPlugin.java b/android/src/main/java/flutter/overlay/window/flutter_overlay_window/FlutterOverlayWindowPlugin.java index 3ffc76b7..6cf8018c 100644 --- a/android/src/main/java/flutter/overlay/window/flutter_overlay_window/FlutterOverlayWindowPlugin.java +++ b/android/src/main/java/flutter/overlay/window/flutter_overlay_window/FlutterOverlayWindowPlugin.java @@ -86,6 +86,7 @@ public void onMethodCall(@NonNull MethodCall call, @NonNull Result result) { String overlayContent = call.argument("overlayContent"); String notificationVisibility = call.argument("notificationVisibility"); boolean enableDrag = call.argument("enableDrag"); + Integer dragThreshold = call.argument("dragThreshold"); String positionGravity = call.argument("positionGravity"); Map startPosition = call.argument("startPosition"); int startX = startPosition != null ? startPosition.getOrDefault("x", OverlayConstants.DEFAULT_XY) : OverlayConstants.DEFAULT_XY; @@ -95,6 +96,7 @@ public void onMethodCall(@NonNull MethodCall call, @NonNull Result result) { WindowSetup.width = width != null ? width : -1; WindowSetup.height = height != null ? height : -1; WindowSetup.enableDrag = enableDrag; + WindowSetup.dragThreshold = dragThreshold; WindowSetup.setGravityFromAlignment(alignment != null ? alignment : "center"); WindowSetup.setFlag(flag != null ? flag : "flagNotFocusable"); WindowSetup.overlayTitle = overlayTitle; diff --git a/android/src/main/java/flutter/overlay/window/flutter_overlay_window/OverlayService.java b/android/src/main/java/flutter/overlay/window/flutter_overlay_window/OverlayService.java index f50d6a37..4287e14a 100644 --- a/android/src/main/java/flutter/overlay/window/flutter_overlay_window/OverlayService.java +++ b/android/src/main/java/flutter/overlay/window/flutter_overlay_window/OverlayService.java @@ -387,7 +387,7 @@ public boolean onTouch(View view, MotionEvent event) { case MotionEvent.ACTION_MOVE: float dx = event.getRawX() - lastX; float dy = event.getRawY() - lastY; - if (!dragging && dx * dx + dy * dy < 25) { + if (!dragging && dx * dx + dy * dy < Math.pow(dpToPx(WindowSetup.dragThreshold), 2)) { return false; } lastX = event.getRawX(); @@ -468,4 +468,4 @@ public void run() { } -} \ No newline at end of file +} diff --git a/android/src/main/java/flutter/overlay/window/flutter_overlay_window/WindowSetup.java b/android/src/main/java/flutter/overlay/window/flutter_overlay_window/WindowSetup.java index 3563a1ca..b5bbd71e 100644 --- a/android/src/main/java/flutter/overlay/window/flutter_overlay_window/WindowSetup.java +++ b/android/src/main/java/flutter/overlay/window/flutter_overlay_window/WindowSetup.java @@ -20,6 +20,7 @@ public abstract class WindowSetup { static String positionGravity = "none"; static int notificationVisibility = NotificationCompat.VISIBILITY_PRIVATE; static boolean enableDrag = false; + static int dragThreshold = 5; static void setNotificationVisibility(String name) { diff --git a/lib/src/overlay_window.dart b/lib/src/overlay_window.dart index fef7d45d..3277c2c4 100644 --- a/lib/src/overlay_window.dart +++ b/lib/src/overlay_window.dart @@ -36,6 +36,8 @@ class FlutterOverlayWindow { /// /// `enableDrag` to enable/disable dragging the overlay over the screen and default is "false" /// + /// `dragThreshold` to determine how easy it is to start dragging the overlay and default is 5 (device independant pixels) + /// /// `positionGravity` the overlay postion after drag and default is [PositionGravity.none] /// /// `startPosition` the overlay start position and default is null @@ -48,6 +50,7 @@ class FlutterOverlayWindow { String overlayTitle = "overlay activated", String? overlayContent, bool enableDrag = false, + int dragThreshold = 5, PositionGravity positionGravity = PositionGravity.none, OverlayPosition? startPosition, }) async { @@ -61,6 +64,7 @@ class FlutterOverlayWindow { "overlayTitle": overlayTitle, "overlayContent": overlayContent, "enableDrag": enableDrag, + "dragThreshold": dragThreshold, "notificationVisibility": visibility.name, "positionGravity": positionGravity.name, "startPosition": startPosition?.toMap(),