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 * Holds all the relevant data needed to render a Smartspace card with the sub-image Ui Template. 30 * 31 * This template will add a sub-image card within the default-template card: 32 * <ul> 33 * <li> sub-image text1 </li> <ul> 34 * <li> sub-image text2 </li> image (can be a GIF) 35 * ... </ul> 36 * </ul> 37 * 38 * @hide 39 */ 40 @SystemApi 41 public final class SubImageTemplateData extends BaseTemplateData { 42 43 /** Texts are shown next to the image as a vertical list */ 44 @NonNull 45 private final List<Text> mSubImageTexts; 46 47 /** If multiple images are passed in, they will be rendered as GIF. */ 48 @NonNull 49 private final List<Icon> mSubImages; 50 51 /** Tap action for the sub-image secondary card. */ 52 @Nullable 53 private final TapAction mSubImageAction; 54 SubImageTemplateData(@onNull Parcel in)55 SubImageTemplateData(@NonNull Parcel in) { 56 super(in); 57 mSubImageTexts = in.createTypedArrayList(Text.CREATOR); 58 mSubImages = in.createTypedArrayList(Icon.CREATOR); 59 mSubImageAction = in.readTypedObject(TapAction.CREATOR); 60 } 61 SubImageTemplateData(@martspaceTarget.UiTemplateType int templateType, @Nullable SubItemInfo primaryItem, @Nullable SubItemInfo subtitleItem, @Nullable SubItemInfo subtitleSupplementalItem, @Nullable SubItemInfo supplementalLineItem, @Nullable SubItemInfo supplementalAlarmItem, int layoutWeight, @NonNull List<Text> subImageTexts, @NonNull List<Icon> subImages, @Nullable TapAction subImageAction)62 private SubImageTemplateData(@SmartspaceTarget.UiTemplateType int templateType, 63 @Nullable SubItemInfo primaryItem, 64 @Nullable SubItemInfo subtitleItem, 65 @Nullable SubItemInfo subtitleSupplementalItem, 66 @Nullable SubItemInfo supplementalLineItem, 67 @Nullable SubItemInfo supplementalAlarmItem, 68 int layoutWeight, 69 @NonNull List<Text> subImageTexts, 70 @NonNull List<Icon> subImages, 71 @Nullable TapAction subImageAction) { 72 super(templateType, primaryItem, subtitleItem, subtitleSupplementalItem, 73 supplementalLineItem, supplementalAlarmItem, layoutWeight); 74 75 mSubImageTexts = subImageTexts; 76 mSubImages = subImages; 77 mSubImageAction = subImageAction; 78 } 79 80 /** Returns the list of sub-image card's texts. Can be empty if not being set. */ 81 @NonNull getSubImageTexts()82 public List<Text> getSubImageTexts() { 83 return mSubImageTexts; 84 } 85 86 /** 87 * Returns the list of sub-image card's image. It's a single-element list if it's a static 88 * image, or a multi-elements list if it's a GIF. 89 */ 90 @NonNull getSubImages()91 public List<Icon> getSubImages() { 92 return mSubImages; 93 } 94 95 /** Returns the sub-image card's tap action. */ 96 @Nullable getSubImageAction()97 public TapAction getSubImageAction() { 98 return mSubImageAction; 99 } 100 101 /** 102 * @see Parcelable.Creator 103 */ 104 @NonNull 105 public static final Creator<SubImageTemplateData> CREATOR = 106 new Creator<SubImageTemplateData>() { 107 @Override 108 public SubImageTemplateData createFromParcel(Parcel in) { 109 return new SubImageTemplateData(in); 110 } 111 112 @Override 113 public SubImageTemplateData[] newArray(int size) { 114 return new SubImageTemplateData[size]; 115 } 116 }; 117 118 @Override describeContents()119 public int describeContents() { 120 return 0; 121 } 122 123 @Override writeToParcel(@onNull Parcel out, int flags)124 public void writeToParcel(@NonNull Parcel out, int flags) { 125 super.writeToParcel(out, flags); 126 out.writeTypedList(mSubImageTexts); 127 out.writeTypedList(mSubImages); 128 out.writeTypedObject(mSubImageAction, flags); 129 } 130 131 @Override equals(Object o)132 public boolean equals(Object o) { 133 if (this == o) return true; 134 if (!(o instanceof SubImageTemplateData)) return false; 135 if (!super.equals(o)) return false; 136 SubImageTemplateData that = (SubImageTemplateData) o; 137 return Objects.equals(mSubImageTexts, that.mSubImageTexts) 138 && Objects.equals(mSubImages, that.mSubImages) && Objects.equals( 139 mSubImageAction, that.mSubImageAction); 140 } 141 142 @Override hashCode()143 public int hashCode() { 144 return Objects.hash(super.hashCode(), mSubImageTexts, mSubImages, mSubImageAction); 145 } 146 147 @Override toString()148 public String toString() { 149 return super.toString() + " + SmartspaceSubImageUiTemplateData{" 150 + "mSubImageTexts=" + mSubImageTexts 151 + ", mSubImages=" + mSubImages 152 + ", mSubImageAction=" + mSubImageAction 153 + '}'; 154 } 155 156 /** 157 * A builder for {@link SubImageTemplateData} object. 158 * 159 * @hide 160 */ 161 @SystemApi 162 public static final class Builder extends BaseTemplateData.Builder { 163 164 private final List<Text> mSubImageTexts; 165 private final List<Icon> mSubImages; 166 private TapAction mSubImageAction; 167 168 /** 169 * A builder for {@link SubImageTemplateData}. 170 */ Builder(@onNull List<Text> subImageTexts, @NonNull List<Icon> subImages)171 public Builder(@NonNull List<Text> subImageTexts, 172 @NonNull List<Icon> subImages) { 173 super(SmartspaceTarget.UI_TEMPLATE_SUB_IMAGE); 174 mSubImageTexts = Objects.requireNonNull(subImageTexts); 175 mSubImages = Objects.requireNonNull(subImages); 176 } 177 178 /** 179 * Sets the card tap action. 180 */ 181 @NonNull setSubImageAction(@onNull TapAction subImageAction)182 public Builder setSubImageAction(@NonNull TapAction subImageAction) { 183 mSubImageAction = subImageAction; 184 return this; 185 } 186 187 /** 188 * Builds a new SmartspaceSubImageUiTemplateData instance. 189 */ 190 @NonNull build()191 public SubImageTemplateData build() { 192 return new SubImageTemplateData(getTemplateType(), getPrimaryItem(), 193 getSubtitleItem(), getSubtitleSupplemtnalItem(), 194 getSupplementalLineItem(), getSupplementalAlarmItem(), getLayoutWeight(), 195 mSubImageTexts, 196 mSubImages, 197 mSubImageAction); 198 } 199 } 200 } 201