Show remaining time in Sleep timer dialog

This commit is contained in:
Prathamesh More 2022-06-06 00:08:03 +05:30
parent d2a7588861
commit 7b5e7ecef8
4 changed files with 81 additions and 56 deletions

View file

@ -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,24 +88,15 @@ 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) { _, _ ->
timerUpdater.cancel()
val previous = makeTimerPendingIntent(PendingIntent.FLAG_NO_CREATE) val previous = makeTimerPendingIntent(PendingIntent.FLAG_NO_CREATE)
if (previous != null) { if (previous != null) {
val am = requireContext().getSystemService<AlarmManager>() val am = requireContext().getSystemService<AlarmManager>()
@ -124,8 +118,35 @@ class SleepTimerDialog : DialogFragment() {
} }
} }
} }
.create() } else {
.colorButtons() 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()
}
}
setView(binding.root)
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()
}
} }
} }

View file

@ -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)
} }

View file

@ -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

View file

@ -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()
} }