diff --git a/app/src/main/java/com/nextcloud/talk/controllers/ConversationInfoController.java b/app/src/main/java/com/nextcloud/talk/controllers/ConversationInfoController.java index e521945e7..d39ba98f3 100644 --- a/app/src/main/java/com/nextcloud/talk/controllers/ConversationInfoController.java +++ b/app/src/main/java/com/nextcloud/talk/controllers/ConversationInfoController.java @@ -364,13 +364,13 @@ public class ConversationInfoController extends BaseController { ownOptionsCategory.setVisibility(View.VISIBLE); - if (!conversation.canLeave()) { + if (!conversation.canLeave(conversationUser)) { leaveConversationAction.setVisibility(View.GONE); } else { leaveConversationAction.setVisibility(View.VISIBLE); } - if (!conversation.canModerate()) { + if (!conversation.canModerate(conversationUser)) { deleteConversationAction.setVisibility(View.GONE); } else { deleteConversationAction.setVisibility(View.VISIBLE); diff --git a/app/src/main/java/com/nextcloud/talk/controllers/bottomsheet/CallMenuController.java b/app/src/main/java/com/nextcloud/talk/controllers/bottomsheet/CallMenuController.java index 2fb650978..f6161b2f1 100644 --- a/app/src/main/java/com/nextcloud/talk/controllers/bottomsheet/CallMenuController.java +++ b/app/src/main/java/com/nextcloud/talk/controllers/bottomsheet/CallMenuController.java @@ -157,12 +157,12 @@ public class CallMenuController extends BaseController implements FlexibleAdapte , 98, DisplayUtils.getTintedDrawable(getResources(), R.drawable.ic_star_black_24dp, R.color.grey_600))); } - if (conversation.isNameEditable()) { + if (conversation.isNameEditable(currentUser)) { menuItems.add(new MenuItem(getResources().getString(R.string.nc_rename), 2, getResources().getDrawable(R.drawable .ic_pencil_grey600_24dp))); } - if (conversation.canModerate() && !currentUser.hasSpreedCapabilityWithName("locked-one-to-one-rooms")) { + if (conversation.canModerate(currentUser)) { if (!conversation.isPublic()) { menuItems.add(new MenuItem(getResources().getString(R.string.nc_make_call_public), 3, getResources().getDrawable(R.drawable .ic_link_grey600_24px))); @@ -185,14 +185,14 @@ public class CallMenuController extends BaseController implements FlexibleAdapte if (conversation.isPublic()) { menuItems.add(new MenuItem(getResources().getString(R.string.nc_share_link), 7, getResources().getDrawable(R.drawable .ic_link_grey600_24px))); - if (conversation.canModerate()) { + if (conversation.canModerate(currentUser)) { menuItems.add(new MenuItem(getResources().getString(R.string.nc_make_call_private), 8, getResources().getDrawable(R.drawable .ic_group_grey600_24px))); } } - if (conversation.canLeave()) { + if (conversation.canLeave(currentUser)) { menuItems.add(new MenuItem(getResources().getString(R.string.nc_leave), 1, getResources().getDrawable(R.drawable .ic_close_grey600_24dp))); } diff --git a/app/src/main/java/com/nextcloud/talk/models/json/rooms/Conversation.java b/app/src/main/java/com/nextcloud/talk/models/json/rooms/Conversation.java index 04e2f8ea2..25bad379e 100644 --- a/app/src/main/java/com/nextcloud/talk/models/json/rooms/Conversation.java +++ b/app/src/main/java/com/nextcloud/talk/models/json/rooms/Conversation.java @@ -25,6 +25,7 @@ import com.bluelinelabs.logansquare.annotation.JsonField; import com.bluelinelabs.logansquare.annotation.JsonObject; import com.nextcloud.talk.R; import com.nextcloud.talk.application.NextcloudTalkApplication; +import com.nextcloud.talk.models.database.UserEntity; import com.nextcloud.talk.models.json.chat.ChatMessage; import com.nextcloud.talk.models.json.converters.EnumNotificationLevelConverter; import com.nextcloud.talk.models.json.converters.EnumParticipantTypeConverter; @@ -90,17 +91,22 @@ public class Conversation { Participant.ParticipantType.USER_FOLLOWING_LINK.equals(participantType)); } - public boolean canModerate() { + + private boolean isLockedOneToOne(UserEntity conversationUser) { + return (getType() == ConversationType.ROOM_TYPE_ONE_TO_ONE_CALL && conversationUser.hasSpreedCapabilityWithName("locked-one-to-one-rooms")); + } + + public boolean canModerate(UserEntity conversationUser) { return (Participant.ParticipantType.OWNER.equals(participantType) - || Participant.ParticipantType.MODERATOR.equals(participantType)); + || Participant.ParticipantType.MODERATOR.equals(participantType) && !isLockedOneToOne(conversationUser)); } - public boolean isNameEditable() { - return (canModerate() && !ConversationType.ROOM_TYPE_ONE_TO_ONE_CALL.equals(type)); + public boolean isNameEditable(UserEntity conversationUser) { + return (canModerate(conversationUser) && !ConversationType.ROOM_TYPE_ONE_TO_ONE_CALL.equals(type)); } - public boolean canLeave() { - return !canModerate() || (getType() != ConversationType.ROOM_TYPE_ONE_TO_ONE_CALL && getParticipants().size() > 1); + public boolean canLeave(UserEntity conversationUser) { + return !canModerate(conversationUser) || (getType() != ConversationType.ROOM_TYPE_ONE_TO_ONE_CALL && getParticipants().size() > 1); }