diff --git a/app/src/main/java/com/nextcloud/talk/controllers/ConversationInfoController.kt b/app/src/main/java/com/nextcloud/talk/controllers/ConversationInfoController.kt index b2edaa5c3..d1c993e0d 100644 --- a/app/src/main/java/com/nextcloud/talk/controllers/ConversationInfoController.kt +++ b/app/src/main/java/com/nextcloud/talk/controllers/ConversationInfoController.kt @@ -613,13 +613,13 @@ class ConversationInfoController(args: Bundle) : setupWebinaryView() - if (!conversation!!.canLeave()) { + if (!conversation!!.canLeave(conversationUser)) { binding.leaveConversationAction.visibility = View.GONE } else { binding.leaveConversationAction.visibility = View.VISIBLE } - if (!conversation!!.canDelete()) { + if (!conversation!!.canDelete(conversationUser)) { binding.deleteConversationAction.visibility = View.GONE } else { binding.deleteConversationAction.visibility = View.VISIBLE @@ -662,7 +662,7 @@ class ConversationInfoController(args: Bundle) : } override fun onError(e: Throwable) { - // unused atm + Log.e(TAG, "failed to fetch room info", e) } override fun onComplete() { diff --git a/app/src/main/java/com/nextcloud/talk/models/json/conversations/Conversation.java b/app/src/main/java/com/nextcloud/talk/models/json/conversations/Conversation.java index 82e557b29..2888d105d 100644 --- a/app/src/main/java/com/nextcloud/talk/models/json/conversations/Conversation.java +++ b/app/src/main/java/com/nextcloud/talk/models/json/conversations/Conversation.java @@ -148,12 +148,23 @@ public class Conversation { return (canModerate(conversationUser) && !ConversationType.ROOM_TYPE_ONE_TO_ONE_CALL.equals(type)); } - public boolean canLeave() { - return canLeaveConversation; + public boolean canLeave(UserEntity conversationUser) { + if (canLeaveConversation != null) { + // Available since APIv2 + return canLeaveConversation; + } + // Fallback for APIv1 + return !canModerate(conversationUser) || + (getType() != ConversationType.ROOM_TYPE_ONE_TO_ONE_CALL && this.participants.size() > 1); } - public boolean canDelete() { - return canDeleteConversation; + public boolean canDelete(UserEntity conversationUser) { + if (canDeleteConversation != null) { + // Available since APIv2 + return canDeleteConversation; + } + // Fallback for APIv1 + return canModerate(conversationUser); } public String getRoomId() { 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 ff2b9db97..4679dc4e4 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 @@ -157,7 +157,7 @@ class ConversationsListBottomDialog( ) binding.conversationOperationLeave.visibility = setVisibleIf( - conversation.canLeave() && + conversation.canLeave(currentUser) && // leaving is by api not possible for the last user with moderator permissions. // for now, hide this option for all moderators. !conversation.canModerate(currentUser)