Lambda parameters in a composable function should be in present tense, not past tense.

https://mrmans0n.github.io/compose-rules/rules/#naming-parameters-properly
This commit is contained in:
Benoit Marty
2024-05-29 10:48:29 +02:00
parent b8f3b66d0e
commit 87689d787e
250 changed files with 1698 additions and 1698 deletions

View File

@@ -229,31 +229,31 @@ class LoggedInFlowNode @AssistedInject constructor(
}
NavTarget.RoomList -> {
val callback = object : RoomListEntryPoint.Callback {
override fun onRoomClicked(roomId: RoomId) {
override fun onRoomClick(roomId: RoomId) {
backstack.push(NavTarget.Room(roomId.toRoomIdOrAlias()))
}
override fun onSettingsClicked() {
override fun onSettingsClick() {
backstack.push(NavTarget.Settings())
}
override fun onCreateRoomClicked() {
override fun onCreateRoomClick() {
backstack.push(NavTarget.CreateRoom)
}
override fun onSessionConfirmRecoveryKeyClicked() {
override fun onSessionConfirmRecoveryKeyClick() {
backstack.push(NavTarget.SecureBackup(initialElement = SecureBackupEntryPoint.InitialTarget.EnterRecoveryKey))
}
override fun onRoomSettingsClicked(roomId: RoomId) {
override fun onRoomSettingsClick(roomId: RoomId) {
backstack.push(NavTarget.Room(roomId.toRoomIdOrAlias(), initialElement = RoomNavigationTarget.Details))
}
override fun onReportBugClicked() {
override fun onReportBugClick() {
plugins<Callback>().forEach { it.onOpenBugReport() }
}
override fun onRoomDirectorySearchClicked() {
override fun onRoomDirectorySearchClick() {
backstack.push(NavTarget.RoomDirectorySearch)
}
}
@@ -272,7 +272,7 @@ class LoggedInFlowNode @AssistedInject constructor(
coroutineScope.launch { attachRoom(roomId.toRoomIdOrAlias()) }
}
override fun onPermalinkClicked(data: PermalinkData) {
override fun onPermalinkClick(data: PermalinkData) {
when (data) {
is PermalinkData.UserLink -> {
// Should not happen (handled by MessagesNode)
@@ -325,7 +325,7 @@ class LoggedInFlowNode @AssistedInject constructor(
plugins<Callback>().forEach { it.onOpenBugReport() }
}
override fun onSecureBackupClicked() {
override fun onSecureBackupClick() {
backstack.push(NavTarget.SecureBackup())
}
@@ -363,7 +363,7 @@ class LoggedInFlowNode @AssistedInject constructor(
NavTarget.RoomDirectorySearch -> {
roomDirectoryEntryPoint.nodeBuilder(this, buildContext)
.callback(object : RoomDirectoryEntryPoint.Callback {
override fun onResultClicked(roomDescription: RoomDescription) {
override fun onResultClick(roomDescription: RoomDescription) {
backstack.push(
NavTarget.Room(
roomIdOrAlias = roomDescription.roomId.toRoomIdOrAlias(),

View File

@@ -217,7 +217,7 @@ class RoomFlowNode @AssistedInject constructor(
LoadingRoomNodeView(
state = LoadingRoomState.Loading,
hasNetworkConnection = networkStatus == NetworkStatus.Online,
onBackClicked = { navigateUp() },
onBackClick = { navigateUp() },
modifier = modifier,
)
}

View File

@@ -121,14 +121,14 @@ class JoinedRoomFlowNode @AssistedInject constructor(
}
}
private fun loadingNode(buildContext: BuildContext, onBackClicked: () -> Unit) = node(buildContext) { modifier ->
private fun loadingNode(buildContext: BuildContext, onBackClick: () -> Unit) = node(buildContext) { modifier ->
val loadingRoomState by loadingRoomStateStateFlow.collectAsState()
val networkStatus by networkMonitor.connectivity.collectAsState()
LoadingRoomNodeView(
state = loadingRoomState,
hasNetworkConnection = networkStatus == NetworkStatus.Online,
modifier = modifier,
onBackClicked = onBackClicked
onBackClick = onBackClick
)
}

View File

@@ -77,7 +77,7 @@ class JoinedRoomLoadedFlowNode @AssistedInject constructor(
), DaggerComponentOwner {
interface Callback : Plugin {
fun onOpenRoom(roomId: RoomId)
fun onPermalinkClicked(data: PermalinkData)
fun onPermalinkClick(data: PermalinkData)
fun onForwardedToSingleRoom(roomId: RoomId)
fun onOpenGlobalNotificationSettings()
}
@@ -144,16 +144,16 @@ class JoinedRoomLoadedFlowNode @AssistedInject constructor(
return when (navTarget) {
is NavTarget.Messages -> {
val callback = object : MessagesEntryPoint.Callback {
override fun onRoomDetailsClicked() {
override fun onRoomDetailsClick() {
backstack.push(NavTarget.RoomDetails)
}
override fun onUserDataClicked(userId: UserId) {
override fun onUserDataClick(userId: UserId) {
backstack.push(NavTarget.RoomMemberDetails(userId))
}
override fun onPermalinkClicked(data: PermalinkData) {
callbacks.forEach { it.onPermalinkClicked(data) }
override fun onPermalinkClick(data: PermalinkData) {
callbacks.forEach { it.onPermalinkClick(data) }
}
override fun onForwardedToSingleRoom(roomId: RoomId) {

View File

@@ -46,7 +46,7 @@ import io.element.android.libraries.ui.strings.CommonStrings
fun LoadingRoomNodeView(
state: LoadingRoomState,
hasNetworkConnection: Boolean,
onBackClicked: () -> Unit,
onBackClick: () -> Unit,
modifier: Modifier = Modifier,
) {
Scaffold(
@@ -54,7 +54,7 @@ fun LoadingRoomNodeView(
topBar = {
Column {
ConnectivityIndicatorView(isOnline = hasNetworkConnection)
LoadingRoomTopBar(onBackClicked)
LoadingRoomTopBar(onBackClick)
}
},
content = { padding ->
@@ -83,11 +83,11 @@ fun LoadingRoomNodeView(
@OptIn(ExperimentalMaterial3Api::class)
@Composable
private fun LoadingRoomTopBar(
onBackClicked: () -> Unit,
onBackClick: () -> Unit,
) {
TopAppBar(
navigationIcon = {
BackButton(onClick = onBackClicked)
BackButton(onClick = onBackClick)
},
title = {
IconTitlePlaceholdersRowMolecule(iconSize = AvatarSize.TimelineRoom.dp)
@@ -101,7 +101,7 @@ private fun LoadingRoomTopBar(
internal fun LoadingRoomNodeViewPreview(@PreviewParameter(LoadingRoomStateProvider::class) state: LoadingRoomState) = ElementPreview {
LoadingRoomNodeView(
state = state,
onBackClicked = {},
onBackClick = {},
hasNetworkConnection = false
)
}

View File

@@ -156,7 +156,7 @@ class JoinRoomLoadedFlowNodeTest {
)
val roomFlowNodeTestHelper = roomFlowNode.parentNodeTestHelper()
// WHEN
fakeMessagesEntryPoint.callback?.onRoomDetailsClicked()
fakeMessagesEntryPoint.callback?.onRoomDetailsClick()
// THEN
roomFlowNodeTestHelper.assertChildHasLifecycle(JoinedRoomLoadedFlowNode.NavTarget.RoomDetails, Lifecycle.State.CREATED)
val roomDetailsNode = roomFlowNode.childNode(JoinedRoomLoadedFlowNode.NavTarget.RoomDetails)!!

View File

@@ -63,15 +63,15 @@ fun AnalyticsOptInView(
) {
val eventSink = state.eventSink
fun onTermsAccepted() {
fun onAcceptTerms() {
eventSink(AnalyticsOptInEvents.EnableAnalytics(true))
}
fun onTermsDeclined() {
fun onDeclineTerms() {
eventSink(AnalyticsOptInEvents.EnableAnalytics(false))
}
BackHandler(onBack = ::onTermsDeclined)
BackHandler(onBack = ::onDeclineTerms)
HeaderFooterPage(
modifier = modifier
.fillMaxSize()
@@ -82,8 +82,8 @@ fun AnalyticsOptInView(
content = { AnalyticsOptInContent() },
footer = {
AnalyticsOptInFooter(
onTermsAccepted = ::onTermsAccepted,
onTermsDeclined = ::onTermsDeclined,
onAcceptTerms = ::onAcceptTerms,
onDeclineTerms = ::onDeclineTerms,
)
}
)
@@ -165,19 +165,19 @@ private fun AnalyticsOptInContent() {
@Composable
private fun AnalyticsOptInFooter(
onTermsAccepted: () -> Unit,
onTermsDeclined: () -> Unit,
onAcceptTerms: () -> Unit,
onDeclineTerms: () -> Unit,
) {
ButtonColumnMolecule {
Button(
text = stringResource(id = CommonStrings.action_ok),
onClick = onTermsAccepted,
onClick = onAcceptTerms,
modifier = Modifier.fillMaxWidth(),
)
TextButton(
text = stringResource(id = CommonStrings.action_not_now),
size = ButtonSize.Medium,
onClick = onTermsDeclined,
onClick = onDeclineTerms,
modifier = Modifier.fillMaxWidth(),
)
}

View File

@@ -81,12 +81,12 @@ internal fun CallScreenView(
.fillMaxSize(),
url = state.urlState,
userAgent = state.userAgent,
onPermissionsRequested = { request ->
onPermissionsRequest = { request ->
val androidPermissions = mapWebkitPermissions(request.resources)
val callback: RequestPermissionCallback = { request.grant(it) }
requestPermissions(androidPermissions.toTypedArray(), callback)
},
onWebViewCreated = { webView ->
onWebViewCreate = { webView ->
val interceptor = WebViewWidgetMessageInterceptor(webView)
state.eventSink(CallScreenEvents.SetupMessageChannels(interceptor))
}
@@ -98,8 +98,8 @@ internal fun CallScreenView(
private fun CallWebView(
url: AsyncData<String>,
userAgent: String,
onPermissionsRequested: (PermissionRequest) -> Unit,
onWebViewCreated: (WebView) -> Unit,
onPermissionsRequest: (PermissionRequest) -> Unit,
onWebViewCreate: (WebView) -> Unit,
modifier: Modifier = Modifier,
) {
if (LocalInspectionMode.current) {
@@ -111,8 +111,8 @@ private fun CallWebView(
modifier = modifier,
factory = { context ->
WebView(context).apply {
onWebViewCreated(this)
setup(userAgent, onPermissionsRequested)
onWebViewCreate(this)
setup(userAgent, onPermissionsRequest)
}
},
update = { webView ->

View File

@@ -47,8 +47,8 @@ class AddPeopleNode @AssistedInject constructor(
AddPeopleView(
state = state,
modifier = modifier,
onBackPressed = this::navigateUp,
onNextPressed = this::onContinue,
onBackClick = this::navigateUp,
onNextClick = this::onContinue,
)
}
}

View File

@@ -42,8 +42,8 @@ import io.element.android.libraries.ui.strings.CommonStrings
@Composable
fun AddPeopleView(
state: UserListState,
onBackPressed: () -> Unit,
onNextPressed: () -> Unit,
onBackClick: () -> Unit,
onNextClick: () -> Unit,
modifier: Modifier = Modifier,
) {
Scaffold(
@@ -51,14 +51,14 @@ fun AddPeopleView(
topBar = {
AddPeopleViewTopBar(
hasSelectedUsers = state.selectedUsers.isNotEmpty(),
onBackPressed = {
onBackClick = {
if (state.isSearchActive) {
state.eventSink(UserListEvents.OnSearchActiveChanged(false))
} else {
onBackPressed()
onBackClick()
}
},
onNextPressed = onNextPressed,
onNextClick = onNextClick,
)
}
) { padding ->
@@ -69,8 +69,8 @@ fun AddPeopleView(
.consumeWindowInsets(padding),
state = state,
showBackButton = false,
onUserSelected = {},
onUserDeselected = {},
onSelectUser = {},
onDeselectUser = {},
)
}
}
@@ -79,8 +79,8 @@ fun AddPeopleView(
@Composable
private fun AddPeopleViewTopBar(
hasSelectedUsers: Boolean,
onBackPressed: () -> Unit,
onNextPressed: () -> Unit,
onBackClick: () -> Unit,
onNextClick: () -> Unit,
) {
TopAppBar(
title = {
@@ -89,12 +89,12 @@ private fun AddPeopleViewTopBar(
style = ElementTheme.typography.aliasScreenTitle
)
},
navigationIcon = { BackButton(onClick = onBackPressed) },
navigationIcon = { BackButton(onClick = onBackClick) },
actions = {
val textActionResId = if (hasSelectedUsers) CommonStrings.action_next else CommonStrings.action_skip
TextButton(
text = stringResource(id = textActionResId),
onClick = onNextPressed,
onClick = onNextClick,
)
}
)
@@ -105,7 +105,7 @@ private fun AddPeopleViewTopBar(
internal fun AddPeopleViewPreview(@PreviewParameter(AddPeopleUserListStateProvider::class) state: UserListState) = ElementPreview {
AddPeopleView(
state = state,
onBackPressed = {},
onNextPressed = {},
onBackClick = {},
onNextClick = {},
)
}

View File

@@ -41,7 +41,7 @@ import io.element.android.libraries.designsystem.theme.components.Text
@Composable
fun RoomPrivacyOption(
roomPrivacyItem: RoomPrivacyItem,
onOptionSelected: (RoomPrivacyItem) -> Unit,
onOptionClick: (RoomPrivacyItem) -> Unit,
modifier: Modifier = Modifier,
isSelected: Boolean = false,
) {
@@ -50,7 +50,7 @@ fun RoomPrivacyOption(
.fillMaxWidth()
.selectable(
selected = isSelected,
onClick = { onOptionSelected(roomPrivacyItem) },
onClick = { onOptionClick(roomPrivacyItem) },
role = Role.RadioButton,
)
.padding(8.dp),
@@ -98,12 +98,12 @@ internal fun RoomPrivacyOptionPreview() = ElementPreview {
Column {
RoomPrivacyOption(
roomPrivacyItem = aRoomPrivacyItem,
onOptionSelected = {},
onOptionClick = {},
isSelected = true,
)
RoomPrivacyOption(
roomPrivacyItem = aRoomPrivacyItem,
onOptionSelected = {},
onOptionClick = {},
isSelected = false,
)
}

View File

@@ -53,11 +53,11 @@ fun SearchUserBar(
showLoader: Boolean,
selectedUsers: ImmutableList<MatrixUser>,
active: Boolean,
isMultiSelectionEnabled: Boolean,
onActiveChanged: (Boolean) -> Unit,
onTextChanged: (String) -> Unit,
onUserSelected: (MatrixUser) -> Unit,
onUserDeselected: (MatrixUser) -> Unit,
isMultiSelectionEnable: Boolean,
onActiveChange: (Boolean) -> Unit,
onTextChange: (String) -> Unit,
onUserSelect: (MatrixUser) -> Unit,
onUserDeselect: (MatrixUser) -> Unit,
modifier: Modifier = Modifier,
showBackButton: Boolean = true,
placeHolderTitle: String = stringResource(CommonStrings.common_search_for_someone),
@@ -66,14 +66,14 @@ fun SearchUserBar(
SearchBar(
query = query,
onQueryChange = onTextChanged,
onQueryChange = onTextChange,
active = active,
onActiveChange = onActiveChanged,
onActiveChange = onActiveChange,
modifier = modifier,
placeHolderTitle = placeHolderTitle,
showBackButton = showBackButton,
contentPrefix = {
if (isMultiSelectionEnabled && active && selectedUsers.isNotEmpty()) {
if (isMultiSelectionEnable && active && selectedUsers.isNotEmpty()) {
// We want the selected users to behave a bit like a top bar - when the list below is scrolled, the colour
// should change to indicate elevation.
@@ -96,7 +96,7 @@ fun SearchUserBar(
contentPadding = PaddingValues(16.dp),
selectedUsers = selectedUsers,
autoScroll = true,
onUserRemoved = onUserDeselected,
onUserRemove = onUserDeselect,
modifier = Modifier.background(appBarContainerColor)
)
}
@@ -109,7 +109,7 @@ fun SearchUserBar(
resultState = state,
resultHandler = { users ->
LazyColumn(state = columnState) {
if (isMultiSelectionEnabled) {
if (isMultiSelectionEnable) {
itemsIndexed(users) { index, searchResult ->
SearchMultipleUsersResultItem(
modifier = Modifier.fillMaxWidth(),
@@ -117,9 +117,9 @@ fun SearchUserBar(
isUserSelected = selectedUsers.contains(searchResult.matrixUser),
onCheckedChange = { checked ->
if (checked) {
onUserSelected(searchResult.matrixUser)
onUserSelect(searchResult.matrixUser)
} else {
onUserDeselected(searchResult.matrixUser)
onUserDeselect(searchResult.matrixUser)
}
}
)
@@ -132,7 +132,7 @@ fun SearchUserBar(
SearchSingleUserResultItem(
modifier = Modifier.fillMaxWidth(),
searchResult = searchResult,
onClick = { onUserSelected(searchResult.matrixUser) }
onClick = { onUserSelect(searchResult.matrixUser) }
)
if (index < users.lastIndex) {
HorizontalDivider()

View File

@@ -44,8 +44,8 @@ import io.element.android.libraries.ui.strings.CommonStrings
@Composable
fun UserListView(
state: UserListState,
onUserSelected: (MatrixUser) -> Unit,
onUserDeselected: (MatrixUser) -> Unit,
onSelectUser: (MatrixUser) -> Unit,
onDeselectUser: (MatrixUser) -> Unit,
modifier: Modifier = Modifier,
showBackButton: Boolean = true,
) {
@@ -59,17 +59,17 @@ fun UserListView(
selectedUsers = state.selectedUsers,
active = state.isSearchActive,
showLoader = state.showSearchLoader,
isMultiSelectionEnabled = state.isMultiSelectionEnabled,
isMultiSelectionEnable = state.isMultiSelectionEnabled,
showBackButton = showBackButton,
onActiveChanged = { state.eventSink(UserListEvents.OnSearchActiveChanged(it)) },
onTextChanged = { state.eventSink(UserListEvents.UpdateSearchQuery(it)) },
onUserSelected = {
onActiveChange = { state.eventSink(UserListEvents.OnSearchActiveChanged(it)) },
onTextChange = { state.eventSink(UserListEvents.UpdateSearchQuery(it)) },
onUserSelect = {
state.eventSink(UserListEvents.AddToSelection(it))
onUserSelected(it)
onSelectUser(it)
},
onUserDeselected = {
onUserDeselect = {
state.eventSink(UserListEvents.RemoveFromSelection(it))
onUserDeselected(it)
onDeselectUser(it)
},
)
@@ -78,9 +78,9 @@ fun UserListView(
contentPadding = PaddingValues(16.dp),
selectedUsers = state.selectedUsers,
autoScroll = true,
onUserRemoved = {
onUserRemove = {
state.eventSink(UserListEvents.RemoveFromSelection(it))
onUserDeselected(it)
onDeselectUser(it)
},
)
}
@@ -102,10 +102,10 @@ fun UserListView(
onCheckedChange = {
if (isSelected) {
state.eventSink(UserListEvents.RemoveFromSelection(recentDirectRoom.matrixUser))
onUserDeselected(recentDirectRoom.matrixUser)
onDeselectUser(recentDirectRoom.matrixUser)
} else {
state.eventSink(UserListEvents.AddToSelection(recentDirectRoom.matrixUser))
onUserSelected(recentDirectRoom.matrixUser)
onSelectUser(recentDirectRoom.matrixUser)
}
},
data = CheckableUserRowData.Resolved(
@@ -129,7 +129,7 @@ fun UserListView(
internal fun UserListViewPreview(@PreviewParameter(UserListStateProvider::class) state: UserListState) = ElementPreview {
UserListView(
state = state,
onUserSelected = {},
onUserDeselected = {},
onSelectUser = {},
onDeselectUser = {},
)
}

View File

@@ -50,7 +50,7 @@ class ConfigureRoomNode @AssistedInject constructor(
fun onCreateRoomSuccess(roomId: RoomId)
}
private fun onRoomCreated(roomId: RoomId) {
private fun onCreateRoomSuccess(roomId: RoomId) {
plugins<Callback>().forEach { it.onCreateRoomSuccess(roomId) }
}
@@ -60,8 +60,8 @@ class ConfigureRoomNode @AssistedInject constructor(
ConfigureRoomView(
state = state,
modifier = modifier,
onBackPressed = this::navigateUp,
onRoomCreated = this::onRoomCreated,
onBackClick = this::navigateUp,
onCreateRoomSuccess = this::onCreateRoomSuccess,
)
}
}

View File

@@ -65,14 +65,14 @@ import io.element.android.libraries.ui.strings.CommonStrings
@Composable
fun ConfigureRoomView(
state: ConfigureRoomState,
onBackPressed: () -> Unit,
onRoomCreated: (RoomId) -> Unit,
onBackClick: () -> Unit,
onCreateRoomSuccess: (RoomId) -> Unit,
modifier: Modifier = Modifier,
) {
val focusManager = LocalFocusManager.current
val isAvatarActionsSheetVisible = remember { mutableStateOf(false) }
fun onAvatarClicked() {
fun onAvatarClick() {
focusManager.clearFocus()
isAvatarActionsSheetVisible.value = true
}
@@ -82,8 +82,8 @@ fun ConfigureRoomView(
topBar = {
ConfigureRoomToolbar(
isNextActionEnabled = state.isCreateButtonEnabled,
onBackPressed = onBackPressed,
onNextPressed = {
onBackClick = onBackClick,
onNextClick = {
focusManager.clearFocus()
state.eventSink(ConfigureRoomEvents.CreateRoom(state.config))
},
@@ -102,20 +102,20 @@ fun ConfigureRoomView(
modifier = Modifier.padding(horizontal = 16.dp),
avatarUri = state.config.avatarUri,
roomName = state.config.roomName.orEmpty(),
onAvatarClick = ::onAvatarClicked,
onRoomNameChanged = { state.eventSink(ConfigureRoomEvents.RoomNameChanged(it)) },
onAvatarClick = ::onAvatarClick,
onChangeRoomName = { state.eventSink(ConfigureRoomEvents.RoomNameChanged(it)) },
)
RoomTopic(
modifier = Modifier.padding(horizontal = 16.dp),
topic = state.config.topic.orEmpty(),
onTopicChanged = { state.eventSink(ConfigureRoomEvents.TopicChanged(it)) },
onTopicChange = { state.eventSink(ConfigureRoomEvents.TopicChanged(it)) },
)
if (state.config.invites.isNotEmpty()) {
SelectedUsersRowList(
modifier = Modifier.padding(bottom = 16.dp),
contentPadding = PaddingValues(horizontal = 24.dp),
selectedUsers = state.config.invites,
onUserRemoved = {
onUserRemove = {
focusManager.clearFocus()
state.eventSink(ConfigureRoomEvents.RemoveFromSelection(it))
},
@@ -124,7 +124,7 @@ fun ConfigureRoomView(
RoomPrivacyOptions(
modifier = Modifier.padding(bottom = 40.dp),
selected = state.config.privacy,
onOptionSelected = {
onOptionClick = {
focusManager.clearFocus()
state.eventSink(ConfigureRoomEvents.RoomPrivacyChanged(it.privacy))
},
@@ -136,7 +136,7 @@ fun ConfigureRoomView(
actions = state.avatarActions,
isVisible = isAvatarActionsSheetVisible.value,
onDismiss = { isAvatarActionsSheetVisible.value = false },
onActionSelected = { state.eventSink(ConfigureRoomEvents.HandleAvatarAction(it)) }
onSelectAction = { state.eventSink(ConfigureRoomEvents.HandleAvatarAction(it)) }
)
AsyncActionView(
@@ -146,7 +146,7 @@ fun ConfigureRoomView(
progressText = stringResource(CommonStrings.common_creating_room),
)
},
onSuccess = { onRoomCreated(it) },
onSuccess = { onCreateRoomSuccess(it) },
errorMessage = { stringResource(R.string.screen_create_room_error_creating_room) },
onRetry = { state.eventSink(ConfigureRoomEvents.CreateRoom(state.config)) },
onErrorDismiss = { state.eventSink(ConfigureRoomEvents.CancelCreateRoom) },
@@ -161,8 +161,8 @@ fun ConfigureRoomView(
@Composable
private fun ConfigureRoomToolbar(
isNextActionEnabled: Boolean,
onBackPressed: () -> Unit,
onNextPressed: () -> Unit,
onBackClick: () -> Unit,
onNextClick: () -> Unit,
) {
TopAppBar(
title = {
@@ -171,12 +171,12 @@ private fun ConfigureRoomToolbar(
style = ElementTheme.typography.aliasScreenTitle,
)
},
navigationIcon = { BackButton(onClick = onBackPressed) },
navigationIcon = { BackButton(onClick = onBackClick) },
actions = {
TextButton(
text = stringResource(CommonStrings.action_create),
enabled = isNextActionEnabled,
onClick = onNextPressed,
onClick = onNextClick,
)
}
)
@@ -187,7 +187,7 @@ private fun RoomNameWithAvatar(
avatarUri: Uri?,
roomName: String,
onAvatarClick: () -> Unit,
onRoomNameChanged: (String) -> Unit,
onChangeRoomName: (String) -> Unit,
modifier: Modifier = Modifier,
) {
Row(
@@ -205,7 +205,7 @@ private fun RoomNameWithAvatar(
value = roomName,
placeholder = stringResource(CommonStrings.common_room_name_placeholder),
singleLine = true,
onValueChange = onRoomNameChanged,
onValueChange = onChangeRoomName,
)
}
}
@@ -213,7 +213,7 @@ private fun RoomNameWithAvatar(
@Composable
private fun RoomTopic(
topic: String,
onTopicChanged: (String) -> Unit,
onTopicChange: (String) -> Unit,
modifier: Modifier = Modifier,
) {
LabelledTextField(
@@ -221,7 +221,7 @@ private fun RoomTopic(
label = stringResource(R.string.screen_create_room_topic_label),
value = topic,
placeholder = stringResource(CommonStrings.common_topic_placeholder),
onValueChange = onTopicChanged,
onValueChange = onTopicChange,
maxLines = 3,
keyboardOptions = KeyboardOptions(
capitalization = KeyboardCapitalization.Sentences,
@@ -232,7 +232,7 @@ private fun RoomTopic(
@Composable
private fun RoomPrivacyOptions(
selected: RoomPrivacy?,
onOptionSelected: (RoomPrivacyItem) -> Unit,
onOptionClick: (RoomPrivacyItem) -> Unit,
modifier: Modifier = Modifier,
) {
val items = roomPrivacyItems()
@@ -241,7 +241,7 @@ private fun RoomPrivacyOptions(
RoomPrivacyOption(
roomPrivacyItem = item,
isSelected = selected == item.privacy,
onOptionSelected = onOptionSelected,
onOptionClick = onOptionClick,
)
}
}
@@ -252,7 +252,7 @@ private fun RoomPrivacyOptions(
internal fun ConfigureRoomViewPreview(@PreviewParameter(ConfigureRoomStateProvider::class) state: ConfigureRoomState) = ElementPreview {
ConfigureRoomView(
state = state,
onBackPressed = {},
onRoomCreated = {},
onBackClick = {},
onCreateRoomSuccess = {},
)
}

View File

@@ -68,10 +68,10 @@ class CreateRoomRootNode @AssistedInject constructor(
CreateRoomRootView(
state = state,
modifier = modifier,
onClosePressed = this::navigateUp,
onNewRoomClicked = ::onCreateNewRoom,
onCloseClick = this::navigateUp,
onNewRoomClick = ::onCreateNewRoom,
onOpenDM = ::onStartChatSuccess,
onInviteFriendsClicked = { invitePeople(activity) }
onInviteFriendsClick = { invitePeople(activity) }
)
}

View File

@@ -59,17 +59,17 @@ import kotlinx.collections.immutable.persistentListOf
@Composable
fun CreateRoomRootView(
state: CreateRoomRootState,
onClosePressed: () -> Unit,
onNewRoomClicked: () -> Unit,
onCloseClick: () -> Unit,
onNewRoomClick: () -> Unit,
onOpenDM: (RoomId) -> Unit,
onInviteFriendsClicked: () -> Unit,
onInviteFriendsClick: () -> Unit,
modifier: Modifier = Modifier,
) {
Scaffold(
modifier = modifier.fillMaxWidth(),
topBar = {
if (!state.userListState.isSearchActive) {
CreateRoomRootViewTopBar(onClosePressed = onClosePressed)
CreateRoomRootViewTopBar(onCloseClick = onCloseClick)
}
}
) { paddingValues ->
@@ -86,18 +86,18 @@ fun CreateRoomRootView(
state = state.userListState.copy(
recentDirectRooms = persistentListOf(),
),
onUserSelected = {
onSelectUser = {
state.eventSink(CreateRoomRootEvents.StartDM(it))
},
onUserDeselected = { },
onDeselectUser = { },
)
if (!state.userListState.isSearchActive) {
CreateRoomActionButtonsList(
state = state,
onNewRoomClicked = onNewRoomClicked,
onInvitePeopleClicked = onInviteFriendsClicked,
onDmClicked = onOpenDM,
onNewRoomClick = onNewRoomClick,
onInvitePeopleClick = onInviteFriendsClick,
onDmClick = onOpenDM,
)
}
}
@@ -125,7 +125,7 @@ fun CreateRoomRootView(
@OptIn(ExperimentalMaterial3Api::class)
@Composable
private fun CreateRoomRootViewTopBar(
onClosePressed: () -> Unit,
onCloseClick: () -> Unit,
) {
TopAppBar(
title = {
@@ -137,7 +137,7 @@ private fun CreateRoomRootViewTopBar(
navigationIcon = {
BackButton(
imageVector = CompoundIcons.Close(),
onClick = onClosePressed,
onClick = onCloseClick,
)
}
)
@@ -146,23 +146,23 @@ private fun CreateRoomRootViewTopBar(
@Composable
private fun CreateRoomActionButtonsList(
state: CreateRoomRootState,
onNewRoomClicked: () -> Unit,
onInvitePeopleClicked: () -> Unit,
onDmClicked: (RoomId) -> Unit,
onNewRoomClick: () -> Unit,
onInvitePeopleClick: () -> Unit,
onDmClick: (RoomId) -> Unit,
) {
LazyColumn {
item {
CreateRoomActionButton(
iconRes = CompoundDrawables.ic_compound_plus,
text = stringResource(id = R.string.screen_create_room_action_create_room),
onClick = onNewRoomClicked,
onClick = onNewRoomClick,
)
}
item {
CreateRoomActionButton(
iconRes = CompoundDrawables.ic_compound_share_android,
text = stringResource(id = CommonStrings.action_invite_friends_to_app, state.applicationName),
onClick = onInvitePeopleClicked,
onClick = onInvitePeopleClick,
)
}
if (state.userListState.recentDirectRooms.isNotEmpty()) {
@@ -177,7 +177,7 @@ private fun CreateRoomActionButtonsList(
MatrixUserRow(
modifier = Modifier.clickable(
onClick = {
onDmClicked(recentDirectRoom.roomId)
onDmClick(recentDirectRoom.roomId)
}
),
matrixUser = recentDirectRoom.matrixUser,
@@ -222,9 +222,9 @@ internal fun CreateRoomRootViewPreview(@PreviewParameter(CreateRoomRootStateProv
ElementPreview {
CreateRoomRootView(
state = state,
onClosePressed = {},
onNewRoomClicked = {},
onCloseClick = {},
onNewRoomClick = {},
onOpenDM = {},
onInviteFriendsClicked = {},
onInviteFriendsClick = {},
)
}

View File

@@ -47,7 +47,7 @@ class AddPeopleViewTest {
aUserListState(
eventSink = eventsRecorder,
),
onBackPressed = it
onBackClick = it
)
rule.pressBack()
}
@@ -75,7 +75,7 @@ class AddPeopleViewTest {
aUserListState(
eventSink = eventsRecorder,
),
onNextPressed = it
onNextClick = it
)
rule.clickOn(CommonStrings.action_skip)
}
@@ -85,14 +85,14 @@ class AddPeopleViewTest {
private fun <R : TestRule> AndroidComposeTestRule<R, ComponentActivity>.setAddPeopleView(
state: UserListState,
onBackPressed: () -> Unit = EnsureNeverCalled(),
onNextPressed: () -> Unit = EnsureNeverCalled(),
onBackClick: () -> Unit = EnsureNeverCalled(),
onNextClick: () -> Unit = EnsureNeverCalled(),
) {
setContent {
AddPeopleView(
state = state,
onBackPressed = onBackPressed,
onNextPressed = onNextPressed,
onBackClick = onBackClick,
onNextClick = onNextClick,
)
}
}

View File

@@ -54,7 +54,7 @@ class CreateRoomRootViewTest {
aCreateRoomRootState(
eventSink = eventsRecorder,
),
onClosePressed = it
onCloseClick = it
)
rule.pressBack()
}
@@ -68,7 +68,7 @@ class CreateRoomRootViewTest {
aCreateRoomRootState(
eventSink = eventsRecorder,
),
onNewRoomClicked = it
onNewRoomClick = it
)
rule.clickOn(R.string.screen_create_room_action_create_room)
}
@@ -84,7 +84,7 @@ class CreateRoomRootViewTest {
applicationName = "test",
eventSink = eventsRecorder,
),
onInviteFriendsClicked = it
onInviteFriendsClick = it
)
val text = rule.activity.getString(CommonStrings.action_invite_friends_to_app, "test")
rule.onNodeWithText(text).performClick()
@@ -114,18 +114,18 @@ class CreateRoomRootViewTest {
private fun <R : TestRule> AndroidComposeTestRule<R, ComponentActivity>.setCreateRoomRootView(
state: CreateRoomRootState,
onClosePressed: () -> Unit = EnsureNeverCalled(),
onNewRoomClicked: () -> Unit = EnsureNeverCalled(),
onCloseClick: () -> Unit = EnsureNeverCalled(),
onNewRoomClick: () -> Unit = EnsureNeverCalled(),
onOpenDM: (RoomId) -> Unit = EnsureNeverCalledWithParam(),
onInviteFriendsClicked: () -> Unit = EnsureNeverCalled(),
onInviteFriendsClick: () -> Unit = EnsureNeverCalled(),
) {
setContent {
CreateRoomRootView(
state = state,
onClosePressed = onClosePressed,
onNewRoomClicked = onNewRoomClicked,
onCloseClick = onCloseClick,
onNewRoomClick = onNewRoomClick,
onOpenDM = onOpenDM,
onInviteFriendsClicked = onInviteFriendsClicked,
onInviteFriendsClick = onInviteFriendsClick,
)
}
}

View File

@@ -34,18 +34,18 @@ class WelcomeNode @AssistedInject constructor(
private val buildMeta: BuildMeta,
) : Node(buildContext, plugins = plugins) {
interface Callback : Plugin {
fun onContinueClicked()
fun onContinueClick()
}
private fun onContinueClicked() {
plugins.filterIsInstance<Callback>().forEach { it.onContinueClicked() }
private fun onContinueClick() {
plugins.filterIsInstance<Callback>().forEach { it.onContinueClick() }
}
@Composable
override fun View(modifier: Modifier) {
WelcomeView(
applicationName = buildMeta.applicationName,
onContinueClicked = ::onContinueClicked,
onContinueClick = ::onContinueClick,
modifier = modifier
)
}

View File

@@ -52,9 +52,9 @@ import kotlinx.collections.immutable.persistentListOf
fun WelcomeView(
applicationName: String,
modifier: Modifier = Modifier,
onContinueClicked: () -> Unit,
onContinueClick: () -> Unit,
) {
BackHandler(onBack = onContinueClicked)
BackHandler(onBack = onContinueClick)
OnBoardingPage(
modifier = modifier
.systemBarsPadding()
@@ -90,7 +90,7 @@ fun WelcomeView(
Button(
text = stringResource(CommonStrings.action_continue),
modifier = Modifier.fillMaxWidth(),
onClick = onContinueClicked
onClick = onContinueClick
)
Spacer(modifier = Modifier.height(32.dp))
}
@@ -113,6 +113,6 @@ private fun listItems() = persistentListOf(
@Composable
internal fun WelcomeViewPreview() {
ElementPreview {
WelcomeView(applicationName = "Element X", onContinueClicked = {})
WelcomeView(applicationName = "Element X", onContinueClick = {})
}
}

View File

@@ -24,8 +24,8 @@ interface AcceptDeclineInviteView {
@Composable
fun Render(
state: AcceptDeclineInviteState,
onInviteAccepted: (RoomId) -> Unit,
onInviteDeclined: (RoomId) -> Unit,
onAcceptInvite: (RoomId) -> Unit,
onDeclineInvite: (RoomId) -> Unit,
modifier: Modifier,
)
}

View File

@@ -36,21 +36,21 @@ import kotlin.jvm.optionals.getOrNull
@Composable
fun AcceptDeclineInviteView(
state: AcceptDeclineInviteState,
onInviteAccepted: (RoomId) -> Unit,
onInviteDeclined: (RoomId) -> Unit,
onAcceptInvite: (RoomId) -> Unit,
onDeclineInvite: (RoomId) -> Unit,
modifier: Modifier = Modifier,
) {
Box(modifier = modifier) {
AsyncActionView(
async = state.acceptAction,
onSuccess = onInviteAccepted,
onSuccess = onAcceptInvite,
onErrorDismiss = {
state.eventSink(InternalAcceptDeclineInviteEvents.DismissAcceptError)
},
)
AsyncActionView(
async = state.declineAction,
onSuccess = onInviteDeclined,
onSuccess = onDeclineInvite,
onErrorDismiss = {
state.eventSink(InternalAcceptDeclineInviteEvents.DismissDeclineError)
},
@@ -59,10 +59,10 @@ fun AcceptDeclineInviteView(
if (invite != null) {
DeclineConfirmationDialog(
invite = invite,
onConfirmClicked = {
onConfirmClick = {
state.eventSink(InternalAcceptDeclineInviteEvents.ConfirmDeclineInvite)
},
onDismissClicked = {
onDismissClick = {
state.eventSink(InternalAcceptDeclineInviteEvents.CancelDeclineInvite)
}
)
@@ -75,8 +75,8 @@ fun AcceptDeclineInviteView(
@Composable
private fun DeclineConfirmationDialog(
invite: InviteData,
onConfirmClicked: () -> Unit,
onDismissClicked: () -> Unit,
onConfirmClick: () -> Unit,
onDismissClick: () -> Unit,
modifier: Modifier = Modifier
) {
val contentResource = if (invite.isDirect) {
@@ -97,8 +97,8 @@ private fun DeclineConfirmationDialog(
title = stringResource(titleResource),
submitText = stringResource(CommonStrings.action_decline),
cancelText = stringResource(CommonStrings.action_cancel),
onSubmitClicked = onConfirmClicked,
onDismiss = onDismissClicked,
onSubmitClick = onConfirmClick,
onDismiss = onDismissClick,
)
}
@@ -108,7 +108,7 @@ internal fun AcceptDeclineInviteViewPreview(@PreviewParameter(AcceptDeclineInvit
ElementPreview {
AcceptDeclineInviteView(
state = state,
onInviteAccepted = {},
onInviteDeclined = {},
onAcceptInvite = {},
onDeclineInvite = {},
)
}

View File

@@ -30,14 +30,14 @@ class AcceptDeclineInviteViewWrapper @Inject constructor() : AcceptDeclineInvite
@Composable
override fun Render(
state: AcceptDeclineInviteState,
onInviteAccepted: (RoomId) -> Unit,
onInviteDeclined: (RoomId) -> Unit,
onAcceptInvite: (RoomId) -> Unit,
onDeclineInvite: (RoomId) -> Unit,
modifier: Modifier,
) {
AcceptDeclineInviteView(
state = state,
onInviteAccepted = onInviteAccepted,
onInviteDeclined = onInviteDeclined,
onAcceptInvite = onAcceptInvite,
onDeclineInvite = onDeclineInvite,
modifier = modifier
)
}

View File

@@ -50,15 +50,15 @@ class JoinRoomNode @AssistedInject constructor(
val state = presenter.present()
JoinRoomView(
state = state,
onBackPressed = ::navigateUp,
onBackClick = ::navigateUp,
onJoinSuccess = ::navigateUp,
onKnockSuccess = ::navigateUp,
modifier = modifier
)
acceptDeclineInviteView.Render(
state = state.acceptDeclineInviteState,
onInviteAccepted = {},
onInviteDeclined = { navigateUp() },
onAcceptInvite = {},
onDeclineInvite = { navigateUp() },
modifier = Modifier
)
}

View File

@@ -65,7 +65,7 @@ import io.element.android.libraries.ui.strings.CommonStrings
@Composable
fun JoinRoomView(
state: JoinRoomState,
onBackPressed: () -> Unit,
onBackClick: () -> Unit,
onJoinSuccess: () -> Unit,
onKnockSuccess: () -> Unit,
modifier: Modifier = Modifier,
@@ -78,7 +78,7 @@ fun JoinRoomView(
containerColor = Color.Transparent,
paddingValues = PaddingValues(16.dp),
topBar = {
JoinRoomTopBar(onBackClicked = onBackPressed)
JoinRoomTopBar(onBackClick = onBackClick)
},
content = {
JoinRoomContent(
@@ -104,7 +104,7 @@ fun JoinRoomView(
onRetry = {
state.eventSink(JoinRoomEvents.RetryFetchingContent)
},
onGoBack = onBackPressed,
onGoBack = onBackClick,
)
}
)
@@ -312,11 +312,11 @@ private fun JoinRoomContent(
@OptIn(ExperimentalMaterial3Api::class)
@Composable
private fun JoinRoomTopBar(
onBackClicked: () -> Unit,
onBackClick: () -> Unit,
) {
TopAppBar(
navigationIcon = {
BackButton(onClick = onBackClicked)
BackButton(onClick = onBackClick)
},
title = {},
)
@@ -327,7 +327,7 @@ private fun JoinRoomTopBar(
internal fun JoinRoomViewPreview(@PreviewParameter(JoinRoomStateProvider::class) state: JoinRoomState) = ElementPreview {
JoinRoomView(
state = state,
onBackPressed = { },
onBackClick = { },
onJoinSuccess = { },
onKnockSuccess = { },
)

View File

@@ -45,7 +45,7 @@ class JoinRoomViewTest {
aJoinRoomState(
eventSink = eventsRecorder,
),
onBackPressed = it
onBackClick = it
)
rule.pressBack()
}
@@ -167,7 +167,7 @@ class JoinRoomViewTest {
contentState = aLoadedContentState(roomType = RoomType.Space),
eventSink = eventsRecorder,
),
onBackPressed = it
onBackClick = it
)
rule.clickOn(CommonStrings.action_go_back)
}
@@ -176,14 +176,14 @@ class JoinRoomViewTest {
private fun <R : TestRule> AndroidComposeTestRule<R, ComponentActivity>.setJoinRoomView(
state: JoinRoomState,
onBackPressed: () -> Unit = EnsureNeverCalled(),
onBackClick: () -> Unit = EnsureNeverCalled(),
onJoinSuccess: () -> Unit = EnsureNeverCalled(),
onKnockSuccess: () -> Unit = EnsureNeverCalled(),
) {
setContent {
JoinRoomView(
state = state,
onBackPressed = onBackPressed,
onBackClick = onBackClick,
onJoinSuccess = onJoinSuccess,
onKnockSuccess = onKnockSuccess,
)

View File

@@ -89,7 +89,7 @@ private fun LeaveRoomConfirmationDialog(
title = stringResource(if (isDm) CommonStrings.action_leave_conversation else CommonStrings.action_leave_room),
content = stringResource(text),
submitText = stringResource(CommonStrings.action_leave),
onSubmitClicked = { eventSink(LeaveRoomEvent.LeaveRoom(roomId)) },
onSubmitClick = { eventSink(LeaveRoomEvent.LeaveRoom(roomId)) },
onDismiss = { eventSink(LeaveRoomEvent.HideConfirmation) },
)
}

View File

@@ -29,7 +29,7 @@ internal fun PermissionDeniedDialog(
) {
ConfirmationDialog(
content = stringResource(CommonStrings.error_missing_location_auth_android, appName),
onSubmitClicked = onContinue,
onSubmitClick = onContinue,
onDismiss = onDismiss,
submitText = stringResource(CommonStrings.action_continue),
cancelText = stringResource(CommonStrings.action_cancel),

View File

@@ -29,7 +29,7 @@ internal fun PermissionRationaleDialog(
) {
ConfirmationDialog(
content = stringResource(CommonStrings.error_missing_location_rationale_android, appName),
onSubmitClicked = onContinue,
onSubmitClick = onContinue,
onDismiss = onDismiss,
submitText = stringResource(CommonStrings.action_continue),
cancelText = stringResource(CommonStrings.action_cancel),

View File

@@ -54,7 +54,7 @@ class ShowLocationNode @AssistedInject constructor(
ShowLocationView(
state = presenter.present(),
modifier = modifier,
onBackPressed = ::navigateUp
onBackClick = ::navigateUp
)
}
}

View File

@@ -67,7 +67,7 @@ import kotlinx.collections.immutable.toImmutableMap
@Composable
fun ShowLocationView(
state: ShowLocationState,
onBackPressed: () -> Unit,
onBackClick: () -> Unit,
modifier: Modifier = Modifier,
) {
when (state.permissionDialog) {
@@ -121,7 +121,7 @@ fun ShowLocationView(
},
navigationIcon = {
BackButton(
onClick = onBackPressed,
onClick = onBackClick,
)
},
actions = {
@@ -194,7 +194,7 @@ fun ShowLocationView(
internal fun ShowLocationViewPreview(@PreviewParameter(ShowLocationStateProvider::class) state: ShowLocationState) = ElementPreview {
ShowLocationView(
state = state,
onBackPressed = {},
onBackClick = {},
)
}

View File

@@ -49,7 +49,7 @@ class ShowLocationViewTest {
state = aShowLocationState(
eventSink = eventsRecorder
),
onBackPressed = callback,
onBackClick = callback,
)
rule.pressBack()
}
@@ -62,7 +62,7 @@ class ShowLocationViewTest {
aShowLocationState(
eventSink = eventsRecorder
),
onBackPressed = EnsureNeverCalled(),
onBackClick = EnsureNeverCalled(),
)
val shareContentDescription = rule.activity.getString(CommonStrings.action_share)
rule.onNodeWithContentDescription(shareContentDescription).performClick()
@@ -76,7 +76,7 @@ class ShowLocationViewTest {
aShowLocationState(
eventSink = eventsRecorder
),
onBackPressed = EnsureNeverCalled(),
onBackClick = EnsureNeverCalled(),
)
rule.onNodeWithTag(TestTags.floatingActionButton.value).performClick()
eventsRecorder.assertSingle(ShowLocationEvents.TrackMyLocation(true))
@@ -90,7 +90,7 @@ class ShowLocationViewTest {
permissionDialog = ShowLocationState.Dialog.PermissionDenied,
eventSink = eventsRecorder
),
onBackPressed = EnsureNeverCalled(),
onBackClick = EnsureNeverCalled(),
)
rule.clickOn(CommonStrings.action_continue)
eventsRecorder.assertSingle(ShowLocationEvents.OpenAppSettings)
@@ -104,7 +104,7 @@ class ShowLocationViewTest {
permissionDialog = ShowLocationState.Dialog.PermissionDenied,
eventSink = eventsRecorder
),
onBackPressed = EnsureNeverCalled(),
onBackClick = EnsureNeverCalled(),
)
rule.clickOn(CommonStrings.action_cancel)
eventsRecorder.assertSingle(ShowLocationEvents.DismissDialog)
@@ -118,7 +118,7 @@ class ShowLocationViewTest {
permissionDialog = ShowLocationState.Dialog.PermissionRationale,
eventSink = eventsRecorder
),
onBackPressed = EnsureNeverCalled(),
onBackClick = EnsureNeverCalled(),
)
rule.clickOn(CommonStrings.action_continue)
eventsRecorder.assertSingle(ShowLocationEvents.RequestPermissions)
@@ -132,7 +132,7 @@ class ShowLocationViewTest {
permissionDialog = ShowLocationState.Dialog.PermissionRationale,
eventSink = eventsRecorder
),
onBackPressed = EnsureNeverCalled(),
onBackClick = EnsureNeverCalled(),
)
rule.clickOn(CommonStrings.action_cancel)
eventsRecorder.assertSingle(ShowLocationEvents.DismissDialog)
@@ -141,14 +141,14 @@ class ShowLocationViewTest {
private fun <R : TestRule> AndroidComposeTestRule<R, ComponentActivity>.setShowLocationView(
state: ShowLocationState,
onBackPressed: () -> Unit = EnsureNeverCalled(),
onBackClick: () -> Unit = EnsureNeverCalled(),
) {
setContent {
// Simulate a LocalInspectionMode for MapboxMap
CompositionLocalProvider(LocalInspectionMode provides true) {
ShowLocationView(
state = state,
onBackPressed = onBackPressed,
onBackClick = onBackClick,
)
}
}

View File

@@ -115,7 +115,7 @@ class LockScreenSettingsFlowNode @AssistedInject constructor(
}
NavTarget.Settings -> {
val callback = object : LockScreenSettingsNode.Callback {
override fun onChangePinClicked() {
override fun onChangePinClick() {
backstack.push(NavTarget.SetupPin)
}
}

View File

@@ -34,11 +34,11 @@ class LockScreenSettingsNode @AssistedInject constructor(
private val presenter: LockScreenSettingsPresenter,
) : Node(buildContext, plugins = plugins) {
interface Callback : Plugin {
fun onChangePinClicked()
fun onChangePinClick()
}
private fun onChangePinClicked() {
plugins<Callback>().forEach { it.onChangePinClicked() }
private fun onChangePinClick() {
plugins<Callback>().forEach { it.onChangePinClick() }
}
@Composable
@@ -46,8 +46,8 @@ class LockScreenSettingsNode @AssistedInject constructor(
val state = presenter.present()
LockScreenSettingsView(
state = state,
onBackPressed = this::navigateUp,
onChangePinClicked = this::onChangePinClicked,
onBackClick = this::navigateUp,
onChangePinClick = this::onChangePinClick,
modifier = modifier,
)
}

View File

@@ -34,19 +34,19 @@ import io.element.android.libraries.designsystem.preview.PreviewsDayNight
@Composable
fun LockScreenSettingsView(
state: LockScreenSettingsState,
onChangePinClicked: () -> Unit,
onBackPressed: () -> Unit,
onChangePinClick: () -> Unit,
onBackClick: () -> Unit,
modifier: Modifier = Modifier,
) {
PreferencePage(
title = stringResource(id = io.element.android.libraries.ui.strings.R.string.common_screen_lock),
onBackPressed = onBackPressed,
onBackClick = onBackClick,
modifier = modifier
) {
PreferenceCategory(showTopDivider = false) {
PreferenceText(
title = stringResource(id = R.string.screen_app_lock_settings_change_pin),
onClick = onChangePinClicked
onClick = onChangePinClick
)
PreferenceDivider()
if (state.showRemovePinOption) {
@@ -74,7 +74,7 @@ fun LockScreenSettingsView(
ConfirmationDialog(
title = stringResource(id = R.string.screen_app_lock_settings_remove_pin_alert_title),
content = stringResource(id = R.string.screen_app_lock_settings_remove_pin_alert_message),
onSubmitClicked = {
onSubmitClick = {
state.eventSink(LockScreenSettingsEvents.ConfirmRemovePin)
},
onDismiss = {
@@ -92,8 +92,8 @@ internal fun LockScreenSettingsViewPreview(
ElementPreview {
LockScreenSettingsView(
state = state,
onChangePinClicked = {},
onBackPressed = {},
onChangePinClick = {},
onBackClick = {},
)
}
}

View File

@@ -49,8 +49,8 @@ fun SetupBiometricView(
},
footer = {
SetupBiometricFooter(
onAllowClicked = { state.eventSink(SetupBiometricEvents.AllowBiometric) },
onSkipClicked = { state.eventSink(SetupBiometricEvents.UsePin) }
onAllowClick = { state.eventSink(SetupBiometricEvents.AllowBiometric) },
onSkipClick = { state.eventSink(SetupBiometricEvents.UsePin) }
)
},
)
@@ -68,18 +68,18 @@ private fun SetupBiometricHeader() {
@Composable
private fun SetupBiometricFooter(
onAllowClicked: () -> Unit,
onSkipClicked: () -> Unit,
onAllowClick: () -> Unit,
onSkipClick: () -> Unit,
) {
ButtonColumnMolecule {
val biometricAuth = stringResource(id = R.string.screen_app_lock_biometric_authentication)
Button(
text = stringResource(id = R.string.screen_app_lock_setup_biometric_unlock_allow_title, biometricAuth),
onClick = onAllowClicked
onClick = onAllowClick
)
TextButton(
text = stringResource(id = R.string.screen_app_lock_setup_biometric_unlock_skip),
onClick = onSkipClicked
onClick = onSkipClick
)
}
}

View File

@@ -37,7 +37,7 @@ class SetupPinNode @AssistedInject constructor(
val state = presenter.present()
SetupPinView(
state = state,
onBackClicked = this::navigateUp,
onBackClick = this::navigateUp,
modifier = modifier
)
}

View File

@@ -52,7 +52,7 @@ import io.element.android.libraries.designsystem.theme.components.TopAppBar
@Composable
fun SetupPinView(
state: SetupPinState,
onBackClicked: () -> Unit,
onBackClick: () -> Unit,
modifier: Modifier = Modifier,
) {
Scaffold(
@@ -60,7 +60,7 @@ fun SetupPinView(
topBar = {
TopAppBar(
navigationIcon = {
BackButton(onClick = onBackClicked)
BackButton(onClick = onBackClick)
},
title = {}
)
@@ -154,7 +154,7 @@ internal fun SetupPinViewPreview(@PreviewParameter(SetupPinStateProvider::class)
ElementPreview {
SetupPinView(
state = state,
onBackClicked = {},
onBackClick = {},
)
}
}

View File

@@ -192,7 +192,7 @@ private fun SignOutPrompt(
ConfirmationDialog(
title = stringResource(id = R.string.screen_app_lock_signout_alert_title),
content = stringResource(id = R.string.screen_app_lock_signout_alert_message),
onSubmitClicked = onSignOut,
onSubmitClick = onSignOut,
onDismiss = onDismiss,
)
} else {

View File

@@ -163,7 +163,7 @@ class LoginFlowNode @AssistedInject constructor(
backstack.singleTop(NavTarget.ConfirmAccountProvider)
}
override fun onOtherClicked() {
override fun onOtherClick() {
backstack.push(NavTarget.SearchAccountProvider)
}
}
@@ -197,7 +197,7 @@ class LoginFlowNode @AssistedInject constructor(
loginFormState = navTarget.loginFormState,
)
val callback = object : WaitListNode.Callback {
override fun onCancelClicked() {
override fun onCancelClick() {
navigateUp()
}
}

View File

@@ -33,8 +33,8 @@ import io.element.android.libraries.designsystem.preview.PreviewsDayNight
@Composable
fun ChangeServerView(
state: ChangeServerState,
onLearnMoreClicked: () -> Unit,
onDone: () -> Unit,
onLearnMoreClick: () -> Unit,
onSuccess: () -> Unit,
modifier: Modifier = Modifier,
) {
val eventSink = state.eventSink
@@ -53,8 +53,8 @@ fun ChangeServerView(
is ChangeServerError.SlidingSyncAlert -> {
SlidingSyncNotSupportedDialog(
modifier = modifier,
onLearnMoreClicked = {
onLearnMoreClicked()
onLearnMoreClick = {
onLearnMoreClick()
eventSink.invoke(ChangeServerEvents.ClearError)
},
onDismiss = {
@@ -66,9 +66,9 @@ fun ChangeServerView(
}
is AsyncData.Loading -> ProgressDialog()
is AsyncData.Success -> {
val latestOnDone by rememberUpdatedState(onDone)
val latestOnSuccess by rememberUpdatedState(onSuccess)
LaunchedEffect(state.changeServerAction) {
latestOnDone()
latestOnSuccess()
}
}
AsyncData.Uninitialized -> Unit
@@ -80,7 +80,7 @@ fun ChangeServerView(
internal fun ChangeServerViewPreview(@PreviewParameter(ChangeServerStateProvider::class) state: ChangeServerState) = ElementPreview {
ChangeServerView(
state = state,
onLearnMoreClicked = {},
onDone = {},
onLearnMoreClick = {},
onSuccess = {},
)
}

View File

@@ -27,7 +27,7 @@ import io.element.android.libraries.ui.strings.CommonStrings
@Composable
internal fun SlidingSyncNotSupportedDialog(
onLearnMoreClicked: () -> Unit,
onLearnMoreClick: () -> Unit,
onDismiss: () -> Unit,
modifier: Modifier = Modifier,
) {
@@ -35,8 +35,8 @@ internal fun SlidingSyncNotSupportedDialog(
modifier = modifier,
onDismiss = onDismiss,
submitText = stringResource(CommonStrings.action_learn_more),
onSubmitClicked = onLearnMoreClicked,
onCancelClicked = onDismiss,
onSubmitClick = onLearnMoreClick,
onCancelClick = onDismiss,
title = stringResource(CommonStrings.dialog_title_error),
content = stringResource(R.string.screen_change_server_error_no_sliding_sync_message),
)
@@ -46,7 +46,7 @@ internal fun SlidingSyncNotSupportedDialog(
@Composable
internal fun SlidingSyncNotSupportedDialogPreview() = ElementPreview {
SlidingSyncNotSupportedDialog(
onLearnMoreClicked = {},
onLearnMoreClick = {},
onDismiss = {},
)
}

View File

@@ -37,15 +37,15 @@ class ChangeAccountProviderNode @AssistedInject constructor(
) : Node(buildContext, plugins = plugins) {
interface Callback : Plugin {
fun onDone()
fun onOtherClicked()
fun onOtherClick()
}
private fun onDone() {
plugins<Callback>().forEach { it.onDone() }
}
private fun onOtherClicked() {
plugins<Callback>().forEach { it.onOtherClicked() }
private fun onOtherClick() {
plugins<Callback>().forEach { it.onOtherClick() }
}
@Composable
@@ -55,10 +55,10 @@ class ChangeAccountProviderNode @AssistedInject constructor(
ChangeAccountProviderView(
state = state,
modifier = modifier,
onBackPressed = ::navigateUp,
onLearnMoreClicked = { openLearnMorePage(context) },
onDone = ::onDone,
onOtherProviderClicked = ::onOtherClicked,
onBackClick = ::navigateUp,
onLearnMoreClick = { openLearnMorePage(context) },
onSuccess = ::onDone,
onOtherProviderClick = ::onOtherClick,
)
}
}

View File

@@ -55,10 +55,10 @@ import io.element.android.libraries.designsystem.theme.components.TopAppBar
@Composable
fun ChangeAccountProviderView(
state: ChangeAccountProviderState,
onBackPressed: () -> Unit,
onLearnMoreClicked: () -> Unit,
onDone: () -> Unit,
onOtherProviderClicked: () -> Unit,
onBackClick: () -> Unit,
onLearnMoreClick: () -> Unit,
onSuccess: () -> Unit,
onOtherProviderClick: () -> Unit,
modifier: Modifier = Modifier,
) {
Scaffold(
@@ -66,7 +66,7 @@ fun ChangeAccountProviderView(
topBar = {
TopAppBar(
title = {},
navigationIcon = { BackButton(onClick = onBackPressed) }
navigationIcon = { BackButton(onClick = onBackClick) }
)
}
) { padding ->
@@ -111,14 +111,14 @@ fun ChangeAccountProviderView(
url = "",
title = stringResource(id = R.string.screen_change_account_provider_other),
),
onClick = onOtherProviderClicked
onClick = onOtherProviderClick
)
Spacer(Modifier.height(32.dp))
}
ChangeServerView(
state = state.changeServerState,
onLearnMoreClicked = onLearnMoreClicked,
onDone = onDone,
onLearnMoreClick = onLearnMoreClick,
onSuccess = onSuccess,
)
}
}
@@ -129,9 +129,9 @@ fun ChangeAccountProviderView(
internal fun ChangeAccountProviderViewPreview(@PreviewParameter(ChangeAccountProviderStateProvider::class) state: ChangeAccountProviderState) = ElementPreview {
ChangeAccountProviderView(
state = state,
onBackPressed = { },
onLearnMoreClicked = { },
onDone = { },
onOtherProviderClicked = { },
onBackClick = { },
onLearnMoreClick = { },
onSuccess = { },
onOtherProviderClick = { },
)
}

View File

@@ -75,9 +75,9 @@ class ConfirmAccountProviderNode @AssistedInject constructor(
state = state,
modifier = modifier,
onOidcDetails = ::onOidcDetails,
onLoginPasswordNeeded = ::onLoginPasswordNeeded,
onNeedLoginPassword = ::onLoginPasswordNeeded,
onChange = ::onChangeAccountProvider,
onLearnMoreClicked = { openLearnMorePage(context) },
onLearnMoreClick = { openLearnMorePage(context) },
)
}
}

View File

@@ -49,8 +49,8 @@ import io.element.android.libraries.ui.strings.CommonStrings
fun ConfirmAccountProviderView(
state: ConfirmAccountProviderState,
onOidcDetails: (OidcDetails) -> Unit,
onLoginPasswordNeeded: () -> Unit,
onLearnMoreClicked: () -> Unit,
onNeedLoginPassword: () -> Unit,
onLearnMoreClick: () -> Unit,
onChange: () -> Unit,
modifier: Modifier = Modifier,
) {
@@ -118,8 +118,8 @@ fun ConfirmAccountProviderView(
)
}
is ChangeServerError.SlidingSyncAlert -> {
SlidingSyncNotSupportedDialog(onLearnMoreClicked = {
onLearnMoreClicked()
SlidingSyncNotSupportedDialog(onLearnMoreClick = {
onLearnMoreClick()
eventSink(ConfirmAccountProviderEvents.ClearError)
}, onDismiss = {
eventSink(ConfirmAccountProviderEvents.ClearError)
@@ -131,7 +131,7 @@ fun ConfirmAccountProviderView(
is AsyncData.Success -> {
when (val loginFlowState = state.loginFlow.data) {
is LoginFlow.OidcFlow -> onOidcDetails(loginFlowState.oidcDetails)
LoginFlow.PasswordLogin -> onLoginPasswordNeeded()
LoginFlow.PasswordLogin -> onNeedLoginPassword()
}
}
AsyncData.Uninitialized -> Unit
@@ -147,8 +147,8 @@ internal fun ConfirmAccountProviderViewPreview(
ConfirmAccountProviderView(
state = state,
onOidcDetails = {},
onLoginPasswordNeeded = {},
onLearnMoreClicked = {},
onNeedLoginPassword = {},
onLearnMoreClick = {},
onChange = {},
)
}

View File

@@ -47,7 +47,7 @@ class LoginPasswordNode @AssistedInject constructor(
LoginPasswordView(
state = state,
modifier = modifier,
onBackPressed = ::navigateUp,
onBackClick = ::navigateUp,
onWaitListError = ::onWaitListError,
)
}

View File

@@ -80,7 +80,7 @@ import io.element.android.libraries.ui.strings.CommonStrings
@Composable
fun LoginPasswordView(
state: LoginPasswordState,
onBackPressed: () -> Unit,
onBackClick: () -> Unit,
onWaitListError: (LoginFormState) -> Unit,
modifier: Modifier = Modifier,
) {
@@ -103,7 +103,7 @@ fun LoginPasswordView(
topBar = {
TopAppBar(
title = {},
navigationIcon = { BackButton(onClick = onBackPressed) },
navigationIcon = { BackButton(onClick = onBackClick) },
)
}
) { padding ->
@@ -310,7 +310,7 @@ private fun LoginErrorDialog(error: Throwable, onDismiss: () -> Unit) {
internal fun LoginPasswordViewPreview(@PreviewParameter(LoginPasswordStateProvider::class) state: LoginPasswordState) = ElementPreview {
LoginPasswordView(
state = state,
onBackPressed = {},
onBackClick = {},
onWaitListError = {},
)
}

View File

@@ -50,9 +50,9 @@ class SearchAccountProviderNode @AssistedInject constructor(
SearchAccountProviderView(
state = state,
modifier = modifier,
onBackPressed = ::navigateUp,
onLearnMoreClicked = { openLearnMorePage(context) },
onDone = ::onDone,
onBackClick = ::navigateUp,
onLearnMoreClick = { openLearnMorePage(context) },
onSuccess = ::onDone,
)
}
}

View File

@@ -77,9 +77,9 @@ import io.element.android.libraries.ui.strings.CommonStrings
@Composable
fun SearchAccountProviderView(
state: SearchAccountProviderState,
onBackPressed: () -> Unit,
onLearnMoreClicked: () -> Unit,
onDone: () -> Unit,
onBackClick: () -> Unit,
onLearnMoreClick: () -> Unit,
onSuccess: () -> Unit,
modifier: Modifier = Modifier,
) {
val eventSink = state.eventSink
@@ -88,7 +88,7 @@ fun SearchAccountProviderView(
topBar = {
TopAppBar(
title = {},
navigationIcon = { BackButton(onClick = onBackPressed) }
navigationIcon = { BackButton(onClick = onBackClick) }
)
}
) { padding ->
@@ -188,8 +188,8 @@ fun SearchAccountProviderView(
}
ChangeServerView(
state = state.changeServerState,
onLearnMoreClicked = onLearnMoreClicked,
onDone = onDone,
onLearnMoreClick = onLearnMoreClick,
onSuccess = onSuccess,
)
}
}
@@ -214,8 +214,8 @@ private fun HomeserverData.toAccountProvider(): AccountProvider {
internal fun SearchAccountProviderViewPreview(@PreviewParameter(SearchAccountProviderStateProvider::class) state: SearchAccountProviderState) = ElementPreview {
SearchAccountProviderView(
state = state,
onBackPressed = {},
onLearnMoreClicked = {},
onDone = {},
onBackClick = {},
onLearnMoreClick = {},
onSuccess = {},
)
}

View File

@@ -42,11 +42,11 @@ class WaitListNode @AssistedInject constructor(
private val presenter = presenterFactory.create(inputs.loginFormState)
interface Callback : Plugin {
fun onCancelClicked()
fun onCancelClick()
}
private fun onCancelClicked() {
plugins<Callback>().forEach { it.onCancelClicked() }
private fun onCancelClick() {
plugins<Callback>().forEach { it.onCancelClick() }
}
@Composable
@@ -54,7 +54,7 @@ class WaitListNode @AssistedInject constructor(
val state = presenter.present()
WaitListView(
state = state,
onCancelClicked = ::onCancelClicked,
onCancelClick = ::onCancelClick,
modifier = modifier
)
}

View File

@@ -48,7 +48,7 @@ import io.element.android.libraries.ui.strings.CommonStrings
@Composable
fun WaitListView(
state: WaitListState,
onCancelClicked: () -> Unit,
onCancelClick: () -> Unit,
modifier: Modifier = Modifier,
) {
OnLifecycleEvent { _, event ->
@@ -57,7 +57,7 @@ fun WaitListView(
else -> Unit
}
}
WaitListContent(state, onCancelClicked, modifier)
WaitListContent(state, onCancelClick, modifier)
}
@Composable
@@ -81,7 +81,7 @@ private fun WaitListError(state: WaitListState) {
@Composable
private fun WaitListContent(
state: WaitListState,
onCancelClicked: () -> Unit,
onCancelClick: () -> Unit,
modifier: Modifier = Modifier,
) {
Box(
@@ -109,7 +109,7 @@ private fun WaitListContent(
title = title,
subtitle = subtitle,
) {
OverallContent(state, onCancelClicked)
OverallContent(state, onCancelClick)
}
WaitListError(state)
}
@@ -118,14 +118,14 @@ private fun WaitListContent(
@Composable
private fun OverallContent(
state: WaitListState,
onCancelClicked: () -> Unit,
onCancelClick: () -> Unit,
) {
Box(modifier = Modifier.fillMaxSize()) {
if (state.loginAction !is AsyncData.Success) {
CompositionLocalProvider(LocalContentColor provides ElementTheme.colors.textOnSolidPrimary) {
TextButton(
text = stringResource(CommonStrings.action_cancel),
onClick = onCancelClicked,
onClick = onCancelClick,
)
}
}
@@ -147,6 +147,6 @@ private fun OverallContent(
internal fun WaitListViewPreview(@PreviewParameter(WaitListStateProvider::class) state: WaitListState) = ElementPreview {
WaitListView(
state = state,
onCancelClicked = {},
onCancelClick = {},
)
}

View File

@@ -30,6 +30,6 @@ interface LogoutEntryPoint : FeatureEntryPoint {
}
interface Callback : Plugin {
fun onChangeRecoveryKeyClicked()
fun onChangeRecoveryKeyClick()
}
}

View File

@@ -38,8 +38,8 @@ class LogoutNode @AssistedInject constructor(
@Assisted plugins: List<Plugin>,
private val presenter: LogoutPresenter,
) : Node(buildContext, plugins = plugins) {
private fun onChangeRecoveryKeyClicked() {
plugins<LogoutEntryPoint.Callback>().forEach { it.onChangeRecoveryKeyClicked() }
private fun onChangeRecoveryKeyClick() {
plugins<LogoutEntryPoint.Callback>().forEach { it.onChangeRecoveryKeyClick() }
}
private fun onSuccessLogout(activity: Activity, url: String?) {
@@ -55,9 +55,9 @@ class LogoutNode @AssistedInject constructor(
val activity = LocalContext.current as Activity
LogoutView(
state = state,
onChangeRecoveryKeyClicked = ::onChangeRecoveryKeyClicked,
onChangeRecoveryKeyClick = ::onChangeRecoveryKeyClick,
onSuccessLogout = { onSuccessLogout(activity, it) },
onBackClicked = ::navigateUp,
onBackClick = ::navigateUp,
modifier = modifier,
)
}

View File

@@ -51,15 +51,15 @@ import io.element.android.libraries.ui.strings.CommonStrings
@Composable
fun LogoutView(
state: LogoutState,
onChangeRecoveryKeyClicked: () -> Unit,
onBackClicked: () -> Unit,
onChangeRecoveryKeyClick: () -> Unit,
onBackClick: () -> Unit,
onSuccessLogout: (logoutUrlResult: String?) -> Unit,
modifier: Modifier = Modifier,
) {
val eventSink = state.eventSink
FlowStepPage(
onBackClicked = onBackClicked,
onBackClick = onBackClick,
title = title(state),
subTitle = subtitle(state),
iconVector = CompoundIcons.KeySolid(),
@@ -68,8 +68,8 @@ fun LogoutView(
buttons = {
Buttons(
state = state,
onChangeRecoveryKeyClicked = onChangeRecoveryKeyClicked,
onLogoutClicked = {
onChangeRecoveryKeyClick = onChangeRecoveryKeyClick,
onLogoutClick = {
eventSink(LogoutEvents.Logout(ignoreSdkError = false))
}
)
@@ -78,10 +78,10 @@ fun LogoutView(
LogoutActionDialog(
state.logoutAction,
onConfirmClicked = {
onConfirmClick = {
eventSink(LogoutEvents.Logout(ignoreSdkError = false))
},
onForceLogoutClicked = {
onForceLogoutClick = {
eventSink(LogoutEvents.Logout(ignoreSdkError = true))
},
onDismissDialog = {
@@ -124,15 +124,15 @@ private fun subtitle(state: LogoutState): String? {
@Composable
private fun ColumnScope.Buttons(
state: LogoutState,
onLogoutClicked: () -> Unit,
onChangeRecoveryKeyClicked: () -> Unit,
onLogoutClick: () -> Unit,
onChangeRecoveryKeyClick: () -> Unit,
) {
val logoutAction = state.logoutAction
if (state.isLastDevice) {
OutlinedButton(
text = stringResource(id = CommonStrings.common_settings),
modifier = Modifier.fillMaxWidth(),
onClick = onChangeRecoveryKeyClicked,
onClick = onChangeRecoveryKeyClick,
)
}
val signOutSubmitRes = when {
@@ -147,7 +147,7 @@ private fun ColumnScope.Buttons(
modifier = Modifier
.fillMaxWidth()
.testTag(TestTags.signOut),
onClick = onLogoutClicked,
onClick = onLogoutClick,
)
}
@@ -183,8 +183,8 @@ internal fun LogoutViewPreview(
) = ElementPreview {
LogoutView(
state,
onChangeRecoveryKeyClicked = {},
onChangeRecoveryKeyClick = {},
onSuccessLogout = {},
onBackClicked = {},
onBackClick = {},
)
}

View File

@@ -39,10 +39,10 @@ class DefaultDirectLogoutView @Inject constructor() : DirectLogoutView {
val eventSink = state.eventSink
LogoutActionDialog(
state.logoutAction,
onConfirmClicked = {
onConfirmClick = {
eventSink(DirectLogoutEvents.Logout(ignoreSdkError = false))
},
onForceLogoutClicked = {
onForceLogoutClick = {
eventSink(DirectLogoutEvents.Logout(ignoreSdkError = true))
},
onDismissDialog = {

View File

@@ -30,8 +30,8 @@ import io.element.android.libraries.ui.strings.CommonStrings
@Composable
fun LogoutActionDialog(
state: AsyncAction<String?>,
onConfirmClicked: () -> Unit,
onForceLogoutClicked: () -> Unit,
onConfirmClick: () -> Unit,
onForceLogoutClick: () -> Unit,
onDismissDialog: () -> Unit,
onSuccessLogout: (String?) -> Unit,
) {
@@ -40,7 +40,7 @@ fun LogoutActionDialog(
Unit
AsyncAction.Confirming ->
LogoutConfirmationDialog(
onSubmitClicked = onConfirmClicked,
onSubmitClick = onConfirmClick,
onDismiss = onDismissDialog
)
is AsyncAction.Loading ->
@@ -50,7 +50,7 @@ fun LogoutActionDialog(
title = stringResource(id = CommonStrings.dialog_title_error),
content = stringResource(id = CommonStrings.error_unknown),
retryText = stringResource(id = CommonStrings.action_signout_anyway),
onRetry = onForceLogoutClicked,
onRetry = onForceLogoutClick,
onDismiss = onDismissDialog,
)
is AsyncAction.Success -> {

View File

@@ -24,14 +24,14 @@ import io.element.android.libraries.ui.strings.CommonStrings
@Composable
fun LogoutConfirmationDialog(
onSubmitClicked: () -> Unit,
onSubmitClick: () -> Unit,
onDismiss: () -> Unit,
) {
ConfirmationDialog(
title = stringResource(id = CommonStrings.action_signout),
content = stringResource(id = R.string.screen_signout_confirmation_dialog_content),
submitText = stringResource(id = CommonStrings.action_signout),
onSubmitClicked = onSubmitClicked,
onSubmitClick = onSubmitClick,
onDismiss = onDismiss,
)
}

View File

@@ -73,7 +73,7 @@ class LogoutViewTest {
aLogoutState(
eventSink = eventsRecorder
),
onBackClicked = callback,
onBackClick = callback,
)
rule.pressBack()
}
@@ -129,7 +129,7 @@ class LogoutViewTest {
isLastDevice = true,
eventSink = eventsRecorder
),
onChangeRecoveryKeyClicked = callback,
onChangeRecoveryKeyClick = callback,
)
rule.clickOn(CommonStrings.common_settings)
}
@@ -138,15 +138,15 @@ class LogoutViewTest {
private fun <R : TestRule> AndroidComposeTestRule<R, ComponentActivity>.setLogoutView(
state: LogoutState,
onChangeRecoveryKeyClicked: () -> Unit = EnsureNeverCalled(),
onBackClicked: () -> Unit = EnsureNeverCalled(),
onChangeRecoveryKeyClick: () -> Unit = EnsureNeverCalled(),
onBackClick: () -> Unit = EnsureNeverCalled(),
onSuccessLogout: (logoutUrlResult: String?) -> Unit = EnsureNeverCalledWithParam()
) {
setContent {
LogoutView(
state = state,
onChangeRecoveryKeyClicked = onChangeRecoveryKeyClicked,
onBackClicked = onBackClicked,
onChangeRecoveryKeyClick = onChangeRecoveryKeyClick,
onBackClick = onBackClick,
onSuccessLogout = onSuccessLogout,
)
}

View File

@@ -39,9 +39,9 @@ interface MessagesEntryPoint : FeatureEntryPoint {
)
interface Callback : Plugin {
fun onRoomDetailsClicked()
fun onUserDataClicked(userId: UserId)
fun onPermalinkClicked(data: PermalinkData)
fun onRoomDetailsClick()
fun onUserDataClick(userId: UserId)
fun onPermalinkClick(data: PermalinkData)
fun onForwardedToSingleRoom(roomId: RoomId)
}
}

View File

@@ -139,31 +139,31 @@ class MessagesFlowNode @AssistedInject constructor(
return when (navTarget) {
is NavTarget.Messages -> {
val callback = object : MessagesNode.Callback {
override fun onRoomDetailsClicked() {
callback?.onRoomDetailsClicked()
override fun onRoomDetailsClick() {
callback?.onRoomDetailsClick()
}
override fun onEventClicked(event: TimelineItem.Event): Boolean {
return processEventClicked(event)
override fun onEventClick(event: TimelineItem.Event): Boolean {
return processEventClick(event)
}
override fun onPreviewAttachments(attachments: ImmutableList<Attachment>) {
backstack.push(NavTarget.AttachmentPreview(attachments.first()))
}
override fun onUserDataClicked(userId: UserId) {
callback?.onUserDataClicked(userId)
override fun onUserDataClick(userId: UserId) {
callback?.onUserDataClick(userId)
}
override fun onPermalinkClicked(data: PermalinkData) {
callback?.onPermalinkClicked(data)
override fun onPermalinkClick(data: PermalinkData) {
callback?.onPermalinkClick(data)
}
override fun onShowEventDebugInfoClicked(eventId: EventId?, debugInfo: TimelineItemDebugInfo) {
override fun onShowEventDebugInfoClick(eventId: EventId?, debugInfo: TimelineItemDebugInfo) {
backstack.push(NavTarget.EventDebugInfo(eventId, debugInfo))
}
override fun onForwardEventClicked(eventId: EventId) {
override fun onForwardEventClick(eventId: EventId) {
backstack.push(NavTarget.ForwardEvent(eventId))
}
@@ -171,19 +171,19 @@ class MessagesFlowNode @AssistedInject constructor(
backstack.push(NavTarget.ReportMessage(eventId, senderId))
}
override fun onSendLocationClicked() {
override fun onSendLocationClick() {
backstack.push(NavTarget.SendLocation)
}
override fun onCreatePollClicked() {
override fun onCreatePollClick() {
backstack.push(NavTarget.CreatePoll)
}
override fun onEditPollClicked(eventId: EventId) {
override fun onEditPollClick(eventId: EventId) {
backstack.push(NavTarget.EditPoll(eventId))
}
override fun onJoinCallClicked(roomId: RoomId) {
override fun onJoinCallClick(roomId: RoomId) {
val inputs = CallType.RoomCall(
sessionId = matrixClient.sessionId,
roomId = roomId,
@@ -250,7 +250,7 @@ class MessagesFlowNode @AssistedInject constructor(
}
}
private fun processEventClicked(event: TimelineItem.Event): Boolean {
private fun processEventClick(event: TimelineItem.Event): Boolean {
return when (event.content) {
is TimelineItemImageContent -> {
val navTarget = NavTarget.MediaViewer(

View File

@@ -21,8 +21,8 @@ import io.element.android.libraries.matrix.api.core.UserId
import io.element.android.libraries.matrix.api.timeline.item.TimelineItemDebugInfo
interface MessagesNavigator {
fun onShowEventDebugInfoClicked(eventId: EventId?, debugInfo: TimelineItemDebugInfo)
fun onForwardEventClicked(eventId: EventId)
fun onReportContentClicked(eventId: EventId, senderId: UserId)
fun onEditPollClicked(eventId: EventId)
fun onShowEventDebugInfoClick(eventId: EventId?, debugInfo: TimelineItemDebugInfo)
fun onForwardEventClick(eventId: EventId)
fun onReportContentClick(eventId: EventId, senderId: UserId)
fun onEditPollClick(eventId: EventId)
}

View File

@@ -82,18 +82,18 @@ class MessagesNode @AssistedInject constructor(
private val inputs = inputs<Inputs>()
interface Callback : Plugin {
fun onRoomDetailsClicked()
fun onEventClicked(event: TimelineItem.Event): Boolean
fun onRoomDetailsClick()
fun onEventClick(event: TimelineItem.Event): Boolean
fun onPreviewAttachments(attachments: ImmutableList<Attachment>)
fun onUserDataClicked(userId: UserId)
fun onPermalinkClicked(data: PermalinkData)
fun onShowEventDebugInfoClicked(eventId: EventId?, debugInfo: TimelineItemDebugInfo)
fun onForwardEventClicked(eventId: EventId)
fun onUserDataClick(userId: UserId)
fun onPermalinkClick(data: PermalinkData)
fun onShowEventDebugInfoClick(eventId: EventId?, debugInfo: TimelineItemDebugInfo)
fun onForwardEventClick(eventId: EventId)
fun onReportMessage(eventId: EventId, senderId: UserId)
fun onSendLocationClicked()
fun onCreatePollClicked()
fun onEditPollClicked(eventId: EventId)
fun onJoinCallClicked(roomId: RoomId)
fun onSendLocationClick()
fun onCreatePollClick()
fun onEditPollClick(eventId: EventId)
fun onJoinCallClick(roomId: RoomId)
}
override fun onBuilt() {
@@ -109,23 +109,23 @@ class MessagesNode @AssistedInject constructor(
)
}
private fun onRoomDetailsClicked() {
callback?.onRoomDetailsClicked()
private fun onRoomDetailsClick() {
callback?.onRoomDetailsClick()
}
private fun onEventClicked(event: TimelineItem.Event): Boolean {
return callback?.onEventClicked(event).orFalse()
private fun onEventClick(event: TimelineItem.Event): Boolean {
return callback?.onEventClick(event).orFalse()
}
private fun onPreviewAttachments(attachments: ImmutableList<Attachment>) {
callback?.onPreviewAttachments(attachments)
}
private fun onUserDataClicked(userId: UserId) {
callback?.onUserDataClicked(userId)
private fun onUserDataClick(userId: UserId) {
callback?.onUserDataClick(userId)
}
private fun onLinkClicked(
private fun onLinkClick(
context: Context,
url: String,
eventSink: (TimelineEvents) -> Unit,
@@ -134,10 +134,10 @@ class MessagesNode @AssistedInject constructor(
is PermalinkData.UserLink -> {
// Open the room member profile, it will fallback to
// the user profile if the user is not in the room
callback?.onUserDataClicked(permalink.userId)
callback?.onUserDataClick(permalink.userId)
}
is PermalinkData.RoomLink -> {
handleRoomLinkClicked(permalink, eventSink)
handleRoomLinkClick(permalink, eventSink)
}
is PermalinkData.FallbackLink,
is PermalinkData.RoomEmailInviteLink -> {
@@ -146,7 +146,7 @@ class MessagesNode @AssistedInject constructor(
}
}
private fun handleRoomLinkClicked(roomLink: PermalinkData.RoomLink, eventSink: (TimelineEvents) -> Unit) {
private fun handleRoomLinkClick(roomLink: PermalinkData.RoomLink, eventSink: (TimelineEvents) -> Unit) {
if (room.matches(roomLink.roomIdOrAlias)) {
val eventId = roomLink.eventId
if (eventId != null) {
@@ -156,36 +156,36 @@ class MessagesNode @AssistedInject constructor(
context.toast("Already viewing this room!")
}
} else {
callback?.onPermalinkClicked(roomLink)
callback?.onPermalinkClick(roomLink)
}
}
override fun onShowEventDebugInfoClicked(eventId: EventId?, debugInfo: TimelineItemDebugInfo) {
callback?.onShowEventDebugInfoClicked(eventId, debugInfo)
override fun onShowEventDebugInfoClick(eventId: EventId?, debugInfo: TimelineItemDebugInfo) {
callback?.onShowEventDebugInfoClick(eventId, debugInfo)
}
override fun onForwardEventClicked(eventId: EventId) {
callback?.onForwardEventClicked(eventId)
override fun onForwardEventClick(eventId: EventId) {
callback?.onForwardEventClick(eventId)
}
override fun onReportContentClicked(eventId: EventId, senderId: UserId) {
override fun onReportContentClick(eventId: EventId, senderId: UserId) {
callback?.onReportMessage(eventId, senderId)
}
override fun onEditPollClicked(eventId: EventId) {
callback?.onEditPollClicked(eventId)
override fun onEditPollClick(eventId: EventId) {
callback?.onEditPollClick(eventId)
}
private fun onSendLocationClicked() {
callback?.onSendLocationClicked()
private fun onSendLocationClick() {
callback?.onSendLocationClick()
}
private fun onCreatePollClicked() {
callback?.onCreatePollClicked()
private fun onCreatePollClick() {
callback?.onCreatePollClick()
}
private fun onJoinCallClicked() {
callback?.onJoinCallClicked(room.roomId)
private fun onJoinCallClick() {
callback?.onJoinCallClick(room.roomId)
}
@Composable
@@ -197,15 +197,15 @@ class MessagesNode @AssistedInject constructor(
val state = presenter.present()
MessagesView(
state = state,
onBackPressed = this::navigateUp,
onRoomDetailsClicked = this::onRoomDetailsClicked,
onEventClicked = this::onEventClicked,
onBackClick = this::navigateUp,
onRoomDetailsClick = this::onRoomDetailsClick,
onEventClick = this::onEventClick,
onPreviewAttachments = this::onPreviewAttachments,
onUserDataClicked = this::onUserDataClicked,
onLinkClicked = { onLinkClicked(context, it, state.timelineState.eventSink) },
onSendLocationClicked = this::onSendLocationClicked,
onCreatePollClicked = this::onCreatePollClicked,
onJoinCallClicked = this::onJoinCallClicked,
onUserDataClick = this::onUserDataClick,
onLinkClick = { onLinkClick(context, it, state.timelineState.eventSink) },
onSendLocationClick = this::onSendLocationClick,
onCreatePollClick = this::onCreatePollClick,
onJoinCallClick = this::onJoinCallClick,
modifier = modifier,
)

View File

@@ -324,7 +324,7 @@ class MessagesPresenter @AssistedInject constructor(
when (targetEvent.content) {
is TimelineItemPollContent -> {
if (targetEvent.eventId == null) return
navigator.onEditPollClicked(targetEvent.eventId)
navigator.onEditPollClick(targetEvent.eventId)
}
else -> {
val composerMode = MessageComposerMode.Edit(
@@ -407,17 +407,17 @@ class MessagesPresenter @AssistedInject constructor(
}
private fun handleShowDebugInfoAction(event: TimelineItem.Event) {
navigator.onShowEventDebugInfoClicked(event.eventId, event.debugInfo)
navigator.onShowEventDebugInfoClick(event.eventId, event.debugInfo)
}
private fun handleForwardAction(event: TimelineItem.Event) {
if (event.eventId == null) return
navigator.onForwardEventClicked(event.eventId)
navigator.onForwardEventClick(event.eventId)
}
private fun handleReportAction(event: TimelineItem.Event) {
if (event.eventId == null) return
navigator.onReportContentClicked(event.eventId, event.senderId)
navigator.onReportContentClick(event.eventId, event.senderId)
}
private fun handleEndPollAction(

View File

@@ -115,15 +115,15 @@ import androidx.compose.material3.Button as Material3Button
@Composable
fun MessagesView(
state: MessagesState,
onBackPressed: () -> Unit,
onRoomDetailsClicked: () -> Unit,
onEventClicked: (event: TimelineItem.Event) -> Boolean,
onUserDataClicked: (UserId) -> Unit,
onLinkClicked: (String) -> Unit,
onBackClick: () -> Unit,
onRoomDetailsClick: () -> Unit,
onEventClick: (event: TimelineItem.Event) -> Boolean,
onUserDataClick: (UserId) -> Unit,
onLinkClick: (String) -> Unit,
onPreviewAttachments: (ImmutableList<Attachment>) -> Unit,
onSendLocationClicked: () -> Unit,
onCreatePollClicked: () -> Unit,
onJoinCallClicked: () -> Unit,
onSendLocationClick: () -> Unit,
onCreatePollClick: () -> Unit,
onJoinCallClick: () -> Unit,
modifier: Modifier = Modifier,
forceJumpToBottomVisibility: Boolean = false
) {
@@ -144,15 +144,15 @@ fun MessagesView(
// This is needed because the composer is inside an AndroidView that can't be affected by the FocusManager in Compose
val localView = LocalView.current
fun onMessageClicked(event: TimelineItem.Event) {
Timber.v("OnMessageClicked= ${event.id}")
val hideKeyboard = onEventClicked(event)
fun onMessageClick(event: TimelineItem.Event) {
Timber.v("onMessageClick= ${event.id}")
val hideKeyboard = onEventClick(event)
if (hideKeyboard) {
localView.hideKeyboard()
}
}
fun onMessageLongClicked(event: TimelineItem.Event) {
fun onMessageLongClick(event: TimelineItem.Event) {
Timber.v("OnMessageLongClicked= ${event.id}")
localView.hideKeyboard()
state.actionListState.eventSink(
@@ -170,17 +170,17 @@ fun MessagesView(
state.eventSink(MessagesEvents.HandleAction(action, event))
}
fun onEmojiReactionClicked(emoji: String, event: TimelineItem.Event) {
fun onEmojiReactionClick(emoji: String, event: TimelineItem.Event) {
if (event.eventId == null) return
state.eventSink(MessagesEvents.ToggleReaction(emoji, event.eventId))
}
fun onEmojiReactionLongClicked(emoji: String, event: TimelineItem.Event) {
fun onEmojiReactionLongClick(emoji: String, event: TimelineItem.Event) {
if (event.eventId == null) return
state.reactionSummaryState.eventSink(ReactionSummaryEvents.ShowReactionSummary(event.eventId, event.reactionsState.reactions, emoji))
}
fun onMoreReactionsClicked(event: TimelineItem.Event) {
fun onMoreReactionsClick(event: TimelineItem.Event) {
state.customReactionState.eventSink(CustomReactionEvents.ShowCustomReactionSheet(event))
}
@@ -194,14 +194,14 @@ fun MessagesView(
roomName = state.roomName.dataOrNull(),
roomAvatar = state.roomAvatar.dataOrNull(),
callState = state.callState,
onBackPressed = {
onBackClick = {
// Since the textfield is now based on an Android view, this is no longer done automatically.
// We need to hide the keyboard when navigating out of this screen.
localView.hideKeyboard()
onBackPressed()
onBackClick()
},
onRoomDetailsClicked = onRoomDetailsClicked,
onJoinCallClicked = onJoinCallClicked,
onRoomDetailsClick = onRoomDetailsClick,
onJoinCallClick = onJoinCallClick,
)
}
},
@@ -211,23 +211,23 @@ fun MessagesView(
modifier = Modifier
.padding(padding)
.consumeWindowInsets(padding),
onMessageClicked = ::onMessageClicked,
onMessageLongClicked = ::onMessageLongClicked,
onUserDataClicked = onUserDataClicked,
onLinkClicked = onLinkClicked,
onTimestampClicked = { event ->
onMessageClick = ::onMessageClick,
onMessageLongClick = ::onMessageLongClick,
onUserDataClick = onUserDataClick,
onLinkClick = onLinkClick,
onTimestampClick = { event ->
if (event.localSendState is LocalEventSendState.SendingFailed) {
state.retrySendMenuState.eventSink(RetrySendMenuEvents.EventSelected(event))
}
},
onReactionClicked = ::onEmojiReactionClicked,
onReactionLongClicked = ::onEmojiReactionLongClicked,
onMoreReactionsClicked = ::onMoreReactionsClicked,
onReactionClick = ::onEmojiReactionClick,
onReactionLongClick = ::onEmojiReactionLongClick,
onMoreReactionsClick = ::onMoreReactionsClick,
onReadReceiptClick = { event ->
state.readReceiptBottomSheetState.eventSink(ReadReceiptBottomSheetEvents.EventSelected(event))
},
onSendLocationClicked = onSendLocationClicked,
onCreatePollClicked = onCreatePollClicked,
onSendLocationClick = onSendLocationClick,
onCreatePollClick = onCreatePollClick,
onSwipeToReply = { targetEvent ->
state.eventSink(MessagesEvents.HandleAction(TimelineItemAction.Reply, targetEvent))
},
@@ -244,17 +244,17 @@ fun MessagesView(
ActionListView(
state = state.actionListState,
onActionSelected = ::onActionSelected,
onCustomReactionClicked = { event ->
onSelectAction = ::onActionSelected,
onCustomReactionClick = { event ->
if (event.eventId == null) return@ActionListView
state.customReactionState.eventSink(CustomReactionEvents.ShowCustomReactionSheet(event))
},
onEmojiReactionClicked = ::onEmojiReactionClicked,
onEmojiReactionClick = ::onEmojiReactionClick,
)
CustomReactionBottomSheet(
state = state.customReactionState,
onEmojiSelected = { eventId, emoji ->
onSelectEmoji = { eventId, emoji ->
state.eventSink(MessagesEvents.ToggleReaction(emoji.unicode, eventId))
}
)
@@ -263,7 +263,7 @@ fun MessagesView(
RetrySendMessageMenu(state = state.retrySendMenuState)
ReadReceiptBottomSheet(
state = state.readReceiptBottomSheetState,
onUserDataClicked = onUserDataClicked,
onUserDataClick = onUserDataClick,
)
ReinviteDialog(state = state)
}
@@ -276,7 +276,7 @@ private fun ReinviteDialog(state: MessagesState) {
content = stringResource(id = R.string.screen_room_invite_again_alert_message),
cancelText = stringResource(id = CommonStrings.action_cancel),
submitText = stringResource(id = CommonStrings.action_invite),
onSubmitClicked = { state.eventSink(MessagesEvents.InviteDialogDismissed(InviteDialogAction.Invite)) },
onSubmitClick = { state.eventSink(MessagesEvents.InviteDialogDismissed(InviteDialogAction.Invite)) },
onDismiss = { state.eventSink(MessagesEvents.InviteDialogDismissed(InviteDialogAction.Cancel)) }
)
}
@@ -313,17 +313,17 @@ private fun AttachmentStateView(
@Composable
private fun MessagesViewContent(
state: MessagesState,
onMessageClicked: (TimelineItem.Event) -> Unit,
onUserDataClicked: (UserId) -> Unit,
onLinkClicked: (String) -> Unit,
onReactionClicked: (key: String, TimelineItem.Event) -> Unit,
onReactionLongClicked: (key: String, TimelineItem.Event) -> Unit,
onMoreReactionsClicked: (TimelineItem.Event) -> Unit,
onMessageClick: (TimelineItem.Event) -> Unit,
onUserDataClick: (UserId) -> Unit,
onLinkClick: (String) -> Unit,
onReactionClick: (key: String, TimelineItem.Event) -> Unit,
onReactionLongClick: (key: String, TimelineItem.Event) -> Unit,
onMoreReactionsClick: (TimelineItem.Event) -> Unit,
onReadReceiptClick: (TimelineItem.Event) -> Unit,
onMessageLongClicked: (TimelineItem.Event) -> Unit,
onTimestampClicked: (TimelineItem.Event) -> Unit,
onSendLocationClicked: () -> Unit,
onCreatePollClicked: () -> Unit,
onMessageLongClick: (TimelineItem.Event) -> Unit,
onTimestampClick: (TimelineItem.Event) -> Unit,
onSendLocationClick: () -> Unit,
onCreatePollClick: () -> Unit,
forceJumpToBottomVisibility: Boolean,
modifier: Modifier = Modifier,
onSwipeToReply: (TimelineItem.Event) -> Unit,
@@ -336,8 +336,8 @@ private fun MessagesViewContent(
) {
AttachmentsBottomSheet(
state = state.composerState,
onSendLocationClicked = onSendLocationClicked,
onCreatePollClicked = onCreatePollClicked,
onSendLocationClick = onSendLocationClick,
onCreatePollClick = onCreatePollClick,
enableTextFormatting = state.enableTextFormatting,
)
@@ -384,15 +384,15 @@ private fun MessagesViewContent(
TimelineView(
state = state.timelineState,
typingNotificationState = state.typingNotificationState,
onUserDataClicked = onUserDataClicked,
onLinkClicked = onLinkClicked,
onMessageClicked = onMessageClicked,
onMessageLongClicked = onMessageLongClicked,
onTimestampClicked = onTimestampClicked,
onUserDataClick = onUserDataClick,
onLinkClick = onLinkClick,
onMessageClick = onMessageClick,
onMessageLongClick = onMessageLongClick,
onTimestampClick = onTimestampClick,
onSwipeToReply = onSwipeToReply,
onReactionClicked = onReactionClicked,
onReactionLongClicked = onReactionLongClicked,
onMoreReactionsClicked = onMoreReactionsClicked,
onReactionClick = onReactionClick,
onReactionLongClick = onReactionLongClick,
onMoreReactionsClick = onMoreReactionsClick,
onReadReceiptClick = onReadReceiptClick,
modifier = Modifier.padding(paddingValues),
forceJumpToBottomVisibility = forceJumpToBottomVisibility,
@@ -431,7 +431,7 @@ private fun MessagesViewComposerBottomSheetContents(
roomName = state.roomName.dataOrNull(),
roomAvatarData = state.roomAvatar.dataOrNull(),
memberSuggestions = state.composerState.memberSuggestions,
onSuggestionSelected = {
onSelectSuggestion = {
state.composerState.eventSink(MessageComposerEvents.InsertMention(it))
}
)
@@ -454,16 +454,16 @@ private fun MessagesViewTopBar(
roomName: String?,
roomAvatar: AvatarData?,
callState: RoomCallState,
onRoomDetailsClicked: () -> Unit,
onJoinCallClicked: () -> Unit,
onBackPressed: () -> Unit,
onRoomDetailsClick: () -> Unit,
onJoinCallClick: () -> Unit,
onBackClick: () -> Unit,
) {
TopAppBar(
navigationIcon = {
BackButton(onClick = onBackPressed)
BackButton(onClick = onBackClick)
},
title = {
val titleModifier = Modifier.clickable { onRoomDetailsClicked() }
val titleModifier = Modifier.clickable { onRoomDetailsClick() }
if (roomName != null && roomAvatar != null) {
RoomAvatarAndNameRow(
roomName = roomName,
@@ -479,9 +479,9 @@ private fun MessagesViewTopBar(
},
actions = {
if (callState == RoomCallState.ONGOING) {
JoinCallMenuItem(onJoinCallClicked = onJoinCallClicked)
JoinCallMenuItem(onJoinCallClick = onJoinCallClick)
} else {
IconButton(onClick = onJoinCallClicked, enabled = callState != RoomCallState.DISABLED) {
IconButton(onClick = onJoinCallClick, enabled = callState != RoomCallState.DISABLED) {
Icon(
imageVector = CompoundIcons.VideoCallSolid(),
contentDescription = stringResource(CommonStrings.a11y_start_call),
@@ -496,10 +496,10 @@ private fun MessagesViewTopBar(
@Composable
private fun JoinCallMenuItem(
onJoinCallClicked: () -> Unit,
onJoinCallClick: () -> Unit,
) {
Material3Button(
onClick = onJoinCallClicked,
onClick = onJoinCallClick,
colors = ButtonDefaults.buttonColors(
contentColor = ElementTheme.colors.bgCanvasDefault,
containerColor = ElementTheme.colors.iconAccentTertiary
@@ -567,15 +567,15 @@ private fun CantSendMessageBanner() {
internal fun MessagesViewPreview(@PreviewParameter(MessagesStateProvider::class) state: MessagesState) = ElementPreview {
MessagesView(
state = state,
onBackPressed = {},
onRoomDetailsClicked = {},
onEventClicked = { false },
onBackClick = {},
onRoomDetailsClick = {},
onEventClick = { false },
onPreviewAttachments = {},
onUserDataClicked = {},
onLinkClicked = {},
onSendLocationClicked = {},
onCreatePollClicked = {},
onJoinCallClicked = {},
onUserDataClick = {},
onLinkClick = {},
onSendLocationClick = {},
onCreatePollClick = {},
onJoinCallClick = {},
forceJumpToBottomVisibility = true,
)
}

View File

@@ -94,38 +94,38 @@ import kotlinx.collections.immutable.ImmutableList
@Composable
fun ActionListView(
state: ActionListState,
onActionSelected: (action: TimelineItemAction, TimelineItem.Event) -> Unit,
onEmojiReactionClicked: (String, TimelineItem.Event) -> Unit,
onCustomReactionClicked: (TimelineItem.Event) -> Unit,
onSelectAction: (action: TimelineItemAction, TimelineItem.Event) -> Unit,
onEmojiReactionClick: (String, TimelineItem.Event) -> Unit,
onCustomReactionClick: (TimelineItem.Event) -> Unit,
modifier: Modifier = Modifier,
) {
val sheetState = rememberModalBottomSheetState()
val coroutineScope = rememberCoroutineScope()
val targetItem = (state.target as? ActionListState.Target.Success)?.event
fun onItemActionClicked(
fun onItemActionClick(
itemAction: TimelineItemAction
) {
if (targetItem == null) return
sheetState.hide(coroutineScope) {
state.eventSink(ActionListEvents.Clear)
onActionSelected(itemAction, targetItem)
onSelectAction(itemAction, targetItem)
}
}
fun onEmojiReactionClicked(emoji: String) {
fun onEmojiReactionClick(emoji: String) {
if (targetItem == null) return
sheetState.hide(coroutineScope) {
state.eventSink(ActionListEvents.Clear)
onEmojiReactionClicked(emoji, targetItem)
onEmojiReactionClick(emoji, targetItem)
}
}
fun onCustomReactionClicked() {
fun onCustomReactionClick() {
if (targetItem == null) return
sheetState.hide(coroutineScope) {
state.eventSink(ActionListEvents.Clear)
onCustomReactionClicked(targetItem)
onCustomReactionClick(targetItem)
}
}
@@ -141,9 +141,9 @@ fun ActionListView(
) {
SheetContent(
state = state,
onActionClicked = ::onItemActionClicked,
onEmojiReactionClicked = ::onEmojiReactionClicked,
onCustomReactionClicked = ::onCustomReactionClicked,
onActionClick = ::onItemActionClick,
onEmojiReactionClick = ::onEmojiReactionClick,
onCustomReactionClick = ::onCustomReactionClick,
modifier = Modifier
.navigationBarsPadding()
.imePadding()
@@ -155,9 +155,9 @@ fun ActionListView(
@Composable
private fun SheetContent(
state: ActionListState,
onActionClicked: (TimelineItemAction) -> Unit,
onEmojiReactionClicked: (String) -> Unit,
onCustomReactionClicked: () -> Unit,
onActionClick: (TimelineItemAction) -> Unit,
onEmojiReactionClick: (String) -> Unit,
onCustomReactionClick: () -> Unit,
modifier: Modifier = Modifier,
) {
when (val target = state.target) {
@@ -188,8 +188,8 @@ private fun SheetContent(
item {
EmojiReactionsRow(
highlightedEmojis = target.event.reactionsState.highlightedKeys,
onEmojiReactionClicked = onEmojiReactionClicked,
onCustomReactionClicked = onCustomReactionClicked,
onEmojiReactionClick = onEmojiReactionClick,
onCustomReactionClick = onCustomReactionClick,
modifier = Modifier.fillMaxWidth(),
)
HorizontalDivider()
@@ -200,7 +200,7 @@ private fun SheetContent(
) { action ->
ListItem(
modifier = Modifier.clickable {
onActionClicked(action)
onActionClick(action)
},
headlineContent = {
Text(text = stringResource(id = action.titleRes))
@@ -292,8 +292,8 @@ private val emojiRippleRadius = 24.dp
@Composable
private fun EmojiReactionsRow(
highlightedEmojis: ImmutableList<String>,
onEmojiReactionClicked: (String) -> Unit,
onCustomReactionClicked: () -> Unit,
onEmojiReactionClick: (String) -> Unit,
onCustomReactionClick: () -> Unit,
modifier: Modifier = Modifier,
) {
Row(
@@ -310,7 +310,7 @@ private fun EmojiReactionsRow(
)
for (emoji in defaultEmojis) {
val isHighlighted = highlightedEmojis.contains(emoji)
EmojiButton(emoji, isHighlighted, onEmojiReactionClicked)
EmojiButton(emoji, isHighlighted, onEmojiReactionClick)
}
Box(
modifier = Modifier
@@ -325,7 +325,7 @@ private fun EmojiReactionsRow(
.size(24.dp)
.clickable(
enabled = true,
onClick = onCustomReactionClicked,
onClick = onCustomReactionClick,
indication = rememberRipple(bounded = false, radius = emojiRippleRadius),
interactionSource = remember { MutableInteractionSource() }
)
@@ -338,7 +338,7 @@ private fun EmojiReactionsRow(
private fun EmojiButton(
emoji: String,
isHighlighted: Boolean,
onClicked: (String) -> Unit,
onClick: (String) -> Unit,
) {
val backgroundColor = if (isHighlighted) {
ElementTheme.colors.bgActionPrimaryRest
@@ -365,7 +365,7 @@ private fun EmojiButton(
modifier = Modifier
.clickable(
enabled = true,
onClick = { onClicked(emoji) },
onClick = { onClick(emoji) },
indication = rememberRipple(bounded = false, radius = emojiRippleRadius),
interactionSource = remember { MutableInteractionSource() }
)
@@ -380,8 +380,8 @@ internal fun SheetContentPreview(
) = ElementPreview {
SheetContent(
state = state,
onActionClicked = {},
onEmojiReactionClicked = {},
onCustomReactionClicked = {},
onActionClick = {},
onEmojiReactionClick = {},
onCustomReactionClick = {},
)
}

View File

@@ -73,22 +73,22 @@ fun AttachmentsPreviewView(
Scaffold(modifier) {
AttachmentPreviewContent(
attachment = state.attachment,
onSendClicked = ::postSendAttachment,
onSendClick = ::postSendAttachment,
onDismiss = onDismiss
)
}
AttachmentSendStateView(
sendActionState = state.sendActionState,
onDismissClicked = ::postClearSendState,
onRetryClicked = ::postSendAttachment
onDismissClick = ::postClearSendState,
onRetryClick = ::postSendAttachment
)
}
@Composable
private fun AttachmentSendStateView(
sendActionState: SendActionState,
onDismissClicked: () -> Unit,
onRetryClicked: () -> Unit
onDismissClick: () -> Unit,
onRetryClick: () -> Unit
) {
when (sendActionState) {
is SendActionState.Sending -> {
@@ -99,14 +99,14 @@ private fun AttachmentSendStateView(
},
text = stringResource(id = CommonStrings.common_sending),
isCancellable = true,
onDismissRequest = onDismissClicked,
onDismissRequest = onDismissClick,
)
}
is SendActionState.Failure -> {
RetryDialog(
content = stringResource(sendAttachmentError(sendActionState.error)),
onDismiss = onDismissClicked,
onRetry = onRetryClicked
onDismiss = onDismissClick,
onRetry = onRetryClick
)
}
else -> Unit
@@ -116,7 +116,7 @@ private fun AttachmentSendStateView(
@Composable
private fun AttachmentPreviewContent(
attachment: Attachment,
onSendClicked: () -> Unit,
onSendClick: () -> Unit,
onDismiss: () -> Unit,
) {
Box(
@@ -146,8 +146,8 @@ private fun AttachmentPreviewContent(
}
}
AttachmentsPreviewBottomActions(
onCancelClicked = onDismiss,
onSendClicked = onSendClicked,
onCancelClick = onDismiss,
onSendClick = onSendClick,
modifier = Modifier
.fillMaxWidth()
.background(Color.Black.copy(alpha = 0.7f))
@@ -159,13 +159,13 @@ private fun AttachmentPreviewContent(
@Composable
private fun AttachmentsPreviewBottomActions(
onCancelClicked: () -> Unit,
onSendClicked: () -> Unit,
onCancelClick: () -> Unit,
onSendClick: () -> Unit,
modifier: Modifier = Modifier
) {
ButtonRowMolecule(modifier = modifier) {
TextButton(stringResource(id = CommonStrings.action_cancel), onClick = onCancelClicked)
TextButton(stringResource(id = CommonStrings.action_send), onClick = onSendClicked)
TextButton(stringResource(id = CommonStrings.action_cancel), onClick = onCancelClick)
TextButton(stringResource(id = CommonStrings.action_send), onClick = onSendClick)
}
}

View File

@@ -94,12 +94,12 @@ class ForwardMessagesNode @AssistedInject constructor(
val state = presenter.present()
ForwardMessagesView(
state = state,
onForwardingSucceeded = ::onSucceeded,
onForwardSuccess = ::onForwardSuccess,
)
}
}
private fun onSucceeded(roomIds: ImmutableList<RoomId>) {
private fun onForwardSuccess(roomIds: ImmutableList<RoomId>) {
navigateUp()
if (roomIds.size == 1) {
val targetRoomId = roomIds.first()

View File

@@ -30,11 +30,11 @@ import kotlinx.collections.immutable.ImmutableList
@Composable
fun ForwardMessagesView(
state: ForwardMessagesState,
onForwardingSucceeded: (ImmutableList<RoomId>) -> Unit,
onForwardSuccess: (ImmutableList<RoomId>) -> Unit,
modifier: Modifier = Modifier,
) {
if (state.forwardingSucceeded != null) {
onForwardingSucceeded(state.forwardingSucceeded)
onForwardSuccess(state.forwardingSucceeded)
return
}
@@ -64,6 +64,6 @@ private fun ForwardingErrorDialog(onDismiss: () -> Unit, modifier: Modifier = Mo
internal fun ForwardMessagesViewPreview(@PreviewParameter(ForwardMessagesStateProvider::class) state: ForwardMessagesState) = ElementPreview {
ForwardMessagesView(
state = state,
onForwardingSucceeded = {}
onForwardSuccess = {}
)
}

View File

@@ -53,7 +53,7 @@ fun MentionSuggestionsPickerView(
roomName: String?,
roomAvatarData: AvatarData?,
memberSuggestions: ImmutableList<ResolvedMentionSuggestion>,
onSuggestionSelected: (ResolvedMentionSuggestion) -> Unit,
onSelectSuggestion: (ResolvedMentionSuggestion) -> Unit,
modifier: Modifier = Modifier,
) {
LazyColumn(
@@ -74,7 +74,7 @@ fun MentionSuggestionsPickerView(
roomId = roomId.value,
roomName = roomName,
roomAvatar = roomAvatarData,
onSuggestionSelected = onSuggestionSelected,
onSelectSuggestion = onSelectSuggestion,
modifier = Modifier.fillMaxWidth()
)
HorizontalDivider(modifier = Modifier.fillMaxWidth())
@@ -89,10 +89,10 @@ private fun RoomMemberSuggestionItemView(
roomId: String,
roomName: String?,
roomAvatar: AvatarData?,
onSuggestionSelected: (ResolvedMentionSuggestion) -> Unit,
onSelectSuggestion: (ResolvedMentionSuggestion) -> Unit,
modifier: Modifier = Modifier,
) {
Row(modifier = modifier.clickable { onSuggestionSelected(memberSuggestion) }, horizontalArrangement = Arrangement.spacedBy(16.dp)) {
Row(modifier = modifier.clickable { onSelectSuggestion(memberSuggestion) }, horizontalArrangement = Arrangement.spacedBy(16.dp)) {
val avatarSize = AvatarSize.TimelineRoom
val avatarData = when (memberSuggestion) {
is ResolvedMentionSuggestion.AtRoom -> roomAvatar?.copy(size = avatarSize) ?: AvatarData(roomId, roomName, null, avatarSize)
@@ -164,7 +164,7 @@ internal fun MentionSuggestionsPickerViewPreview() {
ResolvedMentionSuggestion.Member(roomMember),
ResolvedMentionSuggestion.Member(roomMember.copy(userId = UserId("@bob:server.org"), displayName = "Bob")),
),
onSuggestionSelected = {}
onSelectSuggestion = {}
)
}
}

View File

@@ -48,8 +48,8 @@ import io.element.android.libraries.designsystem.theme.components.Text
@Composable
internal fun AttachmentsBottomSheet(
state: MessageComposerState,
onSendLocationClicked: () -> Unit,
onCreatePollClicked: () -> Unit,
onSendLocationClick: () -> Unit,
onCreatePollClick: () -> Unit,
enableTextFormatting: Boolean,
modifier: Modifier = Modifier,
) {
@@ -87,8 +87,8 @@ internal fun AttachmentsBottomSheet(
AttachmentSourcePickerMenu(
state = state,
enableTextFormatting = enableTextFormatting,
onSendLocationClicked = onSendLocationClicked,
onCreatePollClicked = onCreatePollClicked,
onSendLocationClick = onSendLocationClick,
onCreatePollClick = onCreatePollClick,
)
}
}
@@ -97,8 +97,8 @@ internal fun AttachmentsBottomSheet(
@Composable
private fun AttachmentSourcePickerMenu(
state: MessageComposerState,
onSendLocationClicked: () -> Unit,
onCreatePollClicked: () -> Unit,
onSendLocationClick: () -> Unit,
onCreatePollClick: () -> Unit,
enableTextFormatting: Boolean,
) {
Column(
@@ -134,7 +134,7 @@ private fun AttachmentSourcePickerMenu(
ListItem(
modifier = Modifier.clickable {
state.eventSink(MessageComposerEvents.PickAttachmentSource.Location)
onSendLocationClicked()
onSendLocationClick()
},
leadingContent = ListItemContent.Icon(IconSource.Vector(CompoundIcons.LocationPin())),
headlineContent = { Text(stringResource(R.string.screen_room_attachment_source_location)) },
@@ -145,7 +145,7 @@ private fun AttachmentSourcePickerMenu(
ListItem(
modifier = Modifier.clickable {
state.eventSink(MessageComposerEvents.PickAttachmentSource.Poll)
onCreatePollClicked()
onCreatePollClick()
},
leadingContent = ListItemContent.Icon(IconSource.Vector(CompoundIcons.Polls())),
headlineContent = { Text(stringResource(R.string.screen_room_attachment_source_poll)) },
@@ -170,8 +170,8 @@ internal fun AttachmentSourcePickerMenuPreview() = ElementPreview {
state = aMessageComposerState(
canShareLocation = true,
),
onSendLocationClicked = {},
onCreatePollClicked = {},
onSendLocationClick = {},
onCreatePollClick = {},
enableTextFormatting = true,
)
}

View File

@@ -121,11 +121,11 @@ internal fun MessageComposerView(
onVoicePlayerEvent = onVoicePlayerEvent,
onSendVoiceMessage = onSendVoiceMessage,
onDeleteVoiceMessage = onDeleteVoiceMessage,
onSuggestionReceived = ::onSuggestionReceived,
onReceiveSuggestion = ::onSuggestionReceived,
onError = ::onError,
onTyping = ::onTyping,
currentUserId = state.currentUserId,
onRichContentSelected = ::sendUri,
onSelectRichContent = ::sendUri,
)
}

View File

@@ -52,7 +52,7 @@ class ReportMessageNode @AssistedInject constructor(
val state = presenter.present()
ReportMessageView(
state = state,
onBackClicked = ::navigateUp,
onBackClick = ::navigateUp,
modifier = modifier
)
}

View File

@@ -58,7 +58,7 @@ import io.element.android.libraries.ui.strings.CommonStrings
@Composable
fun ReportMessageView(
state: ReportMessageState,
onBackClicked: () -> Unit,
onBackClick: () -> Unit,
modifier: Modifier = Modifier,
) {
val focusManager = LocalFocusManager.current
@@ -66,7 +66,7 @@ fun ReportMessageView(
AsyncActionView(
async = state.result,
progressDialog = {},
onSuccess = { onBackClicked() },
onSuccess = { onBackClick() },
errorMessage = { stringResource(CommonStrings.error_unknown) },
onErrorDismiss = { state.eventSink(ReportMessageEvents.ClearError) }
)
@@ -81,7 +81,7 @@ fun ReportMessageView(
)
},
navigationIcon = {
BackButton(onClick = onBackClicked)
BackButton(onClick = onBackClick)
}
)
},
@@ -160,7 +160,7 @@ fun ReportMessageView(
@Composable
internal fun ReportMessageViewPreview(@PreviewParameter(ReportMessageStateProvider::class) state: ReportMessageState) = ElementPreview {
ReportMessageView(
onBackClicked = {},
onBackClick = {},
state = state,
)
}

View File

@@ -134,7 +134,7 @@ class TimelinePresenter @AssistedInject constructor(
)
}
is TimelineEvents.PollEditClicked -> {
navigator.onEditPollClicked(event.pollStartId)
navigator.onEditPollClick(event.pollStartId)
}
is TimelineEvents.FocusOnEvent -> localScope.launch {
focusedEventId.value = event.eventId

View File

@@ -79,15 +79,15 @@ import kotlin.math.abs
fun TimelineView(
state: TimelineState,
typingNotificationState: TypingNotificationState,
onUserDataClicked: (UserId) -> Unit,
onLinkClicked: (String) -> Unit,
onMessageClicked: (TimelineItem.Event) -> Unit,
onMessageLongClicked: (TimelineItem.Event) -> Unit,
onTimestampClicked: (TimelineItem.Event) -> Unit,
onUserDataClick: (UserId) -> Unit,
onLinkClick: (String) -> Unit,
onMessageClick: (TimelineItem.Event) -> Unit,
onMessageLongClick: (TimelineItem.Event) -> Unit,
onTimestampClick: (TimelineItem.Event) -> Unit,
onSwipeToReply: (TimelineItem.Event) -> Unit,
onReactionClicked: (emoji: String, TimelineItem.Event) -> Unit,
onReactionLongClicked: (emoji: String, TimelineItem.Event) -> Unit,
onMoreReactionsClicked: (TimelineItem.Event) -> Unit,
onReactionClick: (emoji: String, TimelineItem.Event) -> Unit,
onReactionLongClick: (emoji: String, TimelineItem.Event) -> Unit,
onMoreReactionsClick: (TimelineItem.Event) -> Unit,
onReadReceiptClick: (TimelineItem.Event) -> Unit,
modifier: Modifier = Modifier,
forceJumpToBottomVisibility: Boolean = false
@@ -96,7 +96,7 @@ fun TimelineView(
state.eventSink(TimelineEvents.ClearFocusRequestState)
}
fun onScrollFinishedAt(firstVisibleIndex: Int) {
fun onScrollFinishAt(firstVisibleIndex: Int) {
state.eventSink(TimelineEvents.OnScrollFinished(firstVisibleIndex))
}
@@ -108,7 +108,7 @@ fun TimelineView(
accessibilityManager.isTouchExplorationEnabled.not()
}
fun inReplyToClicked(eventId: EventId) {
fun inReplyToClick(eventId: EventId) {
state.eventSink(TimelineEvents.FocusOnEvent(eventId))
}
@@ -138,16 +138,16 @@ fun TimelineView(
isLastOutgoingMessage = (timelineItem as? TimelineItem.Event)?.isMine == true &&
state.timelineItems.first().identifier() == timelineItem.identifier(),
focusedEventId = state.focusedEventId,
onClick = onMessageClicked,
onLongClick = onMessageLongClicked,
onUserDataClick = onUserDataClicked,
onLinkClicked = onLinkClicked,
inReplyToClick = ::inReplyToClicked,
onReactionClick = onReactionClicked,
onReactionLongClick = onReactionLongClicked,
onMoreReactionsClick = onMoreReactionsClicked,
onClick = onMessageClick,
onLongClick = onMessageLongClick,
onUserDataClick = onUserDataClick,
onLinkClick = onLinkClick,
inReplyToClick = ::inReplyToClick,
onReactionClick = onReactionClick,
onReactionLongClick = onReactionLongClick,
onMoreReactionsClick = onMoreReactionsClick,
onReadReceiptClick = onReadReceiptClick,
onTimestampClicked = onTimestampClicked,
onTimestampClick = onTimestampClick,
eventSink = state.eventSink,
onSwipeToReply = onSwipeToReply,
)
@@ -166,7 +166,7 @@ fun TimelineView(
newEventState = state.newEventState,
isLive = state.isLive,
focusRequestState = state.focusRequestState,
onScrollFinishedAt = ::onScrollFinishedAt,
onScrollFinishAt = ::onScrollFinishAt,
onClearFocusRequestState = ::clearFocusRequestState,
onJumpToLive = { state.eventSink(TimelineEvents.JumpToLive) },
)
@@ -183,7 +183,7 @@ private fun BoxScope.TimelineScrollHelper(
forceJumpToBottomVisibility: Boolean,
focusRequestState: FocusRequestState,
onClearFocusRequestState: () -> Unit,
onScrollFinishedAt: (Int) -> Unit,
onScrollFinishAt: (Int) -> Unit,
onJumpToLive: () -> Unit,
) {
val coroutineScope = rememberCoroutineScope()
@@ -231,11 +231,11 @@ private fun BoxScope.TimelineScrollHelper(
}
}
val latestOnScrollFinishedAt by rememberUpdatedState(onScrollFinishedAt)
val latestOnScrollFinishAt by rememberUpdatedState(onScrollFinishAt)
LaunchedEffect(isScrollFinished, hasAnyEvent) {
if (isScrollFinished && hasAnyEvent) {
// Notify the parent composable about the first visible item index when scrolling finishes
latestOnScrollFinishedAt(lazyListState.firstVisibleItemIndex)
latestOnScrollFinishAt(lazyListState.firstVisibleItemIndex)
}
}
@@ -295,15 +295,15 @@ internal fun TimelineViewPreview(
focusedEventIndex = 0,
),
typingNotificationState = aTypingNotificationState(),
onUserDataClicked = {},
onLinkClicked = {},
onMessageClicked = {},
onMessageLongClicked = {},
onTimestampClicked = {},
onUserDataClick = {},
onLinkClick = {},
onMessageClick = {},
onMessageLongClick = {},
onTimestampClick = {},
onSwipeToReply = {},
onReactionClicked = { _, _ -> },
onReactionLongClicked = { _, _ -> },
onMoreReactionsClicked = {},
onReactionClick = { _, _ -> },
onReactionLongClick = { _, _ -> },
onMoreReactionsClick = {},
onReadReceiptClick = {},
forceJumpToBottomVisibility = true,
)

View File

@@ -38,13 +38,13 @@ internal fun ATimelineItemEventRow(
onClick = {},
onLongClick = {},
onUserDataClick = {},
onLinkClicked = {},
onLinkClick = {},
inReplyToClick = {},
onReactionClick = { _, _ -> },
onReactionLongClick = { _, _ -> },
onMoreReactionsClick = {},
onReadReceiptClick = {},
onSwipeToReply = {},
onTimestampClicked = {},
onTimestampClick = {},
eventSink = {},
)

View File

@@ -127,10 +127,10 @@ fun TimelineItemEventRow(
isHighlighted: Boolean,
onClick: () -> Unit,
onLongClick: () -> Unit,
onLinkClicked: (String) -> Unit,
onLinkClick: (String) -> Unit,
onUserDataClick: (UserId) -> Unit,
inReplyToClick: (EventId) -> Unit,
onTimestampClicked: (TimelineItem.Event) -> Unit,
onTimestampClick: (TimelineItem.Event) -> Unit,
onReactionClick: (emoji: String, eventId: TimelineItem.Event) -> Unit,
onReactionLongClick: (emoji: String, eventId: TimelineItem.Event) -> Unit,
onMoreReactionsClick: (eventId: TimelineItem.Event) -> Unit,
@@ -142,11 +142,11 @@ fun TimelineItemEventRow(
val coroutineScope = rememberCoroutineScope()
val interactionSource = remember { MutableInteractionSource() }
fun onUserDataClicked() {
fun onUserDataClick() {
onUserDataClick(event.senderId)
}
fun inReplyToClicked() {
fun inReplyToClick() {
val inReplyToEventId = event.inReplyTo?.eventId() ?: return
inReplyToClick(inReplyToEventId)
}
@@ -190,13 +190,13 @@ fun TimelineItemEventRow(
interactionSource = interactionSource,
onClick = onClick,
onLongClick = onLongClick,
onTimestampClicked = onTimestampClicked,
inReplyToClicked = ::inReplyToClicked,
onUserDataClicked = ::onUserDataClicked,
onReactionClicked = { emoji -> onReactionClick(emoji, event) },
onReactionLongClicked = { emoji -> onReactionLongClick(emoji, event) },
onMoreReactionsClicked = { onMoreReactionsClick(event) },
onLinkClicked = onLinkClicked,
onTimestampClick = onTimestampClick,
inReplyToClick = ::inReplyToClick,
onUserDataClick = ::onUserDataClick,
onReactionClick = { emoji -> onReactionClick(emoji, event) },
onReactionLongClick = { emoji -> onReactionLongClick(emoji, event) },
onMoreReactionsClick = { onMoreReactionsClick(event) },
onLinkClick = onLinkClick,
eventSink = eventSink,
)
}
@@ -209,13 +209,13 @@ fun TimelineItemEventRow(
interactionSource = interactionSource,
onClick = onClick,
onLongClick = onLongClick,
onTimestampClicked = onTimestampClicked,
inReplyToClicked = ::inReplyToClicked,
onUserDataClicked = ::onUserDataClicked,
onReactionClicked = { emoji -> onReactionClick(emoji, event) },
onReactionLongClicked = { emoji -> onReactionLongClick(emoji, event) },
onMoreReactionsClicked = { onMoreReactionsClick(event) },
onLinkClicked = onLinkClicked,
onTimestampClick = onTimestampClick,
inReplyToClick = ::inReplyToClick,
onUserDataClick = ::onUserDataClick,
onReactionClick = { emoji -> onReactionClick(emoji, event) },
onReactionLongClick = { emoji -> onReactionLongClick(emoji, event) },
onMoreReactionsClick = { onMoreReactionsClick(event) },
onLinkClick = onLinkClick,
eventSink = eventSink,
)
}
@@ -227,7 +227,7 @@ fun TimelineItemEventRow(
receipts = event.readReceiptState.receipts,
),
renderReadReceipts = renderReadReceipts,
onReadReceiptsClicked = { onReadReceiptClick(event) },
onReadReceiptsClick = { onReadReceiptClick(event) },
modifier = Modifier.padding(top = 4.dp),
)
}
@@ -265,13 +265,13 @@ private fun TimelineItemEventRowContent(
interactionSource: MutableInteractionSource,
onClick: () -> Unit,
onLongClick: () -> Unit,
onTimestampClicked: (TimelineItem.Event) -> Unit,
inReplyToClicked: () -> Unit,
onUserDataClicked: () -> Unit,
onReactionClicked: (emoji: String) -> Unit,
onReactionLongClicked: (emoji: String) -> Unit,
onMoreReactionsClicked: (event: TimelineItem.Event) -> Unit,
onLinkClicked: (String) -> Unit,
onTimestampClick: (TimelineItem.Event) -> Unit,
inReplyToClick: () -> Unit,
onUserDataClick: () -> Unit,
onReactionClick: (emoji: String) -> Unit,
onReactionLongClick: (emoji: String) -> Unit,
onMoreReactionsClick: (event: TimelineItem.Event) -> Unit,
onLinkClick: (String) -> Unit,
eventSink: (TimelineEvents.EventFromTimelineItem) -> Unit,
modifier: Modifier = Modifier,
) {
@@ -306,7 +306,7 @@ private fun TimelineItemEventRowContent(
}
.padding(horizontal = 16.dp)
.zIndex(1f)
.clickable(onClick = onUserDataClicked)
.clickable(onClick = onUserDataClick)
// This is redundant when using talkback
.clearAndSetSemantics {
invisibleToUser()
@@ -336,11 +336,11 @@ private fun TimelineItemEventRowContent(
MessageEventBubbleContent(
event = event,
onMessageLongClick = onLongClick,
inReplyToClick = inReplyToClicked,
onTimestampClicked = {
onTimestampClicked(event)
inReplyToClick = inReplyToClick,
onTimestampClick = {
onTimestampClick(event)
},
onLinkClicked = onLinkClicked,
onLinkClick = onLinkClick,
eventSink = eventSink,
)
}
@@ -351,9 +351,9 @@ private fun TimelineItemEventRowContent(
reactionsState = event.reactionsState,
userCanSendReaction = timelineRoomInfo.userHasPermissionToSendReaction,
isOutgoing = event.isMine,
onReactionClicked = onReactionClicked,
onReactionLongClicked = onReactionLongClicked,
onMoreReactionsClicked = { onMoreReactionsClicked(event) },
onReactionClick = onReactionClick,
onReactionLongClick = onReactionLongClick,
onMoreReactionsClick = { onMoreReactionsClick(event) },
modifier = Modifier
.constrainAs(reactions) {
top.linkTo(message.bottom, margin = (-4).dp)
@@ -419,8 +419,8 @@ private fun MessageEventBubbleContent(
event: TimelineItem.Event,
onMessageLongClick: () -> Unit,
inReplyToClick: () -> Unit,
onTimestampClicked: () -> Unit,
onLinkClicked: (String) -> Unit,
onTimestampClick: () -> Unit,
onLinkClick: (String) -> Unit,
eventSink: (TimelineEvents.EventFromTimelineItem) -> Unit,
@SuppressLint("ModifierParameter")
// need to rename this modifier to prevent linter false positives
@@ -460,7 +460,7 @@ private fun MessageEventBubbleContent(
timestampPosition: TimestampPosition,
modifier: Modifier = Modifier,
canShrinkContent: Boolean = false,
content: @Composable (onContentLayoutChanged: (ContentAvoidingLayoutData) -> Unit) -> Unit,
content: @Composable (onContentLayoutChange: (ContentAvoidingLayoutData) -> Unit) -> Unit,
) {
when (timestampPosition) {
TimestampPosition.Overlay ->
@@ -468,7 +468,7 @@ private fun MessageEventBubbleContent(
content {}
TimelineEventTimestampView(
event = event,
onClick = onTimestampClicked,
onClick = onTimestampClick,
onLongClick = ::onTimestampLongClick,
modifier = Modifier
// Outer padding
@@ -486,11 +486,11 @@ private fun MessageEventBubbleContent(
spacing = (-4).dp,
overlayOffset = DpOffset(0.dp, -1.dp),
shrinkContent = canShrinkContent,
content = { content(this::onContentLayoutChanged) },
content = { content(this::onContentLayoutChange) },
overlay = {
TimelineEventTimestampView(
event = event,
onClick = onTimestampClicked,
onClick = onTimestampClick,
onLongClick = ::onTimestampLongClick,
modifier = Modifier
.padding(horizontal = 8.dp, vertical = 4.dp)
@@ -502,7 +502,7 @@ private fun MessageEventBubbleContent(
content {}
TimelineEventTimestampView(
event = event,
onClick = onTimestampClicked,
onClick = onTimestampClick,
onLongClick = ::onTimestampLongClick,
modifier = Modifier
.align(Alignment.End)
@@ -553,12 +553,12 @@ private fun MessageEventBubbleContent(
timestampPosition = timestampPosition,
canShrinkContent = canShrinkContent,
modifier = timestampLayoutModifier,
) { onContentLayoutChanged ->
) { onContentLayoutChange ->
TimelineItemEventContentView(
content = event.content,
onLinkClicked = onLinkClicked,
onLinkClick = onLinkClick,
eventSink = eventSink,
onContentLayoutChanged = onContentLayoutChanged,
onContentLayoutChange = onContentLayoutChange,
modifier = contentModifier
)
}

View File

@@ -48,8 +48,8 @@ fun TimelineItemGroupedEventsRow(
onLongClick: (TimelineItem.Event) -> Unit,
inReplyToClick: (EventId) -> Unit,
onUserDataClick: (UserId) -> Unit,
onLinkClicked: (String) -> Unit,
onTimestampClicked: (TimelineItem.Event) -> Unit,
onLinkClick: (String) -> Unit,
onTimestampClick: (TimelineItem.Event) -> Unit,
onReactionClick: (key: String, TimelineItem.Event) -> Unit,
onReactionLongClick: (key: String, TimelineItem.Event) -> Unit,
onMoreReactionsClick: (TimelineItem.Event) -> Unit,
@@ -75,8 +75,8 @@ fun TimelineItemGroupedEventsRow(
onLongClick = onLongClick,
inReplyToClick = inReplyToClick,
onUserDataClick = onUserDataClick,
onLinkClicked = onLinkClicked,
onTimestampClicked = onTimestampClicked,
onLinkClick = onLinkClick,
onTimestampClick = onTimestampClick,
onReactionClick = onReactionClick,
onReactionLongClick = onReactionLongClick,
onMoreReactionsClick = onMoreReactionsClick,
@@ -99,8 +99,8 @@ private fun TimelineItemGroupedEventsRowContent(
onLongClick: (TimelineItem.Event) -> Unit,
inReplyToClick: (EventId) -> Unit,
onUserDataClick: (UserId) -> Unit,
onLinkClicked: (String) -> Unit,
onTimestampClicked: (TimelineItem.Event) -> Unit,
onLinkClick: (String) -> Unit,
onTimestampClick: (TimelineItem.Event) -> Unit,
onReactionClick: (key: String, TimelineItem.Event) -> Unit,
onReactionLongClick: (key: String, TimelineItem.Event) -> Unit,
onMoreReactionsClick: (TimelineItem.Event) -> Unit,
@@ -132,8 +132,8 @@ private fun TimelineItemGroupedEventsRowContent(
onLongClick = onLongClick,
inReplyToClick = inReplyToClick,
onUserDataClick = onUserDataClick,
onLinkClicked = onLinkClicked,
onTimestampClicked = onTimestampClicked,
onLinkClick = onLinkClick,
onTimestampClick = onTimestampClick,
onReactionClick = onReactionClick,
onReactionLongClick = onReactionLongClick,
onMoreReactionsClick = onMoreReactionsClick,
@@ -151,7 +151,7 @@ private fun TimelineItemGroupedEventsRowContent(
receipts = timelineItem.aggregatedReadReceipts,
),
renderReadReceipts = true,
onReadReceiptsClicked = onExpandGroupClick
onReadReceiptsClick = onExpandGroupClick
)
}
}
@@ -173,8 +173,8 @@ internal fun TimelineItemGroupedEventsRowContentExpandedPreview() = ElementPrevi
onLongClick = {},
inReplyToClick = {},
onUserDataClick = {},
onLinkClicked = {},
onTimestampClicked = {},
onLinkClick = {},
onTimestampClick = {},
onReactionClick = { _, _ -> },
onReactionLongClick = { _, _ -> },
onMoreReactionsClick = {},
@@ -198,8 +198,8 @@ internal fun TimelineItemGroupedEventsRowContentCollapsePreview() = ElementPrevi
onLongClick = {},
inReplyToClick = {},
onUserDataClick = {},
onLinkClicked = {},
onTimestampClicked = {},
onLinkClick = {},
onTimestampClick = {},
onReactionClick = { _, _ -> },
onReactionLongClick = { _, _ -> },
onMoreReactionsClick = {},

View File

@@ -42,9 +42,9 @@ fun TimelineItemReactionsView(
reactionsState: TimelineItemReactions,
isOutgoing: Boolean,
userCanSendReaction: Boolean,
onReactionClicked: (emoji: String) -> Unit,
onReactionLongClicked: (emoji: String) -> Unit,
onMoreReactionsClicked: () -> Unit,
onReactionClick: (emoji: String) -> Unit,
onReactionLongClick: (emoji: String) -> Unit,
onMoreReactionsClick: () -> Unit,
modifier: Modifier = Modifier,
) {
var expanded: Boolean by rememberSaveable { mutableStateOf(false) }
@@ -54,9 +54,9 @@ fun TimelineItemReactionsView(
userCanSendReaction = userCanSendReaction,
expanded = expanded,
isOutgoing = isOutgoing,
onReactionClick = onReactionClicked,
onReactionLongClick = onReactionLongClicked,
onMoreReactionsClick = onMoreReactionsClicked,
onReactionClick = onReactionClick,
onReactionLongClick = onReactionLongClick,
onMoreReactionsClick = onMoreReactionsClick,
onToggleExpandClick = { expanded = !expanded },
)
}
@@ -179,8 +179,8 @@ private fun ContentToPreview(
),
userCanSendReaction = true,
isOutgoing = isOutgoing,
onReactionClicked = {},
onReactionLongClicked = {},
onMoreReactionsClicked = {},
onReactionClick = {},
onReactionLongClick = {},
onMoreReactionsClick = {},
)
}

View File

@@ -45,7 +45,7 @@ internal fun TimelineItemRow(
isLastOutgoingMessage: Boolean,
focusedEventId: EventId?,
onUserDataClick: (UserId) -> Unit,
onLinkClicked: (String) -> Unit,
onLinkClick: (String) -> Unit,
onClick: (TimelineItem.Event) -> Unit,
onLongClick: (TimelineItem.Event) -> Unit,
inReplyToClick: (EventId) -> Unit,
@@ -53,7 +53,7 @@ internal fun TimelineItemRow(
onReactionLongClick: (key: String, TimelineItem.Event) -> Unit,
onMoreReactionsClick: (TimelineItem.Event) -> Unit,
onReadReceiptClick: (TimelineItem.Event) -> Unit,
onTimestampClicked: (TimelineItem.Event) -> Unit,
onTimestampClick: (TimelineItem.Event) -> Unit,
onSwipeToReply: (TimelineItem.Event) -> Unit,
eventSink: (TimelineEvents.EventFromTimelineItem) -> Unit,
modifier: Modifier = Modifier
@@ -99,13 +99,13 @@ internal fun TimelineItemRow(
onClick = { onClick(timelineItem) },
onLongClick = { onLongClick(timelineItem) },
onUserDataClick = onUserDataClick,
onLinkClicked = onLinkClicked,
onLinkClick = onLinkClick,
inReplyToClick = inReplyToClick,
onReactionClick = onReactionClick,
onReactionLongClick = onReactionLongClick,
onMoreReactionsClick = onMoreReactionsClick,
onReadReceiptClick = onReadReceiptClick,
onTimestampClicked = onTimestampClicked,
onTimestampClick = onTimestampClick,
onSwipeToReply = { onSwipeToReply(timelineItem) },
eventSink = eventSink,
)
@@ -122,8 +122,8 @@ internal fun TimelineItemRow(
onLongClick = onLongClick,
inReplyToClick = inReplyToClick,
onUserDataClick = onUserDataClick,
onLinkClicked = onLinkClicked,
onTimestampClicked = onTimestampClicked,
onLinkClick = onLinkClick,
onTimestampClick = onTimestampClick,
onReactionClick = onReactionClick,
onReactionLongClick = onReactionLongClick,
onMoreReactionsClick = onMoreReactionsClick,

View File

@@ -79,7 +79,7 @@ fun TimelineItemStateEventRow(
) {
TimelineItemEventContentView(
content = event.content,
onLinkClicked = {},
onLinkClick = {},
eventSink = eventSink,
modifier = Modifier.defaultTimelineContentPadding()
)
@@ -92,7 +92,7 @@ fun TimelineItemStateEventRow(
receipts = event.readReceiptState.receipts,
),
renderReadReceipts = renderReadReceipts,
onReadReceiptsClicked = { onReadReceiptsClick(event) },
onReadReceiptsClick = { onReadReceiptsClick(event) },
)
}
}

View File

@@ -31,7 +31,7 @@ import io.element.android.libraries.matrix.api.core.EventId
@Composable
fun CustomReactionBottomSheet(
state: CustomReactionState,
onEmojiSelected: (EventId, Emoji) -> Unit,
onSelectEmoji: (EventId, Emoji) -> Unit,
modifier: Modifier = Modifier,
) {
val sheetState = rememberModalBottomSheetState()
@@ -46,7 +46,7 @@ fun CustomReactionBottomSheet(
if (target?.event?.eventId == null) return
sheetState.hide(coroutineScope) {
state.eventSink(CustomReactionEvents.DismissCustomReactionSheet)
onEmojiSelected(target.event.eventId, emoji)
onSelectEmoji(target.event.eventId, emoji)
}
}
@@ -57,7 +57,7 @@ fun CustomReactionBottomSheet(
modifier = modifier
) {
EmojiPicker(
onEmojiSelected = ::onEmojiSelectedDismiss,
onSelectEmoji = ::onEmojiSelectedDismiss,
emojibaseStore = target.emojibaseStore,
selectedEmojis = state.selectedEmoji,
modifier = Modifier.fillMaxSize(),

View File

@@ -49,7 +49,7 @@ import io.element.android.libraries.ui.strings.CommonStrings
fun EmojiItem(
item: Emoji,
isSelected: Boolean,
onEmojiSelected: (Emoji) -> Unit,
onSelectEmoji: (Emoji) -> Unit,
modifier: Modifier = Modifier,
emojiSize: TextUnit = 20.sp,
) {
@@ -69,7 +69,7 @@ fun EmojiItem(
.background(backgroundColor, CircleShape)
.clickable(
enabled = true,
onClick = { onEmojiSelected(item) },
onClick = { onSelectEmoji(item) },
indication = rememberRipple(bounded = false, radius = emojiSize.toDp() / 2 + 10.dp),
interactionSource = remember { MutableInteractionSource() }
)
@@ -102,7 +102,7 @@ internal fun EmojiItemPreview() = ElementPreview {
skins = null
),
isSelected = isSelected,
onEmojiSelected = {},
onSelectEmoji = {},
)
}
}

View File

@@ -53,7 +53,7 @@ import kotlinx.coroutines.launch
@OptIn(ExperimentalFoundationApi::class, ExperimentalMaterial3Api::class)
@Composable
fun EmojiPicker(
onEmojiSelected: (Emoji) -> Unit,
onSelectEmoji: (Emoji) -> Unit,
emojibaseStore: EmojibaseStore,
selectedEmojis: ImmutableSet<String>,
modifier: Modifier = Modifier,
@@ -99,7 +99,7 @@ fun EmojiPicker(
modifier = Modifier.aspectRatio(1f),
item = item,
isSelected = selectedEmojis.contains(item.unicode),
onEmojiSelected = onEmojiSelected,
onSelectEmoji = onSelectEmoji,
emojiSize = 32.dp.toSp(),
)
}
@@ -112,7 +112,7 @@ fun EmojiPicker(
@Composable
internal fun EmojiPickerPreview() = ElementPreview {
EmojiPicker(
onEmojiSelected = {},
onSelectEmoji = {},
emojibaseStore = EmojibaseDatasource().load(LocalContext.current),
selectedEmojis = persistentSetOf("😀", "😄", "😃"),
modifier = Modifier.fillMaxWidth(),

View File

@@ -46,7 +46,7 @@ import io.element.android.libraries.designsystem.theme.components.Text
@Composable
fun TimelineItemAudioView(
content: TimelineItemAudioContent,
onContentLayoutChanged: (ContentAvoidingLayoutData) -> Unit,
onContentLayoutChange: (ContentAvoidingLayoutData) -> Unit,
modifier: Modifier = Modifier,
) {
val iconSize = 32.dp
@@ -85,7 +85,7 @@ fun TimelineItemAudioView(
maxLines = 1,
overflow = TextOverflow.Ellipsis,
onTextLayout = ContentAvoidingLayout.measureLastTextLine(
onContentLayoutChanged = onContentLayoutChanged,
onContentLayoutChange = onContentLayoutChange,
extraWidth = iconSize + spacing
)
)
@@ -99,6 +99,6 @@ internal fun TimelineItemAudioViewPreview(@PreviewParameter(TimelineItemAudioCon
ElementPreview {
TimelineItemAudioView(
content,
onContentLayoutChanged = {},
onContentLayoutChange = {},
)
}

View File

@@ -33,7 +33,7 @@ import io.element.android.libraries.ui.strings.CommonStrings
@Composable
fun TimelineItemEncryptedView(
content: TimelineItemEncryptedContent,
onContentLayoutChanged: (ContentAvoidingLayoutData) -> Unit,
onContentLayoutChange: (ContentAvoidingLayoutData) -> Unit,
modifier: Modifier = Modifier
) {
val isMembershipUtd = (content.data as? UnableToDecryptContent.Data.MegolmV1AesSha2)?.utdCause == UtdCause.Membership
@@ -46,7 +46,7 @@ fun TimelineItemEncryptedView(
text = stringResource(id = textId),
iconDescription = stringResource(id = CommonStrings.dialog_title_warning),
iconResourceId = iconId,
onContentLayoutChanged = onContentLayoutChanged,
onContentLayoutChange = onContentLayoutChange,
modifier = modifier
)
}
@@ -58,6 +58,6 @@ internal fun TimelineItemEncryptedViewPreview(
) = ElementPreview {
TimelineItemEncryptedView(
content = content,
onContentLayoutChanged = {},
onContentLayoutChange = {},
)
}

View File

@@ -43,32 +43,32 @@ import io.element.android.libraries.architecture.Presenter
@Composable
fun TimelineItemEventContentView(
content: TimelineItemEventContent,
onLinkClicked: (url: String) -> Unit,
onLinkClick: (url: String) -> Unit,
eventSink: (TimelineEvents.EventFromTimelineItem) -> Unit,
modifier: Modifier = Modifier,
onContentLayoutChanged: (ContentAvoidingLayoutData) -> Unit = {},
onContentLayoutChange: (ContentAvoidingLayoutData) -> Unit = {},
) {
val presenterFactories = LocalTimelineItemPresenterFactories.current
when (content) {
is TimelineItemEncryptedContent -> TimelineItemEncryptedView(
content = content,
onContentLayoutChanged = onContentLayoutChanged,
onContentLayoutChange = onContentLayoutChange,
modifier = modifier
)
is TimelineItemRedactedContent -> TimelineItemRedactedView(
content = content,
onContentLayoutChanged = onContentLayoutChanged,
onContentLayoutChange = onContentLayoutChange,
modifier = modifier
)
is TimelineItemTextBasedContent -> TimelineItemTextView(
content = content,
modifier = modifier,
onLinkClicked = onLinkClicked,
onContentLayoutChanged = onContentLayoutChanged
onLinkClick = onLinkClick,
onContentLayoutChange = onContentLayoutChange
)
is TimelineItemUnknownContent -> TimelineItemUnknownView(
content = content,
onContentLayoutChanged = onContentLayoutChanged,
onContentLayoutChange = onContentLayoutChange,
modifier = modifier
)
is TimelineItemLocationContent -> TimelineItemLocationView(
@@ -77,7 +77,7 @@ fun TimelineItemEventContentView(
)
is TimelineItemImageContent -> TimelineItemImageView(
content = content,
onContentLayoutChanged = onContentLayoutChanged,
onContentLayoutChange = onContentLayoutChange,
modifier = modifier,
)
is TimelineItemStickerContent -> TimelineItemStickerView(
@@ -86,17 +86,17 @@ fun TimelineItemEventContentView(
)
is TimelineItemVideoContent -> TimelineItemVideoView(
content = content,
onContentLayoutChanged = onContentLayoutChanged,
onContentLayoutChange = onContentLayoutChange,
modifier = modifier
)
is TimelineItemFileContent -> TimelineItemFileView(
content = content,
onContentLayoutChanged = onContentLayoutChanged,
onContentLayoutChange = onContentLayoutChange,
modifier = modifier
)
is TimelineItemAudioContent -> TimelineItemAudioView(
content = content,
onContentLayoutChanged = onContentLayoutChanged,
onContentLayoutChange = onContentLayoutChange,
modifier = modifier
)
is TimelineItemLegacyCallInviteContent -> TimelineItemLegacyCallInviteView(modifier = modifier)
@@ -114,7 +114,7 @@ fun TimelineItemEventContentView(
TimelineItemVoiceView(
state = presenter.present(),
content = content,
onContentLayoutChanged = onContentLayoutChanged,
onContentLayoutChange = onContentLayoutChange,
modifier = modifier
)
}

View File

@@ -46,7 +46,7 @@ import io.element.android.libraries.designsystem.theme.components.Text
@Composable
fun TimelineItemFileView(
content: TimelineItemFileContent,
onContentLayoutChanged: (ContentAvoidingLayoutData) -> Unit,
onContentLayoutChange: (ContentAvoidingLayoutData) -> Unit,
modifier: Modifier = Modifier,
) {
val iconSize = 32.dp
@@ -86,7 +86,7 @@ fun TimelineItemFileView(
maxLines = 1,
overflow = TextOverflow.Ellipsis,
onTextLayout = ContentAvoidingLayout.measureLastTextLine(
onContentLayoutChanged = onContentLayoutChanged,
onContentLayoutChange = onContentLayoutChange,
extraWidth = iconSize + spacing
)
)
@@ -99,6 +99,6 @@ fun TimelineItemFileView(
internal fun TimelineItemFileViewPreview(@PreviewParameter(TimelineItemFileContentProvider::class) content: TimelineItemFileContent) = ElementPreview {
TimelineItemFileView(
content,
onContentLayoutChanged = {},
onContentLayoutChange = {},
)
}

View File

@@ -67,7 +67,7 @@ import io.element.android.wysiwyg.compose.EditorStyledText
@Composable
fun TimelineItemImageView(
content: TimelineItemImageContent,
onContentLayoutChanged: (ContentAvoidingLayoutData) -> Unit,
onContentLayoutChange: (ContentAvoidingLayoutData) -> Unit,
modifier: Modifier = Modifier,
) {
val description = stringResource(CommonStrings.common_image)
@@ -115,7 +115,7 @@ fun TimelineItemImageView(
text = caption,
style = ElementRichTextEditorStyle.textStyle(),
releaseOnDetach = false,
onTextLayout = ContentAvoidingLayout.measureLegacyLastTextLine(onContentLayoutChanged = onContentLayoutChanged),
onTextLayout = ContentAvoidingLayout.measureLegacyLastTextLine(onContentLayoutChange = onContentLayoutChange),
)
}
}

View File

@@ -41,12 +41,12 @@ fun TimelineItemInformativeView(
text: String,
iconDescription: String,
@DrawableRes iconResourceId: Int,
onContentLayoutChanged: (ContentAvoidingLayoutData) -> Unit,
onContentLayoutChange: (ContentAvoidingLayoutData) -> Unit,
modifier: Modifier = Modifier
) {
Row(
modifier = modifier.onSizeChanged { size ->
onContentLayoutChanged(
onContentLayoutChange(
ContentAvoidingLayoutData(
contentWidth = size.width,
contentHeight = size.height,
@@ -78,6 +78,6 @@ internal fun TimelineItemInformativeViewPreview() = ElementPreview {
text = "Info",
iconDescription = "",
iconResourceId = CompoundDrawables.ic_compound_delete,
onContentLayoutChanged = {},
onContentLayoutChange = {},
)
}

View File

@@ -34,7 +34,7 @@ fun TimelineItemPollView(
eventSink: (TimelineEvents.TimelineItemPollEvents) -> Unit,
modifier: Modifier = Modifier,
) {
fun onAnswerSelected(pollStartId: EventId, answerId: String) {
fun onSelectAnswer(pollStartId: EventId, answerId: String) {
eventSink(TimelineEvents.PollAnswerSelected(pollStartId, answerId))
}
@@ -54,7 +54,7 @@ fun TimelineItemPollView(
isPollEnded = content.isEnded,
isPollEditable = content.isEditable,
isMine = content.isMine,
onAnswerSelected = ::onAnswerSelected,
onSelectAnswer = ::onSelectAnswer,
onPollEdit = ::onPollEdit,
onPollEnd = ::onPollEnd,
modifier = modifier,

View File

@@ -29,14 +29,14 @@ import io.element.android.libraries.ui.strings.CommonStrings
@Composable
fun TimelineItemRedactedView(
@Suppress("UNUSED_PARAMETER") content: TimelineItemRedactedContent,
onContentLayoutChanged: (ContentAvoidingLayoutData) -> Unit,
onContentLayoutChange: (ContentAvoidingLayoutData) -> Unit,
modifier: Modifier = Modifier
) {
TimelineItemInformativeView(
text = stringResource(id = CommonStrings.common_message_removed),
iconDescription = stringResource(id = CommonStrings.common_message_removed),
iconResourceId = CompoundDrawables.ic_compound_delete,
onContentLayoutChanged = onContentLayoutChanged,
onContentLayoutChange = onContentLayoutChange,
modifier = modifier
)
}
@@ -46,6 +46,6 @@ fun TimelineItemRedactedView(
internal fun TimelineItemRedactedViewPreview() = ElementPreview {
TimelineItemRedactedView(
TimelineItemRedactedContent,
onContentLayoutChanged = {},
onContentLayoutChange = {},
)
}

View File

@@ -39,9 +39,9 @@ import io.element.android.wysiwyg.compose.EditorStyledText
@Composable
fun TimelineItemTextView(
content: TimelineItemTextBasedContent,
onLinkClicked: (String) -> Unit,
onLinkClick: (String) -> Unit,
modifier: Modifier = Modifier,
onContentLayoutChanged: (ContentAvoidingLayoutData) -> Unit = {},
onContentLayoutChange: (ContentAvoidingLayoutData) -> Unit = {},
) {
CompositionLocalProvider(
LocalContentColor provides ElementTheme.colors.textPrimary,
@@ -53,9 +53,9 @@ fun TimelineItemTextView(
Box(modifier.semantics { contentDescription = body.toString() }) {
EditorStyledText(
text = body,
onLinkClickedListener = onLinkClicked,
onLinkClickedListener = onLinkClick,
style = ElementRichTextEditorStyle.textStyle(),
onTextLayout = ContentAvoidingLayout.measureLegacyLastTextLine(onContentLayoutChanged = onContentLayoutChanged),
onTextLayout = ContentAvoidingLayout.measureLegacyLastTextLine(onContentLayoutChange = onContentLayoutChange),
releaseOnDetach = false,
)
}
@@ -69,6 +69,6 @@ internal fun TimelineItemTextViewPreview(
) = ElementPreview {
TimelineItemTextView(
content = content,
onLinkClicked = {},
onLinkClick = {},
)
}

View File

@@ -29,14 +29,14 @@ import io.element.android.libraries.ui.strings.CommonStrings
@Composable
fun TimelineItemUnknownView(
@Suppress("UNUSED_PARAMETER") content: TimelineItemUnknownContent,
onContentLayoutChanged: (ContentAvoidingLayoutData) -> Unit,
onContentLayoutChange: (ContentAvoidingLayoutData) -> Unit,
modifier: Modifier = Modifier
) {
TimelineItemInformativeView(
text = stringResource(id = CommonStrings.common_unsupported_event),
iconDescription = stringResource(id = CommonStrings.dialog_title_warning),
iconResourceId = CompoundDrawables.ic_compound_info_solid,
onContentLayoutChanged = onContentLayoutChanged,
onContentLayoutChange = onContentLayoutChange,
modifier = modifier
)
}
@@ -46,6 +46,6 @@ fun TimelineItemUnknownView(
internal fun TimelineItemUnknownViewPreview() = ElementPreview {
TimelineItemUnknownView(
content = TimelineItemUnknownContent,
onContentLayoutChanged = {},
onContentLayoutChange = {},
)
}

View File

@@ -73,7 +73,7 @@ import io.element.android.wysiwyg.compose.EditorStyledText
@Composable
fun TimelineItemVideoView(
content: TimelineItemVideoContent,
onContentLayoutChanged: (ContentAvoidingLayoutData) -> Unit,
onContentLayoutChange: (ContentAvoidingLayoutData) -> Unit,
modifier: Modifier = Modifier,
) {
val description = stringResource(CommonStrings.common_image)
@@ -131,7 +131,7 @@ fun TimelineItemVideoView(
text = caption,
style = ElementRichTextEditorStyle.textStyle(),
releaseOnDetach = false,
onTextLayout = ContentAvoidingLayout.measureLegacyLastTextLine(onContentLayoutChanged = onContentLayoutChanged),
onTextLayout = ContentAvoidingLayout.measureLegacyLastTextLine(onContentLayoutChange = onContentLayoutChange),
)
}
}

View File

@@ -67,7 +67,7 @@ import kotlinx.coroutines.delay
fun TimelineItemVoiceView(
state: VoiceMessageState,
content: TimelineItemVoiceContent,
onContentLayoutChanged: (ContentAvoidingLayoutData) -> Unit,
onContentLayoutChange: (ContentAvoidingLayoutData) -> Unit,
modifier: Modifier = Modifier,
) {
fun playPause() {
@@ -81,7 +81,7 @@ fun TimelineItemVoiceView(
contentDescription = a11y
}
.onSizeChanged {
onContentLayoutChanged(
onContentLayoutChange(
ContentAvoidingLayoutData(
contentWidth = it.width,
contentHeight = it.height,
@@ -258,7 +258,7 @@ internal fun TimelineItemVoiceViewPreview(
TimelineItemVoiceView(
state = timelineItemVoiceViewParameters.state,
content = timelineItemVoiceViewParameters.content,
onContentLayoutChanged = {},
onContentLayoutChange = {},
)
}
@@ -271,7 +271,7 @@ internal fun TimelineItemVoiceViewUnifiedPreview() = ElementPreview {
TimelineItemVoiceView(
state = it.state,
content = it.content,
onContentLayoutChanged = {},
onContentLayoutChange = {},
)
}
}

View File

@@ -136,26 +136,26 @@ interface ContentAvoidingLayoutScope {
/**
* It should be called when the content layout changes, so it can update the [ContentAvoidingLayoutData] and measure and layout the content properly.
*/
fun onContentLayoutChanged(data: ContentAvoidingLayoutData)
fun onContentLayoutChange(data: ContentAvoidingLayoutData)
}
private class ContentAvoidingLayoutScopeInstance(
val data: MutableState<ContentAvoidingLayoutData> = mutableStateOf(ContentAvoidingLayoutData()),
) : ContentAvoidingLayoutScope {
override fun onContentLayoutChanged(data: ContentAvoidingLayoutData) {
override fun onContentLayoutChange(data: ContentAvoidingLayoutData) {
this.data.value = data
}
}
object ContentAvoidingLayout {
/**
* Measures the last line of a [TextLayoutResult] and calls [onContentLayoutChanged] with the [ContentAvoidingLayoutData].
* Measures the last line of a [TextLayoutResult] and calls [onContentLayoutChange] with the [ContentAvoidingLayoutData].
*
* This is supposed to be used in the `onTextLayout` parameter of a Text based component.
*/
@Composable
internal fun measureLastTextLine(
onContentLayoutChanged: (ContentAvoidingLayoutData) -> Unit,
onContentLayoutChange: (ContentAvoidingLayoutData) -> Unit,
extraWidth: Dp = 0.dp,
): ((TextLayoutResult) -> Unit) {
val layoutDirection = LocalLayoutDirection.current
@@ -167,7 +167,7 @@ object ContentAvoidingLayout {
LayoutDirection.Rtl -> textLayout.getLineLeft(textLayout.lineCount - 1).roundToInt()
}
val lastLineHeight = textLayout.getLineBottom(textLayout.lineCount - 1).roundToInt()
onContentLayoutChanged(
onContentLayoutChange(
ContentAvoidingLayoutData(
contentWidth = textLayout.size.width + extraWidthPx,
contentHeight = textLayout.size.height,
@@ -179,13 +179,13 @@ object ContentAvoidingLayout {
}
/**
* Measures the last line of a [Layout] and calls [onContentLayoutChanged] with the [ContentAvoidingLayoutData].
* Measures the last line of a [Layout] and calls [onContentLayoutChange] with the [ContentAvoidingLayoutData].
*
* This is supposed to be used in the `onTextLayout` parameter of an [EditorStyledText] component.
*/
@Composable
internal fun measureLegacyLastTextLine(
onContentLayoutChanged: (ContentAvoidingLayoutData) -> Unit,
onContentLayoutChange: (ContentAvoidingLayoutData) -> Unit,
extraWidth: Dp = 0.dp,
): ((Layout) -> Unit) {
val extraWidthPx = extraWidth.roundToPx()
@@ -193,7 +193,7 @@ object ContentAvoidingLayout {
// We need to add the external extra width so it's not taken into account as 'free space'
val lastLineWidth = textLayout.getLineWidth(textLayout.lineCount - 1).roundToInt()
val lastLineHeight = textLayout.getLineBottom(textLayout.lineCount - 1)
onContentLayoutChanged(
onContentLayoutChange(
ContentAvoidingLayoutData(
contentWidth = textLayout.width + extraWidthPx,
contentHeight = textLayout.height,

View File

@@ -61,7 +61,7 @@ import kotlinx.collections.immutable.ImmutableList
fun TimelineItemReadReceiptView(
state: ReadReceiptViewState,
renderReadReceipts: Boolean,
onReadReceiptsClicked: () -> Unit,
onReadReceiptsClick: () -> Unit,
modifier: Modifier = Modifier,
) {
if (state.receipts.isNotEmpty()) {
@@ -73,7 +73,7 @@ fun TimelineItemReadReceiptView(
.testTag(TestTags.messageReadReceipts)
.clip(RoundedCornerShape(4.dp))
.clickable {
onReadReceiptsClicked()
onReadReceiptsClick()
}
.padding(2.dp)
)
@@ -213,6 +213,6 @@ internal fun TimelineItemReadReceiptViewPreview(
TimelineItemReadReceiptView(
state = state,
renderReadReceipts = true,
onReadReceiptsClicked = {},
onReadReceiptsClick = {},
)
}

Some files were not shown because too many files have changed in this diff Show More