Reject incoming sip calls when using GSM.

This commit is contained in:
Guillaume Beraudo 2011-10-18 16:13:34 +02:00
parent c4838ad1fa
commit 353ef0cf37
2 changed files with 18 additions and 3 deletions

View file

@ -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

View file

@ -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
}