浏览代码

修复崩溃

DoggyZhang 1 年之前
父节点
当前提交
22a3b9c941

+ 7 - 1
app/src/main/java/com/adealink/weparty/permission/PermissionUtils.kt

@@ -152,17 +152,23 @@ object PermissionUtils {
         onConfirm: () -> Unit,
         onCancel: () -> Unit
     ) {
+        var hasClick = false
         CommonDialog.Builder()
             .message(tip)
             .onPositive {
+                hasClick = true
                 onConfirm.invoke()
             }
             .onNegative {
+                hasClick = true
                 onCancel.invoke()
             }
             .onDismiss {
-                onCancel.invoke()
+                if (!hasClick) {
+                    onCancel.invoke()
+                }
             }
+            .dismissAfterClick(true)
             .canceledOnTouchOutside(false)
             .setShowDefaultCancel(true)
             .build()

+ 1 - 7
module/call/src/main/java/com/adealink/weparty/call/CallServiceImpl.kt

@@ -13,6 +13,7 @@ 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.constant.CALL_ERROR_MEDIA_CONFLICT_CANCEL
 import com.adealink.weparty.call.constant.TAG_CALL_PUSH
 import com.adealink.weparty.call.data.toTMediaType
 import com.adealink.weparty.call.datasource.local.CallLocalService
@@ -87,13 +88,6 @@ class CallServiceImpl : ICallService {
 
             override fun onError(errCode: Int, errMsg: String?) {
                 activity.dismissLoading()
-                showToast(
-                    getCompatString(
-                        com.adealink.weparty.R.string.commonui_error_msg,
-                        errMsg ?: getCompatString(com.adealink.weparty.R.string.common_failed),
-                        errCode
-                    )
-                )
                 onFail?.invoke(errCode, errMsg)
             }
         })

+ 49 - 26
module/call/src/main/java/com/adealink/weparty/call/manager/CallManager.kt

@@ -4,6 +4,7 @@ import android.content.Intent
 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.data.json.froJsonErrorNull
 import com.adealink.frame.data.json.toJsonErrorNull
 import com.adealink.frame.frame.BaseFrame
@@ -31,6 +32,7 @@ import com.adealink.weparty.call.datasource.remote.CallSocketService
 import com.adealink.weparty.call.util.debugToast
 import com.adealink.weparty.call.util.getRoomId
 import com.adealink.weparty.commonui.toast.util.getFailedMsg
+import com.adealink.weparty.commonui.toast.util.showToast
 import com.adealink.weparty.media.MediaType
 import com.adealink.weparty.module.account.util.isUidValid
 import com.adealink.weparty.module.call.Call
@@ -165,8 +167,17 @@ class CallManager : BaseFrame<ICallListener>(), ICallManager {
 
                 override fun onError(errCode: Int, errMsg: String?) {
                     callback?.onError(errCode, errMsg)
+                    //处理媒体冲突不需要提示
+                    if (errCode != CALL_ERROR_MEDIA_CONFLICT_CANCEL) {
+                        showToast(
+                            errMsg ?: getCompatString(
+                                com.adealink.weparty.R.string.commonui_error_msg,
+                                errMsg ?: getCompatString(com.adealink.weparty.R.string.common_failed),
+                                errCode
+                            )
+                        )
+                    }
                 }
-
             }
 
             if (TUICallState.instance.selfUser.get().isCalling()) {
@@ -193,7 +204,7 @@ class CallManager : BaseFrame<ICallListener>(), ICallManager {
             )
             if (conflictRlt is Rlt.Failed) {
                 Log.e(TAG_CALL_FLOW, "call fail, for media conflict fail")
-                callActionCallback.onError(CALL_ERROR_MEDIA_CONFLICT_CANCEL, "")
+                callActionCallback.onError(CALL_ERROR_MEDIA_CONFLICT_CANCEL, null)
                 return@launch
             }
 
@@ -201,7 +212,7 @@ class CallManager : BaseFrame<ICallListener>(), ICallManager {
             val permissionRlt = requestPermission(true, mediaType)
             if (permissionRlt is Rlt.Failed) {
                 Log.e(TAG_CALL_FLOW, "call fail, for permission denied")
-                callActionCallback.onError(TUICallDefine.ERROR_PERMISSION_DENIED, "")
+                callActionCallback.onError(TUICallDefine.ERROR_PERMISSION_DENIED, getCompatString(R.string.call_permission_grant_fail))
                 return@launch
             }
 
@@ -262,6 +273,16 @@ class CallManager : BaseFrame<ICallListener>(), ICallManager {
                 override fun onError(errCode: Int, errMsg: String?) {
                     EngineManager.instance.reject(null)
                     callback?.onError(errCode, errMsg)
+                    //处理媒体冲突不需要提示
+                    if (errCode != CALL_ERROR_MEDIA_CONFLICT_CANCEL) {
+                        showToast(
+                            errMsg ?: getCompatString(
+                                com.adealink.weparty.R.string.commonui_error_msg,
+                                errMsg ?: getCompatString(com.adealink.weparty.R.string.common_failed),
+                                errCode
+                            )
+                        )
+                    }
                 }
 
             }
@@ -307,7 +328,7 @@ class CallManager : BaseFrame<ICallListener>(), ICallManager {
             val permissionRlt = requestPermission(false, mediaType)
             if (permissionRlt is Rlt.Failed) {
                 Log.e(TAG_CALL_FLOW, "accept fail, permission denied")
-                acceptCallback.onError(TUICallDefine.ERROR_PERMISSION_DENIED, "")
+                acceptCallback.onError(TUICallDefine.ERROR_PERMISSION_DENIED, getCompatString(R.string.call_permission_grant_fail))
                 return@launch
             }
 
@@ -349,34 +370,36 @@ class CallManager : BaseFrame<ICallListener>(), ICallManager {
     }
 
     override suspend fun requestPermission(isCaller: Boolean, mediaType: TUICallDefine.MediaType): Rlt<Any> {
-        return suspendCancellableCoroutine { continuation ->
-            PermissionRequest.requestPermissions(AppUtil.appContext, mediaType, object : PermissionCallback() {
-                override fun onGranted() {
-                    //主叫直接返回结果
-                    if (isCaller) {
-                        if (continuation.isActive) {
-                            continuation.resume(Rlt.Success(Any()), null)
+        return withContext(Dispatcher.UI) {
+            suspendCancellableCoroutine { continuation ->
+                PermissionRequest.requestPermissions(AppUtil.appContext, mediaType, object : PermissionCallback() {
+                    override fun onGranted() {
+                        //主叫直接返回结果
+                        if (isCaller) {
+                            if (continuation.isActive) {
+                                continuation.resume(Rlt.Success(Any()), null)
+                            }
+                            return
+                        }
+                        //被叫需要检查当前呼叫状态
+                        if (TUICallState.instance.selfUser.get().callStatus.get() == TUICallDefine.Status.None) {
+                            if (continuation.isActive) {
+                                continuation.resume(Rlt.Failed(IError()), null)
+                            }
+                        } else {
+                            if (continuation.isActive) {
+                                continuation.resume(Rlt.Success(Any()), null)
+                            }
                         }
-                        return
                     }
-                    //被叫需要检查当前呼叫状态
-                    if (TUICallState.instance.selfUser.get().callStatus.get() == TUICallDefine.Status.None) {
+
+                    override fun onDenied() {
                         if (continuation.isActive) {
                             continuation.resume(Rlt.Failed(IError()), null)
                         }
-                    } else {
-                        if (continuation.isActive) {
-                            continuation.resume(Rlt.Success(Any()), null)
-                        }
-                    }
-                }
-
-                override fun onDenied() {
-                    if (continuation.isActive) {
-                        continuation.resume(Rlt.Failed(IError()), null)
                     }
-                }
-            })
+                })
+            }
         }
     }
 

+ 0 - 4
module/call/src/main/java/com/tencent/qcloud/tuikit/tuicallkit/manager/EngineManager.kt

@@ -9,7 +9,6 @@ import com.adealink.weparty.call.CallActivity
 import com.adealink.weparty.call.R
 import com.adealink.weparty.call.constant.TAG_CALL_ENGINE
 import com.adealink.weparty.call.data.CallUserData
-import com.adealink.weparty.commonui.toast.util.showToast
 import com.tencent.cloud.tuikit.engine.call.TUICallDefine
 import com.tencent.cloud.tuikit.engine.call.TUICallDefine.CallParams
 import com.tencent.cloud.tuikit.engine.call.TUICallEngine
@@ -22,7 +21,6 @@ import com.tencent.qcloud.tuicore.TUIConstants
 import com.tencent.qcloud.tuicore.TUICore
 import com.tencent.qcloud.tuicore.TUILogin
 import com.tencent.qcloud.tuicore.permission.PermissionCallback
-import com.tencent.qcloud.tuicore.permission.PermissionRequester
 import com.tencent.qcloud.tuicore.util.ErrorMessageConverter
 import com.tencent.qcloud.tuicore.util.SPUtils
 import com.tencent.qcloud.tuikit.tuicallkit.data.Constants
@@ -73,7 +71,6 @@ class EngineManager private constructor(context: Context) {
             return
         }
         if (list.size >= Constants.MAX_USER) {
-            showToast(getCompatString(R.string.call_user_exceed_limit))
             Log.e(TAG_CALL_ENGINE, "calls failed, exceeding max user number: 9")
             callback?.onError(TUICallDefine.ERROR_PARAM_INVALID, getCompatString(R.string.call_fail_for_exceeding_max_user))
             return
@@ -116,7 +113,6 @@ class EngineManager private constructor(context: Context) {
 
                     override fun onError(errCode: Int, errMsg: String) {
                         val errMessage: String = convertErrorMsg(errCode, errMsg)
-                        showToast(errMessage)
                         Log.e(TAG_CALL_ENGINE, "calls errCode:$errCode, errMsg:$errMessage")
                         callback?.onError(errCode, errMessage)
                     }

+ 3 - 29
module/call/src/main/java/com/tencent/qcloud/tuikit/tuicallkit/utils/PermissionRequest.kt

@@ -13,8 +13,6 @@ import com.adealink.weparty.commonui.ext.getActivity
 import com.adealink.weparty.permission.PermissionUtils
 import com.tencent.cloud.tuikit.engine.call.TUICallDefine
 import com.tencent.qcloud.tuicore.TUIConfig
-import com.tencent.qcloud.tuicore.TUIConstants
-import com.tencent.qcloud.tuicore.TUICore
 import com.tencent.qcloud.tuicore.permission.PermissionCallback
 import com.tencent.qcloud.tuicore.permission.PermissionRequester
 
@@ -30,13 +28,13 @@ object PermissionRequest {
 
             TUICallDefine.MediaType.Audio -> {
                 permissions.add(Manifest.permission.RECORD_AUDIO)
-                tips = getMicrophonePermissionHint()
+                tips = getCompatString(R.string.call_permission_audio_tips)
             }
 
             TUICallDefine.MediaType.Video -> {
                 permissions.add(Manifest.permission.RECORD_AUDIO)
                 permissions.add(Manifest.permission.CAMERA)
-                tips = "${getMicrophonePermissionHint()}\n${getCameraPermissionHint()}"
+                tips = getCompatString(R.string.call_permission_video_tips)
             }
         }
 
@@ -81,7 +79,7 @@ object PermissionRequest {
         PermissionUtils.requestPermissions(
             activity,
             listOf(Manifest.permission.CAMERA),
-            getCameraPermissionHint(),
+            getCompatString(R.string.call_permission_camera_tips),
             onGranted = {
                 callback?.onGranted()
             },
@@ -150,30 +148,6 @@ object PermissionRequest {
         )
     }
 
-    private fun getMicrophonePermissionHint(): String {
-        val microphonePermissionsDescription = TUICore.createObject(
-            TUIConstants.Privacy.PermissionsFactory.FACTORY_NAME,
-            TUIConstants.Privacy.PermissionsFactory.PermissionsName.MICROPHONE_PERMISSIONS, null
-        ) as String?
-        return if (!microphonePermissionsDescription.isNullOrEmpty()) {
-            microphonePermissionsDescription
-        } else {
-            getCompatString(R.string.call_permission_audio_tips)
-        }
-    }
-
-    private fun getCameraPermissionHint(): String {
-        val cameraPermissionsDescription = TUICore.createObject(
-            TUIConstants.Privacy.PermissionsFactory.FACTORY_NAME,
-            TUIConstants.Privacy.PermissionsFactory.PermissionsName.CAMERA_PERMISSIONS, null
-        ) as String?
-        return if (!cameraPermissionsDescription.isNullOrEmpty()) {
-            cameraPermissionsDescription
-        } else {
-            getCompatString(R.string.call_permission_video_tips)
-        }
-    }
-
     fun isNotificationEnabled(): Boolean {
         val context = TUIConfig.getAppContext()
         if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {

+ 6 - 4
module/call/src/main/res/values-ar/strings.xml

@@ -25,9 +25,10 @@
     <string name="call_permission_separator">،</string>
     <string name="call_permission_tips">الرجاء تشغيل إذن %s أولاً</string>
     <string name="call_permission_title">ينطبق %s على الوصول إلى %s</string>
-    <string name="call_permission_audio_tips">يحتاج إلى الوصول إلى الميكروفون الخاص بك، ويمكن استخدامه لوظائف مثل مكالمة الصوت/الفيديو، ومكالمة الصوت/الفيديو الجماعية وما إلى ذلك.</string>
-    <string name="call_permission_video_tips">يحتاج إلى الوصول إلى الكاميرا الخاصة بك، ويمكن استخدامه لوظائف مثل مكالمة الفيديو ومكالمة الفيديو الجماعية وما إلى ذلك. لكي تعمل مرشحات التجميل، سنقوم بجمع معلومات الوجه التي تلتقطها الكاميرا في الوقت الفعلي لاكتشاف ملامح وجهك.</string>
-    <string name="call_permission_bluetooth_reason">لضمان إمكانية الاتصال بوظيفة البلوتوث للتواصل أثناء مكالمة الصوت/الفيديو، نحتاج إلى طلب الإذن من الأجهزة القريبة.</string>
+    <string name="call_permission_audio_tips">يجب عليك الوصول إلى الميكروفون الخاص بك ويمكن استخدامه لميزات مكالمات الصوت والفيديو.</string>
+    <string name="call_permission_video_tips">يجب عليك الوصول إلى الميكروفون والكاميرا الخاصة بك ويمكن استخدامهما لمكالمات الفيديو.</string>
+    <string name="call_permission_bluetooth_reason">لضمان إمكانية الاتصال بميزة البلوتوث للتواصل أثناء مكالمة صوتية/فيديو، نحتاج إلى طلب الإذن من الأجهزة القريبة.</string>
+    <string name="call_permission_camera_tips">يجب عليك الوصول إلى الكاميرا الخاصة بك ويمكن استخدامها لإجراء مكالمات الفيديو.</string>
     <string name="call_have_a_new_call">لديك مكالمة جديدة</string>
     <string name="call_have_a_new_audio_call_cost">دعوة محادثة صوتية، بتكلفة %s عملة/دقيقة بعد الاتصال</string>
     <string name="call_have_a_new_audio_call_earn">دعوة محادثة صوتية، احصل على %s ماسة/15 ثانية بعد الاتصال</string>
@@ -39,7 +40,6 @@
     <string name="call_error_request_refused">الحالة الحالية لا يمكن استخدام هذه الوظيفة</string>
     <string name="call_error_request_repeated">الحالة الحالية هي انتظار/قبول، يرجى عدم الاتصال بها بشكل متكرر</string>
     <string name="call_error_scene_not_support">المشهد الحالي لا يدعم هذه الوظيفة</string>
-    <string name="call_notification_channel_group_id">مدير المكالمات</string>
     <string name="call_chat_caller_waiting_tips">نداء</string>
     <string name="call_chat_called_waiting_tips">لقد تمت دعوتك إلى مكالمة صوتية</string>
     <string name="call_chat_caller_cost">دعوة محادثة صوتية، التكلفة %s[icon]/دقيقة بعد الاتصال</string>
@@ -59,4 +59,6 @@
     <string name="call_media_conflict_remind">لا تذكرني مرة أخرى</string>
     <string name="call_video_camera_off">الكاميرا مغلقة</string>
     <string name="call_fail_for_calling_now">حاليا في مكالمة</string>
+    <string name="call_permissoin_float_window">تتطلب هذه الميزة تمكين النافذة العائمة وأذونات بدء التشغيل في الخلفية</string>
+    <string name="call_permission_grant_fail">فشل منح الإذن</string>
 </resources>

+ 5 - 3
module/call/src/main/res/values-zh/strings.xml

@@ -25,9 +25,10 @@
     <string name="call_permission_separator">,</string>
     <string name="call_permission_tips">请先开启%s权限</string>
     <string name="call_permission_title">%s 申请访问 %s</string>
-    <string name="call_permission_audio_tips">需要访问您的麦克风,并且可以用于音频/视频通话、群组音频/视频通话等功能。</string>
-    <string name="call_permission_video_tips">需要访问您的相机,并且可以用于视频通话、群组视频通话等功能。为了使美颜滤镜正常工作,我们将实时收集您的相机捕捉到的面部信息来检测您的面部特征。</string>
+    <string name="call_permission_audio_tips">需要访问您的麦克风,并且可以用于音频/视频通话功能。</string>
+    <string name="call_permission_video_tips">需要访问您的麦克风和相机,并且可以用于视频通话。</string>
     <string name="call_permission_bluetooth_reason">为了确保您在音频/视频通话期间可以连接到蓝牙功能进行通信,我们需要请求附近设备的许可。</string>
+    <string name="call_permission_camera_tips">需要访问您的相机,并且可以用于视频通话。</string>
     <string name="call_have_a_new_call">您有新来电</string>
     <string name="call_have_a_new_audio_call_cost">语音聊天邀请,连接后每分钟花费 %s 币</string>
     <string name="call_have_a_new_audio_call_earn">语音聊天邀请,连接后15秒获得%s钻石</string>
@@ -39,7 +40,6 @@
     <string name="call_error_request_refused">目前状态无法使用此功能</string>
     <string name="call_error_request_repeated">当前状态为等待/接受,请不要重复调用</string>
     <string name="call_error_scene_not_support">当前场景不支持该功能</string>
-    <string name="call_notification_channel_group_id">呼叫管理器</string>
     <string name="call_chat_caller_waiting_tips">呼唤</string>
     <string name="call_chat_called_waiting_tips">您受邀参加语音通话</string>
     <string name="call_chat_caller_cost">语音聊天邀请,连接后花费 %s[icon]/分钟</string>
@@ -59,4 +59,6 @@
     <string name="call_media_conflict_remind">不要再提醒我</string>
     <string name="call_video_camera_off">相机已关闭</string>
     <string name="call_fail_for_calling_now">正在通话中</string>
+    <string name="call_permissoin_float_window">该功能需要开启悬浮窗和后台启动权限</string>
+    <string name="call_permission_grant_fail">权限授予失败</string>
 </resources>

+ 5 - 4
module/call/src/main/res/values/strings.xml

@@ -25,8 +25,9 @@
     <string name="call_permission_separator">,</string>
     <string name="call_permission_tips">Please turn on the %s permission first</string>
     <string name="call_permission_title">%s applies for access to the %s</string>
-    <string name="call_permission_audio_tips">Needs access to your microphone, and it can be used for functions such as Audio/Video Call, Group Audio/Video Call etc.</string>
-    <string name="call_permission_video_tips">Needs access to your microphone and camera, and it can be used for functions such as Video Call, Group Video Call etc. For beauty filters to work, we will collect the facial information captured by your camera in real time to detect your facial features.</string>
+    <string name="call_permission_audio_tips">Needs access to your microphone, and it can be used for functions such as Audio/Video Call.</string>
+    <string name="call_permission_video_tips">Needs access to your microphone and camera, and it can be used for functions such as Video Call.</string>
+    <string name="call_permission_camera_tips">Needs access to your camera, and it can be used for functions such as Video Call.</string>
     <string name="call_permission_bluetooth_reason">To ensure that you can connect to Bluetooth function for communication during Audio/Video Call, we need to request permission of nearby devices.</string>
     <string name="call_have_a_new_call">You have a new call</string>
     <string name="call_have_a_new_audio_call_cost">Audio chat invitation, cost %s coin/min after connection</string>
@@ -39,7 +40,6 @@
     <string name="call_error_request_refused">The current status can not use this function</string>
     <string name="call_error_request_repeated">The current status is waiting/accept, please do not call it repeatedly</string>
     <string name="call_error_scene_not_support">The current scene does not support this function</string>
-    <string name="call_notification_channel_group_id">Call Manager</string>
     <string name="call_chat_caller_waiting_tips">Calling</string>
     <string name="call_chat_called_waiting_tips">You are invited to a voice call</string>
     <string name="call_chat_caller_cost">Audio chat invitation, cost %s[icon]/min after connection</string>
@@ -59,5 +59,6 @@
     <string name="call_media_conflict_remind">Don\'t remind me again</string>
     <string name="call_video_camera_off">The Camera is off</string>
     <string name="call_fail_for_calling_now">Currently on a call</string>
-    <string name="call_permissoin_float_window">该功能需要同时开启悬浮窗和后台启动权限</string>
+    <string name="call_permissoin_float_window">This feature requires enabling floating window and background startup permissions</string>
+    <string name="call_permission_grant_fail">Permission grant failed</string>
 </resources>