diff options
| author | 2019-09-13 12:00:50 +0100 | |
|---|---|---|
| committer | 2019-09-18 08:07:52 +0000 | |
| commit | dfa968d4025330986d5161484f705deb67a4613a (patch) | |
| tree | 822e9fae5afe865f0372bf52cdcd8a938286db13 | |
| parent | 8c0b496c9716eb34cc09dbdd3b7e66e9e0181e10 (diff) | |
SSIN: Use the application's context to load icon resources.
SSIN = Smart Suggestions in Notifications.
When posting a notification with contextual/smart actions app developers
supply their own icons for their actions. These icons can reference
resources from within the application package. Therefore we need to use
a Context from that package to load icon resources.
Before this CL we were using the SystemUi context which doesn't have
access to the same resources as the app context - meaning we were not
able to load the icon the app developer was providing us (unless they
provided an Icon instance rather than just a resource ID for their icon).
Bug: 137044913
Test: atest SmartReplyViewTest
Test: manual - create a notification with a
contextual action whose icon is referenced through a resource ID (not an
Icon instance). Ensure the icon is shown correctly in the notification.
Change-Id: Ia6d7b3689c46b65558437e00a947ba3cd330e4ca
4 files changed, 24 insertions, 18 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationContentInflater.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationContentInflater.java index 48a82957bf1e..a612a1721c41 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationContentInflater.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationContentInflater.java @@ -264,7 +264,7 @@ public class NotificationContentInflater { mIsChildInGroup, mUsesIncreasedHeight, mUsesIncreasedHeadsUpHeight, packageContext); result = inflateSmartReplyViews(result, reInflateFlags, mRow.getEntry(), - mRow.getContext(), mRow.getHeadsUpManager(), + mRow.getContext(), packageContext, mRow.getHeadsUpManager(), mRow.getExistingSmartRepliesAndActions()); apply( inflateSynchronously, @@ -311,20 +311,21 @@ public class NotificationContentInflater { private static InflationProgress inflateSmartReplyViews(InflationProgress result, @InflationFlag int reInflateFlags, NotificationEntry entry, Context context, - HeadsUpManager headsUpManager, SmartRepliesAndActions previousSmartRepliesAndActions) { + Context packageContext, HeadsUpManager headsUpManager, + SmartRepliesAndActions previousSmartRepliesAndActions) { SmartReplyConstants smartReplyConstants = Dependency.get(SmartReplyConstants.class); SmartReplyController smartReplyController = Dependency.get(SmartReplyController.class); if ((reInflateFlags & FLAG_CONTENT_VIEW_EXPANDED) != 0 && result.newExpandedView != null) { result.expandedInflatedSmartReplies = InflatedSmartReplies.inflate( - context, entry, smartReplyConstants, smartReplyController, - headsUpManager, previousSmartRepliesAndActions); + context, packageContext, entry, smartReplyConstants, + smartReplyController, headsUpManager, previousSmartRepliesAndActions); } if ((reInflateFlags & FLAG_CONTENT_VIEW_HEADS_UP) != 0 && result.newHeadsUpView != null) { result.headsUpInflatedSmartReplies = InflatedSmartReplies.inflate( - context, entry, smartReplyConstants, smartReplyController, - headsUpManager, previousSmartRepliesAndActions); + context, packageContext, entry, smartReplyConstants, + smartReplyController, headsUpManager, previousSmartRepliesAndActions); } return result; } @@ -817,7 +818,7 @@ public class NotificationContentInflater { recoveredBuilder, mIsLowPriority, mIsChildInGroup, mUsesIncreasedHeight, mUsesIncreasedHeadsUpHeight, packageContext); return inflateSmartReplyViews(inflationProgress, mReInflateFlags, mRow.getEntry(), - mRow.getContext(), mRow.getHeadsUpManager(), + mRow.getContext(), packageContext, mRow.getHeadsUpManager(), mRow.getExistingSmartRepliesAndActions()); } catch (Exception e) { mError = e; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/InflatedSmartReplies.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/InflatedSmartReplies.java index ee78a723a49c..ea93193ca728 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/InflatedSmartReplies.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/InflatedSmartReplies.java @@ -80,6 +80,7 @@ public class InflatedSmartReplies { */ public static InflatedSmartReplies inflate( Context context, + Context packageContext, NotificationEntry entry, SmartReplyConstants smartReplyConstants, SmartReplyController smartReplyController, @@ -108,9 +109,9 @@ public class InflatedSmartReplies { } if (newSmartRepliesAndActions.smartActions != null) { suggestionButtons.addAll( - smartReplyView.inflateSmartActions(newSmartRepliesAndActions.smartActions, - smartReplyController, entry, headsUpManager, - delayOnClickListener)); + smartReplyView.inflateSmartActions(packageContext, + newSmartRepliesAndActions.smartActions, smartReplyController, entry, + headsUpManager, delayOnClickListener)); } return new InflatedSmartReplies(smartReplyView, suggestionButtons, diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/SmartReplyView.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/SmartReplyView.java index 282d28c3b20c..ed0b9d929466 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/SmartReplyView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/SmartReplyView.java @@ -235,17 +235,17 @@ public class SmartReplyView extends ViewGroup { * Add smart actions to be shown next to smart replies. Only the actions that fit into the * notification are shown. */ - public List<Button> inflateSmartActions(@NonNull SmartActions smartActions, - SmartReplyController smartReplyController, NotificationEntry entry, - HeadsUpManager headsUpManager, boolean delayOnClickListener) { + public List<Button> inflateSmartActions(Context packageContext, + @NonNull SmartActions smartActions, SmartReplyController smartReplyController, + NotificationEntry entry, HeadsUpManager headsUpManager, boolean delayOnClickListener) { List<Button> buttons = new ArrayList<>(); int numSmartActions = smartActions.actions.size(); for (int n = 0; n < numSmartActions; n++) { Notification.Action action = smartActions.actions.get(n); if (action.actionIntent != null) { buttons.add(inflateActionButton( - this, getContext(), n, smartActions, smartReplyController, entry, - headsUpManager, delayOnClickListener)); + this, getContext(), packageContext, n, smartActions, smartReplyController, + entry, headsUpManager, delayOnClickListener)); } } return buttons; @@ -327,7 +327,7 @@ public class SmartReplyView extends ViewGroup { @VisibleForTesting static Button inflateActionButton(SmartReplyView smartReplyView, Context context, - int actionIndex, SmartActions smartActions, + Context packageContext, int actionIndex, SmartActions smartActions, SmartReplyController smartReplyController, NotificationEntry entry, HeadsUpManager headsUpManager, boolean useDelayedOnClickListener) { Notification.Action action = smartActions.actions.get(actionIndex); @@ -335,7 +335,9 @@ public class SmartReplyView extends ViewGroup { R.layout.smart_action_button, smartReplyView, false); button.setText(action.title); - Drawable iconDrawable = action.getIcon().loadDrawable(context); + // We received the Icon from the application - so use the Context of the application to + // reference icon resources. + Drawable iconDrawable = action.getIcon().loadDrawable(packageContext); // Add the action icon to the Smart Action button. int newIconSize = context.getResources().getDimensionPixelSize( R.dimen.smart_action_button_icon_size); diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/SmartReplyViewTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/SmartReplyViewTest.java index 0cb575483466..6be708177e89 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/SmartReplyViewTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/SmartReplyViewTest.java @@ -494,6 +494,7 @@ public class SmartReplyViewTest extends SysuiTestCase { private void setSmartActions(String[] actionTitles, boolean useDelayedOnClickListener) { mView.resetSmartSuggestions(mContainer); List<Button> actions = mView.inflateSmartActions( + getContext(), new SmartReplyView.SmartActions(createActions(actionTitles), false), mLogger, mEntry, @@ -514,6 +515,7 @@ public class SmartReplyViewTest extends SysuiTestCase { List<Button> smartSuggestions = inflateSmartReplies(choices, fromAssistant, useDelayedOnClickListener); smartSuggestions.addAll(mView.inflateSmartActions( + getContext(), new SmartReplyView.SmartActions(createActions(actionTitles), fromAssistant), mLogger, mEntry, @@ -860,7 +862,7 @@ public class SmartReplyViewTest extends SysuiTestCase { } private Button inflateActionButton(Notification.Action action) { - return SmartReplyView.inflateActionButton(mView, getContext(), 0, + return SmartReplyView.inflateActionButton(mView, getContext(), getContext(), 0, new SmartReplyView.SmartActions(Collections.singletonList(action), false), mLogger, mEntry, mHeadsUpManager, true /* useDelayedOnClickListener */); } |