From fed72bf1991c7e35279a8c3d26caa7ff6c8bc7a1 Mon Sep 17 00:00:00 2001 From: Jason Monk Date: Fri, 8 Dec 2017 18:19:32 -0500 Subject: [PATCH] Add Slice.Builder#addBundle Its for support lib expansion in the future, not for dev use. Bug: 68378561 Test: atest cts/tests/tests/slice Change-Id: Ifc73e56c391bd4abed3b8db3c597d7dc794c1a3c --- api/current.txt | 4 +++ core/java/android/app/slice/Slice.java | 26 +++++++++++++++++ core/java/android/app/slice/SliceItem.java | 34 +++++++++++++--------- 3 files changed, 50 insertions(+), 14 deletions(-) diff --git a/api/current.txt b/api/current.txt index 51bf811a413f9..097ee6cb548bc 100644 --- a/api/current.txt +++ b/api/current.txt @@ -7027,6 +7027,8 @@ package android.app.slice { ctor public Slice.Builder(android.app.slice.Slice.Builder); method public android.app.slice.Slice.Builder addAction(android.app.PendingIntent, android.app.slice.Slice); method public android.app.slice.Slice.Builder addAction(android.app.PendingIntent, android.app.slice.Slice, java.lang.String); + method public android.app.slice.Slice.Builder addBundle(android.os.Bundle, java.lang.String, java.lang.String...); + method public android.app.slice.Slice.Builder addBundle(android.os.Bundle, java.lang.String, java.util.List); method public deprecated android.app.slice.Slice.Builder addColor(int, java.lang.String, java.lang.String...); method public deprecated android.app.slice.Slice.Builder addColor(int, java.lang.String, java.util.List); method public android.app.slice.Slice.Builder addHints(java.lang.String...); @@ -7050,6 +7052,7 @@ package android.app.slice { public final class SliceItem implements android.os.Parcelable { method public int describeContents(); method public android.app.PendingIntent getAction(); + method public android.os.Bundle getBundle(); method public deprecated int getColor(); method public java.lang.String getFormat(); method public java.util.List getHints(); @@ -7064,6 +7067,7 @@ package android.app.slice { method public void writeToParcel(android.os.Parcel, int); field public static final android.os.Parcelable.Creator CREATOR; field public static final java.lang.String FORMAT_ACTION = "action"; + field public static final java.lang.String FORMAT_BUNDLE = "bundle"; field public static final deprecated java.lang.String FORMAT_COLOR = "color"; field public static final java.lang.String FORMAT_IMAGE = "image"; field public static final java.lang.String FORMAT_INT = "int"; diff --git a/core/java/android/app/slice/Slice.java b/core/java/android/app/slice/Slice.java index 9b3b4624f42e2..b13067ee97e39 100644 --- a/core/java/android/app/slice/Slice.java +++ b/core/java/android/app/slice/Slice.java @@ -462,6 +462,32 @@ public final class Slice implements Parcelable { return addTimestamp(time, subType, hints.toArray(new String[hints.size()])); } + /** + * Add a bundle to the slice being constructed. + *

Expected to be used for support library extension, should not be used for general + * development + * @param subType Optional template-specific type information + * @see {@link SliceItem#getSubType()} + */ + public Slice.Builder addBundle(Bundle bundle, @Nullable String subType, + @SliceHint String... hints) { + mItems.add(new SliceItem(bundle, SliceItem.FORMAT_BUNDLE, subType, + hints)); + return this; + } + + /** + * Add a bundle to the slice being constructed. + *

Expected to be used for support library extension, should not be used for general + * development + * @param subType Optional template-specific type information + * @see {@link SliceItem#getSubType()} + */ + public Slice.Builder addBundle(Bundle bundle, @Nullable String subType, + @SliceHint List hints) { + return addBundle(bundle, subType, hints.toArray(new String[hints.size()])); + } + /** * Construct the slice. */ diff --git a/core/java/android/app/slice/SliceItem.java b/core/java/android/app/slice/SliceItem.java index 5d04c3e813b1d..bcfd413fb8232 100644 --- a/core/java/android/app/slice/SliceItem.java +++ b/core/java/android/app/slice/SliceItem.java @@ -21,6 +21,7 @@ import android.annotation.StringDef; import android.app.PendingIntent; import android.app.RemoteInput; import android.graphics.drawable.Icon; +import android.os.Bundle; import android.os.Parcel; import android.os.Parcelable; import android.text.TextUtils; @@ -47,6 +48,7 @@ import java.util.List; *

  • {@link #FORMAT_INT}
  • *
  • {@link #FORMAT_TIMESTAMP}
  • *
  • {@link #FORMAT_REMOTE_INPUT}
  • + *
  • {@link #FORMAT_BUNDLE}
  • * * The hints that a {@link SliceItem} are a set of strings which annotate * the content. The hints that are guaranteed to be understood by the system @@ -54,6 +56,8 @@ import java.util.List; */ public final class SliceItem implements Parcelable { + private static final String TAG = "SliceItem"; + /** * @hide */ @@ -65,6 +69,7 @@ public final class SliceItem implements Parcelable { FORMAT_INT, FORMAT_TIMESTAMP, FORMAT_REMOTE_INPUT, + FORMAT_BUNDLE, }) @Retention(RetentionPolicy.SOURCE) public @interface SliceType {} @@ -105,6 +110,10 @@ public final class SliceItem implements Parcelable { * A {@link SliceItem} that contains a {@link RemoteInput}. */ public static final String FORMAT_REMOTE_INPUT = "input"; + /** + * A {@link SliceItem} that contains a {@link Bundle}. + */ + public static final String FORMAT_BUNDLE = "bundle"; /** * @hide @@ -142,20 +151,6 @@ public final class SliceItem implements Parcelable { return Arrays.asList(mHints); } - /** - * @hide - */ - public void addHint(@Slice.SliceHint String hint) { - mHints = ArrayUtils.appendElement(String.class, mHints, hint); - } - - /** - * @hide - */ - public void removeHint(String hint) { - ArrayUtils.removeElement(String.class, mHints, hint); - } - /** * Get the format of this SliceItem. *

    @@ -167,6 +162,7 @@ public final class SliceItem implements Parcelable { *

  • {@link #FORMAT_INT}
  • *
  • {@link #FORMAT_TIMESTAMP}
  • *
  • {@link #FORMAT_REMOTE_INPUT}
  • + *
  • {@link #FORMAT_BUNDLE}
  • * @see #getSubType() () */ public String getFormat() { @@ -192,6 +188,13 @@ public final class SliceItem implements Parcelable { return (CharSequence) mObj; } + /** + * @return The parcelable held by this {@link #FORMAT_BUNDLE} SliceItem + */ + public Bundle getBundle() { + return (Bundle) mObj; + } + /** * @return The icon held by this {@link #FORMAT_IMAGE} SliceItem */ @@ -321,6 +324,7 @@ public final class SliceItem implements Parcelable { case FORMAT_SLICE: case FORMAT_IMAGE: case FORMAT_REMOTE_INPUT: + case FORMAT_BUNDLE: ((Parcelable) obj).writeToParcel(dest, flags); break; case FORMAT_ACTION: @@ -357,6 +361,8 @@ public final class SliceItem implements Parcelable { return in.readLong(); case FORMAT_REMOTE_INPUT: return RemoteInput.CREATOR.createFromParcel(in); + case FORMAT_BUNDLE: + return Bundle.CREATOR.createFromParcel(in); } throw new RuntimeException("Unsupported type " + type); }