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