From 72ae93fbb2dbd2d8e62c3f109d90fba280a6c740 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=A2=81=E5=B0=8F=E6=B1=9F?= <461355754@qq.com> Date: Mon, 29 Sep 2025 09:05:02 +0800 Subject: [PATCH] =?UTF-8?q?1:=E4=BF=AE=E6=94=B9=E6=8D=A2=E9=BA=A6=E9=80=BB?= =?UTF-8?q?=E8=BE=91=202=EF=BC=9A=E6=B7=BB=E5=8A=A0=E9=97=AA=E5=B1=8F?= =?UTF-8?q?=E4=B8=8D=E5=9C=A8=E7=9B=B4=E6=8E=A5=E5=85=B3=E9=97=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/build.gradle | 32 +- gradle.properties | 4 +- .../moduleutil/activity/BaseMvpActivity.java | 5 +- .../moduleutil/base/CommonAppContext.java | 36 ++ .../com/xscm/moduleutil/http/ApiServer.java | 4 + .../xscm/moduleutil/http/RetrofitClient.java | 14 + .../utils/config/EnvironmentPrefs.java | 2 +- .../xscm/moduleutil/widget/BaseWheatView.java | 57 ++- .../com/xscm/moduleutil/widget/Constants.java | 1 + .../widget/RoomFriendshipWheatView.java | 22 +- .../moduleutil/widget/WheatLayoutManager.java | 2 +- .../widget/WheatLayoutSingManager.java | 38 +- .../moduleroom/activity/RoomActivity.kt | 272 +++++++++----- .../contacts/FriendshipRoomContacts.java | 7 + .../fragment/FriendshipRoomFragment.java | 347 ++++++++++++------ .../PublicScreenEaseChatFragment.java | 1 + .../fragment/RoomAuctionFragment.java | 1 + .../moduleroom/fragment/RoomKtvFragment.java | 6 +- .../moduleroom/fragment/SingSongFragment.java | 30 +- .../presenter/FriendshipRoomPresenter.java | 23 ++ .../moduleroom/service/ForegroundService.kt | 1 + tuichat/src/main/AndroidManifest.xml | 10 +- 22 files changed, 636 insertions(+), 279 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 843ea5f..5e8a8c5 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -64,22 +64,22 @@ android { ] } - // 测试版配置 - beta { - dimension "environment" - // 测试版包名:基础包名 + .beta(com.example.myapp.beta) - applicationIdSuffix ".beta" - // 测试版版本名:1.0-beta - versionNameSuffix "-beta" - - // 【测试版应用名称】动态生成带标识的名称 - resValue "string", "app_name", "秘地-测试版" - - // 【测试版图标】替换为测试专用图标 - manifestPlaceholders = [ - appIcon: "@mipmap/ic_launcher_app_bat" // 需在main/res/mipmap放置该图标 - ] - } +// // 测试版配置 +// beta { +// dimension "environment" +// // 测试版包名:基础包名 + .beta(com.example.myapp.beta) +// applicationIdSuffix ".beta" +// // 测试版版本名:1.0-beta +// versionNameSuffix "-beta" +// +// // 【测试版应用名称】动态生成带标识的名称 +// resValue "string", "app_name", "秘地-测试版" +// +// // 【测试版图标】替换为测试专用图标 +// manifestPlaceholders = [ +// appIcon: "@mipmap/ic_launcher_app_bat" // 需在main/res/mipmap放置该图标 +// ] +// } } signingConfigs { diff --git a/gradle.properties b/gradle.properties index ed84208..1580f62 100644 --- a/gradle.properties +++ b/gradle.properties @@ -28,8 +28,8 @@ isBuildModule=false #org.gradle.deamon=false android.injected.testOnly=false -APP_VERSION_NAME=1.1.3 -APP_VERSION_CODE=165 +APP_VERSION_NAME=1.1.6 +APP_VERSION_CODE=168 org.gradle.jvm.toolchain.useLegacyAdapters=false #org.gradle.java.home=C\:\\Users\\qx\\.jdks\\ms-17.0.15 diff --git a/moduleUtil/src/main/java/com/xscm/moduleutil/activity/BaseMvpActivity.java b/moduleUtil/src/main/java/com/xscm/moduleutil/activity/BaseMvpActivity.java index dcc5907..412e74e 100644 --- a/moduleUtil/src/main/java/com/xscm/moduleutil/activity/BaseMvpActivity.java +++ b/moduleUtil/src/main/java/com/xscm/moduleutil/activity/BaseMvpActivity.java @@ -124,7 +124,7 @@ public abstract class BaseMvpActivity

onlineMap=new HashMap<>(); + + public void setOnlineMap(Map onlineMap) { + this.onlineMap = onlineMap; + } + + public Map getOnlineMap() { + return onlineMap; + } @Setter @Getter @@ -441,6 +456,9 @@ public class CommonAppContext extends MultiDexApplication implements Applicatio // 每次启动应用时重置状态 SpUtil.getInstance().setBooleanValue("youth_model_shown", false); startInitSdk(); + + // 启动IM连接服务 +// IMServiceManager.getInstance().startIMService(this); } } // piaoPingManager = PiaoPingManager.getInstance(this); @@ -790,6 +808,10 @@ public class CommonAppContext extends MultiDexApplication implements Applicatio @Override public void onActivityStarted(@NonNull Activity activity) { AppLifecycleUtil.onAppFrontGround(); + +// if (playId!=null && !playId.equals("")){ +// RetrofitClient.getInstance().userRoomBack(playId, "1"); +// } } @Override @@ -803,6 +825,9 @@ public class CommonAppContext extends MultiDexApplication implements Applicatio // AppStateManager.setRoomActivityMinimized(false); AppLifecycleUtil.onAppFrontGround(); } + if (playId!=null && !playId.equals("")){ + RetrofitClient.getInstance().userRoomBack(playId, "2"); + } activityCount++; } @@ -814,6 +839,11 @@ public class CommonAppContext extends MultiDexApplication implements Applicatio if (appStateListener != null) { appStateListener.onAppBackground(); } + + if (playId!=null && !playId.equals("")){ + RetrofitClient.getInstance().userRoomBack(playId, "1"); + } + AppLifecycleUtil.onAppBackGround(); // handleAppBackground(activity); // AppStateManager.setRoomActivityMinimized( true); @@ -888,4 +918,10 @@ public class CommonAppContext extends MultiDexApplication implements Applicatio // appStateListener.onRoomActivityDestroyed(); // } } + + @Override + public void onTerminate() { + super.onTerminate(); + LogUtils.e("@@@", "onTerminate"); + } } diff --git a/moduleUtil/src/main/java/com/xscm/moduleutil/http/ApiServer.java b/moduleUtil/src/main/java/com/xscm/moduleutil/http/ApiServer.java index f10a09b..ed677bb 100644 --- a/moduleUtil/src/main/java/com/xscm/moduleutil/http/ApiServer.java +++ b/moduleUtil/src/main/java/com/xscm/moduleutil/http/ApiServer.java @@ -102,6 +102,10 @@ public interface ApiServer { @POST(Constants.BIND_MOBILE) Call> mobileView2(@Field("new_mobile") String new_mobile, @Field("sms_code") String sms_code); + @FormUrlEncoded + @POST(Constants.USER_ROOM_BACK) + Call userRoomBack(@Field("room_id")String room_id,@Field("type")String type); + @FormUrlEncoded @POST(Constants.USER_LOGIN) Call>> userLogin(@Field("user_login") String user_login, @Field("password") String password); diff --git a/moduleUtil/src/main/java/com/xscm/moduleutil/http/RetrofitClient.java b/moduleUtil/src/main/java/com/xscm/moduleutil/http/RetrofitClient.java index 62beea1..433943f 100644 --- a/moduleUtil/src/main/java/com/xscm/moduleutil/http/RetrofitClient.java +++ b/moduleUtil/src/main/java/com/xscm/moduleutil/http/RetrofitClient.java @@ -292,6 +292,20 @@ public class RetrofitClient { }); } + public void userRoomBack(String room_id,String type){//用户退出前后台保留数据操作 type:1:切后台 2:切前台 + sApiServer.userRoomBack(room_id,type).enqueue(new Callback() { + @Override + public void onResponse(Call call, Response response) { + + } + + @Override + public void onFailure(Call call, Throwable t) { + + } + }); + } + public void mobileView2(String new_mobile, String sms_code, BaseObserver observer) { sApiServer.mobileView2(new_mobile, sms_code).enqueue(new Callback>() { @Override diff --git a/moduleUtil/src/main/java/com/xscm/moduleutil/utils/config/EnvironmentPrefs.java b/moduleUtil/src/main/java/com/xscm/moduleutil/utils/config/EnvironmentPrefs.java index a757b80..a1d591a 100644 --- a/moduleUtil/src/main/java/com/xscm/moduleutil/utils/config/EnvironmentPrefs.java +++ b/moduleUtil/src/main/java/com/xscm/moduleutil/utils/config/EnvironmentPrefs.java @@ -51,7 +51,7 @@ public class EnvironmentPrefs { // } // 默认使用生产环境 - String envName = sharedPreferences.getString(KEY_ENV, EnvironmentEnum.TEST.name()); + String envName = sharedPreferences.getString(KEY_ENV, EnvironmentEnum.PRODUCTION.name()); try { return EnvironmentEnum.valueOf(envName); } catch (IllegalArgumentException e) { diff --git a/moduleUtil/src/main/java/com/xscm/moduleutil/widget/BaseWheatView.java b/moduleUtil/src/main/java/com/xscm/moduleutil/widget/BaseWheatView.java index ee1d5c1..450f3cc 100644 --- a/moduleUtil/src/main/java/com/xscm/moduleutil/widget/BaseWheatView.java +++ b/moduleUtil/src/main/java/com/xscm/moduleutil/widget/BaseWheatView.java @@ -13,6 +13,7 @@ import androidx.constraintlayout.widget.ConstraintLayout; import com.opensource.svgaplayer.SVGAImageView; import com.xscm.moduleutil.R; +import com.xscm.moduleutil.base.CommonAppContext; import com.xscm.moduleutil.base.RoomRollModel; import com.xscm.moduleutil.bean.FaceBean; import com.xscm.moduleutil.bean.RoomMessageEvent; @@ -39,6 +40,8 @@ import org.greenrobot.eventbus.EventBus; import org.greenrobot.eventbus.Subscribe; import org.greenrobot.eventbus.ThreadMode; +import java.util.Map; + public abstract class BaseWheatView extends ConstraintLayout implements IBaseWheat { public ImageView mRiv; public ImageView mIvGift; @@ -108,6 +111,9 @@ public abstract class BaseWheatView extends ConstraintLayout implements IBaseWhe oX = mIvGift.getX(); oY = mIvGift.getY(); initPit(context, attrs); + if (!EventBus.getDefault().isRegistered( this)){ + EventBus.getDefault().register(this); + } } protected abstract void initPit(Context context, AttributeSet attrs); @@ -162,11 +168,22 @@ public abstract class BaseWheatView extends ConstraintLayout implements IBaseWhe setCardiac(pitBean.getCharm(), getTzbl()); setPitData(bean); - if (bean.getIs_online() == 2 && bean.getUser_id()!=null && !bean.getUser_id().equals("0") && !bean.getUser_id().isEmpty()){ - iv_on_line.setVisibility(VISIBLE); + + if (bean.getUser_id()!=null && !bean.getUser_id().equals("0") && !bean.getUser_id().isEmpty()) { + if (CommonAppContext.getInstance().getOnlineMap()!=null&&CommonAppContext.getInstance().getOnlineMap().get(bean.getUser_id())!=null) { + iv_on_line.setVisibility(CommonAppContext.getInstance().getOnlineMap().get(bean.getUser_id()) == 1 ? GONE : VISIBLE); + }else { + iv_on_line.setVisibility(GONE); + } }else { iv_on_line.setVisibility(GONE); } + +// if (bean.getIs_online() == 2 && bean.getUser_id()!=null && !bean.getUser_id().equals("0") && !bean.getUser_id().isEmpty()){ +// iv_on_line.setVisibility(VISIBLE); +// }else { +// iv_on_line.setVisibility(GONE); +// } // if (bean.getIs_online() == 0 &&bean.getUser_id() != null && !bean.getUser_id().equals("0") && !bean.getUser_id().isEmpty()) { // iv_on_line.setVisibility(VISIBLE); // } else { @@ -241,6 +258,7 @@ public abstract class BaseWheatView extends ConstraintLayout implements IBaseWhe if (soundLevel == 0) { mIvRipple.post(() -> { mIvRipple.stopAnimation(true); + CommonAppContext.getInstance().onlineMap.put(pitBean.getUser_id(),1); mIvRipple.setVisibility(GONE); }); mIvRipple.setVisibility(GONE); @@ -249,8 +267,9 @@ public abstract class BaseWheatView extends ConstraintLayout implements IBaseWhe mIvRipple.post(() -> { if (!mIvRipple.isAnimating()) { mIvRipple.startAnimation(); + CommonAppContext.getInstance().onlineMap.put(pitBean.getUser_id(),1); + iv_on_line.setVisibility(GONE); } - iv_on_line.setVisibility(GONE); }); } @@ -269,8 +288,9 @@ public abstract class BaseWheatView extends ConstraintLayout implements IBaseWhe mIvRipple.post(() -> { if (!mIvRipple.isAnimating()) { mIvRipple.startAnimation(); + CommonAppContext.getInstance().onlineMap.put(pitBean.getUser_id(),1); + iv_on_line.setVisibility(GONE); } - iv_on_line.setVisibility(GONE); }); } @@ -351,18 +371,27 @@ public abstract class BaseWheatView extends ConstraintLayout implements IBaseWhe } // @Subscribe(threadMode = ThreadMode.MAIN) + public void setOnlineStatus() { +// if (pitBean!=null) { +// if (pitBean.getUser_id() != null && !pitBean.getUser_id().equals("0") && !pitBean.getUser_id().isEmpty()) { +// if (pitBean.getUser_id().equals(isOnline.getUser_id())) { +// if (isOnline.getIs_online() == 1) { +// iv_on_line.setVisibility(GONE); +// } else { +// iv_on_line.setVisibility(VISIBLE); +// } +// } +// } +// } - public void setOnlineStatus(UserOnlineStatusBean isOnline) { - if (pitBean!=null) { - if (pitBean.getUser_id() != null && !pitBean.getUser_id().equals("0") && !pitBean.getUser_id().isEmpty()) { - if (pitBean.getUser_id().equals(isOnline.getUser_id())) { - if (isOnline.getIs_online() == 1) { - iv_on_line.setVisibility(GONE); - } else { - iv_on_line.setVisibility(VISIBLE); - } - } + if (pitBean.getUser_id()!=null && !pitBean.getUser_id().equals("0") && !pitBean.getUser_id().isEmpty()) { + if (CommonAppContext.getInstance().getOnlineMap()!=null&&CommonAppContext.getInstance().getOnlineMap().get(pitBean.getUser_id())!=null) { + iv_on_line.setVisibility(CommonAppContext.getInstance().getOnlineMap().get(pitBean.getUser_id()) == 1 ? GONE : VISIBLE); + }else { + iv_on_line.setVisibility(GONE); } + }else { + iv_on_line.setVisibility(GONE); } } diff --git a/moduleUtil/src/main/java/com/xscm/moduleutil/widget/Constants.java b/moduleUtil/src/main/java/com/xscm/moduleutil/widget/Constants.java index 7ec677c..a3afe55 100644 --- a/moduleUtil/src/main/java/com/xscm/moduleutil/widget/Constants.java +++ b/moduleUtil/src/main/java/com/xscm/moduleutil/widget/Constants.java @@ -390,6 +390,7 @@ public class Constants { public static final String POST_ROOM_USER_CHARM_LIST = "/api/Room/room_user_charm_list";//房间用户当前魅力值列表 public static final String GET_GIFT_PACK_LIST_COUNT = "/api/UserGiftPack/get_gift_pack_list_count";//背包礼物总价值 public static final String ROOM_USER_RECONNECT = "/api/Room/user_reconnect";//用户重连 + public static final String USER_ROOM_BACK = "/api/Room/user_in_room_background";//用户在房间内切后台保留数据操作 diff --git a/moduleUtil/src/main/java/com/xscm/moduleutil/widget/RoomFriendshipWheatView.java b/moduleUtil/src/main/java/com/xscm/moduleutil/widget/RoomFriendshipWheatView.java index ec0ddba..6e3da27 100644 --- a/moduleUtil/src/main/java/com/xscm/moduleutil/widget/RoomFriendshipWheatView.java +++ b/moduleUtil/src/main/java/com/xscm/moduleutil/widget/RoomFriendshipWheatView.java @@ -298,17 +298,17 @@ public class RoomFriendshipWheatView extends BaseWheatView { } - public void setOnlineStatus(UserOnlineStatusBean isOnline) { - if (pitBean.getUser_id() != null && !pitBean.getUser_id().equals("0") && !pitBean.getUser_id().isEmpty()) { - if (pitBean.getUser_id().equals(isOnline.getUser_id())) { - if (isOnline.getIs_online() == 1) { -// iv_on_line.setVisibility(GONE); - } else { -// iv_on_line.setVisibility(VISIBLE); - } - } - } - } +// public void setOnlineStatus(UserOnlineStatusBean isOnline) { +// if (pitBean.getUser_id() != null && !pitBean.getUser_id().equals("0") && !pitBean.getUser_id().isEmpty()) { +// if (pitBean.getUser_id().equals(isOnline.getUser_id())) { +// if (isOnline.getIs_online() == 1) { +//// iv_on_line.setVisibility(GONE); +// } else { +//// iv_on_line.setVisibility(VISIBLE); +// } +// } +// } +// } /// 设置是否显示助力按钮 public void setLockZl(boolean lock) { diff --git a/moduleUtil/src/main/java/com/xscm/moduleutil/widget/WheatLayoutManager.java b/moduleUtil/src/main/java/com/xscm/moduleutil/widget/WheatLayoutManager.java index 2efcbd7..28a3610 100644 --- a/moduleUtil/src/main/java/com/xscm/moduleutil/widget/WheatLayoutManager.java +++ b/moduleUtil/src/main/java/com/xscm/moduleutil/widget/WheatLayoutManager.java @@ -287,7 +287,7 @@ public class WheatLayoutManager { int pitNumber = Integer.parseInt(pitBean.getPit_number()); RoomDefaultWheatView wheatView = findWheatViewByPitNumber(pitNumber); if (wheatView != null) { - wheatView.setOnlineStatus(bean); + wheatView.setOnlineStatus(); } } } diff --git a/moduleUtil/src/main/java/com/xscm/moduleutil/widget/WheatLayoutSingManager.java b/moduleUtil/src/main/java/com/xscm/moduleutil/widget/WheatLayoutSingManager.java index abb2804..6848252 100644 --- a/moduleUtil/src/main/java/com/xscm/moduleutil/widget/WheatLayoutSingManager.java +++ b/moduleUtil/src/main/java/com/xscm/moduleutil/widget/WheatLayoutSingManager.java @@ -10,8 +10,10 @@ import androidx.annotation.Nullable; import com.hjq.toast.ToastUtils; import com.xscm.moduleutil.R; +import com.xscm.moduleutil.bean.RoomMessageEvent; import com.xscm.moduleutil.bean.UserOnlineStatusBean; import com.xscm.moduleutil.bean.room.RoomPitBean; +import com.xscm.moduleutil.utils.SpUtil; import java.util.ArrayList; import java.util.List; @@ -381,6 +383,40 @@ public class WheatLayoutSingManager { return metrics.widthPixels; } + public void setUpData(RoomMessageEvent event){ + String fromPit=event.getText().getFrom_pit_number()!=null?event.getText().getFrom_pit_number():""; + String toPitNumber=event.getText().getTo_pit_number()!=null?event.getText().getTo_pit_number():""; + if (fromPit.equals("") || toPitNumber.equals("")){ + return; + } + RoomSingSongWheatView fromWheatView = findWheatViewByPitNumber(Integer.parseInt(fromPit)); + RoomSingSongWheatView toWheatView = findWheatViewByPitNumber(Integer.parseInt(toPitNumber)); + RoomPitBean fromPitBean=fromWheatView.pitBean; + RoomPitBean toPitBean=toWheatView.pitBean; + String tmpNumber=fromPitBean.getPit_number(); + fromPitBean.setPit_number(toPitBean.getPit_number()); + toPitBean.setPit_number(tmpNumber); + toWheatView.setData(fromPitBean); + fromWheatView.setData(toPitBean); + for (RoomSingSongWheatView view : multiWheatViews){ + if (view.pitBean.getUser_id().equals(event.getText().getFromUserInfo().getUser_id()+"")){ + if (!view.pitBean.getPit_number().equals(toPitNumber)){ + RoomPitBean bean=view.pitBean; + bean.setCharm(""); + bean.setUser_id(""); + bean.setDress(""); + bean.setAvatar(""); + bean.setNickname(""); + bean.setSex(""); + bean.setUser_code(""); + bean.setDress_picture(""); + view.setData(bean); + } + } + } + } + + /** * 更新指定 pitNumber 的麦位信息(用于局部刷新) */ @@ -478,7 +514,7 @@ public class WheatLayoutSingManager { int pitNumber = Integer.parseInt(pitBean.getPit_number()); RoomSingSongWheatView wheatView = findWheatViewByPitNumber(pitNumber); if (wheatView != null) { - wheatView.setOnlineStatus(bean); // 刷新数据 + wheatView.setOnlineStatus(); // 刷新数据 } } } diff --git a/moduleroom/src/main/java/com/example/moduleroom/activity/RoomActivity.kt b/moduleroom/src/main/java/com/example/moduleroom/activity/RoomActivity.kt index 49e5a84..aa77aac 100644 --- a/moduleroom/src/main/java/com/example/moduleroom/activity/RoomActivity.kt +++ b/moduleroom/src/main/java/com/example/moduleroom/activity/RoomActivity.kt @@ -76,6 +76,8 @@ import com.orhanobut.logger.Logger import com.petterp.floatingx.assist.helper.FxScopeHelper import com.petterp.floatingx.listener.control.IFxControl import com.tencent.imsdk.v2.V2TIMManager +import com.tencent.imsdk.v2.V2TIMSDKListener +import com.tencent.imsdk.v2.V2TIMUserFullInfo import com.tencent.imsdk.v2.V2TIMValueCallback import com.xscm.moduleutil.activity.BaseMvpActivity import com.xscm.moduleutil.adapter.CommonPageAdapter @@ -161,8 +163,7 @@ import java.util.stream.Collectors @Route(path = ARouteConstants.ROOM_DETAILS) class RoomActivity : BaseMvpActivity(), - RoomContacts.View, PermissionCallbacks, OnMessageReceivedListener - { + RoomContacts.View, PermissionCallbacks, OnMessageReceivedListener { private var roomFragment: RoomFragment? = null var commonPageAdapter: CommonPageAdapter? = null private var mRoomBean: RoomBean? = null @@ -670,8 +671,45 @@ class RoomActivity : BaseMvpActivity(), // 恢复房间状态 resumeRoomState() } + + V2TIMManager.getInstance().addIMSDKListener(imSdkListener); } + + + private val imSdkListener = object : V2TIMSDKListener() { + override fun onConnecting() {} + + override fun onConnectSuccess() { //重连成功 + if (CommonAppContext.getInstance().playId != null) { + LogUtils.e("@@@", "重连成功") + RetrofitClient.getInstance().roomUserReconnect(CommonAppContext.getInstance().playId) + } + } + + override fun onConnectFailed(code: Int, error: String?) { + LogUtils.e("@@@", "断开连接") + CommonAppContext.getInstance().onConnectFailed = true + } + + override fun onKickedOffline() { + // queren1(); + if (CommonAppContext.getInstance().playId != null) { + ToastUtils.show("您的账号已被挤下线") + try { + CommonAppContext.getInstance().clearLoginInfo() + } catch (e: ClassNotFoundException) { + throw RuntimeException(e) + } + } + } + + override fun onUserSigExpired() {} + + override fun onSelfInfoUpdated(info: V2TIMUserFullInfo?) {} + } + + private fun setview(resp: RoomInfoResp) { this.mRoomInfoResp = resp val roomBean = resp.room_info @@ -1501,6 +1539,12 @@ class RoomActivity : BaseMvpActivity(), } else if (msgType == 1028) { roomFragment!!.handleMsgType1028(messageEvent) } else if (msgType == 1058) { + var userId = messageEvent!!.text!!.user_id!! + LogUtils.e("messageEvent!!.text.type"+messageEvent!!.text.type) + CommonAppContext.getInstance().onlineMap.set( + userId?.toString() ?: "", + messageEvent!!.text.type + ) if (mRoomInfoResp != null && mRoomInfoResp!!.room_info != null) { if (mRoomInfoResp!!.room_info.type_id == "1" || mRoomInfoResp!!.room_info.type_id == "3" || mRoomInfoResp!!.room_info.type_id == "4" || mRoomInfoResp!!.room_info.type_id == "8" @@ -1516,6 +1560,8 @@ class RoomActivity : BaseMvpActivity(), roomFragment!!.friendshipRoomFragmentEvent(messageEvent) } } + + CommonAppContext.getInstance().getOnlineMap() } else if (msgType == 1059) { // 1059清除个人魅力 1058在离线 if (mRoomInfoResp != null && mRoomInfoResp!!.room_info != null) { if (mRoomInfoResp!!.room_info.type_id == "1" || mRoomInfoResp!!.room_info.type_id == "3" || @@ -1664,10 +1710,10 @@ class RoomActivity : BaseMvpActivity(), val pitList = mRoomInfoResp!!.room_info.pit_list if (pitList != null && !pitList.isEmpty()) { - pitMap.clear() // 避免数据累积 - for (roomPitBean in pitList) { - pitMap[roomPitBean.pit_number] = roomPitBean - } +// pitMap.clear() // 避免数据累积 +// for (roomPitBean in pitList) { +// pitMap[roomPitBean.pit_number] = roomPitBean +// } if (text == null) { return @@ -1688,104 +1734,97 @@ class RoomActivity : BaseMvpActivity(), toPitNumber: String, messageEvent: RoomMessageEvent ) { - if (TextUtils.isEmpty(fromPitNumber) || TextUtils.isEmpty(toPitNumber)) { - return - } - - if (mRoomInfoResp == null || mRoomInfoResp!!.room_info == null) { - LogUtils.e("Room info is null") - return - } - - val pitList = mRoomInfoResp!!.room_info.pit_list - if (pitList == null || pitList.isEmpty()) { - LogUtils.e("pit_list is null or empty") - return - } - - var fromBean: RoomPitBean? = null - var toBean: RoomPitBean? = null - val pitListCopy: MutableList = ArrayList() - - for (bean in pitList) { - if (bean == null) continue - if (fromPitNumber == bean.pit_number) { - fromBean = bean - pitListCopy.add(bean) - } else if (toPitNumber == bean.pit_number) { - toBean = bean - pitListCopy.add(bean) - } - } - - if (fromBean == null || toBean == null) { - LogUtils.e("Cannot find pit number: from=$fromPitNumber, to=$toPitNumber") - return - } - - // 交换 pit_number - val temp = fromBean.pit_number - fromBean.pit_number = toBean.pit_number - toBean.pit_number = temp - - // 构造新的 pitList - val newPitList: MutableList = ArrayList() - for (bean in pitList) { - if (!pitListCopy.contains(bean)) { - newPitList.add(bean) - } - } - newPitList.add(fromBean) - newPitList.add(toBean) -// 排序 - 更简洁的 Kotlin 写法 - newPitList.sortWith(compareBy { - try { - it.pit_number.toInt() - } catch (e: NumberFormatException) { - it.pit_number - } - }) -// // 排序 -// newPitList.sort(java.util.Comparator { a: RoomPitBean, b: RoomPitBean -> + mRoomInfoResp!!.user_info.pit_number = Integer.parseInt(toPitNumber) +// if (TextUtils.isEmpty(fromPitNumber) || TextUtils.isEmpty(toPitNumber)) { +// return +// } +//// +// if (mRoomInfoResp == null || mRoomInfoResp!!.room_info == null) { +// LogUtils.e("Room info is null") +// return +// } +//// +// val pitList = mRoomInfoResp!!.room_info.pit_list +// if (pitList == null || pitList.isEmpty()) { +// LogUtils.e("pit_list is null or empty") +// return +// } +//// +// var fromBean: RoomPitBean? = null +// var toBean: RoomPitBean? = null +// val pitListCopy: MutableList = ArrayList() +// +// for (bean in pitList) { +// if (bean == null) continue +// if (fromPitNumber == bean.pit_number) { +// fromBean = bean +// pitListCopy.add(bean) +// } else if (toPitNumber == bean.pit_number) { +// toBean = bean +// pitListCopy.add(bean) +// } +// } +// +// if (fromBean == null || toBean == null) { +// LogUtils.e("Cannot find pit number: from=$fromPitNumber, to=$toPitNumber") +// return +// } +// +// // 交换 pit_number +// val temp = fromBean.pit_number +// fromBean.pit_number = toBean.pit_number +// toBean.pit_number = temp +// +// // 构造新的 pitList +// val newPitList: MutableList = ArrayList() +// for (bean in pitList) { +// if (!pitListCopy.contains(bean)) { +// newPitList.add(bean) +// } +// } +// newPitList.add(fromBean) +// newPitList.add(toBean) +//// 排序 - 更简洁的 Kotlin 写法 +// newPitList.sortWith(compareBy { // try { -// return@sort Integer.compare(a.pit_number.toInt(), b.pit_number.toInt()) +// it.pit_number.toInt() // } catch (e: NumberFormatException) { -// return@sort a.pit_number.compareTo(b.pit_number) +// it.pit_number // } // }) - - mRoomInfoResp!!.room_info.pit_list = newPitList - - // 更新当前用户 pit_number - if (mRoomInfoResp!!.user_info != null) { - val currentUserId = SpUtil.getUserId().toString() - val fromUserId = fromBean.user_id - val toUserId = toBean.user_id - - if (fromUserId != null && fromUserId == currentUserId) { - try { - mRoomInfoResp!!.user_info.pit_number = fromBean.pit_number.toInt() - } catch (e: NumberFormatException) { - LogUtils.e("Invalid pit number: " + toBean.pit_number) - } - } else if (toUserId != null && toUserId == currentUserId) { - try { - mRoomInfoResp!!.user_info.pit_number = fromBean.pit_number.toInt() - } catch (e: NumberFormatException) { - LogUtils.e("Invalid pit number: " + toBean.pit_number) - } - } - } +// +// mRoomInfoResp!!.room_info.pit_list = newPitList +// +// // 更新当前用户 pit_number +// if (mRoomInfoResp!!.user_info != null) { +// val currentUserId = SpUtil.getUserId().toString() +// val fromUserId = fromBean.user_id +// val toUserId = toBean.user_id +// +// if (fromUserId != null && fromUserId == currentUserId) { +// try { +// mRoomInfoResp!!.user_info.pit_number = fromBean.pit_number.toInt() +// } catch (e: NumberFormatException) { +// LogUtils.e("Invalid pit number: " + toBean.pit_number) +// } +// } else if (toUserId != null && toUserId == currentUserId) { +// try { +// mRoomInfoResp!!.user_info.pit_number = fromBean.pit_number.toInt() +// } catch (e: NumberFormatException) { +// LogUtils.e("Invalid pit number: " + toBean.pit_number) +// } +// } +// } dispatchRoomEvent(messageEvent) } private fun dispatchRoomEvent(messageEvent: RoomMessageEvent) { if (mRoomInfoResp == null || mRoomInfoResp!!.room_info == null) return - + roomFragment!!.upRoomInfoData(mRoomInfoResp) val typeId = mRoomInfoResp!!.room_info.type_id if ("2" == typeId) { - roomFragment!!.upRoomInfoData(mRoomInfoResp) + roomFragment!!.handleAuctionMessageEvent(messageEvent) } else if ("3" == typeId || "4" == typeId || "1" == typeId || "8" == typeId) { val labelId = mRoomInfoResp!!.room_info.label_id @@ -1886,7 +1925,7 @@ class RoomActivity : BaseMvpActivity(), } } } - + CommonAppContext.getInstance().onlineMap.clear() MvpPre!!.postRoomInfo(roomId) } @@ -1955,6 +1994,8 @@ class RoomActivity : BaseMvpActivity(), if ("2" == labelId) { roomFragment!!.KtvFragmentEvent(messageEvent) } else if ("1" == labelId) { + mRoomInfoResp!!.room_info.pit_list.set(pitNumber.toInt()-1, getPitBean(messageEvent)) + roomFragment!!.upRoomInfoData(mRoomInfoResp) roomFragment!!.SingSongEvent(messageEvent) } } else if ("7" == typeId) { @@ -2030,6 +2071,8 @@ class RoomActivity : BaseMvpActivity(), if ("2" == labelId) { roomFragment!!.KtvFragmentEvent(messageEvent) } else if ("1" == labelId) { + mRoomInfoResp!!.room_info.pit_list.set(pitNumber.toInt()-1, getPitBean2(messageEvent,pitNumber)) + roomFragment!!.upRoomInfoData(mRoomInfoResp) roomFragment!!.SingSongEvent(messageEvent) if (mRoomInfoResp!!.user_info.user_id == SpUtil.getUserId().toString() + "") { ivSoundEffects(false) @@ -2113,6 +2156,7 @@ class RoomActivity : BaseMvpActivity(), if (text == null || text.fromUserInfo == null) return if (text.fromUserInfo.user_id == SpUtil.getUserId()) { + LogUtils.e("退出房间") MvpPre!!.quitRoom(roomId, SpUtil.getUserId().toString() + "") } } @@ -3340,10 +3384,30 @@ class RoomActivity : BaseMvpActivity(), mBinding!!.xlhRk.visibility = View.INVISIBLE releaseCountDownTimer1() } - +// tzblChanged() // sharedViewModel.setDataForFragment(mRoomInfoResp); // } + protected fun tzblChanged() { +// mBinding.dhv9.updateTzbl(SpUtil.getTzbl(roomId)); + + val userIds = StringBuilder() + for (i in 0 until mRoomInfoResp!!.room_info!!.pit_list!!.size) { + val userId = mRoomInfoResp!!.room_info!!.pit_list[i]!!.user_id!! + if (userId != null && userId != "0" && userId.isNotEmpty()) { + if (userIds.isNotEmpty()) { + userIds.append(",") + } + userIds.append(userId) + } + } + + if (userIds.isNotEmpty() && roomId != null) { + MvpPre!!.userOnlineStatus(userIds.toString(), roomId) + } else { +// updateWheatData() + } + } private fun instView() { //隐藏视图 @@ -3623,7 +3687,16 @@ class RoomActivity : BaseMvpActivity(), CommonAppContext.getInstance().isRoomJoininj = false // 当Activity恢复时,重置标记 userLeaving = true + RetrofitClient.getInstance().roomUserReconnect(CommonAppContext.getInstance().playId) + if(CommonAppContext.getInstance().onConnectFailed){//判断是否有有过断开腾讯IM + CommonAppContext.getInstance().onConnectFailed=false + if (CommonAppContext.getInstance().playId!=null && !CommonAppContext.getInstance().playId.isEmpty()) { //判断是否有roomId + LogUtils.e("RoomActivity", "onResume playId:"+CommonAppContext.getInstance().playId) + MvpPre!!.postRoomInfo(CommonAppContext.getInstance().playId)//当有过断开,然后重新连接 + LogUtils.e("RoomActivity", "onResume playId:"+CommonAppContext.getInstance().playId) + } + } // // 正常启动或从后台恢复 // if (isInBackground) { @@ -4064,7 +4137,14 @@ class RoomActivity : BaseMvpActivity(), if (!list.isEmpty()) { for (i in list.indices) { val userOnlineStatusBean = list[i] + + var userId = userOnlineStatusBean!!.user_id + CommonAppContext.getInstance().onlineMap.set( + userId?.toString() ?: "", + userOnlineStatusBean!!.is_online + ) EventBus.getDefault().post(userOnlineStatusBean) + } } } @@ -4163,6 +4243,7 @@ class RoomActivity : BaseMvpActivity(), ThreadUtils.cancel() QXGiftPlayerManager.getInstance(applicationContext).destroyEffectSvga() stopkeepLiveService() //停止service + CommonAppContext.getInstance().onlineMap.clear() } catch (e: Exception) { LogUtils.e("cleanupResources error: " + e.message) } @@ -4357,7 +4438,8 @@ class RoomActivity : BaseMvpActivity(), * 停止保活 */ private fun stopkeepLiveService() { - val isStartService = isServiceExisted(this, "com.example.modulerroom.service.RoomPlayService") + val isStartService = + isServiceExisted(this, "com.example.moduleroom.service.RoomPlayService") if (isStartService) { val stopIntent = Intent( this, diff --git a/moduleroom/src/main/java/com/example/moduleroom/contacts/FriendshipRoomContacts.java b/moduleroom/src/main/java/com/example/moduleroom/contacts/FriendshipRoomContacts.java index 3e756ee..dbdc3eb 100644 --- a/moduleroom/src/main/java/com/example/moduleroom/contacts/FriendshipRoomContacts.java +++ b/moduleroom/src/main/java/com/example/moduleroom/contacts/FriendshipRoomContacts.java @@ -4,8 +4,11 @@ import android.app.Activity; import com.xscm.moduleutil.activity.IPresenter; import com.xscm.moduleutil.activity.IView; +import com.xscm.moduleutil.bean.UserOnlineStatusBean; import com.xscm.moduleutil.bean.room.FriendUserBean; +import java.util.List; + public class FriendshipRoomContacts { public interface View extends IView { void applyPit(); @@ -13,6 +16,8 @@ public class FriendshipRoomContacts { void endFriend(FriendUserBean friendUserBean); void createRelation(); + + void userOnlineStatus(List list); } public interface IRoomPre extends IPresenter { @@ -25,5 +30,7 @@ public class FriendshipRoomContacts { void endFriend(String friend_id,String room_id); void createRelation(String room_id,String friend_id,String user1_id,String user2_id,String relation_id); + + void userOnlineStatus(String userId, String roomid); } } diff --git a/moduleroom/src/main/java/com/example/moduleroom/fragment/FriendshipRoomFragment.java b/moduleroom/src/main/java/com/example/moduleroom/fragment/FriendshipRoomFragment.java index 38981eb..5c049fa 100644 --- a/moduleroom/src/main/java/com/example/moduleroom/fragment/FriendshipRoomFragment.java +++ b/moduleroom/src/main/java/com/example/moduleroom/fragment/FriendshipRoomFragment.java @@ -32,11 +32,14 @@ import com.example.moduleroom.dialog.RoomGiftDialogFragment; import com.example.moduleroom.dialog.RoomOnlineDialogFragment; import com.example.moduleroom.dialog.RoomUserInfoFragment; import com.example.moduleroom.presenter.FriendshipRoomPresenter; +import com.example.moduleroom.presenter.SingSongPresenter; import com.orhanobut.logger.Logger; import com.xscm.moduleutil.base.BaseRoomFragment; +import com.xscm.moduleutil.base.CommonAppContext; import com.xscm.moduleutil.bean.RoomMessageEvent; import com.xscm.moduleutil.bean.RoomRelationBean; import com.xscm.moduleutil.bean.UserInfo; +import com.xscm.moduleutil.bean.UserOnlineStatusBean; import com.xscm.moduleutil.bean.room.FriendInfo; import com.xscm.moduleutil.bean.room.FriendUserBean; import com.xscm.moduleutil.bean.room.RoomInfoResp; @@ -48,6 +51,7 @@ import com.xscm.moduleutil.utils.ClickUtils; import com.xscm.moduleutil.utils.SpUtil; import com.xscm.moduleutil.utils.StringUtil; import com.xscm.moduleutil.widget.RoomFriendshipWheatView; +import com.xscm.moduleutil.widget.RoomSingSongWheatView; import com.xscm.moduleutil.widget.SharedViewModel; import java.util.ArrayList; @@ -84,6 +88,7 @@ public class FriendshipRoomFragment extends BaseRoomFragment userViewMap = new HashMap<>(); + /// 底部的 @Override public void applyPit() { @@ -109,11 +114,30 @@ public class FriendshipRoomFragment extends BaseRoomFragment list) { + if (list != null) { + for (int i = 0; i < list.size(); i++) { + String userOnlineStatusBean = list.get(i).getUser_id(); + CommonAppContext.getInstance().onlineMap.put(userOnlineStatusBean, list.get(i).getIs_online()); + + } + } + for (RoomFriendshipWheatView roomFriendshipWheatView : mWheatViews) { + if (roomFriendshipWheatView != null) { + RoomPitBean pitBean = roomFriendshipWheatView.pitBean; + roomFriendshipWheatView.setOnlineStatus(); + } + } + } + private SharedViewModel sharedViewModel; @Nullable @Override - public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { + public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup + container, @Nullable Bundle savedInstanceState) { // sharedViewModel = new ViewModelProvider(requireActivity()).get(SharedViewModel.class); // // // 观察专门给子Fragment的数据 @@ -127,7 +151,8 @@ public class FriendshipRoomFragment extends BaseRoomFragment 0) { + userIds.append(","); + } + userIds.append(userId); + } + } + } + + if (userIds.length() > 0 && roomId != null) { + if (MvpPre == null) { + MvpPre = new FriendshipRoomPresenter(this, getActivity()); + } + MvpPre.userOnlineStatus(userIds.toString(), roomId); + } else { +// updateWheatData(); + } + } + public void upRoomInfo(RoomInfoResp roomInfoResp) { this.roomInfoResp = roomInfoResp; } @@ -270,26 +319,29 @@ public class FriendshipRoomFragment extends BaseRoomFragment pitList = roomInfoResp.getRoom_info().getPit_list(); - if (pitList != null && !pitList.isEmpty()) { - try { - RoomPitBean pitBean = pitList.get(Integer.parseInt(pitNumber) - 1); - pitBean.setUser_id(userId + ""); - pitBean.setAvatar(fromUserInfo.getAvatar()); - pitBean.setNickname(fromUserInfo.getNickname()); - pitBean.setSex(fromUserInfo.getSex() + ""); - pitBean.setCharm(fromUserInfo.getCharm()); - pitBean.setDress(fromUserInfo.getDress()); - pitList.set(Integer.parseInt(pitNumber) - 1, pitBean); - if (userId==SpUtil.getUserId() && pitNumber.equals("9")){ - myPitNumber=9; - configGameOptionBtn(); +// List pitList = roomInfoResp.getRoom_info().getPit_list(); +// if (pitList != null && !pitList.isEmpty()) { +// try { +// RoomPitBean pitBean = pitList.get(Integer.parseInt(pitNumber) - 1); + RoomPitBean pitBean = mWheatViews.get(Integer.parseInt(pitNumber) - 1).pitBean; + pitBean.setUser_id(userId + ""); + pitBean.setAvatar(fromUserInfo.getAvatar()); + pitBean.setNickname(fromUserInfo.getNickname()); + pitBean.setSex(fromUserInfo.getSex() + ""); + pitBean.setCharm(fromUserInfo.getCharm()); + pitBean.setDress(fromUserInfo.getDress()); +// pitList.set(Integer.parseInt(pitNumber) - 1, pitBean); + mWheatViews.get(Integer.parseInt(pitNumber) - 1).pitBean = pitBean; + if (userId == SpUtil.getUserId() && pitNumber.equals("9")) { + myPitNumber = 9; + configGameOptionBtn(); // if (getActivity() instanceof RoomActivity) { // ((RoomActivity) getActivity()).ivSoundEffects(true); // } - } - for (int i = 0; i < mWheatViews.size(); i++){ - if (i==Integer.parseInt(pitNumber) - 1){ - mWheatViews.get(i).setData(pitBean); - break; - } - } - - - } catch (NumberFormatException e) { - // Handle exception + } + for (int i = 0; i < mWheatViews.size(); i++) { + if (i == Integer.parseInt(pitNumber) - 1) { + mWheatViews.get(i).setData(pitBean); + break; } } + + +// } catch (NumberFormatException e) { +// // Handle exception +// } +// } + initUserViewMap(); } - public void event1004(RoomMessageEvent messageEvent){ + public void event1004(RoomMessageEvent messageEvent) { String pitNumber = messageEvent.getText().getPit_number(); - List pitList = roomInfoResp.getRoom_info().getPit_list(); - if (pitList != null && !pitList.isEmpty()) { - try { - RoomPitBean pitBean = pitList.get(Integer.parseInt(pitNumber) - 1); - pitBean.setUser_id(""); - pitBean.setAvatar(""); - pitBean.setNickname(""); - pitBean.setSex(""); - pitBean.setCharm(""); - pitBean.setDress(""); - pitList.set(Integer.parseInt(pitNumber) - 1, pitBean); - if (pitNumber.equals("9")){ - myPitNumber=0; - configGameOptionBtn(); +// List pitList = roomInfoResp.getRoom_info().getPit_list(); +// if (pitList != null && !pitList.isEmpty()) { +// try { +// RoomPitBean pitBean = pitList.get(Integer.parseInt(pitNumber) - 1); + RoomPitBean pitBean = mWheatViews.get(Integer.parseInt(pitNumber) - 1).pitBean; + pitBean.setUser_id(""); + pitBean.setAvatar(""); + pitBean.setNickname(""); + pitBean.setSex(""); + pitBean.setCharm(""); + pitBean.setDress(""); + mWheatViews.get(Integer.parseInt(pitNumber) - 1).pitBean = pitBean; + if (pitNumber.equals("9")) { + myPitNumber = 0; + configGameOptionBtn(); // if (getActivity() instanceof RoomActivity) { // ((RoomActivity) getActivity()).ivSoundEffects(false); // } - } - for (int i = 0; i < mWheatViews.size(); i++){ - if (i==Integer.parseInt(pitNumber) - 1){ - mWheatViews.get(i).setData(pitBean); - break; - } - } - } catch (NumberFormatException e) { - // Handle exception + } + for (int i = 0; i < mWheatViews.size(); i++) { + if (i == Integer.parseInt(pitNumber) - 1) { + mWheatViews.get(i).setData(pitBean); + break; } +// } +// } catch (NumberFormatException e) { +// // Handle exception +// } } initUserViewMap(); } + public void event1035(RoomMessageEvent message) { for (int i = 0; i < roomInfoResp.getRoom_info().getPit_list().size(); i++) { @@ -510,28 +567,69 @@ public class FriendshipRoomFragment extends BaseRoomFragment 10) { - continue; - } - RoomFriendshipWheatView object = mWheatViews.get(Integer.parseInt(roomPitBean.getPit_number()) - 1); + public void event1039(RoomMessageEvent messageEvent) { - if (object != null) { - object.setData(roomPitBean); - } else { - continue; + String fromPit = messageEvent.getText().getFrom_pit_number(); + String toPitNumber = messageEvent.getText().getTo_pit_number(); + if (fromPit.equals("") || toPitNumber.equals("")) { + return; + } + RoomFriendshipWheatView fromWheatView = mWheatViews.get(Integer.parseInt(fromPit) - 1); + RoomFriendshipWheatView toWheatView = mWheatViews.get(Integer.parseInt(toPitNumber) - 1); + RoomPitBean fromPitBean = fromWheatView.pitBean; + RoomPitBean toPitBean = toWheatView.pitBean; + String tmpNumber = fromPitBean.getPit_number(); + fromPitBean.setPit_number(toPitBean.getPit_number()); +// roomInfoResp.getRoom_info().getPit_list().set(Integer.parseInt(fromPit) - 1, fromPitBean); + toPitBean.setPit_number(tmpNumber); + toWheatView.setData(fromPitBean); + fromWheatView.setData(toPitBean); + for (RoomFriendshipWheatView view : mWheatViews) { + if (view == null) { + return; + } + if (view.pitBean != null && view.pitBean.getUser_id() != null) { + if (view.pitBean.getUser_id().equals(messageEvent.getText().getFromUserInfo().getUser_id() + "")) { + if (!view.pitBean.getPit_number().equals(toPitNumber)) { + RoomPitBean bean = view.pitBean; + bean.setCharm(""); + bean.setUser_id(""); + bean.setDress(""); + bean.setAvatar(""); + bean.setNickname(""); + bean.setSex(""); + bean.setUser_code(""); + bean.setDress_picture(""); + view.setData(bean); +// roomInfoResp.getRoom_info().getPit_list().set(Integer.parseInt(view.pitBean.getPit_number()) - 1, bean); + } + } } } + + +// for (int i = 0; i < roomInfoResp.getRoom_info().getPit_list().size(); i++) { +// RoomPitBean roomPitBean = roomInfoResp.getRoom_info().getPit_list().get(i); +// if (roomPitBean.getPit_number().equals("7") || roomPitBean.getPit_number().equals("8")) { +// continue; +// } +// if (Integer.parseInt(!roomPitBean.getPit_number().isEmpty() ? roomPitBean.getPit_number() : "0") > 10) { +// continue; +// } +// +// RoomFriendshipWheatView object = mWheatViews.get(Integer.parseInt(roomPitBean.getPit_number()) - 1); +// +// if (object != null) { +// object.setData(roomPitBean); +// } else { +// continue; +// } +// } } // 在 initData() 方法中初始化映射关系 - //初始化对应的map +//初始化对应的map private void initUserViewMap() { userViewMap.clear(); // 注意:这里需要确保 pitBean 和 getUser_id() 在初始化时已经设置 @@ -545,6 +643,7 @@ public class FriendshipRoomFragment extends BaseRoomFragment toUserInfos = messageEvent.getText().getToUserInfos(); @@ -948,7 +1048,7 @@ public class FriendshipRoomFragment extends BaseRoomFragment heartLists) { - if (roomInfoResp.getFriend_info()!=null) { + if (roomInfoResp.getFriend_info() != null) { // 更新心动数值显示 roomInfoResp.getFriend_info().setHeart_list(heartLists); } @@ -962,9 +1062,9 @@ public class FriendshipRoomFragment extends BaseRoomFragment pitArr) { // 使用实际的麦位模型类 - boolean isHaveMe=false; + boolean isHaveMe = false; if (myPitNumber == 9 || myPitNumber == 10) { - isHaveMe=true; + isHaveMe = true; } else { myPitNumber = -1; } @@ -983,16 +1083,16 @@ public class FriendshipRoomFragment extends BaseRoomFragment 0 && mBinding.wheatView6.pitBean != null) { // 弹出礼物视图 songGift(pitBean); - }else { + } else { ToastUtils.showShort("暂未有心动连线,快去送TA礼物"); } return; } - if (pitBean.getPit_number().equals("2")){ + if (pitBean.getPit_number().equals("2")) { if (md1 != null && md1.getHeartNum() > 0 && mBinding.wheatView5.pitBean != null) { songGift(pitBean); - }else { + } else { ToastUtils.showShort("暂未有心动连线,快去送TA礼物"); } return; } - if (pitBean.getPit_number().equals("3")){ + if (pitBean.getPit_number().equals("3")) { if (md3 != null && md3.getHeartNum() > 0 && mBinding.wheatView4.pitBean != null) { songGift(pitBean); - }else { + } else { ToastUtils.showShort("暂未有心动连线,快去送TA礼物"); } return; } - if (pitBean.getPit_number().equals("4")){ + if (pitBean.getPit_number().equals("4")) { if (md3 != null && md3.getHeartNum() > 0 && mBinding.wheatView3.pitBean != null) { songGift(pitBean); - }else { + } else { ToastUtils.showShort("暂未有心动连线,快去送TA礼物"); } return; } - if (pitBean.getPit_number().equals("5")){ + if (pitBean.getPit_number().equals("5")) { if (md1 != null && md1.getHeartNum() > 0 && mBinding.wheatView2.pitBean != null) { songGift(pitBean); - }else { + } else { ToastUtils.showShort("暂未有心动连线,快去送TA礼物"); } return; } - if (pitBean.getPit_number().equals("6")){ + if (pitBean.getPit_number().equals("6")) { if (md2 != null && md2.getHeartNum() > 0 && mBinding.wheatView1.pitBean != null) { songGift(pitBean); - }else { + } else { ToastUtils.showShort("暂未有心动连线,快去送TA礼物"); } return; @@ -1309,7 +1410,7 @@ public class FriendshipRoomFragment extends BaseRoomFragment list) { +// if (list != null) { +// for (int i = 0; i < list.size(); i++) { +// if (roomInfoRespPk == null || roomInfoRespPk.getPk_info() == null) { +// wheatLayoutSingManager.updateSingleOnlineWheat(list.get(i)); +// } else { +// wheatLayoutManager1.updateSingleOnlineWheat(list.get(i)); +// } +//// EventBus.getDefault().post(list.get(i)); +// } +// } + if (list != null) { for (int i = 0; i < list.size(); i++) { - if (roomInfoRespPk == null || roomInfoRespPk.getPk_info() == null) { - wheatLayoutSingManager.updateSingleOnlineWheat(list.get(i)); - } else { - wheatLayoutManager1.updateSingleOnlineWheat(list.get(i)); - } -// EventBus.getDefault().post(list.get(i)); + String userOnlineStatusBean = list.get(i).getUser_id(); + CommonAppContext.getInstance().onlineMap.put(userOnlineStatusBean, list.get(i).getIs_online()); } } } @@ -1337,9 +1346,10 @@ public class SingSongFragment extends BaseRoomFragment>() { + @Override + public void onSubscribe(Disposable d) { + addDisposable(d); + } + + @Override + public void onNext(List userOnlineStatusBean) { + if (MvpRef==null){ + MvpRef=new WeakReference<>(mView); + } + MvpRef.get().userOnlineStatus(userOnlineStatusBean); + } + }); + } + } diff --git a/moduleroom/src/main/java/com/example/moduleroom/service/ForegroundService.kt b/moduleroom/src/main/java/com/example/moduleroom/service/ForegroundService.kt index 1b2ad0c..413820c 100644 --- a/moduleroom/src/main/java/com/example/moduleroom/service/ForegroundService.kt +++ b/moduleroom/src/main/java/com/example/moduleroom/service/ForegroundService.kt @@ -4,6 +4,7 @@ import android.app.Service import android.content.Intent import android.os.IBinder import android.util.Log +import com.tencent.imsdk.v2.V2TIMManager import java.util.* //前台服务 diff --git a/tuichat/src/main/AndroidManifest.xml b/tuichat/src/main/AndroidManifest.xml index 1c09e94..62a3619 100644 --- a/tuichat/src/main/AndroidManifest.xml +++ b/tuichat/src/main/AndroidManifest.xml @@ -1,5 +1,6 @@ - + @@ -93,7 +94,12 @@ - + \ No newline at end of file