From 92d8c6b67409e053b3c9d42ef73e4baf02abc455 Mon Sep 17 00:00:00 2001 From: ByteHamster Date: Sat, 23 Jul 2022 11:46:07 +0200 Subject: Work around widget flickering --- .../antennapod/core/receiver/PlayerWidget.java | 33 +++++++++++++++++++++- 1 file changed, 32 insertions(+), 1 deletion(-) diff --git a/core/src/main/java/de/danoeh/antennapod/core/receiver/PlayerWidget.java b/core/src/main/java/de/danoeh/antennapod/core/receiver/PlayerWidget.java index 4e5aff696..c6ef40744 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/receiver/PlayerWidget.java +++ b/core/src/main/java/de/danoeh/antennapod/core/receiver/PlayerWidget.java @@ -2,16 +2,22 @@ package de.danoeh.antennapod.core.receiver; import android.appwidget.AppWidgetManager; import android.appwidget.AppWidgetProvider; +import android.content.ComponentName; import android.content.Context; import android.content.SharedPreferences; import android.util.Log; +import androidx.work.ExistingWorkPolicy; +import androidx.work.OneTimeWorkRequest; +import androidx.work.WorkManager; import de.danoeh.antennapod.core.widget.WidgetUpdaterWorker; import java.util.Arrays; +import java.util.concurrent.TimeUnit; public class PlayerWidget extends AppWidgetProvider { private static final String TAG = "PlayerWidget"; public static final String PREFS_NAME = "PlayerWidgetPrefs"; + private static final String KEY_WORKAROUND_ENABLED = "WorkaroundEnabled"; private static final String KEY_ENABLED = "WidgetEnabled"; public static final String KEY_WIDGET_COLOR = "widget_color"; public static final String KEY_WIDGET_PLAYBACK_SPEED = "widget_playback_speed"; @@ -19,6 +25,7 @@ public class PlayerWidget extends AppWidgetProvider { public static final String KEY_WIDGET_FAST_FORWARD = "widget_fast_forward"; public static final String KEY_WIDGET_REWIND = "widget_rewind"; public static final int DEFAULT_COLOR = 0x00262C31; + private static final String WORKAROUND_WORK_NAME = "WidgetUpdaterWorkaround"; @Override public void onEnabled(Context context) { @@ -26,6 +33,7 @@ public class PlayerWidget extends AppWidgetProvider { Log.d(TAG, "Widget enabled"); setEnabled(context, true); WidgetUpdaterWorker.enqueueWork(context); + scheduleWorkaround(context); } @Override @@ -33,6 +41,12 @@ public class PlayerWidget extends AppWidgetProvider { Log.d(TAG, "onUpdate() called with: " + "context = [" + context + "], appWidgetManager = [" + appWidgetManager + "], appWidgetIds = [" + Arrays.toString(appWidgetIds) + "]"); WidgetUpdaterWorker.enqueueWork(context); + + SharedPreferences prefs = context.getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE); + if (!prefs.getBoolean(KEY_WORKAROUND_ENABLED, false)) { + scheduleWorkaround(context); + prefs.edit().putBoolean(KEY_WORKAROUND_ENABLED, true).apply(); + } } @Override @@ -45,17 +59,34 @@ public class PlayerWidget extends AppWidgetProvider { @Override public void onDeleted(Context context, int[] appWidgetIds) { Log.d(TAG, "OnDeleted"); + SharedPreferences prefs = context.getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE); for (int appWidgetId : appWidgetIds) { - SharedPreferences prefs = context.getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE); prefs.edit().remove(KEY_WIDGET_COLOR + appWidgetId).apply(); prefs.edit().remove(KEY_WIDGET_PLAYBACK_SPEED + appWidgetId).apply(); prefs.edit().remove(KEY_WIDGET_REWIND + appWidgetId).apply(); prefs.edit().remove(KEY_WIDGET_FAST_FORWARD + appWidgetId).apply(); prefs.edit().remove(KEY_WIDGET_SKIP + appWidgetId).apply(); } + AppWidgetManager manager = AppWidgetManager.getInstance(context); + int[] widgetIds = manager.getAppWidgetIds(new ComponentName(context, PlayerWidget.class)); + if (widgetIds.length == 0) { + prefs.edit().putBoolean(KEY_WORKAROUND_ENABLED, false).apply(); + WorkManager.getInstance(context).cancelUniqueWork(WORKAROUND_WORK_NAME); + } super.onDeleted(context, appWidgetIds); } + private static void scheduleWorkaround(Context context) { + // Enqueueing work enables a BOOT_COMPLETED receiver, which in turn makes Android refresh widgets. + // This creates an endless loop with a flickering widget. + // Workaround: When there is a widget, schedule a dummy task in the far future, so that the receiver stays. + final OneTimeWorkRequest workRequest = new OneTimeWorkRequest.Builder(WidgetUpdaterWorker.class) + .setInitialDelay(100 * 356, TimeUnit.DAYS) + .build(); + WorkManager.getInstance(context) + .enqueueUniqueWork(WORKAROUND_WORK_NAME, ExistingWorkPolicy.REPLACE, workRequest); + } + public static boolean isEnabled(Context context) { SharedPreferences prefs = context.getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE); return prefs.getBoolean(KEY_ENABLED, false); -- cgit v1.2.3 From db7571ebc25cf34c2da8446fa6d1f61397ccbc17 Mon Sep 17 00:00:00 2001 From: ByteHamster Date: Mon, 25 Jul 2022 21:36:11 +0200 Subject: Add statistics moved message --- .../fragment/preferences/MainPreferencesFragment.java | 11 +++++++++++ app/src/main/res/xml/preferences.xml | 6 ++++++ ui/i18n/src/main/res/values/strings.xml | 1 + 3 files changed, 18 insertions(+) diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/preferences/MainPreferencesFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/preferences/MainPreferencesFragment.java index e2c5036df..e53c72baf 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/preferences/MainPreferencesFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/preferences/MainPreferencesFragment.java @@ -5,6 +5,7 @@ import android.graphics.PorterDuff; import android.graphics.PorterDuffColorFilter; import android.os.Bundle; +import androidx.appcompat.app.AlertDialog; import androidx.appcompat.app.AppCompatActivity; import androidx.preference.Preference; import androidx.preference.PreferenceFragmentCompat; @@ -32,6 +33,7 @@ public class MainPreferencesFragment extends PreferenceFragmentCompat { private static final String PREF_ABOUT = "prefAbout"; private static final String PREF_NOTIFICATION = "notifications"; private static final String PREF_CONTRIBUTE = "prefContribute"; + private static final String PREF_STATISTICS = "statistics"; @Override public void onCreatePreferences(Bundle savedInstanceState, String rootKey) { @@ -121,6 +123,15 @@ public class MainPreferencesFragment extends PreferenceFragmentCompat { startActivity(new Intent(getActivity(), BugReportActivity.class)); return true; }); + findPreference(PREF_STATISTICS).setOnPreferenceClickListener( + preference -> { + new AlertDialog.Builder(getContext()) + .setMessage(R.string.statistics_moved) + .setPositiveButton(android.R.string.ok, null) + .show(); + return true; + } + ); } private void setupSearch() { diff --git a/app/src/main/res/xml/preferences.xml b/app/src/main/res/xml/preferences.xml index 9967d7fd1..659e44f4a 100644 --- a/app/src/main/res/xml/preferences.xml +++ b/app/src/main/res/xml/preferences.xml @@ -44,6 +44,12 @@ android:title="@string/notification_pref_fragment" android:icon="@drawable/ic_notifications"/> + + diff --git a/ui/i18n/src/main/res/values/strings.xml b/ui/i18n/src/main/res/values/strings.xml index aa7fa18d4..3b6c29c31 100644 --- a/ui/i18n/src/main/res/values/strings.xml +++ b/ui/i18n/src/main/res/values/strings.xml @@ -355,6 +355,7 @@ Storage Episode auto delete, Import, Export + The statistics screen was moved to the subscriptions screen. You can open it from there. Project Synchronization Synchronize with other devices -- cgit v1.2.3 From 9e87cf6115cdda78794e7958190a165c4542ae01 Mon Sep 17 00:00:00 2001 From: ByteHamster Date: Sat, 30 Jul 2022 17:05:46 +0200 Subject: Bump version to 2.6.2 --- app/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 69975458d..f807f411f 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -11,8 +11,8 @@ android { // Version code schema: // "1.2.3-beta4" -> 1020304 // "1.2.3" -> 1020395 - versionCode 2060195 - versionName "2.6.1" + versionCode 2060295 + versionName "2.6.2" def commit = "" try { -- cgit v1.2.3