Merge "A11y Scroll Forward/Up Now Unlock or Show Bouncer" into rvc-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
b5e095733c
@@ -38,6 +38,7 @@ import android.graphics.Rect;
|
||||
import android.graphics.Region;
|
||||
import android.graphics.drawable.Drawable;
|
||||
import android.hardware.biometrics.BiometricSourceType;
|
||||
import android.os.Bundle;
|
||||
import android.os.PowerManager;
|
||||
import android.os.SystemClock;
|
||||
import android.util.Log;
|
||||
@@ -51,6 +52,7 @@ import android.view.ViewPropertyAnimator;
|
||||
import android.view.ViewTreeObserver;
|
||||
import android.view.WindowInsets;
|
||||
import android.view.accessibility.AccessibilityManager;
|
||||
import android.view.accessibility.AccessibilityNodeInfo;
|
||||
import android.widget.FrameLayout;
|
||||
import android.widget.TextView;
|
||||
|
||||
@@ -244,6 +246,7 @@ public class NotificationPanelViewController extends PanelViewController {
|
||||
private final KeyguardUpdateMonitor mUpdateMonitor;
|
||||
private final ConversationNotificationManager mConversationNotificationManager;
|
||||
private final MediaHierarchyManager mMediaHierarchyManager;
|
||||
private final StatusBarKeyguardViewManager mStatusBarKeyguardViewManager;
|
||||
|
||||
private KeyguardAffordanceHelper mAffordanceHelper;
|
||||
private KeyguardUserSwitcher mKeyguardUserSwitcher;
|
||||
@@ -439,6 +442,26 @@ public class NotificationPanelViewController extends PanelViewController {
|
||||
|
||||
private int mOldLayoutDirection;
|
||||
|
||||
private View.AccessibilityDelegate mAccessibilityDelegate = new View.AccessibilityDelegate() {
|
||||
@Override
|
||||
public void onInitializeAccessibilityNodeInfo(View host, AccessibilityNodeInfo info) {
|
||||
super.onInitializeAccessibilityNodeInfo(host, info);
|
||||
info.addAction(AccessibilityNodeInfo.AccessibilityAction.ACTION_SCROLL_FORWARD);
|
||||
info.addAction(AccessibilityNodeInfo.AccessibilityAction.ACTION_SCROLL_UP);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean performAccessibilityAction(View host, int action, Bundle args) {
|
||||
if (action == AccessibilityNodeInfo.AccessibilityAction.ACTION_SCROLL_FORWARD.getId()
|
||||
|| action
|
||||
== AccessibilityNodeInfo.AccessibilityAction.ACTION_SCROLL_UP.getId()) {
|
||||
mStatusBarKeyguardViewManager.showBouncer(true);
|
||||
return true;
|
||||
}
|
||||
return super.performAccessibilityAction(host, action, args);
|
||||
}
|
||||
};
|
||||
|
||||
@Inject
|
||||
public NotificationPanelViewController(NotificationPanelView view,
|
||||
InjectionInflationController injectionInflationController,
|
||||
@@ -459,7 +482,8 @@ public class NotificationPanelViewController extends PanelViewController {
|
||||
FlingAnimationUtils.Builder flingAnimationUtilsBuilder,
|
||||
StatusBarTouchableRegionManager statusBarTouchableRegionManager,
|
||||
ConversationNotificationManager conversationNotificationManager,
|
||||
MediaHierarchyManager mediaHierarchyManager) {
|
||||
MediaHierarchyManager mediaHierarchyManager,
|
||||
StatusBarKeyguardViewManager statusBarKeyguardViewManager) {
|
||||
super(view, falsingManager, dozeLog, keyguardStateController,
|
||||
(SysuiStatusBarStateController) statusBarStateController, vibratorHelper,
|
||||
latencyTracker, flingAnimationUtilsBuilder, statusBarTouchableRegionManager);
|
||||
@@ -470,6 +494,7 @@ public class NotificationPanelViewController extends PanelViewController {
|
||||
mConfigurationController = configurationController;
|
||||
mFlingAnimationUtilsBuilder = flingAnimationUtilsBuilder;
|
||||
mMediaHierarchyManager = mediaHierarchyManager;
|
||||
mStatusBarKeyguardViewManager = statusBarKeyguardViewManager;
|
||||
mView.setWillNotDraw(!DEBUG);
|
||||
mInjectionInflationController = injectionInflationController;
|
||||
mFalsingManager = falsingManager;
|
||||
@@ -583,6 +608,8 @@ public class NotificationPanelViewController extends PanelViewController {
|
||||
mOldLayoutDirection = layoutDirection;
|
||||
}
|
||||
});
|
||||
|
||||
mView.setAccessibilityDelegate(mAccessibilityDelegate);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -43,6 +43,7 @@ import android.view.MotionEvent;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.view.accessibility.AccessibilityManager;
|
||||
import android.view.accessibility.AccessibilityNodeInfo;
|
||||
|
||||
import androidx.test.filters.SmallTest;
|
||||
|
||||
@@ -80,11 +81,13 @@ import com.android.systemui.util.InjectionInflationController;
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.mockito.ArgumentCaptor;
|
||||
import org.mockito.InOrder;
|
||||
import org.mockito.Mock;
|
||||
import org.mockito.MockitoAnnotations;
|
||||
import org.mockito.stubbing.Answer;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.function.Consumer;
|
||||
|
||||
@SmallTest
|
||||
@@ -176,9 +179,12 @@ public class NotificationPanelViewTest extends SysuiTestCase {
|
||||
private MediaHierarchyManager mMediaHiearchyManager;
|
||||
@Mock
|
||||
private ConversationNotificationManager mConversationNotificationManager;
|
||||
@Mock
|
||||
private StatusBarKeyguardViewManager mStatusBarKeyguardViewManager;
|
||||
private FlingAnimationUtils.Builder mFlingAnimationUtilsBuilder;
|
||||
|
||||
private NotificationPanelViewController mNotificationPanelViewController;
|
||||
private View.AccessibilityDelegate mAccessibiltyDelegate;
|
||||
|
||||
@Before
|
||||
public void setup() {
|
||||
@@ -231,11 +237,18 @@ public class NotificationPanelViewTest extends SysuiTestCase {
|
||||
mLatencyTracker, mPowerManager, mAccessibilityManager, 0, mUpdateMonitor,
|
||||
mMetricsLogger, mActivityManager, mZenModeController, mConfigurationController,
|
||||
mFlingAnimationUtilsBuilder, mStatusBarTouchableRegionManager,
|
||||
mConversationNotificationManager, mMediaHiearchyManager);
|
||||
mConversationNotificationManager, mMediaHiearchyManager,
|
||||
mStatusBarKeyguardViewManager);
|
||||
mNotificationPanelViewController.initDependencies(mStatusBar, mGroupManager,
|
||||
mNotificationShelf, mNotificationAreaController, mScrimController);
|
||||
mNotificationPanelViewController.setHeadsUpManager(mHeadsUpManager);
|
||||
mNotificationPanelViewController.setBar(mPanelBar);
|
||||
|
||||
ArgumentCaptor<View.AccessibilityDelegate> accessibilityDelegateArgumentCaptor =
|
||||
ArgumentCaptor.forClass(View.AccessibilityDelegate.class);
|
||||
verify(mView)
|
||||
.setAccessibilityDelegate(accessibilityDelegateArgumentCaptor.capture());
|
||||
mAccessibiltyDelegate = accessibilityDelegateArgumentCaptor.getValue();
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -305,6 +318,39 @@ public class NotificationPanelViewTest extends SysuiTestCase {
|
||||
verify(mKeyguardStatusBar, never()).setVisibility(View.VISIBLE);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testA11y_initializeNode() {
|
||||
AccessibilityNodeInfo nodeInfo = new AccessibilityNodeInfo();
|
||||
mAccessibiltyDelegate.onInitializeAccessibilityNodeInfo(mView, nodeInfo);
|
||||
|
||||
List<AccessibilityNodeInfo.AccessibilityAction> actionList = nodeInfo.getActionList();
|
||||
assertThat(actionList).containsAllIn(
|
||||
new AccessibilityNodeInfo.AccessibilityAction[] {
|
||||
AccessibilityNodeInfo.AccessibilityAction.ACTION_SCROLL_FORWARD,
|
||||
AccessibilityNodeInfo.AccessibilityAction.ACTION_SCROLL_UP}
|
||||
);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testA11y_scrollForward() {
|
||||
mAccessibiltyDelegate.performAccessibilityAction(
|
||||
mView,
|
||||
AccessibilityNodeInfo.AccessibilityAction.ACTION_SCROLL_FORWARD.getId(),
|
||||
null);
|
||||
|
||||
verify(mStatusBarKeyguardViewManager).showBouncer(true);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testA11y_scrollUp() {
|
||||
mAccessibiltyDelegate.performAccessibilityAction(
|
||||
mView,
|
||||
AccessibilityNodeInfo.AccessibilityAction.ACTION_SCROLL_UP.getId(),
|
||||
null);
|
||||
|
||||
verify(mStatusBarKeyguardViewManager).showBouncer(true);
|
||||
}
|
||||
|
||||
private void onTouchEvent(MotionEvent ev) {
|
||||
mTouchHandler.onTouch(mView, ev);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user