From a1992d7c81a15be8bed4648008b2a308f7d68a8e Mon Sep 17 00:00:00 2001 From: Simon Morlat Date: Thu, 22 Sep 2011 10:55:47 +0200 Subject: [PATCH] fix inconsistency when a second call arrives --- src/org/linphone/DialerActivity.java | 21 +++++++++++++++------ src/org/linphone/core/LinphoneCallImpl.java | 6 ++---- src/org/linphone/core/LinphoneCoreImpl.java | 10 ++-------- submodules/linphone | 2 +- 4 files changed, 20 insertions(+), 19 deletions(-) diff --git a/src/org/linphone/DialerActivity.java b/src/org/linphone/DialerActivity.java index 7fb342c5c..d5f67098b 100644 --- a/src/org/linphone/DialerActivity.java +++ b/src/org/linphone/DialerActivity.java @@ -82,6 +82,7 @@ public class DialerActivity extends SoftVolumeActivity implements LinphoneGuiLis private PowerManager.WakeLock mWakeLock; private SharedPreferences mPref; + private LinphoneCall mCurrentCall; private boolean useIncallActivity; private boolean useVideoActivity; @@ -394,11 +395,13 @@ public class DialerActivity extends SoftVolumeActivity implements LinphoneGuiLis } if (state==LinphoneCall.State.OutgoingInit){ + mCurrentCall=call; enterIncallMode(lc); if (!LinphoneManager.getInstance().shareMyCamera()) call.enableCamera(false); LinphoneActivity.instance().startOrientationSensor(); }else if (state==LinphoneCall.State.IncomingReceived){ + mCurrentCall=call; callPending(call); if (!LinphoneManager.getInstance().shareMyCamera()) call.enableCamera(false); @@ -408,13 +411,19 @@ public class DialerActivity extends SoftVolumeActivity implements LinphoneGuiLis enterIncallMode(lc); } }else if (state==LinphoneCall.State.Error){ - if (mWakeLock.isHeld()) mWakeLock.release(); - showToast(R.string.call_error, message); - exitCallMode(); - LinphoneActivity.instance().stopOrientationSensor(); + if (mCurrentCall==call){ + if (mWakeLock.isHeld()) mWakeLock.release(); + showToast(R.string.call_error, message); + exitCallMode(); + LinphoneActivity.instance().stopOrientationSensor(); + mCurrentCall=null; + } }else if (state==LinphoneCall.State.CallEnd){ - exitCallMode(); - LinphoneActivity.instance().stopOrientationSensor(); + if (mCurrentCall==call){ + exitCallMode(); + LinphoneActivity.instance().stopOrientationSensor(); + mCurrentCall=null; + } } } diff --git a/src/org/linphone/core/LinphoneCallImpl.java b/src/org/linphone/core/LinphoneCallImpl.java index db8b3f733..ceb541ed0 100644 --- a/src/org/linphone/core/LinphoneCallImpl.java +++ b/src/org/linphone/core/LinphoneCallImpl.java @@ -23,8 +23,7 @@ class LinphoneCallImpl implements LinphoneCall { protected final long nativePtr; boolean ownPtr = false; - native private void ref(long ownPtr); - native private void unref(long ownPtr); + native private void finalize(long nativePtr); native private long getCallLog(long nativePtr); private native boolean isIncoming(long nativePtr); native private long getRemoteAddress(long nativePtr); @@ -46,10 +45,9 @@ class LinphoneCallImpl implements LinphoneCall { protected LinphoneCallImpl(long aNativePtr) { nativePtr = aNativePtr; - ref(nativePtr); } protected void finalize() throws Throwable { - unref(nativePtr); + finalize(nativePtr); } public LinphoneCallLog getCallLog() { long lNativePtr = getCallLog(nativePtr); diff --git a/src/org/linphone/core/LinphoneCoreImpl.java b/src/org/linphone/core/LinphoneCoreImpl.java index 01517762d..52019f96b 100644 --- a/src/org/linphone/core/LinphoneCoreImpl.java +++ b/src/org/linphone/core/LinphoneCoreImpl.java @@ -65,7 +65,7 @@ class LinphoneCoreImpl implements LinphoneCore { private native int enablePayloadType(long nativePtr, long payloadType, boolean enable); private native void enableEchoCancellation(long nativePtr,boolean enable); private native boolean isEchoCancellationEnabled(long nativePtr); - private native long getCurrentCall(long nativePtr) ; + private native Object getCurrentCall(long nativePtr) ; private native void playDtmf(long nativePtr,char dtmf,int duration); private native void stopDtmf(long nativePtr); private native void setVideoWindowId(long nativePtr, Object wid); @@ -285,12 +285,7 @@ class LinphoneCoreImpl implements LinphoneCore { public synchronized LinphoneCall getCurrentCall() { isValid(); - long lNativePtr = getCurrentCall(nativePtr); - if (lNativePtr!=0) { - return new LinphoneCallImpl(lNativePtr); - } else { - return null; - } + return (LinphoneCall)getCurrentCall(nativePtr); } public int getPlayLevel() { @@ -554,5 +549,4 @@ class LinphoneCoreImpl implements LinphoneCore { // TODO Auto-generated method stub } - } diff --git a/submodules/linphone b/submodules/linphone index ef7dc050f..776d58673 160000 --- a/submodules/linphone +++ b/submodules/linphone @@ -1 +1 @@ -Subproject commit ef7dc050f57967cb63a0b2e6a8d294ca504816b8 +Subproject commit 776d58673a12ceb309ad0e0dc50857b82e3a5d87