Merge "A11y Scroll Forward/Up Now Unlock or Show Bouncer" into rvc-dev am: b5e095733c
Change-Id: Ida4022cceb2db3aa9ff16e2747269e63f65fc6ab
This commit is contained in:
@@ -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
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user