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.AppWidgetAlbum;
import com.dkanada.gramophone.views.widgets.AppWidgetCard; import com.dkanada.gramophone.views.widgets.AppWidgetCard;
import com.dkanada.gramophone.views.widgets.AppWidgetClassic; import com.dkanada.gramophone.views.widgets.AppWidgetClassic;
import com.google.android.exoplayer2.Player;
import org.jellyfin.apiclient.interaction.EmptyResponse; import org.jellyfin.apiclient.interaction.EmptyResponse;
import org.jellyfin.apiclient.interaction.Response; import org.jellyfin.apiclient.interaction.Response;
@ -123,13 +124,11 @@ public class MusicService extends Service implements SharedPreferences.OnSharedP
private MediaSessionCompat mediaSession; private MediaSessionCompat mediaSession;
private PowerManager.WakeLock wakeLock; private PowerManager.WakeLock wakeLock;
private PlaybackHandler playerHandler;
private Handler uiThreadHandler; private Handler uiThreadHandler;
private ThrottledSeekHandler throttledSeekHandler; private ThrottledSeekHandler throttledSeekHandler;
private QueueHandler queueHandler; private QueueHandler queueHandler;
private ProgressHandler progressHandler; private ProgressHandler progressHandler;
private HandlerThread playerHandlerThread;
private HandlerThread progressHandlerThread; private HandlerThread progressHandlerThread;
private HandlerThread queueHandlerThread; private HandlerThread queueHandlerThread;
@ -157,6 +156,11 @@ public class MusicService extends Service implements SharedPreferences.OnSharedP
@Override @Override
public void onStateChanged(int state) { public void onStateChanged(int state) {
notifyChange(STATE_CHANGED); notifyChange(STATE_CHANGED);
if (state == Player.STATE_ENDED) {
playingNotification.stop();
releaseWakeLock();
}
} }
@Override @Override
@ -236,10 +240,6 @@ public class MusicService extends Service implements SharedPreferences.OnSharedP
queueManager = new QueueManager(this, queueCallbacks); 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 = new HandlerThread(ProgressHandler.class.getName());
progressHandlerThread.start(); progressHandlerThread.start();
progressHandler = new ProgressHandler(this, progressHandlerThread.getLooper()); progressHandler = new ProgressHandler(this, progressHandlerThread.getLooper());
@ -421,9 +421,6 @@ public class MusicService extends Service implements SharedPreferences.OnSharedP
} }
private void restoreState() { private void restoreState() {
notifyChange(SHUFFLE_MODE_CHANGED);
notifyChange(REPEAT_MODE_CHANGED);
queueHandler.removeMessages(LOAD_QUEUE); queueHandler.removeMessages(LOAD_QUEUE);
queueHandler.sendEmptyMessage(LOAD_QUEUE); queueHandler.sendEmptyMessage(LOAD_QUEUE);
} }
@ -444,9 +441,6 @@ public class MusicService extends Service implements SharedPreferences.OnSharedP
} }
private void releaseResources() { private void releaseResources() {
playerHandler.removeCallbacksAndMessages(null);
playerHandlerThread.quitSafely();
progressHandler.removeCallbacksAndMessages(null); progressHandler.removeCallbacksAndMessages(null);
progressHandlerThread.quitSafely(); progressHandlerThread.quitSafely();
@ -646,11 +640,7 @@ public class MusicService extends Service implements SharedPreferences.OnSharedP
PreferenceUtil.getInstance(this).setProgress(getSongProgressMillis()); PreferenceUtil.getInstance(this).setProgress(getSongProgressMillis());
break; break;
case QUEUE_CHANGED: case QUEUE_CHANGED:
// because playing queue size might have changed
updateMediaSessionMetadata(); updateMediaSessionMetadata();
if (queueManager.getPlayingQueue().size() <= 0) {
playingNotification.stop();
}
break; 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 { public class MusicBinder extends Binder {
@NonNull @NonNull
public MusicService getService() { public MusicService getService() {

View file

@ -5,6 +5,7 @@ import android.content.Context;
import com.dkanada.gramophone.App; import com.dkanada.gramophone.App;
import com.dkanada.gramophone.model.Song; import com.dkanada.gramophone.model.Song;
import com.dkanada.gramophone.util.PreferenceUtil; import com.dkanada.gramophone.util.PreferenceUtil;
import com.google.android.exoplayer2.Player;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
@ -30,7 +31,7 @@ public class QueueManager {
private boolean resetCurrentSong = true; private boolean resetCurrentSong = true;
private int shuffleMode; private int shuffleMode;
private int repeatMode; private @Player.RepeatMode int repeatMode;
public QueueManager(Context context, QueueCallbacks callbacks) { public QueueManager(Context context, QueueCallbacks callbacks) {
this.context = context; this.context = context;