* #24121 First integration of IM working
diff --git a/src/com/savoirfairelinux/sflphone/client/CallActivity.java b/src/com/savoirfairelinux/sflphone/client/CallActivity.java
index a35e307..e5feab3 100644
--- a/src/com/savoirfairelinux/sflphone/client/CallActivity.java
+++ b/src/com/savoirfairelinux/sflphone/client/CallActivity.java
@@ -234,4 +234,14 @@
}
+ public void onRecordCall() {
+ mCall.notifyServiceRecord(service);
+
+ }
+
+ public void onSendMessage(String msg) {
+ mCall.notifyServiceSendMsg(service,msg);
+
+ }
+
}
diff --git a/src/com/savoirfairelinux/sflphone/client/SFLPhoneHomeActivity.java b/src/com/savoirfairelinux/sflphone/client/SFLPhoneHomeActivity.java
index bbd7363..dd1a746 100644
--- a/src/com/savoirfairelinux/sflphone/client/SFLPhoneHomeActivity.java
+++ b/src/com/savoirfairelinux/sflphone/client/SFLPhoneHomeActivity.java
@@ -30,6 +30,8 @@
*/
package com.savoirfairelinux.sflphone.client;
+import java.io.ObjectInputStream.GetField;
+
import android.app.ActionBar;
import android.app.Activity;
import android.app.Fragment;
@@ -48,6 +50,7 @@
import android.view.Menu;
import android.view.MenuItem;
import android.widget.ImageButton;
+import android.widget.Toast;
import com.savoirfairelinux.sflphone.R;
import com.savoirfairelinux.sflphone.fragments.CallElementListFragment;
@@ -272,6 +275,16 @@
mCallElementList.updateCall(cID, state);
}
+
+ @Override
+ public void incomingText(Intent msg) throws RemoteException {
+ Bundle b = msg.getBundleExtra("com.savoirfairelinux.sflphone.service.newtext");
+ b.getString("CallID");
+ String from = b.getString("From");
+ String mess = b.getString("Msg");
+ Toast.makeText(getApplicationContext(), "text from "+from+" : " + mess , Toast.LENGTH_LONG).show();
+
+ }
};
@Override
diff --git a/src/com/savoirfairelinux/sflphone/fragments/AccountManagementFragment.java b/src/com/savoirfairelinux/sflphone/fragments/AccountManagementFragment.java
index 5435c8b..3adf846 100644
--- a/src/com/savoirfairelinux/sflphone/fragments/AccountManagementFragment.java
+++ b/src/com/savoirfairelinux/sflphone/fragments/AccountManagementFragment.java
@@ -41,6 +41,7 @@
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
+import android.os.Environment;
import android.os.RemoteException;
import android.preference.Preference;
import android.preference.PreferenceCategory;
diff --git a/src/com/savoirfairelinux/sflphone/fragments/OngoingCallFragment.java b/src/com/savoirfairelinux/sflphone/fragments/OngoingCallFragment.java
index dca9117..90eae4d 100644
--- a/src/com/savoirfairelinux/sflphone/fragments/OngoingCallFragment.java
+++ b/src/com/savoirfairelinux/sflphone/fragments/OngoingCallFragment.java
@@ -5,109 +5,115 @@
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
-import android.view.ViewGroup;
import android.view.View.OnClickListener;
+import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import com.savoirfairelinux.sflphone.R;
import com.savoirfairelinux.sflphone.client.CallActivity;
-import com.savoirfairelinux.sflphone.client.CallActivity.CallFragment;
import com.savoirfairelinux.sflphone.model.SipCall;
-public class OngoingCallFragment extends Fragment implements CallActivity.CallFragment, OnClickListener
-{
- private CallActivity listener;
- private Button end_btn, suspend_btn;
- private TextView callstatus_txt;
- private TextView calllength_txt;
- private TextView contact_name_txt;
+public class OngoingCallFragment extends Fragment implements CallActivity.CallFragment, OnClickListener {
+ private CallActivity listener;
+ private Button end_btn, suspend_btn;
+ private TextView callstatus_txt;
+ private TextView calllength_txt;
+ private TextView contact_name_txt;
- private SipCall mCall = null;
+ private SipCall mCall = null;
- public void setCall(SipCall call)
- {
- mCall = call;
- if(isAdded())
- updateUI();
- }
+ public void setCall(SipCall call) {
+ mCall = call;
+ if (isAdded())
+ updateUI();
+ }
- EditText transfer_txt;
- @Override
- public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
- {
- ViewGroup v = (ViewGroup) inflater.inflate(R.layout.frag_call_ongoing, container, false);
-
- transfer_txt = (EditText) v.findViewById(R.id.text_transfer);
- contact_name_txt = (TextView) v.findViewById(R.id.contact_name_txt);
- end_btn = (Button) v.findViewById(R.id.end_btn);
- suspend_btn = (Button) v.findViewById(R.id.suspend_btn);
- Button transfer_btn = (Button) v.findViewById(R.id.transfer);
- transfer_btn.setOnClickListener(new OnClickListener() {
-
+ EditText transfer_txt, msg_txt;
+
+ @Override
+ public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
+ ViewGroup v = (ViewGroup) inflater.inflate(R.layout.frag_call_ongoing, container, false);
+
+ transfer_txt = (EditText) v.findViewById(R.id.text_transfer);
+ msg_txt = (EditText) v.findViewById(R.id.text_message);
+ contact_name_txt = (TextView) v.findViewById(R.id.contact_name_txt);
+ end_btn = (Button) v.findViewById(R.id.end_btn);
+ suspend_btn = (Button) v.findViewById(R.id.suspend_btn);
+
+ ((Button) v.findViewById(R.id.transfer)).setOnClickListener(new OnClickListener() {
+
@Override
public void onClick(View v) {
listener.onCalltransfered(transfer_txt.getText().toString());
-
-
+
}
});
-
-
-
- callstatus_txt = (TextView) v.findViewById(R.id.callstatus_txt);
- calllength_txt = (TextView) v.findViewById(R.id.calllength_txt);
- end_btn.setOnClickListener(this);
- suspend_btn.setOnClickListener(this);
-
- updateUI();
- return v;
- }
+ ((Button) v.findViewById(R.id.record_call)).setOnClickListener(new OnClickListener() {
- private void updateUI()
- {
- if (mCall == null)
- return;
- contact_name_txt.setText(mCall.getDisplayName());
- callstatus_txt.setText(mCall.getCallStateString());
-
- int state = mCall.getCallStateInt();
- if(state == SipCall.CALL_STATE_HOLD) {
- suspend_btn.setText("Resume");
- } else {
- suspend_btn.setText("Suspend");
- }
- /*
- switch(mCall.getCallStateInt()) {
- case SipCall.CALL_STATE_HOLD:
- suspend_btn.setText("Resume");
- break;
- case SipCall.CALL_STATE_HOLD:
- suspend_btn.setText("Resume");
- break;
+ @Override
+ public void onClick(View v) {
+ listener.onRecordCall();
- }*/
- }
+ }
+ });
+
+ ((Button) v.findViewById(R.id.send_msg)).setOnClickListener(new OnClickListener() {
- @Override
- public void onAttach(Activity activity)
- {
- super.onAttach(activity);
- listener = (CallActivity) activity;
- }
+ @Override
+ public void onClick(View v) {
+ listener.onSendMessage(msg_txt.getText().toString());
- @Override
- public void onClick(View v)
- {
- if (v == end_btn) {
- listener.onCallEnded();
- } else if (v == suspend_btn) {
- if(mCall.getCallStateInt() == SipCall.CALL_STATE_HOLD)
- listener.onCallResumed();
- else
- listener.onCallSuspended();
- }
- }
+ }
+ });
+
+ callstatus_txt = (TextView) v.findViewById(R.id.callstatus_txt);
+ calllength_txt = (TextView) v.findViewById(R.id.calllength_txt);
+
+ end_btn.setOnClickListener(this);
+ suspend_btn.setOnClickListener(this);
+
+ updateUI();
+ return v;
+ }
+
+ private void updateUI() {
+ if (mCall == null)
+ return;
+ contact_name_txt.setText(mCall.getDisplayName());
+ callstatus_txt.setText(mCall.getCallStateString());
+
+ int state = mCall.getCallStateInt();
+ if (state == SipCall.CALL_STATE_HOLD) {
+ suspend_btn.setText("Resume");
+ } else {
+ suspend_btn.setText("Suspend");
+ }
+ /*
+ * switch(mCall.getCallStateInt()) { case SipCall.CALL_STATE_HOLD: suspend_btn.setText("Resume"); break; case SipCall.CALL_STATE_HOLD:
+ * suspend_btn.setText("Resume"); break;
+ *
+ * }
+ */
+ }
+
+ @Override
+ public void onAttach(Activity activity) {
+ super.onAttach(activity);
+ listener = (CallActivity) activity;
+ }
+
+ @Override
+ public void onClick(View v) {
+ if (v == end_btn) {
+ listener.onCallEnded();
+ } else if (v == suspend_btn) {
+ if (mCall.getCallStateInt() == SipCall.CALL_STATE_HOLD)
+ listener.onCallResumed();
+ else
+ listener.onCallSuspended();
+ }
+ }
}
\ No newline at end of file
diff --git a/src/com/savoirfairelinux/sflphone/model/SipCall.java b/src/com/savoirfairelinux/sflphone/model/SipCall.java
index caad658..fcd826e 100644
--- a/src/com/savoirfairelinux/sflphone/model/SipCall.java
+++ b/src/com/savoirfairelinux/sflphone/model/SipCall.java
@@ -34,6 +34,7 @@
import android.content.Intent;
import android.os.Bundle;
+import android.os.Environment;
import android.os.Parcel;
import android.os.Parcelable;
import android.os.RemoteException;
@@ -406,4 +407,28 @@
Log.e(TAG, "Cannot call service method", e);
}
}
+
+ public void notifyServiceRecord(ISipService service) {
+ try {
+ if(getCallStateInt() == CALL_STATE_CURRENT) {
+ service.setRecordPath(Environment.getExternalStorageDirectory().getAbsolutePath());
+ Log.w(TAG,"Recording path"+service.getRecordPath());
+ service.setRecordingCall(mCallInfo.mCallID);
+ }
+ } catch (RemoteException e) {
+ Log.e(TAG, "Cannot call service method", e);
+ }
+
+ }
+
+ public void notifyServiceSendMsg(ISipService service,String msg) {
+ try {
+ if(getCallStateInt() == CALL_STATE_CURRENT) {
+ service.sendTextMessage(mCallInfo.mCallID, msg, mCallInfo.mDisplayName);
+ }
+ } catch (RemoteException e) {
+ Log.e(TAG, "Cannot call service method", e);
+ }
+
+ }
}
diff --git a/src/com/savoirfairelinux/sflphone/service/CallManagerCallBack.java b/src/com/savoirfairelinux/sflphone/service/CallManagerCallBack.java
index 921997b..c0390e3 100644
--- a/src/com/savoirfairelinux/sflphone/service/CallManagerCallBack.java
+++ b/src/com/savoirfairelinux/sflphone/service/CallManagerCallBack.java
@@ -15,6 +15,7 @@
static public final String NEW_CALL_CREATED = "new-call-created";
static public final String CALL_STATE_CHANGED = "call-state-changed";
static public final String INCOMING_CALL = "incoming-call";
+ static public final String INCOMING_TEXT = "incoming-text";
public CallManagerCallBack(Context context) {
mContext = context;
@@ -49,6 +50,12 @@
}
@Override
+ public void on_incoming_message(String ID, String from, String msg){
+ Log.w(TAG,"on_incoming_message:"+msg);
+ sendIncomingTextMessage(ID, from, msg);
+ }
+
+ @Override
public void on_conference_removed(String confID){
Log.w(TAG,"CONFERENCE REMOVED:"+confID);
}
@@ -89,4 +96,17 @@
intent.putExtra("com.savoirfairelinux.sflphone.service.newcall", bundle);
LocalBroadcastManager.getInstance(mContext).sendBroadcast(intent);
}
+
+ private void sendIncomingTextMessage(String id, String from, String msg) {
+ Bundle bundle = new Bundle();
+
+ bundle.putString("CallID", id);
+ bundle.putString("From", from);
+ bundle.putString("Msg", msg);
+ Intent intent = new Intent(INCOMING_TEXT);
+ intent.putExtra(SIGNAL_NAME, INCOMING_TEXT);
+ intent.putExtra("com.savoirfairelinux.sflphone.service.newtext", bundle);
+ LocalBroadcastManager.getInstance(mContext).sendBroadcast(intent);
+
+ }
}
diff --git a/src/com/savoirfairelinux/sflphone/service/ConfigurationManagerJNI.java b/src/com/savoirfairelinux/sflphone/service/ConfigurationManagerJNI.java
index 765a8bf..310e5d8 100644
--- a/src/com/savoirfairelinux/sflphone/service/ConfigurationManagerJNI.java
+++ b/src/com/savoirfairelinux/sflphone/service/ConfigurationManagerJNI.java
@@ -199,6 +199,10 @@
SFLPhoneserviceJNI.ConfigurationManagerJNI_setIsAlwaysRecording(swigCPtr, this, rec);
}
+ public void setRecordingCall(String id) {
+ SFLPhoneserviceJNI.ConfigurationManagerJNI_setRecordingCall(swigCPtr, this, id);
+ }
+
public SWIGTYPE_p_int32_t getHistoryLimit() {
return new SWIGTYPE_p_int32_t(SFLPhoneserviceJNI.ConfigurationManagerJNI_getHistoryLimit(swigCPtr, this), true);
}
diff --git a/src/com/savoirfairelinux/sflphone/service/ISipClient.aidl b/src/com/savoirfairelinux/sflphone/service/ISipClient.aidl
index b845f66..068b2c1 100644
--- a/src/com/savoirfairelinux/sflphone/service/ISipClient.aidl
+++ b/src/com/savoirfairelinux/sflphone/service/ISipClient.aidl
@@ -3,4 +3,5 @@
interface ISipClient {
void incomingCall(in Intent call);
void callStateChanged(in Intent callState);
+ void incomingText(in Intent msg);
}
\ No newline at end of file
diff --git a/src/com/savoirfairelinux/sflphone/service/ISipService.aidl b/src/com/savoirfairelinux/sflphone/service/ISipService.aidl
index eb76ffb..2450f97 100644
--- a/src/com/savoirfairelinux/sflphone/service/ISipService.aidl
+++ b/src/com/savoirfairelinux/sflphone/service/ISipService.aidl
@@ -17,8 +17,18 @@
void setAccountDetails(in String accountId, in Map accountDetails);
void setAudioPlugin(in String callID);
String getCurrentAudioOutputPlugin();
+
+ /* History */
List getHistory();
+ /* Recording */
+ void setRecordPath(in String path);
+ String getRecordPath();
+ void setRecordingCall(in String id);
+
+ /* IM */
+ void sendTextMessage(in String callID, in String message, in String from);
+
void registerClient(in ISipClient callback);
void transfer(in String callID, in String to);
diff --git a/src/com/savoirfairelinux/sflphone/service/SipService.java b/src/com/savoirfairelinux/sflphone/service/SipService.java
index ef04a4c..03b5233 100644
--- a/src/com/savoirfairelinux/sflphone/service/SipService.java
+++ b/src/com/savoirfairelinux/sflphone/service/SipService.java
@@ -66,7 +66,7 @@
private ManagerImpl managerImpl;
private boolean isPjSipStackStarted = false;
ISipClient client;
-
+
int clients = 0;
private BroadcastReceiver IncomingReceiver = new BroadcastReceiver() {
@@ -79,13 +79,14 @@
try {
if (intent.getAction().contentEquals(ConfigurationManagerCallback.ACCOUNT_STATE_CHANGED)) {
Log.i(TAG, "Received" + intent.getAction());
- }else if (intent.getAction().contentEquals(ConfigurationManagerCallback.ACCOUNTS_LOADED)) {
+ } else if (intent.getAction().contentEquals(ConfigurationManagerCallback.ACCOUNTS_LOADED)) {
Log.i(TAG, "Received" + intent.getAction());
- }else if (intent.getAction().contentEquals(ConfigurationManagerCallback.ACCOUNTS_CHANGED)) {
+ } else if (intent.getAction().contentEquals(ConfigurationManagerCallback.ACCOUNTS_CHANGED)) {
Log.i(TAG, "Received" + intent.getAction());
- }
-
- if (intent.getAction().contentEquals(CallManagerCallBack.INCOMING_CALL)) {
+ } else if(intent.getAction().contentEquals(CallManagerCallBack.INCOMING_TEXT)) {
+ Log.i(TAG, "Received" + intent.getAction());
+ client.incomingText(intent);
+ } else if (intent.getAction().contentEquals(CallManagerCallBack.INCOMING_CALL)) {
Log.i(TAG, "Received" + intent.getAction());
client.incomingCall(intent);
} else if (intent.getAction().contentEquals(CallManagerCallBack.CALL_STATE_CHANGED)) {
@@ -127,7 +128,8 @@
callFilter.addAction(ConfigurationManagerCallback.ACCOUNT_STATE_CHANGED);
callFilter.addAction(ConfigurationManagerCallback.ACCOUNTS_CHANGED);
callFilter.addAction(ConfigurationManagerCallback.ACCOUNTS_LOADED);
-
+ callFilter.addAction(CallManagerCallBack.INCOMING_TEXT);
+
LocalBroadcastManager.getInstance(this).registerReceiver(IncomingReceiver, callFilter);
getExecutor().execute(new StartRunnable());
}
@@ -438,7 +440,7 @@
CurrentAudioPlugin runInstance = new CurrentAudioPlugin();
getExecutor().execute(runInstance);
while (!runInstance.isDone()) {
- Log.e(TAG,"Waiting for Nofing");
+ Log.e(TAG, "Waiting for Nofing");
}
return (String) runInstance.getVal();
}
@@ -456,7 +458,7 @@
AccountList runInstance = new AccountList();
getExecutor().execute(runInstance);
while (!runInstance.isDone()) {
- Log.e(TAG,"Waiting for Nofing");
+ Log.e(TAG, "Waiting for Nofing");
}
StringVect swigvect = (StringVect) runInstance.getVal();
@@ -488,7 +490,7 @@
getExecutor().execute(runInstance);
clients++;
while (!runInstance.isDone()) {
- Log.e(TAG,"Waiting for Details "+clients);
+ Log.w(TAG, "Waiting for Details " + clients);
}
clients--;
StringMap swigmap = (StringMap) runInstance.getVal();
@@ -528,14 +530,13 @@
return configurationManagerJNI.addAccount(map);
}
}
-
final StringMap swigmap = AccountDetailsHandler.convertFromNativeToSwig((HashMap<String, String>) map);
AddAccount runInstance = new AddAccount(swigmap);
getExecutor().execute(runInstance);
while (!runInstance.isDone()) {
- Log.e(TAG,"Waiting for Nofing");
+ Log.e(TAG, "Waiting for Nofing");
}
String accountId = (String) runInstance.getVal();
@@ -573,7 +574,7 @@
History runInstance = new History();
getExecutor().execute(runInstance);
while (!runInstance.isDone()) {
- Log.e(TAG,"Waiting for Nofing");
+ Log.w(TAG, "Waiting for getHistory");
}
VectMap swigmap = (VectMap) runInstance.getVal();
@@ -759,7 +760,7 @@
ConfList runInstance = new ConfList();
getExecutor().execute(runInstance);
while (!runInstance.isDone()) {
- Log.e(TAG,"Waiting for Nofing");
+ Log.w(TAG, "Waiting for getConferenceList");
}
StringVect swigvect = (StringVect) runInstance.getVal();
@@ -789,5 +790,61 @@
return null;
}
+ @Override
+ public String getRecordPath() throws RemoteException {
+ class RecordPath extends SipRunnableWithReturn {
+
+ @Override
+ protected String doRun() throws SameThreadException {
+ Log.i(TAG, "SipService.getRecordPath() thread running...");
+ return configurationManagerJNI.getRecordPath();
+ }
+ }
+
+ RecordPath runInstance = new RecordPath();
+ getExecutor().execute(runInstance);
+ while (!runInstance.isDone()) {
+ Log.w(TAG, "Waiting for getRecordPath");
+ }
+ String path = (String) runInstance.getVal();
+
+ return path;
+ }
+
+ @Override
+ public void setRecordingCall(final String id) throws RemoteException {
+ getExecutor().execute(new SipRunnable() {
+ @Override
+ protected void doRun() throws SameThreadException, RemoteException {
+ Log.i(TAG, "SipService.setRecordingCall() thread running...");
+ callManagerJNI.setRecordingCall(id);
+ }
+ });
+
+ }
+
+ @Override
+ public void setRecordPath(final String path) throws RemoteException {
+ getExecutor().execute(new SipRunnable() {
+ @Override
+ protected void doRun() throws SameThreadException, RemoteException {
+ Log.i(TAG, "SipService.setRecordingCall() thread running...");
+ configurationManagerJNI.setRecordPath(path);
+ }
+ });
+ }
+
+ @Override
+ public void sendTextMessage(final String callID, final String message, final String from) throws RemoteException {
+ getExecutor().execute(new SipRunnable() {
+ @Override
+ protected void doRun() throws SameThreadException, RemoteException {
+ Log.i(TAG, "SipService.sendTextMessage() thread running...");
+ callManagerJNI.sendTextMessage(callID, message, from);
+ }
+ });
+
+ }
+
};
}