diff --git a/app/src/main/java/io/github/wiiznokes/gitnote/MainActivity.kt b/app/src/main/java/io/github/wiiznokes/gitnote/MainActivity.kt index 83cd265b..08c3927a 100644 --- a/app/src/main/java/io/github/wiiznokes/gitnote/MainActivity.kt +++ b/app/src/main/java/io/github/wiiznokes/gitnote/MainActivity.kt @@ -7,7 +7,7 @@ import androidx.activity.ComponentActivity import androidx.activity.compose.setContent import androidx.compose.foundation.isSystemInDarkTheme import androidx.compose.runtime.getValue -import androidx.compose.runtime.remember +import androidx.compose.runtime.saveable.rememberSaveable import androidx.lifecycle.viewmodel.compose.viewModel import dev.olshevski.navigation.reimagined.AnimatedNavHost import dev.olshevski.navigation.reimagined.NavBackHandler @@ -15,11 +15,8 @@ import dev.olshevski.navigation.reimagined.navigate import dev.olshevski.navigation.reimagined.popAll import dev.olshevski.navigation.reimagined.popUpTo import dev.olshevski.navigation.reimagined.rememberNavController -import io.github.wiiznokes.gitnote.MyApp.Companion.appModule -import io.github.wiiznokes.gitnote.helper.NoteSaver import io.github.wiiznokes.gitnote.ui.destination.AppDestination import io.github.wiiznokes.gitnote.ui.destination.Destination -import io.github.wiiznokes.gitnote.ui.destination.EditParams import io.github.wiiznokes.gitnote.ui.destination.SetupDestination import io.github.wiiznokes.gitnote.ui.screen.app.AppScreen import io.github.wiiznokes.gitnote.ui.screen.setup.SetupNav @@ -58,32 +55,12 @@ class MainActivity : ComponentActivity() { dynamicColor = dynamicColor ) { - val startDestination: Destination = remember { + val startDestination: Destination = rememberSaveable { if (runBlocking { vm.tryInit() }) { - if (NoteSaver.isEditUnsaved()) { - val saveInfo = NoteSaver.getSaveState() - if (saveInfo == null) { - Log.d(TAG, "can't retrieve the last saved note state") - Destination.App(AppDestination.Grid) - } else { - Log.d(TAG, "launch as EDIT_IS_UNSAVED") - Destination.App( - AppDestination.Edit( - EditParams.Saved( - note = saveInfo.previousNote, - editType = saveInfo.editType, - name = saveInfo.name, - content = saveInfo.content - ) - ) - ) - } - - } else Destination.App(AppDestination.Grid) + Destination.App(AppDestination.Grid) } else Destination.Setup(SetupDestination.Main) } - val navController = rememberNavController(startDestination = startDestination) diff --git a/app/src/main/java/io/github/wiiznokes/gitnote/ui/screen/app/AppNav.kt b/app/src/main/java/io/github/wiiznokes/gitnote/ui/screen/app/AppNav.kt index eb6c9292..a393b5f8 100644 --- a/app/src/main/java/io/github/wiiznokes/gitnote/ui/screen/app/AppNav.kt +++ b/app/src/main/java/io/github/wiiznokes/gitnote/ui/screen/app/AppNav.kt @@ -1,7 +1,9 @@ package io.github.wiiznokes.gitnote.ui.screen.app +import android.util.Log import androidx.compose.animation.ContentTransform import androidx.compose.runtime.Composable +import androidx.compose.runtime.saveable.rememberSaveable import dev.olshevski.navigation.reimagined.AnimatedNavHost import dev.olshevski.navigation.reimagined.NavAction import dev.olshevski.navigation.reimagined.NavBackHandler @@ -10,6 +12,7 @@ import dev.olshevski.navigation.reimagined.NavTransitionSpec import dev.olshevski.navigation.reimagined.navigate import dev.olshevski.navigation.reimagined.pop import dev.olshevski.navigation.reimagined.rememberNavController +import io.github.wiiznokes.gitnote.helper.NoteSaver import io.github.wiiznokes.gitnote.ui.destination.AppDestination import io.github.wiiznokes.gitnote.ui.destination.EditParams import io.github.wiiznokes.gitnote.ui.destination.SettingsDestination @@ -28,8 +31,34 @@ fun AppScreen( onCloseRepo: () -> Unit, ) { + val initialBackstack: List = rememberSaveable { + buildList { + add(appDestination) + + if (NoteSaver.isEditUnsaved()) { + val saveInfo = NoteSaver.getSaveState() + if (saveInfo == null) { + Log.d(TAG, "can't retrieve the last saved note state") + } else { + Log.d(TAG, "launch as EDIT_IS_UNSAVED") + add( + AppDestination.Edit( + EditParams.Saved( + note = saveInfo.previousNote, + editType = saveInfo.editType, + name = saveInfo.name, + content = saveInfo.content + ) + ) + ) + } + } + } + } + + val navController = - rememberNavController(startDestination = appDestination) + rememberNavController(initialBackstack) NavBackHandler(navController) @@ -58,10 +87,6 @@ fun AppScreen( editParams = it.params, onFinished = { navController.pop() - - if (it.params is EditParams.Saved) { - navController.navigate(AppDestination.Grid) - } } ) diff --git a/app/src/main/java/io/github/wiiznokes/gitnote/ui/screen/app/edit/EditScreen.kt b/app/src/main/java/io/github/wiiznokes/gitnote/ui/screen/app/edit/EditScreen.kt index 8e3f5570..ddf65836 100644 --- a/app/src/main/java/io/github/wiiznokes/gitnote/ui/screen/app/edit/EditScreen.kt +++ b/app/src/main/java/io/github/wiiznokes/gitnote/ui/screen/app/edit/EditScreen.kt @@ -45,6 +45,7 @@ import androidx.compose.ui.unit.dp import io.github.wiiznokes.gitnote.R import io.github.wiiznokes.gitnote.manager.ExtensionType import io.github.wiiznokes.gitnote.manager.extensionType +import io.github.wiiznokes.gitnote.ui.component.RequestConfirmationDialog import io.github.wiiznokes.gitnote.ui.component.SimpleIcon import io.github.wiiznokes.gitnote.ui.destination.EditParams import io.github.wiiznokes.gitnote.ui.model.EditType @@ -64,6 +65,7 @@ fun EditScreen( onFinished: () -> Unit, ) { + val extension = editParams.fileExtension() val vm = when (extensionType(extension.text)) { @@ -72,10 +74,25 @@ fun EditScreen( null -> throw Exception("file extension not supported, but present in the database?? $extension") } - if (editParams is EditParams.Saved) { - BackHandler { + val showShouldQuitDialog = rememberSaveable { + mutableStateOf(false) + } + + RequestConfirmationDialog( + expanded = showShouldQuitDialog, + text = stringResource(R.string.confirmation_quit_edit_dialog), + onConfirmation = { + vm.shouldSaveWhenQuitting = false + onFinished() + } + ) + + BackHandler { + if (vm.isPreviousNoteTheSame()) { vm.shouldSaveWhenQuitting = false onFinished() + } else { + showShouldQuitDialog.value = true } } @@ -108,8 +125,12 @@ fun EditScreen( navigationIcon = { IconButton( onClick = { - vm.shouldSaveWhenQuitting = false - onFinished() + if (vm.isPreviousNoteTheSame()) { + vm.shouldSaveWhenQuitting = false + onFinished() + } else { + showShouldQuitDialog.value = true + } }, ) { SimpleIcon( diff --git a/app/src/main/java/io/github/wiiznokes/gitnote/ui/viewmodel/edit/TextVM.kt b/app/src/main/java/io/github/wiiznokes/gitnote/ui/viewmodel/edit/TextVM.kt index 10fd20e3..06b97641 100644 --- a/app/src/main/java/io/github/wiiznokes/gitnote/ui/viewmodel/edit/TextVM.kt +++ b/app/src/main/java/io/github/wiiznokes/gitnote/ui/viewmodel/edit/TextVM.kt @@ -417,7 +417,7 @@ open class TextVM() : ViewModel() { return success(note) } - private fun isPreviousNoteTheSame(): Boolean = + fun isPreviousNoteTheSame(): Boolean = previousNote.nameWithoutExtension() == NameValidation.removeEndingWhiteSpace(name.value.text) && previousNote.content == content.value.text diff --git a/app/src/main/res/values-cs/strings.xml b/app/src/main/res/values-cs/strings.xml index 61576127..94bde659 100644 --- a/app/src/main/res/values-cs/strings.xml +++ b/app/src/main/res/values-cs/strings.xml @@ -2,10 +2,6 @@ Systémový Světlý Tmavý - Modifikace - Alfanumerické - Vzestupné - Sestupné Název nové složky Vytvořit novou složku Ano @@ -16,7 +12,6 @@ Hledat v poznámkách Uživatelské rozhraní Dynamické barvy - Typ řazení Pořadí řazení Minimální šířka poznámky Úplně zobrazit dlouhé poznámky diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index b8f46547..2ecc2f0d 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -6,18 +6,13 @@ Sombre - Modification - Alpha numérique - - Ascendant - Descendant - Le nom est invalide L\'extension est invalide Le dossier existe déjà + Plus ancient Nom du nouveau dossier Créer un nouveau dossier @@ -31,8 +26,9 @@ Rechercher Interface Couleurs dynamique - Type de tri + Odre du tri + Chemin par défaut pour les nouvelles notes Largeur minimal d\'une note Montrer les longues notes entièrement Se souvenir du dernier dossier ouvert @@ -47,10 +43,12 @@ Mot de passe Nom d\'utilisateur Url du dépôt distant + Mail de l\'auteur Git Fermer le dépôt Voulez vous vraiment fermer le dépôt ? Version Montrer les logs + La base de donnée a été rechargé avec succès Signaler un problème Code source Bibliothèques open source @@ -75,6 +73,7 @@ Impossible de créer le dépôt: %1$s Aucune modification Grille + Passer à l\'affichage en grille À propos Choisir la méthode Créer un dépôt local @@ -87,6 +86,7 @@ Créer un dépôt dans ce dossier Ouvrir ce dépôt Cloner le dépôt dans ce dossier + Clonez le dépôt dans ce dossier et utilisez l\'URL comme nom du dossier racine Liens rapides Page d\'accueil Créer dépôt @@ -125,6 +125,7 @@ Activer la lecture seule Desactiver la lecture seule + Autoriser Gitnote et récupérer les métadonnées des dépôts Clone URL "Allez sur la page Web, créez un référentiel et copiez son URL" Entrez l\'URL de clonage @@ -146,6 +147,7 @@ Créer un dépôt privé %1$s Besoin de clés SSH pour s\'authentifier Générer de nouvelles clés + Non spécifié Fournisseur d\'hébergement Git Sélectionnez un fournisseur d\'hébergement Git Sélection de la configuration @@ -155,4 +157,23 @@ Chargement… Journaux Extension: %1$s + A-Z + Z-A + Plus récent + Odre du tri des dossiers + Nom de l\'auteur Git + Recharger la base de donnée + Liste + Passer à l\'affichage en liste + Récupérer les métadonnées des dépôts + Utiliser des clés SSH personnalisées + Dossier parent: %1$s + Sélectionnez ce dossier + Clé publique + Charger depuis un fichier + Clé privée + Mot de passe de la clé privée + Annuler + Retour + Êtes-vous sûr de vouloir abandonner ? Vous perdrez toutes vos modifications. \ No newline at end of file diff --git a/app/src/main/res/values-ru-rRU/strings.xml b/app/src/main/res/values-ru-rRU/strings.xml index 843a3dbd..622da787 100644 --- a/app/src/main/res/values-ru-rRU/strings.xml +++ b/app/src/main/res/values-ru-rRU/strings.xml @@ -2,10 +2,6 @@ Системная Светлая Тёмная - По изменению - По алфавиту и числам - По возрастанию - По убыванию Имя новой папки Создать новую папку Да @@ -16,7 +12,6 @@ Поиск в заметках Интерфейс Динамические цвета - Тип сортировки Порядок сортировки Минимальная ширина заметки Показывать длинные заметки полностью diff --git a/app/src/main/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml index 762fa308..acaa6fcb 100644 --- a/app/src/main/res/values-uk/strings.xml +++ b/app/src/main/res/values-uk/strings.xml @@ -2,10 +2,6 @@ Системна Світла Темна - За зміною - За абеткою та числами - За зростанням - За спаданням Назва нової папки Створити нову папку Так @@ -16,7 +12,6 @@ Пошук у нотатках Інтерфейс Динамічні кольори - Тип сортування Порядок сортування Мінімальна ширина нотатки Показувати довгі нотатки повністю diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index f0862756..4f53474e 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -157,7 +157,7 @@ Loading… Logs Extension: %1$s - Parent: %1$s + Parent folder: %1$s Pick this folder Public key Load from file @@ -165,5 +165,6 @@ Private key password Cancel Go back + Are you sure you want to quit ? You will lose all changes.