Finish current music when Sleep Timer stops (#629)
Implement #329. This commit adds a CheckBox to dialog_sleep_timer, and a curresponding option `TIMER_FINISH_MUSIC` in PreferenceUtil. In MusicService, a new flag `pendingQuit` is to indicate if it should stop after current music stops. A new action `ACTION_PENDING_QUIT` will set that flag. Canceling is a little tricky. I must bind MusicService in Dialog activity to check if `pendingQuit` is set, and show the corresponding canceling button.
This commit is contained in:
parent
631c72d195
commit
2111c41836
6 changed files with 94 additions and 25 deletions
|
|
@ -11,6 +11,7 @@ import android.os.CountDownTimer;
|
|||
import android.os.SystemClock;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.support.v4.app.DialogFragment;
|
||||
import android.widget.CheckBox;
|
||||
import android.widget.FrameLayout;
|
||||
import android.widget.TextView;
|
||||
import android.widget.Toast;
|
||||
|
|
@ -20,6 +21,7 @@ import com.afollestad.materialdialogs.MaterialDialog;
|
|||
import com.afollestad.materialdialogs.internal.ThemeSingleton;
|
||||
import com.kabouzeid.gramophone.App;
|
||||
import com.kabouzeid.gramophone.R;
|
||||
import com.kabouzeid.gramophone.helper.MusicPlayerRemote;
|
||||
import com.kabouzeid.gramophone.service.MusicService;
|
||||
import com.kabouzeid.gramophone.ui.activities.PurchaseActivity;
|
||||
import com.kabouzeid.gramophone.util.MusicUtil;
|
||||
|
|
@ -37,6 +39,8 @@ public class SleepTimerDialog extends DialogFragment {
|
|||
SeekArc seekArc;
|
||||
@BindView(R.id.timer_display)
|
||||
TextView timerDisplay;
|
||||
@BindView(R.id.should_finish_last_song)
|
||||
CheckBox shouldFinishLastSong;
|
||||
|
||||
private int seekArcProgress;
|
||||
private MaterialDialog materialDialog;
|
||||
|
|
@ -65,6 +69,8 @@ public class SleepTimerDialog extends DialogFragment {
|
|||
return;
|
||||
}
|
||||
|
||||
PreferenceUtil.getInstance(getActivity()).setSleepTimerFinishMusic(shouldFinishLastSong.isChecked());
|
||||
|
||||
final int minutes = seekArcProgress;
|
||||
|
||||
PendingIntent pi = makeTimerPendingIntent(PendingIntent.FLAG_CANCEL_CURRENT);
|
||||
|
|
@ -87,6 +93,12 @@ public class SleepTimerDialog extends DialogFragment {
|
|||
previous.cancel();
|
||||
Toast.makeText(getActivity(), getActivity().getResources().getString(R.string.sleep_timer_canceled), Toast.LENGTH_SHORT).show();
|
||||
}
|
||||
|
||||
MusicService musicService = MusicPlayerRemote.musicService;
|
||||
if (musicService != null && musicService.pendingQuit) {
|
||||
musicService.pendingQuit = false;
|
||||
Toast.makeText(getActivity(), getActivity().getResources().getString(R.string.sleep_timer_canceled), Toast.LENGTH_SHORT).show();
|
||||
}
|
||||
})
|
||||
.showListener(dialog -> {
|
||||
if (makeTimerPendingIntent(PendingIntent.FLAG_NO_CREATE) != null) {
|
||||
|
|
@ -102,6 +114,9 @@ public class SleepTimerDialog extends DialogFragment {
|
|||
|
||||
ButterKnife.bind(this, materialDialog.getCustomView());
|
||||
|
||||
boolean finishMusic = PreferenceUtil.getInstance(getActivity()).getSleepTimerFinishMusic();
|
||||
shouldFinishLastSong.setChecked(finishMusic);
|
||||
|
||||
seekArc.setProgressColor(ThemeSingleton.get().positiveColor.getDefaultColor());
|
||||
seekArc.setThumbColor(ThemeSingleton.get().positiveColor.getDefaultColor());
|
||||
|
||||
|
|
@ -153,8 +168,20 @@ public class SleepTimerDialog extends DialogFragment {
|
|||
}
|
||||
|
||||
private Intent makeTimerIntent() {
|
||||
return new Intent(getActivity(), MusicService.class)
|
||||
.setAction(MusicService.ACTION_QUIT);
|
||||
Intent intent = new Intent(getActivity(), MusicService.class);
|
||||
if (shouldFinishLastSong.isChecked()) {
|
||||
return intent.setAction(MusicService.ACTION_PENDING_QUIT);
|
||||
}
|
||||
return intent.setAction(MusicService.ACTION_QUIT);
|
||||
}
|
||||
|
||||
private void updateCancelButton() {
|
||||
MusicService musicService = MusicPlayerRemote.musicService;
|
||||
if (musicService != null && musicService.pendingQuit) {
|
||||
materialDialog.setActionButton(DialogAction.NEUTRAL, materialDialog.getContext().getString(R.string.cancel_current_timer));
|
||||
} else {
|
||||
materialDialog.setActionButton(DialogAction.NEUTRAL, null);
|
||||
}
|
||||
}
|
||||
|
||||
private class TimerUpdater extends CountDownTimer {
|
||||
|
|
@ -169,7 +196,7 @@ public class SleepTimerDialog extends DialogFragment {
|
|||
|
||||
@Override
|
||||
public void onFinish() {
|
||||
materialDialog.setActionButton(DialogAction.NEUTRAL, null);
|
||||
updateCancelButton();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue