take intent type into account when sharing with conversations

Daniel Gultsch created

Change summary

src/main/java/eu/siacs/conversations/services/XmppConnectionService.java | 4 
src/main/java/eu/siacs/conversations/ui/ConversationFragment.java        | 9 
src/main/java/eu/siacs/conversations/ui/ConversationsActivity.java       | 1 
src/main/java/eu/siacs/conversations/ui/ShareWithActivity.java           | 8 
src/main/java/eu/siacs/conversations/ui/util/Attachment.java             | 8 
5 files changed, 19 insertions(+), 11 deletions(-)

Detailed changes

src/main/java/eu/siacs/conversations/services/XmppConnectionService.java 🔗

@@ -572,8 +572,8 @@ public class XmppConnectionService extends Service {
         }
     }
 
-    public void attachImageToConversation(final Conversation conversation, final Uri uri, final UiCallback<Message> callback) {
-        final String mimeType = MimeUtils.guessMimeTypeFromUri(this, uri);
+    public void attachImageToConversation(final Conversation conversation, final Uri uri,  final String type, final UiCallback<Message> callback) {
+        final String mimeType = MimeUtils.guessMimeTypeFromUriAndMime(this, uri, type);
         final String compressPictures = getCompressPicturesPreference();
 
         if ("never".equals(compressPictures)

src/main/java/eu/siacs/conversations/ui/ConversationFragment.java 🔗

@@ -688,14 +688,14 @@ public class ConversationFragment extends XmppFragment implements EditMessage.Ke
         toggleInputMethod();
     }
 
-    private void attachImageToConversation(Conversation conversation, Uri uri) {
+    private void attachImageToConversation(Conversation conversation, Uri uri, String type) {
         if (conversation == null) {
             return;
         }
         final Toast prepareFileToast = Toast.makeText(getActivity(), getText(R.string.preparing_image), Toast.LENGTH_LONG);
         prepareFileToast.show();
         activity.delegateUriPermissionsToService(uri);
-        activity.xmppConnectionService.attachImageToConversation(conversation, uri,
+        activity.xmppConnectionService.attachImageToConversation(conversation, uri, type,
                 new UiCallback<Message>() {
 
                     @Override
@@ -889,7 +889,7 @@ public class ConversationFragment extends XmppFragment implements EditMessage.Ke
                     attachLocationToConversation(conversation, attachment.getUri());
                 } else if (attachment.getType() == Attachment.Type.IMAGE) {
                     Log.d(Config.LOGTAG, "ConversationsActivity.commitAttachments() - attaching image to conversations. CHOOSE_IMAGE");
-                    attachImageToConversation(conversation, attachment.getUri());
+                    attachImageToConversation(conversation, attachment.getUri(), attachment.getMime());
                 } else {
                     Log.d(Config.LOGTAG, "ConversationsActivity.commitAttachments() - attaching file to conversations. CHOOSE_FILE/RECORD_VOICE/RECORD_VIDEO");
                     attachFileToConversation(conversation, attachment.getUri(), attachment.getMime());
@@ -2186,13 +2186,14 @@ public class ConversationFragment extends XmppFragment implements EditMessage.Ke
         final boolean asQuote = extras.getBoolean(ConversationsActivity.EXTRA_AS_QUOTE);
         final boolean pm = extras.getBoolean(ConversationsActivity.EXTRA_IS_PRIVATE_MESSAGE, false);
         final boolean doNotAppend = extras.getBoolean(ConversationsActivity.EXTRA_DO_NOT_APPEND, false);
+        final String type = extras.getString(ConversationsActivity.EXTRA_TYPE);
         final List<Uri> uris = extractUris(extras);
         if (uris != null && uris.size() > 0) {
             if (uris.size() == 1 && "geo".equals(uris.get(0).getScheme())) {
                 mediaPreviewAdapter.addMediaPreviews(Attachment.of(getActivity(), uris.get(0), Attachment.Type.LOCATION));
             } else {
                 final List<Uri> cleanedUris = cleanUris(new ArrayList<>(uris));
-                mediaPreviewAdapter.addMediaPreviews(Attachment.of(getActivity(), cleanedUris));
+                mediaPreviewAdapter.addMediaPreviews(Attachment.of(getActivity(), cleanedUris, type));
             }
             toggleInputMethod();
             return;

src/main/java/eu/siacs/conversations/ui/ConversationsActivity.java 🔗

@@ -99,6 +99,7 @@ public class ConversationsActivity extends XmppActivity implements OnConversatio
     public static final String EXTRA_DO_NOT_APPEND = "do_not_append";
     public static final String EXTRA_POST_INIT_ACTION = "post_init_action";
     public static final String POST_ACTION_RECORD_VOICE = "record_voice";
+    public static final String EXTRA_TYPE = "type";
 
     private static final List<String> VIEW_AND_SHARE_ACTIONS = Arrays.asList(
             ACTION_VIEW_CONVERSATION,

src/main/java/eu/siacs/conversations/ui/ShareWithActivity.java 🔗

@@ -33,7 +33,8 @@ public class ShareWithActivity extends XmppActivity implements XmppConnectionSer
         refreshUi();
     }
 
-    private class Share {
+    private static class Share {
+        public String type;
         ArrayList<Uri> uris = new ArrayList<>();
         public String account;
         public String contact;
@@ -65,6 +66,7 @@ public class ShareWithActivity extends XmppActivity implements XmppConnectionSer
 
     @Override
     public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
+        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
         if (grantResults.length > 0)
             if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                 if (requestCode == REQUEST_STORAGE_PERMISSION) {
@@ -139,6 +141,7 @@ public class ShareWithActivity extends XmppActivity implements XmppConnectionSer
             } else if (type != null && uri != null) {
                 this.share.uris.clear();
                 this.share.uris.add(uri);
+                this.share.type = type;
             } else {
                 this.share.text = text;
                 this.share.asQuote = asQuote;
@@ -193,6 +196,9 @@ public class ShareWithActivity extends XmppActivity implements XmppConnectionSer
             intent.setAction(Intent.ACTION_SEND_MULTIPLE);
             intent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, share.uris);
             intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
+            if (share.type != null) {
+                intent.putExtra(ConversationsActivity.EXTRA_TYPE, share.type);
+            }
         } else if (share.text != null) {
             intent.setAction(ConversationsActivity.ACTION_VIEW_CONVERSATION);
             intent.putExtra(Intent.EXTRA_TEXT, share.text);

src/main/java/eu/siacs/conversations/ui/util/Attachment.java 🔗

@@ -136,10 +136,10 @@ public class Attachment implements Parcelable {
         return Collections.singletonList(new Attachment(uri, type, mime));
     }
 
-    public static List<Attachment> of(final Context context, List<Uri> uris) {
-        List<Attachment> attachments = new ArrayList<>();
-        for (Uri uri : uris) {
-            final String mime = MimeUtils.guessMimeTypeFromUri(context, uri);
+    public static List<Attachment> of(final Context context, List<Uri> uris, final String type) {
+        final List<Attachment> attachments = new ArrayList<>();
+        for (final Uri uri : uris) {
+            final String mime = MimeUtils.guessMimeTypeFromUriAndMime(context, uri, type);
             attachments.add(new Attachment(uri, mime != null && isImage(mime) ? Type.IMAGE : Type.FILE, mime));
         }
         return attachments;