From 751e4b2d9509b63bcdd3c8780afa82b67b99d7d4 Mon Sep 17 00:00:00 2001 From: Todd Kennedy Date: Fri, 21 Jan 2011 11:58:39 -0800 Subject: [PATCH] Prevent auto-download of attachments not in an inbox When creating the list of attachments to be automatically downloaded in the background, exclude any attachments that are not in an inbox. Also added unit tests to ensure the query URIs behave as expected. NOTE: This is a partial fix for general background attachment downloading issues bug 3373982 Change-Id: I13ef56cd280c028fa966ab9e655acce28b0b9b91 --- .../android/email/provider/EmailContent.java | 10 +++ .../service/AttachmentDownloadService.java | 2 +- .../provider/AttachmentProviderTests.java | 83 +++++++++++++++++++ 3 files changed, 94 insertions(+), 1 deletion(-) diff --git a/src/com/android/email/provider/EmailContent.java b/src/com/android/email/provider/EmailContent.java index 9f0be5e6b..f9b633622 100644 --- a/src/com/android/email/provider/EmailContent.java +++ b/src/com/android/email/provider/EmailContent.java @@ -1945,6 +1945,16 @@ public abstract class EmailContent { AttachmentColumns.ACCOUNT_KEY }; + // All attachments with an empty URI, regardless of mailbox + public static final String EMPTY_URI_SELECTION = + AttachmentColumns.CONTENT_URI + " isnull AND " + Attachment.FLAGS + "=0"; + // Attachments with an empty URI that are in an inbox + public static final String EMPTY_URI_INBOX_SELECTION = + EMPTY_URI_SELECTION + " AND " + AttachmentColumns.MESSAGE_KEY + " IN (" + + "SELECT " + MessageColumns.ID + " FROM " + Message.TABLE_NAME + + " WHERE " + Message.INBOX_SELECTION + + ")"; + // Bits used in mFlags // Instruct Rfc822Output to 1) not use Content-Disposition and 2) use multipart/alternative // with this attachment. This is only valid if there is one and only one attachment and diff --git a/src/com/android/email/service/AttachmentDownloadService.java b/src/com/android/email/service/AttachmentDownloadService.java index 0f4f2caa3..d78fadfd1 100644 --- a/src/com/android/email/service/AttachmentDownloadService.java +++ b/src/com/android/email/service/AttachmentDownloadService.java @@ -332,7 +332,7 @@ public class AttachmentDownloadService extends Service implements Runnable { Uri lookupUri = EmailContent.uriWithLimit(Attachment.CONTENT_URI, MAX_ATTACHMENTS_TO_CHECK); Cursor c = mContext.getContentResolver().query(lookupUri, AttachmentInfo.PROJECTION, - AttachmentColumns.CONTENT_URI + " isnull AND " + Attachment.FLAGS + "=0", + EmailContent.Attachment.EMPTY_URI_INBOX_SELECTION, null, Attachment.RECORD_ID + " DESC"); File cacheDir = mContext.getCacheDir(); try { diff --git a/tests/src/com/android/email/provider/AttachmentProviderTests.java b/tests/src/com/android/email/provider/AttachmentProviderTests.java index 66cad9617..7a2cf43db 100644 --- a/tests/src/com/android/email/provider/AttachmentProviderTests.java +++ b/tests/src/com/android/email/provider/AttachmentProviderTests.java @@ -16,6 +16,7 @@ package com.android.email.provider; +import com.android.email.AttachmentInfo; import com.android.email.R; import com.android.email.mail.MessagingException; import com.android.email.mail.store.LocalStore; @@ -186,6 +187,88 @@ public class AttachmentProviderTests extends ProviderTestCase2