From 06d24037f3fbc717621e0f935625fed716383bf6 Mon Sep 17 00:00:00 2001 From: SanjaySargam Date: Sat, 6 Jul 2024 15:17:06 +0530 Subject: [PATCH] loadNoteEditor when adding note This commit ensures that when adding note from cardbrowser it will load note editor on trailing side instead of launching NoteEditor on new screen --- .../main/java/com/ichi2/anki/CardBrowser.kt | 26 ++++++++++++++----- .../main/java/com/ichi2/anki/NoteEditor.kt | 5 ++++ .../anki/noteeditor/NoteEditorLauncher.kt | 5 ++-- .../java/com/ichi2/anki/CardBrowserTest.kt | 4 +-- .../anki/browser/CardBrowserViewModelTest.kt | 2 +- 5 files changed, 30 insertions(+), 12 deletions(-) diff --git a/AnkiDroid/src/main/java/com/ichi2/anki/CardBrowser.kt b/AnkiDroid/src/main/java/com/ichi2/anki/CardBrowser.kt index 55e7b46e092a..34e161033330 100644 --- a/AnkiDroid/src/main/java/com/ichi2/anki/CardBrowser.kt +++ b/AnkiDroid/src/main/java/com/ichi2/anki/CardBrowser.kt @@ -53,6 +53,7 @@ import androidx.annotation.VisibleForTesting import androidx.appcompat.widget.SearchView import androidx.appcompat.widget.ThemeUtils import androidx.core.content.ContextCompat +import androidx.core.view.isVisible import androidx.fragment.app.FragmentContainerView import androidx.fragment.app.commit import androidx.lifecycle.ViewModelProvider @@ -164,6 +165,13 @@ open class CardBrowser : ChangeManager.Subscriber, ExportDialogsFactoryProvider { + /** + * Provides an instance of NoteEditorLauncher for adding a note + */ + @get:VisibleForTesting + val addNoteLauncher: NoteEditorLauncher + get() = createAddNoteLauncher(viewModel, fragmented) + /** * Provides an instance of NoteEditorLauncher for editing a note */ @@ -482,6 +490,10 @@ open class CardBrowser : if (!fragmented) { return } + // Show note editor frame when adding first card + if (!noteEditorFrame!!.isVisible) { + noteEditorFrame!!.isVisible = true + } val noteEditor = NoteEditor.newInstance(launcher) supportFragmentManager.commit { replace(R.id.note_editor_frame, noteEditor) @@ -1527,12 +1539,12 @@ open class CardBrowser : showDialogFragment(dialog) } - @get:VisibleForTesting - val addNoteIntent: Intent - get() = createAddNoteIntent(this, viewModel) - private fun addNoteFromCardBrowser() { - onAddNoteActivityResult.launch(addNoteIntent) + if (fragmented) { + loadNoteEditorFragmentIfFragmented(addNoteLauncher) + } else { + onAddNoteActivityResult.launch(addNoteLauncher.getIntent(this)) + } } private val reviewerCardId: CardId @@ -2488,8 +2500,8 @@ open class CardBrowser : fun clearLastDeckId() = SharedPreferencesLastDeckIdRepository.clearLastDeckId() @VisibleForTesting - fun createAddNoteIntent(context: Context, viewModel: CardBrowserViewModel): Intent { - return NoteEditorLauncher.AddNoteFromCardBrowser(viewModel).getIntent(context) + fun createAddNoteLauncher(viewModel: CardBrowserViewModel, inFragmentedActivity: Boolean = false): NoteEditorLauncher { + return NoteEditorLauncher.AddNoteFromCardBrowser(viewModel, inFragmentedActivity) } @CheckResult diff --git a/AnkiDroid/src/main/java/com/ichi2/anki/NoteEditor.kt b/AnkiDroid/src/main/java/com/ichi2/anki/NoteEditor.kt index f4ff31ffa61c..003182b5b5cc 100644 --- a/AnkiDroid/src/main/java/com/ichi2/anki/NoteEditor.kt +++ b/AnkiDroid/src/main/java/com/ichi2/anki/NoteEditor.kt @@ -1538,6 +1538,11 @@ class NoteEditor : AnkiFragment(R.layout.note_editor), DeckSelectionListener, Su // ensure there are no orphans from possible edit previews CardTemplateNotetype.clearTempModelFiles() + // Don't close this fragment if it is in fragmented activity + if (inFragmentedActivity) { + return + } + // Set the finish animation if there is one on the intent which created the activity val animation = BundleCompat.getParcelable( requireArguments(), diff --git a/AnkiDroid/src/main/java/com/ichi2/anki/noteeditor/NoteEditorLauncher.kt b/AnkiDroid/src/main/java/com/ichi2/anki/noteeditor/NoteEditorLauncher.kt index 84fb049da017..b5ca4877e787 100644 --- a/AnkiDroid/src/main/java/com/ichi2/anki/noteeditor/NoteEditorLauncher.kt +++ b/AnkiDroid/src/main/java/com/ichi2/anki/noteeditor/NoteEditorLauncher.kt @@ -89,12 +89,13 @@ sealed interface NoteEditorLauncher { * Represents adding a note to the NoteEditor from the card browser. * @property viewModel The view model containing data from the card browser. */ - data class AddNoteFromCardBrowser(val viewModel: CardBrowserViewModel) : + data class AddNoteFromCardBrowser(val viewModel: CardBrowserViewModel, val inFragmentedActivity: Boolean = false) : NoteEditorLauncher { override fun toBundle(): Bundle { val bundle = bundleOf( NoteEditor.EXTRA_CALLER to NoteEditor.CALLER_CARDBROWSER_ADD, - NoteEditor.EXTRA_TEXT_FROM_SEARCH_VIEW to viewModel.searchTerms + NoteEditor.EXTRA_TEXT_FROM_SEARCH_VIEW to viewModel.searchTerms, + NoteEditor.IN_FRAGMENTED_ACTIVITY to inFragmentedActivity ) if (viewModel.lastDeckId?.let { id -> id > 0 } == true) { bundle.putLong(NoteEditor.EXTRA_DID, viewModel.lastDeckId!!) diff --git a/AnkiDroid/src/test/java/com/ichi2/anki/CardBrowserTest.kt b/AnkiDroid/src/test/java/com/ichi2/anki/CardBrowserTest.kt index 5d6c2941af5f..3f3fcfd09a2d 100644 --- a/AnkiDroid/src/test/java/com/ichi2/anki/CardBrowserTest.kt +++ b/AnkiDroid/src/test/java/com/ichi2/anki/CardBrowserTest.kt @@ -489,7 +489,7 @@ class CardBrowserTest : RobolectricTest() { assertThat("The target deck should be selected", b.lastDeckId, equalTo(targetDid)) - val addIntent = b.addNoteIntent + val addIntent = b.addNoteLauncher.getIntent(targetContext) val bundle = addIntent.getBundleExtra(SingleFragmentActivity.FRAGMENT_ARGS_EXTRA) IntentAssert.hasExtra(bundle, NoteEditor.EXTRA_DID, targetDid) } @@ -503,7 +503,7 @@ class CardBrowserTest : RobolectricTest() { assertThat("The initial deck should be selected", b.lastDeckId, equalTo(initialDid)) - val addIntent = b.addNoteIntent + val addIntent = b.addNoteLauncher.getIntent(targetContext) val bundle = addIntent.getBundleExtra(SingleFragmentActivity.FRAGMENT_ARGS_EXTRA) IntentAssert.hasExtra(bundle, NoteEditor.EXTRA_DID, initialDid) } diff --git a/AnkiDroid/src/test/java/com/ichi2/anki/browser/CardBrowserViewModelTest.kt b/AnkiDroid/src/test/java/com/ichi2/anki/browser/CardBrowserViewModelTest.kt index e4d726684987..0cce10d19868 100644 --- a/AnkiDroid/src/test/java/com/ichi2/anki/browser/CardBrowserViewModelTest.kt +++ b/AnkiDroid/src/test/java/com/ichi2/anki/browser/CardBrowserViewModelTest.kt @@ -134,7 +134,7 @@ class CardBrowserViewModelTest : JvmTest() { assertThat("All decks should be selected", hasSelectedAllDecks()) - val addIntent = CardBrowser.createAddNoteIntent(mockIt(), this) + val addIntent = CardBrowser.createAddNoteLauncher(this).getIntent(mockIt()) val bundle = addIntent.getBundleExtra(SingleFragmentActivity.FRAGMENT_ARGS_EXTRA) IntentAssert.doesNotHaveExtra(bundle, NoteEditor.EXTRA_DID) }