package com.simplecity.amp_library.utils; import android.app.Activity; import android.content.Context; import android.content.SharedPreferences; import android.os.CountDownTimer; import android.preference.PreferenceManager; import android.view.LayoutInflater; import android.view.View; import android.widget.CheckBox; import com.afollestad.materialdialogs.MaterialDialog; import com.doomonafireball.betterpickers.hmspicker.HmsPicker; import com.doomonafireball.betterpickers.hmspicker.HmsView; import com.simplecity.amp_library.R; /** * Puts the music to sleep after a given amount of time */ public final class SleepTimer { private static final String FONT = "fonts/AndroidClockMono-Thin.ttf"; public SleepTimer() { } /** * Constructor for <code>SleepTimer</code> * * @param context The {@link Activity} to use * @param active True if the timer is active, false otherwise * @param remaining The remaining time of the current track */ public static void createTimer(final Context context, boolean active, final long remaining) { final View view = LayoutInflater.from(context).inflate(R.layout.dialog_timer, null); final HmsPicker hmsPicker = (HmsPicker) view.findViewById(R.id.hms_picker); final HmsView hmsView = (HmsView) view.findViewById(R.id.hms_view); ThemeUtils.themeHmsPicker(hmsPicker); ThemeUtils.themeHmsView(hmsView); final long timeMillis = remaining - System.currentTimeMillis(); final int minutes = (int) ((timeMillis / (1000 * 60)) % 60); final int hours = (int) ((timeMillis / (1000 * 60 * 60)) % 24); int minutesFirstDigit = 0; int minuteSecondDigit = 0; if (minutes > 0) { minutesFirstDigit = minutes / 10; minuteSecondDigit = minutes % 10; } hmsView.setTime(hours, minutesFirstDigit, minuteSecondDigit); final SharedPreferences mPrefs; mPrefs = PreferenceManager.getDefaultSharedPreferences(context); final CheckBox checkBox = (CheckBox) view.findViewById(R.id.checkbox); checkBox.setChecked(mPrefs.getBoolean("sleep_timer_wait_til_end", true)); checkBox.setOnCheckedChangeListener((compoundButton, b) -> mPrefs.edit().putBoolean("sleep_timer_wait_til_end", b).apply()); final MaterialDialog.Builder builder = DialogUtils.getBuilder(context) .customView(view, false) .negativeText(R.string.close); if (active) { hmsView.setVisibility(View.VISIBLE); hmsPicker.setVisibility(View.GONE); builder.positiveText(R.string.timer_stop) .onPositive((materialDialog, dialogAction) -> MusicUtils.stopTimer()); } else { hmsView.setVisibility(View.GONE); hmsPicker.setVisibility(View.VISIBLE); builder.positiveText(R.string.timer_set) .onPositive((materialDialog, dialogAction) -> { if (hmsPicker.getTime() != 0) { MusicUtils.setTimer(hmsPicker.getTime() * 1000); } hmsPicker.setVisibility(View.GONE); hmsView.setVisibility(View.VISIBLE); }); } builder.show(); new CountDownTimer(timeMillis, 1000) { @Override public void onTick(long millisUntilFinished) { final long timeMillis = remaining - System.currentTimeMillis(); final int minutes = (int) ((timeMillis / (1000 * 60)) % 60); final int hours = (int) ((timeMillis / (1000 * 60 * 60)) % 24); int minutesFirstDigit = 0; int minuteSecondDigit = 0; if (minutes > 0) { minutesFirstDigit = minutes / 10; minuteSecondDigit = minutes % 10; } hmsView.setTime(hours, minutesFirstDigit, minuteSecondDigit); } @Override public void onFinish() { } }.start(); } }