Added am commands for testing task positioning/resizing
Change-Id: Id506ea740029fd6faee4fc311a97c034c883a3fc
This commit is contained in:
@@ -77,6 +77,15 @@ public class Am extends BaseCommand {
|
||||
|
||||
private static final String SHELL_PACKAGE_NAME = "com.android.shell";
|
||||
|
||||
// Is the object moving in a positive direction?
|
||||
private static final boolean MOVING_FORWARD = true;
|
||||
// Is the object moving in the horizontal plan?
|
||||
private static final boolean MOVING_HORIZONTALLY = true;
|
||||
// Is the object current point great then its target point?
|
||||
private static final boolean GREATER_THAN_TARGET = true;
|
||||
// Amount we reduce the stack size by when testing a task re-size.
|
||||
private static final int STACK_BOUNDS_INSET = 10;
|
||||
|
||||
private IActivityManager mAm;
|
||||
|
||||
private int mStartFlags = 0;
|
||||
@@ -146,6 +155,8 @@ public class Am extends BaseCommand {
|
||||
" am task lock stop\n" +
|
||||
" am task resizeable <TASK_ID> [true|false]\n" +
|
||||
" am task resize <TASK_ID> <LEFT,TOP,RIGHT,BOTTOM>\n" +
|
||||
" am task drag-task-test <TASK_ID> <STEP_SIZE> [DELAY_MS] \n" +
|
||||
" am task size-task-test <TASK_ID> <STEP_SIZE> [DELAY_MS] \n" +
|
||||
" am get-config\n" +
|
||||
" am set-inactive [--user <USER_ID>] <PACKAGE> true|false\n" +
|
||||
" am get-inactive [--user <USER_ID>] <PACKAGE>\n" +
|
||||
@@ -297,6 +308,14 @@ public class Am extends BaseCommand {
|
||||
" Forces the task to be resizeable and creates a stack if no existing stack\n" +
|
||||
" has the specified bounds.\n" +
|
||||
"\n" +
|
||||
"am task drag-task-test: test command for dragging/moving <TASK_ID> by\n" +
|
||||
" <STEP_SIZE> increments around the screen applying the optional [DELAY_MS]\n" +
|
||||
" between each step.\n" +
|
||||
"\n" +
|
||||
"am task size-task-test: test command for sizing <TASK_ID> by <STEP_SIZE>" +
|
||||
" increments within the screen applying the optional [DELAY_MS] between\n" +
|
||||
" each step.\n" +
|
||||
"\n" +
|
||||
"am get-config: retrieve the configuration and any recent configurations\n" +
|
||||
" of the device.\n" +
|
||||
"\n" +
|
||||
@@ -2089,6 +2108,10 @@ public class Am extends BaseCommand {
|
||||
runTaskResizeable();
|
||||
} else if (op.equals("resize")) {
|
||||
runTaskResize();
|
||||
} else if (op.equals("drag-task-test")) {
|
||||
runTaskDragTaskTest();
|
||||
} else if (op.equals("size-task-test")) {
|
||||
runTaskSizeTaskTest();
|
||||
} else {
|
||||
showError("Error: unknown command '" + op + "'");
|
||||
return;
|
||||
@@ -2130,12 +2153,260 @@ public class Am extends BaseCommand {
|
||||
System.err.println("Error: invalid input bounds");
|
||||
return;
|
||||
}
|
||||
taskResize(taskId, bounds, 0);
|
||||
}
|
||||
|
||||
private void taskResize(int taskId, Rect bounds, int delay_ms) {
|
||||
try {
|
||||
mAm.resizeTask(taskId, bounds);
|
||||
Thread.sleep(delay_ms);
|
||||
} catch (RemoteException e) {
|
||||
System.err.println("Error changing task bounds: " + e);
|
||||
} catch (InterruptedException e) {
|
||||
}
|
||||
}
|
||||
|
||||
private void runTaskDragTaskTest() {
|
||||
final int taskId = Integer.valueOf(nextArgRequired());
|
||||
final int stepSize = Integer.valueOf(nextArgRequired());
|
||||
final String delayStr = nextArg();
|
||||
final int delay_ms = (delayStr != null) ? Integer.valueOf(delayStr) : 0;
|
||||
final StackInfo stackInfo;
|
||||
Rect taskBounds;
|
||||
try {
|
||||
stackInfo = mAm.getStackInfo(mAm.getFocusedStackId());
|
||||
taskBounds = mAm.getTaskBounds(taskId);
|
||||
} catch (RemoteException e) {
|
||||
System.err.println("Error getting focus stack info or task bounds: " + e);
|
||||
return;
|
||||
}
|
||||
final Rect stackBounds = stackInfo.bounds;
|
||||
int travelRight = stackBounds.width() - taskBounds.width();
|
||||
int travelLeft = -travelRight;
|
||||
int travelDown = stackBounds.height() - taskBounds.height();
|
||||
int travelUp = -travelDown;
|
||||
int passes = 0;
|
||||
|
||||
// We do 2 passes to get back to the original location of the task.
|
||||
while (passes < 2) {
|
||||
// Move right
|
||||
System.out.println("Moving right...");
|
||||
travelRight = moveTask(taskId, taskBounds, stackBounds, stepSize,
|
||||
travelRight, MOVING_FORWARD, MOVING_HORIZONTALLY, delay_ms);
|
||||
System.out.println("Still need to travel right by " + travelRight);
|
||||
|
||||
// Move down
|
||||
System.out.println("Moving down...");
|
||||
travelDown = moveTask(taskId, taskBounds, stackBounds, stepSize,
|
||||
travelDown, MOVING_FORWARD, !MOVING_HORIZONTALLY, delay_ms);
|
||||
System.out.println("Still need to travel down by " + travelDown);
|
||||
|
||||
// Move left
|
||||
System.out.println("Moving left...");
|
||||
travelLeft = moveTask(taskId, taskBounds, stackBounds, stepSize,
|
||||
travelLeft, !MOVING_FORWARD, MOVING_HORIZONTALLY, delay_ms);
|
||||
System.out.println("Still need to travel left by " + travelLeft);
|
||||
|
||||
// Move up
|
||||
System.out.println("Moving up...");
|
||||
travelUp = moveTask(taskId, taskBounds, stackBounds, stepSize,
|
||||
travelUp, !MOVING_FORWARD, !MOVING_HORIZONTALLY, delay_ms);
|
||||
System.out.println("Still need to travel up by " + travelUp);
|
||||
|
||||
try {
|
||||
taskBounds = mAm.getTaskBounds(taskId);
|
||||
} catch (RemoteException e) {
|
||||
System.err.println("Error getting task bounds: " + e);
|
||||
return;
|
||||
}
|
||||
passes++;
|
||||
}
|
||||
}
|
||||
|
||||
private int moveTask(int taskId, Rect taskRect, Rect stackRect, int stepSize,
|
||||
int maxToTravel, boolean movingForward, boolean horizontal, int delay_ms) {
|
||||
int maxMove;
|
||||
if (movingForward) {
|
||||
while (maxToTravel > 0
|
||||
&& ((horizontal && taskRect.right < stackRect.right)
|
||||
||(!horizontal && taskRect.bottom < stackRect.bottom))) {
|
||||
if (horizontal) {
|
||||
maxMove = Math.min(stepSize, stackRect.right - taskRect.right);
|
||||
maxToTravel -= maxMove;
|
||||
taskRect.right += maxMove;
|
||||
taskRect.left += maxMove;
|
||||
} else {
|
||||
maxMove = Math.min(stepSize, stackRect.bottom - taskRect.bottom);
|
||||
maxToTravel -= maxMove;
|
||||
taskRect.top += maxMove;
|
||||
taskRect.bottom += maxMove;
|
||||
}
|
||||
taskResize(taskId, taskRect, delay_ms);
|
||||
}
|
||||
} else {
|
||||
while (maxToTravel < 0
|
||||
&& ((horizontal && taskRect.left > stackRect.left)
|
||||
||(!horizontal && taskRect.top > stackRect.top))) {
|
||||
if (horizontal) {
|
||||
maxMove = Math.min(stepSize, taskRect.left - stackRect.left);
|
||||
maxToTravel -= maxMove;
|
||||
taskRect.right -= maxMove;
|
||||
taskRect.left -= maxMove;
|
||||
} else {
|
||||
maxMove = Math.min(stepSize, taskRect.top - stackRect.top);
|
||||
maxToTravel -= maxMove;
|
||||
taskRect.top -= maxMove;
|
||||
taskRect.bottom -= maxMove;
|
||||
}
|
||||
taskResize(taskId, taskRect, delay_ms);
|
||||
}
|
||||
}
|
||||
// Return the remaining distance we didn't travel because we reached the target location.
|
||||
return maxToTravel;
|
||||
}
|
||||
|
||||
private void runTaskSizeTaskTest() {
|
||||
final int taskId = Integer.valueOf(nextArgRequired());
|
||||
final int stepSize = Integer.valueOf(nextArgRequired());
|
||||
final String delayStr = nextArg();
|
||||
final int delay_ms = (delayStr != null) ? Integer.valueOf(delayStr) : 0;
|
||||
final StackInfo stackInfo;
|
||||
final Rect initialTaskBounds;
|
||||
try {
|
||||
stackInfo = mAm.getStackInfo(mAm.getFocusedStackId());
|
||||
initialTaskBounds = mAm.getTaskBounds(taskId);
|
||||
} catch (RemoteException e) {
|
||||
System.err.println("Error getting focus stack info or task bounds: " + e);
|
||||
return;
|
||||
}
|
||||
final Rect stackBounds = stackInfo.bounds;
|
||||
stackBounds.inset(STACK_BOUNDS_INSET, STACK_BOUNDS_INSET);
|
||||
final Rect currentTaskBounds = new Rect(initialTaskBounds);
|
||||
|
||||
// Size by top-left
|
||||
System.out.println("Growing top-left");
|
||||
do {
|
||||
currentTaskBounds.top -= getStepSize(
|
||||
currentTaskBounds.top, stackBounds.top, stepSize, GREATER_THAN_TARGET);
|
||||
|
||||
currentTaskBounds.left -= getStepSize(
|
||||
currentTaskBounds.left, stackBounds.left, stepSize, GREATER_THAN_TARGET);
|
||||
|
||||
taskResize(taskId, currentTaskBounds, delay_ms);
|
||||
} while (stackBounds.top < currentTaskBounds.top
|
||||
|| stackBounds.left < currentTaskBounds.left);
|
||||
|
||||
// Back to original size
|
||||
System.out.println("Shrinking top-left");
|
||||
do {
|
||||
currentTaskBounds.top += getStepSize(
|
||||
currentTaskBounds.top, initialTaskBounds.top, stepSize, !GREATER_THAN_TARGET);
|
||||
|
||||
currentTaskBounds.left += getStepSize(
|
||||
currentTaskBounds.left, initialTaskBounds.left, stepSize, !GREATER_THAN_TARGET);
|
||||
|
||||
taskResize(taskId, currentTaskBounds, delay_ms);
|
||||
} while (initialTaskBounds.top > currentTaskBounds.top
|
||||
|| initialTaskBounds.left > currentTaskBounds.left);
|
||||
|
||||
// Size by top-right
|
||||
System.out.println("Growing top-right");
|
||||
do {
|
||||
currentTaskBounds.top -= getStepSize(
|
||||
currentTaskBounds.top, stackBounds.top, stepSize, GREATER_THAN_TARGET);
|
||||
|
||||
currentTaskBounds.right += getStepSize(
|
||||
currentTaskBounds.right, stackBounds.right, stepSize, !GREATER_THAN_TARGET);
|
||||
|
||||
taskResize(taskId, currentTaskBounds, delay_ms);
|
||||
} while (stackBounds.top < currentTaskBounds.top
|
||||
|| stackBounds.right > currentTaskBounds.right);
|
||||
|
||||
// Back to original size
|
||||
System.out.println("Shrinking top-right");
|
||||
do {
|
||||
currentTaskBounds.top += getStepSize(
|
||||
currentTaskBounds.top, initialTaskBounds.top, stepSize, !GREATER_THAN_TARGET);
|
||||
|
||||
currentTaskBounds.right -= getStepSize(currentTaskBounds.right, initialTaskBounds.right,
|
||||
stepSize, GREATER_THAN_TARGET);
|
||||
|
||||
taskResize(taskId, currentTaskBounds, delay_ms);
|
||||
} while (initialTaskBounds.top > currentTaskBounds.top
|
||||
|| initialTaskBounds.right < currentTaskBounds.right);
|
||||
|
||||
// Size by bottom-left
|
||||
System.out.println("Growing bottom-left");
|
||||
do {
|
||||
currentTaskBounds.bottom += getStepSize(
|
||||
currentTaskBounds.bottom, stackBounds.bottom, stepSize, !GREATER_THAN_TARGET);
|
||||
|
||||
currentTaskBounds.left -= getStepSize(
|
||||
currentTaskBounds.left, stackBounds.left, stepSize, GREATER_THAN_TARGET);
|
||||
|
||||
taskResize(taskId, currentTaskBounds, delay_ms);
|
||||
} while (stackBounds.bottom > currentTaskBounds.bottom
|
||||
|| stackBounds.left < currentTaskBounds.left);
|
||||
|
||||
// Back to original size
|
||||
System.out.println("Shrinking bottom-left");
|
||||
do {
|
||||
currentTaskBounds.bottom -= getStepSize(currentTaskBounds.bottom,
|
||||
initialTaskBounds.bottom, stepSize, GREATER_THAN_TARGET);
|
||||
|
||||
currentTaskBounds.left += getStepSize(
|
||||
currentTaskBounds.left, initialTaskBounds.left, stepSize, !GREATER_THAN_TARGET);
|
||||
|
||||
taskResize(taskId, currentTaskBounds, delay_ms);
|
||||
} while (initialTaskBounds.bottom < currentTaskBounds.bottom
|
||||
|| initialTaskBounds.left > currentTaskBounds.left);
|
||||
|
||||
// Size by bottom-right
|
||||
System.out.println("Growing bottom-right");
|
||||
do {
|
||||
currentTaskBounds.bottom += getStepSize(
|
||||
currentTaskBounds.bottom, stackBounds.bottom, stepSize, !GREATER_THAN_TARGET);
|
||||
|
||||
currentTaskBounds.right += getStepSize(
|
||||
currentTaskBounds.right, stackBounds.right, stepSize, !GREATER_THAN_TARGET);
|
||||
|
||||
taskResize(taskId, currentTaskBounds, delay_ms);
|
||||
} while (stackBounds.bottom > currentTaskBounds.bottom
|
||||
|| stackBounds.right > currentTaskBounds.right);
|
||||
|
||||
// Back to original size
|
||||
System.out.println("Shrinking bottom-right");
|
||||
do {
|
||||
currentTaskBounds.bottom -= getStepSize(currentTaskBounds.bottom,
|
||||
initialTaskBounds.bottom, stepSize, GREATER_THAN_TARGET);
|
||||
|
||||
currentTaskBounds.right -= getStepSize(currentTaskBounds.right, initialTaskBounds.right,
|
||||
stepSize, GREATER_THAN_TARGET);
|
||||
|
||||
taskResize(taskId, currentTaskBounds, delay_ms);
|
||||
} while (initialTaskBounds.bottom < currentTaskBounds.bottom
|
||||
|| initialTaskBounds.right < currentTaskBounds.right);
|
||||
}
|
||||
|
||||
private int getStepSize(int current, int target, int inStepSize, boolean greaterThanTarget) {
|
||||
int stepSize = 0;
|
||||
if (greaterThanTarget && target < current) {
|
||||
current -= inStepSize;
|
||||
stepSize = inStepSize;
|
||||
if (target > current) {
|
||||
stepSize -= (target - current);
|
||||
}
|
||||
}
|
||||
if (!greaterThanTarget && target > current) {
|
||||
current += inStepSize;
|
||||
stepSize = inStepSize;
|
||||
if (target < current) {
|
||||
stepSize += (current - target);
|
||||
}
|
||||
}
|
||||
return stepSize;
|
||||
}
|
||||
|
||||
private List<Configuration> getRecentConfigurations(int days) {
|
||||
IUsageStatsManager usm = IUsageStatsManager.Stub.asInterface(ServiceManager.getService(
|
||||
Context.USAGE_STATS_SERVICE));
|
||||
|
||||
Reference in New Issue
Block a user