|
|
@@ -0,0 +1,91 @@
|
|
|
+package com.tencent.qcloud.tuikit.tuicallkit.manager.bridge
|
|
|
+
|
|
|
+import android.app.Activity
|
|
|
+import android.content.Context
|
|
|
+import android.os.Bundle
|
|
|
+import com.adealink.frame.util.ActivityLifecycleCallbacksExt
|
|
|
+import com.adealink.frame.util.AppUtil
|
|
|
+import com.adealink.weparty.call.CallActivity
|
|
|
+import com.tencent.qcloud.tuicore.TUIConstants
|
|
|
+import com.tencent.qcloud.tuicore.TUICore
|
|
|
+import com.tencent.qcloud.tuicore.TUILogin
|
|
|
+import com.tencent.qcloud.tuikit.tuicallkit.TUICallKitImpl
|
|
|
+import com.tencent.qcloud.tuikit.tuicallkit.common.data.Constants
|
|
|
+
|
|
|
+/**
|
|
|
+ * `TUICallKit` uses `ContentProvider` to be registered with `TUICore`.
|
|
|
+ * (`TUICore` is the connection and communication class of each component)
|
|
|
+ */
|
|
|
+class CallServiceInitializer private constructor(context: Context) : ActivityLifecycleCallbacksExt {
|
|
|
+
|
|
|
+ companion object {
|
|
|
+ private var instance: CallServiceInitializer? = null
|
|
|
+ fun createInstance(context: Context): CallServiceInitializer {
|
|
|
+ if (null == instance) {
|
|
|
+ synchronized(CallServiceInitializer::class.java) {
|
|
|
+ if (null == instance) {
|
|
|
+ instance = CallServiceInitializer(context)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return instance!!
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ init {
|
|
|
+ val callingService: CallKitService = CallKitService.sharedInstance(context)
|
|
|
+ TUICore.registerService(TUIConstants.TUICalling.SERVICE_NAME, callingService)
|
|
|
+
|
|
|
+ val audioRecordService = TUIAudioMessageRecordService(context)
|
|
|
+ TUICore.registerService(
|
|
|
+ TUIConstants.TUICalling.SERVICE_NAME_AUDIO_RECORD,
|
|
|
+ audioRecordService
|
|
|
+ )
|
|
|
+ TUICallKitImpl.createInstance(context)
|
|
|
+
|
|
|
+ AppUtil.registerActivityLifecycleCallbacks(this)
|
|
|
+ }
|
|
|
+
|
|
|
+ private var foregroundActivities = 0
|
|
|
+ private var isChangingConfiguration = false
|
|
|
+ override fun onActivityCreated(activity: Activity, bundle: Bundle?) {}
|
|
|
+ override fun onActivityStarted(activity: Activity) {
|
|
|
+ if (isMiPushActivity(activity)) {
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ foregroundActivities++
|
|
|
+ if (foregroundActivities == 1 && !isChangingConfiguration) {
|
|
|
+ // The Call page exits the background and re-enters without repeatedly pulling up the page.
|
|
|
+ if (Constants.CALL_FRAMEWORK_NATIVE == Constants.framework &&
|
|
|
+ TUILogin.isUserLogined() && activity !is CallActivity
|
|
|
+ ) {
|
|
|
+ TUICallKitImpl.createInstance(AppUtil.appContext).queryOfflineCall()
|
|
|
+ }
|
|
|
+ }
|
|
|
+ isChangingConfiguration = false
|
|
|
+ }
|
|
|
+
|
|
|
+ override fun onActivityResumed(activity: Activity) {}
|
|
|
+ override fun onActivityPaused(activity: Activity) {}
|
|
|
+ override fun onActivityStopped(activity: Activity) {
|
|
|
+ if (isMiPushActivity(activity)) {
|
|
|
+ return
|
|
|
+ }
|
|
|
+ foregroundActivities--
|
|
|
+ isChangingConfiguration = activity.isChangingConfigurations
|
|
|
+ }
|
|
|
+
|
|
|
+ override fun onActivitySaveInstanceState(activity: Activity, outState: Bundle) {}
|
|
|
+ override fun onActivityDestroyed(activity: Activity) {}
|
|
|
+
|
|
|
+ private fun isMiPushActivity(activity: Activity): Boolean {
|
|
|
+ try {
|
|
|
+ val clazzName = activity.componentName.className
|
|
|
+ return clazzName.contains("mipush.sdk")
|
|
|
+ } catch (e: Exception) {
|
|
|
+ e.printStackTrace()
|
|
|
+ }
|
|
|
+ return false
|
|
|
+ }
|
|
|
+}
|