Skip to content

Commit 9fd2a79

Browse files
committed
Introduce ChangeNoteType Dialog
1 parent 235e376 commit 9fd2a79

File tree

12 files changed

+1132
-0
lines changed

12 files changed

+1132
-0
lines changed

AnkiDroid/src/main/java/com/ichi2/anki/CardBrowser.kt

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,7 @@ import com.ichi2.anki.dialogs.CardBrowserMySearchesDialog
7878
import com.ichi2.anki.dialogs.CardBrowserMySearchesDialog.Companion.newInstance
7979
import com.ichi2.anki.dialogs.CardBrowserMySearchesDialog.MySearchesDialogListener
8080
import com.ichi2.anki.dialogs.CardBrowserOrderDialog
81+
import com.ichi2.anki.dialogs.ChangeNoteTypeDialog
8182
import com.ichi2.anki.dialogs.CreateDeckDialog
8283
import com.ichi2.anki.dialogs.DeckSelectionDialog
8384
import com.ichi2.anki.dialogs.DeckSelectionDialog.Companion.newInstance
@@ -789,6 +790,11 @@ open class CardBrowser :
789790
searchForMarkedNotes()
790791
return true
791792
}
793+
if (event.isCtrlPressed && event.isShiftPressed) {
794+
Timber.i("Ctrl+Shift+M: Change Note Type")
795+
showChangeNoteType()
796+
return true
797+
}
792798
}
793799
KeyEvent.KEYCODE_Z -> {
794800
if (event.isCtrlPressed) {
@@ -1217,6 +1223,10 @@ open class CardBrowser :
12171223
toggleBury()
12181224
return true
12191225
}
1226+
R.id.action_change_note_type -> {
1227+
showChangeNoteType()
1228+
return true
1229+
}
12201230
R.id.action_change_deck -> {
12211231
showChangeDeckDialog()
12221232
return true
@@ -1468,6 +1478,28 @@ open class CardBrowser :
14681478
}
14691479
}
14701480

1481+
private fun getChangeNoteTypeDialog(noteIds: List<Long>): ChangeNoteTypeDialog {
1482+
val dialog = ChangeNoteTypeDialog.newInstance(noteIds)
1483+
1484+
return dialog
1485+
}
1486+
1487+
private fun showChangeNoteType() =
1488+
launchCatchingTask {
1489+
if (!viewModel.hasSelectedAnyRows()) {
1490+
Timber.i("Not showing Change Note Type - No Cards")
1491+
return@launchCatchingTask
1492+
}
1493+
if (!viewModel.allSelectedNotesOfSameType()) {
1494+
Timber.i("All notes are not of the same type")
1495+
showSnackbar(R.string.different_note_types_selected)
1496+
return@launchCatchingTask
1497+
}
1498+
// ChangeNoteTypeDialog .newInstance(viewModel.queryAllSelectedNoteIds())
1499+
val dialog = getChangeNoteTypeDialog(viewModel.queryAllSelectedNoteIds())
1500+
showDialogFragment(dialog)
1501+
}
1502+
14711503
@KotlinCleanup("DeckSelectionListener is almost certainly a bug - deck!!")
14721504
fun getChangeDeckDialog(selectableDecks: List<SelectableDeck>?): DeckSelectionDialog {
14731505
val dialog =

AnkiDroid/src/main/java/com/ichi2/anki/browser/CardBrowserViewModel.kt

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -233,6 +233,23 @@ class CardBrowserViewModel(
233233

234234
suspend fun queryAllSelectedNoteIds() = selectedRows.queryNoteIds(this.cardsOrNotes)
235235

236+
suspend fun allSelectedNotesOfSameType(): Boolean {
237+
val selectedNoteIds = queryAllSelectedNoteIds()
238+
if (selectedNoteIds.isEmpty()) {
239+
return false
240+
}
241+
val firstNote = withCol { getNote(selectedNoteIds.first()) }
242+
val firstNoteType = firstNote.noteTypeId
243+
244+
for (noteId in selectedNoteIds) {
245+
val note = withCol { getNote(noteId) }
246+
if (note.noteTypeId != firstNoteType) {
247+
return false
248+
}
249+
}
250+
return true
251+
}
252+
236253
@VisibleForTesting
237254
internal suspend fun queryAllCardIds() = cards.queryCardIds()
238255

0 commit comments

Comments
 (0)