From a6055e52e83ce4afe1ee8f3436bb61afaa12b55b Mon Sep 17 00:00:00 2001 From: rapterjet2004 Date: Thu, 16 Jan 2025 15:08:06 -0600 Subject: [PATCH 1/4] Archived conversation improvements - First commit - Made options yellow - Now possible to archive/unarchive conversations from dialog - Now possible to archive and unarchive conversations in settings without leaving the screen - Better UX - Unread message bubble fix - no longer shows up when archive filter is set Signed-off-by: rapterjet2004 --- .../ConversationInfoActivity.kt | 1 + .../ConversationsListActivity.kt | 12 +++++++ .../dialog/ConversationsListBottomDialog.kt | 24 +++++++++++++ .../res/layout/activity_conversation_info.xml | 6 ++-- .../res/layout/activity_conversations.xml | 34 ++++++++++++++++++- .../layout/dialog_conversation_operations.xml | 31 +++++++++++++++++ app/src/main/res/values/strings.xml | 1 + 7 files changed, 106 insertions(+), 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 21de3d37fe..c6928a5595 100644 --- a/app/src/main/java/com/nextcloud/talk/conversationinfo/ConversationInfoActivity.kt +++ b/app/src/main/java/com/nextcloud/talk/conversationinfo/ConversationInfoActivity.kt @@ -820,6 +820,7 @@ class ConversationInfoActivity : binding.archiveConversationTextHint.text = resources.getString(R.string.unarchive_hint) } } + viewModel.getRoom(conversationUser, conversationToken) } if (conversation!!.hasArchived) { diff --git a/app/src/main/java/com/nextcloud/talk/conversationlist/ConversationsListActivity.kt b/app/src/main/java/com/nextcloud/talk/conversationlist/ConversationsListActivity.kt index 1485a0018e..ae3e4242c4 100644 --- a/app/src/main/java/com/nextcloud/talk/conversationlist/ConversationsListActivity.kt +++ b/app/src/main/java/com/nextcloud/talk/conversationlist/ConversationsListActivity.kt @@ -455,8 +455,20 @@ class ConversationsListActivity : newItems.add(i) } } + + val archiveFilterOn = filterState[FilterConversationFragment.ARCHIVE] ?: false + if (archiveFilterOn && newItems.isEmpty()) { + binding.noArchivedConversationLayout.visibility = View.VISIBLE + } else { + binding.noArchivedConversationLayout.visibility = View.GONE + } + adapter!!.updateDataSet(newItems, true) setFilterableItems(newItems) + if (archiveFilterOn) { + // Never a notification from archived conversations + binding.newMentionPopupBubble.visibility = View.GONE + } updateFilterConversationButtonColor() } diff --git a/app/src/main/java/com/nextcloud/talk/ui/dialog/ConversationsListBottomDialog.kt b/app/src/main/java/com/nextcloud/talk/ui/dialog/ConversationsListBottomDialog.kt index 3149e153b9..c5f4af4b86 100644 --- a/app/src/main/java/com/nextcloud/talk/ui/dialog/ConversationsListBottomDialog.kt +++ b/app/src/main/java/com/nextcloud/talk/ui/dialog/ConversationsListBottomDialog.kt @@ -26,6 +26,7 @@ import com.nextcloud.talk.api.NcApi import com.nextcloud.talk.api.NcApiCoroutines import com.nextcloud.talk.application.NextcloudTalkApplication import com.nextcloud.talk.conversation.RenameConversationDialogFragment +import com.nextcloud.talk.conversationinfo.viewmodel.ConversationInfoViewModel import com.nextcloud.talk.conversationlist.ConversationsListActivity import com.nextcloud.talk.data.user.model.User import com.nextcloud.talk.databinding.DialogConversationOperationsBinding @@ -68,6 +69,9 @@ class ConversationsListBottomDialog( @Inject lateinit var viewThemeUtils: ViewThemeUtils + @Inject + lateinit var conversationInfoViewModel: ConversationInfoViewModel + @Inject lateinit var userManager: UserManager @@ -189,6 +193,26 @@ class ConversationsListBottomDialog( dismiss() } + binding.conversationArchiveText.text = if (conversation.hasArchived) { + this.activity.resources.getString(R.string.unarchive_conversation) + } else { + this.activity.resources.getString(R.string.archive_conversation) + } + + binding.conversationArchive.setOnClickListener { + val currentUser = userManager.currentUser.blockingGet() + val token = conversation.token + lifecycleScope.launch { + if (conversation.hasArchived) { + conversationInfoViewModel.unarchiveConversation(currentUser, token) + } else { + conversationInfoViewModel.archiveConversation(currentUser, token) + } + } + activity.fetchRooms() + dismiss() + } + binding.conversationOperationRename.setOnClickListener { renameConversation() } diff --git a/app/src/main/res/layout/activity_conversation_info.xml b/app/src/main/res/layout/activity_conversation_info.xml index f1c830ca33..b80647ee7d 100644 --- a/app/src/main/res/layout/activity_conversation_info.xml +++ b/app/src/main/res/layout/activity_conversation_info.xml @@ -447,7 +447,7 @@ android:layout_marginEnd="@dimen/standard_margin" android:contentDescription="@null" tools:src="@drawable/outline_archive_24" - app:tint="@color/grey_600" /> + app:tint="@color/nc_darkYellow" /> @@ -464,7 +465,8 @@ android:layout_marginHorizontal="@dimen/standard_margin" android:layout_width="match_parent" android:layout_height="wrap_content" - android:text="@string/archive_hint" /> + android:text="@string/archive_hint" + android:textColor="@color/nc_darkYellow"/> + tools:visibility="gone"> + + + + + + + + + + + + + + %1$s is out of office today Replacement: Resend + No conversations archived From 71af112a8c20f8f562ac6977b6fcc1d5877d0f97 Mon Sep 17 00:00:00 2001 From: Marcel Hibbe Date: Thu, 23 Jan 2025 10:59:40 +0100 Subject: [PATCH 2/4] change "No conversations archived" screen design Signed-off-by: Marcel Hibbe --- app/src/main/res/layout/activity_conversations.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/src/main/res/layout/activity_conversations.xml b/app/src/main/res/layout/activity_conversations.xml index 75b5821109..5a30ddb162 100644 --- a/app/src/main/res/layout/activity_conversations.xml +++ b/app/src/main/res/layout/activity_conversations.xml @@ -223,8 +223,8 @@ android:layout_width="match_parent" android:layout_height="72dp" android:contentDescription="@string/nc_app_product_name" - android:src="@drawable/ic_list_empty_error" - app:tint="@color/hwSecurityRed" /> + android:src="@drawable/outline_archive_24" + app:tint="@color/grey_600" /> From 3427f4ce5087f2f9639b54b1113577704f731574 Mon Sep 17 00:00:00 2001 From: Marcel Hibbe Date: Thu, 23 Jan 2025 11:25:01 +0100 Subject: [PATCH 3/4] change "Archive conversation" design in conversation-info screen Signed-off-by: Marcel Hibbe --- .../res/layout/activity_conversation_info.xml | 77 +++++++++---------- 1 file changed, 35 insertions(+), 42 deletions(-) diff --git a/app/src/main/res/layout/activity_conversation_info.xml b/app/src/main/res/layout/activity_conversation_info.xml index b80647ee7d..9da666b8bf 100644 --- a/app/src/main/res/layout/activity_conversation_info.xml +++ b/app/src/main/res/layout/activity_conversation_info.xml @@ -410,7 +410,6 @@ android:orientation="horizontal" android:background="?android:attr/selectableItemBackground"> - - - - - - - - - - - - - + + + + + + + + + Date: Thu, 23 Jan 2025 12:03:16 +0100 Subject: [PATCH 4/4] Show snackbar on archive/unarchive from bottomDialog Signed-off-by: Marcel Hibbe --- .../dialog/ConversationsListBottomDialog.kt | 39 +++++++++++++------ app/src/main/res/values/strings.xml | 2 + 2 files changed, 30 insertions(+), 11 deletions(-) diff --git a/app/src/main/java/com/nextcloud/talk/ui/dialog/ConversationsListBottomDialog.kt b/app/src/main/java/com/nextcloud/talk/ui/dialog/ConversationsListBottomDialog.kt index c5f4af4b86..8bf06bf703 100644 --- a/app/src/main/java/com/nextcloud/talk/ui/dialog/ConversationsListBottomDialog.kt +++ b/app/src/main/java/com/nextcloud/talk/ui/dialog/ConversationsListBottomDialog.kt @@ -200,17 +200,7 @@ class ConversationsListBottomDialog( } binding.conversationArchive.setOnClickListener { - val currentUser = userManager.currentUser.blockingGet() - val token = conversation.token - lifecycleScope.launch { - if (conversation.hasArchived) { - conversationInfoViewModel.unarchiveConversation(currentUser, token) - } else { - conversationInfoViewModel.archiveConversation(currentUser, token) - } - } - activity.fetchRooms() - dismiss() + handleArchiving() } binding.conversationOperationRename.setOnClickListener { @@ -226,6 +216,33 @@ class ConversationsListBottomDialog( } } + private fun handleArchiving() { + val currentUser = userManager.currentUser.blockingGet() + val token = conversation.token + lifecycleScope.launch { + if (conversation.hasArchived) { + conversationInfoViewModel.unarchiveConversation(currentUser, token) + activity.showSnackbar( + String.format( + context.resources.getString(R.string.unarchived_conversation), + conversation.displayName + ) + ) + dismiss() + } else { + conversationInfoViewModel.archiveConversation(currentUser, token) + activity.showSnackbar( + String.format( + context.resources.getString(R.string.archived_conversation), + conversation.displayName + ) + ) + dismiss() + } + } + activity.fetchRooms() + } + @Suppress("Detekt.TooGenericExceptionCaught") @SuppressLint("StringFormatInvalid", "TooGenericExceptionCaught") private fun addConversationToFavorites() { diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 8731479ad4..e4fe172ab6 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -848,4 +848,6 @@ How to translate with transifex: Replacement: Resend No conversations archived + Archived %1$s + Unarchived %1$s