Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Rework quit dialog #5614

Merged
merged 28 commits into from
Jun 22, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
28 commits
Select commit Hold shift + click to select a range
2697035
Change quit form dialog title
seadowg May 25, 2023
f52d9fc
Remove negative button
seadowg May 25, 2023
e351a3d
Switch to layout from ListView
seadowg May 25, 2023
4ef87a7
Add save explanation text to dialog
seadowg May 25, 2023
d4f5f7c
Update test name
seadowg May 25, 2023
1f0cbbe
Show different version of dialog when save as draft is disabled
seadowg May 25, 2023
56e8437
Add keep editing button
seadowg May 25, 2023
c79c0ce
Convert boolean hasSaved into nullable getLastSavedTime
seadowg May 27, 2023
e46a360
Pass InstancesRepository into save logic
seadowg May 27, 2023
0b26c48
Fix last saved time not being updated if there are no saves in session
seadowg May 29, 2023
449fa23
Add nullable instance to FormSession
seadowg May 29, 2023
d60b3c3
Show timestamp when exiting form that's already been saved
seadowg May 29, 2023
379b5c7
Format timestamp for last saved
seadowg May 29, 2023
3ad5810
Make sure discard warning always shows when required
seadowg May 29, 2023
73f063f
Correct Material 3 Button icon size
seadowg May 29, 2023
bfc5317
Switch to filled style for save as draft button
seadowg May 29, 2023
c0cf6d5
Fix test
seadowg May 29, 2023
95aa953
Correct test names
seadowg May 30, 2023
aa6fea1
Show discard changes warning when save as draft is disable for form t…
seadowg May 30, 2023
e2d0960
Show filled keep editing when save as draft is disabled
seadowg May 30, 2023
d653e2c
Simplify if statement
seadowg Jun 20, 2023
3af8185
Move related code together
seadowg Jun 20, 2023
9307631
Use ternary
seadowg Jun 20, 2023
96fe9d3
Correct typo
seadowg Jun 20, 2023
bc463e8
Fix setting used to hide Save as draft
seadowg Jun 21, 2023
682fe37
Decrease margin in quit form dialog
seadowg Jun 21, 2023
7965854
Make quit dialog scrollable
seadowg Jun 21, 2023
b4cd967
Fix test
seadowg Jun 21, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -135,7 +135,7 @@ public void pressingBackWhileRecording_andClickingSave_exitsForm() {
.copyForm("one-question-background-audio.xml")
.startBlankForm("One Question")
.closeSoftKeyboard()
.pressBack(new SaveOrDiscardFormDialog<>("One Question", new MainMenuPage()))
.pressBack(new SaveOrDiscardFormDialog<>(new MainMenuPage()))
.clickSaveChanges();
}

Expand All @@ -152,7 +152,7 @@ public void uncheckingRecordAudio_andConfirming_endsAndDeletesRecording() {
assertThat(stubAudioRecorderViewModel.getLastRecording(), is(nullValue()));

formEntryPage.closeSoftKeyboard()
.pressBack(new SaveOrDiscardFormDialog<>("One Question", new MainMenuPage()))
.pressBack(new SaveOrDiscardFormDialog<>(new MainMenuPage()))
.clickDiscardForm()
.startBlankForm("One Question");

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ class FormFinalizingTest {
.assertNumberOfFinalizedForms(0)
.startBlankForm("One Question")
.closeSoftKeyboard()
.pressBack(SaveOrDiscardFormDialog("One Question", MainMenuPage()))
.pressBack(SaveOrDiscardFormDialog(MainMenuPage()))
.clickSaveChanges()
.assertNumberOfEditableForms(1)
.assertNumberOfFinalizedForms(0)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ public void languageChoiceIsPersisted() {
.clickOptionsIcon()
.clickOnString(R.string.change_language)
.clickOnText("French (fr)")
.pressBack(new SaveOrDiscardFormDialog<>("One Question", new MainMenuPage()))
.pressBack(new SaveOrDiscardFormDialog<>(new MainMenuPage()))
.clickDiscardForm()

.startBlankForm("One Question")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ public void whenFillingForm_pressingBack_andClickingSaveChanges_savesCurrentAnsw
new QuestionAndAnswer("What is your name?", "Reuben"),
new QuestionAndAnswer("What is your age?", "10")
)
.pressBack(new SaveOrDiscardFormDialog<>("Two Question", new MainMenuPage()))
.pressBack(new SaveOrDiscardFormDialog<>(new MainMenuPage()))
.clickSaveChanges()

.clickEditSavedForm(1)
Expand All @@ -46,7 +46,7 @@ public void whenFillingForm_pressingBack_andClickingIgnoreChanges_doesNotSaveFor
.copyForm("two-question.xml")
.startBlankForm("Two Question")
.answerQuestion("What is your name?", "Reuben")
.pressBack(new SaveOrDiscardFormDialog<>("Two Question", new MainMenuPage()))
.pressBack(new SaveOrDiscardFormDialog<>(new MainMenuPage()))
.clickDiscardForm()

.assertNumberOfEditableForms(0);
Expand Down Expand Up @@ -77,7 +77,7 @@ public void whenFillingForm_withViolatedConstraintsOnCurrentScreen_pressingBack_
.answerQuestion("What is your name?", "Reuben")
.swipeToNextQuestion("What is your age?", true)
.closeSoftKeyboard()
.pressBack(new SaveOrDiscardFormDialog<>("Two Question Required", new MainMenuPage()))
.pressBack(new SaveOrDiscardFormDialog<>(new MainMenuPage()))
.clickSaveChanges()

.clickEditSavedForm(1)
Expand All @@ -91,7 +91,7 @@ public void whenEditingANonFinalizedForm_withViolatedConstraintsOnCurrentScreen_
.copyForm("two-question-required.xml")
.startBlankForm("Two Question Required")
.answerQuestion("What is your name?", "Reuben")
.pressBack(new SaveOrDiscardFormDialog<>("Two Question Required", new MainMenuPage()))
.pressBack(new SaveOrDiscardFormDialog<>(new MainMenuPage()))
.clickSaveChanges()

.clickEditSavedForm(1)
Expand All @@ -100,7 +100,7 @@ public void whenEditingANonFinalizedForm_withViolatedConstraintsOnCurrentScreen_
.answerQuestion("What is your name?", "Another Reuben")
.swipeToNextQuestion("What is your age?", true)
.closeSoftKeyboard()
.pressBack(new SaveOrDiscardFormDialog<>("Two Question Required", new MainMenuPage()))
.pressBack(new SaveOrDiscardFormDialog<>(new MainMenuPage()))
.clickSaveChanges()

.clickEditSavedForm(1)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ class SavePointTest {
.assertTextDoesNotExist("46")
.pressBack(FormEntryPage("Two Question"))
.assertQuestion("What is your name?")
.pressBack(SaveOrDiscardFormDialog("Two Question", AppClosedPage()))
.pressBack(SaveOrDiscardFormDialog(AppClosedPage()))
.clickSaveChanges()

// Check audit log
Expand Down Expand Up @@ -84,7 +84,7 @@ class SavePointTest {
.assertTextDoesNotExist("46")
.pressBack(FormEntryPage("Two Question"))
.assertQuestion("What is your name?")
.pressBack(SaveOrDiscardFormDialog("Two Question", AppClosedPage()))
.pressBack(SaveOrDiscardFormDialog(AppClosedPage()))
.clickSaveChanges()

// Check audit log
Expand Down Expand Up @@ -116,7 +116,7 @@ class SavePointTest {
.assertText("Alexei")
.pressBack(FormEntryPage("Two Question"))
.assertQuestion("What is your name?")
.pressBack(SaveOrDiscardFormDialog("Two Question", AppClosedPage()))
.pressBack(SaveOrDiscardFormDialog(AppClosedPage()))
.clickSaveChanges()

// Check audit log
Expand Down Expand Up @@ -156,7 +156,7 @@ class SavePointTest {
.assertText("52")
.pressBack(FormEntryPage("Two Question"))
.assertQuestion("What is your name?")
.pressBack(SaveOrDiscardFormDialog("Two Question", AppClosedPage()))
.pressBack(SaveOrDiscardFormDialog(AppClosedPage()))
.clickSaveChanges()

// Check audit log
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -117,7 +117,6 @@ class TrackChangesReasonTest {
.closeSoftKeyboard()
.pressBack(
SaveOrDiscardFormDialog(
"Track Changes Reason",
ChangesReasonPromptPage("Track Changes Reason")
)
)
Expand All @@ -137,7 +136,7 @@ class TrackChangesReasonTest {
.clickOnForm("Track Changes Reason")
.clickGoToStart()
.closeSoftKeyboard()
.pressBack(SaveOrDiscardFormDialog("Track Changes Reason", MainMenuPage()))
.pressBack(SaveOrDiscardFormDialog(MainMenuPage()))
.clickDiscardChanges()
}

Expand Down Expand Up @@ -166,7 +165,7 @@ class TrackChangesReasonTest {
.startBlankForm("Track Changes Reason")
.clickSave()
.closeSoftKeyboard()
.pressBack(SaveOrDiscardFormDialog("Track Changes Reason", MainMenuPage()))
.pressBack(SaveOrDiscardFormDialog(MainMenuPage()))
.clickSaveChanges()
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -100,7 +100,7 @@ class FormMetadataSettingsTest {
.pressBack(MainMenuPage())
.startBlankForm("Metadata")
.assertText("Chino")
.pressBack(SaveOrDiscardFormDialog("Metadata", MainMenuPage()))
.pressBack(SaveOrDiscardFormDialog(MainMenuPage()))
.clickDiscardForm()
.openProjectSettingsDialog()
.clickSettings()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,13 +26,13 @@
import org.odk.collect.android.support.ActivityHelpers;
import org.odk.collect.android.support.pages.AddNewRepeatDialog;
import org.odk.collect.android.support.pages.BlankFormSearchPage;
import org.odk.collect.android.support.pages.ExitFormDialog;
import org.odk.collect.android.support.pages.FillBlankFormPage;
import org.odk.collect.android.support.pages.FormEndPage;
import org.odk.collect.android.support.pages.FormEntryPage;
import org.odk.collect.android.support.pages.FormHierarchyPage;
import org.odk.collect.android.support.pages.MainMenuPage;
import org.odk.collect.android.support.pages.ProjectSettingsPage;
import org.odk.collect.android.support.pages.SaveOrDiscardFormDialog;
import org.odk.collect.android.support.rules.CollectTestRule;
import org.odk.collect.android.support.rules.TestRuleChain;

Expand All @@ -55,7 +55,7 @@ public void exitDialog_ShouldDisplaySaveAndIgnoreOptions() {
rule.startAtMainMenu()
.copyForm("all-widgets.xml")
.startBlankForm("All widgets")
.pressBack(new ExitFormDialog("All widgets"))
.pressBack(new SaveOrDiscardFormDialog<>(new MainMenuPage()))
.assertText(R.string.save_as_draft)
.assertText(R.string.do_not_save)
.clickOnString(R.string.do_not_save)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,12 @@
import org.junit.Test;
import org.junit.rules.RuleChain;
import org.odk.collect.android.R;
import org.odk.collect.android.support.rules.CollectTestRule;
import org.odk.collect.android.support.rules.TestRuleChain;
import org.odk.collect.android.support.pages.AccessControlPage;
import org.odk.collect.android.support.pages.ExitFormDialog;
import org.odk.collect.android.support.pages.ProjectSettingsPage;
import org.odk.collect.android.support.pages.MainMenuPage;
import org.odk.collect.android.support.pages.ProjectSettingsPage;
import org.odk.collect.android.support.pages.SaveOrDiscardFormDialog;
import org.odk.collect.android.support.rules.CollectTestRule;
import org.odk.collect.android.support.rules.TestRuleChain;

//Issue NODK-243
public class FormEntrySettingsTest {
Expand Down Expand Up @@ -59,7 +59,7 @@ public void movingBackwards_shouldBeTurnedOn() {
.swipeToNextQuestion("String widget")
.closeSoftKeyboard()
.swipeToPreviousQuestion("String widget")
.pressBack(new ExitFormDialog("All widgets"))
.pressBack(new SaveOrDiscardFormDialog<>(new MainMenuPage(), false))
.assertText(R.string.do_not_save)
.assertTextDoesNotExist(R.string.keep_changes)
.clickOnString(R.string.do_not_save);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ public void openHierarchyView_ShouldSeeShortForms() {
.assertText("YY")
.pressBack(new FormEntryPage("OnePageFormShort"))
.closeSoftKeyboard()
.pressBack(new SaveOrDiscardFormDialog<>("OnePageFormShort", new MainMenuPage()))
.pressBack(new SaveOrDiscardFormDialog<>(new MainMenuPage()))
.clickDiscardForm();
}
}

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@ public FormEntryPage fillOut(QuestionAndAnswer... questionsAndAnswers) {

public <D extends Page<D>> D fillOutAndSave(D destination, QuestionAndAnswer... questionsAndAnswers) {
return fillOut(questionsAndAnswers)
.pressBack(new SaveOrDiscardFormDialog<>(formName, destination))
.pressBack(new SaveOrDiscardFormDialog<>(destination))
.clickSaveChanges();
}

Expand Down Expand Up @@ -383,25 +383,25 @@ public FormEntryPage assertConstraintDisplayed(String constraintText) {

public MainMenuPage pressBackAndDiscardChanges() {
return closeSoftKeyboard()
.pressBack(new SaveOrDiscardFormDialog<>(formName, new MainMenuPage()))
.pressBack(new SaveOrDiscardFormDialog<>(new MainMenuPage()))
.clickDiscardChanges();
}

public <D extends Page<D>> D pressBackAndDiscardChanges(D destination) {
return closeSoftKeyboard()
.pressBack(new SaveOrDiscardFormDialog<>(formName, destination))
.pressBack(new SaveOrDiscardFormDialog<>(destination))
.clickDiscardChanges();
}

public MainMenuPage pressBackAndDiscardForm() {
return closeSoftKeyboard()
.pressBack(new SaveOrDiscardFormDialog<>(formName, new MainMenuPage()))
.pressBack(new SaveOrDiscardFormDialog<>(new MainMenuPage()))
.clickDiscardForm();
}

public <D extends Page<D>> D pressBackAndDiscardForm(D destination) {
return closeSoftKeyboard()
.pressBack(new SaveOrDiscardFormDialog<D>(formName, destination))
.pressBack(new SaveOrDiscardFormDialog<D>(destination))
.clickDiscardForm();
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,18 @@ package org.odk.collect.android.support.pages
import android.os.Build
import org.odk.collect.android.R

class SaveOrDiscardFormDialog<D : Page<D>>(
private val formName: String,
private val destination: D
class SaveOrDiscardFormDialog<D : Page<D>> @JvmOverloads constructor(
private val destination: D,
private val saveAsDraftEnabled: Boolean = true
) : Page<SaveOrDiscardFormDialog<D>>() {

override fun assertOnPage(): SaveOrDiscardFormDialog<D> {
val title = getTranslatedString(R.string.exit) + " " + formName
assertText(title)
if (saveAsDraftEnabled) {
assertText(R.string.quit_form_title)
} else {
assertText(R.string.quit_form_continue_title)
}

return this
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ import org.odk.collect.android.formentry.saving.DiskFormSaver
import org.odk.collect.android.formentry.saving.FormSaveViewModel
import org.odk.collect.android.instancemanagement.autosend.AutoSendSettingsProvider
import org.odk.collect.android.projects.CurrentProjectProvider
import org.odk.collect.android.utilities.InstancesRepositoryProvider
import org.odk.collect.android.utilities.MediaUtils
import org.odk.collect.async.Scheduler
import org.odk.collect.audiorecorder.recording.AudioRecorder
Expand All @@ -42,14 +43,17 @@ class FormEntryViewModelFactory(
private val permissionsChecker: PermissionsChecker,
private val fusedLocationClient: LocationClient,
private val permissionsProvider: PermissionsProvider,
private val autoSendSettingsProvider: AutoSendSettingsProvider
private val autoSendSettingsProvider: AutoSendSettingsProvider,
private val instancesRepositoryProvider: InstancesRepositoryProvider
) : AbstractSavedStateViewModelFactory(owner, null) {

override fun <T : ViewModel> create(
key: String,
modelClass: Class<T>,
handle: SavedStateHandle
): T {
val projectId = currentProjectProvider.getCurrentProject().uuid

return when (modelClass) {
FormEntryViewModel::class.java -> FormEntryViewModel(
System::currentTimeMillis,
Expand All @@ -58,17 +62,20 @@ class FormEntryViewModelFactory(
sessionId
)

FormSaveViewModel::class.java -> FormSaveViewModel(
handle,
System::currentTimeMillis,
DiskFormSaver(),
mediaUtils,
scheduler,
audioRecorder,
currentProjectProvider,
formSessionRepository.get(sessionId),
entitiesRepositoryProvider.get(currentProjectProvider.getCurrentProject().uuid)
)
FormSaveViewModel::class.java -> {
FormSaveViewModel(
handle,
System::currentTimeMillis,
DiskFormSaver(),
mediaUtils,
scheduler,
audioRecorder,
currentProjectProvider,
formSessionRepository.get(sessionId),
entitiesRepositoryProvider.get(projectId),
instancesRepositoryProvider.get(projectId)
)
}

BackgroundAudioViewModel::class.java -> {
val recordAudioActionRegistry = object : RecordAudioActionRegistry {
Expand Down Expand Up @@ -109,7 +116,12 @@ class FormEntryViewModelFactory(

IdentityPromptViewModel::class.java -> IdentityPromptViewModel()

FormEndViewModel::class.java -> FormEndViewModel(formSessionRepository, sessionId, settingsProvider, autoSendSettingsProvider)
FormEndViewModel::class.java -> FormEndViewModel(
formSessionRepository,
sessionId,
settingsProvider,
autoSendSettingsProvider
)

else -> throw IllegalArgumentException()
} as T
Expand Down
Loading