1 /*
2  * Copyright (C) 2019 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.widget.inline;
18 
19 import android.annotation.NonNull;
20 import android.annotation.Nullable;
21 import android.os.Bundle;
22 import android.os.Parcelable;
23 import android.util.Size;
24 
25 import com.android.internal.util.DataClass;
26 import com.android.internal.widget.InlinePresentationStyleUtils;
27 
28 /**
29  * This class represents the presentation specification by which an inline suggestion
30  * should abide when constructing its UI. Since suggestions are inlined in a
31  * host application while provided by another source, they need to be consistent
32  * with the host's look at feel to allow building smooth and integrated UIs.
33  */
34 @DataClass(genEqualsHashCode = true, genToString = true, genBuilder = true)
35 public final class InlinePresentationSpec implements Parcelable {
36 
37     /** The minimal size of the suggestion. */
38     @NonNull
39     private final Size mMinSize;
40     /** The maximal size of the suggestion. */
41     @NonNull
42     private final Size mMaxSize;
43 
44     /**
45      * The extras encoding the UI style information.
46      *
47      * <p>The style bundles can be created using the relevant Style classes and their builders in
48      * the androidx autofill library e.g. {@code androidx.autofill.inline.UiVersions.StylesBuilder}.
49      * </p>
50      *
51      * <p>The style must be set for the suggestion to render properly.</p>
52      *
53      * <p>Note: There should be no remote objects in the bundle, all included remote objects will
54      * be removed from the bundle before transmission.</p>
55      */
56     @NonNull
57     private final Bundle mStyle;
58 
59     @NonNull
defaultStyle()60     private static Bundle defaultStyle() {
61         return Bundle.EMPTY;
62     }
63 
styleEquals(@onNull Bundle style)64     private boolean styleEquals(@NonNull Bundle style) {
65         return InlinePresentationStyleUtils.bundleEquals(mStyle, style);
66     }
67 
68     /**
69      * Removes the remote objects from the {@code mStyle}.
70      * @hide
71      */
filterContentTypes()72     public void filterContentTypes() {
73         InlinePresentationStyleUtils.filterContentTypes(mStyle);
74     }
75 
76     /** @hide */
77     @DataClass.Suppress({"setMaxSize", "setMinSize"})
78     abstract static class BaseBuilder {
79     }
80 
81 
82 
83     // Code below generated by codegen v1.0.15.
84     //
85     // DO NOT MODIFY!
86     // CHECKSTYLE:OFF Generated code
87     //
88     // To regenerate run:
89     // $ codegen $ANDROID_BUILD_TOP/frameworks/base/core/java/android/widget/inline/InlinePresentationSpec.java
90     //
91     // To exclude the generated code from IntelliJ auto-formatting enable (one-time):
92     //   Settings > Editor > Code Style > Formatter Control
93     //@formatter:off
94 
95 
96     @DataClass.Generated.Member
InlinePresentationSpec( @onNull Size minSize, @NonNull Size maxSize, @NonNull Bundle style)97     /* package-private */ InlinePresentationSpec(
98             @NonNull Size minSize,
99             @NonNull Size maxSize,
100             @NonNull Bundle style) {
101         this.mMinSize = minSize;
102         com.android.internal.util.AnnotationValidations.validate(
103                 NonNull.class, null, mMinSize);
104         this.mMaxSize = maxSize;
105         com.android.internal.util.AnnotationValidations.validate(
106                 NonNull.class, null, mMaxSize);
107         this.mStyle = style;
108         com.android.internal.util.AnnotationValidations.validate(
109                 NonNull.class, null, mStyle);
110 
111         // onConstructed(); // You can define this method to get a callback
112     }
113 
114     /**
115      * The minimal size of the suggestion.
116      */
117     @DataClass.Generated.Member
getMinSize()118     public @NonNull Size getMinSize() {
119         return mMinSize;
120     }
121 
122     /**
123      * The maximal size of the suggestion.
124      */
125     @DataClass.Generated.Member
getMaxSize()126     public @NonNull Size getMaxSize() {
127         return mMaxSize;
128     }
129 
130     /**
131      * The extras encoding the UI style information.
132      *
133      * <p>The style bundles can be created using the relevant Style classes and their builders in
134      * the androidx autofill library e.g. {@code androidx.autofill.inline.UiVersions.StylesBuilder}.
135      * </p>
136      *
137      * <p>The style must be set for the suggestion to render properly.</p>
138      *
139      * <p>Note: There should be no remote objects in the bundle, all included remote objects will
140      * be removed from the bundle before transmission.</p>
141      */
142     @DataClass.Generated.Member
getStyle()143     public @NonNull Bundle getStyle() {
144         return mStyle;
145     }
146 
147     @Override
148     @DataClass.Generated.Member
toString()149     public String toString() {
150         // You can override field toString logic by defining methods like:
151         // String fieldNameToString() { ... }
152 
153         return "InlinePresentationSpec { " +
154                 "minSize = " + mMinSize + ", " +
155                 "maxSize = " + mMaxSize + ", " +
156                 "style = " + mStyle +
157         " }";
158     }
159 
160     @Override
161     @DataClass.Generated.Member
equals(@ullable Object o)162     public boolean equals(@Nullable Object o) {
163         // You can override field equality logic by defining either of the methods like:
164         // boolean fieldNameEquals(InlinePresentationSpec other) { ... }
165         // boolean fieldNameEquals(FieldType otherValue) { ... }
166 
167         if (this == o) return true;
168         if (o == null || getClass() != o.getClass()) return false;
169         @SuppressWarnings("unchecked")
170         InlinePresentationSpec that = (InlinePresentationSpec) o;
171         //noinspection PointlessBooleanExpression
172         return true
173                 && java.util.Objects.equals(mMinSize, that.mMinSize)
174                 && java.util.Objects.equals(mMaxSize, that.mMaxSize)
175                 && styleEquals(that.mStyle);
176     }
177 
178     @Override
179     @DataClass.Generated.Member
hashCode()180     public int hashCode() {
181         // You can override field hashCode logic by defining methods like:
182         // int fieldNameHashCode() { ... }
183 
184         int _hash = 1;
185         _hash = 31 * _hash + java.util.Objects.hashCode(mMinSize);
186         _hash = 31 * _hash + java.util.Objects.hashCode(mMaxSize);
187         _hash = 31 * _hash + java.util.Objects.hashCode(mStyle);
188         return _hash;
189     }
190 
191     @Override
192     @DataClass.Generated.Member
writeToParcel(@onNull android.os.Parcel dest, int flags)193     public void writeToParcel(@NonNull android.os.Parcel dest, int flags) {
194         // You can override field parcelling by defining methods like:
195         // void parcelFieldName(Parcel dest, int flags) { ... }
196 
197         dest.writeSize(mMinSize);
198         dest.writeSize(mMaxSize);
199         dest.writeBundle(mStyle);
200     }
201 
202     @Override
203     @DataClass.Generated.Member
describeContents()204     public int describeContents() { return 0; }
205 
206     /** @hide */
207     @SuppressWarnings({"unchecked", "RedundantCast"})
208     @DataClass.Generated.Member
InlinePresentationSpec(@onNull android.os.Parcel in)209     /* package-private */ InlinePresentationSpec(@NonNull android.os.Parcel in) {
210         // You can override field unparcelling by defining methods like:
211         // static FieldType unparcelFieldName(Parcel in) { ... }
212 
213         Size minSize = (Size) in.readSize();
214         Size maxSize = (Size) in.readSize();
215         Bundle style = in.readBundle();
216 
217         this.mMinSize = minSize;
218         com.android.internal.util.AnnotationValidations.validate(
219                 NonNull.class, null, mMinSize);
220         this.mMaxSize = maxSize;
221         com.android.internal.util.AnnotationValidations.validate(
222                 NonNull.class, null, mMaxSize);
223         this.mStyle = style;
224         com.android.internal.util.AnnotationValidations.validate(
225                 NonNull.class, null, mStyle);
226 
227         // onConstructed(); // You can define this method to get a callback
228     }
229 
230     @DataClass.Generated.Member
231     public static final @NonNull Parcelable.Creator<InlinePresentationSpec> CREATOR
232             = new Parcelable.Creator<InlinePresentationSpec>() {
233         @Override
234         public InlinePresentationSpec[] newArray(int size) {
235             return new InlinePresentationSpec[size];
236         }
237 
238         @Override
239         public InlinePresentationSpec createFromParcel(@NonNull android.os.Parcel in) {
240             return new InlinePresentationSpec(in);
241         }
242     };
243 
244     /**
245      * A builder for {@link InlinePresentationSpec}
246      */
247     @SuppressWarnings("WeakerAccess")
248     @DataClass.Generated.Member
249     public static final class Builder extends BaseBuilder {
250 
251         private @NonNull Size mMinSize;
252         private @NonNull Size mMaxSize;
253         private @NonNull Bundle mStyle;
254 
255         private long mBuilderFieldsSet = 0L;
256 
257         /**
258          * Creates a new Builder.
259          *
260          * @param minSize
261          *   The minimal size of the suggestion.
262          * @param maxSize
263          *   The maximal size of the suggestion.
264          */
Builder( @onNull Size minSize, @NonNull Size maxSize)265         public Builder(
266                 @NonNull Size minSize,
267                 @NonNull Size maxSize) {
268             mMinSize = minSize;
269             com.android.internal.util.AnnotationValidations.validate(
270                     NonNull.class, null, mMinSize);
271             mMaxSize = maxSize;
272             com.android.internal.util.AnnotationValidations.validate(
273                     NonNull.class, null, mMaxSize);
274         }
275 
276         /**
277          * The extras encoding the UI style information.
278          *
279          * <p>The style bundles can be created using the relevant Style classes and their builders in
280          * the androidx autofill library e.g. {@code androidx.autofill.inline.UiVersions.StylesBuilder}.
281          * </p>
282          *
283          * <p>The style must be set for the suggestion to render properly.</p>
284          *
285          * <p>Note: There should be no remote objects in the bundle, all included remote objects will
286          * be removed from the bundle before transmission.</p>
287          */
288         @DataClass.Generated.Member
setStyle(@onNull Bundle value)289         public @NonNull Builder setStyle(@NonNull Bundle value) {
290             checkNotUsed();
291             mBuilderFieldsSet |= 0x4;
292             mStyle = value;
293             return this;
294         }
295 
296         /** Builds the instance. This builder should not be touched after calling this! */
build()297         public @NonNull InlinePresentationSpec build() {
298             checkNotUsed();
299             mBuilderFieldsSet |= 0x8; // Mark builder used
300 
301             if ((mBuilderFieldsSet & 0x4) == 0) {
302                 mStyle = defaultStyle();
303             }
304             InlinePresentationSpec o = new InlinePresentationSpec(
305                     mMinSize,
306                     mMaxSize,
307                     mStyle);
308             return o;
309         }
310 
checkNotUsed()311         private void checkNotUsed() {
312             if ((mBuilderFieldsSet & 0x8) != 0) {
313                 throw new IllegalStateException(
314                         "This Builder should not be reused. Use a new Builder instance instead");
315             }
316         }
317     }
318 
319     @DataClass.Generated(
320             time = 1596485189661L,
321             codegenVersion = "1.0.15",
322             sourceFile = "frameworks/base/core/java/android/widget/inline/InlinePresentationSpec.java",
323             inputSignatures = "private final @android.annotation.NonNull android.util.Size mMinSize\nprivate final @android.annotation.NonNull android.util.Size mMaxSize\nprivate final @android.annotation.NonNull android.os.Bundle mStyle\nprivate static @android.annotation.NonNull android.os.Bundle defaultStyle()\nprivate  boolean styleEquals(android.os.Bundle)\npublic  void filterContentTypes()\nclass InlinePresentationSpec extends java.lang.Object implements [android.os.Parcelable]\n@com.android.internal.util.DataClass(genEqualsHashCode=true, genToString=true, genBuilder=true)\nclass BaseBuilder extends java.lang.Object implements []")
324     @Deprecated
__metadata()325     private void __metadata() {}
326 
327 
328     //@formatter:on
329     // End of generated code
330 
331 }
332