Add support for drag and drop in input command

Test: Built and flashed for ryu-eng, tested input effects
Change-Id: I4430debc405862c71af7ffc8ebaa1790f5e01073
This commit is contained in:
Manu Cornet
2016-09-19 17:17:46 -07:00
parent e94cc880c8
commit cf90c9732c

View File

@@ -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)");
}