blob: 479956568132ebe49febd032e8d99b38e9dbd5a7 [file] [log] [blame]
Alexandre Savard14323be2012-10-24 10:02:13 -04001/*
alisionb1763882013-06-18 17:30:51 -04002 * Copyright (C) 2004-2013 Savoir-Faire Linux Inc.
Alexandre Savard14323be2012-10-24 10:02:13 -04003 *
4 * Author: Alexandre Savard <alexandre.savard@savoirfairelinux.com>
Adrien Béraud71b2f812013-04-26 18:51:02 +10005 * Author: Adrien Béraud <adrien.beraud@savoirfairelinux.com>
alisionfde875f2013-05-28 17:01:54 -04006 * Author: Alexandre Lision <alexandre.lision@savoirfairelinux.com>
Alexandre Savard14323be2012-10-24 10:02:13 -04007 *
8 * This program is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License as published by
10 * the Free Software Foundation; either version 3 of the License, or
11 * (at your option) any later version.
12 *
13 * This program is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 * GNU General Public License for more details.
17 *
18 * You should have received a copy of the GNU General Public License
19 * along with this program; if not, write to the Free Software
20 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
21 *
22 * Additional permission under GNU GPL version 3 section 7:
23 *
24 * If you modify this program, or any covered work, by linking or
25 * combining it with the OpenSSL project's OpenSSL library (or a
26 * modified version of that library), containing parts covered by the
27 * terms of the OpenSSL or SSLeay licenses, Savoir-Faire Linux Inc.
28 * grants you additional permission to convey the resulting work.
29 * Corresponding Source for a non-source form of such a combination
30 * shall include the source code for the parts of OpenSSL used as well
31 * as that of the covered work.
32 */
33
34package com.savoirfairelinux.sflphone.client;
35
alision85704182013-05-29 15:23:03 -040036import java.util.HashMap;
Adrien Béraud33268882013-05-18 03:41:15 +100037
Alexandre Savard14323be2012-10-24 10:02:13 -040038import android.app.Activity;
Alexandre Savard6d54bbc2012-10-24 11:04:23 -040039import android.content.ComponentName;
alision17052d42013-04-22 10:39:38 -040040import android.content.Context;
Alexandre Savard6d54bbc2012-10-24 11:04:23 -040041import android.content.Intent;
alision84813a12013-05-27 17:40:39 -040042import android.content.IntentFilter;
Alexandre Savard6d54bbc2012-10-24 11:04:23 -040043import android.content.ServiceConnection;
alision55c36cb2013-06-14 14:57:38 -040044import android.net.Uri;
Alexandre Savard14323be2012-10-24 10:02:13 -040045import android.os.Bundle;
Alexandre Savard6d54bbc2012-10-24 11:04:23 -040046import android.os.IBinder;
alision85992112013-05-29 12:18:08 -040047import android.os.RemoteException;
alisionfde875f2013-05-28 17:01:54 -040048import android.support.v4.widget.SlidingPaneLayout;
Alexandre Savard6d54bbc2012-10-24 11:04:23 -040049import android.util.Log;
alisionfde875f2013-05-28 17:01:54 -040050import android.view.View;
Adrien Béraud33268882013-05-18 03:41:15 +100051import android.widget.Toast;
Alexandre Savard14323be2012-10-24 10:02:13 -040052
53import com.savoirfairelinux.sflphone.R;
alision84813a12013-05-27 17:40:39 -040054import com.savoirfairelinux.sflphone.fragments.CallFragment;
alisionfde875f2013-05-28 17:01:54 -040055import com.savoirfairelinux.sflphone.fragments.CallListFragment;
alision84813a12013-05-27 17:40:39 -040056import com.savoirfairelinux.sflphone.interfaces.CallInterface;
alision55c36cb2013-06-14 14:57:38 -040057import com.savoirfairelinux.sflphone.model.CallContact;
alisiondf1dac92013-06-27 17:35:53 -040058import com.savoirfairelinux.sflphone.model.Conference;
alisionf76de3b2013-04-16 15:35:22 -040059import com.savoirfairelinux.sflphone.model.SipCall;
alision85992112013-05-29 12:18:08 -040060import com.savoirfairelinux.sflphone.model.SipCall.state;
alisioncc7bb422013-06-06 15:31:39 -040061import com.savoirfairelinux.sflphone.receivers.CallReceiver;
alision84813a12013-05-27 17:40:39 -040062import com.savoirfairelinux.sflphone.service.CallManagerCallBack;
Alexandre Savard6d54bbc2012-10-24 11:04:23 -040063import com.savoirfairelinux.sflphone.service.ISipService;
64import com.savoirfairelinux.sflphone.service.SipService;
Adrien Béraudc9c424d2013-05-30 17:47:35 +100065import com.savoirfairelinux.sflphone.views.CallPaneLayout;
Alexandre Savard14323be2012-10-24 10:02:13 -040066
alisionfde875f2013-05-28 17:01:54 -040067public class CallActivity extends Activity implements CallInterface, CallFragment.Callbacks, CallListFragment.Callbacks {
alision55c36cb2013-06-14 14:57:38 -040068 static final String TAG = "CallActivity";
69 private ISipService service;
alision84813a12013-05-27 17:40:39 -040070
alision55c36cb2013-06-14 14:57:38 -040071 CallReceiver receiver;
alision85992112013-05-29 12:18:08 -040072
alision55c36cb2013-06-14 14:57:38 -040073 CallPaneLayout slidingPaneLayout;
Adrien Béraud33268882013-05-18 03:41:15 +100074
alision55c36cb2013-06-14 14:57:38 -040075 CallListFragment mCallsFragment;
76 CallFragment mCurrentCallFragment;
alisiondf1dac92013-06-27 17:35:53 -040077 private boolean fragIsChanging;
Alexandre Lision1a9e3b12013-09-16 11:06:07 -040078
79 /* result code sent in c&ase of call failure */
Alexandre Lisionc51ccb12013-09-11 16:00:30 -040080 public static int RESULT_FAILURE = -10;
Alexandre Savard4f42ade2012-10-24 18:03:31 -040081
alision55c36cb2013-06-14 14:57:38 -040082 @Override
83 protected void onCreate(Bundle savedInstanceState) {
84 super.onCreate(savedInstanceState);
85 setContentView(R.layout.activity_call_layout);
Alexandre Savard4f42ade2012-10-24 18:03:31 -040086
alision55c36cb2013-06-14 14:57:38 -040087 receiver = new CallReceiver(this);
Adrien Béraud33268882013-05-18 03:41:15 +100088
alision55c36cb2013-06-14 14:57:38 -040089 mCallsFragment = new CallListFragment();
Adrien Béraud33268882013-05-18 03:41:15 +100090
alision55c36cb2013-06-14 14:57:38 -040091 getFragmentManager().beginTransaction().replace(R.id.calllist_pane, mCallsFragment).commit();
alision85992112013-05-29 12:18:08 -040092
alision55c36cb2013-06-14 14:57:38 -040093 slidingPaneLayout = (CallPaneLayout) findViewById(R.id.slidingpanelayout);
alisiondf1dac92013-06-27 17:35:53 -040094
alision55c36cb2013-06-14 14:57:38 -040095 slidingPaneLayout.setPanelSlideListener(new SlidingPaneLayout.PanelSlideListener() {
alision84813a12013-05-27 17:40:39 -040096
alision55c36cb2013-06-14 14:57:38 -040097 @Override
98 public void onPanelSlide(View view, float offSet) {
99 }
alisionfde875f2013-05-28 17:01:54 -0400100
alision55c36cb2013-06-14 14:57:38 -0400101 @Override
102 public void onPanelOpened(View view) {
alisionfde875f2013-05-28 17:01:54 -0400103
alision55c36cb2013-06-14 14:57:38 -0400104 switch (view.getId()) {
105 case R.id.calllist_pane:
106 // getFragmentManager().findFragmentById(R.id.calllist_pane).setHasOptionsMenu(true);
107 // getFragmentManager().findFragmentById(R.id.ongoingcall_pane).setHasOptionsMenu(false);
108 break;
109 default:
110 break;
111 }
112 }
alisionfde875f2013-05-28 17:01:54 -0400113
alision55c36cb2013-06-14 14:57:38 -0400114 @Override
115 public void onPanelClosed(View view) {
alisionfde875f2013-05-28 17:01:54 -0400116
alision55c36cb2013-06-14 14:57:38 -0400117 switch (view.getId()) {
118 case R.id.ongoingcall_pane:
alisiondf1dac92013-06-27 17:35:53 -0400119 if (fragIsChanging) {
120 getFragmentManager().beginTransaction().replace(R.id.ongoingcall_pane, mCurrentCallFragment).commit();
121
122 fragIsChanging = false;
Alexandre Lisiona764c682013-09-09 10:02:07 -0400123 } else if (mCurrentCallFragment != null && mCurrentCallFragment.getBubbleView() != null) {
alisiondf1dac92013-06-27 17:35:53 -0400124 mCurrentCallFragment.getBubbleView().restartDrawing();
125 }
126
alision55c36cb2013-06-14 14:57:38 -0400127 break;
128 default:
129 break;
130 }
131 }
132 });
alisionfde875f2013-05-28 17:01:54 -0400133
alision55c36cb2013-06-14 14:57:38 -0400134 Intent intent = new Intent(this, SipService.class);
135 bindService(intent, mConnection, Context.BIND_AUTO_CREATE);
Alexandre Lisionc51ccb12013-09-11 16:00:30 -0400136 slidingPaneLayout.setCoveredFadeColor(0xFF0000);
alision55c36cb2013-06-14 14:57:38 -0400137 }
alisiond45da712013-05-30 09:18:49 -0400138
alision55c36cb2013-06-14 14:57:38 -0400139 /* activity gets back to the foreground and user input */
140 @Override
141 protected void onResume() {
142 Log.i(TAG, "onResume");
143 IntentFilter intentFilter = new IntentFilter();
144 intentFilter.addAction(CallManagerCallBack.INCOMING_CALL);
145 intentFilter.addAction(CallManagerCallBack.INCOMING_TEXT);
146 intentFilter.addAction(CallManagerCallBack.CALL_STATE_CHANGED);
alisiondf1dac92013-06-27 17:35:53 -0400147 intentFilter.addAction(CallManagerCallBack.CONF_CREATED);
148 intentFilter.addAction(CallManagerCallBack.CONF_REMOVED);
149 intentFilter.addAction(CallManagerCallBack.CONF_CHANGED);
150 intentFilter.addAction(CallManagerCallBack.RECORD_STATE_CHANGED);
alision55c36cb2013-06-14 14:57:38 -0400151 registerReceiver(receiver, intentFilter);
152 super.onResume();
153 }
alisiond45da712013-05-30 09:18:49 -0400154
alision55c36cb2013-06-14 14:57:38 -0400155 /* activity no more in foreground */
156 @Override
157 protected void onPause() {
158 super.onPause();
alisiond45da712013-05-30 09:18:49 -0400159
alision55c36cb2013-06-14 14:57:38 -0400160 }
Alexandre Savard6d54bbc2012-10-24 11:04:23 -0400161
alision55c36cb2013-06-14 14:57:38 -0400162 @Override
163 protected void onDestroy() {
Alexandre Savard6d54bbc2012-10-24 11:04:23 -0400164
alision55c36cb2013-06-14 14:57:38 -0400165 unregisterReceiver(receiver);
166
167 try {
alision2cb99562013-05-30 17:02:20 -0400168 service.createNotification();
169 } catch (RemoteException e) {
170 Log.e(TAG, e.toString());
171 }
alision55c36cb2013-06-14 14:57:38 -0400172 // Log.i(TAG, "Destroying Call Activity for call " + mCall.getCallId());
173 // LocalBroadcastManager.getInstance(this).unregisterReceiver(mMessageReceiver);
174 try {
alision2cb99562013-05-30 17:02:20 -0400175 service.destroyNotification();
176 } catch (RemoteException e) {
177 Log.e(TAG, e.toString());
178 }
alision55c36cb2013-06-14 14:57:38 -0400179 unbindService(mConnection);
Adrien Béraud33268882013-05-18 03:41:15 +1000180
alision55c36cb2013-06-14 14:57:38 -0400181 super.onDestroy();
182 }
Adrien Béraud33268882013-05-18 03:41:15 +1000183
alision55c36cb2013-06-14 14:57:38 -0400184 /** Defines callbacks for service binding, passed to bindService() */
185 private ServiceConnection mConnection = new ServiceConnection() {
186 @Override
187 public void onServiceConnected(ComponentName className, IBinder binder) {
188 service = ISipService.Stub.asInterface(binder);
alisiondf1dac92013-06-27 17:35:53 -0400189
alision55c36cb2013-06-14 14:57:38 -0400190 mCurrentCallFragment = new CallFragment();
191 Uri u = getIntent().getData();
192 if (u != null) {
193 CallContact c = CallContact.ContactBuilder.buildUnknownContact(u.getSchemeSpecificPart());
194 try {
195 service.destroyNotification();
alision907bde72013-06-20 14:40:37 -0400196 SipCall call = SipCall.SipCallBuilder.getInstance().startCallCreation().setContact(c)
alision55c36cb2013-06-14 14:57:38 -0400197 .setAccountID(service.getAccountList().get(1).toString()).setCallType(SipCall.state.CALL_TYPE_OUTGOING).build();
alisiondf1dac92013-06-27 17:35:53 -0400198 Conference tmp = new Conference("-1");
199 tmp.getParticipants().add(call);
alision55c36cb2013-06-14 14:57:38 -0400200 Bundle b = new Bundle();
alisiondf1dac92013-06-27 17:35:53 -0400201 b.putParcelable("conference", tmp);
alision1005ba12013-06-19 13:52:44 -0400202 Log.i(TAG, "Arguments set");
alision55c36cb2013-06-14 14:57:38 -0400203 mCurrentCallFragment.setArguments(b);
204 } catch (RemoteException e) {
alision55c36cb2013-06-14 14:57:38 -0400205 e.printStackTrace();
206 } catch (Exception e) {
alision55c36cb2013-06-14 14:57:38 -0400207 e.printStackTrace();
208 }
alision55c36cb2013-06-14 14:57:38 -0400209 } else {
alisiondf1dac92013-06-27 17:35:53 -0400210 if (getIntent().getBooleanExtra("resuming", false)) {
211
212 Bundle b = new Bundle();
Alexandre Lision1a9e3b12013-09-16 11:06:07 -0400213 b.putParcelable("conference", (Conference) getIntent().getParcelableExtra("conference"));
214 mCurrentCallFragment.setArguments(b);
215
alisiondf1dac92013-06-27 17:35:53 -0400216 } else {
217 mCurrentCallFragment.setArguments(getIntent().getExtras());
218 }
219
alision55c36cb2013-06-14 14:57:38 -0400220 }
Alexandre Savard6d54bbc2012-10-24 11:04:23 -0400221
alision55c36cb2013-06-14 14:57:38 -0400222 slidingPaneLayout.setCurFragment(mCurrentCallFragment);
223 getIntent().getExtras();
224 mCallsFragment.update();
225 getFragmentManager().beginTransaction().replace(R.id.ongoingcall_pane, mCurrentCallFragment).commit();
alisiond8c83882013-05-17 17:00:42 -0400226
alision55c36cb2013-06-14 14:57:38 -0400227 }
Adrien Béraud6bbce912013-05-24 00:48:13 +1000228
alision55c36cb2013-06-14 14:57:38 -0400229 @Override
230 public void onServiceDisconnected(ComponentName arg0) {
231 }
232 };
Adrien Béraud6bbce912013-05-24 00:48:13 +1000233
alision55c36cb2013-06-14 14:57:38 -0400234 @Override
235 public void incomingCall(Intent call) {
236 Toast.makeText(this, "New Call incoming", Toast.LENGTH_LONG).show();
Alexandre Savarde41f5212012-10-26 14:23:50 -0400237
alision55c36cb2013-06-14 14:57:38 -0400238 mCallsFragment.update();
Alexandre Savarddf544262012-10-25 14:24:08 -0400239
alision55c36cb2013-06-14 14:57:38 -0400240 }
alision84813a12013-05-27 17:40:39 -0400241
alision55c36cb2013-06-14 14:57:38 -0400242 @Override
243 public void callStateChanged(Intent callState) {
alision84813a12013-05-27 17:40:39 -0400244
alision55c36cb2013-06-14 14:57:38 -0400245 Bundle b = callState.getBundleExtra("com.savoirfairelinux.sflphone.service.newstate");
246 processCallStateChangedSignal(b.getString("CallID"), b.getString("State"));
alision84813a12013-05-27 17:40:39 -0400247
alision55c36cb2013-06-14 14:57:38 -0400248 }
alision84813a12013-05-27 17:40:39 -0400249
alision55c36cb2013-06-14 14:57:38 -0400250 public void processCallStateChangedSignal(String callID, String newState) {
251 /*
252 * Bundle bundle = intent.getBundleExtra("com.savoirfairelinux.sflphone.service.newstate"); String callID = bundle.getString("CallID"); String
253 * newState = bundle.getString("State");
254 */
255 // CallFragment fr = mCurrentCallFragment;
Alexandre Lision1a9e3b12013-09-16 11:06:07 -0400256
alision55c36cb2013-06-14 14:57:38 -0400257 mCallsFragment.update();
alision84813a12013-05-27 17:40:39 -0400258
Alexandre Lisiona764c682013-09-09 10:02:07 -0400259 if (mCurrentCallFragment != null)
260 mCurrentCallFragment.changeCallState(callID, newState);
Adrien Béraud29556042013-04-26 17:35:43 +1000261
alision55c36cb2013-06-14 14:57:38 -0400262 try {
alisiondf1dac92013-06-27 17:35:53 -0400263 HashMap<String, SipCall> callMap = (HashMap<String, SipCall>) service.getCallList();
264 HashMap<String, Conference> confMap = (HashMap<String, Conference>) service.getConferenceList();
alision34673e62013-06-25 14:40:07 -0400265 if (callMap.size() == 0 && confMap.size() == 0) {
alision34673e62013-06-25 14:40:07 -0400266 finish();
alision55c36cb2013-06-14 14:57:38 -0400267 }
268 } catch (RemoteException e) {
269 Log.e(TAG, e.toString());
270 }
Adrien Béraud29556042013-04-26 17:35:43 +1000271
alision55c36cb2013-06-14 14:57:38 -0400272 Log.w(TAG, "processCallStateChangedSignal " + newState);
Adrien Béraud71b2f812013-04-26 18:51:02 +1000273
alision55c36cb2013-06-14 14:57:38 -0400274 }
275
276 @Override
277 public void incomingText(Intent msg) {
278 Bundle b = msg.getBundleExtra("com.savoirfairelinux.sflphone.service.newtext");
279
alisiona2a2da12013-06-05 15:58:39 -0400280 Toast.makeText(this, b.getString("From") + " : " + b.getString("Msg"), Toast.LENGTH_LONG).show();
Adrien Béraud71b2f812013-04-26 18:51:02 +1000281
alision55c36cb2013-06-14 14:57:38 -0400282 }
alision7f18fc82013-05-01 09:37:33 -0400283
alision55c36cb2013-06-14 14:57:38 -0400284 @Override
285 public ISipService getService() {
286 return service;
287 }
alision04a00182013-05-10 17:05:29 -0400288
alision55c36cb2013-06-14 14:57:38 -0400289 @Override
alisiondf1dac92013-06-27 17:35:53 -0400290 public void onCallSelected(Conference conf) {
alision85992112013-05-29 12:18:08 -0400291
Alexandre Lisiona764c682013-09-09 10:02:07 -0400292 if (mCurrentCallFragment == null || mCurrentCallFragment.getBubbleView() == null) {
alisiondf1dac92013-06-27 17:35:53 -0400293 return;
294 }
295 mCurrentCallFragment.getBubbleView().stopThread();
alision55c36cb2013-06-14 14:57:38 -0400296 mCurrentCallFragment = new CallFragment();
297 Bundle b = new Bundle();
alision34673e62013-06-25 14:40:07 -0400298
alisiondf1dac92013-06-27 17:35:53 -0400299 b.putParcelable("conference", conf);
alision55c36cb2013-06-14 14:57:38 -0400300 mCurrentCallFragment.setArguments(b);
alision85992112013-05-29 12:18:08 -0400301
alisiondf1dac92013-06-27 17:35:53 -0400302 // if (calls.size() == 1) {
303 // onCallResumed(calls.get(0));
304 // }
305
alision55c36cb2013-06-14 14:57:38 -0400306 slidingPaneLayout.setCurFragment(mCurrentCallFragment);
307 slidingPaneLayout.closePane();
alisiondf1dac92013-06-27 17:35:53 -0400308 fragIsChanging = true;
alision85992112013-05-29 12:18:08 -0400309
alision55c36cb2013-06-14 14:57:38 -0400310 }
alision85992112013-05-29 12:18:08 -0400311
alision55c36cb2013-06-14 14:57:38 -0400312 @Override
313 public void callContact(SipCall call) {
314 try {
315 service.placeCall(call);
316 } catch (RemoteException e) {
317 Log.e(TAG, "Cannot call service method", e);
318 }
alision85992112013-05-29 12:18:08 -0400319
alision55c36cb2013-06-14 14:57:38 -0400320 }
alision85992112013-05-29 12:18:08 -0400321
alision55c36cb2013-06-14 14:57:38 -0400322 @Override
323 public void onCallAccepted(SipCall call) {
324 int callState = call.getCallStateInt();
325 if (callState != state.CALL_STATE_RINGING && callState != state.CALL_STATE_NONE) {
326 return;
327 }
alision85992112013-05-29 12:18:08 -0400328
alision55c36cb2013-06-14 14:57:38 -0400329 try {
330 service.accept(call.getCallId());
331 } catch (RemoteException e) {
332 Log.e(TAG, "Cannot call service method", e);
333 }
alision85992112013-05-29 12:18:08 -0400334
alision55c36cb2013-06-14 14:57:38 -0400335 }
alision85992112013-05-29 12:18:08 -0400336
alision55c36cb2013-06-14 14:57:38 -0400337 @Override
338 public void onCallRejected(SipCall call) {
339 try {
340 if (call.getCallStateInt() == state.CALL_STATE_RINGING) {
341 service.refuse(call.getCallId());
342 return;
343 }
344 } catch (RemoteException e) {
345 Log.e(TAG, "Cannot call service method", e);
346 }
347 }
alision85992112013-05-29 12:18:08 -0400348
alision55c36cb2013-06-14 14:57:38 -0400349 @Override
350 public void onCallEnded(SipCall call) {
351 try {
352 if (call.getCallStateInt() == state.CALL_STATE_NONE || call.getCallStateInt() == state.CALL_STATE_CURRENT
353 || call.getCallStateInt() == state.CALL_STATE_HOLD) {
354 service.hangUp(call.getCallId());
355 return;
alision85992112013-05-29 12:18:08 -0400356
alision55c36cb2013-06-14 14:57:38 -0400357 } else if (call.getCallStateInt() == state.CALL_STATE_RINGING) {
358 if (call.getCallType() == state.CALL_TYPE_INCOMING) {
359 service.refuse(call.getCallId());
360 return;
361 } else if (call.getCallType() == state.CALL_TYPE_OUTGOING) {
362 service.hangUp(call.getCallId());
363 return;
364 }
365 }
366 } catch (RemoteException e) {
367 Log.e(TAG, "Cannot call service method", e);
368 }
369 }
alision85992112013-05-29 12:18:08 -0400370
alision55c36cb2013-06-14 14:57:38 -0400371 @Override
372 public void onCallSuspended(SipCall call) {
373 try {
374 if (call.getCallStateInt() == state.CALL_STATE_CURRENT) {
375 service.hold(call.getCallId());
376 return;
377 }
378 } catch (RemoteException e) {
379 Log.e(TAG, "Cannot call service method", e);
380 }
381 }
alision85992112013-05-29 12:18:08 -0400382
alision55c36cb2013-06-14 14:57:38 -0400383 @Override
384 public void onCallResumed(SipCall call) {
385 try {
386 if (call.getCallStateInt() == state.CALL_STATE_HOLD) {
387 service.unhold(call.getCallId());
388 return;
389 }
390 } catch (RemoteException e) {
391 Log.e(TAG, "Cannot call service method", e);
392 }
alision85992112013-05-29 12:18:08 -0400393
alision55c36cb2013-06-14 14:57:38 -0400394 }
alision85992112013-05-29 12:18:08 -0400395
alision55c36cb2013-06-14 14:57:38 -0400396 @Override
397 public void onCalltransfered(SipCall call, String to) {
398 try {
399 if (call.getCallStateInt() == state.CALL_STATE_CURRENT) {
400 service.transfer(call.getCallId(), to);
401 }
402 } catch (RemoteException e) {
403 Log.e(TAG, "Cannot call service method", e);
404 }
alision85992112013-05-29 12:18:08 -0400405
alision55c36cb2013-06-14 14:57:38 -0400406 }
alision85992112013-05-29 12:18:08 -0400407
alision55c36cb2013-06-14 14:57:38 -0400408 @Override
409 public void onRecordCall(SipCall call) {
410 try {
alisiondf1dac92013-06-27 17:35:53 -0400411
Alexandre Lision1a9e3b12013-09-16 11:06:07 -0400412 // service.setRecordPath(Environment.getExternalStorageDirectory().getAbsolutePath() + File.separator);
Alexandre Lision2b237922013-09-09 16:23:02 -0400413 Log.w(TAG, "Recording path " + service.getRecordPath());
Alexandre Lisiona764c682013-09-09 10:02:07 -0400414 service.toggleRecordingCall(call.getCallId());
415
alision55c36cb2013-06-14 14:57:38 -0400416 } catch (RemoteException e) {
417 Log.e(TAG, "Cannot call service method", e);
418 }
alision85992112013-05-29 12:18:08 -0400419
alision55c36cb2013-06-14 14:57:38 -0400420 }
alision85992112013-05-29 12:18:08 -0400421
alision55c36cb2013-06-14 14:57:38 -0400422 @Override
423 public void onBackPressed() {
424 super.onBackPressed();
425 Intent launchHome = new Intent(this, SFLPhoneHomeActivity.class);
426 launchHome.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
427 startActivity(launchHome);
428 }
alision85992112013-05-29 12:18:08 -0400429
alision55c36cb2013-06-14 14:57:38 -0400430 @Override
431 public void onSendMessage(SipCall call, String msg) {
432 try {
433 if (call.getCallStateInt() == state.CALL_STATE_CURRENT) {
434 service.sendTextMessage(call.getCallId(), msg, "Me");
435 }
436 } catch (RemoteException e) {
437 Log.e(TAG, "Cannot call service method", e);
438 }
alisiond45da712013-05-30 09:18:49 -0400439
alision55c36cb2013-06-14 14:57:38 -0400440 }
alisiond45da712013-05-30 09:18:49 -0400441
alision806e18e2013-06-21 15:30:17 -0400442 @Override
443 public void confCreated(Intent intent) {
444 mCallsFragment.update();
alision34673e62013-06-25 14:40:07 -0400445
alision806e18e2013-06-21 15:30:17 -0400446 }
447
448 @Override
449 public void confRemoved(Intent intent) {
450 mCallsFragment.update();
451 }
452
453 @Override
454 public void confChanged(Intent intent) {
455 mCallsFragment.update();
456 }
457
458 @Override
459 public void onCallsTerminated() {
alisiondf1dac92013-06-27 17:35:53 -0400460
461 }
462
463 @Override
464 public void recordingChanged(Intent intent) {
465 mCallsFragment.update();
466 }
467
468 @Override
469 public void replaceCurrentCallDisplayed() {
470 mCurrentCallFragment.getBubbleView().stopThread();
471 getFragmentManager().beginTransaction().remove(mCurrentCallFragment).commit();
alision465ceba2013-07-04 09:24:30 -0400472 mCurrentCallFragment = null;
alision34673e62013-06-25 14:40:07 -0400473
alision806e18e2013-06-21 15:30:17 -0400474 }
475
Alexandre Savard14323be2012-10-24 10:02:13 -0400476}