diff --git a/packages/ExtServices/src/android/ext/services/notification/Assistant.java b/packages/ExtServices/src/android/ext/services/notification/Assistant.java index ce58d4ea84aa0..fe931fff1fde8 100644 --- a/packages/ExtServices/src/android/ext/services/notification/Assistant.java +++ b/packages/ExtServices/src/android/ext/services/notification/Assistant.java @@ -215,9 +215,9 @@ public class Assistant extends NotificationAssistantService { return null; } NotificationEntry entry = new NotificationEntry(mPackageManager, sbn, channel); - ArrayList actions = mSmartActionsHelper.suggestActions(entry); - ArrayList replies = mSmartActionsHelper.suggestReplies(entry); - return createEnqueuedNotificationAdjustment(entry, actions, replies); + SmartActionsHelper.SmartSuggestions suggestions = mSmartActionsHelper.suggest(entry); + return createEnqueuedNotificationAdjustment( + entry, suggestions.actions, suggestions.replies); } /** A convenience helper for creating an adjustment for an SBN. */ diff --git a/packages/ExtServices/src/android/ext/services/notification/SmartActionsHelper.java b/packages/ExtServices/src/android/ext/services/notification/SmartActionsHelper.java index 5acf4fbaa5cbe..48a3974e913be 100644 --- a/packages/ExtServices/src/android/ext/services/notification/SmartActionsHelper.java +++ b/packages/ExtServices/src/android/ext/services/notification/SmartActionsHelper.java @@ -92,6 +92,23 @@ public class SmartActionsHelper { mSettings = settings; } + @NonNull + SmartSuggestions suggest(@NonNull NotificationEntry entry) { + // Whenever suggest() is called on a notification, its previous session is ended. + mNotificationKeyToResultIdCache.remove(entry.getSbn().getKey()); + + ArrayList actions = suggestActions(entry); + ArrayList replies = suggestReplies(entry); + + // Not logging subsequent events of this notification if we didn't generate any suggestion + // for it. + if (replies.isEmpty() && actions.isEmpty()) { + mNotificationKeyToResultIdCache.remove(entry.getSbn().getKey()); + } + + return new SmartSuggestions(replies, actions); + } + /** * Adds action adjustments based on the notification contents. */ @@ -115,6 +132,7 @@ public class SmartActionsHelper { messages.get(messages.size() - 1).getText(), MAX_SMART_ACTIONS); } + @NonNull ArrayList suggestReplies(@NonNull NotificationEntry entry) { if (!mSettings.mGenerateReplies) { return EMPTY_REPLY_LIST; @@ -146,7 +164,7 @@ public class SmartActionsHelper { .collect(Collectors.toCollection(ArrayList::new)); String resultId = conversationActionsResult.getId(); - if (resultId != null && !replies.isEmpty()) { + if (resultId != null) { mNotificationKeyToResultIdCache.put(entry.getSbn().getKey(), resultId); } return replies; @@ -385,4 +403,15 @@ public class SmartActionsHelper { } return actions; } + + static class SmartSuggestions { + public final ArrayList replies; + public final ArrayList actions; + + SmartSuggestions( + ArrayList replies, ArrayList actions) { + this.replies = replies; + this.actions = actions; + } + } }