From 648b4ae71b9bbb271639fe109e556eafe31e59c7 Mon Sep 17 00:00:00 2001 From: Simon Morlat Date: Tue, 12 Jun 2018 15:37:48 +0200 Subject: [PATCH] Fix crash when call stats are displayed at the same time as the call is terminated. --- src/android/org/linphone/call/CallActivity.java | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/android/org/linphone/call/CallActivity.java b/src/android/org/linphone/call/CallActivity.java index 4cdd20c31..2fe3a2db2 100644 --- a/src/android/org/linphone/call/CallActivity.java +++ b/src/android/org/linphone/call/CallActivity.java @@ -71,6 +71,7 @@ import org.linphone.activities.LinphoneActivity; import org.linphone.activities.LinphoneGenericActivity; import org.linphone.core.Address; import org.linphone.core.Call; +import org.linphone.core.CallListenerStub; import org.linphone.core.Call.State; import org.linphone.core.CallParams; import org.linphone.core.CallStats; @@ -138,6 +139,7 @@ public class CallActivity extends LinphoneGenericActivity implements OnClickList private TimerTask mTask; private HashMap mEncoderTexts; private HashMap mDecoderTexts; + private CallListenerStub mCallListener; private boolean oldIsSpeakerEnabled = false; @@ -1706,6 +1708,16 @@ public class CallActivity extends LinphoneGenericActivity implements OnClickList final View videoLayout = view.findViewById(R.id.callStatsVideo); final View audioLayout = view.findViewById(R.id.callStatsAudio); + mCallListener = new CallListenerStub(){ + public void onStateChanged(Call call, Call.State cstate, String message){ + if (cstate == Call.State.End || cstate == Call.State.Error){ + if (mTimer != null) { + Log.i("Call is terminated, stopping timer in charge of stats refreshing."); + mTimer.cancel(); + } + } + } + }; mTimer = new Timer(); mTask = new TimerTask() { @@ -1762,6 +1774,7 @@ public class CallActivity extends LinphoneGenericActivity implements OnClickList }); } }; + call.addListener(mCallListener); mTimer.scheduleAtFixedRate(mTask, 0, 1000); }