@@ -11,8 +11,18 @@ import org.fossify.clock.adapters.AlarmsAdapter
1111import org.fossify.clock.databinding.FragmentAlarmBinding
1212import org.fossify.clock.dialogs.ChangeAlarmSortDialog
1313import org.fossify.clock.dialogs.EditAlarmDialog
14- import org.fossify.clock.extensions.*
15- import org.fossify.clock.helpers.*
14+ import org.fossify.clock.extensions.cancelAlarmClock
15+ import org.fossify.clock.extensions.config
16+ import org.fossify.clock.extensions.createNewAlarm
17+ import org.fossify.clock.extensions.dbHelper
18+ import org.fossify.clock.extensions.firstDayOrder
19+ import org.fossify.clock.extensions.handleFullScreenNotificationsPermission
20+ import org.fossify.clock.extensions.scheduleNextAlarm
21+ import org.fossify.clock.extensions.updateWidgets
22+ import org.fossify.clock.helpers.DEFAULT_ALARM_MINUTES
23+ import org.fossify.clock.helpers.SORT_BY_ALARM_TIME
24+ import org.fossify.clock.helpers.SORT_BY_DATE_AND_TIME
25+ import org.fossify.clock.helpers.getTomorrowBit
1626import org.fossify.clock.interfaces.ToggleAlarmInterface
1727import org.fossify.clock.models.Alarm
1828import org.fossify.clock.models.AlarmEvent
@@ -34,7 +44,11 @@ class AlarmFragment : Fragment(), ToggleAlarmInterface {
3444
3545 private lateinit var binding: FragmentAlarmBinding
3646
37- override fun onCreateView (inflater : LayoutInflater , container : ViewGroup ? , savedInstanceState : Bundle ? ): View {
47+ override fun onCreateView (
48+ inflater : LayoutInflater ,
49+ container : ViewGroup ? ,
50+ savedInstanceState : Bundle ? ,
51+ ): View {
3852 binding = FragmentAlarmBinding .inflate(inflater, container, false )
3953 return binding.root
4054 }
@@ -74,71 +88,76 @@ class AlarmFragment : Fragment(), ToggleAlarmInterface {
7488 setupAlarms()
7589 }
7690
77- private fun setupAlarms () {
78- alarms = context?.dbHelper?.getAlarms() ? : return
79-
80- when (requireContext().config.alarmSort) {
81- SORT_BY_ALARM_TIME -> alarms.sortBy { it.timeInMinutes }
82- SORT_BY_DATE_CREATED -> alarms.sortBy { it.id }
83- SORT_BY_DATE_AND_TIME -> alarms.sortWith(compareBy<Alarm > {
84- requireContext().firstDayOrder(it.days)
85- }.thenBy {
86- it.timeInMinutes
87- })
88-
89- SORT_BY_CUSTOM -> {
90- val customAlarmsSortOrderString = activity?.config?.alarmsCustomSorting
91- if (customAlarmsSortOrderString == " " ) {
92- alarms.sortBy { it.id }
93- } else {
94- val customAlarmsSortOrder: List <Int > = customAlarmsSortOrderString?.split(" , " )?.map { it.toInt() }!!
95- val alarmsIdValueMap = alarms.associateBy { it.id }
96-
97- val sortedAlarms: ArrayList <Alarm > = ArrayList ()
98- customAlarmsSortOrder.map { id ->
99- if (alarmsIdValueMap[id] != null ) {
100- sortedAlarms.add(alarmsIdValueMap[id] as Alarm )
101- }
102- }
103-
104- alarms = (sortedAlarms + alarms.filter { it !in sortedAlarms }) as ArrayList <Alarm >
91+ private fun getSortedAlarms (callback : (alarms: ArrayList <Alarm >) -> Unit ) {
92+ val safeContext = context ? : return
93+ ensureBackgroundThread {
94+ var newAlarms = context?.dbHelper?.getAlarms()
95+ if (newAlarms == null ) {
96+ activity?.runOnUiThread {
97+ callback(arrayListOf ())
10598 }
99+ return @ensureBackgroundThread
106100 }
107- }
108- context?.getEnabledAlarms { enabledAlarms ->
109- if (enabledAlarms.isNullOrEmpty()) {
110- val removedAlarms = mutableListOf<Alarm >()
111- alarms.forEach {
112- if (it.days == TODAY_BIT && it.isEnabled && it.timeInMinutes <= getCurrentDayMinutes()) {
113- it.isEnabled = false
114- ensureBackgroundThread {
115- if (it.oneShot) {
116- it.isEnabled = false
117- context?.dbHelper?.deleteAlarms(arrayListOf (it))
118- removedAlarms.add(it)
119- } else {
120- context?.dbHelper?.updateAlarmEnabledState(it.id, false )
101+
102+ when (safeContext.config.alarmSort) {
103+ SORT_BY_ALARM_TIME -> newAlarms.sortBy { it.timeInMinutes }
104+ SORT_BY_DATE_CREATED -> newAlarms.sortBy { it.id }
105+ SORT_BY_DATE_AND_TIME -> newAlarms.sortWith(compareBy<Alarm > {
106+ safeContext.firstDayOrder(it.days)
107+ }.thenBy {
108+ it.timeInMinutes
109+ })
110+
111+ SORT_BY_CUSTOM -> {
112+ val customAlarmsSortOrderString = activity?.config?.alarmsCustomSorting
113+ if (customAlarmsSortOrderString == " " ) {
114+ newAlarms.sortBy { it.id }
115+ } else {
116+ val customAlarmsSortOrder: List <Int > =
117+ customAlarmsSortOrderString?.split(" , " )?.map { it.toInt() }!!
118+ val alarmsIdValueMap = newAlarms.associateBy { it.id }
119+
120+ val sortedAlarms: ArrayList <Alarm > = ArrayList ()
121+ customAlarmsSortOrder.map { id ->
122+ if (alarmsIdValueMap[id] != null ) {
123+ sortedAlarms.add(alarmsIdValueMap[id] as Alarm )
121124 }
122125 }
126+
127+ newAlarms =
128+ (sortedAlarms + newAlarms.filter { it !in sortedAlarms }) as ArrayList <Alarm >
123129 }
124130 }
125- alarms.removeAll(removedAlarms)
126131 }
127- }
128132
129- val currAdapter = binding.alarmsList.adapter
130- if (currAdapter == null ) {
131- AlarmsAdapter (activity as SimpleActivity , alarms, this , binding.alarmsList) {
132- openEditAlarm(it as Alarm )
133- }.apply {
134- binding.alarmsList.adapter = this
133+ activity?.runOnUiThread {
134+ callback(newAlarms)
135135 }
136- } else {
137- (currAdapter as AlarmsAdapter ).apply {
138- updatePrimaryColor()
139- updateBackgroundColor(requireContext().getProperBackgroundColor())
140- updateTextColor(requireContext().getProperTextColor())
141- updateItems(this @AlarmFragment.alarms)
136+ }
137+ }
138+
139+ private fun setupAlarms () {
140+ getSortedAlarms { sortedAlarms ->
141+ alarms = sortedAlarms
142+ var currAdapter = binding.alarmsList.adapter as ? AlarmsAdapter
143+ if (currAdapter == null ) {
144+ currAdapter = AlarmsAdapter (
145+ activity = activity as SimpleActivity ,
146+ alarms = alarms,
147+ toggleAlarmInterface = this ,
148+ recyclerView = binding.alarmsList
149+ ) {
150+ openEditAlarm(it as Alarm )
151+ }.apply {
152+ binding.alarmsList.adapter = this
153+ }
154+ } else {
155+ currAdapter.apply {
156+ updatePrimaryColor()
157+ updateBackgroundColor(requireContext().getProperBackgroundColor())
158+ updateTextColor(requireContext().getProperTextColor())
159+ updateItems(alarms)
160+ }
142161 }
143162 }
144163 }
@@ -156,7 +175,8 @@ class AlarmFragment : Fragment(), ToggleAlarmInterface {
156175 (activity as SimpleActivity ).handleFullScreenNotificationsPermission { granted ->
157176 if (granted) {
158177 if (requireContext().dbHelper.updateAlarmEnabledState(id, isEnabled)) {
159- val alarm = alarms.firstOrNull { it.id == id } ? : return @handleFullScreenNotificationsPermission
178+ val alarm = alarms.firstOrNull { it.id == id }
179+ ? : return @handleFullScreenNotificationsPermission
160180 alarm.isEnabled = isEnabled
161181 checkAlarmState(alarm)
162182 if (! alarm.isEnabled && alarm.oneShot) {
0 commit comments