Skip to content

Commit

Permalink
Adding functionality to update widget when there is a change in colle…
Browse files Browse the repository at this point in the history
…ction.
  • Loading branch information
xenonnn4w committed Aug 19, 2024
1 parent aa658a4 commit 73c1e56
Showing 1 changed file with 19 additions and 6 deletions.
25 changes: 19 additions & 6 deletions AnkiDroid/src/main/java/com/ichi2/widget/DeckPickerWidget.kt
Original file line number Diff line number Diff line change
Expand Up @@ -83,6 +83,8 @@ class DeckPickerWidget : AnalyticsWidgetProvider(), ChangeManager.Subscriber {
*/
const val EXTRA_SELECTED_DECK_IDS = "deck_picker_widget_selected_deck_ids"

private var needsUpdate: Boolean = false

/**
* Updates the widget with the deck data.
*
Expand Down Expand Up @@ -250,9 +252,14 @@ class DeckPickerWidget : AnalyticsWidgetProvider(), ChangeManager.Subscriber {
appWidgetIds: IntArray,
usageAnalytics: UsageAnalytics
) {
Timber.d("Performing widget update for appWidgetIds: ${appWidgetIds.joinToString(", ")}")

maybeUpdateWidget() // Check the flag and update if needed

val widgetPreferences = WidgetPreferences(context)

for (widgetId in appWidgetIds) {
Timber.d("Updating widget with ID: $widgetId")
val selectedDeckIds = widgetPreferences.getSelectedDeckIdsFromPreferencesDeckPickerWidget(widgetId)

/**Explanation of behavior when selectedDeckIds is empty
Expand All @@ -263,10 +270,13 @@ class DeckPickerWidget : AnalyticsWidgetProvider(), ChangeManager.Subscriber {
* user experience over showing an empty or default state.
*/
if (selectedDeckIds.isNotEmpty()) {
Timber.d("Selected deck IDs: ${selectedDeckIds.joinToString(", ")} for widget ID: $widgetId")
updateWidget(context, appWidgetManager, widgetId, selectedDeckIds)
}
setRecurringAlarm(context, widgetId)
}

Timber.d("Widget update process completed for appWidgetIds: ${appWidgetIds.joinToString(", ")}")
}

override fun onReceive(context: Context?, intent: Intent?) {
Expand Down Expand Up @@ -346,8 +356,15 @@ class DeckPickerWidget : AnalyticsWidgetProvider(), ChangeManager.Subscriber {
}

override fun opExecuted(changes: OpChanges, handler: Any?) {
// Handle changes and update the widget
updateWidgetFromChanges()
// Set the flag when changes are detected
needsUpdate = true
}

private fun maybeUpdateWidget() {
if (needsUpdate) {
updateWidgetFromChanges()
needsUpdate = false // Reset the flag after updating
}
}

private fun updateWidgetFromChanges() {
Expand All @@ -367,10 +384,6 @@ class DeckPickerWidget : AnalyticsWidgetProvider(), ChangeManager.Subscriber {
}
}

init {
ChangeManager.subscribe(this)
}

override fun onDeleted(context: Context?, appWidgetIds: IntArray?) {
if (context == null) {
Timber.e("Context is null in onDeleted")
Expand Down

0 comments on commit 73c1e56

Please sign in to comment.