TextClassificationContext.java revision 080c8542b68cf17a0441862c404cb49ce0e86cfe
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
17package android.view.textclassifier;
18
19import android.annotation.NonNull;
20import android.annotation.Nullable;
21import android.os.Parcel;
22import android.os.Parcelable;
23import android.view.textclassifier.TextClassifier.WidgetType;
24
25import com.android.internal.util.Preconditions;
26
27import java.util.Locale;
28
29/**
30 * A representation of the context in which text classification would be performed.
31 * @see TextClassificationManager#createTextClassificationSession(TextClassificationContext)
32 */
33public final class TextClassificationContext implements Parcelable {
34
35    private final String mPackageName;
36    private final String mWidgetType;
37    @Nullable private final String mWidgetVersion;
38
39    private TextClassificationContext(
40            String packageName,
41            String widgetType,
42            String widgetVersion) {
43        mPackageName = Preconditions.checkNotNull(packageName);
44        mWidgetType = Preconditions.checkNotNull(widgetType);
45        mWidgetVersion = widgetVersion;
46    }
47
48    /**
49     * Returns the package name for the calling package.
50     */
51    @NonNull
52    public String getPackageName() {
53        return mPackageName;
54    }
55
56    /**
57     * Returns the widget type for this classification context.
58     */
59    @NonNull
60    @WidgetType
61    public String getWidgetType() {
62        return mWidgetType;
63    }
64
65    /**
66     * Returns a custom version string for the widget type.
67     *
68     * @see #getWidgetType()
69     */
70    @Nullable
71    public String getWidgetVersion() {
72        return mWidgetVersion;
73    }
74
75    @Override
76    public String toString() {
77        return String.format(Locale.US, "TextClassificationContext{"
78                + "packageName=%s, widgetType=%s, widgetVersion=%s}",
79                mPackageName, mWidgetType, mWidgetVersion);
80    }
81
82    /**
83     * A builder for building a TextClassification context.
84     */
85    public static final class Builder {
86
87        private final String mPackageName;
88        private final String mWidgetType;
89
90        @Nullable private String mWidgetVersion;
91
92        /**
93         * Initializes a new builder for text classification context objects.
94         *
95         * @param packageName the name of the calling package
96         * @param widgetType the type of widget e.g. {@link TextClassifier#WIDGET_TYPE_TEXTVIEW}
97         *
98         * @return this builder
99         */
100        public Builder(@NonNull String packageName, @NonNull @WidgetType String widgetType) {
101            mPackageName = Preconditions.checkNotNull(packageName);
102            mWidgetType = Preconditions.checkNotNull(widgetType);
103        }
104
105        /**
106         * Sets an optional custom version string for the widget type.
107         *
108         * @return this builder
109         */
110        public Builder setWidgetVersion(@Nullable String widgetVersion) {
111            mWidgetVersion = widgetVersion;
112            return this;
113        }
114
115        /**
116         * Builds the text classification context object.
117         *
118         * @return the built TextClassificationContext object
119         */
120        @NonNull
121        public TextClassificationContext build() {
122            return new TextClassificationContext(mPackageName, mWidgetType, mWidgetVersion);
123        }
124    }
125
126    @Override
127    public int describeContents() {
128        return 0;
129    }
130
131    @Override
132    public void writeToParcel(Parcel parcel, int flags) {
133        parcel.writeString(mPackageName);
134        parcel.writeString(mWidgetType);
135        parcel.writeString(mWidgetVersion);
136    }
137
138    private TextClassificationContext(Parcel in) {
139        mPackageName = in.readString();
140        mWidgetType = in.readString();
141        mWidgetVersion = in.readString();
142    }
143
144    public static final Parcelable.Creator<TextClassificationContext> CREATOR =
145            new Parcelable.Creator<TextClassificationContext>() {
146                @Override
147                public TextClassificationContext createFromParcel(Parcel parcel) {
148                    return new TextClassificationContext(parcel);
149                }
150
151                @Override
152                public TextClassificationContext[] newArray(int size) {
153                    return new TextClassificationContext[size];
154                }
155            };
156}
157