From 07cf834cc51bd4bb7c149bd666d634010e6a171c Mon Sep 17 00:00:00 2001 From: Marcel Hibbe Date: Fri, 8 Nov 2024 14:27:41 +0100 Subject: [PATCH 1/4] hide archiveConversationTextHint when archive not available Signed-off-by: Marcel Hibbe --- .../talk/conversationinfo/ConversationInfoActivity.kt | 6 +++--- 1 file changed, 3 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 56630615a..9f1809eee 100644 --- a/app/src/main/java/com/nextcloud/talk/conversationinfo/ConversationInfoActivity.kt +++ b/app/src/main/java/com/nextcloud/talk/conversationinfo/ConversationInfoActivity.kt @@ -403,10 +403,9 @@ class ConversationInfoActivity : } } - private fun webinaryRoomType(conversation: ConversationModel): Boolean { - return conversation.type == ConversationEnums.ConversationType.ROOM_GROUP_CALL || + private fun webinaryRoomType(conversation: ConversationModel): Boolean = + conversation.type == ConversationEnums.ConversationType.ROOM_GROUP_CALL || conversation.type == ConversationEnums.ConversationType.ROOM_PUBLIC_CALL - } private fun reconfigureLobbyTimerView(dateTime: Calendar? = null) { val isChecked = binding.webinarInfoView.lobbySwitch.isChecked @@ -794,6 +793,7 @@ class ConversationInfoActivity : if (!CapabilitiesUtil.isArchiveConversationsAvailable(spreedCapabilities)) { binding.archiveConversationBtn.visibility = GONE + binding.archiveConversationTextHint.visibility = GONE } binding.archiveConversationBtn.setOnClickListener { From 60925231464891f03080c2d66ce7802f22c7bbb5 Mon Sep 17 00:00:00 2001 From: Marcel Hibbe Date: Fri, 8 Nov 2024 14:44:55 +0100 Subject: [PATCH 2/4] delete isArchiveConversationsAvailable only more complex checks should be made in CapabilitiesUtil, just checking a capability should be done directly via hasSpreedFeatureCapability Signed-off-by: Marcel Hibbe --- .../ConversationInfoActivity.kt | 3 +- .../nextcloud/talk/utils/CapabilitiesUtil.kt | 58 +++++++------------ 2 files changed, 23 insertions(+), 38 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 9f1809eee..aed4473ef 100644 --- a/app/src/main/java/com/nextcloud/talk/conversationinfo/ConversationInfoActivity.kt +++ b/app/src/main/java/com/nextcloud/talk/conversationinfo/ConversationInfoActivity.kt @@ -77,6 +77,7 @@ import com.nextcloud.talk.shareditems.activities.SharedItemsActivity import com.nextcloud.talk.ui.dialog.DialogBanListFragment import com.nextcloud.talk.utils.ApiUtils import com.nextcloud.talk.utils.CapabilitiesUtil +import com.nextcloud.talk.utils.CapabilitiesUtil.hasSpreedFeatureCapability import com.nextcloud.talk.utils.ConversationUtils import com.nextcloud.talk.utils.DateConstants import com.nextcloud.talk.utils.DateUtils @@ -791,7 +792,7 @@ class ConversationInfoActivity : } } - if (!CapabilitiesUtil.isArchiveConversationsAvailable(spreedCapabilities)) { + if (!hasSpreedFeatureCapability(spreedCapabilities, SpreedFeatures.ARCHIVE_CONVERSATIONS)) { binding.archiveConversationBtn.visibility = GONE binding.archiveConversationTextHint.visibility = GONE } diff --git a/app/src/main/java/com/nextcloud/talk/utils/CapabilitiesUtil.kt b/app/src/main/java/com/nextcloud/talk/utils/CapabilitiesUtil.kt index 996262296..54bb10e2f 100644 --- a/app/src/main/java/com/nextcloud/talk/utils/CapabilitiesUtil.kt +++ b/app/src/main/java/com/nextcloud/talk/utils/CapabilitiesUtil.kt @@ -84,14 +84,11 @@ object CapabilitiesUtil { //region CoreCapabilities @JvmStatic - fun isLinkPreviewAvailable(user: User): Boolean { - return user.capabilities?.coreCapability?.referenceApi != null && + fun isLinkPreviewAvailable(user: User): Boolean = + user.capabilities?.coreCapability?.referenceApi != null && user.capabilities?.coreCapability?.referenceApi == "true" - } - fun canGeneratePrettyURL(user: User): Boolean { - return user.capabilities?.coreCapability?.modRewriteWorking == true - } + fun canGeneratePrettyURL(user: User): Boolean = user.capabilities?.coreCapability?.modRewriteWorking == true // endregion @@ -105,9 +102,8 @@ object CapabilitiesUtil { return false } - fun isSharedItemsAvailable(spreedCapabilities: SpreedCapability): Boolean { - return hasSpreedFeatureCapability(spreedCapabilities, SpreedFeatures.RICH_OBJECT_LIST_MEDIA) - } + fun isSharedItemsAvailable(spreedCapabilities: SpreedCapability): Boolean = + hasSpreedFeatureCapability(spreedCapabilities, SpreedFeatures.RICH_OBJECT_LIST_MEDIA) fun getMessageMaxLength(spreedCapabilities: SpreedCapability): Int { if (spreedCapabilities.config?.containsKey("chat") == true) { @@ -157,16 +153,14 @@ object CapabilitiesUtil { return "/Talk" } - fun isConversationDescriptionEndpointAvailable(spreedCapabilities: SpreedCapability): Boolean { - return hasSpreedFeatureCapability(spreedCapabilities, SpreedFeatures.ROOM_DESCRIPTION) - } + fun isConversationDescriptionEndpointAvailable(spreedCapabilities: SpreedCapability): Boolean = + hasSpreedFeatureCapability(spreedCapabilities, SpreedFeatures.ROOM_DESCRIPTION) - fun isUnifiedSearchAvailable(spreedCapabilities: SpreedCapability): Boolean { - return hasSpreedFeatureCapability(spreedCapabilities, SpreedFeatures.UNIFIED_SEARCH) - } + fun isUnifiedSearchAvailable(spreedCapabilities: SpreedCapability): Boolean = + hasSpreedFeatureCapability(spreedCapabilities, SpreedFeatures.UNIFIED_SEARCH) - fun isAbleToCall(spreedCapabilities: SpreedCapability): Boolean { - return if ( + fun isAbleToCall(spreedCapabilities: SpreedCapability): Boolean = + if ( spreedCapabilities.config?.containsKey("call") == true && spreedCapabilities.config!!["call"] != null && spreedCapabilities.config!!["call"]!!.containsKey("enabled") @@ -176,7 +170,6 @@ object CapabilitiesUtil { // older nextcloud versions without the capability can't disable the calls true } - } fun isCallReactionsSupported(user: User?): Boolean { if (user?.capabilities != null) { @@ -188,12 +181,11 @@ object CapabilitiesUtil { return false } - fun isTranslationsSupported(spreedCapabilities: SpreedCapability): Boolean { - return spreedCapabilities.config?.containsKey("chat") == true && + fun isTranslationsSupported(spreedCapabilities: SpreedCapability): Boolean = + spreedCapabilities.config?.containsKey("chat") == true && spreedCapabilities.config!!["chat"] != null && spreedCapabilities.config!!["chat"]!!.containsKey("has-translation-providers") && spreedCapabilities.config!!["chat"]!!["has-translation-providers"] == true - } fun getRecordingConsentType(spreedCapabilities: SpreedCapability): Int { if ( @@ -213,9 +205,8 @@ object CapabilitiesUtil { return RECORDING_CONSENT_NOT_REQUIRED } - fun isBanningAvailable(spreedCapabilities: SpreedCapability): Boolean { - return hasSpreedFeatureCapability(spreedCapabilities, SpreedFeatures.BAN_V1) - } + fun isBanningAvailable(spreedCapabilities: SpreedCapability): Boolean = + hasSpreedFeatureCapability(spreedCapabilities, SpreedFeatures.BAN_V1) // endregion @@ -249,16 +240,11 @@ object CapabilitiesUtil { return false } - fun isFederationAvailable(user: User): Boolean { - return hasSpreedFeatureCapability(user.capabilities!!.spreedCapability!!, SpreedFeatures.FEDERATION_V1) && + fun isFederationAvailable(user: User): Boolean = + hasSpreedFeatureCapability(user.capabilities!!.spreedCapability!!, SpreedFeatures.FEDERATION_V1) && user.capabilities!!.spreedCapability!!.config?.containsKey("federation") == true && user.capabilities!!.spreedCapability!!.config!!["federation"] != null && user.capabilities!!.spreedCapability!!.config!!["federation"]!!.containsKey("enabled") - } - - fun isArchiveConversationsAvailable(spreedCapabilities: SpreedCapability): Boolean { - return hasSpreedFeatureCapability(spreedCapabilities, SpreedFeatures.ARCHIVE_CONVERSATIONS) - } // endregion @@ -275,20 +261,18 @@ object CapabilitiesUtil { //region ProvisioningCapabilities - fun canEditScopes(user: User): Boolean { - return user.capabilities?.provisioningCapability?.accountPropertyScopesVersion != null && + fun canEditScopes(user: User): Boolean = + user.capabilities?.provisioningCapability?.accountPropertyScopesVersion != null && user.capabilities!!.provisioningCapability!!.accountPropertyScopesVersion!! > 1 - } // endregion //region UserStatusCapabilities @JvmStatic - fun isUserStatusAvailable(user: User): Boolean { - return user.capabilities?.userStatusCapability?.enabled == true && + fun isUserStatusAvailable(user: User): Boolean = + user.capabilities?.userStatusCapability?.enabled == true && user.capabilities?.userStatusCapability?.supportsEmoji == true - } // endregion From 2a2f8a8148c34534353f8b1274b29eca2f845c14 Mon Sep 17 00:00:00 2001 From: Marcel Hibbe Date: Fri, 8 Nov 2024 14:46:56 +0100 Subject: [PATCH 3/4] hide archivedFilterChip when capability is not available Otherwise it would be shown for older NC versions without to be useful Signed-off-by: Marcel Hibbe --- .../talk/ui/dialog/FilterConversationFragment.kt | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/com/nextcloud/talk/ui/dialog/FilterConversationFragment.kt b/app/src/main/java/com/nextcloud/talk/ui/dialog/FilterConversationFragment.kt index 6eb3c1719..852a32bb6 100644 --- a/app/src/main/java/com/nextcloud/talk/ui/dialog/FilterConversationFragment.kt +++ b/app/src/main/java/com/nextcloud/talk/ui/dialog/FilterConversationFragment.kt @@ -22,6 +22,8 @@ import com.nextcloud.talk.conversationlist.ConversationsListActivity import com.nextcloud.talk.databinding.DialogFilterConversationBinding import com.nextcloud.talk.ui.theme.ViewThemeUtils import com.nextcloud.talk.users.UserManager +import com.nextcloud.talk.utils.CapabilitiesUtil.hasSpreedFeatureCapability +import com.nextcloud.talk.utils.SpreedFeatures import com.nextcloud.talk.utils.UserIdUtils import javax.inject.Inject @@ -104,7 +106,14 @@ class FilterConversationFragment : DialogFragment() { private fun setUpChips() { binding.unreadFilterChip.isChecked = filterState[UNREAD]!! binding.mentionedFilterChip.isChecked = filterState[MENTION]!! - binding.archivedFilterChip.isChecked = filterState[ARCHIVE]!! + + binding.archivedFilterChip.visibility = View.GONE + userManager.currentUser.blockingGet().capabilities?.spreedCapability?.let { + if (hasSpreedFeatureCapability(it, SpreedFeatures.ARCHIVE_CONVERSATIONS)) { + binding.archivedFilterChip.visibility = View.VISIBLE + binding.archivedFilterChip.isChecked = filterState[ARCHIVE]!! + } + } } private fun processSubmit() { From 1968d4369137a10e4ad0d95a2458bdb88510d503 Mon Sep 17 00:00:00 2001 From: Marcel Hibbe Date: Mon, 11 Nov 2024 15:43:27 +0100 Subject: [PATCH 4/4] require archived-conversations-v2 For archived conversations, require "-v2". This is done because on server api, "archived-conversations" was already released for 20.0.2 by mistake which should have only be done for 20.1 As it's planned to release android talk 20.0.3 with a fresh master state, the archived conversations feature must be hidden manually, This is done by required "-v2". Either it's served as this in the future or it can be removed for the 20.1.0 release. Signed-off-by: Marcel Hibbe --- app/src/main/java/com/nextcloud/talk/utils/CapabilitiesUtil.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/com/nextcloud/talk/utils/CapabilitiesUtil.kt b/app/src/main/java/com/nextcloud/talk/utils/CapabilitiesUtil.kt index 54bb10e2f..1b9d67296 100644 --- a/app/src/main/java/com/nextcloud/talk/utils/CapabilitiesUtil.kt +++ b/app/src/main/java/com/nextcloud/talk/utils/CapabilitiesUtil.kt @@ -56,7 +56,7 @@ enum class SpreedFeatures(val value: String) { DELETE_MESSAGES_UNLIMITED("delete-messages-unlimited"), BAN_V1("ban-v1"), EDIT_MESSAGES_NOTE_TO_SELF("edit-messages-note-to-self"), - ARCHIVE_CONVERSATIONS("archived-conversations") + ARCHIVE_CONVERSATIONS("archived-conversations-v2") } @Suppress("TooManyFunctions")