From 5db4ef409a9b05fb63fdd32c3d688baf3f084b29 Mon Sep 17 00:00:00 2001 From: TopFox Date: Sat, 5 Jul 2025 23:33:15 +0200 Subject: [PATCH 01/11] feat: allow to delete the last note --- .../fossify/notes/activities/MainActivity.kt | 24 +++++++++++++------ 1 file changed, 17 insertions(+), 7 deletions(-) diff --git a/app/src/main/kotlin/org/fossify/notes/activities/MainActivity.kt b/app/src/main/kotlin/org/fossify/notes/activities/MainActivity.kt index 4b3a8ad8b..2abf438d6 100644 --- a/app/src/main/kotlin/org/fossify/notes/activities/MainActivity.kt +++ b/app/src/main/kotlin/org/fossify/notes/activities/MainActivity.kt @@ -266,7 +266,6 @@ class MainActivity : SimpleActivity() { findItem(R.id.rename_note).isVisible = multipleNotesExist findItem(R.id.open_note).isVisible = multipleNotesExist - findItem(R.id.delete_note).isVisible = multipleNotesExist findItem(R.id.open_search).isVisible = !isCurrentItemChecklist findItem(R.id.remove_done_items).isVisible = isCurrentItemChecklist findItem(R.id.sort_checklist).isVisible = isCurrentItemChecklist @@ -1337,7 +1336,7 @@ class MainActivity : SimpleActivity() { } fun deleteNote(deleteFile: Boolean, note: Note) { - if (mNotes.size <= 1 || note != mCurrentNote) { + if (mNotes.isEmpty() || note != mCurrentNote) { return } @@ -1358,22 +1357,33 @@ class MainActivity : SimpleActivity() { private fun doDeleteNote(note: Note, deleteFile: Boolean) { ensureBackgroundThread { val currentNoteIndex = mNotes.indexOf(note) - val noteToRefresh = + + val noteToRefresh = if (mNotes.size == 1) { + null + } else { mNotes[if (currentNoteIndex > 0) currentNoteIndex - 1 else currentNoteIndex + 1] + } notesDB.deleteNote(note) widgetsDB.deleteNoteWidgets(note.id!!) + NotesHelper(this).getNotes { + mNotes = it + showSaveButton = false + initViewPager() + } + refreshNotes(noteToRefresh, deleteFile) } } - private fun refreshNotes(note: Note, deleteFile: Boolean) { + private fun refreshNotes(note: Note?, deleteFile: Boolean) { NotesHelper(this).getNotes { mNotes = it - val noteId = note.id + val currentNote = note ?: mNotes[0] + val noteId = currentNote.id updateSelectedNote(noteId!!) - if (config.widgetNoteId == note.id) { + if (config.widgetNoteId == currentNote.id) { config.widgetNoteId = mCurrentNote.id!! updateWidgets() } @@ -1381,7 +1391,7 @@ class MainActivity : SimpleActivity() { initViewPager() if (deleteFile) { - deleteFile(FileDirItem(note.path, note.title)) { + deleteFile(FileDirItem(currentNote.path, currentNote.title)) { if (!it) { toast(org.fossify.commons.R.string.unknown_error_occurred) } From 0b8602dfc050cffffead53de14deadfb3c9cc8fb Mon Sep 17 00:00:00 2001 From: TopFox Date: Sun, 6 Jul 2025 09:37:37 +0200 Subject: [PATCH 02/11] fix: avoid inserting a note with null id --- app/src/main/kotlin/org/fossify/notes/helpers/NotesHelper.kt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/src/main/kotlin/org/fossify/notes/helpers/NotesHelper.kt b/app/src/main/kotlin/org/fossify/notes/helpers/NotesHelper.kt index fd438f73a..3c2dea81e 100644 --- a/app/src/main/kotlin/org/fossify/notes/helpers/NotesHelper.kt +++ b/app/src/main/kotlin/org/fossify/notes/helpers/NotesHelper.kt @@ -42,7 +42,8 @@ class NotesHelper(val context: Context) { if (notes.isEmpty()) { val generalNote = context.resources.getString(R.string.general_note) val note = Note(null, generalNote, "", NoteType.TYPE_TEXT, "", PROTECTION_NONE, "") - context.notesDB.insertOrUpdate(note) + val insertedId = context.notesDB.insertOrUpdate(note) + note.id = insertedId notes.add(note) } From bc09b45af71360f98d408e516d6cc43f104ce67f Mon Sep 17 00:00:00 2001 From: TopFox Date: Sun, 6 Jul 2025 09:38:21 +0200 Subject: [PATCH 03/11] fix: remove unused import --- app/src/main/kotlin/org/fossify/notes/helpers/NotesHelper.kt | 1 - 1 file changed, 1 deletion(-) diff --git a/app/src/main/kotlin/org/fossify/notes/helpers/NotesHelper.kt b/app/src/main/kotlin/org/fossify/notes/helpers/NotesHelper.kt index 3c2dea81e..44e27d5ac 100644 --- a/app/src/main/kotlin/org/fossify/notes/helpers/NotesHelper.kt +++ b/app/src/main/kotlin/org/fossify/notes/helpers/NotesHelper.kt @@ -3,7 +3,6 @@ package org.fossify.notes.helpers import android.content.Context import android.os.Handler import android.os.Looper -import kotlinx.serialization.encodeToString import kotlinx.serialization.json.Json import org.fossify.commons.activities.BaseSimpleActivity import org.fossify.commons.helpers.ExportResult From 73eacc518386ae43e4743ada32f47c0fbb7b5665 Mon Sep 17 00:00:00 2001 From: TopFox Date: Sun, 6 Jul 2025 09:38:58 +0200 Subject: [PATCH 04/11] fix: remove unnecessary call to getNotes --- .../fossify/notes/activities/MainActivity.kt | 92 ++----------------- 1 file changed, 7 insertions(+), 85 deletions(-) diff --git a/app/src/main/kotlin/org/fossify/notes/activities/MainActivity.kt b/app/src/main/kotlin/org/fossify/notes/activities/MainActivity.kt index 2abf438d6..6cde7592c 100644 --- a/app/src/main/kotlin/org/fossify/notes/activities/MainActivity.kt +++ b/app/src/main/kotlin/org/fossify/notes/activities/MainActivity.kt @@ -4,11 +4,7 @@ import android.accounts.NetworkErrorException import android.annotation.SuppressLint import android.content.ActivityNotFoundException import android.content.Intent -import android.content.Intent.FLAG_ACTIVITY_CLEAR_TASK -import android.content.Intent.FLAG_ACTIVITY_NEW_TASK -import android.content.Intent.FLAG_ACTIVITY_NO_HISTORY -import android.content.Intent.FLAG_GRANT_READ_URI_PERMISSION -import android.content.Intent.FLAG_GRANT_WRITE_URI_PERMISSION +import android.content.Intent.* import android.content.pm.ShortcutInfo import android.content.pm.ShortcutManager import android.graphics.drawable.Icon @@ -33,58 +29,9 @@ import android.widget.Toast import androidx.appcompat.content.res.AppCompatResources import androidx.core.net.toUri import androidx.viewpager.widget.ViewPager -import org.fossify.commons.dialogs.ConfirmationAdvancedDialog -import org.fossify.commons.dialogs.ConfirmationDialog -import org.fossify.commons.dialogs.FilePickerDialog -import org.fossify.commons.dialogs.RadioGroupDialog -import org.fossify.commons.dialogs.SecurityDialog -import org.fossify.commons.extensions.appLaunched -import org.fossify.commons.extensions.appLockManager -import org.fossify.commons.extensions.applyColorFilter -import org.fossify.commons.extensions.baseConfig -import org.fossify.commons.extensions.beVisibleIf -import org.fossify.commons.extensions.checkWhatsNew -import org.fossify.commons.extensions.clearBackgroundSpans -import org.fossify.commons.extensions.convertToBitmap -import org.fossify.commons.extensions.deleteFile -import org.fossify.commons.extensions.fadeIn -import org.fossify.commons.extensions.fadeOut -import org.fossify.commons.extensions.getContrastColor -import org.fossify.commons.extensions.getCurrentFormattedDateTime -import org.fossify.commons.extensions.getDocumentFile -import org.fossify.commons.extensions.getFilenameFromContentUri -import org.fossify.commons.extensions.getFilenameFromPath -import org.fossify.commons.extensions.getProperBackgroundColor -import org.fossify.commons.extensions.getProperPrimaryColor -import org.fossify.commons.extensions.getProperStatusBarColor -import org.fossify.commons.extensions.getRealPathFromURI -import org.fossify.commons.extensions.handleDeletePasswordProtection -import org.fossify.commons.extensions.hasPermission -import org.fossify.commons.extensions.hideKeyboard -import org.fossify.commons.extensions.highlightText -import org.fossify.commons.extensions.isMediaFile -import org.fossify.commons.extensions.launchMoreAppsFromUsIntent -import org.fossify.commons.extensions.needsStupidWritePermissions -import org.fossify.commons.extensions.onGlobalLayout -import org.fossify.commons.extensions.onPageChangeListener -import org.fossify.commons.extensions.onTextChangeListener -import org.fossify.commons.extensions.performSecurityCheck -import org.fossify.commons.extensions.searchMatches -import org.fossify.commons.extensions.shortcutManager -import org.fossify.commons.extensions.showErrorToast -import org.fossify.commons.extensions.showKeyboard -import org.fossify.commons.extensions.toast -import org.fossify.commons.extensions.updateTextColors -import org.fossify.commons.extensions.value -import org.fossify.commons.extensions.viewBinding -import org.fossify.commons.helpers.LICENSE_RTL -import org.fossify.commons.helpers.PERMISSION_READ_STORAGE -import org.fossify.commons.helpers.PERMISSION_WRITE_STORAGE -import org.fossify.commons.helpers.PROTECTION_NONE -import org.fossify.commons.helpers.REAL_FILE_PATH -import org.fossify.commons.helpers.SHOW_ALL_TABS -import org.fossify.commons.helpers.ensureBackgroundThread -import org.fossify.commons.helpers.isQPlus +import org.fossify.commons.dialogs.* +import org.fossify.commons.extensions.* +import org.fossify.commons.helpers.* import org.fossify.commons.models.FAQItem import org.fossify.commons.models.FileDirItem import org.fossify.commons.models.RadioItem @@ -95,29 +42,10 @@ import org.fossify.notes.R import org.fossify.notes.adapters.NotesPagerAdapter import org.fossify.notes.databases.NotesDatabase import org.fossify.notes.databinding.ActivityMainBinding -import org.fossify.notes.dialogs.DeleteNoteDialog -import org.fossify.notes.dialogs.ExportFileDialog -import org.fossify.notes.dialogs.ImportFolderDialog -import org.fossify.notes.dialogs.NewNoteDialog -import org.fossify.notes.dialogs.OpenFileDialog -import org.fossify.notes.dialogs.OpenNoteDialog -import org.fossify.notes.dialogs.RenameNoteDialog -import org.fossify.notes.dialogs.SortChecklistDialog -import org.fossify.notes.extensions.config -import org.fossify.notes.extensions.getPercentageFontSize -import org.fossify.notes.extensions.notesDB -import org.fossify.notes.extensions.parseChecklistItems -import org.fossify.notes.extensions.updateWidgets -import org.fossify.notes.extensions.widgetsDB +import org.fossify.notes.dialogs.* +import org.fossify.notes.extensions.* import org.fossify.notes.fragments.TextFragment -import org.fossify.notes.helpers.MIME_TEXT_PLAIN -import org.fossify.notes.helpers.MyMovementMethod -import org.fossify.notes.helpers.NEW_CHECKLIST -import org.fossify.notes.helpers.NEW_TEXT_NOTE -import org.fossify.notes.helpers.NotesHelper -import org.fossify.notes.helpers.OPEN_NOTE_ID -import org.fossify.notes.helpers.SHORTCUT_NEW_CHECKLIST -import org.fossify.notes.helpers.SHORTCUT_NEW_TEXT_NOTE +import org.fossify.notes.helpers.* import org.fossify.notes.models.Note import org.fossify.notes.models.NoteType import java.io.File @@ -1367,12 +1295,6 @@ class MainActivity : SimpleActivity() { notesDB.deleteNote(note) widgetsDB.deleteNoteWidgets(note.id!!) - NotesHelper(this).getNotes { - mNotes = it - showSaveButton = false - initViewPager() - } - refreshNotes(noteToRefresh, deleteFile) } } From 1cc71581825fc3b98904cc5be610ec47173a8353 Mon Sep 17 00:00:00 2001 From: TopFox Date: Sat, 12 Jul 2025 21:49:01 +0200 Subject: [PATCH 05/11] fix: avoid wildcard imports --- .../fossify/notes/activities/MainActivity.kt | 86 +++++++++++++++++-- 1 file changed, 79 insertions(+), 7 deletions(-) diff --git a/app/src/main/kotlin/org/fossify/notes/activities/MainActivity.kt b/app/src/main/kotlin/org/fossify/notes/activities/MainActivity.kt index 6cde7592c..f6cd20fa8 100644 --- a/app/src/main/kotlin/org/fossify/notes/activities/MainActivity.kt +++ b/app/src/main/kotlin/org/fossify/notes/activities/MainActivity.kt @@ -4,7 +4,11 @@ import android.accounts.NetworkErrorException import android.annotation.SuppressLint import android.content.ActivityNotFoundException import android.content.Intent -import android.content.Intent.* +import android.content.Intent.FLAG_ACTIVITY_CLEAR_TASK +import android.content.Intent.FLAG_ACTIVITY_NEW_TASK +import android.content.Intent.FLAG_ACTIVITY_NO_HISTORY +import android.content.Intent.FLAG_GRANT_READ_URI_PERMISSION +import android.content.Intent.FLAG_GRANT_WRITE_URI_PERMISSION import android.content.pm.ShortcutInfo import android.content.pm.ShortcutManager import android.graphics.drawable.Icon @@ -29,9 +33,58 @@ import android.widget.Toast import androidx.appcompat.content.res.AppCompatResources import androidx.core.net.toUri import androidx.viewpager.widget.ViewPager -import org.fossify.commons.dialogs.* -import org.fossify.commons.extensions.* -import org.fossify.commons.helpers.* +import org.fossify.commons.dialogs.ConfirmationAdvancedDialog +import org.fossify.commons.dialogs.ConfirmationDialog +import org.fossify.commons.dialogs.FilePickerDialog +import org.fossify.commons.dialogs.RadioGroupDialog +import org.fossify.commons.dialogs.SecurityDialog +import org.fossify.commons.extensions.appLaunched +import org.fossify.commons.extensions.appLockManager +import org.fossify.commons.extensions.applyColorFilter +import org.fossify.commons.extensions.baseConfig +import org.fossify.commons.extensions.beVisibleIf +import org.fossify.commons.extensions.checkWhatsNew +import org.fossify.commons.extensions.clearBackgroundSpans +import org.fossify.commons.extensions.convertToBitmap +import org.fossify.commons.extensions.deleteFile +import org.fossify.commons.extensions.fadeIn +import org.fossify.commons.extensions.fadeOut +import org.fossify.commons.extensions.getContrastColor +import org.fossify.commons.extensions.getCurrentFormattedDateTime +import org.fossify.commons.extensions.getDocumentFile +import org.fossify.commons.extensions.getFilenameFromContentUri +import org.fossify.commons.extensions.getFilenameFromPath +import org.fossify.commons.extensions.getProperBackgroundColor +import org.fossify.commons.extensions.getProperPrimaryColor +import org.fossify.commons.extensions.getProperStatusBarColor +import org.fossify.commons.extensions.getRealPathFromURI +import org.fossify.commons.extensions.handleDeletePasswordProtection +import org.fossify.commons.extensions.hasPermission +import org.fossify.commons.extensions.hideKeyboard +import org.fossify.commons.extensions.highlightText +import org.fossify.commons.extensions.isMediaFile +import org.fossify.commons.extensions.launchMoreAppsFromUsIntent +import org.fossify.commons.extensions.needsStupidWritePermissions +import org.fossify.commons.extensions.onGlobalLayout +import org.fossify.commons.extensions.onPageChangeListener +import org.fossify.commons.extensions.onTextChangeListener +import org.fossify.commons.extensions.performSecurityCheck +import org.fossify.commons.extensions.searchMatches +import org.fossify.commons.extensions.shortcutManager +import org.fossify.commons.extensions.showErrorToast +import org.fossify.commons.extensions.showKeyboard +import org.fossify.commons.extensions.toast +import org.fossify.commons.extensions.updateTextColors +import org.fossify.commons.extensions.value +import org.fossify.commons.extensions.viewBinding +import org.fossify.commons.helpers.LICENSE_RTL +import org.fossify.commons.helpers.PERMISSION_READ_STORAGE +import org.fossify.commons.helpers.PERMISSION_WRITE_STORAGE +import org.fossify.commons.helpers.PROTECTION_NONE +import org.fossify.commons.helpers.REAL_FILE_PATH +import org.fossify.commons.helpers.SHOW_ALL_TABS +import org.fossify.commons.helpers.ensureBackgroundThread +import org.fossify.commons.helpers.isQPlus import org.fossify.commons.models.FAQItem import org.fossify.commons.models.FileDirItem import org.fossify.commons.models.RadioItem @@ -42,10 +95,29 @@ import org.fossify.notes.R import org.fossify.notes.adapters.NotesPagerAdapter import org.fossify.notes.databases.NotesDatabase import org.fossify.notes.databinding.ActivityMainBinding -import org.fossify.notes.dialogs.* -import org.fossify.notes.extensions.* +import org.fossify.notes.dialogs.DeleteNoteDialog +import org.fossify.notes.dialogs.ExportFileDialog +import org.fossify.notes.dialogs.ImportFolderDialog +import org.fossify.notes.dialogs.NewNoteDialog +import org.fossify.notes.dialogs.OpenFileDialog +import org.fossify.notes.dialogs.OpenNoteDialog +import org.fossify.notes.dialogs.RenameNoteDialog +import org.fossify.notes.dialogs.SortChecklistDialog +import org.fossify.notes.extensions.config +import org.fossify.notes.extensions.getPercentageFontSize +import org.fossify.notes.extensions.notesDB +import org.fossify.notes.extensions.parseChecklistItems +import org.fossify.notes.extensions.updateWidgets +import org.fossify.notes.extensions.widgetsDB import org.fossify.notes.fragments.TextFragment -import org.fossify.notes.helpers.* +import org.fossify.notes.helpers.MIME_TEXT_PLAIN +import org.fossify.notes.helpers.MyMovementMethod +import org.fossify.notes.helpers.NEW_CHECKLIST +import org.fossify.notes.helpers.NEW_TEXT_NOTE +import org.fossify.notes.helpers.NotesHelper +import org.fossify.notes.helpers.OPEN_NOTE_ID +import org.fossify.notes.helpers.SHORTCUT_NEW_CHECKLIST +import org.fossify.notes.helpers.SHORTCUT_NEW_TEXT_NOTE import org.fossify.notes.models.Note import org.fossify.notes.models.NoteType import java.io.File From fcb3f3754e350465ea84d70225e3d1cf801d5070 Mon Sep 17 00:00:00 2001 From: TopFox Date: Sun, 13 Jul 2025 11:22:57 +0200 Subject: [PATCH 06/11] feat: only display "delete note" menu option if the current note is not the empty default one --- .../org/fossify/notes/activities/MainActivity.kt | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/app/src/main/kotlin/org/fossify/notes/activities/MainActivity.kt b/app/src/main/kotlin/org/fossify/notes/activities/MainActivity.kt index f6cd20fa8..945e20fa6 100644 --- a/app/src/main/kotlin/org/fossify/notes/activities/MainActivity.kt +++ b/app/src/main/kotlin/org/fossify/notes/activities/MainActivity.kt @@ -19,6 +19,7 @@ import android.print.PrintAttributes import android.print.PrintManager import android.text.method.ArrowKeyMovementMethod import android.text.method.LinkMovementMethod +import android.util.Log import android.util.TypedValue import android.view.ActionMode import android.view.Gravity @@ -252,6 +253,7 @@ class MainActivity : SimpleActivity() { private fun refreshMenuItems() { val multipleNotesExist = mNotes.size > 1 val isCurrentItemChecklist = isCurrentItemChecklist() + val isDefaultEmptyNote = isDefaultEmptyNote() binding.mainToolbar.menu.apply { findItem(R.id.undo).apply { @@ -276,6 +278,7 @@ class MainActivity : SimpleActivity() { mNotes.isNotEmpty() && (::mCurrentNote.isInitialized && mCurrentNote.isLocked()) findItem(R.id.more_apps_from_us).isVisible = !resources.getBoolean(org.fossify.commons.R.bool.hide_google_relations) + findItem(R.id.delete_note).isVisible = !isDefaultEmptyNote saveNoteButton = findItem(R.id.save_note) saveNoteButton!!.isVisible = @@ -396,6 +399,14 @@ class MainActivity : SimpleActivity() { } } + private fun isDefaultEmptyNote(): Boolean { + return if (::mCurrentNote.isInitialized) { + (mCurrentNote.title == getString(R.string.general_note) && mCurrentNote.value.isEmpty()) + } else { + false + } + } + @SuppressLint("NewApi") private fun checkShortcuts() { val appIconColor = config.appIconColor From 1932f39e595ef34fb18c43522bd078e8a9ba7a19 Mon Sep 17 00:00:00 2001 From: TopFox Date: Sun, 13 Jul 2025 11:42:59 +0200 Subject: [PATCH 07/11] fix: use getCurrentNoteViewText instead of value to check if note has text --- .../main/kotlin/org/fossify/notes/activities/MainActivity.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/kotlin/org/fossify/notes/activities/MainActivity.kt b/app/src/main/kotlin/org/fossify/notes/activities/MainActivity.kt index 945e20fa6..c03d42d77 100644 --- a/app/src/main/kotlin/org/fossify/notes/activities/MainActivity.kt +++ b/app/src/main/kotlin/org/fossify/notes/activities/MainActivity.kt @@ -401,7 +401,7 @@ class MainActivity : SimpleActivity() { private fun isDefaultEmptyNote(): Boolean { return if (::mCurrentNote.isInitialized) { - (mCurrentNote.title == getString(R.string.general_note) && mCurrentNote.value.isEmpty()) + (mCurrentNote.title == getString(R.string.general_note) && mAdapter?.getCurrentNoteViewText(binding.viewPager.currentItem)!!.isEmpty()) } else { false } From 054c7dbe02f135a399ffd01f2bd19de1c6613963 Mon Sep 17 00:00:00 2001 From: TopFox Date: Sun, 13 Jul 2025 11:43:58 +0200 Subject: [PATCH 08/11] feat: allow deleting default empty note if more than 1 note exist --- .../main/kotlin/org/fossify/notes/activities/MainActivity.kt | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/app/src/main/kotlin/org/fossify/notes/activities/MainActivity.kt b/app/src/main/kotlin/org/fossify/notes/activities/MainActivity.kt index c03d42d77..708868e9e 100644 --- a/app/src/main/kotlin/org/fossify/notes/activities/MainActivity.kt +++ b/app/src/main/kotlin/org/fossify/notes/activities/MainActivity.kt @@ -19,7 +19,6 @@ import android.print.PrintAttributes import android.print.PrintManager import android.text.method.ArrowKeyMovementMethod import android.text.method.LinkMovementMethod -import android.util.Log import android.util.TypedValue import android.view.ActionMode import android.view.Gravity @@ -278,7 +277,7 @@ class MainActivity : SimpleActivity() { mNotes.isNotEmpty() && (::mCurrentNote.isInitialized && mCurrentNote.isLocked()) findItem(R.id.more_apps_from_us).isVisible = !resources.getBoolean(org.fossify.commons.R.bool.hide_google_relations) - findItem(R.id.delete_note).isVisible = !isDefaultEmptyNote + findItem(R.id.delete_note).isVisible = !isDefaultEmptyNote || mNotes.size > 1 saveNoteButton = findItem(R.id.save_note) saveNoteButton!!.isVisible = From 78bf84086b2886b05174e42079c49ca0e7631dc0 Mon Sep 17 00:00:00 2001 From: TopFox Date: Sun, 13 Jul 2025 11:46:55 +0200 Subject: [PATCH 09/11] docs(changelog): added feature to CHANGELOG.md --- CHANGELOG.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2b2c2c40b..689df874d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,8 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). ## [Unreleased] +### Added +- Option to delete the last open note ([#157]) ### Changed @@ -71,3 +73,4 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 [#83]: https://github.com/FossifyOrg/Notes/issues/83 [#99]: https://github.com/FossifyOrg/Notes/issues/99 [#110]: https://github.com/FossifyOrg/Notes/issues/110 +[#157]: https://github.com/FossifyOrg/Notes/issues/157 From 065f4bf4d1b80611cf8b99f28ff939d8c49c6f88 Mon Sep 17 00:00:00 2001 From: TopFox Date: Sun, 13 Jul 2025 12:05:58 +0200 Subject: [PATCH 10/11] style: break long line in two --- .../main/kotlin/org/fossify/notes/activities/MainActivity.kt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/src/main/kotlin/org/fossify/notes/activities/MainActivity.kt b/app/src/main/kotlin/org/fossify/notes/activities/MainActivity.kt index 708868e9e..40662c1d2 100644 --- a/app/src/main/kotlin/org/fossify/notes/activities/MainActivity.kt +++ b/app/src/main/kotlin/org/fossify/notes/activities/MainActivity.kt @@ -400,7 +400,8 @@ class MainActivity : SimpleActivity() { private fun isDefaultEmptyNote(): Boolean { return if (::mCurrentNote.isInitialized) { - (mCurrentNote.title == getString(R.string.general_note) && mAdapter?.getCurrentNoteViewText(binding.viewPager.currentItem)!!.isEmpty()) + (mCurrentNote.title == getString(R.string.general_note) && + mAdapter?.getCurrentNoteViewText(binding.viewPager.currentItem)!!.isEmpty()) } else { false } From b1a8dfd4126726a578d479312bd3b5eed3ac7457 Mon Sep 17 00:00:00 2001 From: TopFox Date: Sun, 13 Jul 2025 16:58:07 +0200 Subject: [PATCH 11/11] fix: refresh menu items when note was empty and is not anymore, or when it wasn't and now is --- .../org/fossify/notes/activities/MainActivity.kt | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/app/src/main/kotlin/org/fossify/notes/activities/MainActivity.kt b/app/src/main/kotlin/org/fossify/notes/activities/MainActivity.kt index 83ed1e169..e9e6e66de 100644 --- a/app/src/main/kotlin/org/fossify/notes/activities/MainActivity.kt +++ b/app/src/main/kotlin/org/fossify/notes/activities/MainActivity.kt @@ -147,6 +147,7 @@ class MainActivity : SimpleActivity() { private var searchIndex = 0 private var searchMatches = emptyList() private var isSearchActive = false + private var wasNoteTextEmpty: Boolean = false private lateinit var searchQueryET: MyEditText private lateinit var searchPrevBtn: ImageView @@ -402,8 +403,9 @@ class MainActivity : SimpleActivity() { private fun isDefaultEmptyNote(): Boolean { return if (::mCurrentNote.isInitialized) { - (mCurrentNote.title == getString(R.string.general_note) && - mAdapter?.getCurrentNoteViewText(binding.viewPager.currentItem)!!.isEmpty()) + (mCurrentNote.title == getString(R.string.general_note) && + getCurrentNoteText().isNullOrEmpty() && + mCurrentNote.value.isEmpty()) } else { false } @@ -567,6 +569,7 @@ class MainActivity : SimpleActivity() { mNotes = notes mCurrentNote = mNotes[0] + wasNoteTextEmpty = mCurrentNote.value.isEmpty() mAdapter = NotesPagerAdapter(supportFragmentManager, mNotes, this) binding.viewPager.apply { adapter = mAdapter @@ -1556,6 +1559,14 @@ class MainActivity : SimpleActivity() { } } + if (getCurrentNoteText().isNullOrEmpty()) { + wasNoteTextEmpty = true + shouldRecreateMenu = true + } else if (wasNoteTextEmpty) { + wasNoteTextEmpty = false + shouldRecreateMenu = true + } + if (shouldRecreateMenu) { refreshMenuItems() }