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"/> - + + + + + + +