Skip to content

Commit 59fd77f

Browse files
committed
refactor(deck-picker): right click menu
* remove unnecessary state * define 'show' which handles DeckPicker specific logic more verbose, but easier to understand Assisted-by: Claude Opus 4.6
1 parent 4d8e810 commit 59fd77f

2 files changed

Lines changed: 28 additions & 20 deletions

File tree

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

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,6 @@ import com.ichi2.anki.common.time.TimeManager
9898
import com.ichi2.anki.common.utils.annotation.KotlinCleanup
9999
import com.ichi2.anki.compat.CompatHelper.Companion.getSerializableCompat
100100
import com.ichi2.anki.contextmenu.DeckPickerMenuContentProvider
101-
import com.ichi2.anki.contextmenu.MouseContextMenuHandler
102101
import com.ichi2.anki.databinding.ActivityHomescreenBinding
103102
import com.ichi2.anki.databinding.IncludeDeckPickerBinding
104103
import com.ichi2.anki.databinding.IncludeFloatingAddButtonBinding
@@ -270,9 +269,6 @@ open class DeckPicker :
270269
private lateinit var deckListAdapter: DeckAdapter
271270
private lateinit var pullToSyncWrapper: SwipeRefreshLayout
272271

273-
// Right-click context menu handler using decoupled menu system
274-
private lateinit var mouseContextMenuHandler: MouseContextMenuHandler
275-
276272
private lateinit var floatingActionMenu: DeckPickerFloatingActionMenu
277273

278274
var activeSnackBar: Snackbar? = null
@@ -463,10 +459,13 @@ open class DeckPicker :
463459
y: Float,
464460
) = launchCatchingTask {
465461
withCol { decks.select(deckId) }
466-
val menuContentProvider = DeckPickerMenuContentProvider.newInstance(deckId, this@DeckPicker)
467462
updateDeckList()
468-
mouseContextMenuHandler = MouseContextMenuHandler(deckPickerBinding.deckPickerContent, menuContentProvider)
469-
mouseContextMenuHandler.showContextMenu(deckPickerBinding.decks, x, y)
463+
DeckPickerMenuContentProvider.show(
464+
deckPicker = this@DeckPicker,
465+
deckId = deckId,
466+
x = x,
467+
y = y,
468+
)
470469
}
471470

472471
// ----------------------------------------------------------------------------

AnkiDroid/src/main/java/com/ichi2/anki/contextmenu/DeckPickerMenuContentProvider.kt

Lines changed: 22 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -63,21 +63,30 @@ class DeckPickerMenuContentProvider(
6363

6464
companion object {
6565
/**
66-
* Builds a [DeckPickerMenuContentProvider] for [deckId], reading the dynamic /
67-
* has-buried flags from the collection.
66+
* Builds a [DeckPickerMenuContentProvider] for [deckId] (reading the dynamic /
67+
* has-buried flags from the collection) and shows it as a popup anchored at
68+
* ([x], [y]) on the deck picker's recycler view.
6869
*/
69-
suspend fun newInstance(
70-
deckId: DeckId,
70+
suspend fun show(
7171
deckPicker: DeckPicker,
72-
): DeckPickerMenuContentProvider =
73-
withCol {
74-
DeckPickerMenuContentProvider(
75-
id = deckId,
76-
isDynamic = decks.isFiltered(deckId),
77-
hasBuriedInDeck = sched.haveBuried(),
78-
deckPicker = deckPicker,
79-
)
80-
}
72+
deckId: DeckId,
73+
x: Float,
74+
y: Float,
75+
) {
76+
val provider =
77+
withCol {
78+
DeckPickerMenuContentProvider(
79+
id = deckId,
80+
isDynamic = decks.isFiltered(deckId),
81+
hasBuriedInDeck = sched.haveBuried(),
82+
deckPicker = deckPicker,
83+
)
84+
}
85+
val anchorParent = deckPicker.deckPickerBinding.deckPickerContent
86+
val target = deckPicker.deckPickerBinding.decks
87+
MouseContextMenuHandler(viewGroup = anchorParent, menuContentProvider = provider)
88+
.showContextMenu(view = target, x = x, y = y)
89+
}
8190

8291
fun createOptionsList(
8392
isDynamic: Boolean,

0 commit comments

Comments
 (0)