From 11472650d1fce7548939d311c4434128930c18ba Mon Sep 17 00:00:00 2001 From: Paul Westbrook Date: Mon, 1 Apr 2013 17:17:32 -0700 Subject: [PATCH] Fix apk attachments Bug: 7585865 Change-Id: I20191523377d99472e333dece4d727415f97c67a --- .../android/email/provider/EmailProvider.java | 22 +++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/src/com/android/email/provider/EmailProvider.java b/src/com/android/email/provider/EmailProvider.java index d7a0cb7ce..6f04313f3 100644 --- a/src/com/android/email/provider/EmailProvider.java +++ b/src/com/android/email/provider/EmailProvider.java @@ -95,6 +95,7 @@ import com.android.mail.utils.AttachmentUtils; import com.android.mail.utils.LogUtils; import com.android.mail.utils.MatrixCursorWithCachedColumns; import com.android.mail.utils.MatrixCursorWithExtra; +import com.android.mail.utils.MimeType; import com.android.mail.utils.Utils; import com.android.mail.widget.BaseWidgetProvider; import com.android.mail.widget.WidgetProvider; @@ -3353,11 +3354,24 @@ outer: @Override public String getString(int column) { if (column == mContentUriIndex) { - Uri uri = Uri.parse(getString(mUriIndex)); - long id = Long.parseLong(uri.getLastPathSegment()); - Attachment att = Attachment.restoreAttachmentWithId(mContext, id); + final Uri uri = Uri.parse(getString(mUriIndex)); + final long id = Long.parseLong(uri.getLastPathSegment()); + final Attachment att = Attachment.restoreAttachmentWithId(mContext, id); if (att == null) return ""; - return AttachmentUtilities.getAttachmentUri(att.mAccountKey, id).toString(); + + final String contentUri; + // Until the package installer can handle opening apks from a content:// uri, for + // any apk that was successfully saved in external storage, return the + // content uri from the attachment + if (att.mUiDestination == UIProvider.AttachmentDestination.EXTERNAL && + att.mUiState == UIProvider.AttachmentState.SAVED && + TextUtils.equals(att.mMimeType, MimeType.ANDROID_ARCHIVE)) { + contentUri = att.getContentUri(); + } else { + contentUri = + AttachmentUtilities.getAttachmentUri(att.mAccountKey, id).toString(); + } + return contentUri; } else { return super.getString(column); }