Improving TAPL diagnostics

Bug: 128531133
Change-Id: If81861afccb665e2dc2293f2704d99818b3297c8
This commit is contained in:
vadimt 2019-03-22 18:15:35 -07:00
parent 6d862386fb
commit 4397d8d5ea
11 changed files with 308 additions and 193 deletions

View File

@ -60,47 +60,59 @@ public class AllApps extends LauncherInstrumentation.VisibleContainer {
*/
@NonNull
public AppIcon getAppIcon(String appName) {
final UiObject2 allAppsContainer = verifyActiveContainer();
final BySelector appIconSelector = AppIcon.getAppIconSelector(appName, mLauncher);
if (!hasClickableIcon(allAppsContainer, appIconSelector)) {
scrollBackToBeginning();
int attempts = 0;
while (!hasClickableIcon(allAppsContainer, appIconSelector) &&
allAppsContainer.scroll(Direction.DOWN, 0.8f)) {
LauncherInstrumentation.assertTrue(
"Exceeded max scroll attempts: " + MAX_SCROLL_ATTEMPTS,
++attempts <= MAX_SCROLL_ATTEMPTS);
try (LauncherInstrumentation.Closable c = mLauncher.addContextLayer(
"want to get app icon on all apps")) {
final UiObject2 allAppsContainer = verifyActiveContainer();
final BySelector appIconSelector = AppIcon.getAppIconSelector(appName, mLauncher);
if (!hasClickableIcon(allAppsContainer, appIconSelector)) {
scrollBackToBeginning();
int attempts = 0;
try (LauncherInstrumentation.Closable c1 = mLauncher.addContextLayer("scrolled")) {
while (!hasClickableIcon(allAppsContainer, appIconSelector) &&
allAppsContainer.scroll(Direction.DOWN, 0.8f)) {
mLauncher.assertTrue(
"Exceeded max scroll attempts: " + MAX_SCROLL_ATTEMPTS,
++attempts <= MAX_SCROLL_ATTEMPTS);
verifyActiveContainer();
}
}
verifyActiveContainer();
}
}
verifyActiveContainer();
final UiObject2 appIcon = mLauncher.getObjectInContainer(allAppsContainer, appIconSelector);
ensureIconVisible(appIcon, allAppsContainer);
return new AppIcon(mLauncher, appIcon);
final UiObject2 appIcon = mLauncher.getObjectInContainer(allAppsContainer,
appIconSelector);
ensureIconVisible(appIcon, allAppsContainer);
return new AppIcon(mLauncher, appIcon);
}
}
private void scrollBackToBeginning() {
final UiObject2 allAppsContainer = verifyActiveContainer();
final UiObject2 searchBox =
mLauncher.waitForObjectInContainer(allAppsContainer, "search_container_all_apps");
try (LauncherInstrumentation.Closable c = mLauncher.addContextLayer(
"want to scroll back in all apps")) {
final UiObject2 allAppsContainer = verifyActiveContainer();
final UiObject2 searchBox =
mLauncher.waitForObjectInContainer(allAppsContainer,
"search_container_all_apps");
int attempts = 0;
allAppsContainer.setGestureMargins(0, searchBox.getVisibleBounds().bottom + 1, 0, 5);
int attempts = 0;
allAppsContainer.setGestureMargins(0, searchBox.getVisibleBounds().bottom + 1, 0, 5);
for (int scroll = getScroll(allAppsContainer);
scroll != 0;
scroll = getScroll(allAppsContainer)) {
LauncherInstrumentation.assertTrue("Negative scroll position", scroll > 0);
for (int scroll = getScroll(allAppsContainer);
scroll != 0;
scroll = getScroll(allAppsContainer)) {
mLauncher.assertTrue("Negative scroll position", scroll > 0);
LauncherInstrumentation.assertTrue(
"Exceeded max scroll attempts: " + MAX_SCROLL_ATTEMPTS,
++attempts <= MAX_SCROLL_ATTEMPTS);
mLauncher.assertTrue(
"Exceeded max scroll attempts: " + MAX_SCROLL_ATTEMPTS,
++attempts <= MAX_SCROLL_ATTEMPTS);
allAppsContainer.scroll(Direction.UP, 1);
allAppsContainer.scroll(Direction.UP, 1);
}
try (LauncherInstrumentation.Closable c1 = mLauncher.addContextLayer("scrolled up")) {
verifyActiveContainer();
}
}
verifyActiveContainer();
}
private int getScroll(UiObject2 allAppsContainer) {
@ -115,8 +127,11 @@ public class AllApps extends LauncherInstrumentation.VisibleContainer {
// to reveal the app icon to have the MIN_INTERACT_SIZE
final float pct = Math.max(((float) (MIN_INTERACT_SIZE - appHeight)) / mHeight, 0.2f);
allAppsContainer.scroll(Direction.DOWN, pct);
mLauncher.waitForIdle();
verifyActiveContainer();
try (LauncherInstrumentation.Closable c = mLauncher.addContextLayer(
"scrolled an icon in all apps to make it visible - and then")) {
mLauncher.waitForIdle();
verifyActiveContainer();
}
}
}
@ -124,21 +139,29 @@ public class AllApps extends LauncherInstrumentation.VisibleContainer {
* Flings forward (down) and waits the fling's end.
*/
public void flingForward() {
final UiObject2 allAppsContainer = verifyActiveContainer();
// Start the gesture in the center to avoid starting at elements near the top.
allAppsContainer.setGestureMargins(0, 0, 0, mHeight / 2);
allAppsContainer.fling(Direction.DOWN, (int) (FLING_SPEED * mLauncher.getDisplayDensity()));
verifyActiveContainer();
try(LauncherInstrumentation.Closable c =
mLauncher.addContextLayer("want to fling forward in all apps")) {
final UiObject2 allAppsContainer = verifyActiveContainer();
// Start the gesture in the center to avoid starting at elements near the top.
allAppsContainer.setGestureMargins(0, 0, 0, mHeight / 2);
allAppsContainer.fling(Direction.DOWN,
(int) (FLING_SPEED * mLauncher.getDisplayDensity()));
verifyActiveContainer();
}
}
/**
* Flings backward (up) and waits the fling's end.
*/
public void flingBackward() {
final UiObject2 allAppsContainer = verifyActiveContainer();
// Start the gesture in the center, for symmetry with forward.
allAppsContainer.setGestureMargins(0, mHeight / 2, 0, 0);
allAppsContainer.fling(Direction.UP, (int) (FLING_SPEED * mLauncher.getDisplayDensity()));
verifyActiveContainer();
try(LauncherInstrumentation.Closable c =
mLauncher.addContextLayer("want to fling backward in all apps")) {
final UiObject2 allAppsContainer = verifyActiveContainer();
// Start the gesture in the center, for symmetry with forward.
allAppsContainer.setGestureMargins(0, mHeight / 2, 0, 0);
allAppsContainer.fling(Direction.UP,
(int) (FLING_SPEED * mLauncher.getDisplayDensity()));
verifyActiveContainer();
}
}
}

View File

@ -42,20 +42,24 @@ public final class AllAppsFromOverview extends AllApps {
*/
@NonNull
public Overview switchBackToOverview() {
final UiObject2 allAppsContainer = verifyActiveContainer();
// Swipe from the search box to the bottom.
final UiObject2 qsb = mLauncher.waitForObjectInContainer(
allAppsContainer, "search_container_all_apps");
final Point start = qsb.getVisibleCenter();
final int swipeHeight = mLauncher.getTestInfo(
TestProtocol.REQUEST_ALL_APPS_TO_OVERVIEW_SWIPE_HEIGHT).
getInt(TestProtocol.TEST_INFO_RESPONSE_FIELD);
try (LauncherInstrumentation.Closable c = mLauncher.addContextLayer(
"want to switch back from all apps to overview")) {
final UiObject2 allAppsContainer = verifyActiveContainer();
// Swipe from the search box to the bottom.
final UiObject2 qsb = mLauncher.waitForObjectInContainer(
allAppsContainer, "search_container_all_apps");
final Point start = qsb.getVisibleCenter();
final int swipeHeight = mLauncher.getTestInfo(
TestProtocol.REQUEST_ALL_APPS_TO_OVERVIEW_SWIPE_HEIGHT).
getInt(TestProtocol.TEST_INFO_RESPONSE_FIELD);
final int endY = start.y + swipeHeight + mLauncher.getTouchSlop();
LauncherInstrumentation.log("AllAppsFromOverview.switchBackToOverview before swipe");
mLauncher.swipe(start.x, start.y, start.x, endY, OVERVIEW_STATE_ORDINAL);
final int endY = start.y + swipeHeight + mLauncher.getTouchSlop();
LauncherInstrumentation.log("AllAppsFromOverview.switchBackToOverview before swipe");
mLauncher.swipe(start.x, start.y, start.x, endY, OVERVIEW_STATE_ORDINAL);
return new Overview(mLauncher);
try (LauncherInstrumentation.Closable c1 = mLauncher.addContextLayer("swiped down")) {
return new Overview(mLauncher);
}
}
}
}

View File

@ -57,11 +57,14 @@ public class Background extends LauncherInstrumentation.VisibleContainer {
*/
@NonNull
public BaseOverview switchToOverview() {
verifyActiveContainer();
goToOverviewUnchecked(BACKGROUND_APP_STATE_ORDINAL);
assertTrue("Overview not visible", mLauncher.getDevice().wait(
Until.hasObject(By.pkg(getOverviewPackageName())), WAIT_TIME_MS));
return new BaseOverview(mLauncher);
try (LauncherInstrumentation.Closable c = mLauncher.addContextLayer(
"want to switch from background to overview")) {
verifyActiveContainer();
goToOverviewUnchecked(BACKGROUND_APP_STATE_ORDINAL);
assertTrue("Overview not visible", mLauncher.getDevice().wait(
Until.hasObject(By.pkg(getOverviewPackageName())), WAIT_TIME_MS));
return new BaseOverview(mLauncher);
}
}
protected void goToOverviewUnchecked(int expectedState) {

View File

@ -44,42 +44,54 @@ public class BaseOverview extends LauncherInstrumentation.VisibleContainer {
* Flings forward (left) and waits the fling's end.
*/
public void flingForward() {
LauncherInstrumentation.log("Overview.flingForward before fling");
final UiObject2 overview = verifyActiveContainer();
final int margin = (int) (50 * mLauncher.getDisplayDensity()) + 1;
overview.setGestureMargins(margin, 0, 0, 0);
overview.fling(Direction.LEFT, (int) (FLING_SPEED * mLauncher.getDisplayDensity()));
mLauncher.waitForIdle();
verifyActiveContainer();
try (LauncherInstrumentation.Closable c =
mLauncher.addContextLayer("want to fling forward in overview")) {
LauncherInstrumentation.log("Overview.flingForward before fling");
final UiObject2 overview = verifyActiveContainer();
final int margin = (int) (50 * mLauncher.getDisplayDensity()) + 1;
overview.setGestureMargins(margin, 0, 0, 0);
overview.fling(Direction.LEFT, (int) (FLING_SPEED * mLauncher.getDisplayDensity()));
mLauncher.waitForIdle();
verifyActiveContainer();
}
}
/**
* Dismissed all tasks by scrolling to Clear-all button and pressing it.
*/
public Workspace dismissAllTasks() {
final BySelector clearAllSelector = mLauncher.getLauncherObjectSelector("clear_all");
for (int i = 0;
i < FLINGS_FOR_DISMISS_LIMIT
&& !verifyActiveContainer().hasObject(clearAllSelector);
++i) {
flingForward();
}
try (LauncherInstrumentation.Closable c = mLauncher.addContextLayer(
"dismissing all tasks")) {
final BySelector clearAllSelector = mLauncher.getLauncherObjectSelector("clear_all");
for (int i = 0;
i < FLINGS_FOR_DISMISS_LIMIT
&& !verifyActiveContainer().hasObject(clearAllSelector);
++i) {
flingForward();
}
mLauncher.getObjectInContainer(verifyActiveContainer(), clearAllSelector).click();
return new Workspace(mLauncher);
mLauncher.getObjectInContainer(verifyActiveContainer(), clearAllSelector).click();
try (LauncherInstrumentation.Closable c1 = mLauncher.addContextLayer(
"dismissed all tasks")) {
return new Workspace(mLauncher);
}
}
}
/**
* Flings backward (right) and waits the fling's end.
*/
public void flingBackward() {
LauncherInstrumentation.log("Overview.flingBackward before fling");
final UiObject2 overview = verifyActiveContainer();
final int margin = (int) (50 * mLauncher.getDisplayDensity()) + 1;
overview.setGestureMargins(0, 0, margin, 0);
overview.fling(Direction.RIGHT, (int) (FLING_SPEED * mLauncher.getDisplayDensity()));
mLauncher.waitForIdle();
verifyActiveContainer();
try (LauncherInstrumentation.Closable c =
mLauncher.addContextLayer("want to fling backward in overview")) {
LauncherInstrumentation.log("Overview.flingBackward before fling");
final UiObject2 overview = verifyActiveContainer();
final int margin = (int) (50 * mLauncher.getDisplayDensity()) + 1;
overview.setGestureMargins(0, 0, margin, 0);
overview.fling(Direction.RIGHT, (int) (FLING_SPEED * mLauncher.getDisplayDensity()));
mLauncher.waitForIdle();
verifyActiveContainer();
}
}
/**
@ -89,18 +101,21 @@ public class BaseOverview extends LauncherInstrumentation.VisibleContainer {
*/
@NonNull
public OverviewTask getCurrentTask() {
verifyActiveContainer();
final List<UiObject2> taskViews = mLauncher.getDevice().findObjects(
mLauncher.getLauncherObjectSelector("snapshot"));
LauncherInstrumentation.assertNotEquals("Unable to find a task", 0, taskViews.size());
try (LauncherInstrumentation.Closable c = mLauncher.addContextLayer(
"want to get current task")) {
verifyActiveContainer();
final List<UiObject2> taskViews = mLauncher.getDevice().findObjects(
mLauncher.getLauncherObjectSelector("snapshot"));
mLauncher.assertNotEquals("Unable to find a task", 0, taskViews.size());
// taskViews contains up to 3 task views: the 'main' (having the widest visible
// part) one in the center, and parts of its right and left siblings. Find the
// main task view by its width.
final UiObject2 widestTask = Collections.max(taskViews,
(t1, t2) -> Integer.compare(t1.getVisibleBounds().width(),
t2.getVisibleBounds().width()));
// taskViews contains up to 3 task views: the 'main' (having the widest visible
// part) one in the center, and parts of its right and left siblings. Find the
// main task view by its width.
final UiObject2 widestTask = Collections.max(taskViews,
(t1, t2) -> Integer.compare(t1.getVisibleBounds().width(),
t2.getVisibleBounds().width()));
return new OverviewTask(mLauncher, widestTask, this);
return new OverviewTask(mLauncher, widestTask, this);
}
}
}

View File

@ -48,8 +48,14 @@ public abstract class Home extends Background {
@NonNull
@Override
public Overview switchToOverview() {
verifyActiveContainer();
goToOverviewUnchecked(OVERVIEW_STATE_ORDINAL);
return new Overview(mLauncher);
try (LauncherInstrumentation.Closable c = mLauncher.addContextLayer(
"want to switch from home to overview")) {
verifyActiveContainer();
goToOverviewUnchecked(OVERVIEW_STATE_ORDINAL);
try (LauncherInstrumentation.Closable c1 = mLauncher.addContextLayer(
"performed the switch action")) {
return new Overview(mLauncher);
}
}
}
}

View File

@ -59,10 +59,10 @@ class Launchable {
private Background launch(String errorMessage, BySelector selector) {
LauncherInstrumentation.log("Launchable.launch before click " +
mObject.getVisibleCenter());
LauncherInstrumentation.assertTrue(
mLauncher.assertTrue(
"Launching an app didn't open a new window: " + mObject.getText(),
mObject.clickAndWait(Until.newWindow(), LauncherInstrumentation.WAIT_TIME_MS));
LauncherInstrumentation.assertTrue(
mLauncher.assertTrue(
"App didn't start: " + errorMessage,
mLauncher.getDevice().wait(Until.hasObject(selector),
LauncherInstrumentation.WAIT_TIME_MS));
@ -79,6 +79,9 @@ class Launchable {
this,
new Point(device.getDisplayWidth() / 2, device.getDisplayHeight() / 2),
DRAG_SPEED);
return new Workspace(mLauncher);
try (LauncherInstrumentation.Closable c = mLauncher.addContextLayer(
"dragged launchable to workspace")) {
return new Workspace(mLauncher);
}
}
}

View File

@ -54,6 +54,8 @@ import org.junit.Assert;
import java.io.IOException;
import java.lang.ref.WeakReference;
import java.util.Deque;
import java.util.LinkedList;
import java.util.List;
import java.util.concurrent.TimeoutException;
@ -91,11 +93,16 @@ public final class LauncherInstrumentation {
* @return UI object for the container.
*/
final UiObject2 verifyActiveContainer() {
assertTrue("Attempt to use a stale container", this == sActiveContainer.get());
mLauncher.assertTrue("Attempt to use a stale container",
this == sActiveContainer.get());
return mLauncher.verifyContainerType(getContainerType());
}
}
interface Closable extends AutoCloseable {
void close();
}
private static final String WORKSPACE_RES_ID = "workspace";
private static final String APPS_RES_ID = "apps_view";
private static final String OVERVIEW_RES_ID = "overview_panel";
@ -109,6 +116,7 @@ public final class LauncherInstrumentation {
private final Instrumentation mInstrumentation;
private int mExpectedRotation = Surface.ROTATION_0;
private final Uri mTestProviderUri;
private final Deque<String> mDiagnosticContext = new LinkedList<>();
/**
* Constructs the root of TAPL hierarchy. You get all other objects from it.
@ -180,31 +188,38 @@ public final class LauncherInstrumentation {
Log.d(TAG, message);
}
private static void fail(String message) {
Assert.fail("http://go/tapl : " + message);
Closable addContextLayer(String piece) {
mDiagnosticContext.addLast(piece);
return () -> mDiagnosticContext.removeLast();
}
static void assertTrue(String message, boolean condition) {
private void fail(String message) {
final String ctxt = mDiagnosticContext.isEmpty() ? "" : String.join(", ",
mDiagnosticContext) + "; ";
Assert.fail("http://go/tapl : " + ctxt + message);
}
void assertTrue(String message, boolean condition) {
if (!condition) {
fail(message);
}
}
static void assertNotNull(String message, Object object) {
void assertNotNull(String message, Object object) {
assertTrue(message, object != null);
}
static private void failEquals(String message, Object actual) {
private void failEquals(String message, Object actual) {
fail(message + ". " + "Actual: " + actual);
}
static private void assertEquals(String message, int expected, int actual) {
private void assertEquals(String message, int expected, int actual) {
if (expected != actual) {
fail(message + " expected: " + expected + " but was: " + actual);
}
}
static void assertNotEquals(String message, int unexpected, int actual) {
void assertNotEquals(String message, int unexpected, int actual) {
if (unexpected == actual) {
failEquals(message, actual);
}
@ -222,49 +237,52 @@ public final class LauncherInstrumentation {
(mDevice.findObject(By.res(SYSTEMUI_PACKAGE, "recent_apps")) == null));
log("verifyContainerType: " + containerType);
switch (containerType) {
case WORKSPACE: {
waitForLauncherObject(APPS_RES_ID);
waitUntilGone(OVERVIEW_RES_ID);
waitUntilGone(WIDGETS_RES_ID);
return waitForLauncherObject(WORKSPACE_RES_ID);
}
case WIDGETS: {
waitUntilGone(WORKSPACE_RES_ID);
waitUntilGone(APPS_RES_ID);
waitUntilGone(OVERVIEW_RES_ID);
return waitForLauncherObject(WIDGETS_RES_ID);
}
case ALL_APPS: {
waitUntilGone(WORKSPACE_RES_ID);
waitUntilGone(OVERVIEW_RES_ID);
waitUntilGone(WIDGETS_RES_ID);
return waitForLauncherObject(APPS_RES_ID);
}
case OVERVIEW: {
if (mDevice.isNaturalOrientation()) {
try (Closable c = addContextLayer(
"but the current state is not " + containerType.name())) {
switch (containerType) {
case WORKSPACE: {
waitForLauncherObject(APPS_RES_ID);
} else {
waitUntilGone(APPS_RES_ID);
waitUntilGone(OVERVIEW_RES_ID);
waitUntilGone(WIDGETS_RES_ID);
return waitForLauncherObject(WORKSPACE_RES_ID);
}
// Fall through
}
case BASE_OVERVIEW: {
waitUntilGone(WORKSPACE_RES_ID);
waitUntilGone(WIDGETS_RES_ID);
case WIDGETS: {
waitUntilGone(WORKSPACE_RES_ID);
waitUntilGone(APPS_RES_ID);
waitUntilGone(OVERVIEW_RES_ID);
return waitForLauncherObject(WIDGETS_RES_ID);
}
case ALL_APPS: {
waitUntilGone(WORKSPACE_RES_ID);
waitUntilGone(OVERVIEW_RES_ID);
waitUntilGone(WIDGETS_RES_ID);
return waitForLauncherObject(APPS_RES_ID);
}
case OVERVIEW: {
if (mDevice.isNaturalOrientation()) {
waitForLauncherObject(APPS_RES_ID);
} else {
waitUntilGone(APPS_RES_ID);
}
// Fall through
}
case BASE_OVERVIEW: {
waitUntilGone(WORKSPACE_RES_ID);
waitUntilGone(WIDGETS_RES_ID);
return waitForLauncherObject(OVERVIEW_RES_ID);
return waitForLauncherObject(OVERVIEW_RES_ID);
}
case BACKGROUND: {
waitUntilGone(WORKSPACE_RES_ID);
waitUntilGone(APPS_RES_ID);
waitUntilGone(OVERVIEW_RES_ID);
waitUntilGone(WIDGETS_RES_ID);
return null;
}
default:
fail("Invalid state: " + containerType);
return null;
}
case BACKGROUND: {
waitUntilGone(WORKSPACE_RES_ID);
waitUntilGone(APPS_RES_ID);
waitUntilGone(OVERVIEW_RES_ID);
waitUntilGone(WIDGETS_RES_ID);
return null;
}
default:
fail("Invalid state: " + containerType);
return null;
}
}
@ -356,7 +374,9 @@ public final class LauncherInstrumentation {
*/
@NonNull
public Workspace getWorkspace() {
return new Workspace(this);
try (LauncherInstrumentation.Closable c = addContextLayer("want to get workspace object")) {
return new Workspace(this);
}
}
/**
@ -378,7 +398,9 @@ public final class LauncherInstrumentation {
*/
@NonNull
public Widgets getAllWidgets() {
return new Widgets(this);
try (LauncherInstrumentation.Closable c = addContextLayer("want to get widgets")) {
return new Widgets(this);
}
}
/**
@ -389,7 +411,9 @@ public final class LauncherInstrumentation {
*/
@NonNull
public Overview getOverview() {
return new Overview(this);
try (LauncherInstrumentation.Closable c = addContextLayer("want to get overview")) {
return new Overview(this);
}
}
/**
@ -413,7 +437,9 @@ public final class LauncherInstrumentation {
*/
@NonNull
public AllApps getAllApps() {
return new AllApps(this);
try (LauncherInstrumentation.Closable c = addContextLayer("want to get all apps object")) {
return new AllApps(this);
}
}
/**
@ -426,7 +452,9 @@ public final class LauncherInstrumentation {
*/
@NonNull
public AllAppsFromOverview getAllAppsFromOverview() {
return new AllAppsFromOverview(this);
try (LauncherInstrumentation.Closable c = addContextLayer("want to get all apps object")) {
return new AllAppsFromOverview(this);
}
}
void waitUntilGone(String resId) {

View File

@ -20,11 +20,11 @@ import static com.android.launcher3.TestProtocol.ALL_APPS_STATE_ORDINAL;
import android.graphics.Point;
import com.android.launcher3.tapl.LauncherInstrumentation.ContainerType;
import androidx.annotation.NonNull;
import androidx.test.uiautomator.UiObject2;
import com.android.launcher3.tapl.LauncherInstrumentation.ContainerType;
/**
* Overview pane.
*/
@ -47,14 +47,20 @@ public final class Overview extends BaseOverview {
*/
@NonNull
public AllAppsFromOverview switchToAllApps() {
verifyActiveContainer();
try (LauncherInstrumentation.Closable c = mLauncher.addContextLayer(
"want to switch from overview to all apps")) {
verifyActiveContainer();
// Swipe from navbar to the top.
final UiObject2 navBar = mLauncher.waitForSystemUiObject("navigation_bar_frame");
final Point start = navBar.getVisibleCenter();
LauncherInstrumentation.log("Overview.switchToAllApps before swipe");
mLauncher.swipe(start.x, start.y, start.x, 0, ALL_APPS_STATE_ORDINAL);
// Swipe from navbar to the top.
final UiObject2 navBar = mLauncher.waitForSystemUiObject("navigation_bar_frame");
final Point start = navBar.getVisibleCenter();
LauncherInstrumentation.log("Overview.switchToAllApps before swipe");
mLauncher.swipe(start.x, start.y, start.x, 0, ALL_APPS_STATE_ORDINAL);
return new AllAppsFromOverview(mLauncher);
try (LauncherInstrumentation.Closable c1 = mLauncher.addContextLayer(
"swiped all way up from overview")) {
return new AllAppsFromOverview(mLauncher);
}
}
}
}

View File

@ -44,10 +44,13 @@ public final class OverviewTask {
* Swipes the task up.
*/
public void dismiss() {
verifyActiveContainer();
// Dismiss the task via flinging it up.
mTask.fling(Direction.DOWN, (int) (FLING_SPEED * mLauncher.getDisplayDensity()));
mLauncher.waitForIdle();
try (LauncherInstrumentation.Closable c = mLauncher.addContextLayer(
"want to dismiss a task")) {
verifyActiveContainer();
// Dismiss the task via flinging it up.
mTask.fling(Direction.DOWN, (int) (FLING_SPEED * mLauncher.getDisplayDensity()));
mLauncher.waitForIdle();
}
}
/**
@ -55,7 +58,7 @@ public final class OverviewTask {
*/
public Background open() {
verifyActiveContainer();
LauncherInstrumentation.assertTrue("Launching task didn't open a new window: " +
mLauncher.assertTrue("Launching task didn't open a new window: " +
mTask.getParent().getContentDescription(),
mTask.clickAndWait(Until.newWindow(), LauncherInstrumentation.WAIT_TIME_MS));
return new Background(mLauncher);

View File

@ -34,21 +34,33 @@ public final class Widgets extends LauncherInstrumentation.VisibleContainer {
* Flings forward (down) and waits the fling's end.
*/
public void flingForward() {
final UiObject2 widgetsContainer = verifyActiveContainer();
widgetsContainer.setGestureMargin(100);
widgetsContainer.fling(Direction.DOWN, (int) (FLING_SPEED * mLauncher.getDisplayDensity()));
verifyActiveContainer();
try (LauncherInstrumentation.Closable c = mLauncher.addContextLayer(
"want to fling forward in widgets")) {
final UiObject2 widgetsContainer = verifyActiveContainer();
widgetsContainer.setGestureMargin(100);
widgetsContainer.fling(Direction.DOWN,
(int) (FLING_SPEED * mLauncher.getDisplayDensity()));
try (LauncherInstrumentation.Closable c1 = mLauncher.addContextLayer("flung forward")) {
verifyActiveContainer();
}
}
}
/**
* Flings backward (up) and waits the fling's end.
*/
public void flingBackward() {
final UiObject2 widgetsContainer = verifyActiveContainer();
widgetsContainer.setGestureMargin(100);
widgetsContainer.fling(Direction.UP, (int) (FLING_SPEED * mLauncher.getDisplayDensity()));
mLauncher.waitForIdle();
verifyActiveContainer();
try (LauncherInstrumentation.Closable c = mLauncher.addContextLayer(
"want to fling backwards in widgets")) {
final UiObject2 widgetsContainer = verifyActiveContainer();
widgetsContainer.setGestureMargin(100);
widgetsContainer.fling(Direction.UP,
(int) (FLING_SPEED * mLauncher.getDisplayDensity()));
mLauncher.waitForIdle();
try (LauncherInstrumentation.Closable c1 = mLauncher.addContextLayer("flung back")) {
verifyActiveContainer();
}
}
}
@Override

View File

@ -50,21 +50,27 @@ public final class Workspace extends Home {
*/
@NonNull
public AllApps switchToAllApps() {
verifyActiveContainer();
final UiObject2 hotseat = mHotseat;
final Point start = hotseat.getVisibleCenter();
final int swipeHeight = mLauncher.getTestInfo(
TestProtocol.REQUEST_HOME_TO_ALL_APPS_SWIPE_HEIGHT).
getInt(TestProtocol.TEST_INFO_RESPONSE_FIELD);
mLauncher.swipe(
start.x,
start.y,
start.x,
start.y - swipeHeight - mLauncher.getTouchSlop(),
ALL_APPS_STATE_ORDINAL
);
try(LauncherInstrumentation.Closable c =
mLauncher.addContextLayer("want to switch from workspace to all apps")) {
verifyActiveContainer();
final UiObject2 hotseat = mHotseat;
final Point start = hotseat.getVisibleCenter();
final int swipeHeight = mLauncher.getTestInfo(
TestProtocol.REQUEST_HOME_TO_ALL_APPS_SWIPE_HEIGHT).
getInt(TestProtocol.TEST_INFO_RESPONSE_FIELD);
mLauncher.swipe(
start.x,
start.y,
start.x,
start.y - swipeHeight - mLauncher.getTouchSlop(),
ALL_APPS_STATE_ORDINAL
);
return new AllApps(mLauncher);
try (LauncherInstrumentation.Closable c1 = mLauncher.addContextLayer(
"swiped to all apps")) {
return new AllApps(mLauncher);
}
}
}
/**
@ -75,9 +81,13 @@ public final class Workspace extends Home {
*/
@Nullable
public AppIcon tryGetWorkspaceAppIcon(String appName) {
final UiObject2 workspace = verifyActiveContainer();
final UiObject2 icon = workspace.findObject(AppIcon.getAppIconSelector(appName, mLauncher));
return icon != null ? new AppIcon(mLauncher, icon) : null;
try (LauncherInstrumentation.Closable c = mLauncher.addContextLayer(
"want to get a workspace icon")) {
final UiObject2 workspace = verifyActiveContainer();
final UiObject2 icon = workspace.findObject(
AppIcon.getAppIconSelector(appName, mLauncher));
return icon != null ? new AppIcon(mLauncher, icon) : null;
}
}
@ -165,7 +175,9 @@ public final class Workspace extends Home {
public Widgets openAllWidgets() {
verifyActiveContainer();
mLauncher.getDevice().pressKeyCode(KeyEvent.KEYCODE_W, KeyEvent.META_CTRL_ON);
return new Widgets(mLauncher);
try (LauncherInstrumentation.Closable c = mLauncher.addContextLayer("pressed Ctrl+W")) {
return new Widgets(mLauncher);
}
}
@Override