~singpolyma/cheogram-android

d4cbf2e11e6a2883c4583a0ab598be0433f7fcad — Daniel Gultsch 3 years ago 7d7e158
take intent type into account when sharing with conversations
M src/main/java/eu/siacs/conversations/services/XmppConnectionService.java => src/main/java/eu/siacs/conversations/services/XmppConnectionService.java +2 -2
@@ 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)

M src/main/java/eu/siacs/conversations/ui/ConversationFragment.java => src/main/java/eu/siacs/conversations/ui/ConversationFragment.java +5 -4
@@ 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;

M src/main/java/eu/siacs/conversations/ui/ConversationsActivity.java => src/main/java/eu/siacs/conversations/ui/ConversationsActivity.java +1 -0
@@ 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,

M src/main/java/eu/siacs/conversations/ui/ShareWithActivity.java => src/main/java/eu/siacs/conversations/ui/ShareWithActivity.java +7 -1
@@ 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);

M src/main/java/eu/siacs/conversations/ui/util/Attachment.java => src/main/java/eu/siacs/conversations/ui/util/Attachment.java +4 -4
@@ 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;