From 29d529358737e4b7270c3e050397315404a8c8b5 Mon Sep 17 00:00:00 2001 From: sowjanyakch Date: Tue, 22 Apr 2025 16:18:45 +0200 Subject: [PATCH 01/17] Add button to add participants Signed-off-by: sowjanyakch --- .../talk/contacts/components/AppBar.kt | 48 ++++++++++++------- .../contacts/components/SearchComponent.kt | 3 +- 2 files changed, 33 insertions(+), 18 deletions(-) diff --git a/app/src/main/java/com/nextcloud/talk/contacts/components/AppBar.kt b/app/src/main/java/com/nextcloud/talk/contacts/components/AppBar.kt index aa161023d..f6b602063 100644 --- a/app/src/main/java/com/nextcloud/talk/contacts/components/AppBar.kt +++ b/app/src/main/java/com/nextcloud/talk/contacts/components/AppBar.kt @@ -20,8 +20,10 @@ import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.Icon import androidx.compose.material3.IconButton import androidx.compose.material3.Text +import androidx.compose.material3.TextButton import androidx.compose.material3.TopAppBar import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.res.stringResource @@ -54,23 +56,25 @@ fun AppBar( } }, actions = { - IconButton(onClick = onEnableSearch) { - Icon(Icons.Filled.Search, contentDescription = stringResource(R.string.search_icon)) - } - if (isAddParticipants) { - Text( - text = stringResource(id = R.string.nc_contacts_done), - modifier = Modifier.clickable { - val resultIntent = Intent().apply { - putParcelableArrayListExtra( - "selectedParticipants", - ArrayList(autocompleteUsers) - ) + if (!isSearchActive) { + IconButton(onClick = onEnableSearch) { + Icon(Icons.Filled.Search, contentDescription = stringResource(R.string.search_icon)) + } + if (isAddParticipants) { + Text( + text = stringResource(id = R.string.nc_contacts_done), + modifier = Modifier.clickable { + val resultIntent = Intent().apply { + putParcelableArrayListExtra( + "selectedParticipants", + ArrayList(autocompleteUsers) + ) + } + (context as? Activity)?.setResult(Activity.RESULT_OK, resultIntent) + (context as? Activity)?.finish() } - (context as? Activity)?.setResult(Activity.RESULT_OK, resultIntent) - (context as? Activity)?.finish() - } - ) + ) + } } } ) @@ -84,6 +88,18 @@ fun AppBar( }, onDisableSearch = onDisableSearch ) + + if (searchQuery.isNotEmpty() && isAddParticipants) { + TextButton( + modifier = Modifier.align(Alignment.CenterVertically), + onClick = { + onDisableSearch() + onUpdateSearchQuery("") + } + ) { + Text(text = "Add") + } + } } } } diff --git a/app/src/main/java/com/nextcloud/talk/contacts/components/SearchComponent.kt b/app/src/main/java/com/nextcloud/talk/contacts/components/SearchComponent.kt index 5a353939d..08935ace9 100644 --- a/app/src/main/java/com/nextcloud/talk/contacts/components/SearchComponent.kt +++ b/app/src/main/java/com/nextcloud/talk/contacts/components/SearchComponent.kt @@ -36,11 +36,10 @@ import com.nextcloud.talk.R @Composable fun SearchComponent(text: String, onTextChange: (String) -> Unit, onDisableSearch: () -> Unit) { val keyboardController = LocalSoftwareKeyboardController.current - TextField( modifier = Modifier .background(MaterialTheme.colorScheme.background) - .fillMaxWidth() + .fillMaxWidth(0.85f) .height(60.dp), value = text, onValueChange = { onTextChange(it) }, From 350bba1b956748435108d3d71b3d307e411be3e3 Mon Sep 17 00:00:00 2001 From: sowjanyakch Date: Tue, 22 Apr 2025 17:09:02 +0200 Subject: [PATCH 02/17] detekt Signed-off-by: sowjanyakch --- .../java/com/nextcloud/talk/contacts/components/AppBar.kt | 2 +- .../nextcloud/talk/contacts/components/SearchComponent.kt | 8 +++++++- app/src/main/res/values/strings.xml | 1 + 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/com/nextcloud/talk/contacts/components/AppBar.kt b/app/src/main/java/com/nextcloud/talk/contacts/components/AppBar.kt index f6b602063..473fd2aa5 100644 --- a/app/src/main/java/com/nextcloud/talk/contacts/components/AppBar.kt +++ b/app/src/main/java/com/nextcloud/talk/contacts/components/AppBar.kt @@ -97,7 +97,7 @@ fun AppBar( onUpdateSearchQuery("") } ) { - Text(text = "Add") + Text(text = context.getString(R.string.add_participants)) } } } diff --git a/app/src/main/java/com/nextcloud/talk/contacts/components/SearchComponent.kt b/app/src/main/java/com/nextcloud/talk/contacts/components/SearchComponent.kt index 08935ace9..98b26202f 100644 --- a/app/src/main/java/com/nextcloud/talk/contacts/components/SearchComponent.kt +++ b/app/src/main/java/com/nextcloud/talk/contacts/components/SearchComponent.kt @@ -39,7 +39,7 @@ fun SearchComponent(text: String, onTextChange: (String) -> Unit, onDisableSearc TextField( modifier = Modifier .background(MaterialTheme.colorScheme.background) - .fillMaxWidth(0.85f) + .fillMaxWidth(SearchComponentCompanionClass.WIDTH_RATIO) .height(60.dp), value = text, onValueChange = { onTextChange(it) }, @@ -100,3 +100,9 @@ fun searchKeyboardActions(text: String, keyboardController: SoftwareKeyboardCont } } ) + +class SearchComponentCompanionClass() { + companion object { + const val WIDTH_RATIO = 0.85f + } +} diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 230d168bd..887a4849f 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -41,6 +41,7 @@ How to translate with transifex: Settings + Add Test server connection From ebe374c9cbea75117ce65bee8c1aae818a080314 Mon Sep 17 00:00:00 2001 From: sowjanyakch Date: Mon, 28 Apr 2025 14:09:06 +0200 Subject: [PATCH 03/17] lint format Signed-off-by: sowjanyakch --- .../com/nextcloud/talk/contacts/components/SearchComponent.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/com/nextcloud/talk/contacts/components/SearchComponent.kt b/app/src/main/java/com/nextcloud/talk/contacts/components/SearchComponent.kt index 98b26202f..3dd9b8d0b 100644 --- a/app/src/main/java/com/nextcloud/talk/contacts/components/SearchComponent.kt +++ b/app/src/main/java/com/nextcloud/talk/contacts/components/SearchComponent.kt @@ -101,7 +101,7 @@ fun searchKeyboardActions(text: String, keyboardController: SoftwareKeyboardCont } ) -class SearchComponentCompanionClass() { +class SearchComponentCompanionClass { companion object { const val WIDTH_RATIO = 0.85f } From e689e4f7f8db6c1be15a8b2115ebce37271c0bff Mon Sep 17 00:00:00 2001 From: sowjanyakch Date: Mon, 26 May 2025 12:14:43 +0200 Subject: [PATCH 04/17] adjust search component width Signed-off-by: sowjanyakch --- .../nextcloud/talk/contacts/components/AppBar.kt | 4 +++- .../talk/contacts/components/SearchComponent.kt | 13 +++++++++++-- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/com/nextcloud/talk/contacts/components/AppBar.kt b/app/src/main/java/com/nextcloud/talk/contacts/components/AppBar.kt index 473fd2aa5..ecd40e595 100644 --- a/app/src/main/java/com/nextcloud/talk/contacts/components/AppBar.kt +++ b/app/src/main/java/com/nextcloud/talk/contacts/components/AppBar.kt @@ -86,7 +86,8 @@ fun AppBar( onUpdateSearchQuery(searchQuery) onUpdateAutocompleteUsers() }, - onDisableSearch = onDisableSearch + onDisableSearch = onDisableSearch, + isAddParticipants = isAddParticipants ) if (searchQuery.isNotEmpty() && isAddParticipants) { @@ -99,6 +100,7 @@ fun AppBar( ) { Text(text = context.getString(R.string.add_participants)) } + } else { } } } diff --git a/app/src/main/java/com/nextcloud/talk/contacts/components/SearchComponent.kt b/app/src/main/java/com/nextcloud/talk/contacts/components/SearchComponent.kt index 3dd9b8d0b..191468286 100644 --- a/app/src/main/java/com/nextcloud/talk/contacts/components/SearchComponent.kt +++ b/app/src/main/java/com/nextcloud/talk/contacts/components/SearchComponent.kt @@ -34,12 +34,21 @@ import androidx.compose.ui.unit.sp import com.nextcloud.talk.R @Composable -fun SearchComponent(text: String, onTextChange: (String) -> Unit, onDisableSearch: () -> Unit) { +fun SearchComponent( + text: String, + onTextChange: (String) -> Unit, + onDisableSearch: () -> Unit, + isAddParticipants: Boolean +) { + var width_ratio = 0.85f + if (!isAddParticipants) { + width_ratio = 1.0f + } val keyboardController = LocalSoftwareKeyboardController.current TextField( modifier = Modifier .background(MaterialTheme.colorScheme.background) - .fillMaxWidth(SearchComponentCompanionClass.WIDTH_RATIO) + .fillMaxWidth(width_ratio) .height(60.dp), value = text, onValueChange = { onTextChange(it) }, From 96541b7ad86165dfbacf5b6967eb1daaa7997f49 Mon Sep 17 00:00:00 2001 From: sowjanyakch Date: Mon, 26 May 2025 13:02:27 +0200 Subject: [PATCH 05/17] enable add button only when you select contacts Signed-off-by: sowjanyakch --- .../com/nextcloud/talk/contacts/ContactsScreen.kt | 4 +++- .../nextcloud/talk/contacts/ContactsViewModel.kt | 15 +++++++++++++++ .../nextcloud/talk/contacts/components/AppBar.kt | 7 ++++--- .../talk/contacts/components/ContactItemRow.kt | 2 ++ .../talk/contacts/components/SearchComponent.kt | 6 ------ 5 files changed, 24 insertions(+), 10 deletions(-) diff --git a/app/src/main/java/com/nextcloud/talk/contacts/ContactsScreen.kt b/app/src/main/java/com/nextcloud/talk/contacts/ContactsScreen.kt index 69d70306d..d2dffcbd1 100644 --- a/app/src/main/java/com/nextcloud/talk/contacts/ContactsScreen.kt +++ b/app/src/main/java/com/nextcloud/talk/contacts/ContactsScreen.kt @@ -29,6 +29,7 @@ fun ContactsScreen(contactsViewModel: ContactsViewModel, uiState: ContactsUiStat val isSearchActive by contactsViewModel.isSearchActive.collectAsStateWithLifecycle() val isAddParticipants by contactsViewModel.isAddParticipantsView.collectAsStateWithLifecycle() val autocompleteUsers by contactsViewModel.selectedParticipantsList.collectAsStateWithLifecycle() + val enableAddButton by contactsViewModel.enableAddButton.collectAsStateWithLifecycle() Scaffold( topBar = { @@ -49,7 +50,8 @@ fun ContactsScreen(contactsViewModel: ContactsViewModel, uiState: ContactsUiStat }, onUpdateAutocompleteUsers = { contactsViewModel.getContactsFromSearchParams() - } + }, + enableAddButton = enableAddButton ) }, content = { diff --git a/app/src/main/java/com/nextcloud/talk/contacts/ContactsViewModel.kt b/app/src/main/java/com/nextcloud/talk/contacts/ContactsViewModel.kt index 7d495226b..73d8c1a94 100644 --- a/app/src/main/java/com/nextcloud/talk/contacts/ContactsViewModel.kt +++ b/app/src/main/java/com/nextcloud/talk/contacts/ContactsViewModel.kt @@ -36,6 +36,11 @@ class ContactsViewModel @Inject constructor( private val _isAddParticipantsView = MutableStateFlow(false) val isAddParticipantsView: StateFlow = _isAddParticipantsView + private val _enableAddButton = MutableStateFlow(false) + val enableAddButton: StateFlow = _enableAddButton + + private val _selectedContacts = MutableStateFlow>(emptyList()) + private var hideAlreadyAddedParticipants: Boolean = false init { @@ -49,11 +54,21 @@ class ContactsViewModel @Inject constructor( fun selectContact(contact: AutocompleteUser) { val updatedParticipants = selectedParticipants.value + contact selectedParticipants.value = updatedParticipants + _selectedContacts.value = _selectedContacts.value + contact + } + + fun updateAddButtonState() { + if (_selectedContacts.value.isEmpty()) { + _enableAddButton.value = false + } else { + _enableAddButton.value = true + } } fun deselectContact(contact: AutocompleteUser) { val updatedParticipants = selectedParticipants.value - contact selectedParticipants.value = updatedParticipants + _selectedContacts.value = _selectedContacts.value - contact } fun updateSelectedParticipants(participants: List) { diff --git a/app/src/main/java/com/nextcloud/talk/contacts/components/AppBar.kt b/app/src/main/java/com/nextcloud/talk/contacts/components/AppBar.kt index ecd40e595..d259c0ca5 100644 --- a/app/src/main/java/com/nextcloud/talk/contacts/components/AppBar.kt +++ b/app/src/main/java/com/nextcloud/talk/contacts/components/AppBar.kt @@ -42,7 +42,8 @@ fun AppBar( onEnableSearch: () -> Unit, onDisableSearch: () -> Unit, onUpdateSearchQuery: (String) -> Unit, - onUpdateAutocompleteUsers: () -> Unit + onUpdateAutocompleteUsers: () -> Unit, + enableAddButton: Boolean ) { val context = LocalContext.current @@ -96,11 +97,11 @@ fun AppBar( onClick = { onDisableSearch() onUpdateSearchQuery("") - } + }, + enabled = enableAddButton ) { Text(text = context.getString(R.string.add_participants)) } - } else { } } } diff --git a/app/src/main/java/com/nextcloud/talk/contacts/components/ContactItemRow.kt b/app/src/main/java/com/nextcloud/talk/contacts/components/ContactItemRow.kt index e45afd291..05cd8431c 100644 --- a/app/src/main/java/com/nextcloud/talk/contacts/components/ContactItemRow.kt +++ b/app/src/main/java/com/nextcloud/talk/contacts/components/ContactItemRow.kt @@ -65,8 +65,10 @@ fun ContactItemRow(contact: AutocompleteUser, contactsViewModel: ContactsViewMod isSelected = !isSelected if (isSelected) { contactsViewModel.selectContact(contact) + contactsViewModel.updateAddButtonState() } else { contactsViewModel.deselectContact(contact) + contactsViewModel.updateAddButtonState() } } } diff --git a/app/src/main/java/com/nextcloud/talk/contacts/components/SearchComponent.kt b/app/src/main/java/com/nextcloud/talk/contacts/components/SearchComponent.kt index 191468286..79518353b 100644 --- a/app/src/main/java/com/nextcloud/talk/contacts/components/SearchComponent.kt +++ b/app/src/main/java/com/nextcloud/talk/contacts/components/SearchComponent.kt @@ -109,9 +109,3 @@ fun searchKeyboardActions(text: String, keyboardController: SoftwareKeyboardCont } } ) - -class SearchComponentCompanionClass { - companion object { - const val WIDTH_RATIO = 0.85f - } -} From c5c129b70686be221734c9527f46918fdbfb3a1f Mon Sep 17 00:00:00 2001 From: sowjanyakch Date: Mon, 26 May 2025 13:08:46 +0200 Subject: [PATCH 06/17] show add button even when search query is empty Signed-off-by: sowjanyakch --- .../main/java/com/nextcloud/talk/contacts/components/AppBar.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/com/nextcloud/talk/contacts/components/AppBar.kt b/app/src/main/java/com/nextcloud/talk/contacts/components/AppBar.kt index d259c0ca5..e8e488d3f 100644 --- a/app/src/main/java/com/nextcloud/talk/contacts/components/AppBar.kt +++ b/app/src/main/java/com/nextcloud/talk/contacts/components/AppBar.kt @@ -91,7 +91,7 @@ fun AppBar( isAddParticipants = isAddParticipants ) - if (searchQuery.isNotEmpty() && isAddParticipants) { + if (isAddParticipants) { TextButton( modifier = Modifier.align(Alignment.CenterVertically), onClick = { From c3ebeebcb048d959fb84b28f1f69214aabb6aa6e Mon Sep 17 00:00:00 2001 From: sowjanyakch Date: Mon, 26 May 2025 14:06:46 +0200 Subject: [PATCH 07/17] update contacts list after clicking add button Signed-off-by: sowjanyakch --- .../main/java/com/nextcloud/talk/contacts/components/AppBar.kt | 1 + 1 file changed, 1 insertion(+) diff --git a/app/src/main/java/com/nextcloud/talk/contacts/components/AppBar.kt b/app/src/main/java/com/nextcloud/talk/contacts/components/AppBar.kt index e8e488d3f..df41601fe 100644 --- a/app/src/main/java/com/nextcloud/talk/contacts/components/AppBar.kt +++ b/app/src/main/java/com/nextcloud/talk/contacts/components/AppBar.kt @@ -97,6 +97,7 @@ fun AppBar( onClick = { onDisableSearch() onUpdateSearchQuery("") + onUpdateAutocompleteUsers() }, enabled = enableAddButton ) { From b9e9d0ccd1e4dc15fca38469ca15272db62c40d1 Mon Sep 17 00:00:00 2001 From: sowjanyakch Date: Mon, 26 May 2025 15:52:20 +0200 Subject: [PATCH 08/17] show selected participants when clicking on add button Signed-off-by: sowjanyakch --- .../java/com/nextcloud/talk/contacts/ContactsScreen.kt | 6 +++++- .../com/nextcloud/talk/contacts/ContactsViewModel.kt | 9 +++++++-- .../com/nextcloud/talk/contacts/components/AppBar.kt | 4 +++- 3 files changed, 15 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/com/nextcloud/talk/contacts/ContactsScreen.kt b/app/src/main/java/com/nextcloud/talk/contacts/ContactsScreen.kt index d2dffcbd1..115ee392b 100644 --- a/app/src/main/java/com/nextcloud/talk/contacts/ContactsScreen.kt +++ b/app/src/main/java/com/nextcloud/talk/contacts/ContactsScreen.kt @@ -31,6 +31,7 @@ fun ContactsScreen(contactsViewModel: ContactsViewModel, uiState: ContactsUiStat val autocompleteUsers by contactsViewModel.selectedParticipantsList.collectAsStateWithLifecycle() val enableAddButton by contactsViewModel.enableAddButton.collectAsStateWithLifecycle() + Scaffold( topBar = { AppBar( @@ -51,7 +52,10 @@ fun ContactsScreen(contactsViewModel: ContactsViewModel, uiState: ContactsUiStat onUpdateAutocompleteUsers = { contactsViewModel.getContactsFromSearchParams() }, - enableAddButton = enableAddButton + enableAddButton = enableAddButton, + clickAddButton = { + contactsViewModel.modifyClickAddButton(it) + } ) }, content = { diff --git a/app/src/main/java/com/nextcloud/talk/contacts/ContactsViewModel.kt b/app/src/main/java/com/nextcloud/talk/contacts/ContactsViewModel.kt index 73d8c1a94..2f47711c5 100644 --- a/app/src/main/java/com/nextcloud/talk/contacts/ContactsViewModel.kt +++ b/app/src/main/java/com/nextcloud/talk/contacts/ContactsViewModel.kt @@ -41,6 +41,8 @@ class ContactsViewModel @Inject constructor( private val _selectedContacts = MutableStateFlow>(emptyList()) + private val _clickAddButton = MutableStateFlow(false) + private var hideAlreadyAddedParticipants: Boolean = false init { @@ -51,6 +53,10 @@ class ContactsViewModel @Inject constructor( _searchQuery.value = query } + fun modifyClickAddButton(value:Boolean){ + _clickAddButton.value = value + } + fun selectContact(contact: AutocompleteUser) { val updatedParticipants = selectedParticipants.value + contact selectedParticipants.value = updatedParticipants @@ -101,10 +107,9 @@ class ContactsViewModel @Inject constructor( ) val contactsList: MutableList? = contacts.ocs!!.data?.toMutableList() - if (hideAlreadyAddedParticipants) { + if (hideAlreadyAddedParticipants && !_clickAddButton.value) { contactsList?.removeAll(selectedParticipants.value) } - _contactsViewState.value = ContactsUiState.Success(contactsList) } catch (exception: Exception) { _contactsViewState.value = ContactsUiState.Error(exception.message ?: "") diff --git a/app/src/main/java/com/nextcloud/talk/contacts/components/AppBar.kt b/app/src/main/java/com/nextcloud/talk/contacts/components/AppBar.kt index df41601fe..a163abb94 100644 --- a/app/src/main/java/com/nextcloud/talk/contacts/components/AppBar.kt +++ b/app/src/main/java/com/nextcloud/talk/contacts/components/AppBar.kt @@ -43,7 +43,8 @@ fun AppBar( onDisableSearch: () -> Unit, onUpdateSearchQuery: (String) -> Unit, onUpdateAutocompleteUsers: () -> Unit, - enableAddButton: Boolean + enableAddButton: Boolean, + clickAddButton:(Boolean) -> Unit ) { val context = LocalContext.current @@ -97,6 +98,7 @@ fun AppBar( onClick = { onDisableSearch() onUpdateSearchQuery("") + clickAddButton(true) onUpdateAutocompleteUsers() }, enabled = enableAddButton From 18b75233a59f59f13080883315a7a73dee49566c Mon Sep 17 00:00:00 2001 From: sowjanyakch Date: Mon, 26 May 2025 16:06:22 +0200 Subject: [PATCH 09/17] lintformat Signed-off-by: sowjanyakch --- .../main/java/com/nextcloud/talk/contacts/ContactsScreen.kt | 1 - .../java/com/nextcloud/talk/contacts/ContactsViewModel.kt | 4 ++-- .../java/com/nextcloud/talk/contacts/components/AppBar.kt | 3 ++- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/com/nextcloud/talk/contacts/ContactsScreen.kt b/app/src/main/java/com/nextcloud/talk/contacts/ContactsScreen.kt index 115ee392b..172dd04b3 100644 --- a/app/src/main/java/com/nextcloud/talk/contacts/ContactsScreen.kt +++ b/app/src/main/java/com/nextcloud/talk/contacts/ContactsScreen.kt @@ -31,7 +31,6 @@ fun ContactsScreen(contactsViewModel: ContactsViewModel, uiState: ContactsUiStat val autocompleteUsers by contactsViewModel.selectedParticipantsList.collectAsStateWithLifecycle() val enableAddButton by contactsViewModel.enableAddButton.collectAsStateWithLifecycle() - Scaffold( topBar = { AppBar( diff --git a/app/src/main/java/com/nextcloud/talk/contacts/ContactsViewModel.kt b/app/src/main/java/com/nextcloud/talk/contacts/ContactsViewModel.kt index 2f47711c5..6fafeadd3 100644 --- a/app/src/main/java/com/nextcloud/talk/contacts/ContactsViewModel.kt +++ b/app/src/main/java/com/nextcloud/talk/contacts/ContactsViewModel.kt @@ -53,7 +53,7 @@ class ContactsViewModel @Inject constructor( _searchQuery.value = query } - fun modifyClickAddButton(value:Boolean){ + fun modifyClickAddButton(value: Boolean) { _clickAddButton.value = value } @@ -63,7 +63,7 @@ class ContactsViewModel @Inject constructor( _selectedContacts.value = _selectedContacts.value + contact } - fun updateAddButtonState() { + fun updateAddButtonState() { if (_selectedContacts.value.isEmpty()) { _enableAddButton.value = false } else { diff --git a/app/src/main/java/com/nextcloud/talk/contacts/components/AppBar.kt b/app/src/main/java/com/nextcloud/talk/contacts/components/AppBar.kt index a163abb94..ce7dcd67d 100644 --- a/app/src/main/java/com/nextcloud/talk/contacts/components/AppBar.kt +++ b/app/src/main/java/com/nextcloud/talk/contacts/components/AppBar.kt @@ -32,6 +32,7 @@ import com.nextcloud.talk.models.json.autocomplete.AutocompleteUser @SuppressLint("UnrememberedMutableState") @OptIn(ExperimentalMaterial3Api::class) +@Suppress("LongParameterList", "LongMethod") @Composable fun AppBar( title: String, @@ -44,7 +45,7 @@ fun AppBar( onUpdateSearchQuery: (String) -> Unit, onUpdateAutocompleteUsers: () -> Unit, enableAddButton: Boolean, - clickAddButton:(Boolean) -> Unit + clickAddButton: (Boolean) -> Unit ) { val context = LocalContext.current From 6e48b86940de73de74b648fa23051e464dc3fc07 Mon Sep 17 00:00:00 2001 From: sowjanyakch Date: Mon, 26 May 2025 16:58:08 +0200 Subject: [PATCH 10/17] suppress lint - property name Signed-off-by: sowjanyakch --- .../java/com/nextcloud/talk/contacts/ContactsViewModel.kt | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/app/src/main/java/com/nextcloud/talk/contacts/ContactsViewModel.kt b/app/src/main/java/com/nextcloud/talk/contacts/ContactsViewModel.kt index 6fafeadd3..4f85cbfc9 100644 --- a/app/src/main/java/com/nextcloud/talk/contacts/ContactsViewModel.kt +++ b/app/src/main/java/com/nextcloud/talk/contacts/ContactsViewModel.kt @@ -7,6 +7,7 @@ package com.nextcloud.talk.contacts +import android.annotation.SuppressLint import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import com.nextcloud.talk.models.json.autocomplete.AutocompleteUser @@ -36,11 +37,14 @@ class ContactsViewModel @Inject constructor( private val _isAddParticipantsView = MutableStateFlow(false) val isAddParticipantsView: StateFlow = _isAddParticipantsView + @Suppress("PropertyName") private val _enableAddButton = MutableStateFlow(false) val enableAddButton: StateFlow = _enableAddButton + @Suppress("PropertyName") private val _selectedContacts = MutableStateFlow>(emptyList()) + @SuppressLint("PropertyName") private val _clickAddButton = MutableStateFlow(false) private var hideAlreadyAddedParticipants: Boolean = false From 652dd5033ab5d70adec64dd8d584dd3b20dda3f5 Mon Sep 17 00:00:00 2001 From: sowjanyakch Date: Mon, 26 May 2025 18:20:48 +0200 Subject: [PATCH 11/17] use constants and proper names Signed-off-by: sowjanyakch --- .../nextcloud/talk/contacts/ContactsViewModel.kt | 4 ++-- .../talk/contacts/components/SearchComponent.kt | 13 ++++++++++--- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/com/nextcloud/talk/contacts/ContactsViewModel.kt b/app/src/main/java/com/nextcloud/talk/contacts/ContactsViewModel.kt index 4f85cbfc9..97d6a8ea2 100644 --- a/app/src/main/java/com/nextcloud/talk/contacts/ContactsViewModel.kt +++ b/app/src/main/java/com/nextcloud/talk/contacts/ContactsViewModel.kt @@ -37,11 +37,11 @@ class ContactsViewModel @Inject constructor( private val _isAddParticipantsView = MutableStateFlow(false) val isAddParticipantsView: StateFlow = _isAddParticipantsView - @Suppress("PropertyName") + @SuppressLint("PropertyName") private val _enableAddButton = MutableStateFlow(false) val enableAddButton: StateFlow = _enableAddButton - @Suppress("PropertyName") + @SuppressLint("PropertyName") private val _selectedContacts = MutableStateFlow>(emptyList()) @SuppressLint("PropertyName") diff --git a/app/src/main/java/com/nextcloud/talk/contacts/components/SearchComponent.kt b/app/src/main/java/com/nextcloud/talk/contacts/components/SearchComponent.kt index 79518353b..644314f09 100644 --- a/app/src/main/java/com/nextcloud/talk/contacts/components/SearchComponent.kt +++ b/app/src/main/java/com/nextcloud/talk/contacts/components/SearchComponent.kt @@ -40,15 +40,15 @@ fun SearchComponent( onDisableSearch: () -> Unit, isAddParticipants: Boolean ) { - var width_ratio = 0.85f + var widthRatio = SearchComponentCompanionClass.WIDTH_RATI0_SMALL if (!isAddParticipants) { - width_ratio = 1.0f + widthRatio = SearchComponentCompanionClass.WIDTH_RATIO_LARGE } val keyboardController = LocalSoftwareKeyboardController.current TextField( modifier = Modifier .background(MaterialTheme.colorScheme.background) - .fillMaxWidth(width_ratio) + .fillMaxWidth(widthRatio) .height(60.dp), value = text, onValueChange = { onTextChange(it) }, @@ -109,3 +109,10 @@ fun searchKeyboardActions(text: String, keyboardController: SoftwareKeyboardCont } } ) + +class SearchComponentCompanionClass { + companion object { + const val WIDTH_RATI0_SMALL = 0.85f + const val WIDTH_RATIO_LARGE = 1.0f + } +} From 4f8584bc759556a4c0825525beac55b19bcb2e9e Mon Sep 17 00:00:00 2001 From: sowjanyakch Date: Mon, 26 May 2025 19:42:53 +0200 Subject: [PATCH 12/17] remove already selected participants from the list Signed-off-by: sowjanyakch --- .../java/com/nextcloud/talk/contacts/ContactsViewModel.kt | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/app/src/main/java/com/nextcloud/talk/contacts/ContactsViewModel.kt b/app/src/main/java/com/nextcloud/talk/contacts/ContactsViewModel.kt index 97d6a8ea2..a96c6956b 100644 --- a/app/src/main/java/com/nextcloud/talk/contacts/ContactsViewModel.kt +++ b/app/src/main/java/com/nextcloud/talk/contacts/ContactsViewModel.kt @@ -114,6 +114,10 @@ class ContactsViewModel @Inject constructor( if (hideAlreadyAddedParticipants && !_clickAddButton.value) { contactsList?.removeAll(selectedParticipants.value) } + if (_clickAddButton.value) { + contactsList?.removeAll(selectedParticipants.value) + contactsList?.addAll(_selectedContacts.value) + } _contactsViewState.value = ContactsUiState.Success(contactsList) } catch (exception: Exception) { _contactsViewState.value = ContactsUiState.Error(exception.message ?: "") From f0cbe5113fe6a8979dd0410e0a0ea73b3746d589 Mon Sep 17 00:00:00 2001 From: sowjanyakch Date: Wed, 28 May 2025 22:10:49 +0200 Subject: [PATCH 13/17] remove add width ratio Signed-off-by: sowjanyakch --- .../nextcloud/talk/contacts/components/AppBar.kt | 3 +-- .../talk/contacts/components/SearchComponent.kt | 13 +------------ 2 files changed, 2 insertions(+), 14 deletions(-) diff --git a/app/src/main/java/com/nextcloud/talk/contacts/components/AppBar.kt b/app/src/main/java/com/nextcloud/talk/contacts/components/AppBar.kt index ce7dcd67d..b8a1f4373 100644 --- a/app/src/main/java/com/nextcloud/talk/contacts/components/AppBar.kt +++ b/app/src/main/java/com/nextcloud/talk/contacts/components/AppBar.kt @@ -89,8 +89,7 @@ fun AppBar( onUpdateSearchQuery(searchQuery) onUpdateAutocompleteUsers() }, - onDisableSearch = onDisableSearch, - isAddParticipants = isAddParticipants + onDisableSearch = onDisableSearch ) if (isAddParticipants) { diff --git a/app/src/main/java/com/nextcloud/talk/contacts/components/SearchComponent.kt b/app/src/main/java/com/nextcloud/talk/contacts/components/SearchComponent.kt index 644314f09..f6d14d338 100644 --- a/app/src/main/java/com/nextcloud/talk/contacts/components/SearchComponent.kt +++ b/app/src/main/java/com/nextcloud/talk/contacts/components/SearchComponent.kt @@ -38,17 +38,12 @@ fun SearchComponent( text: String, onTextChange: (String) -> Unit, onDisableSearch: () -> Unit, - isAddParticipants: Boolean ) { - var widthRatio = SearchComponentCompanionClass.WIDTH_RATI0_SMALL - if (!isAddParticipants) { - widthRatio = SearchComponentCompanionClass.WIDTH_RATIO_LARGE - } val keyboardController = LocalSoftwareKeyboardController.current TextField( modifier = Modifier .background(MaterialTheme.colorScheme.background) - .fillMaxWidth(widthRatio) + .fillMaxWidth() .height(60.dp), value = text, onValueChange = { onTextChange(it) }, @@ -110,9 +105,3 @@ fun searchKeyboardActions(text: String, keyboardController: SoftwareKeyboardCont } ) -class SearchComponentCompanionClass { - companion object { - const val WIDTH_RATI0_SMALL = 0.85f - const val WIDTH_RATIO_LARGE = 1.0f - } -} From 6d4e5d2774f603a8d94ff746d06d5fbd02a7e6b7 Mon Sep 17 00:00:00 2001 From: sowjanyakch Date: Wed, 28 May 2025 22:30:37 +0200 Subject: [PATCH 14/17] hide added groups/circles Signed-off-by: sowjanyakch --- .../talk/conversationinfo/ConversationInfoActivity.kt | 3 --- 1 file changed, 3 deletions(-) diff --git a/app/src/main/java/com/nextcloud/talk/conversationinfo/ConversationInfoActivity.kt b/app/src/main/java/com/nextcloud/talk/conversationinfo/ConversationInfoActivity.kt index dae77e153..3ab64c5cf 100644 --- a/app/src/main/java/com/nextcloud/talk/conversationinfo/ConversationInfoActivity.kt +++ b/app/src/main/java/com/nextcloud/talk/conversationinfo/ConversationInfoActivity.kt @@ -859,16 +859,13 @@ class ConversationInfoActivity : private fun selectParticipantsToAdd() { val bundle = Bundle() val existingParticipants = ArrayList() - for (userItem in userItems) { - if (userItem.model.calculatedActorType == USERS) { val user = AutocompleteUser( userItem.model.calculatedActorId!!, userItem.model.displayName, userItem.model.calculatedActorType.name.lowercase() ) existingParticipants.add(user) - } } bundle.putBoolean(BundleKeys.KEY_ADD_PARTICIPANTS, true) From 05815ebeaed67ced49ae699313403ddda9731232 Mon Sep 17 00:00:00 2001 From: sowjanyakch Date: Wed, 28 May 2025 23:02:13 +0200 Subject: [PATCH 15/17] bug with search view alignment Signed-off-by: sowjanyakch --- .../talk/contacts/components/AppBar.kt | 18 ++++++++++++------ .../contacts/components/SearchComponent.kt | 9 ++++----- 2 files changed, 16 insertions(+), 11 deletions(-) diff --git a/app/src/main/java/com/nextcloud/talk/contacts/components/AppBar.kt b/app/src/main/java/com/nextcloud/talk/contacts/components/AppBar.kt index b8a1f4373..cd0b521ac 100644 --- a/app/src/main/java/com/nextcloud/talk/contacts/components/AppBar.kt +++ b/app/src/main/java/com/nextcloud/talk/contacts/components/AppBar.kt @@ -13,6 +13,8 @@ import android.app.Activity import android.content.Intent import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.wrapContentWidth import androidx.compose.material.icons.Icons import androidx.compose.material.icons.automirrored.filled.ArrowBack import androidx.compose.material.icons.filled.Search @@ -48,9 +50,13 @@ fun AppBar( clickAddButton: (Boolean) -> Unit ) { val context = LocalContext.current - + val appTitle = if(!isSearchActive){ + title + }else{ + "" + } TopAppBar( - title = { Text(text = title) }, + title = { Text(text = appTitle) }, navigationIcon = { IconButton(onClick = { (context as? Activity)?.finish() @@ -82,19 +88,19 @@ fun AppBar( } ) if (isSearchActive) { - Row { + Row (modifier = Modifier.fillMaxWidth()) { SearchComponent( text = searchQuery, onTextChange = { searchQuery -> onUpdateSearchQuery(searchQuery) onUpdateAutocompleteUsers() }, - onDisableSearch = onDisableSearch + onDisableSearch = onDisableSearch, + modifier = Modifier.weight(1f) ) - if (isAddParticipants) { TextButton( - modifier = Modifier.align(Alignment.CenterVertically), + modifier = Modifier.align(Alignment.CenterVertically).wrapContentWidth(), onClick = { onDisableSearch() onUpdateSearchQuery("") diff --git a/app/src/main/java/com/nextcloud/talk/contacts/components/SearchComponent.kt b/app/src/main/java/com/nextcloud/talk/contacts/components/SearchComponent.kt index f6d14d338..6b8d55c36 100644 --- a/app/src/main/java/com/nextcloud/talk/contacts/components/SearchComponent.kt +++ b/app/src/main/java/com/nextcloud/talk/contacts/components/SearchComponent.kt @@ -8,7 +8,6 @@ package com.nextcloud.talk.contacts.components import androidx.compose.foundation.background -import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height import androidx.compose.foundation.text.KeyboardActions import androidx.compose.foundation.text.KeyboardOptions @@ -38,15 +37,15 @@ fun SearchComponent( text: String, onTextChange: (String) -> Unit, onDisableSearch: () -> Unit, + modifier:Modifier = Modifier ) { val keyboardController = LocalSoftwareKeyboardController.current TextField( - modifier = Modifier - .background(MaterialTheme.colorScheme.background) - .fillMaxWidth() - .height(60.dp), value = text, onValueChange = { onTextChange(it) }, + modifier = modifier + .background(MaterialTheme.colorScheme.background) + .height(60.dp), placeholder = { Text(text = stringResource(R.string.nc_search)) }, textStyle = TextStyle(fontSize = 16.sp), singleLine = true, From 87f8272b10d669b18dec87c909d7fad88f79d5d4 Mon Sep 17 00:00:00 2001 From: sowjanyakch Date: Wed, 28 May 2025 23:06:20 +0200 Subject: [PATCH 16/17] ktlintFormat Signed-off-by: sowjanyakch --- .../com/nextcloud/talk/contacts/ContactsViewModel.kt | 4 ---- .../com/nextcloud/talk/contacts/components/AppBar.kt | 6 +++--- .../talk/contacts/components/SearchComponent.kt | 3 +-- .../conversationinfo/ConversationInfoActivity.kt | 12 ++++++------ 4 files changed, 10 insertions(+), 15 deletions(-) diff --git a/app/src/main/java/com/nextcloud/talk/contacts/ContactsViewModel.kt b/app/src/main/java/com/nextcloud/talk/contacts/ContactsViewModel.kt index a96c6956b..3b46aafab 100644 --- a/app/src/main/java/com/nextcloud/talk/contacts/ContactsViewModel.kt +++ b/app/src/main/java/com/nextcloud/talk/contacts/ContactsViewModel.kt @@ -7,7 +7,6 @@ package com.nextcloud.talk.contacts -import android.annotation.SuppressLint import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import com.nextcloud.talk.models.json.autocomplete.AutocompleteUser @@ -37,14 +36,11 @@ class ContactsViewModel @Inject constructor( private val _isAddParticipantsView = MutableStateFlow(false) val isAddParticipantsView: StateFlow = _isAddParticipantsView - @SuppressLint("PropertyName") private val _enableAddButton = MutableStateFlow(false) val enableAddButton: StateFlow = _enableAddButton - @SuppressLint("PropertyName") private val _selectedContacts = MutableStateFlow>(emptyList()) - @SuppressLint("PropertyName") private val _clickAddButton = MutableStateFlow(false) private var hideAlreadyAddedParticipants: Boolean = false diff --git a/app/src/main/java/com/nextcloud/talk/contacts/components/AppBar.kt b/app/src/main/java/com/nextcloud/talk/contacts/components/AppBar.kt index cd0b521ac..0e3b709ea 100644 --- a/app/src/main/java/com/nextcloud/talk/contacts/components/AppBar.kt +++ b/app/src/main/java/com/nextcloud/talk/contacts/components/AppBar.kt @@ -50,9 +50,9 @@ fun AppBar( clickAddButton: (Boolean) -> Unit ) { val context = LocalContext.current - val appTitle = if(!isSearchActive){ + val appTitle = if (!isSearchActive) { title - }else{ + } else { "" } TopAppBar( @@ -88,7 +88,7 @@ fun AppBar( } ) if (isSearchActive) { - Row (modifier = Modifier.fillMaxWidth()) { + Row(modifier = Modifier.fillMaxWidth()) { SearchComponent( text = searchQuery, onTextChange = { searchQuery -> diff --git a/app/src/main/java/com/nextcloud/talk/contacts/components/SearchComponent.kt b/app/src/main/java/com/nextcloud/talk/contacts/components/SearchComponent.kt index 6b8d55c36..8e79c0484 100644 --- a/app/src/main/java/com/nextcloud/talk/contacts/components/SearchComponent.kt +++ b/app/src/main/java/com/nextcloud/talk/contacts/components/SearchComponent.kt @@ -37,7 +37,7 @@ fun SearchComponent( text: String, onTextChange: (String) -> Unit, onDisableSearch: () -> Unit, - modifier:Modifier = Modifier + modifier: Modifier = Modifier ) { val keyboardController = LocalSoftwareKeyboardController.current TextField( @@ -103,4 +103,3 @@ fun searchKeyboardActions(text: String, keyboardController: SoftwareKeyboardCont } } ) - diff --git a/app/src/main/java/com/nextcloud/talk/conversationinfo/ConversationInfoActivity.kt b/app/src/main/java/com/nextcloud/talk/conversationinfo/ConversationInfoActivity.kt index 3ab64c5cf..eb4782512 100644 --- a/app/src/main/java/com/nextcloud/talk/conversationinfo/ConversationInfoActivity.kt +++ b/app/src/main/java/com/nextcloud/talk/conversationinfo/ConversationInfoActivity.kt @@ -860,12 +860,12 @@ class ConversationInfoActivity : val bundle = Bundle() val existingParticipants = ArrayList() for (userItem in userItems) { - val user = AutocompleteUser( - userItem.model.calculatedActorId!!, - userItem.model.displayName, - userItem.model.calculatedActorType.name.lowercase() - ) - existingParticipants.add(user) + val user = AutocompleteUser( + userItem.model.calculatedActorId!!, + userItem.model.displayName, + userItem.model.calculatedActorType.name.lowercase() + ) + existingParticipants.add(user) } bundle.putBoolean(BundleKeys.KEY_ADD_PARTICIPANTS, true) From 6ec4e05cb19144632ed726216ec28c01fb27c645 Mon Sep 17 00:00:00 2001 From: Marcel Hibbe Date: Fri, 30 May 2025 09:46:38 +0200 Subject: [PATCH 17/17] suppress kltint warning about Property name not sure why "Property name should start with a lowercase letter and use camel case (cannot be auto-corrected)" is shown. also see commit 523b8080d1d4284e374820df86fa3d67da7d7246 Signed-off-by: Marcel Hibbe --- .../main/java/com/nextcloud/talk/contacts/ContactsViewModel.kt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/app/src/main/java/com/nextcloud/talk/contacts/ContactsViewModel.kt b/app/src/main/java/com/nextcloud/talk/contacts/ContactsViewModel.kt index 3b46aafab..64727b8a7 100644 --- a/app/src/main/java/com/nextcloud/talk/contacts/ContactsViewModel.kt +++ b/app/src/main/java/com/nextcloud/talk/contacts/ContactsViewModel.kt @@ -39,8 +39,10 @@ class ContactsViewModel @Inject constructor( private val _enableAddButton = MutableStateFlow(false) val enableAddButton: StateFlow = _enableAddButton + @Suppress("PropertyName") private val _selectedContacts = MutableStateFlow>(emptyList()) + @Suppress("PropertyName") private val _clickAddButton = MutableStateFlow(false) private var hideAlreadyAddedParticipants: Boolean = false