diff options
| -rw-r--r-- | api/current.txt | 7 | ||||
| -rw-r--r-- | api/system-current.txt | 7 | ||||
| -rw-r--r-- | api/test-current.txt | 7 | ||||
| -rw-r--r-- | core/java/android/app/Notification.java | 129 |
4 files changed, 71 insertions, 79 deletions
diff --git a/api/current.txt b/api/current.txt index 535ab0107ab6..eae22f894b81 100644 --- a/api/current.txt +++ b/api/current.txt @@ -4926,6 +4926,7 @@ package android.app { field public static final java.lang.String EXTRA_BIG_TEXT = "android.bigText"; field public static final java.lang.String EXTRA_CHRONOMETER_COUNTS_DOWN = "android.chronometerCountsDown"; field public static final java.lang.String EXTRA_COMPACT_ACTIONS = "android.compactActions"; + field public static final java.lang.String EXTRA_CONVERSATION_TITLE = "android.conversationTitle"; field public static final java.lang.String EXTRA_INFO_TEXT = "android.infoText"; field public static final java.lang.String EXTRA_LARGE_ICON = "android.largeIcon"; field public static final java.lang.String EXTRA_LARGE_ICON_BIG = "android.largeIcon.big"; @@ -4946,7 +4947,6 @@ package android.app { field public static final java.lang.String EXTRA_TEMPLATE = "android.template"; field public static final java.lang.String EXTRA_TEXT = "android.text"; field public static final java.lang.String EXTRA_TEXT_LINES = "android.textLines"; - field public static final java.lang.String EXTRA_THREAD_TITLE = "android.threadTitle"; field public static final java.lang.String EXTRA_TITLE = "android.title"; field public static final java.lang.String EXTRA_TITLE_BIG = "android.title.big"; field public static final int FLAG_AUTO_CANCEL = 16; // 0x10 @@ -5199,17 +5199,14 @@ package android.app { field public static final int MAXIMUM_RETAINED_MESSAGES = 25; // 0x19 } - public static final class Notification.MessagingStyle.Message implements android.os.Parcelable { + public static final class Notification.MessagingStyle.Message { ctor public Notification.MessagingStyle.Message(java.lang.CharSequence, long, java.lang.CharSequence); - method public int describeContents(); method public java.lang.String getDataMimeType(); method public android.net.Uri getDataUri(); method public java.lang.CharSequence getSender(); method public java.lang.CharSequence getText(); method public long getTimestamp(); method public android.app.Notification.MessagingStyle.Message setData(java.lang.String, android.net.Uri); - method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator<android.app.Notification.MessagingStyle.Message> CREATOR; } public static abstract class Notification.Style { diff --git a/api/system-current.txt b/api/system-current.txt index 2f39ac0ac61e..90513d6fceee 100644 --- a/api/system-current.txt +++ b/api/system-current.txt @@ -5060,6 +5060,7 @@ package android.app { field public static final java.lang.String EXTRA_BIG_TEXT = "android.bigText"; field public static final java.lang.String EXTRA_CHRONOMETER_COUNTS_DOWN = "android.chronometerCountsDown"; field public static final java.lang.String EXTRA_COMPACT_ACTIONS = "android.compactActions"; + field public static final java.lang.String EXTRA_CONVERSATION_TITLE = "android.conversationTitle"; field public static final java.lang.String EXTRA_INFO_TEXT = "android.infoText"; field public static final java.lang.String EXTRA_LARGE_ICON = "android.largeIcon"; field public static final java.lang.String EXTRA_LARGE_ICON_BIG = "android.largeIcon.big"; @@ -5080,7 +5081,6 @@ package android.app { field public static final java.lang.String EXTRA_TEMPLATE = "android.template"; field public static final java.lang.String EXTRA_TEXT = "android.text"; field public static final java.lang.String EXTRA_TEXT_LINES = "android.textLines"; - field public static final java.lang.String EXTRA_THREAD_TITLE = "android.threadTitle"; field public static final java.lang.String EXTRA_TITLE = "android.title"; field public static final java.lang.String EXTRA_TITLE_BIG = "android.title.big"; field public static final int FLAG_AUTOGROUP_SUMMARY = 1024; // 0x400 @@ -5334,17 +5334,14 @@ package android.app { field public static final int MAXIMUM_RETAINED_MESSAGES = 25; // 0x19 } - public static final class Notification.MessagingStyle.Message implements android.os.Parcelable { + public static final class Notification.MessagingStyle.Message { ctor public Notification.MessagingStyle.Message(java.lang.CharSequence, long, java.lang.CharSequence); - method public int describeContents(); method public java.lang.String getDataMimeType(); method public android.net.Uri getDataUri(); method public java.lang.CharSequence getSender(); method public java.lang.CharSequence getText(); method public long getTimestamp(); method public android.app.Notification.MessagingStyle.Message setData(java.lang.String, android.net.Uri); - method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator<android.app.Notification.MessagingStyle.Message> CREATOR; } public static abstract class Notification.Style { diff --git a/api/test-current.txt b/api/test-current.txt index 2ccf37ad754d..72dff11f5b56 100644 --- a/api/test-current.txt +++ b/api/test-current.txt @@ -4926,6 +4926,7 @@ package android.app { field public static final java.lang.String EXTRA_BIG_TEXT = "android.bigText"; field public static final java.lang.String EXTRA_CHRONOMETER_COUNTS_DOWN = "android.chronometerCountsDown"; field public static final java.lang.String EXTRA_COMPACT_ACTIONS = "android.compactActions"; + field public static final java.lang.String EXTRA_CONVERSATION_TITLE = "android.conversationTitle"; field public static final java.lang.String EXTRA_INFO_TEXT = "android.infoText"; field public static final java.lang.String EXTRA_LARGE_ICON = "android.largeIcon"; field public static final java.lang.String EXTRA_LARGE_ICON_BIG = "android.largeIcon.big"; @@ -4946,7 +4947,6 @@ package android.app { field public static final java.lang.String EXTRA_TEMPLATE = "android.template"; field public static final java.lang.String EXTRA_TEXT = "android.text"; field public static final java.lang.String EXTRA_TEXT_LINES = "android.textLines"; - field public static final java.lang.String EXTRA_THREAD_TITLE = "android.threadTitle"; field public static final java.lang.String EXTRA_TITLE = "android.title"; field public static final java.lang.String EXTRA_TITLE_BIG = "android.title.big"; field public static final int FLAG_AUTO_CANCEL = 16; // 0x10 @@ -5199,17 +5199,14 @@ package android.app { field public static final int MAXIMUM_RETAINED_MESSAGES = 25; // 0x19 } - public static final class Notification.MessagingStyle.Message implements android.os.Parcelable { + public static final class Notification.MessagingStyle.Message { ctor public Notification.MessagingStyle.Message(java.lang.CharSequence, long, java.lang.CharSequence); - method public int describeContents(); method public java.lang.String getDataMimeType(); method public android.net.Uri getDataUri(); method public java.lang.CharSequence getSender(); method public java.lang.CharSequence getText(); method public long getTimestamp(); method public android.app.Notification.MessagingStyle.Message setData(java.lang.String, android.net.Uri); - method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator<android.app.Notification.MessagingStyle.Message> CREATOR; } public static abstract class Notification.Style { diff --git a/core/java/android/app/Notification.java b/core/java/android/app/Notification.java index 400a313979d8..fcdf7b0d38f5 100644 --- a/core/java/android/app/Notification.java +++ b/core/java/android/app/Notification.java @@ -943,10 +943,10 @@ public class Notification implements Parcelable public static final String EXTRA_ALLOW_GENERATED_REPLIES = "android.allowGeneratedReplies"; /** - * {@link #extras} key: a {@link String} to be displayed as the title to a thread represented by - * a {@link android.app.Notification.MessagingStyle} + * {@link #extras} key: a {@link String} to be displayed as the title to a conversation + * represented by a {@link android.app.Notification.MessagingStyle} */ - public static final String EXTRA_THREAD_TITLE = "android.threadTitle"; + public static final String EXTRA_CONVERSATION_TITLE = "android.conversationTitle"; /** * {@link #extras} key: an array of {@link android.app.Notification.MessagingStyle.Message} @@ -4301,7 +4301,7 @@ public class Notification implements Parcelable CharSequence mUserDisplayName; CharSequence mConversationTitle; boolean mAllowGeneratedReplies = true; - ArrayList<Message> mMessages = new ArrayList<>(); + List<Message> mMessages = new ArrayList<>(); MessagingStyle() { } @@ -4414,11 +4414,11 @@ public class Notification implements Parcelable extras.putCharSequence(EXTRA_SELF_DISPLAY_NAME, mUserDisplayName); } if (mConversationTitle != null) { - extras.putCharSequence(EXTRA_THREAD_TITLE, mConversationTitle); + extras.putCharSequence(EXTRA_CONVERSATION_TITLE, mConversationTitle); } extras.putBoolean(EXTRA_ALLOW_GENERATED_REPLIES, mAllowGeneratedReplies); - if (!mMessages.isEmpty()) { - extras.putParcelableArrayList(EXTRA_MESSAGES, mMessages); + if (!mMessages.isEmpty()) { extras.putParcelableArray(EXTRA_MESSAGES, + Message.getBundleArrayForMessages(mMessages)); } } @@ -4431,12 +4431,12 @@ public class Notification implements Parcelable mMessages.clear(); mUserDisplayName = extras.getString(EXTRA_SELF_DISPLAY_NAME); - mConversationTitle = extras.getString(EXTRA_THREAD_TITLE); + mConversationTitle = extras.getString(EXTRA_CONVERSATION_TITLE); mAllowGeneratedReplies = extras.getBoolean(EXTRA_ALLOW_GENERATED_REPLIES, mAllowGeneratedReplies); - List<Message> messages = extras.getParcelableArrayList(EXTRA_MESSAGES); - if (messages != null) { - mMessages.addAll(messages); + Parcelable[] parcelables = extras.getParcelableArray(EXTRA_MESSAGES); + if (parcelables != null && parcelables instanceof Bundle[]) { + mMessages = Message.getMessagesFromBundleArray((Bundle[]) parcelables); } } @@ -4537,7 +4537,13 @@ public class Notification implements Parcelable ColorStateList.valueOf(color), null); } - public static final class Message implements Parcelable { + public static final class Message { + + static final String KEY_TEXT = "text"; + static final String KEY_TIMESTAMP = "time"; + static final String KEY_SENDER = "sender"; + static final String KEY_DATA_MIME_TYPE = "type"; + static final String KEY_DATA_URI= "uri"; private final CharSequence mText; private final long mTimestamp; @@ -4595,26 +4601,6 @@ public class Notification implements Parcelable return this; } - private Message(Parcel in) { - if (in.readInt() != 0) { - mText = TextUtils.CHAR_SEQUENCE_CREATOR.createFromParcel(in); - } else { - mText = null; - } - mTimestamp = in.readLong(); - if (in.readInt() != 0) { - mSender = TextUtils.CHAR_SEQUENCE_CREATOR.createFromParcel(in); - } else { - mSender = null; - } - if (in.readInt() != 0) { - mDataMimeType = in.readString(); - } - if (in.readInt() != 0) { - mDataUri = in.readParcelable(Uri.class.getClassLoader()); - } - } - /** * Get the text to be used for this message, or the fallback text if a type and content * Uri have been set @@ -4652,49 +4638,64 @@ public class Notification implements Parcelable return mDataUri; } - @Override - public int describeContents() { - return 0; - } - - @Override - public void writeToParcel(Parcel out, int flags) { + private Bundle toBundle() { + Bundle bundle = new Bundle(); if (mText != null) { - out.writeInt(1); - TextUtils.writeToParcel(mText, out, flags); - } else { - out.writeInt(0); + bundle.putCharSequence(KEY_TEXT, mText); } - out.writeLong(mTimestamp); + bundle.putLong(KEY_TIMESTAMP, mTimestamp); if (mSender != null) { - out.writeInt(1); - TextUtils.writeToParcel(mSender, out, flags); - } else { - out.writeInt(0); + bundle.putCharSequence(KEY_SENDER, mSender); } if (mDataMimeType != null) { - out.writeInt(1); - out.writeString(mDataMimeType); - } else { - out.writeInt(0); + bundle.putString(KEY_DATA_MIME_TYPE, mDataMimeType); } if (mDataUri != null) { - out.writeInt(1); - out.writeParcelable(mDataUri, flags); - } else { - out.writeInt(0); + bundle.putParcelable(KEY_DATA_URI, mDataUri); } + return bundle; } - public static final Parcelable.Creator<Message> CREATOR = - new Parcelable.Creator<Message>() { - public Message createFromParcel(Parcel in) { - return new Message(in); - } - public Message[] newArray(int size) { - return new Message[size]; + static Bundle[] getBundleArrayForMessages(List<Message> messages) { + Bundle[] bundles = new Bundle[messages.size()]; + final int N = messages.size(); + for (int i = 0; i < N; i++) { + bundles[i] = messages.get(i).toBundle(); + } + return bundles; + } + + static List<Message> getMessagesFromBundleArray(Bundle[] bundles) { + List<Message> messages = new ArrayList<>(bundles.length); + for (int i = 0; i < bundles.length; i++) { + Message message = getMessageFromBundle(bundles[i]); + if (message != null) { + messages.add(message); + } + } + return messages; + } + + static Message getMessageFromBundle(Bundle bundle) { + try { + if (!bundle.containsKey(KEY_TEXT) || !bundle.containsKey(KEY_TIMESTAMP) || + !bundle.containsKey(KEY_SENDER)) { + return null; + } else { + Message message = new Message(bundle.getCharSequence(KEY_TEXT), + bundle.getLong(KEY_TIMESTAMP), bundle.getCharSequence(KEY_SENDER)); + if (bundle.containsKey(KEY_DATA_MIME_TYPE) && + bundle.containsKey(KEY_DATA_URI)) { + + message.setData(bundle.getString(KEY_DATA_MIME_TYPE), + (Uri) bundle.getParcelable(KEY_DATA_URI)); } - }; + return message; + } + } catch (ClassCastException e) { + return null; + } + } } } |