diff options
author | Taesu Lee <taesu82.lee@samsung.com> | 2020-03-31 13:32:52 +0900 |
---|---|---|
committer | Luca Stefani <luca.stefani.ge1@gmail.com> | 2020-03-31 21:08:38 +0200 |
commit | a205ce921954493ca3499c2ed8b80e4609da76b7 (patch) | |
tree | 73ff3aa44055756acd162e875805df69605d4d9c | |
parent | 1aea19a0b1ba442b56cfc1f5320dea64dc1b4a2b (diff) | |
download | android_packages_apps_Messaging-a205ce921954493ca3499c2ed8b80e4609da76b7.tar.gz android_packages_apps_Messaging-a205ce921954493ca3499c2ed8b80e4609da76b7.tar.bz2 android_packages_apps_Messaging-a205ce921954493ca3499c2ed8b80e4609da76b7.zip |
Fix assert fail during onSaveInstanceState()
Selected attachment from GalleryGridView will be destroyed when same
attachment is already existed in DraftMessageData. It will make assert
fail during onSaveInstanceState() because mDestroyed in MessagePartData
is true already.
It destroys existing attachment and replaces with new attachment instead
so that selected attachments could be maintained correctly.
Test: 1) Select one image in GalleryMediaChooser.
2) Reopen the chooser and long-press same image again to enter to
the multi-selection mode.
3) Long-press the attachment on draft message to open
AttachmentChooser.
4) Check Assert fail.
Change-Id: I029d778779260d0097ce30bf5338fceba05e1f77
Signed-off-by: Taesu Lee <taesu82.lee@samsung.com>
-rw-r--r-- | src/com/android/messaging/datamodel/data/DraftMessageData.java | 18 |
1 files changed, 15 insertions, 3 deletions
diff --git a/src/com/android/messaging/datamodel/data/DraftMessageData.java b/src/com/android/messaging/datamodel/data/DraftMessageData.java index 7a7199a..f63c27f 100644 --- a/src/com/android/messaging/datamodel/data/DraftMessageData.java +++ b/src/com/android/messaging/datamodel/data/DraftMessageData.java @@ -339,11 +339,23 @@ public class DraftMessageData extends BindableData implements ReadDraftDataActio */ private boolean addOneAttachmentNoNotify(final MessagePartData attachment) { Assert.isTrue(attachment.isAttachment()); + // Check duplication. + for (final MessagePartData existingAttachment : mAttachments) { + if (existingAttachment.getContentUri().equals(attachment.getContentUri())) { + // Destroy existing attachment and replace with new attachment instead of destroying + // new one so that mSelectedImages in GalleryGridView could be maintained correctly. + mAttachments.remove(existingAttachment); + existingAttachment.destroyAsync(); + addAttachment(attachment, null /*pendingAttachment*/); + return false; + } + } + final boolean reachedLimit = getAttachmentCount() >= getAttachmentLimit(); - if (reachedLimit || containsAttachment(attachment.getContentUri())) { - // Never go over the limit. Never add duplicated attachments. + if (reachedLimit) { + // Never go over the limit. attachment.destroyAsync(); - return reachedLimit; + return true; } else { addAttachment(attachment, null /*pendingAttachment*/); return false; |