Skip to content

Commit

Permalink
Merge pull request #8674 from vector-im/feature/bma/infiniteRingCall
Browse files Browse the repository at this point in the history
Ensure Background sync is not stopped when there is an active call.
  • Loading branch information
bmarty authored Nov 23, 2023
2 parents 63ef40f + 8d85d04 commit 0c1f190
Show file tree
Hide file tree
Showing 3 changed files with 29 additions and 6 deletions.
1 change: 1 addition & 0 deletions changelog.d/4066.bugfix
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Stop incoming call ringing if the call is cancelled or answered on another session.
28 changes: 23 additions & 5 deletions vector-app/src/main/java/im/vector/app/VectorApplication.kt
Original file line number Diff line number Diff line change
Expand Up @@ -108,6 +108,7 @@ class VectorApplication :
@Inject lateinit var buildMeta: BuildMeta
@Inject lateinit var leakDetector: LeakDetector
@Inject lateinit var vectorLocale: VectorLocale
@Inject lateinit var webRtcCallManager: WebRtcCallManager

// font thread handler
private var fontThreadHandler: Handler? = null
Expand Down Expand Up @@ -167,20 +168,37 @@ class VectorApplication :
notificationUtils.createNotificationChannels()

ProcessLifecycleOwner.get().lifecycle.addObserver(object : DefaultLifecycleObserver {
private var stopBackgroundSync = false

override fun onResume(owner: LifecycleOwner) {
Timber.i("App entered foreground")
fcmHelper.onEnterForeground(activeSessionHolder)
activeSessionHolder.getSafeActiveSessionAsync {
it?.syncService()?.stopAnyBackgroundSync()
if (webRtcCallManager.currentCall.get() == null) {
Timber.i("App entered foreground and no active call: stop any background sync")
activeSessionHolder.getSafeActiveSessionAsync {
it?.syncService()?.stopAnyBackgroundSync()
}
} else {
Timber.i("App entered foreground: there is an active call, set stopBackgroundSync to true")
stopBackgroundSync = true
}
// activeSessionHolder.getSafeActiveSession()?.also {
// it.syncService().stopAnyBackgroundSync()
// }
}

override fun onPause(owner: LifecycleOwner) {
Timber.i("App entered background")
fcmHelper.onEnterBackground(activeSessionHolder)

if (stopBackgroundSync) {
if (webRtcCallManager.currentCall.get() == null) {
Timber.i("App entered background: stop any background sync")
activeSessionHolder.getSafeActiveSessionAsync {
it?.syncService()?.stopAnyBackgroundSync()
}
stopBackgroundSync = false
} else {
Timber.i("App entered background: there is an active call do not stop background sync")
}
}
}
})
ProcessLifecycleOwner.get().lifecycle.addObserver(spaceStateHandler)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -139,6 +139,7 @@ class WebRtcCallManager @Inject constructor(
private val rootEglBase by lazy { EglUtils.rootEglBase }

private var isInBackground: Boolean = true
private var syncStartedWhenInBackground: Boolean = false

override fun onResume(owner: LifecycleOwner) {
isInBackground = false
Expand Down Expand Up @@ -274,13 +275,15 @@ class WebRtcCallManager @Inject constructor(
peerConnectionFactory = null
audioManager.setMode(CallAudioManager.Mode.DEFAULT)
// did we start background sync? so we should stop it
if (isInBackground) {
if (syncStartedWhenInBackground) {
if (!unifiedPushHelper.isBackgroundSync()) {
Timber.tag(loggerTag.value).v("Sync started when in background, stop it")
currentSession?.syncService()?.stopAnyBackgroundSync()
} else {
// for fdroid we should not stop, it should continue syncing
// maybe we should restore default timeout/delay though?
}
syncStartedWhenInBackground = false
}
}
}
Expand Down Expand Up @@ -383,6 +386,7 @@ class WebRtcCallManager @Inject constructor(
if (isInBackground) {
if (!unifiedPushHelper.isBackgroundSync()) {
// only for push version as fdroid version is already doing it?
syncStartedWhenInBackground = true
currentSession?.syncService()?.startAutomaticBackgroundSync(30, 0)
} else {
// Maybe increase sync freq? but how to set back to default values?
Expand Down

0 comments on commit 0c1f190

Please sign in to comment.