package com.simplecity.amp_library.playback; import android.content.SharedPreferences; import android.os.Handler; import android.os.Message; import android.preference.PreferenceManager; import java.lang.ref.WeakReference; final class SleepHandler extends Handler { private final WeakReference<MusicService> mService; private boolean handled = false; SleepHandler(final MusicService service) { mService = new WeakReference<>(service); } @Override public void handleMessage(final Message msg) { final MusicService service = mService.get(); if (service == null) { return; } SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(service); boolean waitTilEnd = prefs.getBoolean("sleep_timer_wait_til_end", true); if (waitTilEnd && !handled) { //If we're waiting til the end of the currently playing song, //resend a message with the time remaining until sleep long duration = service.getDuration(); long position = service.getPosition(); handled = true; service.sleepHandler.sendMessageDelayed( service.sleepHandler.obtainMessage( MusicService.PlayerHandler.SLEEP ), duration - position - 350 ); } else if (waitTilEnd) { //IThe currently playing song has just finished, pause with no fade service.pause(); } else { //We don't care about where the current song is. Fade down and pause. service.playerHandler.sendEmptyMessage(MusicService.PlayerHandler.FADE_DOWN_STOP); handled = false; } } }