summaryrefslogtreecommitdiff
path: root/core
diff options
context:
space:
mode:
authorByteHamster <ByteHamster@users.noreply.github.com>2024-03-24 21:08:06 +0100
committerGitHub <noreply@github.com>2024-03-24 21:08:06 +0100
commit4078b3475e5140e6f5f9ef924bc8ff8d9e345113 (patch)
tree46c619e1f35649f504af8789ff61d98d2a29e6d0 /core
parent7b390f1c9299d644ad0339e83724e1457c150410 (diff)
downloadAntennaPod-4078b3475e5140e6f5f9ef924bc8ff8d9e345113.zip
Simplify playback preferences and move to :storage:preferences (#7024)
Diffstat (limited to 'core')
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/ClientConfigurator.java6
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/feed/util/PlaybackSpeedUtils.java2
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/preferences/PlaybackPreferences.java257
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/preferences/SleepTimerPreferences.java106
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/preferences/UsageStatistics.java70
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/service/QuickSettingsTileService.java2
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackService.java24
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackServiceTaskManager.java2
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/storage/DBWriter.java4
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/util/PlaybackStatus.java2
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/util/playback/PlaybackController.java5
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/widget/WidgetUpdaterWorker.java5
-rw-r--r--core/src/test/java/de/danoeh/antennapod/core/feed/LocalFeedUpdaterTest.java2
-rw-r--r--core/src/test/java/de/danoeh/antennapod/core/storage/DbCleanupTests.java2
-rw-r--r--core/src/test/java/de/danoeh/antennapod/core/storage/DbTasksTest.java2
-rw-r--r--core/src/test/java/de/danoeh/antennapod/core/storage/DbWriterTest.java2
16 files changed, 30 insertions, 463 deletions
diff --git a/core/src/main/java/de/danoeh/antennapod/core/ClientConfigurator.java b/core/src/main/java/de/danoeh/antennapod/core/ClientConfigurator.java
index 85ba7a3d5..64c9827d5 100644
--- a/core/src/main/java/de/danoeh/antennapod/core/ClientConfigurator.java
+++ b/core/src/main/java/de/danoeh/antennapod/core/ClientConfigurator.java
@@ -3,9 +3,9 @@ package de.danoeh.antennapod.core;
import android.content.Context;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
-import de.danoeh.antennapod.core.preferences.PlaybackPreferences;
-import de.danoeh.antennapod.core.preferences.SleepTimerPreferences;
-import de.danoeh.antennapod.core.preferences.UsageStatistics;
+import de.danoeh.antennapod.storage.preferences.PlaybackPreferences;
+import de.danoeh.antennapod.storage.preferences.SleepTimerPreferences;
+import de.danoeh.antennapod.storage.preferences.UsageStatistics;
import de.danoeh.antennapod.net.common.UserAgentInterceptor;
import de.danoeh.antennapod.storage.preferences.UserPreferences;
import de.danoeh.antennapod.net.common.AntennapodHttpClient;
diff --git a/core/src/main/java/de/danoeh/antennapod/core/feed/util/PlaybackSpeedUtils.java b/core/src/main/java/de/danoeh/antennapod/core/feed/util/PlaybackSpeedUtils.java
index d532d9ba6..6e026c91d 100644
--- a/core/src/main/java/de/danoeh/antennapod/core/feed/util/PlaybackSpeedUtils.java
+++ b/core/src/main/java/de/danoeh/antennapod/core/feed/util/PlaybackSpeedUtils.java
@@ -3,7 +3,7 @@ package de.danoeh.antennapod.core.feed.util;
import de.danoeh.antennapod.model.feed.Feed;
import de.danoeh.antennapod.model.feed.FeedMedia;
import de.danoeh.antennapod.model.feed.FeedPreferences;
-import de.danoeh.antennapod.core.preferences.PlaybackPreferences;
+import de.danoeh.antennapod.storage.preferences.PlaybackPreferences;
import de.danoeh.antennapod.storage.preferences.UserPreferences;
import de.danoeh.antennapod.model.playback.Playable;
diff --git a/core/src/main/java/de/danoeh/antennapod/core/preferences/PlaybackPreferences.java b/core/src/main/java/de/danoeh/antennapod/core/preferences/PlaybackPreferences.java
deleted file mode 100644
index d6f6cdb43..000000000
--- a/core/src/main/java/de/danoeh/antennapod/core/preferences/PlaybackPreferences.java
+++ /dev/null
@@ -1,257 +0,0 @@
-package de.danoeh.antennapod.core.preferences;
-
-import android.content.Context;
-import android.content.SharedPreferences;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
-import androidx.preference.PreferenceManager;
-
-import android.util.Log;
-import de.danoeh.antennapod.core.storage.DBReader;
-import de.danoeh.antennapod.event.PlayerStatusEvent;
-import de.danoeh.antennapod.model.feed.FeedMedia;
-import de.danoeh.antennapod.model.feed.FeedPreferences;
-import de.danoeh.antennapod.model.playback.MediaType;
-import de.danoeh.antennapod.model.playback.Playable;
-import de.danoeh.antennapod.playback.base.PlayerStatus;
-import org.greenrobot.eventbus.EventBus;
-
-import static de.danoeh.antennapod.model.feed.FeedPreferences.SPEED_USE_GLOBAL;
-
-/**
- * Provides access to preferences set by the playback service. A private
- * instance of this class must first be instantiated via createInstance() or
- * otherwise every public method will throw an Exception when called.
- */
-public class PlaybackPreferences implements SharedPreferences.OnSharedPreferenceChangeListener {
-
- private static final String TAG = "PlaybackPreferences";
-
- /**
- * Contains the feed id of the currently playing item if it is a FeedMedia
- * object.
- */
- private static final String PREF_CURRENTLY_PLAYING_FEED_ID = "de.danoeh.antennapod.preferences.lastPlayedFeedId";
-
- /**
- * Contains the id of the currently playing FeedMedia object or
- * NO_MEDIA_PLAYING if the currently playing media is no FeedMedia object.
- */
- private static final String PREF_CURRENTLY_PLAYING_FEEDMEDIA_ID
- = "de.danoeh.antennapod.preferences.lastPlayedFeedMediaId";
-
- /**
- * Type of the media object that is currently being played. This preference
- * is set to NO_MEDIA_PLAYING after playback has been completed and is set
- * as soon as the 'play' button is pressed.
- */
- private static final String PREF_CURRENTLY_PLAYING_MEDIA_TYPE
- = "de.danoeh.antennapod.preferences.currentlyPlayingMedia";
-
- /**
- * True if last played media was a video.
- */
- private static final String PREF_CURRENT_EPISODE_IS_VIDEO = "de.danoeh.antennapod.preferences.lastIsVideo";
-
- /**
- * The current player status as int.
- */
- private static final String PREF_CURRENT_PLAYER_STATUS = "de.danoeh.antennapod.preferences.currentPlayerStatus";
-
- /**
- * A temporary playback speed which overrides the per-feed playback speed for the currently playing
- * media. Considered unset if set to SPEED_USE_GLOBAL;
- */
- private static final String PREF_CURRENTLY_PLAYING_TEMPORARY_PLAYBACK_SPEED
- = "de.danoeh.antennapod.preferences.temporaryPlaybackSpeed";
-
- /**
- * A temporary skip silence preference which overrides the per-feed skip silence for the currently playing
- * media. Considered unset if set to null;
- */
- private static final String PREF_CURRENTLY_PLAYING_TEMPORARY_SKIP_SILENCE
- = "de.danoeh.antennapod.preferences.temporarySkipSilence";
-
- /**
- * Value of PREF_CURRENTLY_PLAYING_MEDIA if no media is playing.
- */
- public static final long NO_MEDIA_PLAYING = -1;
-
- /**
- * Value of PREF_CURRENT_PLAYER_STATUS if media player status is playing.
- */
- public static final int PLAYER_STATUS_PLAYING = 1;
-
- /**
- * Value of PREF_CURRENT_PLAYER_STATUS if media player status is paused.
- */
- public static final int PLAYER_STATUS_PAUSED = 2;
-
- /**
- * Value of PREF_CURRENT_PLAYER_STATUS if media player status is neither playing nor paused.
- */
- public static final int PLAYER_STATUS_OTHER = 3;
-
- private static PlaybackPreferences instance;
- private static SharedPreferences prefs;
-
- private PlaybackPreferences() {
- }
-
- public static void init(Context context) {
- instance = new PlaybackPreferences();
- prefs = PreferenceManager.getDefaultSharedPreferences(context);
- prefs.registerOnSharedPreferenceChangeListener(instance);
- }
-
- public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
- if (PREF_CURRENT_PLAYER_STATUS.equals(key)) {
- EventBus.getDefault().post(new PlayerStatusEvent());
- }
- }
-
- public static long getCurrentlyPlayingMediaType() {
- return prefs.getLong(PREF_CURRENTLY_PLAYING_MEDIA_TYPE, NO_MEDIA_PLAYING);
- }
-
- public static long getCurrentlyPlayingFeedMediaId() {
- return prefs.getLong(PREF_CURRENTLY_PLAYING_FEEDMEDIA_ID, NO_MEDIA_PLAYING);
- }
-
- public static boolean getCurrentEpisodeIsVideo() {
- return prefs.getBoolean(PREF_CURRENT_EPISODE_IS_VIDEO, false);
- }
-
- public static int getCurrentPlayerStatus() {
- return prefs.getInt(PREF_CURRENT_PLAYER_STATUS, PLAYER_STATUS_OTHER);
- }
-
- public static float getCurrentlyPlayingTemporaryPlaybackSpeed() {
- return prefs.getFloat(PREF_CURRENTLY_PLAYING_TEMPORARY_PLAYBACK_SPEED, SPEED_USE_GLOBAL);
- }
-
- public static FeedPreferences.SkipSilence getCurrentlyPlayingTemporarySkipSilence() {
- return FeedPreferences.SkipSilence.fromCode(prefs.getInt(
- PREF_CURRENTLY_PLAYING_TEMPORARY_SKIP_SILENCE, FeedPreferences.SkipSilence.GLOBAL.code));
- }
-
- public static void writeNoMediaPlaying() {
- SharedPreferences.Editor editor = prefs.edit();
- editor.putLong(PREF_CURRENTLY_PLAYING_MEDIA_TYPE, NO_MEDIA_PLAYING);
- editor.putLong(PREF_CURRENTLY_PLAYING_FEED_ID, NO_MEDIA_PLAYING);
- editor.putLong(PREF_CURRENTLY_PLAYING_FEEDMEDIA_ID, NO_MEDIA_PLAYING);
- editor.putInt(PREF_CURRENT_PLAYER_STATUS, PLAYER_STATUS_OTHER);
- editor.apply();
- }
-
- public static void writeMediaPlaying(Playable playable, PlayerStatus playerStatus) {
- Log.d(TAG, "Writing playback preferences");
- SharedPreferences.Editor editor = prefs.edit();
-
- if (playable == null) {
- writeNoMediaPlaying();
- } else {
- editor.putLong(PREF_CURRENTLY_PLAYING_MEDIA_TYPE, playable.getPlayableType());
- editor.putBoolean(PREF_CURRENT_EPISODE_IS_VIDEO, playable.getMediaType() == MediaType.VIDEO);
- if (playable instanceof FeedMedia) {
- FeedMedia feedMedia = (FeedMedia) playable;
- editor.putLong(PREF_CURRENTLY_PLAYING_FEED_ID, feedMedia.getItem().getFeed().getId());
- editor.putLong(PREF_CURRENTLY_PLAYING_FEEDMEDIA_ID, feedMedia.getId());
- } else {
- editor.putLong(PREF_CURRENTLY_PLAYING_FEED_ID, NO_MEDIA_PLAYING);
- editor.putLong(PREF_CURRENTLY_PLAYING_FEEDMEDIA_ID, NO_MEDIA_PLAYING);
- }
- playable.writeToPreferences(editor);
- }
- editor.putInt(PREF_CURRENT_PLAYER_STATUS, getCurrentPlayerStatusAsInt(playerStatus));
-
- editor.apply();
- }
-
- public static void writePlayerStatus(PlayerStatus playerStatus) {
- Log.d(TAG, "Writing player status playback preferences");
-
- SharedPreferences.Editor editor = prefs.edit();
- editor.putInt(PREF_CURRENT_PLAYER_STATUS, getCurrentPlayerStatusAsInt(playerStatus));
- editor.apply();
- }
-
- public static void setCurrentlyPlayingTemporaryPlaybackSpeed(float speed) {
- SharedPreferences.Editor editor = prefs.edit();
- editor.putFloat(PREF_CURRENTLY_PLAYING_TEMPORARY_PLAYBACK_SPEED, speed);
- editor.apply();
- }
-
- public static void setCurrentlyPlayingTemporarySkipSilence(boolean skipSilence) {
- SharedPreferences.Editor editor = prefs.edit();
- editor.putInt(PREF_CURRENTLY_PLAYING_TEMPORARY_SKIP_SILENCE, skipSilence
- ? FeedPreferences.SkipSilence.AGGRESSIVE.code : FeedPreferences.SkipSilence.OFF.code);
- editor.apply();
- }
-
- public static void clearCurrentlyPlayingTemporaryPlaybackSettings() {
- SharedPreferences.Editor editor = prefs.edit();
- editor.remove(PREF_CURRENTLY_PLAYING_TEMPORARY_PLAYBACK_SPEED);
- editor.remove(PREF_CURRENTLY_PLAYING_TEMPORARY_SKIP_SILENCE);
- editor.apply();
- }
-
- private static int getCurrentPlayerStatusAsInt(PlayerStatus playerStatus) {
- int playerStatusAsInt;
- switch (playerStatus) {
- case PLAYING:
- playerStatusAsInt = PLAYER_STATUS_PLAYING;
- break;
- case PAUSED:
- playerStatusAsInt = PLAYER_STATUS_PAUSED;
- break;
- default:
- playerStatusAsInt = PLAYER_STATUS_OTHER;
- }
- return playerStatusAsInt;
- }
-
- /**
- * Restores a playable object from a sharedPreferences file. This method might load data from the database,
- * depending on the type of playable that was restored.
- *
- * @return The restored Playable object
- */
- @Nullable
- public static Playable createInstanceFromPreferences(@NonNull Context context) {
- long currentlyPlayingMedia = PlaybackPreferences.getCurrentlyPlayingMediaType();
- if (currentlyPlayingMedia != PlaybackPreferences.NO_MEDIA_PLAYING) {
- SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context.getApplicationContext());
- return createInstanceFromPreferences((int) currentlyPlayingMedia, prefs);
- }
- return null;
- }
-
- /**
- * Restores a playable object from a sharedPreferences file. This method might load data from the database,
- * depending on the type of playable that was restored.
- *
- * @param type An integer that represents the type of the Playable object
- * that is restored.
- * @param pref The SharedPreferences file from which the Playable object
- * is restored
- * @return The restored Playable object
- */
- private static Playable createInstanceFromPreferences(int type, SharedPreferences pref) {
- if (type == FeedMedia.PLAYABLE_TYPE_FEEDMEDIA) {
- return createFeedMediaInstance(pref);
- } else {
- Log.e(TAG, "Could not restore Playable object from preferences");
- return null;
- }
- }
-
- private static Playable createFeedMediaInstance(SharedPreferences pref) {
- Playable result = null;
- long mediaId = pref.getLong(FeedMedia.PREF_MEDIA_ID, -1);
- if (mediaId != -1) {
- result = DBReader.getFeedMedia(mediaId);
- }
- return result;
- }
-}
diff --git a/core/src/main/java/de/danoeh/antennapod/core/preferences/SleepTimerPreferences.java b/core/src/main/java/de/danoeh/antennapod/core/preferences/SleepTimerPreferences.java
deleted file mode 100644
index 96ffe5cb6..000000000
--- a/core/src/main/java/de/danoeh/antennapod/core/preferences/SleepTimerPreferences.java
+++ /dev/null
@@ -1,106 +0,0 @@
-package de.danoeh.antennapod.core.preferences;
-
-import android.content.Context;
-import android.content.SharedPreferences;
-import android.util.Log;
-
-import androidx.annotation.NonNull;
-
-import java.util.concurrent.TimeUnit;
-
-public class SleepTimerPreferences {
-
- private static final String TAG = "SleepTimerPreferences";
-
- public static final String PREF_NAME = "SleepTimerDialog";
- private static final String PREF_VALUE = "LastValue";
-
- private static final String PREF_VIBRATE = "Vibrate";
- private static final String PREF_SHAKE_TO_RESET = "ShakeToReset";
- private static final String PREF_AUTO_ENABLE = "AutoEnable";
- private static final String PREF_AUTO_ENABLE_FROM = "AutoEnableFrom";
- private static final String PREF_AUTO_ENABLE_TO = "AutoEnableTo";
-
- private static final String DEFAULT_LAST_TIMER = "15";
- private static final int DEFAULT_AUTO_ENABLE_FROM = 22;
- private static final int DEFAULT_AUTO_ENABLE_TO = 6;
-
- private static SharedPreferences prefs;
-
- /**
- * Sets up the UserPreferences class.
- *
- * @throws IllegalArgumentException if context is null
- */
- public static void init(@NonNull Context context) {
- Log.d(TAG, "Creating new instance of SleepTimerPreferences");
- SleepTimerPreferences.prefs = context.getSharedPreferences(PREF_NAME, Context.MODE_PRIVATE);
- }
-
- public static void setLastTimer(String value) {
- prefs.edit().putString(PREF_VALUE, value).apply();
- }
-
- public static String lastTimerValue() {
- return prefs.getString(PREF_VALUE, DEFAULT_LAST_TIMER);
- }
-
- public static long timerMillis() {
- long value = Long.parseLong(lastTimerValue());
- return TimeUnit.MINUTES.toMillis(value);
- }
-
- public static void setVibrate(boolean vibrate) {
- prefs.edit().putBoolean(PREF_VIBRATE, vibrate).apply();
- }
-
- public static boolean vibrate() {
- return prefs.getBoolean(PREF_VIBRATE, false);
- }
-
- public static void setShakeToReset(boolean shakeToReset) {
- prefs.edit().putBoolean(PREF_SHAKE_TO_RESET, shakeToReset).apply();
- }
-
- public static boolean shakeToReset() {
- return prefs.getBoolean(PREF_SHAKE_TO_RESET, true);
- }
-
- public static void setAutoEnable(boolean autoEnable) {
- prefs.edit().putBoolean(PREF_AUTO_ENABLE, autoEnable).apply();
- }
-
- public static boolean autoEnable() {
- return prefs.getBoolean(PREF_AUTO_ENABLE, false);
- }
-
- public static void setAutoEnableFrom(int hourOfDay) {
- prefs.edit().putInt(PREF_AUTO_ENABLE_FROM, hourOfDay).apply();
- }
-
- public static int autoEnableFrom() {
- return prefs.getInt(PREF_AUTO_ENABLE_FROM, DEFAULT_AUTO_ENABLE_FROM);
- }
-
- public static void setAutoEnableTo(int hourOfDay) {
- prefs.edit().putInt(PREF_AUTO_ENABLE_TO, hourOfDay).apply();
- }
-
- public static int autoEnableTo() {
- return prefs.getInt(PREF_AUTO_ENABLE_TO, DEFAULT_AUTO_ENABLE_TO);
- }
-
- public static boolean isInTimeRange(int from, int to, int current) {
- // Range covers one day
- if (from < to) {
- return from <= current && current < to;
- }
-
- // Range covers two days
- if (from <= current) {
- return true;
- }
-
- return current < to;
- }
-}
diff --git a/core/src/main/java/de/danoeh/antennapod/core/preferences/UsageStatistics.java b/core/src/main/java/de/danoeh/antennapod/core/preferences/UsageStatistics.java
deleted file mode 100644
index 9835f9894..000000000
--- a/core/src/main/java/de/danoeh/antennapod/core/preferences/UsageStatistics.java
+++ /dev/null
@@ -1,70 +0,0 @@
-package de.danoeh.antennapod.core.preferences;
-
-import android.content.Context;
-import android.content.SharedPreferences;
-import androidx.annotation.NonNull;
-
-/**
- * Collects statistics about the app usage. The statistics are used to allow on-demand configuration:
- * "Looks like you stream a lot. Do you want to toggle the 'Prefer streaming' setting?".
- * The data is only stored locally on the device. It is NOT used for analytics/tracking.
- * A private instance of this class must first be instantiated via
- * init() or otherwise every public method will throw an Exception
- * when called.
- */
-public class UsageStatistics {
- private UsageStatistics() {
-
- }
-
- private static final String PREF_DB_NAME = "UsageStatistics";
- private static final float MOVING_AVERAGE_WEIGHT = 0.8f;
- private static final float MOVING_AVERAGE_BIAS_THRESHOLD = 0.1f;
- private static final String SUFFIX_HIDDEN = "_hidden";
- private static SharedPreferences prefs;
-
- public static final StatsAction ACTION_STREAM = new StatsAction("downloadVsStream", 0);
- public static final StatsAction ACTION_DOWNLOAD = new StatsAction("downloadVsStream", 1);
-
- /**
- * Sets up the UsageStatistics class.
- *
- * @throws IllegalArgumentException if context is null
- */
- public static void init(@NonNull Context context) {
- prefs = context.getSharedPreferences(PREF_DB_NAME, Context.MODE_PRIVATE);
- }
-
- public static void logAction(StatsAction action) {
- int numExecutions = prefs.getInt(action.type + action.value, 0);
- float movingAverage = prefs.getFloat(action.type, 0.5f);
- prefs.edit()
- .putInt(action.type + action.value, numExecutions + 1)
- .putFloat(action.type, MOVING_AVERAGE_WEIGHT * movingAverage
- + (1 - MOVING_AVERAGE_WEIGHT) * action.value)
- .apply();
- }
-
- public static boolean hasSignificantBiasTo(StatsAction action) {
- if (prefs.getBoolean(action.type + SUFFIX_HIDDEN, false)) {
- return false;
- } else {
- final float movingAverage = prefs.getFloat(action.type, 0.5f);
- return Math.abs(action.value - movingAverage) < MOVING_AVERAGE_BIAS_THRESHOLD;
- }
- }
-
- public static void doNotAskAgain(StatsAction action) {
- prefs.edit().putBoolean(action.type + SUFFIX_HIDDEN, true).apply();
- }
-
- public static final class StatsAction {
- public final String type;
- public final int value;
-
- public StatsAction(String type, int value) {
- this.type = type;
- this.value = value;
- }
- }
-}
diff --git a/core/src/main/java/de/danoeh/antennapod/core/service/QuickSettingsTileService.java b/core/src/main/java/de/danoeh/antennapod/core/service/QuickSettingsTileService.java
index ee593aa06..f5f096329 100644
--- a/core/src/main/java/de/danoeh/antennapod/core/service/QuickSettingsTileService.java
+++ b/core/src/main/java/de/danoeh/antennapod/core/service/QuickSettingsTileService.java
@@ -11,7 +11,7 @@ import android.view.KeyEvent;
import androidx.annotation.RequiresApi;
-import de.danoeh.antennapod.core.preferences.PlaybackPreferences;
+import de.danoeh.antennapod.storage.preferences.PlaybackPreferences;
import de.danoeh.antennapod.core.service.playback.PlaybackService;
import de.danoeh.antennapod.ui.appstartintent.MediaButtonStarter;
diff --git a/core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackService.java b/core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackService.java
index 195f6b5a4..fc7ccd615 100644
--- a/core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackService.java
+++ b/core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackService.java
@@ -50,6 +50,7 @@ import androidx.core.app.NotificationManagerCompat;
import androidx.core.content.ContextCompat;
import androidx.media.MediaBrowserServiceCompat;
+import de.danoeh.antennapod.event.PlayerStatusEvent;
import de.danoeh.antennapod.ui.notifications.NotificationUtils;
import org.greenrobot.eventbus.EventBus;
import org.greenrobot.eventbus.Subscribe;
@@ -63,8 +64,8 @@ import java.util.List;
import java.util.concurrent.TimeUnit;
import de.danoeh.antennapod.core.R;
-import de.danoeh.antennapod.core.preferences.PlaybackPreferences;
-import de.danoeh.antennapod.core.preferences.SleepTimerPreferences;
+import de.danoeh.antennapod.storage.preferences.PlaybackPreferences;
+import de.danoeh.antennapod.storage.preferences.SleepTimerPreferences;
import de.danoeh.antennapod.core.receiver.MediaButtonReceiver;
import de.danoeh.antennapod.core.service.QuickSettingsTileService;
import de.danoeh.antennapod.core.service.playback.PlaybackServiceTaskManager.SleepTimer;
@@ -452,9 +453,9 @@ public class PlaybackService extends MediaBrowserServiceCompat {
Feed feed = DBReader.getFeed(feedId);
feedItems = DBReader.getFeedItemList(feed, FeedItemFilter.unfiltered(), feed.getSortOrder());
} else if (parentId.equals(getString(R.string.current_playing_episode))) {
- Playable playable = PlaybackPreferences.createInstanceFromPreferences(this);
- if (playable instanceof FeedMedia) {
- feedItems = Collections.singletonList(((FeedMedia) playable).getItem());
+ FeedMedia playable = DBReader.getFeedMedia(PlaybackPreferences.getCurrentlyPlayingFeedMediaId());
+ if (playable != null) {
+ feedItems = Collections.singletonList(playable.getItem());
} else {
return null;
}
@@ -734,7 +735,7 @@ public class PlaybackService extends MediaBrowserServiceCompat {
}
private void startPlayingFromPreferences() {
- Observable.fromCallable(() -> PlaybackPreferences.createInstanceFromPreferences(getApplicationContext()))
+ Observable.fromCallable(() -> DBReader.getFeedMedia(PlaybackPreferences.getCurrentlyPlayingFeedMediaId()))
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(
@@ -818,15 +819,13 @@ public class PlaybackService extends MediaBrowserServiceCompat {
switch (newInfo.playerStatus) {
case INITIALIZED:
if (mediaPlayer.getPSMPInfo().playable != null) {
- PlaybackPreferences.writeMediaPlaying(mediaPlayer.getPSMPInfo().playable,
- mediaPlayer.getPSMPInfo().playerStatus);
+ PlaybackPreferences.writeMediaPlaying(mediaPlayer.getPSMPInfo().playable);
}
updateNotificationAndMediaSession(newInfo.playable);
break;
case PREPARED:
if (mediaPlayer.getPSMPInfo().playable != null) {
- PlaybackPreferences.writeMediaPlaying(mediaPlayer.getPSMPInfo().playable,
- mediaPlayer.getPSMPInfo().playerStatus);
+ PlaybackPreferences.writeMediaPlaying(mediaPlayer.getPSMPInfo().playable);
}
taskManager.startChapterLoader(newInfo.playable);
break;
@@ -836,14 +835,12 @@ public class PlaybackService extends MediaBrowserServiceCompat {
stateManager.stopForeground(!UserPreferences.isPersistNotify());
}
cancelPositionObserver();
- PlaybackPreferences.writePlayerStatus(mediaPlayer.getPlayerStatus());
break;
case STOPPED:
//writePlaybackPreferencesNoMediaPlaying();
//stopService();
break;
case PLAYING:
- PlaybackPreferences.writePlayerStatus(mediaPlayer.getPlayerStatus());
saveCurrentPosition(true, null, Playable.INVALID_TIME);
recreateMediaSessionIfNeeded();
updateNotificationAndMediaSession(newInfo.playable);
@@ -886,6 +883,7 @@ public class PlaybackService extends MediaBrowserServiceCompat {
bluetoothNotifyChange(newInfo, AVRCP_ACTION_PLAYER_STATUS_CHANGED);
bluetoothNotifyChange(newInfo, AVRCP_ACTION_META_CHANGED);
taskManager.requestWidgetUpdate();
+ EventBus.getDefault().post(new PlayerStatusEvent());
}
@Override
@@ -1034,7 +1032,7 @@ public class PlaybackService extends MediaBrowserServiceCompat {
if (!UserPreferences.isFollowQueue()) {
Log.d(TAG, "getNextInQueue(), but follow queue is not enabled.");
- PlaybackPreferences.writeMediaPlaying(nextItem.getMedia(), PlayerStatus.STOPPED);
+ PlaybackPreferences.writeMediaPlaying(nextItem.getMedia());
updateNotificationAndMediaSession(nextItem.getMedia());
return null;
}
diff --git a/core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackServiceTaskManager.java b/core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackServiceTaskManager.java
index 3d69dbdbc..c86d4a784 100644
--- a/core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackServiceTaskManager.java
+++ b/core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackServiceTaskManager.java
@@ -8,7 +8,7 @@ import androidx.annotation.NonNull;
import android.util.Log;
import de.danoeh.antennapod.event.playback.SleepTimerUpdatedEvent;
-import de.danoeh.antennapod.core.preferences.SleepTimerPreferences;
+import de.danoeh.antennapod.storage.preferences.SleepTimerPreferences;
import de.danoeh.antennapod.core.util.ChapterUtils;
import de.danoeh.antennapod.core.widget.WidgetUpdater;
import io.reactivex.disposables.Disposable;
diff --git a/core/src/main/java/de/danoeh/antennapod/core/storage/DBWriter.java b/core/src/main/java/de/danoeh/antennapod/core/storage/DBWriter.java
index ae14afc69..389f2bf5a 100644
--- a/core/src/main/java/de/danoeh/antennapod/core/storage/DBWriter.java
+++ b/core/src/main/java/de/danoeh/antennapod/core/storage/DBWriter.java
@@ -40,7 +40,7 @@ import de.danoeh.antennapod.event.playback.PlaybackHistoryEvent;
import de.danoeh.antennapod.event.QueueEvent;
import de.danoeh.antennapod.event.UnreadItemsUpdateEvent;
import de.danoeh.antennapod.core.feed.FeedEvent;
-import de.danoeh.antennapod.core.preferences.PlaybackPreferences;
+import de.danoeh.antennapod.storage.preferences.PlaybackPreferences;
import de.danoeh.antennapod.storage.preferences.UserPreferences;
import de.danoeh.antennapod.model.download.DownloadResult;
import de.danoeh.antennapod.core.sync.queue.SynchronizationQueueSink;
@@ -427,7 +427,7 @@ public class DBWriter {
List<FeedItem> updatedItems = new ArrayList<>();
ItemEnqueuePositionCalculator positionCalculator =
new ItemEnqueuePositionCalculator(UserPreferences.getEnqueueLocation());
- Playable currentlyPlaying = PlaybackPreferences.createInstanceFromPreferences(context);
+ Playable currentlyPlaying = DBReader.getFeedMedia(PlaybackPreferences.getCurrentlyPlayingFeedMediaId());
int insertPosition = positionCalculator.calcPosition(queue, currentlyPlaying);
for (long itemId : itemIds) {
if (!itemListContains(queue, itemId)) {
diff --git a/core/src/main/java/de/danoeh/antennapod/core/util/PlaybackStatus.java b/core/src/main/java/de/danoeh/antennapod/core/util/PlaybackStatus.java
index 3c07d325b..6fb7c487b 100644
--- a/core/src/main/java/de/danoeh/antennapod/core/util/PlaybackStatus.java
+++ b/core/src/main/java/de/danoeh/antennapod/core/util/PlaybackStatus.java
@@ -1,6 +1,6 @@
package de.danoeh.antennapod.core.util;
-import de.danoeh.antennapod.core.preferences.PlaybackPreferences;
+import de.danoeh.antennapod.storage.preferences.PlaybackPreferences;
import de.danoeh.antennapod.core.service.playback.PlaybackService;
import de.danoeh.antennapod.model.feed.FeedMedia;
diff --git a/core/src/main/java/de/danoeh/antennapod/core/util/playback/PlaybackController.java b/core/src/main/java/de/danoeh/antennapod/core/util/playback/PlaybackController.java
index f17bd7e31..807c869f9 100644
--- a/core/src/main/java/de/danoeh/antennapod/core/util/playback/PlaybackController.java
+++ b/core/src/main/java/de/danoeh/antennapod/core/util/playback/PlaybackController.java
@@ -13,6 +13,7 @@ import android.util.Pair;
import android.view.SurfaceHolder;
import androidx.annotation.NonNull;
import de.danoeh.antennapod.core.service.playback.PlaybackServiceInterface;
+import de.danoeh.antennapod.core.storage.DBReader;
import de.danoeh.antennapod.core.storage.DBWriter;
import de.danoeh.antennapod.event.playback.PlaybackPositionEvent;
import de.danoeh.antennapod.model.feed.FeedMedia;
@@ -21,7 +22,7 @@ import de.danoeh.antennapod.event.playback.SpeedChangedEvent;
import de.danoeh.antennapod.model.feed.FeedPreferences;
import de.danoeh.antennapod.model.playback.MediaType;
import de.danoeh.antennapod.core.feed.util.PlaybackSpeedUtils;
-import de.danoeh.antennapod.core.preferences.PlaybackPreferences;
+import de.danoeh.antennapod.storage.preferences.PlaybackPreferences;
import de.danoeh.antennapod.core.service.playback.PlaybackService;
import de.danoeh.antennapod.model.playback.Playable;
import de.danoeh.antennapod.playback.base.PlaybackServiceMediaPlayer;
@@ -341,7 +342,7 @@ public abstract class PlaybackController {
public Playable getMedia() {
if (media == null) {
- media = PlaybackPreferences.createInstanceFromPreferences(activity);
+ media = DBReader.getFeedMedia(PlaybackPreferences.getCurrentlyPlayingFeedMediaId());
}
return media;
}
diff --git a/core/src/main/java/de/danoeh/antennapod/core/widget/WidgetUpdaterWorker.java b/core/src/main/java/de/danoeh/antennapod/core/widget/WidgetUpdaterWorker.java
index 11a573e1f..ddca49988 100644
--- a/core/src/main/java/de/danoeh/antennapod/core/widget/WidgetUpdaterWorker.java
+++ b/core/src/main/java/de/danoeh/antennapod/core/widget/WidgetUpdaterWorker.java
@@ -9,7 +9,8 @@ import androidx.work.WorkManager;
import androidx.work.Worker;
import androidx.work.WorkerParameters;
import de.danoeh.antennapod.core.feed.util.PlaybackSpeedUtils;
-import de.danoeh.antennapod.core.preferences.PlaybackPreferences;
+import de.danoeh.antennapod.storage.preferences.PlaybackPreferences;
+import de.danoeh.antennapod.core.storage.DBReader;
import de.danoeh.antennapod.model.playback.Playable;
import de.danoeh.antennapod.playback.base.PlayerStatus;
@@ -43,7 +44,7 @@ public class WidgetUpdaterWorker extends Worker {
* Loads the current media from the database and updates the widget in a background job.
*/
private void updateWidget() {
- final Playable media = PlaybackPreferences.createInstanceFromPreferences(getApplicationContext());
+ final Playable media = DBReader.getFeedMedia(PlaybackPreferences.getCurrentlyPlayingFeedMediaId());
if (media != null) {
WidgetUpdater.updateWidget(getApplicationContext(),
new WidgetUpdater.WidgetState(media, PlayerStatus.STOPPED,
diff --git a/core/src/test/java/de/danoeh/antennapod/core/feed/LocalFeedUpdaterTest.java b/core/src/test/java/de/danoeh/antennapod/core/feed/LocalFeedUpdaterTest.java
index d23ec8286..7bdf8aa10 100644
--- a/core/src/test/java/de/danoeh/antennapod/core/feed/LocalFeedUpdaterTest.java
+++ b/core/src/test/java/de/danoeh/antennapod/core/feed/LocalFeedUpdaterTest.java
@@ -9,7 +9,7 @@ import android.webkit.MimeTypeMap;
import androidx.annotation.NonNull;
import androidx.test.platform.app.InstrumentationRegistry;
-import de.danoeh.antennapod.core.preferences.PlaybackPreferences;
+import de.danoeh.antennapod.storage.preferences.PlaybackPreferences;
import de.danoeh.antennapod.net.download.serviceinterface.DownloadServiceInterface;
import de.danoeh.antennapod.net.download.serviceinterface.DownloadServiceInterfaceStub;
import de.danoeh.antennapod.core.util.FastDocumentFile;
diff --git a/core/src/test/java/de/danoeh/antennapod/core/storage/DbCleanupTests.java b/core/src/test/java/de/danoeh/antennapod/core/storage/DbCleanupTests.java
index 0369ad3b1..5ff09287d 100644
--- a/core/src/test/java/de/danoeh/antennapod/core/storage/DbCleanupTests.java
+++ b/core/src/test/java/de/danoeh/antennapod/core/storage/DbCleanupTests.java
@@ -18,7 +18,7 @@ import de.danoeh.antennapod.core.ClientConfig;
import de.danoeh.antennapod.model.feed.Feed;
import de.danoeh.antennapod.model.feed.FeedItem;
import de.danoeh.antennapod.model.feed.FeedMedia;
-import de.danoeh.antennapod.core.preferences.PlaybackPreferences;
+import de.danoeh.antennapod.storage.preferences.PlaybackPreferences;
import de.danoeh.antennapod.storage.preferences.UserPreferences;
import de.danoeh.antennapod.storage.database.PodDBAdapter;
diff --git a/core/src/test/java/de/danoeh/antennapod/core/storage/DbTasksTest.java b/core/src/test/java/de/danoeh/antennapod/core/storage/DbTasksTest.java
index 3eed90ea8..548e74e3a 100644
--- a/core/src/test/java/de/danoeh/antennapod/core/storage/DbTasksTest.java
+++ b/core/src/test/java/de/danoeh/antennapod/core/storage/DbTasksTest.java
@@ -22,7 +22,7 @@ import de.danoeh.antennapod.core.ClientConfig;
import de.danoeh.antennapod.model.feed.Feed;
import de.danoeh.antennapod.model.feed.FeedItem;
import de.danoeh.antennapod.model.feed.FeedMedia;
-import de.danoeh.antennapod.core.preferences.PlaybackPreferences;
+import de.danoeh.antennapod.storage.preferences.PlaybackPreferences;
import de.danoeh.antennapod.storage.preferences.UserPreferences;
import static java.util.Collections.singletonList;
diff --git a/core/src/test/java/de/danoeh/antennapod/core/storage/DbWriterTest.java b/core/src/test/java/de/danoeh/antennapod/core/storage/DbWriterTest.java
index 8e4cae855..76333d9b2 100644
--- a/core/src/test/java/de/danoeh/antennapod/core/storage/DbWriterTest.java
+++ b/core/src/test/java/de/danoeh/antennapod/core/storage/DbWriterTest.java
@@ -33,7 +33,7 @@ import de.danoeh.antennapod.core.ClientConfig;
import de.danoeh.antennapod.model.feed.Feed;
import de.danoeh.antennapod.model.feed.FeedItem;
import de.danoeh.antennapod.model.feed.FeedMedia;
-import de.danoeh.antennapod.core.preferences.PlaybackPreferences;
+import de.danoeh.antennapod.storage.preferences.PlaybackPreferences;
import de.danoeh.antennapod.storage.preferences.UserPreferences;
import de.danoeh.antennapod.core.util.FeedItemUtil;