When deserializing a Note from JSON, the constructor was called first which initialized original tracking with empty values. Then the JSON fields were parsed and set, but hasChanges() would always return true because it compared the loaded content against empty originals. Solution: Call markAsSaved() after parsing in fromJson() to update the original tracking with the actual loaded data. |
||
|---|---|---|
| app | ||
| gradle/wrapper | ||
| gradle-8.0 | ||
| .gitignore | ||
| README.md | ||
| build.gradle | ||
| gradle.properties | ||
| gradlew | ||
| gradlew.bat | ||
| settings.gradle | ||
README.md
Notes App
A lightweight personal notes app for Android with plain text and checklist note types.
Features
- Two Note Types: Plain text notes and checklists
- Dark Mode Only: Optimized for low-light usage
- Sortable List: Sort by date (most/oldest) or alphabetically (A-Z/Z-A)
- Swipe to Delete: Swipe any note left/right to delete with confirmation
- Auto-save: Notes are automatically saved as you type
- Checklist Features:
- Add/remove items
- Toggle checkboxes
- Progress indicator (X/Y completed)
- "Delete All Checked" button - Remove all checked items at once
Requirements
- Android Studio Hedgehog or later
- JDK 17
- Minimum SDK: API 24 (Android 7.0)
- Target SDK: API 34 (Android 14)
How to Build
- Open Android Studio
- Select File > Open and navigate to the
NotesAppfolder - Wait for Gradle sync to complete
- Connect an Android device or start an emulator (API 24+)
- Click Run (Shift+F10) or select Run > Run 'app'
Project Structure
NotesApp/
├── app/src/main/java/com/notesapp/
│ ├── MainActivity.java # Main activity hosting fragments
│ ├── fragments/
│ │ ├── NotesListFragment.java # Note list with sorting & swipe-to-delete
│ │ └── NoteEditorFragment.java # Editor for text and checklist notes
│ ├── adapters/
│ │ ├── NotesAdapter.java # RecyclerView adapter for note cards
│ │ └── ChecklistAdapter.java # RecyclerView adapter for checklist items
│ ├── models/
│ │ ├── Note.java # Data model with JSON serialization
│ │ └── ChecklistItem.java # Checklist item data model
│ └── utils/
│ └── NotesStorage.java # SharedPreferences storage layer
├── app/src/main/res/
│ ├── layout/ # XML layouts
│ ├── drawable/ # Vector icons
│ └── values/ # Colors, strings, themes
└── build.gradle # App configuration
Storage
Notes are stored in SharedPreferences with the following structure:
note_count: Next available IDsort_order: Current sort preference- Per-note data (JSON serialized): type, title, content/items, timestamp
License
Personal use only.