Show remaining time in Sleep timer dialog
This commit is contained in:
parent
d2a7588861
commit
7b5e7ecef8
4 changed files with 81 additions and 56 deletions
|
@ -17,6 +17,7 @@ package code.name.monkey.retromusic.dialogs
|
||||||
import android.app.AlarmManager
|
import android.app.AlarmManager
|
||||||
import android.app.Dialog
|
import android.app.Dialog
|
||||||
import android.app.PendingIntent
|
import android.app.PendingIntent
|
||||||
|
import android.content.DialogInterface
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.os.CountDownTimer
|
import android.os.CountDownTimer
|
||||||
|
@ -25,43 +26,45 @@ import android.widget.CheckBox
|
||||||
import android.widget.SeekBar
|
import android.widget.SeekBar
|
||||||
import android.widget.TextView
|
import android.widget.TextView
|
||||||
import android.widget.Toast
|
import android.widget.Toast
|
||||||
|
import androidx.appcompat.app.AlertDialog
|
||||||
import androidx.core.content.getSystemService
|
import androidx.core.content.getSystemService
|
||||||
|
import androidx.core.view.isVisible
|
||||||
import androidx.fragment.app.DialogFragment
|
import androidx.fragment.app.DialogFragment
|
||||||
import code.name.monkey.appthemehelper.util.VersionUtils
|
import code.name.monkey.appthemehelper.util.VersionUtils
|
||||||
import code.name.monkey.retromusic.R
|
import code.name.monkey.retromusic.R
|
||||||
import code.name.monkey.retromusic.databinding.DialogSleepTimerBinding
|
import code.name.monkey.retromusic.databinding.DialogSleepTimerBinding
|
||||||
import code.name.monkey.retromusic.extensions.addAccentColor
|
import code.name.monkey.retromusic.extensions.addAccentColor
|
||||||
import code.name.monkey.retromusic.extensions.colorButtons
|
|
||||||
import code.name.monkey.retromusic.extensions.materialDialog
|
import code.name.monkey.retromusic.extensions.materialDialog
|
||||||
import code.name.monkey.retromusic.helper.MusicPlayerRemote
|
import code.name.monkey.retromusic.helper.MusicPlayerRemote
|
||||||
import code.name.monkey.retromusic.service.MusicService
|
import code.name.monkey.retromusic.service.MusicService
|
||||||
import code.name.monkey.retromusic.service.MusicService.Companion.ACTION_PENDING_QUIT
|
import code.name.monkey.retromusic.service.MusicService.Companion.ACTION_PENDING_QUIT
|
||||||
import code.name.monkey.retromusic.service.MusicService.Companion.ACTION_QUIT
|
import code.name.monkey.retromusic.service.MusicService.Companion.ACTION_QUIT
|
||||||
|
import code.name.monkey.retromusic.util.MusicUtil
|
||||||
import code.name.monkey.retromusic.util.PreferenceUtil
|
import code.name.monkey.retromusic.util.PreferenceUtil
|
||||||
import com.afollestad.materialdialogs.MaterialDialog
|
|
||||||
import com.afollestad.materialdialogs.WhichButton
|
|
||||||
import com.afollestad.materialdialogs.actions.getActionButton
|
|
||||||
|
|
||||||
class SleepTimerDialog : DialogFragment() {
|
class SleepTimerDialog : DialogFragment() {
|
||||||
|
|
||||||
private var seekArcProgress: Int = 0
|
private var seekArcProgress: Int = 0
|
||||||
private lateinit var timerUpdater: TimerUpdater
|
private lateinit var timerUpdater: TimerUpdater
|
||||||
private lateinit var dialog: MaterialDialog
|
private lateinit var dialog: AlertDialog
|
||||||
private lateinit var shouldFinishLastSong: CheckBox
|
|
||||||
private lateinit var timerDisplay: TextView
|
private var _binding: DialogSleepTimerBinding? = null
|
||||||
|
private val binding get() = _binding!!
|
||||||
|
|
||||||
|
private val shouldFinishLastSong: CheckBox get() = binding.shouldFinishLastSong
|
||||||
|
private val seekBar: SeekBar get() = binding.seekBar
|
||||||
|
private val timerDisplay: TextView get() = binding.timerDisplay
|
||||||
|
|
||||||
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
|
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
|
||||||
timerUpdater = TimerUpdater()
|
timerUpdater = TimerUpdater()
|
||||||
val binding = DialogSleepTimerBinding.inflate(layoutInflater)
|
_binding = DialogSleepTimerBinding.inflate(layoutInflater)
|
||||||
shouldFinishLastSong = binding.shouldFinishLastSong
|
|
||||||
timerDisplay = binding.timerDisplay
|
|
||||||
|
|
||||||
val finishMusic = PreferenceUtil.isSleepTimerFinishMusic
|
val finishMusic = PreferenceUtil.isSleepTimerFinishMusic
|
||||||
shouldFinishLastSong.apply {
|
shouldFinishLastSong.apply {
|
||||||
addAccentColor()
|
addAccentColor()
|
||||||
isChecked = finishMusic
|
isChecked = finishMusic
|
||||||
}
|
}
|
||||||
binding.seekBar.apply {
|
seekBar.apply {
|
||||||
addAccentColor()
|
addAccentColor()
|
||||||
seekArcProgress = PreferenceUtil.lastSleepTimerValue
|
seekArcProgress = PreferenceUtil.lastSleepTimerValue
|
||||||
updateTimeDisplayTime()
|
updateTimeDisplayTime()
|
||||||
|
@ -85,47 +88,65 @@ class SleepTimerDialog : DialogFragment() {
|
||||||
PreferenceUtil.lastSleepTimerValue = seekArcProgress
|
PreferenceUtil.lastSleepTimerValue = seekArcProgress
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
return materialDialog(R.string.action_sleep_timer)
|
|
||||||
.setView(binding.root)
|
|
||||||
.setPositiveButton(R.string.action_set) { _, _ ->
|
|
||||||
PreferenceUtil.isSleepTimerFinishMusic = shouldFinishLastSong.isChecked
|
|
||||||
val minutes = seekArcProgress
|
|
||||||
val pi = makeTimerPendingIntent(PendingIntent.FLAG_CANCEL_CURRENT)
|
|
||||||
val nextSleepTimerElapsedTime = SystemClock.elapsedRealtime() + minutes * 60 * 1000
|
|
||||||
PreferenceUtil.nextSleepTimerElapsedRealTime = nextSleepTimerElapsedTime.toInt()
|
|
||||||
val am = requireContext().getSystemService<AlarmManager>()
|
|
||||||
am?.setExact(AlarmManager.ELAPSED_REALTIME_WAKEUP, nextSleepTimerElapsedTime, pi)
|
|
||||||
|
|
||||||
Toast.makeText(
|
materialDialog(R.string.action_sleep_timer).apply {
|
||||||
requireContext(),
|
if (PreferenceUtil.nextSleepTimerElapsedRealTime > System.currentTimeMillis()) {
|
||||||
requireContext().resources.getString(R.string.sleep_timer_set, minutes),
|
seekBar.isVisible = false
|
||||||
Toast.LENGTH_SHORT
|
shouldFinishLastSong.isVisible = false
|
||||||
).show()
|
timerUpdater.start()
|
||||||
}
|
setPositiveButton(android.R.string.ok, null)
|
||||||
.setNegativeButton(android.R.string.cancel) { _, _ ->
|
setNegativeButton(R.string.cast_stop) { _, _ ->
|
||||||
val previous = makeTimerPendingIntent(PendingIntent.FLAG_NO_CREATE)
|
timerUpdater.cancel()
|
||||||
if (previous != null) {
|
val previous = makeTimerPendingIntent(PendingIntent.FLAG_NO_CREATE)
|
||||||
val am = requireContext().getSystemService<AlarmManager>()
|
if (previous != null) {
|
||||||
am?.cancel(previous)
|
val am = requireContext().getSystemService<AlarmManager>()
|
||||||
previous.cancel()
|
am?.cancel(previous)
|
||||||
Toast.makeText(
|
previous.cancel()
|
||||||
requireContext(),
|
|
||||||
requireContext().resources.getString(R.string.sleep_timer_canceled),
|
|
||||||
Toast.LENGTH_SHORT
|
|
||||||
).show()
|
|
||||||
val musicService = MusicPlayerRemote.musicService
|
|
||||||
if (musicService != null && musicService.pendingQuit) {
|
|
||||||
musicService.pendingQuit = false
|
|
||||||
Toast.makeText(
|
Toast.makeText(
|
||||||
requireContext(),
|
requireContext(),
|
||||||
requireContext().resources.getString(R.string.sleep_timer_canceled),
|
requireContext().resources.getString(R.string.sleep_timer_canceled),
|
||||||
Toast.LENGTH_SHORT
|
Toast.LENGTH_SHORT
|
||||||
).show()
|
).show()
|
||||||
|
val musicService = MusicPlayerRemote.musicService
|
||||||
|
if (musicService != null && musicService.pendingQuit) {
|
||||||
|
musicService.pendingQuit = false
|
||||||
|
Toast.makeText(
|
||||||
|
requireContext(),
|
||||||
|
requireContext().resources.getString(R.string.sleep_timer_canceled),
|
||||||
|
Toast.LENGTH_SHORT
|
||||||
|
).show()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
seekBar.isVisible = true
|
||||||
|
shouldFinishLastSong.isVisible = true
|
||||||
|
setPositiveButton(R.string.action_set) { _, _ ->
|
||||||
|
PreferenceUtil.isSleepTimerFinishMusic = shouldFinishLastSong.isChecked
|
||||||
|
val minutes = seekArcProgress
|
||||||
|
val pi = makeTimerPendingIntent(PendingIntent.FLAG_CANCEL_CURRENT)
|
||||||
|
val nextSleepTimerElapsedTime =
|
||||||
|
SystemClock.elapsedRealtime() + minutes * 60 * 1000
|
||||||
|
PreferenceUtil.nextSleepTimerElapsedRealTime = nextSleepTimerElapsedTime.toInt()
|
||||||
|
val am = requireContext().getSystemService<AlarmManager>()
|
||||||
|
am?.setExact(
|
||||||
|
AlarmManager.ELAPSED_REALTIME_WAKEUP,
|
||||||
|
nextSleepTimerElapsedTime,
|
||||||
|
pi
|
||||||
|
)
|
||||||
|
|
||||||
|
Toast.makeText(
|
||||||
|
requireContext(),
|
||||||
|
requireContext().resources.getString(R.string.sleep_timer_set, minutes),
|
||||||
|
Toast.LENGTH_SHORT
|
||||||
|
).show()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
.create()
|
setView(binding.root)
|
||||||
.colorButtons()
|
dialog = create()
|
||||||
|
|
||||||
|
}
|
||||||
|
return dialog
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun updateTimeDisplayTime() {
|
private fun updateTimeDisplayTime() {
|
||||||
|
@ -147,14 +168,10 @@ class SleepTimerDialog : DialogFragment() {
|
||||||
} else intent.setAction(ACTION_QUIT)
|
} else intent.setAction(ACTION_QUIT)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun updateCancelButton() {
|
override fun onDismiss(dialog: DialogInterface) {
|
||||||
val musicService = MusicPlayerRemote.musicService
|
super.onDismiss(dialog)
|
||||||
if (musicService != null && musicService.pendingQuit) {
|
timerUpdater.cancel()
|
||||||
dialog.getActionButton(WhichButton.NEUTRAL).text =
|
_binding = null
|
||||||
dialog.context.getString(R.string.cancel_current_timer)
|
|
||||||
} else {
|
|
||||||
dialog.getActionButton(WhichButton.NEUTRAL).text = null
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private inner class TimerUpdater :
|
private inner class TimerUpdater :
|
||||||
|
@ -164,10 +181,9 @@ class SleepTimerDialog : DialogFragment() {
|
||||||
) {
|
) {
|
||||||
|
|
||||||
override fun onTick(millisUntilFinished: Long) {
|
override fun onTick(millisUntilFinished: Long) {
|
||||||
|
timerDisplay.text = MusicUtil.getReadableDurationString(millisUntilFinished)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onFinish() {
|
override fun onFinish() {}
|
||||||
updateCancelButton()
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -139,9 +139,13 @@ class BlurPlayerFragment : AbsPlayerFragment(R.layout.fragment_blur),
|
||||||
updateBlur()
|
updateBlur()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun onPause() {
|
||||||
|
super.onPause()
|
||||||
|
lastRequest = null
|
||||||
|
}
|
||||||
|
|
||||||
override fun onResume() {
|
override fun onResume() {
|
||||||
super.onResume()
|
super.onResume()
|
||||||
lastRequest = null
|
|
||||||
PreferenceManager.getDefaultSharedPreferences(requireContext())
|
PreferenceManager.getDefaultSharedPreferences(requireContext())
|
||||||
.registerOnSharedPreferenceChangeListener(this)
|
.registerOnSharedPreferenceChangeListener(this)
|
||||||
}
|
}
|
||||||
|
|
|
@ -152,6 +152,11 @@ class CardBlurFragment : AbsPlayerFragment(R.layout.fragment_card_blur_player),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun onPause() {
|
||||||
|
super.onPause()
|
||||||
|
lastRequest = null
|
||||||
|
}
|
||||||
|
|
||||||
override fun onResume() {
|
override fun onResume() {
|
||||||
super.onResume()
|
super.onResume()
|
||||||
lastRequest = null
|
lastRequest = null
|
||||||
|
|
|
@ -162,7 +162,6 @@ class CirclePlayerFragment : AbsPlayerFragment(R.layout.fragment_circle_player),
|
||||||
|
|
||||||
override fun onResume() {
|
override fun onResume() {
|
||||||
super.onResume()
|
super.onResume()
|
||||||
lastRequest = null
|
|
||||||
progressViewUpdateHelper.start()
|
progressViewUpdateHelper.start()
|
||||||
if (audioVolumeObserver == null) {
|
if (audioVolumeObserver == null) {
|
||||||
audioVolumeObserver = AudioVolumeObserver(requireActivity())
|
audioVolumeObserver = AudioVolumeObserver(requireActivity())
|
||||||
|
@ -179,6 +178,7 @@ class CirclePlayerFragment : AbsPlayerFragment(R.layout.fragment_circle_player),
|
||||||
|
|
||||||
override fun onPause() {
|
override fun onPause() {
|
||||||
super.onPause()
|
super.onPause()
|
||||||
|
lastRequest = null
|
||||||
progressViewUpdateHelper.stop()
|
progressViewUpdateHelper.stop()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue