diff --git a/BaseModule/src/main/java/com/xscm/moduleutil/activity/BaseAppCompatActivity.java b/BaseModule/src/main/java/com/xscm/moduleutil/activity/BaseAppCompatActivity.java index e5344ec9..d64171a3 100644 --- a/BaseModule/src/main/java/com/xscm/moduleutil/activity/BaseAppCompatActivity.java +++ b/BaseModule/src/main/java/com/xscm/moduleutil/activity/BaseAppCompatActivity.java @@ -256,13 +256,14 @@ public abstract class BaseAppCompatActivity extends @Override public void finish() { - EventBus.getDefault().unregister(this); + super.finish(); LogUtils.e(this.getComponentName()+"========finish"); } @Override protected void onDestroy() { + EventBus.getDefault().unregister(this); // 移除背景更新监听器 BackgroundManager.getInstance().removeListener(this); // 移除颜色变化监听器 diff --git a/BaseModule/src/main/java/com/xscm/moduleutil/rtc/AgoraManager.java b/BaseModule/src/main/java/com/xscm/moduleutil/rtc/AgoraManager.java index 49c91594..bade8cb6 100644 --- a/BaseModule/src/main/java/com/xscm/moduleutil/rtc/AgoraManager.java +++ b/BaseModule/src/main/java/com/xscm/moduleutil/rtc/AgoraManager.java @@ -18,6 +18,7 @@ import android.content.Context; import android.media.projection.MediaProjection; import android.os.Handler; import android.os.Looper; +import android.os.SystemClock; import android.util.DisplayMetrics; import android.util.Log; import android.view.Display; @@ -54,7 +55,9 @@ import java.io.FileInputStream; import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.Arrays; +import java.util.HashMap; import java.util.List; +import java.util.Map; import java.util.concurrent.CopyOnWriteArrayList; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; @@ -120,6 +123,14 @@ public class AgoraManager { private Disposable disposableB; private Disposable disposableC; + // UI 刷新最小间隔(ms) + private static final long SOUND_UI_INTERVAL = 200; + + private final Handler uiHandler = new Handler(Looper.getMainLooper()); + private long lastDispatchTime = 0; + + // 缓存本次声网回调的音量结果 + private final Map volumeCache = new HashMap<>(); public void setLastRoomId(String value) { lastRoomId = value; } @@ -549,22 +560,33 @@ public class AgoraManager { if (speakers == null || speakers.length == 0) return; - for (final AudioVolumeInfo info : speakers) { - final int uid = info.uid; - final int volume = info.volume; + // 1️⃣ 构建局部 Map(声网线程私有) + Map localMap = new HashMap<>(); + for (AudioVolumeInfo info : speakers) { + String userId = info.uid > 0 + ? String.valueOf(info.uid) + : String.valueOf(SpUtil.getUserId()); + localMap.put(userId, info.volume); + } - // 回调所有监听器 + long now = SystemClock.uptimeMillis(); + if (now - lastDispatchTime < SOUND_UI_INTERVAL) return; + lastDispatchTime = now; + + // 2️⃣ 只把“不可变快照”丢给 UI + uiHandler.post(() -> dispatchVolume(localMap)); + } + private void dispatchVolume(Map volumeSnapshot) { + if (soundLevelUpdateListeners.isEmpty()) return; + + for (Map.Entry entry : volumeSnapshot.entrySet()) { for (SoundLevelUpdateListener listener : soundLevelUpdateListeners) { if (listener != null) { - ThreadUtils.runOnUiThread(() -> { - // 远程用户音量变化 - listener.onRemoteSoundLevelUpdate(uid > 0 ? String.valueOf(uid) : SpUtil.getUserId() + "", volume); - }); + listener.onRemoteSoundLevelUpdate(entry.getKey(), entry.getValue()); } } } } - @Override public void onLocalVideoStateChanged(Constants.VideoSourceType source, int state, int reason) { super.onLocalVideoStateChanged(source, state, reason); diff --git a/BaseModule/src/main/java/com/xscm/moduleutil/widget/BaseWheatView.java b/BaseModule/src/main/java/com/xscm/moduleutil/widget/BaseWheatView.java index 051ee579..df598e91 100644 --- a/BaseModule/src/main/java/com/xscm/moduleutil/widget/BaseWheatView.java +++ b/BaseModule/src/main/java/com/xscm/moduleutil/widget/BaseWheatView.java @@ -262,99 +262,16 @@ public abstract class BaseWheatView extends ConstraintLayout implements IBaseWhe AgoraManager.getInstance().addSoundLevelListener(new SoundLevelUpdateListener() { @Override public void onRemoteSoundLevelUpdate(String userId, int soundLevel) { - if (mIvRipple == null) - return; + if (mIvRipple == null) return; + if (!userId.equals(pitBean.getUser_id())) return; - if (userId.equals(pitBean.getUser_id())) { - if (soundLevel == 0) { - mIvRipple.pauseAnimation(); - CommonAppContext.getInstance().onlineMap.put(pitBean.getUser_id(), 1); - mIvRipple.setVisibility(INVISIBLE); - } else { - mIvRipple.setVisibility(VISIBLE); - mIvRipple.post(() -> { - if (!mIvRipple.isAnimating()) { - if (pitBean.getMic_cycle() != null && !pitBean.getMic_cycle().isEmpty()) { - if (mParser != null) { - mIvRipple.startAnimation(); - } else { - mParser = new SVGAParser(getContext()); - try { - mParser.decodeFromURL(new URL(pitBean.getMic_cycle()), new SVGAParser.ParseCompletion() { - - @Override - public void onError() { - - } - - @Override - public void onComplete(@NotNull SVGAVideoEntity svgaVideoEntity) { - if (mIvRipple == null) - return; - SVGADrawable drawable = new SVGADrawable(svgaVideoEntity); - mIvRipple.setImageDrawable(drawable); - mIvRipple.startAnimation(); - } - }); - } catch (MalformedURLException e) { - throw new RuntimeException(e); - } - } - } else { - - mIvRipple.startAnimation(); - } - CommonAppContext.getInstance().onlineMap.put(pitBean.getUser_id(), 1); - iv_on_line.setVisibility(GONE); - } - }); - } - } + boolean nowSpeaking = soundLevel > 0; + updateSpeakingState(nowSpeaking); } @Override public void onLocalSoundLevelUpdate(int volume) { - if (mIvRipple == null) - return; - if (volume == 0) { - mIvRipple.setVisibility(GONE); - } else { - mIvRipple.setVisibility(VISIBLE); - if (!mIvRipple.isAnimating()) { - if (pitBean.getMic_cycle()!=null && !pitBean.getMic_cycle().isEmpty()) { - if (mParser != null) { - mIvRipple.startAnimation(); - } else { - mParser = new SVGAParser(getContext()); - try { - mParser.decodeFromURL(new URL(pitBean.getMic_cycle()), new SVGAParser.ParseCompletion() { - @Override - public void onError() { - - } - - @Override - public void onComplete(@NotNull SVGAVideoEntity svgaVideoEntity) { - if (mIvRipple == null) - return; - SVGADrawable drawable = new SVGADrawable(svgaVideoEntity); - mIvRipple.setImageDrawable(drawable); - mIvRipple.startAnimation(); - } - }); - } catch (MalformedURLException e) { - throw new RuntimeException(e); - } - } - }else { - - mIvRipple.startAnimation(); - } - CommonAppContext.getInstance().onlineMap.put(pitBean.getUser_id(), 1); - iv_on_line.setVisibility(GONE); - } - } } @Override @@ -379,6 +296,59 @@ public abstract class BaseWheatView extends ConstraintLayout implements IBaseWhe } + private boolean isSpeaking = false; + + + private void updateSpeakingState(boolean nowSpeaking) { + // 1️⃣ 状态未变化,直接丢弃(核心) + if (nowSpeaking == isSpeaking) return; + isSpeaking = nowSpeaking; + + if (!nowSpeaking) { + // 静音状态 + mIvRipple.pauseAnimation(); + mIvRipple.setVisibility(INVISIBLE); + return; + } + + // 2️⃣ 开始说话(只触发一次) + mIvRipple.setVisibility(VISIBLE); + iv_on_line.setVisibility(GONE); + CommonAppContext.getInstance().onlineMap.put(pitBean.getUser_id(), 1); + + if (!mIvRipple.isAnimating()) { + startRippleAnimation(); + } + } + + private void startRippleAnimation() { + if (mParser != null) { + mIvRipple.startAnimation(); + return; + } + + if (pitBean.getMic_cycle() == null || pitBean.getMic_cycle().isEmpty()) { + mIvRipple.startAnimation(); + return; + } + + try { + mParser = new SVGAParser(getContext()); + mParser.decodeFromURL(new URL(pitBean.getMic_cycle()), + new SVGAParser.ParseCompletion() { + @Override + public void onComplete(@NotNull SVGAVideoEntity svgaVideoEntity) { + if (mIvRipple == null) return; + mIvRipple.setImageDrawable(new SVGADrawable(svgaVideoEntity)); + mIvRipple.startAnimation(); + } + + @Override + public void onError() {} + }); + } catch (MalformedURLException ignored) {} + } + public void setCharm(String charm) { mCharmView.setSex(pitBean.getSex(), pitBean.getUser_id(), charm, false); } diff --git a/MainModule/build.gradle b/MainModule/build.gradle index b2495e74..c3d0553c 100644 --- a/MainModule/build.gradle +++ b/MainModule/build.gradle @@ -70,7 +70,5 @@ dependencies { api project(':tuichat') api project(':BaseModule') api project(':appupdate') - - } apply plugin: 'com.alibaba.arouter' // ⚠️ 添加这一行 \ No newline at end of file diff --git a/MainModule/src/main/AndroidManifest.xml b/MainModule/src/main/AndroidManifest.xml index b2d2319a..942424f1 100644 --- a/MainModule/src/main/AndroidManifest.xml +++ b/MainModule/src/main/AndroidManifest.xml @@ -58,7 +58,8 @@ android:exported="false" android:screenOrientation="portrait" android:theme="@style/AppTheme" - android:windowSoftInputMode="adjustPan" /> + android:windowSoftInputMode="adjustPan" + android:persistableMode="persistAcrossReboots"/> diff --git a/MainModule/src/main/java/com/xscm/modulemain/Application.kt b/MainModule/src/main/java/com/xscm/modulemain/Application.kt index d7788059..d60ba55d 100644 --- a/MainModule/src/main/java/com/xscm/modulemain/Application.kt +++ b/MainModule/src/main/java/com/xscm/modulemain/Application.kt @@ -29,6 +29,7 @@ import com.xscm.moduleutil.utils.CustomMsgCode import io.reactivex.disposables.Disposable import org.json.JSONObject import java.io.File +import java.lang.ref.WeakReference import java.util.concurrent.TimeUnit @@ -41,9 +42,20 @@ open class Application : CommonAppContext() { var isAgoraStop = false var inviteDialog: InviteDialog? = null - var currDialogActivity: Activity? = null + // 改为弱引用持有Activity + private var mCurDialogActivityRef: WeakReference? = null + fun setCurDialogActivity(activity: Activity?) { + mCurDialogActivityRef = WeakReference(activity) + } + + fun getCurDialogActivity(): Activity? { + if (mCurDialogActivityRef != null) { + return mCurDialogActivityRef!!.get() + } + return null + } @@ -77,6 +89,10 @@ open class Application : CommonAppContext() { // 初始化单例实例 instance = this + + configureLeakCanary() + + // 初始化并预绘制视图 二卡八列 WheatLayoutSingManager.init(this) WheatLayoutSingManager.getInstance().setWheatData(null) @@ -91,6 +107,15 @@ open class Application : CommonAppContext() { initImMsg() } + /** + * 自定义 LeakCanary 配置(解决误报、优化检测规则) + */ + private fun configureLeakCanary() { +// LeakCanary.config = LeakCanary.config.copy( +// retainedVisibleThreshold = 3, // 对象被观察几次GC未被回收才认为泄漏 (默认5) +// ) + } + private fun initImMsg() { MessageListenerSingleton.getInstance().setOnMsgTaskListener { event -> when (event.msgType) { @@ -240,7 +265,7 @@ open class Application : CommonAppContext() { fun showInviteDialog(activity: Activity?, t: IndexRecommendRoom) { if (isKeepScreenOn) return - if (activity != null && activity == currDialogActivity && inviteDialog != null) { + if (activity != null && activity == getCurDialogActivity() && inviteDialog != null) { inviteDialog?.setData(t) return } @@ -249,7 +274,7 @@ open class Application : CommonAppContext() { inviteDialog = activity?.let { InviteDialog(it, t) } inviteDialog?.setData(t) - currDialogActivity = activity + setCurDialogActivity(activity) } private fun initLogUtils() { diff --git a/MainModule/src/main/java/com/xscm/modulemain/BaseMvpActivity.java b/MainModule/src/main/java/com/xscm/modulemain/BaseMvpActivity.java index af961cb8..4dffdaf5 100644 --- a/MainModule/src/main/java/com/xscm/modulemain/BaseMvpActivity.java +++ b/MainModule/src/main/java/com/xscm/modulemain/BaseMvpActivity.java @@ -168,6 +168,7 @@ public abstract class BaseMvpActivity

(), private var circularProgress: CircularProgressView? = null private var publicScreenFragment: ChatRoomFragment? = null // 添加成员变量 - // 存储当前显示的弹框引用 - private val activeDialogs: MutableList = ArrayList() - private val activeDialogFragments: MutableList = ArrayList() - private var isMinimized = false private var appStateListener: AppStateListener? = null @@ -289,16 +281,20 @@ class RoomActivity : BaseMvpActivity(), taskId = intent.getStringExtra("taskId") mRoomInfoResp = roomInfoResp } + setView(mRoomInfoResp) + toActivity(TransparentActivity::class.java) LogUtils.e("RoomActivity", "onNewIntent") } + override fun onWindowFocusChanged(hasFocus: Boolean) { + super.onWindowFocusChanged(hasFocus) + LogUtils.e("RoomActivity", "onWindowFocusChanged:${hasFocus}") + } + override fun onCreate(savedInstanceState: Bundle?) { - // 在super.onCreate之前设置主题以避免闪白屏 -// setTheme(com.xscm.moduleutil.R.style.BaseAppTheme) // 设置你的主主题 super.onCreate(savedInstanceState) // // 进入房间10s后检查是否显示提示上麦对话框 - LogUtils.e("RoomActivity", "onCreate") isSave = false sDestroied = false @@ -606,16 +602,6 @@ class RoomActivity : BaseMvpActivity(), MvpPre?.getRoomOnline(roomId, "1", "10") } - // 添加弹框到管理列表 - fun addActiveDialog(dialog: DialogInterface) { - activeDialogs.add(dialog) - } - - fun addActiveDialogFragment(dialogFragment: Fragment) { - activeDialogFragments.add(dialogFragment) - } - - private var bgEffectView: View? = null private fun setupEffectView() { @@ -831,7 +817,6 @@ class RoomActivity : BaseMvpActivity(), } }) bottomSheet.show(supportFragmentManager, "ExitRoomBottomSheet") - addActiveDialogFragment(bottomSheet) } override fun onConfigurationChanged(newConfig: Configuration) { @@ -906,21 +891,33 @@ class RoomActivity : BaseMvpActivity(), override fun onSelfInfoUpdated(info: V2TIMUserFullInfo?) {} } +/** + * Sets up the room view with the provided room information response. + * + * @param resp The room information response object containing room details + * @param isSwitchRoomType Flag indicating if room type is being switched (default: false) + */ @SuppressLint("CheckResult") private fun setView(resp: RoomInfoResp?, isSwitchRoomType: Boolean = false) { + // Return early if response is null if (resp == null) return + // Update room info in app state manager and local instance AppStateManager.getInstance().roomInfo = resp this.mRoomInfoResp = resp val roomBean = resp.room_info + // Log room info for debugging LogUtils.e("setView_mRoomBean", resp.toString()) + // Set user and owner information this.mRoomUserBean = resp.user_info this.mRoomOwnerBean = resp.room_owner this.roomId = roomBean.room_id + // Load room cover image and set room details ImageUtils.loadHeadCC(resp.room_info.room_cover, mBinding!!.roomTop.avatar) mBinding!!.roomTop.name.text = roomBean.room_name mBinding!!.roomTop.idVal.text = "ID:" + roomBean.room_number + // Handle follow button visibility based on user role if (mRoomUserBean?.getIs_room_owner() == 1) { mBinding!!.roomTop.btnFollow.visibility = View.GONE } else { @@ -931,15 +928,19 @@ class RoomActivity : BaseMvpActivity(), mBinding!!.roomTop.btnFollow.text = "" } } + // Set online number display number = roomBean.online_number mBinding!!.roomTop.tvNum.text = number.toString() + "" + // Set initial view if not switching room type if (!isSwitchRoomType) { setviewyc(true) } + // Log room join action LogUtils.e("加入", roomId) + // Build comma-separated user IDs from pit list val userIds = StringBuilder() if (mRoomInfoResp?.room_info?.pit_list != null) { for (i in mRoomInfoResp?.room_info?.pit_list!!.indices) { @@ -952,6 +953,7 @@ class RoomActivity : BaseMvpActivity(), } } } + // Update app context with room information CommonAppContext.getInstance().isPlaying = true CommonAppContext.getInstance().playId = roomId CommonAppContext.getInstance().playName = mRoomInfoResp?.room_info?.room_name @@ -959,6 +961,7 @@ class RoomActivity : BaseMvpActivity(), CommonAppContext.getInstance().playCover = resp.room_info.room_cover CommonAppContext.getInstance().showSelf = resp.is_show_self == 1 + // Update follow button appearance based on collection status if (mRoomUserBean?.getIs_collect() == 1) { mBinding!!.roomTop.btnFollow.background = resources.getDrawable(com.xscm.moduleutil.R.mipmap.yishouc) @@ -972,19 +975,23 @@ class RoomActivity : BaseMvpActivity(), mBinding!!.roomTop.btnFollow.setTextColor(ColorManager.getInstance().buttonColorInt) mBinding!!.roomTop.btnFollow.text = "收藏" } + // Set music type based on room type if ((roomBean.type_id == "3" || roomBean.type_id == "1" || roomBean.type_id == "4") && roomBean.label_id == "2") { AgoraManager.getInstance().isBjMusic = false } else { AgoraManager.getInstance().isBjMusic = true } + // Update user permissions userPermissionChange() + // Hide PK and misc views for specific room types if (resp.room_info.type_id == "7" || resp.room_info.type_id == "2") { mBinding!!.rlPk.visibility = View.GONE mBinding!!.rlMisc.visibility = View.GONE } + // Handle lucky draw countdown visibility if (mRoomInfoResp?.gift_cycle?.xlh_info?.xlh_status == "1") { mBinding?.xlhRk?.visibility = View.VISIBLE xlhDjs(mRoomInfoResp?.gift_cycle?.xlh_info?.end_time) @@ -993,6 +1000,7 @@ class RoomActivity : BaseMvpActivity(), releaseCountDownTimer1() } + // Show/hide hourly ranking based on settings if (mRoomInfoResp?.hour_ranking_open == 1) { mBinding!!.clXsb.visibility = View.VISIBLE } else { @@ -1098,9 +1106,6 @@ class RoomActivity : BaseMvpActivity(), roomId, null, supportFragmentManager, "", "" ) - if (fragment != null) { - addActiveDialogFragment(fragment) // 添加到管理列表 - } }, 1400) } hideGiftGiveProgress() @@ -1133,9 +1138,6 @@ class RoomActivity : BaseMvpActivity(), roomId, null, supportFragmentManager, "", "" ) - if (fragment != null) { - addActiveDialogFragment(fragment) // 添加到管理列表 - } }, 1400) } hideGiftGiveProgress() @@ -2258,6 +2260,10 @@ class RoomActivity : BaseMvpActivity(), val pitArr: MutableList = ArrayList() for (j in text.list.indices) { val roomPitBean = getRoomPitBean(messageEvent, j) + if(roomPitBean.user_id.equals(mRoomInfoResp?.user_info?.user_id.toString())){ + mRoomInfoResp?.user_info?.pit_number = roomPitBean.pit_number.toInt() + roomBtnShowIsHide(mRoomInfoResp?.user_info?.user_id!!) + } pitArr.add(roomPitBean) } @@ -2458,7 +2464,6 @@ class RoomActivity : BaseMvpActivity(), }, true, 10 ) dialog.show() - addActiveDialog(dialog) } /** @@ -2521,11 +2526,9 @@ class RoomActivity : BaseMvpActivity(), roomNoticeDialogFragment.setTitle("公告") roomNoticeDialogFragment.setContent(mRoomInfoResp?.room_info?.room_intro) roomNoticeDialogFragment.show() - addActiveDialog(roomNoticeDialogFragment) } else if (id == R.id.btn_ranking) { //排行榜 val fragment = RoomChartsFragment.newInstance(roomId, mRoomInfoResp) fragment.show(supportFragmentManager, "RoomChartsFragment") - addActiveDialogFragment(fragment) } else if (id == R.id.btn_close_live) { //退出房间 showExitRoomDialog() } else if (id == R.id.tv_num) { @@ -2572,9 +2575,6 @@ class RoomActivity : BaseMvpActivity(), mRoomInfoResp, supportFragmentManager ) - if (fragment != null) { - addActiveDialogFragment(fragment) // 添加到管理列表 - } } else if (id == R.id.rl_voive) { voive = !voive if (voive) { @@ -2597,39 +2597,26 @@ class RoomActivity : BaseMvpActivity(), LogUtils.e("pk_info", "id == R.id.rl_pk ${mRoomInfoResp?.room_info?.is_pk!!}") fragment.show(supportFragmentManager, "RoomPkDialogFragment") - addActiveDialogFragment(fragment) // 添加到管理列表 } else if (id == R.id.rl_message) { val fragment = RoomMessageDialogFragment.show( supportFragmentManager ) - if (fragment != null) { - addActiveDialogFragment(fragment) // 添加到管理列表 - } } else if (id == R.id.rl_misc) { //设置点歌 val fragment = RequestDialogFragment.show( roomId, mRoomInfoResp, 1, supportFragmentManager ) - if (fragment != null) { - addActiveDialogFragment(fragment) // 添加到管理列表 - } } else if (id == R.id.rl_gift) { //礼物 LogUtils.e("RoomGiftDialogFragment_RoomActivity"); val fragment = RoomGiftDialogFragment.show( mRoomInfoResp, null, roomId, 0, "", supportFragmentManager ) - if (fragment != null) { - addActiveDialogFragment(fragment) // 添加到管理列表 - } } else if (id == R.id.iv_sound_effects) { val fragment = SoundEffectsDialogFragment.show( roomId, supportFragmentManager ) - if (fragment != null) { - addActiveDialogFragment(fragment) // 添加到管理列表 - } } else if (id == R.id.cl_first_charge) { roomFragment!!.showWheatFeedingDialog( roomId, @@ -2776,7 +2763,6 @@ class RoomActivity : BaseMvpActivity(), { v: View? -> }, false, 0 ) dialog.show() - addActiveDialog(dialog) } /** @@ -3033,9 +3019,6 @@ class RoomActivity : BaseMvpActivity(), roomId, supportFragmentManager ) - if (fragment != null) { - addActiveDialogFragment(fragment) // 添加到管理列表 - } } mBinding!!.ivQuanC.setOnClickListener { v: View? -> if (mRoomInfoResp?.room_info?.head_line?.room_id != null && mRoomInfoResp?.room_info?.head_line?.room_id!!.isNotEmpty()) { @@ -3157,7 +3140,6 @@ class RoomActivity : BaseMvpActivity(), override fun showPasswordDialog() { val roomPasswordSetDialogFragment = RoomPasswordSetDialogFragment.newInstance(true, roomId) roomPasswordSetDialogFragment.show(supportFragmentManager) - addActiveDialogFragment(roomPasswordSetDialogFragment) } override fun enterFail() { @@ -3195,9 +3177,6 @@ class RoomActivity : BaseMvpActivity(), roomId, mRoomInfoResp, 2, supportFragmentManager ) - if (fragment != null) { - addActiveDialogFragment(fragment) // 添加到管理列表 - } } is RoomInputHideEvent -> { @@ -3518,11 +3497,7 @@ class RoomActivity : BaseMvpActivity(), roomId, pitNumber, mOnlineBean, mRoomUserBean, mRoomInfoResp, supportFragmentManager ) - LogUtils.e("fragment_onItemClickListener: ${(fragment != null)}") - if (fragment != null) { - addActiveDialogFragment(fragment) // 添加到管理列表 - } } override fun applyPit() { @@ -3850,8 +3825,6 @@ class RoomActivity : BaseMvpActivity(), // if (AgoraManager.getInstance() != null) { // AgoraManager.getInstance().cleanup(); // } -// 清理所有弹框 - dismissAllDialogs() // 7. 清理 Fragment cleanupFragments() @@ -3897,34 +3870,6 @@ class RoomActivity : BaseMvpActivity(), newParent.addView(view) } - // 清理所有弹框 - private fun dismissAllDialogs() { - // 关闭 AlertDialog 实例 - for (dialog in activeDialogs) { - if (dialog != null) { - try { - dialog.dismiss() - } catch (e: Exception) { - LogUtils.e("dismiss dialog error: " + e.message) - } - } - } - activeDialogs.clear() - - // 移除 DialogFragment - for (fragment in activeDialogFragments) { - if (fragment != null && fragment.isAdded) { - try { - if (fragment is DialogFragment) { - fragment.dismissAllowingStateLoss() - } - } catch (e: Exception) { - LogUtils.e("dismiss dialog fragment error: " + e.message) - } - } - } - activeDialogFragments.clear() - } private fun clearSVGAResources() { try { @@ -4319,8 +4264,6 @@ class RoomActivity : BaseMvpActivity(), LogUtils.e("AlertDialog已关闭") } dialog.show() - addActiveDialog(dialog) // 添加到管理列表 - } fun dialogMessage(event: RoomInputEvent) { diff --git a/MainModule/src/main/res/drawable/img.png b/MainModule/src/main/res/drawable/img.png new file mode 100644 index 00000000..42517f17 Binary files /dev/null and b/MainModule/src/main/res/drawable/img.png differ diff --git a/gradle.properties b/gradle.properties index 83fe9f5b..78861ed7 100644 --- a/gradle.properties +++ b/gradle.properties @@ -28,8 +28,8 @@ isBuildModule=false #org.gradle.deamon=false android.injected.testOnly=false -APP_VERSION_NAME=1.0.9.0 -APP_VERSION_CODE=80 +APP_VERSION_NAME=1.0.9.1 +APP_VERSION_CODE=81 org.gradle.jvm.toolchain.useLegacyAdapters=false #org.gradle.java.home=C\:\\Users\\qx\\.jdks\\ms-17.0.15