Make Notification long clickable

Our ENR View is not marked long-clickable in terms of accessibility( see b/264948201 ).

It does not mean that the view is not long clickable. Currently ENR handles long click from both interaction and accessibility perspective. It is always on in terms of accessibility. However, it is not marked as long-clickable.

This PR marks AccessibilityNode info long clickable in terms of accessibility according to Notification State(Notification View, GUT and LeaveBehind). Address the NotificationSnooze integration test to verify this change.

Test: atest PlatformScenarioTests:android.platform.test.scenario.sysui.notification.NotificationSnooze
Bug: b/264948201
Change-Id: I713f103149c53d694193aaeef5dc309efe3f322e
This commit is contained in:
Ibrahim Yilmaz
2023-01-19 19:07:30 +00:00
parent 35a96232ca
commit df8a24d966
2 changed files with 29 additions and 2 deletions

View File

@@ -1196,6 +1196,22 @@ public class ExpandableNotificationRow extends ActivatableNotificationView
return getShowingLayout().getVisibleWrapper();
}
/**
* @return whether the notification row is long clickable or not.
*/
public boolean isNotificationRowLongClickable() {
if (mLongPressListener == null) {
return false;
}
if (!areGutsExposed()) { // guts is not opened
return true;
}
// if it is leave behind, it shouldn't be long clickable.
return !isGutsLeaveBehind();
}
public void setLongPressListener(LongPressListener longPressListener) {
mLongPressListener = longPressListener;
}
@@ -2947,6 +2963,10 @@ public class ExpandableNotificationRow extends ActivatableNotificationView
return (mGuts != null && mGuts.isExposed());
}
private boolean isGutsLeaveBehind() {
return (mGuts != null && mGuts.isLeavebehind());
}
@Override
public boolean isContentExpandable() {
if (mIsSummaryWithChildren && !shouldShowPublic()) {
@@ -3394,7 +3414,12 @@ public class ExpandableNotificationRow extends ActivatableNotificationView
@Override
public void onInitializeAccessibilityNodeInfoInternal(AccessibilityNodeInfo info) {
super.onInitializeAccessibilityNodeInfoInternal(info);
info.addAction(AccessibilityNodeInfo.AccessibilityAction.ACTION_LONG_CLICK);
final boolean isLongClickable = isNotificationRowLongClickable();
if (isLongClickable) {
info.addAction(AccessibilityNodeInfo.AccessibilityAction.ACTION_LONG_CLICK);
}
info.setLongClickable(isLongClickable);
if (canViewBeDismissed() && !mIsSnoozed) {
info.addAction(AccessibilityNodeInfo.AccessibilityAction.ACTION_DISMISS);
}

View File

@@ -586,7 +586,9 @@ public class NotificationGutsManager implements NotifGutsViewManager {
}
final ExpandableNotificationRow row = (ExpandableNotificationRow) view;
view.performHapticFeedback(HapticFeedbackConstants.LONG_PRESS);
if (row.isNotificationRowLongClickable()) {
view.performHapticFeedback(HapticFeedbackConstants.LONG_PRESS);
}
if (row.areGutsExposed()) {
closeAndSaveGuts(false /* removeLeavebehind */, false /* force */,
true /* removeControls */, -1 /* x */, -1 /* y */,