Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 528b9e06 authored by Vadim Tryshev's avatar Vadim Tryshev
Browse files

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
parent 96bc904d
Loading
Loading
Loading
Loading
+5 −4
Original line number Diff line number Diff line
@@ -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);
        }
    }

+31 −0
Original line number Diff line number Diff line
@@ -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;
    }
}
+3 −22
Original line number Diff line number Diff line
@@ -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);