1 /*
2  * Copyright (C) 2022 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 
17 package android.app.smartspace.uitemplatedata;
18 
19 import android.annotation.NonNull;
20 import android.annotation.Nullable;
21 import android.annotation.SystemApi;
22 import android.app.smartspace.SmartspaceTarget;
23 import android.os.Parcel;
24 
25 import java.util.List;
26 import java.util.Objects;
27 
28 
29 /**
30  * Holds all the relevant data needed to render a Smartspace card with the sub-list Ui Template.
31  *
32  * This template will add a sub-list card within the default-template card:
33  * <ul>
34  *     <li> sub-list text1       sub-list icon </li>
35  *     <li> sub-list text2 </li>
36  *     <li> sub-list text3 </li>
37  *     ...
38  * </ul>
39  *
40  * @hide
41  */
42 @SystemApi
43 public final class SubListTemplateData extends BaseTemplateData {
44 
45     @Nullable
46     private final Icon mSubListIcon;
47     @NonNull
48     private final List<Text> mSubListTexts;
49 
50     /** Tap action for the sub-list secondary card. */
51     @Nullable
52     private final TapAction mSubListAction;
53 
SubListTemplateData(@onNull Parcel in)54     SubListTemplateData(@NonNull Parcel in) {
55         super(in);
56         mSubListIcon = in.readTypedObject(Icon.CREATOR);
57         mSubListTexts = in.createTypedArrayList(Text.CREATOR);
58         mSubListAction = in.readTypedObject(TapAction.CREATOR);
59     }
60 
SubListTemplateData(@martspaceTarget.UiTemplateType int templateType, @Nullable SubItemInfo primaryItem, @Nullable SubItemInfo subtitleItem, @Nullable SubItemInfo subtitleSupplementalItem, @Nullable SubItemInfo supplementalLineItem, @Nullable SubItemInfo supplementalAlarmItem, int layoutWeight, @Nullable Icon subListIcon, @NonNull List<Text> subListTexts, @Nullable TapAction subListAction)61     private SubListTemplateData(@SmartspaceTarget.UiTemplateType int templateType,
62             @Nullable SubItemInfo primaryItem,
63             @Nullable SubItemInfo subtitleItem,
64             @Nullable SubItemInfo subtitleSupplementalItem,
65             @Nullable SubItemInfo supplementalLineItem,
66             @Nullable SubItemInfo supplementalAlarmItem,
67             int layoutWeight,
68             @Nullable Icon subListIcon,
69             @NonNull List<Text> subListTexts,
70             @Nullable TapAction subListAction) {
71         super(templateType, primaryItem, subtitleItem, subtitleSupplementalItem,
72                 supplementalLineItem, supplementalAlarmItem, layoutWeight);
73 
74         mSubListIcon = subListIcon;
75         mSubListTexts = subListTexts;
76         mSubListAction = subListAction;
77     }
78 
79     /** Returns the sub-list card's icon. */
80     @Nullable
getSubListIcon()81     public Icon getSubListIcon() {
82         return mSubListIcon;
83     }
84 
85     /** Returns the sub-list card's texts list. */
86     @NonNull
getSubListTexts()87     public List<Text> getSubListTexts() {
88         return mSubListTexts;
89     }
90 
91     /** Returns the sub-list card's tap action. */
92     @Nullable
getSubListAction()93     public TapAction getSubListAction() {
94         return mSubListAction;
95     }
96 
97     /**
98      * @see Parcelable.Creator
99      */
100     @NonNull
101     public static final Creator<SubListTemplateData> CREATOR =
102             new Creator<SubListTemplateData>() {
103                 @Override
104                 public SubListTemplateData createFromParcel(Parcel in) {
105                     return new SubListTemplateData(in);
106                 }
107 
108                 @Override
109                 public SubListTemplateData[] newArray(int size) {
110                     return new SubListTemplateData[size];
111                 }
112             };
113 
114     @Override
describeContents()115     public int describeContents() {
116         return 0;
117     }
118 
119     @Override
writeToParcel(@onNull Parcel out, int flags)120     public void writeToParcel(@NonNull Parcel out, int flags) {
121         super.writeToParcel(out, flags);
122         out.writeTypedObject(mSubListIcon, flags);
123         out.writeTypedList(mSubListTexts);
124         out.writeTypedObject(mSubListAction, flags);
125     }
126 
127     @Override
equals(Object o)128     public boolean equals(Object o) {
129         if (this == o) return true;
130         if (!(o instanceof SubListTemplateData)) return false;
131         if (!super.equals(o)) return false;
132         SubListTemplateData that = (SubListTemplateData) o;
133         return Objects.equals(mSubListIcon, that.mSubListIcon) && Objects.equals(
134                 mSubListTexts, that.mSubListTexts) && Objects.equals(mSubListAction,
135                 that.mSubListAction);
136     }
137 
138     @Override
hashCode()139     public int hashCode() {
140         return Objects.hash(super.hashCode(), mSubListIcon, mSubListTexts, mSubListAction);
141     }
142 
143     @Override
toString()144     public String toString() {
145         return super.toString() + " + SmartspaceSubListUiTemplateData{"
146                 + "mSubListIcon=" + mSubListIcon
147                 + ", mSubListTexts=" + mSubListTexts
148                 + ", mSubListAction=" + mSubListAction
149                 + '}';
150     }
151 
152     /**
153      * A builder for {@link SubListTemplateData} object.
154      *
155      * @hide
156      */
157     @SystemApi
158     public static final class Builder extends BaseTemplateData.Builder {
159 
160         private Icon mSubListIcon;
161         private final List<Text> mSubListTexts;
162         private TapAction mSubListAction;
163 
164         /**
165          * A builder for {@link SubListTemplateData}.
166          */
Builder(@onNull List<Text> subListTexts)167         public Builder(@NonNull List<Text> subListTexts) {
168             super(SmartspaceTarget.UI_TEMPLATE_SUB_LIST);
169             mSubListTexts = Objects.requireNonNull(subListTexts);
170         }
171 
172         /**
173          * Sets the sub-list card icon.
174          */
175         @NonNull
setSubListIcon(@onNull Icon subListIcon)176         public Builder setSubListIcon(@NonNull Icon subListIcon) {
177             mSubListIcon = subListIcon;
178             return this;
179         }
180 
181         /**
182          * Sets the card tap action.
183          */
184         @NonNull
setSubListAction(@onNull TapAction subListAction)185         public Builder setSubListAction(@NonNull TapAction subListAction) {
186             mSubListAction = subListAction;
187             return this;
188         }
189 
190         /**
191          * Builds a new SmartspaceSubListUiTemplateData instance.
192          */
193         @NonNull
build()194         public SubListTemplateData build() {
195             return new SubListTemplateData(getTemplateType(), getPrimaryItem(),
196                     getSubtitleItem(), getSubtitleSupplemtnalItem(),
197                     getSupplementalLineItem(), getSupplementalAlarmItem(), getLayoutWeight(),
198                     mSubListIcon,
199                     mSubListTexts,
200                     mSubListAction);
201         }
202     }
203 }
204