Skip to content

Commit 8a2e349

Browse files
authored
Merge pull request #142 from FossifyOrg/replace_checkboxes
Replace checkboxes with material switches
2 parents 39c1b4d + 2ed7964 commit 8a2e349

File tree

8 files changed

+110
-86
lines changed

8 files changed

+110
-86
lines changed

app/src/main/kotlin/org/fossify/clock/activities/MainActivity.kt

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,8 @@ import org.fossify.commons.helpers.LICENSE_RTL
5656
import org.fossify.commons.helpers.LICENSE_STETHO
5757
import org.fossify.commons.helpers.ensureBackgroundThread
5858
import org.fossify.commons.models.FAQItem
59+
import java.time.temporal.WeekFields
60+
import java.util.Locale
5961

6062
class MainActivity : SimpleActivity() {
6163
private var storedTextColor = 0
@@ -407,11 +409,9 @@ class MainActivity : SimpleActivity() {
407409

408410
@Deprecated("Remove this method in future releases")
409411
private fun migrateFirstDayOfWeek() {
410-
// check existing config.isSundayFirst to migrate setting value
411-
if (config.isSundayFirst) {
412-
config.firstDayOfWeek = 6
413-
// revert old setting to not run this code anymore
414-
config.isSundayFirst = false
412+
if (config.migrateFirstDayOfWeek) {
413+
config.migrateFirstDayOfWeek = false
414+
config.firstDayOfWeek = WeekFields.of(Locale.getDefault()).firstDayOfWeek.value
415415
}
416416
}
417417

app/src/main/kotlin/org/fossify/clock/activities/SettingsActivity.kt

Lines changed: 24 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ import org.fossify.commons.helpers.TAB_LAST_USED
4949
import org.fossify.commons.helpers.ensureBackgroundThread
5050
import org.fossify.commons.helpers.isTiramisuPlus
5151
import org.fossify.commons.models.RadioItem
52+
import java.time.DayOfWeek
5253
import java.util.Locale
5354
import kotlin.system.exitProcess
5455

@@ -111,6 +112,7 @@ class SettingsActivity : SimpleActivity() {
111112
binding.settingsGeneralSettingsLabel,
112113
binding.settingsAlarmTabLabel,
113114
binding.settingsTimerTabLabel,
115+
binding.settingsMigratingLabel
114116
).forEach {
115117
it.setTextColor(getProperPrimaryColor())
116118
}
@@ -198,24 +200,31 @@ class SettingsActivity : SimpleActivity() {
198200
}
199201

200202
private fun setupStartWeekOn() {
201-
val items = arrayListOf(
202-
RadioItem(6, getString(org.fossify.commons.R.string.sunday)),
203-
RadioItem(0, getString(org.fossify.commons.R.string.monday)),
204-
RadioItem(1, getString(org.fossify.commons.R.string.tuesday)),
205-
RadioItem(2, getString(org.fossify.commons.R.string.wednesday)),
206-
RadioItem(3, getString(org.fossify.commons.R.string.thursday)),
207-
RadioItem(4, getString(org.fossify.commons.R.string.friday)),
208-
RadioItem(5, getString(org.fossify.commons.R.string.saturday)),
203+
binding.settingsStartWeekOn.text = resources.getStringArray(
204+
org.fossify.commons.R.array.week_days
205+
)[config.firstDayOfWeek - 1]
206+
207+
val weekDays = arrayListOf(
208+
RadioItem(DayOfWeek.SUNDAY.value, getString(org.fossify.commons.R.string.sunday)),
209+
RadioItem(DayOfWeek.MONDAY.value, getString(org.fossify.commons.R.string.monday)),
210+
RadioItem(DayOfWeek.TUESDAY.value, getString(org.fossify.commons.R.string.tuesday)),
211+
RadioItem(DayOfWeek.WEDNESDAY.value, getString(org.fossify.commons.R.string.wednesday)),
212+
RadioItem(DayOfWeek.THURSDAY.value, getString(org.fossify.commons.R.string.thursday)),
213+
RadioItem(DayOfWeek.FRIDAY.value, getString(org.fossify.commons.R.string.friday)),
214+
RadioItem(DayOfWeek.SATURDAY.value, getString(org.fossify.commons.R.string.saturday)),
209215
)
210216

211-
binding.settingsStartWeekOn.text =
212-
resources.getStringArray(org.fossify.commons.R.array.week_days)[config.firstDayOfWeek]
213217
binding.settingsStartWeekOnHolder.setOnClickListener {
214-
RadioGroupDialog(this@SettingsActivity, items, config.firstDayOfWeek) { day ->
218+
RadioGroupDialog(
219+
activity = this,
220+
items = weekDays,
221+
checkedItemId = config.firstDayOfWeek
222+
) { day ->
215223
val firstDayOfWeek = day as Int
216224
config.firstDayOfWeek = firstDayOfWeek
217-
binding.settingsStartWeekOn.text =
218-
resources.getStringArray(org.fossify.commons.R.array.week_days)[config.firstDayOfWeek]
225+
binding.settingsStartWeekOn.text = resources.getStringArray(
226+
org.fossify.commons.R.array.week_days
227+
)[config.firstDayOfWeek - 1]
219228
}
220229
}
221230
}
@@ -338,7 +347,7 @@ class SettingsActivity : SimpleActivity() {
338347
ExportDataDialog(this, config.lastDataExportPath) { file ->
339348
try {
340349
exportActivityResultLauncher.launch(file.name)
341-
} catch (@Suppress("SwallowedException") e: ActivityNotFoundException) {
350+
} catch (@Suppress("SwallowedException") _: ActivityNotFoundException) {
342351
toast(
343352
id = org.fossify.commons.R.string.system_service_disabled,
344353
length = Toast.LENGTH_LONG
@@ -352,7 +361,7 @@ class SettingsActivity : SimpleActivity() {
352361
private fun tryImportData() {
353362
try {
354363
importActivityResultLauncher.launch(IMPORT_BACKUP_MIME_TYPES.toTypedArray())
355-
} catch (@Suppress("SwallowedException") e: ActivityNotFoundException) {
364+
} catch (@Suppress("SwallowedException") _: ActivityNotFoundException) {
356365
toast(org.fossify.commons.R.string.system_service_disabled, Toast.LENGTH_LONG)
357366
} catch (e: Exception) {
358367
showErrorToast(e)

app/src/main/kotlin/org/fossify/clock/dialogs/EditAlarmDialog.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ import org.fossify.clock.extensions.config
1717
import org.fossify.clock.extensions.dbHelper
1818
import org.fossify.clock.extensions.getFormattedTime
1919
import org.fossify.clock.extensions.handleFullScreenNotificationsPermission
20-
import org.fossify.clock.extensions.orderDaysList
20+
import org.fossify.clock.extensions.rotateWeekdays
2121
import org.fossify.clock.helpers.PICK_AUDIO_FILE_INTENT_ID
2222
import org.fossify.clock.helpers.TODAY_BIT
2323
import org.fossify.clock.helpers.TOMORROW_BIT
@@ -124,7 +124,7 @@ class EditAlarmDialog(
124124
val dayLetters =
125125
activity.resources.getStringArray(org.fossify.commons.R.array.week_day_letters)
126126
.toList() as ArrayList<String>
127-
val dayIndexes = activity.orderDaysList(arrayListOf(0, 1, 2, 3, 4, 5, 6))
127+
val dayIndexes = activity.rotateWeekdays(arrayListOf(0, 1, 2, 3, 4, 5, 6))
128128

129129
dayIndexes.forEach {
130130
val bitmask = 1 shl it

app/src/main/kotlin/org/fossify/clock/extensions/Context.kt

Lines changed: 5 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,6 @@ import org.fossify.clock.helpers.ALARM_ID
2828
import org.fossify.clock.helpers.AlarmController
2929
import org.fossify.clock.helpers.Config
3030
import org.fossify.clock.helpers.DBHelper
31-
import org.fossify.clock.helpers.UPCOMING_ALARM_INTENT_ID
3231
import org.fossify.clock.helpers.EDITED_TIME_ZONE_SEPARATOR
3332
import org.fossify.clock.helpers.FORMAT_12H
3433
import org.fossify.clock.helpers.FORMAT_24H
@@ -45,6 +44,7 @@ import org.fossify.clock.helpers.TIMER_ID
4544
import org.fossify.clock.helpers.TODAY_BIT
4645
import org.fossify.clock.helpers.TOMORROW_BIT
4746
import org.fossify.clock.helpers.TimerHelper
47+
import org.fossify.clock.helpers.UPCOMING_ALARM_INTENT_ID
4848
import org.fossify.clock.helpers.formatTime
4949
import org.fossify.clock.helpers.getAllTimeZones
5050
import org.fossify.clock.helpers.getDefaultTimeZoneTitle
@@ -69,6 +69,7 @@ import org.fossify.commons.extensions.getProperPrimaryColor
6969
import org.fossify.commons.extensions.getSelectedDaysString
7070
import org.fossify.commons.extensions.grantReadUriPermission
7171
import org.fossify.commons.extensions.notificationManager
72+
import org.fossify.commons.extensions.rotateLeft
7273
import org.fossify.commons.extensions.showErrorToast
7374
import org.fossify.commons.extensions.toInt
7475
import org.fossify.commons.extensions.toast
@@ -566,24 +567,17 @@ fun Context.getAlarmSelectedDaysString(bitMask: Int): String {
566567
TODAY_BIT -> getString(org.fossify.commons.R.string.today)
567568
TOMORROW_BIT -> getString(org.fossify.commons.R.string.tomorrow)
568569
EVERY_DAY_BIT -> getString(org.fossify.commons.R.string.every_day)
569-
else -> getSelectedDaysString(bitMask)
570+
else -> getSelectedDaysString(bitMask) // TODO: This does not respect config.firstDayOfWeek
570571
}
571572
}
572573

573-
fun Context.orderDaysList(days: List<Int>): List<Int> {
574-
if (config.firstDayOfWeek > 0) {
575-
val range = (config.firstDayOfWeek..6).toList() + (0..<config.firstDayOfWeek).toList()
576-
return days.slice(range)
577-
} else {
578-
return days
579-
}
580-
}
574+
fun Context.rotateWeekdays(days: List<Int>) = days.rotateLeft(config.firstDayOfWeek - 1)
581575

582576
fun Context.firstDayOrder(bitMask: Int): Int {
583577
if (bitMask == TODAY_BIT) return -2
584578
if (bitMask == TOMORROW_BIT) return -1
585579

586-
val dayBits = orderDaysList(
580+
val dayBits = rotateWeekdays(
587581
arrayListOf(
588582
MONDAY_BIT,
589583
TUESDAY_BIT,

app/src/main/kotlin/org/fossify/clock/helpers/Config.kt

Lines changed: 53 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package org.fossify.clock.helpers
22

33
import android.content.Context
44
import android.media.RingtoneManager
5+
import androidx.core.content.edit
56
import org.fossify.clock.extensions.gson.gson
67
import org.fossify.clock.models.Alarm
78
import org.fossify.clock.models.ObfuscatedAlarm
@@ -11,8 +12,6 @@ import org.fossify.commons.extensions.getDefaultAlarmSound
1112
import org.fossify.commons.extensions.getDefaultAlarmTitle
1213
import org.fossify.commons.helpers.BaseConfig
1314
import org.fossify.commons.helpers.SORT_DESCENDING
14-
import java.util.Calendar
15-
import java.util.Locale
1615

1716
class Config(context: Context) : BaseConfig(context) {
1817
companion object {
@@ -21,63 +20,81 @@ class Config(context: Context) : BaseConfig(context) {
2120

2221
var selectedTimeZones: Set<String>
2322
get() = prefs.getStringSet(SELECTED_TIME_ZONES, HashSet())!!
24-
set(selectedTimeZones) = prefs.edit().putStringSet(SELECTED_TIME_ZONES, selectedTimeZones).apply()
23+
set(selectedTimeZones) = prefs.edit { putStringSet(SELECTED_TIME_ZONES, selectedTimeZones) }
2524

2625
var editedTimeZoneTitles: Set<String>
2726
get() = prefs.getStringSet(EDITED_TIME_ZONE_TITLES, HashSet())!!
28-
set(editedTimeZoneTitles) = prefs.edit().putStringSet(EDITED_TIME_ZONE_TITLES, editedTimeZoneTitles).apply()
27+
set(editedTimeZoneTitles) = prefs.edit {
28+
putStringSet(EDITED_TIME_ZONE_TITLES, editedTimeZoneTitles)
29+
}
2930

3031
var timerSeconds: Int
3132
get() = prefs.getInt(TIMER_SECONDS, 300)
32-
set(lastTimerSeconds) = prefs.edit().putInt(TIMER_SECONDS, lastTimerSeconds).apply()
33+
set(lastTimerSeconds) = prefs.edit { putInt(TIMER_SECONDS, lastTimerSeconds) }
3334

3435
var timerVibrate: Boolean
3536
get() = prefs.getBoolean(TIMER_VIBRATE, false)
36-
set(timerVibrate) = prefs.edit().putBoolean(TIMER_VIBRATE, timerVibrate).apply()
37+
set(timerVibrate) = prefs.edit { putBoolean(TIMER_VIBRATE, timerVibrate) }
3738

3839
var timerSoundUri: String
39-
get() = prefs.getString(TIMER_SOUND_URI, context.getDefaultAlarmSound(RingtoneManager.TYPE_ALARM).uri)!!
40-
set(timerSoundUri) = prefs.edit().putString(TIMER_SOUND_URI, timerSoundUri).apply()
40+
get() = prefs.getString(
41+
TIMER_SOUND_URI,
42+
context.getDefaultAlarmSound(RingtoneManager.TYPE_ALARM).uri
43+
)!!
44+
set(timerSoundUri) = prefs.edit { putString(TIMER_SOUND_URI, timerSoundUri) }
4145

4246
var timerSoundTitle: String
43-
get() = prefs.getString(TIMER_SOUND_TITLE, context.getDefaultAlarmTitle(RingtoneManager.TYPE_ALARM))!!
44-
set(timerSoundTitle) = prefs.edit().putString(TIMER_SOUND_TITLE, timerSoundTitle).apply()
47+
get() = prefs.getString(
48+
TIMER_SOUND_TITLE,
49+
context.getDefaultAlarmTitle(RingtoneManager.TYPE_ALARM)
50+
)!!
51+
set(timerSoundTitle) = prefs.edit { putString(TIMER_SOUND_TITLE, timerSoundTitle) }
4552

4653
var timerMaxReminderSecs: Int
4754
get() = prefs.getInt(TIMER_MAX_REMINDER_SECS, DEFAULT_MAX_TIMER_REMINDER_SECS)
48-
set(timerMaxReminderSecs) = prefs.edit().putInt(TIMER_MAX_REMINDER_SECS, timerMaxReminderSecs).apply()
55+
set(timerMaxReminderSecs) = prefs.edit {
56+
putInt(TIMER_MAX_REMINDER_SECS, timerMaxReminderSecs)
57+
}
4958

5059
var timerLabel: String?
5160
get() = prefs.getString(TIMER_LABEL, null)
52-
set(label) = prefs.edit().putString(TIMER_LABEL, label).apply()
61+
set(label) = prefs.edit { putString(TIMER_LABEL, label) }
5362

5463
var toggleStopwatch: Boolean
5564
get() = prefs.getBoolean(TOGGLE_STOPWATCH, false)
56-
set(toggleStopwatch) = prefs.edit().putBoolean(TOGGLE_STOPWATCH, toggleStopwatch).apply()
65+
set(toggleStopwatch) = prefs.edit { putBoolean(TOGGLE_STOPWATCH, toggleStopwatch) }
5766

5867
var alarmSort: Int
5968
get() = prefs.getInt(ALARMS_SORT_BY, SORT_BY_CREATION_ORDER)
60-
set(alarmSort) = prefs.edit().putInt(ALARMS_SORT_BY, alarmSort).apply()
69+
set(alarmSort) = prefs.edit { putInt(ALARMS_SORT_BY, alarmSort) }
6170

6271
var alarmsCustomSorting: String
6372
get() = prefs.getString(ALARMS_CUSTOM_SORTING, "")!!
64-
set(alarmsCustomSorting) = prefs.edit().putString(ALARMS_CUSTOM_SORTING, alarmsCustomSorting).apply()
73+
set(alarmsCustomSorting) = prefs.edit {
74+
putString(ALARMS_CUSTOM_SORTING, alarmsCustomSorting)
75+
}
6576

6677
var timerSort: Int
6778
get() = prefs.getInt(TIMERS_SORT_BY, SORT_BY_CREATION_ORDER)
68-
set(timerSort) = prefs.edit().putInt(TIMERS_SORT_BY, timerSort).apply()
79+
set(timerSort) = prefs.edit { putInt(TIMERS_SORT_BY, timerSort) }
6980

7081
var timersCustomSorting: String
7182
get() = prefs.getString(TIMERS_CUSTOM_SORTING, "")!!
72-
set(timersCustomSorting) = prefs.edit().putString(TIMERS_CUSTOM_SORTING, timersCustomSorting).apply()
83+
set(timersCustomSorting) = prefs.edit {
84+
putString(TIMERS_CUSTOM_SORTING, timersCustomSorting)
85+
}
7386

7487
var alarmMaxReminderSecs: Int
7588
get() = prefs.getInt(ALARM_MAX_REMINDER_SECS, DEFAULT_MAX_ALARM_REMINDER_SECS)
76-
set(alarmMaxReminderSecs) = prefs.edit().putInt(ALARM_MAX_REMINDER_SECS, alarmMaxReminderSecs).apply()
89+
set(alarmMaxReminderSecs) = prefs.edit {
90+
putInt(ALARM_MAX_REMINDER_SECS, alarmMaxReminderSecs)
91+
}
7792

7893
var increaseVolumeGradually: Boolean
7994
get() = prefs.getBoolean(INCREASE_VOLUME_GRADUALLY, true)
80-
set(increaseVolumeGradually) = prefs.edit().putBoolean(INCREASE_VOLUME_GRADUALLY, increaseVolumeGradually).apply()
95+
set(increaseVolumeGradually) = prefs.edit {
96+
putBoolean(INCREASE_VOLUME_GRADUALLY, increaseVolumeGradually)
97+
}
8198

8299
var alarmLastConfig: Alarm?
83100
get() = prefs.getString(ALARM_LAST_CONFIG, null)?.let { lastAlarm ->
@@ -87,11 +104,11 @@ class Config(context: Context) : BaseConfig(context) {
87104
} else {
88105
gson.fromJson(lastAlarm, Alarm::class.java)
89106
}
90-
} catch (e: Exception) {
107+
} catch (_: Exception) {
91108
null
92109
}
93110
}
94-
set(alarm) = prefs.edit().putString(ALARM_LAST_CONFIG, gson.toJson(alarm)).apply()
111+
set(alarm) = prefs.edit { putString(ALARM_LAST_CONFIG, gson.toJson(alarm)) }
95112

96113
var timerLastConfig: Timer?
97114
get() = prefs.getString(TIMER_LAST_CONFIG, null)?.let { lastTimer ->
@@ -101,32 +118,36 @@ class Config(context: Context) : BaseConfig(context) {
101118
} else {
102119
gson.fromJson(lastTimer, Timer::class.java)
103120
}
104-
} catch (e: Exception) {
121+
} catch (_: Exception) {
105122
null
106123
}
107124
}
108-
set(timer) = prefs.edit().putString(TIMER_LAST_CONFIG, gson.toJson(timer)).apply()
125+
set(timer) = prefs.edit { putString(TIMER_LAST_CONFIG, gson.toJson(timer)) }
109126

110127
var timerChannelId: String?
111128
get() = prefs.getString(TIMER_CHANNEL_ID, null)
112-
set(id) = prefs.edit().putString(TIMER_CHANNEL_ID, id).apply()
129+
set(id) = prefs.edit { putString(TIMER_CHANNEL_ID, id) }
113130

114131
var stopwatchLapsSort: Int
115132
get() = prefs.getInt(STOPWATCH_LAPS_SORT_BY, SORT_BY_LAP or SORT_DESCENDING)
116-
set(stopwatchLapsSort) = prefs.edit().putInt(STOPWATCH_LAPS_SORT_BY, stopwatchLapsSort).apply()
133+
set(stopwatchLapsSort) = prefs.edit { putInt(STOPWATCH_LAPS_SORT_BY, stopwatchLapsSort) }
117134

118135
var wasInitialWidgetSetUp: Boolean
119136
get() = prefs.getBoolean(WAS_INITIAL_WIDGET_SET_UP, false)
120-
set(wasInitialWidgetSetUp) = prefs.edit().putBoolean(WAS_INITIAL_WIDGET_SET_UP, wasInitialWidgetSetUp).apply()
137+
set(wasInitialWidgetSetUp) = prefs.edit {
138+
putBoolean(WAS_INITIAL_WIDGET_SET_UP, wasInitialWidgetSetUp)
139+
}
121140

122141
var lastDataExportPath: String
123142
get() = prefs.getString(LAST_DATA_EXPORT_PATH, "")!!
124-
set(lastDataExportPath) = prefs.edit().putString(LAST_DATA_EXPORT_PATH, lastDataExportPath).apply()
143+
set(lastDataExportPath) = prefs.edit {
144+
putString(LAST_DATA_EXPORT_PATH, lastDataExportPath)
145+
}
125146

126-
var firstDayOfWeek: Int
127-
get() {
128-
val defaultFirstDayOfWeek = Calendar.getInstance(Locale.getDefault()).firstDayOfWeek
129-
return prefs.getInt(FIRST_DAY_OF_WEEK, getDayNumber(defaultFirstDayOfWeek))
147+
@Deprecated("Remove this method in future releases")
148+
var migrateFirstDayOfWeek: Boolean
149+
get() = prefs.getBoolean(MIGRATE_FIRST_DAY_OF_WEEK, true)
150+
set(migrateFirstDayOfWeek) = prefs.edit {
151+
putBoolean(MIGRATE_FIRST_DAY_OF_WEEK, migrateFirstDayOfWeek)
130152
}
131-
set(firstDayOfWeek) = prefs.edit().putInt(FIRST_DAY_OF_WEEK, firstDayOfWeek).apply()
132153
}

app/src/main/kotlin/org/fossify/clock/helpers/Constants.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ const val STOPWATCH_LAPS_SORT_BY = "stopwatch_laps_sort_by"
4040
const val WAS_INITIAL_WIDGET_SET_UP = "was_initial_widget_set_up"
4141
const val DATA_EXPORT_EXTENSION = ".json"
4242
const val LAST_DATA_EXPORT_PATH = "last_alarms_export_path"
43-
const val FIRST_DAY_OF_WEEK = "first_day_of_week"
43+
const val MIGRATE_FIRST_DAY_OF_WEEK = "migrate_first_day_of_week"
4444

4545
const val TABS_COUNT = 4
4646
const val EDITED_TIME_ZONE_SEPARATOR = ":"
@@ -100,7 +100,7 @@ const val FORMAT_24H = "HH:mm"
100100
const val FORMAT_12H_WITH_SECONDS = "h:mm:ss a"
101101
const val FORMAT_24H_WITH_SECONDS = "HH:mm:ss"
102102

103-
val DAY_BIT_MAP = mapOf(
103+
private val DAY_BIT_MAP = mapOf(
104104
Calendar.SUNDAY to SUNDAY_BIT,
105105
Calendar.MONDAY to MONDAY_BIT,
106106
Calendar.TUESDAY to TUESDAY_BIT,

0 commit comments

Comments
 (0)