1 /*
2  * Copyright (C) 2018 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.contentsuggestions;
18 
19 import android.annotation.NonNull;
20 import android.annotation.Nullable;
21 import android.annotation.SystemApi;
22 import android.graphics.Point;
23 import android.os.Bundle;
24 import android.os.Parcel;
25 import android.os.Parcelable;
26 
27 /**
28  * The request object used to request content selections from {@link ContentSuggestionsManager}.
29  *
30  * <p>Selections are requested for a given taskId as specified by
31  * {@link android.app.ActivityManager} and optionally take an interest point that specifies the
32  * point on the screen that should be considered as the most important.
33  *
34  * @hide
35  */
36 @SystemApi
37 public final class SelectionsRequest implements Parcelable {
38     private final int mTaskId;
39     @Nullable
40     private final Point mInterestPoint;
41     @Nullable
42     private final Bundle mExtras;
43 
SelectionsRequest(int taskId, @Nullable Point interestPoint, @Nullable Bundle extras)44     private SelectionsRequest(int taskId, @Nullable Point interestPoint, @Nullable Bundle extras) {
45         mTaskId = taskId;
46         mInterestPoint = interestPoint;
47         mExtras = extras;
48     }
49 
50     /**
51      * Return the request task id.
52      */
getTaskId()53     public int getTaskId() {
54         return mTaskId;
55     }
56 
57     /**
58      * Return the request point of interest or {@code null} if there is no point of interest for
59      * this request.
60      */
getInterestPoint()61     public @Nullable Point getInterestPoint() {
62         return mInterestPoint;
63     }
64 
65     /**
66      * Return the request extras, may be an empty bundle if there aren't any.
67      */
getExtras()68     public @NonNull Bundle getExtras() {
69         return mExtras == null ? new Bundle() : mExtras;
70     }
71 
72     @Override
describeContents()73     public int describeContents() {
74         return 0;
75     }
76 
77     @Override
writeToParcel(Parcel dest, int flags)78     public void writeToParcel(Parcel dest, int flags) {
79         dest.writeInt(mTaskId);
80         dest.writeTypedObject(mInterestPoint, flags);
81         dest.writeBundle(mExtras);
82     }
83 
84     public static final @android.annotation.NonNull Creator<SelectionsRequest> CREATOR =
85             new Creator<SelectionsRequest>() {
86         @Override
87         public SelectionsRequest createFromParcel(Parcel source) {
88             return new SelectionsRequest(
89                     source.readInt(), source.readTypedObject(Point.CREATOR), source.readBundle());
90         }
91 
92         @Override
93         public SelectionsRequest[] newArray(int size) {
94             return new SelectionsRequest[size];
95         }
96     };
97 
98     /**
99      * A builder for selections requests events.
100      * @hide
101      */
102     @SystemApi
103     public static final class Builder {
104 
105         private final int mTaskId;
106         private Point mInterestPoint;
107         private Bundle mExtras;
108 
109         /**
110          * Default constructor.
111          *
112          * @param taskId of the type used by {@link android.app.ActivityManager}
113          */
Builder(int taskId)114         public Builder(int taskId) {
115             mTaskId = taskId;
116         }
117 
118         /**
119          * Sets the request extras.
120          */
setExtras(@onNull Bundle extras)121         public @NonNull Builder setExtras(@NonNull Bundle extras) {
122             mExtras = extras;
123             return this;
124         }
125 
126         /**
127          * Sets the request interest point.
128          */
setInterestPoint(@onNull Point interestPoint)129         public @NonNull Builder setInterestPoint(@NonNull Point interestPoint) {
130             mInterestPoint = interestPoint;
131             return this;
132         }
133 
134         /**
135          * Builds a new request instance.
136          */
build()137         public @NonNull SelectionsRequest build() {
138             return new SelectionsRequest(mTaskId, mInterestPoint, mExtras);
139         }
140     }
141 }
142