#16928: Fix getCallInstance from CallList
diff --git a/src/com/savoirfairelinux/sflphone/client/SFLPhoneHome.java b/src/com/savoirfairelinux/sflphone/client/SFLPhoneHome.java
index 982c91f..9745636 100644
--- a/src/com/savoirfairelinux/sflphone/client/SFLPhoneHome.java
+++ b/src/com/savoirfairelinux/sflphone/client/SFLPhoneHome.java
@@ -94,7 +94,7 @@
private boolean mBound = false;
private ISipService service;
public AccountList mAccountList = new AccountList();
- public CallList mCallList = new CallList();
+ public CallList mCallList = new CallList(this);
/**
* The {@link ViewPager} that will host the section contents.
@@ -506,7 +506,9 @@
info.mEmail = "coolGuy@coolGuy.com";
SipCall call = CallList.getCallInstance(info);
- call.launchCallActivity(this);
+ // call.launchCallActivity(this);
+ call.printCallInfo();
+ call.placeCall();
Log.d(TAG, "service.placeCall(" + accountID + ", " + callID + ", " + to + ");");
service.placeCall(accountID, callID, to);
@@ -542,18 +544,4 @@
buttonCall.setImageResource(R.drawable.ic_call);
}
-
-/*
- private void launchCallActivity(SipCall call)
- {
- Log.i(TAG, "Launch Call Activity");
- Bundle bundle = new Bundle();
- // bundle.putString("CallID", call.mCallInfo.mCallID);
- call.mCallInfo.mCallID = "UNEBELLEPOULE";
- bundle.putParcelable("CallInfo", call.mCallInfo);
- Intent intent = new Intent().setClass(this, CallActivity.class);
- intent.putExtras(bundle);
- startActivity(intent);
- }
- */
}
diff --git a/src/com/savoirfairelinux/sflphone/client/SipCall.java b/src/com/savoirfairelinux/sflphone/client/SipCall.java
index e630672..3ef8265 100644
--- a/src/com/savoirfairelinux/sflphone/client/SipCall.java
+++ b/src/com/savoirfairelinux/sflphone/client/SipCall.java
@@ -52,10 +52,11 @@
public static int CALL_STATE_INCOMING = 1;
public static int CALL_STATE_RINGING = 2;
public static int CALL_STATE_CURRENT = 3;
- public static int CALL_STATE_BUSY = 4;
- public static int CALL_STATE_FAILURE = 5;
- public static int CALL_STATE_HOLD = 6;
- public static int CALL_STATE_UNHOLD = 7;
+ public static int CALL_STATE_HUNGUP = 4;
+ public static int CALL_STATE_BUSY = 5;
+ public static int CALL_STATE_FAILURE = 6;
+ public static int CALL_STATE_HOLD = 7;
+ public static int CALL_STATE_UNHOLD = 8;
public static int MEDIA_STATE_NONE = 0; // No media currently
public static int MEDIA_STATE_ACTIVE = 1; // Media is active
@@ -66,6 +67,7 @@
public static class CallInfo implements Parcelable
{
public String mCallID = "";
+ public String mAccountID = "";
public String mDisplayName = "";
public String mPhone = "";
public String mEmail = "";
@@ -84,6 +86,7 @@
// Don't mess with this order!!!
list.add(mCallID);
+ list.add(mAccountID);
list.add(mDisplayName);
list.add(mPhone);
list.add(mEmail);
@@ -112,10 +115,11 @@
// Don't mess with this order!!!
mCallID = list.get(0);
- mDisplayName = list.get(1);
- mPhone = list.get(2);
- mEmail = list.get(3);
- mRemoteContact = list.get(4);
+ mAccountID = list.get(1);
+ mDisplayName = list.get(2);
+ mPhone = list.get(3);
+ mEmail = list.get(4);
+ mRemoteContact = list.get(5);
mCallState = in.readInt();
mMediaState = in.readInt();
@@ -145,6 +149,14 @@
return mCallInfo.mCallID;
}
+ public void setAccountID(String accountID) {
+ mCallInfo.mAccountID = accountID;
+ }
+
+ public String getAccountID() {
+ return mCallInfo.mAccountID;
+ }
+
public void setDisplayName(String displayName) {
mCallInfo.mDisplayName = displayName;
}
@@ -197,7 +209,12 @@
{
if(mCallElementList != null)
mCallElementList.addCall(this);
- // mManager.callmanagerJNI.placeCall("IP2IP", "CALL1234", "192.168.40.35");
+ }
+
+ public void receiveCall()
+ {
+ if(mCallElementList != null)
+ mCallElementList.addCall(this);
}
public void answer()
@@ -237,6 +254,16 @@
Log.i(TAG, "Send text message");
}
+ public void printCallInfo()
+ {
+ Log.i(TAG, "CallInfo: CallID: " + mCallInfo.mCallID);
+ Log.i(TAG, " AccountID: " + mCallInfo.mAccountID);
+ Log.i(TAG, " Display Name: " + mCallInfo.mDisplayName);
+ Log.i(TAG, " Phone: " + mCallInfo.mPhone);
+ Log.i(TAG, " Email: " + mCallInfo.mEmail);
+ Log.i(TAG, " Contact: " + mCallInfo.mRemoteContact);
+ }
+
public void launchCallActivity(Context context)
{
Log.i(TAG, "Launch Call Activity");
diff --git a/src/com/savoirfairelinux/sflphone/utils/CallList.java b/src/com/savoirfairelinux/sflphone/utils/CallList.java
index 2ac5b08..051bed9 100644
--- a/src/com/savoirfairelinux/sflphone/utils/CallList.java
+++ b/src/com/savoirfairelinux/sflphone/utils/CallList.java
@@ -47,6 +47,7 @@
{
static final String TAG = "CallList";
static ArrayList<SipCall> mList = new ArrayList<SipCall>();
+ private Context mContext = null;
private enum Signals {
NEW_CALL_CREATED,
@@ -60,8 +61,11 @@
*/
public static SipCall getCallInstance(SipCall.CallInfo info)
{
- if(mList.isEmpty())
- return new SipCall(info);
+ if(mList.isEmpty()) {
+ SipCall call = new SipCall(info);
+ mList.add(call);
+ return call;
+ }
for(SipCall sipcall : mList) {
if(sipcall.mCallInfo.mCallID.equals(info.mCallID)) {
@@ -75,6 +79,10 @@
return call;
}
+ public CallList(Context context) {
+ mContext = context;
+ }
+
@Override
public void onReceive(Context context, Intent intent)
{
@@ -85,17 +93,18 @@
} else if(signalName.equals(CallManagerCallBack.CALL_STATE_CHANGED)) {
processCallStateChangedSignal(intent);
} else if(signalName.equals(CallManagerCallBack.INCOMING_CALL)) {
+ processIncomingCallSignal(intent);
}
}
private void processCallStateChangedSignal(Intent intent) {
Bundle bundle = intent.getBundleExtra("com.savoirfairelinux.sflphone.service.newstate");
- String callID = bundle.getString("CallID");
- String newState = bundle.getString("State");
SipCall.CallInfo info = new SipCall.CallInfo();
- info.mCallID = callID;
-
+ info.mCallID = bundle.getString("CallID");
+
+ String newState = bundle.getString("State");
+
SipCall call = getCallInstance(info);
if(newState.equals("INCOMING")) {
call.setCallState(SipCall.CALL_STATE_INCOMING);
@@ -103,6 +112,11 @@
call.setCallState(SipCall.CALL_STATE_RINGING);
} else if(newState.equals("CURRENT")) {
call.setCallState(SipCall.CALL_STATE_CURRENT);
+ } else if(newState.equals("HUNGUP")) {
+ Log.i(TAG, " !!!!!!!!! RECEIVING NEW STATE HANGUP");
+ call.printCallInfo();
+ call.hangup();
+ call.setCallState(SipCall.CALL_STATE_HUNGUP);
} else if(newState.equals("BUSY")) {
call.setCallState(SipCall.CALL_STATE_BUSY);
} else if(newState.equals("FAILURE")) {
@@ -111,6 +125,22 @@
call.setCallState(SipCall.CALL_STATE_HOLD);
} else if(newState.equals("UNHOLD")) {
call.setCallState(SipCall.CALL_STATE_UNHOLD);
+ } else {
+ call.setCallState(SipCall.CALL_STATE_NULL);
}
}
+
+ private void processIncomingCallSignal(Intent intent) {
+ Bundle bundle = intent.getBundleExtra("com.savoirfairelinux.sflphone.service.newcall");
+ String accountID = bundle.getString("AccountID");
+ String callID = bundle.getString("CallID");
+ String from = bundle.getString("From");
+
+ SipCall.CallInfo info = new SipCall.CallInfo();
+ info.mCallID = callID;
+
+ SipCall call = getCallInstance(info);
+ call.placeCall();
+ call.launchCallActivity(mContext);
+ }
}