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

Commit de35b636 authored by Griff Hazen's avatar Griff Hazen Committed by Android Git Automerger
Browse files

am 959591e3: Add support for extendable actions to Notification.

* commit '959591e3':
  Add support for extendable actions to Notification.
parents b4606676 959591e3
Loading
Loading
Loading
Loading
+10 −0
Original line number Diff line number Diff line
@@ -3984,6 +3984,7 @@ package android.app {
    ctor public Notification.Action(int, java.lang.CharSequence, android.app.PendingIntent);
    method public android.app.Notification.Action clone();
    method public int describeContents();
    method public android.os.Bundle getExtras();
    method public void writeToParcel(android.os.Parcel, int);
    field public static final android.os.Parcelable.Creator CREATOR;
    field public android.app.PendingIntent actionIntent;
@@ -3991,6 +3992,14 @@ package android.app {
    field public java.lang.CharSequence title;
  }
  public static class Notification.Action.Builder {
    ctor public Notification.Action.Builder(int, java.lang.CharSequence, android.app.PendingIntent);
    ctor public Notification.Action.Builder(android.app.Notification.Action);
    method public android.app.Notification.Action.Builder addExtras(android.os.Bundle);
    method public android.app.Notification.Action build();
    method public android.os.Bundle getExtras();
  }
  public static class Notification.BigPictureStyle extends android.app.Notification.Style {
    ctor public Notification.BigPictureStyle();
    ctor public Notification.BigPictureStyle(android.app.Notification.Builder);
@@ -4011,6 +4020,7 @@ package android.app {
  public static class Notification.Builder {
    ctor public Notification.Builder(android.content.Context);
    method public android.app.Notification.Builder addAction(int, java.lang.CharSequence, android.app.PendingIntent);
    method public android.app.Notification.Builder addAction(android.app.Notification.Action);
    method public android.app.Notification.Builder addExtras(android.os.Bundle);
    method public android.app.Notification build();
    method public android.os.Bundle getExtras();
+125 −19
Original line number Diff line number Diff line
@@ -16,8 +16,6 @@

package android.app;

import com.android.internal.R;

import android.content.Context;
import android.content.Intent;
import android.content.res.Resources;
@@ -37,6 +35,8 @@ import android.view.View;
import android.widget.ProgressBar;
import android.widget.RemoteViews;

import com.android.internal.R;

import java.text.NumberFormat;
import java.util.ArrayList;

@@ -128,7 +128,7 @@ public class Notification implements Parcelable
     * leave it at its default value of 0.
     *
     * @see android.widget.ImageView#setImageLevel
     * @see android.graphics.drawable#setLevel
     * @see android.graphics.drawable.Drawable#setLevel
     */
    public int iconLevel;

@@ -653,10 +653,13 @@ public class Notification implements Parcelable
     * It must include an icon, a label, and a {@link PendingIntent} to be fired when the action is
     * selected by the user.
     * <p>
     * Apps should use {@link Builder#addAction(int, CharSequence, PendingIntent)} to create and
     * attach actions.
     * Apps should use {@link Notification.Builder#addAction(int, CharSequence, PendingIntent)}
     * or {@link Notification.Builder#addAction(Notification.Action)}
     * to attach actions.
     */
    public static class Action implements Parcelable {
        private final Bundle mExtras;

        /**
         * Small icon representing the action.
         */
@@ -671,21 +674,101 @@ public class Notification implements Parcelable
         */
        public PendingIntent actionIntent;

        private Action() { }
        private Action(Parcel in) {
            icon = in.readInt();
            title = TextUtils.CHAR_SEQUENCE_CREATOR.createFromParcel(in);
            if (in.readInt() == 1) {
                actionIntent = PendingIntent.CREATOR.createFromParcel(in);
            }
            mExtras = in.readBundle();
        }
        /**
         * Use {@link Builder#addAction(int, CharSequence, PendingIntent)}.
         * Use {@link Notification.Builder#addAction(int, CharSequence, PendingIntent)}.
         */
        public Action(int icon, CharSequence title, PendingIntent intent) {
            this(icon, title, intent, new Bundle());
        }

        private Action(int icon, CharSequence title, PendingIntent intent, Bundle extras) {
            this.icon = icon;
            this.title = title;
            this.actionIntent = intent;
            this.mExtras = extras != null ? extras : new Bundle();
        }

        /**
         * Get additional metadata carried around with this Action.
         */
        public Bundle getExtras() {
            return mExtras;
        }

        /**
         * Builder class for {@link Action} objects.
         */
        public static class Builder {
            private final int mIcon;
            private final CharSequence mTitle;
            private final PendingIntent mIntent;
            private final Bundle mExtras;

            /**
             * Construct a new builder for {@link Action} object.
             * @param icon icon to show for this action
             * @param title the title of the action
             * @param intent the {@link PendingIntent} to fire when users trigger this action
             */
            public Builder(int icon, CharSequence title, PendingIntent intent) {
                this(icon, title, intent, new Bundle());
            }

            /**
             * Construct a new builder for {@link Action} object using the fields from an
             * {@link Action}.
             * @param action the action to read fields from.
             */
            public Builder(Action action) {
                this(action.icon, action.title, action.actionIntent, new Bundle(action.mExtras));
            }

            private Builder(int icon, CharSequence title, PendingIntent intent, Bundle extras) {
                mIcon = icon;
                mTitle = title;
                mIntent = intent;
                mExtras = extras;
            }

            /**
             * Merge additional metadata into this builder.
             *
             * <p>Values within the Bundle will replace existing extras values in this Builder.
             *
             * @see Notification.Action#extras
             */
            public Builder addExtras(Bundle extras) {
                if (extras != null) {
                    mExtras.putAll(extras);
                }
                return this;
            }

            /**
             * Get the metadata Bundle used by this Builder.
             *
             * <p>The returned Bundle is shared with this Builder.
             */
            public Bundle getExtras() {
                return mExtras;
            }

            /**
             * Combine all of the options that have been set and return a new {@link Action}
             * object.
             * @return the built action
             */
            public Action build() {
                return new Action(mIcon, mTitle, mIntent, mExtras);
            }
        }

        @Override
@@ -693,8 +776,8 @@ public class Notification implements Parcelable
            return new Action(
                this.icon,
                this.title,
                this.actionIntent // safe to alias
            );
                this.actionIntent, // safe to alias
                new Bundle(this.mExtras));
        }
        @Override
        public int describeContents() {
@@ -710,9 +793,10 @@ public class Notification implements Parcelable
            } else {
                out.writeInt(0);
            }
            out.writeBundle(mExtras);
        }
        public static final Parcelable.Creator<Action> CREATOR
        = new Parcelable.Creator<Action>() {
        public static final Parcelable.Creator<Action> CREATOR =
                new Parcelable.Creator<Action>() {
            public Action createFromParcel(Parcel in) {
                return new Action(in);
            }
@@ -1640,11 +1724,13 @@ public class Notification implements Parcelable
         *
         * @see Notification#extras
         */
        public Builder addExtras(Bundle bag) {
        public Builder addExtras(Bundle extras) {
            if (extras != null) {
                if (mExtras == null) {
                mExtras = new Bundle(bag);
                    mExtras = new Bundle(extras);
                } else {
                mExtras.putAll(bag);
                    mExtras.putAll(extras);
                }
            }
            return this;
        }
@@ -1661,8 +1747,8 @@ public class Notification implements Parcelable
         *
         * @see Notification#extras
         */
        public Builder setExtras(Bundle bag) {
            mExtras = bag;
        public Builder setExtras(Bundle extras) {
            mExtras = extras;
            return this;
        }

@@ -1705,6 +1791,26 @@ public class Notification implements Parcelable
            return this;
        }

        /**
         * Add an action to this notification. Actions are typically displayed by
         * the system as a button adjacent to the notification content.
         * <p>
         * Every action must have an icon (32dp square and matching the
         * <a href="{@docRoot}design/style/iconography.html#action-bar">Holo
         * Dark action bar</a> visual style), a textual label, and a {@link PendingIntent}.
         * <p>
         * A notification in its expanded form can display up to 3 actions, from left to right in
         * the order they were added. Actions will not be displayed when the notification is
         * collapsed, however, so be sure that any essential functions may be accessed by the user
         * in some other way (for example, in the Activity pointed to by {@link #contentIntent}).
         *
         * @param action The action to add.
         */
        public Builder addAction(Action action) {
            mActions.add(action);
            return this;
        }

        /**
         * Add a rich notification style to be applied at build time.
         *