From f95e2e89b9900ef0b782395260d1a56efc8b174e Mon Sep 17 00:00:00 2001 From: jakobkukla Date: Fri, 18 Mar 2022 02:12:57 +0100 Subject: [PATCH] remove playerHandler and release wakelock properly --- .../gramophone/service/MusicService.java | 57 ++----------------- .../gramophone/service/QueueManager.java | 3 +- 2 files changed, 8 insertions(+), 52 deletions(-) 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 b7281701..987db7f6 100644 --- a/app/src/main/java/com/dkanada/gramophone/service/MusicService.java +++ b/app/src/main/java/com/dkanada/gramophone/service/MusicService.java @@ -52,6 +52,7 @@ import com.dkanada.gramophone.util.Util; import com.dkanada.gramophone.views.widgets.AppWidgetAlbum; import com.dkanada.gramophone.views.widgets.AppWidgetCard; import com.dkanada.gramophone.views.widgets.AppWidgetClassic; +import com.google.android.exoplayer2.Player; import org.jellyfin.apiclient.interaction.EmptyResponse; import org.jellyfin.apiclient.interaction.Response; @@ -123,13 +124,11 @@ public class MusicService extends Service implements SharedPreferences.OnSharedP private MediaSessionCompat mediaSession; private PowerManager.WakeLock wakeLock; - private PlaybackHandler playerHandler; private Handler uiThreadHandler; private ThrottledSeekHandler throttledSeekHandler; private QueueHandler queueHandler; private ProgressHandler progressHandler; - private HandlerThread playerHandlerThread; private HandlerThread progressHandlerThread; private HandlerThread queueHandlerThread; @@ -157,6 +156,11 @@ public class MusicService extends Service implements SharedPreferences.OnSharedP @Override public void onStateChanged(int state) { notifyChange(STATE_CHANGED); + + if (state == Player.STATE_ENDED) { + playingNotification.stop(); + releaseWakeLock(); + } } @Override @@ -236,10 +240,6 @@ public class MusicService extends Service implements SharedPreferences.OnSharedP queueManager = new QueueManager(this, queueCallbacks); - playerHandlerThread = new HandlerThread(PlaybackHandler.class.getName()); - playerHandlerThread.start(); - playerHandler = new PlaybackHandler(this, playerHandlerThread.getLooper()); - progressHandlerThread = new HandlerThread(ProgressHandler.class.getName()); progressHandlerThread.start(); progressHandler = new ProgressHandler(this, progressHandlerThread.getLooper()); @@ -421,9 +421,6 @@ public class MusicService extends Service implements SharedPreferences.OnSharedP } private void restoreState() { - notifyChange(SHUFFLE_MODE_CHANGED); - notifyChange(REPEAT_MODE_CHANGED); - queueHandler.removeMessages(LOAD_QUEUE); queueHandler.sendEmptyMessage(LOAD_QUEUE); } @@ -444,9 +441,6 @@ public class MusicService extends Service implements SharedPreferences.OnSharedP } private void releaseResources() { - playerHandler.removeCallbacksAndMessages(null); - playerHandlerThread.quitSafely(); - progressHandler.removeCallbacksAndMessages(null); progressHandlerThread.quitSafely(); @@ -646,11 +640,7 @@ public class MusicService extends Service implements SharedPreferences.OnSharedP PreferenceUtil.getInstance(this).setProgress(getSongProgressMillis()); break; case QUEUE_CHANGED: - // because playing queue size might have changed updateMediaSessionMetadata(); - if (queueManager.getPlayingQueue().size() <= 0) { - playingNotification.stop(); - } break; } } @@ -686,41 +676,6 @@ public class MusicService extends Service implements SharedPreferences.OnSharedP } } - private static final class PlaybackHandler extends Handler { - private final WeakReference mService; - - public PlaybackHandler(final MusicService service, @NonNull final Looper looper) { - super(looper); - mService = new WeakReference<>(service); - } - - @Override - public void handleMessage(@NonNull final Message msg) { - final MusicService service = mService.get(); - if (service == null) { - return; - } - - switch (msg.what) { - /*case TRACK_ENDED: - // FIXME This isn't used anywhere. This means releaseWakeLock() is never called - - // if there is a timer finished, don't continue - if (service.pendingQuit || service.queueManager.getRepeatMode() == QueueManager.REPEAT_MODE_NONE && service.queueManager.isLastTrack()) { - if (service.pendingQuit) { - service.pendingQuit = false; - service.quit(); - break; - } - } - - service.releaseWakeLock(); - break; - */ - } - } - } - public class MusicBinder extends Binder { @NonNull public MusicService getService() { diff --git a/app/src/main/java/com/dkanada/gramophone/service/QueueManager.java b/app/src/main/java/com/dkanada/gramophone/service/QueueManager.java index 0cfc9745..86604c8e 100644 --- a/app/src/main/java/com/dkanada/gramophone/service/QueueManager.java +++ b/app/src/main/java/com/dkanada/gramophone/service/QueueManager.java @@ -5,6 +5,7 @@ import android.content.Context; import com.dkanada.gramophone.App; import com.dkanada.gramophone.model.Song; import com.dkanada.gramophone.util.PreferenceUtil; +import com.google.android.exoplayer2.Player; import java.util.ArrayList; import java.util.Collections; @@ -30,7 +31,7 @@ public class QueueManager { private boolean resetCurrentSong = true; private int shuffleMode; - private int repeatMode; + private @Player.RepeatMode int repeatMode; public QueueManager(Context context, QueueCallbacks callbacks) { this.context = context;