Catch some UI races

Stephen Paul Weber created

Change summary

src/main/java/eu/siacs/conversations/ui/RtpSessionActivity.java     | 7 
src/main/java/eu/siacs/conversations/xmpp/jingle/WebRTCWrapper.java | 7 
2 files changed, 12 insertions(+), 2 deletions(-)

Detailed changes

src/main/java/eu/siacs/conversations/ui/RtpSessionActivity.java 🔗

@@ -325,7 +325,12 @@ public class RtpSessionActivity extends XmppActivity
             retractSessionProposal();
             finish();
         } else {
-            requireRtpConnection().endCall();
+            try {
+                requireRtpConnection().endCall();
+            } catch (final IllegalStateException e) {
+                // No call, already done
+                finish();
+            }
         }
     }
 

src/main/java/eu/siacs/conversations/xmpp/jingle/WebRTCWrapper.java 🔗

@@ -719,7 +719,12 @@ public class WebRTCWrapper {
     public boolean applyDtmfTone(String tone) {
         if (localAudioTrack == null || localAudioTrack.rtpSender == null) return false;
 
-        localAudioTrack.rtpSender.dtmf().insertDtmf(tone, TONE_DURATION, 100);
+        try {
+            localAudioTrack.rtpSender.dtmf().insertDtmf(tone, TONE_DURATION, 100);
+        } catch (final IllegalStateException e) {
+            // Race condition, DtmfSender has been disposed
+            return false;
+        }
         final var handler = new android.os.Handler(android.os.Looper.getMainLooper());
         handler.post(() -> {
             final var toneGenerator = new ToneGenerator(AudioManager.STREAM_VOICE_CALL, DEFAULT_TONE_VOLUME);