diff options
author | Manu Cornet <manucornet@google.com> | 2016-09-19 17:17:46 -0700 |
---|---|---|
committer | Manu Cornet <manucornet@google.com> | 2016-09-23 10:55:32 -0700 |
commit | cf90c9732cb130ef569293a18918796c3cfa1ed8 (patch) | |
tree | bcfbf770ae02d85ae4b943a2d632eb584e1ff54e /cmds/input/src | |
parent | e94cc880c89b2b36a99b7d707951b373d5186f34 (diff) |
Add support for drag and drop in input command
Test: Built and flashed for ryu-eng, tested input effects
Change-Id: I4430debc405862c71af7ffc8ebaa1790f5e01073
Diffstat (limited to 'cmds/input/src')
-rw-r--r-- | cmds/input/src/com/android/commands/input/Input.java | 41 |
1 files changed, 41 insertions, 0 deletions
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 <x> <y> (Default: touchscreen)"); System.err.println(" swipe <x1> <y1> <x2> <y2> [duration(ms)]" + " (Default: touchscreen)"); + System.err.println(" draganddrop <x1> <y1> <x2> <y2> [duration(ms)]" + + " (Default: touchscreen)"); System.err.println(" press (Default: trackball)"); System.err.println(" roll <dx> <dy> (Default: trackball)"); } |