Merge "A11y Scroll Forward/Up Now Unlock or Show Bouncer" into rvc-dev am: b5e095733c

Change-Id: Ida4022cceb2db3aa9ff16e2747269e63f65fc6ab
This commit is contained in:
TreeHugger Robot
2020-05-20 22:32:12 +00:00
committed by Automerger Merge Worker
2 changed files with 75 additions and 2 deletions

View File

@@ -38,6 +38,7 @@ import android.graphics.Rect;
import android.graphics.Region; import android.graphics.Region;
import android.graphics.drawable.Drawable; import android.graphics.drawable.Drawable;
import android.hardware.biometrics.BiometricSourceType; import android.hardware.biometrics.BiometricSourceType;
import android.os.Bundle;
import android.os.PowerManager; import android.os.PowerManager;
import android.os.SystemClock; import android.os.SystemClock;
import android.util.Log; import android.util.Log;
@@ -51,6 +52,7 @@ import android.view.ViewPropertyAnimator;
import android.view.ViewTreeObserver; import android.view.ViewTreeObserver;
import android.view.WindowInsets; import android.view.WindowInsets;
import android.view.accessibility.AccessibilityManager; import android.view.accessibility.AccessibilityManager;
import android.view.accessibility.AccessibilityNodeInfo;
import android.widget.FrameLayout; import android.widget.FrameLayout;
import android.widget.TextView; import android.widget.TextView;
@@ -244,6 +246,7 @@ public class NotificationPanelViewController extends PanelViewController {
private final KeyguardUpdateMonitor mUpdateMonitor; private final KeyguardUpdateMonitor mUpdateMonitor;
private final ConversationNotificationManager mConversationNotificationManager; private final ConversationNotificationManager mConversationNotificationManager;
private final MediaHierarchyManager mMediaHierarchyManager; private final MediaHierarchyManager mMediaHierarchyManager;
private final StatusBarKeyguardViewManager mStatusBarKeyguardViewManager;
private KeyguardAffordanceHelper mAffordanceHelper; private KeyguardAffordanceHelper mAffordanceHelper;
private KeyguardUserSwitcher mKeyguardUserSwitcher; private KeyguardUserSwitcher mKeyguardUserSwitcher;
@@ -439,6 +442,26 @@ public class NotificationPanelViewController extends PanelViewController {
private int mOldLayoutDirection; 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 @Inject
public NotificationPanelViewController(NotificationPanelView view, public NotificationPanelViewController(NotificationPanelView view,
InjectionInflationController injectionInflationController, InjectionInflationController injectionInflationController,
@@ -459,7 +482,8 @@ public class NotificationPanelViewController extends PanelViewController {
FlingAnimationUtils.Builder flingAnimationUtilsBuilder, FlingAnimationUtils.Builder flingAnimationUtilsBuilder,
StatusBarTouchableRegionManager statusBarTouchableRegionManager, StatusBarTouchableRegionManager statusBarTouchableRegionManager,
ConversationNotificationManager conversationNotificationManager, ConversationNotificationManager conversationNotificationManager,
MediaHierarchyManager mediaHierarchyManager) { MediaHierarchyManager mediaHierarchyManager,
StatusBarKeyguardViewManager statusBarKeyguardViewManager) {
super(view, falsingManager, dozeLog, keyguardStateController, super(view, falsingManager, dozeLog, keyguardStateController,
(SysuiStatusBarStateController) statusBarStateController, vibratorHelper, (SysuiStatusBarStateController) statusBarStateController, vibratorHelper,
latencyTracker, flingAnimationUtilsBuilder, statusBarTouchableRegionManager); latencyTracker, flingAnimationUtilsBuilder, statusBarTouchableRegionManager);
@@ -470,6 +494,7 @@ public class NotificationPanelViewController extends PanelViewController {
mConfigurationController = configurationController; mConfigurationController = configurationController;
mFlingAnimationUtilsBuilder = flingAnimationUtilsBuilder; mFlingAnimationUtilsBuilder = flingAnimationUtilsBuilder;
mMediaHierarchyManager = mediaHierarchyManager; mMediaHierarchyManager = mediaHierarchyManager;
mStatusBarKeyguardViewManager = statusBarKeyguardViewManager;
mView.setWillNotDraw(!DEBUG); mView.setWillNotDraw(!DEBUG);
mInjectionInflationController = injectionInflationController; mInjectionInflationController = injectionInflationController;
mFalsingManager = falsingManager; mFalsingManager = falsingManager;
@@ -583,6 +608,8 @@ public class NotificationPanelViewController extends PanelViewController {
mOldLayoutDirection = layoutDirection; mOldLayoutDirection = layoutDirection;
} }
}); });
mView.setAccessibilityDelegate(mAccessibilityDelegate);
} }
@Override @Override

View File

@@ -43,6 +43,7 @@ import android.view.MotionEvent;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.view.accessibility.AccessibilityManager; import android.view.accessibility.AccessibilityManager;
import android.view.accessibility.AccessibilityNodeInfo;
import androidx.test.filters.SmallTest; import androidx.test.filters.SmallTest;
@@ -80,11 +81,13 @@ import com.android.systemui.util.InjectionInflationController;
import org.junit.Before; import org.junit.Before;
import org.junit.Test; import org.junit.Test;
import org.junit.runner.RunWith; import org.junit.runner.RunWith;
import org.mockito.ArgumentCaptor;
import org.mockito.InOrder; import org.mockito.InOrder;
import org.mockito.Mock; import org.mockito.Mock;
import org.mockito.MockitoAnnotations; import org.mockito.MockitoAnnotations;
import org.mockito.stubbing.Answer; import org.mockito.stubbing.Answer;
import java.util.List;
import java.util.function.Consumer; import java.util.function.Consumer;
@SmallTest @SmallTest
@@ -176,9 +179,12 @@ public class NotificationPanelViewTest extends SysuiTestCase {
private MediaHierarchyManager mMediaHiearchyManager; private MediaHierarchyManager mMediaHiearchyManager;
@Mock @Mock
private ConversationNotificationManager mConversationNotificationManager; private ConversationNotificationManager mConversationNotificationManager;
@Mock
private StatusBarKeyguardViewManager mStatusBarKeyguardViewManager;
private FlingAnimationUtils.Builder mFlingAnimationUtilsBuilder; private FlingAnimationUtils.Builder mFlingAnimationUtilsBuilder;
private NotificationPanelViewController mNotificationPanelViewController; private NotificationPanelViewController mNotificationPanelViewController;
private View.AccessibilityDelegate mAccessibiltyDelegate;
@Before @Before
public void setup() { public void setup() {
@@ -231,11 +237,18 @@ public class NotificationPanelViewTest extends SysuiTestCase {
mLatencyTracker, mPowerManager, mAccessibilityManager, 0, mUpdateMonitor, mLatencyTracker, mPowerManager, mAccessibilityManager, 0, mUpdateMonitor,
mMetricsLogger, mActivityManager, mZenModeController, mConfigurationController, mMetricsLogger, mActivityManager, mZenModeController, mConfigurationController,
mFlingAnimationUtilsBuilder, mStatusBarTouchableRegionManager, mFlingAnimationUtilsBuilder, mStatusBarTouchableRegionManager,
mConversationNotificationManager, mMediaHiearchyManager); mConversationNotificationManager, mMediaHiearchyManager,
mStatusBarKeyguardViewManager);
mNotificationPanelViewController.initDependencies(mStatusBar, mGroupManager, mNotificationPanelViewController.initDependencies(mStatusBar, mGroupManager,
mNotificationShelf, mNotificationAreaController, mScrimController); mNotificationShelf, mNotificationAreaController, mScrimController);
mNotificationPanelViewController.setHeadsUpManager(mHeadsUpManager); mNotificationPanelViewController.setHeadsUpManager(mHeadsUpManager);
mNotificationPanelViewController.setBar(mPanelBar); mNotificationPanelViewController.setBar(mPanelBar);
ArgumentCaptor<View.AccessibilityDelegate> accessibilityDelegateArgumentCaptor =
ArgumentCaptor.forClass(View.AccessibilityDelegate.class);
verify(mView)
.setAccessibilityDelegate(accessibilityDelegateArgumentCaptor.capture());
mAccessibiltyDelegate = accessibilityDelegateArgumentCaptor.getValue();
} }
@Test @Test
@@ -305,6 +318,39 @@ public class NotificationPanelViewTest extends SysuiTestCase {
verify(mKeyguardStatusBar, never()).setVisibility(View.VISIBLE); 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) { private void onTouchEvent(MotionEvent ev) {
mTouchHandler.onTouch(mView, ev); mTouchHandler.onTouch(mView, ev);
} }