From b9be27f1685316d49df41e68a1d9b9e912a72ff6 Mon Sep 17 00:00:00 2001 From: Anoop Date: Sat, 31 Aug 2024 16:31:42 +0530 Subject: [PATCH] Refactor isCollectionEmpty method to DeckUtils for reuse in multiple classes --- .../src/main/java/com/ichi2/anki/DeckUtils.kt | 18 +++++++++++++++++ .../cardanalysis/CardAnalysisWidgetConfig.kt | 15 +------------- .../deckpicker/DeckPickerWidgetConfig.kt | 20 +------------------ 3 files changed, 20 insertions(+), 33 deletions(-) diff --git a/AnkiDroid/src/main/java/com/ichi2/anki/DeckUtils.kt b/AnkiDroid/src/main/java/com/ichi2/anki/DeckUtils.kt index 7348169642..7c1bf06717 100644 --- a/AnkiDroid/src/main/java/com/ichi2/anki/DeckUtils.kt +++ b/AnkiDroid/src/main/java/com/ichi2/anki/DeckUtils.kt @@ -52,4 +52,22 @@ object DeckUtils { } } } + + /** + * Returns whether the deck picker displays any deck. + * Technically, it means that there is a non default deck, or that the default deck is non-empty. + * + * This function is specifically implemented to address an issue where the default deck + * isn't handled correctly when a second deck is added to the + * collection. In this case, the deck tree may incorrectly appear as non-empty when it contains + * only the default deck and no other cards. + * + */ + suspend fun isCollectionEmpty(): Boolean { + val tree = withCol { sched.deckDueTree() } + if (tree.children.size == 1 && tree.children[0].did == 1L) { + return isDefaultDeckEmpty() + } + return false + } } diff --git a/AnkiDroid/src/main/java/com/ichi2/widget/cardanalysis/CardAnalysisWidgetConfig.kt b/AnkiDroid/src/main/java/com/ichi2/widget/cardanalysis/CardAnalysisWidgetConfig.kt index 7d5b881630..ba93d09ef6 100644 --- a/AnkiDroid/src/main/java/com/ichi2/widget/cardanalysis/CardAnalysisWidgetConfig.kt +++ b/AnkiDroid/src/main/java/com/ichi2/widget/cardanalysis/CardAnalysisWidgetConfig.kt @@ -33,8 +33,7 @@ import androidx.recyclerview.widget.RecyclerView import com.google.android.material.floatingactionbutton.FloatingActionButton import com.google.android.material.snackbar.Snackbar import com.ichi2.anki.AnkiActivity -import com.ichi2.anki.CollectionManager.withCol -import com.ichi2.anki.DeckUtils +import com.ichi2.anki.DeckUtils.isCollectionEmpty import com.ichi2.anki.R import com.ichi2.anki.dialogs.DeckSelectionDialog import com.ichi2.anki.dialogs.DeckSelectionDialog.DeckSelectionListener @@ -214,10 +213,6 @@ class CardAnalysisWidgetConfig : AnkiActivity(), DeckSelectionListener, BaseSnac } } - private suspend fun isDefaultDeckEmpty(): Boolean { - return DeckUtils.isDefaultDeckEmpty() - } - /** Updates the view according to the saved preference for appWidgetId.*/ fun updateViewWithSavedPreferences() { val selectedDeckId = cardAnalysisWidgetPreferences.getSelectedDeckIdFromPreferences(appWidgetId) ?: return @@ -336,14 +331,6 @@ class CardAnalysisWidgetConfig : AnkiActivity(), DeckSelectionListener, BaseSnac context?.let { cardAnalysisWidgetPreferences.deleteDeckData(appWidgetId) } } } - - private suspend fun isCollectionEmpty(): Boolean { - val tree = withCol { sched.deckDueTree() } - if (tree.children.size == 1 && tree.children[0].did == 1L) { - return isDefaultDeckEmpty() - } - return false - } } fun ContextWrapper.unregisterReceiverSilently(receiver: BroadcastReceiver) { diff --git a/AnkiDroid/src/main/java/com/ichi2/widget/deckpicker/DeckPickerWidgetConfig.kt b/AnkiDroid/src/main/java/com/ichi2/widget/deckpicker/DeckPickerWidgetConfig.kt index 2debaff776..0b774752f9 100644 --- a/AnkiDroid/src/main/java/com/ichi2/widget/deckpicker/DeckPickerWidgetConfig.kt +++ b/AnkiDroid/src/main/java/com/ichi2/widget/deckpicker/DeckPickerWidgetConfig.kt @@ -34,8 +34,8 @@ import androidx.recyclerview.widget.RecyclerView import com.google.android.material.floatingactionbutton.FloatingActionButton import com.google.android.material.snackbar.Snackbar import com.ichi2.anki.AnkiActivity -import com.ichi2.anki.CollectionManager.withCol import com.ichi2.anki.DeckUtils +import com.ichi2.anki.DeckUtils.isCollectionEmpty import com.ichi2.anki.R import com.ichi2.anki.dialogs.DeckSelectionDialog import com.ichi2.anki.dialogs.DeckSelectionDialog.DeckSelectionListener @@ -444,24 +444,6 @@ class DeckPickerWidgetConfig : AnkiActivity(), DeckSelectionListener, BaseSnackb context?.let { deckPickerWidgetPreferences.deleteDeckData(appWidgetId) } } } - - /** - * Returns whether the deck picker displays any deck. - * Technically, it means that there is a non default deck, or that the default deck is non-empty. - * - * This function is specifically implemented to address an issue where the default deck - * isn't handled correctly when a second deck is added to the - * collection. In this case, the deck tree may incorrectly appear as non-empty when it contains - * only the default deck and no other cards. - * - */ - private suspend fun isCollectionEmpty(): Boolean { - val tree = withCol { sched.deckDueTree() } - if (tree.children.size == 1 && tree.children[0].did == 1L) { - return isDefaultDeckEmpty() - } - return false - } } /**