@@ -8,6 +8,7 @@ import android.content.pm.PackageManager
88import android.content.res.Configuration
99import android.os.Build
1010import android.os.Bundle
11+ import android.text.format.DateFormat
1112import android.util.Log
1213import android.view.View
1314import android.view.ViewGroup
@@ -57,6 +58,7 @@ import com.github.andreyasadchy.xtra.util.FragmentUtils
5758import com.github.andreyasadchy.xtra.util.LifecycleListener
5859import com.github.andreyasadchy.xtra.util.TwitchApiHelper
5960import com.github.andreyasadchy.xtra.util.disable
61+ import com.github.andreyasadchy.xtra.util.getAlertDialogBuilder
6062import com.github.andreyasadchy.xtra.util.gone
6163import com.github.andreyasadchy.xtra.util.hideKeyboard
6264import com.github.andreyasadchy.xtra.util.isInPortraitOrientation
@@ -66,6 +68,8 @@ import com.github.andreyasadchy.xtra.util.shortToast
6668import com.github.andreyasadchy.xtra.util.toast
6769import com.github.andreyasadchy.xtra.util.visible
6870import com.google.android.material.bottomsheet.BottomSheetDialogFragment
71+ import com.google.android.material.timepicker.MaterialTimePicker
72+ import com.google.android.material.timepicker.TimeFormat
6973import com.google.common.util.concurrent.ListenableFuture
7074import com.google.common.util.concurrent.MoreExecutors
7175import kotlinx.coroutines.delay
@@ -517,7 +521,7 @@ abstract class BasePlayerFragment : BaseNetworkFragment(), LifecycleListener, Sl
517521 } else if (((activity as ? MainActivity )?.getSleepTimerTimeLeft() ? : 0 ) > 0L ) {
518522 context.toast(R .string.timer_canceled)
519523 }
520- if (lockScreen != prefs.getBoolean(C .SLEEP_TIMER_LOCK , true )) {
524+ if (lockScreen != prefs.getBoolean(C .SLEEP_TIMER_LOCK , false )) {
521525 prefs.edit { putBoolean(C .SLEEP_TIMER_LOCK , lockScreen) }
522526 }
523527 (activity as ? MainActivity )?.setSleepTimer(durationMs)
@@ -567,7 +571,35 @@ abstract class BasePlayerFragment : BaseNetworkFragment(), LifecycleListener, Sl
567571 }
568572
569573 fun showSleepTimerDialog () {
570- SleepTimerDialog .show(childFragmentManager, (activity as ? MainActivity )?.getSleepTimerTimeLeft() ? : 0 )
574+ if (requireContext().prefs().getBoolean(C .SLEEP_TIMER_USE_TIME_PICKER , false )) {
575+ if (((activity as ? MainActivity )?.getSleepTimerTimeLeft() ? : 0 ) > 0L ) {
576+ requireContext().getAlertDialogBuilder()
577+ .setMessage(getString(R .string.stop_sleep_timer_message))
578+ .setPositiveButton(getString(R .string.yes)) { _, _ ->
579+ onSleepTimerChanged(- 1L , 0 , 0 , requireContext().prefs().getBoolean(C .SLEEP_TIMER_LOCK , false ))
580+ }
581+ .setNegativeButton(getString(R .string.no), null )
582+ .show()
583+ } else {
584+ val savedValue = requireContext().prefs().getInt(C .SLEEP_TIMER_TIME , 15 )
585+ val picker = MaterialTimePicker .Builder ()
586+ .setTimeFormat(if (DateFormat .is24HourFormat(requireContext())) TimeFormat .CLOCK_24H else TimeFormat .CLOCK_12H )
587+ .setInputMode(MaterialTimePicker .INPUT_MODE_CLOCK )
588+ .setHour(savedValue / 60 )
589+ .setMinute(savedValue % 60 )
590+ .build()
591+ picker.addOnPositiveButtonClickListener {
592+ val minutes = TwitchApiHelper .getMinutesLeft(picker.hour, picker.minute)
593+ onSleepTimerChanged(minutes * 60_000L , minutes / 60 , minutes % 60 , requireContext().prefs().getBoolean(C .SLEEP_TIMER_LOCK , false ))
594+ requireContext().prefs().edit {
595+ putInt(C .SLEEP_TIMER_TIME , picker.hour * 60 + picker.minute)
596+ }
597+ }
598+ picker.show(childFragmentManager, null )
599+ }
600+ } else {
601+ SleepTimerDialog .show(childFragmentManager, (activity as ? MainActivity )?.getSleepTimerTimeLeft() ? : 0 )
602+ }
571603 }
572604
573605 fun showQualityDialog () {
0 commit comments