Merge pull request #2163 from vitorpamplona/claude/fix-webrtc-ringing-bug-pNe68
Fix audio cleanup and call state handling on Activity destroy
This commit is contained in:
@@ -118,8 +118,11 @@ class CallAudioManager(
|
||||
}
|
||||
|
||||
fun stopRingbackTone() {
|
||||
ringbackTone?.stopTone()
|
||||
ringbackTone?.release()
|
||||
try {
|
||||
ringbackTone?.stopTone()
|
||||
ringbackTone?.release()
|
||||
} catch (_: Exception) {
|
||||
}
|
||||
ringbackTone = null
|
||||
}
|
||||
|
||||
@@ -355,7 +358,10 @@ class CallAudioManager(
|
||||
}
|
||||
|
||||
private fun stopRingtone() {
|
||||
ringtone?.stop()
|
||||
try {
|
||||
ringtone?.stop()
|
||||
} catch (_: Exception) {
|
||||
}
|
||||
ringtone = null
|
||||
}
|
||||
|
||||
@@ -376,7 +382,10 @@ class CallAudioManager(
|
||||
}
|
||||
|
||||
private fun stopVibration() {
|
||||
vibrator?.cancel()
|
||||
try {
|
||||
vibrator?.cancel()
|
||||
} catch (_: Exception) {
|
||||
}
|
||||
vibrator = null
|
||||
}
|
||||
}
|
||||
|
||||
@@ -207,8 +207,28 @@ class CallActivity : AppCompatActivity() {
|
||||
}
|
||||
}
|
||||
|
||||
@OptIn(DelicateCoroutinesApi::class)
|
||||
override fun onDestroy() {
|
||||
unregisterPipReceiver()
|
||||
|
||||
// Safety net: if the Activity is destroyed while a call is still
|
||||
// ringing/offering, ensure the call is hung up so audio stops.
|
||||
val manager = ActiveCallHolder.callManager
|
||||
when (manager?.state?.value) {
|
||||
is CallState.IncomingCall -> {
|
||||
GlobalScope.launch { manager.rejectCall() }
|
||||
}
|
||||
|
||||
is CallState.Offering,
|
||||
is CallState.Connecting,
|
||||
is CallState.Connected,
|
||||
-> {
|
||||
GlobalScope.launch { manager.hangup() }
|
||||
}
|
||||
|
||||
else -> {}
|
||||
}
|
||||
|
||||
super.onDestroy()
|
||||
}
|
||||
|
||||
|
||||
+4
-1
@@ -505,9 +505,12 @@ class CallManager(
|
||||
}
|
||||
}
|
||||
|
||||
// Transition immediately so the UI stops ringing/ringback before
|
||||
// the (potentially slow) signing + relay publish completes.
|
||||
transitionToEnded(callId, peerPubKeys, EndReason.HANGUP)
|
||||
|
||||
val result = factory.createGroupHangup(peerPubKeys, callId, signer = signer)
|
||||
result.wraps.forEach { publishEvent(it) }
|
||||
transitionToEnded(callId, peerPubKeys, EndReason.HANGUP)
|
||||
}
|
||||
|
||||
fun onPeerHangup(event: CallHangupEvent) {
|
||||
|
||||
Reference in New Issue
Block a user