day and alarm time sorting order

This commit is contained in:
Pavel Poley 2022-06-15 15:59:02 +03:00
parent d6530be356
commit aae9f1ea2f
5 changed files with 39 additions and 9 deletions

View File

@ -6,6 +6,7 @@ import com.simplemobiletools.clock.R
import com.simplemobiletools.clock.extensions.config
import com.simplemobiletools.clock.helpers.SORT_BY_ALARM_TIME
import com.simplemobiletools.clock.helpers.SORT_BY_CREATION_ORDER
import com.simplemobiletools.clock.helpers.SORT_BY_DATE_AND_TIME
import com.simplemobiletools.commons.activities.BaseSimpleActivity
import com.simplemobiletools.commons.extensions.setupDialogStuff
import kotlinx.android.synthetic.main.dialog_change_alarm_sort.view.*
@ -14,6 +15,7 @@ class ChangeAlarmSortDialog(val activity: BaseSimpleActivity, val callback: () -
private var view: View = activity.layoutInflater.inflate(R.layout.dialog_change_alarm_sort, null).apply {
val activeRadioButton = when (activity.config.alarmSort) {
SORT_BY_ALARM_TIME -> sorting_dialog_radio_alarm_time
SORT_BY_DATE_AND_TIME -> sorting_dialog_radio_day_and_time
else -> sorting_dialog_radio_creation_order
}
activeRadioButton?.isChecked = true
@ -31,6 +33,7 @@ class ChangeAlarmSortDialog(val activity: BaseSimpleActivity, val callback: () -
private fun dialogConfirmed() {
val sort = when (view.sorting_dialog_radio_sorting.checkedRadioButtonId) {
R.id.sorting_dialog_radio_alarm_time -> SORT_BY_ALARM_TIME
R.id.sorting_dialog_radio_day_and_time -> SORT_BY_DATE_AND_TIME
else -> SORT_BY_CREATION_ORDER
}

View File

@ -31,9 +31,7 @@ import com.simplemobiletools.clock.receivers.HideAlarmReceiver
import com.simplemobiletools.clock.receivers.HideTimerReceiver
import com.simplemobiletools.clock.services.SnoozeService
import com.simplemobiletools.commons.extensions.*
import com.simplemobiletools.commons.helpers.DAY_MINUTES
import com.simplemobiletools.commons.helpers.EVERY_DAY_BIT
import com.simplemobiletools.commons.helpers.SILENT
import com.simplemobiletools.commons.helpers.*
import java.util.*
import kotlin.math.pow
@ -468,3 +466,23 @@ fun Context.getAlarmSelectedDaysString(bitMask: Int): String {
else -> getSelectedDaysString(bitMask)
}
}
fun Context.firstDayOrder(bitMask: Int): Int {
if (bitMask == TODAY_BIT) return -2
if (bitMask == TOMORROW_BIT) return -1
val dayBits = arrayListOf(MONDAY_BIT, TUESDAY_BIT, WEDNESDAY_BIT, THURSDAY_BIT, FRIDAY_BIT, SATURDAY_BIT, SUNDAY_BIT)
val sundayFirst = baseConfig.isSundayFirst
if (sundayFirst) {
dayBits.moveLastItemToFront()
}
dayBits.forEach { bit ->
if (bitMask and bit != 0) {
return if (bit == SUNDAY_BIT && sundayFirst) 0 else bit
}
}
return bitMask
}

View File

@ -18,6 +18,7 @@ import com.simplemobiletools.clock.models.Alarm
import com.simplemobiletools.commons.extensions.getProperTextColor
import com.simplemobiletools.commons.extensions.toast
import com.simplemobiletools.commons.extensions.updateTextColors
import com.simplemobiletools.commons.helpers.SORT_BY_DATE_CREATED
import com.simplemobiletools.commons.helpers.ensureBackgroundThread
import com.simplemobiletools.commons.models.AlarmSound
import kotlinx.android.synthetic.main.fragment_alarm.view.*
@ -77,12 +78,11 @@ class AlarmFragment : Fragment(), ToggleAlarmInterface {
private fun setupAlarms() {
alarms = context?.dbHelper?.getAlarms() ?: return
alarms.sortBy {
if (requireContext().config.alarmSort == SORT_BY_ALARM_TIME) {
it.timeInMinutes
} else {
it.id
}
when (requireContext().config.alarmSort) {
SORT_BY_ALARM_TIME -> alarms.sortBy { it.timeInMinutes }
SORT_BY_DATE_CREATED -> alarms.sortBy { it.id }
SORT_BY_DATE_AND_TIME -> alarms.sortWith(compareBy<Alarm> { requireContext().firstDayOrder(it.days) }.thenBy { it.timeInMinutes })
}
if (context?.getNextAlarm()?.isEmpty() == true) {

View File

@ -54,6 +54,7 @@ const val SORT_BY_TOTAL_TIME = 4
// alarm sorting
const val SORT_BY_CREATION_ORDER = 0
const val SORT_BY_ALARM_TIME = 1
const val SORT_BY_DATE_AND_TIME = 2
const val TODAY_BIT = -1
const val TOMORROW_BIT = -2

View File

@ -29,5 +29,13 @@
android:paddingBottom="@dimen/medium_margin"
android:text="@string/sort_by_alarm_time" />
<com.simplemobiletools.commons.views.MyCompatRadioButton
android:id="@+id/sorting_dialog_radio_day_and_time"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingTop="@dimen/medium_margin"
android:paddingBottom="@dimen/medium_margin"
android:text="@string/sort_by_day_and_alarm_time" />
</RadioGroup>
</ScrollView>