diff --git a/api/system-current.txt b/api/system-current.txt index 663cd26b86d53..4583eb79191eb 100644 --- a/api/system-current.txt +++ b/api/system-current.txt @@ -40890,17 +40890,22 @@ package android.service.settings.suggestions { public final class Suggestion implements android.os.Parcelable { method public int describeContents(); + method public int getFlags(); + method public android.graphics.drawable.Icon getIcon(); method public java.lang.String getId(); method public android.app.PendingIntent getPendingIntent(); method public java.lang.CharSequence getSummary(); method public java.lang.CharSequence getTitle(); method public void writeToParcel(android.os.Parcel, int); field public static final android.os.Parcelable.Creator CREATOR; + field public static final int FLAG_HAS_BUTTON = 1; // 0x1 } public static class Suggestion.Builder { ctor public Suggestion.Builder(java.lang.String); method public android.service.settings.suggestions.Suggestion build(); + method public android.service.settings.suggestions.Suggestion.Builder setFlags(int); + method public android.service.settings.suggestions.Suggestion.Builder setIcon(android.graphics.drawable.Icon); method public android.service.settings.suggestions.Suggestion.Builder setPendingIntent(android.app.PendingIntent); method public android.service.settings.suggestions.Suggestion.Builder setSummary(java.lang.CharSequence); method public android.service.settings.suggestions.Suggestion.Builder setTitle(java.lang.CharSequence); diff --git a/core/java/android/service/settings/suggestions/Suggestion.java b/core/java/android/service/settings/suggestions/Suggestion.java index f27cc2eb04121..cfeb7fcead389 100644 --- a/core/java/android/service/settings/suggestions/Suggestion.java +++ b/core/java/android/service/settings/suggestions/Suggestion.java @@ -16,12 +16,17 @@ package android.service.settings.suggestions; +import android.annotation.IntDef; import android.annotation.SystemApi; import android.app.PendingIntent; +import android.graphics.drawable.Icon; import android.os.Parcel; import android.os.Parcelable; import android.text.TextUtils; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; + /** * Data object that has information about a device suggestion. * @@ -30,9 +35,27 @@ import android.text.TextUtils; @SystemApi public final class Suggestion implements Parcelable { + /** + * @hide + */ + @IntDef(flag = true, value = { + FLAG_HAS_BUTTON, + }) + @Retention(RetentionPolicy.SOURCE) + public @interface Flags { + } + + /** + * Flag for suggestion type with a single button + */ + public static final int FLAG_HAS_BUTTON = 1 << 0; + private final String mId; private final CharSequence mTitle; private final CharSequence mSummary; + private final Icon mIcon; + @Flags + private final int mFlags; private final PendingIntent mPendingIntent; /** @@ -56,6 +79,22 @@ public final class Suggestion implements Parcelable { return mSummary; } + /** + * Optional icon for this suggestion. + */ + public Icon getIcon() { + return mIcon; + } + + /** + * Optional flags for this suggestion. This will influence UI when rendering suggestion in + * different style. + */ + @Flags + public int getFlags() { + return mFlags; + } + /** * The Intent to launch when the suggestion is activated. */ @@ -67,6 +106,8 @@ public final class Suggestion implements Parcelable { mId = builder.mId; mTitle = builder.mTitle; mSummary = builder.mSummary; + mIcon = builder.mIcon; + mFlags = builder.mFlags; mPendingIntent = builder.mPendingIntent; } @@ -74,6 +115,8 @@ public final class Suggestion implements Parcelable { mId = in.readString(); mTitle = in.readCharSequence(); mSummary = in.readCharSequence(); + mIcon = in.readParcelable(Icon.class.getClassLoader()); + mFlags = in.readInt(); mPendingIntent = in.readParcelable(PendingIntent.class.getClassLoader()); } @@ -99,6 +142,8 @@ public final class Suggestion implements Parcelable { dest.writeString(mId); dest.writeCharSequence(mTitle); dest.writeCharSequence(mSummary); + dest.writeParcelable(mIcon, flags); + dest.writeInt(mFlags); dest.writeParcelable(mPendingIntent, flags); } @@ -109,6 +154,9 @@ public final class Suggestion implements Parcelable { private final String mId; private CharSequence mTitle; private CharSequence mSummary; + private Icon mIcon; + @Flags + private int mFlags; private PendingIntent mPendingIntent; public Builder(String id) { @@ -134,6 +182,23 @@ public final class Suggestion implements Parcelable { return this; } + /** + * Sets icon for the suggestion. + */ + public Builder setIcon(Icon icon) { + mIcon = icon; + return this; + } + + /** + * Sets a UI type for this suggestion. This will influence UI when rendering suggestion in + * different style. + */ + public Builder setFlags(@Flags int flags) { + mFlags = flags; + return this; + } + /** * Sets suggestion intent */ diff --git a/core/tests/coretests/src/android/service/settings/suggestions/SuggestionTest.java b/core/tests/coretests/src/android/service/settings/suggestions/SuggestionTest.java index 5548e48ffddab..b0ec55d946e2d 100644 --- a/core/tests/coretests/src/android/service/settings/suggestions/SuggestionTest.java +++ b/core/tests/coretests/src/android/service/settings/suggestions/SuggestionTest.java @@ -21,6 +21,8 @@ import static com.google.common.truth.Truth.assertThat; import android.app.PendingIntent; import android.content.Context; import android.content.Intent; +import android.graphics.Bitmap; +import android.graphics.drawable.Icon; import android.os.Parcel; import android.support.test.InstrumentationRegistry; import android.support.test.filters.SmallTest; @@ -36,6 +38,8 @@ public class SuggestionTest { private static final String TEST_ID = "id"; private static final String TEST_TITLE = "title"; private static final String TEST_SUMMARY = "summary"; + + private Icon mIcon; private PendingIntent mTestIntent; @@ -44,6 +48,7 @@ public class SuggestionTest { final Context context = InstrumentationRegistry.getContext(); mTestIntent = PendingIntent.getActivity(context, 0 /* requestCode */, new Intent(), 0 /* flags */); + mIcon = Icon.createWithBitmap(Bitmap.createBitmap(100, 100, Bitmap.Config.ARGB_8888)); } @Test @@ -51,12 +56,15 @@ public class SuggestionTest { final Suggestion suggestion = new Suggestion.Builder(TEST_ID) .setTitle(TEST_TITLE) .setSummary(TEST_SUMMARY) + .setIcon(mIcon) .setPendingIntent(mTestIntent) .build(); assertThat(suggestion.getId()).isEqualTo(TEST_ID); assertThat(suggestion.getTitle()).isEqualTo(TEST_TITLE); assertThat(suggestion.getSummary()).isEqualTo(TEST_SUMMARY); + assertThat(suggestion.getIcon()).isEqualTo(mIcon); + assertThat(suggestion.getFlags()).isEqualTo(0); assertThat(suggestion.getPendingIntent()).isEqualTo(mTestIntent); } @@ -66,6 +74,7 @@ public class SuggestionTest { .setTitle(TEST_TITLE) .setSummary(TEST_SUMMARY) .setPendingIntent(mTestIntent) + .setIcon(mIcon) .build(); } @@ -75,6 +84,8 @@ public class SuggestionTest { final Suggestion oldSuggestion = new Suggestion.Builder(TEST_ID) .setTitle(TEST_TITLE) .setSummary(TEST_SUMMARY) + .setIcon(mIcon) + .setFlags(Suggestion.FLAG_HAS_BUTTON) .setPendingIntent(mTestIntent) .build(); @@ -85,6 +96,9 @@ public class SuggestionTest { assertThat(newSuggestion.getId()).isEqualTo(TEST_ID); assertThat(newSuggestion.getTitle()).isEqualTo(TEST_TITLE); assertThat(newSuggestion.getSummary()).isEqualTo(TEST_SUMMARY); + assertThat(newSuggestion.getIcon().toString()).isEqualTo(mIcon.toString()); + assertThat(newSuggestion.getFlags()) + .isEqualTo(Suggestion.FLAG_HAS_BUTTON); assertThat(newSuggestion.getPendingIntent()).isEqualTo(mTestIntent); } }