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 */,  |