Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 6abced38 authored by Fan Zhang's avatar Fan Zhang
Browse files

Add more fields in Suggestion model

- Icon and suggestionType are needed to customize suggestion UI in
  Settings.

Bug: 65065268
Test: instrumentation test
Change-Id: I62ca80128d327a2c2e925ed37529c0255ca37a8a
parent d96b97b8
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -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<android.service.settings.suggestions.Suggestion> 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);
+65 −0
Original line number Diff line number Diff line
@@ -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
         */
+14 −0
Original line number Diff line number Diff line
@@ -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);
    }
}