diff options
Diffstat (limited to 'core/java/android')
| -rw-r--r-- | core/java/android/app/Notification.java | 148 | ||||
| -rw-r--r-- | core/java/android/os/Build.java | 11 | ||||
| -rw-r--r-- | core/java/android/service/notification/NotificationListenerService.java | 3 |
3 files changed, 139 insertions, 23 deletions
diff --git a/core/java/android/app/Notification.java b/core/java/android/app/Notification.java index 298022e..8d263fd 100644 --- a/core/java/android/app/Notification.java +++ b/core/java/android/app/Notification.java @@ -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. */ @@ -670,22 +673,102 @@ public class Notification implements Parcelable * may be rendered in a disabled presentation by the system UI. */ 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); } @@ -1260,7 +1344,7 @@ public class Notification implements Parcelable /** * Add a timestamp pertaining to the notification (usually the time the event occurred). * It will be shown in the notification content view by default; use - * {@link Builder#setShowWhen(boolean) setShowWhen} to control this. + * {@link #setShowWhen(boolean) setShowWhen} to control this. * * @see Notification#when */ @@ -1270,7 +1354,7 @@ public class Notification implements Parcelable } /** - * Control whether the timestamp set with {@link Builder#setWhen(long) setWhen} is shown + * Control whether the timestamp set with {@link #setWhen(long) setWhen} is shown * in the content view. */ public Builder setShowWhen(boolean show) { @@ -1640,11 +1724,13 @@ public class Notification implements Parcelable * * @see Notification#extras */ - public Builder addExtras(Bundle bag) { - if (mExtras == null) { - mExtras = new Bundle(bag); - } else { - mExtras.putAll(bag); + public Builder addExtras(Bundle extras) { + if (extras != null) { + if (mExtras == null) { + mExtras = new Bundle(extras); + } else { + 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; } @@ -1706,6 +1792,26 @@ public class Notification implements Parcelable } /** + * 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. * * @param style Object responsible for modifying the notification style. diff --git a/core/java/android/os/Build.java b/core/java/android/os/Build.java index bc5ea72..51f32b0 100644 --- a/core/java/android/os/Build.java +++ b/core/java/android/os/Build.java @@ -469,9 +469,16 @@ public class Build { public static final int KITKAT = 19; /** - * Android 4.5: KitKat for watches, snacks on the run. + * Android 4.4W: KitKat for watches, snacks on the run. + * + * <p>Applications targeting this or a later release will get these + * new changes in behavior:</p> + * <ul> + * <li>{@link android.app.AlertDialog} might not have a default background if the theme does + * not specify one.</li> + * </ul> */ - public static final int KITKAT_WATCH = CUR_DEVELOPMENT; // STOPSHIP: update API level + public static final int KITKAT_WATCH = 20; } /** The type of build, like "user" or "eng". */ diff --git a/core/java/android/service/notification/NotificationListenerService.java b/core/java/android/service/notification/NotificationListenerService.java index 8eaee29..eb2de2c 100644 --- a/core/java/android/service/notification/NotificationListenerService.java +++ b/core/java/android/service/notification/NotificationListenerService.java @@ -89,6 +89,7 @@ public abstract class NotificationListenerService extends Service { * at this time. * * @param notificationKeys The notification keys for all currently posted notifications. + * @hide */ public void onListenerConnected(String[] notificationKeys) { // optional @@ -155,6 +156,7 @@ public abstract class NotificationListenerService extends Service { * @param keys Notifications to dismiss, or {@code null} to dismiss all. * * {@see #cancelNotification(String, String, int)} + * @hide */ public final void cancelNotifications(String[] keys) { if (!isBound()) return; @@ -181,6 +183,7 @@ public abstract class NotificationListenerService extends Service { * * @param keys A specific list of notification keys, or {@code null} for all. * @return An array of active notifications. + * @hide */ public StatusBarNotification[] getActiveNotifications(String[] keys) { if (!isBound()) return null; |
