Skip to content

Commit e9ef0e2

Browse files
committed
fix tests
1 parent 7e23fec commit e9ef0e2

2 files changed

Lines changed: 31 additions & 4 deletions

File tree

‎app/src/androidTest/java/com/maxistar/textpad/test/EditorRecoveryTest.java‎

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import static androidx.test.espresso.Espresso.pressBack;
55
import static androidx.test.espresso.action.ViewActions.click;
66
import static androidx.test.espresso.assertion.ViewAssertions.matches;
7+
import static androidx.test.espresso.matcher.RootMatchers.isDialog;
78
import static androidx.test.espresso.matcher.ViewMatchers.withId;
89
import static androidx.test.espresso.matcher.ViewMatchers.withText;
910
import static org.junit.Assert.assertEquals;
@@ -106,6 +107,7 @@ public void changedUntitledDocumentCanBeRestoredAfterRecreation() {
106107
editor.setText(content);
107108
editor.setSelection(1234);
108109
});
110+
android.os.SystemClock.sleep(800);
109111

110112
scenario.recreate();
111113
onView(withText(R.string.Restore)).perform(click());
@@ -145,13 +147,15 @@ public void pendingRecoveryDecisionCannotOverwriteDraftDuringRecreation() throws
145147
String content = "recoverable after recreation";
146148
try (ActivityScenario<EditorActivity> scenario = ActivityScenario.launch(EditorActivity.class)) {
147149
scenario.onActivity(activity -> ((EditText) activity.findViewById(R.id.editText1)).setText(content));
150+
Thread.sleep(800);
148151
scenario.recreate();
149-
onView(withText(R.string.Restore)).check(matches(androidx.test.espresso.matcher.ViewMatchers.isDisplayed()));
152+
onView(withText(R.string.Restore)).inRoot(isDialog())
153+
.check(matches(androidx.test.espresso.matcher.ViewMatchers.isDisplayed()));
150154
pressBack();
151155
scenario.moveToState(Lifecycle.State.CREATED);
152156
scenario.moveToState(Lifecycle.State.RESUMED);
153157
assertEquals(content, new RecoveryRepository(context).loadActive().text);
154-
onView(withText(R.string.Restore)).perform(click());
158+
onView(withText(R.string.Restore)).inRoot(isDialog()).perform(click());
155159
onView(withId(R.id.editText1)).check(matches(withText(content)));
156160
}
157161
}

‎app/src/main/java/com/maxistar/textpad/activities/EditorActivity.java‎

Lines changed: 25 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)