From cdd620987b45aa75ccf7a4f179afb438e347e960 Mon Sep 17 00:00:00 2001 From: greenart7c3 Date: Wed, 24 Jan 2024 09:55:31 -0300 Subject: [PATCH] implement reply draft --- .../vitorpamplona/amethyst/LocalPreferences.kt | 9 +++++++++ .../amethyst/ui/actions/NewPostView.kt | 16 ++++++++++++++-- .../amethyst/ui/actions/NewPostViewModel.kt | 4 +++- .../amethyst/ui/navigation/DrawerContent.kt | 2 +- 4 files changed, 27 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/com/vitorpamplona/amethyst/LocalPreferences.kt b/app/src/main/java/com/vitorpamplona/amethyst/LocalPreferences.kt index 0119eacc3..e0f65780d 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/LocalPreferences.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/LocalPreferences.kt @@ -112,6 +112,7 @@ private object PrefKeys { const val AUTOMATICALLY_SHOW_PROFILE_PICTURE = "automatically_show_profile_picture" const val SIGNER_PACKAGE_NAME = "signer_package_name" const val NEW_POST_DRAFT = "draft_new_post" + const val DRAFT_REPLY_POST = "draft_reply_post" const val ALL_ACCOUNT_INFO = "all_saved_accounts_info" const val SHARED_SETTINGS = "shared_settings" @@ -461,15 +462,22 @@ object LocalPreferences { fun saveDraft( message: String, + replyPost: String?, account: Account, ) { val prefs = encryptedPreferences(account.keyPair.pubKey.toNpub()) with(prefs.edit()) { putString(PrefKeys.NEW_POST_DRAFT, message) + putString(PrefKeys.DRAFT_REPLY_POST, replyPost) apply() } } + fun loadReplyDraft(account: Account): String? { + val prefs = encryptedPreferences(account.keyPair.pubKey.toNpub()) + return prefs.getString(PrefKeys.DRAFT_REPLY_POST, null) + } + fun loadDraft(account: Account): String? { val prefs = encryptedPreferences(account.keyPair.pubKey.toNpub()) return prefs.getString(PrefKeys.NEW_POST_DRAFT, null) @@ -478,6 +486,7 @@ object LocalPreferences { fun clearDraft(account: Account) { val prefs = encryptedPreferences(account.keyPair.pubKey.toNpub()) with(prefs.edit()) { + remove(PrefKeys.DRAFT_REPLY_POST) remove(PrefKeys.NEW_POST_DRAFT) apply() } diff --git a/app/src/main/java/com/vitorpamplona/amethyst/ui/actions/NewPostView.kt b/app/src/main/java/com/vitorpamplona/amethyst/ui/actions/NewPostView.kt index 22b8b5a8a..9fa061371 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/ui/actions/NewPostView.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/ui/actions/NewPostView.kt @@ -130,7 +130,9 @@ import com.fonfon.kgeohash.toGeoHash import com.google.accompanist.permissions.ExperimentalPermissionsApi import com.google.accompanist.permissions.isGranted import com.google.accompanist.permissions.rememberPermissionState +import com.vitorpamplona.amethyst.LocalPreferences import com.vitorpamplona.amethyst.R +import com.vitorpamplona.amethyst.model.LocalCache import com.vitorpamplona.amethyst.model.Note import com.vitorpamplona.amethyst.model.User import com.vitorpamplona.amethyst.service.Nip96MediaServers @@ -207,9 +209,19 @@ fun NewPostView( var relayList = remember { accountViewModel.account.activeWriteRelays().toImmutableList() } LaunchedEffect(Unit) { - postViewModel.load(accountViewModel, baseReplyTo, quote) - launch(Dispatchers.IO) { + val replyDraft = LocalPreferences.loadReplyDraft(accountViewModel.account) + if (replyDraft.isNullOrBlank()) { + postViewModel.load(accountViewModel, baseReplyTo, quote) + } else { + val note = LocalCache.checkGetOrCreateNote(replyDraft) + if (note == null) { + postViewModel.load(accountViewModel, baseReplyTo, quote) + } else { + postViewModel.load(accountViewModel, note, quote) + } + } + postViewModel.imageUploadingError.collect { error -> withContext(Dispatchers.Main) { Toast.makeText(context, error, Toast.LENGTH_SHORT).show() } } diff --git a/app/src/main/java/com/vitorpamplona/amethyst/ui/actions/NewPostViewModel.kt b/app/src/main/java/com/vitorpamplona/amethyst/ui/actions/NewPostViewModel.kt index 329bd5d7b..17482fd0a 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/ui/actions/NewPostViewModel.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/ui/actions/NewPostViewModel.kt @@ -515,6 +515,7 @@ open class NewPostViewModel() : ViewModel() { urlPreview = null isUploadingImage = false pTags = null + eTags = null wantsDirectMessage = false @@ -543,6 +544,7 @@ open class NewPostViewModel() : ViewModel() { userSuggestions = emptyList() userSuggestionAnchor = null userSuggestionsMainMessage = null + originalNote = null viewModelScope.launch(Dispatchers.IO) { clearDraft() @@ -564,7 +566,7 @@ open class NewPostViewModel() : ViewModel() { } open fun saveDraft(message: String) { - account?.let { LocalPreferences.saveDraft(message, it) } + account?.let { LocalPreferences.saveDraft(message, originalNote?.idHex, it) } } open fun loadDraft(): String? { diff --git a/app/src/main/java/com/vitorpamplona/amethyst/ui/navigation/DrawerContent.kt b/app/src/main/java/com/vitorpamplona/amethyst/ui/navigation/DrawerContent.kt index 62c1cd68c..c01291854 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/ui/navigation/DrawerContent.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/ui/navigation/DrawerContent.kt @@ -638,7 +638,7 @@ fun ListContent( }, { coroutineScope.launch(Dispatchers.IO) { - LocalPreferences.saveDraft(it, accountViewModel.account) + LocalPreferences.saveDraft(it, null, accountViewModel.account) draftText = null showDraft = false wantsToPost = true