Fix switch access for overview grid
- Removed overscroll checking in switch access, as overscroll isn't supported via snapToPage - Don't show forward/backward action if no further scroll is possible - When scrolling right in overveiw grid, snap to the next non-fully visible task - When scrolling left in overview grid, snap to a position that next non-fully visible task is on the left of the screen Fix: 204162346 Test: Use switch action in Workspace/Recents with and w/o RTL Change-Id: I0d4f201edf2da543703e88420e6f3255fb2ba16f
This commit is contained in:
parent
71b7d1537d
commit
9ead9ca226
|
@ -1039,6 +1039,17 @@ public abstract class RecentsView<ACTIVITY_TYPE extends StatefulActivity<STATE_T
|
|||
}
|
||||
}
|
||||
|
||||
public boolean isTaskViewFullyVisible(TaskView tv) {
|
||||
if (showAsGrid()) {
|
||||
int screenStart = mOrientationHandler.getPrimaryScroll(this);
|
||||
int screenEnd = screenStart + mOrientationHandler.getMeasuredSize(this);
|
||||
return isTaskViewFullyWithinBounds(tv, screenStart, screenEnd);
|
||||
} else {
|
||||
// For now, just check if it's the active task
|
||||
return indexOfChild(tv) == getNextPage();
|
||||
}
|
||||
}
|
||||
|
||||
@Nullable
|
||||
private TaskView getLastGridTaskView() {
|
||||
return getLastGridTaskView(getTopRowIdArray(), getBottomRowIdArray());
|
||||
|
@ -1085,6 +1096,15 @@ public abstract class RecentsView<ACTIVITY_TYPE extends StatefulActivity<STATE_T
|
|||
&& taskEnd <= end);
|
||||
}
|
||||
|
||||
private boolean isTaskViewFullyWithinBounds(TaskView tv, int start, int end) {
|
||||
int taskStart = mOrientationHandler.getChildStart(tv) + (int) tv.getOffsetAdjustment(
|
||||
showAsFullscreen(), showAsGrid());
|
||||
int taskSize = (int) (mOrientationHandler.getMeasuredSize(tv) * tv.getSizeAdjustment(
|
||||
showAsFullscreen()));
|
||||
int taskEnd = taskStart + taskSize;
|
||||
return taskStart >= start && taskEnd <= end;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns true if the task is in expected scroll position.
|
||||
*
|
||||
|
@ -4939,6 +4959,62 @@ public abstract class RecentsView<ACTIVITY_TYPE extends StatefulActivity<STATE_T
|
|||
return mPipCornerRadius;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean scrollLeft() {
|
||||
if (!showAsGrid()) {
|
||||
return super.scrollLeft();
|
||||
}
|
||||
|
||||
int targetPage = getNextPage();
|
||||
if (targetPage >= 0) {
|
||||
// Find the next page that is not fully visible.
|
||||
TaskView taskView = getTaskViewAt(targetPage);
|
||||
while ((taskView == null || isTaskViewFullyVisible(taskView)) && targetPage - 1 >= 0) {
|
||||
taskView = getTaskViewAt(--targetPage);
|
||||
}
|
||||
// Target a scroll where targetPage is on left of screen but still fully visible.
|
||||
int lastTaskEnd = (mIsRtl
|
||||
? mLastComputedGridSize.left
|
||||
: mLastComputedGridSize.right)
|
||||
+ (mIsRtl ? mPageSpacing : -mPageSpacing);
|
||||
int normalTaskEnd = mIsRtl
|
||||
? mLastComputedGridTaskSize.left
|
||||
: mLastComputedGridTaskSize.right;
|
||||
int targetScroll = getScrollForPage(targetPage) + normalTaskEnd - lastTaskEnd;
|
||||
// Find a page that is close to targetScroll while not over it.
|
||||
while (targetPage - 1 >= 0
|
||||
&& (mIsRtl
|
||||
? getScrollForPage(targetPage - 1) < targetScroll
|
||||
: getScrollForPage(targetPage - 1) > targetScroll)) {
|
||||
targetPage--;
|
||||
}
|
||||
snapToPage(targetPage);
|
||||
return true;
|
||||
}
|
||||
|
||||
return mAllowOverScroll;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean scrollRight() {
|
||||
if (!showAsGrid()) {
|
||||
return super.scrollRight();
|
||||
}
|
||||
|
||||
int targetPage = getNextPage();
|
||||
if (targetPage < getChildCount()) {
|
||||
// Find the next page that is not fully visible.
|
||||
TaskView taskView = getTaskViewAt(targetPage);
|
||||
while ((taskView != null && isTaskViewFullyVisible(taskView))
|
||||
&& targetPage + 1 < getChildCount()) {
|
||||
taskView = getTaskViewAt(++targetPage);
|
||||
}
|
||||
snapToPage(targetPage);
|
||||
return true;
|
||||
}
|
||||
return mAllowOverScroll;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onScrollChanged(int l, int t, int oldl, int oldt) {
|
||||
super.onScrollChanged(l, t, oldl, oldt);
|
||||
|
|
|
@ -1749,20 +1749,23 @@ public abstract class PagedView<T extends View & PageIndicator> extends ViewGrou
|
|||
public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info) {
|
||||
super.onInitializeAccessibilityNodeInfo(info);
|
||||
final boolean pagesFlipped = isPageOrderFlipped();
|
||||
int offset = (mAllowOverScroll ? 0 : 1);
|
||||
info.setScrollable(getPageCount() > offset);
|
||||
if (getCurrentPage() < getPageCount() - offset) {
|
||||
info.setScrollable(getPageCount() > 0);
|
||||
int primaryScroll = mOrientationHandler.getPrimaryScroll(this);
|
||||
if (getCurrentPage() < getPageCount() - getPanelCount()
|
||||
|| (getCurrentPage() == getPageCount() - getPanelCount()
|
||||
&& primaryScroll != getScrollForPage(getPageCount() - getPanelCount()))) {
|
||||
info.addAction(pagesFlipped ?
|
||||
AccessibilityNodeInfo.AccessibilityAction.ACTION_SCROLL_BACKWARD
|
||||
: AccessibilityNodeInfo.AccessibilityAction.ACTION_SCROLL_FORWARD);
|
||||
AccessibilityNodeInfo.AccessibilityAction.ACTION_SCROLL_BACKWARD
|
||||
: AccessibilityNodeInfo.AccessibilityAction.ACTION_SCROLL_FORWARD);
|
||||
info.addAction(mIsRtl ?
|
||||
AccessibilityNodeInfo.AccessibilityAction.ACTION_PAGE_LEFT
|
||||
: AccessibilityNodeInfo.AccessibilityAction.ACTION_PAGE_RIGHT);
|
||||
}
|
||||
if (getCurrentPage() >= offset) {
|
||||
if (getCurrentPage() > 0
|
||||
|| (getCurrentPage() == 0 && primaryScroll != getScrollForPage(0))) {
|
||||
info.addAction(pagesFlipped ?
|
||||
AccessibilityNodeInfo.AccessibilityAction.ACTION_SCROLL_FORWARD
|
||||
: AccessibilityNodeInfo.AccessibilityAction.ACTION_SCROLL_BACKWARD);
|
||||
AccessibilityNodeInfo.AccessibilityAction.ACTION_SCROLL_FORWARD
|
||||
: AccessibilityNodeInfo.AccessibilityAction.ACTION_SCROLL_BACKWARD);
|
||||
info.addAction(mIsRtl ?
|
||||
AccessibilityNodeInfo.AccessibilityAction.ACTION_PAGE_RIGHT
|
||||
: AccessibilityNodeInfo.AccessibilityAction.ACTION_PAGE_LEFT);
|
||||
|
@ -1807,16 +1810,16 @@ public abstract class PagedView<T extends View & PageIndicator> extends ViewGrou
|
|||
} break;
|
||||
case android.R.id.accessibilityActionPageRight: {
|
||||
if (!mIsRtl) {
|
||||
return scrollRight();
|
||||
return scrollRight();
|
||||
} else {
|
||||
return scrollLeft();
|
||||
return scrollLeft();
|
||||
}
|
||||
}
|
||||
case android.R.id.accessibilityActionPageLeft: {
|
||||
if (!mIsRtl) {
|
||||
return scrollLeft();
|
||||
return scrollLeft();
|
||||
} else {
|
||||
return scrollRight();
|
||||
return scrollRight();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue