Skip to content

Commit 5996ca3

Browse files
committed
- DialogDate: animate content height when switching from day to year or month selector
- added `DialogEvent::type` enum to replace `isPositiveButton` for easier and more compact event handling - the basic sealed class can still be used, but the enum is mostly sufficiant and shorter and faster to use
1 parent db42865 commit 5996ca3

File tree

6 files changed

+52
-5
lines changed

6 files changed

+52
-5
lines changed

.run/demo.windows.run.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
<configuration default="false" name="demo.windows" type="GradleRunConfiguration" factoryName="Gradle">
33
<ExternalSystemSettings>
44
<option name="executionName" />
5-
<option name="externalProjectPath" value="$PROJECT_DIR$/demo/app/windows" />
5+
<option name="externalProjectPath" value="$PROJECT_DIR$/demo/app" />
66
<option name="externalSystemIdString" value="GRADLE" />
77
<option name="scriptParameters" value="" />
88
<option name="taskDescriptions">

demo/shared/src/commonMain/kotlin/com/michaelflisar/composedialogs/demo/demos/DateTimeDemos.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import androidx.compose.ui.unit.dp
1313
import com.michaelflisar.composedialogs.core.ComposeDialogStyle
1414
import com.michaelflisar.composedialogs.core.DialogButtonType
1515
import com.michaelflisar.composedialogs.core.DialogEvent
16+
import com.michaelflisar.composedialogs.core.DialogEventType
1617
import com.michaelflisar.composedialogs.core.rememberDialogState
1718
import com.michaelflisar.democomposables.DemoButton
1819
import com.michaelflisar.democomposables.layout.DemoRegion

library/core/api/android/core.api

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,7 @@ public final class com/michaelflisar/composedialogs/core/DialogDefaults {
6969
public abstract class com/michaelflisar/composedialogs/core/DialogEvent {
7070
public static final field $stable I
7171
public abstract fun getDismissed ()Z
72+
public abstract fun getType ()Lcom/michaelflisar/composedialogs/core/DialogEventType;
7273
public abstract fun isPositiveButton ()Z
7374
}
7475

@@ -77,6 +78,7 @@ public final class com/michaelflisar/composedialogs/core/DialogEvent$Button : co
7778
public fun <init> (Lcom/michaelflisar/composedialogs/core/DialogButtonType;Z)V
7879
public final fun getButton ()Lcom/michaelflisar/composedialogs/core/DialogButtonType;
7980
public fun getDismissed ()Z
81+
public fun getType ()Lcom/michaelflisar/composedialogs/core/DialogEventType;
8082
public fun isPositiveButton ()Z
8183
public fun toString ()Ljava/lang/String;
8284
}
@@ -85,10 +87,20 @@ public final class com/michaelflisar/composedialogs/core/DialogEvent$Dismissed :
8587
public static final field $stable I
8688
public static final field INSTANCE Lcom/michaelflisar/composedialogs/core/DialogEvent$Dismissed;
8789
public fun getDismissed ()Z
90+
public fun getType ()Lcom/michaelflisar/composedialogs/core/DialogEventType;
8891
public fun isPositiveButton ()Z
8992
public fun toString ()Ljava/lang/String;
9093
}
9194

95+
public final class com/michaelflisar/composedialogs/core/DialogEventType : java/lang/Enum {
96+
public static final field ButtonNegative Lcom/michaelflisar/composedialogs/core/DialogEventType;
97+
public static final field ButtonPositive Lcom/michaelflisar/composedialogs/core/DialogEventType;
98+
public static final field Dismissed Lcom/michaelflisar/composedialogs/core/DialogEventType;
99+
public static fun getEntries ()Lkotlin/enums/EnumEntries;
100+
public static fun valueOf (Ljava/lang/String;)Lcom/michaelflisar/composedialogs/core/DialogEventType;
101+
public static fun values ()[Lcom/michaelflisar/composedialogs/core/DialogEventType;
102+
}
103+
92104
public final class com/michaelflisar/composedialogs/core/DialogInteractionSource {
93105
public static final field $stable I
94106
public final fun getButtonNegativeEnabled ()Landroidx/compose/runtime/MutableState;

library/core/api/jvm/core.api

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,7 @@ public final class com/michaelflisar/composedialogs/core/DialogDefaultsExtension
7373
public abstract class com/michaelflisar/composedialogs/core/DialogEvent {
7474
public static final field $stable I
7575
public abstract fun getDismissed ()Z
76+
public abstract fun getType ()Lcom/michaelflisar/composedialogs/core/DialogEventType;
7677
public abstract fun isPositiveButton ()Z
7778
}
7879

@@ -81,6 +82,7 @@ public final class com/michaelflisar/composedialogs/core/DialogEvent$Button : co
8182
public fun <init> (Lcom/michaelflisar/composedialogs/core/DialogButtonType;Z)V
8283
public final fun getButton ()Lcom/michaelflisar/composedialogs/core/DialogButtonType;
8384
public fun getDismissed ()Z
85+
public fun getType ()Lcom/michaelflisar/composedialogs/core/DialogEventType;
8486
public fun isPositiveButton ()Z
8587
public fun toString ()Ljava/lang/String;
8688
}
@@ -89,10 +91,20 @@ public final class com/michaelflisar/composedialogs/core/DialogEvent$Dismissed :
8991
public static final field $stable I
9092
public static final field INSTANCE Lcom/michaelflisar/composedialogs/core/DialogEvent$Dismissed;
9193
public fun getDismissed ()Z
94+
public fun getType ()Lcom/michaelflisar/composedialogs/core/DialogEventType;
9295
public fun isPositiveButton ()Z
9396
public fun toString ()Ljava/lang/String;
9497
}
9598

99+
public final class com/michaelflisar/composedialogs/core/DialogEventType : java/lang/Enum {
100+
public static final field ButtonNegative Lcom/michaelflisar/composedialogs/core/DialogEventType;
101+
public static final field ButtonPositive Lcom/michaelflisar/composedialogs/core/DialogEventType;
102+
public static final field Dismissed Lcom/michaelflisar/composedialogs/core/DialogEventType;
103+
public static fun getEntries ()Lkotlin/enums/EnumEntries;
104+
public static fun valueOf (Ljava/lang/String;)Lcom/michaelflisar/composedialogs/core/DialogEventType;
105+
public static fun values ()[Lcom/michaelflisar/composedialogs/core/DialogEventType;
106+
}
107+
96108
public final class com/michaelflisar/composedialogs/core/DialogInteractionSource {
97109
public static final field $stable I
98110
public final fun getButtonNegativeEnabled ()Landroidx/compose/runtime/MutableState;

library/core/src/commonMain/kotlin/com/michaelflisar/composedialogs/core/Dialog.kt

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -304,16 +304,28 @@ object DialogDefaults {
304304
// classes
305305
// ------------------
306306

307+
/**
308+
* an enum for the different dialog event types
309+
*/
310+
enum class DialogEventType {
311+
ButtonPositive,
312+
ButtonNegative,
313+
Dismissed
314+
}
315+
307316
/**
308317
* the sealed event for all dialog events (button click and dismissal)
309318
*
310319
* [DialogEvent.dismissed] the information if this event will dismiss the dialog or not
311-
* [DialogEvent.isPositiveButton] a convenient value to determine, if this is the event of the positive dialog button
320+
* [DialogEvent.type] a convenient enum to determine, if this is the event is a positive button, negative button or a dismissal
312321
*/
313322
sealed class DialogEvent {
314323

315324
abstract val dismissed: Boolean
316-
abstract val isPositiveButton: Boolean // most interesting attribute so we make it easily accessible
325+
@Deprecated("use [DialogEvent::type] instead", replaceWith = ReplaceWith("type == DialogEventType.ButtonPositive"))
326+
abstract val isPositiveButton: Boolean
327+
328+
abstract val type: DialogEventType
317329

318330
/**
319331
* the event of a dialog button click
@@ -325,7 +337,12 @@ sealed class DialogEvent {
325337
val button: DialogButtonType,
326338
override val dismissed: Boolean
327339
) : DialogEvent() {
340+
@Deprecated("use [DialogEvent::type] instead", replaceWith = ReplaceWith("type == DialogEventType.ButtonPositive"))
328341
override val isPositiveButton = button == DialogButtonType.Positive
342+
override val type = when (button) {
343+
DialogButtonType.Positive -> DialogEventType.ButtonPositive
344+
DialogButtonType.Negative -> DialogEventType.ButtonNegative
345+
}
329346
override fun toString() = "DialogEvent::Button(button=$button, dismissed=$dismissed)"
330347
}
331348

@@ -334,7 +351,9 @@ sealed class DialogEvent {
334351
*/
335352
object Dismissed : DialogEvent() {
336353
override val dismissed = true
354+
@Deprecated("use [DialogEvent::type] instead", replaceWith = ReplaceWith("type == DialogEventType.ButtonPositive"))
337355
override val isPositiveButton = false
356+
override val type = DialogEventType.Dismissed
338357
override fun toString() = "DialogEvent::Dismissed"
339358
}
340359
}

library/modules/date/src/commonMain/kotlin/com/michaelflisar/composedialogs/dialogs/date/DialogDate.kt

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.michaelflisar.composedialogs.dialogs.date
22

3+
import androidx.compose.animation.animateContentSize
34
import androidx.compose.foundation.layout.Box
45
import androidx.compose.foundation.layout.Column
56
import androidx.compose.foundation.layout.Row
@@ -190,7 +191,7 @@ fun DialogDate(
190191
DateViewState.SelectMonth -> Modifier
191192
}
192193
Column(
193-
modifier = modifier
194+
modifier = modifier.animateContentSize()
194195
) {
195196
CalendarHeader(pagerState, dateRange, setup, pageData, viewState)
196197
when (viewState.value) {
@@ -218,7 +219,9 @@ fun DialogDate(
218219
}
219220
}
220221
} else {
221-
Column {
222+
Column(
223+
modifier = Modifier.animateContentSize()
224+
) {
222225
Row(
223226
verticalAlignment = Alignment.CenterVertically
224227
) {

0 commit comments

Comments
 (0)