fix(emergency): 完善应急就医群聊功能—急救员邀请+图标显示+头像兜底
- TUICallingViewManager 启用 initInviteUserFunction,急救员通话中显示右上角 + 号邀请按钮 - InputActionSetting 新增 firstAid 字段,setter 同步写入 SP 供跨模块读取 - createEmergencySetting 支持 firstAid 参数,急救员进入群聊时传入 true - TUIGroupChatFragment 右侧抽屉图标仅在 firstAid 为 true 时显示 - GlideEngine 新增 loadImageByDefault 兜底加载方法 - GroupMemberAdapter 头像加载使用兜底图标,修复空 URL 显示异常 - GroupMemberAdapter 修复 administrator 群组的成员过滤逻辑 Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 4.7
parent
f61d8c90c9
commit
adfa40313a
+4
-2
@@ -30,9 +30,11 @@ object IMInputActionSettingUtils {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* 应急求助IM功能配置
|
* 应急求助IM功能配置
|
||||||
|
* @param firstAid 是否为急救员
|
||||||
*/
|
*/
|
||||||
fun createEmergencySetting(): InputActionSetting {
|
fun createEmergencySetting(firstAid: Boolean = false): InputActionSetting {
|
||||||
var inputActionSetting = InputActionSetting()
|
var inputActionSetting = InputActionSetting()
|
||||||
|
inputActionSetting.packageName = BuildConfig.APPLICATION_ID
|
||||||
inputActionSetting.isDisableAudioCall = true
|
inputActionSetting.isDisableAudioCall = true
|
||||||
inputActionSetting.isDisableVideoCall = false
|
inputActionSetting.isDisableVideoCall = false
|
||||||
inputActionSetting.isDisableArchives = true
|
inputActionSetting.isDisableArchives = true
|
||||||
@@ -41,7 +43,7 @@ object IMInputActionSettingUtils {
|
|||||||
inputActionSetting.isDisableFinishName = true
|
inputActionSetting.isDisableFinishName = true
|
||||||
inputActionSetting.isDisableEvaluate = true
|
inputActionSetting.isDisableEvaluate = true
|
||||||
inputActionSetting.isDisableFinishSession = true
|
inputActionSetting.isDisableFinishSession = true
|
||||||
inputActionSetting.packageName = BuildConfig.APPLICATION_ID
|
inputActionSetting.isFirstAid = firstAid
|
||||||
InputActionSetting.setsInstance(inputActionSetting)
|
InputActionSetting.setsInstance(inputActionSetting)
|
||||||
return inputActionSetting
|
return inputActionSetting
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-2
@@ -262,7 +262,7 @@ class WorkbenchFragment :
|
|||||||
|
|
||||||
} else if (result.records.size == 1) {
|
} else if (result.records.size == 1) {
|
||||||
mViewModel.getActualGroupMemberList(result.records[0].sessionId) { groupMemberBeans ->
|
mViewModel.getActualGroupMemberList(result.records[0].sessionId) { groupMemberBeans ->
|
||||||
val setting = IMInputActionSettingUtils.createEmergencySetting()
|
val setting = IMInputActionSettingUtils.createEmergencySetting(true)
|
||||||
requireContext().startGroupChat(
|
requireContext().startGroupChat(
|
||||||
result.records[0].sessionId,
|
result.records[0].sessionId,
|
||||||
getString(R.string.title_paramedic_group),
|
getString(R.string.title_paramedic_group),
|
||||||
@@ -273,7 +273,7 @@ class WorkbenchFragment :
|
|||||||
} else {
|
} else {
|
||||||
showChatListDialog(result.records!!) { groupInfo ->
|
showChatListDialog(result.records!!) { groupInfo ->
|
||||||
mViewModel.getActualGroupMemberList(groupInfo.sessionId) { groupMemberBeans ->
|
mViewModel.getActualGroupMemberList(groupInfo.sessionId) { groupMemberBeans ->
|
||||||
val setting = IMInputActionSettingUtils.createEmergencySetting()
|
val setting = IMInputActionSettingUtils.createEmergencySetting(true)
|
||||||
requireContext().startGroupChat(
|
requireContext().startGroupChat(
|
||||||
groupInfo.sessionId,
|
groupInfo.sessionId,
|
||||||
getString(R.string.title_paramedic_group),
|
getString(R.string.title_paramedic_group),
|
||||||
|
|||||||
+53
-47
@@ -16,6 +16,7 @@ import com.tencent.qcloud.tuicore.TUIConstants;
|
|||||||
import com.tencent.qcloud.tuicore.TUICore;
|
import com.tencent.qcloud.tuicore.TUICore;
|
||||||
import com.tencent.qcloud.tuicore.TUILogin;
|
import com.tencent.qcloud.tuicore.TUILogin;
|
||||||
import com.tencent.qcloud.tuicore.interfaces.ITUINotification;
|
import com.tencent.qcloud.tuicore.interfaces.ITUINotification;
|
||||||
|
import com.tencent.qcloud.tuicore.util.SPUtils;
|
||||||
import com.tencent.qcloud.tuicore.interfaces.ITUIService;
|
import com.tencent.qcloud.tuicore.interfaces.ITUIService;
|
||||||
import com.tencent.qcloud.tuicore.util.ToastUtil;
|
import com.tencent.qcloud.tuicore.util.ToastUtil;
|
||||||
import com.tencent.qcloud.tuikit.TUICommonDefine;
|
import com.tencent.qcloud.tuikit.TUICommonDefine;
|
||||||
@@ -728,53 +729,58 @@ public class TUICallingViewManager implements ITUINotification {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void initInviteUserFunction() {
|
private void initInviteUserFunction() {
|
||||||
// ITUIService service = TUICore.getService(TUIConstants.TUIGroup.SERVICE_NAME);
|
boolean firstAid = SPUtils.getInstance().getBoolean("key_first_aid", false);
|
||||||
// boolean enableInviteUser = (service != null);
|
if (!firstAid) {
|
||||||
//
|
return;
|
||||||
// if (enableInviteUser && mBaseCallView != null) {
|
}
|
||||||
// Button inviteUserBtn = new Button(mContext);
|
|
||||||
// TUICallDefine.MediaType mediaType = TUICallingStatusManager.sharedInstance(mContext).getMediaType();
|
ITUIService service = TUICore.getService(TUIConstants.TUIGroup.SERVICE_NAME);
|
||||||
// int resId = TUICallDefine.MediaType.Video.equals(mediaType)
|
boolean enableInviteUser = (service != null);
|
||||||
// ? R.drawable.tuicalling_ic_add_user_white : R.drawable.tuicalling_ic_add_user_black;
|
|
||||||
// inviteUserBtn.setBackgroundResource(resId);
|
if (enableInviteUser && mBaseCallView != null) {
|
||||||
// inviteUserBtn.setOnClickListener(new View.OnClickListener() {
|
Button inviteUserBtn = new Button(mContext);
|
||||||
// @Override
|
TUICallDefine.MediaType mediaType = TUICallingStatusManager.sharedInstance(mContext).getMediaType();
|
||||||
// public void onClick(View v) {
|
int resId = TUICallDefine.MediaType.Video.equals(mediaType)
|
||||||
// String groupId = TUICallingStatusManager.sharedInstance(mContext).getGroupId();
|
? R.drawable.tuicalling_ic_add_user_white : R.drawable.tuicalling_ic_add_user_black;
|
||||||
// if (TextUtils.isEmpty(groupId)) {
|
inviteUserBtn.setBackgroundResource(resId);
|
||||||
// ToastUtil.toastShortMessage(mContext.getString(R.string.tuicalling_groupid_is_empty));
|
inviteUserBtn.setOnClickListener(new View.OnClickListener() {
|
||||||
// return;
|
@Override
|
||||||
// }
|
public void onClick(View v) {
|
||||||
//
|
String groupId = TUICallingStatusManager.sharedInstance(mContext).getGroupId();
|
||||||
// TUICallDefine.Status status = TUICallingStatusManager.sharedInstance(mContext).getCallStatus();
|
if (TextUtils.isEmpty(groupId)) {
|
||||||
// TUICallDefine.Role role = TUICallingStatusManager.sharedInstance(mContext).getCallRole();
|
ToastUtil.toastShortMessage(mContext.getString(R.string.tuicalling_groupid_is_empty));
|
||||||
// if (TUICallDefine.Role.Called.equals(role) && !TUICallDefine.Status.Accept.equals(status)) {
|
return;
|
||||||
// ToastUtil.toastShortMessage(mContext.getString(R.string.tuicalling_status_is_not_accept));
|
}
|
||||||
// return;
|
|
||||||
// }
|
TUICallDefine.Status status = TUICallingStatusManager.sharedInstance(mContext).getCallStatus();
|
||||||
//
|
TUICallDefine.Role role = TUICallingStatusManager.sharedInstance(mContext).getCallRole();
|
||||||
// ArrayList<String> list = new ArrayList<>();
|
if (TUICallDefine.Role.Called.equals(role) && !TUICallDefine.Status.Accept.equals(status)) {
|
||||||
// list.add(mInviter.userId);
|
ToastUtil.toastShortMessage(mContext.getString(R.string.tuicalling_status_is_not_accept));
|
||||||
// for (CallingUserModel model : mInviteeList) {
|
return;
|
||||||
// if (model != null && !TextUtils.isEmpty(model.userId) && !list.contains(model.userId)) {
|
}
|
||||||
// list.add(model.userId);
|
|
||||||
// }
|
ArrayList<String> list = new ArrayList<>();
|
||||||
// }
|
list.add(mInviter.userId);
|
||||||
// if (!list.contains(TUILogin.getLoginUser())) {
|
for (CallingUserModel model : mInviteeList) {
|
||||||
// list.add(TUILogin.getLoginUser());
|
if (model != null && !TextUtils.isEmpty(model.userId) && !list.contains(model.userId)) {
|
||||||
// }
|
list.add(model.userId);
|
||||||
//
|
}
|
||||||
// TUILog.i(TAG, "initInviteUserFunction, groupId: " + groupId + " ,list: " + list);
|
}
|
||||||
//
|
if (!list.contains(TUILogin.getLoginUser())) {
|
||||||
// Bundle bundle = new Bundle();
|
list.add(TUILogin.getLoginUser());
|
||||||
// bundle.putString(TUIConstants.TUIGroup.GROUP_ID, groupId);
|
}
|
||||||
// bundle.putString(TUIConstants.TUIGroup.USER_DATA, Constants.TUICALLKIT);
|
|
||||||
// bundle.putStringArrayList(TUIConstants.TUIGroup.SELECTED_LIST, list);
|
TUILog.i(TAG, "initInviteUserFunction, groupId: " + groupId + " ,list: " + list);
|
||||||
// TUICore.startActivity("GroupMemberActivity", bundle);
|
|
||||||
// }
|
Bundle bundle = new Bundle();
|
||||||
// });
|
bundle.putString(TUIConstants.TUIGroup.GROUP_ID, groupId);
|
||||||
// mBaseCallView.enableAddUserView(inviteUserBtn);
|
bundle.putString(TUIConstants.TUIGroup.USER_DATA, Constants.TUICALLKIT);
|
||||||
// }
|
bundle.putStringArrayList(TUIConstants.TUIGroup.SELECTED_LIST, list);
|
||||||
|
TUICore.startActivity("GroupMemberActivity", bundle);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
mBaseCallView.enableAddUserView(inviteUserBtn);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void inviteUsersToGroupCall(List<String> userIdList) {
|
private void inviteUsersToGroupCall(List<String> userIdList) {
|
||||||
|
|||||||
+9
-7
@@ -159,14 +159,16 @@ public class TUIGroupChatFragment extends TUIBaseChatFragment {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
titleBar.getRightGroup().setVisibility(View.VISIBLE);
|
if (inputActionSetting.isFirstAid()) {
|
||||||
titleBar.getRightTitle().setVisibility(View.GONE);
|
titleBar.getRightGroup().setVisibility(View.VISIBLE);
|
||||||
titleBar.getRightIcon().setVisibility(View.VISIBLE);
|
titleBar.getRightTitle().setVisibility(View.GONE);
|
||||||
titleBar.getRightIcon().setImageResource(R.drawable.chat_title_bar_more_menu_lively);
|
titleBar.getRightIcon().setVisibility(View.VISIBLE);
|
||||||
|
titleBar.getRightIcon().setImageResource(R.drawable.chat_title_bar_more_menu_lively);
|
||||||
|
|
||||||
// 应用缓存的 OnGroupTipsListener,解决 Activity 中提前设置 listener 的时序问题
|
// 应用缓存的 OnGroupTipsListener,解决 Activity 中提前设置 listener 的时序问题
|
||||||
if (cachedGroupTipsListener != null && chatView != null) {
|
if (cachedGroupTipsListener != null && chatView != null) {
|
||||||
chatView.setOnGroupTipsListener(cachedGroupTipsListener);
|
chatView.setOnGroupTipsListener(cachedGroupTipsListener);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+14
@@ -2,6 +2,8 @@ package com.tencent.qcloud.tuikit.tuichat.classicui.setting;
|
|||||||
|
|
||||||
import java.io.Serializable;
|
import java.io.Serializable;
|
||||||
|
|
||||||
|
import com.tencent.qcloud.tuicore.util.SPUtils;
|
||||||
|
|
||||||
public class InputActionSetting implements Serializable {
|
public class InputActionSetting implements Serializable {
|
||||||
private static InputActionSetting sInstance;
|
private static InputActionSetting sInstance;
|
||||||
|
|
||||||
@@ -31,6 +33,7 @@ public class InputActionSetting implements Serializable {
|
|||||||
public String packageName="";
|
public String packageName="";
|
||||||
public String CurrentResourceHost="";
|
public String CurrentResourceHost="";
|
||||||
public boolean disableEvaluate = false;
|
public boolean disableEvaluate = false;
|
||||||
|
public boolean firstAid = false;
|
||||||
|
|
||||||
public String getCurrentResourceHost() {
|
public String getCurrentResourceHost() {
|
||||||
return CurrentResourceHost == null ? "" : CurrentResourceHost;
|
return CurrentResourceHost == null ? "" : CurrentResourceHost;
|
||||||
@@ -128,6 +131,16 @@ public class InputActionSetting implements Serializable {
|
|||||||
this.disableFinishName = disableFinishName;
|
this.disableFinishName = disableFinishName;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean isFirstAid() {
|
||||||
|
return firstAid;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setFirstAid(boolean firstAid) {
|
||||||
|
this.firstAid = firstAid;
|
||||||
|
// 同步写入 SP,供 tuicallkit 跨模块读取(控制右上角 + 号是否显示)
|
||||||
|
SPUtils.getInstance().put("key_first_aid", firstAid);
|
||||||
|
}
|
||||||
|
|
||||||
public InputActionSetting copy(){
|
public InputActionSetting copy(){
|
||||||
InputActionSetting inputActionSetting = new InputActionSetting();
|
InputActionSetting inputActionSetting = new InputActionSetting();
|
||||||
inputActionSetting.setDisableArchives(disableArchives);
|
inputActionSetting.setDisableArchives(disableArchives);
|
||||||
@@ -138,6 +151,7 @@ public class InputActionSetting implements Serializable {
|
|||||||
inputActionSetting.setDisableMedicalExaminationReport(disableMedicalExaminationReport);
|
inputActionSetting.setDisableMedicalExaminationReport(disableMedicalExaminationReport);
|
||||||
inputActionSetting.setDisableFinishSession(disableFinishSession);
|
inputActionSetting.setDisableFinishSession(disableFinishSession);
|
||||||
inputActionSetting.setDisableFinishName(disableFinishName);
|
inputActionSetting.setDisableFinishName(disableFinishName);
|
||||||
|
inputActionSetting.setFirstAid(firstAid);
|
||||||
return inputActionSetting;
|
return inputActionSetting;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+12
@@ -3,6 +3,7 @@ package com.tencent.qcloud.tuicore.component.imageEngine.impl;
|
|||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.graphics.Bitmap;
|
import android.graphics.Bitmap;
|
||||||
import android.net.Uri;
|
import android.net.Uri;
|
||||||
|
import android.text.TextUtils;
|
||||||
import android.widget.ImageView;
|
import android.widget.ImageView;
|
||||||
|
|
||||||
import androidx.annotation.DrawableRes;
|
import androidx.annotation.DrawableRes;
|
||||||
@@ -54,6 +55,17 @@ public class GlideEngine {
|
|||||||
.into(imageView);
|
.into(imageView);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static void loadImageByDefault(ImageView imageView, String filePath) {
|
||||||
|
if (TextUtils.isEmpty(filePath)) {
|
||||||
|
imageView.setImageResource(R.drawable.core_default_user_icon);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
Glide.with(TUILogin.getAppContext())
|
||||||
|
.load(filePath)
|
||||||
|
.error(R.drawable.core_default_user_icon)
|
||||||
|
.apply(new RequestOptions())
|
||||||
|
.into(imageView);
|
||||||
|
}
|
||||||
public static void clear(ImageView imageView) {
|
public static void clear(ImageView imageView) {
|
||||||
Glide.with(TUILogin.getAppContext()).clear(imageView);
|
Glide.with(TUILogin.getAppContext()).clear(imageView);
|
||||||
}
|
}
|
||||||
|
|||||||
Binary file not shown.
|
After Width: | Height: | Size: 11 KiB |
+7
-2
@@ -86,7 +86,12 @@ public class GroupMemberAdapter extends RecyclerView.Adapter<GroupMemberAdapter.
|
|||||||
@Override
|
@Override
|
||||||
public void onBindViewHolder(@NonNull GroupMemberViewHodler holder, int position) {
|
public void onBindViewHolder(@NonNull GroupMemberViewHodler holder, int position) {
|
||||||
final GroupMemberInfo info = mGroupMembers.get(position);
|
final GroupMemberInfo info = mGroupMembers.get(position);
|
||||||
GlideEngine.loadImage(holder.memberIcon, info.getIconUrl());
|
if (TextUtils.isEmpty(info.getIconUrl())) {
|
||||||
|
holder.memberIcon.setImageResource(R.drawable.core_default_user_icon);
|
||||||
|
} else {
|
||||||
|
GlideEngine.loadImageByDefault(holder.memberIcon, info.getIconUrl());
|
||||||
|
}
|
||||||
|
|
||||||
if (!TextUtils.isEmpty(info.getNameCard())) {
|
if (!TextUtils.isEmpty(info.getNameCard())) {
|
||||||
holder.memberName.setText(info.getNameCard());
|
holder.memberName.setText(info.getNameCard());
|
||||||
} else {
|
} else {
|
||||||
@@ -208,7 +213,7 @@ public class GroupMemberAdapter extends RecyclerView.Adapter<GroupMemberAdapter.
|
|||||||
mGroupMembers.addAll(groupInfo.getMemberDetails());
|
mGroupMembers.addAll(groupInfo.getMemberDetails());
|
||||||
} else {
|
} else {
|
||||||
for (GroupMemberInfo groupMemberInfo : groupInfo.getMemberDetails()) {
|
for (GroupMemberInfo groupMemberInfo : groupInfo.getMemberDetails()) {
|
||||||
if (excludeList.contains(groupMemberInfo.getAccount())) {
|
if (excludeList.contains(groupMemberInfo.getAccount())&&!groupInfo.getId().equals("administrator")) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
mGroupMembers.add(groupMemberInfo);
|
mGroupMembers.add(groupMemberInfo);
|
||||||
|
|||||||
Reference in New Issue
Block a user