1 /*
2  * Copyright (C) 2021 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 package android.app.smartspace;
17 
18 import android.annotation.CurrentTimeMillisLong;
19 import android.annotation.IntDef;
20 import android.annotation.NonNull;
21 import android.annotation.Nullable;
22 import android.annotation.SystemApi;
23 import android.appwidget.AppWidgetProviderInfo;
24 import android.content.ComponentName;
25 import android.net.Uri;
26 import android.os.Parcel;
27 import android.os.Parcelable;
28 import android.os.UserHandle;
29 
30 import java.lang.annotation.Retention;
31 import java.lang.annotation.RetentionPolicy;
32 import java.util.ArrayList;
33 import java.util.List;
34 import java.util.Objects;
35 
36 /**
37  * A {@link SmartspaceTarget} is a data class which holds all properties necessary to inflate a
38  * smartspace card. It contains data and related metadata which is supposed to be utilized by
39  * smartspace clients based on their own UI/UX requirements. Some of the properties have
40  * {@link SmartspaceAction} as their type because they can have associated actions.
41  *
42  * <p><b>NOTE: </b>
43  * If {@link mWidget} is set, it should be preferred over all other properties.
44  * Else, if {@link mSliceUri} is set, it should be preferred over all other data properties.
45  * Otherwise, the instance should be treated as a data object.
46  *
47  * @hide
48  */
49 @SystemApi
50 public final class SmartspaceTarget implements Parcelable {
51 
52     /** A unique Id for an instance of {@link SmartspaceTarget}. */
53     @NonNull
54     private final String mSmartspaceTargetId;
55 
56     /** A {@link SmartspaceAction} for the header in the Smartspace card. */
57     @Nullable
58     private final SmartspaceAction mHeaderAction;
59 
60     /** A {@link SmartspaceAction} for the base action in the Smartspace card. */
61     @Nullable
62     private final SmartspaceAction mBaseAction;
63 
64     /** A timestamp indicating when the card was created. */
65     @CurrentTimeMillisLong
66     private final long mCreationTimeMillis;
67 
68     /**
69      * A timestamp indicating when the card should be removed from view, in case the service
70      * disconnects or restarts.
71      */
72     @CurrentTimeMillisLong
73     private final long mExpiryTimeMillis;
74 
75     /** A score assigned to a target. */
76     private final float mScore;
77 
78     /** A {@link List<SmartspaceAction>} containing all action chips. */
79     @NonNull
80     private final List<SmartspaceAction> mActionChips;
81 
82     /** A {@link List<SmartspaceAction>} containing all icons for the grid. */
83     @NonNull
84     private final List<SmartspaceAction> mIconGrid;
85 
86     /**
87      * {@link FeatureType} indicating the feature type of this card.
88      *
89      * @see FeatureType
90      */
91     @FeatureType
92     private final int mFeatureType;
93 
94     /**
95      * Indicates whether the content is sensitive. Certain UI surfaces may choose to skip rendering
96      * real content until the device is unlocked.
97      */
98     private final boolean mSensitive;
99 
100     /** Indicating if the UI should show this target in its expanded state. */
101     private final boolean mShouldShowExpanded;
102 
103     /** A Notification key if the target was generated using a notification. */
104     @Nullable
105     private final String mSourceNotificationKey;
106 
107     /** {@link ComponentName} for this target. */
108     @NonNull
109     private final ComponentName mComponentName;
110 
111     /** {@link UserHandle} for this target. */
112     @NonNull
113     private final UserHandle mUserHandle;
114 
115     /**
116      * Target Id of other {@link SmartspaceTarget}s if it is associated with this target. This
117      * association is added to tell the UI that a card would be more useful if displayed with the
118      * associated smartspace target. This field is supposed to be taken as a suggestion and the
119      * association can be ignored based on the situation in the UI. It is possible to have a one way
120      * card association. In other words, Card B can be associated with Card A but not the other way
121      * around.
122      */
123     @Nullable
124     private final String mAssociatedSmartspaceTargetId;
125 
126     /** {@link Uri} Slice Uri if this target is a slice. */
127     @Nullable
128     private final Uri mSliceUri;
129 
130     /** {@link AppWidgetProviderInfo} if this target is a widget. */
131     @Nullable
132     private final AppWidgetProviderInfo mWidget;
133 
134     public static final int FEATURE_UNDEFINED = 0;
135     public static final int FEATURE_WEATHER = 1;
136     public static final int FEATURE_CALENDAR = 2;
137     public static final int FEATURE_COMMUTE_TIME = 3;
138     public static final int FEATURE_FLIGHT = 4;
139     public static final int FEATURE_TIPS = 5;
140     public static final int FEATURE_REMINDER = 6;
141     public static final int FEATURE_ALARM = 7;
142     public static final int FEATURE_ONBOARDING = 8;
143     public static final int FEATURE_SPORTS = 9;
144     public static final int FEATURE_WEATHER_ALERT = 10;
145     public static final int FEATURE_CONSENT = 11;
146     public static final int FEATURE_STOCK_PRICE_CHANGE = 12;
147     public static final int FEATURE_SHOPPING_LIST = 13;
148     public static final int FEATURE_LOYALTY_CARD = 14;
149     public static final int FEATURE_MEDIA = 15;
150     public static final int FEATURE_BEDTIME_ROUTINE = 16;
151     public static final int FEATURE_FITNESS_TRACKING = 17;
152     public static final int FEATURE_ETA_MONITORING = 18;
153     public static final int FEATURE_MISSED_CALL = 19;
154     public static final int FEATURE_PACKAGE_TRACKING = 20;
155     public static final int FEATURE_TIMER = 21;
156     public static final int FEATURE_STOPWATCH = 22;
157     public static final int FEATURE_UPCOMING_ALARM = 23;
158 
159     /**
160      * @hide
161      */
162     @IntDef(prefix = {"FEATURE_"}, value = {
163             FEATURE_UNDEFINED,
164             FEATURE_WEATHER,
165             FEATURE_CALENDAR,
166             FEATURE_COMMUTE_TIME,
167             FEATURE_FLIGHT,
168             FEATURE_TIPS,
169             FEATURE_REMINDER,
170             FEATURE_ALARM,
171             FEATURE_ONBOARDING,
172             FEATURE_SPORTS,
173             FEATURE_WEATHER_ALERT,
174             FEATURE_CONSENT,
175             FEATURE_STOCK_PRICE_CHANGE,
176             FEATURE_SHOPPING_LIST,
177             FEATURE_LOYALTY_CARD,
178             FEATURE_MEDIA,
179             FEATURE_BEDTIME_ROUTINE,
180             FEATURE_FITNESS_TRACKING,
181             FEATURE_ETA_MONITORING,
182             FEATURE_MISSED_CALL,
183             FEATURE_PACKAGE_TRACKING,
184             FEATURE_TIMER,
185             FEATURE_STOPWATCH,
186             FEATURE_UPCOMING_ALARM
187     })
188     @Retention(RetentionPolicy.SOURCE)
189     public @interface FeatureType {
190     }
191 
SmartspaceTarget(Parcel in)192     private SmartspaceTarget(Parcel in) {
193         this.mSmartspaceTargetId = in.readString();
194         this.mHeaderAction = in.readTypedObject(SmartspaceAction.CREATOR);
195         this.mBaseAction = in.readTypedObject(SmartspaceAction.CREATOR);
196         this.mCreationTimeMillis = in.readLong();
197         this.mExpiryTimeMillis = in.readLong();
198         this.mScore = in.readFloat();
199         this.mActionChips = in.createTypedArrayList(SmartspaceAction.CREATOR);
200         this.mIconGrid = in.createTypedArrayList(SmartspaceAction.CREATOR);
201         this.mFeatureType = in.readInt();
202         this.mSensitive = in.readBoolean();
203         this.mShouldShowExpanded = in.readBoolean();
204         this.mSourceNotificationKey = in.readString();
205         this.mComponentName = in.readTypedObject(ComponentName.CREATOR);
206         this.mUserHandle = in.readTypedObject(UserHandle.CREATOR);
207         this.mAssociatedSmartspaceTargetId = in.readString();
208         this.mSliceUri = in.readTypedObject(Uri.CREATOR);
209         this.mWidget = in.readTypedObject(AppWidgetProviderInfo.CREATOR);
210     }
211 
SmartspaceTarget(String smartspaceTargetId, SmartspaceAction headerAction, SmartspaceAction baseAction, long creationTimeMillis, long expiryTimeMillis, float score, List<SmartspaceAction> actionChips, List<SmartspaceAction> iconGrid, int featureType, boolean sensitive, boolean shouldShowExpanded, String sourceNotificationKey, ComponentName componentName, UserHandle userHandle, String associatedSmartspaceTargetId, Uri sliceUri, AppWidgetProviderInfo widget)212     private SmartspaceTarget(String smartspaceTargetId,
213             SmartspaceAction headerAction, SmartspaceAction baseAction, long creationTimeMillis,
214             long expiryTimeMillis, float score,
215             List<SmartspaceAction> actionChips,
216             List<SmartspaceAction> iconGrid, int featureType, boolean sensitive,
217             boolean shouldShowExpanded, String sourceNotificationKey,
218             ComponentName componentName, UserHandle userHandle,
219             String associatedSmartspaceTargetId, Uri sliceUri,
220             AppWidgetProviderInfo widget) {
221         mSmartspaceTargetId = smartspaceTargetId;
222         mHeaderAction = headerAction;
223         mBaseAction = baseAction;
224         mCreationTimeMillis = creationTimeMillis;
225         mExpiryTimeMillis = expiryTimeMillis;
226         mScore = score;
227         mActionChips = actionChips;
228         mIconGrid = iconGrid;
229         mFeatureType = featureType;
230         mSensitive = sensitive;
231         mShouldShowExpanded = shouldShowExpanded;
232         mSourceNotificationKey = sourceNotificationKey;
233         mComponentName = componentName;
234         mUserHandle = userHandle;
235         mAssociatedSmartspaceTargetId = associatedSmartspaceTargetId;
236         mSliceUri = sliceUri;
237         mWidget = widget;
238     }
239 
240     /**
241      * Returns the Id of the target.
242      */
243     @NonNull
getSmartspaceTargetId()244     public String getSmartspaceTargetId() {
245         return mSmartspaceTargetId;
246     }
247 
248     /**
249      * Returns the header action of the target.
250      */
251     @Nullable
getHeaderAction()252     public SmartspaceAction getHeaderAction() {
253         return mHeaderAction;
254     }
255 
256     /**
257      * Returns the base action of the target.
258      */
259     @Nullable
getBaseAction()260     public SmartspaceAction getBaseAction() {
261         return mBaseAction;
262     }
263 
264     /**
265      * Returns the creation time of the target.
266      */
267     @CurrentTimeMillisLong
getCreationTimeMillis()268     public long getCreationTimeMillis() {
269         return mCreationTimeMillis;
270     }
271 
272     /**
273      * Returns the expiry time of the target.
274      */
275     @CurrentTimeMillisLong
getExpiryTimeMillis()276     public long getExpiryTimeMillis() {
277         return mExpiryTimeMillis;
278     }
279 
280     /**
281      * Returns the score of the target.
282      */
getScore()283     public float getScore() {
284         return mScore;
285     }
286 
287     /**
288      * Return the action chips of the target.
289      */
290     @NonNull
getActionChips()291     public List<SmartspaceAction> getActionChips() {
292         return mActionChips;
293     }
294 
295     /**
296      * Return the icons of the target.
297      */
298     @NonNull
getIconGrid()299     public List<SmartspaceAction> getIconGrid() {
300         return mIconGrid;
301     }
302 
303     /**
304      * Returns the feature type of the target.
305      */
306     @FeatureType
getFeatureType()307     public int getFeatureType() {
308         return mFeatureType;
309     }
310 
311     /**
312      * Returns whether the target is sensitive or not.
313      */
isSensitive()314     public boolean isSensitive() {
315         return mSensitive;
316     }
317 
318     /**
319      * Returns whether the target should be shown in expanded state.
320      */
shouldShowExpanded()321     public boolean shouldShowExpanded() {
322         return mShouldShowExpanded;
323     }
324 
325     /**
326      * Returns the source notification key of the target.
327      */
328     @Nullable
getSourceNotificationKey()329     public String getSourceNotificationKey() {
330         return mSourceNotificationKey;
331     }
332 
333     /**
334      * Returns the component name of the target.
335      */
336     @NonNull
getComponentName()337     public ComponentName getComponentName() {
338         return mComponentName;
339     }
340 
341     /**
342      * Returns the user handle of the target.
343      */
344     @NonNull
getUserHandle()345     public UserHandle getUserHandle() {
346         return mUserHandle;
347     }
348 
349     /**
350      * Returns the id of a target associated with this instance.
351      */
352     @Nullable
getAssociatedSmartspaceTargetId()353     public String getAssociatedSmartspaceTargetId() {
354         return mAssociatedSmartspaceTargetId;
355     }
356 
357     /**
358      * Returns the slice uri, if the target is a slice.
359      */
360     @Nullable
getSliceUri()361     public Uri getSliceUri() {
362         return mSliceUri;
363     }
364 
365     /**
366      * Returns the AppWidgetProviderInfo, if the target is a widget.
367      */
368     @Nullable
getWidget()369     public AppWidgetProviderInfo getWidget() {
370         return mWidget;
371     }
372 
373     /**
374      * @see Parcelable.Creator
375      */
376     @NonNull
377     public static final Creator<SmartspaceTarget> CREATOR = new Creator<SmartspaceTarget>() {
378         @Override
379         public SmartspaceTarget createFromParcel(Parcel source) {
380             return new SmartspaceTarget(source);
381         }
382 
383         @Override
384         public SmartspaceTarget[] newArray(int size) {
385             return new SmartspaceTarget[size];
386         }
387     };
388 
389     @Override
writeToParcel(@onNull Parcel dest, int flags)390     public void writeToParcel(@NonNull Parcel dest, int flags) {
391         dest.writeString(this.mSmartspaceTargetId);
392         dest.writeTypedObject(this.mHeaderAction, flags);
393         dest.writeTypedObject(this.mBaseAction, flags);
394         dest.writeLong(this.mCreationTimeMillis);
395         dest.writeLong(this.mExpiryTimeMillis);
396         dest.writeFloat(this.mScore);
397         dest.writeTypedList(this.mActionChips);
398         dest.writeTypedList(this.mIconGrid);
399         dest.writeInt(this.mFeatureType);
400         dest.writeBoolean(this.mSensitive);
401         dest.writeBoolean(this.mShouldShowExpanded);
402         dest.writeString(this.mSourceNotificationKey);
403         dest.writeTypedObject(this.mComponentName, flags);
404         dest.writeTypedObject(this.mUserHandle, flags);
405         dest.writeString(this.mAssociatedSmartspaceTargetId);
406         dest.writeTypedObject(this.mSliceUri, flags);
407         dest.writeTypedObject(this.mWidget, flags);
408     }
409 
410     @Override
describeContents()411     public int describeContents() {
412         return 0;
413     }
414 
415     @Override
toString()416     public String toString() {
417         return "SmartspaceTarget{"
418                 + "mSmartspaceTargetId='" + mSmartspaceTargetId + '\''
419                 + ", mHeaderAction=" + mHeaderAction
420                 + ", mBaseAction=" + mBaseAction
421                 + ", mCreationTimeMillis=" + mCreationTimeMillis
422                 + ", mExpiryTimeMillis=" + mExpiryTimeMillis
423                 + ", mScore=" + mScore
424                 + ", mActionChips=" + mActionChips
425                 + ", mIconGrid=" + mIconGrid
426                 + ", mFeatureType=" + mFeatureType
427                 + ", mSensitive=" + mSensitive
428                 + ", mShouldShowExpanded=" + mShouldShowExpanded
429                 + ", mSourceNotificationKey='" + mSourceNotificationKey + '\''
430                 + ", mComponentName=" + mComponentName
431                 + ", mUserHandle=" + mUserHandle
432                 + ", mAssociatedSmartspaceTargetId='" + mAssociatedSmartspaceTargetId + '\''
433                 + ", mSliceUri=" + mSliceUri
434                 + ", mWidget=" + mWidget
435                 + '}';
436     }
437 
438     @Override
equals(Object o)439     public boolean equals(Object o) {
440         if (this == o) return true;
441         if (o == null || getClass() != o.getClass()) return false;
442         SmartspaceTarget that = (SmartspaceTarget) o;
443         return mCreationTimeMillis == that.mCreationTimeMillis
444                 && mExpiryTimeMillis == that.mExpiryTimeMillis
445                 && Float.compare(that.mScore, mScore) == 0
446                 && mFeatureType == that.mFeatureType
447                 && mSensitive == that.mSensitive
448                 && mShouldShowExpanded == that.mShouldShowExpanded
449                 && mSmartspaceTargetId.equals(that.mSmartspaceTargetId)
450                 && Objects.equals(mHeaderAction, that.mHeaderAction)
451                 && Objects.equals(mBaseAction, that.mBaseAction)
452                 && Objects.equals(mActionChips, that.mActionChips)
453                 && Objects.equals(mIconGrid, that.mIconGrid)
454                 && Objects.equals(mSourceNotificationKey, that.mSourceNotificationKey)
455                 && mComponentName.equals(that.mComponentName)
456                 && mUserHandle.equals(that.mUserHandle)
457                 && Objects.equals(mAssociatedSmartspaceTargetId,
458                 that.mAssociatedSmartspaceTargetId)
459                 && Objects.equals(mSliceUri, that.mSliceUri)
460                 && Objects.equals(mWidget, that.mWidget);
461     }
462 
463     @Override
hashCode()464     public int hashCode() {
465         return Objects.hash(mSmartspaceTargetId, mHeaderAction, mBaseAction, mCreationTimeMillis,
466                 mExpiryTimeMillis, mScore, mActionChips, mIconGrid, mFeatureType, mSensitive,
467                 mShouldShowExpanded, mSourceNotificationKey, mComponentName, mUserHandle,
468                 mAssociatedSmartspaceTargetId, mSliceUri, mWidget);
469     }
470 
471     /**
472      * A builder for {@link SmartspaceTarget} object.
473      *
474      * @hide
475      */
476     @SystemApi
477     public static final class Builder {
478         private final String mSmartspaceTargetId;
479         private SmartspaceAction mHeaderAction;
480         private SmartspaceAction mBaseAction;
481         private long mCreationTimeMillis;
482         private long mExpiryTimeMillis;
483         private float mScore;
484         private List<SmartspaceAction> mActionChips = new ArrayList<>();
485         private List<SmartspaceAction> mIconGrid = new ArrayList<>();
486         private int mFeatureType;
487         private boolean mSensitive;
488         private boolean mShouldShowExpanded;
489         private String mSourceNotificationKey;
490         private final ComponentName mComponentName;
491         private final UserHandle mUserHandle;
492         private String mAssociatedSmartspaceTargetId;
493         private Uri mSliceUri;
494         private AppWidgetProviderInfo mWidget;
495 
496         /**
497          * A builder for {@link SmartspaceTarget}.
498          *
499          * @param smartspaceTargetId the id of this target
500          * @param componentName      the componentName of this target
501          * @param userHandle         the userHandle of this target
502          */
Builder(@onNull String smartspaceTargetId, @NonNull ComponentName componentName, @NonNull UserHandle userHandle)503         public Builder(@NonNull String smartspaceTargetId,
504                 @NonNull ComponentName componentName, @NonNull UserHandle userHandle) {
505             this.mSmartspaceTargetId = smartspaceTargetId;
506             this.mComponentName = componentName;
507             this.mUserHandle = userHandle;
508         }
509 
510         /**
511          * Sets the header action.
512          */
513         @NonNull
setHeaderAction(@onNull SmartspaceAction headerAction)514         public Builder setHeaderAction(@NonNull SmartspaceAction headerAction) {
515             this.mHeaderAction = headerAction;
516             return this;
517         }
518 
519         /**
520          * Sets the base action.
521          */
522         @NonNull
setBaseAction(@onNull SmartspaceAction baseAction)523         public Builder setBaseAction(@NonNull SmartspaceAction baseAction) {
524             this.mBaseAction = baseAction;
525             return this;
526         }
527 
528         /**
529          * Sets the creation time.
530          */
531         @NonNull
setCreationTimeMillis(@urrentTimeMillisLong long creationTimeMillis)532         public Builder setCreationTimeMillis(@CurrentTimeMillisLong long creationTimeMillis) {
533             this.mCreationTimeMillis = creationTimeMillis;
534             return this;
535         }
536 
537         /**
538          * Sets the expiration time.
539          */
540         @NonNull
setExpiryTimeMillis(@urrentTimeMillisLong long expiryTimeMillis)541         public Builder setExpiryTimeMillis(@CurrentTimeMillisLong long expiryTimeMillis) {
542             this.mExpiryTimeMillis = expiryTimeMillis;
543             return this;
544         }
545 
546         /**
547          * Sets the score.
548          */
549         @NonNull
setScore(float score)550         public Builder setScore(float score) {
551             this.mScore = score;
552             return this;
553         }
554 
555         /**
556          * Sets the action chips.
557          */
558         @NonNull
setActionChips(@onNull List<SmartspaceAction> actionChips)559         public Builder setActionChips(@NonNull List<SmartspaceAction> actionChips) {
560             this.mActionChips = actionChips;
561             return this;
562         }
563 
564         /**
565          * Sets the icon grid.
566          */
567         @NonNull
setIconGrid(@onNull List<SmartspaceAction> iconGrid)568         public Builder setIconGrid(@NonNull List<SmartspaceAction> iconGrid) {
569             this.mIconGrid = iconGrid;
570             return this;
571         }
572 
573         /**
574          * Sets the feature type.
575          */
576         @NonNull
setFeatureType(int featureType)577         public Builder setFeatureType(int featureType) {
578             this.mFeatureType = featureType;
579             return this;
580         }
581 
582         /**
583          * Sets whether the contents are sensitive.
584          */
585         @NonNull
setSensitive(boolean sensitive)586         public Builder setSensitive(boolean sensitive) {
587             this.mSensitive = sensitive;
588             return this;
589         }
590 
591         /**
592          * Sets whether to show the card as expanded.
593          */
594         @NonNull
setShouldShowExpanded(boolean shouldShowExpanded)595         public Builder setShouldShowExpanded(boolean shouldShowExpanded) {
596             this.mShouldShowExpanded = shouldShowExpanded;
597             return this;
598         }
599 
600         /**
601          * Sets the source notification key.
602          */
603         @NonNull
setSourceNotificationKey(@onNull String sourceNotificationKey)604         public Builder setSourceNotificationKey(@NonNull String sourceNotificationKey) {
605             this.mSourceNotificationKey = sourceNotificationKey;
606             return this;
607         }
608 
609         /**
610          * Sets the associated smartspace target id.
611          */
612         @NonNull
setAssociatedSmartspaceTargetId( @onNull String associatedSmartspaceTargetId)613         public Builder setAssociatedSmartspaceTargetId(
614                 @NonNull String associatedSmartspaceTargetId) {
615             this.mAssociatedSmartspaceTargetId = associatedSmartspaceTargetId;
616             return this;
617         }
618 
619         /**
620          * Sets the slice uri.
621          *
622          * <p><b>NOTE: </b> If {@link mWidget} is also set, {@link mSliceUri} should be ignored.
623          */
624         @NonNull
setSliceUri(@onNull Uri sliceUri)625         public Builder setSliceUri(@NonNull Uri sliceUri) {
626             this.mSliceUri = sliceUri;
627             return this;
628         }
629 
630         /**
631          * Sets the widget id.
632          *
633          * <p><b>NOTE: </b> If {@link mWidget} is set, all other @Nullable params should be
634          * ignored.
635          */
636         @NonNull
setWidget(@onNull AppWidgetProviderInfo widget)637         public Builder setWidget(@NonNull AppWidgetProviderInfo widget) {
638             this.mWidget = widget;
639             return this;
640         }
641 
642         /**
643          * Builds a new {@link SmartspaceTarget}.
644          *
645          * @throws IllegalStateException when non null fields are set as null.
646          */
647         @NonNull
build()648         public SmartspaceTarget build() {
649             if (mSmartspaceTargetId == null
650                     || mComponentName == null
651                     || mUserHandle == null) {
652                 throw new IllegalStateException("Please assign a value to all @NonNull args.");
653             }
654             return new SmartspaceTarget(mSmartspaceTargetId,
655                     mHeaderAction, mBaseAction, mCreationTimeMillis, mExpiryTimeMillis, mScore,
656                     mActionChips, mIconGrid, mFeatureType, mSensitive, mShouldShowExpanded,
657                     mSourceNotificationKey, mComponentName, mUserHandle,
658                     mAssociatedSmartspaceTargetId, mSliceUri, mWidget);
659         }
660     }
661 }
662