Simple-Clock/app/src/main/kotlin/com/simplemobiletools/clock/fragments/AlarmFragment.kt

159 lines
5.8 KiB
Kotlin
Raw Normal View History

2018-02-28 12:50:52 +01:00
package com.simplemobiletools.clock.fragments
import android.os.Bundle
2021-04-19 15:34:52 +02:00
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.Fragment
import com.simplemobiletools.clock.activities.MainActivity
2018-03-04 11:21:36 +01:00
import com.simplemobiletools.clock.activities.SimpleActivity
import com.simplemobiletools.clock.adapters.AlarmsAdapter
import com.simplemobiletools.clock.databinding.FragmentAlarmBinding
2020-12-26 14:09:14 +01:00
import com.simplemobiletools.clock.dialogs.ChangeAlarmSortDialog
2018-03-05 17:11:04 +01:00
import com.simplemobiletools.clock.dialogs.EditAlarmDialog
2018-03-13 16:32:56 +01:00
import com.simplemobiletools.clock.extensions.*
2021-04-19 15:34:52 +02:00
import com.simplemobiletools.clock.helpers.*
import com.simplemobiletools.clock.interfaces.ToggleAlarmInterface
2018-03-05 17:11:04 +01:00
import com.simplemobiletools.clock.models.Alarm
2023-05-07 18:55:37 +02:00
import com.simplemobiletools.commons.dialogs.PermissionRequiredDialog
2022-04-20 20:05:21 +02:00
import com.simplemobiletools.commons.extensions.getProperTextColor
2023-07-17 15:02:59 +02:00
import com.simplemobiletools.commons.extensions.openNotificationSettings
import com.simplemobiletools.commons.extensions.toast
2018-03-03 23:00:48 +01:00
import com.simplemobiletools.commons.extensions.updateTextColors
2022-06-15 14:59:02 +02:00
import com.simplemobiletools.commons.helpers.SORT_BY_DATE_CREATED
import com.simplemobiletools.commons.helpers.ensureBackgroundThread
import com.simplemobiletools.commons.models.AlarmSound
2018-02-28 12:50:52 +01:00
class AlarmFragment : Fragment(), ToggleAlarmInterface {
private var alarms = ArrayList<Alarm>()
private var currentEditAlarmDialog: EditAlarmDialog? = null
private var storedTextColor = 0
private lateinit var binding: FragmentAlarmBinding
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View {
storeStateVariables()
binding = FragmentAlarmBinding.inflate(inflater, container, false)
return binding.root
}
2018-03-03 23:00:48 +01:00
override fun onResume() {
super.onResume()
setupViews()
2022-04-20 20:05:21 +02:00
val configTextColor = requireContext().getProperTextColor()
if (storedTextColor != configTextColor) {
(binding.alarmsList.adapter as AlarmsAdapter).updateTextColor(configTextColor)
}
}
override fun onPause() {
super.onPause()
storeStateVariables()
}
2021-04-19 15:34:52 +02:00
fun showSortingDialog() {
2020-12-26 14:09:14 +01:00
ChangeAlarmSortDialog(activity as SimpleActivity) {
setupAlarms()
}
}
private fun storeStateVariables() {
2022-04-20 20:05:21 +02:00
storedTextColor = requireContext().getProperTextColor()
2018-03-03 23:00:48 +01:00
}
private fun setupViews() {
binding.apply {
requireContext().updateTextColors(alarmFragment)
alarmFab.setOnClickListener {
val newAlarm = root.context.createNewAlarm(DEFAULT_ALARM_MINUTES, 0)
newAlarm.isEnabled = true
2020-11-05 11:05:21 +01:00
newAlarm.days = getTomorrowBit()
2018-03-05 17:11:04 +01:00
openEditAlarm(newAlarm)
2018-03-03 23:00:48 +01:00
}
}
2018-03-04 11:21:36 +01:00
setupAlarms()
}
private fun setupAlarms() {
2021-04-19 15:34:52 +02:00
alarms = context?.dbHelper?.getAlarms() ?: return
2022-06-15 14:59:02 +02:00
when (requireContext().config.alarmSort) {
SORT_BY_ALARM_TIME -> alarms.sortBy { it.timeInMinutes }
SORT_BY_DATE_CREATED -> alarms.sortBy { it.id }
2022-06-16 10:17:09 +02:00
SORT_BY_DATE_AND_TIME -> alarms.sortWith(compareBy<Alarm> {
requireContext().firstDayOrder(it.days)
}.thenBy {
it.timeInMinutes
})
2021-04-19 15:34:52 +02:00
}
context?.getEnabledAlarms { enabledAlarms ->
if (enabledAlarms.isNullOrEmpty()) {
2023-07-06 17:44:29 +02:00
alarms.forEach {
if (it.days == TODAY_BIT && it.isEnabled && it.timeInMinutes <= getCurrentDayMinutes()) {
it.isEnabled = false
ensureBackgroundThread {
context?.dbHelper?.updateAlarmEnabledState(it.id, false)
}
}
}
}
}
val currAdapter = binding.alarmsList.adapter
2018-03-04 11:21:36 +01:00
if (currAdapter == null) {
AlarmsAdapter(activity as SimpleActivity, alarms, this, binding.alarmsList) {
2018-03-05 17:11:04 +01:00
openEditAlarm(it as Alarm)
}.apply {
binding.alarmsList.adapter = this
2018-03-04 11:21:36 +01:00
}
} else {
(currAdapter as AlarmsAdapter).updateItems(alarms)
}
2018-03-03 23:00:48 +01:00
}
2018-03-05 17:11:04 +01:00
private fun openEditAlarm(alarm: Alarm) {
currentEditAlarmDialog = EditAlarmDialog(activity as SimpleActivity, alarm) {
alarm.id = it
currentEditAlarmDialog = null
setupAlarms()
2018-03-06 21:20:10 +01:00
checkAlarmState(alarm)
2018-03-05 17:11:04 +01:00
}
2018-03-03 23:00:48 +01:00
}
override fun alarmToggled(id: Int, isEnabled: Boolean) {
(activity as SimpleActivity).handleFullScreenNotificationsPermission { granted ->
2023-05-07 18:55:37 +02:00
if (granted) {
if (requireContext().dbHelper.updateAlarmEnabledState(id, isEnabled)) {
val alarm = alarms.firstOrNull { it.id == id } ?: return@handleFullScreenNotificationsPermission
alarm.isEnabled = isEnabled
checkAlarmState(alarm)
} else {
requireActivity().toast(com.simplemobiletools.commons.R.string.unknown_error_occurred)
}
requireContext().updateWidgets()
} else {
2023-07-17 15:02:59 +02:00
PermissionRequiredDialog(
activity as SimpleActivity,
com.simplemobiletools.commons.R.string.allow_notifications_reminders,
2023-07-17 15:02:59 +02:00
{ (activity as SimpleActivity).openNotificationSettings() })
}
}
}
2018-03-05 23:49:14 +01:00
2018-03-06 21:20:10 +01:00
private fun checkAlarmState(alarm: Alarm) {
if (alarm.isEnabled) {
context?.scheduleNextAlarm(alarm, true)
2018-03-06 21:20:10 +01:00
} else {
context?.cancelAlarmClock(alarm)
}
(activity as? MainActivity)?.updateClockTabAlarm()
}
fun updateAlarmSound(alarmSound: AlarmSound) {
currentEditAlarmDialog?.updateSelectedAlarmSound(alarmSound)
}
2018-02-28 12:50:52 +01:00
}