diff --git a/app/src/main/kotlin/org/fossify/clock/activities/MainActivity.kt b/app/src/main/kotlin/org/fossify/clock/activities/MainActivity.kt index ad5713ed..c3dd4d0f 100644 --- a/app/src/main/kotlin/org/fossify/clock/activities/MainActivity.kt +++ b/app/src/main/kotlin/org/fossify/clock/activities/MainActivity.kt @@ -40,6 +40,7 @@ class MainActivity : SimpleActivity() { initFragments() setupTabs() updateWidgets() + migrateFirstDayOfWeek() getEnabledAlarms { enabledAlarms -> if (enabledAlarms.isNullOrEmpty()) { @@ -298,6 +299,16 @@ class MainActivity : SimpleActivity() { startAboutActivity(R.string.app_name, licenses, BuildConfig.VERSION_NAME, faqItems, true) } + @Deprecated("Remove this method in future releases") + private fun migrateFirstDayOfWeek() { + // check existing config.isSundayFirst to migrate setting value + if (config.isSundayFirst) { + config.firstDayOfWeek = 6 + // revert old setting to not run this code anymore + config.isSundayFirst = false + } + } + private fun getTabIndex(tabId: Int): Int { return when (tabId) { TAB_CLOCK -> TAB_CLOCK_INDEX diff --git a/app/src/main/kotlin/org/fossify/clock/activities/SettingsActivity.kt b/app/src/main/kotlin/org/fossify/clock/activities/SettingsActivity.kt index d81eb8ec..d1e7ab2b 100644 --- a/app/src/main/kotlin/org/fossify/clock/activities/SettingsActivity.kt +++ b/app/src/main/kotlin/org/fossify/clock/activities/SettingsActivity.kt @@ -103,7 +103,7 @@ class SettingsActivity : SimpleActivity() { setupLanguage() setupDefaultTab() setupPreventPhoneFromSleeping() - setupSundayFirst() + setupStartWeekOn() setupAlarmMaxReminder() setupUseSameSnooze() setupSnoozeTime() @@ -196,11 +196,24 @@ class SettingsActivity : SimpleActivity() { } } - private fun setupSundayFirst() { - binding.settingsSundayFirst.isChecked = config.isSundayFirst - binding.settingsSundayFirstHolder.setOnClickListener { - binding.settingsSundayFirst.toggle() - config.isSundayFirst = binding.settingsSundayFirst.isChecked + private fun setupStartWeekOn() { + val items = arrayListOf( + RadioItem(6, getString(org.fossify.commons.R.string.sunday)), + RadioItem(0, getString(org.fossify.commons.R.string.monday)), + RadioItem(1, getString(org.fossify.commons.R.string.tuesday)), + RadioItem(2, getString(org.fossify.commons.R.string.wednesday)), + RadioItem(3, getString(org.fossify.commons.R.string.thursday)), + RadioItem(4, getString(org.fossify.commons.R.string.friday)), + RadioItem(5, getString(org.fossify.commons.R.string.saturday)), + ) + + binding.settingsStartWeekOn.text = resources.getStringArray(org.fossify.commons.R.array.week_days)[config.firstDayOfWeek] + binding.settingsStartWeekOnHolder.setOnClickListener { + RadioGroupDialog(this@SettingsActivity, items, config.firstDayOfWeek) { day -> + val firstDayOfWeek = day as Int + config.firstDayOfWeek = firstDayOfWeek + binding.settingsStartWeekOn.text = resources.getStringArray(org.fossify.commons.R.array.week_days)[config.firstDayOfWeek] + } } } diff --git a/app/src/main/kotlin/org/fossify/clock/dialogs/EditAlarmDialog.kt b/app/src/main/kotlin/org/fossify/clock/dialogs/EditAlarmDialog.kt index e470246a..a90f5e7e 100644 --- a/app/src/main/kotlin/org/fossify/clock/dialogs/EditAlarmDialog.kt +++ b/app/src/main/kotlin/org/fossify/clock/dialogs/EditAlarmDialog.kt @@ -92,10 +92,7 @@ class EditAlarmDialog(val activity: SimpleActivity, val alarm: Alarm, val onDism editAlarm.setText(alarm.label) val dayLetters = activity.resources.getStringArray(org.fossify.commons.R.array.week_day_letters).toList() as ArrayList - val dayIndexes = arrayListOf(0, 1, 2, 3, 4, 5, 6) - if (activity.config.isSundayFirst) { - dayIndexes.moveLastItemToFront() - } + val dayIndexes = activity.orderDaysList(arrayListOf(0, 1, 2, 3, 4, 5, 6)) dayIndexes.forEach { val pow = Math.pow(2.0, it.toDouble()).toInt() diff --git a/app/src/main/kotlin/org/fossify/clock/extensions/Context.kt b/app/src/main/kotlin/org/fossify/clock/extensions/Context.kt index 95057827..cfe4e783 100644 --- a/app/src/main/kotlin/org/fossify/clock/extensions/Context.kt +++ b/app/src/main/kotlin/org/fossify/clock/extensions/Context.kt @@ -548,20 +548,24 @@ fun Context.getAlarmSelectedDaysString(bitMask: Int): String { } } +fun Context.orderDaysList(days: List): List { + if (config.firstDayOfWeek > 0) { + val range = (config.firstDayOfWeek..6).toList() + (0.. + dayBits.forEachIndexed { i, bit -> if (bitMask and bit != 0) { - return if (bit == SUNDAY_BIT && sundayFirst) 0 else bit + return i } } diff --git a/app/src/main/kotlin/org/fossify/clock/helpers/Config.kt b/app/src/main/kotlin/org/fossify/clock/helpers/Config.kt index f069d578..873006a7 100644 --- a/app/src/main/kotlin/org/fossify/clock/helpers/Config.kt +++ b/app/src/main/kotlin/org/fossify/clock/helpers/Config.kt @@ -11,6 +11,8 @@ import org.fossify.commons.extensions.getDefaultAlarmSound import org.fossify.commons.extensions.getDefaultAlarmTitle import org.fossify.commons.helpers.BaseConfig import org.fossify.commons.helpers.SORT_DESCENDING +import java.util.Calendar +import java.util.Locale class Config(context: Context) : BaseConfig(context) { companion object { @@ -108,4 +110,11 @@ class Config(context: Context) : BaseConfig(context) { var lastDataExportPath: String get() = prefs.getString(LAST_DATA_EXPORT_PATH, "")!! set(lastDataExportPath) = prefs.edit().putString(LAST_DATA_EXPORT_PATH, lastDataExportPath).apply() + + var firstDayOfWeek: Int + get() { + val defaultFirstDayOfWeek = Calendar.getInstance(Locale.getDefault()).firstDayOfWeek + return prefs.getInt(FIRST_DAY_OF_WEEK, getDayNumber(defaultFirstDayOfWeek)) + } + set(firstDayOfWeek) = prefs.edit().putInt(FIRST_DAY_OF_WEEK, firstDayOfWeek).apply() } diff --git a/app/src/main/kotlin/org/fossify/clock/helpers/Constants.kt b/app/src/main/kotlin/org/fossify/clock/helpers/Constants.kt index 6473f2ec..92c67e1f 100644 --- a/app/src/main/kotlin/org/fossify/clock/helpers/Constants.kt +++ b/app/src/main/kotlin/org/fossify/clock/helpers/Constants.kt @@ -28,6 +28,7 @@ const val STOPWATCH_LAPS_SORT_BY = "stopwatch_laps_sort_by" const val WAS_INITIAL_WIDGET_SET_UP = "was_initial_widget_set_up" const val DATA_EXPORT_EXTENSION = ".json" const val LAST_DATA_EXPORT_PATH = "last_alarms_export_path" +const val FIRST_DAY_OF_WEEK = "first_day_of_week" const val TABS_COUNT = 4 const val EDITED_TIME_ZONE_SEPARATOR = ":" @@ -126,16 +127,18 @@ fun formatTime(showSeconds: Boolean, use24HourFormat: Boolean, hours: Int, minut } } +fun getDayNumber(calendarDay: Int): Int = (calendarDay + 5) % 7 + fun getTomorrowBit(): Int { val calendar = Calendar.getInstance() calendar.add(Calendar.DAY_OF_WEEK, 1) - val dayOfWeek = (calendar.get(Calendar.DAY_OF_WEEK) + 5) % 7 + val dayOfWeek = getDayNumber(calendar.get(Calendar.DAY_OF_WEEK)) return 2.0.pow(dayOfWeek).toInt() } fun getTodayBit(): Int { val calendar = Calendar.getInstance() - val dayOfWeek = (calendar.get(Calendar.DAY_OF_WEEK) + 5) % 7 + val dayOfWeek = getDayNumber(calendar.get(Calendar.DAY_OF_WEEK)) return 2.0.pow(dayOfWeek).toInt() } diff --git a/app/src/main/res/layout/activity_settings.xml b/app/src/main/res/layout/activity_settings.xml index 7471758c..0c8e057c 100644 --- a/app/src/main/res/layout/activity_settings.xml +++ b/app/src/main/res/layout/activity_settings.xml @@ -157,32 +157,39 @@ - + + android:layout_below="@+id/settings_start_week_on_label" + tools:text="@string/monday" /> + android:text="@string/prevent_phone_from_sleeping" />