Explorar el Código

私聊权限的修改

jixionghui hace 4 años
padre
commit
3df928d6dd

+ 45 - 4
skWeiChatBaidu/src/main/java/com/liaobo/im/ui/message/MucChatActivity.java

@@ -179,6 +179,7 @@ public class MucChatActivity extends BaseActivity implements
     private String mLoginUserId;
     private String mLoginNickName;
     private String instantMessage;
+    private MucRoom mucRoom;
     // 是否为通知栏进入
     private boolean isNotificationComing;
     // 当前聊天对象的UserId(就是房间jid)
@@ -781,6 +782,9 @@ public class MucChatActivity extends BaseActivity implements
      ***************************************/
     @Override
     public void onMyAvatarClick() {
+        if ((mucRoom==null || mucRoom.getAllowSendCard()==0) && mucRoom.getMember()!=null && mucRoom.getMember().getRole()==3 ){
+            return;
+        }
         mChatBottomView.reset();
         mChatBottomView.postDelayed(new Runnable() {
             @Override
@@ -792,10 +796,45 @@ public class MucChatActivity extends BaseActivity implements
         }, 100);
     }
 
+    /**
+     * allowSendCard 值为0时,不允许普通成员之间不能相互查看资料,但可以查看群主与管理员的资料
+     * @param friendUserId 被点击的用户Id
+     * @return
+     */
+    private boolean isAllowSecretlyChat(String friendUserId,boolean isAllowCache){
+        RoomMember itemMember = filterMucRoomMemberByUserId(friendUserId);
+        if ( itemMember ==null ) {
+            return false;
+        }
+        if (!isAllowCache){
+            if (itemMember.getRole()==3){
+                return false;
+            }
+        }
+        return true;
+    }
+
+    private RoomMember filterMucRoomMemberByUserId(String friendUserId){
+        if (mChatContentView ==null){
+            return null;
+        }
+       List<RoomMember> list = mChatContentView.getRoomMemberList();
+       if (list !=null) {
+           for (RoomMember member: list) {
+               if (member.getUserId().equals(friendUserId) ){
+                   return member;
+               }
+           }
+       }
+       return null;
+    }
+
+
     @Override
     public void onFriendAvatarClick(final String friendUserId) {
-        boolean isAllowSecretlyChat = PreferenceUtils.getBoolean(mContext, Constants.IS_SEND_CARD + mUseId, true);
-        if (isAllowSecretlyChat || isOk()) {
+        boolean isAllowCache = PreferenceUtils.getBoolean(mContext, Constants.IS_SEND_CARD + mUseId, true);
+        boolean isAllow = isAllowSecretlyChat(friendUserId,isAllowCache);
+        if (isAllow){
             mChatBottomView.reset();
             mChatBottomView.postDelayed(new Runnable() {
                 @Override
@@ -803,9 +842,10 @@ public class MucChatActivity extends BaseActivity implements
                     BasicInfoActivity.start(mContext, friendUserId, BasicInfoActivity.FROM_ADD_TYPE_GROUP);
                 }
             }, 100);
-        } else {
+        }else {
             tip(getString(R.string.tip_member_disable_privately_chat));
         }
+
     }
 
     // 长按头像@群成员
@@ -2433,6 +2473,7 @@ public class MucChatActivity extends BaseActivity implements
                     }
                 });
     }
+    private  List<RoomMember> mRoomMemberList;
 
     private void initRoomMember() {
         if (mFriend.getGroupStatus() == 0) {// 正常状态
@@ -2745,7 +2786,7 @@ public class MucChatActivity extends BaseActivity implements
                              @Override
                              public void onResponse(ObjectResult<MucRoom> result) {
                                  if (result.getResultCode() == 1 && result.getData() != null) {
-                                     final MucRoom mucRoom = result.getData();
+                                     mucRoom = result.getData();
                                      update(mucRoom, isAtAction);
                                  } else {
                                      ToastUtil.showErrorData(mContext);

+ 38 - 7
skWeiChatBaidu/src/main/java/com/liaobo/im/ui/message/multi/RoomInfoActivity.java

@@ -124,6 +124,7 @@ public class RoomInfoActivity extends BaseActivity {
     private SwitchButton mSbShield;
     // 全体禁言
     private SwitchButton mSbAllShutUp;
+    private SwitchButton mSbAllowSendCard;
     private Button mBtnQuitRoom;
     private ImageView mExpandIv;
     private ExpandView mExpandView;
@@ -201,6 +202,13 @@ public class RoomInfoActivity extends BaseActivity {
                         updateSingleAttribute("talkTime", String.valueOf(0));
                     }
                     break;
+                case R.id.switch_send_card:
+                    if (isChecked){
+                        updateSingleAttribute("allowSendCard", "1");
+                    }else {
+                        updateSingleAttribute("allowSendCard","0");
+                    }
+                    break;
             }
         }
     };
@@ -343,6 +351,8 @@ public class RoomInfoActivity extends BaseActivity {
         mSbShield = (SwitchButton) footer.findViewById(R.id.sb_shield_chat);
 
         mSbAllShutUp = (SwitchButton) footer.findViewById(R.id.sb_banned);
+        mSbAllowSendCard = footer.findViewById(R.id.switch_send_card);
+
 
         gongGaoTv = (TextView) footer.findViewById(R.id.notice_text);
         romNameTv = (TextView) footer.findViewById(R.id.room_name_text);
@@ -567,6 +577,9 @@ public class RoomInfoActivity extends BaseActivity {
         mGridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
             @Override
             public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
+//                if ((mucRoom==null || mucRoom.getAllowSendCard()==0) && role==3){
+//                    return;
+//                }
                 if (add_minus_count == 1) {
                     // 现在添加了群组成员折叠功能,+ -号都是一直存在的,所以需要修改下逻辑,不过add_minus_count可用做于判断权限
                     if (position == mCurrentMembers.size() - 2) {
@@ -593,13 +606,12 @@ public class RoomInfoActivity extends BaseActivity {
                         // 群主或管理员才有权限操作
                         Toast.makeText(RoomInfoActivity.this, InternationalizationHelper.getString("JXRoomMemberVC_NotAdminCannotDoThis"), Toast.LENGTH_SHORT).show();
                     } else {
-                        boolean isAllowSecretlyChat = PreferenceUtils.getBoolean(mContext, Constants.IS_SEND_CARD + mRoom.getUserId(), true);
-                        if (isAllowSecretlyChat) {
-                            MucRoomMember member = mCurrentMembers.get(position);
-                            if (member != null) {
-                                startBasicInfo(member.getUserId());
-                            }
-                        } else {
+                        MucRoomMember member = mCurrentMembers.get(position);
+                        boolean isAllowCache = PreferenceUtils.getBoolean(mContext, Constants.IS_SEND_CARD + mRoom.getUserId(), true);
+                        boolean isAllow = isAllowSecretlyChat(member,isAllowCache);
+                        if (isAllow){
+                            startBasicInfo(member.getUserId());
+                        }else {
                             tip(getString(R.string.tip_member_disable_privately_chat));
                         }
                     }
@@ -841,6 +853,7 @@ public class RoomInfoActivity extends BaseActivity {
             });
 
             mSbAllShutUp.setOnCheckedChangeListener(onCheckedChangeMessageListener);
+            mSbAllowSendCard.setOnCheckedChangeListener(onCheckedChangeMessageListener);
 
             enableGroupMore(mucRoom);
 
@@ -907,6 +920,7 @@ public class RoomInfoActivity extends BaseActivity {
 
             // 隐藏 禁言 与 全体禁言
             footer.findViewById(R.id.banned_voice_rl).setVisibility(View.GONE);
+            footer.findViewById(R.id.rlt_send_card).setVisibility(View.GONE);
             footer.findViewById(R.id.banned_all_voice_rl).setVisibility(View.GONE);
 
             footer.findViewById(R.id.msg_save_days_rl).setVisibility(View.GONE);
@@ -1762,4 +1776,21 @@ public class RoomInfoActivity extends BaseActivity {
             memberName = itemView.findViewById(R.id.member_name);
         }
     }
+
+    /**
+     * allowSendCard 值为0时,不允许普通成员之间不能相互查看资料,但可以查看群主与管理员的资料
+     * @param itemMember 被点击的用户
+     * @return
+     */
+    private boolean isAllowSecretlyChat(MucRoomMember itemMember,boolean isAllowCache){
+        if ( itemMember ==null ) {
+            return false;
+        }
+        if (!isAllowCache){
+           if (itemMember.getRole()==3){
+               return false;
+           }
+        }
+        return true;
+    }
 }

+ 7 - 0
skWeiChatBaidu/src/main/java/com/liaobo/im/view/ChatContentView.java

@@ -275,14 +275,21 @@ public class ChatContentView extends PullDownListView implements ChatBottomView.
         notifyDataSetChanged();
     }
 
+    List<RoomMember> mCacheMemberList;
     // 设置管理员头像控件
     public void setRoomMemberList(List<RoomMember> memberList) {
+        mCacheMemberList = memberList;
         memberMap.clear();
         for (RoomMember member : memberList) {
             memberMap.put(member.getUserId(), member.getRole());
         }
         notifyDataSetChanged();
     }
+    public List<RoomMember> getRoomMemberList(){
+        return mCacheMemberList;
+    }
+
+
 
     // 使用动画删除某一条消息
     public void removeItemMessage(final String packedId) {

+ 26 - 0
skWeiChatBaidu/src/main/res/layout/activity_room_info_footer.xml

@@ -498,6 +498,32 @@
     </RelativeLayout>
 
     <RelativeLayout
+        android:id="@+id/rlt_send_card"
+        style="@style/IMTbleLine">
+
+        <TextView
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_centerVertical="true"
+            android:gravity="center"
+            android:text="@string/allow_private_chat"
+            android:textColor="@color/black"
+            android:textSize="@dimen/me_title_size" />
+
+        <com.suke.widget.SwitchButton
+            android:id="@+id/switch_send_card"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_alignParentRight="true"
+            android:layout_centerVertical="true"
+            app:sb_background="@color/app_white"
+            app:sb_checked_color="@color/main_color"
+            app:sb_effect_duration="100"
+            app:sb_shadow_radius="4dp"
+            app:sb_show_indicator="false" />
+
+    </RelativeLayout>
+    <RelativeLayout
         android:id="@+id/banned_all_voice_rl"
         style="@style/IMTbleLine">
 

+ 1 - 0
skWeiChatBaidu/src/main/res/values-en/strings.xml

@@ -1688,4 +1688,5 @@
 
     <string name="exclusive_red_packet">Exclusive red packet for %1$1s</string>
     <string name="exclusive_red_packet2">Exclusive red packet</string>
+    <string name="allow_private_chat">Private Chat</string>
 </resources>

+ 1 - 0
skWeiChatBaidu/src/main/res/values-zh-rHK/strings.xml

@@ -1712,4 +1712,5 @@ ABCDEFGHIJKLMNOPQRSTUVWXYZ`¬!"£$%^*()~=#{}[];':,./?/*-_+&#060;&#062;&#064;&#03
 
     <string name="exclusive_red_packet">%1$1s的專屬紅包</string>
     <string name="exclusive_red_packet2">專屬紅包</string>
+    <string name="allow_private_chat">允許普通成員私聊</string>
 </resources>

+ 1 - 0
skWeiChatBaidu/src/main/res/values-zh-rTW/strings.xml

@@ -1709,4 +1709,5 @@ ABCDEFGHIJKLMNOPQRSTUVWXYZ`¬!"£$%^*()~=#{}[];':,./?/*-_+&#060;&#062;&#064;&#03
 
     <string name="exclusive_red_packet">%1$1s的專屬紅包</string>
     <string name="exclusive_red_packet2">專屬紅包</string>
+    <string name="allow_private_chat">允許普通成員私聊</string>
 </resources>

+ 1 - 0
skWeiChatBaidu/src/main/res/values/strings.xml

@@ -1860,4 +1860,5 @@ ABCDEFGHIJKLMNOPQRSTUVWXYZ`¬!"£$%^*()~=#{}[];':,./?/*-_+&#060;&#062;&#064;&#03
 
     <string name="exclusive_red_packet">%1$1s的专属红包</string>
     <string name="exclusive_red_packet2">专属红包</string>
+    <string name="allow_private_chat">允許普通成員私聊</string>
 </resources>