4545import com .flowcrypt .email .database .dao .source .AccountDao ;
4646import com .flowcrypt .email .database .dao .source .AccountDaoSource ;
4747import com .flowcrypt .email .database .dao .source .imap .MessageDaoSource ;
48+ import com .flowcrypt .email .jobscheduler .MessagesSenderJobService ;
4849import com .flowcrypt .email .ui .activity .MessageDetailsActivity ;
4950import com .flowcrypt .email .ui .activity .base .BaseSyncActivity ;
5051import com .flowcrypt .email .ui .activity .fragment .base .BaseSyncFragment ;
@@ -78,6 +79,7 @@ public class EmailListFragment extends BaseSyncFragment implements AdapterView.O
7879
7980 private static final int REQUEST_CODE_SHOW_MESSAGE_DETAILS = 10 ;
8081 private static final int REQUEST_CODE_DELETE_MESSAGES = 11 ;
82+ private static final int REQUEST_CODE_RETRY_TO_SEND_MESSAGES = 12 ;
8183
8284 private static final int TIMEOUT_BETWEEN_REQUESTS = 500 ;
8385 private static final int LOADING_SHIFT_IN_ITEMS = 5 ;
@@ -94,6 +96,7 @@ public class EmailListFragment extends BaseSyncFragment implements AdapterView.O
9496 private BaseSyncActivity baseSyncActivity ;
9597 private ActionMode actionMode ;
9698 private SparseBooleanArray checkedItemPositions ;
99+ private GeneralMessageDetails activeMsgDetails ;
97100
98101 private boolean isMessagesFetchedIfNotExistInCache ;
99102 private boolean isNewMessagesLoadingNow ;
@@ -313,6 +316,19 @@ public void onActivityResult(int requestCode, int resultCode, Intent data) {
313316 }
314317 break ;
315318
319+ case REQUEST_CODE_RETRY_TO_SEND_MESSAGES :
320+ switch (resultCode ) {
321+ case Activity .RESULT_OK :
322+ if (activeMsgDetails != null ) {
323+ new MessageDaoSource ().updateMessageState (getContext (),
324+ activeMsgDetails .getEmail (), activeMsgDetails .getLabel (),
325+ activeMsgDetails .getUid (), MessageState .QUEUED );
326+ MessagesSenderJobService .schedule (getContext ());
327+ }
328+ break ;
329+ }
330+ break ;
331+
316332 default :
317333 super .onActivityResult (requestCode , resultCode , data );
318334 break ;
@@ -321,32 +337,33 @@ public void onActivityResult(int requestCode, int resultCode, Intent data) {
321337
322338 @ Override
323339 public void onItemClick (AdapterView <?> parent , View view , int position , long id ) {
324- GeneralMessageDetails generalMessageDetails = (GeneralMessageDetails ) parent .getAdapter ().getItem (position );
325- if (generalMessageDetails != null ) {
340+ activeMsgDetails = (GeneralMessageDetails ) parent .getAdapter ().getItem (position );
341+ if (activeMsgDetails != null ) {
326342 if (JavaEmailConstants .FOLDER_OUTBOX .equalsIgnoreCase (onManageEmailsListener .getCurrentFolder ()
327343 .getServerFullFolderName ())
328- || !TextUtils .isEmpty (generalMessageDetails .getRawMessageWithoutAttachments ())
344+ || !TextUtils .isEmpty (activeMsgDetails .getRawMessageWithoutAttachments ())
329345 || GeneralUtil .isInternetConnectionAvailable (getContext ())) {
330346
331- if (generalMessageDetails .getMessageState () != null ) {
332- switch (generalMessageDetails .getMessageState ()) {
347+ if (activeMsgDetails .getMessageState () != null ) {
348+ switch (activeMsgDetails .getMessageState ()) {
333349 case ERROR_ORIGINAL_MESSAGE_MISSING :
334350 case ERROR_ORIGINAL_ATTACHMENT_NOT_FOUND :
335351 case ERROR_CACHE_PROBLEM :
336352 case ERROR_DURING_CREATION :
337- handleOutgoingMessageWhichHasSomeError (generalMessageDetails );
353+ case ERROR_SENDING_FAILED :
354+ handleOutgoingMessageWhichHasSomeError (activeMsgDetails );
338355 break ;
339356
340357 default :
341358 startActivityForResult (MessageDetailsActivity .getIntent (getContext (),
342- onManageEmailsListener .getCurrentFolder (), generalMessageDetails ),
359+ onManageEmailsListener .getCurrentFolder (), activeMsgDetails ),
343360 REQUEST_CODE_SHOW_MESSAGE_DETAILS );
344361 break ;
345362 }
346363
347364 } else {
348365 startActivityForResult (MessageDetailsActivity .getIntent (getContext (),
349- onManageEmailsListener .getCurrentFolder (), generalMessageDetails ),
366+ onManageEmailsListener .getCurrentFolder (), activeMsgDetails ),
350367 REQUEST_CODE_SHOW_MESSAGE_DETAILS );
351368 }
352369 } else {
@@ -742,7 +759,7 @@ private void handleOutgoingMessageWhichHasSomeError(final GeneralMessageDetails
742759 switch (generalMessageDetails .getMessageState ()) {
743760 case ERROR_ORIGINAL_MESSAGE_MISSING :
744761 case ERROR_ORIGINAL_ATTACHMENT_NOT_FOUND :
745- message = getString (R .string .message_filed_to_forward );
762+ message = getString (R .string .message_failed_to_forward );
746763 break ;
747764
748765 case ERROR_CACHE_PROBLEM :
@@ -753,6 +770,14 @@ private void handleOutgoingMessageWhichHasSomeError(final GeneralMessageDetails
753770 message = getString (R .string .error_happened_during_creation ,
754771 getString (R .string .support_email ));
755772 break ;
773+
774+ case ERROR_SENDING_FAILED :
775+ TwoWayDialogFragment twoWayDialogFragment = TwoWayDialogFragment .newInstance ("" ,
776+ getString (R .string .message_failed_to_send ), getString (R .string .retry ),
777+ getString (R .string .cancel ), true );
778+ twoWayDialogFragment .setTargetFragment (this , REQUEST_CODE_RETRY_TO_SEND_MESSAGES );
779+ twoWayDialogFragment .show (getFragmentManager (), TwoWayDialogFragment .class .getSimpleName ());
780+ return ;
756781 }
757782
758783 InfoDialogFragment infoDialogFragment = InfoDialogFragment .newInstance (null , message , true );
0 commit comments