blob: d92b53f54ca9d7971869b6c22ace97f1b12eda2b [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 Lision0c384512013-09-17 17:15:57 -040046import android.os.Handler;
Alexandre Savard6d54bbc2012-10-24 11:04:23 -040047import android.os.IBinder;
alision85992112013-05-29 12:18:08 -040048import android.os.RemoteException;
Alexandre Lision0c384512013-09-17 17:15:57 -040049import android.os.SystemClock;
alisionfde875f2013-05-28 17:01:54 -040050import android.support.v4.widget.SlidingPaneLayout;
Alexandre Savard6d54bbc2012-10-24 11:04:23 -040051import android.util.Log;
alisionfde875f2013-05-28 17:01:54 -040052import android.view.View;
Adrien Béraud33268882013-05-18 03:41:15 +100053import android.widget.Toast;
Alexandre Savard14323be2012-10-24 10:02:13 -040054
55import com.savoirfairelinux.sflphone.R;
alision84813a12013-05-27 17:40:39 -040056import com.savoirfairelinux.sflphone.fragments.CallFragment;
alisionfde875f2013-05-28 17:01:54 -040057import com.savoirfairelinux.sflphone.fragments.CallListFragment;
alision84813a12013-05-27 17:40:39 -040058import com.savoirfairelinux.sflphone.interfaces.CallInterface;
alision55c36cb2013-06-14 14:57:38 -040059import com.savoirfairelinux.sflphone.model.CallContact;
alisiondf1dac92013-06-27 17:35:53 -040060import com.savoirfairelinux.sflphone.model.Conference;
alisionf76de3b2013-04-16 15:35:22 -040061import com.savoirfairelinux.sflphone.model.SipCall;
alision85992112013-05-29 12:18:08 -040062import com.savoirfairelinux.sflphone.model.SipCall.state;
alisioncc7bb422013-06-06 15:31:39 -040063import com.savoirfairelinux.sflphone.receivers.CallReceiver;
alision84813a12013-05-27 17:40:39 -040064import com.savoirfairelinux.sflphone.service.CallManagerCallBack;
Alexandre Savard6d54bbc2012-10-24 11:04:23 -040065import com.savoirfairelinux.sflphone.service.ISipService;
66import com.savoirfairelinux.sflphone.service.SipService;
Adrien Béraudc9c424d2013-05-30 17:47:35 +100067import com.savoirfairelinux.sflphone.views.CallPaneLayout;
Alexandre Savard14323be2012-10-24 10:02:13 -040068
alisionfde875f2013-05-28 17:01:54 -040069public class CallActivity extends Activity implements CallInterface, CallFragment.Callbacks, CallListFragment.Callbacks {
alision55c36cb2013-06-14 14:57:38 -040070 static final String TAG = "CallActivity";
71 private ISipService service;
alision84813a12013-05-27 17:40:39 -040072
alision55c36cb2013-06-14 14:57:38 -040073 CallReceiver receiver;
alision85992112013-05-29 12:18:08 -040074
alision55c36cb2013-06-14 14:57:38 -040075 CallPaneLayout slidingPaneLayout;
Adrien Béraud33268882013-05-18 03:41:15 +100076
alision55c36cb2013-06-14 14:57:38 -040077 CallListFragment mCallsFragment;
78 CallFragment mCurrentCallFragment;
alisiondf1dac92013-06-27 17:35:53 -040079 private boolean fragIsChanging;
Alexandre Lision1a9e3b12013-09-16 11:06:07 -040080
81 /* result code sent in c&ase of call failure */
Alexandre Lisionc51ccb12013-09-11 16:00:30 -040082 public static int RESULT_FAILURE = -10;
Alexandre Savard4f42ade2012-10-24 18:03:31 -040083
alision55c36cb2013-06-14 14:57:38 -040084 @Override
85 protected void onCreate(Bundle savedInstanceState) {
86 super.onCreate(savedInstanceState);
87 setContentView(R.layout.activity_call_layout);
Alexandre Savard4f42ade2012-10-24 18:03:31 -040088
alision55c36cb2013-06-14 14:57:38 -040089 receiver = new CallReceiver(this);
Adrien Béraud33268882013-05-18 03:41:15 +100090
alision55c36cb2013-06-14 14:57:38 -040091 mCallsFragment = new CallListFragment();
Adrien Béraud33268882013-05-18 03:41:15 +100092
alision55c36cb2013-06-14 14:57:38 -040093 getFragmentManager().beginTransaction().replace(R.id.calllist_pane, mCallsFragment).commit();
alision85992112013-05-29 12:18:08 -040094
alision55c36cb2013-06-14 14:57:38 -040095 slidingPaneLayout = (CallPaneLayout) findViewById(R.id.slidingpanelayout);
alisiondf1dac92013-06-27 17:35:53 -040096
alision55c36cb2013-06-14 14:57:38 -040097 slidingPaneLayout.setPanelSlideListener(new SlidingPaneLayout.PanelSlideListener() {
alision84813a12013-05-27 17:40:39 -040098
alision55c36cb2013-06-14 14:57:38 -040099 @Override
100 public void onPanelSlide(View view, float offSet) {
101 }
alisionfde875f2013-05-28 17:01:54 -0400102
alision55c36cb2013-06-14 14:57:38 -0400103 @Override
104 public void onPanelOpened(View view) {
alisionfde875f2013-05-28 17:01:54 -0400105
alision55c36cb2013-06-14 14:57:38 -0400106 switch (view.getId()) {
107 case R.id.calllist_pane:
108 // getFragmentManager().findFragmentById(R.id.calllist_pane).setHasOptionsMenu(true);
109 // getFragmentManager().findFragmentById(R.id.ongoingcall_pane).setHasOptionsMenu(false);
110 break;
111 default:
112 break;
113 }
114 }
alisionfde875f2013-05-28 17:01:54 -0400115
alision55c36cb2013-06-14 14:57:38 -0400116 @Override
117 public void onPanelClosed(View view) {
alisionfde875f2013-05-28 17:01:54 -0400118
alision55c36cb2013-06-14 14:57:38 -0400119 switch (view.getId()) {
120 case R.id.ongoingcall_pane:
alisiondf1dac92013-06-27 17:35:53 -0400121 if (fragIsChanging) {
122 getFragmentManager().beginTransaction().replace(R.id.ongoingcall_pane, mCurrentCallFragment).commit();
123
124 fragIsChanging = false;
Alexandre Lisiona764c682013-09-09 10:02:07 -0400125 } else if (mCurrentCallFragment != null && mCurrentCallFragment.getBubbleView() != null) {
alisiondf1dac92013-06-27 17:35:53 -0400126 mCurrentCallFragment.getBubbleView().restartDrawing();
127 }
128
alision55c36cb2013-06-14 14:57:38 -0400129 break;
130 default:
131 break;
132 }
133 }
134 });
alisionfde875f2013-05-28 17:01:54 -0400135
alision55c36cb2013-06-14 14:57:38 -0400136 Intent intent = new Intent(this, SipService.class);
137 bindService(intent, mConnection, Context.BIND_AUTO_CREATE);
Alexandre Lisionc51ccb12013-09-11 16:00:30 -0400138 slidingPaneLayout.setCoveredFadeColor(0xFF0000);
alision55c36cb2013-06-14 14:57:38 -0400139 }
alisiond45da712013-05-30 09:18:49 -0400140
alision55c36cb2013-06-14 14:57:38 -0400141 /* activity gets back to the foreground and user input */
142 @Override
143 protected void onResume() {
144 Log.i(TAG, "onResume");
145 IntentFilter intentFilter = new IntentFilter();
146 intentFilter.addAction(CallManagerCallBack.INCOMING_CALL);
147 intentFilter.addAction(CallManagerCallBack.INCOMING_TEXT);
148 intentFilter.addAction(CallManagerCallBack.CALL_STATE_CHANGED);
alisiondf1dac92013-06-27 17:35:53 -0400149 intentFilter.addAction(CallManagerCallBack.CONF_CREATED);
150 intentFilter.addAction(CallManagerCallBack.CONF_REMOVED);
151 intentFilter.addAction(CallManagerCallBack.CONF_CHANGED);
152 intentFilter.addAction(CallManagerCallBack.RECORD_STATE_CHANGED);
alision55c36cb2013-06-14 14:57:38 -0400153 registerReceiver(receiver, intentFilter);
Alexandre Lision0c384512013-09-17 17:15:57 -0400154
alision55c36cb2013-06-14 14:57:38 -0400155 super.onResume();
156 }
alisiond45da712013-05-30 09:18:49 -0400157
Alexandre Lision0c384512013-09-17 17:15:57 -0400158 private Handler mHandler = new Handler();
159 private Runnable mUpdateTimeTask = new Runnable() {
Adrien Béraud9360f242013-09-19 11:07:42 +1000160 @Override
Alexandre Lision0c384512013-09-17 17:15:57 -0400161 public void run() {
Alexandre Lisionfd7a88f2013-09-18 10:03:17 -0400162 if(mCurrentCallFragment != null)
163 mCurrentCallFragment.updateTime();
Alexandre Lision0c384512013-09-17 17:15:57 -0400164 mCallsFragment.update();
165
Adrien Béraud9360f242013-09-19 11:07:42 +1000166 mHandler.postAtTime(this, SystemClock.uptimeMillis() + 1000);
Alexandre Lision0c384512013-09-17 17:15:57 -0400167 }
168 };
169
alision55c36cb2013-06-14 14:57:38 -0400170 /* activity no more in foreground */
171 @Override
172 protected void onPause() {
173 super.onPause();
Alexandre Lision0c384512013-09-17 17:15:57 -0400174 mHandler.removeCallbacks(mUpdateTimeTask);
alision55c36cb2013-06-14 14:57:38 -0400175 }
Alexandre Savard6d54bbc2012-10-24 11:04:23 -0400176
alision55c36cb2013-06-14 14:57:38 -0400177 @Override
178 protected void onDestroy() {
Alexandre Savard6d54bbc2012-10-24 11:04:23 -0400179
alision55c36cb2013-06-14 14:57:38 -0400180 unregisterReceiver(receiver);
181
182 try {
alision2cb99562013-05-30 17:02:20 -0400183 service.createNotification();
184 } catch (RemoteException e) {
185 Log.e(TAG, e.toString());
186 }
alision55c36cb2013-06-14 14:57:38 -0400187 // Log.i(TAG, "Destroying Call Activity for call " + mCall.getCallId());
188 // LocalBroadcastManager.getInstance(this).unregisterReceiver(mMessageReceiver);
189 try {
alision2cb99562013-05-30 17:02:20 -0400190 service.destroyNotification();
191 } catch (RemoteException e) {
192 Log.e(TAG, e.toString());
193 }
alision55c36cb2013-06-14 14:57:38 -0400194 unbindService(mConnection);
Adrien Béraud33268882013-05-18 03:41:15 +1000195
alision55c36cb2013-06-14 14:57:38 -0400196 super.onDestroy();
197 }
Adrien Béraud33268882013-05-18 03:41:15 +1000198
alision55c36cb2013-06-14 14:57:38 -0400199 /** Defines callbacks for service binding, passed to bindService() */
200 private ServiceConnection mConnection = new ServiceConnection() {
201 @Override
202 public void onServiceConnected(ComponentName className, IBinder binder) {
203 service = ISipService.Stub.asInterface(binder);
alisiondf1dac92013-06-27 17:35:53 -0400204
alision55c36cb2013-06-14 14:57:38 -0400205 mCurrentCallFragment = new CallFragment();
Adrien Béraud9360f242013-09-19 11:07:42 +1000206
alision55c36cb2013-06-14 14:57:38 -0400207 Uri u = getIntent().getData();
208 if (u != null) {
209 CallContact c = CallContact.ContactBuilder.buildUnknownContact(u.getSchemeSpecificPart());
210 try {
211 service.destroyNotification();
alision907bde72013-06-20 14:40:37 -0400212 SipCall call = SipCall.SipCallBuilder.getInstance().startCallCreation().setContact(c)
alision55c36cb2013-06-14 14:57:38 -0400213 .setAccountID(service.getAccountList().get(1).toString()).setCallType(SipCall.state.CALL_TYPE_OUTGOING).build();
alisiondf1dac92013-06-27 17:35:53 -0400214 Conference tmp = new Conference("-1");
215 tmp.getParticipants().add(call);
alision55c36cb2013-06-14 14:57:38 -0400216 Bundle b = new Bundle();
alisiondf1dac92013-06-27 17:35:53 -0400217 b.putParcelable("conference", tmp);
alision1005ba12013-06-19 13:52:44 -0400218 Log.i(TAG, "Arguments set");
alision55c36cb2013-06-14 14:57:38 -0400219 mCurrentCallFragment.setArguments(b);
220 } catch (RemoteException e) {
alision55c36cb2013-06-14 14:57:38 -0400221 e.printStackTrace();
222 } catch (Exception e) {
alision55c36cb2013-06-14 14:57:38 -0400223 e.printStackTrace();
224 }
alision55c36cb2013-06-14 14:57:38 -0400225 } else {
alisiondf1dac92013-06-27 17:35:53 -0400226 if (getIntent().getBooleanExtra("resuming", false)) {
227
228 Bundle b = new Bundle();
Adrien Béraud9360f242013-09-19 11:07:42 +1000229 b.putParcelable("conference", getIntent().getParcelableExtra("conference"));
Alexandre Lision1a9e3b12013-09-16 11:06:07 -0400230 mCurrentCallFragment.setArguments(b);
231
alisiondf1dac92013-06-27 17:35:53 -0400232 } else {
233 mCurrentCallFragment.setArguments(getIntent().getExtras());
234 }
235
alision55c36cb2013-06-14 14:57:38 -0400236 }
Alexandre Savard6d54bbc2012-10-24 11:04:23 -0400237
alision55c36cb2013-06-14 14:57:38 -0400238 slidingPaneLayout.setCurFragment(mCurrentCallFragment);
239 getIntent().getExtras();
240 mCallsFragment.update();
241 getFragmentManager().beginTransaction().replace(R.id.ongoingcall_pane, mCurrentCallFragment).commit();
alisiond8c83882013-05-17 17:00:42 -0400242
alision55c36cb2013-06-14 14:57:38 -0400243 }
Adrien Béraud6bbce912013-05-24 00:48:13 +1000244
alision55c36cb2013-06-14 14:57:38 -0400245 @Override
246 public void onServiceDisconnected(ComponentName arg0) {
247 }
248 };
Adrien Béraud6bbce912013-05-24 00:48:13 +1000249
alision55c36cb2013-06-14 14:57:38 -0400250 @Override
251 public void incomingCall(Intent call) {
252 Toast.makeText(this, "New Call incoming", Toast.LENGTH_LONG).show();
Alexandre Savarde41f5212012-10-26 14:23:50 -0400253
alision55c36cb2013-06-14 14:57:38 -0400254 mCallsFragment.update();
Alexandre Savarddf544262012-10-25 14:24:08 -0400255
alision55c36cb2013-06-14 14:57:38 -0400256 }
alision84813a12013-05-27 17:40:39 -0400257
alision55c36cb2013-06-14 14:57:38 -0400258 @Override
259 public void callStateChanged(Intent callState) {
alision84813a12013-05-27 17:40:39 -0400260
alision55c36cb2013-06-14 14:57:38 -0400261 Bundle b = callState.getBundleExtra("com.savoirfairelinux.sflphone.service.newstate");
262 processCallStateChangedSignal(b.getString("CallID"), b.getString("State"));
alision84813a12013-05-27 17:40:39 -0400263
alision55c36cb2013-06-14 14:57:38 -0400264 }
alision84813a12013-05-27 17:40:39 -0400265
Alexandre Lision6e8931e2013-09-19 16:49:34 -0400266 @SuppressWarnings("unchecked") // No proper solution with HashMap runtime cast
alision55c36cb2013-06-14 14:57:38 -0400267 public void processCallStateChangedSignal(String callID, String newState) {
268 /*
269 * Bundle bundle = intent.getBundleExtra("com.savoirfairelinux.sflphone.service.newstate"); String callID = bundle.getString("CallID"); String
270 * newState = bundle.getString("State");
271 */
272 // CallFragment fr = mCurrentCallFragment;
Alexandre Lision1a9e3b12013-09-16 11:06:07 -0400273
alision55c36cb2013-06-14 14:57:38 -0400274 mCallsFragment.update();
alision84813a12013-05-27 17:40:39 -0400275
Alexandre Lisiona764c682013-09-09 10:02:07 -0400276 if (mCurrentCallFragment != null)
277 mCurrentCallFragment.changeCallState(callID, newState);
Adrien Béraud29556042013-04-26 17:35:43 +1000278
alision55c36cb2013-06-14 14:57:38 -0400279 try {
alisiondf1dac92013-06-27 17:35:53 -0400280 HashMap<String, SipCall> callMap = (HashMap<String, SipCall>) service.getCallList();
281 HashMap<String, Conference> confMap = (HashMap<String, Conference>) service.getConferenceList();
Alexandre Lision3c6b7102013-09-16 16:56:46 -0400282
alision34673e62013-06-25 14:40:07 -0400283 if (callMap.size() == 0 && confMap.size() == 0) {
alision34673e62013-06-25 14:40:07 -0400284 finish();
alision55c36cb2013-06-14 14:57:38 -0400285 }
Alexandre Lision3c6b7102013-09-16 16:56:46 -0400286
287 if (callMap.size() > 0) {
Alexandre Lision6e8931e2013-09-19 16:49:34 -0400288// ArrayList<SipCall> calls = new ArrayList<SipCall>(callMap.values());
289// HashMap<String, String> details = (HashMap<String, String>) service.getCallDetails(calls.get(0).getCallId());
Alexandre Lision0c384512013-09-17 17:15:57 -0400290
Alexandre Lision3c6b7102013-09-16 16:56:46 -0400291 }
alision55c36cb2013-06-14 14:57:38 -0400292 } catch (RemoteException e) {
Alexandre Lision3c6b7102013-09-16 16:56:46 -0400293
alision55c36cb2013-06-14 14:57:38 -0400294 Log.e(TAG, e.toString());
295 }
Adrien Béraud29556042013-04-26 17:35:43 +1000296
alision55c36cb2013-06-14 14:57:38 -0400297 Log.w(TAG, "processCallStateChangedSignal " + newState);
Adrien Béraud71b2f812013-04-26 18:51:02 +1000298
alision55c36cb2013-06-14 14:57:38 -0400299 }
300
301 @Override
302 public void incomingText(Intent msg) {
303 Bundle b = msg.getBundleExtra("com.savoirfairelinux.sflphone.service.newtext");
304
alisiona2a2da12013-06-05 15:58:39 -0400305 Toast.makeText(this, b.getString("From") + " : " + b.getString("Msg"), Toast.LENGTH_LONG).show();
Adrien Béraud71b2f812013-04-26 18:51:02 +1000306
alision55c36cb2013-06-14 14:57:38 -0400307 }
alision7f18fc82013-05-01 09:37:33 -0400308
alision55c36cb2013-06-14 14:57:38 -0400309 @Override
310 public ISipService getService() {
311 return service;
312 }
alision04a00182013-05-10 17:05:29 -0400313
alision55c36cb2013-06-14 14:57:38 -0400314 @Override
alisiondf1dac92013-06-27 17:35:53 -0400315 public void onCallSelected(Conference conf) {
alision85992112013-05-29 12:18:08 -0400316
Alexandre Lisiona764c682013-09-09 10:02:07 -0400317 if (mCurrentCallFragment == null || mCurrentCallFragment.getBubbleView() == null) {
alisiondf1dac92013-06-27 17:35:53 -0400318 return;
319 }
Alexandre Lision6e8931e2013-09-19 16:49:34 -0400320 mHandler.removeCallbacks(mUpdateTimeTask);
alisiondf1dac92013-06-27 17:35:53 -0400321 mCurrentCallFragment.getBubbleView().stopThread();
alision55c36cb2013-06-14 14:57:38 -0400322 mCurrentCallFragment = new CallFragment();
323 Bundle b = new Bundle();
alision34673e62013-06-25 14:40:07 -0400324
alisiondf1dac92013-06-27 17:35:53 -0400325 b.putParcelable("conference", conf);
alision55c36cb2013-06-14 14:57:38 -0400326 mCurrentCallFragment.setArguments(b);
alision85992112013-05-29 12:18:08 -0400327
alisiondf1dac92013-06-27 17:35:53 -0400328 // if (calls.size() == 1) {
329 // onCallResumed(calls.get(0));
330 // }
331
alision55c36cb2013-06-14 14:57:38 -0400332 slidingPaneLayout.setCurFragment(mCurrentCallFragment);
333 slidingPaneLayout.closePane();
alisiondf1dac92013-06-27 17:35:53 -0400334 fragIsChanging = true;
alision85992112013-05-29 12:18:08 -0400335
alision55c36cb2013-06-14 14:57:38 -0400336 }
alision85992112013-05-29 12:18:08 -0400337
alision55c36cb2013-06-14 14:57:38 -0400338 @Override
339 public void callContact(SipCall call) {
340 try {
341 service.placeCall(call);
342 } catch (RemoteException e) {
343 Log.e(TAG, "Cannot call service method", e);
344 }
alision85992112013-05-29 12:18:08 -0400345
alision55c36cb2013-06-14 14:57:38 -0400346 }
alision85992112013-05-29 12:18:08 -0400347
alision55c36cb2013-06-14 14:57:38 -0400348 @Override
349 public void onCallAccepted(SipCall call) {
350 int callState = call.getCallStateInt();
351 if (callState != state.CALL_STATE_RINGING && callState != state.CALL_STATE_NONE) {
352 return;
353 }
alision85992112013-05-29 12:18:08 -0400354
alision55c36cb2013-06-14 14:57:38 -0400355 try {
356 service.accept(call.getCallId());
357 } catch (RemoteException e) {
358 Log.e(TAG, "Cannot call service method", e);
359 }
alision85992112013-05-29 12:18:08 -0400360
alision55c36cb2013-06-14 14:57:38 -0400361 }
alision85992112013-05-29 12:18:08 -0400362
alision55c36cb2013-06-14 14:57:38 -0400363 @Override
364 public void onCallRejected(SipCall call) {
365 try {
366 if (call.getCallStateInt() == state.CALL_STATE_RINGING) {
367 service.refuse(call.getCallId());
368 return;
369 }
370 } catch (RemoteException e) {
371 Log.e(TAG, "Cannot call service method", e);
372 }
373 }
alision85992112013-05-29 12:18:08 -0400374
alision55c36cb2013-06-14 14:57:38 -0400375 @Override
376 public void onCallEnded(SipCall call) {
377 try {
378 if (call.getCallStateInt() == state.CALL_STATE_NONE || call.getCallStateInt() == state.CALL_STATE_CURRENT
379 || call.getCallStateInt() == state.CALL_STATE_HOLD) {
380 service.hangUp(call.getCallId());
381 return;
alision85992112013-05-29 12:18:08 -0400382
alision55c36cb2013-06-14 14:57:38 -0400383 } else if (call.getCallStateInt() == state.CALL_STATE_RINGING) {
384 if (call.getCallType() == state.CALL_TYPE_INCOMING) {
385 service.refuse(call.getCallId());
386 return;
387 } else if (call.getCallType() == state.CALL_TYPE_OUTGOING) {
388 service.hangUp(call.getCallId());
389 return;
390 }
391 }
392 } catch (RemoteException e) {
393 Log.e(TAG, "Cannot call service method", e);
394 }
395 }
alision85992112013-05-29 12:18:08 -0400396
alision55c36cb2013-06-14 14:57:38 -0400397 @Override
398 public void onCallSuspended(SipCall call) {
399 try {
400 if (call.getCallStateInt() == state.CALL_STATE_CURRENT) {
401 service.hold(call.getCallId());
402 return;
403 }
404 } catch (RemoteException e) {
405 Log.e(TAG, "Cannot call service method", e);
406 }
407 }
alision85992112013-05-29 12:18:08 -0400408
alision55c36cb2013-06-14 14:57:38 -0400409 @Override
410 public void onCallResumed(SipCall call) {
411 try {
412 if (call.getCallStateInt() == state.CALL_STATE_HOLD) {
413 service.unhold(call.getCallId());
414 return;
415 }
416 } 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 onCalltransfered(SipCall call, String to) {
424 try {
425 if (call.getCallStateInt() == state.CALL_STATE_CURRENT) {
426 service.transfer(call.getCallId(), to);
427 }
428 } catch (RemoteException e) {
429 Log.e(TAG, "Cannot call service method", e);
430 }
alision85992112013-05-29 12:18:08 -0400431
alision55c36cb2013-06-14 14:57:38 -0400432 }
alision85992112013-05-29 12:18:08 -0400433
alision55c36cb2013-06-14 14:57:38 -0400434 @Override
435 public void onRecordCall(SipCall call) {
436 try {
alisiondf1dac92013-06-27 17:35:53 -0400437
Alexandre Lision1a9e3b12013-09-16 11:06:07 -0400438 // service.setRecordPath(Environment.getExternalStorageDirectory().getAbsolutePath() + File.separator);
Alexandre Lision2b237922013-09-09 16:23:02 -0400439 Log.w(TAG, "Recording path " + service.getRecordPath());
Alexandre Lisiona764c682013-09-09 10:02:07 -0400440 service.toggleRecordingCall(call.getCallId());
441
alision55c36cb2013-06-14 14:57:38 -0400442 } catch (RemoteException e) {
443 Log.e(TAG, "Cannot call service method", e);
444 }
alision85992112013-05-29 12:18:08 -0400445
alision55c36cb2013-06-14 14:57:38 -0400446 }
alision85992112013-05-29 12:18:08 -0400447
alision55c36cb2013-06-14 14:57:38 -0400448 @Override
449 public void onBackPressed() {
450 super.onBackPressed();
451 Intent launchHome = new Intent(this, SFLPhoneHomeActivity.class);
452 launchHome.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
453 startActivity(launchHome);
454 }
alision85992112013-05-29 12:18:08 -0400455
alision55c36cb2013-06-14 14:57:38 -0400456 @Override
457 public void onSendMessage(SipCall call, String msg) {
458 try {
459 if (call.getCallStateInt() == state.CALL_STATE_CURRENT) {
460 service.sendTextMessage(call.getCallId(), msg, "Me");
461 }
462 } catch (RemoteException e) {
463 Log.e(TAG, "Cannot call service method", e);
464 }
alisiond45da712013-05-30 09:18:49 -0400465
alision55c36cb2013-06-14 14:57:38 -0400466 }
alisiond45da712013-05-30 09:18:49 -0400467
alision806e18e2013-06-21 15:30:17 -0400468 @Override
469 public void confCreated(Intent intent) {
470 mCallsFragment.update();
alision34673e62013-06-25 14:40:07 -0400471
alision806e18e2013-06-21 15:30:17 -0400472 }
473
474 @Override
475 public void confRemoved(Intent intent) {
476 mCallsFragment.update();
477 }
478
479 @Override
480 public void confChanged(Intent intent) {
481 mCallsFragment.update();
482 }
483
484 @Override
485 public void onCallsTerminated() {
alisiondf1dac92013-06-27 17:35:53 -0400486
487 }
488
489 @Override
490 public void recordingChanged(Intent intent) {
491 mCallsFragment.update();
492 }
493
494 @Override
495 public void replaceCurrentCallDisplayed() {
Alexandre Lision6e8931e2013-09-19 16:49:34 -0400496 mHandler.removeCallbacks(mUpdateTimeTask);
alisiondf1dac92013-06-27 17:35:53 -0400497 mCurrentCallFragment.getBubbleView().stopThread();
498 getFragmentManager().beginTransaction().remove(mCurrentCallFragment).commit();
alision465ceba2013-07-04 09:24:30 -0400499 mCurrentCallFragment = null;
alision34673e62013-06-25 14:40:07 -0400500
alision806e18e2013-06-21 15:30:17 -0400501 }
502
Alexandre Lision0c384512013-09-17 17:15:57 -0400503 @Override
504 public void startTimer() {
505 mHandler.postDelayed(mUpdateTimeTask, 0);
506 }
507
Alexandre Savard14323be2012-10-24 10:02:13 -0400508}