diff --git a/app/src/main/java/code/name/monkey/retromusic/service/CrossFadePlayer.kt b/app/src/main/java/code/name/monkey/retromusic/service/CrossFadePlayer.kt
index 4f5e791ad..13c2310b0 100644
--- a/app/src/main/java/code/name/monkey/retromusic/service/CrossFadePlayer.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/service/CrossFadePlayer.kt
@@ -6,10 +6,12 @@ import android.content.Intent
import android.media.AudioAttributes
import android.media.AudioManager
import android.media.MediaPlayer
+import android.media.PlaybackParams
import android.media.audiofx.AudioEffect
import android.os.PowerManager
import android.util.Log
import androidx.core.net.toUri
+import code.name.monkey.appthemehelper.util.VersionUtils.hasMarshmallow
import code.name.monkey.retromusic.R
import code.name.monkey.retromusic.extensions.showToast
import code.name.monkey.retromusic.helper.MusicPlayerRemote
@@ -18,6 +20,8 @@ import code.name.monkey.retromusic.service.playback.Playback
import code.name.monkey.retromusic.service.playback.Playback.PlaybackCallbacks
import code.name.monkey.retromusic.util.MusicUtil
import code.name.monkey.retromusic.util.PreferenceUtil
+import code.name.monkey.retromusic.util.PreferenceUtil.playbackPitch
+import code.name.monkey.retromusic.util.PreferenceUtil.playbackSpeed
import kotlinx.coroutines.*
/** @author Prathamesh M */
@@ -138,7 +142,7 @@ class CrossFadePlayer(val context: Context) : Playback, MediaPlayer.OnCompletion
/**
* @param player The {@link MediaPlayer} to use
- * @param path The path of the file, or the http/rtsp URL of the stream you want to play
+ * @param path The path of the file, or the http/rtsp URL of the stream you want to play
* @return True if the player
has been prepared and is ready to play, false otherwise
*/
private fun setDataSourceImpl(
@@ -157,6 +161,7 @@ class CrossFadePlayer(val context: Context) : Playback, MediaPlayer.OnCompletion
AudioAttributes.Builder().setLegacyStreamType(AudioManager.STREAM_MUSIC).build()
)
player.prepare()
+ player.setPlaybackSpeedPitch(playbackSpeed, playbackPitch)
} catch (e: Exception) {
e.printStackTrace()
return false
@@ -341,6 +346,20 @@ class CrossFadePlayer(val context: Context) : Playback, MediaPlayer.OnCompletion
crossFadeDuration = duration
}
+ override fun setPlaybackSpeedPitch(speed: Float, pitch: Float) {
+ getCurrentPlayer()?.setPlaybackSpeedPitch(speed, pitch)
+ }
+
+ private fun MediaPlayer.setPlaybackSpeedPitch(speed: Float, pitch: Float) {
+ if (hasMarshmallow()) {
+ val wasPlaying: Boolean = isPlaying
+ playbackParams = PlaybackParams().setSpeed(speed).setPitch(pitch)
+ if (!wasPlaying) {
+ if (isPlaying) pause()
+ }
+ }
+ }
+
companion object {
val TAG: String = CrossFadePlayer::class.java.simpleName
}
diff --git a/app/src/main/java/code/name/monkey/retromusic/service/MultiPlayer.java b/app/src/main/java/code/name/monkey/retromusic/service/MultiPlayer.java
index f5c8756bb..66556bbe0 100644
--- a/app/src/main/java/code/name/monkey/retromusic/service/MultiPlayer.java
+++ b/app/src/main/java/code/name/monkey/retromusic/service/MultiPlayer.java
@@ -16,7 +16,6 @@ package code.name.monkey.retromusic.service;
import android.content.Context;
import android.content.Intent;
-import android.content.SharedPreferences;
import android.media.AudioManager;
import android.media.MediaPlayer;
import android.media.PlaybackParams;
@@ -28,12 +27,10 @@ import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
-import androidx.preference.PreferenceManager;
import org.jetbrains.annotations.NotNull;
import code.name.monkey.appthemehelper.util.VersionUtils;
-import code.name.monkey.retromusic.ConstantsKt;
import code.name.monkey.retromusic.R;
import code.name.monkey.retromusic.service.playback.Playback;
import code.name.monkey.retromusic.util.PreferenceUtil;
@@ -42,7 +39,7 @@ import code.name.monkey.retromusic.util.PreferenceUtil;
* @author Andrew Neal, Karim Abou Zeid (kabouzeid)
*/
public class MultiPlayer
- implements Playback, MediaPlayer.OnErrorListener, MediaPlayer.OnCompletionListener, SharedPreferences.OnSharedPreferenceChangeListener {
+ implements Playback, MediaPlayer.OnErrorListener, MediaPlayer.OnCompletionListener {
public static final String TAG = MultiPlayer.class.getSimpleName();
private MediaPlayer mCurrentMediaPlayer = new MediaPlayer();
@@ -60,7 +57,6 @@ public class MultiPlayer
MultiPlayer(final Context context) {
this.context = context;
mCurrentMediaPlayer.setWakeMode(context, PowerManager.PARTIAL_WAKE_LOCK);
- PreferenceManager.getDefaultSharedPreferences(context).registerOnSharedPreferenceChangeListener(this);
}
/**
@@ -94,7 +90,7 @@ public class MultiPlayer
} else {
player.setDataSource(path);
}
- setPlaybackSpeedPitch(player);
+ setPlaybackSpeedPitch(PreferenceUtil.INSTANCE.getPlaybackSpeed(), PreferenceUtil.INSTANCE.getPlaybackPitch());
player.setAudioStreamType(AudioManager.STREAM_MUSIC);
player.prepare();
} catch (Exception e) {
@@ -208,7 +204,6 @@ public class MultiPlayer
if (mNextMediaPlayer != null) {
mNextMediaPlayer.release();
}
- PreferenceManager.getDefaultSharedPreferences(context).unregisterOnSharedPreferenceChangeListener(this);
}
/**
@@ -359,20 +354,14 @@ public class MultiPlayer
}
@Override
- public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
- if (key.equals(ConstantsKt.PLAYBACK_SPEED) || key.equals(ConstantsKt.PLAYBACK_PITCH)) {
- setPlaybackSpeedPitch(mCurrentMediaPlayer);
- }
- }
-
- public void setPlaybackSpeedPitch(MediaPlayer mp) {
+ public void setPlaybackSpeedPitch(float speed, float pitch) {
if (VersionUtils.INSTANCE.hasMarshmallow()) {
- boolean wasPlaying = mp.isPlaying();
- mp.setPlaybackParams(new PlaybackParams()
+ boolean wasPlaying = mCurrentMediaPlayer.isPlaying();
+ mCurrentMediaPlayer.setPlaybackParams(new PlaybackParams()
.setSpeed(PreferenceUtil.INSTANCE.getPlaybackSpeed())
.setPitch(PreferenceUtil.INSTANCE.getPlaybackPitch()));
if (!wasPlaying) {
- if (mp.isPlaying()) mp.pause();
+ if (mCurrentMediaPlayer.isPlaying()) mCurrentMediaPlayer.pause();
}
}
}
diff --git a/app/src/main/java/code/name/monkey/retromusic/service/MusicService.kt b/app/src/main/java/code/name/monkey/retromusic/service/MusicService.kt
index 20796815c..4274978e0 100644
--- a/app/src/main/java/code/name/monkey/retromusic/service/MusicService.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/service/MusicService.kt
@@ -87,6 +87,7 @@ import code.name.monkey.retromusic.util.PreferenceUtil.isClassicNotification
import code.name.monkey.retromusic.util.PreferenceUtil.isHeadsetPlugged
import code.name.monkey.retromusic.util.PreferenceUtil.isLockScreen
import code.name.monkey.retromusic.util.PreferenceUtil.isPauseOnZeroVolume
+import code.name.monkey.retromusic.util.PreferenceUtil.playbackPitch
import code.name.monkey.retromusic.util.PreferenceUtil.playbackSpeed
import code.name.monkey.retromusic.util.PreferenceUtil.registerOnSharedPreferenceChangedListener
import code.name.monkey.retromusic.util.PreferenceUtil.unregisterOnSharedPreferenceChangedListener
@@ -695,6 +696,9 @@ class MusicService : MediaBrowserServiceCompat(),
sharedPreferences: SharedPreferences, key: String,
) {
when (key) {
+ PLAYBACK_SPEED, PLAYBACK_PITCH -> {
+ playback?.setPlaybackSpeedPitch(playbackSpeed, playbackPitch)
+ }
CROSS_FADE_DURATION -> {
val progress = songProgressMillis
val wasPlaying = isPlaying
diff --git a/app/src/main/java/code/name/monkey/retromusic/service/playback/Playback.kt b/app/src/main/java/code/name/monkey/retromusic/service/playback/Playback.kt
index 9a0ef73a7..4d98f3336 100644
--- a/app/src/main/java/code/name/monkey/retromusic/service/playback/Playback.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/service/playback/Playback.kt
@@ -49,6 +49,8 @@ interface Playback {
fun setCrossFadeDuration(duration: Int)
+ fun setPlaybackSpeedPitch(speed: Float, pitch: Float)
+
interface PlaybackCallbacks {
fun onTrackWentToNext()
diff --git a/app/src/main/java/code/name/monkey/retromusic/util/PreferenceUtil.kt b/app/src/main/java/code/name/monkey/retromusic/util/PreferenceUtil.kt
index ffdee11b6..dcdbae20d 100644
--- a/app/src/main/java/code/name/monkey/retromusic/util/PreferenceUtil.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/util/PreferenceUtil.kt
@@ -3,6 +3,7 @@ package code.name.monkey.retromusic.util
import android.content.Context
import android.content.SharedPreferences.OnSharedPreferenceChangeListener
import android.net.ConnectivityManager
+import android.net.NetworkCapabilities
import androidx.core.content.edit
import androidx.core.content.getSystemService
import androidx.core.content.res.use
@@ -340,8 +341,14 @@ object PreferenceUtil {
"always" -> true
"only_wifi" -> {
val connectivityManager = context.getSystemService()
- val netInfo = connectivityManager?.activeNetworkInfo
- netInfo != null && netInfo.type == ConnectivityManager.TYPE_WIFI && netInfo.isConnectedOrConnecting
+ if (VersionUtils.hasMarshmallow()) {
+ val network = connectivityManager?.activeNetwork
+ val capabilities = connectivityManager?.getNetworkCapabilities(network)
+ capabilities != null && capabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI)
+ } else {
+ val netInfo = connectivityManager?.activeNetworkInfo
+ netInfo != null && netInfo.type == ConnectivityManager.TYPE_WIFI && netInfo.isConnectedOrConnecting
+ }
}
"never" -> false
else -> false
@@ -678,6 +685,8 @@ object PreferenceUtil {
get() = sharedPreferences
.getInt(CROSS_FADE_DURATION, 0)
+ val isCrossfadeEnabled get() = crossFadeDuration > 0
+
val materialYou
get() = sharedPreferences.getBoolean(MATERIAL_YOU, VersionUtils.hasS())