mirror of
https://github.com/LawnchairLauncher/lawnchair.git
synced 2026-02-20 03:08:19 +00:00
Fix launcher navigation issue when using a controller
When navigating in Launcher home using a controller, the mCurrentPage variable isn't updated properly which results in out of order navigation. Test: manual Before: http://shortn/_c8A8mKiplN After: http://shortn/_ctxIaweqZY Bug: 187205980 Change-Id: I9ff4019b608e999749c4d0835cc3ceb35be93a3f
This commit is contained in:
@@ -835,18 +835,25 @@ public abstract class PagedView<T extends View & PageIndicator> extends ViewGrou
|
||||
return;
|
||||
}
|
||||
|
||||
// Add the current page's views as focusable and the next possible page's too. If the
|
||||
// last focus change action was left then the left neighbour's views will be added, and
|
||||
// if it was right then the right neighbour's views will be added.
|
||||
// Unfortunately mCurrentPage can be outdated if there were multiple control actions in a
|
||||
// short period of time, but mNextPage is up to date because it is always updated by
|
||||
// method snapToPage.
|
||||
int nextPage = getNextPage();
|
||||
// XXX-RTL: This will be fixed in a future CL
|
||||
if (mCurrentPage >= 0 && mCurrentPage < getPageCount()) {
|
||||
getPageAt(mCurrentPage).addFocusables(views, direction, focusableMode);
|
||||
if (nextPage >= 0 && nextPage < getPageCount()) {
|
||||
getPageAt(nextPage).addFocusables(views, direction, focusableMode);
|
||||
}
|
||||
if (direction == View.FOCUS_LEFT) {
|
||||
if (mCurrentPage > 0) {
|
||||
int nextPage = validateNewPage(mCurrentPage - 1);
|
||||
if (nextPage > 0) {
|
||||
nextPage = validateNewPage(nextPage - 1);
|
||||
getPageAt(nextPage).addFocusables(views, direction, focusableMode);
|
||||
}
|
||||
} else if (direction == View.FOCUS_RIGHT) {
|
||||
if (mCurrentPage < getPageCount() - 1) {
|
||||
int nextPage = validateNewPage(mCurrentPage + 1);
|
||||
if (nextPage < getPageCount() - 1) {
|
||||
nextPage = validateNewPage(nextPage + 1);
|
||||
getPageAt(nextPage).addFocusables(views, direction, focusableMode);
|
||||
}
|
||||
}
|
||||
@@ -1416,6 +1423,14 @@ public abstract class PagedView<T extends View & PageIndicator> extends ViewGrou
|
||||
@Override
|
||||
public void requestChildFocus(View child, View focused) {
|
||||
super.requestChildFocus(child, focused);
|
||||
|
||||
// In case the device is controlled by a controller, mCurrentPage isn't updated properly
|
||||
// which results in incorrect navigation
|
||||
int nextPage = getNextPage();
|
||||
if (nextPage != mCurrentPage) {
|
||||
setCurrentPage(nextPage);
|
||||
}
|
||||
|
||||
int page = indexToPage(indexOfChild(child));
|
||||
if (page >= 0 && page != getCurrentPage() && !isInTouchMode()) {
|
||||
snapToPage(page);
|
||||
|
||||
Reference in New Issue
Block a user