wait with presence selection until attachment commit
This commit is contained in:
		
							parent
							
								
									b2ea91909b
								
							
						
					
					
						commit
						bcab77a044
					
				| @ -877,7 +877,10 @@ public class ConversationFragment extends XmppFragment implements EditMessage.Ke | |||||||
|             mediaPreviewAdapter.notifyDataSetChanged(); |             mediaPreviewAdapter.notifyDataSetChanged(); | ||||||
|             toggleInputMethod(); |             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(); |             callback.onPresenceSelected(); | ||||||
|         } else { |         } else { | ||||||
|             activity.selectPresence(conversation, callback); |             activity.selectPresence(conversation, callback); | ||||||
| @ -1329,7 +1332,7 @@ public class ConversationFragment extends XmppFragment implements EditMessage.Ke | |||||||
| 
 | 
 | ||||||
|                                 @Override |                                 @Override | ||||||
|                                 public void success(Contact contact) { |                                 public void success(Contact contact) { | ||||||
|                                     selectPresenceToAttachFile(attachmentChoice); |                                     invokeAttachFileIntent(attachmentChoice); | ||||||
|                                 } |                                 } | ||||||
| 
 | 
 | ||||||
|                                 @Override |                                 @Override | ||||||
| @ -1343,19 +1346,19 @@ public class ConversationFragment extends XmppFragment implements EditMessage.Ke | |||||||
|                         warning.setGravity(Gravity.CENTER_VERTICAL, 0, 0); |                         warning.setGravity(Gravity.CENTER_VERTICAL, 0, 0); | ||||||
|                         warning.show(); |                         warning.show(); | ||||||
|                     } |                     } | ||||||
|                     selectPresenceToAttachFile(attachmentChoice); |                     invokeAttachFileIntent(attachmentChoice); | ||||||
|                 } else { |                 } else { | ||||||
|                     showNoPGPKeyDialog(false, (dialog, which) -> { |                     showNoPGPKeyDialog(false, (dialog, which) -> { | ||||||
|                         conversation.setNextEncryption(Message.ENCRYPTION_NONE); |                         conversation.setNextEncryption(Message.ENCRYPTION_NONE); | ||||||
|                         activity.xmppConnectionService.updateConversation(conversation); |                         activity.xmppConnectionService.updateConversation(conversation); | ||||||
|                         selectPresenceToAttachFile(attachmentChoice); |                         invokeAttachFileIntent(attachmentChoice); | ||||||
|                     }); |                     }); | ||||||
|                 } |                 } | ||||||
|             } else { |             } else { | ||||||
|                 activity.showInstallPgpDialog(); |                 activity.showInstallPgpDialog(); | ||||||
|             } |             } | ||||||
|         } else { |         } else { | ||||||
|             selectPresenceToAttachFile(attachmentChoice); |             invokeAttachFileIntent(attachmentChoice); | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
| @ -1509,61 +1512,54 @@ public class ConversationFragment extends XmppFragment implements EditMessage.Ke | |||||||
|         getActivity().invalidateOptionsMenu(); |         getActivity().invalidateOptionsMenu(); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     protected void selectPresenceToAttachFile(final int attachmentChoice) { | 
 | ||||||
|         final Account account = conversation.getAccount(); |     protected void invokeAttachFileIntent(final int attachmentChoice) { | ||||||
|         final PresenceSelector.OnPresenceSelected callback = () -> { |         Intent intent = new Intent(); | ||||||
|             Intent intent = new Intent(); |         boolean chooser = false; | ||||||
|             boolean chooser = false; |         switch (attachmentChoice) { | ||||||
|             switch (attachmentChoice) { |             case ATTACHMENT_CHOICE_CHOOSE_IMAGE: | ||||||
|                 case ATTACHMENT_CHOICE_CHOOSE_IMAGE: |                 intent.setAction(Intent.ACTION_GET_CONTENT); | ||||||
|                     intent.setAction(Intent.ACTION_GET_CONTENT); |                 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) { | ||||||
|                     if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) { |                     intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true); | ||||||
|                         intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true); |  | ||||||
|                     } |  | ||||||
|                     intent.setType("image/*"); |  | ||||||
|                     chooser = true; |  | ||||||
|                     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 = GeoHelper.getFetchIntent(activity); |  | ||||||
|                     break; |  | ||||||
|             } |  | ||||||
|             if (intent.resolveActivity(getActivity().getPackageManager()) != null) { |  | ||||||
|                 if (chooser) { |  | ||||||
|                     startActivityForResult( |  | ||||||
|                             Intent.createChooser(intent, getString(R.string.perform_action_with)), |  | ||||||
|                             attachmentChoice); |  | ||||||
|                 } else { |  | ||||||
|                     startActivityForResult(intent, attachmentChoice); |  | ||||||
|                 } |                 } | ||||||
|  |                 intent.setType("image/*"); | ||||||
|  |                 chooser = true; | ||||||
|  |                 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 = GeoHelper.getFetchIntent(activity); | ||||||
|  |                 break; | ||||||
|  |         } | ||||||
|  |         if (intent.resolveActivity(getActivity().getPackageManager()) != null) { | ||||||
|  |             if (chooser) { | ||||||
|  |                 startActivityForResult( | ||||||
|  |                         Intent.createChooser(intent, getString(R.string.perform_action_with)), | ||||||
|  |                         attachmentChoice); | ||||||
|  |             } else { | ||||||
|  |                 startActivityForResult(intent, attachmentChoice); | ||||||
|             } |             } | ||||||
|         }; |  | ||||||
|         if (account.httpUploadAvailable() || attachmentChoice == ATTACHMENT_CHOICE_LOCATION) { |  | ||||||
|             callback.onPresenceSelected(); |  | ||||||
|         } else { |  | ||||||
|             activity.selectPresence(conversation, callback); |  | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -111,6 +111,15 @@ public class Attachment implements Parcelable { | |||||||
|         this.uuid = UUID.randomUUID(); |         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) { |     public static List<Attachment> of(final Context context, Uri uri, Type type) { | ||||||
|         final String mime = type == Type.LOCATION ?null :MimeUtils.guessMimeTypeFromUri(context, uri); |         final String mime = type == Type.LOCATION ?null :MimeUtils.guessMimeTypeFromUri(context, uri); | ||||||
|         return Collections.singletonList(new Attachment(uri, type, mime)); |         return Collections.singletonList(new Attachment(uri, type, mime)); | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 Daniel Gultsch
						Daniel Gultsch