Commit d6a0a21a authored by Shakti Sahu's avatar Shakti Sahu Committed by Commit Bot

IPH : Set focus to highlighted menu item after opening app menu

This CL adds the following:
1 - After opening chrome menu, if there is a highlighted menu item due
to IPH (both for circle and rectangle), accessibility focus will be set
to the highlighted view. It still needs a delay of about 1 second after
the menu opens, without which focus is not set to the correct view.

Bug: 767075
Change-Id: I5f4418537e8922189a5fe9f19bfcc70eadcaa000
Reviewed-on: https://chromium-review.googlesource.com/c/1404566
Commit-Queue: Shakti Sahu <shaktisahu@chromium.org>
Reviewed-by: default avatarDavid Trainor <dtrainor@chromium.org>
Cr-Commit-Position: refs/heads/master@{#622565}
parent 0bb9fa13
......@@ -6,6 +6,7 @@ package org.chromium.chrome.browser.appmenu;
import android.animation.Animator;
import android.animation.Animator.AnimatorListener;
import android.animation.AnimatorListenerAdapter;
import android.animation.AnimatorSet;
import android.content.Context;
import android.content.res.Resources;
......@@ -26,6 +27,7 @@ import android.view.View.OnKeyListener;
import android.view.ViewGroup;
import android.view.ViewStub;
import android.view.WindowManager;
import android.view.accessibility.AccessibilityEvent;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ImageButton;
......@@ -521,9 +523,23 @@ public class AppMenu implements OnItemClickListener, OnKeyListener {
}
mMenuItemEnterAnimator.addListener(mAnimationHistogramRecorder);
mMenuItemEnterAnimator.addListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
focusHighlightedView();
}
});
mMenuItemEnterAnimator.start();
}
private void focusHighlightedView() {
View highlightedView = mAdapter.getHighlightedView();
if (highlightedView == null) return;
highlightedView.requestFocus();
highlightedView.sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_FOCUSED);
}
private int inflateFooter(
int footerResourceId, View contentView, int menuWidth, Integer highlightedItemId) {
if (footerResourceId == 0) {
......
......@@ -104,6 +104,7 @@ class AppMenuAdapter extends BaseAdapter {
private final int mNumMenuItems;
private final Integer mHighlightedItemId;
private final float mDpToPx;
private View mHighlightedView;
public AppMenuAdapter(AppMenu appMenu, List<MenuItem> menuItems, LayoutInflater inflater,
Integer highlightedItemId) {
......@@ -274,14 +275,21 @@ class AppMenuAdapter extends BaseAdapter {
}
if (mHighlightedItemId != null && item.getItemId() == mHighlightedItemId) {
mHighlightedView = convertView;
ViewHighlighter.turnOnHighlight(convertView, false);
} else {
if (mHighlightedView == convertView) mHighlightedView = null;
ViewHighlighter.turnOffHighlight(convertView);
}
return convertView;
}
/** @return The view currently highlighted. */
public View getHighlightedView() {
return mHighlightedView;
}
private void setupCheckBox(AppMenuItemIcon button, final MenuItem item) {
button.setChecked(item.isChecked());
......@@ -324,8 +332,10 @@ class AppMenuAdapter extends BaseAdapter {
button.setOnLongClickListener(v -> mAppMenu.onItemLongClick(item, v));
if (mHighlightedItemId != null && item.getItemId() == mHighlightedItemId) {
mHighlightedView = button;
ViewHighlighter.turnOnHighlight(button, true);
} else {
if (mHighlightedView == button) mHighlightedView = null;
ViewHighlighter.turnOffHighlight(button);
}
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment