diff --git a/features/login/src/main/kotlin/io/element/android/features/login/changeserver/ChangeServerState.kt b/features/login/src/main/kotlin/io/element/android/features/login/changeserver/ChangeServerState.kt index 9c1b9ac7e2..99968a908b 100644 --- a/features/login/src/main/kotlin/io/element/android/features/login/changeserver/ChangeServerState.kt +++ b/features/login/src/main/kotlin/io/element/android/features/login/changeserver/ChangeServerState.kt @@ -19,9 +19,15 @@ package io.element.android.features.login.changeserver import io.element.android.libraries.architecture.Async data class ChangeServerState( - val homeserver: String = "", - val changeServerAction: Async = Async.Uninitialized, - val eventSink: (ChangeServerEvents) -> Unit = {}, + val homeserver: String, + val changeServerAction: Async, + val eventSink: (ChangeServerEvents) -> Unit, ) { val submitEnabled = homeserver.isNotEmpty() && changeServerAction !is Async.Loading } + +fun aChangeServerState() = ChangeServerState( + homeserver = "", + changeServerAction = Async.Uninitialized, + eventSink = {} +) diff --git a/features/login/src/main/kotlin/io/element/android/features/login/changeserver/ChangeServerView.kt b/features/login/src/main/kotlin/io/element/android/features/login/changeserver/ChangeServerView.kt index 32fdeedb1d..0e1793a3f2 100644 --- a/features/login/src/main/kotlin/io/element/android/features/login/changeserver/ChangeServerView.kt +++ b/features/login/src/main/kotlin/io/element/android/features/login/changeserver/ChangeServerView.kt @@ -188,6 +188,6 @@ fun ChangeServerViewDarkPreview() = ElementPreviewDark { ContentToPreview() } @Composable private fun ContentToPreview() { ChangeServerView( - state = ChangeServerState(homeserver = "matrix.org"), + state = aChangeServerState().copy(homeserver = "matrix.org"), ) } diff --git a/features/login/src/main/kotlin/io/element/android/features/login/root/LoginRootScreen.kt b/features/login/src/main/kotlin/io/element/android/features/login/root/LoginRootScreen.kt index 052de92a52..c79fe1d261 100644 --- a/features/login/src/main/kotlin/io/element/android/features/login/root/LoginRootScreen.kt +++ b/features/login/src/main/kotlin/io/element/android/features/login/root/LoginRootScreen.kt @@ -230,7 +230,7 @@ fun LoginRootScreenDarkPreview() = ElementPreviewDark { ContentToPreview() } @Composable private fun ContentToPreview() { LoginRootScreen( - state = LoginRootState( + state = aLoginRootState().copy( homeserver = "matrix.org", ), ) diff --git a/features/login/src/main/kotlin/io/element/android/features/login/root/LoginRootState.kt b/features/login/src/main/kotlin/io/element/android/features/login/root/LoginRootState.kt index fab74370f0..e52e8d5664 100644 --- a/features/login/src/main/kotlin/io/element/android/features/login/root/LoginRootState.kt +++ b/features/login/src/main/kotlin/io/element/android/features/login/root/LoginRootState.kt @@ -21,10 +21,10 @@ import io.element.android.libraries.matrix.core.SessionId import kotlinx.parcelize.Parcelize data class LoginRootState( - val homeserver: String = "", - val loggedInState: LoggedInState = LoggedInState.NotLoggedIn, - val formState: LoginFormState = LoginFormState.Default, - val eventSink: (LoginRootEvents) -> Unit = {} + val homeserver: String, + val loggedInState: LoggedInState, + val formState: LoginFormState, + val eventSink: (LoginRootEvents) -> Unit ) { val submitEnabled = formState.login.isNotEmpty() && formState.password.isNotEmpty() && loggedInState != LoggedInState.LoggingIn @@ -47,3 +47,10 @@ data class LoginFormState( val Default = LoginFormState("", "") } } + +fun aLoginRootState() = LoginRootState( + homeserver = "", + loggedInState = LoggedInState.NotLoggedIn, + formState = LoginFormState.Default, + eventSink = {} +) diff --git a/features/logout/src/main/kotlin/io/element/android/features/logout/LogoutPreferenceScreen.kt b/features/logout/src/main/kotlin/io/element/android/features/logout/LogoutPreferenceScreen.kt index 2134311672..02706670f0 100644 --- a/features/logout/src/main/kotlin/io/element/android/features/logout/LogoutPreferenceScreen.kt +++ b/features/logout/src/main/kotlin/io/element/android/features/logout/LogoutPreferenceScreen.kt @@ -100,5 +100,5 @@ fun LogoutPreferenceViewDarkPreview() = ElementPreviewDark { ContentToPreview() @Composable private fun ContentToPreview() { - LogoutPreferenceView(LogoutPreferenceState()) + LogoutPreferenceView(aLogoutPreferenceState()) } diff --git a/features/logout/src/main/kotlin/io/element/android/features/logout/LogoutPreferenceState.kt b/features/logout/src/main/kotlin/io/element/android/features/logout/LogoutPreferenceState.kt index e594a04870..104721bd44 100644 --- a/features/logout/src/main/kotlin/io/element/android/features/logout/LogoutPreferenceState.kt +++ b/features/logout/src/main/kotlin/io/element/android/features/logout/LogoutPreferenceState.kt @@ -19,6 +19,11 @@ package io.element.android.features.logout import io.element.android.libraries.architecture.Async data class LogoutPreferenceState( - val logoutAction: Async = Async.Uninitialized, - val eventSink: (LogoutPreferenceEvents) -> Unit = {}, + val logoutAction: Async, + val eventSink: (LogoutPreferenceEvents) -> Unit, +) + +fun aLogoutPreferenceState() = LogoutPreferenceState( + logoutAction = Async.Uninitialized, + eventSink = {} ) diff --git a/features/preferences/src/main/kotlin/io/element/android/features/preferences/root/PreferencesRootState.kt b/features/preferences/src/main/kotlin/io/element/android/features/preferences/root/PreferencesRootState.kt index 2bcc9fc549..d8d9aebb28 100644 --- a/features/preferences/src/main/kotlin/io/element/android/features/preferences/root/PreferencesRootState.kt +++ b/features/preferences/src/main/kotlin/io/element/android/features/preferences/root/PreferencesRootState.kt @@ -17,7 +17,9 @@ package io.element.android.features.preferences.root import io.element.android.features.logout.LogoutPreferenceState +import io.element.android.features.logout.aLogoutPreferenceState import io.element.android.features.rageshake.preferences.RageshakePreferencesState +import io.element.android.features.rageshake.preferences.aRageshakePreferencesState import io.element.android.libraries.architecture.Async import io.element.android.libraries.matrix.ui.model.MatrixUser @@ -26,3 +28,9 @@ data class PreferencesRootState( val rageshakeState: RageshakePreferencesState, val myUser: Async, ) + +fun aPreferencesRootState() = PreferencesRootState( + logoutState = aLogoutPreferenceState(), + rageshakeState = aRageshakePreferencesState(), + myUser = Async.Uninitialized +) diff --git a/features/preferences/src/main/kotlin/io/element/android/features/preferences/root/PreferencesRootView.kt b/features/preferences/src/main/kotlin/io/element/android/features/preferences/root/PreferencesRootView.kt index bd8bda3e40..d781d1cec3 100644 --- a/features/preferences/src/main/kotlin/io/element/android/features/preferences/root/PreferencesRootView.kt +++ b/features/preferences/src/main/kotlin/io/element/android/features/preferences/root/PreferencesRootView.kt @@ -20,12 +20,9 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.res.stringResource import androidx.compose.ui.tooling.preview.Preview -import io.element.android.features.logout.LogoutPreferenceState import io.element.android.features.logout.LogoutPreferenceView import io.element.android.features.preferences.user.UserPreferences -import io.element.android.features.rageshake.preferences.RageshakePreferencesState import io.element.android.features.rageshake.preferences.RageshakePreferencesView -import io.element.android.libraries.architecture.Async import io.element.android.libraries.designsystem.components.preferences.PreferenceView import io.element.android.libraries.designsystem.preview.ElementPreviewDark import io.element.android.libraries.designsystem.preview.ElementPreviewLight @@ -66,10 +63,5 @@ fun PreferencesRootViewDarkPreview() = ElementPreviewDark { ContentToPreview() } @Composable private fun ContentToPreview() { - val state = PreferencesRootState( - logoutState = LogoutPreferenceState(), - rageshakeState = RageshakePreferencesState(), - myUser = Async.Uninitialized - ) - PreferencesRootView(state) + PreferencesRootView(aPreferencesRootState()) } diff --git a/features/rageshake/src/main/kotlin/io/element/android/features/rageshake/bugreport/BugReportState.kt b/features/rageshake/src/main/kotlin/io/element/android/features/rageshake/bugreport/BugReportState.kt index 1f66bb58eb..6fb41a9e88 100644 --- a/features/rageshake/src/main/kotlin/io/element/android/features/rageshake/bugreport/BugReportState.kt +++ b/features/rageshake/src/main/kotlin/io/element/android/features/rageshake/bugreport/BugReportState.kt @@ -21,12 +21,12 @@ import io.element.android.libraries.architecture.Async import kotlinx.parcelize.Parcelize data class BugReportState( - val formState: BugReportFormState = BugReportFormState.Default, - val hasCrashLogs: Boolean = false, - val screenshotUri: String? = null, - val sendingProgress: Float = 0F, - val sending: Async = Async.Uninitialized, - val eventSink: (BugReportEvents) -> Unit = {} + val formState: BugReportFormState, + val hasCrashLogs: Boolean, + val screenshotUri: String?, + val sendingProgress: Float, + val sending: Async, + val eventSink: (BugReportEvents) -> Unit ) { val submitEnabled = formState.description.length > 10 && sending !is Async.Loading @@ -50,3 +50,12 @@ data class BugReportFormState( ) } } + +fun aBugReportState() = BugReportState( + formState = BugReportFormState.Default, + hasCrashLogs = false, + screenshotUri = null, + sendingProgress = 0F, + sending = Async.Uninitialized, + eventSink = {} +) diff --git a/features/rageshake/src/main/kotlin/io/element/android/features/rageshake/bugreport/BugReportView.kt b/features/rageshake/src/main/kotlin/io/element/android/features/rageshake/bugreport/BugReportView.kt index f2fbd7f8f5..1ebc9c83e7 100644 --- a/features/rageshake/src/main/kotlin/io/element/android/features/rageshake/bugreport/BugReportView.kt +++ b/features/rageshake/src/main/kotlin/io/element/android/features/rageshake/bugreport/BugReportView.kt @@ -218,6 +218,6 @@ fun BugReportViewDarkPreview() = ElementPreviewDark { ContentToPreview() } @Composable private fun ContentToPreview() { BugReportView( - state = BugReportState(), + state = aBugReportState(), ) } diff --git a/features/rageshake/src/main/kotlin/io/element/android/features/rageshake/crash/ui/CrashDetectionScreen.kt b/features/rageshake/src/main/kotlin/io/element/android/features/rageshake/crash/ui/CrashDetectionScreen.kt index fb1a6b2d50..3c0bf63473 100644 --- a/features/rageshake/src/main/kotlin/io/element/android/features/rageshake/crash/ui/CrashDetectionScreen.kt +++ b/features/rageshake/src/main/kotlin/io/element/android/features/rageshake/crash/ui/CrashDetectionScreen.kt @@ -78,6 +78,6 @@ fun CrashDetectionContentDarkPreview() = ElementPreviewDark { ContentToPreview() @Composable private fun ContentToPreview() { CrashDetectionContent( - state = CrashDetectionState() + state = aCrashDetectionState() ) } diff --git a/features/rageshake/src/main/kotlin/io/element/android/features/rageshake/crash/ui/CrashDetectionState.kt b/features/rageshake/src/main/kotlin/io/element/android/features/rageshake/crash/ui/CrashDetectionState.kt index bff17b246a..a49d996a05 100644 --- a/features/rageshake/src/main/kotlin/io/element/android/features/rageshake/crash/ui/CrashDetectionState.kt +++ b/features/rageshake/src/main/kotlin/io/element/android/features/rageshake/crash/ui/CrashDetectionState.kt @@ -17,6 +17,11 @@ package io.element.android.features.rageshake.crash.ui data class CrashDetectionState( - val crashDetected: Boolean = false, - val eventSink: (CrashDetectionEvents) -> Unit = {} + val crashDetected: Boolean, + val eventSink: (CrashDetectionEvents) -> Unit +) + +fun aCrashDetectionState() = CrashDetectionState( + crashDetected = false, + eventSink = {} ) diff --git a/features/rageshake/src/main/kotlin/io/element/android/features/rageshake/detection/RageshakeDetectionState.kt b/features/rageshake/src/main/kotlin/io/element/android/features/rageshake/detection/RageshakeDetectionState.kt index 4c99ef264b..738282f737 100644 --- a/features/rageshake/src/main/kotlin/io/element/android/features/rageshake/detection/RageshakeDetectionState.kt +++ b/features/rageshake/src/main/kotlin/io/element/android/features/rageshake/detection/RageshakeDetectionState.kt @@ -18,12 +18,21 @@ package io.element.android.features.rageshake.detection import androidx.compose.runtime.Stable import io.element.android.features.rageshake.preferences.RageshakePreferencesState +import io.element.android.features.rageshake.preferences.aRageshakePreferencesState @Stable data class RageshakeDetectionState( - val takeScreenshot: Boolean = false, - val showDialog: Boolean = false, - val isStarted: Boolean = false, - val preferenceState: RageshakePreferencesState = RageshakePreferencesState(), - val eventSink: (RageshakeDetectionEvents) -> Unit = {} + val takeScreenshot: Boolean, + val showDialog: Boolean, + val isStarted: Boolean, + val preferenceState: RageshakePreferencesState, + val eventSink: (RageshakeDetectionEvents) -> Unit +) + +fun aRageshakeDetectionState() = RageshakeDetectionState( + takeScreenshot = false, + showDialog = false, + isStarted = false, + preferenceState = aRageshakePreferencesState(), + eventSink = {} ) diff --git a/features/rageshake/src/main/kotlin/io/element/android/features/rageshake/preferences/RageshakePreferencesState.kt b/features/rageshake/src/main/kotlin/io/element/android/features/rageshake/preferences/RageshakePreferencesState.kt index e6c45ddf83..cb33d37623 100644 --- a/features/rageshake/src/main/kotlin/io/element/android/features/rageshake/preferences/RageshakePreferencesState.kt +++ b/features/rageshake/src/main/kotlin/io/element/android/features/rageshake/preferences/RageshakePreferencesState.kt @@ -17,8 +17,15 @@ package io.element.android.features.rageshake.preferences data class RageshakePreferencesState( - val isEnabled: Boolean = false, - val isSupported: Boolean = true, - val sensitivity: Float = 0.3f, - val eventSink: (RageshakePreferencesEvents) -> Unit = {}, + val isEnabled: Boolean, + val isSupported: Boolean, + val sensitivity: Float, + val eventSink: (RageshakePreferencesEvents) -> Unit, +) + +fun aRageshakePreferencesState() = RageshakePreferencesState( + isEnabled = false, + isSupported = true, + sensitivity = 0.3f, + eventSink = {} ) diff --git a/features/rageshake/src/main/kotlin/io/element/android/features/rageshake/preferences/RageshakePreferencesView.kt b/features/rageshake/src/main/kotlin/io/element/android/features/rageshake/preferences/RageshakePreferencesView.kt index 815340b8b2..c4d3d39be8 100644 --- a/features/rageshake/src/main/kotlin/io/element/android/features/rageshake/preferences/RageshakePreferencesView.kt +++ b/features/rageshake/src/main/kotlin/io/element/android/features/rageshake/preferences/RageshakePreferencesView.kt @@ -85,7 +85,7 @@ fun RageshakePreferencesViewDarkPreview() = ElementPreviewDark { ContentToPrevie @Composable private fun ContentToPreview() { - RageshakePreferencesView(RageshakePreferencesState(isEnabled = true, isSupported = true, sensitivity = 0.5f)) + RageshakePreferencesView(aRageshakePreferencesState().copy(isEnabled = true, isSupported = true, sensitivity = 0.5f)) } @Preview @@ -98,5 +98,5 @@ fun RageshakePreferencesViewNotSupportedDarkPreview() = ElementPreviewDark { Con @Composable private fun ContentNotSupportedToPreview() { - RageshakePreferencesView(RageshakePreferencesState(isEnabled = true, isSupported = false, sensitivity = 0.5f)) + RageshakePreferencesView(aRageshakePreferencesState().copy(isEnabled = true, isSupported = false, sensitivity = 0.5f)) } diff --git a/features/template/src/main/kotlin/io/element/android/features/template/TemplateState.kt b/features/template/src/main/kotlin/io/element/android/features/template/TemplateState.kt index 8bb7f91ae3..c97954173a 100644 --- a/features/template/src/main/kotlin/io/element/android/features/template/TemplateState.kt +++ b/features/template/src/main/kotlin/io/element/android/features/template/TemplateState.kt @@ -17,6 +17,11 @@ package io.element.android.features.template // TODO add your ui models. Remove the eventSink if you don't have events. +// Do not use default value, so no member get forgotten in the presenters. data class TemplateState( - val eventSink: (TemplateEvents) -> Unit = {} + val eventSink: (TemplateEvents) -> Unit +) + +fun aTemplateState() = TemplateState( + eventSink = {} ) diff --git a/features/template/src/main/kotlin/io/element/android/features/template/TemplateView.kt b/features/template/src/main/kotlin/io/element/android/features/template/TemplateView.kt index 8069b3a991..e37263e296 100644 --- a/features/template/src/main/kotlin/io/element/android/features/template/TemplateView.kt +++ b/features/template/src/main/kotlin/io/element/android/features/template/TemplateView.kt @@ -50,6 +50,6 @@ fun TemplateViewDarkPreview() = ElementPreviewDark { ContentToPreview() } @Composable private fun ContentToPreview() { TemplateView( - state = TemplateState(), + state = aTemplateState(), ) }