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