From 569813ae73eb2de5ad4586f5d5a3bec066f611e8 Mon Sep 17 00:00:00 2001 From: dkanada Date: Mon, 18 May 2020 02:52:23 +0900 Subject: [PATCH] ignore sort preference if query already has sort method applied --- .../gramophone/service/MultiPlayer.java | 27 ------------ .../gramophone/service/MusicService.java | 44 +++++++------------ .../dkanada/gramophone/util/MusicUtil.java | 1 + .../dkanada/gramophone/util/QueryUtil.java | 3 ++ .../gramophone/widgets/BaseAppWidget.java | 3 +- 5 files changed, 22 insertions(+), 56 deletions(-) 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; }