aboutsummaryrefslogtreecommitdiff
path: root/src/com/android/tv/menu/MenuView.java
diff options
context:
space:
mode:
authorTarundeep Singh <tarundeep.singh@ittiam.com>2019-07-29 14:19:31 +0530
committerNick Chalko <nchalko@google.com>2019-08-23 08:31:01 -0700
commit47e92353f30b02357154babf175c7176e061ade6 (patch)
treedf88baeb8ae0353d7b937ab074cc002ecb663e9f /src/com/android/tv/menu/MenuView.java
parent478c13b4ab6476ec17b9bbff87d598ced325ec3c (diff)
downloadTV-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.java59
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) {