remove playerHandler and release wakelock properly

This commit is contained in:
jakobkukla 2022-03-18 02:12:57 +01:00
commit f95e2e89b9
2 changed files with 8 additions and 52 deletions

View file

@ -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<MusicService> 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() {

View file

@ -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;