退出房间

This commit is contained in:
2026-01-08 17:02:29 +08:00
parent 0b37364a11
commit e74bfde545
12 changed files with 125 additions and 72 deletions

View File

@@ -4829,7 +4829,7 @@ public class RetrofitClient {
@Override
public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
if (response.code() == 200) {
observer.onNext(null);
observer.onNext("");
} else {
ToastUtils.showShort("请求错误:" + response.code());
LogUtils.e("quitRoom", response.message());

View File

@@ -339,10 +339,12 @@ public class MessageExListenerSingleton {
public void onRecvGroupCustomMessage(String msgID, String groupID, V2TIMGroupMemberInfo sender, byte[] customData) {
LogUtils.d("收到群自定义消息:群组 " + groupID + "" + sender.getNickName());
if (!groupID.equals("")) {
if (groupID.replace("room","").equals(mRoomId)) {
String message = new String(customData, StandardCharsets.UTF_8);
RoomMessageEvent event = GsonUtils.fromJson(message, RoomMessageEvent.class);
notifyMessageReceived(event);
LogUtils.d("收到群自定义消息(信令):", message);
}
} else {
String message = new String(customData, StandardCharsets.UTF_8);
LogUtils.d("收到群自定义消息(信令):", message);

View File

@@ -1582,11 +1582,13 @@ class RoomActivity : BaseMvpActivity<RoomPresenter?, ActivityRoomBinding?>(),
roomFragment?.handleRoomMessage(messageEvent)
} else if (msgType == EMMessageInfo.QXRoomMessageTypeFlirtatiousRoom) {//酒吧房约她进入小黑屋
if (mRoomInfoResp?.user_info?.user_id.toString() == messageEvent.text.user_id
|| mRoomInfoResp?.user_info?.user_id.toString() == messageEvent.text.meet_user_id) {
|| mRoomInfoResp?.user_info?.user_id.toString() == messageEvent.text.meet_user_id
) {
if (mRoomInfoResp?.user_info?.pit_number != 0) {
MvpPre?.downPit(roomId, mRoomInfoResp?.user_info?.pit_number.toString())
}
MvpPre?.postRoomInfo(messageEvent.text.room_id)
AgoraManager.getInstance().lastRoomId = roomId
MvpPre?.getRoomIn(messageEvent.text.room_id,"")
if (publicScreenFragment != null) {
MessageExListenerSingleton.getInstance().joinGroup(messageEvent.text.room_id)
publicScreenFragment?.setupExMessageListener()
@@ -2271,6 +2273,10 @@ class RoomActivity : BaseMvpActivity<RoomPresenter?, ActivityRoomBinding?>(),
updateCharmForAllPitBeans("")
roomFragment!!.upFriendList(mRoomInfoResp?.room_info?.pit_list)
}
//酒吧房用
if (publicScreenFragment != null)
publicScreenFragment?.isPriRoom = false
}
private fun updateCharmForAllPitBeans(charm: String) {

View File

@@ -1,11 +1,9 @@
package com.xscm.modulemain.activity.room.contacts
import android.app.Activity
import android.media.Image
import android.widget.ImageView
import com.xscm.moduleutil.activity.IPresenter
import com.xscm.moduleutil.activity.IView
import com.xscm.moduleutil.bean.GiftBean
import com.xscm.moduleutil.bean.RoonGiftModel
import com.xscm.moduleutil.bean.WalletBean
@@ -18,6 +16,8 @@ class PrivateContacts {
fun sendGiftResult(success:Boolean,imageView: ImageView)
fun getGiftList(list: List<RoonGiftModel>)
fun exitRoom()
}
interface Ipre : IPresenter{
@@ -27,6 +27,8 @@ class PrivateContacts {
fun sendGift(mRoomId:String,giftId: String,mUserId:String,imageView: ImageView)
fun exitRoom(roomId: String?, userId: String?)
fun wallet(list:List<String>)

View File

@@ -74,7 +74,7 @@ public class ChatRoomFragment extends BaseMvpFragment<ChatRoomPresenter, RoomFra
private MessageListenerSingleton.PublicScreenMessageListener messageListener;
private MessageExListenerSingleton.PublicScreenMessageListener messageExListener;
@Setter
private boolean isPriRoom = false;
public boolean isPriRoom = false;
// 在需要的地方调用 Activity 的方法
public void someMethod() {
@@ -176,6 +176,7 @@ public class ChatRoomFragment extends BaseMvpFragment<ChatRoomPresenter, RoomFra
* 设置消息监听器
*/
public void setupExMessageListener() {
isPriRoom = true;
// 创建并添加监听器
messageExListener = message -> {
// 确保在主线程更新 UI
@@ -472,11 +473,11 @@ public class ChatRoomFragment extends BaseMvpFragment<ChatRoomPresenter, RoomFra
if (message.getRoomId() == null) {
return;
}
if (!isPriRoom){
if (roomId == null || (!message.getRoomId().contains(roomId) && message.getMsgType() != 125)) {
return;
}
}
// 使用Handler将消息处理放到消息队列中避免阻塞
synchronized (queueLock) {
if (messageHandler.hasMessages(MSG_HANDLE_ROOM_MESSAGE)) {

View File

@@ -8,9 +8,12 @@ import android.view.View
import android.view.animation.LinearInterpolator
import android.widget.ImageView
import com.blankj.utilcode.util.ActivityUtils
import com.blankj.utilcode.util.LogUtils
import com.blankj.utilcode.util.TimeUtils
import com.bumptech.glide.Glide
import com.orhanobut.logger.Logger
import com.xscm.modulemain.R
import com.xscm.modulemain.activity.room.activity.RoomActivity
import com.xscm.modulemain.activity.room.contacts.PrivateContacts
import com.xscm.modulemain.activity.room.presenter.PrivatePresenter
import com.xscm.modulemain.databinding.FragmentRoomPrivateBinding
@@ -26,8 +29,10 @@ import com.xscm.moduleutil.listener.MessageExListenerSingleton
import com.xscm.moduleutil.listener.MessageListenerSingleton
import io.reactivex.Observable
import io.reactivex.android.schedulers.AndroidSchedulers
import java.util.Date
import java.util.concurrent.TimeUnit
class RoomPrivateFragment(var mRoomInfoResp: RoomInfoResp?) :
BaseMvpFragment<PrivatePresenter, FragmentRoomPrivateBinding>(), PrivateContacts.View {
@@ -83,7 +88,7 @@ class RoomPrivateFragment(var mRoomInfoResp: RoomInfoResp?) :
mBinding?.tvBack?.setOnClickListener {
//返回到上一个房间
MvpPre?.exitRoom(mRoomId,mUserInfo?.user_id.toString())
}
// 定义两个 RoomPitBean 对象,分别用于显示在 roomMakeWheat1 和 roomMakeWheat2
@@ -232,6 +237,18 @@ class RoomPrivateFragment(var mRoomInfoResp: RoomInfoResp?) :
}
}
override fun exitRoom() {
if (activity is RoomActivity) {
LogUtils.e(
"lxj",
("退出房间时间:" + TimeUtils.date2String(Date())).toString() + ":退出的roomId" + mRoomId
)
MessageExListenerSingleton.quitGroup(mRoomId)
(activity as RoomActivity).quit()
(activity as RoomActivity).jiaR()
}
}
fun startSmallFloatingAnimation(view: View, floatRangeDp: Float = 10f) {
// 1. 计算飘动范围(默认 ±10dp可调整

View File

@@ -168,7 +168,6 @@ class RoomPubFragment(var mRoomInfoResp: RoomInfoResp?) :
view.pitBean.user_id,
mRoomId
).show()
}
}

View File

@@ -2,16 +2,13 @@ package com.xscm.modulemain.activity.room.presenter
import android.content.Context
import android.widget.ImageView
import com.xscm.modulemain.activity.room.contacts.MentorShipContacts
import com.xscm.modulemain.activity.room.contacts.PrivateContacts
import com.xscm.modulemain.activity.room.contacts.PubContacts
import com.xscm.moduleutil.bean.RoomGiftData
import com.xscm.moduleutil.bean.RoonGiftModel
import com.xscm.moduleutil.bean.WalletBean
import com.xscm.moduleutil.http.BaseObserver
import com.xscm.moduleutil.http.RetrofitClient
import com.xscm.moduleutil.presenter.BasePresenter
import com.xscm.moduleutil.presenter.RewardGiftContacts
import io.reactivex.disposables.Disposable
import java.lang.ref.WeakReference
@@ -63,6 +60,21 @@ class PrivatePresenter(context: Context, val view: PrivateContacts.View?) :
})
}
override fun exitRoom(roomId: String?, userId: String?) {
RetrofitClient.getInstance().quitRoom(roomId, userId, object : BaseObserver<String?>() {
override fun onSubscribe(d: Disposable) {
addDisposable(d)
}
override fun onNext(string: String) {
if (MvpRef == null) {
MvpRef = WeakReference<PrivateContacts.View>(view)
}
MvpRef.get()?.exitRoom()
}
})
}
override fun wallet(list:List<String>) {
RetrofitClient.getInstance().wallet(object : BaseObserver<WalletBean?>() {

View File

@@ -83,16 +83,16 @@ class RoomPubWheatView : BaseWheatView {
"9" -> {
iv_tag_type?.visibility = View.VISIBLE
iv_tag_type?.setImageResource(com.xscm.moduleutil.R.mipmap.zc)
tv_time?.visibility = View.GONE
ll_bottom?.visibility = View.GONE
tv_time?.visibility = View.INVISIBLE
ll_bottom?.visibility = View.INVISIBLE
iv_custom_gift?.visibility = View.GONE
}
"10" -> {
iv_tag_type?.visibility = View.VISIBLE
iv_tag_type?.setImageResource(com.xscm.moduleutil.R.mipmap.jb)
tv_time?.visibility = View.GONE
ll_bottom?.visibility = View.GONE
tv_time?.visibility = View.INVISIBLE
ll_bottom?.visibility = View.INVISIBLE
iv_custom_gift?.visibility = View.GONE
}

View File

@@ -53,6 +53,20 @@
android:orientation="vertical"
app:layout_constraintGuide_percent="0.2" />
<androidx.constraintlayout.widget.Guideline
android:id="@+id/guide_line_left_2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintGuide_percent="0.35" />
<androidx.constraintlayout.widget.Guideline
android:id="@+id/guide_line_right_2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintGuide_percent="0.7" />
<androidx.constraintlayout.widget.Guideline
android:id="@+id/guide_line_right"
android:layout_width="wrap_content"
@@ -62,22 +76,22 @@
<com.xscm.modulemain.widget.RoomPubWheatView
android:id="@+id/rpwv_top_left"
android:layout_width="@dimen/dp_90"
android:layout_width="@dimen/dp_140"
android:layout_height="0dp"
android:layout_marginTop="@dimen/dp_10"
android:layout_marginEnd="@dimen/dp_20"
app:layout_constraintDimensionRatio="1:1.11"
app:layout_constraintEnd_toEndOf="@id/guide_line_midd"
app:layout_constraintDimensionRatio="1:0.68"
app:layout_constraintStart_toStartOf="@id/guide_line_left_2"
app:layout_constraintEnd_toEndOf="@id/guide_line_left_2"
app:layout_constraintTop_toTopOf="parent" />
<com.xscm.modulemain.widget.RoomPubWheatView
android:id="@+id/rpwv_top_right"
android:layout_width="@dimen/dp_90"
android:layout_width="@dimen/dp_140"
android:layout_height="0dp"
android:layout_marginStart="@dimen/dp_20"
android:layout_marginTop="@dimen/dp_10"
app:layout_constraintDimensionRatio="1:1.11"
app:layout_constraintStart_toStartOf="@id/guide_line_midd"
app:layout_constraintDimensionRatio="1:0.68"
app:layout_constraintStart_toStartOf="@id/guide_line_right_2"
app:layout_constraintEnd_toEndOf="@id/guide_line_right_2"
app:layout_constraintTop_toTopOf="parent" />
@@ -91,9 +105,9 @@
<com.xscm.modulemain.widget.RoomPubWheatView
android:id="@+id/rpwv_1"
android:layout_width="@dimen/dp_95"
android:layout_width="@dimen/dp_140"
android:layout_height="0dp"
app:layout_constraintDimensionRatio="1:1"
app:layout_constraintDimensionRatio="1:0.68"
app:layout_constraintEnd_toEndOf="@id/guide_line_left"
app:layout_constraintStart_toStartOf="@id/guide_line_left"
app:layout_constraintTop_toTopOf="@id/guide_line_content_top" />
@@ -101,10 +115,10 @@
<com.xscm.modulemain.widget.RoomPubWheatView
android:id="@+id/rpwv_4"
android:layout_width="@dimen/dp_95"
android:layout_width="@dimen/dp_140"
android:layout_height="0dp"
android:layout_marginTop="@dimen/dp_10"
app:layout_constraintDimensionRatio="1:1"
app:layout_constraintDimensionRatio="1:0.68"
app:layout_constraintEnd_toEndOf="@id/guide_line_left"
app:layout_constraintStart_toStartOf="@id/guide_line_left"
app:layout_constraintTop_toBottomOf="@id/rpwv_1" />
@@ -112,9 +126,9 @@
<com.xscm.modulemain.widget.RoomPubWheatView
android:id="@+id/rpwv_2"
android:layout_width="@dimen/dp_95"
android:layout_width="@dimen/dp_140"
android:layout_height="0dp"
app:layout_constraintDimensionRatio="1:1"
app:layout_constraintDimensionRatio="1:0.68"
app:layout_constraintEnd_toEndOf="@id/guide_line_midd"
app:layout_constraintStart_toStartOf="@id/guide_line_midd"
app:layout_constraintTop_toTopOf="@id/guide_line_content_top" />
@@ -122,10 +136,10 @@
<com.xscm.modulemain.widget.RoomPubWheatView
android:id="@+id/rpwv_5"
android:layout_width="@dimen/dp_95"
android:layout_width="@dimen/dp_140"
android:layout_height="0dp"
android:layout_marginTop="@dimen/dp_10"
app:layout_constraintDimensionRatio="1:1"
app:layout_constraintDimensionRatio="1:0.68"
app:layout_constraintEnd_toEndOf="@id/guide_line_midd"
app:layout_constraintStart_toStartOf="@id/guide_line_midd"
app:layout_constraintTop_toBottomOf="@id/rpwv_2" />
@@ -133,9 +147,9 @@
<com.xscm.modulemain.widget.RoomPubWheatView
android:id="@+id/rpwv_3"
android:layout_width="@dimen/dp_95"
android:layout_width="@dimen/dp_140"
android:layout_height="0dp"
app:layout_constraintDimensionRatio="1:1"
app:layout_constraintDimensionRatio="1:0.68"
app:layout_constraintEnd_toEndOf="@id/guide_line_right"
app:layout_constraintStart_toStartOf="@id/guide_line_right"
app:layout_constraintTop_toTopOf="@id/guide_line_content_top" />
@@ -143,10 +157,10 @@
<com.xscm.modulemain.widget.RoomPubWheatView
android:id="@+id/rpwv_6"
android:layout_width="@dimen/dp_95"
android:layout_width="@dimen/dp_140"
android:layout_height="0dp"
android:layout_marginTop="@dimen/dp_10"
app:layout_constraintDimensionRatio="1:1"
app:layout_constraintDimensionRatio="1:0.68"
app:layout_constraintEnd_toEndOf="@id/guide_line_right"
app:layout_constraintStart_toStartOf="@id/guide_line_right"
app:layout_constraintTop_toBottomOf="@id/rpwv_3" />

View File

@@ -98,18 +98,18 @@
<com.xscm.modulemain.widget.RoomPrivateWheatView
android:id="@+id/rpwv_1"
android:layout_width="@dimen/dp_95"
android:layout_width="@dimen/dp_140"
android:layout_height="0dp"
app:layout_constraintDimensionRatio="1:1.11"
app:layout_constraintDimensionRatio="1:0.68"
app:layout_constraintEnd_toEndOf="@id/guide_line_left_2"
app:layout_constraintStart_toStartOf="@id/guide_line_left_2"
app:layout_constraintTop_toTopOf="@id/guide_line_h_2" />
<com.xscm.modulemain.widget.RoomPrivateWheatView
android:id="@+id/rpwv_2"
android:layout_width="@dimen/dp_95"
android:layout_width="@dimen/dp_140"
android:layout_height="0dp"
app:layout_constraintDimensionRatio="1:1.11"
app:layout_constraintDimensionRatio="1:0.68"
app:layout_constraintEnd_toEndOf="@id/guide_line_right_2"
app:layout_constraintStart_toStartOf="@id/guide_line_right_2"
app:layout_constraintTop_toTopOf="@id/guide_line_h_2" />

View File

@@ -45,49 +45,32 @@
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintWidth_percent="0.62" />
app:layout_constraintWidth_percent="0.42" />
<!-- 用户头像 -->
<com.xscm.moduleutil.widget.CircularImage
android:id="@+id/riv"
android:layout_width="0dp"
android:layout_height="0dp"
android:scaleType="fitCenter"
android:scaleType="centerCrop"
android:src="@mipmap/room_ic_wheat_default"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintDimensionRatio="1:1"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintWidth_percent="0.6" />
<com.xscm.moduleutil.widget.AvatarFrameView
android:id="@+id/iv_gift"
android:layout_width="0dp"
android:layout_height="0dp"
android:scaleType="fitCenter"
android:visibility="gone"
android:src="@mipmap/room_ic_wheat_default"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintDimensionRatio="1:1"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintWidth_percent="0.6" />
app:layout_constraintWidth_percent="0.4" />
<!-- 头像框 - 包裹头像 -->
<com.xscm.moduleutil.widget.AvatarFrameView
android:id="@+id/iv_frame"
android:layout_width="0dp"
android:layout_height="0dp"
android:adjustViewBounds="true"
android:scaleType="fitCenter"
android:visibility="visible"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintDimensionRatio="1:1"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintWidth_percent="0.7"
app:layout_constraintWidth_percent="0.5"
tools:visibility="visible" />
<!-- 离线状态 - 与头像框同样大小 -->
@@ -118,7 +101,7 @@
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintWidth_percent="0.7"
app:layout_constraintWidth_percent="0.5"
app:loopCount="0"
app:source="mic.svga" />
<!-- 角色标签 - 头像下方覆盖部分头像 -->
@@ -228,7 +211,7 @@
android:visibility="visible"
app:layout_constraintTop_toTopOf="@id/ctl_heat"
app:layout_constraintBottom_toBottomOf="@id/ctl_heat"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="@id/gl_gift_line"
android:src="@mipmap/icon_pub_gift_bg"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
@@ -261,6 +244,23 @@
</LinearLayout>
<com.xscm.moduleutil.widget.AvatarFrameView
android:id="@+id/iv_gift"
android:layout_width="0dp"
android:layout_height="0dp"
android:visibility="gone"
android:src="@mipmap/icon_pri_bg"
android:layout_marginEnd="-5dp"
android:clipChildren="false"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintDimensionRatio="1:1.8"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintWidth_percent="0.6"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintHorizontal_bias="1.1"/>
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.constraintlayout.widget.ConstraintLayout>