1
0
mirror of https://github.com/moparisthebest/k-9 synced 2024-11-27 11:42:16 -05:00

Use MIME type used for intent resolution in content provider

This commit is contained in:
cketti 2014-11-10 00:56:24 +01:00
parent f87ab53b9b
commit 44ecf5d588
2 changed files with 24 additions and 20 deletions

View File

@ -51,11 +51,20 @@ public class AttachmentProvider extends ContentProvider {
public static Uri getAttachmentUri(Account account, long id) { public static Uri getAttachmentUri(Account account, long id) {
return getAttachmentUri(account.getUuid(), id, true); return CONTENT_URI.buildUpon()
.appendPath(account.getUuid())
.appendPath(Long.toString(id))
.appendPath(FORMAT_RAW)
.build();
} }
public static Uri getAttachmentUriForViewing(Account account, long id) { public static Uri getAttachmentUriForViewing(Account account, long id, String mimeType) {
return getAttachmentUri(account.getUuid(), id, false); return CONTENT_URI.buildUpon()
.appendPath(account.getUuid())
.appendPath(Long.toString(id))
.appendPath(FORMAT_VIEW)
.appendPath(mimeType)
.build();
} }
public static Uri getAttachmentThumbnailUri(Account account, long id, int width, int height) { public static Uri getAttachmentThumbnailUri(Account account, long id, int width, int height) {
@ -68,14 +77,6 @@ public class AttachmentProvider extends ContentProvider {
.build(); .build();
} }
private static Uri getAttachmentUri(String db, long id, boolean raw) {
return CONTENT_URI.buildUpon()
.appendPath(db)
.appendPath(Long.toString(id))
.appendPath(raw ? FORMAT_RAW : FORMAT_VIEW)
.build();
}
public static void clear(Context context) { public static void clear(Context context) {
/* /*
* We use the cache dir as a temporary directory (since Android doesn't give us one) so * We use the cache dir as a temporary directory (since Android doesn't give us one) so
@ -146,8 +147,9 @@ public class AttachmentProvider extends ContentProvider {
String dbName = segments.get(0); String dbName = segments.get(0);
String id = segments.get(1); String id = segments.get(1);
String format = segments.get(2); String format = segments.get(2);
String mimeType = (segments.size() < 4) ? null : segments.get(3);
return getType(dbName, id, format); return getType(dbName, id, format, mimeType);
} }
@Override @Override
@ -165,7 +167,7 @@ public class AttachmentProvider extends ContentProvider {
file = getThumbnailFile(getContext(), accountUuid, attachmentId); file = getThumbnailFile(getContext(), accountUuid, attachmentId);
if (!file.exists()) { if (!file.exists()) {
String type = getType(accountUuid, attachmentId, FORMAT_VIEW); String type = getType(accountUuid, attachmentId, FORMAT_VIEW, null);
try { try {
FileInputStream in = new FileInputStream(getFile(accountUuid, attachmentId)); FileInputStream in = new FileInputStream(getFile(accountUuid, attachmentId));
try { try {
@ -258,7 +260,7 @@ public class AttachmentProvider extends ContentProvider {
return null; return null;
} }
private String getType(String dbName, String id, String format) { private String getType(String dbName, String id, String format, String mimeType) {
String type; String type;
if (FORMAT_THUMBNAIL.equals(format)) { if (FORMAT_THUMBNAIL.equals(format)) {
type = "image/png"; type = "image/png";
@ -269,10 +271,9 @@ public class AttachmentProvider extends ContentProvider {
final LocalStore localStore = LocalStore.getLocalInstance(account, K9.app); final LocalStore localStore = LocalStore.getLocalInstance(account, K9.app);
AttachmentInfo attachmentInfo = localStore.getAttachmentInfo(id); AttachmentInfo attachmentInfo = localStore.getAttachmentInfo(id);
if (FORMAT_VIEW.equals(format)) { if (FORMAT_VIEW.equals(format) && mimeType != null) {
type = MimeUtility.getMimeTypeForViewing(attachmentInfo.type, attachmentInfo.name); type = mimeType;
} else { } else {
// When accessing the "raw" message we deliver the original MIME type.
type = attachmentInfo.type; type = attachmentInfo.type;
} }
} catch (MessagingException e) { } catch (MessagingException e) {

View File

@ -256,16 +256,19 @@ public class AttachmentView extends FrameLayout implements OnClickListener, OnLo
private Intent constructViewIntent() { private Intent constructViewIntent() {
Intent intent; Intent intent;
Uri uri = AttachmentProvider.getAttachmentUriForViewing(account, part.getAttachmentId());
Intent originalMimeTypeIntent = createViewIntentForContentUri(contentType, uri); Uri originalMimeTypeUri = AttachmentProvider.getAttachmentUriForViewing(account, part.getAttachmentId(),
contentType);
Intent originalMimeTypeIntent = createViewIntentForContentUri(contentType, originalMimeTypeUri);
int originalMimeTypeActivitiesCount = getResolvedIntentActivitiesCount(originalMimeTypeIntent); int originalMimeTypeActivitiesCount = getResolvedIntentActivitiesCount(originalMimeTypeIntent);
String inferredMimeType = MimeUtility.getMimeTypeByExtension(name); String inferredMimeType = MimeUtility.getMimeTypeByExtension(name);
if (inferredMimeType.equals(contentType)) { if (inferredMimeType.equals(contentType)) {
intent = originalMimeTypeIntent; intent = originalMimeTypeIntent;
} else { } else {
Intent inferredMimeTypeIntent = createViewIntentForContentUri(inferredMimeType, uri); Uri inferredMimeTypeUri = AttachmentProvider.getAttachmentUriForViewing(account, part.getAttachmentId(),
inferredMimeType);
Intent inferredMimeTypeIntent = createViewIntentForContentUri(inferredMimeType, inferredMimeTypeUri);
int inferredMimeTypeActivitiesCount = getResolvedIntentActivitiesCount(inferredMimeTypeIntent); int inferredMimeTypeActivitiesCount = getResolvedIntentActivitiesCount(inferredMimeTypeIntent);
if (inferredMimeTypeActivitiesCount > originalMimeTypeActivitiesCount) { if (inferredMimeTypeActivitiesCount > originalMimeTypeActivitiesCount) {