From f3ad682d41be4b8a1957707a528444f59619558a Mon Sep 17 00:00:00 2001 From: Anoop Date: Thu, 1 Aug 2024 01:07:41 +0530 Subject: [PATCH] refactor --- .../java/com/ichi2/widget/DeckPickerWidget.kt | 67 +++++++++---------- .../ichi2/widget/DeckPickerWidgetConfig.kt | 3 +- .../res/layout/widget_item_deck_config.xml | 3 +- AnkiDroid/src/main/res/values/08-widget.xml | 17 +++-- 4 files changed, 43 insertions(+), 47 deletions(-) diff --git a/AnkiDroid/src/main/java/com/ichi2/widget/DeckPickerWidget.kt b/AnkiDroid/src/main/java/com/ichi2/widget/DeckPickerWidget.kt index 70d96133deb5..466e262f0a7e 100644 --- a/AnkiDroid/src/main/java/com/ichi2/widget/DeckPickerWidget.kt +++ b/AnkiDroid/src/main/java/com/ichi2/widget/DeckPickerWidget.kt @@ -50,8 +50,8 @@ data class DeckPickerWidgetData( /** * AnalyticsWidgetProvider class for Deck Picker Widget that integrates - * * with UsageAnalytics to send analytics events when the widget is enabled, disabled, - * * or updated.. + * with UsageAnalytics to send analytics events when the widget is enabled, disabled, + * or updated.. * This widget displays a list of decks with their respective new, learning, and review card counts. * It updates every minute . * It can be resized vertically & horizontally. @@ -98,23 +98,6 @@ class DeckPickerWidget : AnalyticsWidgetProvider() { } } - /** - * Retrieves the selected deck IDs from shared preferences for the widget. - * - * @param context the context of the application - * @param appWidgetId the ID of the widget - * @return the array of selected deck IDs - */ - private fun getSelectedDeckIdsFromPreferences(context: Context, appWidgetId: Int): LongArray { - val sharedPreferences = context.getSharedPreferences("DeckPickerWidgetPrefs", Context.MODE_PRIVATE) - val selectedDecksString = sharedPreferences.getString("deck_picker_widget_selected_decks_$appWidgetId", "") - return if (!selectedDecksString.isNullOrEmpty()) { - selectedDecksString.split(",").map { it.toLong() }.toLongArray() - } else { - longArrayOf() - } - } - /** * Sets a recurring alarm to update the widget every minute. * @@ -129,21 +112,29 @@ class DeckPickerWidget : AnalyticsWidgetProvider() { } val pendingIntent = PendingIntent.getBroadcast(context, appWidgetId, intent, PendingIntent.FLAG_NO_CREATE or PendingIntent.FLAG_IMMUTABLE) - if (pendingIntent == null) { - Timber.d("PendingIntent is null, creating a new one for widget ID: $appWidgetId") - val newPendingIntent = PendingIntent.getBroadcast(context, appWidgetId, intent, PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE) + /** + * When onUpdate is called, the code checks if an existing alarm PendingIntent + * is already set for the widget .If an Alarm Already Exists: PendingIntent.getBroadcast + * returns the existing PendingIntent, and pendingIntent is not null. + * The if block is skipped, and no new alarm is set. + */ - // Set alarm to trigger every minute - val ONE_MINUTE_MILLIS = 60.seconds.inWholeMilliseconds - alarmManager.setRepeating( - AlarmManager.ELAPSED_REALTIME, - SystemClock.elapsedRealtime() + ONE_MINUTE_MILLIS, - ONE_MINUTE_MILLIS, - newPendingIntent - ) - } else { - Timber.d("PendingIntent already exists for widget ID: $appWidgetId") + if (pendingIntent != null) { + Timber.v("Recurring alarm PendingIntent already exists for widget ID: $appWidgetId") + return } + + Timber.v("Creating a new recurring alarm PendingIntent for widget ID: $appWidgetId") + val newPendingIntent = PendingIntent.getBroadcast(context, appWidgetId, intent, PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE) + + // Set alarm to trigger every minute + val ONE_MINUTE_MILLIS = 60.seconds.inWholeMilliseconds + alarmManager.setRepeating( + AlarmManager.ELAPSED_REALTIME, + SystemClock.elapsedRealtime() + ONE_MINUTE_MILLIS, + ONE_MINUTE_MILLIS, + newPendingIntent + ) } /** @@ -172,8 +163,10 @@ class DeckPickerWidget : AnalyticsWidgetProvider() { super.onUpdate(context, appWidgetManager, appWidgetIds) Timber.d("onUpdate") + val widgetPreferences = WidgetPreferences(context) + for (widgetId in appWidgetIds) { - val selectedDeckIds = getSelectedDeckIdsFromPreferences(context, widgetId) + val selectedDeckIds = widgetPreferences.getSelectedDeckIdsFromPreferencesDeckPickerWidget(widgetId) if (selectedDeckIds.isNotEmpty()) { updateWidget(context, appWidgetManager, intArrayOf(widgetId), selectedDeckIds) } @@ -188,6 +181,8 @@ class DeckPickerWidget : AnalyticsWidgetProvider() { } super.onReceive(context, intent) + val widgetPreferences = WidgetPreferences(context) + when (intent.action) { ACTION_APPWIDGET_UPDATE -> { val appWidgetManager = AppWidgetManager.getInstance(context) @@ -202,7 +197,7 @@ class DeckPickerWidget : AnalyticsWidgetProvider() { val appWidgetManager = AppWidgetManager.getInstance(context) val appWidgetId = intent.getIntExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID) if (appWidgetId != AppWidgetManager.INVALID_APPWIDGET_ID) { - val selectedDeckIds = getSelectedDeckIdsFromPreferences(context, appWidgetId) + val selectedDeckIds = widgetPreferences.getSelectedDeckIdsFromPreferencesDeckPickerWidget(appWidgetId) if (selectedDeckIds.isNotEmpty()) { updateWidget(context, appWidgetManager, intArrayOf(appWidgetId), selectedDeckIds) } @@ -225,8 +220,10 @@ class DeckPickerWidget : AnalyticsWidgetProvider() { } override fun performUpdate(context: Context, appWidgetManager: AppWidgetManager, appWidgetIds: IntArray, usageAnalytics: UsageAnalytics) { + val widgetPreferences = WidgetPreferences(context) + for (widgetId in appWidgetIds) { - val selectedDeckIds = getSelectedDeckIdsFromPreferences(context, widgetId) + val selectedDeckIds = widgetPreferences.getSelectedDeckIdsFromPreferencesDeckPickerWidget(widgetId) if (selectedDeckIds.isNotEmpty()) { updateWidget(context, appWidgetManager, intArrayOf(widgetId), selectedDeckIds) } diff --git a/AnkiDroid/src/main/java/com/ichi2/widget/DeckPickerWidgetConfig.kt b/AnkiDroid/src/main/java/com/ichi2/widget/DeckPickerWidgetConfig.kt index b48ca63036c2..b433d656ae1c 100644 --- a/AnkiDroid/src/main/java/com/ichi2/widget/DeckPickerWidgetConfig.kt +++ b/AnkiDroid/src/main/java/com/ichi2/widget/DeckPickerWidgetConfig.kt @@ -54,7 +54,6 @@ class DeckPickerWidgetConfig : FragmentActivity(), DeckSelectionListener { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - setResult(RESULT_CANCELED) setContentView(R.layout.widget_deck_picker_config) DeckPickerWidgetPreferences = WidgetPreferences(this) @@ -65,7 +64,7 @@ class DeckPickerWidgetConfig : FragmentActivity(), DeckSelectionListener { ) ?: AppWidgetManager.INVALID_APPWIDGET_ID if (appWidgetId == AppWidgetManager.INVALID_APPWIDGET_ID) { - Timber.tag("DeckPickerWidgetConfig").w("Invalid App Widget ID") + Timber.v("Invalid App Widget ID") finish() return } diff --git a/AnkiDroid/src/main/res/layout/widget_item_deck_config.xml b/AnkiDroid/src/main/res/layout/widget_item_deck_config.xml index d65e2523f805..7c3c4b343b28 100644 --- a/AnkiDroid/src/main/res/layout/widget_item_deck_config.xml +++ b/AnkiDroid/src/main/res/layout/widget_item_deck_config.xml @@ -2,6 +2,7 @@ @@ -12,7 +13,7 @@ android:layout_height="wrap_content" android:layout_weight="1" android:paddingStart="10dp" - android:text="@string/widget_config_screen_deck_name" + tools:text="Deck Name" android:textColor="?android:attr/textColorPrimary" android:textSize="18sp" /> diff --git a/AnkiDroid/src/main/res/values/08-widget.xml b/AnkiDroid/src/main/res/values/08-widget.xml index 7c31c514d8c4..030b3fab2ea2 100644 --- a/AnkiDroid/src/main/res/values/08-widget.xml +++ b/AnkiDroid/src/main/res/values/08-widget.xml @@ -41,15 +41,14 @@ Deck Picker - Mark as Favorite - No decks are marked as favorites - Start marking decks as favorites using the + icon. - Only 5 decks can be marked favourite. - Deck Name + Mark as Favorite + No decks are marked as favorites + Start marking decks as favorites using the + icon. + Only 5 decks can be marked favorite. - - Chemistry - Physics - Math + + Chemistry + Physics + Math