Browse Source

Adjust logic for one2one rooms

Signed-off-by: Mario Danic <mario@lovelyhq.com>
Mario Danic 6 năm trước cách đây
mục cha
commit
0454d13085

+ 2 - 2
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);

+ 4 - 4
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)));
             }

+ 12 - 6
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);
 
     }