From ee4250f02bf472998184b0bd633f3e73b7fc1e9f Mon Sep 17 00:00:00 2001 From: Daniel Date: Sun, 22 Mar 2026 21:27:17 +0100 Subject: [PATCH 1/4] Added a feature to hide notes. If the screen lock is enabled, they can only be accessed via the unlock method. --- .../com/philkes/notallyx/data/model/Folder.kt | 1 + .../notallyx/presentation/UiExtensions.kt | 1 + .../activity/main/MainActivity.kt | 29 ++++++- .../activity/main/fragment/HiddenFragment.kt | 38 +++++++++ .../activity/main/fragment/SearchFragment.kt | 2 + .../activity/note/NoteActionHandler.kt | 10 +++ .../presentation/viewmodel/BaseNoteModel.kt | 8 ++ .../viewmodel/preference/Preference.kt | 9 +++ .../notallyx/utils/security/LockUtils.kt | 78 ++++++++++++++++++- app/src/main/res/drawable/hidden.xml | 17 ++++ app/src/main/res/drawable/unhidden.xml | 10 +++ app/src/main/res/navigation/navigation.xml | 44 ++++++----- app/src/main/res/values-es/strings.xml | 26 +++++++ app/src/main/res/values/strings.xml | 8 ++ 14 files changed, 255 insertions(+), 26 deletions(-) create mode 100644 app/src/main/java/com/philkes/notallyx/presentation/activity/main/fragment/HiddenFragment.kt create mode 100644 app/src/main/res/drawable/hidden.xml create mode 100644 app/src/main/res/drawable/unhidden.xml diff --git a/app/src/main/java/com/philkes/notallyx/data/model/Folder.kt b/app/src/main/java/com/philkes/notallyx/data/model/Folder.kt index 2de9bdca..8b5490db 100644 --- a/app/src/main/java/com/philkes/notallyx/data/model/Folder.kt +++ b/app/src/main/java/com/philkes/notallyx/data/model/Folder.kt @@ -5,6 +5,7 @@ import java.io.Serializable enum class Folder : Serializable { NOTES, DELETED, + HIDDEN, ARCHIVED; companion object { diff --git a/app/src/main/java/com/philkes/notallyx/presentation/UiExtensions.kt b/app/src/main/java/com/philkes/notallyx/presentation/UiExtensions.kt index b6914863..fab9f6e8 100644 --- a/app/src/main/java/com/philkes/notallyx/presentation/UiExtensions.kt +++ b/app/src/main/java/com/philkes/notallyx/presentation/UiExtensions.kt @@ -401,6 +401,7 @@ fun Folder.movedToResId(): Int { Folder.DELETED -> R.plurals.deleted_selected_notes Folder.ARCHIVED -> R.plurals.archived_selected_notes Folder.NOTES -> R.plurals.restored_selected_notes + Folder.HIDDEN -> R.plurals.hidden_selected_notes } } diff --git a/app/src/main/java/com/philkes/notallyx/presentation/activity/main/MainActivity.kt b/app/src/main/java/com/philkes/notallyx/presentation/activity/main/MainActivity.kt index e2425bc2..e314ff1a 100644 --- a/app/src/main/java/com/philkes/notallyx/presentation/activity/main/MainActivity.kt +++ b/app/src/main/java/com/philkes/notallyx/presentation/activity/main/MainActivity.kt @@ -285,10 +285,13 @@ class MainActivity : LockedActivity() { add(2, R.id.Archived, CATEGORY_SYSTEM + 2, R.string.archived) .setCheckable(true) .setIcon(R.drawable.archive) - add(3, R.id.Reminders, CATEGORY_SYSTEM + 3, R.string.reminders) + add(2, R.id.Hidden, CATEGORY_SYSTEM + 3, R.string.hiddens) + .setCheckable(true) + .setIcon(R.drawable.hidden) + add(3, R.id.Reminders, CATEGORY_SYSTEM + 4, R.string.reminders) .setCheckable(true) .setIcon(R.drawable.notifications) - add(3, R.id.Settings, CATEGORY_SYSTEM + 4, R.string.settings) + add(4, R.id.Settings, CATEGORY_SYSTEM + 5, R.string.settings) .setCheckable(true) .setIcon(R.drawable.settings) } @@ -556,10 +559,12 @@ class MainActivity : LockedActivity() { .find { menuItem -> menuItem.title == it } ?.let { menuItem -> menuItem.isChecked = true } } - R.id.Unlabeled -> { + + R.id.Hidden -> { baseModel.currentLabel = CURRENT_LABEL_NONE binding.NavigationView.setCheckedItem(destination.id) } + else -> { baseModel.currentLabel = CURRENT_LABEL_EMPTY binding.NavigationView.setCheckedItem(destination.id) @@ -646,6 +651,7 @@ class MainActivity : LockedActivity() { baseModel.duplicateSelectedBaseNotes() } menu.add(R.string.archive, R.drawable.archive) { moveNotes(Folder.ARCHIVED) } + menu.add(R.string.hidden, R.drawable.hidden) { moveNotes(Folder.HIDDEN) } menu.addChangeColor() val share = menu.addShare() menu.addExportMenu() @@ -688,6 +694,22 @@ class MainActivity : LockedActivity() { val share = menu.add(R.string.share, R.drawable.share) { share() } model.actionMode.count.observeCount(this@MainActivity, share) } + + Folder.HIDDEN -> { + menu.add( + R.string.unhidden, + R.drawable.unhidden, + MenuItem.SHOW_AS_ACTION_ALWAYS, + ) { + moveNotes(Folder.NOTES) + } + menu.addDelete(MenuItem.SHOW_AS_ACTION_ALWAYS) + menu.addLabels(MenuItem.SHOW_AS_ACTION_ALWAYS) + menu.addExportMenu() + menu.addChangeColor() + val share = menu.add(R.string.share, R.drawable.share) { share() } + model.actionMode.count.observeCount(this@MainActivity, share) + } } } @@ -861,6 +883,7 @@ class MainActivity : LockedActivity() { } true } + else -> super.onOptionsItemSelected(item) } } diff --git a/app/src/main/java/com/philkes/notallyx/presentation/activity/main/fragment/HiddenFragment.kt b/app/src/main/java/com/philkes/notallyx/presentation/activity/main/fragment/HiddenFragment.kt new file mode 100644 index 00000000..a29ef23f --- /dev/null +++ b/app/src/main/java/com/philkes/notallyx/presentation/activity/main/fragment/HiddenFragment.kt @@ -0,0 +1,38 @@ +package com.philkes.notallyx.presentation.activity.main.fragment + +import android.os.Bundle +import android.view.View +import android.view.View.INVISIBLE +import android.view.View.VISIBLE +import androidx.lifecycle.LiveData +import com.philkes.notallyx.R +import com.philkes.notallyx.data.model.Folder +import com.philkes.notallyx.data.model.Item +import com.philkes.notallyx.utils.security.showBiometricOrPinPromptHidden + +open class HiddenFragment : NotallyFragment() { + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + model.folder.value = Folder.HIDDEN + } + + override fun getBackground() = R.drawable.label_off + + override fun getObservable(): LiveData> { + return model.hiddenNotes!! + } + + override fun onStart() { + super.onStart() + hide() + showBiometricOrPinPromptHidden(this, R.string.hidden_lock_title, onSuccess = { show() }) {} + } + + protected fun show() { + binding!!.root.visibility = VISIBLE + } + + protected fun hide() { + binding!!.root.visibility = INVISIBLE + } +} diff --git a/app/src/main/java/com/philkes/notallyx/presentation/activity/main/fragment/SearchFragment.kt b/app/src/main/java/com/philkes/notallyx/presentation/activity/main/fragment/SearchFragment.kt index db5c7f7d..fbdf9c2e 100644 --- a/app/src/main/java/com/philkes/notallyx/presentation/activity/main/fragment/SearchFragment.kt +++ b/app/src/main/java/com/philkes/notallyx/presentation/activity/main/fragment/SearchFragment.kt @@ -32,6 +32,7 @@ class SearchFragment : NotallyFragment() { Folder.NOTES -> R.id.Notes Folder.DELETED -> R.id.Deleted Folder.ARCHIVED -> R.id.Archived + Folder.HIDDEN -> R.id.Hidden } binding?.ChipGroup?.apply { @@ -40,6 +41,7 @@ class SearchFragment : NotallyFragment() { R.id.Notes -> model.folder.value = Folder.NOTES R.id.Deleted -> model.folder.value = Folder.DELETED R.id.Archived -> model.folder.value = Folder.ARCHIVED + R.id.Hidden -> model.folder.value = Folder.HIDDEN } } check(checked) diff --git a/app/src/main/java/com/philkes/notallyx/presentation/activity/note/NoteActionHandler.kt b/app/src/main/java/com/philkes/notallyx/presentation/activity/note/NoteActionHandler.kt index 915ac7a9..082fee82 100644 --- a/app/src/main/java/com/philkes/notallyx/presentation/activity/note/NoteActionHandler.kt +++ b/app/src/main/java/com/philkes/notallyx/presentation/activity/note/NoteActionHandler.kt @@ -232,9 +232,11 @@ class NoteActionHandler( ExportBottomSheet(activity.colorInt, ::export) .show(activity.supportFragmentManager, ExportBottomSheet.TAG) } + EditAction.SHARE -> share() EditAction.DELETE -> delete() EditAction.ARCHIVE -> archive() + EditAction.HIDDEN -> hidden() EditAction.TOGGLE_VIEW_MODE -> toggleViewMode() EditAction.CONVERT -> convertTo() EditAction.DELETE_FOREVER -> deleteForever() @@ -337,6 +339,14 @@ class NoteActionHandler( } } + private fun hidden() { + if (notallyModel.folder == Folder.HIDDEN) { + restore() + } else { + moveNote(Folder.HIDDEN) + } + } + private fun moveNote(toFolder: Folder) { val resultIntent = Intent().apply { diff --git a/app/src/main/java/com/philkes/notallyx/presentation/viewmodel/BaseNoteModel.kt b/app/src/main/java/com/philkes/notallyx/presentation/viewmodel/BaseNoteModel.kt index e32bc3ba..cdbf4267 100644 --- a/app/src/main/java/com/philkes/notallyx/presentation/viewmodel/BaseNoteModel.kt +++ b/app/src/main/java/com/philkes/notallyx/presentation/viewmodel/BaseNoteModel.kt @@ -117,6 +117,8 @@ class BaseNoteModel(private val app: Application) : AndroidViewModel(app) { var baseNotes: Content? = Content(MutableLiveData(), ::transform) var deletedNotes: Content? = Content(MutableLiveData(), ::transform) var archivedNotes: Content? = Content(MutableLiveData(), ::transform) + + var hiddenNotes: Content? = Content(MutableLiveData(), ::transform) var reminderNotes: Content? = Content(MutableLiveData(), ::transform) val folder = NotNullLiveData(Folder.NOTES) @@ -191,6 +193,12 @@ class BaseNoteModel(private val app: Application) : AndroidViewModel(app) { archivedNotes!!.setObserver(baseNoteDao.getFrom(Folder.ARCHIVED)) } + if (hiddenNotes == null) { + hiddenNotes = Content(baseNoteDao.getFrom(Folder.HIDDEN), ::transform) + } else { + hiddenNotes!!.setObserver(baseNoteDao.getFrom(Folder.HIDDEN)) + } + if (reminderNotes == null) { reminderNotes = Content(baseNoteDao.getAllBaseNotesWithReminders(), ::transform) } else { diff --git a/app/src/main/java/com/philkes/notallyx/presentation/viewmodel/preference/Preference.kt b/app/src/main/java/com/philkes/notallyx/presentation/viewmodel/preference/Preference.kt index cedc1016..1e1bcc38 100644 --- a/app/src/main/java/com/philkes/notallyx/presentation/viewmodel/preference/Preference.kt +++ b/app/src/main/java/com/philkes/notallyx/presentation/viewmodel/preference/Preference.kt @@ -401,6 +401,7 @@ fun ListItemSort.callback(adapterChecked: CheckedListItemAdapter) = when (this) { ListItemSort.AUTO_SORT_BY_CHECKED_TIMESTAMP -> ListItemCheckedTimestampSortCallback(adapterChecked) + else -> ListItemParentSortCallback(adapterChecked) } @@ -436,6 +437,7 @@ enum class EditAction(override val textResId: Int, val drawableResId: Int) : Sta SHARE(R.string.share, R.drawable.share), DELETE(R.string.delete, R.drawable.delete), ARCHIVE(R.string.archive, R.drawable.archive), + HIDDEN(R.string.hidden, R.drawable.hidden), TOGGLE_VIEW_MODE(R.string.edit, R.drawable.visibility), CONVERT(R.string.convert_to_list_note, R.drawable.convert_to_text), DELETE_FOREVER(R.string.delete_forever, R.drawable.delete), @@ -452,23 +454,30 @@ enum class EditAction(override val textResId: Int, val drawableResId: Int) : Sta PIN -> if (pinned) R.drawable.unpin else R.drawable.pin ARCHIVE -> if (folder == Folder.ARCHIVED) R.drawable.unarchive else R.drawable.archive + RESTORE -> if (folder == Folder.ARCHIVED) R.drawable.unarchive else R.drawable.restore + + HIDDEN -> if (folder == Folder.HIDDEN) R.drawable.unhidden else R.drawable.hidden TOGGLE_VIEW_MODE -> if (viewMode == NoteViewMode.READ_ONLY) R.drawable.edit else R.drawable.visibility + else -> drawableResId } val title = when (this) { PIN -> if (pinned) R.string.unpin else R.string.pin ARCHIVE -> if (folder == Folder.ARCHIVED) R.string.unarchive else R.string.archive + HIDDEN -> if (folder == Folder.HIDDEN) R.string.unhidden else R.string.hidden RESTORE -> if (folder == Folder.ARCHIVED) R.string.unarchive else R.string.restore TOGGLE_VIEW_MODE -> if (viewMode == NoteViewMode.READ_ONLY) R.string.edit else R.string.read_only + CONVERT -> if (type == Type.LIST) R.string.convert_to_text_note else R.string.convert_to_list_note + else -> textResId } return title to icon diff --git a/app/src/main/java/com/philkes/notallyx/utils/security/LockUtils.kt b/app/src/main/java/com/philkes/notallyx/utils/security/LockUtils.kt index fd695f4d..65fbbe85 100644 --- a/app/src/main/java/com/philkes/notallyx/utils/security/LockUtils.kt +++ b/app/src/main/java/com/philkes/notallyx/utils/security/LockUtils.kt @@ -56,6 +56,78 @@ fun Fragment.showBiometricOrPinPrompt( ) } +fun showBiometricOrPinPromptHidden( + fragment: Fragment, + titleResId: Int, + onSuccess: () -> Unit, + onFailure: (errorCode: Int?) -> Unit, +) { + when { + Build.VERSION.SDK_INT >= Build.VERSION_CODES.M -> { + if ( + BiometricManager.BIOMETRIC_SUCCESS != + BiometricManager.from(fragment.requireContext()) + .canAuthenticate( + BiometricManager.Authenticators.DEVICE_CREDENTIAL or + BiometricManager.Authenticators.BIOMETRIC_STRONG + ) + ) { + onSuccess.invoke() + return + } + val promptInfo = + BiometricPrompt.PromptInfo.Builder() + .apply { + setTitle(fragment.getString(titleResId)) + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { + setAllowedAuthenticators( + BiometricManager.Authenticators.BIOMETRIC_STRONG or + BiometricManager.Authenticators.DEVICE_CREDENTIAL + ) + } else { + setNegativeButtonText(fragment.getString(R.string.cancel)) + setAllowedAuthenticators( + BiometricManager.Authenticators.BIOMETRIC_STRONG + ) + } + } + .build() + val authCallback = + object : BiometricPrompt.AuthenticationCallback() { + override fun onAuthenticationSucceeded( + result: BiometricPrompt.AuthenticationResult + ) { + super.onAuthenticationSucceeded(result) + onSuccess.invoke() + } + + override fun onAuthenticationFailed() { + super.onAuthenticationFailed() + onFailure.invoke(null) + } + + override fun onAuthenticationError(errorCode: Int, errString: CharSequence) { + super.onAuthenticationError(errorCode, errString) + onFailure.invoke(errorCode) + } + } + val prompt = + BiometricPrompt( + fragment, + ContextCompat.getMainExecutor(fragment.requireContext()), + authCallback, + ) + + prompt.authenticate(promptInfo) + } + + else -> { + // API 21-22: No biometric support, fallback to PIN/Password + promptPinAuthentication(fragment.requireContext(), null, titleResId, onFailure) + } + } +} + private fun showBiometricOrPinPrompt( isForDecrypt: Boolean, context: FragmentActivity, @@ -127,7 +199,7 @@ private fun showBiometricOrPinPrompt( private fun promptPinAuthentication( context: Context, - activityResultLauncher: ActivityResultLauncher, + activityResultLauncher: ActivityResultLauncher?, titleResId: Int, onFailure: (errorCode: Int?) -> Unit, ) { @@ -141,7 +213,7 @@ private fun promptPinAuthentication( null, ) if (intent != null) { - activityResultLauncher.launch(intent) + activityResultLauncher?.launch(intent) } else { onFailure.invoke(null) } @@ -157,7 +229,7 @@ private fun promptPinAuthentication( null, ) if (intent != null) { - activityResultLauncher.launch(intent) + activityResultLauncher?.launch(intent) } else { onFailure.invoke(null) } diff --git a/app/src/main/res/drawable/hidden.xml b/app/src/main/res/drawable/hidden.xml new file mode 100644 index 00000000..969639d4 --- /dev/null +++ b/app/src/main/res/drawable/hidden.xml @@ -0,0 +1,17 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/unhidden.xml b/app/src/main/res/drawable/unhidden.xml new file mode 100644 index 00000000..7a314497 --- /dev/null +++ b/app/src/main/res/drawable/unhidden.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/navigation/navigation.xml b/app/src/main/res/navigation/navigation.xml index 7fe7c05a..bf3dbdce 100644 --- a/app/src/main/res/navigation/navigation.xml +++ b/app/src/main/res/navigation/navigation.xml @@ -35,35 +35,34 @@ + android:label="@string/deleted"> + android:id="@+id/DeletedToSearch" + app:destination="@id/Search" + app:enterAnim="@anim/nav_default_enter_anim" + app:exitAnim="@anim/nav_default_exit_anim" + app:popEnterAnim="@anim/nav_default_pop_enter_anim" + app:popExitAnim="@anim/nav_default_pop_exit_anim" /> + android:label="@string/archived"> + android:id="@+id/ArchivedToSearch" + app:destination="@id/Search" + app:enterAnim="@anim/nav_default_enter_anim" + app:exitAnim="@anim/nav_default_exit_anim" + app:popEnterAnim="@anim/nav_default_pop_enter_anim" + app:popExitAnim="@anim/nav_default_pop_exit_anim" /> - + android:id="@+id/Reminders" + android:name="com.philkes.notallyx.presentation.activity.main.fragment.RemindersFragment" + android:label="@string/reminders"> + android:name="initialFolder" + app:argType="com.philkes.notallyx.data.model.Folder" /> + + \ No newline at end of file diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index b5dcf93b..20d6269b 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -100,7 +100,9 @@ Formato de fecha Aplicar también en la vista de nota Aplica el formato de fecha seleccionado en la vista general de notas + Día Días + Modo de visualización predeterminado de la lista de notas Eliminar Borrar todo ¿Borrar todas las notas\? @@ -203,6 +205,7 @@ Elemento Ficheros JSON Para importar tus notas desde ficheros JSON (fichero único o carpeta), pincha en Importar. Cada fichero fichero JSON válido se importa como nota separada, el nombre del fichero será el título de la nota. + Ir al inicio de la página Etiqueta existe Ocultar/mostrar etiqueta en el panel de navegación Etiquetas @@ -216,6 +219,7 @@ Lista Ordenar lista de elementos Bloqueado + Establecer como predeterminado Hacer petición de característica Hacer lista Cantidad de copias a mantener @@ -224,6 +228,7 @@ Número máximo de elementos para mostrar en nota Número máximo de líneas en el título Mediano + Dividir notas de gran tamaño… Minutos Modificado Monoespaciado @@ -240,8 +245,10 @@ Ninguno \'%1$s’ no existe Nota + La nota es demasiado grande para guardarla; se ha recortado a %1$s caracteres (antes: %2$s) Notas Notas ordenadas por + Último %1$s del mes Abrir enlace Abrir nota Otros @@ -293,6 +300,7 @@ Seleccionar etiquetas Seleccionar nota Enviar comentarios + Establece este color como predeterminado para las notas nuevas Ajustes Compartir Un fichero @@ -308,6 +316,7 @@ Seleccione qué vista o etiqueta se debe mostrar cuando se inicia la aplicación.\nLa opción predeterminada es la vista de notas principal Detener Tachado + Acción de intercambio Tomar nota Tocar para más opciones Toque para configurar @@ -343,4 +352,21 @@ Anual Años Tus notas asociadas con esta etiqueta no serán eliminadas + Ocultas + Ocultar + Desocultar + + %1$d nota oculta + %1$d notas ocultas + + Mostrar ocultas + Último usado + Duplicar + Este es el color predeterminado para las notas nuevas. Para cambiarlo, establece otro color como predeterminado. + Ir al final de la página + Migrando datos… + Movimiento de archivos adjuntos… + El texto es demasiado largo, se ha acortado a %1$d caracteres + %1$s del mes + \\¿Establecer como color predeterminado\\? diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 1e6a4b1b..d8ac1e19 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -18,6 +18,10 @@ Archived %1$d note Archived %1$d notes + + Hidden %1$d note + Hidden %1$d notes + Ascending Attach file Audio Recordings @@ -381,4 +385,8 @@ Yearly Years Your notes attached to this label will not be deleted + Hidden + Hidden + Hidden + Show hidden From 2371a25cc410d805fc6f8fb0a5bc4a770551ddbc Mon Sep 17 00:00:00 2001 From: Daniel Date: Sun, 22 Mar 2026 21:30:32 +0100 Subject: [PATCH 2/4] Fixed strings --- app/src/main/res/values/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index d8ac1e19..bd2d94fd 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -387,6 +387,6 @@ Your notes attached to this label will not be deleted Hidden Hidden - Hidden + Unhidden Show hidden From cfc9ab82d875f6dba4674258875e5b72497c5e56 Mon Sep 17 00:00:00 2001 From: Daniel Date: Sun, 22 Mar 2026 23:17:46 +0100 Subject: [PATCH 3/4] Fixed PIN fallback on API 21-22 never calls onSuccess --- .../com/philkes/notallyx/utils/security/LockUtils.kt | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/app/src/main/java/com/philkes/notallyx/utils/security/LockUtils.kt b/app/src/main/java/com/philkes/notallyx/utils/security/LockUtils.kt index 65fbbe85..fffaa607 100644 --- a/app/src/main/java/com/philkes/notallyx/utils/security/LockUtils.kt +++ b/app/src/main/java/com/philkes/notallyx/utils/security/LockUtils.kt @@ -12,6 +12,7 @@ import androidx.core.content.ContextCompat import androidx.fragment.app.Fragment import androidx.fragment.app.FragmentActivity import com.philkes.notallyx.R +import com.philkes.notallyx.utils.canAuthenticateWithBiometrics import javax.crypto.Cipher fun Activity.showBiometricOrPinPrompt( @@ -122,8 +123,16 @@ fun showBiometricOrPinPromptHidden( } else -> { + if ( + fragment.requireContext().canAuthenticateWithBiometrics() != + android.hardware.biometrics.BiometricManager.BIOMETRIC_SUCCESS + ) { + onSuccess.invoke() + return + } // API 21-22: No biometric support, fallback to PIN/Password promptPinAuthentication(fragment.requireContext(), null, titleResId, onFailure) + onSuccess.invoke() } } } From 7b4c5aca51e929cd4043cbfa918a4186a6a80a04 Mon Sep 17 00:00:00 2001 From: Daniel Date: Sun, 22 Mar 2026 23:19:31 +0100 Subject: [PATCH 4/4] Fixed don't reuse the Unlabeled sentinel for Hidden --- .../philkes/notallyx/presentation/activity/main/MainActivity.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/com/philkes/notallyx/presentation/activity/main/MainActivity.kt b/app/src/main/java/com/philkes/notallyx/presentation/activity/main/MainActivity.kt index e314ff1a..fde9327b 100644 --- a/app/src/main/java/com/philkes/notallyx/presentation/activity/main/MainActivity.kt +++ b/app/src/main/java/com/philkes/notallyx/presentation/activity/main/MainActivity.kt @@ -560,7 +560,7 @@ class MainActivity : LockedActivity() { ?.let { menuItem -> menuItem.isChecked = true } } - R.id.Hidden -> { + R.id.Unlabeled -> { baseModel.currentLabel = CURRENT_LABEL_NONE binding.NavigationView.setCheckedItem(destination.id) }