Skip to content
This repository was archived by the owner on Jan 21, 2024. It is now read-only.

Commit a1f4f77

Browse files
added playback parameters dialog to local player
can be accessed by long-touching the player
1 parent 685491a commit a1f4f77

File tree

2 files changed

+50
-3
lines changed

2 files changed

+50
-3
lines changed

app/src/main/java/org/schabi/newpipe/LocalPlayerActivity.java

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
import androidx.annotation.NonNull;
1414
import androidx.appcompat.app.AppCompatActivity;
1515

16+
import com.google.android.exoplayer2.PlaybackParameters;
1617
import com.google.android.exoplayer2.Player;
1718
import com.google.android.exoplayer2.SimpleExoPlayer;
1819
import com.google.android.exoplayer2.ui.PlayerView;
@@ -21,20 +22,23 @@
2122

2223
import org.schabi.newpipe.player.LocalPlayer;
2324
import org.schabi.newpipe.player.LocalPlayerListener;
25+
import org.schabi.newpipe.player.helper.PlaybackParameterDialog;
26+
import org.schabi.newpipe.util.ThemeHelper;
2427
import org.schabi.newpipe.util.VideoSegment;
2528

2629
import java.util.ArrayList;
2730
import java.util.List;
2831

2932
public class LocalPlayerActivity extends AppCompatActivity implements Player.EventListener,
30-
LocalPlayerListener {
33+
LocalPlayerListener, PlaybackParameterDialog.Callback {
3134
private LocalPlayer localPlayer;
3235
public static final String TAG = "LocalPlayerActivity";
3336

3437
@Override
3538
protected void onCreate(final Bundle savedInstanceState) {
3639
super.onCreate(savedInstanceState);
3740
setContentView(R.layout.activity_local_player);
41+
ThemeHelper.setTheme(this);
3842

3943
hideSystemUi(isLandscape());
4044

@@ -48,6 +52,19 @@ protected void onCreate(final Bundle savedInstanceState) {
4852

4953
final PlayerView playerView = findViewById(R.id.player_view);
5054
playerView.setPlayer(localPlayer.getExoPlayer());
55+
56+
playerView.getVideoSurfaceView().setOnLongClickListener(v -> {
57+
showPlaybackParameterDialog();
58+
return true;
59+
});
60+
}
61+
62+
public void showPlaybackParameterDialog() {
63+
final PlaybackParameters playbackParameters =
64+
localPlayer.getExoPlayer().getPlaybackParameters();
65+
PlaybackParameterDialog.newInstance(playbackParameters.speed, playbackParameters.pitch,
66+
playbackParameters.skipSilence, this)
67+
.show(getSupportFragmentManager(), TAG);
5168
}
5269

5370
@Override
@@ -63,6 +80,12 @@ public void onConfigurationChanged(@NonNull final Configuration newConfig) {
6380
hideSystemUi(isLandscape());
6481
}
6582

83+
@Override
84+
public void onPlaybackParameterChanged(final float playbackTempo, final float playbackPitch,
85+
final boolean playbackSkipSilence) {
86+
localPlayer.setPlaybackParameters(playbackTempo, playbackPitch, playbackSkipSilence);
87+
}
88+
6689
@Override
6790
public void onBlocked(final SimpleExoPlayer player) {
6891

app/src/main/java/org/schabi/newpipe/player/LocalPlayer.java

Lines changed: 26 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,14 @@
88

99
import androidx.preference.PreferenceManager;
1010

11+
import com.google.android.exoplayer2.PlaybackParameters;
1112
import com.google.android.exoplayer2.Player.EventListener;
1213
import com.google.android.exoplayer2.SeekParameters;
1314
import com.google.android.exoplayer2.SimpleExoPlayer;
1415
import com.google.android.exoplayer2.source.MediaSource;
1516
import com.google.android.exoplayer2.source.ProgressiveMediaSource;
1617
import com.google.android.exoplayer2.upstream.DefaultDataSourceFactory;
1718

18-
import org.schabi.newpipe.App;
1919
import org.schabi.newpipe.DownloaderImpl;
2020
import org.schabi.newpipe.R;
2121
import org.schabi.newpipe.player.helper.PlayerHelper;
@@ -48,7 +48,7 @@ public class LocalPlayer implements EventListener {
4848

4949
public LocalPlayer(final Context context) {
5050
this.context = context;
51-
this.mPrefs = PreferenceManager.getDefaultSharedPreferences(App.getApp());
51+
this.mPrefs = PreferenceManager.getDefaultSharedPreferences(context);
5252
}
5353

5454
public void initialize(final String uri, final VideoSegment[] segments) {
@@ -62,6 +62,16 @@ public void initialize(final String uri, final VideoSegment[] segments) {
6262
simpleExoPlayer.setSeekParameters(PlayerHelper.getSeekParameters(context));
6363
simpleExoPlayer.setHandleAudioBecomingNoisy(true);
6464

65+
final PlaybackParameters playbackParameters = simpleExoPlayer.getPlaybackParameters();
66+
final float speed = mPrefs.getFloat(context.getString(
67+
R.string.playback_speed_key), playbackParameters.speed);
68+
final float pitch = mPrefs.getFloat(context.getString(
69+
R.string.playback_pitch_key), playbackParameters.pitch);
70+
final boolean skipSilence = mPrefs.getBoolean(context.getString(
71+
R.string.playback_skip_silence_key), playbackParameters.skipSilence);
72+
73+
setPlaybackParameters(speed, pitch, skipSilence);
74+
6575
final String autoPlayStr =
6676
mPrefs.getString(context.getString(R.string.autoplay_key), "");
6777
final boolean autoPlay =
@@ -94,6 +104,20 @@ public void destroy() {
94104
progressUpdateReactor.set(null);
95105
}
96106

107+
public void setPlaybackParameters(final float speed, final float pitch,
108+
final boolean skipSilence) {
109+
final float roundedSpeed = Math.round(speed * 100.0f) / 100.0f;
110+
final float roundedPitch = Math.round(pitch * 100.0f) / 100.0f;
111+
112+
mPrefs.edit()
113+
.putFloat(context.getString(R.string.playback_speed_key), speed)
114+
.putFloat(context.getString(R.string.playback_pitch_key), pitch)
115+
.putBoolean(context.getString(R.string.playback_skip_silence_key), skipSilence)
116+
.apply();
117+
simpleExoPlayer.setPlaybackParameters(
118+
new PlaybackParameters(roundedSpeed, roundedPitch, skipSilence));
119+
}
120+
97121
@Override
98122
public void onPlayerStateChanged(final boolean playWhenReady, final int playbackState) {
99123
switch (playbackState) {

0 commit comments

Comments
 (0)