diff options
author | Dan Sandler <dsandler@android.com> | 2015-07-28 22:49:30 -0400 |
---|---|---|
committer | Dan Sandler <dsandler@android.com> | 2015-07-29 14:18:38 -0400 |
commit | 912282e7319370cb74727895a49c0598fb0a7b02 (patch) | |
tree | 88091bf8bdb158ab5334430e6f2cb719fc6a7555 /core/java/android | |
parent | 68079d54f3690885df9c5bbb691090633f3ef541 (diff) | |
download | frameworks_base-912282e7319370cb74727895a49c0598fb0a7b02.zip frameworks_base-912282e7319370cb74727895a49c0598fb0a7b02.tar.gz frameworks_base-912282e7319370cb74727895a49c0598fb0a7b02.tar.bz2 |
Fully support Icons in Notification actions.
RemoteViews now allows Icons as TextView compound
drawables in RemoteViews, but not yet as public API.
Bug: 22600607
Change-Id: I986a0ce3bede09746f0b121884184679f39a79f5
Diffstat (limited to 'core/java/android')
-rw-r--r-- | core/java/android/app/Notification.java | 6 | ||||
-rw-r--r-- | core/java/android/widget/RemoteViews.java | 128 | ||||
-rw-r--r-- | core/java/android/widget/TextView.java | 3 |
3 files changed, 121 insertions, 16 deletions
diff --git a/core/java/android/app/Notification.java b/core/java/android/app/Notification.java index 0937af6..16fa08c 100644 --- a/core/java/android/app/Notification.java +++ b/core/java/android/app/Notification.java @@ -3171,12 +3171,8 @@ public class Notification implements Parcelable RemoteViews button = new BuilderRemoteViews(mContext.getApplicationInfo(), tombstone ? getActionTombstoneLayoutResource() : getActionLayoutResource()); - // TODO: support Bitmaps in action icons when TextView compound drawables support Icon final Icon ai = action.getIcon(); - final int icon = (ai.getType() == Icon.TYPE_RESOURCE) - ? ai.getResId() - : 0; - button.setTextViewCompoundDrawablesRelative(R.id.action0, icon, 0, 0, 0); + button.setTextViewCompoundDrawablesRelative(R.id.action0, ai, null, null, null); button.setTextViewText(R.id.action0, processLegacyText(action.title)); if (!tombstone) { button.setOnClickPendingIntent(R.id.action0, action.actionIntent); diff --git a/core/java/android/widget/RemoteViews.java b/core/java/android/widget/RemoteViews.java index 74843ee..d158313 100644 --- a/core/java/android/widget/RemoteViews.java +++ b/core/java/android/widget/RemoteViews.java @@ -1412,39 +1412,108 @@ public class RemoteViews implements Parcelable, Filter { public TextViewDrawableAction(int viewId, boolean isRelative, int d1, int d2, int d3, int d4) { this.viewId = viewId; this.isRelative = isRelative; + this.useIcons = false; this.d1 = d1; this.d2 = d2; this.d3 = d3; this.d4 = d4; } + public TextViewDrawableAction(int viewId, boolean isRelative, + Icon i1, Icon i2, Icon i3, Icon i4) { + this.viewId = viewId; + this.isRelative = isRelative; + this.useIcons = true; + this.i1 = i1; + this.i2 = i2; + this.i3 = i3; + this.i4 = i4; + } + public TextViewDrawableAction(Parcel parcel) { viewId = parcel.readInt(); isRelative = (parcel.readInt() != 0); - d1 = parcel.readInt(); - d2 = parcel.readInt(); - d3 = parcel.readInt(); - d4 = parcel.readInt(); + useIcons = (parcel.readInt() != 0); + if (useIcons) { + if (parcel.readInt() != 0) { + i1 = Icon.CREATOR.createFromParcel(parcel); + } + if (parcel.readInt() != 0) { + i2 = Icon.CREATOR.createFromParcel(parcel); + } + if (parcel.readInt() != 0) { + i3 = Icon.CREATOR.createFromParcel(parcel); + } + if (parcel.readInt() != 0) { + i4 = Icon.CREATOR.createFromParcel(parcel); + } + } else { + d1 = parcel.readInt(); + d2 = parcel.readInt(); + d3 = parcel.readInt(); + d4 = parcel.readInt(); + } } public void writeToParcel(Parcel dest, int flags) { dest.writeInt(TAG); dest.writeInt(viewId); dest.writeInt(isRelative ? 1 : 0); - dest.writeInt(d1); - dest.writeInt(d2); - dest.writeInt(d3); - dest.writeInt(d4); + dest.writeInt(useIcons ? 1 : 0); + if (useIcons) { + if (i1 != null) { + dest.writeInt(1); + i1.writeToParcel(dest, 0); + } else { + dest.writeInt(0); + } + if (i2 != null) { + dest.writeInt(1); + i2.writeToParcel(dest, 0); + } else { + dest.writeInt(0); + } + if (i3 != null) { + dest.writeInt(1); + i3.writeToParcel(dest, 0); + } else { + dest.writeInt(0); + } + if (i4 != null) { + dest.writeInt(1); + i4.writeToParcel(dest, 0); + } else { + dest.writeInt(0); + } + } else { + dest.writeInt(d1); + dest.writeInt(d2); + dest.writeInt(d3); + dest.writeInt(d4); + } } @Override public void apply(View root, ViewGroup rootParent, OnClickHandler handler) { final TextView target = (TextView) root.findViewById(viewId); if (target == null) return; - if (isRelative) { - target.setCompoundDrawablesRelativeWithIntrinsicBounds(d1, d2, d3, d4); + if (useIcons) { + final Context ctx = target.getContext(); + final Drawable id1 = i1 == null ? null : i1.loadDrawable(ctx); + final Drawable id2 = i2 == null ? null : i2.loadDrawable(ctx); + final Drawable id3 = i3 == null ? null : i3.loadDrawable(ctx); + final Drawable id4 = i4 == null ? null : i4.loadDrawable(ctx); + if (isRelative) { + target.setCompoundDrawablesRelativeWithIntrinsicBounds(id1, id2, id3, id4); + } else { + target.setCompoundDrawablesWithIntrinsicBounds(id1, id2, id3, id4); + } } else { - target.setCompoundDrawablesWithIntrinsicBounds(d1, d2, d3, d4); + if (isRelative) { + target.setCompoundDrawablesRelativeWithIntrinsicBounds(d1, d2, d3, d4); + } else { + target.setCompoundDrawablesWithIntrinsicBounds(d1, d2, d3, d4); + } } } @@ -1453,7 +1522,9 @@ public class RemoteViews implements Parcelable, Filter { } boolean isRelative = false; + boolean useIcons = false; int d1, d2, d3, d4; + Icon i1, i2, i3, i4; public final static int TAG = 11; } @@ -2067,6 +2138,41 @@ public class RemoteViews implements Parcelable, Filter { } /** + * Equivalent to calling {@link + * TextView#setCompoundDrawablesWithIntrinsicBounds(Drawable, Drawable, Drawable, Drawable)} + * using the drawables yielded by {@link Icon#loadDrawable(Context)}. + * + * @param viewId The id of the view whose text should change + * @param left an Icon to place to the left of the text, or 0 + * @param top an Icon to place above the text, or 0 + * @param right an Icon to place to the right of the text, or 0 + * @param bottom an Icon to place below the text, or 0 + * + * @hide + */ + public void setTextViewCompoundDrawables(int viewId, Icon left, Icon top, Icon right, Icon bottom) { + addAction(new TextViewDrawableAction(viewId, false, left, top, right, bottom)); + } + + /** + * Equivalent to calling {@link + * TextView#setCompoundDrawablesRelativeWithIntrinsicBounds(Drawable, Drawable, Drawable, Drawable)} + * using the drawables yielded by {@link Icon#loadDrawable(Context)}. + * + * @param viewId The id of the view whose text should change + * @param start an Icon to place before the text (relative to the + * layout direction), or 0 + * @param top an Icon to place above the text, or 0 + * @param end an Icon to place after the text, or 0 + * @param bottom an Icon to place below the text, or 0 + * + * @hide + */ + public void setTextViewCompoundDrawablesRelative(int viewId, Icon start, Icon top, Icon end, Icon bottom) { + addAction(new TextViewDrawableAction(viewId, true, start, top, end, bottom)); + } + + /** * Equivalent to calling ImageView.setImageResource * * @param viewId The id of the view whose drawable should change diff --git a/core/java/android/widget/TextView.java b/core/java/android/widget/TextView.java index 131ba46..a1462c4 100644 --- a/core/java/android/widget/TextView.java +++ b/core/java/android/widget/TextView.java @@ -2270,6 +2270,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener * @attr ref android.R.styleable#TextView_drawableRight * @attr ref android.R.styleable#TextView_drawableBottom */ + @android.view.RemotableViewMethod public void setCompoundDrawablesWithIntrinsicBounds(@Nullable Drawable left, @Nullable Drawable top, @Nullable Drawable right, @Nullable Drawable bottom) { @@ -2302,6 +2303,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener * @attr ref android.R.styleable#TextView_drawableEnd * @attr ref android.R.styleable#TextView_drawableBottom */ + @android.view.RemotableViewMethod public void setCompoundDrawablesRelative(@Nullable Drawable start, @Nullable Drawable top, @Nullable Drawable end, @Nullable Drawable bottom) { Drawables dr = mDrawables; @@ -2472,6 +2474,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener * @attr ref android.R.styleable#TextView_drawableEnd * @attr ref android.R.styleable#TextView_drawableBottom */ + @android.view.RemotableViewMethod public void setCompoundDrawablesRelativeWithIntrinsicBounds(@Nullable Drawable start, @Nullable Drawable top, @Nullable Drawable end, @Nullable Drawable bottom) { |