diff --git a/src/org/linphone/LinphoneManager.java b/src/org/linphone/LinphoneManager.java index 75542502b..0518daa4f 100644 --- a/src/org/linphone/LinphoneManager.java +++ b/src/org/linphone/LinphoneManager.java @@ -96,6 +96,7 @@ import android.os.PowerManager.WakeLock; import android.preference.PreferenceManager; import android.provider.Settings; import android.provider.Settings.SettingNotFoundException; +import android.telephony.TelephonyManager; import android.view.View; import android.view.ViewGroup; import android.view.Window; @@ -158,6 +159,8 @@ public final class LinphoneManager implements LinphoneCoreListener { mPref = PreferenceManager.getDefaultSharedPreferences(c); mPowerManager = (PowerManager) c.getSystemService(Context.POWER_SERVICE); mR = c.getResources(); + TelephonyManager tm = (TelephonyManager) c.getSystemService(Context.TELEPHONY_SERVICE); + gsmIdle = tm.getCallState() == TelephonyManager.CALL_STATE_IDLE; } private static final int LINPHONE_VOLUME_STREAM = STREAM_VOICE_CALL; @@ -752,7 +755,7 @@ public final class LinphoneManager implements LinphoneCoreListener { listenerDispatcher.onRegistrationStateChanged(state, message); } - + public static boolean gsmIdle; public void callState(final LinphoneCore lc,final LinphoneCall call, final State state, final String message) { Log.i("new state [",state,"]"); if (state == IncomingReceived && !call.equals(lc.getCurrentCall())) { @@ -764,6 +767,9 @@ public final class LinphoneManager implements LinphoneCoreListener { } if (state == IncomingReceived) { + if (!gsmIdle) { + mLc.terminateCall(call); + } // Brighten screen for at least 10 seconds WakeLock wl = mPowerManager.newWakeLock( PowerManager.ACQUIRE_CAUSES_WAKEUP diff --git a/src/org/linphone/PhoneStateChangedReceiver.java b/src/org/linphone/PhoneStateChangedReceiver.java index c5125faa0..b715cc2d3 100644 --- a/src/org/linphone/PhoneStateChangedReceiver.java +++ b/src/org/linphone/PhoneStateChangedReceiver.java @@ -18,6 +18,8 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ package org.linphone; +import org.linphone.core.Log; + import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; @@ -33,15 +35,22 @@ public class PhoneStateChangedReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { + + final String extraState = intent.getStringExtra(TelephonyManager.EXTRA_STATE); if (TelephonyManager.EXTRA_STATE_RINGING.equals(extraState) || TelephonyManager.EXTRA_STATE_OFFHOOK.equals(extraState)) { + LinphoneManager.gsmIdle = false; if (LinphoneManager.isInstanciated()) { - LinphoneManager.getLc().pauseAllCalls(); + Log.i("GSM call state changed but manager not instantiated"); + return; } + LinphoneManager.getLc().pauseAllCalls(); + } else if (TelephonyManager.EXTRA_STATE_IDLE.equals(extraState)) { + LinphoneManager.gsmIdle = true; } - // TelephonyManager.EXTRA_STATE_IDLE.equals(extraState) + // do nothing }