From 4078b3475e5140e6f5f9ef924bc8ff8d9e345113 Mon Sep 17 00:00:00 2001 From: ByteHamster Date: Sun, 24 Mar 2024 21:08:06 +0100 Subject: Simplify playback preferences and move to :storage:preferences (#7024) --- .../danoeh/antennapod/core/ClientConfigurator.java | 6 +- .../core/feed/util/PlaybackSpeedUtils.java | 2 +- .../core/preferences/PlaybackPreferences.java | 257 --------------------- .../core/preferences/SleepTimerPreferences.java | 106 --------- .../core/preferences/UsageStatistics.java | 70 ------ .../core/service/QuickSettingsTileService.java | 2 +- .../core/service/playback/PlaybackService.java | 24 +- .../playback/PlaybackServiceTaskManager.java | 2 +- .../danoeh/antennapod/core/storage/DBWriter.java | 4 +- .../antennapod/core/util/PlaybackStatus.java | 2 +- .../core/util/playback/PlaybackController.java | 5 +- .../core/widget/WidgetUpdaterWorker.java | 5 +- .../antennapod/core/feed/LocalFeedUpdaterTest.java | 2 +- .../antennapod/core/storage/DbCleanupTests.java | 2 +- .../antennapod/core/storage/DbTasksTest.java | 2 +- .../antennapod/core/storage/DbWriterTest.java | 2 +- 16 files changed, 30 insertions(+), 463 deletions(-) delete mode 100644 core/src/main/java/de/danoeh/antennapod/core/preferences/PlaybackPreferences.java delete mode 100644 core/src/main/java/de/danoeh/antennapod/core/preferences/SleepTimerPreferences.java delete mode 100644 core/src/main/java/de/danoeh/antennapod/core/preferences/UsageStatistics.java (limited to 'core/src') 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 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; -- cgit v1.2.3