Loading core/java/android/app/Notification.java +104 −23 Original line number Diff line number Diff line Loading @@ -427,22 +427,48 @@ public class Notification implements Parcelable public String[] kind; /** * Extra key for people values (type TBD). * * Additional semantic data to be carried around with this Notification. * @hide */ public static final String EXTRA_PEOPLE = "android.people"; public Bundle extras = new Bundle(); // extras keys for Builder inputs /** @hide */ public static final String EXTRA_TITLE = "android.title"; /** @hide */ public static final String EXTRA_TITLE_BIG = EXTRA_TITLE + ".big"; /** @hide */ public static final String EXTRA_TEXT = "android.text"; /** @hide */ public static final String EXTRA_SUBTEXT = "android.subtext"; public static final String EXTRA_SUB_TEXT = "android.subText"; /** @hide */ public static final String EXTRA_INFO_TEXT = "android.infoText"; /** @hide */ public static final String EXTRA_SUMMARY_TEXT = "android.summaryText"; /** @hide */ public static final String EXTRA_SMALL_ICON = "android.icon"; /** @hide */ public static final String EXTRA_LARGE_ICON = "android.largeIcon"; /** @hide */ public static final String EXTRA_LARGE_ICON_BIG = EXTRA_LARGE_ICON + ".big"; /** @hide */ public static final String EXTRA_PROGRESS = "android.progress"; /** @hide */ public static final String EXTRA_PROGRESS_MAX = "android.progressMax"; /** @hide */ public static final String EXTRA_PROGRESS_INDETERMINATE = "android.progressIndeterminate"; /** @hide */ public static final String EXTRA_SHOW_CHRONOMETER = "android.showChronometer"; /** @hide */ public static final String EXTRA_SHOW_WHEN = "android.showWhen"; /** @hide from BigPictureStyle */ public static final String EXTRA_PICTURE = "android.picture"; /** @hide from InboxStyle */ public static final String EXTRA_TEXT_LINES = "android.textLines"; // extras keys for other interesting pieces of information /** @hide */ public Bundle extras = new Bundle(); public static final String EXTRA_PEOPLE = "android.people"; /** * Structure to encapsulate an "action", including title and icon, that can be attached to a Notification. Loading Loading @@ -1621,16 +1647,26 @@ public class Notification implements Parcelable mActions.toArray(n.actions); } n.extras = mExtras != null ? new Bundle(mExtras) : new Bundle(); return n; } /** * Capture, in the provided bundle, semantic information used in the construction of * this Notification object. * @hide */ public void addExtras(Bundle extras) { // Store original information used in the construction of this object n.extras.putCharSequence(EXTRA_TITLE, mContentTitle); n.extras.putCharSequence(EXTRA_TEXT, mContentText); n.extras.putCharSequence(EXTRA_SUBTEXT, mSubText); n.extras.putInt(EXTRA_SMALL_ICON, mSmallIcon); //n.extras.putByteArray(EXTRA_LARGE_ICON, ... return n; extras.putCharSequence(EXTRA_TITLE, mContentTitle); extras.putCharSequence(EXTRA_TEXT, mContentText); extras.putCharSequence(EXTRA_SUB_TEXT, mSubText); extras.putCharSequence(EXTRA_INFO_TEXT, mContentInfo); extras.putInt(EXTRA_SMALL_ICON, mSmallIcon); extras.putInt(EXTRA_PROGRESS, mProgress); extras.putInt(EXTRA_PROGRESS_MAX, mProgressMax); extras.putBoolean(EXTRA_PROGRESS_INDETERMINATE, mProgressIndeterminate); extras.putBoolean(EXTRA_SHOW_CHRONOMETER, mUseChronometer); extras.putBoolean(EXTRA_SHOW_WHEN, mShowWhen); } /** Loading @@ -1646,11 +1682,22 @@ public class Notification implements Parcelable * object. */ public Notification build() { final Notification n; if (mStyle != null) { return mStyle.build(); n = mStyle.build(); } else { return buildUnstyled(); n = buildUnstyled(); } n.extras = mExtras != null ? new Bundle(mExtras) : new Bundle(); addExtras(n.extras); if (mStyle != null) { mStyle.addExtras(n.extras); } return n; } /** Loading @@ -1664,7 +1711,6 @@ public class Notification implements Parcelable } } /** * An object that can apply a rich notification style to a {@link Notification.Builder} * object. Loading Loading @@ -1739,6 +1785,18 @@ public class Notification implements Parcelable return contentView; } /** * @hide */ public void addExtras(Bundle extras) { if (mSummaryTextSet) { extras.putCharSequence(EXTRA_SUMMARY_TEXT, mSummaryText); } if (mBigContentTitle != null) { extras.putCharSequence(EXTRA_TITLE_BIG, mBigContentTitle); } } public abstract Notification build(); } Loading Loading @@ -1813,6 +1871,18 @@ public class Notification implements Parcelable return contentView; } /** * @hide */ public void addExtras(Bundle extras) { super.addExtras(extras); if (mBigLargeIconSet) { extras.putParcelable(EXTRA_LARGE_ICON_BIG, mBigLargeIcon); } extras.putParcelable(EXTRA_PICTURE, mPicture); } @Override public Notification build() { checkBuilder(); Loading Loading @@ -1878,6 +1948,15 @@ public class Notification implements Parcelable return this; } /** * @hide */ public void addExtras(Bundle extras) { super.addExtras(extras); extras.putCharSequence(EXTRA_TEXT, mBigText); } private RemoteViews makeBigContentView() { // Remove the content text so line3 only shows if you have a summary final boolean hadThreeLines = (mBuilder.mContentText != null && mBuilder.mSubText != null); Loading Loading @@ -1964,6 +2043,15 @@ public class Notification implements Parcelable return this; } /** * @hide */ public void addExtras(Bundle extras) { super.addExtras(extras); CharSequence[] a = new CharSequence[mTexts.size()]; extras.putCharSequenceArray(EXTRA_TEXT_LINES, mTexts.toArray(a)); } private RemoteViews makeBigContentView() { // Remove the content text so line3 disappears unless you have a summary mBuilder.mContentText = null; Loading Loading @@ -2005,13 +2093,6 @@ public class Notification implements Parcelable Notification wip = mBuilder.buildUnstyled(); wip.bigContentView = makeBigContentView(); StringBuilder builder = new StringBuilder(); for (CharSequence str : mTexts) { builder.append(str); builder.append("\n"); } wip.extras.putCharSequence(EXTRA_TEXT, builder); return wip; } } Loading services/java/com/android/server/NotificationManagerService.java +51 −10 Original line number Diff line number Diff line Loading @@ -43,6 +43,7 @@ import android.content.pm.PackageManager; import android.content.pm.PackageManager.NameNotFoundException; import android.content.res.Resources; import android.database.ContentObserver; import android.graphics.Bitmap; import android.media.AudioManager; import android.media.IAudioService; import android.media.IRingtonePlayer; Loading Loading @@ -81,6 +82,7 @@ import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.PrintWriter; import java.lang.reflect.Array; import java.util.ArrayDeque; import java.util.ArrayList; import java.util.Arrays; Loading Loading @@ -815,22 +817,61 @@ public class NotificationManagerService extends INotificationManager.Stub void dump(PrintWriter pw, String prefix, Context baseContext) { final Notification notification = sbn.notification; pw.println(prefix + this); pw.println(prefix + " uid=" + sbn.uid + " userId=" + sbn.getUserId()); pw.println(prefix + " icon=0x" + Integer.toHexString(notification.icon) + " / " + idDebugString(baseContext, this.sbn.pkg, notification.icon)); pw.println(prefix + " pri=" + notification.priority); pw.println(prefix + " score=" + this.sbn.score); + " / " + idDebugString(baseContext, sbn.pkg, notification.icon)); pw.println(prefix + " pri=" + notification.priority + " score=" + sbn.score); pw.println(prefix + " contentIntent=" + notification.contentIntent); pw.println(prefix + " deleteIntent=" + notification.deleteIntent); pw.println(prefix + " tickerText=" + notification.tickerText); pw.println(prefix + " contentView=" + notification.contentView); pw.println(prefix + " uid=" + this.sbn.uid + " userId=" + this.sbn.getUserId()); pw.println(prefix + " defaults=0x" + Integer.toHexString(notification.defaults)); pw.println(prefix + " flags=0x" + Integer.toHexString(notification.flags)); pw.println(prefix + String.format(" defaults=0x%08x flags=0x%08x", notification.defaults, notification.flags)); pw.println(prefix + " sound=" + notification.sound); pw.println(prefix + " vibrate=" + Arrays.toString(notification.vibrate)); pw.println(prefix + " ledARGB=0x" + Integer.toHexString(notification.ledARGB) + " ledOnMS=" + notification.ledOnMS + " ledOffMS=" + notification.ledOffMS); pw.println(prefix + String.format(" led=0x%08x onMs=%d offMs=%d", notification.ledARGB, notification.ledOnMS, notification.ledOffMS)); if (notification.actions != null && notification.actions.length > 0) { pw.println(prefix + " actions={"); final int N = notification.actions.length; for (int i=0; i<N; i++) { final Notification.Action action = notification.actions[i]; pw.println(String.format("%s [%d] \"%s\" -> %s", prefix, i, action.title, action.actionIntent.toString() )); } pw.println(prefix + " }"); } if (notification.extras != null && notification.extras.size() > 0) { pw.println(prefix + " extras={"); for (String key : notification.extras.keySet()) { pw.print(prefix + " " + key + "="); Object val = notification.extras.get(key); if (val == null) { pw.println("null"); } else { pw.print(val.toString()); if (val instanceof Bitmap) { pw.print(String.format(" (%dx%d)", ((Bitmap) val).getWidth(), ((Bitmap) val).getHeight())); } else if (val.getClass().isArray()) { pw.println(" {"); final int N = Array.getLength(val); for (int i=0; i<N; i++) { if (i > 0) pw.println(","); pw.print(prefix + " " + Array.get(val, i)); } pw.print("\n" + prefix + " }"); } pw.println(); } } pw.println(prefix + " }"); } } @Override Loading Loading @@ -2081,7 +2122,7 @@ public class NotificationManagerService extends INotificationManager.Stub if (N > 0) { pw.println(" Lights List:"); for (int i=0; i<N; i++) { mLights.get(i).dump(pw, " ", mContext); pw.println(" " + mLights.get(i)); } pw.println(" "); } Loading Loading
core/java/android/app/Notification.java +104 −23 Original line number Diff line number Diff line Loading @@ -427,22 +427,48 @@ public class Notification implements Parcelable public String[] kind; /** * Extra key for people values (type TBD). * * Additional semantic data to be carried around with this Notification. * @hide */ public static final String EXTRA_PEOPLE = "android.people"; public Bundle extras = new Bundle(); // extras keys for Builder inputs /** @hide */ public static final String EXTRA_TITLE = "android.title"; /** @hide */ public static final String EXTRA_TITLE_BIG = EXTRA_TITLE + ".big"; /** @hide */ public static final String EXTRA_TEXT = "android.text"; /** @hide */ public static final String EXTRA_SUBTEXT = "android.subtext"; public static final String EXTRA_SUB_TEXT = "android.subText"; /** @hide */ public static final String EXTRA_INFO_TEXT = "android.infoText"; /** @hide */ public static final String EXTRA_SUMMARY_TEXT = "android.summaryText"; /** @hide */ public static final String EXTRA_SMALL_ICON = "android.icon"; /** @hide */ public static final String EXTRA_LARGE_ICON = "android.largeIcon"; /** @hide */ public static final String EXTRA_LARGE_ICON_BIG = EXTRA_LARGE_ICON + ".big"; /** @hide */ public static final String EXTRA_PROGRESS = "android.progress"; /** @hide */ public static final String EXTRA_PROGRESS_MAX = "android.progressMax"; /** @hide */ public static final String EXTRA_PROGRESS_INDETERMINATE = "android.progressIndeterminate"; /** @hide */ public static final String EXTRA_SHOW_CHRONOMETER = "android.showChronometer"; /** @hide */ public static final String EXTRA_SHOW_WHEN = "android.showWhen"; /** @hide from BigPictureStyle */ public static final String EXTRA_PICTURE = "android.picture"; /** @hide from InboxStyle */ public static final String EXTRA_TEXT_LINES = "android.textLines"; // extras keys for other interesting pieces of information /** @hide */ public Bundle extras = new Bundle(); public static final String EXTRA_PEOPLE = "android.people"; /** * Structure to encapsulate an "action", including title and icon, that can be attached to a Notification. Loading Loading @@ -1621,16 +1647,26 @@ public class Notification implements Parcelable mActions.toArray(n.actions); } n.extras = mExtras != null ? new Bundle(mExtras) : new Bundle(); return n; } /** * Capture, in the provided bundle, semantic information used in the construction of * this Notification object. * @hide */ public void addExtras(Bundle extras) { // Store original information used in the construction of this object n.extras.putCharSequence(EXTRA_TITLE, mContentTitle); n.extras.putCharSequence(EXTRA_TEXT, mContentText); n.extras.putCharSequence(EXTRA_SUBTEXT, mSubText); n.extras.putInt(EXTRA_SMALL_ICON, mSmallIcon); //n.extras.putByteArray(EXTRA_LARGE_ICON, ... return n; extras.putCharSequence(EXTRA_TITLE, mContentTitle); extras.putCharSequence(EXTRA_TEXT, mContentText); extras.putCharSequence(EXTRA_SUB_TEXT, mSubText); extras.putCharSequence(EXTRA_INFO_TEXT, mContentInfo); extras.putInt(EXTRA_SMALL_ICON, mSmallIcon); extras.putInt(EXTRA_PROGRESS, mProgress); extras.putInt(EXTRA_PROGRESS_MAX, mProgressMax); extras.putBoolean(EXTRA_PROGRESS_INDETERMINATE, mProgressIndeterminate); extras.putBoolean(EXTRA_SHOW_CHRONOMETER, mUseChronometer); extras.putBoolean(EXTRA_SHOW_WHEN, mShowWhen); } /** Loading @@ -1646,11 +1682,22 @@ public class Notification implements Parcelable * object. */ public Notification build() { final Notification n; if (mStyle != null) { return mStyle.build(); n = mStyle.build(); } else { return buildUnstyled(); n = buildUnstyled(); } n.extras = mExtras != null ? new Bundle(mExtras) : new Bundle(); addExtras(n.extras); if (mStyle != null) { mStyle.addExtras(n.extras); } return n; } /** Loading @@ -1664,7 +1711,6 @@ public class Notification implements Parcelable } } /** * An object that can apply a rich notification style to a {@link Notification.Builder} * object. Loading Loading @@ -1739,6 +1785,18 @@ public class Notification implements Parcelable return contentView; } /** * @hide */ public void addExtras(Bundle extras) { if (mSummaryTextSet) { extras.putCharSequence(EXTRA_SUMMARY_TEXT, mSummaryText); } if (mBigContentTitle != null) { extras.putCharSequence(EXTRA_TITLE_BIG, mBigContentTitle); } } public abstract Notification build(); } Loading Loading @@ -1813,6 +1871,18 @@ public class Notification implements Parcelable return contentView; } /** * @hide */ public void addExtras(Bundle extras) { super.addExtras(extras); if (mBigLargeIconSet) { extras.putParcelable(EXTRA_LARGE_ICON_BIG, mBigLargeIcon); } extras.putParcelable(EXTRA_PICTURE, mPicture); } @Override public Notification build() { checkBuilder(); Loading Loading @@ -1878,6 +1948,15 @@ public class Notification implements Parcelable return this; } /** * @hide */ public void addExtras(Bundle extras) { super.addExtras(extras); extras.putCharSequence(EXTRA_TEXT, mBigText); } private RemoteViews makeBigContentView() { // Remove the content text so line3 only shows if you have a summary final boolean hadThreeLines = (mBuilder.mContentText != null && mBuilder.mSubText != null); Loading Loading @@ -1964,6 +2043,15 @@ public class Notification implements Parcelable return this; } /** * @hide */ public void addExtras(Bundle extras) { super.addExtras(extras); CharSequence[] a = new CharSequence[mTexts.size()]; extras.putCharSequenceArray(EXTRA_TEXT_LINES, mTexts.toArray(a)); } private RemoteViews makeBigContentView() { // Remove the content text so line3 disappears unless you have a summary mBuilder.mContentText = null; Loading Loading @@ -2005,13 +2093,6 @@ public class Notification implements Parcelable Notification wip = mBuilder.buildUnstyled(); wip.bigContentView = makeBigContentView(); StringBuilder builder = new StringBuilder(); for (CharSequence str : mTexts) { builder.append(str); builder.append("\n"); } wip.extras.putCharSequence(EXTRA_TEXT, builder); return wip; } } Loading
services/java/com/android/server/NotificationManagerService.java +51 −10 Original line number Diff line number Diff line Loading @@ -43,6 +43,7 @@ import android.content.pm.PackageManager; import android.content.pm.PackageManager.NameNotFoundException; import android.content.res.Resources; import android.database.ContentObserver; import android.graphics.Bitmap; import android.media.AudioManager; import android.media.IAudioService; import android.media.IRingtonePlayer; Loading Loading @@ -81,6 +82,7 @@ import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.PrintWriter; import java.lang.reflect.Array; import java.util.ArrayDeque; import java.util.ArrayList; import java.util.Arrays; Loading Loading @@ -815,22 +817,61 @@ public class NotificationManagerService extends INotificationManager.Stub void dump(PrintWriter pw, String prefix, Context baseContext) { final Notification notification = sbn.notification; pw.println(prefix + this); pw.println(prefix + " uid=" + sbn.uid + " userId=" + sbn.getUserId()); pw.println(prefix + " icon=0x" + Integer.toHexString(notification.icon) + " / " + idDebugString(baseContext, this.sbn.pkg, notification.icon)); pw.println(prefix + " pri=" + notification.priority); pw.println(prefix + " score=" + this.sbn.score); + " / " + idDebugString(baseContext, sbn.pkg, notification.icon)); pw.println(prefix + " pri=" + notification.priority + " score=" + sbn.score); pw.println(prefix + " contentIntent=" + notification.contentIntent); pw.println(prefix + " deleteIntent=" + notification.deleteIntent); pw.println(prefix + " tickerText=" + notification.tickerText); pw.println(prefix + " contentView=" + notification.contentView); pw.println(prefix + " uid=" + this.sbn.uid + " userId=" + this.sbn.getUserId()); pw.println(prefix + " defaults=0x" + Integer.toHexString(notification.defaults)); pw.println(prefix + " flags=0x" + Integer.toHexString(notification.flags)); pw.println(prefix + String.format(" defaults=0x%08x flags=0x%08x", notification.defaults, notification.flags)); pw.println(prefix + " sound=" + notification.sound); pw.println(prefix + " vibrate=" + Arrays.toString(notification.vibrate)); pw.println(prefix + " ledARGB=0x" + Integer.toHexString(notification.ledARGB) + " ledOnMS=" + notification.ledOnMS + " ledOffMS=" + notification.ledOffMS); pw.println(prefix + String.format(" led=0x%08x onMs=%d offMs=%d", notification.ledARGB, notification.ledOnMS, notification.ledOffMS)); if (notification.actions != null && notification.actions.length > 0) { pw.println(prefix + " actions={"); final int N = notification.actions.length; for (int i=0; i<N; i++) { final Notification.Action action = notification.actions[i]; pw.println(String.format("%s [%d] \"%s\" -> %s", prefix, i, action.title, action.actionIntent.toString() )); } pw.println(prefix + " }"); } if (notification.extras != null && notification.extras.size() > 0) { pw.println(prefix + " extras={"); for (String key : notification.extras.keySet()) { pw.print(prefix + " " + key + "="); Object val = notification.extras.get(key); if (val == null) { pw.println("null"); } else { pw.print(val.toString()); if (val instanceof Bitmap) { pw.print(String.format(" (%dx%d)", ((Bitmap) val).getWidth(), ((Bitmap) val).getHeight())); } else if (val.getClass().isArray()) { pw.println(" {"); final int N = Array.getLength(val); for (int i=0; i<N; i++) { if (i > 0) pw.println(","); pw.print(prefix + " " + Array.get(val, i)); } pw.print("\n" + prefix + " }"); } pw.println(); } } pw.println(prefix + " }"); } } @Override Loading Loading @@ -2081,7 +2122,7 @@ public class NotificationManagerService extends INotificationManager.Stub if (N > 0) { pw.println(" Lights List:"); for (int i=0; i<N; i++) { mLights.get(i).dump(pw, " ", mContext); pw.println(" " + mLights.get(i)); } pw.println(" "); } Loading