Set firstDayOfWeek with Unicode extensions

first_day_of_week
Alex Baker 9 months ago
parent 594a463112
commit 68de689ca5

@ -66,6 +66,7 @@ class DateAndTimePickerActivity : AppCompatActivity() {
)
},
displayMode = remember { preferences.calendarDisplayMode },
firstDayOfWeek = remember { preferences.firstDayOfWeek },
setDisplayMode = {
preferences.calendarDisplayMode = it
},

@ -79,6 +79,7 @@ fun CustomRecurrence(
setMonthSelection: (Int) -> Unit,
calendarDisplayMode: DisplayMode,
setDisplayMode: (DisplayMode) -> Unit,
firstDayOfWeek: Int,
) {
BackHandler {
save()
@ -190,6 +191,7 @@ fun CustomRecurrence(
setOccurrences = setOccurrences,
calendarDisplayMode = calendarDisplayMode,
setDisplayMode = setDisplayMode,
firstDayOfWeek = firstDayOfWeek,
)
}
}
@ -330,6 +332,7 @@ private fun EndsPicker(
selection: Int,
endDate: Long,
endOccurrences: Int,
firstDayOfWeek: Int,
calendarDisplayMode: DisplayMode,
setDisplayMode: (DisplayMode) -> Unit,
setOccurrences: (Int) -> Unit,
@ -361,6 +364,7 @@ private fun EndsPicker(
DatePickerDialog(
initialDate = endDate,
displayMode = calendarDisplayMode,
firstDayOfWeek = firstDayOfWeek,
setDisplayMode = setDisplayMode,
selected = {
setEndDate(it)
@ -446,6 +450,7 @@ fun WeeklyPreview() {
setMonthSelection = {},
calendarDisplayMode = DisplayMode.Picker,
setDisplayMode = {},
firstDayOfWeek = 0,
)
}
}
@ -469,6 +474,7 @@ fun MonthlyPreview() {
setMonthSelection = {},
calendarDisplayMode = DisplayMode.Picker,
setDisplayMode = {},
firstDayOfWeek = 0,
)
}
}
@ -492,6 +498,7 @@ fun MinutelyPreview() {
setMonthSelection = {},
calendarDisplayMode = DisplayMode.Picker,
setDisplayMode = {},
firstDayOfWeek = 0,
)
}
}
@ -515,6 +522,7 @@ fun HourlyPreview() {
setMonthSelection = {},
calendarDisplayMode = DisplayMode.Picker,
setDisplayMode = {},
firstDayOfWeek = 0,
)
}
}
@ -538,6 +546,7 @@ fun DailyPreview() {
setMonthSelection = {},
calendarDisplayMode = DisplayMode.Picker,
setDisplayMode = {},
firstDayOfWeek = 0,
)
}
}
@ -561,6 +570,7 @@ fun YearlyPreview() {
setMonthSelection = {},
calendarDisplayMode = DisplayMode.Picker,
setDisplayMode = {},
firstDayOfWeek = 0,
)
}
}

@ -1,6 +1,7 @@
package org.tasks.compose.pickers
import android.content.res.Configuration
import android.os.LocaleList
import androidx.compose.material3.DatePicker
import androidx.compose.material3.DisplayMode
import androidx.compose.material3.ExperimentalMaterial3Api
@ -8,22 +9,26 @@ import androidx.compose.material3.Text
import androidx.compose.material3.TextButton
import androidx.compose.material3.rememberDatePickerState
import androidx.compose.runtime.Composable
import androidx.compose.runtime.CompositionLocalProvider
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.derivedStateOf
import androidx.compose.runtime.getValue
import androidx.compose.runtime.remember
import androidx.compose.ui.platform.LocalConfiguration
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.tooling.preview.Preview
import org.tasks.R
import org.tasks.themes.TasksTheme
import org.tasks.time.DateTime
import timber.log.Timber
import java.util.Locale
@OptIn(ExperimentalMaterial3Api::class)
@Composable
fun DatePickerDialog(
initialDate: Long,
displayMode: DisplayMode,
firstDayOfWeek: Int,
setDisplayMode: (DisplayMode) -> Unit,
selected: (Long) -> Unit,
dismiss: () -> Unit,
@ -48,23 +53,51 @@ fun DatePickerDialog(
androidx.compose.material3.DatePickerDialog(
onDismissRequest = { dismiss() },
dismissButton = {
TextButton(onClick = dismiss) {
Text(text = stringResource(id = R.string.cancel))
}
TextButton(onClick = dismiss) {
Text(text = stringResource(id = R.string.cancel))
}
},
confirmButton = {
TextButton(
onClick = {
datePickerState
.selectedDateMillis
?.let { selected(it - DateTime(it).offset) }
}
) {
Text(text = stringResource(id = R.string.ok))
TextButton(
onClick = {
datePickerState
.selectedDateMillis
?.let { selected(it - DateTime(it).offset) }
}
) {
Text(text = stringResource(id = R.string.ok))
}
}
) {
DatePicker(state = datePickerState)
val currentLocale = LocalConfiguration.current.locales[0]
val customLocale = remember(currentLocale) {
if (firstDayOfWeek == 0) {
currentLocale
} else {
Locale.Builder()
.setLocale(currentLocale)
.setUnicodeLocaleKeyword(
"fw",
when (firstDayOfWeek) {
2 -> "mon"
3 -> "tue"
4 -> "wed"
5 -> "thu"
6 -> "fri"
7 -> "sat"
else -> "sun"
}
)
.build()
}
}
CompositionLocalProvider(
LocalConfiguration provides Configuration(LocalConfiguration.current).apply {
setLocales(LocaleList(customLocale))
}
) {
DatePicker(state = datePickerState)
}
}
}
@ -77,6 +110,7 @@ fun DatePickerPreview() {
DatePickerDialog(
initialDate = DateTime().plusDays(1).millis,
displayMode = DisplayMode.Picker,
firstDayOfWeek = 0,
setDisplayMode = {},
selected = {},
dismiss = {}
@ -93,6 +127,23 @@ fun DatePickerPreviewInput() {
DatePickerDialog(
initialDate = DateTime().plusDays(1).millis,
displayMode = DisplayMode.Input,
firstDayOfWeek = 0,
setDisplayMode = {},
selected = {},
dismiss = {}
)
}
}
@OptIn(ExperimentalMaterial3Api::class)
@Preview(showBackground = true)
@Composable
fun DatePickerPreviewOverrideFirstDay() {
TasksTheme {
DatePickerDialog(
initialDate = DateTime().plusDays(1).millis,
displayMode = DisplayMode.Picker,
firstDayOfWeek = 2,
setDisplayMode = {},
selected = {},
dismiss = {}

@ -43,7 +43,8 @@ class CustomRecurrenceActivity : FragmentActivity() {
toggleDay = { viewModel.toggleDay(it) },
setMonthSelection = { viewModel.setMonthSelection(it) },
calendarDisplayMode = remember { preferences.calendarDisplayMode },
setDisplayMode = { preferences.calendarDisplayMode = it }
setDisplayMode = { preferences.calendarDisplayMode = it },
firstDayOfWeek = remember { preferences.firstDayOfWeek },
)
}
}

Loading…
Cancel
Save