Reporting range of visible tasks

Also fixes task position being incorrectly reported specifically for
swipe events due to using stale getCurrentPage().

Bug: 72222505
Test: Manual
Change-Id: Ic79b67f8a6ffbfabc397b411b14afc309405197e
This commit is contained in:
Vadim Tryshev
2018-05-24 18:22:03 -07:00
parent 96bc904ded
commit 528b9e0615
3 changed files with 39 additions and 26 deletions

View File

@@ -1307,10 +1307,11 @@ public abstract class RecentsView<T extends BaseActivity> extends PagedView impl
super.onInitializeAccessibilityEvent(event);
if (event.getEventType() == AccessibilityEvent.TYPE_VIEW_SCROLLED) {
final int visiblePageNumber = getChildCount() - getCurrentPage() - 1;
event.setFromIndex(visiblePageNumber);
event.setToIndex(visiblePageNumber);
event.setItemCount(getChildCount());
final int childCount = getChildCount();
final int[] visibleTasks = getVisibleChildrenRange();
event.setFromIndex(childCount - visibleTasks[1] - 1);
event.setToIndex(childCount - visibleTasks[0] - 1);
event.setItemCount(childCount);
}
}

View File

@@ -152,6 +152,8 @@ public abstract class PagedView<T extends View & PageIndicator> extends ViewGrou
// Similar to the platform implementation of isLayoutValid();
protected boolean mIsLayoutValid;
private int[] mTmpIntPair = new int[2];
public PagedView(Context context) {
this(context, null);
}
@@ -1600,4 +1602,33 @@ public abstract class PagedView<T extends View & PageIndicator> extends ViewGrou
boolean shouldIncludeView(View view);
}
public int[] getVisibleChildrenRange() {
float visibleLeft = 0;
float visibleRight = visibleLeft + getMeasuredWidth();
float scaleX = getScaleX();
if (scaleX < 1 && scaleX > 0) {
float mid = getMeasuredWidth() / 2;
visibleLeft = mid - ((mid - visibleLeft) / scaleX);
visibleRight = mid + ((visibleRight - mid) / scaleX);
}
int leftChild = -1;
int rightChild = -1;
final int childCount = getChildCount();
for (int i = 0; i < childCount; i++) {
final View child = getPageAt(i);
float left = child.getLeft() + child.getTranslationX() - getScrollX();
if (left <= visibleRight && (left + child.getMeasuredWidth()) >= visibleLeft) {
if (leftChild == -1) {
leftChild = i;
}
rightChild = i;
}
}
mTmpIntPair[0] = leftChild;
mTmpIntPair[1] = rightChild;
return mTmpIntPair;
}
}

View File

@@ -1381,28 +1381,9 @@ public class Workspace extends PagedView<WorkspacePageIndicator>
if (mChildrenLayersEnabled) {
final int screenCount = getChildCount();
float visibleLeft = 0;
float visibleRight = visibleLeft + getMeasuredWidth();
float scaleX = getScaleX();
if (scaleX < 1 && scaleX > 0) {
float mid = getMeasuredWidth() / 2;
visibleLeft = mid - ((mid - visibleLeft) / scaleX);
visibleRight = mid + ((visibleRight - mid) / scaleX);
}
int leftScreen = -1;
int rightScreen = -1;
for (int i = 0; i < screenCount; i++) {
final View child = getPageAt(i);
float left = child.getLeft() + child.getTranslationX() - getScrollX();
if (left <= visibleRight && (left + child.getMeasuredWidth()) >= visibleLeft) {
if (leftScreen == -1) {
leftScreen = i;
}
rightScreen = i;
}
}
final int[] visibleScreens = getVisibleChildrenRange();
int leftScreen = visibleScreens[0];
int rightScreen = visibleScreens[1];
if (mForceDrawAdjacentPages) {
// In overview mode, make sure that the two side pages are visible.
leftScreen = Utilities.boundToRange(getCurrentPage() - 1, 0, rightScreen);