Skip to content

Commit 71903f9

Browse files
Merge pull request #145 from vanpra/0.7.1
Library version 0.7.1
2 parents 42e1e30 + b0dd84d commit 71903f9

File tree

11 files changed

+73
-60
lines changed

11 files changed

+73
-60
lines changed

CHANGELOG.md

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,12 @@
11
# Changelog
22

3-
### 0.7.0 - 2021-03-03
3+
### 0.7.1 - 2022-05-16
4+
5+
- Internationalise start day of week in date picker ([#146](https://github.com/vanpra/compose-material-dialogs/issues/146) and [#54](https://github.com/vanpra/compose-material-dialogs/issues/54))
6+
- Add modifier parameter to input component ([#141](https://github.com/vanpra/compose-material-dialogs/issues/141))
7+
- Add state parameter to the list component ([#140](https://github.com/vanpra/compose-material-dialogs/issues/140))
8+
9+
### 0.7.0 - 2022-03-03
410

511
- Update compose to 1.1.1
612
- [BREAKING CHANGE] Modify arguments of the `input` component to better match those of `TextField`
@@ -9,7 +15,7 @@
915
- Add ability to change time picker title color ([#123](https://github.com/vanpra/compose-material-dialogs/issues/123))
1016
- Fix bug which causes input field to lose focus on validity change ([#132](https://github.com/vanpra/compose-material-dialogs/issues/132))
1117

12-
### 0.6.3 - 2021-01-21
18+
### 0.6.3 - 2022-01-21
1319

1420
- Update compose to 1.1.0-rc01
1521
- Add ability to disable specific days in date picker (#126)[https://github.com/vanpra/compose-material-dialogs/pull/126]

README.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
```gradle
2020
dependencies {
2121
...
22-
implementation "io.github.vanpra.compose-material-dialogs:core:0.7.0"
22+
implementation "io.github.vanpra.compose-material-dialogs:core:0.7.1"
2323
...
2424
}
2525
```
@@ -35,7 +35,7 @@ dependencies {
3535
```gradle
3636
dependencies {
3737
...
38-
implementation "io.github.vanpra.compose-material-dialogs:datetime:0.7.0"
38+
implementation "io.github.vanpra.compose-material-dialogs:datetime:0.7.1"
3939
...
4040
}
4141
```
@@ -51,7 +51,7 @@ dependencies {
5151
```gradle
5252
dependencies {
5353
...
54-
implementation "io.github.vanpra.compose-material-dialogs:color:0.7.0"
54+
implementation "io.github.vanpra.compose-material-dialogs:color:0.7.1"
5555
...
5656
}
5757
```

app/src/main/java/com/vanpra/composematerialdialogdemos/demos/ListDialog.kt

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ import androidx.compose.foundation.layout.Row
55
import androidx.compose.foundation.layout.fillMaxWidth
66
import androidx.compose.foundation.layout.padding
77
import androidx.compose.foundation.layout.size
8-
import androidx.compose.material.Button
98
import androidx.compose.material.MaterialTheme
109
import androidx.compose.material.Text
1110
import androidx.compose.material.icons.Icons
@@ -39,14 +38,6 @@ private val ringtones =
3938
"Beats",
4039
"Dance Party",
4140
"Zen Too",
42-
"None",
43-
"Callisto",
44-
"Ganymede",
45-
"Luna",
46-
"Rrrring",
47-
"Beats",
48-
"Dance Party",
49-
"Zen Too"
5041
)
5142
private val labels = listOf("None", "Forums", "Social", "Updates", "Promotions", "Spam", "Bin")
5243
private val emails = mutableStateListOf(
@@ -70,9 +61,6 @@ fun BasicListDialogDemo() {
7061
DialogAndShowButton(buttonText = "Simple List Dialog") {
7162
title(res = R.string.backup_dialog_title)
7263
listItems(emails)
73-
Button(onClick = { emails.add("[email protected]") }) {
74-
Text("Add")
75-
}
7664
}
7765

7866
DialogAndShowButton(buttonText = "Custom List Dialog") {

build.gradle.kts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,9 @@ buildscript {
1414

1515
dependencies {
1616
classpath(Dependencies.Kotlin.gradlePlugin)
17-
classpath("com.android.tools.build:gradle:7.3.0-alpha04")
18-
classpath("com.vanniktech:gradle-maven-publish-plugin:0.18.0")
19-
classpath("org.jetbrains.dokka:dokka-gradle-plugin:1.6.0")
17+
classpath("com.android.tools.build:gradle:7.4.0-alpha02")
18+
classpath("com.vanniktech:gradle-maven-publish-plugin:0.19.0")
19+
classpath("org.jetbrains.dokka:dokka-gradle-plugin:1.6.21")
2020
classpath(Dependencies.Shot.core)
2121
}
2222
}

buildSrc/src/main/kotlin/Dependencies.kt

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ object Dependencies {
1010
}
1111

1212
object Ktlint {
13-
const val version = "0.44.0"
13+
const val version = "0.45.2"
1414
}
1515

1616
object Accompanist {
@@ -24,20 +24,20 @@ object Dependencies {
2424
}
2525

2626
object Shot {
27-
private const val version = "5.13.0"
27+
private const val version = "5.14.1"
2828
const val core = "com.karumi:shot:$version"
2929
const val android = "com.karumi:shot-android:$version"
3030
}
3131

3232
object Google {
33-
const val material = "com.google.android.material:material:1.5.0"
33+
const val material = "com.google.android.material:material:1.6.0"
3434
}
3535

3636
object AndroidX {
3737
const val coreKtx = "androidx.core:core-ktx:1.7.0"
3838

3939
object Testing {
40-
const val version = "1.4.1-alpha04"
40+
const val version = "1.4.0"
4141
const val core = "androidx.test:core:$version"
4242
const val rules = "androidx.test:rules:$version"
4343
const val runner = "androidx.test:runner:$version"
@@ -55,7 +55,7 @@ object Dependencies {
5555

5656
const val testing = "androidx.compose.ui:ui-test-junit4:$version"
5757
const val activity = "androidx.activity:activity-compose:1.4.0"
58-
const val navigation = "androidx.navigation:navigation-compose:2.4.1"
58+
const val navigation = "androidx.navigation:navigation-compose:2.4.2"
5959
}
6060
}
6161
}

core/src/main/java/com/vanpra/composematerialdialogs/MaterialDialogInput.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ enum class TextFieldStyle {
5353

5454
@Composable
5555
fun MaterialDialogScope.input(
56+
modifier: Modifier = Modifier,
5657
label: String,
5758
placeholder: String = "",
5859
prefill: String = "",
@@ -87,9 +88,8 @@ fun MaterialDialogScope.input(
8788
}
8889

8990
Column(modifier = Modifier.padding(start = 24.dp, end = 24.dp, top = 8.dp, bottom = 8.dp)) {
90-
9191
TextFieldWithStyle(
92-
modifier = Modifier
92+
modifier = modifier
9393
.focusRequester(focusRequester)
9494
.fillMaxWidth()
9595
.testTag("dialog_input"),

core/src/main/java/com/vanpra/composematerialdialogs/MaterialDialogLists.kt

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,9 @@ import androidx.compose.foundation.layout.padding
1212
import androidx.compose.foundation.layout.width
1313
import androidx.compose.foundation.layout.wrapContentWidth
1414
import androidx.compose.foundation.lazy.LazyColumn
15+
import androidx.compose.foundation.lazy.LazyListState
1516
import androidx.compose.foundation.lazy.itemsIndexed
17+
import androidx.compose.foundation.lazy.rememberLazyListState
1618
import androidx.compose.material.Checkbox
1719
import androidx.compose.material.ContentAlpha
1820
import androidx.compose.material.MaterialTheme
@@ -39,6 +41,7 @@ import androidx.compose.ui.unit.dp
3941
@Composable
4042
fun <T> MaterialDialogScope.listItems(
4143
modifier: Modifier = Modifier,
44+
state: LazyListState = rememberLazyListState(),
4245
list: List<T>,
4346
closeOnClick: Boolean = true,
4447
onClick: (index: Int, item: T) -> Unit = { _, _ -> },
@@ -49,7 +52,8 @@ fun <T> MaterialDialogScope.listItems(
4952
LazyColumn(
5053
Modifier
5154
.then(modifier)
52-
.testTag("dialog_list")
55+
.testTag("dialog_list"),
56+
state = state
5357
) {
5458
itemsIndexed(list) { index, it ->
5559
Box(
@@ -82,11 +86,13 @@ fun <T> MaterialDialogScope.listItems(
8286
@Composable
8387
fun MaterialDialogScope.listItems(
8488
list: List<String>,
89+
state: LazyListState = rememberLazyListState(),
8590
closeOnClick: Boolean = true,
8691
onClick: (index: Int, item: String) -> Unit = { _, _ -> }
8792
) {
8893
listItems(
8994
modifier = Modifier.padding(bottom = 8.dp),
95+
state = state,
9096
list = list,
9197
closeOnClick = closeOnClick,
9298
onClick = onClick
@@ -116,6 +122,7 @@ fun MaterialDialogScope.listItems(
116122
@Composable
117123
fun MaterialDialogScope.listItemsMultiChoice(
118124
list: List<String>,
125+
state: LazyListState = rememberLazyListState(),
119126
disabledIndices: Set<Int> = setOf(),
120127
initialSelection: Set<Int> = setOf(),
121128
waitForPositiveButton: Boolean = true,
@@ -148,6 +155,7 @@ fun MaterialDialogScope.listItemsMultiChoice(
148155

149156
listItems(
150157
list = list,
158+
state = state,
151159
onClick = { index, _ -> onChecked(index) },
152160
isEnabled = isEnabled,
153161
closeOnClick = false
@@ -178,6 +186,7 @@ fun MaterialDialogScope.listItemsMultiChoice(
178186
@Composable
179187
fun MaterialDialogScope.listItemsSingleChoice(
180188
list: List<String>,
189+
state: LazyListState = rememberLazyListState(),
181190
disabledIndices: Set<Int> = setOf(),
182191
initialSelection: Int? = null,
183192
waitForPositiveButton: Boolean = true,
@@ -203,6 +212,7 @@ fun MaterialDialogScope.listItemsSingleChoice(
203212
val isEnabled = remember(disabledIndices) { { index: Int -> index !in disabledIndices } }
204213
listItems(
205214
list = list,
215+
state = state,
206216
closeOnClick = false,
207217
onClick = { index, _ -> onSelect(index) },
208218
isEnabled = isEnabled

datetime/src/main/java/com/vanpra/composematerialdialogs/datetime/date/DatePicker.kt

Lines changed: 31 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -56,11 +56,12 @@ import com.google.accompanist.pager.HorizontalPager
5656
import com.google.accompanist.pager.PagerState
5757
import com.google.accompanist.pager.rememberPagerState
5858
import com.vanpra.composematerialdialogs.MaterialDialogScope
59+
import com.vanpra.composematerialdialogs.datetime.util.getFullLocalName
60+
import com.vanpra.composematerialdialogs.datetime.util.getShortLocalName
5961
import com.vanpra.composematerialdialogs.datetime.util.isSmallDevice
60-
import com.vanpra.composematerialdialogs.datetime.util.shortLocalName
6162
import kotlinx.coroutines.launch
6263
import java.time.LocalDate
63-
import java.time.format.TextStyle.FULL
64+
import java.time.temporal.WeekFields
6465
import java.util.Locale
6566

6667
/**
@@ -82,13 +83,14 @@ fun MaterialDialogScope.datepicker(
8283
yearRange: IntRange = IntRange(1900, 2100),
8384
waitForPositiveButton: Boolean = true,
8485
allowedDateValidator: (LocalDate) -> Boolean = { true },
86+
locale: Locale = Locale.getDefault(),
8587
onDateChange: (LocalDate) -> Unit = {}
8688
) {
8789
val datePickerState = remember {
8890
DatePickerState(initialDate, colors, yearRange, dialogState.dialogBackgroundColor!!)
8991
}
9092

91-
DatePickerImpl(title = title, state = datePickerState, allowedDateValidator)
93+
DatePickerImpl(title = title, state = datePickerState, allowedDateValidator, locale)
9294

9395
if (waitForPositiveButton) {
9496
DialogCallback { onDateChange(datePickerState.selected) }
@@ -105,14 +107,15 @@ fun MaterialDialogScope.datepicker(
105107
internal fun DatePickerImpl(
106108
title: String,
107109
state: DatePickerState,
108-
allowedDateValidator: (LocalDate) -> Boolean
110+
allowedDateValidator: (LocalDate) -> Boolean,
111+
locale: Locale
109112
) {
110113
val pagerState = rememberPagerState(
111114
initialPage = (state.selected.year - state.yearRange.first) * 12 + state.selected.monthValue - 1
112115
)
113116

114117
Column(Modifier.fillMaxWidth()) {
115-
CalendarHeader(title, state)
118+
CalendarHeader(title, state, locale)
116119
HorizontalPager(
117120
count = (state.yearRange.last - state.yearRange.first + 1) * 12,
118121
state = pagerState,
@@ -128,7 +131,7 @@ internal fun DatePickerImpl(
128131
}
129132

130133
Column {
131-
CalendarViewHeader(viewDate, state, pagerState)
134+
CalendarViewHeader(viewDate, state, pagerState, locale)
132135
Box {
133136
androidx.compose.animation.AnimatedVisibility(
134137
state.yearPickerShowing,
@@ -141,7 +144,7 @@ internal fun DatePickerImpl(
141144
YearPicker(viewDate, state, pagerState)
142145
}
143146

144-
CalendarView(viewDate, state, allowedDateValidator)
147+
CalendarView(viewDate, state, locale, allowedDateValidator)
145148
}
146149
}
147150
}
@@ -215,10 +218,11 @@ private fun YearPickerItem(
215218
private fun CalendarViewHeader(
216219
viewDate: LocalDate,
217220
state: DatePickerState,
218-
pagerState: PagerState
221+
pagerState: PagerState,
222+
locale: Locale
219223
) {
220224
val coroutineScope = rememberCoroutineScope()
221-
val month = remember { viewDate.month.getDisplayName(FULL, Locale.getDefault()) }
225+
val month = remember { viewDate.month.getFullLocalName(locale) }
222226
val yearDropdownIcon = remember(state.yearPickerShowing) {
223227
if (state.yearPickerShowing) Icons.Default.ArrowDropUp else Icons.Default.ArrowDropDown
224228
}
@@ -303,15 +307,16 @@ private fun CalendarViewHeader(
303307
private fun CalendarView(
304308
viewDate: LocalDate,
305309
state: DatePickerState,
310+
locale: Locale,
306311
allowedDateValidator: (LocalDate) -> Boolean
307312
) {
308313
Column(
309314
Modifier
310315
.padding(start = 12.dp, end = 12.dp)
311316
.testTag("dialog_date_calendar")
312317
) {
313-
DayOfWeekHeader(state)
314-
val calendarDatesData = remember { getDates(viewDate) }
318+
DayOfWeekHeader(state, locale)
319+
val calendarDatesData = remember { getDates(viewDate, locale) }
315320
val datesList = remember { IntRange(1, calendarDatesData.second).toList() }
316321
val possibleSelected = remember(state.selected) {
317322
viewDate.year == state.selected.year && viewDate.month == state.selected.month
@@ -373,7 +378,13 @@ private fun DateSelectionBox(
373378

374379
@OptIn(ExperimentalFoundationApi::class)
375380
@Composable
376-
private fun DayOfWeekHeader(state: DatePickerState) {
381+
private fun DayOfWeekHeader(state: DatePickerState, locale: Locale) {
382+
val dayHeaders = WeekFields.of(locale).firstDayOfWeek.let { firstDayOfWeek ->
383+
(0L until 7L).map {
384+
firstDayOfWeek.plus(it).getDisplayName(java.time.format.TextStyle.NARROW, locale)
385+
}
386+
}
387+
377388
Row(
378389
modifier = Modifier
379390
.height(40.dp)
@@ -382,7 +393,7 @@ private fun DayOfWeekHeader(state: DatePickerState) {
382393
horizontalArrangement = Arrangement.SpaceEvenly
383394
) {
384395
LazyVerticalGrid(cells = GridCells.Fixed(7)) {
385-
DatePickerState.dayHeaders.forEach { it ->
396+
dayHeaders.forEach { it ->
386397
item {
387398
Box(Modifier.size(40.dp)) {
388399
Text(
@@ -402,9 +413,9 @@ private fun DayOfWeekHeader(state: DatePickerState) {
402413
}
403414

404415
@Composable
405-
private fun CalendarHeader(title: String, state: DatePickerState) {
406-
val month = remember(state.selected) { state.selected.month.shortLocalName }
407-
val day = remember(state.selected) { state.selected.dayOfWeek.shortLocalName }
416+
private fun CalendarHeader(title: String, state: DatePickerState, locale: Locale) {
417+
val month = remember(state.selected) { state.selected.month.getShortLocalName(locale) }
418+
val day = remember(state.selected) { state.selected.dayOfWeek.getShortLocalName(locale) }
408419

409420
Box(
410421
Modifier
@@ -437,9 +448,11 @@ private fun CalendarHeader(title: String, state: DatePickerState) {
437448
}
438449
}
439450

440-
private fun getDates(date: LocalDate): Pair<Int, Int> {
451+
private fun getDates(date: LocalDate, locale: Locale): Pair<Int, Int> {
441452
val numDays = date.month.length(date.isLeapYear)
442-
val firstDay = date.withDayOfMonth(1).dayOfWeek.value % 7
453+
454+
val firstDayOfWeek = WeekFields.of(locale).firstDayOfWeek.value
455+
val firstDay = date.withDayOfMonth(1).dayOfWeek.value - firstDayOfWeek % 7
443456

444457
return Pair(firstDay, numDays)
445458
}

datetime/src/main/java/com/vanpra/composematerialdialogs/datetime/date/DatePickerState.kt

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,4 @@ internal class DatePickerState(
1414
) {
1515
var selected by mutableStateOf(initialDate)
1616
var yearPickerShowing by mutableStateOf(false)
17-
18-
companion object {
19-
val dayHeaders = listOf("S", "M", "T", "W", "T", "F", "S")
20-
}
2117
}

0 commit comments

Comments
 (0)