mirror of
https://github.com/AntennaPod/AntennaPod.git
synced 2025-02-06 13:33:30 +01:00
Merge pull request #3043 from CedricCabessa/remaining_time_playback_speed
Fixes #2197: Remaining time playback speed
This commit is contained in:
commit
d81cb2ff39
@ -129,6 +129,7 @@ public class AudioplayerActivity extends MediaplayerInfoActivity {
|
|||||||
}
|
}
|
||||||
UserPreferences.setPlaybackSpeed(newSpeed);
|
UserPreferences.setPlaybackSpeed(newSpeed);
|
||||||
controller.setPlaybackSpeed(Float.parseFloat(newSpeed));
|
controller.setPlaybackSpeed(Float.parseFloat(newSpeed));
|
||||||
|
onPositionObserverUpdate();
|
||||||
} else {
|
} else {
|
||||||
VariableSpeedDialog.showGetPluginDialog(this);
|
VariableSpeedDialog.showGetPluginDialog(this);
|
||||||
}
|
}
|
||||||
|
@ -55,6 +55,7 @@ import de.danoeh.antennapod.core.util.IntentUtils;
|
|||||||
import de.danoeh.antennapod.core.util.ShareUtils;
|
import de.danoeh.antennapod.core.util.ShareUtils;
|
||||||
import de.danoeh.antennapod.core.util.StorageUtils;
|
import de.danoeh.antennapod.core.util.StorageUtils;
|
||||||
import de.danoeh.antennapod.core.util.Supplier;
|
import de.danoeh.antennapod.core.util.Supplier;
|
||||||
|
import de.danoeh.antennapod.core.util.TimeSpeedConverter;
|
||||||
import de.danoeh.antennapod.core.util.gui.PictureInPictureUtil;
|
import de.danoeh.antennapod.core.util.gui.PictureInPictureUtil;
|
||||||
import de.danoeh.antennapod.core.util.playback.ExternalMedia;
|
import de.danoeh.antennapod.core.util.playback.ExternalMedia;
|
||||||
import de.danoeh.antennapod.core.util.playback.MediaPlayerError;
|
import de.danoeh.antennapod.core.util.playback.MediaPlayerError;
|
||||||
@ -674,8 +675,11 @@ public abstract class MediaplayerActivity extends CastEnabledActivity implements
|
|||||||
if (controller == null || txtvPosition == null || txtvLength == null) {
|
if (controller == null || txtvPosition == null || txtvLength == null) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
int currentPosition = controller.getPosition();
|
|
||||||
int duration = controller.getDuration();
|
int currentPosition = TimeSpeedConverter.convert(controller.getPosition());
|
||||||
|
int duration = TimeSpeedConverter.convert(controller.getDuration());
|
||||||
|
int remainingTime = TimeSpeedConverter.convert(
|
||||||
|
controller.getDuration() - controller.getPosition());
|
||||||
Log.d(TAG, "currentPosition " + Converter.getDurationStringLong(currentPosition));
|
Log.d(TAG, "currentPosition " + Converter.getDurationStringLong(currentPosition));
|
||||||
if (currentPosition == PlaybackService.INVALID_TIME ||
|
if (currentPosition == PlaybackService.INVALID_TIME ||
|
||||||
duration == PlaybackService.INVALID_TIME) {
|
duration == PlaybackService.INVALID_TIME) {
|
||||||
@ -684,7 +688,7 @@ public abstract class MediaplayerActivity extends CastEnabledActivity implements
|
|||||||
}
|
}
|
||||||
txtvPosition.setText(Converter.getDurationStringLong(currentPosition));
|
txtvPosition.setText(Converter.getDurationStringLong(currentPosition));
|
||||||
if (showTimeLeft) {
|
if (showTimeLeft) {
|
||||||
txtvLength.setText("-" + Converter.getDurationStringLong(duration - currentPosition));
|
txtvLength.setText("-" + Converter.getDurationStringLong(remainingTime));
|
||||||
} else {
|
} else {
|
||||||
txtvLength.setText(Converter.getDurationStringLong(duration));
|
txtvLength.setText(Converter.getDurationStringLong(duration));
|
||||||
}
|
}
|
||||||
@ -832,9 +836,13 @@ public abstract class MediaplayerActivity extends CastEnabledActivity implements
|
|||||||
|
|
||||||
String length;
|
String length;
|
||||||
if (showTimeLeft) {
|
if (showTimeLeft) {
|
||||||
length = "-" + Converter.getDurationStringLong(media.getDuration() - media.getPosition());
|
int remainingTime = TimeSpeedConverter.convert(
|
||||||
|
media.getDuration() - media.getPosition());
|
||||||
|
|
||||||
|
length = "-" + Converter.getDurationStringLong(remainingTime);
|
||||||
} else {
|
} else {
|
||||||
length = Converter.getDurationStringLong(media.getDuration());
|
int duration = TimeSpeedConverter.convert(media.getDuration());
|
||||||
|
length = Converter.getDurationStringLong(duration);
|
||||||
}
|
}
|
||||||
txtvLength.setText(length);
|
txtvLength.setText(length);
|
||||||
|
|
||||||
@ -937,7 +945,8 @@ public abstract class MediaplayerActivity extends CastEnabledActivity implements
|
|||||||
prog = controller.onSeekBarProgressChanged(seekBar, progress, fromUser, txtvPosition);
|
prog = controller.onSeekBarProgressChanged(seekBar, progress, fromUser, txtvPosition);
|
||||||
if (showTimeLeft && prog != 0) {
|
if (showTimeLeft && prog != 0) {
|
||||||
int duration = controller.getDuration();
|
int duration = controller.getDuration();
|
||||||
String length = "-" + Converter.getDurationStringLong(duration - (int) (prog * duration));
|
int timeLeft = TimeSpeedConverter.convert(duration - (int) (prog * duration));
|
||||||
|
String length = "-" + Converter.getDurationStringLong(timeLeft);
|
||||||
txtvLength.setText(length);
|
txtvLength.setText(length);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -46,7 +46,7 @@
|
|||||||
app:useStockLayout="true"/>
|
app:useStockLayout="true"/>
|
||||||
</PreferenceCategory>
|
</PreferenceCategory>
|
||||||
|
|
||||||
<PreferenceCategory android:title="@string/buttons">
|
<PreferenceCategory android:title="@string/playback_control">
|
||||||
<SwitchPreference
|
<SwitchPreference
|
||||||
android:defaultValue="false"
|
android:defaultValue="false"
|
||||||
android:enabled="true"
|
android:enabled="true"
|
||||||
@ -71,6 +71,11 @@
|
|||||||
android:key="prefPlaybackSpeedLauncher"
|
android:key="prefPlaybackSpeedLauncher"
|
||||||
android:summary="@string/pref_playback_speed_sum"
|
android:summary="@string/pref_playback_speed_sum"
|
||||||
android:title="@string/pref_playback_speed_title"/>
|
android:title="@string/pref_playback_speed_title"/>
|
||||||
|
<SwitchPreference
|
||||||
|
android:defaultValue="false"
|
||||||
|
android:key="prefPlaybackTimeRespectsSpeed"
|
||||||
|
android:summary="@string/pref_playback_time_respects_speed_sum"
|
||||||
|
android:title="@string/pref_playback_time_respects_speed_title"/>
|
||||||
</PreferenceCategory>
|
</PreferenceCategory>
|
||||||
|
|
||||||
<PreferenceCategory android:title="@string/queue_label">
|
<PreferenceCategory android:title="@string/queue_label">
|
||||||
|
@ -73,6 +73,7 @@ public class UserPreferences {
|
|||||||
private static final String PREF_PAUSE_PLAYBACK_FOR_FOCUS_LOSS = "prefPauseForFocusLoss";
|
private static final String PREF_PAUSE_PLAYBACK_FOR_FOCUS_LOSS = "prefPauseForFocusLoss";
|
||||||
private static final String PREF_RESUME_AFTER_CALL = "prefResumeAfterCall";
|
private static final String PREF_RESUME_AFTER_CALL = "prefResumeAfterCall";
|
||||||
public static final String PREF_VIDEO_BEHAVIOR = "prefVideoBehavior";
|
public static final String PREF_VIDEO_BEHAVIOR = "prefVideoBehavior";
|
||||||
|
private static final String PREF_TIME_RESPECTS_SPEED = "prefPlaybackTimeRespectsSpeed";
|
||||||
|
|
||||||
// Network
|
// Network
|
||||||
private static final String PREF_ENQUEUE_DOWNLOADED = "prefEnqueueDownloaded";
|
private static final String PREF_ENQUEUE_DOWNLOADED = "prefEnqueueDownloaded";
|
||||||
@ -871,4 +872,8 @@ public class UserPreferences {
|
|||||||
.putString(PREF_BACK_BUTTON_GO_TO_PAGE, tag)
|
.putString(PREF_BACK_BUTTON_GO_TO_PAGE, tag)
|
||||||
.apply();
|
.apply();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static boolean timeRespectsSpeed() {
|
||||||
|
return prefs.getBoolean(PREF_TIME_RESPECTS_SPEED, false);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -21,6 +21,7 @@ import de.danoeh.antennapod.core.receiver.PlayerWidget;
|
|||||||
import de.danoeh.antennapod.core.service.playback.PlaybackService;
|
import de.danoeh.antennapod.core.service.playback.PlaybackService;
|
||||||
import de.danoeh.antennapod.core.service.playback.PlayerStatus;
|
import de.danoeh.antennapod.core.service.playback.PlayerStatus;
|
||||||
import de.danoeh.antennapod.core.util.Converter;
|
import de.danoeh.antennapod.core.util.Converter;
|
||||||
|
import de.danoeh.antennapod.core.util.TimeSpeedConverter;
|
||||||
import de.danoeh.antennapod.core.util.playback.Playable;
|
import de.danoeh.antennapod.core.util.playback.Playable;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -152,6 +153,8 @@ public class PlayerWidgetJobService extends SafeJobIntentService {
|
|||||||
|
|
||||||
private String getProgressString(int position, int duration) {
|
private String getProgressString(int position, int duration) {
|
||||||
if (position > 0 && duration > 0) {
|
if (position > 0 && duration > 0) {
|
||||||
|
position = TimeSpeedConverter.convert(position);
|
||||||
|
duration = TimeSpeedConverter.convert(duration);
|
||||||
return Converter.getDurationStringLong(position) + " / "
|
return Converter.getDurationStringLong(position) + " / "
|
||||||
+ Converter.getDurationStringLong(duration);
|
+ Converter.getDurationStringLong(duration);
|
||||||
} else {
|
} else {
|
||||||
|
@ -0,0 +1,22 @@
|
|||||||
|
package de.danoeh.antennapod.core.util;
|
||||||
|
|
||||||
|
import de.danoeh.antennapod.core.preferences.UserPreferences;
|
||||||
|
|
||||||
|
public class TimeSpeedConverter {
|
||||||
|
private TimeSpeedConverter() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Convert millisecond according to the current playback speed
|
||||||
|
* @param time: time to convert
|
||||||
|
* @return converted time (can be < 0 if time is < 0)
|
||||||
|
*/
|
||||||
|
public static int convert(int time) {
|
||||||
|
boolean timeRespectsSpeed = UserPreferences.timeRespectsSpeed();
|
||||||
|
if (time > 0 && timeRespectsSpeed) {
|
||||||
|
float speed = Float.parseFloat(UserPreferences.getPlaybackSpeed());
|
||||||
|
return (int)(time / speed);
|
||||||
|
}
|
||||||
|
return time;
|
||||||
|
}
|
||||||
|
}
|
@ -38,6 +38,7 @@ import de.danoeh.antennapod.core.service.playback.PlayerStatus;
|
|||||||
import de.danoeh.antennapod.core.storage.DBTasks;
|
import de.danoeh.antennapod.core.storage.DBTasks;
|
||||||
import de.danoeh.antennapod.core.util.Converter;
|
import de.danoeh.antennapod.core.util.Converter;
|
||||||
import de.danoeh.antennapod.core.util.Optional;
|
import de.danoeh.antennapod.core.util.Optional;
|
||||||
|
import de.danoeh.antennapod.core.util.TimeSpeedConverter;
|
||||||
import de.danoeh.antennapod.core.util.playback.Playable.PlayableUtils;
|
import de.danoeh.antennapod.core.util.playback.Playable.PlayableUtils;
|
||||||
import io.reactivex.Maybe;
|
import io.reactivex.Maybe;
|
||||||
import io.reactivex.MaybeOnSubscribe;
|
import io.reactivex.MaybeOnSubscribe;
|
||||||
@ -566,8 +567,8 @@ public abstract class PlaybackController {
|
|||||||
if (fromUser && playbackService != null && media != null) {
|
if (fromUser && playbackService != null && media != null) {
|
||||||
float prog = progress / ((float) seekBar.getMax());
|
float prog = progress / ((float) seekBar.getMax());
|
||||||
int duration = media.getDuration();
|
int duration = media.getDuration();
|
||||||
txtvPosition.setText(Converter
|
int position = TimeSpeedConverter.convert((int) (prog * duration));
|
||||||
.getDurationStringLong((int) (prog * duration)));
|
txtvPosition.setText(Converter.getDurationStringLong(position));
|
||||||
return prog;
|
return prog;
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -377,7 +377,7 @@
|
|||||||
<string name="appearance">Appearance</string>
|
<string name="appearance">Appearance</string>
|
||||||
<string name="external_elements">External elements</string>
|
<string name="external_elements">External elements</string>
|
||||||
<string name="interruptions">Interruptions</string>
|
<string name="interruptions">Interruptions</string>
|
||||||
<string name="buttons">Playback control buttons</string>
|
<string name="playback_control">Playback control</string>
|
||||||
<string name="media_player">Media player</string>
|
<string name="media_player">Media player</string>
|
||||||
<string name="pref_episode_cleanup_title">Episode Cleanup</string>
|
<string name="pref_episode_cleanup_title">Episode Cleanup</string>
|
||||||
<string name="pref_episode_cleanup_summary">Episodes that aren\'t in the queue and aren\'t favorites should be eligible for removal if Auto Download needs space for new episodes</string>
|
<string name="pref_episode_cleanup_summary">Episodes that aren\'t in the queue and aren\'t favorites should be eligible for removal if Auto Download needs space for new episodes</string>
|
||||||
@ -474,6 +474,8 @@
|
|||||||
<string name="pref_gpodnet_notifications_sum">This setting does not apply to authentication errors.</string>
|
<string name="pref_gpodnet_notifications_sum">This setting does not apply to authentication errors.</string>
|
||||||
<string name="pref_playback_speed_title">Playback Speeds</string>
|
<string name="pref_playback_speed_title">Playback Speeds</string>
|
||||||
<string name="pref_playback_speed_sum">Customize the speeds available for variable speed audio playback</string>
|
<string name="pref_playback_speed_sum">Customize the speeds available for variable speed audio playback</string>
|
||||||
|
<string name="pref_playback_time_respects_speed_title">Adjust media info to playback speed</string>
|
||||||
|
<string name="pref_playback_time_respects_speed_sum">Displayed position and duration are adapted to playback speed</string>
|
||||||
<string name="pref_fast_forward">Fast Forward Skip Time</string>
|
<string name="pref_fast_forward">Fast Forward Skip Time</string>
|
||||||
<string name="pref_fast_forward_sum">Customize the number of seconds to jump forward when the fast forward button is clicked</string>
|
<string name="pref_fast_forward_sum">Customize the number of seconds to jump forward when the fast forward button is clicked</string>
|
||||||
<string name="pref_rewind">Rewind Skip Time</string>
|
<string name="pref_rewind">Rewind Skip Time</string>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user