diff --git a/app/src/main/java/com/yizhuan/erban/common/widget/CustomImageSpan.java b/app/src/main/java/com/yizhuan/erban/common/widget/CustomImageSpan.java index a49c5d035..4d7fe306a 100644 --- a/app/src/main/java/com/yizhuan/erban/common/widget/CustomImageSpan.java +++ b/app/src/main/java/com/yizhuan/erban/common/widget/CustomImageSpan.java @@ -84,7 +84,7 @@ public class CustomImageSpan extends ImageSpan { Paint paint = new Paint(); paint.setTextSize(ratio * 22); float textWidth = paint.measureText(content); - this.width = (int) (textWidth + (50 + 4) * ratio + 16 * ratio); + this.width = (int) (textWidth + (50 + 4) * ratio + 16 * ratio +10); this.drawable = defaultDrawable; getDrawable().setBounds(0, 0, width, height); diff --git a/app/src/main/java/com/yizhuan/erban/ui/im/MessageListPanelEx.java b/app/src/main/java/com/yizhuan/erban/ui/im/MessageListPanelEx.java index 887421bec..3f6d9cad9 100644 --- a/app/src/main/java/com/yizhuan/erban/ui/im/MessageListPanelEx.java +++ b/app/src/main/java/com/yizhuan/erban/ui/im/MessageListPanelEx.java @@ -62,6 +62,7 @@ import com.netease.nimlib.sdk.robot.model.RobotAttachment; import com.netease.nimlib.sdk.robot.model.RobotMsgType; import com.netease.nimlib.sdk.team.constant.TeamMemberType; import com.netease.nimlib.sdk.team.model.TeamMember; +import com.yizhuan.erban.event.MessageSizeEvent; import com.yizhuan.xchat_android_core.auth.AuthModel; import com.yizhuan.xchat_android_core.im.custom.bean.CustomAttachment; import com.yizhuan.xchat_android_core.im.custom.bean.ImGameAttachment; @@ -70,6 +71,8 @@ import com.yizhuan.xchat_android_core.im.game.ImGameInfo; import com.yizhuan.xchat_android_core.im.game.ImGameMode; import com.yizhuan.xchat_android_library.utils.SingleToastUtil; +import org.greenrobot.eventbus.EventBus; + import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; @@ -668,10 +671,16 @@ public class MessageListPanelEx { } } + + /** + * 私聊聊天信息数(发起私聊限制需要用到) + * @param messages + */ private void onMessageLoaded(List messages) { if (messages == null) { return; } + EventBus.getDefault().post(new MessageSizeEvent(messages.size())); //服务器加载的时间不对的游戏直接失效 for (IMMessage message : messages) { if (message.getAttachment() instanceof ImGameAttachment) { diff --git a/app/src/main/java/com/yizhuan/erban/ui/im/bean/PrivateChatLimitInfo.java b/app/src/main/java/com/yizhuan/erban/ui/im/bean/PrivateChatLimitInfo.java new file mode 100644 index 000000000..b646d0a72 --- /dev/null +++ b/app/src/main/java/com/yizhuan/erban/ui/im/bean/PrivateChatLimitInfo.java @@ -0,0 +1,11 @@ +package com.yizhuan.erban.ui.im.bean; + +import java.io.Serializable; + +import lombok.Data; + +@Data +public class PrivateChatLimitInfo implements Serializable { + private boolean chat; + private String message; +} diff --git a/app/src/main/java/com/yizhuan/erban/ui/im/fragment/MessageFragment.java b/app/src/main/java/com/yizhuan/erban/ui/im/fragment/MessageFragment.java index 07bf45b8f..ae2b97d34 100644 --- a/app/src/main/java/com/yizhuan/erban/ui/im/fragment/MessageFragment.java +++ b/app/src/main/java/com/yizhuan/erban/ui/im/fragment/MessageFragment.java @@ -61,6 +61,7 @@ import com.yizhuan.erban.ui.im.GreetPresenter; import com.yizhuan.erban.ui.im.MessageListPanelEx; import com.yizhuan.erban.ui.im.avtivity.NimP2PMessageActivity; import com.yizhuan.erban.ui.im.chat.MVHChatterBoxStart; +import com.yizhuan.erban.ui.im.model.IMCustomModel; import com.yizhuan.erban.utils.PushMessageHandler; import com.yizhuan.xchat_android_core.auth.AuthModel; import com.yizhuan.xchat_android_core.im.chatterbox.ChatterBoxHelper; @@ -137,8 +138,11 @@ public class MessageFragment extends TFragment implements ModuleProxy, MessageLi private RxPermissions rxPermissions; - private int limitLevel; - private int currentLevel; +// private int limitLevel; +// private int currentLevel; + + private boolean isChat; + private String hintText; @Override public void onActivityCreated(Bundle savedInstanceState) { @@ -343,7 +347,7 @@ public class MessageFragment extends TFragment implements ModuleProxy, MessageLi if (inputPanel == null) { inputPanel = new InputPanel(container, rootView, getActionList()); inputPanel.setCustomization(customization); - inputPanel.setLimitLevel(limitLevel, currentLevel); + inputPanel.setLimitLevel(isChat,hintText); } else { inputPanel.reload(container, customization); } @@ -761,12 +765,24 @@ public class MessageFragment extends TFragment implements ModuleProxy, MessageLi } } -// @Subscribe(threadMode = ThreadMode.MAIN) -// public void onReloadInputPanel(MessageSizeEvent event) { -// if (inputPanel != null) { -// inputPanel.setLimitLevel(limitLevel, currentLevel); -// } -// } + @Subscribe(threadMode = ThreadMode.MAIN) + public void onReloadInputPanel(MessageSizeEvent event) { + if (inputPanel != null) { + if (event.getSize() > 0){ + inputPanel.setLimitLevel(true,""); + }else { + IMCustomModel.get().getPrivateChatLimit().subscribe(((privateChatLimitInfo, throwable) -> { + if (throwable != null) { + throwable.printStackTrace(); + } else { + isChat = privateChatLimitInfo.isChat(); + hintText = privateChatLimitInfo.getMessage(); + inputPanel.setLimitLevel(privateChatLimitInfo.isChat(), privateChatLimitInfo.getMessage()); + } + })); + } + } + } @SuppressLint("CheckResult") public Observable checkPermission(String... mPerms) { @@ -800,12 +816,10 @@ public class MessageFragment extends TFragment implements ModuleProxy, MessageLi } public void setLimitLevel(int limitLevel) { - this.limitLevel = limitLevel; } - - +// +// public void setCurrentLevel(int currentLevel) { - this.currentLevel = currentLevel; } } diff --git a/app/src/main/java/com/yizhuan/erban/ui/im/model/IMCustomModel.java b/app/src/main/java/com/yizhuan/erban/ui/im/model/IMCustomModel.java new file mode 100644 index 000000000..e5792def4 --- /dev/null +++ b/app/src/main/java/com/yizhuan/erban/ui/im/model/IMCustomModel.java @@ -0,0 +1,48 @@ +package com.yizhuan.erban.ui.im.model; + +import com.yizhuan.erban.ui.im.bean.PrivateChatLimitInfo; +import com.yizhuan.xchat_android_core.bean.response.ServiceResult; +import com.yizhuan.xchat_android_core.bean.response.result.UserListResult; +import com.yizhuan.xchat_android_core.im.friend.IMFriendModel; +import com.yizhuan.xchat_android_core.manager.BaseMvpModel; +import com.yizhuan.xchat_android_core.room.game.GameInfo; +import com.yizhuan.xchat_android_core.user.UserModel; +import com.yizhuan.xchat_android_core.utils.net.RxHelper; +import com.yizhuan.xchat_android_library.net.rxnet.RxNet; + +import java.util.List; + +import io.reactivex.Single; +import retrofit2.http.GET; +import retrofit2.http.Query; + +public class IMCustomModel extends BaseMvpModel { + + private static IMCustomModel model; + private IMCustomModel.Api api = RxNet.create(IMCustomModel.Api.class); + public static IMCustomModel get() { + if (model == null) { + synchronized (IMCustomModel.class) { + if (model == null) { + model = new IMCustomModel(); + } + } + } + return model; + } + + public Single getPrivateChatLimit() { + return api.getPrivateChatLimit() + .compose(RxHelper.handleBeanData()) + .compose(RxHelper.handleSchedulers()); + } + + private interface Api { + /** + * 获取是否可以发送私聊 + * @return + */ + @GET("/privateChat/limit") + Single> getPrivateChatLimit(); + } +} diff --git a/app/src/main/java/com/yizhuan/erban/ui/user/UserInfoActivity.java b/app/src/main/java/com/yizhuan/erban/ui/user/UserInfoActivity.java index 32255d689..028cfab71 100644 --- a/app/src/main/java/com/yizhuan/erban/ui/user/UserInfoActivity.java +++ b/app/src/main/java/com/yizhuan/erban/ui/user/UserInfoActivity.java @@ -309,7 +309,6 @@ public class UserInfoActivity extends BaseBindingActivity 0){ if (AuthModel.get().getCurrentUid() != userId){ - mBinding.tvHallDetail.setCompoundDrawables(null,null,null,null); mBinding.tvApplyHall.setVisibility(View.VISIBLE); } HallModel.get().getHallInfo(userInfo.getUid(), userInfo.getHallId()) @@ -636,11 +635,6 @@ public class UserInfoActivity extends BaseBindingActivity implements IGroupMemberView{ - - @BindView(R.id.tv_count) TextView tvCount; @BindView(R.id.srl_group) @@ -189,6 +188,8 @@ public class GroupMemberListActivity extends BaseMvpActivity 0 && moreCustomId > 0) // 自定义更多按钮只响应哪个功能 inputPanel.setMoreFuntionButtonInInputBar(moreCustomDrawable, moreCustomId); diff --git a/nim_uikit/src/com/netease/nim/uikit/business/session/module/input/InputPanel.java b/nim_uikit/src/com/netease/nim/uikit/business/session/module/input/InputPanel.java index 80443406e..9f9ca5176 100644 --- a/nim_uikit/src/com/netease/nim/uikit/business/session/module/input/InputPanel.java +++ b/nim_uikit/src/com/netease/nim/uikit/business/session/module/input/InputPanel.java @@ -121,8 +121,9 @@ public class InputPanel implements IEmoticonSelectedListener, IAudioRecordCallba private volatile boolean disable; - private int limitLevel; - private int currentLevel; + + private String hintText; + private boolean isChat; public InputPanel(Container container, View view, List actions, boolean isTextAudioSwitchShow) { this.container = container; @@ -434,7 +435,7 @@ public class InputPanel implements IEmoticonSelectedListener, IAudioRecordCallba // 切换成音频,收起键盘,按钮切换成键盘 private void switchToAudioLayout() { - if (currentLevel < limitLevel) { + if (!isChat) { SingleToastUtil.showToast("等级不够"); return; } @@ -461,7 +462,7 @@ public class InputPanel implements IEmoticonSelectedListener, IAudioRecordCallba for (BaseAction action : actions) { if (action.getTitleId() == moreCustomId) { - if (currentLevel < limitLevel) { + if (!isChat) { SingleToastUtil.showToast("等级不够"); } else { action.onClick(); @@ -483,7 +484,7 @@ public class InputPanel implements IEmoticonSelectedListener, IAudioRecordCallba // 点击表情,切换到表情布局 private void toggleEmojiLayout() { - if (currentLevel < limitLevel) { + if (!isChat) { SingleToastUtil.showToast("等级不够"); } else { if (emoticonPickerView == null || emoticonPickerView.getVisibility() == View.GONE) { @@ -960,15 +961,15 @@ public class InputPanel implements IEmoticonSelectedListener, IAudioRecordCallba container.proxy.sendMessage(customMessage); } - public void setLimitLevel(int limitLevel, int currentLevel) { - this.limitLevel = limitLevel; - this.currentLevel = currentLevel; + public void setLimitLevel(boolean isChat,String msg) { + this.isChat = isChat; + this.hintText = msg; setEditTextState(); } private void setEditTextState() { - if (currentLevel < limitLevel) { - messageEditText.setHint("用户等级不足" + limitLevel + "级, 不可以发言哦"); + if (!isChat) { + messageEditText.setHint(hintText); messageEditText.setFocusable(false); messageEditText.setFocusableInTouchMode(false); messageEditText.setEnabled(false);