summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTaesu Lee <taesu82.lee@samsung.com>2020-03-31 13:32:52 +0900
committerLuca Stefani <luca.stefani.ge1@gmail.com>2020-03-31 21:08:38 +0200
commita205ce921954493ca3499c2ed8b80e4609da76b7 (patch)
tree73ff3aa44055756acd162e875805df69605d4d9c
parent1aea19a0b1ba442b56cfc1f5320dea64dc1b4a2b (diff)
downloadpackages_apps_Messaging-a205ce921954493ca3499c2ed8b80e4609da76b7.tar.gz
packages_apps_Messaging-a205ce921954493ca3499c2ed8b80e4609da76b7.tar.bz2
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.java18
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;