aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristian Schneppe <christian@pix-art.de>2019-05-04 15:41:26 +0200
committerChristian Schneppe <christian@pix-art.de>2019-05-04 15:41:26 +0200
commitc0c861c90b0119f62cbadb2d19348d03c1245eaf (patch)
tree6ce45fbc60d40af834e0794018b98fb796e7daa6
parent5d6876e3131c620c3dbcf840c9395fe796c42a5f (diff)
wait with presence selection until attachment commit
-rw-r--r--src/main/java/de/pixart/messenger/ui/ConversationFragment.java130
-rw-r--r--src/main/java/de/pixart/messenger/ui/util/Attachment.java9
2 files changed, 71 insertions, 68 deletions
diff --git a/src/main/java/de/pixart/messenger/ui/ConversationFragment.java b/src/main/java/de/pixart/messenger/ui/ConversationFragment.java
index eeb0b8e18..7844df76c 100644
--- a/src/main/java/de/pixart/messenger/ui/ConversationFragment.java
+++ b/src/main/java/de/pixart/messenger/ui/ConversationFragment.java
@@ -1035,7 +1035,10 @@ public class ConversationFragment extends XmppFragment implements EditMessage.Ke
mediaPreviewAdapter.notifyDataSetChanged();
toggleInputMethod();
};
- if (conversation == null || conversation.getMode() == Conversation.MODE_MULTI || FileBackend.allFilesUnderSize(getActivity(), attachments, getMaxHttpUploadSize(conversation))) {
+ if (conversation == null
+ || conversation.getMode() == Conversation.MODE_MULTI
+ || Attachment.canBeSendInband(attachments)
+ || (conversation.getAccount().httpUploadAvailable() && FileBackend.allFilesUnderSize(getActivity(), attachments, getMaxHttpUploadSize(conversation)))) {
callback.onPresenceSelected();
} else {
activity.selectPresence(conversation, callback);
@@ -1562,7 +1565,7 @@ public class ConversationFragment extends XmppFragment implements EditMessage.Ke
@Override
public void success(Contact contact) {
- selectPresenceToAttachFile(attachmentChoice);
+ invokeAttachFileIntent(attachmentChoice);
}
@Override
@@ -1578,19 +1581,19 @@ public class ConversationFragment extends XmppFragment implements EditMessage.Ke
warning.show();
});
}
- selectPresenceToAttachFile(attachmentChoice);
+ invokeAttachFileIntent(attachmentChoice);
} else {
showNoPGPKeyDialog(false, (dialog, which) -> {
conversation.setNextEncryption(Message.ENCRYPTION_NONE);
activity.xmppConnectionService.updateConversation(conversation);
- selectPresenceToAttachFile(attachmentChoice);
+ invokeAttachFileIntent(attachmentChoice);
});
}
} else {
activity.showInstallPgpDialog();
}
} else {
- selectPresenceToAttachFile(attachmentChoice);
+ invokeAttachFileIntent(attachmentChoice);
}
}
@@ -1714,71 +1717,62 @@ public class ConversationFragment extends XmppFragment implements EditMessage.Ke
}
}
- protected void selectPresenceToAttachFile(final int attachmentChoice) {
- final int encryption = conversation.getNextEncryption();
- final Account account = conversation.getAccount();
- final PresenceSelector.OnPresenceSelected callback = () -> {
- Intent intent = new Intent();
- boolean chooser = false;
- switch (attachmentChoice) {
- case ATTACHMENT_CHOICE_CHOOSE_IMAGE:
- intent.setAction(Intent.ACTION_GET_CONTENT);
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) {
- intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true);
- }
- intent.setType("image/*");
- chooser = true;
- break;
- case ATTACHMENT_CHOICE_CHOOSE_VIDEO:
- chooser = true;
- intent.setType("video/*");
- intent.addCategory(Intent.CATEGORY_OPENABLE);
- intent.setAction(Intent.ACTION_GET_CONTENT);
- break;
- case ATTACHMENT_CHOICE_RECORD_VIDEO:
- intent.setAction(MediaStore.ACTION_VIDEO_CAPTURE);
- break;
- case ATTACHMENT_CHOICE_TAKE_PHOTO:
- final Uri uri = activity.xmppConnectionService.getFileBackend().getTakePhotoUri();
- pendingTakePhotoUri.push(uri);
- intent.putExtra(MediaStore.EXTRA_OUTPUT, uri);
- intent.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
- intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
- intent.setAction(MediaStore.ACTION_IMAGE_CAPTURE);
- break;
- case ATTACHMENT_CHOICE_CHOOSE_FILE:
- chooser = true;
- intent.setType("*/*");
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) {
- intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true);
- }
- intent.addCategory(Intent.CATEGORY_OPENABLE);
- intent.setAction(Intent.ACTION_GET_CONTENT);
- break;
- case ATTACHMENT_CHOICE_RECORD_VOICE:
- intent = new Intent(getActivity(), RecordingActivity.class);
- break;
- case ATTACHMENT_CHOICE_LOCATION:
- intent = new Intent(getActivity(), ShareLocationActivity.class);
- break;
- }
- if (intent.resolveActivity(getActivity().getPackageManager()) != null) {
- Log.d(Config.LOGTAG, "Attachment: " + attachmentChoice);
- if (chooser) {
- startActivityForResult(
- Intent.createChooser(intent, getString(R.string.perform_action_with)),
- attachmentChoice);
- activity.overridePendingTransition(R.animator.fade_in, R.animator.fade_out);
- } else {
- startActivityForResult(intent, attachmentChoice);
- activity.overridePendingTransition(R.animator.fade_in, R.animator.fade_out);
+ protected void invokeAttachFileIntent(final int attachmentChoice) {
+ Intent intent = new Intent();
+ boolean chooser = false;
+ switch (attachmentChoice) {
+ case ATTACHMENT_CHOICE_CHOOSE_IMAGE:
+ intent.setAction(Intent.ACTION_GET_CONTENT);
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) {
+ intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true);
+ }
+ intent.setType("image/*");
+ chooser = true;
+ break;
+ case ATTACHMENT_CHOICE_CHOOSE_VIDEO:
+ chooser = true;
+ intent.setType("video/*");
+ intent.addCategory(Intent.CATEGORY_OPENABLE);
+ intent.setAction(Intent.ACTION_GET_CONTENT);
+ break;
+ case ATTACHMENT_CHOICE_RECORD_VIDEO:
+ intent.setAction(MediaStore.ACTION_VIDEO_CAPTURE);
+ break;
+ case ATTACHMENT_CHOICE_TAKE_PHOTO:
+ final Uri uri = activity.xmppConnectionService.getFileBackend().getTakePhotoUri();
+ pendingTakePhotoUri.push(uri);
+ intent.putExtra(MediaStore.EXTRA_OUTPUT, uri);
+ intent.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
+ intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
+ intent.setAction(MediaStore.ACTION_IMAGE_CAPTURE);
+ break;
+ case ATTACHMENT_CHOICE_CHOOSE_FILE:
+ chooser = true;
+ intent.setType("*/*");
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) {
+ intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true);
}
+ intent.addCategory(Intent.CATEGORY_OPENABLE);
+ intent.setAction(Intent.ACTION_GET_CONTENT);
+ break;
+ case ATTACHMENT_CHOICE_RECORD_VOICE:
+ intent = new Intent(getActivity(), RecordingActivity.class);
+ break;
+ case ATTACHMENT_CHOICE_LOCATION:
+ intent = new Intent(getActivity(), ShareLocationActivity.class);
+ break;
+ }
+ if (intent.resolveActivity(getActivity().getPackageManager()) != null) {
+ Log.d(Config.LOGTAG, "Attachment: " + attachmentChoice);
+ if (chooser) {
+ startActivityForResult(
+ Intent.createChooser(intent, getString(R.string.perform_action_with)),
+ attachmentChoice);
+ activity.overridePendingTransition(R.animator.fade_in, R.animator.fade_out);
+ } else {
+ startActivityForResult(intent, attachmentChoice);
+ activity.overridePendingTransition(R.animator.fade_in, R.animator.fade_out);
}
- };
- if ((account.httpUploadAvailable() || attachmentChoice == ATTACHMENT_CHOICE_LOCATION) && encryption != Message.ENCRYPTION_OTR) {
- callback.onPresenceSelected();
- } else {
- activity.selectPresence(conversation, callback);
}
}
diff --git a/src/main/java/de/pixart/messenger/ui/util/Attachment.java b/src/main/java/de/pixart/messenger/ui/util/Attachment.java
index b63510209..1eb184ca3 100644
--- a/src/main/java/de/pixart/messenger/ui/util/Attachment.java
+++ b/src/main/java/de/pixart/messenger/ui/util/Attachment.java
@@ -84,6 +84,15 @@ public class Attachment implements Parcelable {
this.uuid = UUID.randomUUID();
}
+ public static boolean canBeSendInband(final List<Attachment> attachments) {
+ for (Attachment attachment : attachments) {
+ if (attachment.type != Type.LOCATION) {
+ return false;
+ }
+ }
+ return true;
+ }
+
public static List<Attachment> of(final Context context, Uri uri, Type type) {
final String mime = type == Type.LOCATION ? null : MimeUtils.guessMimeTypeFromUri(context, uri);
return Collections.singletonList(new Attachment(uri, type, mime));