|
|
@@ -10,14 +10,16 @@ import com.adealink.frame.util.AppUtil
|
|
|
import com.adealink.weparty.call.constant.TAG_CALL_FLOW
|
|
|
import com.adealink.weparty.call.constant.TAG_CALL_INCOMING_VIEW
|
|
|
import com.adealink.weparty.call.util.debugToast
|
|
|
-import com.adealink.weparty.call.view.IInComing
|
|
|
-import com.adealink.weparty.call.view.floatview.InComingFloatData
|
|
|
-import com.adealink.weparty.call.view.floatview.InComingFloatView
|
|
|
-import com.adealink.weparty.call.view.floatview.IncomingNotificationView
|
|
|
+import com.adealink.weparty.call.view.floatview.incoming.IInComing
|
|
|
+import com.adealink.weparty.call.view.floatview.incoming.InComingFloatData
|
|
|
+import com.adealink.weparty.call.view.floatview.incoming.InComingFloatView
|
|
|
+import com.adealink.weparty.call.view.floatview.incoming.IncomingNotificationView
|
|
|
+import com.adealink.weparty.commonui.widget.floatview.WindowManagerProxy
|
|
|
import com.adealink.weparty.commonui.widget.floatview.data.IBaseFloatData
|
|
|
import com.adealink.weparty.module.call.Call
|
|
|
import com.adealink.weparty.module.message.Message
|
|
|
import com.adealink.weparty.module.profile.data.UserInfo
|
|
|
+import com.adealink.weparty.widget.floatview.FloatViewFactory
|
|
|
import com.tencent.cloud.tuikit.engine.call.TUICallDefine
|
|
|
import com.tencent.cloud.tuikit.engine.call.TUICallEngine
|
|
|
import com.tencent.cloud.tuikit.engine.common.TUICommonDefine
|
|
|
@@ -40,6 +42,7 @@ import com.tencent.qcloud.tuikit.tuicallkit.utils.DeviceUtils
|
|
|
import com.tencent.qcloud.tuikit.tuicallkit.utils.PermissionRequest
|
|
|
import com.tencent.qcloud.tuikit.tuicallkit.utils.ScreenWakeupHelper
|
|
|
import com.tencent.qcloud.tuikit.tuicallkit.utils.UserInfoUtils
|
|
|
+import com.tencent.trtc.TRTCCloudDef
|
|
|
import com.tencent.trtc.TRTCCloudListener
|
|
|
|
|
|
class WenextUICallKitImpl private constructor(context: Context) : TUICallKit(), ITUINotification {
|
|
|
@@ -121,23 +124,23 @@ class WenextUICallKitImpl private constructor(context: Context) : TUICallKit(),
|
|
|
|
|
|
fun queryOfflineCall() {
|
|
|
Log.d(TAG_CALL_FLOW, "queryOfflineCall start")
|
|
|
- if (TUICallDefine.Status.Accept != TUICallState.instance.selfUser.get().callStatus.get()) {
|
|
|
- val role: TUICallDefine.Role = TUICallState.instance.selfUser.get().callRole.get()
|
|
|
- val mediaType: TUICallDefine.MediaType = TUICallState.instance.mediaType.get()
|
|
|
- if (TUICallDefine.Role.None == role || TUICallDefine.MediaType.Unknown == mediaType) {
|
|
|
- return
|
|
|
- }
|
|
|
+ val selfUser = TUICallState.instance.selfUser.get()
|
|
|
+ if (TUICallDefine.Status.Accept == selfUser.callStatus.get()) {
|
|
|
+ return
|
|
|
+ }
|
|
|
|
|
|
- //The received call has been processed in #onCallReceived
|
|
|
- if (TUICallDefine.Role.Called == role && PermissionRequester.newInstance(PermissionRequester.BG_START_PERMISSION)
|
|
|
- .has()
|
|
|
- ) {
|
|
|
- return
|
|
|
- }
|
|
|
- Router.build(context, Call.Call.PATH)
|
|
|
- .setFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
|
|
|
- .start()
|
|
|
+ val role = selfUser.callRole.get()
|
|
|
+ val mediaType = TUICallState.instance.mediaType.get()
|
|
|
+ if (TUICallDefine.Role.None == role || TUICallDefine.MediaType.Unknown == mediaType) {
|
|
|
+ Log.w(TAG_CALL_FLOW, "queryOfflineCall, current status is Unknown")
|
|
|
+ return
|
|
|
}
|
|
|
+
|
|
|
+ if (TUICallDefine.Role.Called == role && PermissionRequester.newInstance(PermissionRequester.BG_START_PERMISSION).has()
|
|
|
+ ) {
|
|
|
+ return
|
|
|
+ }
|
|
|
+ handleNewCallWhenAppInForeground()
|
|
|
}
|
|
|
|
|
|
private fun registerCallingEvent() {
|
|
|
@@ -151,9 +154,12 @@ class WenextUICallKitImpl private constructor(context: Context) : TUICallKit(),
|
|
|
)
|
|
|
|
|
|
TUICore.registerEvent(Constants.EVENT_TUICALLKIT_CHANGED, Constants.EVENT_START_INCOMING_VIEW, this)
|
|
|
+ TUICore.registerEvent(Constants.EVENT_TUICALLKIT_CHANGED, Constants.EVENT_START_CALLING_VIEW, this)
|
|
|
|
|
|
//注册RTC回调
|
|
|
TUICallEngine.createInstance(context).trtcCloudInstance.addListener(mTRTCCloudListener)
|
|
|
+ //设置禁用掉重力感应
|
|
|
+ TUICallEngine.createInstance(context).trtcCloudInstance.setGSensorMode(TRTCCloudDef.TRTC_GSENSOR_MODE_DISABLE)
|
|
|
}
|
|
|
|
|
|
private val mTRTCCloudListener: TRTCCloudListener = object : TRTCCloudListener() {
|
|
|
@@ -186,6 +192,8 @@ class WenextUICallKitImpl private constructor(context: Context) : TUICallKit(),
|
|
|
if (Constants.EVENT_TUICALLKIT_CHANGED == key) {
|
|
|
if (Constants.EVENT_START_INCOMING_VIEW == subKey) {
|
|
|
handleNewCall()
|
|
|
+ } else if (Constants.EVENT_START_CALLING_VIEW == subKey) {
|
|
|
+ showCallingView()
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
@@ -200,77 +208,109 @@ class WenextUICallKitImpl private constructor(context: Context) : TUICallKit(),
|
|
|
callingVibratorFeature = CallingVibratorFeature(context)
|
|
|
screenWakeupHelper?.releaseLock()
|
|
|
|
|
|
- val hasFloatPermission = PermissionRequester.newInstance(PermissionRequester.FLOAT_PERMISSION).has()
|
|
|
- val isAppInBackground: Boolean = !DeviceUtils.isAppRunningForeground(context)
|
|
|
- val hasBgPermission = PermissionRequester.newInstance(PermissionRequester.BG_START_PERMISSION).has()
|
|
|
- val hasNotificationPermission = PermissionRequest.isNotificationEnabled()
|
|
|
- val isIMPage = isIMActivity()
|
|
|
- val isFCMData = isFCMDataNotification()
|
|
|
- val isScreenLocked = DeviceUtils.isScreenLocked(context)
|
|
|
-
|
|
|
- Log.d(
|
|
|
- TAG_CALL_INCOMING_VIEW, "handleNewCall, isScreenLocked: $isScreenLocked, " +
|
|
|
- "isAppInBackground: $isAppInBackground, " +
|
|
|
- "floatPermission: $hasFloatPermission, " +
|
|
|
- "backgroundStartPermission: $hasBgPermission, " +
|
|
|
- "notificationPermission: $hasNotificationPermission , " +
|
|
|
- "isFCMDataNotification: $isFCMData, " +
|
|
|
- "enableIncomingBanner:${TUICallState.instance.enableIncomingBanner}"
|
|
|
- )
|
|
|
+ if (BuildConfig.DEBUG) {
|
|
|
+ //val hasFloatPermission = PermissionRequester.newInstance(PermissionRequester.FLOAT_PERMISSION).has()
|
|
|
+ val isAppInBackground: Boolean = !DeviceUtils.isAppRunningForeground(context)
|
|
|
+ val hasBgPermission = PermissionRequester.newInstance(PermissionRequester.BG_START_PERMISSION).has()
|
|
|
+ val hasNotificationPermission = PermissionRequest.isNotificationEnabled()
|
|
|
+ val isIMPage = isIMActivity()
|
|
|
+ val isFCMData = isFCMDataNotification()
|
|
|
+ val isScreenLocked = DeviceUtils.isScreenLocked(context)
|
|
|
+
|
|
|
+ Log.d(
|
|
|
+ TAG_CALL_INCOMING_VIEW, "handleNewCall, isScreenLocked: $isScreenLocked, " +
|
|
|
+ "isAppInBackground: $isAppInBackground, " +
|
|
|
+ "isIMPage: $isIMPage, " +
|
|
|
+ //"floatPermission: $hasFloatPermission, " +
|
|
|
+ "backgroundStartPermission: $hasBgPermission, " +
|
|
|
+ "notificationPermission: $hasNotificationPermission , " +
|
|
|
+ "isFCMDataNotification: $isFCMData, " +
|
|
|
+ "enableIncomingBanner:${TUICallState.instance.enableIncomingBanner}"
|
|
|
+ )
|
|
|
+ }
|
|
|
|
|
|
+ val isScreenLocked = DeviceUtils.isScreenLocked(context)
|
|
|
//锁屏
|
|
|
if (isScreenLocked) {
|
|
|
- if (hasNotificationPermission) {
|
|
|
- Log.d(TAG_CALL_INCOMING_VIEW, "handleNewCall, screen is locked, show incoming notification")
|
|
|
- startSmallIncomingView(IncomingNotificationView(context))
|
|
|
- } else {
|
|
|
- Log.d(TAG_CALL_INCOMING_VIEW, "handleNewCall, screen is locked, show fullScreen")
|
|
|
- startFullScreenView()
|
|
|
- }
|
|
|
+ handleNewCallWhenScreenLocked()
|
|
|
return@post
|
|
|
}
|
|
|
|
|
|
+ val isAppInBackground: Boolean = !DeviceUtils.isAppRunningForeground(context)
|
|
|
if (isAppInBackground) {
|
|
|
//应用后台, 启动顺序, 悬浮窗 > 通知 > 后台弹出界面
|
|
|
- when {
|
|
|
- hasFloatPermission -> {
|
|
|
- startSmallIncomingView(
|
|
|
- InComingFloatView(InComingFloatData(IBaseFloatData.MODE_SYSTEM))
|
|
|
- )
|
|
|
- }
|
|
|
+ handleNewCallWhenAppInBackground()
|
|
|
+ return@post
|
|
|
+ }
|
|
|
|
|
|
- isFCMData && hasNotificationPermission -> {
|
|
|
- startSmallIncomingView(IncomingNotificationView(context))
|
|
|
- }
|
|
|
+ handleNewCallWhenAppInForeground()
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
- hasBgPermission -> {
|
|
|
- startSmallIncomingView(IncomingNotificationView(context)) //startFullScreenView()
|
|
|
- }
|
|
|
+ /**
|
|
|
+ * 锁屏
|
|
|
+ */
|
|
|
+ private fun handleNewCallWhenScreenLocked() {
|
|
|
+ val hasNotificationPermission = PermissionRequest.isNotificationEnabled()
|
|
|
+ if (hasNotificationPermission) {
|
|
|
+ Log.d(TAG_CALL_INCOMING_VIEW, "handleNewCall, screen is locked, show incoming notification")
|
|
|
+ startSmallIncomingView(IncomingNotificationView(context))
|
|
|
+ } else {
|
|
|
+ Log.d(TAG_CALL_INCOMING_VIEW, "handleNewCall, screen is locked, show fullScreen")
|
|
|
+ startFullScreenView()
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
- else -> {
|
|
|
- Log.w(TAG_CALL_INCOMING_VIEW, "App is in background with no permission")
|
|
|
- }
|
|
|
- }
|
|
|
- return@post
|
|
|
- } else {
|
|
|
- //应用前台, 启动顺序, IM页面
|
|
|
- when {
|
|
|
- isIMPage -> {
|
|
|
- startFullScreenView()
|
|
|
- }
|
|
|
+ /**
|
|
|
+ * 应用后台
|
|
|
+ */
|
|
|
+ private fun handleNewCallWhenAppInBackground() {
|
|
|
+// val hasFloatPermission = PermissionRequester.newInstance(PermissionRequester.FLOAT_PERMISSION).has()
|
|
|
+// val hasBgPermission = PermissionRequester.newInstance(PermissionRequester.BG_START_PERMISSION).has()
|
|
|
+ val hasNotificationPermission = PermissionRequest.isNotificationEnabled()
|
|
|
+ val isFCMData = isFCMDataNotification()
|
|
|
+ when {
|
|
|
+// hasFloatPermission -> {
|
|
|
+// startSmallIncomingView(
|
|
|
+// InComingFloatView(InComingFloatData(IBaseFloatData.MODE_SYSTEM))
|
|
|
+// )
|
|
|
+// }
|
|
|
+
|
|
|
+ isFCMData && hasNotificationPermission -> {
|
|
|
+ startSmallIncomingView(IncomingNotificationView(context))
|
|
|
+ }
|
|
|
|
|
|
- hasFloatPermission -> {
|
|
|
- startSmallIncomingView(
|
|
|
- InComingFloatView(InComingFloatData(IBaseFloatData.MODE_SYSTEM))
|
|
|
- )
|
|
|
- }
|
|
|
+// hasBgPermission -> {
|
|
|
+// startSmallIncomingView(IncomingNotificationView(context)) //startFullScreenView()
|
|
|
+// }
|
|
|
|
|
|
- else -> {
|
|
|
- startSmallIncomingView(
|
|
|
- InComingFloatView(InComingFloatData(IBaseFloatData.MODE_APPLICATION))
|
|
|
- )
|
|
|
- }
|
|
|
- }
|
|
|
+ else -> {
|
|
|
+ Log.w(TAG_CALL_INCOMING_VIEW, "App is in background with no permission")
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 应用前台
|
|
|
+ */
|
|
|
+ private fun handleNewCallWhenAppInForeground() {
|
|
|
+ //val hasFloatPermission = PermissionRequester.newInstance(PermissionRequester.FLOAT_PERMISSION).has()
|
|
|
+ val isIMPage = isIMActivity()
|
|
|
+ when {
|
|
|
+ isIMPage -> {
|
|
|
+ startFullScreenView()
|
|
|
+ }
|
|
|
+
|
|
|
+// hasFloatPermission -> {
|
|
|
+// startSmallIncomingView(
|
|
|
+// InComingFloatView(InComingFloatData(IBaseFloatData.MODE_SYSTEM))
|
|
|
+// )
|
|
|
+// }
|
|
|
+
|
|
|
+ else -> {
|
|
|
+ startSmallIncomingView(
|
|
|
+ InComingFloatView(InComingFloatData(IBaseFloatData.MODE_APPLICATION))
|
|
|
+ )
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
@@ -325,6 +365,26 @@ class WenextUICallKitImpl private constructor(context: Context) : TUICallKit(),
|
|
|
})
|
|
|
}
|
|
|
|
|
|
+ fun showCallingView() {
|
|
|
+ val selfCallStatus = TUICallState.instance.selfUser.get().callStatus.get()
|
|
|
+ if (TUICallDefine.Status.None == selfCallStatus) {
|
|
|
+ Log.d(TAG_CALL_FLOW, "startCallingView return, for selfUser.callStatus(${selfCallStatus}) == None")
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ val floatViewAdded = WindowManagerProxy.getWindowManager().isFloatViewAdded(FloatViewFactory.CALL_1V1_CALLING)
|
|
|
+ if (floatViewAdded) {
|
|
|
+ Log.d(TAG_CALL_FLOW, "startCallingView return, for callingFloatView is show")
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ if (TUICallState.instance.scene.get() == TUICallDefine.Scene.GROUP_CALL) {
|
|
|
+ Log.d(TAG_CALL_FLOW, "startCallingView return, for unsupported GROUP_CALL scene")
|
|
|
+ return
|
|
|
+ }
|
|
|
+ EngineManager.instance.showCallingFloatWindow()
|
|
|
+ }
|
|
|
+
|
|
|
private fun initCallEngine() {
|
|
|
TUICallEngine.createInstance(context).init(
|
|
|
TUILogin.getSdkAppId(), TUILogin.getLoginUser(), TUILogin.getUserSig(), object : TUICommonDefine.Callback {
|