From 467b8196aad3846b6583d7ea5138d705f56570e4 Mon Sep 17 00:00:00 2001 From: Steve Elliott Date: Fri, 9 Oct 2020 11:56:18 -0400 Subject: [PATCH] Fix Ranking#getSmartReplies/Actions methods to actually be @NonNull Test: atest, manual Change-Id: I4d4305127c4f0f041c7e9a0d8b50faf5d295ceeb --- .../NotificationListenerService.java | 5 +- .../collection/NotificationEntry.java | 4 +- .../policy/SmartRepliesAndActionsInflater.kt | 49 +++++++++---------- .../NotificationEntryManagerTest.java | 4 +- 4 files changed, 31 insertions(+), 31 deletions(-) diff --git a/core/java/android/service/notification/NotificationListenerService.java b/core/java/android/service/notification/NotificationListenerService.java index 5d34c476a4a64..ebd114a43dde6 100644 --- a/core/java/android/service/notification/NotificationListenerService.java +++ b/core/java/android/service/notification/NotificationListenerService.java @@ -64,6 +64,7 @@ import com.android.internal.os.SomeArgs; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.util.ArrayList; +import java.util.Collections; import java.util.List; import java.util.Objects; @@ -1802,7 +1803,7 @@ public abstract class NotificationListenerService extends Service { * {@link NotificationAssistantService} */ public @NonNull List getSmartActions() { - return mSmartActions; + return mSmartActions == null ? Collections.emptyList() : mSmartActions; } /** @@ -1810,7 +1811,7 @@ public abstract class NotificationListenerService extends Service { * {@link NotificationAssistantService} */ public @NonNull List getSmartReplies() { - return mSmartReplies; + return mSmartReplies == null ? Collections.emptyList() : mSmartReplies; } /** diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/NotificationEntry.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/NotificationEntry.java index 0e7a558f0ab4a..789e78e336718 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/NotificationEntry.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/NotificationEntry.java @@ -329,11 +329,11 @@ public final class NotificationEntry extends ListEntry { return mRanking.canBubble(); } - public @Nullable List getSmartActions() { + public @NonNull List getSmartActions() { return mRanking.getSmartActions(); } - public @Nullable List getSmartReplies() { + public @NonNull List getSmartReplies() { return mRanking.getSmartReplies(); } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/SmartRepliesAndActionsInflater.kt b/packages/SystemUI/src/com/android/systemui/statusbar/policy/SmartRepliesAndActionsInflater.kt index 5ec57e2f02f39..6a3a69c0419ec 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/SmartRepliesAndActionsInflater.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/SmartRepliesAndActionsInflater.kt @@ -204,32 +204,29 @@ interface SmartRepliesAndActionsInflater { } // Apps didn't provide any smart replies / actions, use those from NAS (if any). if (smartReplies == null && smartActions == null) { - smartReplies = entry.smartReplies - ?.takeIf { it.isNotEmpty() } - ?.let { entryReplies -> freeformRemoteInputActionPair - ?.takeIf { - it.second.allowGeneratedReplies && it.second.actionIntent != null - }?.let { freeformPair -> SmartReplies( - entryReplies, - freeformPair.first, - freeformPair.second.actionIntent, - true /* fromAssistant */) - } - } - smartActions = entry.smartActions - ?.takeIf { - it.isNotEmpty() && notification.allowSystemGeneratedContextualActions - }?.let { entryActions -> - val systemGeneratedActions: List = when { - activityManagerWrapper.isLockTaskKioskModeActive -> - // Filter actions if we're in kiosk-mode - we don't care about - // screen pinning mode, since notifications aren't shown there - // anyway. - filterAllowlistedLockTaskApps(entryActions) - else -> entryActions - } - SmartActions(systemGeneratedActions, true /* fromAssistant */) - } + val entryReplies = entry.smartReplies + val entryActions = entry.smartActions + if (entryReplies.isNotEmpty() + && freeformRemoteInputActionPair != null + && freeformRemoteInputActionPair.second.allowGeneratedReplies + && freeformRemoteInputActionPair.second.actionIntent != null) { + smartReplies = SmartReplies( + entryReplies, + freeformRemoteInputActionPair.first, + freeformRemoteInputActionPair.second.actionIntent, + true /* fromAssistant */) + } + if (entryActions.isNotEmpty() + && notification.allowSystemGeneratedContextualActions) { + val systemGeneratedActions: List = when { + activityManagerWrapper.isLockTaskKioskModeActive -> + // Filter actions if we're in kiosk-mode - we don't care about screen + // pinning mode, since notifications aren't shown there anyway. + filterAllowlistedLockTaskApps(entryActions) + else -> entryActions + } + smartActions = SmartActions(systemGeneratedActions, true /* fromAssistant */) + } } return SmartRepliesAndActions(smartReplies, smartActions) } diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/NotificationEntryManagerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/NotificationEntryManagerTest.java index 3e1616c9fa7bc..d04d8ee76b99a 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/NotificationEntryManagerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/NotificationEntryManagerTest.java @@ -21,6 +21,8 @@ import static android.service.notification.NotificationListenerService.REASON_CA import static com.android.systemui.statusbar.notification.NotificationEntryManager.UNDEFINED_DISMISS_REASON; +import static com.google.common.truth.Truth.assertThat; + import static junit.framework.Assert.assertNotNull; import static junit.framework.Assert.assertNull; import static junit.framework.Assert.assertTrue; @@ -346,7 +348,7 @@ public class NotificationEntryManagerTest extends SysuiTestCase { setSmartActions(mEntry.getKey(), null); mEntryManager.updateNotificationRanking(mRankingMap); - assertNull(mEntry.getSmartActions()); + assertThat(mEntry.getSmartActions()).isEmpty(); } @Test