diff --git a/app/src/main/java/com/dkanada/gramophone/service/MultiPlayer.java b/app/src/main/java/com/dkanada/gramophone/service/MultiPlayer.java
index baa0fb55..17c406f2 100644
--- a/app/src/main/java/com/dkanada/gramophone/service/MultiPlayer.java
+++ b/app/src/main/java/com/dkanada/gramophone/service/MultiPlayer.java
@@ -1,10 +1,8 @@
package com.dkanada.gramophone.service;
import android.content.Context;
-import android.content.Intent;
import android.media.AudioManager;
import android.media.MediaPlayer;
-import android.media.audiofx.AudioEffect;
import android.net.Uri;
import android.os.PowerManager;
import androidx.annotation.NonNull;
@@ -34,12 +32,6 @@ public class MultiPlayer implements Playback, MediaPlayer.OnErrorListener, Media
mCurrentMediaPlayer.setWakeMode(context, PowerManager.PARTIAL_WAKE_LOCK);
}
- /**
- * @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
- */
@Override
public boolean setDataSource(@NonNull final String path) {
mIsInitialized = false;
@@ -51,13 +43,6 @@ public class MultiPlayer implements Playback, MediaPlayer.OnErrorListener, Media
return mIsInitialized;
}
- /**
- * @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
- * @return True if the player has been prepared and is
- * ready to play, false otherwise
- */
private boolean setDataSourceImpl(@NonNull final MediaPlayer player, @NonNull final String path) {
if (context == null) {
return false;
@@ -81,21 +66,9 @@ public class MultiPlayer implements Playback, MediaPlayer.OnErrorListener, Media
player.setOnCompletionListener(this);
player.setOnErrorListener(this);
- final Intent intent = new Intent(AudioEffect.ACTION_OPEN_AUDIO_EFFECT_CONTROL_SESSION);
- intent.putExtra(AudioEffect.EXTRA_AUDIO_SESSION, getAudioSessionId());
- intent.putExtra(AudioEffect.EXTRA_PACKAGE_NAME, context.getPackageName());
- intent.putExtra(AudioEffect.EXTRA_CONTENT_TYPE, AudioEffect.CONTENT_TYPE_MUSIC);
-
- context.sendBroadcast(intent);
return true;
}
- /**
- * Set the MediaPlayer to start when this MediaPlayer finishes playback.
- *
- * @param path The path of the file, or the http/rtsp URL of the stream
- * you want to play
- */
@Override
public void setNextDataSource(@Nullable final String path) {
if (context == null) {
diff --git a/app/src/main/java/com/dkanada/gramophone/service/MusicService.java b/app/src/main/java/com/dkanada/gramophone/service/MusicService.java
index 6de329fa..aa125ed0 100644
--- a/app/src/main/java/com/dkanada/gramophone/service/MusicService.java
+++ b/app/src/main/java/com/dkanada/gramophone/service/MusicService.java
@@ -14,7 +14,6 @@ import android.graphics.Bitmap;
import android.graphics.Point;
import android.graphics.drawable.Drawable;
import android.media.AudioManager;
-import android.media.audiofx.AudioEffect;
import android.media.session.MediaSession;
import android.os.Binder;
import android.os.Build;
@@ -441,25 +440,16 @@ public class MusicService extends Service implements SharedPreferences.OnSharedP
pause();
playingNotification.stop();
- closeAudioEffectSession();
getAudioManager().abandonAudioFocus(audioFocusListener);
stopSelf();
}
private void releaseResources() {
playerHandler.removeCallbacksAndMessages(null);
- if (Build.VERSION.SDK_INT >= 18) {
- musicPlayerHandlerThread.quitSafely();
- } else {
- musicPlayerHandlerThread.quit();
- }
+ musicPlayerHandlerThread.quitSafely();
queueSaveHandler.removeCallbacksAndMessages(null);
- if (Build.VERSION.SDK_INT >= 18) {
- queueSaveHandlerThread.quitSafely();
- } else {
- queueSaveHandlerThread.quit();
- }
+ queueSaveHandlerThread.quitSafely();
playback.release();
playback = null;
@@ -517,13 +507,6 @@ public class MusicService extends Service implements SharedPreferences.OnSharedP
}
}
- private void closeAudioEffectSession() {
- final Intent audioEffectsIntent = new Intent(AudioEffect.ACTION_CLOSE_AUDIO_EFFECT_CONTROL_SESSION);
- audioEffectsIntent.putExtra(AudioEffect.EXTRA_AUDIO_SESSION, playback.getAudioSessionId());
- audioEffectsIntent.putExtra(AudioEffect.EXTRA_PACKAGE_NAME, getPackageName());
- sendBroadcast(audioEffectsIntent);
- }
-
private boolean requestFocus() {
return (getAudioManager().requestAudioFocus(audioFocusListener, AudioManager.STREAM_MUSIC, AudioManager.AUDIOFOCUS_GAIN) == AudioManager.AUDIOFOCUS_REQUEST_GRANTED);
}
@@ -661,6 +644,7 @@ public class MusicService extends Service implements SharedPreferences.OnSharedP
}
break;
}
+
return position;
}
@@ -751,14 +735,14 @@ public class MusicService extends Service implements SharedPreferences.OnSharedP
public void removeSong(@NonNull Song song) {
for (int i = 0; i < playingQueue.size(); i++) {
- if (playingQueue.get(i).id == song.id) {
+ if (playingQueue.get(i).id.equals(song.id)) {
playingQueue.remove(i);
rePosition(i);
}
}
for (int i = 0; i < originalPlayingQueue.size(); i++) {
- if (originalPlayingQueue.get(i).id == song.id) {
+ if (originalPlayingQueue.get(i).id.equals(song.id)) {
originalPlayingQueue.remove(i);
}
}
@@ -848,10 +832,12 @@ public class MusicService extends Service implements SharedPreferences.OnSharedP
registerReceiver(becomingNoisyReceiver, becomingNoisyReceiverIntentFilter);
becomingNoisyReceiverRegistered = true;
}
+
if (notHandledMetaChangedForCurrentTrack) {
handleChangeInternal(META_CHANGED);
notHandledMetaChangedForCurrentTrack = false;
}
+
notifyChange(PLAY_STATE_CHANGED);
// fixes a bug where the volume would stay ducked because the AudioManager.AUDIOFOCUS_GAIN event is not sent
@@ -906,10 +892,8 @@ public class MusicService extends Service implements SharedPreferences.OnSharedP
}
break;
case REPEAT_MODE_THIS:
- if (force) {
- if (newPosition < 0) {
- newPosition = getPlayingQueue().size() - 1;
- }
+ if (force && newPosition < 0) {
+ newPosition = getPlayingQueue().size() - 1;
} else {
newPosition = getPosition();
}
@@ -921,6 +905,7 @@ public class MusicService extends Service implements SharedPreferences.OnSharedP
}
break;
}
+
return newPosition;
}
@@ -934,8 +919,10 @@ public class MusicService extends Service implements SharedPreferences.OnSharedP
public long getQueueDurationMillis(int position) {
long duration = 0;
- for (int i = position + 1; i < playingQueue.size(); i++)
+ for (int i = position + 1; i < playingQueue.size(); i++) {
duration += playingQueue.get(i).duration;
+ }
+
return duration;
}
@@ -981,6 +968,7 @@ public class MusicService extends Service implements SharedPreferences.OnSharedP
PreferenceManager.getDefaultSharedPreferences(this).edit()
.putInt(SAVED_SHUFFLE_MODE, shuffleMode)
.apply();
+
switch (shuffleMode) {
case SHUFFLE_MODE_SHUFFLE:
this.shuffleMode = shuffleMode;
@@ -997,9 +985,11 @@ public class MusicService extends Service implements SharedPreferences.OnSharedP
newPosition = getPlayingQueue().indexOf(song);
}
}
+
position = newPosition;
break;
}
+
handleAndSendChangeInternal(SHUFFLE_MODE_CHANGED);
notifyChange(QUEUE_CHANGED);
}
@@ -1276,8 +1266,8 @@ public class MusicService extends Service implements SharedPreferences.OnSharedP
@Override
public void onReceive(final Context context, final Intent intent) {
final String command = intent.getStringExtra(EXTRA_APP_WIDGET_NAME);
-
final int[] ids = intent.getIntArrayExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS);
+
switch (command) {
case AppWidgetClassic.NAME:
appWidgetClassic.performUpdate(MusicService.this, ids);
diff --git a/app/src/main/java/com/dkanada/gramophone/util/MusicUtil.java b/app/src/main/java/com/dkanada/gramophone/util/MusicUtil.java
index 702484e4..aaa1495c 100644
--- a/app/src/main/java/com/dkanada/gramophone/util/MusicUtil.java
+++ b/app/src/main/java/com/dkanada/gramophone/util/MusicUtil.java
@@ -98,6 +98,7 @@ public class MusicUtil {
public static String getReadableDurationString(long songDurationMillis) {
long minutes = (songDurationMillis / 1000) / 60;
long seconds = (songDurationMillis / 1000) % 60;
+
if (minutes < 60) {
return String.format(Locale.getDefault(), "%01d:%02d", minutes, seconds);
} else {
diff --git a/app/src/main/java/com/dkanada/gramophone/util/QueryUtil.java b/app/src/main/java/com/dkanada/gramophone/util/QueryUtil.java
index 4e81017a..62590fd7 100644
--- a/app/src/main/java/com/dkanada/gramophone/util/QueryUtil.java
+++ b/app/src/main/java/com/dkanada/gramophone/util/QueryUtil.java
@@ -199,6 +199,9 @@ public class QueryUtil {
}
private static void applySortMethod(ItemQuery query, String method) {
+ // album activity will always sort by track number
+ if (query.getSortBy() != null) return;
+
switch (method) {
case SortMethod.NAME:
query.setSortBy(new String[]{"SortName"});
diff --git a/app/src/main/java/com/dkanada/gramophone/widgets/BaseAppWidget.java b/app/src/main/java/com/dkanada/gramophone/widgets/BaseAppWidget.java
index 08e68883..0120422f 100644
--- a/app/src/main/java/com/dkanada/gramophone/widgets/BaseAppWidget.java
+++ b/app/src/main/java/com/dkanada/gramophone/widgets/BaseAppWidget.java
@@ -67,8 +67,7 @@ public abstract class BaseAppWidget extends AppWidgetProvider {
*/
protected boolean hasInstances(final Context context) {
final AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);
- final int[] mAppWidgetIds = appWidgetManager.getAppWidgetIds(new ComponentName(context,
- getClass()));
+ final int[] mAppWidgetIds = appWidgetManager.getAppWidgetIds(new ComponentName(context, getClass()));
return mAppWidgetIds.length > 0;
}