From ec687edc2d56a6836d897be21bf8786c14eb4d0d Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Mon, 13 Feb 2023 11:23:30 +0100 Subject: [PATCH] Extract Provider (and rename them) to their own file and move fixture(s) there. --- .../io/element/android/x/root/RootState.kt | 9 -- .../android/x/root/RootStateProvider.kt | 44 ++++++++ .../io/element/android/x/root/RootView.kt | 27 +---- .../login/changeserver/ChangeServerState.kt | 6 -- .../changeserver/ChangeServerStateProvider.kt | 25 +++++ .../features/login/root/LoginRootState.kt | 7 -- .../login/root/LoginRootStateProvider.kt | 24 +++++ .../features/logout/LogoutPreferenceState.kt | 5 - .../logout/LogoutPreferenceStateProvider.kt | 24 +++++ .../android/features/messages/MessagesView.kt | 6 +- .../messages/actionlist/ActionListState.kt | 6 -- .../actionlist/ActionListStateProvider.kt | 47 ++++++++ .../messages/actionlist/ActionListView.kt | 27 +---- .../messages/timeline/TimelineState.kt | 8 -- .../timeline/TimelineStateProvider.kt | 100 ++++++++++++++++++ .../messages/timeline/TimelineView.kt | 79 +------------- .../model/TimelineItemGroupPosition.kt | 9 -- .../TimelineItemGroupPositionProvider.kt | 28 +++++ .../model/content/TimelineItemContent.kt | 26 ----- .../content/TimelineItemContentProvider.kt | 43 ++++++++ .../preferences/root/PreferencesRootState.kt | 8 -- .../root/PreferencesRootStateProvider.kt | 27 +++++ .../preferences/root/PreferencesRootView.kt | 6 +- .../rageshake/bugreport/BugReportState.kt | 9 -- .../bugreport/BugReportStateProvider.kt | 28 +++++ .../rageshake/crash/ui/CrashDetectionState.kt | 5 - .../crash/ui/CrashDetectionStateProvider.kt | 22 ++++ .../detection/RageshakeDetectionState.kt | 9 -- .../RageshakeDetectionStateProvider.kt | 27 +++++ .../preferences/RageshakePreferencesState.kt | 7 -- .../RageshakePreferencesStateProvider.kt | 34 ++++++ .../preferences/RageshakePreferencesView.kt | 13 +-- .../features/roomlist/model/RoomListState.kt | 8 -- .../roomlist/model/RoomListStateProvider.kt | 26 +++++ .../features/template/TemplateState.kt | 4 - .../template/TemplateStateProvider.kt | 31 ++++++ .../android/features/template/TemplateView.kt | 13 +-- .../designsystem/components/avatar/Avatar.kt | 4 +- .../components/avatar/AvatarData.kt | 15 --- .../components/avatar/AvatarDataProvider.kt | 33 ++++++ ...arameterProvider.kt => BooleanProvider.kt} | 2 +- ...terProvider.kt => PairCombinedProvider.kt} | 2 +- ...ParameterProvider.kt => StringProvider.kt} | 2 +- .../matrix/ui/components/MatrixUserHeader.kt | 4 +- ...meterProvider.kt => MatrixUserProvider.kt} | 2 +- .../matrix/ui/components/MatrixUserRow.kt | 4 +- 46 files changed, 593 insertions(+), 302 deletions(-) create mode 100644 app/src/main/kotlin/io/element/android/x/root/RootStateProvider.kt create mode 100644 features/login/src/main/kotlin/io/element/android/features/login/changeserver/ChangeServerStateProvider.kt create mode 100644 features/login/src/main/kotlin/io/element/android/features/login/root/LoginRootStateProvider.kt create mode 100644 features/logout/src/main/kotlin/io/element/android/features/logout/LogoutPreferenceStateProvider.kt create mode 100644 features/messages/src/main/kotlin/io/element/android/features/messages/actionlist/ActionListStateProvider.kt create mode 100644 features/messages/src/main/kotlin/io/element/android/features/messages/timeline/TimelineStateProvider.kt create mode 100644 features/messages/src/main/kotlin/io/element/android/features/messages/timeline/model/TimelineItemGroupPositionProvider.kt create mode 100644 features/messages/src/main/kotlin/io/element/android/features/messages/timeline/model/content/TimelineItemContentProvider.kt create mode 100644 features/preferences/src/main/kotlin/io/element/android/features/preferences/root/PreferencesRootStateProvider.kt create mode 100644 features/rageshake/src/main/kotlin/io/element/android/features/rageshake/bugreport/BugReportStateProvider.kt create mode 100644 features/rageshake/src/main/kotlin/io/element/android/features/rageshake/crash/ui/CrashDetectionStateProvider.kt create mode 100644 features/rageshake/src/main/kotlin/io/element/android/features/rageshake/detection/RageshakeDetectionStateProvider.kt create mode 100644 features/rageshake/src/main/kotlin/io/element/android/features/rageshake/preferences/RageshakePreferencesStateProvider.kt create mode 100644 features/roomlist/src/main/kotlin/io/element/android/features/roomlist/model/RoomListStateProvider.kt create mode 100644 features/template/src/main/kotlin/io/element/android/features/template/TemplateStateProvider.kt create mode 100644 libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/avatar/AvatarDataProvider.kt rename libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/utils/{BooleanPreviewParameterProvider.kt => BooleanProvider.kt} (90%) rename libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/utils/{PairCombinedPreviewParameterProvider.kt => PairCombinedProvider.kt} (94%) rename libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/utils/{StringPreviewParameterProvider.kt => StringProvider.kt} (88%) rename libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/{MatrixUserPreviewParameterProvider.kt => MatrixUserProvider.kt} (94%) diff --git a/app/src/main/kotlin/io/element/android/x/root/RootState.kt b/app/src/main/kotlin/io/element/android/x/root/RootState.kt index d663b3c7c2..4f6b4c2062 100644 --- a/app/src/main/kotlin/io/element/android/x/root/RootState.kt +++ b/app/src/main/kotlin/io/element/android/x/root/RootState.kt @@ -18,9 +18,7 @@ package io.element.android.x.root import androidx.compose.runtime.Stable import io.element.android.features.rageshake.crash.ui.CrashDetectionState -import io.element.android.features.rageshake.crash.ui.aCrashDetectionState import io.element.android.features.rageshake.detection.RageshakeDetectionState -import io.element.android.features.rageshake.detection.aRageshakeDetectionState @Stable data class RootState( @@ -29,10 +27,3 @@ data class RootState( val crashDetectionState: CrashDetectionState, val eventSink: (RootEvents) -> Unit ) - -fun aRootState() = RootState( - isShowkaseButtonVisible = false, - rageshakeDetectionState = aRageshakeDetectionState(), - crashDetectionState = aCrashDetectionState(), - eventSink = {} -) diff --git a/app/src/main/kotlin/io/element/android/x/root/RootStateProvider.kt b/app/src/main/kotlin/io/element/android/x/root/RootStateProvider.kt new file mode 100644 index 0000000000..692f5a88f0 --- /dev/null +++ b/app/src/main/kotlin/io/element/android/x/root/RootStateProvider.kt @@ -0,0 +1,44 @@ +/* + * Copyright (c) 2023 New Vector Ltd + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.element.android.x.root + +import androidx.compose.ui.tooling.preview.PreviewParameterProvider +import io.element.android.features.rageshake.crash.ui.aCrashDetectionState +import io.element.android.features.rageshake.detection.aRageshakeDetectionState + +open class RootStateProvider : PreviewParameterProvider { + override val values: Sequence + get() = sequenceOf( + aRootState().copy( + isShowkaseButtonVisible = true, + rageshakeDetectionState = aRageshakeDetectionState().copy(showDialog = false), + crashDetectionState = aCrashDetectionState().copy(crashDetected = true), + ), + aRootState().copy( + isShowkaseButtonVisible = true, + rageshakeDetectionState = aRageshakeDetectionState().copy(showDialog = true), + crashDetectionState = aCrashDetectionState().copy(crashDetected = false), + ) + ) +} + +fun aRootState() = RootState( + isShowkaseButtonVisible = false, + rageshakeDetectionState = aRageshakeDetectionState(), + crashDetectionState = aCrashDetectionState(), + eventSink = {} +) diff --git a/app/src/main/kotlin/io/element/android/x/root/RootView.kt b/app/src/main/kotlin/io/element/android/x/root/RootView.kt index 06e7c5b023..0dcb1f4600 100644 --- a/app/src/main/kotlin/io/element/android/x/root/RootView.kt +++ b/app/src/main/kotlin/io/element/android/x/root/RootView.kt @@ -26,13 +26,10 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.tooling.preview.PreviewParameter -import androidx.compose.ui.tooling.preview.PreviewParameterProvider import io.element.android.features.rageshake.crash.ui.CrashDetectionEvents import io.element.android.features.rageshake.crash.ui.CrashDetectionView -import io.element.android.features.rageshake.crash.ui.aCrashDetectionState import io.element.android.features.rageshake.detection.RageshakeDetectionEvents import io.element.android.features.rageshake.detection.RageshakeDetectionView -import io.element.android.features.rageshake.detection.aRageshakeDetectionState import io.element.android.libraries.designsystem.preview.ElementPreviewDark import io.element.android.libraries.designsystem.preview.ElementPreviewLight import io.element.android.libraries.designsystem.theme.components.Text @@ -77,29 +74,13 @@ fun RootView( } } -open class RootStatePreviewParameterProvider : PreviewParameterProvider { - override val values: Sequence - get() = sequenceOf( - aRootState().copy( - isShowkaseButtonVisible = true, - rageshakeDetectionState = aRageshakeDetectionState().copy(showDialog = false), - crashDetectionState = aCrashDetectionState().copy(crashDetected = true), - ), - aRootState().copy( - isShowkaseButtonVisible = true, - rageshakeDetectionState = aRageshakeDetectionState().copy(showDialog = true), - crashDetectionState = aCrashDetectionState().copy(crashDetected = false), - ) - ) -} +@Preview +@Composable +fun RootLightPreview(@PreviewParameter(RootStateProvider::class) rootState: RootState) = ElementPreviewLight { ContentToPreview(rootState) } @Preview @Composable -fun RootLightPreview(@PreviewParameter(RootStatePreviewParameterProvider::class) rootState: RootState) = ElementPreviewLight { ContentToPreview(rootState) } - -@Preview -@Composable -fun RootDarkPreview(@PreviewParameter(RootStatePreviewParameterProvider::class) rootState: RootState) = ElementPreviewDark { ContentToPreview(rootState) } +fun RootDarkPreview(@PreviewParameter(RootStateProvider::class) rootState: RootState) = ElementPreviewDark { ContentToPreview(rootState) } @Composable private fun ContentToPreview(rootState: RootState) { 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 99968a908b..3463e1f238 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 @@ -25,9 +25,3 @@ data class ChangeServerState( ) { 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/ChangeServerStateProvider.kt b/features/login/src/main/kotlin/io/element/android/features/login/changeserver/ChangeServerStateProvider.kt new file mode 100644 index 0000000000..85523a9b25 --- /dev/null +++ b/features/login/src/main/kotlin/io/element/android/features/login/changeserver/ChangeServerStateProvider.kt @@ -0,0 +1,25 @@ +/* + * Copyright (c) 2023 New Vector Ltd + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.element.android.features.login.changeserver + +import io.element.android.libraries.architecture.Async + +fun aChangeServerState() = ChangeServerState( + homeserver = "", + changeServerAction = Async.Uninitialized, + eventSink = {} +) 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 e52e8d5664..27af06b11e 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 @@ -47,10 +47,3 @@ data class LoginFormState( val Default = LoginFormState("", "") } } - -fun aLoginRootState() = LoginRootState( - homeserver = "", - loggedInState = LoggedInState.NotLoggedIn, - formState = LoginFormState.Default, - eventSink = {} -) diff --git a/features/login/src/main/kotlin/io/element/android/features/login/root/LoginRootStateProvider.kt b/features/login/src/main/kotlin/io/element/android/features/login/root/LoginRootStateProvider.kt new file mode 100644 index 0000000000..2a5b737719 --- /dev/null +++ b/features/login/src/main/kotlin/io/element/android/features/login/root/LoginRootStateProvider.kt @@ -0,0 +1,24 @@ +/* + * Copyright (c) 2023 New Vector Ltd + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.element.android.features.login.root + +fun aLoginRootState() = LoginRootState( + homeserver = "", + loggedInState = LoggedInState.NotLoggedIn, + formState = LoginFormState.Default, + eventSink = {} +) 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 104721bd44..ee90d64e0b 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 @@ -22,8 +22,3 @@ data class LogoutPreferenceState( val logoutAction: Async, val eventSink: (LogoutPreferenceEvents) -> Unit, ) - -fun aLogoutPreferenceState() = LogoutPreferenceState( - logoutAction = Async.Uninitialized, - eventSink = {} -) diff --git a/features/logout/src/main/kotlin/io/element/android/features/logout/LogoutPreferenceStateProvider.kt b/features/logout/src/main/kotlin/io/element/android/features/logout/LogoutPreferenceStateProvider.kt new file mode 100644 index 0000000000..f6bed308c4 --- /dev/null +++ b/features/logout/src/main/kotlin/io/element/android/features/logout/LogoutPreferenceStateProvider.kt @@ -0,0 +1,24 @@ +/* + * Copyright (c) 2022 New Vector Ltd + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.element.android.features.logout + +import io.element.android.libraries.architecture.Async + +fun aLogoutPreferenceState() = LogoutPreferenceState( + logoutAction = Async.Uninitialized, + eventSink = {} +) diff --git a/features/messages/src/main/kotlin/io/element/android/features/messages/MessagesView.kt b/features/messages/src/main/kotlin/io/element/android/features/messages/MessagesView.kt index de3b6739bc..67117d0d4e 100644 --- a/features/messages/src/main/kotlin/io/element/android/features/messages/MessagesView.kt +++ b/features/messages/src/main/kotlin/io/element/android/features/messages/MessagesView.kt @@ -49,8 +49,8 @@ import io.element.android.features.messages.textcomposer.MessageComposerView import io.element.android.features.messages.textcomposer.aMessageComposerState import io.element.android.features.messages.timeline.TimelineView import io.element.android.features.messages.timeline.aTimelineState -import io.element.android.features.messages.timeline.createTimelineItemContent -import io.element.android.features.messages.timeline.createTimelineItems +import io.element.android.features.messages.timeline.aTimelineItemContent +import io.element.android.features.messages.timeline.aTimelineItemList import io.element.android.features.messages.timeline.model.TimelineItem import io.element.android.libraries.core.data.StableCharSequence import io.element.android.libraries.designsystem.components.avatar.Avatar @@ -217,7 +217,7 @@ private fun ContentToPreview() { mode = MessageComposerMode.Normal("Hello"), ), timelineState = aTimelineState().copy( - timelineItems = createTimelineItems(createTimelineItemContent()), + timelineItems = aTimelineItemList(aTimelineItemContent()), hasMoreToLoad = false, ), actionListState = anActionListState(), diff --git a/features/messages/src/main/kotlin/io/element/android/features/messages/actionlist/ActionListState.kt b/features/messages/src/main/kotlin/io/element/android/features/messages/actionlist/ActionListState.kt index 324003c68b..c3ce691c62 100644 --- a/features/messages/src/main/kotlin/io/element/android/features/messages/actionlist/ActionListState.kt +++ b/features/messages/src/main/kotlin/io/element/android/features/messages/actionlist/ActionListState.kt @@ -26,7 +26,6 @@ data class ActionListState( val target: Target, val eventSink: (ActionListEvents) -> Unit, ) { - sealed interface Target { object None : Target data class Loading(val messageEvent: TimelineItem.MessageEvent) : Target @@ -36,8 +35,3 @@ data class ActionListState( ) : Target } } - -fun anActionListState() = ActionListState( - target = ActionListState.Target.None, - eventSink = {} -) diff --git a/features/messages/src/main/kotlin/io/element/android/features/messages/actionlist/ActionListStateProvider.kt b/features/messages/src/main/kotlin/io/element/android/features/messages/actionlist/ActionListStateProvider.kt new file mode 100644 index 0000000000..e88acf42b7 --- /dev/null +++ b/features/messages/src/main/kotlin/io/element/android/features/messages/actionlist/ActionListStateProvider.kt @@ -0,0 +1,47 @@ +/* + * Copyright (c) 2023 New Vector Ltd + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.element.android.features.messages.actionlist + +import androidx.compose.ui.tooling.preview.PreviewParameterProvider +import io.element.android.features.messages.actionlist.model.TimelineItemAction +import io.element.android.features.messages.timeline.aMessageEvent +import kotlinx.collections.immutable.persistentListOf + +open class ActionListStateProvider : PreviewParameterProvider { + override val values: Sequence + get() = sequenceOf( + anActionListState(), + anActionListState().copy(target = ActionListState.Target.Loading(aMessageEvent())), + anActionListState().copy( + target = ActionListState.Target.Success( + messageEvent = aMessageEvent(), + actions = persistentListOf( + TimelineItemAction.Reply, + TimelineItemAction.Forward, + TimelineItemAction.Copy, + TimelineItemAction.Edit, + TimelineItemAction.Redact, + ) + ) + ) + ) +} + +fun anActionListState() = ActionListState( + target = ActionListState.Target.None, + eventSink = {} +) diff --git a/features/messages/src/main/kotlin/io/element/android/features/messages/actionlist/ActionListView.kt b/features/messages/src/main/kotlin/io/element/android/features/messages/actionlist/ActionListView.kt index d16d2a27f4..a3ca2eb2d6 100644 --- a/features/messages/src/main/kotlin/io/element/android/features/messages/actionlist/ActionListView.kt +++ b/features/messages/src/main/kotlin/io/element/android/features/messages/actionlist/ActionListView.kt @@ -39,16 +39,13 @@ import androidx.compose.runtime.snapshotFlow import androidx.compose.ui.Modifier import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.tooling.preview.PreviewParameter -import androidx.compose.ui.tooling.preview.PreviewParameterProvider import androidx.compose.ui.unit.dp import io.element.android.features.messages.actionlist.model.TimelineItemAction -import io.element.android.features.messages.timeline.createMessageEvent import io.element.android.features.messages.timeline.model.TimelineItem import io.element.android.libraries.designsystem.components.VectorIcon import io.element.android.libraries.designsystem.preview.ElementPreviewDark import io.element.android.libraries.designsystem.preview.ElementPreviewLight import io.element.android.libraries.designsystem.theme.components.ModalBottomSheetLayout -import kotlinx.collections.immutable.persistentListOf import kotlinx.coroutines.flow.filter import kotlinx.coroutines.launch @@ -136,34 +133,14 @@ private fun SheetContent( } } -open class ActionListStatePreviewParameterProvider : PreviewParameterProvider { - override val values: Sequence - get() = sequenceOf( - anActionListState(), - anActionListState().copy(target = ActionListState.Target.Loading(createMessageEvent())), - anActionListState().copy( - target = ActionListState.Target.Success( - messageEvent = createMessageEvent(), - actions = persistentListOf( - TimelineItemAction.Reply, - TimelineItemAction.Forward, - TimelineItemAction.Copy, - TimelineItemAction.Edit, - TimelineItemAction.Redact, - ) - ) - ) - ) -} - @Preview @Composable -fun SheetContentLightPreview(@PreviewParameter(ActionListStatePreviewParameterProvider::class) state: ActionListState) = +fun SheetContentLightPreview(@PreviewParameter(ActionListStateProvider::class) state: ActionListState) = ElementPreviewLight { ContentToPreview(state) } @Preview @Composable -fun SheetContentDarkPreview(@PreviewParameter(ActionListStatePreviewParameterProvider::class) state: ActionListState) = +fun SheetContentDarkPreview(@PreviewParameter(ActionListStateProvider::class) state: ActionListState) = ElementPreviewDark { ContentToPreview(state) } @Composable diff --git a/features/messages/src/main/kotlin/io/element/android/features/messages/timeline/TimelineState.kt b/features/messages/src/main/kotlin/io/element/android/features/messages/timeline/TimelineState.kt index a3ae9b3a72..6b8c715f5d 100644 --- a/features/messages/src/main/kotlin/io/element/android/features/messages/timeline/TimelineState.kt +++ b/features/messages/src/main/kotlin/io/element/android/features/messages/timeline/TimelineState.kt @@ -20,7 +20,6 @@ import androidx.compose.runtime.Immutable import io.element.android.features.messages.timeline.model.TimelineItem import io.element.android.libraries.matrix.core.EventId import kotlinx.collections.immutable.ImmutableList -import kotlinx.collections.immutable.persistentListOf @Immutable data class TimelineState( @@ -29,10 +28,3 @@ data class TimelineState( val highlightedEventId: EventId?, val eventSink: (TimelineEvents) -> Unit ) - -fun aTimelineState() = TimelineState( - timelineItems = persistentListOf(), - hasMoreToLoad = false, - highlightedEventId = null, - eventSink = {} -) diff --git a/features/messages/src/main/kotlin/io/element/android/features/messages/timeline/TimelineStateProvider.kt b/features/messages/src/main/kotlin/io/element/android/features/messages/timeline/TimelineStateProvider.kt new file mode 100644 index 0000000000..ac1a39b400 --- /dev/null +++ b/features/messages/src/main/kotlin/io/element/android/features/messages/timeline/TimelineStateProvider.kt @@ -0,0 +1,100 @@ +/* + * Copyright (c) 2023 New Vector Ltd + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.element.android.features.messages.timeline + +import io.element.android.features.messages.timeline.model.AggregatedReaction +import io.element.android.features.messages.timeline.model.MessagesItemGroupPosition +import io.element.android.features.messages.timeline.model.TimelineItem +import io.element.android.features.messages.timeline.model.TimelineItemReactions +import io.element.android.features.messages.timeline.model.content.TimelineItemContent +import io.element.android.features.messages.timeline.model.content.TimelineItemTextContent +import io.element.android.libraries.designsystem.components.avatar.AvatarData +import io.element.android.libraries.matrix.core.EventId +import kotlinx.collections.immutable.ImmutableList +import kotlinx.collections.immutable.persistentListOf + +fun aTimelineState() = TimelineState( + timelineItems = persistentListOf(), + hasMoreToLoad = false, + highlightedEventId = null, + eventSink = {} +) + +internal fun aTimelineItemList(content: TimelineItemContent): ImmutableList { + return persistentListOf( + // 3 items (First Middle Last) with isMine = false + aMessageEvent( + isMine = false, + content = content, + groupPosition = MessagesItemGroupPosition.Last + ), + aMessageEvent( + isMine = false, + content = content, + groupPosition = MessagesItemGroupPosition.Middle + ), + aMessageEvent( + isMine = false, + content = content, + groupPosition = MessagesItemGroupPosition.First + ), + // 3 items (First Middle Last) with isMine = true + aMessageEvent( + isMine = true, + content = content, + groupPosition = MessagesItemGroupPosition.Last + ), + aMessageEvent( + isMine = true, + content = content, + groupPosition = MessagesItemGroupPosition.Middle + ), + aMessageEvent( + isMine = true, + content = content, + groupPosition = MessagesItemGroupPosition.First + ), + ) +} + +internal fun aMessageEvent( + isMine: Boolean = false, + content: TimelineItemContent = aTimelineItemContent(), + groupPosition: MessagesItemGroupPosition = MessagesItemGroupPosition.First +): TimelineItem.MessageEvent { + return TimelineItem.MessageEvent( + id = EventId(Math.random().toString()), + senderId = "@senderId", + senderAvatar = AvatarData("@senderId", "sender"), + content = content, + reactionsState = TimelineItemReactions( + persistentListOf( + AggregatedReaction("👍", "1") + ) + ), + isMine = isMine, + senderDisplayName = "sender", + groupPosition = groupPosition, + ) +} + +internal fun aTimelineItemContent(): TimelineItemContent { + return TimelineItemTextContent( + body = "Text", + htmlDocument = null + ) +} diff --git a/features/messages/src/main/kotlin/io/element/android/features/messages/timeline/TimelineView.kt b/features/messages/src/main/kotlin/io/element/android/features/messages/timeline/TimelineView.kt index ccfd566703..b211aead61 100644 --- a/features/messages/src/main/kotlin/io/element/android/features/messages/timeline/TimelineView.kt +++ b/features/messages/src/main/kotlin/io/element/android/features/messages/timeline/TimelineView.kt @@ -61,17 +61,13 @@ import io.element.android.features.messages.timeline.components.TimelineItemReac import io.element.android.features.messages.timeline.components.TimelineItemRedactedView import io.element.android.features.messages.timeline.components.TimelineItemTextView import io.element.android.features.messages.timeline.components.TimelineItemUnknownView -import io.element.android.features.messages.timeline.model.AggregatedReaction -import io.element.android.features.messages.timeline.model.MessagesItemGroupPosition import io.element.android.features.messages.timeline.model.TimelineItem -import io.element.android.features.messages.timeline.model.TimelineItemReactions -import io.element.android.features.messages.timeline.model.content.MessagesTimelineItemContentProvider +import io.element.android.features.messages.timeline.model.content.TimelineItemContentProvider import io.element.android.features.messages.timeline.model.content.TimelineItemContent import io.element.android.features.messages.timeline.model.content.TimelineItemEncryptedContent import io.element.android.features.messages.timeline.model.content.TimelineItemImageContent import io.element.android.features.messages.timeline.model.content.TimelineItemRedactedContent import io.element.android.features.messages.timeline.model.content.TimelineItemTextBasedContent -import io.element.android.features.messages.timeline.model.content.TimelineItemTextContent import io.element.android.features.messages.timeline.model.content.TimelineItemUnknownContent import io.element.android.libraries.designsystem.components.avatar.Avatar import io.element.android.libraries.designsystem.components.avatar.AvatarData @@ -81,9 +77,7 @@ import io.element.android.libraries.designsystem.theme.components.CircularProgre import io.element.android.libraries.designsystem.theme.components.FloatingActionButton import io.element.android.libraries.designsystem.theme.components.Icon import io.element.android.libraries.designsystem.theme.components.Text -import io.element.android.libraries.matrix.core.EventId import kotlinx.collections.immutable.ImmutableList -import kotlinx.collections.immutable.persistentListOf import kotlinx.coroutines.flow.distinctUntilChanged import kotlinx.coroutines.launch @@ -354,18 +348,18 @@ internal fun TimelineLoadingMoreIndicator() { @Preview @Composable fun LoginRootScreenLightPreview( - @PreviewParameter(MessagesTimelineItemContentProvider::class) content: TimelineItemContent + @PreviewParameter(TimelineItemContentProvider::class) content: TimelineItemContent ) = ElementPreviewLight { ContentToPreview(content) } @Preview @Composable fun LoginRootScreenDarkPreview( - @PreviewParameter(MessagesTimelineItemContentProvider::class) content: TimelineItemContent + @PreviewParameter(TimelineItemContentProvider::class) content: TimelineItemContent ) = ElementPreviewDark { ContentToPreview(content) } @Composable private fun ContentToPreview(content: TimelineItemContent) { - val timelineItems = createTimelineItems(content) + val timelineItems = aTimelineItemList(content) TimelineView( state = aTimelineState().copy( timelineItems = timelineItems, @@ -373,68 +367,3 @@ private fun ContentToPreview(content: TimelineItemContent) { ) ) } - -internal fun createTimelineItems(content: TimelineItemContent): ImmutableList { - return persistentListOf( - // 3 items (First Middle Last) with isMine = false - createMessageEvent( - isMine = false, - content = content, - groupPosition = MessagesItemGroupPosition.Last - ), - createMessageEvent( - isMine = false, - content = content, - groupPosition = MessagesItemGroupPosition.Middle - ), - createMessageEvent( - isMine = false, - content = content, - groupPosition = MessagesItemGroupPosition.First - ), - // 3 items (First Middle Last) with isMine = true - createMessageEvent( - isMine = true, - content = content, - groupPosition = MessagesItemGroupPosition.Last - ), - createMessageEvent( - isMine = true, - content = content, - groupPosition = MessagesItemGroupPosition.Middle - ), - createMessageEvent( - isMine = true, - content = content, - groupPosition = MessagesItemGroupPosition.First - ), - ) -} - -internal fun createMessageEvent( - isMine: Boolean = false, - content: TimelineItemContent = createTimelineItemContent(), - groupPosition: MessagesItemGroupPosition = MessagesItemGroupPosition.First -): TimelineItem.MessageEvent { - return TimelineItem.MessageEvent( - id = EventId(Math.random().toString()), - senderId = "@senderId", - senderAvatar = AvatarData("@senderId", "sender"), - content = content, - reactionsState = TimelineItemReactions( - persistentListOf( - AggregatedReaction("👍", "1") - ) - ), - isMine = isMine, - senderDisplayName = "sender", - groupPosition = groupPosition, - ) -} - -internal fun createTimelineItemContent(): TimelineItemContent { - return TimelineItemTextContent( - body = "Text", - htmlDocument = null - ) -} diff --git a/features/messages/src/main/kotlin/io/element/android/features/messages/timeline/model/TimelineItemGroupPosition.kt b/features/messages/src/main/kotlin/io/element/android/features/messages/timeline/model/TimelineItemGroupPosition.kt index 9a1ebb9362..dfdcc2a055 100644 --- a/features/messages/src/main/kotlin/io/element/android/features/messages/timeline/model/TimelineItemGroupPosition.kt +++ b/features/messages/src/main/kotlin/io/element/android/features/messages/timeline/model/TimelineItemGroupPosition.kt @@ -17,7 +17,6 @@ package io.element.android.features.messages.timeline.model import androidx.compose.runtime.Immutable -import androidx.compose.ui.tooling.preview.PreviewParameterProvider @Immutable sealed interface MessagesItemGroupPosition { @@ -32,11 +31,3 @@ sealed interface MessagesItemGroupPosition { } } -internal class TimelineItemGroupPositionProvider : PreviewParameterProvider { - override val values = sequenceOf( - MessagesItemGroupPosition.First, - MessagesItemGroupPosition.Middle, - MessagesItemGroupPosition.Last, - MessagesItemGroupPosition.None, - ) -} diff --git a/features/messages/src/main/kotlin/io/element/android/features/messages/timeline/model/TimelineItemGroupPositionProvider.kt b/features/messages/src/main/kotlin/io/element/android/features/messages/timeline/model/TimelineItemGroupPositionProvider.kt new file mode 100644 index 0000000000..609ad63ee2 --- /dev/null +++ b/features/messages/src/main/kotlin/io/element/android/features/messages/timeline/model/TimelineItemGroupPositionProvider.kt @@ -0,0 +1,28 @@ +/* + * Copyright (c) 2023 New Vector Ltd + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.element.android.features.messages.timeline.model + +import androidx.compose.ui.tooling.preview.PreviewParameterProvider + +internal class TimelineItemGroupPositionProvider : PreviewParameterProvider { + override val values = sequenceOf( + MessagesItemGroupPosition.First, + MessagesItemGroupPosition.Middle, + MessagesItemGroupPosition.Last, + MessagesItemGroupPosition.None, + ) +} diff --git a/features/messages/src/main/kotlin/io/element/android/features/messages/timeline/model/content/TimelineItemContent.kt b/features/messages/src/main/kotlin/io/element/android/features/messages/timeline/model/content/TimelineItemContent.kt index 973a4343a3..010d4b20bd 100644 --- a/features/messages/src/main/kotlin/io/element/android/features/messages/timeline/model/content/TimelineItemContent.kt +++ b/features/messages/src/main/kotlin/io/element/android/features/messages/timeline/model/content/TimelineItemContent.kt @@ -16,30 +16,4 @@ package io.element.android.features.messages.timeline.model.content -import androidx.compose.ui.tooling.preview.PreviewParameterProvider -import org.matrix.rustcomponents.sdk.EncryptedMessage - sealed interface TimelineItemContent - -class MessagesTimelineItemContentProvider : PreviewParameterProvider { - override val values = sequenceOf( - TimelineItemEmoteContent( - body = "Emote", - htmlDocument = null - ), - TimelineItemEncryptedContent( - encryptedMessage = EncryptedMessage.Unknown - ), - // TODO MessagesTimelineItemImageContent(), - TimelineItemNoticeContent( - body = "Notice", - htmlDocument = null - ), - TimelineItemRedactedContent, - TimelineItemTextContent( - body = "Text", - htmlDocument = null - ), - TimelineItemUnknownContent, - ) -} diff --git a/features/messages/src/main/kotlin/io/element/android/features/messages/timeline/model/content/TimelineItemContentProvider.kt b/features/messages/src/main/kotlin/io/element/android/features/messages/timeline/model/content/TimelineItemContentProvider.kt new file mode 100644 index 0000000000..83ec1b6f51 --- /dev/null +++ b/features/messages/src/main/kotlin/io/element/android/features/messages/timeline/model/content/TimelineItemContentProvider.kt @@ -0,0 +1,43 @@ +/* + * Copyright (c) 2023 New Vector Ltd + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.element.android.features.messages.timeline.model.content + +import androidx.compose.ui.tooling.preview.PreviewParameterProvider +import org.matrix.rustcomponents.sdk.EncryptedMessage + +class TimelineItemContentProvider : PreviewParameterProvider { + override val values = sequenceOf( + TimelineItemEmoteContent( + body = "Emote", + htmlDocument = null + ), + TimelineItemEncryptedContent( + encryptedMessage = EncryptedMessage.Unknown + ), + // TODO MessagesTimelineItemImageContent(), + TimelineItemNoticeContent( + body = "Notice", + htmlDocument = null + ), + TimelineItemRedactedContent, + TimelineItemTextContent( + body = "Text", + htmlDocument = null + ), + TimelineItemUnknownContent, + ) +} 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 d8d9aebb28..2bcc9fc549 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,9 +17,7 @@ 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 @@ -28,9 +26,3 @@ 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/PreferencesRootStateProvider.kt b/features/preferences/src/main/kotlin/io/element/android/features/preferences/root/PreferencesRootStateProvider.kt new file mode 100644 index 0000000000..dc9f23afd7 --- /dev/null +++ b/features/preferences/src/main/kotlin/io/element/android/features/preferences/root/PreferencesRootStateProvider.kt @@ -0,0 +1,27 @@ +/* + * Copyright (c) 2023 New Vector Ltd + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.element.android.features.preferences.root + +import io.element.android.features.logout.aLogoutPreferenceState +import io.element.android.features.rageshake.preferences.aRageshakePreferencesState +import io.element.android.libraries.architecture.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 29aeccd87f..8e84ed8ae0 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 @@ -28,7 +28,7 @@ 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 -import io.element.android.libraries.matrix.ui.components.MatrixUserPreviewParameterProvider +import io.element.android.libraries.matrix.ui.components.MatrixUserProvider import io.element.android.libraries.matrix.ui.model.MatrixUser import io.element.android.libraries.ui.strings.R as StringR @@ -59,12 +59,12 @@ fun PreferencesRootView( @Preview @Composable -fun PreferencesRootViewLightPreview(@PreviewParameter(MatrixUserPreviewParameterProvider::class) matrixUser: MatrixUser) = +fun PreferencesRootViewLightPreview(@PreviewParameter(MatrixUserProvider::class) matrixUser: MatrixUser) = ElementPreviewLight { ContentToPreview(matrixUser) } @Preview @Composable -fun PreferencesRootViewDarkPreview(@PreviewParameter(MatrixUserPreviewParameterProvider::class) matrixUser: MatrixUser) = +fun PreferencesRootViewDarkPreview(@PreviewParameter(MatrixUserProvider::class) matrixUser: MatrixUser) = ElementPreviewDark { ContentToPreview(matrixUser) } @Composable 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 6fb41a9e88..ea62ea1ef3 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 @@ -50,12 +50,3 @@ 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/BugReportStateProvider.kt b/features/rageshake/src/main/kotlin/io/element/android/features/rageshake/bugreport/BugReportStateProvider.kt new file mode 100644 index 0000000000..bda8487001 --- /dev/null +++ b/features/rageshake/src/main/kotlin/io/element/android/features/rageshake/bugreport/BugReportStateProvider.kt @@ -0,0 +1,28 @@ +/* + * Copyright (c) 2022 New Vector Ltd + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.element.android.features.rageshake.bugreport + +import io.element.android.libraries.architecture.Async + +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/crash/ui/CrashDetectionState.kt b/features/rageshake/src/main/kotlin/io/element/android/features/rageshake/crash/ui/CrashDetectionState.kt index a49d996a05..851b6789df 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 @@ -20,8 +20,3 @@ data class CrashDetectionState( 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/crash/ui/CrashDetectionStateProvider.kt b/features/rageshake/src/main/kotlin/io/element/android/features/rageshake/crash/ui/CrashDetectionStateProvider.kt new file mode 100644 index 0000000000..0ffc9f22a1 --- /dev/null +++ b/features/rageshake/src/main/kotlin/io/element/android/features/rageshake/crash/ui/CrashDetectionStateProvider.kt @@ -0,0 +1,22 @@ +/* + * Copyright (c) 2022 New Vector Ltd + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.element.android.features.rageshake.crash.ui + +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 738282f737..aa8990c82b 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,7 +18,6 @@ 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( @@ -28,11 +27,3 @@ data class RageshakeDetectionState( 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/detection/RageshakeDetectionStateProvider.kt b/features/rageshake/src/main/kotlin/io/element/android/features/rageshake/detection/RageshakeDetectionStateProvider.kt new file mode 100644 index 0000000000..806d0c6df9 --- /dev/null +++ b/features/rageshake/src/main/kotlin/io/element/android/features/rageshake/detection/RageshakeDetectionStateProvider.kt @@ -0,0 +1,27 @@ +/* + * Copyright (c) 2022 New Vector Ltd + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.element.android.features.rageshake.detection + +import io.element.android.features.rageshake.preferences.aRageshakePreferencesState + +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 cb33d37623..acb560ef49 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 @@ -22,10 +22,3 @@ data class RageshakePreferencesState( 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/RageshakePreferencesStateProvider.kt b/features/rageshake/src/main/kotlin/io/element/android/features/rageshake/preferences/RageshakePreferencesStateProvider.kt new file mode 100644 index 0000000000..6ecd59a713 --- /dev/null +++ b/features/rageshake/src/main/kotlin/io/element/android/features/rageshake/preferences/RageshakePreferencesStateProvider.kt @@ -0,0 +1,34 @@ +/* + * Copyright (c) 2023 New Vector Ltd + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.element.android.features.rageshake.preferences + +import androidx.compose.ui.tooling.preview.PreviewParameterProvider + +open class RageshakePreferencesStateProvider : PreviewParameterProvider { + override val values: Sequence + get() = sequenceOf( + aRageshakePreferencesState().copy(isEnabled = true, isSupported = true, sensitivity = 0.5f), + aRageshakePreferencesState().copy(isEnabled = true, isSupported = false, sensitivity = 0.5f), + ) +} + +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 367f5cd694..dd716bd4ad 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 @@ -24,7 +24,6 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.res.stringResource import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.tooling.preview.PreviewParameter -import androidx.compose.ui.tooling.preview.PreviewParameterProvider import io.element.android.libraries.designsystem.components.preferences.PreferenceCategory import io.element.android.libraries.designsystem.components.preferences.PreferenceSlide import io.element.android.libraries.designsystem.components.preferences.PreferenceSwitch @@ -77,22 +76,14 @@ fun RageshakePreferencesView( } } -open class RageshakePreferencesStatePreviewParameterProvider : PreviewParameterProvider { - override val values: Sequence - get() = sequenceOf( - aRageshakePreferencesState().copy(isEnabled = true, isSupported = true, sensitivity = 0.5f), - aRageshakePreferencesState().copy(isEnabled = true, isSupported = false, sensitivity = 0.5f), - ) -} - @Preview @Composable -fun RageshakePreferencesViewLightPreview(@PreviewParameter(RageshakePreferencesStatePreviewParameterProvider::class) state: RageshakePreferencesState) = +fun RageshakePreferencesViewLightPreview(@PreviewParameter(RageshakePreferencesStateProvider::class) state: RageshakePreferencesState) = ElementPreviewLight { ContentToPreview(state) } @Preview @Composable -fun RageshakePreferencesViewDarkPreview(@PreviewParameter(RageshakePreferencesStatePreviewParameterProvider::class) state: RageshakePreferencesState) = +fun RageshakePreferencesViewDarkPreview(@PreviewParameter(RageshakePreferencesStateProvider::class) state: RageshakePreferencesState) = ElementPreviewDark { ContentToPreview(state) } @Composable diff --git a/features/roomlist/src/main/kotlin/io/element/android/features/roomlist/model/RoomListState.kt b/features/roomlist/src/main/kotlin/io/element/android/features/roomlist/model/RoomListState.kt index 5e4d0947d1..e9a48a7249 100644 --- a/features/roomlist/src/main/kotlin/io/element/android/features/roomlist/model/RoomListState.kt +++ b/features/roomlist/src/main/kotlin/io/element/android/features/roomlist/model/RoomListState.kt @@ -19,7 +19,6 @@ package io.element.android.features.roomlist.model import androidx.compose.runtime.Immutable import io.element.android.libraries.matrix.ui.model.MatrixUser import kotlinx.collections.immutable.ImmutableList -import kotlinx.collections.immutable.persistentListOf @Immutable data class RoomListState( @@ -28,10 +27,3 @@ data class RoomListState( val filter: String, val eventSink: (RoomListEvents) -> Unit ) - -fun aRoomListState() = RoomListState( - matrixUser = null, - roomList = persistentListOf(), - filter = "", - eventSink = {} -) diff --git a/features/roomlist/src/main/kotlin/io/element/android/features/roomlist/model/RoomListStateProvider.kt b/features/roomlist/src/main/kotlin/io/element/android/features/roomlist/model/RoomListStateProvider.kt new file mode 100644 index 0000000000..08e2afa2ab --- /dev/null +++ b/features/roomlist/src/main/kotlin/io/element/android/features/roomlist/model/RoomListStateProvider.kt @@ -0,0 +1,26 @@ +/* + * Copyright (c) 2023 New Vector Ltd + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.element.android.features.roomlist.model + +import kotlinx.collections.immutable.persistentListOf + +fun aRoomListState() = RoomListState( + matrixUser = null, + roomList = persistentListOf(), + filter = "", + eventSink = {} +) 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 c97954173a..b9a48a7378 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 @@ -21,7 +21,3 @@ package io.element.android.features.template data class TemplateState( val eventSink: (TemplateEvents) -> Unit ) - -fun aTemplateState() = TemplateState( - eventSink = {} -) diff --git a/features/template/src/main/kotlin/io/element/android/features/template/TemplateStateProvider.kt b/features/template/src/main/kotlin/io/element/android/features/template/TemplateStateProvider.kt new file mode 100644 index 0000000000..7541e1667a --- /dev/null +++ b/features/template/src/main/kotlin/io/element/android/features/template/TemplateStateProvider.kt @@ -0,0 +1,31 @@ +/* + * Copyright (c) 2023 New Vector Ltd + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.element.android.features.template + +import androidx.compose.ui.tooling.preview.PreviewParameterProvider + +open class TemplateStateProvider : PreviewParameterProvider { + override val values: Sequence + get() = sequenceOf( + aTemplateState(), + // Add other state here + ) +} + +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 e6a70858ab..c7456ad49a 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 @@ -23,7 +23,6 @@ import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.tooling.preview.PreviewParameter -import androidx.compose.ui.tooling.preview.PreviewParameterProvider import io.element.android.libraries.designsystem.preview.ElementPreviewDark import io.element.android.libraries.designsystem.preview.ElementPreviewLight import io.element.android.libraries.designsystem.theme.components.Text @@ -41,22 +40,14 @@ fun TemplateView( } } -open class TemplateStatePreviewParameter : PreviewParameterProvider { - override val values: Sequence - get() = sequenceOf( - aTemplateState(), - // Add other state here - ) -} - @Preview @Composable -fun TemplateViewLightPreview(@PreviewParameter(TemplateStatePreviewParameter::class) state: TemplateState) = +fun TemplateViewLightPreview(@PreviewParameter(TemplateStateProvider::class) state: TemplateState) = ElementPreviewLight { ContentToPreview(state) } @Preview @Composable -fun TemplateViewDarkPreview(@PreviewParameter(TemplateStatePreviewParameter::class) state: TemplateState) = +fun TemplateViewDarkPreview(@PreviewParameter(TemplateStateProvider::class) state: TemplateState) = ElementPreviewDark { ContentToPreview(state) } @Composable diff --git a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/avatar/Avatar.kt b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/avatar/Avatar.kt index c1e5fa7e8f..8d6eb0fa4b 100644 --- a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/avatar/Avatar.kt +++ b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/avatar/Avatar.kt @@ -100,12 +100,12 @@ private fun InitialsAvatar( @Preview @Composable -fun AvatarLightPreview(@PreviewParameter(AvatarDataPreviewParameterProvider::class) avatarData: AvatarData) = +fun AvatarLightPreview(@PreviewParameter(AvatarDataProvider::class) avatarData: AvatarData) = ElementPreviewLight { ContentToPreview(avatarData) } @Preview @Composable -fun AvatarDarkPreview(@PreviewParameter(AvatarDataPreviewParameterProvider::class) avatarData: AvatarData) = +fun AvatarDarkPreview(@PreviewParameter(AvatarDataProvider::class) avatarData: AvatarData) = ElementPreviewDark { ContentToPreview(avatarData) } @Composable diff --git a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/avatar/AvatarData.kt b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/avatar/AvatarData.kt index 199e6f575c..7f2cddea09 100644 --- a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/avatar/AvatarData.kt +++ b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/avatar/AvatarData.kt @@ -17,7 +17,6 @@ package io.element.android.libraries.designsystem.components.avatar import androidx.compose.runtime.Immutable -import androidx.compose.ui.tooling.preview.PreviewParameterProvider @Immutable data class AvatarData( @@ -31,17 +30,3 @@ data class AvatarData( return firstChar.uppercase() } } - -open class AvatarDataPreviewParameterProvider : PreviewParameterProvider { - override val values: Sequence - get() = sequenceOf( - anAvatarData(), - anAvatarData().copy(name = null), - ) -} - -fun anAvatarData() = AvatarData( - // Let's the id not start with a 'a'. - id = "@id_of_alice:server.org", - name = "Alice", -) diff --git a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/avatar/AvatarDataProvider.kt b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/avatar/AvatarDataProvider.kt new file mode 100644 index 0000000000..f70240f8e2 --- /dev/null +++ b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/avatar/AvatarDataProvider.kt @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2023 New Vector Ltd + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.element.android.libraries.designsystem.components.avatar + +import androidx.compose.ui.tooling.preview.PreviewParameterProvider + +open class AvatarDataProvider : PreviewParameterProvider { + override val values: Sequence + get() = sequenceOf( + anAvatarData(), + anAvatarData().copy(name = null), + ) +} + +fun anAvatarData() = AvatarData( + // Let's the id not start with a 'a'. + id = "@id_of_alice:server.org", + name = "Alice", +) diff --git a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/utils/BooleanPreviewParameterProvider.kt b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/utils/BooleanProvider.kt similarity index 90% rename from libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/utils/BooleanPreviewParameterProvider.kt rename to libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/utils/BooleanProvider.kt index d74f24e6c1..43d0f9e797 100644 --- a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/utils/BooleanPreviewParameterProvider.kt +++ b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/utils/BooleanProvider.kt @@ -18,7 +18,7 @@ package io.element.android.libraries.designsystem.utils import androidx.compose.ui.tooling.preview.PreviewParameterProvider -open class BooleanPreviewParameterProvider : PreviewParameterProvider { +open class BooleanProvider : PreviewParameterProvider { override val values: Sequence get() = sequenceOf(false, true) } diff --git a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/utils/PairCombinedPreviewParameterProvider.kt b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/utils/PairCombinedProvider.kt similarity index 94% rename from libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/utils/PairCombinedPreviewParameterProvider.kt rename to libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/utils/PairCombinedProvider.kt index 645d53b92e..0f53d44e44 100644 --- a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/utils/PairCombinedPreviewParameterProvider.kt +++ b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/utils/PairCombinedProvider.kt @@ -18,7 +18,7 @@ package io.element.android.libraries.designsystem.utils import androidx.compose.ui.tooling.preview.PreviewParameterProvider -open class PairCombinedPreviewParameterProvider( +open class PairCombinedProvider( private val provider: Pair, PreviewParameterProvider> ) : PreviewParameterProvider> { override val values: Sequence> diff --git a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/utils/StringPreviewParameterProvider.kt b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/utils/StringProvider.kt similarity index 88% rename from libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/utils/StringPreviewParameterProvider.kt rename to libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/utils/StringProvider.kt index 64d77a1d9d..4773259985 100644 --- a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/utils/StringPreviewParameterProvider.kt +++ b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/utils/StringProvider.kt @@ -18,7 +18,7 @@ package io.element.android.libraries.designsystem.utils import androidx.compose.ui.tooling.preview.PreviewParameterProvider -open class StringPreviewParameterProvider(val strings: List) : PreviewParameterProvider { +open class StringProvider(val strings: List) : PreviewParameterProvider { override val values: Sequence get() = strings.asSequence() } diff --git a/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/MatrixUserHeader.kt b/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/MatrixUserHeader.kt index 84eb655b05..18b767bce7 100644 --- a/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/MatrixUserHeader.kt +++ b/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/MatrixUserHeader.kt @@ -84,12 +84,12 @@ fun MatrixUserHeader( @Preview @Composable -fun MatrixUserHeaderLightPreview(@PreviewParameter(MatrixUserPreviewParameterProvider::class) matrixUser: MatrixUser) = +fun MatrixUserHeaderLightPreview(@PreviewParameter(MatrixUserProvider::class) matrixUser: MatrixUser) = ElementPreviewLight { ContentToPreview(matrixUser) } @Preview @Composable -fun MatrixUserHeaderDarkPreview(@PreviewParameter(MatrixUserPreviewParameterProvider::class) matrixUser: MatrixUser) = +fun MatrixUserHeaderDarkPreview(@PreviewParameter(MatrixUserProvider::class) matrixUser: MatrixUser) = ElementPreviewDark { ContentToPreview(matrixUser) } @Composable diff --git a/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/MatrixUserPreviewParameterProvider.kt b/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/MatrixUserProvider.kt similarity index 94% rename from libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/MatrixUserPreviewParameterProvider.kt rename to libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/MatrixUserProvider.kt index c277ca42c2..53a5e7a16a 100644 --- a/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/MatrixUserPreviewParameterProvider.kt +++ b/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/MatrixUserProvider.kt @@ -21,7 +21,7 @@ import io.element.android.libraries.designsystem.components.avatar.anAvatarData import io.element.android.libraries.matrix.core.UserId import io.element.android.libraries.matrix.ui.model.MatrixUser -open class MatrixUserPreviewParameterProvider : PreviewParameterProvider { +open class MatrixUserProvider : PreviewParameterProvider { override val values: Sequence get() = sequenceOf( aMatrixUser(), diff --git a/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/MatrixUserRow.kt b/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/MatrixUserRow.kt index 246b435f81..2355330907 100644 --- a/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/MatrixUserRow.kt +++ b/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/MatrixUserRow.kt @@ -89,12 +89,12 @@ fun MatrixUserRow( @Preview @Composable -fun MatrixUserRowLightPreview(@PreviewParameter(MatrixUserPreviewParameterProvider::class) matrixUser: MatrixUser) = +fun MatrixUserRowLightPreview(@PreviewParameter(MatrixUserProvider::class) matrixUser: MatrixUser) = ElementPreviewLight { ContentToPreview(matrixUser) } @Preview @Composable -fun MatrixUserRowDarkPreview(@PreviewParameter(MatrixUserPreviewParameterProvider::class) matrixUser: MatrixUser) = +fun MatrixUserRowDarkPreview(@PreviewParameter(MatrixUserProvider::class) matrixUser: MatrixUser) = ElementPreviewDark { ContentToPreview(matrixUser) } @Composable