Searching icons only in apps_list_view
This should help avoiding situations when an icon is intermittently found in the suggested row vs. the recycler. Change-Id: I71b17caa5f827999f0901d5c4d4348de7e16f053
This commit is contained in:
@@ -49,8 +49,9 @@ public class AllApps extends LauncherInstrumentation.VisibleContainer {
|
||||
return LauncherInstrumentation.ContainerType.ALL_APPS;
|
||||
}
|
||||
|
||||
private boolean hasClickableIcon(UiObject2 allAppsContainer, BySelector appIconSelector) {
|
||||
final UiObject2 icon = allAppsContainer.findObject(appIconSelector);
|
||||
private boolean hasClickableIcon(
|
||||
UiObject2 allAppsContainer, UiObject2 appListRecycler, BySelector appIconSelector) {
|
||||
final UiObject2 icon = appListRecycler.findObject(appIconSelector);
|
||||
if (icon == null) return false;
|
||||
if (mLauncher.getNavigationModel() == ZERO_BUTTON) return true;
|
||||
final UiObject2 navBar = mLauncher.waitForSystemUiObject("navigation_bar_frame");
|
||||
@@ -77,6 +78,8 @@ public class AllApps extends LauncherInstrumentation.VisibleContainer {
|
||||
try (LauncherInstrumentation.Closable c = mLauncher.addContextLayer(
|
||||
"want to get app icon on all apps")) {
|
||||
final UiObject2 allAppsContainer = verifyActiveContainer();
|
||||
final UiObject2 appListRecycler = mLauncher.waitForObjectInContainer(allAppsContainer,
|
||||
"apps_list_view");
|
||||
allAppsContainer.setGestureMargins(
|
||||
0,
|
||||
getSearchBox(allAppsContainer).getVisibleBounds().bottom + 1,
|
||||
@@ -84,11 +87,11 @@ public class AllApps extends LauncherInstrumentation.VisibleContainer {
|
||||
ResourceUtils.getNavbarSize(ResourceUtils.NAVBAR_PORTRAIT_BOTTOM_SIZE,
|
||||
mLauncher.getResources()) + 1);
|
||||
final BySelector appIconSelector = AppIcon.getAppIconSelector(appName, mLauncher);
|
||||
if (!hasClickableIcon(allAppsContainer, appIconSelector)) {
|
||||
if (!hasClickableIcon(allAppsContainer, appListRecycler, appIconSelector)) {
|
||||
scrollBackToBeginning();
|
||||
int attempts = 0;
|
||||
try (LauncherInstrumentation.Closable c1 = mLauncher.addContextLayer("scrolled")) {
|
||||
while (!hasClickableIcon(allAppsContainer, appIconSelector) &&
|
||||
while (!hasClickableIcon(allAppsContainer, appListRecycler, appIconSelector) &&
|
||||
allAppsContainer.scroll(Direction.DOWN, 0.8f)) {
|
||||
mLauncher.assertTrue(
|
||||
"Exceeded max scroll attempts: " + MAX_SCROLL_ATTEMPTS,
|
||||
@@ -101,7 +104,7 @@ public class AllApps extends LauncherInstrumentation.VisibleContainer {
|
||||
|
||||
final UiObject2 appIcon = mLauncher.getObjectInContainer(allAppsContainer,
|
||||
appIconSelector);
|
||||
ensureIconVisible(appIcon, allAppsContainer);
|
||||
ensureIconVisible(appIcon, allAppsContainer, appListRecycler);
|
||||
return new AppIcon(mLauncher, appIcon);
|
||||
}
|
||||
}
|
||||
@@ -138,13 +141,14 @@ public class AllApps extends LauncherInstrumentation.VisibleContainer {
|
||||
getInt(TestProtocol.SCROLL_Y_FIELD, -1);
|
||||
}
|
||||
|
||||
private void ensureIconVisible(UiObject2 appIcon, UiObject2 allAppsContainer) {
|
||||
private void ensureIconVisible(
|
||||
UiObject2 appIcon, UiObject2 allAppsContainer, UiObject2 appListRecycler) {
|
||||
final int appHeight = appIcon.getVisibleBounds().height();
|
||||
if (appHeight < MIN_INTERACT_SIZE) {
|
||||
// Try to figure out how much percentage of the container needs to be scrolled in order
|
||||
// to reveal the app icon to have the MIN_INTERACT_SIZE
|
||||
final float pct = Math.max(((float) (MIN_INTERACT_SIZE - appHeight)) / mHeight, 0.2f);
|
||||
mLauncher.scroll(allAppsContainer, Direction.DOWN, pct, null, 10);
|
||||
mLauncher.scroll(appListRecycler, Direction.DOWN, pct, null, 10);
|
||||
try (LauncherInstrumentation.Closable c = mLauncher.addContextLayer(
|
||||
"scrolled an icon in all apps to make it visible - and then")) {
|
||||
mLauncher.waitForIdle();
|
||||
|
||||
Reference in New Issue
Block a user