diff --git a/appnav/src/main/kotlin/io/element/android/appnav/RootFlowNode.kt b/appnav/src/main/kotlin/io/element/android/appnav/RootFlowNode.kt index df98998ba5..c3b30f0f54 100644 --- a/appnav/src/main/kotlin/io/element/android/appnav/RootFlowNode.kt +++ b/appnav/src/main/kotlin/io/element/android/appnav/RootFlowNode.kt @@ -134,8 +134,8 @@ class RootFlowNode @AssistedInject constructor( private suspend fun restoreSessionIfNeeded( sessionId: SessionId, - onFailure: () -> Unit = {}, - onSuccess: (SessionId) -> Unit = {}, + onFailure: () -> Unit, + onSuccess: (SessionId) -> Unit, ) { matrixClientsHolder.getOrRestore(sessionId) .onSuccess { @@ -149,8 +149,8 @@ class RootFlowNode @AssistedInject constructor( } private suspend fun tryToRestoreLatestSession( - onSuccess: (SessionId) -> Unit = {}, - onFailure: () -> Unit = {} + onSuccess: (SessionId) -> Unit, + onFailure: () -> Unit ) { val latestSessionId = authenticationService.getLatestSessionId() if (latestSessionId == null) { diff --git a/appnav/src/main/kotlin/io/element/android/appnav/root/RootView.kt b/appnav/src/main/kotlin/io/element/android/appnav/root/RootView.kt index 53eae2395e..a04024f766 100644 --- a/appnav/src/main/kotlin/io/element/android/appnav/root/RootView.kt +++ b/appnav/src/main/kotlin/io/element/android/appnav/root/RootView.kt @@ -35,8 +35,8 @@ import io.element.android.services.apperror.impl.AppErrorView @Composable fun RootView( state: RootState, + onOpenBugReport: () -> Unit, modifier: Modifier = Modifier, - onOpenBugReport: () -> Unit = {}, children: @Composable BoxScope.() -> Unit, ) { Box( @@ -69,7 +69,10 @@ fun RootView( @PreviewsDayNight @Composable internal fun RootPreview(@PreviewParameter(RootStateProvider::class) rootState: RootState) = ElementPreview { - RootView(rootState) { + RootView( + state = rootState, + onOpenBugReport = {}, + ) { Text("Children") } } diff --git a/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/addpeople/AddPeopleView.kt b/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/addpeople/AddPeopleView.kt index 40a597b649..5148f8f4d2 100644 --- a/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/addpeople/AddPeopleView.kt +++ b/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/addpeople/AddPeopleView.kt @@ -32,8 +32,8 @@ import io.element.android.features.createroom.impl.components.UserListView import io.element.android.features.createroom.impl.userlist.UserListEvents import io.element.android.features.createroom.impl.userlist.UserListState import io.element.android.libraries.designsystem.components.button.BackButton -import io.element.android.libraries.designsystem.preview.PreviewsDayNight import io.element.android.libraries.designsystem.preview.ElementPreview +import io.element.android.libraries.designsystem.preview.PreviewsDayNight import io.element.android.libraries.designsystem.theme.aliasScreenTitle import io.element.android.libraries.designsystem.theme.components.Scaffold import io.element.android.libraries.designsystem.theme.components.Text @@ -46,9 +46,9 @@ import io.element.android.libraries.ui.strings.CommonStrings @Composable fun AddPeopleView( state: UserListState, + onBackPressed: () -> Unit, + onNextPressed: () -> Unit, modifier: Modifier = Modifier, - onBackPressed: () -> Unit = {}, - onNextPressed: () -> Unit = {}, ) { Scaffold( modifier = modifier, @@ -77,6 +77,8 @@ fun AddPeopleView( .fillMaxWidth(), state = state, showBackButton = false, + onUserSelected = { }, + onUserDeselected = {}, ) } } @@ -86,9 +88,9 @@ fun AddPeopleView( @Composable private fun AddPeopleViewTopBar( hasSelectedUsers: Boolean, + onBackPressed: () -> Unit, + onNextPressed: () -> Unit, modifier: Modifier = Modifier, - onBackPressed: () -> Unit = {}, - onNextPressed: () -> Unit = {}, ) { TopAppBar( modifier = modifier, @@ -112,5 +114,9 @@ private fun AddPeopleViewTopBar( @PreviewsDayNight @Composable internal fun AddPeopleViewPreview(@PreviewParameter(AddPeopleUserListStateProvider::class) state: UserListState) = ElementPreview { - AddPeopleView(state = state) + AddPeopleView( + state = state, + onBackPressed = {}, + onNextPressed = {}, + ) } diff --git a/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/components/RoomPrivacyOption.kt b/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/components/RoomPrivacyOption.kt index 00b4206a73..ad98d5f84b 100644 --- a/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/components/RoomPrivacyOption.kt +++ b/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/components/RoomPrivacyOption.kt @@ -41,9 +41,9 @@ import io.element.android.libraries.theme.ElementTheme @Composable fun RoomPrivacyOption( roomPrivacyItem: RoomPrivacyItem, + onOptionSelected: (RoomPrivacyItem) -> Unit, modifier: Modifier = Modifier, isSelected: Boolean = false, - onOptionSelected: (RoomPrivacyItem) -> Unit = {}, ) { Row( modifier @@ -97,10 +97,12 @@ internal fun RoomPrivacyOptionPreview() = ElementPreview { Column { RoomPrivacyOption( roomPrivacyItem = aRoomPrivacyItem, + onOptionSelected = {}, isSelected = true, ) RoomPrivacyOption( roomPrivacyItem = aRoomPrivacyItem, + onOptionSelected = {}, isSelected = false, ) } diff --git a/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/components/SearchMultipleUsersResultItem.kt b/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/components/SearchMultipleUsersResultItem.kt index be6a7e0a79..20f2c78d8a 100644 --- a/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/components/SearchMultipleUsersResultItem.kt +++ b/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/components/SearchMultipleUsersResultItem.kt @@ -33,8 +33,8 @@ import io.element.android.libraries.usersearch.api.UserSearchResult fun SearchMultipleUsersResultItem( searchResult: UserSearchResult, isUserSelected: Boolean, + onCheckedChange: (Boolean) -> Unit, modifier: Modifier = Modifier, - onCheckedChange: (Boolean) -> Unit = {}, ) { if (searchResult.isUnresolved) { CheckableUnresolvedUserRow( @@ -62,12 +62,40 @@ internal fun SearchMultipleUsersResultItemPreview() = ElementThemedPreview { Con @Composable private fun ContentToPreview() { Column { - SearchMultipleUsersResultItem(searchResult = UserSearchResult(aMatrixUser(), isUnresolved = false), isUserSelected = false) + SearchMultipleUsersResultItem( + searchResult = UserSearchResult( + aMatrixUser(), + isUnresolved = false + ), + isUserSelected = false, + onCheckedChange = {} + ) HorizontalDivider() - SearchMultipleUsersResultItem(searchResult = UserSearchResult(aMatrixUser(), isUnresolved = false), isUserSelected = true) + SearchMultipleUsersResultItem( + searchResult = UserSearchResult( + aMatrixUser(), + isUnresolved = false + ), + isUserSelected = true, + onCheckedChange = {} + ) HorizontalDivider() - SearchMultipleUsersResultItem(searchResult = UserSearchResult(aMatrixUser(), isUnresolved = true), isUserSelected = false) + SearchMultipleUsersResultItem( + searchResult = UserSearchResult( + aMatrixUser(), + isUnresolved = true + ), + isUserSelected = false, + onCheckedChange = {} + ) HorizontalDivider() - SearchMultipleUsersResultItem(searchResult = UserSearchResult(aMatrixUser(), isUnresolved = true), isUserSelected = true) + SearchMultipleUsersResultItem( + searchResult = UserSearchResult( + aMatrixUser(), + isUnresolved = true + ), + isUserSelected = true, + onCheckedChange = {} + ) } } diff --git a/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/components/SearchSingleUserResultItem.kt b/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/components/SearchSingleUserResultItem.kt index 69b528f61c..dc4f936acb 100644 --- a/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/components/SearchSingleUserResultItem.kt +++ b/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/components/SearchSingleUserResultItem.kt @@ -33,8 +33,8 @@ import io.element.android.libraries.usersearch.api.UserSearchResult @Composable fun SearchSingleUserResultItem( searchResult: UserSearchResult, + onClick: () -> Unit, modifier: Modifier = Modifier, - onClick: () -> Unit = {}, ) { if (searchResult.isUnresolved) { UnresolvedUserRow( @@ -58,8 +58,14 @@ internal fun SearchSingleUserResultItemPreview() = ElementThemedPreview { Conten @Composable private fun ContentToPreview() { Column { - SearchSingleUserResultItem(searchResult = UserSearchResult(aMatrixUser(), isUnresolved = false)) + SearchSingleUserResultItem( + searchResult = UserSearchResult(aMatrixUser(), isUnresolved = false), + onClick = {}, + ) HorizontalDivider() - SearchSingleUserResultItem(searchResult = UserSearchResult(aMatrixUser(), isUnresolved = true)) + SearchSingleUserResultItem( + searchResult = UserSearchResult(aMatrixUser(), isUnresolved = true), + onClick = {}, + ) } } diff --git a/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/components/SearchUserBar.kt b/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/components/SearchUserBar.kt index be2ba4ddb6..bc562627cc 100644 --- a/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/components/SearchUserBar.kt +++ b/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/components/SearchUserBar.kt @@ -52,13 +52,13 @@ fun SearchUserBar( selectedUsers: ImmutableList, active: Boolean, isMultiSelectionEnabled: Boolean, + onActiveChanged: (Boolean) -> Unit, + onTextChanged: (String) -> Unit, + onUserSelected: (MatrixUser) -> Unit, + onUserDeselected: (MatrixUser) -> Unit, modifier: Modifier = Modifier, showBackButton: Boolean = true, placeHolderTitle: String = stringResource(CommonStrings.common_search_for_someone), - onActiveChanged: (Boolean) -> Unit = {}, - onTextChanged: (String) -> Unit = {}, - onUserSelected: (MatrixUser) -> Unit = {}, - onUserDeselected: (MatrixUser) -> Unit = {}, ) { val columnState = rememberLazyListState() diff --git a/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/components/UserListView.kt b/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/components/UserListView.kt index 61a0fcbd1b..45d898577f 100644 --- a/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/components/UserListView.kt +++ b/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/components/UserListView.kt @@ -26,18 +26,18 @@ import androidx.compose.ui.unit.dp import io.element.android.features.createroom.impl.userlist.UserListEvents import io.element.android.features.createroom.impl.userlist.UserListState import io.element.android.features.createroom.impl.userlist.UserListStateProvider -import io.element.android.libraries.designsystem.preview.PreviewsDayNight import io.element.android.libraries.designsystem.preview.ElementPreview +import io.element.android.libraries.designsystem.preview.PreviewsDayNight import io.element.android.libraries.matrix.api.user.MatrixUser import io.element.android.libraries.matrix.ui.components.SelectedUsersList @Composable fun UserListView( state: UserListState, + onUserSelected: (MatrixUser) -> Unit, + onUserDeselected: (MatrixUser) -> Unit, modifier: Modifier = Modifier, showBackButton: Boolean = true, - onUserSelected: (MatrixUser) -> Unit = {}, - onUserDeselected: (MatrixUser) -> Unit = {}, ) { Column( modifier = modifier, @@ -79,5 +79,9 @@ fun UserListView( @PreviewsDayNight @Composable internal fun UserListViewPreview(@PreviewParameter(UserListStateProvider::class) state: UserListState) = ElementPreview { - UserListView(state = state) + UserListView( + state = state, + onUserSelected = {}, + onUserDeselected = {}, + ) } diff --git a/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/configureroom/ConfigureRoomView.kt b/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/configureroom/ConfigureRoomView.kt index d12a6076b5..e8d32b8965 100644 --- a/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/configureroom/ConfigureRoomView.kt +++ b/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/configureroom/ConfigureRoomView.kt @@ -167,9 +167,9 @@ fun ConfigureRoomView( @Composable private fun ConfigureRoomToolbar( isNextActionEnabled: Boolean, + onBackPressed: () -> Unit, + onNextPressed: () -> Unit, modifier: Modifier = Modifier, - onBackPressed: () -> Unit = {}, - onNextPressed: () -> Unit = {}, ) { TopAppBar( modifier = modifier, @@ -194,9 +194,9 @@ private fun ConfigureRoomToolbar( private fun RoomNameWithAvatar( avatarUri: Uri?, roomName: String, + onAvatarClick: () -> Unit, + onRoomNameChanged: (String) -> Unit, modifier: Modifier = Modifier, - onAvatarClick: () -> Unit = {}, - onRoomNameChanged: (String) -> Unit = {}, ) { Row( modifier = modifier, @@ -221,8 +221,8 @@ private fun RoomNameWithAvatar( @Composable private fun RoomTopic( topic: String, + onTopicChanged: (String) -> Unit, modifier: Modifier = Modifier, - onTopicChanged: (String) -> Unit = {}, ) { LabelledTextField( modifier = modifier, @@ -240,8 +240,8 @@ private fun RoomTopic( @Composable private fun RoomPrivacyOptions( selected: RoomPrivacy?, + onOptionSelected: (RoomPrivacyItem) -> Unit, modifier: Modifier = Modifier, - onOptionSelected: (RoomPrivacyItem) -> Unit = {}, ) { val items = roomPrivacyItems() Column(modifier = modifier.selectableGroup()) { diff --git a/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/root/CreateRoomRootView.kt b/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/root/CreateRoomRootView.kt index 6bc6e33339..4787b6e247 100644 --- a/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/root/CreateRoomRootView.kt +++ b/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/root/CreateRoomRootView.kt @@ -55,11 +55,11 @@ import io.element.android.libraries.ui.strings.CommonStrings @Composable fun CreateRoomRootView( state: CreateRoomRootState, + onClosePressed: () -> Unit, + onNewRoomClicked: () -> Unit, + onOpenDM: (RoomId) -> Unit, + onInviteFriendsClicked: () -> Unit, modifier: Modifier = Modifier, - onClosePressed: () -> Unit = {}, - onNewRoomClicked: () -> Unit = {}, - onOpenDM: (RoomId) -> Unit = {}, - onInviteFriendsClicked: () -> Unit = {}, ) { Scaffold( modifier = modifier.fillMaxWidth(), @@ -81,6 +81,7 @@ fun CreateRoomRootView( onUserSelected = { state.eventSink(CreateRoomRootEvents.StartDM(it)) }, + onUserDeselected = { }, ) if (!state.userListState.isSearchActive) { @@ -111,8 +112,8 @@ fun CreateRoomRootView( @OptIn(ExperimentalMaterial3Api::class) @Composable private fun CreateRoomRootViewTopBar( + onClosePressed: () -> Unit, modifier: Modifier = Modifier, - onClosePressed: () -> Unit = {}, ) { TopAppBar( modifier = modifier, @@ -134,9 +135,9 @@ private fun CreateRoomRootViewTopBar( @Composable private fun CreateRoomActionButtonsList( state: CreateRoomRootState, + onNewRoomClicked: () -> Unit, + onInvitePeopleClicked: () -> Unit, modifier: Modifier = Modifier, - onNewRoomClicked: () -> Unit = {}, - onInvitePeopleClicked: () -> Unit = {}, ) { Column(modifier = modifier) { CreateRoomActionButton( @@ -156,8 +157,8 @@ private fun CreateRoomActionButtonsList( private fun CreateRoomActionButton( @DrawableRes iconRes: Int, text: String, + onClick: () -> Unit, modifier: Modifier = Modifier, - onClick: () -> Unit = {}, ) { Row( modifier = modifier @@ -187,5 +188,9 @@ internal fun CreateRoomRootViewPreview(@PreviewParameter(CreateRoomRootStateProv ElementPreview { CreateRoomRootView( state = state, + onClosePressed = {}, + onNewRoomClicked = {}, + onOpenDM = {}, + onInviteFriendsClicked = {}, ) } diff --git a/features/invitelist/impl/src/main/kotlin/io/element/android/features/invitelist/impl/InviteListView.kt b/features/invitelist/impl/src/main/kotlin/io/element/android/features/invitelist/impl/InviteListView.kt index d6d2d2be49..133d08536d 100644 --- a/features/invitelist/impl/src/main/kotlin/io/element/android/features/invitelist/impl/InviteListView.kt +++ b/features/invitelist/impl/src/main/kotlin/io/element/android/features/invitelist/impl/InviteListView.kt @@ -53,9 +53,9 @@ import io.element.android.libraries.ui.strings.CommonStrings @Composable fun InviteListView( state: InviteListState, + onBackClicked: () -> Unit, + onInviteAccepted: (RoomId) -> Unit, modifier: Modifier = Modifier, - onBackClicked: () -> Unit = {}, - onInviteAccepted: (RoomId) -> Unit = {}, ) { if (state.acceptedAction is Async.Success) { LaunchedEffect(state.acceptedAction) { @@ -113,8 +113,8 @@ fun InviteListView( @Composable private fun InviteListContent( state: InviteListState, + onBackClicked: () -> Unit, modifier: Modifier = Modifier, - onBackClicked: () -> Unit = {}, ) { Scaffold( modifier = modifier, @@ -173,5 +173,9 @@ private fun InviteListContent( @PreviewsDayNight @Composable internal fun InviteListViewPreview(@PreviewParameter(InviteListStateProvider::class) state: InviteListState) = ElementPreview { - InviteListView(state) + InviteListView( + state = state, + onBackClicked = {}, + onInviteAccepted = {}, + ) } diff --git a/features/invitelist/impl/src/main/kotlin/io/element/android/features/invitelist/impl/components/InviteSummaryRow.kt b/features/invitelist/impl/src/main/kotlin/io/element/android/features/invitelist/impl/components/InviteSummaryRow.kt index b48cea95da..905e035fcd 100644 --- a/features/invitelist/impl/src/main/kotlin/io/element/android/features/invitelist/impl/components/InviteSummaryRow.kt +++ b/features/invitelist/impl/src/main/kotlin/io/element/android/features/invitelist/impl/components/InviteSummaryRow.kt @@ -45,8 +45,8 @@ import io.element.android.features.invitelist.impl.model.InviteListInviteSummary import io.element.android.features.invitelist.impl.model.InviteSender import io.element.android.libraries.designsystem.atomic.atoms.UnreadIndicatorAtom import io.element.android.libraries.designsystem.components.avatar.Avatar -import io.element.android.libraries.designsystem.preview.PreviewsDayNight import io.element.android.libraries.designsystem.preview.ElementPreview +import io.element.android.libraries.designsystem.preview.PreviewsDayNight import io.element.android.libraries.designsystem.theme.components.Button import io.element.android.libraries.designsystem.theme.components.ButtonSize import io.element.android.libraries.designsystem.theme.components.OutlinedButton @@ -59,9 +59,9 @@ private val minHeight = 72.dp @Composable internal fun InviteSummaryRow( invite: InviteListInviteSummary, + onAcceptClicked: () -> Unit, + onDeclineClicked: () -> Unit, modifier: Modifier = Modifier, - onAcceptClicked: () -> Unit = {}, - onDeclineClicked: () -> Unit = {}, ) { Box( modifier = modifier @@ -79,8 +79,8 @@ internal fun InviteSummaryRow( @Composable private fun DefaultInviteSummaryRow( invite: InviteListInviteSummary, - onAcceptClicked: () -> Unit = {}, - onDeclineClicked: () -> Unit = {}, + onAcceptClicked: () -> Unit, + onDeclineClicked: () -> Unit, ) { Row( modifier = Modifier @@ -187,5 +187,9 @@ private fun SenderRow(sender: InviteSender) { @PreviewsDayNight @Composable internal fun InviteSummaryRowPreview(@PreviewParameter(InviteListInviteSummaryProvider::class) data: InviteListInviteSummary) = ElementPreview { - InviteSummaryRow(data) + InviteSummaryRow( + invite = data, + onAcceptClicked = {}, + onDeclineClicked = {}, + ) } diff --git a/features/location/impl/src/main/kotlin/io/element/android/features/location/impl/send/SendLocationView.kt b/features/location/impl/src/main/kotlin/io/element/android/features/location/impl/send/SendLocationView.kt index ccafa7e9e7..4b6269acf3 100644 --- a/features/location/impl/src/main/kotlin/io/element/android/features/location/impl/send/SendLocationView.kt +++ b/features/location/impl/src/main/kotlin/io/element/android/features/location/impl/send/SendLocationView.kt @@ -68,8 +68,8 @@ import io.element.android.libraries.ui.strings.CommonStrings @Composable fun SendLocationView( state: SendLocationState, + navigateUp: () -> Unit, modifier: Modifier = Modifier, - navigateUp: () -> Unit = {}, ) { LaunchedEffect(Unit) { state.eventSink(SendLocationEvents.RequestPermissions) diff --git a/features/location/impl/src/main/kotlin/io/element/android/features/location/impl/show/ShowLocationView.kt b/features/location/impl/src/main/kotlin/io/element/android/features/location/impl/show/ShowLocationView.kt index 82ac402011..2d63f09202 100644 --- a/features/location/impl/src/main/kotlin/io/element/android/features/location/impl/show/ShowLocationView.kt +++ b/features/location/impl/src/main/kotlin/io/element/android/features/location/impl/show/ShowLocationView.kt @@ -67,8 +67,8 @@ import kotlinx.collections.immutable.toImmutableMap @Composable fun ShowLocationView( state: ShowLocationState, + onBackPressed: () -> Unit, modifier: Modifier = Modifier, - onBackPressed: () -> Unit = {}, ) { when (state.permissionDialog) { ShowLocationState.Dialog.None -> Unit diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesView.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesView.kt index c00fbe09aa..b10b4ff963 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesView.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesView.kt @@ -450,10 +450,10 @@ private fun MessagesViewTopBar( roomAvatar: AvatarData?, inRoomCallsEnabled: Boolean, isCallOngoing: Boolean, + onRoomDetailsClicked: () -> Unit, + onJoinCallClicked: () -> Unit, + onBackPressed: () -> Unit, modifier: Modifier = Modifier, - onRoomDetailsClicked: () -> Unit = {}, - onJoinCallClicked: () -> Unit = {}, - onBackPressed: () -> Unit = {}, ) { TopAppBar( modifier = modifier, diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/MessageEventBubble.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/MessageEventBubble.kt index bcb0efc96e..cbd74fd2ee 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/MessageEventBubble.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/MessageEventBubble.kt @@ -58,9 +58,9 @@ private const val BUBBLE_WIDTH_RATIO = 0.85f fun MessageEventBubble( state: BubbleState, interactionSource: MutableInteractionSource, + onClick: () -> Unit, + onLongClick: () -> Unit, modifier: Modifier = Modifier, - onClick: () -> Unit = {}, - onLongClick: () -> Unit = {}, content: @Composable () -> Unit = {}, ) { fun bubbleShape(): Shape { @@ -144,6 +144,8 @@ internal fun MessageEventBubblePreview(@PreviewParameter(BubbleStateProvider::cl MessageEventBubble( state = state, interactionSource = remember { MutableInteractionSource() }, + onClick = {}, + onLongClick = {}, ) { // Render the state as a text to better understand the previews Box( diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/MessageStateEventContainer.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/MessageStateEventContainer.kt index e4dfde37f9..6391c91c24 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/MessageStateEventContainer.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/MessageStateEventContainer.kt @@ -31,8 +31,8 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip import androidx.compose.ui.graphics.Color import androidx.compose.ui.unit.dp -import io.element.android.libraries.designsystem.preview.PreviewsDayNight import io.element.android.libraries.designsystem.preview.ElementPreview +import io.element.android.libraries.designsystem.preview.PreviewsDayNight import io.element.android.libraries.designsystem.theme.components.Surface private val CORNER_RADIUS = 8.dp @@ -42,9 +42,9 @@ private val CORNER_RADIUS = 8.dp fun MessageStateEventContainer( @Suppress("UNUSED_PARAMETER") isHighlighted: Boolean, interactionSource: MutableInteractionSource, + onClick: () -> Unit, + onLongClick: () -> Unit, modifier: Modifier = Modifier, - onClick: () -> Unit = {}, - onLongClick: () -> Unit = {}, content: @Composable () -> Unit = {}, ) { // Ignore isHighlighted for now, we need a design decision on it. @@ -73,12 +73,16 @@ internal fun MessageStateEventContainerPreview() = ElementPreview { MessageStateEventContainer( isHighlighted = false, interactionSource = remember { MutableInteractionSource() }, + onClick = {}, + onLongClick = {}, ) { Spacer(modifier = Modifier.size(width = 120.dp, height = 32.dp)) } MessageStateEventContainer( isHighlighted = true, interactionSource = remember { MutableInteractionSource() }, + onClick = {}, + onLongClick = {}, ) { Spacer(modifier = Modifier.size(width = 120.dp, height = 32.dp)) } diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/event/TimelineItemTextView.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/event/TimelineItemTextView.kt index 4282f0253b..98150ffef9 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/event/TimelineItemTextView.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/event/TimelineItemTextView.kt @@ -39,9 +39,9 @@ fun TimelineItemTextView( content: TimelineItemTextBasedContent, interactionSource: MutableInteractionSource, extraPadding: ExtraPadding, + onTextClicked: () -> Unit, + onTextLongClicked: () -> Unit, modifier: Modifier = Modifier, - onTextClicked: () -> Unit = {}, - onTextLongClicked: () -> Unit = {}, ) { CompositionLocalProvider(LocalContentColor provides ElementTheme.colors.textPrimary) { val htmlDocument = content.htmlDocument @@ -79,5 +79,7 @@ internal fun TimelineItemTextViewPreview( content = content, interactionSource = remember { MutableInteractionSource() }, extraPadding = ExtraPadding(nbChars = 8), + onTextClicked = {}, + onTextLongClicked = {}, ) } diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/html/HtmlDocument.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/html/HtmlDocument.kt index ad6d2790b0..98ba6055a0 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/html/HtmlDocument.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/html/HtmlDocument.kt @@ -58,8 +58,8 @@ import io.element.android.features.messages.impl.timeline.components.event.Extra import io.element.android.features.messages.impl.timeline.components.event.getDpSize import io.element.android.features.messages.impl.timeline.components.event.noExtraPadding import io.element.android.libraries.designsystem.components.ClickableLinkText -import io.element.android.libraries.designsystem.preview.PreviewsDayNight import io.element.android.libraries.designsystem.preview.ElementPreview +import io.element.android.libraries.designsystem.preview.PreviewsDayNight import io.element.android.libraries.designsystem.text.toDp import io.element.android.libraries.designsystem.theme.components.Surface import io.element.android.libraries.designsystem.theme.components.Text @@ -80,9 +80,9 @@ fun HtmlDocument( document: Document, extraPadding: ExtraPadding, interactionSource: MutableInteractionSource, + onTextClicked: () -> Unit, + onTextLongClicked: () -> Unit, modifier: Modifier = Modifier, - onTextClicked: () -> Unit = {}, - onTextLongClicked: () -> Unit = {}, ) { FlowRow( modifier = modifier, @@ -106,16 +106,16 @@ fun HtmlDocument( private fun HtmlBody( body: Element, interactionSource: MutableInteractionSource, + onTextClicked: () -> Unit, + onTextLongClicked: () -> Unit, modifier: Modifier = Modifier, - onTextClicked: () -> Unit = {}, - onTextLongClicked: () -> Unit = {}, ) { @Composable fun NodesFlowRode( nodes: Iterator, interactionSource: MutableInteractionSource, - onTextClicked: () -> Unit = {}, - onTextLongClicked: () -> Unit = {}, + onTextClicked: () -> Unit, + onTextLongClicked: () -> Unit, ) = FlowRow( horizontalArrangement = Arrangement.spacedBy(2.dp, Alignment.Start), verticalArrangement = Arrangement.spacedBy(8.dp, Alignment.Top), @@ -181,9 +181,9 @@ private fun Element.isInline(): Boolean { private fun HtmlBlock( element: Element, interactionSource: MutableInteractionSource, + onTextClicked: () -> Unit, + onTextLongClicked: () -> Unit, modifier: Modifier = Modifier, - onTextClicked: () -> Unit = {}, - onTextLongClicked: () -> Unit = {}, ) { val blockModifier = modifier .padding(top = 4.dp) @@ -239,9 +239,9 @@ private fun HtmlBlock( private fun HtmlInline( element: Element, interactionSource: MutableInteractionSource, + onTextClicked: () -> Unit, + onTextLongClicked: () -> Unit, modifier: Modifier = Modifier, - onTextClicked: () -> Unit = {}, - onTextLongClicked: () -> Unit = {}, ) { Box(modifier) { val styledText = buildAnnotatedString { @@ -281,9 +281,9 @@ private fun HtmlPreformatted( private fun HtmlParagraph( paragraph: Element, interactionSource: MutableInteractionSource, + onTextClicked: () -> Unit, + onTextLongClicked: () -> Unit, modifier: Modifier = Modifier, - onTextClicked: () -> Unit = {}, - onTextLongClicked: () -> Unit = {}, ) { Box(modifier) { val styledText = buildAnnotatedString { @@ -300,9 +300,9 @@ private fun HtmlParagraph( private fun HtmlBlockquote( blockquote: Element, interactionSource: MutableInteractionSource, + onTextClicked: () -> Unit, + onTextLongClicked: () -> Unit, modifier: Modifier = Modifier, - onTextClicked: () -> Unit = {}, - onTextLongClicked: () -> Unit = {}, ) { val color = MaterialTheme.colorScheme.onBackground Box( @@ -333,9 +333,9 @@ private fun HtmlBlockquote( private fun HtmlHeading( heading: Element, interactionSource: MutableInteractionSource, + onTextClicked: () -> Unit, + onTextLongClicked: () -> Unit, modifier: Modifier = Modifier, - onTextClicked: () -> Unit = {}, - onTextLongClicked: () -> Unit = {}, ) { val style = when (heading.tagName().lowercase()) { "h1" -> MaterialTheme.typography.headlineLarge.copy(fontSize = 30.sp) @@ -366,9 +366,9 @@ private fun HtmlHeading( private fun HtmlMxReply( mxReply: Element, interactionSource: MutableInteractionSource, + onTextClicked: () -> Unit, + onTextLongClicked: () -> Unit, modifier: Modifier = Modifier, - onTextClicked: () -> Unit = {}, - onTextLongClicked: () -> Unit = {}, ) { val blockquote = mxReply.childNodes().firstOrNull() ?: return val shape = RoundedCornerShape(12.dp) @@ -419,16 +419,17 @@ private fun HtmlMxReply( private fun HtmlOrderedList( orderedList: Element, interactionSource: MutableInteractionSource, + onTextClicked: () -> Unit, + onTextLongClicked: () -> Unit, modifier: Modifier = Modifier, - onTextClicked: () -> Unit = {}, - onTextLongClicked: () -> Unit = {}, ) { val delimiter = "." HtmlListItems( list = orderedList, marker = { index -> "$index$delimiter" }, modifier = modifier, - onTextClicked = onTextClicked, onTextLongClicked = onTextLongClicked, + onTextClicked = onTextClicked, + onTextLongClicked = onTextLongClicked, interactionSource = interactionSource ) } @@ -437,16 +438,17 @@ private fun HtmlOrderedList( private fun HtmlUnorderedList( unorderedList: Element, interactionSource: MutableInteractionSource, + onTextClicked: () -> Unit, + onTextLongClicked: () -> Unit, modifier: Modifier = Modifier, - onTextClicked: () -> Unit = {}, - onTextLongClicked: () -> Unit = {}, ) { val marker = "・" HtmlListItems( list = unorderedList, marker = { marker }, modifier = modifier, - onTextClicked = onTextClicked, onTextLongClicked = onTextLongClicked, + onTextClicked = onTextClicked, + onTextLongClicked = onTextLongClicked, interactionSource = interactionSource ) } @@ -456,9 +458,9 @@ private fun HtmlListItems( list: Element, marker: (Int) -> String, interactionSource: MutableInteractionSource, + onTextClicked: () -> Unit, + onTextLongClicked: () -> Unit, modifier: Modifier = Modifier, - onTextClicked: () -> Unit = {}, - onTextLongClicked: () -> Unit = {}, ) { Column(modifier = modifier) { for ((index, node) in list.children().withIndex()) { @@ -468,7 +470,12 @@ private fun HtmlListItems( append("${marker(index + 1)} ") appendInlineChildrenElements(node.childNodes(), MaterialTheme.colorScheme) } - HtmlText(text = text, interactionSource = remember { MutableInteractionSource() }) + HtmlText( + text = text, + interactionSource = remember { MutableInteractionSource() }, + onClick = onTextClicked, + onLongClick = onTextLongClicked, + ) } else { for (innerNode in node.childNodes()) { when (innerNode) { @@ -478,15 +485,18 @@ private fun HtmlListItems( append("${marker(index + 1)} ") } HtmlText( - text = text, onClick = onTextClicked, - onLongClick = onTextLongClicked, interactionSource = interactionSource + text = text, + onClick = onTextClicked, + onLongClick = onTextLongClicked, + interactionSource = interactionSource ) } } is Element -> HtmlBlock( element = innerNode, modifier = Modifier.padding(start = 4.dp), - onTextClicked = onTextClicked, onTextLongClicked = onTextLongClicked, + onTextClicked = onTextClicked, + onTextLongClicked = onTextLongClicked, interactionSource = interactionSource ) } @@ -595,10 +605,10 @@ fun AnnotatedString.Builder.safeAppendInlineContent(chipId: String, ownText: Str private fun HtmlText( text: AnnotatedString, interactionSource: MutableInteractionSource, + onClick: () -> Unit, + onLongClick: () -> Unit, modifier: Modifier = Modifier, style: TextStyle = LocalTextStyle.current, - onClick: () -> Unit = {}, - onLongClick: () -> Unit = {}, ) { val inlineContentMap = persistentMapOf() ClickableLinkText( @@ -618,6 +628,8 @@ internal fun HtmlDocumentPreview(@PreviewParameter(DocumentProvider::class) docu HtmlDocument( document = document, extraPadding = noExtraPadding, - interactionSource = remember { MutableInteractionSource() } + interactionSource = remember { MutableInteractionSource() }, + onTextClicked = {}, + onTextLongClicked = {}, ) } diff --git a/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/notifications/edit/DefaultNotificationSettingOption.kt b/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/notifications/edit/DefaultNotificationSettingOption.kt index 3201243e75..80b89ff775 100644 --- a/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/notifications/edit/DefaultNotificationSettingOption.kt +++ b/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/notifications/edit/DefaultNotificationSettingOption.kt @@ -38,9 +38,9 @@ import io.element.android.libraries.theme.ElementTheme @Composable fun DefaultNotificationSettingOption( mode: RoomNotificationMode, + onOptionSelected: (RoomNotificationMode) -> Unit, modifier: Modifier = Modifier, isSelected: Boolean = false, - onOptionSelected: (RoomNotificationMode) -> Unit = {}, ) { val subtitle = when(mode) { RoomNotificationMode.ALL_MESSAGES -> stringResource(id = R.string.screen_notification_settings_edit_mode_all_messages) @@ -86,10 +86,12 @@ internal fun DefaultNotificationSettingOptionPreview() = ElementPreview { DefaultNotificationSettingOption( mode = RoomNotificationMode.ALL_MESSAGES, isSelected = true, + onOptionSelected = {}, ) DefaultNotificationSettingOption( mode = RoomNotificationMode.MENTIONS_AND_KEYWORDS_ONLY, isSelected = false, + onOptionSelected = {}, ) } } diff --git a/features/rageshake/api/src/main/kotlin/io/element/android/features/rageshake/api/detection/RageshakeDetectionView.kt b/features/rageshake/api/src/main/kotlin/io/element/android/features/rageshake/api/detection/RageshakeDetectionView.kt index 88fe5dceb2..0672978a04 100644 --- a/features/rageshake/api/src/main/kotlin/io/element/android/features/rageshake/api/detection/RageshakeDetectionView.kt +++ b/features/rageshake/api/src/main/kotlin/io/element/android/features/rageshake/api/detection/RageshakeDetectionView.kt @@ -70,7 +70,7 @@ fun RageshakeDetectionView( @Composable private fun TakeScreenshot( - onScreenshotTaken: (ImageResult) -> Unit = {} + onScreenshotTaken: (ImageResult) -> Unit ) { val view = LocalView.current LaunchedEffect(Unit) { diff --git a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/invite/RoomInviteMembersView.kt b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/invite/RoomInviteMembersView.kt index ef37ee26bb..29212437e1 100644 --- a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/invite/RoomInviteMembersView.kt +++ b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/invite/RoomInviteMembersView.kt @@ -34,8 +34,8 @@ import androidx.compose.ui.unit.dp import io.element.android.features.roomdetails.impl.R import io.element.android.libraries.designsystem.components.avatar.AvatarSize import io.element.android.libraries.designsystem.components.button.BackButton -import io.element.android.libraries.designsystem.preview.PreviewsDayNight import io.element.android.libraries.designsystem.preview.ElementPreview +import io.element.android.libraries.designsystem.preview.PreviewsDayNight import io.element.android.libraries.designsystem.theme.aliasScreenTitle import io.element.android.libraries.designsystem.theme.components.HorizontalDivider import io.element.android.libraries.designsystem.theme.components.Scaffold @@ -58,9 +58,9 @@ import kotlinx.collections.immutable.ImmutableList @Composable fun RoomInviteMembersView( state: RoomInviteMembersState, + onBackPressed: () -> Unit, + onSendPressed: (List) -> Unit, modifier: Modifier = Modifier, - onBackPressed: () -> Unit = {}, - onSendPressed: (List) -> Unit = {}, ) { Scaffold( modifier = modifier, @@ -113,9 +113,9 @@ fun RoomInviteMembersView( @Composable private fun RoomInviteMembersTopBar( canSend: Boolean, + onBackPressed: () -> Unit, + onSendPressed: () -> Unit, modifier: Modifier = Modifier, - onBackPressed: () -> Unit = {}, - onSendPressed: () -> Unit = {}, ) { TopAppBar( modifier = modifier, @@ -143,11 +143,11 @@ private fun RoomInviteMembersSearchBar( state: SearchBarResultState>, selectedUsers: ImmutableList, active: Boolean, + onActiveChanged: (Boolean) -> Unit, + onTextChanged: (String) -> Unit, + onUserToggled: (MatrixUser) -> Unit, modifier: Modifier = Modifier, placeHolderTitle: String = stringResource(CommonStrings.common_search_for_someone), - onActiveChanged: (Boolean) -> Unit = {}, - onTextChanged: (String) -> Unit = {}, - onUserToggled: (MatrixUser) -> Unit = {}, ) { SearchBar( query = query, @@ -219,5 +219,9 @@ private fun RoomInviteMembersSearchBar( @PreviewsDayNight @Composable internal fun RoomInviteMembersPreview(@PreviewParameter(RoomInviteMembersStateProvider::class) state: RoomInviteMembersState) = ElementPreview { - RoomInviteMembersView(state) + RoomInviteMembersView( + state = state, + onBackPressed = {}, + onSendPressed = {}, + ) } diff --git a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/members/RoomMemberListView.kt b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/members/RoomMemberListView.kt index 991ac60054..de664921a5 100644 --- a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/members/RoomMemberListView.kt +++ b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/members/RoomMemberListView.kt @@ -177,8 +177,8 @@ private fun LazyListScope.roomMemberListSection( @Composable private fun RoomMemberListItem( roomMember: RoomMember, + onClick: () -> Unit, modifier: Modifier = Modifier, - onClick: () -> Unit = {}, ) { MatrixUserRow( modifier = modifier.clickable(onClick = onClick), @@ -195,9 +195,9 @@ private fun RoomMemberListItem( @Composable private fun RoomMemberListTopBar( canInvite: Boolean, + onBackPressed: () -> Unit, + onInvitePressed: () -> Unit, modifier: Modifier = Modifier, - onBackPressed: () -> Unit = {}, - onInvitePressed: () -> Unit = {}, ) { TopAppBar( modifier = modifier, diff --git a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/notificationsettings/RoomNotificationSettingsOption.kt b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/notificationsettings/RoomNotificationSettingsOption.kt index 11f50b763e..5dbacb6899 100644 --- a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/notificationsettings/RoomNotificationSettingsOption.kt +++ b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/notificationsettings/RoomNotificationSettingsOption.kt @@ -37,10 +37,10 @@ import io.element.android.libraries.theme.ElementTheme @Composable fun RoomNotificationSettingsOption( roomNotificationSettingsItem: RoomNotificationSettingsItem, + onOptionSelected: (RoomNotificationSettingsItem) -> Unit, modifier: Modifier = Modifier, enabled: Boolean = true, isSelected: Boolean = false, - onOptionSelected: (RoomNotificationSettingsItem) -> Unit = {}, ) { Row( modifier @@ -83,10 +83,12 @@ internal fun RoomPrivacyOptionPreview() = ElementPreview { Column { RoomNotificationSettingsOption( roomNotificationSettingsItem = roomNotificationSettingsItems().first(), + onOptionSelected = {}, isSelected = true, ) RoomNotificationSettingsOption( roomNotificationSettingsItem = roomNotificationSettingsItems().last(), + onOptionSelected = {}, isSelected = false, enabled = false, ) diff --git a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/notificationsettings/RoomNotificationSettingsOptions.kt b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/notificationsettings/RoomNotificationSettingsOptions.kt index 878632db9c..ab45a71da3 100644 --- a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/notificationsettings/RoomNotificationSettingsOptions.kt +++ b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/notificationsettings/RoomNotificationSettingsOptions.kt @@ -26,8 +26,8 @@ import io.element.android.libraries.matrix.api.room.RoomNotificationMode fun RoomNotificationSettingsOptions( selected: RoomNotificationMode?, enabled: Boolean, + onOptionSelected: (RoomNotificationSettingsItem) -> Unit, modifier: Modifier = Modifier, - onOptionSelected: (RoomNotificationSettingsItem) -> Unit = {}, ) { val items = roomNotificationSettingsItems() Column(modifier = modifier.selectableGroup()) { diff --git a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/notificationsettings/RoomNotificationSettingsView.kt b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/notificationsettings/RoomNotificationSettingsView.kt index dd7d309569..8f1875d5c3 100644 --- a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/notificationsettings/RoomNotificationSettingsView.kt +++ b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/notificationsettings/RoomNotificationSettingsView.kt @@ -74,9 +74,9 @@ fun RoomNotificationSettingsView( @Composable private fun RoomSpecificNotificationSettingsView( state: RoomNotificationSettingsState, + onShowGlobalNotifications: () -> Unit, + onBackPressed: () -> Unit, modifier: Modifier = Modifier, - onShowGlobalNotifications: () -> Unit = {}, - onBackPressed: () -> Unit = {}, ) { Scaffold( modifier = modifier, @@ -173,8 +173,8 @@ private fun RoomSpecificNotificationSettingsView( @OptIn(ExperimentalMaterial3Api::class) @Composable private fun RoomNotificationSettingsTopBar( + onBackPressed: () -> Unit, modifier: Modifier = Modifier, - onBackPressed: () -> Unit = {}, ) { TopAppBar( modifier = modifier, diff --git a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/notificationsettings/UserDefinedRoomNotificationSettingsView.kt b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/notificationsettings/UserDefinedRoomNotificationSettingsView.kt index 6b67e1bf87..f186242d40 100644 --- a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/notificationsettings/UserDefinedRoomNotificationSettingsView.kt +++ b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/notificationsettings/UserDefinedRoomNotificationSettingsView.kt @@ -101,8 +101,8 @@ fun UserDefinedRoomNotificationSettingsView( @Composable private fun UserDefinedRoomNotificationSettingsTopBar( roomName: String, + onBackPressed: () -> Unit, modifier: Modifier = Modifier, - onBackPressed: () -> Unit = {}, ) { TopAppBar( modifier = modifier, diff --git a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/LabelledCheckbox.kt b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/LabelledCheckbox.kt index 2c9c776473..4076be8653 100644 --- a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/LabelledCheckbox.kt +++ b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/LabelledCheckbox.kt @@ -32,8 +32,8 @@ import io.element.android.libraries.designsystem.theme.components.Text fun LabelledCheckbox( checked: Boolean, text: String, + onCheckedChange: (Boolean) -> Unit, modifier: Modifier = Modifier, - onCheckedChange: (Boolean) -> Unit = {}, enabled: Boolean = true, ) { Row( @@ -60,6 +60,7 @@ internal fun LabelledCheckboxPreview() = ElementThemedPreview { ContentToPreview private fun ContentToPreview() { LabelledCheckbox( checked = true, + onCheckedChange = {}, text = "Some text", ) } diff --git a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/LabelledOutlinedTextField.kt b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/LabelledOutlinedTextField.kt index 3658db5206..fccf162634 100644 --- a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/LabelledOutlinedTextField.kt +++ b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/LabelledOutlinedTextField.kt @@ -35,12 +35,12 @@ import io.element.android.libraries.theme.ElementTheme fun LabelledOutlinedTextField( label: String, value: String, + onValueChange: (String) -> Unit, modifier: Modifier = Modifier, placeholder: String? = null, singleLine: Boolean = false, maxLines: Int = if (singleLine) 1 else Int.MAX_VALUE, keyboardOptions: KeyboardOptions = KeyboardOptions.Default, - onValueChange: (String) -> Unit = {}, ) { Column( modifier = modifier, @@ -72,11 +72,13 @@ internal fun LabelledOutlinedTextFieldPreview() = ElementPreview { LabelledOutlinedTextField( label = "Room name", value = "", + onValueChange = {}, placeholder = "e.g. Product Sprint", ) LabelledOutlinedTextField( label = "Room name", value = "a room name", + onValueChange = {}, placeholder = "e.g. Product Sprint", ) } diff --git a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/LabelledTextField.kt b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/LabelledTextField.kt index 64edf11c81..7c4ca06c40 100644 --- a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/LabelledTextField.kt +++ b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/LabelledTextField.kt @@ -35,12 +35,12 @@ import io.element.android.libraries.theme.ElementTheme fun LabelledTextField( label: String, value: String, + onValueChange: (String) -> Unit, modifier: Modifier = Modifier, placeholder: String? = null, singleLine: Boolean = false, maxLines: Int = if (singleLine) 1 else Int.MAX_VALUE, keyboardOptions: KeyboardOptions = KeyboardOptions.Default, - onValueChange: (String) -> Unit = {}, ) { Column( modifier = modifier, @@ -72,11 +72,13 @@ internal fun LabelledTextFieldPreview() = ElementPreview { LabelledTextField( label = "Room name", value = "", + onValueChange = {}, placeholder = "e.g. Product Sprint", ) LabelledTextField( label = "Room name", value = "a room name", + onValueChange = {}, placeholder = "e.g. Product Sprint", ) } diff --git a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/dialogs/RetryDialog.kt b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/dialogs/RetryDialog.kt index 1837041e64..78897efb50 100644 --- a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/dialogs/RetryDialog.kt +++ b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/dialogs/RetryDialog.kt @@ -32,12 +32,12 @@ import io.element.android.libraries.ui.strings.CommonStrings @Composable fun RetryDialog( content: String, + onRetry: () -> Unit, + onDismiss: () -> Unit, modifier: Modifier = Modifier, title: String = RetryDialogDefaults.title, retryText: String = RetryDialogDefaults.retryText, dismissText: String = RetryDialogDefaults.dismissText, - onRetry: () -> Unit = {}, - onDismiss: () -> Unit = {}, ) { BasicAlertDialog(modifier = modifier, onDismissRequest = onDismiss) { RetryDialogContent( @@ -54,12 +54,12 @@ fun RetryDialog( @Composable private fun RetryDialogContent( content: String, + onRetry: () -> Unit, + onDismiss: () -> Unit, modifier: Modifier = Modifier, title: String = RetryDialogDefaults.title, retryText: String = RetryDialogDefaults.retryText, dismissText: String = RetryDialogDefaults.dismissText, - onRetry: () -> Unit = {}, - onDismiss: () -> Unit = {}, ) { SimpleAlertDialogContent( modifier = modifier, @@ -85,6 +85,8 @@ internal fun RetryDialogPreview() { DialogPreview { RetryDialogContent( content = "Content", + onRetry = {}, + onDismiss = {}, ) } } diff --git a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/media/WaveformPlaybackView.kt b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/media/WaveformPlaybackView.kt index bae772c0f2..a9da12b990 100644 --- a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/media/WaveformPlaybackView.kt +++ b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/media/WaveformPlaybackView.kt @@ -59,9 +59,9 @@ private const val DEFAULT_GRAPHICS_LAYER_ALPHA: Float = 0.99F * @param playbackProgress The current playback progress, between 0 and 1. * @param showCursor Whether to show the cursor or not. * @param waveform The waveform to display. Use [FakeWaveformFactory] to generate a fake waveform. + * @param onSeek Callback when the user seeks the waveform. Called with a value between 0 and 1. * @param modifier The modifier to be applied to the view. * @param seekEnabled Whether the user can seek the waveform or not. - * @param onSeek Callback when the user seeks the waveform. Called with a value between 0 and 1. * @param brush The brush to use to draw the waveform. * @param progressBrush The brush to use to draw the progress. * @param cursorBrush The brush to use to draw the cursor. @@ -74,9 +74,9 @@ fun WaveformPlaybackView( playbackProgress: Float, showCursor: Boolean, waveform: ImmutableList, + onSeek: (progress: Float) -> Unit, modifier: Modifier = Modifier, seekEnabled: Boolean = true, - onSeek: (progress: Float) -> Unit = {}, brush: Brush = SolidColor(ElementTheme.colors.iconQuaternary), progressBrush: Brush = SolidColor(ElementTheme.colors.iconSecondary), cursorBrush: Brush = SolidColor(ElementTheme.colors.iconAccentTertiary), @@ -183,18 +183,21 @@ internal fun WaveformPlaybackViewPreview() = ElementPreview { modifier = Modifier.height(34.dp), showCursor = false, playbackProgress = 0.5f, + onSeek = {}, waveform = persistentListOf(), ) WaveformPlaybackView( modifier = Modifier.height(34.dp), showCursor = false, playbackProgress = 0.5f, + onSeek = {}, waveform = persistentListOf(0f, 1f, 2f, 3f, 4f, 5f, 6f, 7f, 8f, 9f, 8f, 7f, 6f, 5f, 4f, 3f, 2f, 1f, 0f), ) WaveformPlaybackView( modifier = Modifier.height(34.dp), showCursor = true, playbackProgress = 0.5f, + onSeek = {}, waveform = List(1024) { it / 1024f }.toPersistentList(), ) } diff --git a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/preferences/PreferenceCategory.kt b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/preferences/PreferenceCategory.kt index e3036194a4..5e1d28dc3b 100644 --- a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/preferences/PreferenceCategory.kt +++ b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/preferences/PreferenceCategory.kt @@ -82,13 +82,15 @@ private fun ContentToPreview() { PreferenceSwitch( title = "Switch", iconResourceId = CommonDrawables.ic_compound_threads, - isChecked = true + isChecked = true, + onCheckedChange = {}, ) PreferenceSlide( title = "Slide", summary = "Summary", value = 0.75F, showIconAreaIfNoIcon = true, + onValueChange = {}, ) } } diff --git a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/preferences/PreferenceCheckbox.kt b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/preferences/PreferenceCheckbox.kt index b44b3ef2ad..c84e731658 100644 --- a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/preferences/PreferenceCheckbox.kt +++ b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/preferences/PreferenceCheckbox.kt @@ -44,13 +44,13 @@ import io.element.android.libraries.theme.ElementTheme fun PreferenceCheckbox( title: String, isChecked: Boolean, + onCheckedChange: (Boolean) -> Unit, modifier: Modifier = Modifier, supportingText: String? = null, enabled: Boolean = true, icon: ImageVector? = null, @DrawableRes iconResourceId: Int? = null, showIconAreaIfNoIcon: Boolean = false, - onCheckedChange: (Boolean) -> Unit = {}, ) { Row( modifier = modifier @@ -104,14 +104,16 @@ private fun ContentToPreview() { title = "Checkbox", iconResourceId = CommonDrawables.ic_compound_threads, enabled = true, - isChecked = true + isChecked = true, + onCheckedChange = {}, ) PreferenceCheckbox( title = "Checkbox with supporting text", supportingText = "Supporting text", iconResourceId = CommonDrawables.ic_compound_threads, enabled = true, - isChecked = true + isChecked = true, + onCheckedChange = {}, ) } } diff --git a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/preferences/PreferencePage.kt b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/preferences/PreferencePage.kt index 653df4a74d..c00e3e72e7 100644 --- a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/preferences/PreferencePage.kt +++ b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/preferences/PreferencePage.kt @@ -46,8 +46,8 @@ import io.element.android.libraries.theme.ElementTheme @Composable fun PreferencePage( title: String, + onBackPressed: () -> Unit, modifier: Modifier = Modifier, - onBackPressed: () -> Unit = {}, snackbarHost: @Composable () -> Unit = {}, content: @Composable ColumnScope.() -> Unit, ) { @@ -81,8 +81,8 @@ fun PreferencePage( @Composable private fun PreferenceTopAppBar( title: String, + onBackPressed: () -> Unit, modifier: Modifier = Modifier, - onBackPressed: () -> Unit = {}, ) { TopAppBar( modifier = modifier, @@ -105,7 +105,8 @@ private fun PreferenceTopAppBar( @Composable internal fun PreferenceViewPreview() = ElementPreview { PreferencePage( - title = "Preference screen" + title = "Preference screen", + onBackPressed = {}, ) { PreferenceCategory( title = "Category title", @@ -120,12 +121,14 @@ internal fun PreferenceViewPreview() = ElementPreview { title = "Switch", iconResourceId = CommonDrawables.ic_compound_threads, isChecked = true, + onCheckedChange = {}, ) PreferenceDivider() PreferenceCheckbox( title = "Checkbox", iconResourceId = CommonDrawables.ic_compound_notifications, isChecked = true, + onCheckedChange = {}, ) PreferenceDivider() PreferenceSlide( @@ -133,6 +136,7 @@ internal fun PreferenceViewPreview() = ElementPreview { summary = "Summary", value = 0.75F, showIconAreaIfNoIcon = true, + onValueChange = {}, ) } } diff --git a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/preferences/PreferenceSlide.kt b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/preferences/PreferenceSlide.kt index 154722d440..827b1fe7ff 100644 --- a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/preferences/PreferenceSlide.kt +++ b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/preferences/PreferenceSlide.kt @@ -42,6 +42,7 @@ fun PreferenceSlide( title: String, @FloatRange(0.0, 1.0) value: Float, + onValueChange: (Float) -> Unit, modifier: Modifier = Modifier, icon: ImageVector? = null, @DrawableRes iconResourceId: Int? = null, @@ -49,7 +50,6 @@ fun PreferenceSlide( enabled: Boolean = true, summary: String? = null, steps: Int = 0, - onValueChange: (Float) -> Unit = {}, ) { Row( modifier = modifier @@ -98,6 +98,7 @@ private fun ContentToPreview() { iconResourceId = CommonDrawables.ic_compound_user_profile, title = "Slide", summary = "Summary", - value = 0.75F + value = 0.75F, + onValueChange = {}, ) } diff --git a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/preferences/PreferenceSwitch.kt b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/preferences/PreferenceSwitch.kt index 07c3f67270..aac022d6ba 100644 --- a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/preferences/PreferenceSwitch.kt +++ b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/preferences/PreferenceSwitch.kt @@ -46,13 +46,13 @@ import io.element.android.libraries.theme.ElementTheme fun PreferenceSwitch( title: String, isChecked: Boolean, + onCheckedChange: (Boolean) -> Unit, modifier: Modifier = Modifier, subtitle: String? = null, enabled: Boolean = true, icon: ImageVector? = null, @DrawableRes iconResourceId: Int? = null, showIconAreaIfNoIcon: Boolean = false, - onCheckedChange: (Boolean) -> Unit = {}, switchAlignment: Alignment.Vertical = Alignment.CenterVertically ) { Row( @@ -111,6 +111,7 @@ private fun ContentToPreview() { subtitle = "Subtitle Switch", iconResourceId = CommonDrawables.ic_compound_threads, enabled = true, - isChecked = true + isChecked = true, + onCheckedChange = {}, ) } diff --git a/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/AvatarActionBottomSheet.kt b/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/AvatarActionBottomSheet.kt index 343886c146..24ae707e1b 100644 --- a/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/AvatarActionBottomSheet.kt +++ b/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/AvatarActionBottomSheet.kt @@ -52,8 +52,8 @@ import kotlinx.coroutines.launch fun AvatarActionBottomSheet( actions: ImmutableList, modalBottomSheetState: ModalBottomSheetState, + onActionSelected: (action: AvatarAction) -> Unit, modifier: Modifier = Modifier, - onActionSelected: (action: AvatarAction) -> Unit = {}, ) { val coroutineScope = rememberCoroutineScope() fun onItemActionClicked(itemAction: AvatarAction) { @@ -119,5 +119,6 @@ internal fun AvatarActionBottomSheetPreview() = ElementPreview { initialValue = ModalBottomSheetValue.Expanded, density = LocalDensity.current, ), + onActionSelected = { }, ) } diff --git a/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/CheckableMatrixUserRow.kt b/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/CheckableMatrixUserRow.kt index d9bbff4f7d..805e240194 100644 --- a/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/CheckableMatrixUserRow.kt +++ b/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/CheckableMatrixUserRow.kt @@ -21,8 +21,8 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.tooling.preview.PreviewParameter import io.element.android.libraries.designsystem.components.avatar.AvatarSize -import io.element.android.libraries.designsystem.preview.PreviewsDayNight import io.element.android.libraries.designsystem.preview.ElementPreview +import io.element.android.libraries.designsystem.preview.PreviewsDayNight import io.element.android.libraries.matrix.api.user.MatrixUser import io.element.android.libraries.matrix.ui.model.getAvatarData import io.element.android.libraries.matrix.ui.model.getBestName @@ -31,9 +31,9 @@ import io.element.android.libraries.matrix.ui.model.getBestName fun CheckableMatrixUserRow( checked: Boolean, matrixUser: MatrixUser, + onCheckedChange: (Boolean) -> Unit, modifier: Modifier = Modifier, avatarSize: AvatarSize = AvatarSize.UserListItem, - onCheckedChange: (Boolean) -> Unit = {}, enabled: Boolean = true, ) = CheckableUserRow( checked = checked, @@ -49,9 +49,27 @@ fun CheckableMatrixUserRow( @Composable internal fun CheckableMatrixUserRowPreview(@PreviewParameter(MatrixUserProvider::class) matrixUser: MatrixUser) = ElementPreview { Column { - CheckableMatrixUserRow(checked = true, matrixUser) - CheckableMatrixUserRow(checked = false, matrixUser) - CheckableMatrixUserRow(checked = true, matrixUser, enabled = false) - CheckableMatrixUserRow(checked = false, matrixUser, enabled = false) + CheckableMatrixUserRow( + checked = true, + onCheckedChange = { }, + matrixUser = matrixUser, + ) + CheckableMatrixUserRow( + checked = false, + onCheckedChange = { }, + matrixUser = matrixUser, + ) + CheckableMatrixUserRow( + checked = true, + onCheckedChange = { }, + matrixUser = matrixUser, + enabled = false, + ) + CheckableMatrixUserRow( + checked = false, + onCheckedChange = { }, + matrixUser = matrixUser, + enabled = false, + ) } } diff --git a/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/CheckableUnresolvedUserRow.kt b/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/CheckableUnresolvedUserRow.kt index b829ff8e47..125b9b13f6 100644 --- a/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/CheckableUnresolvedUserRow.kt +++ b/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/CheckableUnresolvedUserRow.kt @@ -37,10 +37,10 @@ import io.element.android.libraries.matrix.ui.model.getAvatarData @Composable fun CheckableUnresolvedUserRow( checked: Boolean, + onCheckedChange: (Boolean) -> Unit, avatarData: AvatarData, id: String, modifier: Modifier = Modifier, - onCheckedChange: (Boolean) -> Unit = {}, enabled: Boolean = true, ) { Row( @@ -71,12 +71,34 @@ fun CheckableUnresolvedUserRow( internal fun CheckableUnresolvedUserRowPreview() = ElementThemedPreview { val matrixUser = aMatrixUser() Column { - CheckableUnresolvedUserRow(false, matrixUser.getAvatarData(AvatarSize.UserListItem), matrixUser.userId.value) + CheckableUnresolvedUserRow( + checked = false, + onCheckedChange = { }, + avatarData = matrixUser.getAvatarData(AvatarSize.UserListItem), + id = matrixUser.userId.value, + ) HorizontalDivider() - CheckableUnresolvedUserRow(true, matrixUser.getAvatarData(AvatarSize.UserListItem), matrixUser.userId.value) + CheckableUnresolvedUserRow( + checked = true, + onCheckedChange = { }, + avatarData = matrixUser.getAvatarData(AvatarSize.UserListItem), + id = matrixUser.userId.value, + ) HorizontalDivider() - CheckableUnresolvedUserRow(false, matrixUser.getAvatarData(AvatarSize.UserListItem), matrixUser.userId.value, enabled = false) + CheckableUnresolvedUserRow( + checked = false, + onCheckedChange = { }, + avatarData = matrixUser.getAvatarData(AvatarSize.UserListItem), + id = matrixUser.userId.value, + enabled = false, + ) HorizontalDivider() - CheckableUnresolvedUserRow(true, matrixUser.getAvatarData(AvatarSize.UserListItem), matrixUser.userId.value, enabled = false) + CheckableUnresolvedUserRow( + checked = true, + onCheckedChange = { }, + avatarData = matrixUser.getAvatarData(AvatarSize.UserListItem), + id = matrixUser.userId.value, + enabled = false, + ) } } diff --git a/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/CheckableUserRow.kt b/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/CheckableUserRow.kt index f6272b9fda..1b7ead9131 100644 --- a/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/CheckableUserRow.kt +++ b/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/CheckableUserRow.kt @@ -31,11 +31,11 @@ import io.element.android.libraries.designsystem.theme.components.Checkbox @Composable fun CheckableUserRow( checked: Boolean, + onCheckedChange: (Boolean) -> Unit, avatarData: AvatarData, name: String, subtext: String?, modifier: Modifier = Modifier, - onCheckedChange: (Boolean) -> Unit = {}, enabled: Boolean = true, ) { Row( 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 901b403d0f..de2b726dba 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 @@ -43,7 +43,7 @@ fun MatrixUserHeader( matrixUser: MatrixUser?, modifier: Modifier = Modifier, // TODO handle click on this item, to let the user be able to update their profile. - // onClick: () -> Unit = {}, + // onClick: () -> Unit, ) { if (matrixUser == null) { MatrixUserHeaderPlaceholder(modifier = modifier) @@ -60,7 +60,7 @@ fun MatrixUserHeader( private fun MatrixUserHeaderContent( matrixUser: MatrixUser, modifier: Modifier = Modifier, - // onClick: () -> Unit = {}, + // onClick: () -> Unit, ) { Row( modifier = modifier diff --git a/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/SelectedRoom.kt b/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/SelectedRoom.kt index dbf4968ba3..7b3ec0e5e6 100644 --- a/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/SelectedRoom.kt +++ b/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/SelectedRoom.kt @@ -50,8 +50,8 @@ import io.element.android.libraries.ui.strings.CommonStrings @Composable fun SelectedRoom( roomSummary: RoomSummaryDetails, + onRoomRemoved: (RoomSummaryDetails) -> Unit, modifier: Modifier = Modifier, - onRoomRemoved: (RoomSummaryDetails) -> Unit = {}, ) { Box( modifier = modifier @@ -104,6 +104,7 @@ internal fun SelectedRoomPreview() = ElementPreview { lastMessageTimestamp = null, unreadNotificationCount = 0, inviter = null, - ) + ), + onRoomRemoved = {}, ) } diff --git a/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/SelectedUser.kt b/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/SelectedUser.kt index 536ef783ff..fbf6be67cb 100644 --- a/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/SelectedUser.kt +++ b/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/SelectedUser.kt @@ -36,8 +36,8 @@ import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.unit.dp import io.element.android.libraries.designsystem.components.avatar.Avatar import io.element.android.libraries.designsystem.components.avatar.AvatarSize -import io.element.android.libraries.designsystem.preview.PreviewsDayNight import io.element.android.libraries.designsystem.preview.ElementPreview +import io.element.android.libraries.designsystem.preview.PreviewsDayNight import io.element.android.libraries.designsystem.theme.components.Icon import io.element.android.libraries.designsystem.theme.components.Surface import io.element.android.libraries.designsystem.theme.components.Text @@ -50,8 +50,8 @@ import io.element.android.libraries.ui.strings.CommonStrings @Composable fun SelectedUser( matrixUser: MatrixUser, + onUserRemoved: (MatrixUser) -> Unit, modifier: Modifier = Modifier, - onUserRemoved: (MatrixUser) -> Unit = {}, ) { Box( modifier = modifier @@ -93,5 +93,8 @@ fun SelectedUser( @PreviewsDayNight @Composable internal fun SelectedUserPreview() = ElementPreview { - SelectedUser(aMatrixUser()) + SelectedUser( + aMatrixUser(), + onUserRemoved = {}, + ) } diff --git a/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/SelectedUsersList.kt b/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/SelectedUsersList.kt index 884f45de02..e3aab57059 100644 --- a/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/SelectedUsersList.kt +++ b/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/SelectedUsersList.kt @@ -37,8 +37,8 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color import androidx.compose.ui.layout.Layout import androidx.compose.ui.unit.dp -import io.element.android.libraries.designsystem.preview.PreviewsDayNight import io.element.android.libraries.designsystem.preview.ElementPreview +import io.element.android.libraries.designsystem.preview.PreviewsDayNight import io.element.android.libraries.designsystem.text.toPx import io.element.android.libraries.matrix.api.user.MatrixUser import kotlinx.collections.immutable.ImmutableList @@ -48,10 +48,10 @@ import kotlin.math.floor @Composable fun SelectedUsersList( selectedUsers: ImmutableList, + onUserRemoved: (MatrixUser) -> Unit, modifier: Modifier = Modifier, autoScroll: Boolean = false, contentPadding: PaddingValues = PaddingValues(0.dp), - onUserRemoved: (MatrixUser) -> Unit = {}, ) { val lazyListState = rememberLazyListState() if (autoScroll) { @@ -135,6 +135,7 @@ internal fun SelectedUsersListPreview() = ElementPreview { // Two users that will be visible with no scrolling SelectedUsersList( selectedUsers = aMatrixUserList().take(2).toImmutableList(), + onUserRemoved = {}, modifier = Modifier .width(200.dp) .border(1.dp, Color.Red) @@ -144,6 +145,7 @@ internal fun SelectedUsersListPreview() = ElementPreview { for (i in 0..5) { SelectedUsersList( selectedUsers = aMatrixUserList().take(6).toImmutableList(), + onUserRemoved = {}, modifier = Modifier .width((200 + i * 20).dp) .border(1.dp, Color.Red) diff --git a/libraries/textcomposer/impl/src/main/kotlin/io/element/android/libraries/textcomposer/TextComposer.kt b/libraries/textcomposer/impl/src/main/kotlin/io/element/android/libraries/textcomposer/TextComposer.kt index 75dbc6c1c0..435c1ff79e 100644 --- a/libraries/textcomposer/impl/src/main/kotlin/io/element/android/libraries/textcomposer/TextComposer.kt +++ b/libraries/textcomposer/impl/src/main/kotlin/io/element/android/libraries/textcomposer/TextComposer.kt @@ -68,19 +68,19 @@ import io.element.android.libraries.testtags.TestTags import io.element.android.libraries.testtags.testTag import io.element.android.libraries.textcomposer.components.ComposerOptionsButton import io.element.android.libraries.textcomposer.components.DismissTextFormattingButton -import io.element.android.libraries.textcomposer.components.VoiceMessageRecorderButton import io.element.android.libraries.textcomposer.components.SendButton import io.element.android.libraries.textcomposer.components.TextFormatting import io.element.android.libraries.textcomposer.components.VoiceMessageDeleteButton import io.element.android.libraries.textcomposer.components.VoiceMessagePreview +import io.element.android.libraries.textcomposer.components.VoiceMessageRecorderButton import io.element.android.libraries.textcomposer.components.VoiceMessageRecording import io.element.android.libraries.textcomposer.components.textInputRoundedCornerShape import io.element.android.libraries.textcomposer.mentions.rememberMentionSpanProvider import io.element.android.libraries.textcomposer.model.Message import io.element.android.libraries.textcomposer.model.MessageComposerMode -import io.element.android.libraries.textcomposer.model.VoiceMessageRecorderEvent import io.element.android.libraries.textcomposer.model.Suggestion import io.element.android.libraries.textcomposer.model.VoiceMessagePlayerEvent +import io.element.android.libraries.textcomposer.model.VoiceMessageRecorderEvent import io.element.android.libraries.textcomposer.model.VoiceMessageState import io.element.android.libraries.theme.ElementTheme import io.element.android.libraries.ui.strings.CommonStrings @@ -101,20 +101,20 @@ fun TextComposer( enableTextFormatting: Boolean, enableVoiceMessages: Boolean, currentUserId: UserId, + onRequestFocus: () -> Unit, + onSendMessage: (Message) -> Unit, + onResetComposerMode: () -> Unit, + onAddAttachment: () -> Unit, + onDismissTextFormatting: () -> Unit, + onVoiceRecorderEvent: (VoiceMessageRecorderEvent) -> Unit, + onVoicePlayerEvent: (VoiceMessagePlayerEvent) -> Unit, + onSendVoiceMessage: () -> Unit, + onDeleteVoiceMessage: () -> Unit, + onError: (Throwable) -> Unit, + onSuggestionReceived: (Suggestion?) -> Unit, modifier: Modifier = Modifier, showTextFormatting: Boolean = false, subcomposing: Boolean = false, - onRequestFocus: () -> Unit = {}, - onSendMessage: (Message) -> Unit = {}, - onResetComposerMode: () -> Unit = {}, - onAddAttachment: () -> Unit = {}, - onDismissTextFormatting: () -> Unit = {}, - onVoiceRecorderEvent: (VoiceMessageRecorderEvent) -> Unit = {}, - onVoicePlayerEvent: (VoiceMessagePlayerEvent) -> Unit = {}, - onSendVoiceMessage: () -> Unit = {}, - onDeleteVoiceMessage: () -> Unit = {}, - onError: (Throwable) -> Unit = {}, - onSuggestionReceived: (Suggestion?) -> Unit = {}, ) { val onSendClicked = { val html = if (enableTextFormatting) state.messageHtml else null @@ -591,48 +591,40 @@ private fun ReplyToModeView( internal fun TextComposerSimplePreview() = ElementPreview { PreviewColumn(items = persistentListOf( { - TextComposer( + ATextComposer( RichTextEditorState("", initialFocus = true), voiceMessageState = VoiceMessageState.Idle, - onSendMessage = {}, composerMode = MessageComposerMode.Normal, - onResetComposerMode = {}, enableTextFormatting = true, enableVoiceMessages = true, currentUserId = UserId("@alice:localhost"), ) }, { - TextComposer( + ATextComposer( RichTextEditorState("A message", initialFocus = true), voiceMessageState = VoiceMessageState.Idle, - onSendMessage = {}, composerMode = MessageComposerMode.Normal, - onResetComposerMode = {}, enableTextFormatting = true, enableVoiceMessages = true, currentUserId = UserId("@alice:localhost") ) }, { - TextComposer( + ATextComposer( RichTextEditorState( "A message\nWith several lines\nTo preview larger textfields and long lines with overflow", initialFocus = true ), voiceMessageState = VoiceMessageState.Idle, - onSendMessage = {}, composerMode = MessageComposerMode.Normal, - onResetComposerMode = {}, enableTextFormatting = true, enableVoiceMessages = true, currentUserId = UserId("@alice:localhost") ) }, { - TextComposer( + ATextComposer( RichTextEditorState("A message without focus", initialFocus = false), voiceMessageState = VoiceMessageState.Idle, - onSendMessage = {}, composerMode = MessageComposerMode.Normal, - onResetComposerMode = {}, enableTextFormatting = true, enableVoiceMessages = true, currentUserId = UserId("@alice:localhost") @@ -645,7 +637,7 @@ internal fun TextComposerSimplePreview() = ElementPreview { @Composable internal fun TextComposerFormattingPreview() = ElementPreview { PreviewColumn(items = persistentListOf({ - TextComposer( + ATextComposer( RichTextEditorState("", initialFocus = false), voiceMessageState = VoiceMessageState.Idle, showTextFormatting = true, @@ -655,7 +647,7 @@ internal fun TextComposerFormattingPreview() = ElementPreview { currentUserId = UserId("@alice:localhost") ) }, { - TextComposer( + ATextComposer( RichTextEditorState("A message", initialFocus = false), voiceMessageState = VoiceMessageState.Idle, showTextFormatting = true, @@ -665,7 +657,7 @@ internal fun TextComposerFormattingPreview() = ElementPreview { currentUserId = UserId("@alice:localhost") ) }, { - TextComposer( + ATextComposer( RichTextEditorState("A message\nWith several lines\nTo preview larger textfields and long lines with overflow", initialFocus = false), voiceMessageState = VoiceMessageState.Idle, showTextFormatting = true, @@ -681,12 +673,10 @@ internal fun TextComposerFormattingPreview() = ElementPreview { @Composable internal fun TextComposerEditPreview() = ElementPreview { PreviewColumn(items = persistentListOf({ - TextComposer( + ATextComposer( RichTextEditorState("A message", initialFocus = true), voiceMessageState = VoiceMessageState.Idle, - onSendMessage = {}, composerMode = MessageComposerMode.Edit(EventId("$1234"), "Some text", TransactionId("1234")), - onResetComposerMode = {}, enableTextFormatting = true, enableVoiceMessages = true, currentUserId = UserId("@alice:localhost") @@ -698,10 +688,9 @@ internal fun TextComposerEditPreview() = ElementPreview { @Composable internal fun TextComposerReplyPreview() = ElementPreview { PreviewColumn(items = persistentListOf({ - TextComposer( + ATextComposer( RichTextEditorState(""), voiceMessageState = VoiceMessageState.Idle, - onSendMessage = {}, composerMode = MessageComposerMode.Reply( isThreaded = false, senderName = "Alice", @@ -711,17 +700,15 @@ internal fun TextComposerReplyPreview() = ElementPreview { "With several lines\n" + "To preview larger textfields and long lines with overflow" ), - onResetComposerMode = {}, enableTextFormatting = true, enableVoiceMessages = true, currentUserId = UserId("@alice:localhost") ) }, { - TextComposer( + ATextComposer( RichTextEditorState(""), voiceMessageState = VoiceMessageState.Idle, - onSendMessage = {}, composerMode = MessageComposerMode.Reply( isThreaded = true, senderName = "Alice", @@ -731,16 +718,14 @@ internal fun TextComposerReplyPreview() = ElementPreview { "With several lines\n" + "To preview larger textfields and long lines with overflow" ), - onResetComposerMode = {}, enableTextFormatting = true, enableVoiceMessages = true, currentUserId = UserId("@alice:localhost") ) }, { - TextComposer( + ATextComposer( RichTextEditorState("A message"), voiceMessageState = VoiceMessageState.Idle, - onSendMessage = {}, composerMode = MessageComposerMode.Reply( isThreaded = true, senderName = "Alice", @@ -753,16 +738,14 @@ internal fun TextComposerReplyPreview() = ElementPreview { ), defaultContent = "image.jpg" ), - onResetComposerMode = {}, enableTextFormatting = true, enableVoiceMessages = true, currentUserId = UserId("@alice:localhost") ) }, { - TextComposer( + ATextComposer( RichTextEditorState("A message"), voiceMessageState = VoiceMessageState.Idle, - onSendMessage = {}, composerMode = MessageComposerMode.Reply( isThreaded = false, senderName = "Alice", @@ -775,16 +758,14 @@ internal fun TextComposerReplyPreview() = ElementPreview { ), defaultContent = "video.mp4" ), - onResetComposerMode = {}, enableTextFormatting = true, enableVoiceMessages = true, currentUserId = UserId("@alice:localhost") ) }, { - TextComposer( + ATextComposer( RichTextEditorState("A message"), voiceMessageState = VoiceMessageState.Idle, - onSendMessage = {}, composerMode = MessageComposerMode.Reply( isThreaded = false, senderName = "Alice", @@ -797,16 +778,14 @@ internal fun TextComposerReplyPreview() = ElementPreview { ), defaultContent = "logs.txt" ), - onResetComposerMode = {}, enableTextFormatting = true, enableVoiceMessages = true, currentUserId = UserId("@alice:localhost") ) }, { - TextComposer( + ATextComposer( RichTextEditorState("A message", initialFocus = true), voiceMessageState = VoiceMessageState.Idle, - onSendMessage = {}, composerMode = MessageComposerMode.Reply( isThreaded = false, senderName = "Alice", @@ -819,7 +798,6 @@ internal fun TextComposerReplyPreview() = ElementPreview { ), defaultContent = "Shared location" ), - onResetComposerMode = {}, enableTextFormatting = true, enableVoiceMessages = true, currentUserId = UserId("@alice:localhost") @@ -834,12 +812,10 @@ internal fun TextComposerVoicePreview() = ElementPreview { @Composable fun VoicePreview( voiceMessageState: VoiceMessageState - ) = TextComposer( + ) = ATextComposer( RichTextEditorState("", initialFocus = true), voiceMessageState = voiceMessageState, - onSendMessage = {}, composerMode = MessageComposerMode.Normal, - onResetComposerMode = {}, enableTextFormatting = true, enableVoiceMessages = true, currentUserId = UserId("@alice:localhost") @@ -899,3 +875,35 @@ private fun PreviewColumn( } } } + +@Composable +private fun ATextComposer( + richTextEditorState: RichTextEditorState, + voiceMessageState: VoiceMessageState, + composerMode: MessageComposerMode, + enableTextFormatting: Boolean, + enableVoiceMessages: Boolean, + currentUserId: UserId, + showTextFormatting: Boolean = false, +) { + TextComposer( + state = richTextEditorState, + showTextFormatting = showTextFormatting, + voiceMessageState = voiceMessageState, + composerMode = composerMode, + enableTextFormatting = enableTextFormatting, + enableVoiceMessages = enableVoiceMessages, + currentUserId = currentUserId, + onRequestFocus = {}, + onSendMessage = {}, + onResetComposerMode = {}, + onAddAttachment = {}, + onDismissTextFormatting = {}, + onVoiceRecorderEvent = {}, + onVoicePlayerEvent = {}, + onSendVoiceMessage = {}, + onDeleteVoiceMessage = {}, + onError = {}, + onSuggestionReceived = {}, + ) +} diff --git a/libraries/textcomposer/impl/src/main/kotlin/io/element/android/libraries/textcomposer/components/VoiceMessageDeleteButton.kt b/libraries/textcomposer/impl/src/main/kotlin/io/element/android/libraries/textcomposer/components/VoiceMessageDeleteButton.kt index 88f77f7075..7bccd933e2 100644 --- a/libraries/textcomposer/impl/src/main/kotlin/io/element/android/libraries/textcomposer/components/VoiceMessageDeleteButton.kt +++ b/libraries/textcomposer/impl/src/main/kotlin/io/element/android/libraries/textcomposer/components/VoiceMessageDeleteButton.kt @@ -33,8 +33,8 @@ import io.element.android.libraries.ui.strings.CommonStrings @Composable fun VoiceMessageDeleteButton( enabled: Boolean, + onClick: () -> Unit, modifier: Modifier = Modifier, - onClick: () -> Unit = {}, ) { IconButton( modifier = modifier @@ -59,7 +59,13 @@ fun VoiceMessageDeleteButton( @Composable internal fun VoiceMessageDeleteButtonPreview() = ElementPreview { Row { - VoiceMessageDeleteButton(enabled = true) - VoiceMessageDeleteButton(enabled = false) + VoiceMessageDeleteButton( + enabled = true, + onClick = {}, + ) + VoiceMessageDeleteButton( + enabled = false, + onClick = {}, + ) } } diff --git a/libraries/textcomposer/impl/src/main/kotlin/io/element/android/libraries/textcomposer/components/VoiceMessagePreview.kt b/libraries/textcomposer/impl/src/main/kotlin/io/element/android/libraries/textcomposer/components/VoiceMessagePreview.kt index bcf307ec2e..4a2b2360de 100644 --- a/libraries/textcomposer/impl/src/main/kotlin/io/element/android/libraries/textcomposer/components/VoiceMessagePreview.kt +++ b/libraries/textcomposer/impl/src/main/kotlin/io/element/android/libraries/textcomposer/components/VoiceMessagePreview.kt @@ -58,11 +58,11 @@ internal fun VoiceMessagePreview( showCursor: Boolean, waveform: ImmutableList, time: Duration, + onPlayClick: () -> Unit, + onPauseClick: () -> Unit, + onSeek: (Float) -> Unit, modifier: Modifier = Modifier, playbackProgress: Float = 0f, - onPlayClick: () -> Unit = {}, - onPauseClick: () -> Unit = {}, - onSeek: (Float) -> Unit = {}, ) { Row( modifier = modifier @@ -163,7 +163,7 @@ internal fun VoiceMessagePreviewPreview() = ElementPreview { Column( verticalArrangement = Arrangement.spacedBy(8.dp) ) { - VoiceMessagePreview( + AVoiceMessagePreview( isInteractive = true, isPlaying = true, time = 2.seconds, @@ -171,7 +171,7 @@ internal fun VoiceMessagePreviewPreview() = ElementPreview { showCursor = true, waveform = createFakeWaveform() ) - VoiceMessagePreview( + AVoiceMessagePreview( isInteractive = true, isPlaying = false, time = 0.seconds, @@ -179,7 +179,7 @@ internal fun VoiceMessagePreviewPreview() = ElementPreview { showCursor = true, waveform = createFakeWaveform() ) - VoiceMessagePreview( + AVoiceMessagePreview( isInteractive = false, isPlaying = false, time = 789.seconds, @@ -189,3 +189,25 @@ internal fun VoiceMessagePreviewPreview() = ElementPreview { ) } } + +@Composable +private fun AVoiceMessagePreview( + isInteractive: Boolean, + isPlaying: Boolean, + time: Duration, + playbackProgress: Float, + showCursor: Boolean, + waveform: ImmutableList, +) { + VoiceMessagePreview( + isInteractive = isInteractive, + isPlaying = isPlaying, + time = time, + playbackProgress = playbackProgress, + showCursor = showCursor, + waveform = waveform, + onPlayClick = {}, + onPauseClick = {}, + onSeek = {}, + ) +} diff --git a/libraries/textcomposer/impl/src/main/kotlin/io/element/android/libraries/textcomposer/components/VoiceMessageRecorderButton.kt b/libraries/textcomposer/impl/src/main/kotlin/io/element/android/libraries/textcomposer/components/VoiceMessageRecorderButton.kt index d2a8c2cae1..2a8c337405 100644 --- a/libraries/textcomposer/impl/src/main/kotlin/io/element/android/libraries/textcomposer/components/VoiceMessageRecorderButton.kt +++ b/libraries/textcomposer/impl/src/main/kotlin/io/element/android/libraries/textcomposer/components/VoiceMessageRecorderButton.kt @@ -40,8 +40,8 @@ import io.element.android.libraries.ui.strings.CommonStrings @Composable internal fun VoiceMessageRecorderButton( isRecording: Boolean, + onEvent: (VoiceMessageRecorderEvent) -> Unit, modifier: Modifier = Modifier, - onEvent: (VoiceMessageRecorderEvent) -> Unit = {}, ) { val hapticFeedback = LocalHapticFeedback.current @@ -113,7 +113,13 @@ private fun StopButton( @Composable internal fun VoiceMessageRecorderButtonPreview() = ElementPreview { Row { - VoiceMessageRecorderButton(isRecording = false) - VoiceMessageRecorderButton(isRecording = true) + VoiceMessageRecorderButton( + isRecording = false, + onEvent = {}, + ) + VoiceMessageRecorderButton( + isRecording = true, + onEvent = {}, + ) } }