Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 2 additions & 7 deletions AnkiDroid/src/main/java/com/ichi2/anki/CardBrowser.kt
Original file line number Diff line number Diff line change
Expand Up @@ -256,13 +256,8 @@ open class CardBrowser :
registerDeckSelectedHandler(action = ::onDeckSelected)
registerFindReplaceHandler { result ->
launchCatchingTask {
withProgress {
val count =
withProgress {
viewModel.findAndReplace(result)
}.await()
showSnackbar(TR.browsingNotesUpdated(count))
}
val count = viewModel.findAndReplace(result).await()
showSnackbar(TR.browsingNotesUpdated(count))
}
}
registerSavedSearchActionHandler { type, searchName ->
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ import androidx.activity.result.ActivityResult
import androidx.activity.result.contract.ActivityResultContracts.StartActivityForResult
import androidx.annotation.CheckResult
import androidx.annotation.LayoutRes
import androidx.annotation.StringRes
import androidx.annotation.VisibleForTesting
import androidx.appcompat.view.menu.MenuBuilder
import androidx.appcompat.widget.ThemeUtils
Expand Down Expand Up @@ -129,8 +130,8 @@ import com.ichi2.anki.model.CardStateFilter
import com.ichi2.anki.model.CardsOrNotes.CARDS
import com.ichi2.anki.model.SelectableDeck
import com.ichi2.anki.observability.ChangeManager
import com.ichi2.anki.observability.undoableOp
import com.ichi2.anki.previewer.PreviewerFragment
import com.ichi2.anki.progress.observeProgress
import com.ichi2.anki.requireAnkiActivity
import com.ichi2.anki.requireNavigationDrawerActivity
import com.ichi2.anki.scheduling.ForgetCardsDialog
Expand All @@ -152,7 +153,6 @@ import com.ichi2.anki.utils.ext.visibleItemPositions
import com.ichi2.anki.utils.hideKeyboard
import com.ichi2.anki.withProgress
import com.ichi2.ui.CardBrowserSearchView
import com.ichi2.utils.TagsUtil.getUpdatedTags
import com.ichi2.utils.increaseHorizontalPaddingOfOverflowMenuIcons
import com.ichi2.utils.moveCursorToEnd
import com.ichi2.utils.replaceText
Expand Down Expand Up @@ -322,6 +322,8 @@ class CardBrowserFragment :
(parentFragmentManager.findFragmentByTag(DeckSelectionDialog.TAG) as? DeckSelectionDialog)?.dismiss()
}

observeProgress(activityViewModel) { progress -> getString(progress.messageRes) }

// onSearchForDecks starts deck selection using childFragmentManager
childFragmentManager.setFragmentResultListener(DeckSelectionDialog.REQUEST_SELECT_DECK, this) { _, bundle ->
val selectedDeck = bundle.getParcelableCompat<SelectableDeck>(ARG_SELECTED_DECK)
Expand Down Expand Up @@ -1582,15 +1584,15 @@ class CardBrowserFragment :
@VisibleForTesting
fun toggleMark() =
launchCatchingTask {
withProgress { activityViewModel.toggleMark() }
activityViewModel.toggleMark()
}

fun toggleSuspendCards() = launchCatchingTask { withProgress { activityViewModel.toggleSuspendCards().join() } }
fun toggleSuspendCards() = launchCatchingTask { activityViewModel.toggleSuspendCards().join() }

/** @see CardBrowserViewModel.toggleBury */
fun toggleBury() =
launchCatchingTask {
val result = withProgress { activityViewModel.toggleBury() } ?: return@launchCatchingTask
val result = activityViewModel.toggleBury() ?: return@launchCatchingTask
// show a snackbar as there's currently no colored background for buried cards
val message =
when (result.wasBuried) {
Expand Down Expand Up @@ -1664,9 +1666,7 @@ class CardBrowserFragment :

fun deleteSelectedNotes() =
launchCatchingTask {
withProgress(CommonString.deleting_selected_notes) {
activityViewModel.deleteSelectedNotes()
}.ifNotZero { noteCount ->
activityViewModel.deleteSelectedNotes().ifNotZero { noteCount ->
val deletedMessage = resources.getQuantityString(CommonPlurals.card_browser_cards_deleted, noteCount, noteCount)
showUndoSnackbar(deletedMessage)
}
Expand Down Expand Up @@ -1762,7 +1762,7 @@ class CardBrowserFragment :

fun updateFlagForSelectedRows(flag: Flag) =
launchCatchingTask {
withProgress { activityViewModel.updateSelectedCardsFlag(flag) }
activityViewModel.updateSelectedCardsFlag(flag)
}

@VisibleForTesting(otherwise = VisibleForTesting.NONE)
Expand Down Expand Up @@ -1811,7 +1811,7 @@ class CardBrowserFragment :
TagsDialogListenerAction.FILTER -> filterByTags(selectedTags, stateFilter)
TagsDialogListenerAction.EDIT_TAGS ->
launchCatchingTask {
editSelectedCardsTags(selectedTags, indeterminateTags)
activityViewModel.editSelectedCardsTags(selectedTags, indeterminateTags)
}
else -> {}
}
Expand All @@ -1835,7 +1835,7 @@ class CardBrowserFragment :
@VisibleForTesting
internal fun moveSelectedCardsToDeck(did: DeckId): Job =
launchCatchingTask {
val changed = withProgress { activityViewModel.moveSelectedCardsToDeck(did).await() }
val changed = activityViewModel.moveSelectedCardsToDeck(did).await()
showUndoSnackbar(TR.browsingCardsUpdated(changed.count))
}

Expand All @@ -1847,14 +1847,12 @@ class CardBrowserFragment :
shift: Boolean,
) = launchCatchingTask {
val count =
withProgress {
activityViewModel.repositionSelectedRows(
position = position,
step = step,
shuffle = shuffle,
shift = shift,
)
}
activityViewModel.repositionSelectedRows(
position = position,
step = step,
shuffle = shuffle,
shift = shift,
)
showSnackbar(
TR.browsingChangedNewPosition(count),
Snackbar.LENGTH_SHORT,
Expand Down Expand Up @@ -1894,30 +1892,6 @@ class CardBrowserFragment :
onAddNoteActivityResult.navigate(addNoteDestination)
}

/**
* Updates the tags of selected/checked notes and saves them to the disk
* @param selectedTags list of checked tags
* @param indeterminateTags a list of tags which can checked or unchecked, should be ignored if not expected
* For more info on [selectedTags] and [indeterminateTags] see [com.ichi2.anki.dialogs.tags.TagsDialogListener.onSelectedTags]
*/
private suspend fun editSelectedCardsTags(
selectedTags: List<String>,
indeterminateTags: List<String>,
) = withProgress {
val selectedNoteIds = activityViewModel.queryAllSelectedNoteIds().distinct()
undoableOp {
val selectedNotes =
selectedNoteIds
.map { noteId -> getNote(noteId) }
.onEach { note ->
val previousTags: List<String> = note.tags
val updatedTags = getUpdatedTags(previousTags, selectedTags, indeterminateTags)
note.setTagsFromStr(this@undoableOp, tags.join(updatedTags))
}
updateNotes(selectedNotes)
}
}

private fun filterByTags(
selectedTags: List<String>,
cardState: CardStateFilter,
Expand Down Expand Up @@ -2056,3 +2030,10 @@ fun buildUserSpannable(

return spannable
}

@get:StringRes
private val CardBrowserProgress.messageRes: Int
get() =
when (this) {
CardBrowserProgress.DELETING_NOTES -> CommonString.deleting_selected_notes
}
Loading
Loading