From f384f89ac80616c1d4d2b190cf3cd446a2ba96b1 Mon Sep 17 00:00:00 2001 From: Anoop Date: Thu, 15 Aug 2024 13:11:35 +0530 Subject: [PATCH] refactor --- .../ichi2/widget/DeckPickerWidgetConfig.kt | 58 ++++++++++++++++--- 1 file changed, 49 insertions(+), 9 deletions(-) diff --git a/AnkiDroid/src/main/java/com/ichi2/widget/DeckPickerWidgetConfig.kt b/AnkiDroid/src/main/java/com/ichi2/widget/DeckPickerWidgetConfig.kt index efacb544b14b..ad7b0456a92b 100644 --- a/AnkiDroid/src/main/java/com/ichi2/widget/DeckPickerWidgetConfig.kt +++ b/AnkiDroid/src/main/java/com/ichi2/widget/DeckPickerWidgetConfig.kt @@ -176,12 +176,51 @@ class DeckPickerWidgetConfig : AnkiActivity(), DeckSelectionListener { /** Updates the visibility of the FloatingActionButton based on the number of selected decks */ private fun updateFabVisibility() { - val fab = findViewById(R.id.fabWidgetDeckPicker) - fab.visibility = if (deckAdapter.itemCount >= MAX_DECKS_ALLOWED) { - View.GONE - } else { - View.VISIBLE + lifecycleScope.launch { + // Check if the default deck is empty + val defaultDeckEmpty = isDefaultDeckEmpty() + + // Fetch the total number of selectable decks + val totalSelectableDecks = getTotalSelectableDecks() + + // Adjust totalSelectableDecks if the default deck is empty + var adjustedTotalSelectableDecks = totalSelectableDecks + if (defaultDeckEmpty) { + adjustedTotalSelectableDecks -= 1 + } + + // Get the number of selected decks + val selectedDeckCount = deckAdapter.itemCount + Timber.d("Selected decks count: $selectedDeckCount") + + // Determine FAB visibility + val fab = findViewById(R.id.fabWidgetDeckPicker) + fab.visibility = if (selectedDeckCount >= MAX_DECKS_ALLOWED || selectedDeckCount >= adjustedTotalSelectableDecks) { + View.GONE + } else { + View.VISIBLE + } + } + } + + /** Returns the total number of selectable decks. */ + private suspend fun getTotalSelectableDecks(): Int { + return withContext(Dispatchers.IO) { + SelectableDeck.fromCollection(includeFiltered = false).size + } + } + + private fun isDefaultDeckEmpty(): Boolean { + val tree = dueTree ?: run { + Timber.d("Due tree is null") + return true + } + val defaultDeck = tree.children.find { it.did == 1L } + if (defaultDeck == null) { + return true } + val defaultDeckHasCards = defaultDeck.hasCardsReadyToStudy() + return !defaultDeckHasCards } /** Loads saved preferences and updates the RecyclerView */ @@ -360,10 +399,11 @@ class DeckPickerWidgetConfig : AnkiActivity(), DeckSelectionListener { * `false` otherwise. */ private fun isCollectionEmpty(tree: DeckNode): Boolean { - val isEmpty = tree.children.size == 1 && tree.children[0].did == 1L - Timber.d("isEmpty: $isEmpty") - - return isEmpty + if (tree.children.size == 1 && tree.children[0].did == 1L) { + val defaultDeckHasCards = tree.children[0].hasCardsReadyToStudy() + return !defaultDeckHasCards + } + return false } /**