Suggestion.java revision ce8db9911494225fcd99711d7df85a130de5a6ce
1723bf37ab2e4b535a6061c02df03fcec57006e37Fan Zhang/*
2723bf37ab2e4b535a6061c02df03fcec57006e37Fan Zhang * Copyright (C) 2017 The Android Open Source Project
3723bf37ab2e4b535a6061c02df03fcec57006e37Fan Zhang *
4723bf37ab2e4b535a6061c02df03fcec57006e37Fan Zhang * Licensed under the Apache License, Version 2.0 (the "License");
5723bf37ab2e4b535a6061c02df03fcec57006e37Fan Zhang * you may not use this file except in compliance with the License.
6723bf37ab2e4b535a6061c02df03fcec57006e37Fan Zhang * You may obtain a copy of the License at
7723bf37ab2e4b535a6061c02df03fcec57006e37Fan Zhang *
8723bf37ab2e4b535a6061c02df03fcec57006e37Fan Zhang *      http://www.apache.org/licenses/LICENSE-2.0
9723bf37ab2e4b535a6061c02df03fcec57006e37Fan Zhang *
10723bf37ab2e4b535a6061c02df03fcec57006e37Fan Zhang * Unless required by applicable law or agreed to in writing, software
11723bf37ab2e4b535a6061c02df03fcec57006e37Fan Zhang * distributed under the License is distributed on an "AS IS" BASIS,
12723bf37ab2e4b535a6061c02df03fcec57006e37Fan Zhang * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13723bf37ab2e4b535a6061c02df03fcec57006e37Fan Zhang * See the License for the specific language governing permissions and
14723bf37ab2e4b535a6061c02df03fcec57006e37Fan Zhang * limitations under the License.
15723bf37ab2e4b535a6061c02df03fcec57006e37Fan Zhang */
16723bf37ab2e4b535a6061c02df03fcec57006e37Fan Zhang
17723bf37ab2e4b535a6061c02df03fcec57006e37Fan Zhangpackage android.service.settings.suggestions;
18723bf37ab2e4b535a6061c02df03fcec57006e37Fan Zhang
196abced38e5947c6218ba1a0edcf0d8aa3184a43eFan Zhangimport android.annotation.IntDef;
20723bf37ab2e4b535a6061c02df03fcec57006e37Fan Zhangimport android.annotation.SystemApi;
21723bf37ab2e4b535a6061c02df03fcec57006e37Fan Zhangimport android.app.PendingIntent;
226abced38e5947c6218ba1a0edcf0d8aa3184a43eFan Zhangimport android.graphics.drawable.Icon;
23723bf37ab2e4b535a6061c02df03fcec57006e37Fan Zhangimport android.os.Parcel;
24723bf37ab2e4b535a6061c02df03fcec57006e37Fan Zhangimport android.os.Parcelable;
25723bf37ab2e4b535a6061c02df03fcec57006e37Fan Zhangimport android.text.TextUtils;
26723bf37ab2e4b535a6061c02df03fcec57006e37Fan Zhang
276abced38e5947c6218ba1a0edcf0d8aa3184a43eFan Zhangimport java.lang.annotation.Retention;
286abced38e5947c6218ba1a0edcf0d8aa3184a43eFan Zhangimport java.lang.annotation.RetentionPolicy;
296abced38e5947c6218ba1a0edcf0d8aa3184a43eFan Zhang
30723bf37ab2e4b535a6061c02df03fcec57006e37Fan Zhang/**
31723bf37ab2e4b535a6061c02df03fcec57006e37Fan Zhang * Data object that has information about a device suggestion.
32723bf37ab2e4b535a6061c02df03fcec57006e37Fan Zhang *
33723bf37ab2e4b535a6061c02df03fcec57006e37Fan Zhang * @hide
34723bf37ab2e4b535a6061c02df03fcec57006e37Fan Zhang */
35723bf37ab2e4b535a6061c02df03fcec57006e37Fan Zhang@SystemApi
36723bf37ab2e4b535a6061c02df03fcec57006e37Fan Zhangpublic final class Suggestion implements Parcelable {
37723bf37ab2e4b535a6061c02df03fcec57006e37Fan Zhang
386abced38e5947c6218ba1a0edcf0d8aa3184a43eFan Zhang    /**
396abced38e5947c6218ba1a0edcf0d8aa3184a43eFan Zhang     * @hide
406abced38e5947c6218ba1a0edcf0d8aa3184a43eFan Zhang     */
41ce8db9911494225fcd99711d7df85a130de5a6ceJeff Sharkey    @IntDef(flag = true, prefix = { "FLAG_" }, value = {
426abced38e5947c6218ba1a0edcf0d8aa3184a43eFan Zhang            FLAG_HAS_BUTTON,
436abced38e5947c6218ba1a0edcf0d8aa3184a43eFan Zhang    })
446abced38e5947c6218ba1a0edcf0d8aa3184a43eFan Zhang    @Retention(RetentionPolicy.SOURCE)
456abced38e5947c6218ba1a0edcf0d8aa3184a43eFan Zhang    public @interface Flags {
466abced38e5947c6218ba1a0edcf0d8aa3184a43eFan Zhang    }
476abced38e5947c6218ba1a0edcf0d8aa3184a43eFan Zhang
486abced38e5947c6218ba1a0edcf0d8aa3184a43eFan Zhang    /**
496abced38e5947c6218ba1a0edcf0d8aa3184a43eFan Zhang     * Flag for suggestion type with a single button
506abced38e5947c6218ba1a0edcf0d8aa3184a43eFan Zhang     */
516abced38e5947c6218ba1a0edcf0d8aa3184a43eFan Zhang    public static final int FLAG_HAS_BUTTON = 1 << 0;
526abced38e5947c6218ba1a0edcf0d8aa3184a43eFan Zhang
53723bf37ab2e4b535a6061c02df03fcec57006e37Fan Zhang    private final String mId;
54723bf37ab2e4b535a6061c02df03fcec57006e37Fan Zhang    private final CharSequence mTitle;
55723bf37ab2e4b535a6061c02df03fcec57006e37Fan Zhang    private final CharSequence mSummary;
566abced38e5947c6218ba1a0edcf0d8aa3184a43eFan Zhang    private final Icon mIcon;
576abced38e5947c6218ba1a0edcf0d8aa3184a43eFan Zhang    @Flags
586abced38e5947c6218ba1a0edcf0d8aa3184a43eFan Zhang    private final int mFlags;
59723bf37ab2e4b535a6061c02df03fcec57006e37Fan Zhang    private final PendingIntent mPendingIntent;
60723bf37ab2e4b535a6061c02df03fcec57006e37Fan Zhang
61723bf37ab2e4b535a6061c02df03fcec57006e37Fan Zhang    /**
62723bf37ab2e4b535a6061c02df03fcec57006e37Fan Zhang     * Gets the id for the suggestion object.
63723bf37ab2e4b535a6061c02df03fcec57006e37Fan Zhang     */
64723bf37ab2e4b535a6061c02df03fcec57006e37Fan Zhang    public String getId() {
65723bf37ab2e4b535a6061c02df03fcec57006e37Fan Zhang        return mId;
66723bf37ab2e4b535a6061c02df03fcec57006e37Fan Zhang    }
67723bf37ab2e4b535a6061c02df03fcec57006e37Fan Zhang
68723bf37ab2e4b535a6061c02df03fcec57006e37Fan Zhang    /**
69723bf37ab2e4b535a6061c02df03fcec57006e37Fan Zhang     * Title of the suggestion that is shown to the user.
70723bf37ab2e4b535a6061c02df03fcec57006e37Fan Zhang     */
71723bf37ab2e4b535a6061c02df03fcec57006e37Fan Zhang    public CharSequence getTitle() {
72723bf37ab2e4b535a6061c02df03fcec57006e37Fan Zhang        return mTitle;
73723bf37ab2e4b535a6061c02df03fcec57006e37Fan Zhang    }
74723bf37ab2e4b535a6061c02df03fcec57006e37Fan Zhang
75723bf37ab2e4b535a6061c02df03fcec57006e37Fan Zhang    /**
76723bf37ab2e4b535a6061c02df03fcec57006e37Fan Zhang     * Optional summary describing what this suggestion controls.
77723bf37ab2e4b535a6061c02df03fcec57006e37Fan Zhang     */
78723bf37ab2e4b535a6061c02df03fcec57006e37Fan Zhang    public CharSequence getSummary() {
79723bf37ab2e4b535a6061c02df03fcec57006e37Fan Zhang        return mSummary;
80723bf37ab2e4b535a6061c02df03fcec57006e37Fan Zhang    }
81723bf37ab2e4b535a6061c02df03fcec57006e37Fan Zhang
82723bf37ab2e4b535a6061c02df03fcec57006e37Fan Zhang    /**
836abced38e5947c6218ba1a0edcf0d8aa3184a43eFan Zhang     * Optional icon for this suggestion.
846abced38e5947c6218ba1a0edcf0d8aa3184a43eFan Zhang     */
856abced38e5947c6218ba1a0edcf0d8aa3184a43eFan Zhang    public Icon getIcon() {
866abced38e5947c6218ba1a0edcf0d8aa3184a43eFan Zhang        return mIcon;
876abced38e5947c6218ba1a0edcf0d8aa3184a43eFan Zhang    }
886abced38e5947c6218ba1a0edcf0d8aa3184a43eFan Zhang
896abced38e5947c6218ba1a0edcf0d8aa3184a43eFan Zhang    /**
906abced38e5947c6218ba1a0edcf0d8aa3184a43eFan Zhang     * Optional flags for this suggestion. This will influence UI when rendering suggestion in
916abced38e5947c6218ba1a0edcf0d8aa3184a43eFan Zhang     * different style.
926abced38e5947c6218ba1a0edcf0d8aa3184a43eFan Zhang     */
936abced38e5947c6218ba1a0edcf0d8aa3184a43eFan Zhang    @Flags
946abced38e5947c6218ba1a0edcf0d8aa3184a43eFan Zhang    public int getFlags() {
956abced38e5947c6218ba1a0edcf0d8aa3184a43eFan Zhang        return mFlags;
966abced38e5947c6218ba1a0edcf0d8aa3184a43eFan Zhang    }
976abced38e5947c6218ba1a0edcf0d8aa3184a43eFan Zhang
986abced38e5947c6218ba1a0edcf0d8aa3184a43eFan Zhang    /**
99723bf37ab2e4b535a6061c02df03fcec57006e37Fan Zhang     * The Intent to launch when the suggestion is activated.
100723bf37ab2e4b535a6061c02df03fcec57006e37Fan Zhang     */
101723bf37ab2e4b535a6061c02df03fcec57006e37Fan Zhang    public PendingIntent getPendingIntent() {
102723bf37ab2e4b535a6061c02df03fcec57006e37Fan Zhang        return mPendingIntent;
103723bf37ab2e4b535a6061c02df03fcec57006e37Fan Zhang    }
104723bf37ab2e4b535a6061c02df03fcec57006e37Fan Zhang
105723bf37ab2e4b535a6061c02df03fcec57006e37Fan Zhang    private Suggestion(Builder builder) {
106723bf37ab2e4b535a6061c02df03fcec57006e37Fan Zhang        mId = builder.mId;
107723bf37ab2e4b535a6061c02df03fcec57006e37Fan Zhang        mTitle = builder.mTitle;
108723bf37ab2e4b535a6061c02df03fcec57006e37Fan Zhang        mSummary = builder.mSummary;
1096abced38e5947c6218ba1a0edcf0d8aa3184a43eFan Zhang        mIcon = builder.mIcon;
1106abced38e5947c6218ba1a0edcf0d8aa3184a43eFan Zhang        mFlags = builder.mFlags;
111723bf37ab2e4b535a6061c02df03fcec57006e37Fan Zhang        mPendingIntent = builder.mPendingIntent;
112723bf37ab2e4b535a6061c02df03fcec57006e37Fan Zhang    }
113723bf37ab2e4b535a6061c02df03fcec57006e37Fan Zhang
114723bf37ab2e4b535a6061c02df03fcec57006e37Fan Zhang    private Suggestion(Parcel in) {
115723bf37ab2e4b535a6061c02df03fcec57006e37Fan Zhang        mId = in.readString();
116723bf37ab2e4b535a6061c02df03fcec57006e37Fan Zhang        mTitle = in.readCharSequence();
117723bf37ab2e4b535a6061c02df03fcec57006e37Fan Zhang        mSummary = in.readCharSequence();
1186abced38e5947c6218ba1a0edcf0d8aa3184a43eFan Zhang        mIcon = in.readParcelable(Icon.class.getClassLoader());
1196abced38e5947c6218ba1a0edcf0d8aa3184a43eFan Zhang        mFlags = in.readInt();
120723bf37ab2e4b535a6061c02df03fcec57006e37Fan Zhang        mPendingIntent = in.readParcelable(PendingIntent.class.getClassLoader());
121723bf37ab2e4b535a6061c02df03fcec57006e37Fan Zhang    }
122723bf37ab2e4b535a6061c02df03fcec57006e37Fan Zhang
123723bf37ab2e4b535a6061c02df03fcec57006e37Fan Zhang    public static final Creator<Suggestion> CREATOR = new Creator<Suggestion>() {
124723bf37ab2e4b535a6061c02df03fcec57006e37Fan Zhang        @Override
125723bf37ab2e4b535a6061c02df03fcec57006e37Fan Zhang        public Suggestion createFromParcel(Parcel in) {
126723bf37ab2e4b535a6061c02df03fcec57006e37Fan Zhang            return new Suggestion(in);
127723bf37ab2e4b535a6061c02df03fcec57006e37Fan Zhang        }
128723bf37ab2e4b535a6061c02df03fcec57006e37Fan Zhang
129723bf37ab2e4b535a6061c02df03fcec57006e37Fan Zhang        @Override
130723bf37ab2e4b535a6061c02df03fcec57006e37Fan Zhang        public Suggestion[] newArray(int size) {
131723bf37ab2e4b535a6061c02df03fcec57006e37Fan Zhang            return new Suggestion[size];
132723bf37ab2e4b535a6061c02df03fcec57006e37Fan Zhang        }
133723bf37ab2e4b535a6061c02df03fcec57006e37Fan Zhang    };
134723bf37ab2e4b535a6061c02df03fcec57006e37Fan Zhang
135723bf37ab2e4b535a6061c02df03fcec57006e37Fan Zhang    @Override
136723bf37ab2e4b535a6061c02df03fcec57006e37Fan Zhang    public int describeContents() {
137723bf37ab2e4b535a6061c02df03fcec57006e37Fan Zhang        return 0;
138723bf37ab2e4b535a6061c02df03fcec57006e37Fan Zhang    }
139723bf37ab2e4b535a6061c02df03fcec57006e37Fan Zhang
140723bf37ab2e4b535a6061c02df03fcec57006e37Fan Zhang    @Override
141723bf37ab2e4b535a6061c02df03fcec57006e37Fan Zhang    public void writeToParcel(Parcel dest, int flags) {
142723bf37ab2e4b535a6061c02df03fcec57006e37Fan Zhang        dest.writeString(mId);
143723bf37ab2e4b535a6061c02df03fcec57006e37Fan Zhang        dest.writeCharSequence(mTitle);
144723bf37ab2e4b535a6061c02df03fcec57006e37Fan Zhang        dest.writeCharSequence(mSummary);
1456abced38e5947c6218ba1a0edcf0d8aa3184a43eFan Zhang        dest.writeParcelable(mIcon, flags);
1466abced38e5947c6218ba1a0edcf0d8aa3184a43eFan Zhang        dest.writeInt(mFlags);
147723bf37ab2e4b535a6061c02df03fcec57006e37Fan Zhang        dest.writeParcelable(mPendingIntent, flags);
148723bf37ab2e4b535a6061c02df03fcec57006e37Fan Zhang    }
149723bf37ab2e4b535a6061c02df03fcec57006e37Fan Zhang
150723bf37ab2e4b535a6061c02df03fcec57006e37Fan Zhang    /**
151723bf37ab2e4b535a6061c02df03fcec57006e37Fan Zhang     * Builder class for {@link Suggestion}.
152723bf37ab2e4b535a6061c02df03fcec57006e37Fan Zhang     */
153723bf37ab2e4b535a6061c02df03fcec57006e37Fan Zhang    public static class Builder {
154723bf37ab2e4b535a6061c02df03fcec57006e37Fan Zhang        private final String mId;
155723bf37ab2e4b535a6061c02df03fcec57006e37Fan Zhang        private CharSequence mTitle;
156723bf37ab2e4b535a6061c02df03fcec57006e37Fan Zhang        private CharSequence mSummary;
1576abced38e5947c6218ba1a0edcf0d8aa3184a43eFan Zhang        private Icon mIcon;
1586abced38e5947c6218ba1a0edcf0d8aa3184a43eFan Zhang        @Flags
1596abced38e5947c6218ba1a0edcf0d8aa3184a43eFan Zhang        private int mFlags;
160723bf37ab2e4b535a6061c02df03fcec57006e37Fan Zhang        private PendingIntent mPendingIntent;
161723bf37ab2e4b535a6061c02df03fcec57006e37Fan Zhang
162723bf37ab2e4b535a6061c02df03fcec57006e37Fan Zhang        public Builder(String id) {
163723bf37ab2e4b535a6061c02df03fcec57006e37Fan Zhang            if (TextUtils.isEmpty(id)) {
164723bf37ab2e4b535a6061c02df03fcec57006e37Fan Zhang                throw new IllegalArgumentException("Suggestion id cannot be empty");
165723bf37ab2e4b535a6061c02df03fcec57006e37Fan Zhang            }
166723bf37ab2e4b535a6061c02df03fcec57006e37Fan Zhang            mId = id;
167723bf37ab2e4b535a6061c02df03fcec57006e37Fan Zhang        }
168723bf37ab2e4b535a6061c02df03fcec57006e37Fan Zhang
169723bf37ab2e4b535a6061c02df03fcec57006e37Fan Zhang        /**
170723bf37ab2e4b535a6061c02df03fcec57006e37Fan Zhang         * Sets suggestion title
171723bf37ab2e4b535a6061c02df03fcec57006e37Fan Zhang         */
172723bf37ab2e4b535a6061c02df03fcec57006e37Fan Zhang        public Builder setTitle(CharSequence title) {
173723bf37ab2e4b535a6061c02df03fcec57006e37Fan Zhang            mTitle = title;
174723bf37ab2e4b535a6061c02df03fcec57006e37Fan Zhang            return this;
175723bf37ab2e4b535a6061c02df03fcec57006e37Fan Zhang        }
176723bf37ab2e4b535a6061c02df03fcec57006e37Fan Zhang
177723bf37ab2e4b535a6061c02df03fcec57006e37Fan Zhang        /**
178723bf37ab2e4b535a6061c02df03fcec57006e37Fan Zhang         * Sets suggestion summary
179723bf37ab2e4b535a6061c02df03fcec57006e37Fan Zhang         */
180723bf37ab2e4b535a6061c02df03fcec57006e37Fan Zhang        public Builder setSummary(CharSequence summary) {
181723bf37ab2e4b535a6061c02df03fcec57006e37Fan Zhang            mSummary = summary;
182723bf37ab2e4b535a6061c02df03fcec57006e37Fan Zhang            return this;
183723bf37ab2e4b535a6061c02df03fcec57006e37Fan Zhang        }
184723bf37ab2e4b535a6061c02df03fcec57006e37Fan Zhang
185723bf37ab2e4b535a6061c02df03fcec57006e37Fan Zhang        /**
1866abced38e5947c6218ba1a0edcf0d8aa3184a43eFan Zhang         * Sets icon for the suggestion.
1876abced38e5947c6218ba1a0edcf0d8aa3184a43eFan Zhang         */
1886abced38e5947c6218ba1a0edcf0d8aa3184a43eFan Zhang        public Builder setIcon(Icon icon) {
1896abced38e5947c6218ba1a0edcf0d8aa3184a43eFan Zhang            mIcon = icon;
1906abced38e5947c6218ba1a0edcf0d8aa3184a43eFan Zhang            return this;
1916abced38e5947c6218ba1a0edcf0d8aa3184a43eFan Zhang        }
1926abced38e5947c6218ba1a0edcf0d8aa3184a43eFan Zhang
1936abced38e5947c6218ba1a0edcf0d8aa3184a43eFan Zhang        /**
1946abced38e5947c6218ba1a0edcf0d8aa3184a43eFan Zhang         * Sets a UI type for this suggestion. This will influence UI when rendering suggestion in
1956abced38e5947c6218ba1a0edcf0d8aa3184a43eFan Zhang         * different style.
1966abced38e5947c6218ba1a0edcf0d8aa3184a43eFan Zhang         */
1976abced38e5947c6218ba1a0edcf0d8aa3184a43eFan Zhang        public Builder setFlags(@Flags int flags) {
1986abced38e5947c6218ba1a0edcf0d8aa3184a43eFan Zhang            mFlags = flags;
1996abced38e5947c6218ba1a0edcf0d8aa3184a43eFan Zhang            return this;
2006abced38e5947c6218ba1a0edcf0d8aa3184a43eFan Zhang        }
2016abced38e5947c6218ba1a0edcf0d8aa3184a43eFan Zhang
2026abced38e5947c6218ba1a0edcf0d8aa3184a43eFan Zhang        /**
203723bf37ab2e4b535a6061c02df03fcec57006e37Fan Zhang         * Sets suggestion intent
204723bf37ab2e4b535a6061c02df03fcec57006e37Fan Zhang         */
205723bf37ab2e4b535a6061c02df03fcec57006e37Fan Zhang        public Builder setPendingIntent(PendingIntent pendingIntent) {
206723bf37ab2e4b535a6061c02df03fcec57006e37Fan Zhang            mPendingIntent = pendingIntent;
207723bf37ab2e4b535a6061c02df03fcec57006e37Fan Zhang            return this;
208723bf37ab2e4b535a6061c02df03fcec57006e37Fan Zhang        }
209723bf37ab2e4b535a6061c02df03fcec57006e37Fan Zhang
210723bf37ab2e4b535a6061c02df03fcec57006e37Fan Zhang        /**
211723bf37ab2e4b535a6061c02df03fcec57006e37Fan Zhang         * Builds an immutable {@link Suggestion} object.
212723bf37ab2e4b535a6061c02df03fcec57006e37Fan Zhang         */
213723bf37ab2e4b535a6061c02df03fcec57006e37Fan Zhang        public Suggestion build() {
214723bf37ab2e4b535a6061c02df03fcec57006e37Fan Zhang            return new Suggestion(this /* builder */);
215723bf37ab2e4b535a6061c02df03fcec57006e37Fan Zhang        }
216723bf37ab2e4b535a6061c02df03fcec57006e37Fan Zhang    }
217723bf37ab2e4b535a6061c02df03fcec57006e37Fan Zhang}
218