From 7d3122f1370b29793a0a8c63ea0462d079e6b339 Mon Sep 17 00:00:00 2001 From: Marvin Date: Tue, 17 Mar 2026 16:21:37 -0300 Subject: [PATCH] Fix: Date/time now shows last edited time, not last opened The app was incorrectly updating the note's timestamp every time it was saved, even when no changes were made. This caused the displayed date to show 'last opened' instead of 'created/last edited'. Changes: - Added hasChanges() method to Note model to detect actual content modifications - Added markAsSaved() method to update original values after successful save - Modified saveNoteImmediately() to only update timestamp when changes exist - Used transient fields for tracking original values (not serialized) --- .../fragments/NoteEditorFragment.java | 5 ++- .../main/java/com/notesapp/models/Note.java | 40 +++++++++++++++++++ 2 files changed, 44 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/com/notesapp/fragments/NoteEditorFragment.java b/app/src/main/java/com/notesapp/fragments/NoteEditorFragment.java index 23e7ae5..8ad01a0 100644 --- a/app/src/main/java/com/notesapp/fragments/NoteEditorFragment.java +++ b/app/src/main/java/com/notesapp/fragments/NoteEditorFragment.java @@ -257,8 +257,11 @@ public class NoteEditorFragment extends Fragment { } private void saveNoteImmediately() { - note.setModifiedTimestamp(System.currentTimeMillis()); + if (note.hasChanges()) { + note.setModifiedTimestamp(System.currentTimeMillis()); + } storage.saveNote(note); + note.markAsSaved(); } @Override diff --git a/app/src/main/java/com/notesapp/models/Note.java b/app/src/main/java/com/notesapp/models/Note.java index c0e5b01..8c5a4ad 100644 --- a/app/src/main/java/com/notesapp/models/Note.java +++ b/app/src/main/java/com/notesapp/models/Note.java @@ -16,6 +16,11 @@ public class Note implements Serializable { private long modifiedTimestamp; private String content; private List items; + + // Track original values to detect actual changes + private transient String originalTitle; + private transient String originalContent; + private transient List originalItemsJson; public Note() { this.id = 0; @@ -24,6 +29,7 @@ public class Note implements Serializable { this.modifiedTimestamp = System.currentTimeMillis(); this.content = ""; this.items = new ArrayList<>(); + setOriginalValues(); } public Note(int id, String title, NoteType type) { @@ -33,6 +39,40 @@ public class Note implements Serializable { this.modifiedTimestamp = System.currentTimeMillis(); this.content = ""; this.items = new ArrayList<>(); + setOriginalValues(); + } + + private void setOriginalValues() { + originalTitle = title != null ? title : ""; + originalContent = content != null ? content : ""; + if (items != null) { + originalItemsJson = new ArrayList<>(); + for (ChecklistItem item : items) { + originalItemsJson.add(item.getText() + "|" + Boolean.toString(item.isChecked())); + } + } else { + originalItemsJson = new ArrayList<>(); + } + } + + public boolean hasChanges() { + if (!originalTitle.equals(title)) return true; + if (!originalContent.equals(content)) return true; + + // Check checklist items + if (items != null && originalItemsJson != null) { + if (items.size() != originalItemsJson.size()) return true; + for (int i = 0; i < items.size(); i++) { + String expected = items.get(i).getText() + "|" + Boolean.toString(items.get(i).isChecked()); + if (!expected.equals(originalItemsJson.get(i))) return true; + } + } + + return false; + } + + public void markAsSaved() { + setOriginalValues(); } public int getId() {