diff --git a/moduleUtil/src/main/AndroidManifest.xml b/moduleUtil/src/main/AndroidManifest.xml
index a545c68..6fd8d9f 100644
--- a/moduleUtil/src/main/AndroidManifest.xml
+++ b/moduleUtil/src/main/AndroidManifest.xml
@@ -41,9 +41,9 @@
-
+
+
+
\ No newline at end of file
diff --git a/moduleUtil/src/main/java/com/xscm/moduleutil/base/CommonAppContext.java b/moduleUtil/src/main/java/com/xscm/moduleutil/base/CommonAppContext.java
index bd8764c..d5f8c53 100644
--- a/moduleUtil/src/main/java/com/xscm/moduleutil/base/CommonAppContext.java
+++ b/moduleUtil/src/main/java/com/xscm/moduleutil/base/CommonAppContext.java
@@ -109,7 +109,14 @@ public class CommonAppContext extends MultiDexApplication {
AgoraManager.getInstance(this).init(currentEnvironment.getSwSdkAppId());
MessageListenerSingleton.getInstance();
CrashReport.initCrashReport(this, "ac3ed4d89f", true);/*bugly初始化*/
- ServiceUtils.startService(MyMqttService.class);/*Mqtt初始化*/
+// ServiceUtils.startService(MyMqttService.class);/*Mqtt初始化*/
+ // 初始化MQTT服务
+ // 获取单例实例
+ MyMqttService mqttService = MyMqttService.getInstance(this);
+
+// 启动服务
+ mqttService.startService();
+
// 每次启动应用时重置状态
SpUtil.getInstance().setBooleanValue("youth_model_shown", false);
}
diff --git a/moduleUtil/src/main/java/com/xscm/moduleutil/service/MyMqttService.java b/moduleUtil/src/main/java/com/xscm/moduleutil/service/MyMqttService.java
index f233a47..a0b08fb 100644
--- a/moduleUtil/src/main/java/com/xscm/moduleutil/service/MyMqttService.java
+++ b/moduleUtil/src/main/java/com/xscm/moduleutil/service/MyMqttService.java
@@ -1,27 +1,20 @@
package com.xscm.moduleutil.service;
-
import android.app.Notification;
import android.app.NotificationChannel;
import android.app.NotificationManager;
-import android.app.Service;
import android.content.Context;
-import android.content.Intent;
-import android.content.pm.ServiceInfo;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.os.Build;
import android.os.Handler;
import android.os.HandlerThread;
-import android.os.IBinder;
import android.os.Looper;
import android.util.Log;
-
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.blankj.utilcode.util.LogUtils;
-import com.blankj.utilcode.util.ServiceUtils;
import com.orhanobut.logger.Logger;
import com.xscm.moduleutil.R;
import com.xscm.moduleutil.event.RoomGiftRunable;
@@ -35,35 +28,32 @@ import org.eclipse.paho.client.mqttv3.MqttClient;
import org.eclipse.paho.client.mqttv3.MqttConnectOptions;
import org.eclipse.paho.client.mqttv3.MqttException;
import org.eclipse.paho.client.mqttv3.MqttMessage;
-import org.jetbrains.annotations.Nullable;
+import java.util.concurrent.CopyOnWriteArrayList;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;
-
-public class MyMqttService extends Service implements MyEmqttConnectListener, MyEmqttMesgListener, MyEmqttSubscribeListener {
+public class MyMqttService implements MyEmqttConnectListener, MyEmqttMesgListener, MyEmqttSubscribeListener {
private final static String TAG = "lxj";
private static int qos = 2;
- // private static String HOST ="tcp://81.70.45.221";//正式
private static String HOST = "tcp://1.13.181.248";//测试
- // private static String HOST = "tcp://47.120.21.132";//测试
private static MqttAndroidClient mqttAndroidClient;
private MqttConnectOptions mMqttConnectOptions;
private static boolean b = true;
+ // 使用单例模式
+ private static MyMqttService instance;
- private static MyEmqttConnectListener mMyEmqttConnectListener;
- private static MyEmqttMesgListener mMyEmqttMesgListener;
- private static MyEmqttSubscribeListener mMyEmqttSubscribeListener;
+ // 使用线程安全的集合存储监听器
+ private static final CopyOnWriteArrayList messageListeners = new CopyOnWriteArrayList<>();
+ private static final CopyOnWriteArrayList connectListeners = new CopyOnWriteArrayList<>();
+ private static final CopyOnWriteArrayList subscribeListeners = new CopyOnWriteArrayList<>();
private static final String TOPIC_BOSS = "qx_room_topic";
-
private static final String TOPIC_XLH = "qx_xunlehui";
- private static final int NOTIFICATION_ID = 1;
-
// 添加后台线程处理
private HandlerThread mqttHandlerThread;
@@ -74,27 +64,31 @@ public class MyMqttService extends Service implements MyEmqttConnectListener, My
private static final int MAX_RETRY_ATTEMPTS = 5;
private int retryCount = 0;
- @Override
- public int onStartCommand(Intent intent, int flags, int startId) {
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) { // API 31+
- // 设置前台服务类型为 "connectedDevice" 或其他合适类型
- setForegroundServiceBehavior(ServiceInfo.FOREGROUND_SERVICE_TYPE_MANIFEST);
+ // 服务状态
+ private static boolean isServiceRunning = false;
+
+ private Context mContext;
+
+ // 私有构造函数
+ private MyMqttService(Context context) {
+ this.mContext = context.getApplicationContext();
+ initService();
+ }
+
+ public static MyMqttService getInstance(Context context) {
+ if (instance == null) {
+ synchronized (MyMqttService.class) {
+ if (instance == null) {
+ instance = new MyMqttService(context);
+ }
+ }
}
- // ⚠️ 必须在这个方法开始就调用 startForeground()
- Notification notification = createNotification();
- startForeground(NOTIFICATION_ID, notification);
-
- return START_STICKY;
+ return instance;
}
- private void setForegroundServiceBehavior(int foregroundServiceTypeManifest) {
- // 空实现,仅用于兼容性处理
- }
+ private void initService() {
+ isServiceRunning = true;
-
- @Override
- public void onCreate() {
- super.onCreate();
// 创建专用的HandlerThread处理MQTT操作
mqttHandlerThread = new HandlerThread("MqttServiceThread");
mqttHandlerThread.start();
@@ -105,77 +99,127 @@ public class MyMqttService extends Service implements MyEmqttConnectListener, My
try {
init();
} catch (MqttException e) {
- throw new RuntimeException(e);
+ Log.e(TAG, "MQTT初始化异常", e);
}
}
- private Notification createNotification() {
- // 创建你的前台通知
-// Notification.Builder builder = null;
-// if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
-// builder = new Notification.Builder(this, "channel_id")
-// .setContentTitle("MQTT Service")
-// .setSmallIcon(R.mipmap.default_avatar);
-// }
-// if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
-// NotificationChannel channel = new NotificationChannel(
-// "channel_id", "MQTT Channel",
-// NotificationManager.IMPORTANCE_LOW);
-// NotificationManager manager = getSystemService(NotificationManager.class);
-// manager.createNotificationChannel(channel);
-// }
-// return builder.build();
-
- // 创建你的前台通知
- Notification.Builder builder = null;
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
- builder = new Notification.Builder(this, "mqtt_channel")
- .setContentTitle("消息服务")
- .setContentText("正在接收实时消息")
- .setSmallIcon(R.mipmap.default_avatar);
- }
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
- NotificationChannel channel = new NotificationChannel(
- "mqtt_channel", "MQTT Channel",
- NotificationManager.IMPORTANCE_LOW);
- NotificationManager manager = getSystemService(NotificationManager.class);
- if (manager != null) {
- manager.createNotificationChannel(channel);
- }
- }
- return builder != null ? builder.build() : null;
- }
-
/**
- * 开启服务
+ * 启动MQTT连接
*/
- public static void startService(Context mContext) {
+ public void startService() {
b = true;
- boolean serviceRunning = ServiceUtils.isServiceRunning(MyMqttService.class.getCanonicalName());
- if (!serviceRunning) {
- mContext.startService(new Intent(mContext, MyMqttService.class));
+ if (!isServiceRunning) {
+ initService();
}
}
- public static void stopService(Context context) {
+ /**
+ * 停止MQTT服务
+ */
+ public void stopService() {
b = false;
- boolean serviceRunning = ServiceUtils.isServiceRunning(MyMqttService.class.getCanonicalName());
- if (serviceRunning) {
- try {
- context.stopService(new Intent(context, MyMqttService.class));
- } catch (Exception e) {
- Log.e(TAG, "Failed to stop MQTT service", e);
- }
+ isServiceRunning = false;
+ cleanup();
+ }
+
+ /**
+ * 初始化
+ */
+ private void init() throws MqttException {
+ String CLIENTID = "android-" + MqttClient.generateClientId();
+ mqttAndroidClient = new MqttAndroidClient(mContext, HOST, CLIENTID);
+ mqttAndroidClient.setCallback(mqttCallback); //设置监听订阅消息的回调
+ mMqttConnectOptions = new MqttConnectOptions();
+ mMqttConnectOptions.setCleanSession(true); //设置是否清除缓存
+ mMqttConnectOptions.setConnectionTimeout(10); //设置超时时间,单位:秒
+ mMqttConnectOptions.setKeepAliveInterval(10); //设置心跳包发送间隔,单位:秒
+ mMqttConnectOptions.setUserName("public"); //设置用户名
+ mMqttConnectOptions.setMqttVersion(MqttConnectOptions.MQTT_VERSION_3_1);
+
+ if (mqttAndroidClient != null && !mqttAndroidClient.isConnected()) {
+ doClientConnection();
}
}
-
- @Nullable
- @Override
- public IBinder onBind(Intent intent) {
- return null;
+ private void doClientConnection() throws MqttException {
+ // 在后台线程执行连接操作
+ mqttHandler.post(() -> {
+ if (mqttAndroidClient != null && !mqttAndroidClient.isConnected() && isConnectIsNomarl() && b) {
+ try {
+ mqttAndroidClient.connect(mMqttConnectOptions, null, iMqttActionListener);
+ } catch (Exception e) {
+ Log.e(TAG, "MQTT连接异常", e);
+ handleConnectionFailure();
+ }
+ }
+ });
}
+ private void handleConnectionFailure() {
+ retryCount++;
+ if (retryCount < MAX_RETRY_ATTEMPTS) {
+ // 延迟重试
+ mqttHandler.postDelayed(() -> {
+ if (b) {
+ try {
+ doClientConnection();
+ } catch (MqttException e) {
+ Log.e(TAG, "MQTT连接异常", e);
+ }
+ }
+ }, 5000); // 5秒后重试
+ } else {
+ Log.w(TAG, "达到最大重试次数,停止重试");
+ retryCount = 0;
+ }
+ }
+
+ public static void closeConnection() {
+ Handler handler = new Handler(Looper.getMainLooper());
+ handler.post(() -> {
+ try {
+ if (mqttAndroidClient != null && mqttAndroidClient.isConnected()) {
+ IMqttToken disconnect = mqttAndroidClient.disconnect();
+ disconnect.setActionCallback(new IMqttActionListener() {
+ @Override
+ public void onSuccess(IMqttToken asyncActionToken) {
+ Logger.e(TAG, "断开链接", "断开链接成功");
+ }
+
+ @Override
+ public void onFailure(IMqttToken asyncActionToken, Throwable exception) {
+ Logger.e(TAG, "断开链接", "断开链接失败" + exception.getMessage());
+ }
+ });
+ }
+ } catch (Exception e) {
+ Log.e(TAG, "关闭连接异常", e);
+ }
+ });
+ }
+
+ /**
+ * 判断网络是否连接
+ */
+ private boolean isConnectIsNomarl() {
+ try {
+ ConnectivityManager connectivityManager = (ConnectivityManager) mContext.getSystemService(Context.CONNECTIVITY_SERVICE);
+ if (connectivityManager != null) {
+ NetworkInfo info = connectivityManager.getActiveNetworkInfo();
+ if (info != null && info.isAvailable()) {
+ String name = info.getTypeName();
+ Log.i(TAG, "当前网络名称:" + name);
+ return true;
+ } else {
+ Log.i(TAG, "没有可用网络");
+ return false;
+ }
+ }
+ } catch (Exception e) {
+ Log.e(TAG, "检查网络状态异常", e);
+ }
+ return false;
+ }
/**
* 发布 (模拟其他客户端发布消息)
@@ -221,8 +265,10 @@ public class MyMqttService extends Service implements MyEmqttConnectListener, My
subToken.setActionCallback(new IMqttActionListener() {
@Override
public void onSuccess(IMqttToken asyncActionToken) {
- if (mMyEmqttSubscribeListener != null) {
- mMyEmqttSubscribeListener.onSubscribeSuccess(topic);
+ for (MyEmqttSubscribeListener listener : subscribeListeners) {
+ if (listener != null) {
+ listener.onSubscribeSuccess(topic);
+ }
}
Logger.e(TAG, "订阅成功:" + topic);
}
@@ -230,9 +276,12 @@ public class MyMqttService extends Service implements MyEmqttConnectListener, My
@Override
public void onFailure(IMqttToken asyncActionToken,
Throwable exception) {
- if ((!TOPIC_BOSS.equals(topic) && mMyEmqttSubscribeListener != null)
- || (!TOPIC_XLH.equals(topic) && mMyEmqttSubscribeListener != null)) {
- mMyEmqttSubscribeListener.onSubscribeFailure();
+ for (MyEmqttSubscribeListener listener : subscribeListeners) {
+ if (listener != null &&
+ !TOPIC_BOSS.equals(topic) &&
+ !TOPIC_XLH.equals(topic)) {
+ listener.onSubscribeFailure();
+ }
}
Logger.e(TAG, "订阅失败:" + topic + ", error: " + exception.getMessage());
}
@@ -270,118 +319,20 @@ public class MyMqttService extends Service implements MyEmqttConnectListener, My
});
}
-
- /**
- * 初始化
- */
- private void init() throws MqttException {
- String CLIENTID = "android-" + MqttClient.generateClientId();
- mqttAndroidClient = new MqttAndroidClient(this, HOST, CLIENTID);
- mqttAndroidClient.setCallback(mqttCallback); //设置监听订阅消息的回调
- mMqttConnectOptions = new MqttConnectOptions();
- mMqttConnectOptions.setCleanSession(true); //设置是否清除缓存
- mMqttConnectOptions.setConnectionTimeout(10); //设置超时时间,单位:秒
- mMqttConnectOptions.setKeepAliveInterval(10); //设置心跳包发送间隔,单位:秒
- mMqttConnectOptions.setUserName("public"); //设置用户名
-// mMqttConnectOptions.setPassword(new char[0]); //设置密码
- mMqttConnectOptions.setMqttVersion(MqttConnectOptions.MQTT_VERSION_3_1);
-
- if (mqttAndroidClient != null && !mqttAndroidClient.isConnected()) {
- doClientConnection();
- }
- }
-
- private void doClientConnection() throws MqttException {
- // 在后台线程执行连接操作
- mqttHandler.post(() -> {
- if (mqttAndroidClient != null && !mqttAndroidClient.isConnected() && isConnectIsNomarl() && b) {
- try {
- mqttAndroidClient.connect(mMqttConnectOptions, null, iMqttActionListener);
- } catch (Exception e) {
- Log.e(TAG, "MQTT连接异常", e);
- handleConnectionFailure();
- }
- }
- });
- }
-
- private void handleConnectionFailure() {
- retryCount++;
- if (retryCount < MAX_RETRY_ATTEMPTS) {
- // 延迟重试
- mqttHandler.postDelayed(() -> {
- if (b) {
- try {
- doClientConnection();
- } catch (MqttException e) {
- throw new RuntimeException(e);
- }
- }
- }, 5000); // 5秒后重试
- } else {
- Log.w(TAG, "达到最大重试次数,停止重试");
- retryCount = 0;
- }
- }
-
- public static void closeConnection() {
- Handler handler = new Handler(Looper.getMainLooper());
- handler.post(() -> {
- try {
- if (mqttAndroidClient != null && mqttAndroidClient.isConnected()) {
- IMqttToken disconnect = mqttAndroidClient.disconnect();
- disconnect.setActionCallback(new IMqttActionListener() {
- @Override
- public void onSuccess(IMqttToken asyncActionToken) {
- Logger.e(TAG, "断开链接", "断开链接成功");
- }
-
- @Override
- public void onFailure(IMqttToken asyncActionToken, Throwable exception) {
- Logger.e(TAG, "断开链接", "断开链接失败" + exception.getMessage());
- }
- });
- }
- } catch (Exception e) {
- Log.e(TAG, "关闭连接异常", e);
- }
- });
- }
-
-
- /**
- * 判断网络是否连接
- */
- private boolean isConnectIsNomarl() {
- try {
- ConnectivityManager connectivityManager = (ConnectivityManager) this.getApplicationContext().getSystemService(Context.CONNECTIVITY_SERVICE);
- if (connectivityManager != null) {
- NetworkInfo info = connectivityManager.getActiveNetworkInfo();
- if (info != null && info.isAvailable()) {
- String name = info.getTypeName();
- Log.i(TAG, "当前网络名称:" + name);
- return true;
- } else {
- Log.i(TAG, "没有可用网络");
- return false;
- }
- }
- } catch (Exception e) {
- Log.e(TAG, "检查网络状态异常", e);
- }
- return false;
- }
-
-
//MQTT是否连接成功的监听
private IMqttActionListener iMqttActionListener = new IMqttActionListener() {
@Override
public void onSuccess(IMqttToken arg0) {
retryCount = 0; // 重置重试计数
- if (mMyEmqttConnectListener != null) {
- mMyEmqttConnectListener.onConnectSuccess();
+
+ // 通知所有连接监听器
+ for (MyEmqttConnectListener listener : connectListeners) {
+ if (listener != null) {
+ listener.onConnectSuccess();
+ }
}
+
Logger.e(TAG, "链接状态:", "链接成功");
subscribe(TOPIC_BOSS);
subscribe(TOPIC_XLH);
@@ -389,12 +340,15 @@ public class MyMqttService extends Service implements MyEmqttConnectListener, My
@Override
public void onFailure(IMqttToken arg0, Throwable arg1) {
- if (mMyEmqttConnectListener != null) {
- mMyEmqttConnectListener.onConnectFailure();
+ // 通知所有连接监听器
+ for (MyEmqttConnectListener listener : connectListeners) {
+ if (listener != null) {
+ listener.onConnectFailure();
+ }
}
-// if (arg0 instanceof MqttException) {
-//// Logger.e(TAG, "链接状态:", "链接失败" + ((MqttException) arg1).getMessage());
-// }
+
+ Logger.e(TAG, "链接状态:", "链接失败: " + arg1.getMessage());
+
// 在后台线程处理重连
mqttHandler.postDelayed(() -> {
if (b) {
@@ -404,7 +358,6 @@ public class MyMqttService extends Service implements MyEmqttConnectListener, My
}
};
-
//订阅主题的回调
private MqttCallback mqttCallback = new MqttCallback() {
@@ -417,23 +370,29 @@ public class MyMqttService extends Service implements MyEmqttConnectListener, My
Logger.e(TAG, "收到的消息", "主题:" + topic + " 收到的消息:" + messageStr);
if (topic.equals(TOPIC_BOSS)) {
// 处理消息
- receiveMessage(topic, messageStr);
-
+// receiveMessage(topic, messageStr);
+// new Handler(Looper.getMainLooper()).post(() -> {
+ receiveMessage(topic, messageStr);
+// });
// 通知监听器
- if (mMyEmqttMesgListener != null) {
- // 切换到主线程通知
- new Handler(Looper.getMainLooper()).post(() -> {
- mMyEmqttMesgListener.messageArrived(topic, messageStr);
- });
- }
+// for (MyEmqttMesgListener listener : messageListeners) {
+// if (listener != null) {
+// // 切换到主线程通知
+//// new Handler(Looper.getMainLooper()).post(() -> {
+////// listener.messageArrived(topic, messageStr);
+//// });
+// }
+// }
} else if (topic.equals(TOPIC_XLH)) {
- receiveXlhMessage(messageStr);
+// receiveXlhMessage(messageStr);
+// new Handler(Looper.getMainLooper()).post(() -> {
+ receiveXlhMessage(messageStr);
+// });
}
} catch (Exception e) {
Log.e(TAG, "处理MQTT消息异常", e);
}
});
-
}
@Override
@@ -443,9 +402,13 @@ public class MyMqttService extends Service implements MyEmqttConnectListener, My
@Override
public void connectionLost(Throwable arg0) {
- if (mMyEmqttConnectListener != null) {
- mMyEmqttConnectListener.onConnectFailure();
+ // 通知所有连接监听器
+ for (MyEmqttConnectListener listener : connectListeners) {
+ if (listener != null) {
+ listener.onConnectFailure();
+ }
}
+
Logger.e(TAG, "链接状态:", "链接断开: " + arg0.getMessage());
// 在后台线程处理重连
@@ -454,7 +417,7 @@ public class MyMqttService extends Service implements MyEmqttConnectListener, My
try {
doClientConnection();
} catch (MqttException e) {
- throw new RuntimeException(e);
+ Log.e(TAG, "MQTT连接异常", e);
}
}
}, 1000);
@@ -463,14 +426,12 @@ public class MyMqttService extends Service implements MyEmqttConnectListener, My
private void receiveXlhMessage(String messageStr) {
try {
- String newdata = messageStr;//TextLengthUtil.decode(data);
+ String newdata = messageStr;
JSONObject jsonObject = JSON.parseObject(newdata);
int type = jsonObject.getIntValue("type");
String message = jsonObject.getString("msg");
-
-
// 将事件处理放到主线程执行
new Handler(Looper.getMainLooper()).post(() -> {
processMessageType(type, message);
@@ -482,7 +443,7 @@ public class MyMqttService extends Service implements MyEmqttConnectListener, My
private void receiveMessage(String topic, String data) {
try {
- String newdata = data;//TextLengthUtil.decode(data);
+ String newdata = data;
JSONObject jsonObject = JSON.parseObject(newdata);
int type = jsonObject.getIntValue("type");
@@ -644,10 +605,10 @@ public class MyMqttService extends Service implements MyEmqttConnectListener, My
}
}
- @Override
- public void onDestroy() {
- b = false;
-
+ /**
+ * 清理资源
+ */
+ public void cleanup() {
try {
// 清理资源
if (messageExecutorService != null) {
@@ -658,6 +619,7 @@ public class MyMqttService extends Service implements MyEmqttConnectListener, My
}
} catch (InterruptedException e) {
messageExecutorService.shutdownNow();
+ Thread.currentThread().interrupt();
}
}
@@ -672,51 +634,65 @@ public class MyMqttService extends Service implements MyEmqttConnectListener, My
mqttAndroidClient.unregisterResources();
mqttAndroidClient = null;
}
- stopForeground(true); // 停止前台服务
Logger.e(TAG, "服务关闭", "资源释放成功");
} catch (Exception e) {
Log.e(TAG, "服务关闭异常", e);
}
-
- super.onDestroy();
}
-
+ // 修改监听器管理方法
public static void addMyEmqttMesgListener(MyEmqttMesgListener myEmqttMesgListener) {
- mMyEmqttMesgListener = myEmqttMesgListener;
+ if (myEmqttMesgListener != null && !messageListeners.contains(myEmqttMesgListener)) {
+ messageListeners.add(myEmqttMesgListener);
+ }
+ }
+
+ public static void removeMyEmqttMesgListener(MyEmqttMesgListener myEmqttMesgListener) {
+ messageListeners.remove(myEmqttMesgListener);
}
public static void addMyEmqttConnectListener(MyEmqttConnectListener myEmqttConnectListener) {
- mMyEmqttConnectListener = myEmqttConnectListener;
+ if (myEmqttConnectListener != null && !connectListeners.contains(myEmqttConnectListener)) {
+ connectListeners.add(myEmqttConnectListener);
+ }
+ }
+
+ public static void removeMyEmqttConnectListener(MyEmqttConnectListener myEmqttConnectListener) {
+ connectListeners.remove(myEmqttConnectListener);
}
public static void addMyEmqttSubscribeListener(MyEmqttSubscribeListener myEmqttSubscribeListener) {
- mMyEmqttSubscribeListener = myEmqttSubscribeListener;
+ if (myEmqttSubscribeListener != null && !subscribeListeners.contains(myEmqttSubscribeListener)) {
+ subscribeListeners.add(myEmqttSubscribeListener);
+ }
}
+ public static void removeMyEmqttSubscribeListener(MyEmqttSubscribeListener myEmqttSubscribeListener) {
+ subscribeListeners.remove(myEmqttSubscribeListener);
+ }
@Override
public void onConnectSuccess() {
-
+ // 实现接口方法
}
@Override
public void onConnectFailure() {
-
+ // 实现接口方法
}
@Override
public void messageArrived(String topic, String mesg) {
- LogUtils.e("lxj", "messageArrived:"+mesg);
+ LogUtils.e("lxj", "messageArrived:" + mesg);
}
@Override
public void onSubscribeSuccess(String topic) {
- LogUtils.e("lxj", "onSubscribeSuccess:"+topic);
+ LogUtils.e("lxj", "onSubscribeSuccess:" + topic);
}
@Override
public void onSubscribeFailure() {
LogUtils.e("lxj", "onSubscribeFailure");
}
-}
\ No newline at end of file
+}
diff --git a/moduleUtil/src/main/java/com/xscm/moduleutil/widget/RoomSingSongWheatView.java b/moduleUtil/src/main/java/com/xscm/moduleutil/widget/RoomSingSongWheatView.java
index f41938e..a468394 100644
--- a/moduleUtil/src/main/java/com/xscm/moduleutil/widget/RoomSingSongWheatView.java
+++ b/moduleUtil/src/main/java/com/xscm/moduleutil/widget/RoomSingSongWheatView.java
@@ -40,9 +40,15 @@ public class RoomSingSongWheatView extends BaseWheatView {
@Override
protected void initPit(Context context, AttributeSet attrs) {
- TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.RoomDefaultWheatView);
- pitNumber = typedArray.getString(R.styleable.RoomDefaultWheatView_room_wheat_number);
- typedArray.recycle();
+ TypedArray typedArray = null;
+ try {
+ typedArray = context.obtainStyledAttributes(attrs, R.styleable.RoomDefaultWheatView);
+ pitNumber = typedArray.getString(R.styleable.RoomDefaultWheatView_room_wheat_number);
+ } finally {
+ if (typedArray != null) {
+ typedArray.recycle();
+ }
+ }
mIvTagBoss = findViewById(R.id.iv_tag_boos);
mTvTime = findViewById(R.id.tv_time);
tv_time_pk = findViewById(R.id.tv_time_pk);
@@ -55,83 +61,96 @@ public class RoomSingSongWheatView extends BaseWheatView {
@Override
protected void setPitData(RoomPitBean bean) {
+ if (bean == null) return;
+
sex = bean.getSex();
+ pitBean = bean; // 统一使用参数 bean
+
if (isOn()) {
- //开启声浪
- mIvRipple.stopAnimation();
- mIvRipple.setVisibility(VISIBLE);
- mTvName.setText(bean.getNickname());
- ImageUtils.loadHeadCC(bean.getAvatar(), mRiv);
- if (TextUtils.isEmpty(pitBean.getDress())) {
- mIvFrame.setVisibility(INVISIBLE);
- } else {
- mIvFrame.setVisibility(VISIBLE);
- mIvFrame.setSource(pitBean.getDress(), 1);
-// ImageUtils.loadDecorationAvatar(pitBean.getDress_picture(), mIvFrame);
- }
- if (showBoss && WHEAT_BOSS.equals(pitNumber)) {
- mIvTagBoss.setVisibility(GONE);
- }
+ handleOnState(bean);
} else {
- mTvName.setText(
- "-1".equals(pitNumber) ? "" :
- "9".equals(pitNumber) ? "主持位" :
- "10".equals(pitNumber) ? "嘉宾位" :
- pitNumber + "号麦位"
- );
- //麦位上锁
- if (showBoss && WHEAT_BOSS.equals(pitNumber)) {
- mIvTagBoss.setVisibility(VISIBLE);
- ImageUtils.loadRes(isLocked() ? R.mipmap.room_ic_wheat_default_suo : R.mipmap.room_ic_wheat_default, mRiv);
- } else {
-// mIvTagBoss.setVisibility(GONE);
-// @DrawableRes int origin = getOriginImage();
-// ImageUtils.loadRes(isLocked() ? R.mipmap.room_ic_wheat_default_suo :
-// (origin == 0 ? R.mipmap.room_ic_wheat_default : origin), mRiv);
- mRiv.setImageResource(bean.getIs_lock() == 1 ? R.mipmap.room_ic_wheat_default_suo : R.mipmap.room_ic_wheat_default);
-// ImageUtils.loadRes(isLocked() ? R.mipmap.room_ic_wheat_default_suo : R.mipmap.room_ic_wheat_default, mRiv);
- }
- if (isMute()) {
- ImageUtils.loadRes(R.mipmap.room_microphone_off, mIvSex);
- }
- mIvFrame.setVisibility(INVISIBLE);
- mIvFace.remove();
- //停止声浪
- mIvRipple.stopAnimation();
- mIvRipple.setVisibility(GONE);
+ handleOffState(bean);
}
+
+ updateSexIcon();
+ updateCharmViewVisibility(bean);
+ updatePkState(bean);
+ }
+
+ private void handleOnState(RoomPitBean bean) {
+ stopAndClearAnimation(); // 清理之前的动画资源
+ mIvRipple.setVisibility(VISIBLE);
+ mTvName.setText(bean.getNickname());
+ ImageUtils.loadHeadCC(bean.getAvatar(), mRiv);
+
+ if (TextUtils.isEmpty(bean.getDress())) {
+ mIvFrame.setVisibility(INVISIBLE);
+ } else {
+ mIvFrame.setVisibility(VISIBLE);
+ mIvFrame.setSource(bean.getDress(), 1);
+ }
+
+ if (showBoss && TextUtils.equals(WHEAT_BOSS, pitNumber)) {
+ mIvTagBoss.setVisibility(GONE);
+ }
+ }
+
+ private void handleOffState(RoomPitBean bean) {
+ stopAndClearAnimation(); // 下麦时停止并清理动画
+ mTvName.setText(getPitNumberText());
+
+ if (showBoss && TextUtils.equals(WHEAT_BOSS, pitNumber)) {
+ mIvTagBoss.setVisibility(VISIBLE);
+ int resId = bean.getIs_lock() == 1 ? R.mipmap.room_ic_wheat_default_suo : R.mipmap.room_ic_wheat_default;
+ mRiv.setImageResource(resId);
+ } else {
+ mRiv.setImageResource(bean.getIs_lock() == 1 ? R.mipmap.room_ic_wheat_default_suo : R.mipmap.room_ic_wheat_default);
+ }
+
+ if (isMute()) {
+ ImageUtils.loadRes(R.mipmap.room_microphone_off, mIvSex);
+ }
+
+ mIvFrame.setVisibility(INVISIBLE);
+ mIvFace.remove();
+ mIvRipple.setVisibility(GONE);
+ }
+
+ private String getPitNumberText() {
+ if ("-1".equals(pitNumber)) return "";
+ if ("9".equals(pitNumber)) return "主持位";
+ if ("10".equals(pitNumber)) return "嘉宾位";
+ return pitNumber + "号麦位";
+ }
+
+ private void updateSexIcon() {
if (showSexIcon) {
checkSex();
}
- if (pitBean.getNickname() == null || pitBean.getNickname().isEmpty()) {
- mCharmView.setVisibility(GONE);
- } else {
- mCharmView.setVisibility(VISIBLE);
- }
+ }
- if (pitBean.is_pk() ){
- if (pitBean.getUser_id()!=null && !pitBean.getUser_id().equals("0") && !pitBean.getUser_id().isEmpty()) {
+ private void updateCharmViewVisibility(RoomPitBean bean) {
+ boolean isEmptyNickname = bean.getNickname() == null || bean.getNickname().isEmpty();
+ mCharmView.setVisibility(isEmptyNickname ? GONE : VISIBLE);
+ }
+
+ private void updatePkState(RoomPitBean bean) {
+ if (bean.is_pk()) {
+ String userId = bean.getUser_id();
+ if (userId != null && !userId.equals("0") && !userId.isEmpty()) {
tv_time_pk.setVisibility(VISIBLE);
- setSex(pitBean.getCharm(),false);
+ setSex(bean.getCharm(), false);
mCharmView.setVisibility(GONE);
- }else {
+ } else {
tv_time_pk.setVisibility(GONE);
}
-// ViewGroup.MarginLayoutParams params = (ViewGroup.MarginLayoutParams) mCharmView.getLayoutParams();
-// params.width = 35;
-// mCharmView.setLayoutParams(params);
-
- }else {
+ } else {
tv_time_pk.setVisibility(GONE);
mCharmView.setVisibility(VISIBLE);
-// ViewGroup.MarginLayoutParams params = (ViewGroup.MarginLayoutParams) mCharmView.getLayoutParams();
-// params.width = 52;
-// mCharmView.setLayoutParams(params);
}
-
-// setCardiac(pitBean.getPit_number(), 0.0f);
}
- public void setSex( String value, boolean format) {
+
+ public void setSex(String value, boolean format) {
if (format) {
tv_time_pk.setText(value);
} else {
@@ -139,12 +158,12 @@ public class RoomSingSongWheatView extends BaseWheatView {
long xd = Long.parseLong(value);
if (xd > 9999 || xd < -9999) {
tv_time_pk.setText(String.format("%.2fw", xd / 10000.0f));
-// mBinding.tvValue.setText(String.valueOf(xd));
} else {
tv_time_pk.setText(value);
}
} catch (Exception e) {
e.printStackTrace();
+ tv_time_pk.setText("0"); // 设置默认值防止UI异常
}
}
}
@@ -210,38 +229,91 @@ public class RoomSingSongWheatView extends BaseWheatView {
if (maozi != null) maozi.setVisibility(GONE);
}
+ // 添加内存释放方法
+ public void releaseResources() {
+ stopAndClearAnimation();
+
+ // 清理头像加载
+ if (mRiv != null) {
+ mRiv.setImageBitmap(null);
+ }
+
+ // 清理框架视图
+ if (mIvFrame != null) {
+ mIvFrame.release(); // 清理SVGA资源
+ }
+
+ // 清理表情视图
+ if (mIvFace != null) {
+ mIvFace.remove();
+ }
+
+ // 清理其他图片资源
+ if (mIvSex != null) {
+ mIvSex.setImageBitmap(null);
+ }
+
+ if (mIvTagBoss != null) {
+ mIvTagBoss.setImageBitmap(null);
+ }
+ }
+
+ // 停止并清理动画资源
+ private void stopAndClearAnimation() {
+ if (mIvRipple != null) {
+ mIvRipple.stopAnimation();
+ // 清理SVGA资源,避免内存泄漏
+ mIvRipple.clear();
+ }
+ }
+
+ @Override
+ protected void onDetachedFromWindow() {
+ // 视图从窗口分离时释放资源
+ releaseResources();
+ super.onDetachedFromWindow();
+ }
@Override
public void onRemoteSoundLevelUpdate(String userId, int soundLevel) {
-
+ // 暂无实现
}
@Override
public void onLocalSoundLevelUpdate(int volume) {
- if (volume==0){
- mIvRipple.stopAnimation();
- } else {
- if (pitBean.getUser_id().equals(SpUtil.getUserId()) && closePhone) {
+ if (volume == 0) {
+ if (mIvRipple != null) {
mIvRipple.stopAnimation();
- }else {
- mIvRipple.post(() -> {
- if (!mIvRipple.isAnimating()) {
- mIvRipple.startAnimation();
- }
- mIvRipple.setVisibility(VISIBLE);
- });
+ }
+ } else {
+ // 增加空指针检查
+ if (pitBean != null && pitBean.getUser_id() != null &&
+ pitBean.getUser_id().equals(SpUtil.getUserId()) && closePhone) {
+ if (mIvRipple != null) {
+ mIvRipple.stopAnimation();
+ }
+ } else {
+ if (mIvRipple != null) {
+ mIvRipple.post(() -> {
+ if (mIvRipple != null && !mIvRipple.isAnimating()) {
+ mIvRipple.startAnimation();
+ }
+ if (mIvRipple != null) {
+ mIvRipple.setVisibility(VISIBLE);
+ }
+ });
+ }
}
}
}
@Override
public void userJoined(int userId, int elapsd) {
-
+ // 暂无实现
}
@Override
public void userOffline(int userId, int reason) {
-
+ // 暂无实现
}
-
}
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 d9b5235..0c6f655 100644
--- a/moduleUtil/src/main/java/com/xscm/moduleutil/widget/WheatLayoutManager.java
+++ b/moduleUtil/src/main/java/com/xscm/moduleutil/widget/WheatLayoutManager.java
@@ -22,13 +22,12 @@ public class WheatLayoutManager {
private int currentSinglePit = -1;
private RoomDefaultWheatView singleWheatView;
+ // 麦位索引映射:9,10,1~8
private final int[] pitIndexMap = {9, 10, 1, 2, 3, 4, 5, 6, 7, 8};
public interface OnWheatClickListener {
void onWheatClick(RoomDefaultWheatView view, int pitNumber);
-
void onMakeWheatClick(RoomDefaultWheatView view, int pitNumber);
-
}
private @Nullable OnWheatClickListener wheatClickListener;
@@ -39,11 +38,13 @@ public class WheatLayoutManager {
}
public void setWheatData(List pitList) {
+ if (pitList == null || pitList.size() < 10) return;
this.pitList = pitList;
restoreMultiWheat();
}
public void setWheatDataPk(List pitList, int layoutType) {
+ if (pitList == null || pitList.size() < 10) return;
this.pitList = pitList;
restoreMultiWheatPk(layoutType);
}
@@ -54,19 +55,15 @@ public class WheatLayoutManager {
public void showSingleWheat(int pitNumber) {
if (isSingleMode && this.currentSinglePit == pitNumber) return;
+ if (pitNumber < 1 || pitNumber > 10 || pitList == null || pitList.size() < 10) return;
container.removeAllViews();
- if (pitNumber < 1 || pitNumber > 10 || pitList == null || pitList.size() < 10)
- return;
-
RoomPitBean bean = pitList.get(pitNumber - 1);
-
singleWheatView = new RoomDefaultWheatView(context);
singleWheatView.pitNumber = String.valueOf(pitNumber);
singleWheatView.setData(bean);
- // 默认设置为 MATCH_PARENT,也可以自定义
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.MATCH_PARENT,
LinearLayout.LayoutParams.WRAP_CONTENT
@@ -74,7 +71,6 @@ public class WheatLayoutManager {
params.setMargins(20, 20, 20, 20);
singleWheatView.setLayoutParams(params);
- // 添加点击事件
singleWheatView.setOnClickListener(v -> {
if (wheatClickListener != null) {
wheatClickListener.onWheatClick(singleWheatView, pitNumber);
@@ -91,42 +87,24 @@ public class WheatLayoutManager {
container.removeAllViews();
int screenWidth = getScreenWidth();
- int itemWidth = screenWidth / 4; // 每个控件宽度为屏幕宽度的 1/4
+ int itemWidth = screenWidth / 4;
LinearLayout row = new LinearLayout(context);
row.setOrientation(LinearLayout.HORIZONTAL);
for (int i = 0; i < 10; i++) {
int pitNumber = pitIndexMap[i];
- RoomDefaultWheatView wheatView = new RoomDefaultWheatView(context);
- wheatView.pitNumber = String.valueOf(pitNumber);
- wheatView.setData(pitList.get(pitNumber - 1));
+ RoomDefaultWheatView wheatView = createWheatView(pitNumber);
LinearLayout.LayoutParams params;
-
- if (i == 0) {
- int fixedHeightInDp = 110; // 固定高度为 100dp
- int fixedHeightInPx = dpToPx(fixedHeightInDp); // 调用已有的 dpToPx 方法
- // 第一个控件:左边距 86dp,右边距 100dp
- params = new LinearLayout.LayoutParams(itemWidth, fixedHeightInPx);
- params.rightMargin = dpToPx(50);
- } else if (i == 1) {
- int fixedHeightInDp = 110; // 固定高度为 100dp
- int fixedHeightInPx = dpToPx(fixedHeightInDp); // 调用已有的 dpToPx 方法
- // 第二个控件:右边距 86dp
+ if (i == 0 || i == 1) {
+ int fixedHeightInPx = dpToPx(110);
params = new LinearLayout.LayoutParams(itemWidth, fixedHeightInPx);
+ if (i == 0) params.rightMargin = dpToPx(50);
} else {
- int fixedHeightInDp = 90; // 固定高度为 100dp
- int fixedHeightInPx = dpToPx(fixedHeightInDp); // 调用已有的 dpToPx 方法
+ int fixedHeightInPx = dpToPx(90);
params = new LinearLayout.LayoutParams(itemWidth - 30, fixedHeightInPx + 30);
- // 其他控件保持原有逻辑
-
-
-// if (i > 1 && (i - 2) % 4 != 0) {
-// params.leftMargin = 12;
-// params.rightMargin = 12;
-// }
- params.setMargins(0, 0, 0, 0); // 不设右边距,由 row padding 控制
+ params.setMargins(0, 0, 0, 0);
}
wheatView.setLayoutParams(params);
@@ -134,143 +112,48 @@ public class WheatLayoutManager {
if (wheatClickListener != null) {
wheatClickListener.onWheatClick(wheatView, Integer.parseInt(wheatView.pitNumber));
}
-// showSingleWheat(Integer.parseInt(wheatView.pitNumber));
});
row.addView(wheatView);
- // 第一行添加两个后换行
- if (i == 1) {
- container.addView(row);
- row = new LinearLayout(context);
- row.setOrientation(LinearLayout.HORIZONTAL);
- } else if (i > 1 && (i - 2) % 4 == 3) {
+ if (i == 1 || (i > 1 && (i - 2) % 4 == 3)) {
container.addView(row);
row = new LinearLayout(context);
row.setOrientation(LinearLayout.HORIZONTAL);
}
}
-// 添加最后一行可能存在的剩余 view
if (row.getChildCount() > 0) {
container.addView(row);
}
isSingleMode = false;
currentSinglePit = -1;
-
}
-// public void restoreMultiWheatPk(int layoutType, int width) {
-// container.removeAllViews();
-//
-// int screenWidth = getScreenWidth();
-// int itemWidth = screenWidth / 8; // 每个控件宽度为屏幕宽度的 1/4
-//
-// LinearLayout row = new LinearLayout(context);
-// row.setOrientation(LinearLayout.HORIZONTAL);
-//
-// for (int i = 0; i < 10; i++) {
-// int pitNumber = pitIndexMap[i];
-// RoomDefaultWheatView wheatView = new RoomDefaultWheatView(context);
-// wheatView.pitNumber = String.valueOf(pitNumber);
-// wheatView.setData(pitList.get(pitNumber - 1));
-//
-// LinearLayout.LayoutParams params;
-//
-// if (i == 0) {
-// int fixedHeightInDp = 110; // 固定高度为 100dp
-// int fixedHeightInPx =context.getResources().getDimensionPixelSize(R.dimen.dp_80); // 调用已有的 dpToPx 方法
-// // 第一个控件:左边距 86dp,右边距 100dp
-// params = new LinearLayout.LayoutParams(itemWidth, fixedHeightInPx);
-// params.rightMargin = context.getResources().getDimensionPixelSize(R.dimen.dp_50);
-// } else if (i == 1) {
-// int fixedHeightInDp = 110; // 固定高度为 100dp
-// int fixedHeightInPx = context.getResources().getDimensionPixelSize(R.dimen.dp_80); // 调用已有的 dpToPx 方法
-// // 第二个控件:右边距 86dp
-// params = new LinearLayout.LayoutParams(itemWidth, fixedHeightInPx);
-// } else {
-// int fixedHeightInDp = 90; // 固定高度为 100dp
-// int fixedHeightInPx = context.getResources().getDimensionPixelSize(R.dimen.dp_60); // 调用已有的 dpToPx 方法
-// params = new LinearLayout.LayoutParams(itemWidth -10, fixedHeightInPx + 30);
-// // 其他控件保持原有逻辑
-//
-//
-//// if (i > 1 && (i - 2) % 4 != 0) {
-//// params.leftMargin = 12;
-//// params.rightMargin = 12;
-//// }
-// params.setMargins(0, 0, 0, 0); // 不设右边距,由 row padding 控制
-// }
-//
-// wheatView.setLayoutParams(params);
-// wheatView.setOnClickListener(v -> {
-// if (wheatClickListener != null) {
-// wheatClickListener.onWheatClick(wheatView, Integer.parseInt(wheatView.pitNumber));
-// }
-//// showSingleWheat(Integer.parseInt(wheatView.pitNumber));
-// });
-//
-// row.addView(wheatView);
-//
-// // 第一行添加两个后换行
-// if (i == 1) {
-// container.addView(row);
-// row = new LinearLayout(context);
-// row.setOrientation(LinearLayout.HORIZONTAL);
-// } else if (i > 1 && (i - 2) % 4 == 3) {
-// container.addView(row);
-// row = new LinearLayout(context);
-// row.setOrientation(LinearLayout.HORIZONTAL);
-// }
-// }
-//
-//// 添加最后一行可能存在的剩余 view
-// if (row.getChildCount() > 0) {
-// container.addView(row);
-// }
-// isSingleMode = false;
-// currentSinglePit = -1;
-// }
-
public void restoreMultiWheatPk(int layoutType) {
- if (layoutType == 1) {
- container.removeAllViews();
- }
+ container.removeAllViews();
+
int screenWidth = getScreenWidth();
int itemWidth = screenWidth / 8;
LinearLayout row = new LinearLayout(context);
row.setOrientation(LinearLayout.HORIZONTAL);
- // 根据 layoutType 调整前两个控件的顺序
- int firstPitNumber, secondPitNumber;
- if (layoutType == 1) {
- firstPitNumber = 10; // 第一个显示 10
- secondPitNumber = 9; // 第二个显示 9
- } else if (layoutType == 2) {
- firstPitNumber = 9; // 第一个显示 9
- secondPitNumber = 10; // 第二个显示 10
- } else {
- firstPitNumber = 9;
- secondPitNumber = 10;
- }
+ int firstPitNumber = layoutType == 1 ? 10 : 9;
+ int secondPitNumber = layoutType == 1 ? 9 : 10;
- // 添加第一个控件(10 或 9)
- addWheatViewItem(row, firstPitNumber, itemWidth*2, layoutType);
-
- // 添加第二个控件(9 或 10)
- addWheatViewItem(row, secondPitNumber, itemWidth*2, layoutType);
+ addWheatViewItem(row, firstPitNumber, itemWidth * 2, layoutType);
+ addWheatViewItem(row, secondPitNumber, itemWidth * 2, layoutType);
container.addView(row);
row = new LinearLayout(context);
row.setOrientation(LinearLayout.HORIZONTAL);
- // 添加其余 8 个控件(1~8)
for (int i = 2; i < 10; i++) {
int pitNumber = pitIndexMap[i];
addWheatViewItem(row, pitNumber, itemWidth, layoutType);
- if (i > 1 && (i - 2) % 4 == 3) {
+ if ((i - 2) % 4 == 3) {
container.addView(row);
row = new LinearLayout(context);
row.setOrientation(LinearLayout.HORIZONTAL);
@@ -285,43 +168,29 @@ public class WheatLayoutManager {
currentSinglePit = -1;
}
- // 抽取公共方法:添加单个控件
private void addWheatViewItem(LinearLayout row, int pitNumber, int itemWidth, int layoutType) {
- RoomDefaultWheatView wheatView = new RoomDefaultWheatView(context);
- wheatView.pitNumber = String.valueOf(pitNumber);
- wheatView.setData(pitList.get(pitNumber - 1));
+ RoomDefaultWheatView wheatView = createWheatView(pitNumber);
LinearLayout.LayoutParams params;
-
if (pitNumber == 9 || pitNumber == 10) {
int fixedHeightInPx = context.getResources().getDimensionPixelSize(R.dimen.dp_90);
-
if (pitNumber == 9) {
- params = new LinearLayout.LayoutParams(itemWidth-40, fixedHeightInPx);
+ params = new LinearLayout.LayoutParams(itemWidth - 40, fixedHeightInPx);
if (layoutType == 1) {
- // 9号在右边,右边距10dp
params.rightMargin = context.getResources().getDimensionPixelSize(R.dimen.dp_1);
params.setMargins(20, -30, -20, 0);
- } else if (layoutType == 2) {
- // 9号在左边,左边距10dp
+ } else {
params.leftMargin = context.getResources().getDimensionPixelSize(R.dimen.dp_1);
params.setMargins(-30, -20, 0, 0);
}
-
} else {
params = new LinearLayout.LayoutParams(itemWidth - 80, fixedHeightInPx);
if (layoutType == 1) {
- // 10号在左边,左边距15dp
-// params.leftMargin = context.getResources().getDimensionPixelSize(R.dimen.dp_5);
params.setMargins(-30, 10, 0, 0);
- } else if (layoutType == 2) {
- // 10号在右边,右边距15dp
-// params.rightMargin = context.getResources().getDimensionPixelSize(R.dimen.dp_5);
+ } else {
params.setMargins(0, 10, -30, 0);
}
-
}
-
} else {
int fixedHeightInPx = context.getResources().getDimensionPixelSize(R.dimen.dp_60);
params = new LinearLayout.LayoutParams(itemWidth + 15, fixedHeightInPx + 20);
@@ -331,9 +200,9 @@ public class WheatLayoutManager {
wheatView.setLayoutParams(params);
wheatView.setOnClickListener(v -> {
if (wheatClickListener != null) {
- if (layoutType==1) {
+ if (layoutType == 1) {
wheatClickListener.onWheatClick(wheatView, Integer.parseInt(wheatView.pitNumber));
- }else {
+ } else {
wheatClickListener.onMakeWheatClick(wheatView, Integer.parseInt(wheatView.pitNumber));
}
}
@@ -342,7 +211,6 @@ public class WheatLayoutManager {
row.addView(wheatView);
}
-
private RoomDefaultWheatView createWheatView(int pitNumber) {
RoomDefaultWheatView wheatView = new RoomDefaultWheatView(context);
wheatView.pitNumber = String.valueOf(pitNumber);
@@ -350,14 +218,6 @@ public class WheatLayoutManager {
return wheatView;
}
- private RoomMakeWheatView createRoomMakeWheatView(int pitNumber) {
- RoomMakeWheatView wheatView = new RoomMakeWheatView(context);
- wheatView.pitNumber = String.valueOf(pitNumber);
- wheatView.setData(pitList.get(pitNumber - 1));
- return wheatView;
- }
-
-
private int dpToPx(int dp) {
return Math.round(dp * context.getResources().getDisplayMetrics().density);
}
@@ -367,21 +227,13 @@ public class WheatLayoutManager {
return metrics.widthPixels;
}
- /**
- * 更新指定 pitNumber 的麦位信息(用于局部刷新)
- */
public void updateSingleWheat(RoomPitBean pitBean, int pitNumber) {
if (pitList == null || pitList.isEmpty() || pitNumber < 1 || pitNumber > 10) return;
-
- // 如果是单个展示模式且不是当前麦位,不处理
if (isSingleMode && this.currentSinglePit != pitNumber) return;
RoomDefaultWheatView wheatView = findWheatViewByPitNumber(pitNumber);
if (wheatView != null) {
-
-// RoomPitBean bean = pitList.get(pitNumber - 1);
- RoomPitBean bean = pitBean;
- wheatView.setData(bean); // 刷新数据
+ wheatView.setData(pitBean);
}
}
@@ -410,22 +262,37 @@ public class WheatLayoutManager {
return null;
}
- /**
- * 批量刷新多个麦位状态
- */
public void refreshWheatData(List newPitList, List changedPits) {
this.pitList = newPitList;
for (int pitNumber : changedPits) {
-// updateSingleWheat(pitNumber);
+ updateSingleWheat(pitList.get(pitNumber - 1), pitNumber);
}
}
+
public void updateSingleOnlineWheat(UserOnlineStatusBean bean) {
- if (pitList == null || pitList.isEmpty()) return;
+ if (pitList == null || pitList.isEmpty() || bean == null) return;
for (RoomPitBean pitBean : pitList) {
int pitNumber = Integer.parseInt(pitBean.getPit_number());
RoomDefaultWheatView wheatView = findWheatViewByPitNumber(pitNumber);
- wheatView.setOnlineStatus(bean); // 刷新数据
+ if (wheatView != null) {
+ wheatView.setOnlineStatus(bean);
+ }
}
}
+
+ public void clear() {
+ container.removeAllViews();
+ pitList = null;
+ singleWheatView = null;
+ isSingleMode = false;
+ currentSinglePit = -1;
+ }
+
+ public void clearData() {
+ pitList = null;
+ singleWheatView = null;
+ isSingleMode = false;
+ currentSinglePit = -1;
+ }
}
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 a23334f..2649af7 100644
--- a/moduleUtil/src/main/java/com/xscm/moduleutil/widget/WheatLayoutSingManager.java
+++ b/moduleUtil/src/main/java/com/xscm/moduleutil/widget/WheatLayoutSingManager.java
@@ -44,11 +44,21 @@ public class WheatLayoutSingManager {
}
public void setWheatData(List pitList) {
+ // 检查容器状态
+ if (container == null || !isContainerValid()) {
+ return;
+ }
+
this.pitList = pitList;
restoreMultiWheat();
}
public void setWheatDataPk(List pitList, int layoutType) {
+ // 检查容器状态
+ if (container == null || !isContainerValid()) {
+ return;
+ }
+
this.pitList = pitList;
restoreMultiWheatPk(layoutType);
}
@@ -58,9 +68,19 @@ public class WheatLayoutSingManager {
}
public void showSingleWheat(int pitNumber) {
+ // 检查容器状态
+ if (container == null || !isContainerValid()) {
+ return;
+ }
+
if (isSingleMode && this.currentSinglePit == pitNumber) return;
- container.removeAllViews();
+ try {
+ container.removeAllViews();
+ } catch (Exception e) {
+ // 忽略异常,继续执行
+ return;
+ }
if (pitNumber < 1 || pitNumber > 10 || pitList == null || pitList.size() < 10)
return;
@@ -93,7 +113,21 @@ public class WheatLayoutSingManager {
}
public void restoreMultiWheat() {
- container.removeAllViews();
+ // 检查容器状态
+ if (container == null || !isContainerValid()) {
+ return;
+ }
+
+ try {
+ container.removeAllViews();
+ } catch (Exception e) {
+ // 忽略异常,继续执行
+ return;
+ }
+
+ if (pitList == null || pitList.size() < 10) {
+ return;
+ }
int screenWidth = getScreenWidth();
int itemWidth = screenWidth / 4; // 每个控件宽度为屏幕宽度的 1/4
@@ -126,11 +160,6 @@ public class WheatLayoutSingManager {
params = new LinearLayout.LayoutParams(itemWidth - 30, fixedHeightInPx + 30);
// 其他控件保持原有逻辑
-
-// if (i > 1 && (i - 2) % 4 != 0) {
-// params.leftMargin = 12;
-// params.rightMargin = 12;
-// }
params.setMargins(0, 0, 0, 0); // 不设右边距,由 row padding 控制
}
@@ -139,7 +168,6 @@ public class WheatLayoutSingManager {
if (wheatClickListener != null) {
wheatClickListener.onWheatClick(wheatView, Integer.parseInt(wheatView.pitNumber));
}
-// showSingleWheat(Integer.parseInt(wheatView.pitNumber));
});
row.addView(wheatView);
@@ -156,91 +184,33 @@ public class WheatLayoutSingManager {
}
}
-// 添加最后一行可能存在的剩余 view
+ // 添加最后一行可能存在的剩余 view
if (row.getChildCount() > 0) {
container.addView(row);
}
isSingleMode = false;
currentSinglePit = -1;
-
}
-// public void restoreMultiWheatPk(int layoutType, int width) {
-// container.removeAllViews();
-//
-// int screenWidth = getScreenWidth();
-// int itemWidth = screenWidth / 8; // 每个控件宽度为屏幕宽度的 1/4
-//
-// LinearLayout row = new LinearLayout(context);
-// row.setOrientation(LinearLayout.HORIZONTAL);
-//
-// for (int i = 0; i < 10; i++) {
-// int pitNumber = pitIndexMap[i];
-// RoomDefaultWheatView wheatView = new RoomDefaultWheatView(context);
-// wheatView.pitNumber = String.valueOf(pitNumber);
-// wheatView.setData(pitList.get(pitNumber - 1));
-//
-// LinearLayout.LayoutParams params;
-//
-// if (i == 0) {
-// int fixedHeightInDp = 110; // 固定高度为 100dp
-// int fixedHeightInPx =context.getResources().getDimensionPixelSize(R.dimen.dp_80); // 调用已有的 dpToPx 方法
-// // 第一个控件:左边距 86dp,右边距 100dp
-// params = new LinearLayout.LayoutParams(itemWidth, fixedHeightInPx);
-// params.rightMargin = context.getResources().getDimensionPixelSize(R.dimen.dp_50);
-// } else if (i == 1) {
-// int fixedHeightInDp = 110; // 固定高度为 100dp
-// int fixedHeightInPx = context.getResources().getDimensionPixelSize(R.dimen.dp_80); // 调用已有的 dpToPx 方法
-// // 第二个控件:右边距 86dp
-// params = new LinearLayout.LayoutParams(itemWidth, fixedHeightInPx);
-// } else {
-// int fixedHeightInDp = 90; // 固定高度为 100dp
-// int fixedHeightInPx = context.getResources().getDimensionPixelSize(R.dimen.dp_60); // 调用已有的 dpToPx 方法
-// params = new LinearLayout.LayoutParams(itemWidth -10, fixedHeightInPx + 30);
-// // 其他控件保持原有逻辑
-//
-//
-//// if (i > 1 && (i - 2) % 4 != 0) {
-//// params.leftMargin = 12;
-//// params.rightMargin = 12;
-//// }
-// params.setMargins(0, 0, 0, 0); // 不设右边距,由 row padding 控制
-// }
-//
-// wheatView.setLayoutParams(params);
-// wheatView.setOnClickListener(v -> {
-// if (wheatClickListener != null) {
-// wheatClickListener.onWheatClick(wheatView, Integer.parseInt(wheatView.pitNumber));
-// }
-//// showSingleWheat(Integer.parseInt(wheatView.pitNumber));
-// });
-//
-// row.addView(wheatView);
-//
-// // 第一行添加两个后换行
-// if (i == 1) {
-// container.addView(row);
-// row = new LinearLayout(context);
-// row.setOrientation(LinearLayout.HORIZONTAL);
-// } else if (i > 1 && (i - 2) % 4 == 3) {
-// container.addView(row);
-// row = new LinearLayout(context);
-// row.setOrientation(LinearLayout.HORIZONTAL);
-// }
-// }
-//
-//// 添加最后一行可能存在的剩余 view
-// if (row.getChildCount() > 0) {
-// container.addView(row);
-// }
-// isSingleMode = false;
-// currentSinglePit = -1;
-// }
-
public void restoreMultiWheatPk(int layoutType) {
- if (layoutType == 1) {
- container.removeAllViews();
+ // 检查容器状态
+ if (container == null || !isContainerValid()) {
+ return;
}
+
+ if (layoutType == 1) {
+ try {
+ container.removeAllViews();
+ } catch (Exception e) {
+ // 忽略异常,继续执行
+ return;
+ }
+ }
+
+ if (pitList == null || pitList.size() < 10) {
+ return;
+ }
+
int screenWidth = getScreenWidth();
int itemWidth = screenWidth / 8;
@@ -292,6 +262,11 @@ public class WheatLayoutSingManager {
// 抽取公共方法:添加单个控件
private void addWheatViewItem(LinearLayout row, int pitNumber, int itemWidth, int layoutType) {
+ // 检查容器状态
+ if (!isContainerValid()) {
+ return;
+ }
+
RoomSingSongWheatView wheatView = new RoomSingSongWheatView(context);
wheatView.pitNumber = String.valueOf(pitNumber);
wheatView.setData(pitList.get(pitNumber - 1));
@@ -317,11 +292,9 @@ public class WheatLayoutSingManager {
params = new LinearLayout.LayoutParams(itemWidth - 80, fixedHeightInPx);
if (layoutType == 1) {
// 10号在左边,左边距15dp
-// params.leftMargin = context.getResources().getDimensionPixelSize(R.dimen.dp_5);
params.setMargins(-30, 10, 0, 0);
} else if (layoutType == 2) {
// 10号在右边,右边距15dp
-// params.rightMargin = context.getResources().getDimensionPixelSize(R.dimen.dp_5);
params.setMargins(0, 10, -30, 0);
}
@@ -347,7 +320,6 @@ public class WheatLayoutSingManager {
row.addView(wheatView);
}
-
private RoomSingSongWheatView createWheatView(int pitNumber) {
RoomSingSongWheatView wheatView = new RoomSingSongWheatView(context);
wheatView.pitNumber = String.valueOf(pitNumber);
@@ -362,7 +334,6 @@ public class WheatLayoutSingManager {
return wheatView;
}
-
private int dpToPx(int dp) {
return Math.round(dp * context.getResources().getDisplayMetrics().density);
}
@@ -376,6 +347,11 @@ public class WheatLayoutSingManager {
* 更新指定 pitNumber 的麦位信息(用于局部刷新)
*/
public void updateSingleWheat(RoomPitBean pitBean, int pitNumber) {
+ // 检查容器状态
+ if (container == null || !isContainerValid()) {
+ return;
+ }
+
if (pitList == null || pitList.isEmpty() || pitNumber < 1 || pitNumber > 10) return;
// 如果是单个展示模式且不是当前麦位,不处理
@@ -383,8 +359,6 @@ public class WheatLayoutSingManager {
RoomSingSongWheatView wheatView = findWheatViewByPitNumber(pitNumber);
if (wheatView != null) {
-
-// RoomPitBean bean = pitList.get(pitNumber - 1);
RoomPitBean bean = pitBean;
wheatView.setData(bean); // 刷新数据
}
@@ -392,6 +366,11 @@ public class WheatLayoutSingManager {
@Nullable
private RoomSingSongWheatView findWheatViewByPitNumber(int pitNumber) {
+ // 检查容器状态
+ if (container == null || !isContainerValid()) {
+ return null;
+ }
+
for (int i = 0; i < container.getChildCount(); i++) {
View row = container.getChildAt(i);
if (row instanceof LinearLayout) {
@@ -419,21 +398,73 @@ public class WheatLayoutSingManager {
* 批量刷新多个麦位状态
*/
public void refreshWheatData(List newPitList, List changedPits) {
- this.pitList = newPitList;
- for (int pitNumber : changedPits) {
-// updateSingleWheat(pitNumber);
+ // 检查容器状态
+ if (container == null || !isContainerValid()) {
+ return;
}
+
+ this.pitList = newPitList;
+ // 注意:原代码中此方法体为空,如果需要实现请取消注释下面的代码
+ // for (int pitNumber : changedPits) {
+ // updateSingleWheat(pitNumber);
+ // }
}
public void updateSingleOnlineWheat(UserOnlineStatusBean bean) {
+ // 检查容器状态
+ if (container == null || !isContainerValid()) {
+ return;
+ }
+
if (pitList == null || pitList.isEmpty()) return;
for (RoomPitBean pitBean : pitList) {
int pitNumber = Integer.parseInt(pitBean.getPit_number());
RoomSingSongWheatView wheatView = findWheatViewByPitNumber(pitNumber);
- wheatView.setOnlineStatus(bean); // 刷新数据
+ if (wheatView != null) {
+ wheatView.setOnlineStatus(bean); // 刷新数据
+ }
}
}
+ // 添加容器状态检查方法
+ private boolean isContainerValid() {
+ try {
+ // 检查容器是否已附加到窗口
+ return container != null && container.isAttachedToWindow();
+ } catch (Exception e) {
+ return false;
+ }
+ }
+ // 添加资源清理方法
+ public void release() {
+ try {
+ if (container != null) {
+ // 清理所有子视图的资源
+ for (int i = 0; i < container.getChildCount(); i++) {
+ View child = container.getChildAt(i);
+ if (child instanceof LinearLayout) {
+ LinearLayout linearLayout = (LinearLayout) child;
+ for (int j = 0; j < linearLayout.getChildCount(); j++) {
+ View view = linearLayout.getChildAt(j);
+ if (view instanceof RoomSingSongWheatView) {
+ ((RoomSingSongWheatView) view).releaseResources();
+ }
+ }
+ } else if (child instanceof RoomSingSongWheatView) {
+ ((RoomSingSongWheatView) child).releaseResources();
+ }
+ }
+ container.removeAllViews();
+ }
+ } catch (Exception e) {
+ // 忽略异常
+ }
+
+ // 清理引用
+ pitList = null;
+ singleWheatView = null;
+ wheatClickListener = null;
+ }
}
diff --git a/moduleroom/src/main/java/com/example/moduleroom/activity/RoomActivity.java b/moduleroom/src/main/java/com/example/moduleroom/activity/RoomActivity.java
index d7fd1a3..20edd48 100644
--- a/moduleroom/src/main/java/com/example/moduleroom/activity/RoomActivity.java
+++ b/moduleroom/src/main/java/com/example/moduleroom/activity/RoomActivity.java
@@ -16,11 +16,15 @@ import android.content.DialogInterface;
import android.content.Intent;
import android.content.pm.ActivityInfo;
import android.content.res.Configuration;
+import android.graphics.Color;
+import android.graphics.drawable.ColorDrawable;
import android.os.Bundle;
import android.os.CountDownTimer;
import android.os.Looper;
+import android.text.Spannable;
import android.text.SpannableStringBuilder;
import android.text.TextUtils;
+import android.text.style.ForegroundColorSpan;
import android.util.DisplayMetrics;
import android.util.Log;
import android.view.GestureDetector;
@@ -31,6 +35,7 @@ import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewParent;
+import android.view.ViewStub;
import android.view.Window;
import android.view.WindowManager;
import android.view.inputmethod.InputMethodManager;
@@ -43,6 +48,7 @@ import android.widget.RelativeLayout;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.constraintlayout.widget.ConstraintLayout;
+import androidx.core.content.ContextCompat;
import androidx.fragment.app.Fragment;
import androidx.recyclerview.widget.LinearLayoutManager;
@@ -79,6 +85,7 @@ import com.petterp.floatingx.assist.helper.FxScopeHelper;
import com.petterp.floatingx.listener.control.IFxControl;
import com.tencent.imsdk.v2.V2TIMValueCallback;
import com.xscm.moduleutil.base.CommonAppContext;
+import com.xscm.moduleutil.bean.GiftBean;
import com.xscm.moduleutil.bean.HeadlineBean;
import com.xscm.moduleutil.bean.RoomInputEvent;
import com.xscm.moduleutil.bean.RoomSingleton;
@@ -86,6 +93,7 @@ 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.RoomApplyListBean;
import com.xscm.moduleutil.bean.room.RoomAuction;
import com.xscm.moduleutil.bean.room.RoomOnline;
import com.xscm.moduleutil.color.ThemeableDrawableUtils;
@@ -141,6 +149,7 @@ import org.greenrobot.eventbus.EventBus;
import org.greenrobot.eventbus.Subscribe;
import org.greenrobot.eventbus.ThreadMode;
+import java.lang.ref.WeakReference;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.Date;
@@ -194,6 +203,8 @@ public class RoomActivity extends BaseMvpActivity sActivityRef;
@Override
protected void onNewIntent(Intent intent) {
@@ -315,8 +326,12 @@ public class RoomActivity extends BaseMvpActivity(this);
+ }
+ // 提供安全的访问方法
+ public static RoomActivity getCurrentActivity() {
+ return sActivityRef != null ? sActivityRef.get() : null;
}
-
@Subscribe(threadMode = ThreadMode.MAIN)
public void onRoomTaskEvent(RoomTaskEvent event) {
if (taskId != null && !taskId.equals("9")) {//这是每日任务完成发送私聊信息的事件
@@ -354,7 +369,16 @@ public class RoomActivity extends BaseMvpActivity pitList = mRoomInfoResp.getRoom_info().getPit_list();
+ if (pitList == null) return;
+
+ for (RoomPitBean roomPitBean : pitList) {
+ if (roomPitBean.getUser_id().equals(toUserInfo.getUser_id() + "")) {
+ roomPitBean.setCharm(toUserInfo.getCharm());
+ try {
+ pitList.set(Integer.parseInt(roomPitBean.getPit_number()) - 1, roomPitBean);
+ } catch (NumberFormatException e) {
+ // Handle exception
+ }
+ }
+ }
+
+ roomFragment.updateSeatViewExchangedWithPitArray(mRoomInfoResp);
+
+ String typeId = mRoomInfoResp.getRoom_info().getType_id();
+ if ("2".equals(typeId)) {
+ roomFragment.handleAuctionMessageEvent(messageEvent);
+ } else if ("1".equals(typeId) || "4".equals(typeId) || "3".equals(typeId)) {
+ String labelId = mRoomInfoResp.getRoom_info().getLabel_id();
+ if ("2".equals(labelId)) {
+ roomFragment.KtvFragmentEvent(messageEvent);
+ } else if ("1".equals(labelId)) {
+ roomFragment.SingSongEvent(messageEvent);
+ }
+ }
+ }
+
+ private void handleMsgType1014(RoomMessageEvent messageEvent, RoomMessageEvent.T text) {
+ if (text == null) return;
+
+ RoomSettingEvent roomSettingEvent = new RoomSettingEvent();
+ roomSettingEvent.setRoomId(messageEvent.getRoomId());
+ roomSettingEvent.setRoom_up_pit_type(text.getRoom_up_pit_type());
+ roomSettingEvent.setType(messageEvent.getMsgType());
+
+ if (mRoomBean != null) {
+ mRoomBean.setRoom_up_pit_type(text.getRoom_up_pit_type() + "");
+ EventBus.getDefault().post(mRoomBean);
+ }
+
+ EventBus.getDefault().post(roomSettingEvent);
+ }
+
+ private void handleMsgType1013(RoomMessageEvent messageEvent, RoomMessageEvent.T text) {
+ if (text == null || mRoomUserBean == null) return;
+
+ int userid = text.getFromUserInfo().getUser_id();
+ int userId2 = SpUtil.getUserId();
+
+ if (text.getAction() == 1 && mRoomUserBean.getUser_id().equals(userId2 + "") && mRoomUserBean.getPit_number() == 9) {
+ queren(text.getFromUserInfo().getNickname());
+ } else if (text.getAction() == 4 && userid == userId2) {
+ queren1(text.getFromUserInfo().getNickname());
+ } else {
+ roomFragment.KtvFragmentEvent(messageEvent);
+ }
+ }
+
+ private void handleMsgType1012() {
+ if (customMusicFloatingView != null) {
+ customMusicFloatingView.destroy();
+ }
+ AgoraManager.getInstance(RoomActivity.this).desMusic();
+ stub.setVisibility(View.GONE);
+ MvpPre.postRoomInfo(roomId);
+ }
+
+ private void handleMsgType124(RoomMessageEvent messageEvent, RoomMessageEvent.T text) {
+ if (text == null) return;
+
+ try {
+ RoomMessageEvent.text parsedText = GsonUtils.fromJson(text.getText(), RoomMessageEvent.text.class);
+ MusicPlayBean musicPlayBean = new MusicPlayBean();
+ musicPlayBean.setPosition(parsedText.getPosition());
+ EventBus.getDefault().post(musicPlayBean);
+ } catch (Exception e) {
+ // Handle exception
+ }
+ }
+
+ private void handleMsgType1003(RoomMessageEvent messageEvent, RoomMessageEvent.T text) {
+ if (text == null || mRoomInfoResp == null || mRoomInfoResp.getRoom_info() == null) return;
+
+ UserInfo fromUserInfo = text.getFromUserInfo();
+ if (fromUserInfo == null) return;
+
+ String pitNumber = text.getPit_number();
+ int userId = fromUserInfo.getUser_id();
+ int currentUserId = SpUtil.getUserId();
+
+ if ("9".equals(pitNumber) && userId == currentUserId) {
+ mBinding.roomTop.rl.setVisibility(View.VISIBLE);
+ }
+
+ if (userId == currentUserId) {
+ aBoolean = false;
+ ivWheatFeeding(com.xscm.moduleutil.R.mipmap.room_wheat_feeding_up);
+ setBoolean(aBoolean);
+ if (mRoomInfoResp.getUser_info() != null) {
+ mRoomInfoResp.getUser_info().setPit_number(pitNumber != null ? Integer.parseInt(pitNumber) : 0);
+ }
+ setRoleType(3, Integer.parseInt(pitNumber));
+ switchMic(2);
+ }
+
+ String typeId = mRoomInfoResp.getRoom_info().getType_id();
+ if ("2".equals(typeId)) {
+ if ("9".equals(pitNumber)) {
+ mRoomInfoResp.getRoom_info().getPit_list().set(0, getPitBean(messageEvent));
+ if (mRoomInfoResp.getUser_info() != null) {
+ mRoomInfoResp.getUser_info().setPit_number(Integer.parseInt(pitNumber));
+ }
+ }
+ } else if ("3".equals(typeId) || "4".equals(typeId) || "1".equals(typeId)) {
+ String labelId = mRoomInfoResp.getRoom_info().getLabel_id();
+ if ("2".equals(labelId)) {
+ roomFragment.KtvFragmentEvent(messageEvent);
+ } else if ("1".equals(labelId)) {
+ roomFragment.SingSongEvent(messageEvent);
+ }
+ } else if ("7".equals(typeId)) {
+ List pitList = mRoomInfoResp.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);
+ } catch (NumberFormatException e) {
+ // Handle exception
}
}
roomFragment.updateSeatViewExchangedWithPitArray(mRoomInfoResp);
- if (mRoomInfoResp.getRoom_info().getType_id().equals("2")){
- roomFragment.handleAuctionMessageEvent(messageEvent);
+ } else {
+ roomFragment.updateSeatViewExchangedWithPitArray(mRoomInfoResp);
+ }
+ }
+
+ private void handleMsgType1004(RoomMessageEvent messageEvent, RoomMessageEvent.T text) {
+ if (text == null || mRoomInfoResp == null || mRoomInfoResp.getRoom_info() == null) return;
+
+ UserInfo fromUserInfo = text.getFromUserInfo();
+ if (fromUserInfo == null) return;
+
+ String pitNumber = text.getPit_number();
+ int userId = fromUserInfo.getUser_id();
+ int currentUserId = SpUtil.getUserId();
+
+ if (userId == currentUserId) {
+ aBoolean = true;
+ ivWheatFeeding(com.xscm.moduleutil.R.mipmap.room_wheat_feeding);
+ setBoolean(aBoolean);
+ if (mRoomInfoResp.getUser_info() != null) {
+ mRoomInfoResp.getUser_info().setPit_number(0);
}
+ setRoleType(0, 0);
+ switchMic(2);
+ }
- } else if (messageEvent.getMsgType() == 123) {
- EventBus.getDefault().post(new RoomSettingEvent());
- } else if (messageEvent.getMsgType() == 1014) {
- RoomSettingEvent roomSettingEvent = new RoomSettingEvent();
- roomSettingEvent.setRoomId(messageEvent.getRoomId());
- roomSettingEvent.setRoom_up_pit_type(messageEvent.getText().getRoom_up_pit_type());
- roomSettingEvent.setType(messageEvent.getMsgType());
- mRoomBean.setRoom_up_pit_type(messageEvent.getText().getRoom_up_pit_type() + "");
-
- EventBus.getDefault().post(mRoomBean);
- EventBus.getDefault().post(roomSettingEvent);
- } else if (messageEvent.getMsgType() == 1013) {
- int userid = messageEvent.getText().getFromUserInfo().getUser_id();
- int userId2 = SpUtil.getUserId();
-
- if (messageEvent.getText().getAction() == 1 && mRoomUserBean.getUser_id().equals(userId2 + "") && mRoomUserBean.getPit_number() == 9) {
- queren(messageEvent.getText().getFromUserInfo().getNickname());
- } else if (messageEvent.getText().getAction() == 4 && userid == userId2) {
- queren1(messageEvent.getText().getFromUserInfo().getNickname());
- } else if (messageEvent.getText().getAction() == 2) {
-
- } else if (messageEvent.getText().getAction() == 3 && SpUtil.getUserId() == messageEvent.getText().getFromUserInfo().getUser_id()) {
-
- }
- } else if (messageEvent.getMsgType() == 1012) {
+ if (userId == currentUserId && "9".equals(pitNumber)) {
if (customMusicFloatingView != null) {
customMusicFloatingView.destroy();
+ AgoraManager.getInstance(RoomActivity.this).desMusic();
+ isMusic = false;
+ mBinding.roomTop.rl.setVisibility(GONE);
}
- AgoraManager.getInstance(RoomActivity.this).desMusic();
- MvpPre.postRoomInfo(roomId);
- } else if (messageEvent.getMsgType() == 124) {
- RoomMessageEvent.text text = GsonUtils.fromJson(messageEvent.getText().getText(), RoomMessageEvent.text.class);
- MusicPlayBean musicPlayBean = new MusicPlayBean();
- musicPlayBean.setPosition(text.getPosition());
- EventBus.getDefault().post(musicPlayBean);
- } else if (messageEvent.getMsgType() == 1003) {//上麦操作
- if (messageEvent.getText().getPit_number().equals("9") && messageEvent.getText().getFromUserInfo().getUser_id() == SpUtil.getUserId()) {
- mBinding.roomTop.rl.setVisibility(View.VISIBLE);
- }
- if (messageEvent.getText().getFromUserInfo().getUser_id() == SpUtil.getUserId()) {
- aBoolean = false;
- ivWheatFeeding(com.xscm.moduleutil.R.mipmap.room_wheat_feeding_up);
- setBoolean(aBoolean);
- mRoomInfoResp.getUser_info().setPit_number(messageEvent.getText().getPit_number() != null ? Integer.parseInt(messageEvent.getText().getPit_number()) : 0);
- setRoleType(3, Integer.parseInt(messageEvent.getText().getPit_number()));
- switchMic(2);
- }
+ }
- if (mRoomInfoResp.getRoom_info().getType_id().equals("2")) {///拍卖房上麦操作
-
- if (messageEvent.getText().getPit_number().equals("9")) {
- mRoomInfoResp.getRoom_info().getPit_list().set(0, getPitBean(messageEvent));
- mRoomInfoResp.getUser_info().setPit_number(Integer.parseInt(messageEvent.getText().getPit_number()));
-
- }
- } else if (mRoomInfoResp.getRoom_info().getType_id().equals("7")) {
- RoomPitBean pitBean = mRoomInfoResp.getRoom_info().getPit_list().get(Integer.parseInt(messageEvent.getText().getPit_number()) - 1);
- pitBean.setUser_id(messageEvent.getText().getFromUserInfo().getUser_id() + "");
- pitBean.setAvatar(messageEvent.getText().getFromUserInfo().getAvatar());
- pitBean.setNickname(messageEvent.getText().getFromUserInfo().getNickname());
- pitBean.setSex(messageEvent.getText().getFromUserInfo().getSex() + "");
- pitBean.setCharm(messageEvent.getText().getFromUserInfo().getCharm());
- pitBean.setDress(messageEvent.getText().getFromUserInfo().getDress());
- mRoomInfoResp.getRoom_info().getPit_list().set(Integer.parseInt(messageEvent.getText().getPit_number()) - 1, pitBean);
- }
- roomFragment.updateSeatViewExchangedWithPitArray(mRoomInfoResp);
- } else if (messageEvent.getMsgType() == 1004) {//下麦操作
- if (messageEvent.getText().getFromUserInfo().getUser_id() == SpUtil.getUserId() && messageEvent.getText().getPit_number().equals("9")) {
- if (customMusicFloatingView != null) {
- customMusicFloatingView.destroy();
- AgoraManager.getInstance(RoomActivity.this).desMusic();
- isMusic = false;
- mBinding.roomTop.rl.setVisibility(GONE);
- }
- }
- if (mRoomInfoResp.getRoom_info().getType_id().equals("2")) {
- if (messageEvent.getText().getPit_number().equals("9")) {
- if (messageEvent.getText().getFromUserInfo().getUser_id() == SpUtil.getUserId()) {
- mRoomInfoResp.getRoom_info().getPit_list().set(0, getPitBean2(messageEvent, "9"));
+ String typeId = mRoomInfoResp.getRoom_info().getType_id();
+ if ("2".equals(typeId)) {
+ if ("9".equals(pitNumber)) {
+ if (userId == currentUserId) {
+ mRoomInfoResp.getRoom_info().getPit_list().set(0, getPitBean2(messageEvent, "9"));
+ if (mRoomInfoResp.getUser_info() != null) {
mRoomInfoResp.getUser_info().setPit_number(0);
}
- } else if (messageEvent.getText().getPit_number().equals("888")) {
- mRoomInfoResp.setRoom_auction(null);
- if (messageEvent.getText().getFromUserInfo().getUser_id() == SpUtil.getUserId()) {
- setRoleType(0, 0);
- switchMic(2);
- }
}
- } else {
-
- RoomPitBean pitBean = mRoomInfoResp.getRoom_info().getPit_list().get(Integer.parseInt(messageEvent.getText().getPit_number()) - 1);
- pitBean.setUser_id("");
- pitBean.setAvatar("");
- pitBean.setNickname("");
- pitBean.setSex("");
- pitBean.setCharm("");
- pitBean.setDress("");
- mRoomInfoResp.getRoom_info().getPit_list().set(Integer.parseInt(messageEvent.getText().getPit_number()) - 1, pitBean);
-
- }
- roomFragment.updateSeatViewExchangedWithPitArray(mRoomInfoResp);
- if (messageEvent.getText().getFromUserInfo().getUser_id() == SpUtil.getUserId()) {
-// mBinding.ivWheatFeeding.setImageResource(com.xscm.moduleutil.R.mipmap.room_wheat_feeding);
- aBoolean = true;
- ivWheatFeeding(com.xscm.moduleutil.R.mipmap.room_wheat_feeding);
- setBoolean(aBoolean);
- mRoomInfoResp.getUser_info().setPit_number(0);
- setRoleType(0, 0);
- switchMic(2);
- }
-
- } else if (messageEvent.getMsgType() == 1022) {
- if (messageEvent.getText().getType() == 1) {//拍卖位上麦
- if (messageEvent.getText().getPit_number().equals("888")) {
- int type = -1; // 或其他默认值
- if (mRoomInfoResp.getRoom_info().getType_id().equals("2")) {
- type = (mRoomInfoResp.getRoom_info().getLabel_id().equals("1")) ? 1 : 2;
- }
- if (messageEvent.getText().getFromUserInfo().getUser_id() == SpUtil.getUserId()) {
- setRoleType(3, 888);
- switchMic(2);
- CardRelationshipFragment.show(mRoomInfoResp.getRoom_info().getRoom_id(), SpUtil.getUserId() + "", type + "", getSupportFragmentManager());
- }
- }
- } else if (messageEvent.getText().getType() == 2) {//拍卖位下麦
- if (messageEvent.getText().getPit_number().equals("9")) {
+ } else if ("888".equals(pitNumber)) {
+ mRoomInfoResp.setRoom_auction(null);
+ if (userId == currentUserId) {
setRoleType(0, 0);
switchMic(2);
- } else if (messageEvent.getText().getPit_number().equals("888")) {
- mRoomInfoResp.setRoom_auction(new RoomAuction());
- if (messageEvent.getText().getFromUserInfo().getUser_id() == SpUtil.getUserId()) {
- setRoleType(0, 0);
- switchMic(2);
- }
}
}
roomFragment.updateSeatViewExchangedWithPitArray(mRoomInfoResp);
- roomFragment.handleAuctionMessageEvent(messageEvent);
- }else if(messageEvent.getMsgType() == 1023){
- mRoomInfoResp.getRoom_auction().setAuction_user(messageEvent.getText().getAuction_user());
- SpUtil.setAuctionId(messageEvent.getText().getAuction_user().getAuction_id());
+ } else if ("3".equals(typeId) || "4".equals(typeId) || "1".equals(typeId)) {
+ String labelId = mRoomInfoResp.getRoom_info().getLabel_id();
+ if ("2".equals(labelId)) {
+ roomFragment.KtvFragmentEvent(messageEvent);
+ } else if ("1".equals(labelId)) {
+ roomFragment.SingSongEvent(messageEvent);
+ }
+ } else {
+ List pitList = mRoomInfoResp.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);
+ } catch (NumberFormatException e) {
+ // Handle exception
+ }
+ }
roomFragment.updateSeatViewExchangedWithPitArray(mRoomInfoResp);
- }else if (messageEvent.getMsgType() == 1024) {//竞拍,拍卖列表变化
- mRoomInfoResp.getRoom_auction().setAuction_list(messageEvent.getText().getAuction_list());
- roomFragment.updateSeatViewExchangedWithPitArray(mRoomInfoResp);
- }else if (messageEvent.getMsgType() == 1025) {//结束
- roomFragment.handleAuctionMessageEvent(messageEvent);
- }else if (messageEvent.getMsgType() == 1026) {//主持延迟
- roomFragment.handleAuctionMessageEvent(messageEvent);
- }else if (messageEvent.getMsgType() == 1027) {//拍卖类型变化
-// mRoomInfoResp.getRoom_info().setLabel_id(messageEvent.getText().getText()+"");
-// roomFragment.updateSeatViewExchangedWithPitArray(mRoomInfoResp);
- roomFragment.handleAuctionMessageEvent(messageEvent);
}
- else if (messageEvent.getMsgType() == 1020) {
- mRoomBean = messageEvent.getText().getRoomInfo();
- EventBus.getDefault().post(mRoomBean);
- changeBackgroundColor(mRoomBean.getRoom_background());
- } else if (messageEvent.getMsgType() == 1011) {
- if (messageEvent.getText().getFromUserInfo() != null) {
- if (messageEvent.getText().getFromUserInfo().getUser_id() == SpUtil.getUserId()) {
- MvpPre.quitRoom(roomId, SpUtil.getUserId() + "");
- }
- }
- } else if (messageEvent.getMsgType() == 1001) {
- number++;
- mBinding.roomTop.tvNum.setText(number + "");
- } else if (messageEvent.getMsgType() == 1002) {
- number--;
- mBinding.roomTop.tvNum.setText(number + "");
- } else if (messageEvent.getMsgType() == 1029) {
- if (mRoomInfoResp.getUser_info().getPit_number() == 9 && mRoomInfoResp.getUser_info().getUser_id().equals(SpUtil.getUserId() + "")) {
- querenPk(messageEvent.getText().getText(), messageEvent.getText().getPkId());
- }
- } else if (messageEvent.getMsgType() == 1021) {
-// EventBus.getDefault().post(new RoomClearCardiacRunnable(messageEvent.getRoomId()));
- if (mRoomInfoResp.getRoom_info().getType_id().equals("2")){
- roomFragment.handleAuctionMessageEvent(messageEvent);
- }else {
- for (RoomPitBean roomPitBean : mRoomInfoResp.getRoom_info().getPit_list()) {
- roomPitBean.setCharm("");
- mRoomInfoResp.getRoom_info().getPit_list().set(Integer.parseInt(roomPitBean.getPit_number()) - 1, roomPitBean);
- }
- roomFragment.updateSeatViewExchangedWithPitArray(mRoomInfoResp);
- }
- } else if (messageEvent.getMsgType() == 1036) {
- if (messageEvent.getText().getRoom_id().equals(roomId)) {
- if (!mBinding.roomTop.tvNum.getText().toString().equals(messageEvent.getText().getOnline_number() + "")) {
- mBinding.roomTop.tvNum.setText(messageEvent.getText().getOnline_number() + "");
- }
- }
- } else if (messageEvent.getMsgType() == 1049) {//交友房阶段发生变化
- if (messageEvent.getText().getStep() != 3) {
- if (messageEvent.getText().getEnd_time() != null) {
- roomFragment.updateFriendshipState(messageEvent.getText().getStep(), messageEvent.getText().getFriend_id(), Long.parseLong(messageEvent.getText().getEnd_time()), null);
- } else {
- roomFragment.updateFriendshipState(messageEvent.getText().getStep(), messageEvent.getText().getFriend_id(), 0, null);
- }
- } else {
- roomFragment.updateFriendshipState(messageEvent.getText().getStep(), messageEvent.getText().getFriend_id(), 0, messageEvent.getText().getFriend_user());
- }
- } else if (messageEvent.getMsgType() == 1050) {//交友=房间时间发生延时
- roomFragment.friendTimeDelayWithTime(Long.parseLong(messageEvent.getText().getEnd_time()));
- } else if (messageEvent.getMsgType() == 1051) {
- FriendUserBean friend_user = getFriendUserBean(messageEvent);
- FriendsDialogFragment.show(friend_user, getSupportFragmentManager());
-
-
- if (messageEvent.getText().getUser1_id().equals(SpUtil.getUserId() + "") ||
- messageEvent.getText().getUser2_id().equals(SpUtil.getUserId() + "")) {
-
- // 取消之前的延迟任务
- if (roomSwitchRunnable != null) {
- roomSwitchHandler.removeCallbacks(roomSwitchRunnable);
- }
-
- // 保存新的房间ID
- pendingRoomId = messageEvent.getText().getRoom_id();
-
- // 创建新的延迟任务
- roomSwitchRunnable = new Runnable() {
- @Override
- public void run() {
- // 确保 Activity 仍然有效
- if (!isFinishing() && !isDestroyed()) {
- // 防止重复切换到同一个房间
- if (!pendingRoomId.equals(lastSwitchedRoomId)) {
- MvpPre.quitRoom2(messageEvent.getRoomId(), SpUtil.getUserId() + "");
- MvpPre.getRoomIn(pendingRoomId, "");
- lastSwitchedRoomId = pendingRoomId;
- AgoraManager.getInstance(context).setLastRoomId(messageEvent.getRoomId());
- }
- }
- pendingRoomId = null;
- }
- };
-
- // 延迟3秒执行
- roomSwitchHandler.postDelayed(roomSwitchRunnable, 3000);
- }
-
- } else if (messageEvent.getMsgType() == 1052) {
- roomFragment.upCabinFragment(messageEvent.getText().getTime_day());
-
- } else if (messageEvent.getMsgType() == 1053) {//交友=麦位发生改变
- if (messageEvent.getText().getList() != null && !messageEvent.getText().getList().isEmpty()) {
- List pitArr = new ArrayList<>();
- for (int j = 0; j < messageEvent.getText().getList().size(); j++) {
- RoomPitBean roomPitBean = getRoomPitBean(messageEvent, j);
- pitArr.add(roomPitBean);
- }
- roomFragment.friendSeatDidChanged(pitArr);
- pitArr.clear();
- }
- } else if (messageEvent.getMsgType() == 1054) {//交友心动值发生变化
-
- // 方式2:直接传递,依赖垃圾回收
- roomFragment.friendHeartNumberDidChanged(
- messageEvent.getText().getList().stream()
- .map(item -> {
- FriendInfo.HeartList heartList1 = new FriendInfo.HeartList();
- heartList1.setHeartId(item.getHeartId());
- heartList1.setHeartNum(item.getHeartNum());
- return heartList1;
- })
- .collect(Collectors.toList())
- );
- } else if (messageEvent.getMsgType() == 1055) {
- if (!isFinishing() && !isDestroyed()) {
- // 防止重复切换到同一个房间
- MvpPre.quitRoom2(messageEvent.getRoomId(), SpUtil.getUserId() + "");
- jiaR();
-// MvpPre.getRoomIn(AgoraManager.getInstance(context).getLastRoomId(), "");
-// AgoraManager.getInstance(context).setLastRoomId("");
- }
- }else if (messageEvent.getMsgType() == 1035) {
- roomFragment.handleAuctionMessageEvent(messageEvent);
- }
-
}
+ private void handleMsgType1022(RoomMessageEvent messageEvent, RoomMessageEvent.T text) {
+ if (text == null || mRoomInfoResp == null || mRoomInfoResp.getRoom_info() == null) return;
+
+ String pitNumber = text.getPit_number();
+ int userId = text.getFromUserInfo().getUser_id();
+ int currentUserId = SpUtil.getUserId();
+
+ if (text.getType() == 1) {
+ if ("888".equals(pitNumber)) {
+ int type = -1;
+ if ("2".equals(mRoomInfoResp.getRoom_info().getType_id())) {
+ type = "1".equals(mRoomInfoResp.getRoom_info().getLabel_id()) ? 1 : 2;
+ }
+ if (userId == currentUserId) {
+ setRoleType(3, 888);
+ switchMic(2);
+ CardRelationshipFragment.show(mRoomInfoResp.getRoom_info().getRoom_id(), currentUserId + "", type + "", getSupportFragmentManager());
+ }
+ }
+ } else if (text.getType() == 2) {
+ if ("9".equals(pitNumber)) {
+ setRoleType(0, 0);
+ switchMic(2);
+ } else if ("888".equals(pitNumber)) {
+ mRoomInfoResp.setRoom_auction(new RoomAuction());
+ if (userId == currentUserId) {
+ setRoleType(0, 0);
+ switchMic(2);
+ }
+ }
+ }
+
+ roomFragment.updateSeatViewExchangedWithPitArray(mRoomInfoResp);
+ roomFragment.handleAuctionMessageEvent(messageEvent);
+ }
+
+ private void handleMsgType1023(RoomMessageEvent messageEvent, RoomMessageEvent.T text) {
+ if (text == null || mRoomInfoResp == null || mRoomInfoResp.getRoom_auction() == null) return;
+
+ mRoomInfoResp.getRoom_auction().setAuction_user(text.getAuction_user());
+ SpUtil.setAuctionId(text.getAuction_user().getAuction_id());
+ roomFragment.updateSeatViewExchangedWithPitArray(mRoomInfoResp);
+ }
+
+ private void handleMsgType1024(RoomMessageEvent messageEvent, RoomMessageEvent.T text) {
+ if (text == null || mRoomInfoResp == null || mRoomInfoResp.getRoom_auction() == null) return;
+
+ mRoomInfoResp.getRoom_auction().getAuction_list().clear();
+ mRoomInfoResp.getRoom_auction().getAuction_list().addAll(text.getAuction_list());
+ roomFragment.updateSeatViewExchangedWithPitArray(mRoomInfoResp);
+ }
+
+ private void handleMsgType1020(RoomMessageEvent messageEvent, RoomMessageEvent.T text) {
+ if (text == null) return;
+
+ mRoomBean = text.getRoomInfo();
+ EventBus.getDefault().post(mRoomBean);
+ changeBackgroundColor(mRoomBean.getRoom_background());
+ }
+
+ private void handleMsgType1011(RoomMessageEvent messageEvent, RoomMessageEvent.T text) {
+ if (text == null || text.getFromUserInfo() == null) return;
+
+ if (text.getFromUserInfo().getUser_id() == SpUtil.getUserId()) {
+ MvpPre.quitRoom(roomId, SpUtil.getUserId() + "");
+ }
+ }
+
+ private void handleMsgType1001() {
+ number++;
+ mBinding.roomTop.tvNum.setText(number + "");
+ }
+
+ private void handleMsgType1002() {
+ number--;
+ mBinding.roomTop.tvNum.setText(number + "");
+ }
+
+ private void handleMsgType1029(RoomMessageEvent messageEvent, RoomMessageEvent.T text) {
+ if (text == null || mRoomInfoResp == null || mRoomInfoResp.getUser_info() == null) return;
+
+ if (mRoomInfoResp.getUser_info().getPit_number() == 9 && mRoomInfoResp.getUser_info().getUser_id().equals(SpUtil.getUserId() + "")) {
+ querenPk(text.getText(), text.getPkId());
+ }
+ }
+
+ private void handleMsgType1021(RoomMessageEvent messageEvent, RoomMessageEvent.T text) {
+ if (mRoomInfoResp == null || mRoomInfoResp.getRoom_info() == null) return;
+
+ String typeId = mRoomInfoResp.getRoom_info().getType_id();
+ if ("2".equals(typeId)) {
+ roomFragment.handleAuctionMessageEvent(messageEvent);
+ } else if ("1".equals(typeId) || "4".equals(typeId) || "3".equals(typeId)) {
+ String labelId = mRoomInfoResp.getRoom_info().getLabel_id();
+ if ("2".equals(labelId)) {
+ roomFragment.KtvFragmentEvent(messageEvent);
+ } else {
+ updateCharmForAllPitBeans("");
+ }
+ } else {
+ updateCharmForAllPitBeans("");
+ }
+
+ roomFragment.updateSeatViewExchangedWithPitArray(mRoomInfoResp);
+ }
+
+ private void updateCharmForAllPitBeans(String charm) {
+ if (mRoomInfoResp == null || mRoomInfoResp.getRoom_info() == null) return;
+
+ List pitList = mRoomInfoResp.getRoom_info().getPit_list();
+ if (pitList == null) return;
+
+ for (RoomPitBean roomPitBean : pitList) {
+ roomPitBean.setCharm(charm);
+ try {
+ pitList.set(Integer.parseInt(roomPitBean.getPit_number()) - 1, roomPitBean);
+ } catch (NumberFormatException e) {
+ // Handle exception
+ }
+ }
+ }
+
+ private void handleMsgType1036(RoomMessageEvent messageEvent, RoomMessageEvent.T text) {
+ if (text == null) return;
+
+ if (text.getRoom_id().equals(roomId)) {
+ String onlineNumber = text.getOnline_number() + "";
+ if (!mBinding.roomTop.tvNum.getText().toString().equals(onlineNumber)) {
+ mBinding.roomTop.tvNum.setText(onlineNumber);
+ }
+ }
+ }
+
+ private void handleMsgType1049(RoomMessageEvent messageEvent, RoomMessageEvent.T text) {
+ if (text == null) return;
+
+ long endTime = text.getEnd_time() != null ? Long.parseLong(text.getEnd_time()) : 0;
+ if (text.getStep() != 3) {
+ roomFragment.updateFriendshipState(text.getStep(), text.getFriend_id(), endTime, null);
+ } else {
+ roomFragment.updateFriendshipState(text.getStep(), text.getFriend_id(), 0, text.getFriend_user());
+ }
+ }
+
+ private void handleMsgType1050(RoomMessageEvent messageEvent, RoomMessageEvent.T text) {
+ if (text == null) return;
+
+ roomFragment.friendTimeDelayWithTime(Long.parseLong(text.getEnd_time()));
+ }
+
+ private void handleMsgType1051(RoomMessageEvent messageEvent, RoomMessageEvent.T text) {
+ if (text == null) return;
+
+ FriendUserBean friend_user = getFriendUserBean(messageEvent);
+ FriendsDialogFragment.show(friend_user, getSupportFragmentManager());
+
+ if (text.getUser1_id().equals(SpUtil.getUserId() + "") || text.getUser2_id().equals(SpUtil.getUserId() + "")) {
+ if (roomSwitchRunnable != null) {
+ roomSwitchHandler.removeCallbacks(roomSwitchRunnable);
+ }
+
+ pendingRoomId = text.getRoom_id();
+
+ roomSwitchRunnable = () -> {
+ if (!isFinishing() && !isDestroyed()) {
+ if (!pendingRoomId.equals(lastSwitchedRoomId)) {
+ MvpPre.quitRoom2(messageEvent.getRoomId(), SpUtil.getUserId() + "");
+ MvpPre.getRoomIn(pendingRoomId, "");
+ lastSwitchedRoomId = pendingRoomId;
+ AgoraManager.getInstance(context).setLastRoomId(messageEvent.getRoomId());
+ }
+ }
+ pendingRoomId = null;
+ };
+
+ roomSwitchHandler.postDelayed(roomSwitchRunnable, 3000);
+ }
+ }
+
+ private void handleMsgType1053(RoomMessageEvent messageEvent, RoomMessageEvent.T text) {
+ if (text == null || text.getList() == null || text.getList().isEmpty()) return;
+
+ List pitArr = new ArrayList<>();
+ for (int j = 0; j < text.getList().size(); j++) {
+ RoomPitBean roomPitBean = getRoomPitBean(messageEvent, j);
+ pitArr.add(roomPitBean);
+ }
+ roomFragment.friendSeatDidChanged(pitArr);
+ pitArr.clear();
+ }
+
+ private void handleMsgType1054(RoomMessageEvent messageEvent, RoomMessageEvent.T text) {
+ if (text == null || text.getList() == null) return;
+
+ List heartList = text.getList().stream()
+ .map(item -> {
+ FriendInfo.HeartList heartList1 = new FriendInfo.HeartList();
+ heartList1.setHeartId(item.getHeartId());
+ heartList1.setHeartNum(item.getHeartNum());
+ return heartList1;
+ })
+ .collect(Collectors.toList());
+
+ roomFragment.friendHeartNumberDidChanged(heartList);
+ }
+
+ private void handleMsgType1055(RoomMessageEvent messageEvent) {
+ if (!isFinishing() && !isDestroyed()) {
+ MvpPre.quitRoom2(messageEvent.getRoomId(), SpUtil.getUserId() + "");
+ jiaR();
+ }
+ }
+
+ private void handleMsgType1035(RoomMessageEvent messageEvent, RoomMessageEvent.T text) {
+ if (text == null || mRoomInfoResp == null || mRoomInfoResp.getRoom_info() == null) return;
+
+ UserInfo fromUserInfo = text.getFromUserInfo();
+ if (fromUserInfo == null) return;
+
+ String typeId = mRoomInfoResp.getRoom_info().getType_id();
+ if ("2".equals(typeId)) {
+ roomFragment.handleAuctionMessageEvent(messageEvent);
+ } else if ("1".equals(typeId) || "3".equals(typeId) || "4".equals(typeId)) {
+ String labelId = mRoomInfoResp.getRoom_info().getLabel_id();
+ if ("2".equals(labelId)) {
+ roomFragment.KtvFragmentEvent(messageEvent);
+ } else {
+ updatePitBeanForUser(fromUserInfo);
+ }
+ } else {
+ updatePitBeanForUser(fromUserInfo);
+ }
+
+ roomFragment.updateSeatViewExchangedWithPitArray(mRoomInfoResp);
+ }
+
+ private void updatePitBeanForUser(UserInfo fromUserInfo) {
+ if (mRoomInfoResp == null || mRoomInfoResp.getRoom_info() == null) return;
+
+ List pitList = mRoomInfoResp.getRoom_info().getPit_list();
+ if (pitList == null) return;
+
+ for (RoomPitBean pitBean : pitList) {
+ if (pitBean.getUser_id().equals(fromUserInfo.getUser_id() + "")) {
+ pitBean.setCharm(fromUserInfo.getCharm());
+ pitBean.setAvatar(fromUserInfo.getAvatar());
+ pitBean.setNickname(fromUserInfo.getNickname());
+ pitBean.setSex(fromUserInfo.getSex() + "");
+ pitBean.setDress(fromUserInfo.getDress());
+ }
+ }
+ }
+
+ private void handleMsgType125(RoomMessageEvent messageEvent, RoomMessageEvent.T text) {
+ if (text == null) return;
+
+ try {
+ RoomMessageEvent.text parsedText = com.blankj.utilcode.util.GsonUtils.fromJson(text.getText(), RoomMessageEvent.text.class);
+ if (parsedText.getIs_mute() == 1) {
+ AgoraManager.getInstance(this).ClientRole(false);
+ AgoraManager.getInstance(this).muteLocalAudioStreamEx(false, SpUtil.getUserId());
+ } else {
+ AgoraManager.getInstance(this).ClientRole(true);
+ AgoraManager.getInstance(this).muteLocalAudioStreamEx(true, SpUtil.getUserId());
+ }
+ } catch (Exception e) {
+ // Handle exception
+ }
+ }
+
+ private void handleMsgType1007() {
+ if (mRoomInfoResp != null && mRoomInfoResp.getUser_info() != null) {
+ mRoomInfoResp.getUser_info().setIs_host(1);
+ roomFragment.updateSeatViewExchangedWithPitArray(mRoomInfoResp);
+ }
+ }
+
+ private void handleMsgType1018() {
+ if (mRoomInfoResp != null && mRoomInfoResp.getUser_info() != null) {
+ mRoomInfoResp.getUser_info().setIs_host(0);
+ roomFragment.updateSeatViewExchangedWithPitArray(mRoomInfoResp);
+ }
+ }
+
+ private void handleMsgType126(RoomMessageEvent messageEvent, RoomMessageEvent.T text) {
+ if (text == null) return;
+
+ AgoraManager.getInstance(this).setLocalAudioEnabled(false, text.getFromUserInfo().getUser_id() + "");
+ }
+
+ private void handleMsgType1034(RoomMessageEvent messageEvent, RoomMessageEvent.T text) {
+ if (text == null) return;
+
+ int count = text.getCount();
+ if (count == 0) {
+ tvFirst(new SpannableStringBuilder("0人排队"));
+ return;
+ }
+
+ String countText = String.valueOf(count);
+ String fullText = countText + "人排队";
+
+ SpannableStringBuilder spannableStringBuilder = new SpannableStringBuilder(fullText);
+ spannableStringBuilder.setSpan(
+ new ForegroundColorSpan(ContextCompat.getColor(this, com.xscm.moduleutil.R.color.colorPrimary)),
+ 0,
+ countText.length(),
+ Spannable.SPAN_EXCLUSIVE_EXCLUSIVE
+ );
+ tvFirst(spannableStringBuilder);
+ }
+
+ private void handleMsgType1016(RoomMessageEvent messageEvent, RoomMessageEvent.T text) {
+ if (text == null || mRoomInfoResp == null || mRoomInfoResp.getUser_info() == null) return;
+
+ if (text.getFromUserInfo().getUser_id() == SpUtil.getUserId()) {
+ if (text.getIs_mute_pit() == 1) {
+ switchMic(2);
+ }
+ mRoomInfoResp.getUser_info().setIs_mute_pit(String.valueOf(text.getIs_mute_pit()));
+ mRoomInfoResp.getUser_info().setIs_mute(String.valueOf(text.getIs_mute()));
+ }
+ }
+
+// public void roomInfoEvent(RoomMessageEvent messageEvent) {
+// if (messageEvent.getMsgType() == 1005) {
+// mBinding.svgaGift.setSource(messageEvent.getText().getGiftInfo().getPlay_image(), 2);
+// for (RoomPitBean roomPitBean : mRoomInfoResp.getRoom_info().getPit_list()) {
+// if (roomPitBean.getUser_id().equals(messageEvent.getText().getToUserInfo().getUser_id() + "")) {
+// roomPitBean.setCharm(messageEvent.getText().getToUserInfo().getCharm());
+// mRoomInfoResp.getRoom_info().getPit_list().set(Integer.parseInt(roomPitBean.getPit_number()) - 1, roomPitBean);
+// }
+// }
+// roomFragment.updateSeatViewExchangedWithPitArray(mRoomInfoResp);
+// if (mRoomInfoResp.getRoom_info().getType_id().equals("2")) {
+// roomFragment.handleAuctionMessageEvent(messageEvent);
+// }else if (mRoomInfoResp.getRoom_info().getType_id().equals("1") || mRoomInfoResp.getRoom_info().getType_id().equals("4") || mRoomInfoResp.getRoom_info().getType_id().equals("3")){
+// if (mRoomInfoResp.getRoom_info().getLabel_id().equals("2")){
+// roomFragment.KtvFragmentEvent(messageEvent);
+// }else if (mRoomInfoResp.getRoom_info().getLabel_id().equals("1")){
+// roomFragment.SingSongEvent(messageEvent);
+// }
+// }
+//
+// } else if (messageEvent.getMsgType() == 123) {
+// EventBus.getDefault().post(new RoomSettingEvent());
+// } else if (messageEvent.getMsgType() == 1014) {
+// RoomSettingEvent roomSettingEvent = new RoomSettingEvent();
+// roomSettingEvent.setRoomId(messageEvent.getRoomId());
+// roomSettingEvent.setRoom_up_pit_type(messageEvent.getText().getRoom_up_pit_type());
+// roomSettingEvent.setType(messageEvent.getMsgType());
+// mRoomBean.setRoom_up_pit_type(messageEvent.getText().getRoom_up_pit_type() + "");
+//
+// EventBus.getDefault().post(mRoomBean);
+// EventBus.getDefault().post(roomSettingEvent);
+// } else if (messageEvent.getMsgType() == 1013) {///点歌/切歌/同意点歌
+// int userid = messageEvent.getText().getFromUserInfo().getUser_id();
+// int userId2 = SpUtil.getUserId();
+//
+// if (messageEvent.getText().getAction() == 1 && mRoomUserBean.getUser_id().equals(userId2 + "") && mRoomUserBean.getPit_number() == 9) {
+// queren(messageEvent.getText().getFromUserInfo().getNickname());
+// } else if (messageEvent.getText().getAction() == 4 && userid == userId2) {
+// queren1(messageEvent.getText().getFromUserInfo().getNickname());
+// } else {
+// roomFragment.KtvFragmentEvent(messageEvent);
+// }
+// } else if (messageEvent.getMsgType() == 1012) {//房间类型发生变化
+// if (customMusicFloatingView != null) {
+// customMusicFloatingView.destroy();
+// }
+// AgoraManager.getInstance(RoomActivity.this).desMusic();
+// stub.setVisibility(View.GONE);
+// MvpPre.postRoomInfo(roomId);
+// } else if (messageEvent.getMsgType() == 124) {
+// RoomMessageEvent.text text = GsonUtils.fromJson(messageEvent.getText().getText(), RoomMessageEvent.text.class);
+// MusicPlayBean musicPlayBean = new MusicPlayBean();
+// musicPlayBean.setPosition(text.getPosition());
+// EventBus.getDefault().post(musicPlayBean);
+// } else if (messageEvent.getMsgType() == 1003) {//上麦操作
+// if (messageEvent.getText().getPit_number().equals("9") && messageEvent.getText().getFromUserInfo().getUser_id() == SpUtil.getUserId()) {
+// mBinding.roomTop.rl.setVisibility(View.VISIBLE);
+// }
+// if (messageEvent.getText().getFromUserInfo().getUser_id() == SpUtil.getUserId()) {
+// aBoolean = false;
+// ivWheatFeeding(com.xscm.moduleutil.R.mipmap.room_wheat_feeding_up);
+// setBoolean(aBoolean);
+// mRoomInfoResp.getUser_info().setPit_number(messageEvent.getText().getPit_number() != null ? Integer.parseInt(messageEvent.getText().getPit_number()) : 0);
+// setRoleType(3, Integer.parseInt(messageEvent.getText().getPit_number()));
+// switchMic(2);
+// }
+//
+// if (mRoomInfoResp.getRoom_info().getType_id().equals("2")) {///拍卖房上麦操作
+//
+// if (messageEvent.getText().getPit_number().equals("9")) {
+// mRoomInfoResp.getRoom_info().getPit_list().set(0, getPitBean(messageEvent));
+// mRoomInfoResp.getUser_info().setPit_number(Integer.parseInt(messageEvent.getText().getPit_number()));
+//
+// }
+// } else if (mRoomInfoResp.getRoom_info().getType_id().equals("3") || mRoomInfoResp.getRoom_info().getType_id().equals("4") || mRoomInfoResp.getRoom_info().getType_id().equals("1")) {
+// if (mRoomInfoResp.getRoom_info().getLabel_id().equals("2")) {
+// roomFragment.KtvFragmentEvent(messageEvent);
+// }else if (mRoomInfoResp.getRoom_info().getLabel_id().equals("1")) {
+// roomFragment.SingSongEvent(messageEvent);
+// }
+// } else if (mRoomInfoResp.getRoom_info().getType_id().equals("7")) {
+// RoomPitBean pitBean = mRoomInfoResp.getRoom_info().getPit_list().get(Integer.parseInt(messageEvent.getText().getPit_number()) - 1);
+// pitBean.setUser_id(messageEvent.getText().getFromUserInfo().getUser_id() + "");
+// pitBean.setAvatar(messageEvent.getText().getFromUserInfo().getAvatar());
+// pitBean.setNickname(messageEvent.getText().getFromUserInfo().getNickname());
+// pitBean.setSex(messageEvent.getText().getFromUserInfo().getSex() + "");
+// pitBean.setCharm(messageEvent.getText().getFromUserInfo().getCharm());
+// pitBean.setDress(messageEvent.getText().getFromUserInfo().getDress());
+// mRoomInfoResp.getRoom_info().getPit_list().set(Integer.parseInt(messageEvent.getText().getPit_number()) - 1, pitBean);
+// roomFragment.updateSeatViewExchangedWithPitArray(mRoomInfoResp);
+// }else {
+// roomFragment.updateSeatViewExchangedWithPitArray(mRoomInfoResp);
+// }
+//
+// } else if (messageEvent.getMsgType() == 1004) {//下麦操作
+//
+// if (messageEvent.getText().getFromUserInfo().getUser_id() == SpUtil.getUserId()) {
+//// mBinding.ivWheatFeeding.setImageResource(com.xscm.moduleutil.R.mipmap.room_wheat_feeding);
+// aBoolean = true;
+// ivWheatFeeding(com.xscm.moduleutil.R.mipmap.room_wheat_feeding);
+// setBoolean(aBoolean);
+// mRoomInfoResp.getUser_info().setPit_number(0);
+// setRoleType(0, 0);
+// switchMic(2);
+// }
+//
+// if (messageEvent.getText().getFromUserInfo().getUser_id() == SpUtil.getUserId() && messageEvent.getText().getPit_number().equals("9")) {
+// if (customMusicFloatingView != null) {
+// customMusicFloatingView.destroy();
+// AgoraManager.getInstance(RoomActivity.this).desMusic();
+// isMusic = false;
+// mBinding.roomTop.rl.setVisibility(GONE);
+// }
+// }
+// if (mRoomInfoResp.getRoom_info().getType_id().equals("2")) {
+// if (messageEvent.getText().getPit_number().equals("9")) {
+// if (messageEvent.getText().getFromUserInfo().getUser_id() == SpUtil.getUserId()) {
+// mRoomInfoResp.getRoom_info().getPit_list().set(0, getPitBean2(messageEvent, "9"));
+// mRoomInfoResp.getUser_info().setPit_number(0);
+// }
+// } else if (messageEvent.getText().getPit_number().equals("888")) {
+// mRoomInfoResp.setRoom_auction(null);
+// if (messageEvent.getText().getFromUserInfo().getUser_id() == SpUtil.getUserId()) {
+// setRoleType(0, 0);
+// switchMic(2);
+// }
+// }
+// roomFragment.updateSeatViewExchangedWithPitArray(mRoomInfoResp);
+// } else if (mRoomInfoResp.getRoom_info().getType_id().equals("3") || mRoomInfoResp.getRoom_info().getType_id().equals("4") || mRoomInfoResp.getRoom_info().getType_id().equals("1")) {
+// if (mRoomInfoResp.getRoom_info().getLabel_id().equals("2")) {
+// roomFragment.KtvFragmentEvent(messageEvent);
+// }else if (mRoomInfoResp.getRoom_info().getLabel_id().equals("1")) {
+// roomFragment.SingSongEvent(messageEvent);
+// }
+// } else {
+//
+// RoomPitBean pitBean = mRoomInfoResp.getRoom_info().getPit_list().get(Integer.parseInt(messageEvent.getText().getPit_number()) - 1);
+// pitBean.setUser_id("");
+// pitBean.setAvatar("");
+// pitBean.setNickname("");
+// pitBean.setSex("");
+// pitBean.setCharm("");
+// pitBean.setDress("");
+// mRoomInfoResp.getRoom_info().getPit_list().set(Integer.parseInt(messageEvent.getText().getPit_number()) - 1, pitBean);
+// roomFragment.updateSeatViewExchangedWithPitArray(mRoomInfoResp);
+// }
+//
+//
+//
+// } else if (messageEvent.getMsgType() == 1022) {
+// if (messageEvent.getText().getType() == 1) {//拍卖位上麦
+// if (messageEvent.getText().getPit_number().equals("888")) {
+// int type = -1; // 或其他默认值
+// if (mRoomInfoResp.getRoom_info().getType_id().equals("2")) {
+// type = (mRoomInfoResp.getRoom_info().getLabel_id().equals("1")) ? 1 : 2;
+// }
+// if (messageEvent.getText().getFromUserInfo().getUser_id() == SpUtil.getUserId()) {
+// setRoleType(3, 888);
+// switchMic(2);
+// CardRelationshipFragment.show(mRoomInfoResp.getRoom_info().getRoom_id(), SpUtil.getUserId() + "", type + "", getSupportFragmentManager());
+// }
+// }
+// } else if (messageEvent.getText().getType() == 2) {//拍卖位下麦
+// if (messageEvent.getText().getPit_number().equals("9")) {
+// setRoleType(0, 0);
+// switchMic(2);
+// } else if (messageEvent.getText().getPit_number().equals("888")) {
+// mRoomInfoResp.setRoom_auction(new RoomAuction());
+// if (messageEvent.getText().getFromUserInfo().getUser_id() == SpUtil.getUserId()) {
+// setRoleType(0, 0);
+// switchMic(2);
+// }
+// }
+// }
+// roomFragment.updateSeatViewExchangedWithPitArray(mRoomInfoResp);
+// roomFragment.handleAuctionMessageEvent(messageEvent);
+// } else if (messageEvent.getMsgType() == 1023) {
+// mRoomInfoResp.getRoom_auction().setAuction_user(messageEvent.getText().getAuction_user());
+// SpUtil.setAuctionId(messageEvent.getText().getAuction_user().getAuction_id());
+// roomFragment.updateSeatViewExchangedWithPitArray(mRoomInfoResp);
+// } else if (messageEvent.getMsgType() == 1024) {//竞拍,拍卖列表变化
+// mRoomInfoResp.getRoom_auction().getAuction_list().clear();
+// mRoomInfoResp.getRoom_auction().getAuction_list().addAll(messageEvent.getText().getAuction_list());
+// roomFragment.updateSeatViewExchangedWithPitArray(mRoomInfoResp);
+// } else if (messageEvent.getMsgType() == 1025) {//结束
+// roomFragment.handleAuctionMessageEvent(messageEvent);
+// } else if (messageEvent.getMsgType() == 1026) {//主持延迟
+// roomFragment.handleAuctionMessageEvent(messageEvent);
+// } else if (messageEvent.getMsgType() == 1027) {//拍卖类型变化
+//// mRoomInfoResp.getRoom_info().setLabel_id(messageEvent.getText().getText()+"");
+//// roomFragment.updateSeatViewExchangedWithPitArray(mRoomInfoResp);
+// roomFragment.handleAuctionMessageEvent(messageEvent);
+// } else if (messageEvent.getMsgType() == 1020) {
+// mRoomBean = messageEvent.getText().getRoomInfo();
+// EventBus.getDefault().post(mRoomBean);
+// changeBackgroundColor(mRoomBean.getRoom_background());
+// } else if (messageEvent.getMsgType() == 1011) {
+// if (messageEvent.getText().getFromUserInfo() != null) {
+// if (messageEvent.getText().getFromUserInfo().getUser_id() == SpUtil.getUserId()) {
+// MvpPre.quitRoom(roomId, SpUtil.getUserId() + "");
+// }
+// }
+// } else if (messageEvent.getMsgType() == 1001) {
+// number++;
+// mBinding.roomTop.tvNum.setText(number + "");
+// } else if (messageEvent.getMsgType() == 1002) {
+// number--;
+// mBinding.roomTop.tvNum.setText(number + "");
+// } else if (messageEvent.getMsgType() == 1029) {
+// if (mRoomInfoResp.getUser_info().getPit_number() == 9 && mRoomInfoResp.getUser_info().getUser_id().equals(SpUtil.getUserId() + "")) {
+// querenPk(messageEvent.getText().getText(), messageEvent.getText().getPkId());
+// }
+// } else if (messageEvent.getMsgType() == 1021) {//清除魅力值
+//// EventBus.getDefault().post(new RoomClearCardiacRunnable(messageEvent.getRoomId()));
+// if (mRoomInfoResp.getRoom_info().getType_id().equals("2")) {
+// roomFragment.handleAuctionMessageEvent(messageEvent);
+// }else if (mRoomInfoResp.getRoom_info().getType_id().equals("1") || mRoomInfoResp.getRoom_info().getType_id().equals("4") || mRoomInfoResp.getRoom_info().getType_id().equals("3")){
+// if (mRoomInfoResp.getRoom_info().getLabel_id().equals("2")){
+// roomFragment.KtvFragmentEvent(messageEvent);
+// }else {
+// for (RoomPitBean roomPitBean : mRoomInfoResp.getRoom_info().getPit_list()) {
+// roomPitBean.setCharm("");
+// mRoomInfoResp.getRoom_info().getPit_list().set(Integer.parseInt(roomPitBean.getPit_number()) - 1, roomPitBean);
+// }
+// roomFragment.updateSeatViewExchangedWithPitArray(mRoomInfoResp);
+// }
+// }
+// else {
+// for (RoomPitBean roomPitBean : mRoomInfoResp.getRoom_info().getPit_list()) {
+// roomPitBean.setCharm("");
+// mRoomInfoResp.getRoom_info().getPit_list().set(Integer.parseInt(roomPitBean.getPit_number()) - 1, roomPitBean);
+// }
+// roomFragment.updateSeatViewExchangedWithPitArray(mRoomInfoResp);
+// }
+// } else if (messageEvent.getMsgType() == 1036) {
+// if (messageEvent.getText().getRoom_id().equals(roomId)) {
+// if (!mBinding.roomTop.tvNum.getText().toString().equals(messageEvent.getText().getOnline_number() + "")) {
+// mBinding.roomTop.tvNum.setText(messageEvent.getText().getOnline_number() + "");
+// }
+// }
+// } else if (messageEvent.getMsgType() == 1049) {//交友房阶段发生变化
+// if (messageEvent.getText().getStep() != 3) {
+// if (messageEvent.getText().getEnd_time() != null) {
+// roomFragment.updateFriendshipState(messageEvent.getText().getStep(), messageEvent.getText().getFriend_id(), Long.parseLong(messageEvent.getText().getEnd_time()), null);
+// } else {
+// roomFragment.updateFriendshipState(messageEvent.getText().getStep(), messageEvent.getText().getFriend_id(), 0, null);
+// }
+// } else {
+// roomFragment.updateFriendshipState(messageEvent.getText().getStep(), messageEvent.getText().getFriend_id(), 0, messageEvent.getText().getFriend_user());
+// }
+// } else if (messageEvent.getMsgType() == 1050) {//交友=房间时间发生延时
+// roomFragment.friendTimeDelayWithTime(Long.parseLong(messageEvent.getText().getEnd_time()));
+// } else if (messageEvent.getMsgType() == 1051) {
+// FriendUserBean friend_user = getFriendUserBean(messageEvent);
+// FriendsDialogFragment.show(friend_user, getSupportFragmentManager());
+//
+//
+// if (messageEvent.getText().getUser1_id().equals(SpUtil.getUserId() + "") ||
+// messageEvent.getText().getUser2_id().equals(SpUtil.getUserId() + "")) {
+//
+// // 取消之前的延迟任务
+// if (roomSwitchRunnable != null) {
+// roomSwitchHandler.removeCallbacks(roomSwitchRunnable);
+// }
+//
+// // 保存新的房间ID
+// pendingRoomId = messageEvent.getText().getRoom_id();
+//
+// // 创建新的延迟任务
+// roomSwitchRunnable = new Runnable() {
+// @Override
+// public void run() {
+// // 确保 Activity 仍然有效
+// if (!isFinishing() && !isDestroyed()) {
+// // 防止重复切换到同一个房间
+// if (!pendingRoomId.equals(lastSwitchedRoomId)) {
+// MvpPre.quitRoom2(messageEvent.getRoomId(), SpUtil.getUserId() + "");
+// MvpPre.getRoomIn(pendingRoomId, "");
+// lastSwitchedRoomId = pendingRoomId;
+// AgoraManager.getInstance(context).setLastRoomId(messageEvent.getRoomId());
+// }
+// }
+// pendingRoomId = null;
+// }
+// };
+//
+// // 延迟3秒执行
+// roomSwitchHandler.postDelayed(roomSwitchRunnable, 3000);
+// }
+//
+// } else if (messageEvent.getMsgType() == 1052) {
+// roomFragment.upCabinFragment(messageEvent.getText().getTime_day());
+//
+// } else if (messageEvent.getMsgType() == 1053) {//交友=麦位发生改变
+// if (messageEvent.getText().getList() != null && !messageEvent.getText().getList().isEmpty()) {
+// List pitArr = new ArrayList<>();
+// for (int j = 0; j < messageEvent.getText().getList().size(); j++) {
+// RoomPitBean roomPitBean = getRoomPitBean(messageEvent, j);
+// pitArr.add(roomPitBean);
+// }
+// roomFragment.friendSeatDidChanged(pitArr);
+// pitArr.clear();
+// }
+// } else if (messageEvent.getMsgType() == 1054) {//交友心动值发生变化
+//
+// // 方式2:直接传递,依赖垃圾回收
+// roomFragment.friendHeartNumberDidChanged(
+// messageEvent.getText().getList().stream()
+// .map(item -> {
+// FriendInfo.HeartList heartList1 = new FriendInfo.HeartList();
+// heartList1.setHeartId(item.getHeartId());
+// heartList1.setHeartNum(item.getHeartNum());
+// return heartList1;
+// })
+// .collect(Collectors.toList())
+// );
+// } else if (messageEvent.getMsgType() == 1055) {
+// if (!isFinishing() && !isDestroyed()) {
+// // 防止重复切换到同一个房间
+// MvpPre.quitRoom2(messageEvent.getRoomId(), SpUtil.getUserId() + "");
+// jiaR();
+//// MvpPre.getRoomIn(AgoraManager.getInstance(context).getLastRoomId(), "");
+//// AgoraManager.getInstance(context).setLastRoomId("");
+// }
+// } else if (messageEvent.getMsgType() == 1035) {
+// if (mRoomInfoResp.getRoom_info().getType_id().equals("2")) {
+// roomFragment.handleAuctionMessageEvent(messageEvent);
+// }else if (mRoomInfoResp.getRoom_info().getType_id().equals("1") || mRoomInfoResp.getRoom_info().getType_id().equals("3") || mRoomInfoResp.getRoom_info().getType_id().equals("4")){
+// if (mRoomInfoResp.getRoom_info().getLabel_id().equals("2")){
+// roomFragment.KtvFragmentEvent(messageEvent);
+// }else {
+// for (RoomPitBean pitBean : mRoomInfoResp.getRoom_info().getPit_list()) {
+// if (pitBean.getUser_id().equals(messageEvent.getText().getFromUserInfo().getUser_id() + "")) {
+// pitBean.setCharm(messageEvent.getText().getFromUserInfo().getCharm());
+// pitBean.setAvatar(messageEvent.getText().getFromUserInfo().getAvatar());
+// pitBean.setNickname(messageEvent.getText().getFromUserInfo().getNickname());
+// pitBean.setSex(messageEvent.getText().getFromUserInfo().getSex() + "");
+// pitBean.setDress(messageEvent.getText().getFromUserInfo().getDress());
+// }
+// }
+// }
+// }else {
+// for (RoomPitBean pitBean : mRoomInfoResp.getRoom_info().getPit_list()) {
+// if (pitBean.getUser_id().equals(messageEvent.getText().getFromUserInfo().getUser_id() + "")) {
+// pitBean.setCharm(messageEvent.getText().getFromUserInfo().getCharm());
+// pitBean.setAvatar(messageEvent.getText().getFromUserInfo().getAvatar());
+// pitBean.setNickname(messageEvent.getText().getFromUserInfo().getNickname());
+// pitBean.setSex(messageEvent.getText().getFromUserInfo().getSex() + "");
+// pitBean.setDress(messageEvent.getText().getFromUserInfo().getDress());
+// }
+// }
+// }
+// roomFragment.updateSeatViewExchangedWithPitArray(mRoomInfoResp);
+// }else if (messageEvent.getMsgType()==1030){
+// roomFragment.SingSongEvent(messageEvent);
+// }else if (messageEvent.getMsgType()==1031){
+// roomFragment.SingSongEvent(messageEvent);
+// }else if (messageEvent.getMsgType()==1032){
+// roomFragment.SingSongEvent(messageEvent);
+// setRoleType(3, -11);
+// }else if (messageEvent.getMsgType()==1033){
+// roomFragment.SingSongEvent(messageEvent);
+// setRoleType(3, -11);
+// }else if (messageEvent.getMsgType()==1015){
+// roomFragment.SingSongEvent(messageEvent);
+// }else if (messageEvent.getMsgType()==125){///关闭对方麦克风
+// RoomMessageEvent.text text = com.blankj.utilcode.util.GsonUtils.fromJson(messageEvent.getText().getText(), RoomMessageEvent.text.class);
+// if (text.getIs_mute() == 1) {
+// AgoraManager.getInstance(this).ClientRole(false);
+// AgoraManager.getInstance(this).muteLocalAudioStreamEx(false, SpUtil.getUserId());
+// } else {
+// AgoraManager.getInstance(this).ClientRole(true);
+// AgoraManager.getInstance(this).muteLocalAudioStreamEx(true, SpUtil.getUserId());
+//
+// }
+// }else if (messageEvent.getMsgType()==1007){
+// mRoomInfoResp.getUser_info().setIs_host(1);
+// roomFragment.updateSeatViewExchangedWithPitArray(mRoomInfoResp);
+// } else if (messageEvent.getMsgType() == 1018) {
+// mRoomInfoResp.getUser_info().setIs_host(0);
+// roomFragment.updateSeatViewExchangedWithPitArray(mRoomInfoResp);
+// }else if (messageEvent.getMsgType() == 126) {
+// AgoraManager.getInstance(this).setLocalAudioEnabled(false, messageEvent.getText().getFromUserInfo().getUser_id() + "");
+// }else if (messageEvent.getMsgType()==1037){
+// roomFragment.SingSongEvent(messageEvent);
+// }else if (messageEvent.getMsgType() == 1034) {
+// int count = messageEvent.getText().getCount();
+// if (count == 0) {
+// tvFirst(new SpannableStringBuilder("0人排队"));
+// return;
+// }
+// String countText = String.valueOf(count);
+// String fullText = countText + "人排队";
+//
+// SpannableStringBuilder spannableStringBuilder = new SpannableStringBuilder(fullText);
+// spannableStringBuilder.setSpan(
+// new ForegroundColorSpan(ContextCompat.getColor(this, com.xscm.moduleutil.R.color.colorPrimary)), // 设置颜色为红色
+// 0, // 起始位置
+// countText.length(), // 结束位置
+// Spannable.SPAN_EXCLUSIVE_EXCLUSIVE
+// );
+// tvFirst(spannableStringBuilder);
+// } else if (messageEvent.getMsgType() == 1016) {
+// if (messageEvent.getText().getFromUserInfo().getUser_id() == SpUtil.getUserId()) {
+// if (messageEvent.getText().getIs_mute_pit() == 1) {
+// switchMic(2);
+// }
+// mRoomInfoResp.getUser_info().setIs_mute_pit(String.valueOf(messageEvent.getText().getIs_mute_pit()));
+// mRoomInfoResp.getUser_info().setIs_mute(String.valueOf(messageEvent.getText().getIs_mute()));
+// }
+// }
+//
+// }
+
// TODO: 2025/6/30 上麦,麦位变化
private RoomPitBean getPitBean(RoomMessageEvent messageEvent) {
RoomPitBean pitBean = new RoomPitBean();
@@ -1419,16 +2197,23 @@ public class RoomActivity extends BaseMvpActivity {
if (wheatView.getUserId().equals(SpUtil.getUserId() + "")) {
@@ -451,7 +460,16 @@ public class RoomAuctionFragment extends BaseMvpFragment {
- steView(newType);
+// steView(newType);
+// // 根据新的type更新TextView样式
+// int defaultColor = ContextCompat.getColor(requireContext(), com.xscm.moduleutil.R.color.color_0DFFB9); // 绿色
+// int selectedColor = ContextCompat.getColor(requireContext(), com.xscm.moduleutil.R.color.color_white); // 白色
+// int clickedColor = ContextCompat.getColor(requireContext(), com.xscm.moduleutil.R.color.color_BB8BE2); // 蓝色
+// float defaultSize = 16f;
+// float selectedSize = 24f;
+//
+// toggleTextStyles(mBinding.qinmi, mBinding.zhenai, defaultColor, selectedColor, clickedColor, defaultSize, selectedSize, type);
+
// 点击“确认”按钮时执行
MvpPre.auctionMode(roomInfoResp.getRoom_info().getRoom_id(), newType == 1 ? "1" : "2");
},
@@ -851,8 +869,17 @@ public class RoomAuctionFragment extends BaseMvpFragment {
if (mRoomInfoResp != null && mRoomInfoResp.getRoom_info() != null) {
String typeId = mRoomInfoResp.getRoom_info().getType_id();
+ String labelId = mRoomInfoResp.getRoom_info().getLabel_id();
if ("7".equals(typeId)) {
// 保持 tag 使用一致性
@@ -278,13 +279,26 @@ public class RoomFragment extends BaseMvpFragment 0) {
+ adapter.setNewData(roomInfoResp.getSong_pit_list());
for (RoomPitBean roomPitBean : roomInfoResp.getSong_pit_list()) {
if (roomPitBean.getUser_id().equals(SpUtil.getUserId() + "")) {
-// if (parentFragment != null) {
-// parentFragment.setRoleType(3, Integer.parseInt(roomPitBean.getPit_number() != null ? roomPitBean.getPit_number() : "99"));
-// parentFragment.switchMic(2);
-// }
if (getActivity() instanceof RoomActivity) {
((RoomActivity) getActivity()).setRoleType(3, Integer.parseInt(roomPitBean.getPit_number() != null ? roomPitBean.getPit_number() : "99"));
@@ -233,6 +192,34 @@ public class RoomKtvFragment extends BaseMvpFragment 0) {
- adapter.setNewData(roomInfoResp.getSong_pit_list());
- }
+
AgoraManager.getInstance(getActivity()).selectAudioTrack(1);
isRotate = true;
@@ -481,6 +466,9 @@ public class RoomKtvFragment extends BaseMvpFragment pitList ;
- public static SingSongFragment newInstance(RoomInfoResp roomInfo) {
+ public static SingSongFragment newInstance() {
Bundle args = new Bundle();
- args.putSerializable("roomInfo", roomInfo);
SingSongFragment fragment = new SingSongFragment();
fragment.setArguments(args);
return fragment;
@@ -112,10 +113,11 @@ public class SingSongFragment extends BaseRoomFragment();
if (getActivity() instanceof RoomActivity) {
((RoomActivity) getActivity()).setvisibTop(true);
@@ -130,26 +136,15 @@ public class SingSongFragment extends BaseRoomFragment pitList = new ArrayList<>();
-// for (int i = 1; i <= 10; i++) {
-// RoomPitBean pitBean = new RoomPitBean();
-// pitBean.setPit_number("" + i);
-// pitBean.setUser_id("0");
-// pitBean.setCharm("");
-// pitList.add(pitBean);
-// }
-// wheatLayoutSingManager.setWheatData(pitList);
-// initWheatLayout();
if (!ObjectUtils.isEmpty(roomInfoResp.getRoom_info().getPit_list()) && roomInfoResp.getRoom_info().getPit_list().size() == 10) {
wheatLayoutSingManager.setWheatData(roomInfoResp.getRoom_info().getPit_list());
@@ -384,7 +369,7 @@ public class SingSongFragment extends BaseRoomFragment list = new ArrayList<>();
list.add(roomInfoResp.getRoom_info().getPit_list().get(i).getEmchat_username());
- quxiao(list);
break;
}
}
@@ -542,13 +534,12 @@ public class SingSongFragment extends BaseRoomFragment userIds) {
- }
@Override
public void roomInfoUpdate(RoomInfoResp resp) {
roomInfoResp = resp;
+ roomId = roomInfoResp == null ? "" : roomInfoResp.getRoom_info().getRoom_id();
+ isWhether();
updateWheatData();
}
@@ -576,21 +567,7 @@ public class SingSongFragment extends BaseRoomFragment
diff --git a/moduleroom/src/main/res/layout/fragment_room_auction.xml b/moduleroom/src/main/res/layout/fragment_room_auction.xml
index b42928f..7e39873 100644
--- a/moduleroom/src/main/res/layout/fragment_room_auction.xml
+++ b/moduleroom/src/main/res/layout/fragment_room_auction.xml
@@ -70,7 +70,6 @@
android:layout_centerInParent="true"
android:layout_marginTop="@dimen/dp_31"
android:fontFamily="@font/youshebiaotihei"
- android:text="亲密拍"
android:textColor="@color/color_0DFFB9"
android:textSize="@dimen/sp_24" />
@@ -80,9 +79,8 @@
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:layout_marginStart="@dimen/dp_40"
- android:layout_toRightOf="@+id/qinmi"
+ android:layout_toEndOf="@+id/qinmi"
android:fontFamily="@font/youshebiaotihei"
- android:text="真爱拍"
android:textColor="@color/white"
android:textSize="@dimen/sp_16" />
@@ -493,13 +491,14 @@
-
+
+
+
+
+
+
+
+
diff --git a/moduleroom/src/main/res/layout/fragment_room_ktv.xml b/moduleroom/src/main/res/layout/fragment_room_ktv.xml
index e068f5a..153440f 100644
--- a/moduleroom/src/main/res/layout/fragment_room_ktv.xml
+++ b/moduleroom/src/main/res/layout/fragment_room_ktv.xml
@@ -320,9 +320,13 @@
app:layout_constraintDimensionRatio="1:1"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent"
- android:clickable="true"
app:layout_constraintStart_toEndOf="@+id/cl_bj"
- app:room_wheat_number="9" />
+ android:translationZ="10dp"
+ app:room_wheat_number="9"
+ android:elevation="10dp"
+ android:clickable="true"
+ android:focusable="true"
+ android:foreground="?android:attr/selectableItemBackground"/>
-
+
+
+
+
+
+
+