@@ -151,6 +151,9 @@ public class EditorActivity extends AppCompatActivity {
151151 private long editorGeneration = 0 ;
152152 private boolean suppressRecoveryTracking = false ;
153153 private boolean recoveryDecisionPending = false ;
154+ private boolean recoveryDialogShowing = false ;
155+ private RecoveryDraft pendingRecoveryDraft ;
156+ private Runnable pendingRecoveryDiscardLoader ;
154157 private Long originalSize ;
155158 private Long originalLastModified ;
156159 private String originalContentSha256 ;
@@ -382,6 +385,10 @@ protected void onResume() {
382385 });
383386 }
384387
388+ if (recoveryDecisionPending && !recoveryDialogShowing && pendingRecoveryDraft != null ) {
389+ mText .post (this ::showPendingRecoveryDialog );
390+ }
391+
385392 if (SettingsService .isLanguageWasChanged ()) {
386393 Intent intent = getIntent ();
387394 finish ();
@@ -460,6 +467,9 @@ private void offerActiveUntitledRecovery() {
460467
461468 private void showRecoveryDialog (RecoveryDraft draft , Runnable discardLoader ) {
462469 recoveryDecisionPending = true ;
470+ pendingRecoveryDraft = draft ;
471+ pendingRecoveryDiscardLoader = discardLoader ;
472+ recoveryDialogShowing = true ;
463473 String timestamp = DateFormat .getDateTimeInstance ().format (new Date (draft .metadata .draftUpdatedAt ));
464474 String name = draft .metadata .displayName == null || draft .metadata .displayName .isEmpty ()
465475 ? TPStrings .NEW_FILE_TXT
@@ -469,19 +479,26 @@ private void showRecoveryDialog(RecoveryDraft draft, Runnable discardLoader) {
469479 .setMessage (getString (R .string .Recovery_draft_message , name , timestamp ))
470480 .setPositiveButton (R .string .Restore , (dialog , which ) -> restoreDraft (draft ))
471481 .setNegativeButton (R .string .Discard_draft , (dialog , which ) -> {
472- recoveryDecisionPending = false ;
482+ clearPendingRecoveryDecision () ;
473483 recoveryRepository .delete (draft .metadata .recoveryKey );
474484 if (draft .metadata .recoveryKey .equals (recoveryKey )) {
475485 recoveryKey = null ;
476486 }
477487 discardLoader .run ();
478488 })
479489 .setCancelable (false )
490+ .setOnDismissListener (dialog -> recoveryDialogShowing = false )
480491 .show ();
481492 }
482493
494+ private void showPendingRecoveryDialog () {
495+ if (recoveryDecisionPending && !recoveryDialogShowing && pendingRecoveryDraft != null ) {
496+ showRecoveryDialog (pendingRecoveryDraft , pendingRecoveryDiscardLoader );
497+ }
498+ }
499+
483500 private void restoreDraft (RecoveryDraft draft ) {
484- recoveryDecisionPending = false ;
501+ clearPendingRecoveryDecision () ;
485502 recoveryKey = draft .metadata .recoveryKey ;
486503 urlFilename = draft .metadata .documentUri == null ? TPStrings .EMPTY : filenameFromIdentity (draft .metadata .documentUri );
487504 editorGeneration = draft .metadata .generation ;
@@ -497,6 +514,12 @@ private void restoreDraft(RecoveryDraft draft) {
497514 }
498515 }
499516
517+ private void clearPendingRecoveryDecision () {
518+ recoveryDecisionPending = false ;
519+ pendingRecoveryDraft = null ;
520+ pendingRecoveryDiscardLoader = null ;
521+ }
522+
500523 private void applyStoredSelection () {
501524 int length = mText .length ();
502525 int start = Math .max (0 , Math .min (selectionStart , length ));
0 commit comments