diff options
2 files changed, 28 insertions, 1 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ExpandableNotificationRow.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ExpandableNotificationRow.java index 9275e2b603c3..a6b71dc3e54d 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ExpandableNotificationRow.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ExpandableNotificationRow.java @@ -591,6 +591,7 @@ public class ExpandableNotificationRow extends ActivatableNotificationView } mShowingPublicInitialized = false; updateNotificationColor(); + updateLongClickable(); if (mMenuRow != null) { mMenuRow.onNotificationUpdated(mEntry.getSbn()); mMenuRow.setAppName(mAppName); @@ -1196,8 +1197,26 @@ public class ExpandableNotificationRow extends ActivatableNotificationView return getShowingLayout().getVisibleWrapper(); } + private 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(); + } + + private void updateLongClickable() { + setLongClickable(isNotificationRowLongClickable()); + } + public void setLongPressListener(LongPressListener longPressListener) { mLongPressListener = longPressListener; + updateLongClickable(); } public void setDragController(ExpandableNotificationRowDragController dragController) { @@ -2044,11 +2063,13 @@ public class ExpandableNotificationRow extends ActivatableNotificationView void onGutsOpened() { resetTranslation(); updateContentAccessibilityImportanceForGuts(false /* isEnabled */); + updateLongClickable(); } void onGutsClosed() { updateContentAccessibilityImportanceForGuts(true /* isEnabled */); mIsSnoozed = false; + updateLongClickable(); } /** @@ -2947,6 +2968,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()) { diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationGutsManager.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationGutsManager.java index 37ff11db81e3..efcbb3cd9655 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationGutsManager.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationGutsManager.java @@ -586,7 +586,9 @@ public class NotificationGutsManager implements NotifGutsViewManager { } final ExpandableNotificationRow row = (ExpandableNotificationRow) view; - view.performHapticFeedback(HapticFeedbackConstants.LONG_PRESS); + if (view.isLongClickable()) { + view.performHapticFeedback(HapticFeedbackConstants.LONG_PRESS); + } if (row.areGutsExposed()) { closeAndSaveGuts(false /* removeLeavebehind */, false /* force */, true /* removeControls */, -1 /* x */, -1 /* y */, |