From a8324a0dd4e20b1ea3d93514b487fe54dfa48edc Mon Sep 17 00:00:00 2001 From: Phillip Davis Date: Fri, 31 Oct 2025 14:58:05 -0400 Subject: [PATCH] try-catch `new ToneGenerator` and log errors trouble reproducing reports of failure stemming from `WebRTCWrapper.applyDtmfTone` failing on this constructor, specifically: ``` at android.media.ToneGenerator.native_setup(Native Method) at android.media.ToneGenerator.(ToneGenerator.java:751) ``` so we log the error for next time and catch it to prevent crashing, and instead just dont play the tone --- .../conversations/xmpp/jingle/WebRTCWrapper.java | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/main/java/eu/siacs/conversations/xmpp/jingle/WebRTCWrapper.java b/src/main/java/eu/siacs/conversations/xmpp/jingle/WebRTCWrapper.java index 20609f943694a7da6d864fa4c12caaaf32f20d1b..6792af2ee406c265a9973a9e7e6e9368236af32d 100644 --- a/src/main/java/eu/siacs/conversations/xmpp/jingle/WebRTCWrapper.java +++ b/src/main/java/eu/siacs/conversations/xmpp/jingle/WebRTCWrapper.java @@ -735,9 +735,14 @@ public class WebRTCWrapper { } 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); - toneGenerator.startTone(TONE_CODES.get(tone), TONE_DURATION); - handler.postDelayed(() -> toneGenerator.release(), TONE_DURATION+2); + try { + final var toneGenerator = new ToneGenerator(AudioManager.STREAM_VOICE_CALL, DEFAULT_TONE_VOLUME); + toneGenerator.startTone(TONE_CODES.get(tone), TONE_DURATION); + handler.postDelayed(() -> toneGenerator.release(), TONE_DURATION+2); + Log.d(EXTENDED_LOGGING_TAG, "tone generator created"); + } catch (final RuntimeException e) { + Log.e(EXTENDED_LOGGING_TAG, "could not create tone generator for DTMF feedback", e); + } }); return true;