From d419fab7891f1a92a745d7ca8c7d91cd45d4e18b Mon Sep 17 00:00:00 2001 From: cketti Date: Sun, 26 Jan 2014 17:02:08 +0100 Subject: [PATCH] Add support for KitKat's Storage Access Framework This allows users on KitKat to add multiple attachments at once. --- src/com/fsck/k9/activity/MessageCompose.java | 25 +++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/src/com/fsck/k9/activity/MessageCompose.java b/src/com/fsck/k9/activity/MessageCompose.java index 9c6aa9856..87b88c889 100644 --- a/src/com/fsck/k9/activity/MessageCompose.java +++ b/src/com/fsck/k9/activity/MessageCompose.java @@ -5,6 +5,7 @@ import android.annotation.TargetApi; import android.app.AlertDialog; import android.app.AlertDialog.Builder; import android.app.Dialog; +import android.content.ClipData; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; @@ -1986,6 +1987,7 @@ public class MessageCompose extends K9Activity implements OnClickListener, Toast.makeText(this, R.string.attachment_encryption_unsupported, Toast.LENGTH_LONG).show(); } Intent i = new Intent(Intent.ACTION_GET_CONTENT); + i.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true); i.addCategory(Intent.CATEGORY_OPENABLE); i.setType(mime_type); mIgnoreOnPause = true; @@ -2178,7 +2180,7 @@ public class MessageCompose extends K9Activity implements OnClickListener, } switch (requestCode) { case ACTIVITY_REQUEST_PICK_ATTACHMENT: - addAttachment(data.getData()); + addAttachmentsFromResultIntent(data); mDraftNeedsSaving = true; break; case CONTACT_PICKER_TO: @@ -2239,6 +2241,27 @@ public class MessageCompose extends K9Activity implements OnClickListener, } } + @TargetApi(Build.VERSION_CODES.JELLY_BEAN) + private void addAttachmentsFromResultIntent(Intent data) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { + ClipData clipData = data.getClipData(); + if (clipData != null) { + for (int i = 0, end = clipData.getItemCount(); i < end; i++) { + Uri uri = clipData.getItemAt(i).getUri(); + if (uri != null) { + addAttachment(uri); + } + } + return; + } + } + + Uri uri = data.getData(); + if (uri != null) { + addAttachment(uri); + } + } + public void doLaunchContactPicker(int resultId) { mIgnoreOnPause = true; startActivityForResult(mContacts.contactPickerIntent(), resultId);