From adfa40313aff3f05e890871c5015adec3601553b Mon Sep 17 00:00:00 2001 From: zhanglei <350328959@qq.com> Date: Tue, 4 Aug 2026 19:58:25 +0800 Subject: [PATCH] =?UTF-8?q?fix(emergency):=20=E5=AE=8C=E5=96=84=E5=BA=94?= =?UTF-8?q?=E6=80=A5=E5=B0=B1=E5=8C=BB=E7=BE=A4=E8=81=8A=E5=8A=9F=E8=83=BD?= =?UTF-8?q?=E2=80=94=E6=80=A5=E6=95=91=E5=91=98=E9=82=80=E8=AF=B7+?= =?UTF-8?q?=E5=9B=BE=E6=A0=87=E6=98=BE=E7=A4=BA+=E5=A4=B4=E5=83=8F?= =?UTF-8?q?=E5=85=9C=E5=BA=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 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 --- .../ui/im/utils/IMInputActionSettingUtils.kt | 6 +- .../workbench/fragment/WorkbenchFragment.kt | 4 +- .../view/TUICallingViewManager.java | 100 ++++++++++-------- .../classicui/page/TUIGroupChatFragment.java | 16 +-- .../classicui/setting/InputActionSetting.java | 14 +++ .../imageEngine/impl/GlideEngine.java | 12 +++ .../core_default_user_icon.png | Bin 0 -> 11706 bytes .../classicui/view/GroupMemberAdapter.java | 9 +- 8 files changed, 101 insertions(+), 60 deletions(-) create mode 100644 system/tuicore/src/main/res/drawable-xxhdpi/core_default_user_icon.png diff --git a/app/src/main/java/com/xjjk/healthexpertclient/ui/im/utils/IMInputActionSettingUtils.kt b/app/src/main/java/com/xjjk/healthexpertclient/ui/im/utils/IMInputActionSettingUtils.kt index c2696fe..704e3ea 100644 --- a/app/src/main/java/com/xjjk/healthexpertclient/ui/im/utils/IMInputActionSettingUtils.kt +++ b/app/src/main/java/com/xjjk/healthexpertclient/ui/im/utils/IMInputActionSettingUtils.kt @@ -30,9 +30,11 @@ object IMInputActionSettingUtils { /** * 应急求助IM功能配置 + * @param firstAid 是否为急救员 */ - fun createEmergencySetting(): InputActionSetting { + fun createEmergencySetting(firstAid: Boolean = false): InputActionSetting { var inputActionSetting = InputActionSetting() + inputActionSetting.packageName = BuildConfig.APPLICATION_ID inputActionSetting.isDisableAudioCall = true inputActionSetting.isDisableVideoCall = false inputActionSetting.isDisableArchives = true @@ -41,7 +43,7 @@ object IMInputActionSettingUtils { inputActionSetting.isDisableFinishName = true inputActionSetting.isDisableEvaluate = true inputActionSetting.isDisableFinishSession = true - inputActionSetting.packageName = BuildConfig.APPLICATION_ID + inputActionSetting.isFirstAid = firstAid InputActionSetting.setsInstance(inputActionSetting) return inputActionSetting } diff --git a/app/src/main/java/com/xjjk/healthexpertclient/ui/workbench/fragment/WorkbenchFragment.kt b/app/src/main/java/com/xjjk/healthexpertclient/ui/workbench/fragment/WorkbenchFragment.kt index d907c46..be239a0 100644 --- a/app/src/main/java/com/xjjk/healthexpertclient/ui/workbench/fragment/WorkbenchFragment.kt +++ b/app/src/main/java/com/xjjk/healthexpertclient/ui/workbench/fragment/WorkbenchFragment.kt @@ -262,7 +262,7 @@ class WorkbenchFragment : } else if (result.records.size == 1) { mViewModel.getActualGroupMemberList(result.records[0].sessionId) { groupMemberBeans -> - val setting = IMInputActionSettingUtils.createEmergencySetting() + val setting = IMInputActionSettingUtils.createEmergencySetting(true) requireContext().startGroupChat( result.records[0].sessionId, getString(R.string.title_paramedic_group), @@ -273,7 +273,7 @@ class WorkbenchFragment : } else { showChatListDialog(result.records!!) { groupInfo -> mViewModel.getActualGroupMemberList(groupInfo.sessionId) { groupMemberBeans -> - val setting = IMInputActionSettingUtils.createEmergencySetting() + val setting = IMInputActionSettingUtils.createEmergencySetting(true) requireContext().startGroupChat( groupInfo.sessionId, getString(R.string.title_paramedic_group), diff --git a/system/tuicallkit/src/main/java/com/tencent/qcloud/tuikit/tuicallkit/view/TUICallingViewManager.java b/system/tuicallkit/src/main/java/com/tencent/qcloud/tuikit/tuicallkit/view/TUICallingViewManager.java index 0053404..08084fa 100644 --- a/system/tuicallkit/src/main/java/com/tencent/qcloud/tuikit/tuicallkit/view/TUICallingViewManager.java +++ b/system/tuicallkit/src/main/java/com/tencent/qcloud/tuikit/tuicallkit/view/TUICallingViewManager.java @@ -16,6 +16,7 @@ import com.tencent.qcloud.tuicore.TUIConstants; import com.tencent.qcloud.tuicore.TUICore; import com.tencent.qcloud.tuicore.TUILogin; 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.util.ToastUtil; import com.tencent.qcloud.tuikit.TUICommonDefine; @@ -728,53 +729,58 @@ public class TUICallingViewManager implements ITUINotification { } private void initInviteUserFunction() { -// ITUIService service = TUICore.getService(TUIConstants.TUIGroup.SERVICE_NAME); -// boolean enableInviteUser = (service != null); -// -// if (enableInviteUser && mBaseCallView != null) { -// Button inviteUserBtn = new Button(mContext); -// TUICallDefine.MediaType mediaType = TUICallingStatusManager.sharedInstance(mContext).getMediaType(); -// int resId = TUICallDefine.MediaType.Video.equals(mediaType) -// ? R.drawable.tuicalling_ic_add_user_white : R.drawable.tuicalling_ic_add_user_black; -// inviteUserBtn.setBackgroundResource(resId); -// inviteUserBtn.setOnClickListener(new View.OnClickListener() { -// @Override -// public void onClick(View v) { -// String groupId = TUICallingStatusManager.sharedInstance(mContext).getGroupId(); -// if (TextUtils.isEmpty(groupId)) { -// ToastUtil.toastShortMessage(mContext.getString(R.string.tuicalling_groupid_is_empty)); -// return; -// } -// -// TUICallDefine.Status status = TUICallingStatusManager.sharedInstance(mContext).getCallStatus(); -// TUICallDefine.Role role = TUICallingStatusManager.sharedInstance(mContext).getCallRole(); -// if (TUICallDefine.Role.Called.equals(role) && !TUICallDefine.Status.Accept.equals(status)) { -// ToastUtil.toastShortMessage(mContext.getString(R.string.tuicalling_status_is_not_accept)); -// return; -// } -// -// ArrayList list = new ArrayList<>(); -// list.add(mInviter.userId); -// for (CallingUserModel model : mInviteeList) { -// if (model != null && !TextUtils.isEmpty(model.userId) && !list.contains(model.userId)) { -// list.add(model.userId); -// } -// } -// if (!list.contains(TUILogin.getLoginUser())) { -// list.add(TUILogin.getLoginUser()); -// } -// -// TUILog.i(TAG, "initInviteUserFunction, groupId: " + groupId + " ,list: " + list); -// -// Bundle bundle = new Bundle(); -// bundle.putString(TUIConstants.TUIGroup.GROUP_ID, groupId); -// bundle.putString(TUIConstants.TUIGroup.USER_DATA, Constants.TUICALLKIT); -// bundle.putStringArrayList(TUIConstants.TUIGroup.SELECTED_LIST, list); -// TUICore.startActivity("GroupMemberActivity", bundle); -// } -// }); -// mBaseCallView.enableAddUserView(inviteUserBtn); -// } + boolean firstAid = SPUtils.getInstance().getBoolean("key_first_aid", false); + if (!firstAid) { + return; + } + + ITUIService service = TUICore.getService(TUIConstants.TUIGroup.SERVICE_NAME); + boolean enableInviteUser = (service != null); + + if (enableInviteUser && mBaseCallView != null) { + Button inviteUserBtn = new Button(mContext); + TUICallDefine.MediaType mediaType = TUICallingStatusManager.sharedInstance(mContext).getMediaType(); + int resId = TUICallDefine.MediaType.Video.equals(mediaType) + ? R.drawable.tuicalling_ic_add_user_white : R.drawable.tuicalling_ic_add_user_black; + inviteUserBtn.setBackgroundResource(resId); + inviteUserBtn.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + String groupId = TUICallingStatusManager.sharedInstance(mContext).getGroupId(); + if (TextUtils.isEmpty(groupId)) { + ToastUtil.toastShortMessage(mContext.getString(R.string.tuicalling_groupid_is_empty)); + return; + } + + TUICallDefine.Status status = TUICallingStatusManager.sharedInstance(mContext).getCallStatus(); + TUICallDefine.Role role = TUICallingStatusManager.sharedInstance(mContext).getCallRole(); + if (TUICallDefine.Role.Called.equals(role) && !TUICallDefine.Status.Accept.equals(status)) { + ToastUtil.toastShortMessage(mContext.getString(R.string.tuicalling_status_is_not_accept)); + return; + } + + ArrayList list = new ArrayList<>(); + list.add(mInviter.userId); + for (CallingUserModel model : mInviteeList) { + if (model != null && !TextUtils.isEmpty(model.userId) && !list.contains(model.userId)) { + list.add(model.userId); + } + } + if (!list.contains(TUILogin.getLoginUser())) { + list.add(TUILogin.getLoginUser()); + } + + TUILog.i(TAG, "initInviteUserFunction, groupId: " + groupId + " ,list: " + list); + + Bundle bundle = new Bundle(); + bundle.putString(TUIConstants.TUIGroup.GROUP_ID, groupId); + 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 userIdList) { diff --git a/system/tuichat/src/main/java/com/tencent/qcloud/tuikit/tuichat/classicui/page/TUIGroupChatFragment.java b/system/tuichat/src/main/java/com/tencent/qcloud/tuikit/tuichat/classicui/page/TUIGroupChatFragment.java index 5ec3e29..3672fac 100644 --- a/system/tuichat/src/main/java/com/tencent/qcloud/tuikit/tuichat/classicui/page/TUIGroupChatFragment.java +++ b/system/tuichat/src/main/java/com/tencent/qcloud/tuikit/tuichat/classicui/page/TUIGroupChatFragment.java @@ -159,14 +159,16 @@ public class TUIGroupChatFragment extends TUIBaseChatFragment { } }); - titleBar.getRightGroup().setVisibility(View.VISIBLE); - titleBar.getRightTitle().setVisibility(View.GONE); - titleBar.getRightIcon().setVisibility(View.VISIBLE); - titleBar.getRightIcon().setImageResource(R.drawable.chat_title_bar_more_menu_lively); + if (inputActionSetting.isFirstAid()) { + titleBar.getRightGroup().setVisibility(View.VISIBLE); + titleBar.getRightTitle().setVisibility(View.GONE); + titleBar.getRightIcon().setVisibility(View.VISIBLE); + titleBar.getRightIcon().setImageResource(R.drawable.chat_title_bar_more_menu_lively); - // 应用缓存的 OnGroupTipsListener,解决 Activity 中提前设置 listener 的时序问题 - if (cachedGroupTipsListener != null && chatView != null) { - chatView.setOnGroupTipsListener(cachedGroupTipsListener); + // 应用缓存的 OnGroupTipsListener,解决 Activity 中提前设置 listener 的时序问题 + if (cachedGroupTipsListener != null && chatView != null) { + chatView.setOnGroupTipsListener(cachedGroupTipsListener); + } } } diff --git a/system/tuichat/src/main/java/com/tencent/qcloud/tuikit/tuichat/classicui/setting/InputActionSetting.java b/system/tuichat/src/main/java/com/tencent/qcloud/tuikit/tuichat/classicui/setting/InputActionSetting.java index 48c8419..1ec9995 100644 --- a/system/tuichat/src/main/java/com/tencent/qcloud/tuikit/tuichat/classicui/setting/InputActionSetting.java +++ b/system/tuichat/src/main/java/com/tencent/qcloud/tuikit/tuichat/classicui/setting/InputActionSetting.java @@ -2,6 +2,8 @@ package com.tencent.qcloud.tuikit.tuichat.classicui.setting; import java.io.Serializable; +import com.tencent.qcloud.tuicore.util.SPUtils; + public class InputActionSetting implements Serializable { private static InputActionSetting sInstance; @@ -31,6 +33,7 @@ public class InputActionSetting implements Serializable { public String packageName=""; public String CurrentResourceHost=""; public boolean disableEvaluate = false; + public boolean firstAid = false; public String getCurrentResourceHost() { return CurrentResourceHost == null ? "" : CurrentResourceHost; @@ -128,6 +131,16 @@ public class InputActionSetting implements Serializable { 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(){ InputActionSetting inputActionSetting = new InputActionSetting(); inputActionSetting.setDisableArchives(disableArchives); @@ -138,6 +151,7 @@ public class InputActionSetting implements Serializable { inputActionSetting.setDisableMedicalExaminationReport(disableMedicalExaminationReport); inputActionSetting.setDisableFinishSession(disableFinishSession); inputActionSetting.setDisableFinishName(disableFinishName); + inputActionSetting.setFirstAid(firstAid); return inputActionSetting; } } diff --git a/system/tuicore/src/main/java/com/tencent/qcloud/tuicore/component/imageEngine/impl/GlideEngine.java b/system/tuicore/src/main/java/com/tencent/qcloud/tuicore/component/imageEngine/impl/GlideEngine.java index 91dc9e5..0932ea6 100644 --- a/system/tuicore/src/main/java/com/tencent/qcloud/tuicore/component/imageEngine/impl/GlideEngine.java +++ b/system/tuicore/src/main/java/com/tencent/qcloud/tuicore/component/imageEngine/impl/GlideEngine.java @@ -3,6 +3,7 @@ package com.tencent.qcloud.tuicore.component.imageEngine.impl; import android.content.Context; import android.graphics.Bitmap; import android.net.Uri; +import android.text.TextUtils; import android.widget.ImageView; import androidx.annotation.DrawableRes; @@ -54,6 +55,17 @@ public class GlideEngine { .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) { Glide.with(TUILogin.getAppContext()).clear(imageView); } diff --git a/system/tuicore/src/main/res/drawable-xxhdpi/core_default_user_icon.png b/system/tuicore/src/main/res/drawable-xxhdpi/core_default_user_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..68bb06fa7179743cfd8b054e5344d163845c56a3 GIT binary patch literal 11706 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 Qy#N3J07*qoM6N<$f*GQ0K>z>% literal 0 HcmV?d00001 diff --git a/system/tuigroup/src/main/java/com/tencent/qcloud/tuikit/tuigroup/classicui/view/GroupMemberAdapter.java b/system/tuigroup/src/main/java/com/tencent/qcloud/tuikit/tuigroup/classicui/view/GroupMemberAdapter.java index a8c8798..a5cdaed 100644 --- a/system/tuigroup/src/main/java/com/tencent/qcloud/tuikit/tuigroup/classicui/view/GroupMemberAdapter.java +++ b/system/tuigroup/src/main/java/com/tencent/qcloud/tuikit/tuigroup/classicui/view/GroupMemberAdapter.java @@ -86,7 +86,12 @@ public class GroupMemberAdapter extends RecyclerView.Adapter