summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorByteHamster <info@bytehamster.com>2022-11-03 23:04:45 +0100
committerByteHamster <info@bytehamster.com>2022-11-03 23:04:48 +0100
commit5b8cee0de0a092e78c01f195b7c7ac0bd95483d3 (patch)
tree63d2db41516be1dd3ff191da372d36654ab5f5cb
parentcd9845ed4c8867c16f30bbcc059573609971b667 (diff)
downloadAntennaPod-5b8cee0de0a092e78c01f195b7c7ac0bd95483d3.zip
Decouple restoring Playable from Preferences and storing position
Breaks dependency cycle
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/preferences/PlaybackPreferences.java47
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackService.java4
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/storage/DBWriter.java3
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/util/playback/PlayableUtils.java67
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/util/playback/PlaybackController.java2
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/widget/WidgetUpdaterWorker.java4
-rw-r--r--model/src/main/java/de/danoeh/antennapod/model/playback/Playable.java4
7 files changed, 56 insertions, 75 deletions
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
index b0321bff6..160b6b774 100644
--- a/core/src/main/java/de/danoeh/antennapod/core/preferences/PlaybackPreferences.java
+++ b/core/src/main/java/de/danoeh/antennapod/core/preferences/PlaybackPreferences.java
@@ -2,9 +2,12 @@ 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.playback.MediaType;
@@ -187,4 +190,48 @@ public class PlaybackPreferences implements SharedPreferences.OnSharedPreference
}
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/service/playback/PlaybackService.java b/core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackService.java
index c1dc5ee2d..4a88e3851 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
@@ -46,6 +46,7 @@ import androidx.media.MediaBrowserServiceCompat;
import androidx.preference.PreferenceManager;
import de.danoeh.antennapod.core.service.QuickSettingsTileService;
+import de.danoeh.antennapod.core.util.playback.PlayableUtils;
import de.danoeh.antennapod.event.playback.BufferUpdateEvent;
import de.danoeh.antennapod.event.playback.PlaybackServiceEvent;
import de.danoeh.antennapod.event.PlayerErrorEvent;
@@ -82,7 +83,6 @@ import de.danoeh.antennapod.core.util.FeedItemUtil;
import de.danoeh.antennapod.core.util.IntentUtils;
import de.danoeh.antennapod.core.util.NetworkUtils;
import de.danoeh.antennapod.core.util.gui.NotificationUtils;
-import de.danoeh.antennapod.core.util.playback.PlayableUtils;
import de.danoeh.antennapod.core.util.playback.PlaybackServiceStarter;
import de.danoeh.antennapod.core.widget.WidgetUpdater;
import de.danoeh.antennapod.model.feed.Feed;
@@ -702,7 +702,7 @@ public class PlaybackService extends MediaBrowserServiceCompat {
}
private void startPlayingFromPreferences() {
- Observable.fromCallable(() -> PlayableUtils.createInstanceFromPreferences(getApplicationContext()))
+ Observable.fromCallable(() -> PlaybackPreferences.createInstanceFromPreferences(getApplicationContext()))
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(
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 ff8c990db..91754e057 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
@@ -42,7 +42,6 @@ import de.danoeh.antennapod.core.util.FeedItemPermutors;
import de.danoeh.antennapod.core.util.IntentUtils;
import de.danoeh.antennapod.core.util.LongList;
import de.danoeh.antennapod.core.util.Permutor;
-import de.danoeh.antennapod.core.util.playback.PlayableUtils;
import de.danoeh.antennapod.model.feed.Feed;
import de.danoeh.antennapod.model.feed.FeedItem;
import de.danoeh.antennapod.model.feed.FeedMedia;
@@ -391,7 +390,7 @@ public class DBWriter {
List<FeedItem> updatedItems = new ArrayList<>();
ItemEnqueuePositionCalculator positionCalculator =
new ItemEnqueuePositionCalculator(UserPreferences.getEnqueueLocation());
- Playable currentlyPlaying = PlayableUtils.createInstanceFromPreferences(context);
+ Playable currentlyPlaying = PlaybackPreferences.createInstanceFromPreferences(context);
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/playback/PlayableUtils.java b/core/src/main/java/de/danoeh/antennapod/core/util/playback/PlayableUtils.java
index 56b46903d..90751cbdb 100644
--- a/core/src/main/java/de/danoeh/antennapod/core/util/playback/PlayableUtils.java
+++ b/core/src/main/java/de/danoeh/antennapod/core/util/playback/PlayableUtils.java
@@ -1,79 +1,14 @@
package de.danoeh.antennapod.core.util.playback;
-import android.content.Context;
-import android.content.SharedPreferences;
-import android.util.Log;
-
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
-import androidx.preference.PreferenceManager;
-
+import de.danoeh.antennapod.core.storage.DBWriter;
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.core.storage.DBReader;
-import de.danoeh.antennapod.core.storage.DBWriter;
import de.danoeh.antennapod.model.playback.Playable;
/**
* Provides utility methods for Playable objects.
*/
public abstract class PlayableUtils {
-
- private static final String TAG = "PlayableUtils";
-
- /**
- * 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 PlayableUtils.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) {
- Playable result;
- // ADD new Playable types here:
- switch (type) {
- case FeedMedia.PLAYABLE_TYPE_FEEDMEDIA:
- result = createFeedMediaInstance(pref);
- break;
- default:
- result = null;
- break;
- }
- if (result == null) {
- Log.e(TAG, "Could not restore Playable object from preferences");
- }
- return result;
- }
-
- 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;
- }
-
/**
* Saves the current position of this object.
*
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 80795a7cd..06757a1e2 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
@@ -341,7 +341,7 @@ public abstract class PlaybackController {
public Playable getMedia() {
if (media == null) {
- media = PlayableUtils.createInstanceFromPreferences(activity);
+ media = PlaybackPreferences.createInstanceFromPreferences(activity);
}
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 5bf924ad9..11a573e1f 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,7 @@ 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.util.playback.PlayableUtils;
+import de.danoeh.antennapod.core.preferences.PlaybackPreferences;
import de.danoeh.antennapod.model.playback.Playable;
import de.danoeh.antennapod.playback.base.PlayerStatus;
@@ -43,7 +43,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 = PlayableUtils.createInstanceFromPreferences(getApplicationContext());
+ final Playable media = PlaybackPreferences.createInstanceFromPreferences(getApplicationContext());
if (media != null) {
WidgetUpdater.updateWidget(getApplicationContext(),
new WidgetUpdater.WidgetState(media, PlayerStatus.STOPPED,
diff --git a/model/src/main/java/de/danoeh/antennapod/model/playback/Playable.java b/model/src/main/java/de/danoeh/antennapod/model/playback/Playable.java
index 7120f76ea..30f37cf60 100644
--- a/model/src/main/java/de/danoeh/antennapod/model/playback/Playable.java
+++ b/model/src/main/java/de/danoeh/antennapod/model/playback/Playable.java
@@ -19,7 +19,7 @@ public interface Playable extends Parcelable, Serializable {
/**
* Save information about the playable in a preference so that it can be
- * restored later via PlayableUtils.createInstanceFromPreferences.
+ * restored later via PlaybackPreferences.createInstanceFromPreferences.
* Implementations must NOT call commit() after they have written the values
* to the preferences file.
*/
@@ -136,7 +136,7 @@ public interface Playable extends Parcelable, Serializable {
/**
* Returns an integer that must be unique among all Playable classes. The
- * return value is later used by PlayableUtils to determine the type of the
+ * return value is later used by PlaybackPreferences to determine the type of the
* Playable object that is restored.
*/
int getPlayableType();