Removes Lifetime extension on Action Click
Removes the FLAG_LIFETIME_EXTENDED_BY_DIRECT_REPLY when an action click
occurs. This allows a notification to be cancelled by an app after a
user clicks on one of the actions, even if it has previously been
lifetime extended.
Bug: 230652175
Test: atest NotificationManagerServiceTest
Change-Id: I198424998b64d09097b92aaf56556bd06e2a9c5d
diff --git a/services/core/java/com/android/server/notification/NotificationManagerService.java b/services/core/java/com/android/server/notification/NotificationManagerService.java
index 7dbe880..629b254 100755
--- a/services/core/java/com/android/server/notification/NotificationManagerService.java
+++ b/services/core/java/com/android/server/notification/NotificationManagerService.java
@@ -1340,6 +1340,10 @@
nv.recycle();
reportUserInteraction(r);
mAssistants.notifyAssistantActionClicked(r, action, generatedByAssistant);
+ // Notifications that have been interacted with don't need to be lifetime extended.
+ if (lifetimeExtensionRefactor()) {
+ r.getSbn().getNotification().flags &= ~FLAG_LIFETIME_EXTENDED_BY_DIRECT_REPLY;
+ }
}
}
diff --git a/services/tests/uiservicestests/src/com/android/server/notification/NotificationManagerServiceTest.java b/services/tests/uiservicestests/src/com/android/server/notification/NotificationManagerServiceTest.java
index 77be01c..068339b 100755
--- a/services/tests/uiservicestests/src/com/android/server/notification/NotificationManagerServiceTest.java
+++ b/services/tests/uiservicestests/src/com/android/server/notification/NotificationManagerServiceTest.java
@@ -8410,6 +8410,27 @@
}
@Test
+ public void testOnNotificationActionClickLifetimeExtendedEnds() {
+ mSetFlagsRule.enableFlags(android.app.Flags.FLAG_LIFETIME_EXTENSION_REFACTOR);
+ final Notification.Action action =
+ new Notification.Action.Builder(null, "text", PendingIntent.getActivity(
+ mContext, 0, new Intent(), PendingIntent.FLAG_IMMUTABLE)).build();
+ // Creates a notification marked as being lifetime extended.
+ NotificationRecord r = generateNotificationRecord(mTestNotificationChannel);
+ r.getSbn().getNotification().flags |= FLAG_LIFETIME_EXTENDED_BY_DIRECT_REPLY;
+ mService.addNotification(r);
+ // Call on action click.
+ NotificationVisibility notificationVisibility =
+ NotificationVisibility.obtain(r.getKey(), 1, 2, true);
+ mService.mNotificationDelegate.onNotificationActionClick(
+ 10, 10, r.getKey(), /*actionIndex=*/2, action, notificationVisibility,
+ /*generatedByAssistant=*/false);
+ // The flag is removed, so the notification is no longer lifetime extended.
+ assertThat(r.getSbn().getNotification().flags
+ & FLAG_LIFETIME_EXTENDED_BY_DIRECT_REPLY).isEqualTo(0);
+ }
+
+ @Test
public void testOnAssistantNotificationActionClick() {
final int actionIndex = 1;
final Notification.Action action =