diff options
author | Tarundeep Singh <tarundeep.singh@ittiam.com> | 2019-07-29 14:19:31 +0530 |
---|---|---|
committer | Nick Chalko <nchalko@google.com> | 2019-08-23 08:31:01 -0700 |
commit | 47e92353f30b02357154babf175c7176e061ade6 (patch) | |
tree | df88baeb8ae0353d7b937ab074cc002ecb663e9f /src/com/android/tv/menu/MenuView.java | |
parent | 478c13b4ab6476ec17b9bbff87d598ced325ec3c (diff) | |
download | TV-47e92353f30b02357154babf175c7176e061ade6.tar.gz |
Fix: Navigation for menu with Talkback enabled
Sending a11y focus event from MenuRow.
Bug: 134673950
Change-Id: I577db017165076c1057b6348ebee0a9930adcb0e
Test: manual
Diffstat (limited to 'src/com/android/tv/menu/MenuView.java')
-rw-r--r-- | src/com/android/tv/menu/MenuView.java | 59 |
1 files changed, 30 insertions, 29 deletions
diff --git a/src/com/android/tv/menu/MenuView.java b/src/com/android/tv/menu/MenuView.java index f5fec000..add4a774 100644 --- a/src/com/android/tv/menu/MenuView.java +++ b/src/com/android/tv/menu/MenuView.java @@ -250,39 +250,40 @@ public class MenuView extends FrameLayout implements IMenuView { // The bounds of the views move and overlap with each other during the animation. In this // situation, the framework can't perform the correct focus navigation. So the menu view // should search by itself. + if (direction == View.FOCUS_UP || direction == View.FOCUS_DOWN) { + return getUpDownFocus(focused, direction); + } + return super.focusSearch(focused, direction); + } + + private View getUpDownFocus(View focused, int direction) { + View newView = super.focusSearch(focused, direction); + MenuRowView oldfocusedParent = getParentMenuRowView(focused); + MenuRowView newFocusedParent = getParentMenuRowView(newView); + int selectedPosition = mLayoutManager.getSelectedPosition(); + int start, delta; if (direction == View.FOCUS_UP) { - View newView = super.focusSearch(focused, direction); - MenuRowView oldfocusedParent = getParentMenuRowView(focused); - MenuRowView newFocusedParent = getParentMenuRowView(newView); - int selectedPosition = mLayoutManager.getSelectedPosition(); - if (newFocusedParent != oldfocusedParent) { - // The focus leaves from the current menu row view. - for (int i = selectedPosition - 1; i >= 0; --i) { - MenuRowView view = mMenuRowViews.get(i); - if (view.getVisibility() == View.VISIBLE) { - return view; - } - } - } - return newView; - } else if (direction == View.FOCUS_DOWN) { - View newView = super.focusSearch(focused, direction); - MenuRowView oldfocusedParent = getParentMenuRowView(focused); - MenuRowView newFocusedParent = getParentMenuRowView(newView); - int selectedPosition = mLayoutManager.getSelectedPosition(); - if (newFocusedParent != oldfocusedParent) { - // The focus leaves from the current menu row view. - int count = mMenuRowViews.size(); - for (int i = selectedPosition + 1; i < count; ++i) { - MenuRowView view = mMenuRowViews.get(i); - if (view.getVisibility() == View.VISIBLE) { - return view; - } + start = selectedPosition - 1; + delta = -1; + } else { + start = selectedPosition + 1; + delta = 1; + } + if (newFocusedParent != oldfocusedParent) { + // The focus leaves from the current menu row view. + int count = mMenuRowViews.size(); + int i = start; + while (i < count && i >= 0) { + MenuRowView view = mMenuRowViews.get(i); + if (view.getVisibility() == View.VISIBLE) { + mMenuRows.get(i).setIsReselected(false); + return view; } + i += delta; } - return newView; } - return super.focusSearch(focused, direction); + mMenuRows.get(selectedPosition).setIsReselected(true); + return newView; } private MenuRowView getParentMenuRowView(View view) { |