mobile/UI: show notification with changes made after save

Since we save after every operation in the mobile app, this allows us to
tell the user what we actually saved - and we can remind the user that
they can undo/redo the last operation.

The code gets more complicated because in the case that the operation
that triggered this change was an undo, we need to show the redo text to
describe what we are saving, and must point the user to the redo
operation.

Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
This commit is contained in:
Dirk Hohndel 2021-01-17 13:09:01 -08:00
parent fa8ac5ceeb
commit e1cb368437
2 changed files with 16 additions and 10 deletions

View file

@ -1332,7 +1332,7 @@ void QMLManager::addDiveToTrip(int id, int tripId)
changesNeedSaving();
}
void QMLManager::changesNeedSaving()
void QMLManager::changesNeedSaving(bool fromUndo)
{
// we no longer save right away on iOS because file access is so slow; on the other hand,
// on Android the save as the user switches away doesn't seem to work... drat.
@ -1343,9 +1343,9 @@ void QMLManager::changesNeedSaving()
mark_divelist_changed(true);
emit syncStateChanged();
#if defined(Q_OS_IOS)
saveChangesLocal();
saveChangesLocal(fromUndo);
#else
saveChangesCloud(false);
saveChangesCloud(false, fromUndo);
#endif
updateAllGlobalLists();
}
@ -1376,7 +1376,7 @@ void QMLManager::openNoCloudRepo()
openLocalThenRemote(filename);
}
void QMLManager::saveChangesLocal()
void QMLManager::saveChangesLocal(bool fromUndo)
{
if (unsavedChanges()) {
if (qPrefCloudStorage::cloud_verification_status() == qPrefCloudStorage::CS_NOCLOUD) {
@ -1406,12 +1406,18 @@ void QMLManager::saveChangesLocal()
mark_divelist_changed(false);
Command::setClean();
updateHaveLocalChanges(true);
// provide a useful undo/redo notification
QString msgFormat = tr("Changes saved:'%1'. %2 possible via context menu");
if (fromUndo)
setNotificationText(msgFormat.arg(tr("Undo: %1").arg(getRedoText())).arg(tr("Redo")));
else
setNotificationText(msgFormat.arg(getUndoText()).arg(tr("Undo")));
} else {
appendTextToLog("local save requested with no unsaved changes");
}
}
void QMLManager::saveChangesCloud(bool forceRemoteSync)
void QMLManager::saveChangesCloud(bool forceRemoteSync, bool fromUndo)
{
if (!unsavedChanges() && !forceRemoteSync) {
appendTextToLog("asked to save changes but no unsaved changes");
@ -1419,7 +1425,7 @@ void QMLManager::saveChangesCloud(bool forceRemoteSync)
}
// first we need to store any unsaved changes to the local repo
gitProgressCB("Save changes to local cache");
saveChangesLocal();
saveChangesLocal(fromUndo);
// if the user asked not to push to the cloud we are done
if (git_local_only && !forceRemoteSync)
return;
@ -1439,7 +1445,7 @@ void QMLManager::saveChangesCloud(bool forceRemoteSync)
void QMLManager::undo()
{
Command::getUndoStack()->undo();
changesNeedSaving();
changesNeedSaving(true);
}
void QMLManager::redo()

View file

@ -190,9 +190,9 @@ public slots:
void removeDiveFromTrip(int id);
void addTripForDive(int id);
void addDiveToTrip(int id, int tripId);
void changesNeedSaving();
void changesNeedSaving(bool fromUndo = false);
void openNoCloudRepo();
void saveChangesCloud(bool forceRemoteSync);
void saveChangesCloud(bool forceRemoteSync, bool fromUndo = false);
void selectDive(int id);
void deleteDive(int id);
void toggleDiveInvalid(int id);
@ -283,7 +283,7 @@ private:
void consumeFinishedLoad();
void mergeLocalRepo();
void openLocalThenRemote(QString url);
void saveChangesLocal();
void saveChangesLocal(bool fromUndo = false);
#if defined(Q_OS_ANDROID) || defined(Q_OS_IOS)
QString appLogFileName;