From cf90c9732cb130ef569293a18918796c3cfa1ed8 Mon Sep 17 00:00:00 2001 From: Manu Cornet Date: Mon, 19 Sep 2016 17:17:46 -0700 Subject: Add support for drag and drop in input command Test: Built and flashed for ryu-eng, tested input effects Change-Id: I4430debc405862c71af7ffc8ebaa1790f5e01073 --- .../src/com/android/commands/input/Input.java | 41 ++++++++++++++++++++++ 1 file changed, 41 insertions(+) (limited to 'cmds/input/src') diff --git a/cmds/input/src/com/android/commands/input/Input.java b/cmds/input/src/com/android/commands/input/Input.java index 754d3f510bbd..9ee11f8571e2 100644 --- a/cmds/input/src/com/android/commands/input/Input.java +++ b/cmds/input/src/com/android/commands/input/Input.java @@ -23,6 +23,7 @@ import android.view.InputDevice; import android.view.KeyCharacterMap; import android.view.KeyEvent; import android.view.MotionEvent; +import android.view.ViewConfiguration; import java.util.HashMap; import java.util.Map; @@ -118,6 +119,19 @@ public class Input { duration); return; } + } else if (command.equals("draganddrop")) { + int duration = -1; + inputSource = getSource(inputSource, InputDevice.SOURCE_TOUCHSCREEN); + switch (length) { + case 6: + duration = Integer.parseInt(args[index+5]); + case 5: + sendDragAndDrop(inputSource, + Float.parseFloat(args[index+1]), Float.parseFloat(args[index+2]), + Float.parseFloat(args[index+3]), Float.parseFloat(args[index+4]), + duration); + return; + } } else if (command.equals("press")) { inputSource = getSource(inputSource, InputDevice.SOURCE_TRACKBALL); if (length == 1) { @@ -216,6 +230,31 @@ public class Input { injectMotionEvent(inputSource, MotionEvent.ACTION_UP, now, x2, y2, 0.0f); } + private void sendDragAndDrop(int inputSource, float x1, float y1, float x2, float y2, + int dragDuration) { + if (dragDuration < 0) { + dragDuration = 300; + } + long now = SystemClock.uptimeMillis(); + injectMotionEvent(inputSource, MotionEvent.ACTION_DOWN, now, x1, y1, 1.0f); + try { + Thread.sleep(ViewConfiguration.getLongPressTimeout()); + } catch (InterruptedException e) { + throw new RuntimeException(e); + } + now = SystemClock.uptimeMillis(); + long startTime = now; + long endTime = startTime + dragDuration; + while (now < endTime) { + long elapsedTime = now - startTime; + float alpha = (float) elapsedTime / dragDuration; + injectMotionEvent(inputSource, MotionEvent.ACTION_MOVE, now, lerp(x1, x2, alpha), + lerp(y1, y2, alpha), 1.0f); + now = SystemClock.uptimeMillis(); + } + injectMotionEvent(inputSource, MotionEvent.ACTION_UP, now, x2, y2, 0.0f); + } + /** * Sends a simple zero-pressure move event. * @@ -294,6 +333,8 @@ public class Input { System.err.println(" tap (Default: touchscreen)"); System.err.println(" swipe [duration(ms)]" + " (Default: touchscreen)"); + System.err.println(" draganddrop [duration(ms)]" + + " (Default: touchscreen)"); System.err.println(" press (Default: trackball)"); System.err.println(" roll (Default: trackball)"); } -- cgit v1.2.3-59-g8ed1b