diff options
author | ByteHamster <info@bytehamster.com> | 2022-08-04 19:36:38 +0200 |
---|---|---|
committer | ByteHamster <info@bytehamster.com> | 2022-08-04 19:36:38 +0200 |
commit | eaafd58bd3b1cf94066bb94469aadd27b8a09ed3 (patch) | |
tree | c548db7b0300918ca8980b156a25b8020b7ca31d | |
parent | d3b689127f75ffcef3a1081a68b64180301333d4 (diff) | |
parent | 9e87cf6115cdda78794e7958190a165c4542ae01 (diff) | |
download | AntennaPod-eaafd58bd3b1cf94066bb94469aadd27b8a09ed3.zip |
Merge branch 'master' into develop
5 files changed, 52 insertions, 3 deletions
diff --git a/app/build.gradle b/app/build.gradle index 37044d629..b4526aaf8 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -10,8 +10,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 { 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 7f5205db4..7a0b47937 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; @@ -39,6 +40,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) { @@ -128,6 +130,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 String getLocalizedWebsiteLink() { 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"/> + <Preference + android:key="statistics" + android:title="@string/statistics_label" + android:summary="@string/statistics_moved" + android:icon="@drawable/chart_box_outline"/> + <PreferenceCategory android:key="project" android:title="@string/project_pref"> 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); diff --git a/ui/i18n/src/main/res/values/strings.xml b/ui/i18n/src/main/res/values/strings.xml index 564c24bb6..0242f75a2 100644 --- a/ui/i18n/src/main/res/values/strings.xml +++ b/ui/i18n/src/main/res/values/strings.xml @@ -349,6 +349,7 @@ <!-- Preferences --> <string name="storage_pref">Storage</string> <string name="storage_sum">Episode auto delete, Import, Export</string> + <string name="statistics_moved">The statistics screen was moved to the subscriptions screen. You can open it from there.</string> <string name="project_pref">Project</string> <string name="synchronization_pref">Synchronization</string> <string name="synchronization_sum">Synchronize with other devices</string> |