Changed from db backed item speed to preferences backed global value
This commit is contained in:
parent
97aa360611
commit
6a37d33b97
@ -11,8 +11,9 @@ import java.text.DecimalFormatSymbols;
|
|||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
import java.util.concurrent.atomic.AtomicBoolean;
|
import java.util.concurrent.atomic.AtomicBoolean;
|
||||||
|
|
||||||
import de.danoeh.antennapod.core.feed.FeedMedia;
|
|
||||||
import de.danoeh.antennapod.core.feed.MediaType;
|
import de.danoeh.antennapod.core.feed.MediaType;
|
||||||
|
import de.danoeh.antennapod.core.preferences.PlaybackPreferences;
|
||||||
|
import de.danoeh.antennapod.core.preferences.PlaybackSpeedHelper;
|
||||||
import de.danoeh.antennapod.core.preferences.UserPreferences;
|
import de.danoeh.antennapod.core.preferences.UserPreferences;
|
||||||
import de.danoeh.antennapod.core.service.playback.PlaybackService;
|
import de.danoeh.antennapod.core.service.playback.PlaybackService;
|
||||||
import de.danoeh.antennapod.core.util.playback.Playable;
|
import de.danoeh.antennapod.core.util.playback.Playable;
|
||||||
@ -83,7 +84,7 @@ public class AudioplayerActivity extends MediaplayerInfoActivity {
|
|||||||
}
|
}
|
||||||
float speed = 1.0f;
|
float speed = 1.0f;
|
||||||
if(controller.canSetPlaybackSpeed()) {
|
if(controller.canSetPlaybackSpeed()) {
|
||||||
speed = UserPreferences.getPlaybackSpeed(controller.getMedia());
|
speed = PlaybackSpeedHelper.getCurrentPlaybackSpeed(controller.getMedia());
|
||||||
}
|
}
|
||||||
String speedStr = new DecimalFormat("0.00").format(speed);
|
String speedStr = new DecimalFormat("0.00").format(speed);
|
||||||
txtvPlaybackSpeed.setText(speedStr);
|
txtvPlaybackSpeed.setText(speedStr);
|
||||||
@ -132,7 +133,11 @@ public class AudioplayerActivity extends MediaplayerInfoActivity {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
storeNewMediaPlaybackSpeed(newSpeed);
|
try {
|
||||||
|
PlaybackPreferences.setCurrentlyPlayingTemporaryPlaybackSpeed(Float.parseFloat(newSpeed));
|
||||||
|
} catch (NumberFormatException e) {
|
||||||
|
// Well this was awkward...
|
||||||
|
}
|
||||||
UserPreferences.setPlaybackSpeed(newSpeed);
|
UserPreferences.setPlaybackSpeed(newSpeed);
|
||||||
controller.setPlaybackSpeed(Float.parseFloat(newSpeed));
|
controller.setPlaybackSpeed(Float.parseFloat(newSpeed));
|
||||||
onPositionObserverUpdate();
|
onPositionObserverUpdate();
|
||||||
@ -148,15 +153,4 @@ public class AudioplayerActivity extends MediaplayerInfoActivity {
|
|||||||
txtvPlaybackSpeed.setVisibility(View.VISIBLE);
|
txtvPlaybackSpeed.setVisibility(View.VISIBLE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void storeNewMediaPlaybackSpeed(String speed) {
|
|
||||||
Playable media = controller.getMedia();
|
|
||||||
if (media instanceof FeedMedia) {
|
|
||||||
try {
|
|
||||||
((FeedMedia) media).updateLastPlaybackSpeed(Float.parseFloat(speed));
|
|
||||||
} catch (NumberFormatException e) {
|
|
||||||
// Well this was awkward...
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -14,14 +14,12 @@ import com.afollestad.materialdialogs.MaterialDialog;
|
|||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
|
|
||||||
import de.danoeh.antennapod.R;
|
import de.danoeh.antennapod.R;
|
||||||
import de.danoeh.antennapod.core.feed.FeedMedia;
|
import de.danoeh.antennapod.core.preferences.PlaybackSpeedHelper;
|
||||||
import de.danoeh.antennapod.core.preferences.UserPreferences;
|
import de.danoeh.antennapod.core.preferences.UserPreferences;
|
||||||
import de.danoeh.antennapod.core.util.Converter;
|
import de.danoeh.antennapod.core.util.Converter;
|
||||||
import de.danoeh.antennapod.core.util.playback.Playable;
|
import de.danoeh.antennapod.core.util.playback.Playable;
|
||||||
import de.danoeh.antennapod.core.util.playback.PlaybackController;
|
import de.danoeh.antennapod.core.util.playback.PlaybackController;
|
||||||
|
|
||||||
import static de.danoeh.antennapod.core.feed.FeedPreferences.SPEED_USE_GLOBAL;
|
|
||||||
|
|
||||||
public class PlaybackControlsDialog extends DialogFragment {
|
public class PlaybackControlsDialog extends DialogFragment {
|
||||||
private static final float PLAYBACK_SPEED_STEP = 0.05f;
|
private static final float PLAYBACK_SPEED_STEP = 0.05f;
|
||||||
private static final float DEFAULT_MIN_PLAYBACK_SPEED = 0.5f;
|
private static final float DEFAULT_MIN_PLAYBACK_SPEED = 0.5f;
|
||||||
@ -217,6 +215,6 @@ public class PlaybackControlsDialog extends DialogFragment {
|
|||||||
media = controller.getMedia();
|
media = controller.getMedia();
|
||||||
}
|
}
|
||||||
|
|
||||||
return UserPreferences.getPlaybackSpeed(media);
|
return PlaybackSpeedHelper.getCurrentPlaybackSpeed(media);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -42,9 +42,9 @@ import de.danoeh.antennapod.core.event.DownloaderUpdate;
|
|||||||
import de.danoeh.antennapod.core.event.FeedItemEvent;
|
import de.danoeh.antennapod.core.event.FeedItemEvent;
|
||||||
import de.danoeh.antennapod.core.event.QueueEvent;
|
import de.danoeh.antennapod.core.event.QueueEvent;
|
||||||
import de.danoeh.antennapod.core.feed.EventDistributor;
|
import de.danoeh.antennapod.core.feed.EventDistributor;
|
||||||
import de.danoeh.antennapod.core.feed.Feed;
|
|
||||||
import de.danoeh.antennapod.core.feed.FeedItem;
|
import de.danoeh.antennapod.core.feed.FeedItem;
|
||||||
import de.danoeh.antennapod.core.feed.FeedMedia;
|
import de.danoeh.antennapod.core.feed.FeedMedia;
|
||||||
|
import de.danoeh.antennapod.core.preferences.PlaybackSpeedHelper;
|
||||||
import de.danoeh.antennapod.core.preferences.UserPreferences;
|
import de.danoeh.antennapod.core.preferences.UserPreferences;
|
||||||
import de.danoeh.antennapod.core.service.download.DownloadService;
|
import de.danoeh.antennapod.core.service.download.DownloadService;
|
||||||
import de.danoeh.antennapod.core.service.download.Downloader;
|
import de.danoeh.antennapod.core.service.download.Downloader;
|
||||||
@ -66,7 +66,6 @@ import io.reactivex.android.schedulers.AndroidSchedulers;
|
|||||||
import io.reactivex.disposables.Disposable;
|
import io.reactivex.disposables.Disposable;
|
||||||
import io.reactivex.schedulers.Schedulers;
|
import io.reactivex.schedulers.Schedulers;
|
||||||
|
|
||||||
import static de.danoeh.antennapod.core.feed.FeedPreferences.SPEED_USE_GLOBAL;
|
|
||||||
import static de.danoeh.antennapod.dialog.EpisodesApplyActionFragment.ACTION_DELETE;
|
import static de.danoeh.antennapod.dialog.EpisodesApplyActionFragment.ACTION_DELETE;
|
||||||
import static de.danoeh.antennapod.dialog.EpisodesApplyActionFragment.ACTION_REMOVE_FROM_QUEUE;
|
import static de.danoeh.antennapod.dialog.EpisodesApplyActionFragment.ACTION_REMOVE_FROM_QUEUE;
|
||||||
|
|
||||||
@ -638,14 +637,7 @@ public class QueueFragment extends Fragment {
|
|||||||
if(queue.size() > 0) {
|
if(queue.size() > 0) {
|
||||||
long timeLeft = 0;
|
long timeLeft = 0;
|
||||||
for(FeedItem item : queue) {
|
for(FeedItem item : queue) {
|
||||||
float playbackSpeed = SPEED_USE_GLOBAL;
|
float playbackSpeed = PlaybackSpeedHelper.getCurrentPlaybackSpeed(item.getMedia());
|
||||||
Feed feed = item.getFeed();
|
|
||||||
if (feed != null) {
|
|
||||||
playbackSpeed = feed.getPreferences().getFeedPlaybackSpeed();
|
|
||||||
}
|
|
||||||
if (playbackSpeed == SPEED_USE_GLOBAL) {
|
|
||||||
playbackSpeed = UserPreferences.getPlaybackSpeed(item.getMedia());
|
|
||||||
}
|
|
||||||
if(item.getMedia() != null) {
|
if(item.getMedia() != null) {
|
||||||
timeLeft +=
|
timeLeft +=
|
||||||
(long) ((item.getMedia().getDuration() - item.getMedia().getPosition())
|
(long) ((item.getMedia().getDuration() - item.getMedia().getPosition())
|
||||||
|
@ -58,7 +58,6 @@ public class FeedMedia extends FeedFile implements Playable {
|
|||||||
private Date playbackCompletionDate;
|
private Date playbackCompletionDate;
|
||||||
private int startPosition = -1;
|
private int startPosition = -1;
|
||||||
private int playedDurationWhenStarted;
|
private int playedDurationWhenStarted;
|
||||||
private float lastPlaybackSpeed = LAST_PLAYBACK_SPEED_UNSET;
|
|
||||||
|
|
||||||
// if null: unknown, will be checked
|
// if null: unknown, will be checked
|
||||||
private Boolean hasEmbeddedPicture;
|
private Boolean hasEmbeddedPicture;
|
||||||
@ -95,11 +94,10 @@ public class FeedMedia extends FeedFile implements Playable {
|
|||||||
private FeedMedia(long id, FeedItem item, int duration, int position,
|
private FeedMedia(long id, FeedItem item, int duration, int position,
|
||||||
long size, String mime_type, String file_url, String download_url,
|
long size, String mime_type, String file_url, String download_url,
|
||||||
boolean downloaded, Date playbackCompletionDate, int played_duration,
|
boolean downloaded, Date playbackCompletionDate, int played_duration,
|
||||||
Boolean hasEmbeddedPicture, long lastPlayedTime, float lastPlaybackSpeed) {
|
Boolean hasEmbeddedPicture, long lastPlayedTime) {
|
||||||
this(id, item, duration, position, size, mime_type, file_url, download_url, downloaded,
|
this(id, item, duration, position, size, mime_type, file_url, download_url, downloaded,
|
||||||
playbackCompletionDate, played_duration, lastPlayedTime);
|
playbackCompletionDate, played_duration, lastPlayedTime);
|
||||||
this.hasEmbeddedPicture = hasEmbeddedPicture;
|
this.hasEmbeddedPicture = hasEmbeddedPicture;
|
||||||
this.lastPlaybackSpeed = lastPlaybackSpeed;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static FeedMedia fromCursor(Cursor cursor) {
|
public static FeedMedia fromCursor(Cursor cursor) {
|
||||||
@ -114,7 +112,6 @@ public class FeedMedia extends FeedFile implements Playable {
|
|||||||
int indexDownloaded = cursor.getColumnIndex(PodDBAdapter.KEY_DOWNLOADED);
|
int indexDownloaded = cursor.getColumnIndex(PodDBAdapter.KEY_DOWNLOADED);
|
||||||
int indexPlayedDuration = cursor.getColumnIndex(PodDBAdapter.KEY_PLAYED_DURATION);
|
int indexPlayedDuration = cursor.getColumnIndex(PodDBAdapter.KEY_PLAYED_DURATION);
|
||||||
int indexLastPlayedTime = cursor.getColumnIndex(PodDBAdapter.KEY_LAST_PLAYED_TIME);
|
int indexLastPlayedTime = cursor.getColumnIndex(PodDBAdapter.KEY_LAST_PLAYED_TIME);
|
||||||
int indexLastPlaybackSpeed = cursor.getColumnIndex(PodDBAdapter.KEY_MEDIA_LAST_PLAYBACK_SPEED);
|
|
||||||
|
|
||||||
long mediaId = cursor.getLong(indexId);
|
long mediaId = cursor.getLong(indexId);
|
||||||
Date playbackCompletionDate = null;
|
Date playbackCompletionDate = null;
|
||||||
@ -149,8 +146,7 @@ public class FeedMedia extends FeedFile implements Playable {
|
|||||||
playbackCompletionDate,
|
playbackCompletionDate,
|
||||||
cursor.getInt(indexPlayedDuration),
|
cursor.getInt(indexPlayedDuration),
|
||||||
hasEmbeddedPicture,
|
hasEmbeddedPicture,
|
||||||
cursor.getLong(indexLastPlayedTime),
|
cursor.getLong(indexLastPlayedTime)
|
||||||
cursor.getFloat(indexLastPlaybackSpeed)
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -630,33 +626,4 @@ public class FeedMedia extends FeedFile implements Playable {
|
|||||||
}
|
}
|
||||||
return super.equals(o);
|
return super.equals(o);
|
||||||
}
|
}
|
||||||
|
|
||||||
public float getLastPlaybackSpeed() {
|
|
||||||
return lastPlaybackSpeed;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void updateLastPlaybackSpeed(float newSpeed) {
|
|
||||||
lastPlaybackSpeed = newSpeed;
|
|
||||||
DBWriter.setFeedMediaPlaybackInformation(this);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
* @return the current playback speed for the media, or the feed's configured speed
|
|
||||||
*/
|
|
||||||
public float getMediaPlaybackSpeed() {
|
|
||||||
float playbackSpeed = lastPlaybackSpeed;
|
|
||||||
|
|
||||||
if (playbackSpeed == LAST_PLAYBACK_SPEED_UNSET) {
|
|
||||||
FeedItem item = getItem();
|
|
||||||
if (item != null) {
|
|
||||||
Feed feed = item.getFeed();
|
|
||||||
if (feed != null) {
|
|
||||||
playbackSpeed = feed.getPreferences().getFeedPlaybackSpeed();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return playbackSpeed;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -11,6 +11,8 @@ import de.danoeh.antennapod.core.feed.MediaType;
|
|||||||
import de.danoeh.antennapod.core.service.playback.PlayerStatus;
|
import de.danoeh.antennapod.core.service.playback.PlayerStatus;
|
||||||
import de.danoeh.antennapod.core.util.playback.Playable;
|
import de.danoeh.antennapod.core.util.playback.Playable;
|
||||||
|
|
||||||
|
import static de.danoeh.antennapod.core.feed.FeedPreferences.SPEED_USE_GLOBAL;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Provides access to preferences set by the playback service. A private
|
* Provides access to preferences set by the playback service. A private
|
||||||
* instance of this class must first be instantiated via createInstance() or
|
* instance of this class must first be instantiated via createInstance() or
|
||||||
@ -54,6 +56,13 @@ public class PlaybackPreferences implements SharedPreferences.OnSharedPreference
|
|||||||
*/
|
*/
|
||||||
private static final String PREF_CURRENT_PLAYER_STATUS = "de.danoeh.antennapod.preferences.currentPlayerStatus";
|
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";
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Value of PREF_CURRENTLY_PLAYING_MEDIA if no media is playing.
|
* Value of PREF_CURRENTLY_PLAYING_MEDIA if no media is playing.
|
||||||
*/
|
*/
|
||||||
@ -112,6 +121,10 @@ public class PlaybackPreferences implements SharedPreferences.OnSharedPreference
|
|||||||
return prefs.getInt(PREF_CURRENT_PLAYER_STATUS, PLAYER_STATUS_OTHER);
|
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 void writeNoMediaPlaying() {
|
public static void writeNoMediaPlaying() {
|
||||||
SharedPreferences.Editor editor = prefs.edit();
|
SharedPreferences.Editor editor = prefs.edit();
|
||||||
editor.putLong(PREF_CURRENTLY_PLAYING_MEDIA, NO_MEDIA_PLAYING);
|
editor.putLong(PREF_CURRENTLY_PLAYING_MEDIA, NO_MEDIA_PLAYING);
|
||||||
@ -154,6 +167,18 @@ public class PlaybackPreferences implements SharedPreferences.OnSharedPreference
|
|||||||
editor.apply();
|
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 clearCurrentlyPlayingTemporaryPlaybackSpeed() {
|
||||||
|
SharedPreferences.Editor editor = prefs.edit();
|
||||||
|
editor.remove(PREF_CURRENTLY_PLAYING_TEMPORARY_PLAYBACK_SPEED);
|
||||||
|
editor.apply();
|
||||||
|
}
|
||||||
|
|
||||||
private static int getCurrentPlayerStatusAsInt(PlayerStatus playerStatus) {
|
private static int getCurrentPlayerStatusAsInt(PlayerStatus playerStatus) {
|
||||||
int playerStatusAsInt;
|
int playerStatusAsInt;
|
||||||
switch (playerStatus) {
|
switch (playerStatus) {
|
||||||
|
@ -0,0 +1,41 @@
|
|||||||
|
package de.danoeh.antennapod.core.preferences;
|
||||||
|
|
||||||
|
import de.danoeh.antennapod.core.feed.Feed;
|
||||||
|
import de.danoeh.antennapod.core.feed.FeedItem;
|
||||||
|
import de.danoeh.antennapod.core.feed.FeedMedia;
|
||||||
|
import de.danoeh.antennapod.core.feed.MediaType;
|
||||||
|
import de.danoeh.antennapod.core.util.playback.Playable;
|
||||||
|
|
||||||
|
import static de.danoeh.antennapod.core.feed.FeedPreferences.SPEED_USE_GLOBAL;
|
||||||
|
|
||||||
|
public class PlaybackSpeedHelper {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the currently configured playback speed for the specified media.
|
||||||
|
*/
|
||||||
|
public static float getCurrentPlaybackSpeed(Playable media) {
|
||||||
|
float playbackSpeed = SPEED_USE_GLOBAL;
|
||||||
|
MediaType mediaType = null;
|
||||||
|
|
||||||
|
if (media != null) {
|
||||||
|
mediaType = media.getMediaType();
|
||||||
|
playbackSpeed = PlaybackPreferences.getCurrentlyPlayingTemporaryPlaybackSpeed();
|
||||||
|
|
||||||
|
if (playbackSpeed == SPEED_USE_GLOBAL && media instanceof FeedMedia) {
|
||||||
|
FeedItem item = ((FeedMedia) media).getItem();
|
||||||
|
if (item != null) {
|
||||||
|
Feed feed = item.getFeed();
|
||||||
|
if (feed != null) {
|
||||||
|
playbackSpeed = feed.getPreferences().getFeedPlaybackSpeed();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (playbackSpeed == SPEED_USE_GLOBAL) {
|
||||||
|
playbackSpeed = UserPreferences.getPlaybackSpeed(mediaType);
|
||||||
|
}
|
||||||
|
|
||||||
|
return playbackSpeed;
|
||||||
|
}
|
||||||
|
}
|
@ -23,7 +23,6 @@ import java.util.List;
|
|||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
import de.danoeh.antennapod.core.feed.FeedMedia;
|
|
||||||
import de.danoeh.antennapod.core.feed.MediaType;
|
import de.danoeh.antennapod.core.feed.MediaType;
|
||||||
import de.danoeh.antennapod.core.R;
|
import de.danoeh.antennapod.core.R;
|
||||||
import de.danoeh.antennapod.core.service.download.ProxyConfig;
|
import de.danoeh.antennapod.core.service.download.ProxyConfig;
|
||||||
@ -32,12 +31,9 @@ import de.danoeh.antennapod.core.storage.APNullCleanupAlgorithm;
|
|||||||
import de.danoeh.antennapod.core.storage.APQueueCleanupAlgorithm;
|
import de.danoeh.antennapod.core.storage.APQueueCleanupAlgorithm;
|
||||||
import de.danoeh.antennapod.core.storage.EpisodeCleanupAlgorithm;
|
import de.danoeh.antennapod.core.storage.EpisodeCleanupAlgorithm;
|
||||||
import de.danoeh.antennapod.core.util.Converter;
|
import de.danoeh.antennapod.core.util.Converter;
|
||||||
import de.danoeh.antennapod.core.util.playback.Playable;
|
|
||||||
import de.danoeh.antennapod.core.util.SortOrder;
|
import de.danoeh.antennapod.core.util.SortOrder;
|
||||||
import de.danoeh.antennapod.core.util.download.AutoUpdateManager;
|
import de.danoeh.antennapod.core.util.download.AutoUpdateManager;
|
||||||
|
|
||||||
import static de.danoeh.antennapod.core.feed.FeedPreferences.SPEED_USE_GLOBAL;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Provides access to preferences set by the user in the settings screen. A
|
* Provides access to preferences set by the user in the settings screen. A
|
||||||
* private instance of this class must first be instantiated via
|
* private instance of this class must first be instantiated via
|
||||||
@ -326,23 +322,12 @@ public class UserPreferences {
|
|||||||
return prefs.getBoolean(PREF_DELETE_REMOVES_FROM_QUEUE, false);
|
return prefs.getBoolean(PREF_DELETE_REMOVES_FROM_QUEUE, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static float getPlaybackSpeed(Playable media) {
|
public static float getPlaybackSpeed(MediaType mediaType) {
|
||||||
float playbackSpeed = SPEED_USE_GLOBAL;
|
if (mediaType == MediaType.VIDEO) {
|
||||||
if (media != null) {
|
return getVideoPlaybackSpeed();
|
||||||
if (media instanceof FeedMedia) {
|
} else {
|
||||||
playbackSpeed = ((FeedMedia) media).getMediaPlaybackSpeed();
|
return getAudioPlaybackSpeed();
|
||||||
}
|
|
||||||
|
|
||||||
if (playbackSpeed == SPEED_USE_GLOBAL && media.getMediaType() == MediaType.VIDEO) {
|
|
||||||
playbackSpeed = getVideoPlaybackSpeed();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (playbackSpeed == SPEED_USE_GLOBAL) {
|
|
||||||
playbackSpeed = getAudioPlaybackSpeed();
|
|
||||||
}
|
|
||||||
|
|
||||||
return playbackSpeed;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private static float getAudioPlaybackSpeed() {
|
private static float getAudioPlaybackSpeed() {
|
||||||
|
@ -24,7 +24,7 @@ import java.util.concurrent.TimeUnit;
|
|||||||
|
|
||||||
import de.danoeh.antennapod.core.R;
|
import de.danoeh.antennapod.core.R;
|
||||||
import de.danoeh.antennapod.core.glide.ApGlideSettings;
|
import de.danoeh.antennapod.core.glide.ApGlideSettings;
|
||||||
import de.danoeh.antennapod.core.preferences.UserPreferences;
|
import de.danoeh.antennapod.core.preferences.PlaybackSpeedHelper;
|
||||||
import de.danoeh.antennapod.core.receiver.MediaButtonReceiver;
|
import de.danoeh.antennapod.core.receiver.MediaButtonReceiver;
|
||||||
import de.danoeh.antennapod.core.receiver.PlayerWidget;
|
import de.danoeh.antennapod.core.receiver.PlayerWidget;
|
||||||
import de.danoeh.antennapod.core.service.playback.PlaybackService;
|
import de.danoeh.antennapod.core.service.playback.PlaybackService;
|
||||||
@ -147,7 +147,7 @@ public class PlayerWidgetJobService extends SafeJobIntentService {
|
|||||||
progressString = getProgressString(playbackService.getCurrentPosition(),
|
progressString = getProgressString(playbackService.getCurrentPosition(),
|
||||||
playbackService.getDuration(), playbackService.getCurrentPlaybackSpeed());
|
playbackService.getDuration(), playbackService.getCurrentPlaybackSpeed());
|
||||||
} else {
|
} else {
|
||||||
progressString = getProgressString(media.getPosition(), media.getDuration(), UserPreferences.getPlaybackSpeed(media));
|
progressString = getProgressString(media.getPosition(), media.getDuration(), PlaybackSpeedHelper.getCurrentPlaybackSpeed(media));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (progressString != null) {
|
if (progressString != null) {
|
||||||
|
@ -26,8 +26,8 @@ import java.util.concurrent.TimeUnit;
|
|||||||
import java.util.concurrent.atomic.AtomicBoolean;
|
import java.util.concurrent.atomic.AtomicBoolean;
|
||||||
import java.util.concurrent.locks.ReentrantLock;
|
import java.util.concurrent.locks.ReentrantLock;
|
||||||
|
|
||||||
import de.danoeh.antennapod.core.feed.FeedMedia;
|
|
||||||
import de.danoeh.antennapod.core.feed.MediaType;
|
import de.danoeh.antennapod.core.feed.MediaType;
|
||||||
|
import de.danoeh.antennapod.core.preferences.PlaybackSpeedHelper;
|
||||||
import de.danoeh.antennapod.core.preferences.UserPreferences;
|
import de.danoeh.antennapod.core.preferences.UserPreferences;
|
||||||
import de.danoeh.antennapod.core.util.RewindAfterPauseUtils;
|
import de.danoeh.antennapod.core.util.RewindAfterPauseUtils;
|
||||||
import de.danoeh.antennapod.core.util.playback.AudioPlayer;
|
import de.danoeh.antennapod.core.util.playback.AudioPlayer;
|
||||||
@ -35,8 +35,6 @@ import de.danoeh.antennapod.core.util.playback.IPlayer;
|
|||||||
import de.danoeh.antennapod.core.util.playback.Playable;
|
import de.danoeh.antennapod.core.util.playback.Playable;
|
||||||
import de.danoeh.antennapod.core.util.playback.VideoPlayer;
|
import de.danoeh.antennapod.core.util.playback.VideoPlayer;
|
||||||
|
|
||||||
import static de.danoeh.antennapod.core.feed.FeedPreferences.SPEED_USE_GLOBAL;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Manages the MediaPlayer object of the PlaybackService.
|
* Manages the MediaPlayer object of the PlaybackService.
|
||||||
*/
|
*/
|
||||||
@ -245,7 +243,7 @@ public class LocalPSMP extends PlaybackServiceMediaPlayer {
|
|||||||
try {
|
try {
|
||||||
media.loadMetadata();
|
media.loadMetadata();
|
||||||
callback.onMediaChanged(false);
|
callback.onMediaChanged(false);
|
||||||
setPlaybackParams(UserPreferences.getPlaybackSpeed(media), UserPreferences.isSkipSilence());
|
setPlaybackParams(PlaybackSpeedHelper.getCurrentPlaybackSpeed(media), UserPreferences.isSkipSilence());
|
||||||
if (stream) {
|
if (stream) {
|
||||||
mediaPlayer.setDataSource(media.getStreamUrl());
|
mediaPlayer.setDataSource(media.getStreamUrl());
|
||||||
} else if (media.getLocalMediaUrl() != null && new File(media.getLocalMediaUrl()).canRead()) {
|
} else if (media.getLocalMediaUrl() != null && new File(media.getLocalMediaUrl()).canRead()) {
|
||||||
@ -309,7 +307,7 @@ public class LocalPSMP extends PlaybackServiceMediaPlayer {
|
|||||||
Log.d(TAG, "Resuming/Starting playback");
|
Log.d(TAG, "Resuming/Starting playback");
|
||||||
acquireWifiLockIfNecessary();
|
acquireWifiLockIfNecessary();
|
||||||
|
|
||||||
setPlaybackParams(UserPreferences.getPlaybackSpeed(media), UserPreferences.isSkipSilence());
|
setPlaybackParams(PlaybackSpeedHelper.getCurrentPlaybackSpeed(media), UserPreferences.isSkipSilence());
|
||||||
setVolume(UserPreferences.getLeftVolume(), UserPreferences.getRightVolume());
|
setVolume(UserPreferences.getLeftVolume(), UserPreferences.getRightVolume());
|
||||||
|
|
||||||
if (playerStatus == PlayerStatus.PREPARED && media.getPosition() > 0) {
|
if (playerStatus == PlayerStatus.PREPARED && media.getPosition() > 0) {
|
||||||
|
@ -959,6 +959,8 @@ public class PlaybackService extends MediaBrowserServiceCompat {
|
|||||||
*/
|
*/
|
||||||
private void onPostPlayback(final Playable playable, boolean ended, boolean skipped,
|
private void onPostPlayback(final Playable playable, boolean ended, boolean skipped,
|
||||||
boolean playingNext) {
|
boolean playingNext) {
|
||||||
|
// Reset the temporary playback speed because it only referred to the last playable
|
||||||
|
PlaybackPreferences.clearCurrentlyPlayingTemporaryPlaybackSpeed();
|
||||||
if (playable == null) {
|
if (playable == null) {
|
||||||
Log.e(TAG, "Cannot do post-playback processing: media was null");
|
Log.e(TAG, "Cannot do post-playback processing: media was null");
|
||||||
return;
|
return;
|
||||||
|
@ -294,8 +294,6 @@ class DBUpgrader {
|
|||||||
if (oldVersion < 1070400) {
|
if (oldVersion < 1070400) {
|
||||||
db.execSQL("ALTER TABLE " + PodDBAdapter.TABLE_NAME_FEEDS
|
db.execSQL("ALTER TABLE " + PodDBAdapter.TABLE_NAME_FEEDS
|
||||||
+ " ADD COLUMN " + PodDBAdapter.KEY_FEED_PLAYBACK_SPEED + " REAL DEFAULT " + SPEED_USE_GLOBAL);
|
+ " ADD COLUMN " + PodDBAdapter.KEY_FEED_PLAYBACK_SPEED + " REAL DEFAULT " + SPEED_USE_GLOBAL);
|
||||||
db.execSQL("ALTER TABLE " + PodDBAdapter.TABLE_NAME_FEED_MEDIA
|
|
||||||
+ " ADD COLUMN " + PodDBAdapter.KEY_MEDIA_LAST_PLAYBACK_SPEED + " REAL DEFAULT " + LAST_PLAYBACK_SPEED_UNSET);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -36,7 +36,6 @@ import de.danoeh.antennapod.core.preferences.UserPreferences;
|
|||||||
import de.danoeh.antennapod.core.service.download.DownloadStatus;
|
import de.danoeh.antennapod.core.service.download.DownloadStatus;
|
||||||
import de.danoeh.antennapod.core.util.LongIntMap;
|
import de.danoeh.antennapod.core.util.LongIntMap;
|
||||||
|
|
||||||
import static de.danoeh.antennapod.core.feed.FeedMedia.LAST_PLAYBACK_SPEED_UNSET;
|
|
||||||
import static de.danoeh.antennapod.core.feed.FeedPreferences.SPEED_USE_GLOBAL;
|
import static de.danoeh.antennapod.core.feed.FeedPreferences.SPEED_USE_GLOBAL;
|
||||||
|
|
||||||
// TODO Remove media column from feeditem table
|
// TODO Remove media column from feeditem table
|
||||||
@ -108,7 +107,6 @@ public class PodDBAdapter {
|
|||||||
public static final String KEY_INCLUDE_FILTER = "include_filter";
|
public static final String KEY_INCLUDE_FILTER = "include_filter";
|
||||||
public static final String KEY_EXCLUDE_FILTER = "exclude_filter";
|
public static final String KEY_EXCLUDE_FILTER = "exclude_filter";
|
||||||
public static final String KEY_FEED_PLAYBACK_SPEED = "feed_playback_speed";
|
public static final String KEY_FEED_PLAYBACK_SPEED = "feed_playback_speed";
|
||||||
public static final String KEY_MEDIA_LAST_PLAYBACK_SPEED = "last_playback_speed";
|
|
||||||
|
|
||||||
// Table names
|
// Table names
|
||||||
static final String TABLE_NAME_FEEDS = "Feeds";
|
static final String TABLE_NAME_FEEDS = "Feeds";
|
||||||
@ -163,8 +161,7 @@ public class PodDBAdapter {
|
|||||||
+ KEY_FEEDITEM + " INTEGER,"
|
+ KEY_FEEDITEM + " INTEGER,"
|
||||||
+ KEY_PLAYED_DURATION + " INTEGER,"
|
+ KEY_PLAYED_DURATION + " INTEGER,"
|
||||||
+ KEY_HAS_EMBEDDED_PICTURE + " INTEGER,"
|
+ KEY_HAS_EMBEDDED_PICTURE + " INTEGER,"
|
||||||
+ KEY_LAST_PLAYED_TIME + " INTEGER,"
|
+ KEY_LAST_PLAYED_TIME + " INTEGER" + ")";
|
||||||
+ KEY_MEDIA_LAST_PLAYBACK_SPEED + " REAL DEFAULT " + LAST_PLAYBACK_SPEED_UNSET + ")";
|
|
||||||
|
|
||||||
private static final String CREATE_TABLE_DOWNLOAD_LOG = "CREATE TABLE "
|
private static final String CREATE_TABLE_DOWNLOAD_LOG = "CREATE TABLE "
|
||||||
+ TABLE_NAME_DOWNLOAD_LOG + " (" + TABLE_PRIMARY_KEY + KEY_FEEDFILE
|
+ TABLE_NAME_DOWNLOAD_LOG + " (" + TABLE_PRIMARY_KEY + KEY_FEEDFILE
|
||||||
@ -435,7 +432,6 @@ public class PodDBAdapter {
|
|||||||
values.put(KEY_FILE_URL, media.getFile_url());
|
values.put(KEY_FILE_URL, media.getFile_url());
|
||||||
values.put(KEY_HAS_EMBEDDED_PICTURE, media.hasEmbeddedPicture());
|
values.put(KEY_HAS_EMBEDDED_PICTURE, media.hasEmbeddedPicture());
|
||||||
values.put(KEY_LAST_PLAYED_TIME, media.getLastPlayedTime());
|
values.put(KEY_LAST_PLAYED_TIME, media.getLastPlayedTime());
|
||||||
values.put(KEY_MEDIA_LAST_PLAYBACK_SPEED, media.getLastPlaybackSpeed());
|
|
||||||
|
|
||||||
if (media.getPlaybackCompletionDate() != null) {
|
if (media.getPlaybackCompletionDate() != null) {
|
||||||
values.put(KEY_PLAYBACK_COMPLETION_DATE, media.getPlaybackCompletionDate().getTime());
|
values.put(KEY_PLAYBACK_COMPLETION_DATE, media.getPlaybackCompletionDate().getTime());
|
||||||
@ -461,7 +457,6 @@ public class PodDBAdapter {
|
|||||||
values.put(KEY_DURATION, media.getDuration());
|
values.put(KEY_DURATION, media.getDuration());
|
||||||
values.put(KEY_PLAYED_DURATION, media.getPlayedDuration());
|
values.put(KEY_PLAYED_DURATION, media.getPlayedDuration());
|
||||||
values.put(KEY_LAST_PLAYED_TIME, media.getLastPlayedTime());
|
values.put(KEY_LAST_PLAYED_TIME, media.getLastPlayedTime());
|
||||||
values.put(KEY_MEDIA_LAST_PLAYBACK_SPEED, media.getLastPlaybackSpeed());
|
|
||||||
db.update(TABLE_NAME_FEED_MEDIA, values, KEY_ID + "=?",
|
db.update(TABLE_NAME_FEED_MEDIA, values, KEY_ID + "=?",
|
||||||
new String[]{String.valueOf(media.getId())});
|
new String[]{String.valueOf(media.getId())});
|
||||||
} else {
|
} else {
|
||||||
@ -475,7 +470,6 @@ public class PodDBAdapter {
|
|||||||
values.put(KEY_PLAYBACK_COMPLETION_DATE, media.getPlaybackCompletionDate().getTime());
|
values.put(KEY_PLAYBACK_COMPLETION_DATE, media.getPlaybackCompletionDate().getTime());
|
||||||
values.put(KEY_PLAYED_DURATION, media.getPlayedDuration());
|
values.put(KEY_PLAYED_DURATION, media.getPlayedDuration());
|
||||||
// Also reset stored playback speed for media
|
// Also reset stored playback speed for media
|
||||||
values.put(KEY_MEDIA_LAST_PLAYBACK_SPEED, LAST_PLAYBACK_SPEED_UNSET);
|
|
||||||
db.update(TABLE_NAME_FEED_MEDIA, values, KEY_ID + "=?",
|
db.update(TABLE_NAME_FEED_MEDIA, values, KEY_ID + "=?",
|
||||||
new String[]{String.valueOf(media.getId())});
|
new String[]{String.valueOf(media.getId())});
|
||||||
} else {
|
} else {
|
||||||
|
@ -29,6 +29,7 @@ import de.danoeh.antennapod.core.feed.Chapter;
|
|||||||
import de.danoeh.antennapod.core.feed.FeedMedia;
|
import de.danoeh.antennapod.core.feed.FeedMedia;
|
||||||
import de.danoeh.antennapod.core.feed.MediaType;
|
import de.danoeh.antennapod.core.feed.MediaType;
|
||||||
import de.danoeh.antennapod.core.preferences.PlaybackPreferences;
|
import de.danoeh.antennapod.core.preferences.PlaybackPreferences;
|
||||||
|
import de.danoeh.antennapod.core.preferences.PlaybackSpeedHelper;
|
||||||
import de.danoeh.antennapod.core.preferences.UserPreferences;
|
import de.danoeh.antennapod.core.preferences.UserPreferences;
|
||||||
import de.danoeh.antennapod.core.service.playback.PlaybackService;
|
import de.danoeh.antennapod.core.service.playback.PlaybackService;
|
||||||
import de.danoeh.antennapod.core.service.playback.PlaybackServiceMediaPlayer;
|
import de.danoeh.antennapod.core.service.playback.PlaybackServiceMediaPlayer;
|
||||||
@ -714,7 +715,7 @@ public class PlaybackController {
|
|||||||
if (playbackService != null && canSetPlaybackSpeed()) {
|
if (playbackService != null && canSetPlaybackSpeed()) {
|
||||||
return playbackService.getCurrentPlaybackSpeed();
|
return playbackService.getCurrentPlaybackSpeed();
|
||||||
} else {
|
} else {
|
||||||
return UserPreferences.getPlaybackSpeed(getMedia());
|
return PlaybackSpeedHelper.getCurrentPlaybackSpeed(getMedia());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user