Enforce no default value in state.
This commit is contained in:
parent
a77479ed05
commit
0f0c001c3c
17 changed files with 97 additions and 44 deletions
|
|
@ -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<Unit> = Async.Uninitialized,
|
||||
val eventSink: (ChangeServerEvents) -> Unit = {},
|
||||
val homeserver: String,
|
||||
val changeServerAction: Async<Unit>,
|
||||
val eventSink: (ChangeServerEvents) -> Unit,
|
||||
) {
|
||||
val submitEnabled = homeserver.isNotEmpty() && changeServerAction !is Async.Loading
|
||||
}
|
||||
|
||||
fun aChangeServerState() = ChangeServerState(
|
||||
homeserver = "",
|
||||
changeServerAction = Async.Uninitialized,
|
||||
eventSink = {}
|
||||
)
|
||||
|
|
|
|||
|
|
@ -188,6 +188,6 @@ fun ChangeServerViewDarkPreview() = ElementPreviewDark { ContentToPreview() }
|
|||
@Composable
|
||||
private fun ContentToPreview() {
|
||||
ChangeServerView(
|
||||
state = ChangeServerState(homeserver = "matrix.org"),
|
||||
state = aChangeServerState().copy(homeserver = "matrix.org"),
|
||||
)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -230,7 +230,7 @@ fun LoginRootScreenDarkPreview() = ElementPreviewDark { ContentToPreview() }
|
|||
@Composable
|
||||
private fun ContentToPreview() {
|
||||
LoginRootScreen(
|
||||
state = LoginRootState(
|
||||
state = aLoginRootState().copy(
|
||||
homeserver = "matrix.org",
|
||||
),
|
||||
)
|
||||
|
|
|
|||
|
|
@ -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 = {}
|
||||
)
|
||||
|
|
|
|||
|
|
@ -100,5 +100,5 @@ fun LogoutPreferenceViewDarkPreview() = ElementPreviewDark { ContentToPreview()
|
|||
|
||||
@Composable
|
||||
private fun ContentToPreview() {
|
||||
LogoutPreferenceView(LogoutPreferenceState())
|
||||
LogoutPreferenceView(aLogoutPreferenceState())
|
||||
}
|
||||
|
|
|
|||
|
|
@ -19,6 +19,11 @@ package io.element.android.features.logout
|
|||
import io.element.android.libraries.architecture.Async
|
||||
|
||||
data class LogoutPreferenceState(
|
||||
val logoutAction: Async<Unit> = Async.Uninitialized,
|
||||
val eventSink: (LogoutPreferenceEvents) -> Unit = {},
|
||||
val logoutAction: Async<Unit>,
|
||||
val eventSink: (LogoutPreferenceEvents) -> Unit,
|
||||
)
|
||||
|
||||
fun aLogoutPreferenceState() = LogoutPreferenceState(
|
||||
logoutAction = Async.Uninitialized,
|
||||
eventSink = {}
|
||||
)
|
||||
|
|
|
|||
|
|
@ -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<MatrixUser>,
|
||||
)
|
||||
|
||||
fun aPreferencesRootState() = PreferencesRootState(
|
||||
logoutState = aLogoutPreferenceState(),
|
||||
rageshakeState = aRageshakePreferencesState(),
|
||||
myUser = Async.Uninitialized
|
||||
)
|
||||
|
|
|
|||
|
|
@ -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())
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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<Unit> = Async.Uninitialized,
|
||||
val eventSink: (BugReportEvents) -> Unit = {}
|
||||
val formState: BugReportFormState,
|
||||
val hasCrashLogs: Boolean,
|
||||
val screenshotUri: String?,
|
||||
val sendingProgress: Float,
|
||||
val sending: Async<Unit>,
|
||||
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 = {}
|
||||
)
|
||||
|
|
|
|||
|
|
@ -218,6 +218,6 @@ fun BugReportViewDarkPreview() = ElementPreviewDark { ContentToPreview() }
|
|||
@Composable
|
||||
private fun ContentToPreview() {
|
||||
BugReportView(
|
||||
state = BugReportState(),
|
||||
state = aBugReportState(),
|
||||
)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -78,6 +78,6 @@ fun CrashDetectionContentDarkPreview() = ElementPreviewDark { ContentToPreview()
|
|||
@Composable
|
||||
private fun ContentToPreview() {
|
||||
CrashDetectionContent(
|
||||
state = CrashDetectionState()
|
||||
state = aCrashDetectionState()
|
||||
)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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 = {}
|
||||
)
|
||||
|
|
|
|||
|
|
@ -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 = {}
|
||||
)
|
||||
|
|
|
|||
|
|
@ -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 = {}
|
||||
)
|
||||
|
|
|
|||
|
|
@ -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))
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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 = {}
|
||||
)
|
||||
|
|
|
|||
|
|
@ -50,6 +50,6 @@ fun TemplateViewDarkPreview() = ElementPreviewDark { ContentToPreview() }
|
|||
@Composable
|
||||
private fun ContentToPreview() {
|
||||
TemplateView(
|
||||
state = TemplateState(),
|
||||
state = aTemplateState(),
|
||||
)
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue