Browse Source

媒体冲突

DoggyZhang 1 week ago
parent
commit
2a2f440ca2

+ 1 - 1
app/dependencies/releaseRuntimeClasspath.txt

@@ -250,7 +250,7 @@ com.wenext.android:frame-guide:6.0.2
 com.wenext.android:frame-image:6.0.10
 com.wenext.android:frame-locale:6.0.8
 com.wenext.android:frame-log:6.0.6
-com.wenext.android:frame-media:6.0.5
+com.wenext.android:frame-media:6.0.6-beta-1
 com.wenext.android:frame-mvvm:6.0.0
 com.wenext.android:frame-network:6.1.4
 com.wenext.android:frame-oss:6.0.5

+ 1 - 1
app/src/main/java/com/adealink/weparty/media/IMediaManager.kt

@@ -7,7 +7,7 @@ interface IMediaManager {
 
     suspend fun conflictHandle(mediaInfo: MediaInfo): Rlt<Any>
 
-    fun getJoinedMediaRoomId(): Long?
+    fun getJoinedMediaRoomId(): String?
 
     suspend fun rejoinRoom()
 

+ 105 - 0
app/src/main/java/com/adealink/weparty/media/MediaConflictDialog.kt

@@ -0,0 +1,105 @@
+package com.adealink.weparty.media
+
+import android.content.DialogInterface
+import android.graphics.Color
+import android.graphics.drawable.ColorDrawable
+import android.view.Gravity
+import android.view.Window
+import android.view.WindowManager
+import androidx.fragment.app.FragmentManager
+import com.adealink.frame.aab.util.getCompatString
+import com.adealink.frame.media.MediaInfo
+import com.adealink.frame.mvvm.view.viewBinding
+import com.adealink.frame.util.onClick
+import com.adealink.weparty.R
+import com.adealink.weparty.commonui.dialogfragment.BaseDialogFragment
+import com.adealink.weparty.commonui.ext.dp
+import com.adealink.weparty.databinding.DialogMediaConflictBinding
+import com.adealink.weparty.media.datasource.MediaLocalService
+
+class MediaConflictDialog : BaseDialogFragment(R.layout.dialog_media_conflict) {
+
+    companion object {
+        @JvmStatic
+        fun show(
+            exitMediaInfo: MediaInfo,
+            enterMediaInfo: MediaInfo,
+            fm: FragmentManager,
+            onPositive: (() -> Unit)? = null,
+            onNegative: (() -> Unit)? = null,
+            onDismiss: (() -> Unit)? = null,
+        ) {
+            MediaConflictDialog().apply {
+                this.exitMediaInfo = exitMediaInfo
+                this.enterMediaInfo = enterMediaInfo
+                this.onPositive = onPositive
+                this.onNegative = onNegative
+                this.onDismiss = onDismiss
+            }.show(fm, "CallMediaConflictDialog")
+        }
+    }
+
+    private val binding by viewBinding(DialogMediaConflictBinding::bind)
+
+    private var exitMediaInfo: MediaInfo? = null
+    private var enterMediaInfo: MediaInfo? = null
+    private var onPositive: (() -> Unit)? = null
+    private var onNegative: (() -> Unit)? = null
+    private var onDismiss: (() -> Unit)? = null
+
+    private var remind = false
+
+    override fun initViews() {
+        super.initViews()
+        binding.tvMessage.text = getCompatString(
+            R.string.room_media_conflict_tips,
+            exitMediaInfo?.mediaName ?: "",
+            enterMediaInfo?.mediaName ?: ""
+        )
+        binding.clNeverRemind.setOnClickListener {
+            remind = !remind
+            MediaLocalService.updateConflictRemind(exitMediaInfo, enterMediaInfo, remind)
+            updateDontRemind()
+        }
+        updateDontRemind()
+        binding.topCloseBtn.onClick {
+            onPositive?.invoke()
+            dismiss()
+        }
+        binding.btnCancel.setOnClickListener {
+            onNegative?.invoke()
+            dismiss()
+        }
+        binding.btnConfirm.setOnClickListener {
+            onPositive?.invoke()
+            dismiss()
+        }
+    }
+
+    private fun updateDontRemind() {
+        if (remind) {
+            binding.ivNeverRemind.setImageResource(R.drawable.common_check_selected_ic)
+        } else {
+            binding.ivNeverRemind.setImageResource(R.drawable.common_check_unselected_ic)
+        }
+    }
+
+    override fun onDismiss(dialog: DialogInterface) {
+        super.onDismiss(dialog)
+        onDismiss?.invoke()
+    }
+
+    override fun resetWindowAttributes(window: Window) {
+        super.resetWindowAttributes(window)
+        window.setLayout(
+            300.dp(),
+            WindowManager.LayoutParams.WRAP_CONTENT
+        )
+        window.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))
+        val attr = window.attributes
+        attr.gravity = Gravity.CENTER
+        attr.dimAmount = 0.7f
+        window.attributes = attr
+    }
+
+}

+ 5 - 3
app/src/main/java/com/adealink/weparty/media/MediaManager.kt

@@ -6,6 +6,8 @@ import com.adealink.frame.media.IMediaOperatorGet
 import com.adealink.frame.media.MediaInfo
 import com.adealink.frame.media.constant.TAG_MEDIA
 import com.adealink.frame.media.data.RtcType
+import com.adealink.weparty.module.call.CallModule
+import com.adealink.weparty.module.room.RoomModule
 
 enum class MediaType(val type: Int) {
     UNKNOWN(0), //未知
@@ -16,8 +18,8 @@ enum class MediaType(val type: Int) {
 class MediaManager : IMediaManager {
 
     private val mediaOperatorGets = arrayListOf<IMediaOperatorGet>(
-//        RoomModule,
-//        CallModule
+        RoomModule,
+        CallModule
     )
 
     override suspend fun conflictHandle(mediaInfo: MediaInfo): Rlt<Any> {
@@ -54,7 +56,7 @@ class MediaManager : IMediaManager {
         return Rlt.Success(Any())
     }
 
-    override fun getJoinedMediaRoomId(): Long? {
+    override fun getJoinedMediaRoomId(): String? {
         val mediaGet = mediaOperatorGets.find { it.getMediaOperator()?.getJoinedRoomId() != null }
         return mediaGet?.getMediaOperator()?.getJoinedRoomId()
     }

+ 49 - 0
app/src/main/java/com/adealink/weparty/media/datasource/MediaLocalService.kt

@@ -0,0 +1,49 @@
+package com.adealink.weparty.media.datasource
+
+import android.content.Context
+import com.adealink.frame.media.MediaInfo
+import com.adealink.frame.storage.sp.TypeDelegationPrefs
+import com.adealink.frame.util.AppUtil
+import com.adealink.weparty.media.MediaType
+import com.adealink.weparty.module.profile.ProfileModule
+import com.adealink.weparty.storage.PREF_MEDIA
+
+object MediaLocalService : TypeDelegationPrefs(
+    prefs = {
+        AppUtil.appContext.getSharedPreferences(PREF_MEDIA, Context.MODE_PRIVATE)
+    },
+    userId = {
+        ProfileModule.getMyUid()
+    }
+) {
+
+    var room2CallConflictRemind: Boolean by PrefUserKey("key_room_2_call_conflict", true)
+    var call2RoomConflictRemind: Boolean by PrefUserKey("key_room_2_call_conflict", true)
+
+
+    fun showConflictRemind(
+        exitMediaInfo: MediaInfo?,
+        enterMediaInfo: MediaInfo?
+    ): Boolean {
+        return if (exitMediaInfo?.mediaType == MediaType.CHAT_ROOM.type && enterMediaInfo?.mediaType == MediaType.CALL_1V1.type) {
+            room2CallConflictRemind
+        } else if (exitMediaInfo?.mediaType == MediaType.CALL_1V1.type && enterMediaInfo?.mediaType == MediaType.CHAT_ROOM.type) {
+            call2RoomConflictRemind
+        } else {
+            false
+        }
+
+    }
+
+    fun updateConflictRemind(
+        exitMediaInfo: MediaInfo?,
+        enterMediaInfo: MediaInfo?,
+        neverRemind: Boolean
+    ) {
+        if (exitMediaInfo?.mediaType == MediaType.CHAT_ROOM.type && enterMediaInfo?.mediaType == MediaType.CALL_1V1.type) {
+            room2CallConflictRemind = neverRemind
+        } else if (exitMediaInfo?.mediaType == MediaType.CALL_1V1.type && enterMediaInfo?.mediaType == MediaType.CHAT_ROOM.type) {
+            call2RoomConflictRemind = neverRemind
+        }
+    }
+}

+ 1 - 1
app/src/main/java/com/adealink/weparty/module/call/CallModule.kt

@@ -55,7 +55,7 @@ object CallModule : BaseDynamicModule<ICallService>(ICallService::class), ICallS
                         )
                     }
 
-                    override fun getJoinedRoomId(): Long? {
+                    override fun getJoinedRoomId(): String? {
                         return null
                     }
 

+ 1 - 1
app/src/main/java/com/adealink/weparty/module/room/RoomModule.kt

@@ -43,7 +43,7 @@ object RoomModule : BaseDynamicModule<IRoomService>(IRoomService::class), IRoomS
                         )
                     }
 
-                    override fun getJoinedRoomId(): Long? {
+                    override fun getJoinedRoomId(): String? {
                         return null
                     }
 

+ 3 - 1
app/src/main/java/com/adealink/weparty/storage/Constants.kt

@@ -24,4 +24,6 @@ const val PREF_COUNTRY = "pref_country"
 
 const val PREF_ROOM = "pref_room"
 
-const val PREF_GIFT = "pref_gift"
+const val PREF_GIFT = "pref_gift"
+
+const val PREF_MEDIA = "pref_media"

+ 134 - 0
app/src/main/res/layout/dialog_media_conflict.xml

@@ -0,0 +1,134 @@
+<?xml version="1.0" encoding="utf-8"?>
+<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    xmlns:tools="http://schemas.android.com/tools"
+    android:id="@+id/content_layout"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:background="@drawable/commonui_dialog_bg"
+    app:layout_constraintTop_toTopOf="parent">
+
+    <androidx.appcompat.widget.AppCompatImageView
+        android:id="@+id/top_close_btn"
+        android:layout_width="24dp"
+        android:layout_height="24dp"
+        android:layout_marginTop="10dp"
+        android:layout_marginEnd="10dp"
+        android:src="@drawable/common_close_ic"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintTop_toTopOf="parent" />
+
+    <androidx.constraintlayout.widget.ConstraintLayout
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:paddingStart="24dp"
+        android:paddingTop="24dp"
+        android:paddingEnd="24dp"
+        android:paddingBottom="24dp"
+        app:layout_constraintTop_toTopOf="parent">
+
+        <!--标题-->
+        <androidx.appcompat.widget.AppCompatTextView
+            android:id="@+id/tvTitle"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_marginTop="12dp"
+            android:gravity="center"
+            android:includeFontPadding="false"
+            android:lineSpacingExtra="3dp"
+            android:text="@string/common_tips"
+            android:textColor="@color/color_222222"
+            android:textSize="16sp"
+            android:textStyle="bold"
+            app:layout_constraintTop_toTopOf="parent"
+            app:layout_goneMarginTop="0dp" />
+
+        <!--内容-->
+        <androidx.appcompat.widget.AppCompatTextView
+            android:id="@+id/tv_message"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_marginTop="10dp"
+            android:gravity="center"
+            android:includeFontPadding="false"
+            android:lineSpacingExtra="5dp"
+            android:textColor="@color/color_222222"
+            android:textSize="12sp"
+            app:layout_constraintTop_toBottomOf="@id/tvTitle"
+            tools:text="内容" />
+        <!--确定-->
+        <com.adealink.weparty.commonui.widget.CommonButton
+            android:id="@+id/btn_confirm"
+            android:layout_width="0dp"
+            android:layout_height="36dp"
+            android:layout_marginHorizontal="50dp"
+            android:layout_marginTop="16dp"
+            app:button_radius="22dp"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintTop_toBottomOf="@id/tv_message"
+            app:layout_constraintWidth_default="spread"
+            app:layout_goneMarginTop="20dp"
+            app:text="@string/commonui_confirm"
+            app:textColor="@color/white"
+            app:textSize="14sp" />
+
+        <!--取消-->
+        <com.adealink.weparty.commonui.widget.CommonButton
+            android:id="@+id/btn_cancel"
+            android:layout_width="0dp"
+            android:layout_height="32dp"
+            android:layout_marginHorizontal="50dp"
+            android:layout_marginTop="16dp"
+            app:button_radius="22dp"
+            app:common_button_type="cancel"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintTop_toBottomOf="@id/btn_confirm"
+            app:layout_goneMarginTop="20dp"
+            app:text="@string/commonui_cancel"
+            app:textColor="@color/color_FF4E5969"
+            app:textSize="14sp"
+            tools:visibility="visible" />
+
+        <androidx.constraintlayout.widget.ConstraintLayout
+            android:id="@+id/cl_never_remind"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_marginHorizontal="20dp"
+            android:layout_marginTop="16dp"
+            app:layout_constrainedWidth="true"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintTop_toBottomOf="@id/btn_cancel">
+
+            <androidx.appcompat.widget.AppCompatImageView
+                android:id="@+id/iv_never_remind"
+                android:layout_width="14dp"
+                android:layout_height="14dp"
+                app:layout_constraintBottom_toBottomOf="parent"
+                app:layout_constraintHorizontal_chainStyle="packed"
+                app:layout_constraintStart_toStartOf="parent"
+                app:layout_constraintTop_toTopOf="parent"
+                app:srcCompat="@drawable/common_check_unselected_ic" />
+
+            <androidx.appcompat.widget.AppCompatTextView
+                android:id="@+id/tv_never_remind"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:layout_marginStart="4dp"
+                android:gravity="start"
+                android:includeFontPadding="false"
+                android:text="@string/common_never_remind"
+                android:textColor="@color/color_FF4E5969"
+                android:textSize="12sp"
+                app:layout_constraintBottom_toBottomOf="parent"
+                app:layout_constraintEnd_toEndOf="parent"
+                app:layout_constraintStart_toEndOf="@id/iv_never_remind"
+                app:layout_constraintTop_toTopOf="parent" />
+
+        </androidx.constraintlayout.widget.ConstraintLayout>
+
+    </androidx.constraintlayout.widget.ConstraintLayout>
+
+</androidx.constraintlayout.widget.ConstraintLayout>

+ 2 - 0
app/src/main/res/values/strings.xml

@@ -137,6 +137,7 @@
     <string name="common_update_downloaded">An update has just been downloaded</string>
     <string name="common_restart">Restart</string>
     <string name="common_remind">Remind</string>
+    <string name="common_never_remind">不再提醒</string>
     <string name="common_giving">Give away</string>
     <string name="common_enter_other_id">Enter the other party\'s ID</string>
     <string name="common_click_to_select">Click to select</string>
@@ -410,4 +411,5 @@
     <string name="common_send_gift">Send Gifts</string>
     <string name="common_think_more">Think again</string>
     <string name="wallet_confirm_convert">Confirm Exchange</string>
+    <string name="room_media_conflict_tips">你当前在%1$s,进入%2$s后将自动退出</string>
 </resources>

+ 2 - 2
gradle/libs.versions.toml

@@ -167,7 +167,7 @@ tiktok = "2.3.0"
 
 # frame
 frameBom = "6.2.20"
-
+frameMedia = "6.0.6-beta-1"
 framePush = "6.0.1"
 
 frameRouterCompiler = "6.0.0"
@@ -431,7 +431,7 @@ frame-audio = { group = "com.wenext.android", name = "frame-audio" }
 frame-crash = { group = "com.wenext.android", name = "frame-crash" }
 frame-dot = { group = "com.wenext.android", name = "frame-dot" }
 frame-locale = { group = "com.wenext.android", name = "frame-locale" }
-frame-media = { group = "com.wenext.android", name = "frame-media" }
+frame-media = { group = "com.wenext.android", name = "frame-media", version.ref = "frameMedia" }
 frame-agorartc = { group = "com.wenext.android", name = "frame-agorartc" }
 frame-trtc = { group = "com.wenext.android", name = "frame-trtc" }
 frame-trtc-pro = { group = "com.wenext.android", name = "frame-trtc-pro" }

+ 35 - 43
module/call/src/main/java/com/adealink/weparty/call/CallServiceImpl.kt

@@ -2,21 +2,27 @@ package com.adealink.weparty.call
 
 import android.app.Application
 import com.adealink.frame.aab.util.getCompatString
+import com.adealink.frame.base.IError
 import com.adealink.frame.base.Rlt
+import com.adealink.frame.coroutine.dispatcher.Dispatcher
 import com.adealink.frame.media.IMediaOperator
 import com.adealink.frame.media.MediaConflictConfig
 import com.adealink.frame.media.MediaInfo
 import com.adealink.frame.spi.RegisterService
 import com.adealink.frame.util.AppUtil
-import com.adealink.weparty.call.datasource.local.CallLocalService
 import com.adealink.weparty.call.manager.callManager
 import com.adealink.weparty.call.widget.float.calling.CallingFloatData
 import com.adealink.weparty.call.widget.float.calling.CallingFloatView
 import com.adealink.weparty.commonui.BaseActivity
 import com.adealink.weparty.commonui.widget.floatview.data.IFloatData
+import com.adealink.weparty.media.MediaConflictDialog
 import com.adealink.weparty.module.call.ICallService
 import com.tencent.qcloud.tuikit.tuicallkit.manager.bridge.CallServiceInitializer
+import io.trtc.tuikit.atomicx.callview.core.common.utils.CallUtils
 import io.trtc.tuikit.atomicxcore.api.CompletionHandler
+import io.trtc.tuikit.atomicxcore.api.call.CallStore
+import kotlinx.coroutines.suspendCancellableCoroutine
+import kotlinx.coroutines.withContext
 
 @RegisterService(ICallService::class)
 class CallServiceImpl : ICallService {
@@ -49,19 +55,10 @@ class CallServiceImpl : ICallService {
         })
     }
 
-//    override fun getIncomingFloatView(data: IFloatData): InComingFloatView {
-//        return InComingFloatView(data as InComingFloatData)
-//    }
-
     override fun getCallingFloatView(data: IFloatData): CallingFloatView {
         return CallingFloatView(data as CallingFloatData)
     }
 
-//    override fun getCallViewModel(owner: ViewModelStoreOwner): ICallViewModel {
-//        return ViewModelProvider(owner, CallViewModelFactory())[CallViewModel::class.java]
-//    }
-
-
     override fun getService(): ICallService {
         return this
     }
@@ -71,12 +68,11 @@ class CallServiceImpl : ICallService {
 
             override suspend fun isMediaIn(): Boolean {
                 //当前正在呼叫
-                return false
-                //return TUICallState.instance.selfUser.get().isCalling()
+                return CallUtils.isSelfInCalling()
             }
 
             override suspend fun leaveMedia(): Rlt<Any> {
-//                EngineManager.instance.hangup(null)
+                CallStore.shared.hangup(null)
                 return Rlt.Success(Any())
             }
 
@@ -84,35 +80,31 @@ class CallServiceImpl : ICallService {
                 exitMediaInfo: MediaInfo,
                 enterMediaInfo: MediaInfo
             ): Rlt<Any> {
-                if (!CallLocalService.mediaConflictRemind) {
-                    return Rlt.Success(Any())
+                val currentActivity =
+                    AppUtil.currentActivity as? BaseActivity ?: return Rlt.Success(Any())
+                return withContext(Dispatcher.UI) {
+                    suspendCancellableCoroutine { continuation ->
+                        var confirm = false
+                        MediaConflictDialog.show(
+                            exitMediaInfo,
+                            enterMediaInfo,
+                            currentActivity.supportFragmentManager,
+                            onPositive = {
+                                confirm = true
+                            },
+                            onNegative = null,
+                            onDismiss = {
+                                if (continuation.isActive) {
+                                    if (confirm) {
+                                        continuation.resume(Rlt.Success(Any()), null)
+                                    } else {
+                                        continuation.resume(Rlt.Failed(IError()), null)
+                                    }
+                                }
+                            }
+                        )
+                    }
                 }
-                return Rlt.Success(Any())
-//                val currentActivity =
-//                    AppUtil.currentActivity as? BaseActivity ?: return Rlt.Success(Any())
-//                return withContext(Dispatcher.UI) {
-//                    suspendCancellableCoroutine { continuation ->
-//                        var confirm = false
-//                        CallMediaConflictDialog.show(
-//                            exitMediaInfo,
-//                            enterMediaInfo,
-//                            currentActivity.supportFragmentManager,
-//                            onPositive = {
-//                                confirm = true
-//                            },
-//                            onNegative = null,
-//                            onDismiss = {
-//                                if (continuation.isActive) {
-//                                    if (confirm) {
-//                                        continuation.resume(Rlt.Success(Any()), null)
-//                                    } else {
-//                                        continuation.resume(Rlt.Failed(IError()), null)
-//                                    }
-//                                }
-//                            }
-//                        )
-//                    }
-//                }
             }
 
             override fun getConflictConfig(): MediaConflictConfig {
@@ -124,8 +116,8 @@ class CallServiceImpl : ICallService {
                 )
             }
 
-            override fun getJoinedRoomId(): Long? {
-                return null
+            override fun getJoinedRoomId(): String? {
+                return CallStore.shared.observerState.activeCall.value.callId
             }
 
             override suspend fun rejoinRoom(): Rlt<Any> {

+ 0 - 2
module/call/src/main/java/com/adealink/weparty/call/datasource/local/CallLocalService.kt

@@ -14,8 +14,6 @@ object CallLocalService : TypeDelegationPrefs(
     }
 ) {
 
-    var mediaConflictRemind: Boolean by PrefUserKey("key_call_media_conflict_remind", true)
-
     var requestOverPlayPermission: Boolean by PrefUserKey("key_request_overlay_permission", true)
 
 }

+ 33 - 30
module/room/src/main/java/com/adealink/weparty/room/RoomServiceImpl.kt

@@ -1,14 +1,18 @@
 package com.adealink.weparty.room
 
 import com.adealink.frame.aab.util.getCompatString
+import com.adealink.frame.base.IError
 import com.adealink.frame.base.Rlt
+import com.adealink.frame.coroutine.dispatcher.Dispatcher
 import com.adealink.frame.media.IMediaOperator
 import com.adealink.frame.media.MediaConflictConfig
 import com.adealink.frame.media.MediaInfo
 import com.adealink.frame.room.data.LeaveRoomReason
 import com.adealink.frame.spi.RegisterService
+import com.adealink.frame.util.AppUtil
 import com.adealink.weparty.commonui.BaseActivity
 import com.adealink.weparty.commonui.widget.floatview.data.IFloatData
+import com.adealink.weparty.media.MediaConflictDialog
 import com.adealink.weparty.media.MediaType
 import com.adealink.weparty.module.room.IRoomService
 import com.adealink.weparty.room.create.CreateRoomDialog
@@ -17,6 +21,8 @@ import com.adealink.weparty.room.minimize.manager.minimizeRoomManager
 import com.adealink.weparty.room.minimize.view.MinimizedRoomFloatData
 import com.adealink.weparty.room.minimize.view.MinimizedRoomFloatView
 import com.adealink.weparty.room.sdk.service.roomService
+import kotlinx.coroutines.suspendCancellableCoroutine
+import kotlinx.coroutines.withContext
 
 @RegisterService(IRoomService::class)
 class RoomServiceImpl : IRoomService {
@@ -41,32 +47,31 @@ class RoomServiceImpl : IRoomService {
                 exitMediaInfo: MediaInfo,
                 enterMediaInfo: MediaInfo
             ): Rlt<Any> {
-                return Rlt.Success(Unit)
-//                val currentActivity =
-//                    AppUtil.currentActivity as? BaseActivity ?: return Rlt.Success(Any())
-//                return withContext(Dispatcher.UI) {
-//                    suspendCancellableCoroutine { continuation ->
-//                        var confirm = false
-//                        RoomMediaConflictDialog.show(
-//                            exitMediaInfo,
-//                            enterMediaInfo,
-//                            currentActivity.supportFragmentManager,
-//                            onPositive = {
-//                                confirm = true
-//                            },
-//                            onNegative = null,
-//                            onDismiss = {
-//                                if (continuation.isActive) {
-//                                    if (confirm) {
-//                                        continuation.resume(Rlt.Success(Any()), null)
-//                                    } else {
-//                                        continuation.resume(Rlt.Failed(IError()), null)
-//                                    }
-//                                }
-//                            }
-//                        )
-//                    }
-//                }
+                val currentActivity =
+                    AppUtil.currentActivity as? BaseActivity ?: return Rlt.Success(Any())
+                return withContext(Dispatcher.UI) {
+                    suspendCancellableCoroutine { continuation ->
+                        var confirm = false
+                        MediaConflictDialog.show(
+                            exitMediaInfo,
+                            enterMediaInfo,
+                            currentActivity.supportFragmentManager,
+                            onPositive = {
+                                confirm = true
+                            },
+                            onNegative = null,
+                            onDismiss = {
+                                if (continuation.isActive) {
+                                    if (confirm) {
+                                        continuation.resume(Rlt.Success(Any()), null)
+                                    } else {
+                                        continuation.resume(Rlt.Failed(IError()), null)
+                                    }
+                                }
+                            }
+                        )
+                    }
+                }
             }
 
             override fun getConflictConfig(): MediaConflictConfig {
@@ -78,14 +83,12 @@ class RoomServiceImpl : IRoomService {
                 )
             }
 
-            override fun getJoinedRoomId(): Long? {
-                return null
-//                return roomService.joinController.getJoinedRoomId()
+            override fun getJoinedRoomId(): String? {
+                return roomService.joinController.getJoinedRoomId()
             }
 
             override suspend fun rejoinRoom(): Rlt<Any> {
                 return Rlt.Success(Unit)
-//                return roomService.joinController.rejoinRoom()
             }
 
         }

+ 2 - 0
module/room/src/main/java/com/adealink/weparty/room/datasource/local/RoomLocalService.kt

@@ -16,6 +16,8 @@ object RoomLocalService : TypeDelegationPrefs(
     }
 ) {
 
+    var lastEnterRoomId: String by PrefKey("key_last_enter_room", "")
+
     /**
      * 上一次钻石不足提示提醒的时间
      */

+ 2 - 0
module/room/src/main/java/com/adealink/weparty/room/interceptor/EnterRoomUriInterceptor.kt

@@ -28,6 +28,7 @@ import com.adealink.weparty.room.constant.enterRoomJoinReqTime
 import com.adealink.weparty.room.constant.enterRoomJoinResTime
 import com.adealink.weparty.room.constant.enterRoomUILoadTime
 import com.adealink.weparty.room.constant.markEnterRoomTime
+import com.adealink.weparty.room.datasource.local.RoomLocalService
 import com.adealink.weparty.room.sdk.service.roomService
 import com.adealink.weparty.util.parcelableExtra
 import kotlinx.coroutines.CoroutineScope
@@ -174,6 +175,7 @@ class EnterRoomUriInterceptor : UriInterceptor {
         when (result) {
             is Rlt.Success -> {
                 Log.i(TAG_ROOM_ENTER_ROOM, "EnterRoomUriInterceptor, join room success, proceed()")
+                RoomLocalService.lastEnterRoomId = enterRoomInfo.roomId
                 GiftModule.getGifts(enterRoomInfo.roomId, true)
                 chain.proceed(request)
             }

+ 2 - 1
module/room/src/main/java/com/adealink/weparty/room/sdk/controller/impl/JoinController.kt

@@ -19,6 +19,7 @@ import com.adealink.weparty.room.constant.TAG_ROOM_ENTER_ROOM
 import com.adealink.weparty.room.constant.enterRoomJoinReqTime
 import com.adealink.weparty.room.constant.enterRoomJoinResTime
 import com.adealink.weparty.room.constant.logRoomTime
+import com.adealink.weparty.room.datasource.local.RoomLocalService
 import com.adealink.weparty.room.sdk.context.IRoomContext
 import com.adealink.weparty.room.sdk.controller.BaseController
 import com.adealink.weparty.room.sdk.controller.IJoinController
@@ -180,7 +181,7 @@ open class JoinController(override val ctx: IRoomContext, serialHandler: Handler
             }
 
             //先尝试退上次未退出的房间,然后再进房,重进房不执行退房逻辑
-            leaveLastRoom(getJoinedRoomId(), reason = LeaveRoomReason.ENTER_OTHER_ROOM, false)
+            leaveLastRoom(RoomLocalService.lastEnterRoomId, reason = LeaveRoomReason.ENTER_OTHER_ROOM, false)
 
             joiningRoomId = null
             joinedRoomInfo = (joinRoomRes as Rlt.Success).data

+ 1 - 1
module/room/src/main/res/layout/dialog_diamond_recharge.xml

@@ -63,7 +63,7 @@
         android:layout_width="0dp"
         android:layout_height="36dp"
         android:layout_marginHorizontal="50dp"
-        android:layout_marginTop="24dp"
+        android:layout_marginTop="16dp"
         app:button_radius="22dp"
         app:layout_constraintEnd_toEndOf="parent"
         app:layout_constraintStart_toStartOf="parent"