Fix NPEs in SmartRepliesAndActionsInflater flows
Fixes: 170366658 Test: atest PlatformScenarioTests:android.platform.test.scenario.sysui.notification.NotificationContent#notificationContentTest -- --abi arm64-v8a Change-Id: Ic04ce708f07e19fda271c1c8bd816ffc2333b3c9
This commit is contained in:
@@ -329,11 +329,11 @@ public final class NotificationEntry extends ListEntry {
|
||||
return mRanking.canBubble();
|
||||
}
|
||||
|
||||
public @NonNull List<Notification.Action> getSmartActions() {
|
||||
public @Nullable List<Notification.Action> getSmartActions() {
|
||||
return mRanking.getSmartActions();
|
||||
}
|
||||
|
||||
public @NonNull List<CharSequence> getSmartReplies() {
|
||||
public @Nullable List<CharSequence> getSmartReplies() {
|
||||
return mRanking.getSmartReplies();
|
||||
}
|
||||
|
||||
|
||||
@@ -86,7 +86,7 @@ interface SmartRepliesAndActionsInflater {
|
||||
sysuiContext: Context,
|
||||
notifPackageContext: Context,
|
||||
entry: NotificationEntry,
|
||||
existingRepliesAndAction: SmartRepliesAndActions
|
||||
existingRepliesAndAction: SmartRepliesAndActions?
|
||||
): InflatedSmartReplies
|
||||
}
|
||||
|
||||
@@ -103,7 +103,7 @@ interface SmartRepliesAndActionsInflater {
|
||||
sysuiContext: Context,
|
||||
notifPackageContext: Context,
|
||||
entry: NotificationEntry,
|
||||
existingRepliesAndAction: SmartRepliesAndActions
|
||||
existingRepliesAndAction: SmartRepliesAndActions?
|
||||
): InflatedSmartReplies {
|
||||
val newRepliesAndActions = chooseSmartRepliesAndActions(entry)
|
||||
if (!shouldShowSmartReplyView(entry, newRepliesAndActions)) {
|
||||
@@ -204,27 +204,32 @@ interface SmartRepliesAndActionsInflater {
|
||||
}
|
||||
// Apps didn't provide any smart replies / actions, use those from NAS (if any).
|
||||
if (smartReplies == null && smartActions == null) {
|
||||
if (entry.smartReplies.isNotEmpty()
|
||||
&& freeformRemoteInputActionPair != null
|
||||
&& freeformRemoteInputActionPair.second.allowGeneratedReplies
|
||||
&& freeformRemoteInputActionPair.second.actionIntent != null) {
|
||||
smartReplies = SmartReplies(
|
||||
entry.smartReplies,
|
||||
freeformRemoteInputActionPair.first,
|
||||
freeformRemoteInputActionPair.second.actionIntent,
|
||||
true /* fromAssistant */)
|
||||
}
|
||||
if (entry.smartActions.isNotEmpty()
|
||||
&& notification.allowSystemGeneratedContextualActions) {
|
||||
val systemGeneratedActions: List<Notification.Action> = 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(entry.smartActions)
|
||||
else -> entry.smartActions
|
||||
}
|
||||
smartActions = SmartActions(systemGeneratedActions, true /* fromAssistant */)
|
||||
}
|
||||
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<Notification.Action> = 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 */)
|
||||
}
|
||||
}
|
||||
return SmartRepliesAndActions(smartReplies, smartActions)
|
||||
}
|
||||
|
||||
@@ -183,8 +183,7 @@ public class InflatedSmartRepliesTest extends SysuiTestCase {
|
||||
SmartRepliesAndActions repliesAndActions =
|
||||
mSmartRepliesInflater.chooseSmartRepliesAndActions(mEntry);
|
||||
|
||||
assertThat(repliesAndActions.smartReplies.choices).isEqualTo(
|
||||
mEntry.getSmartReplies());
|
||||
assertThat(repliesAndActions.smartReplies.choices).isEqualTo(mEntry.getSmartReplies());
|
||||
assertThat(repliesAndActions.smartReplies.fromAssistant).isTrue();
|
||||
assertThat(repliesAndActions.smartActions).isNull();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user