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() {