blob: a9e9dfe56686fbe7757437da2f90a2aa53ea52bf [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
Alexandre Lision3c6b7102013-09-16 16:56:46 -040036import java.util.ArrayList;
alision85704182013-05-29 15:23:03 -040037import java.util.HashMap;
Adrien Béraud33268882013-05-18 03:41:15 +100038
Alexandre Savard14323be2012-10-24 10:02:13 -040039import android.app.Activity;
Alexandre Savard6d54bbc2012-10-24 11:04:23 -040040import android.content.ComponentName;
alision17052d42013-04-22 10:39:38 -040041import android.content.Context;
Alexandre Savard6d54bbc2012-10-24 11:04:23 -040042import android.content.Intent;
alision84813a12013-05-27 17:40:39 -040043import android.content.IntentFilter;
Alexandre Savard6d54bbc2012-10-24 11:04:23 -040044import android.content.ServiceConnection;
alision55c36cb2013-06-14 14:57:38 -040045import android.net.Uri;
Alexandre Savard14323be2012-10-24 10:02:13 -040046import android.os.Bundle;
Alexandre Lision0c384512013-09-17 17:15:57 -040047import android.os.Handler;
Alexandre Savard6d54bbc2012-10-24 11:04:23 -040048import android.os.IBinder;
alision85992112013-05-29 12:18:08 -040049import android.os.RemoteException;
Alexandre Lision0c384512013-09-17 17:15:57 -040050import android.os.SystemClock;
alisionfde875f2013-05-28 17:01:54 -040051import android.support.v4.widget.SlidingPaneLayout;
Alexandre Savard6d54bbc2012-10-24 11:04:23 -040052import android.util.Log;
alisionfde875f2013-05-28 17:01:54 -040053import android.view.View;
Adrien Béraud33268882013-05-18 03:41:15 +100054import android.widget.Toast;
Alexandre Savard14323be2012-10-24 10:02:13 -040055
56import com.savoirfairelinux.sflphone.R;
alision84813a12013-05-27 17:40:39 -040057import com.savoirfairelinux.sflphone.fragments.CallFragment;
alisionfde875f2013-05-28 17:01:54 -040058import com.savoirfairelinux.sflphone.fragments.CallListFragment;
alision84813a12013-05-27 17:40:39 -040059import com.savoirfairelinux.sflphone.interfaces.CallInterface;
alision55c36cb2013-06-14 14:57:38 -040060import com.savoirfairelinux.sflphone.model.CallContact;
alisiondf1dac92013-06-27 17:35:53 -040061import com.savoirfairelinux.sflphone.model.Conference;
alisionf76de3b2013-04-16 15:35:22 -040062import com.savoirfairelinux.sflphone.model.SipCall;
alision85992112013-05-29 12:18:08 -040063import com.savoirfairelinux.sflphone.model.SipCall.state;
alisioncc7bb422013-06-06 15:31:39 -040064import com.savoirfairelinux.sflphone.receivers.CallReceiver;
alision84813a12013-05-27 17:40:39 -040065import com.savoirfairelinux.sflphone.service.CallManagerCallBack;
Alexandre Savard6d54bbc2012-10-24 11:04:23 -040066import com.savoirfairelinux.sflphone.service.ISipService;
67import com.savoirfairelinux.sflphone.service.SipService;
Adrien Béraudc9c424d2013-05-30 17:47:35 +100068import com.savoirfairelinux.sflphone.views.CallPaneLayout;
Alexandre Savard14323be2012-10-24 10:02:13 -040069
alisionfde875f2013-05-28 17:01:54 -040070public class CallActivity extends Activity implements CallInterface, CallFragment.Callbacks, CallListFragment.Callbacks {
alision55c36cb2013-06-14 14:57:38 -040071 static final String TAG = "CallActivity";
72 private ISipService service;
alision84813a12013-05-27 17:40:39 -040073
alision55c36cb2013-06-14 14:57:38 -040074 CallReceiver receiver;
alision85992112013-05-29 12:18:08 -040075
alision55c36cb2013-06-14 14:57:38 -040076 CallPaneLayout slidingPaneLayout;
Adrien Béraud33268882013-05-18 03:41:15 +100077
alision55c36cb2013-06-14 14:57:38 -040078 CallListFragment mCallsFragment;
79 CallFragment mCurrentCallFragment;
alisiondf1dac92013-06-27 17:35:53 -040080 private boolean fragIsChanging;
Alexandre Lision1a9e3b12013-09-16 11:06:07 -040081
82 /* result code sent in c&ase of call failure */
Alexandre Lisionc51ccb12013-09-11 16:00:30 -040083 public static int RESULT_FAILURE = -10;
Alexandre Savard4f42ade2012-10-24 18:03:31 -040084
alision55c36cb2013-06-14 14:57:38 -040085 @Override
86 protected void onCreate(Bundle savedInstanceState) {
87 super.onCreate(savedInstanceState);
88 setContentView(R.layout.activity_call_layout);
Alexandre Savard4f42ade2012-10-24 18:03:31 -040089
alision55c36cb2013-06-14 14:57:38 -040090 receiver = new CallReceiver(this);
Adrien Béraud33268882013-05-18 03:41:15 +100091
alision55c36cb2013-06-14 14:57:38 -040092 mCallsFragment = new CallListFragment();
Adrien Béraud33268882013-05-18 03:41:15 +100093
alision55c36cb2013-06-14 14:57:38 -040094 getFragmentManager().beginTransaction().replace(R.id.calllist_pane, mCallsFragment).commit();
alision85992112013-05-29 12:18:08 -040095
alision55c36cb2013-06-14 14:57:38 -040096 slidingPaneLayout = (CallPaneLayout) findViewById(R.id.slidingpanelayout);
alisiondf1dac92013-06-27 17:35:53 -040097
alision55c36cb2013-06-14 14:57:38 -040098 slidingPaneLayout.setPanelSlideListener(new SlidingPaneLayout.PanelSlideListener() {
alision84813a12013-05-27 17:40:39 -040099
alision55c36cb2013-06-14 14:57:38 -0400100 @Override
101 public void onPanelSlide(View view, float offSet) {
102 }
alisionfde875f2013-05-28 17:01:54 -0400103
alision55c36cb2013-06-14 14:57:38 -0400104 @Override
105 public void onPanelOpened(View view) {
alisionfde875f2013-05-28 17:01:54 -0400106
alision55c36cb2013-06-14 14:57:38 -0400107 switch (view.getId()) {
108 case R.id.calllist_pane:
109 // getFragmentManager().findFragmentById(R.id.calllist_pane).setHasOptionsMenu(true);
110 // getFragmentManager().findFragmentById(R.id.ongoingcall_pane).setHasOptionsMenu(false);
111 break;
112 default:
113 break;
114 }
115 }
alisionfde875f2013-05-28 17:01:54 -0400116
alision55c36cb2013-06-14 14:57:38 -0400117 @Override
118 public void onPanelClosed(View view) {
alisionfde875f2013-05-28 17:01:54 -0400119
alision55c36cb2013-06-14 14:57:38 -0400120 switch (view.getId()) {
121 case R.id.ongoingcall_pane:
alisiondf1dac92013-06-27 17:35:53 -0400122 if (fragIsChanging) {
123 getFragmentManager().beginTransaction().replace(R.id.ongoingcall_pane, mCurrentCallFragment).commit();
124
125 fragIsChanging = false;
Alexandre Lisiona764c682013-09-09 10:02:07 -0400126 } else if (mCurrentCallFragment != null && mCurrentCallFragment.getBubbleView() != null) {
alisiondf1dac92013-06-27 17:35:53 -0400127 mCurrentCallFragment.getBubbleView().restartDrawing();
128 }
129
alision55c36cb2013-06-14 14:57:38 -0400130 break;
131 default:
132 break;
133 }
134 }
135 });
alisionfde875f2013-05-28 17:01:54 -0400136
alision55c36cb2013-06-14 14:57:38 -0400137 Intent intent = new Intent(this, SipService.class);
138 bindService(intent, mConnection, Context.BIND_AUTO_CREATE);
Alexandre Lisionc51ccb12013-09-11 16:00:30 -0400139 slidingPaneLayout.setCoveredFadeColor(0xFF0000);
alision55c36cb2013-06-14 14:57:38 -0400140 }
alisiond45da712013-05-30 09:18:49 -0400141
alision55c36cb2013-06-14 14:57:38 -0400142 /* activity gets back to the foreground and user input */
143 @Override
144 protected void onResume() {
145 Log.i(TAG, "onResume");
146 IntentFilter intentFilter = new IntentFilter();
147 intentFilter.addAction(CallManagerCallBack.INCOMING_CALL);
148 intentFilter.addAction(CallManagerCallBack.INCOMING_TEXT);
149 intentFilter.addAction(CallManagerCallBack.CALL_STATE_CHANGED);
alisiondf1dac92013-06-27 17:35:53 -0400150 intentFilter.addAction(CallManagerCallBack.CONF_CREATED);
151 intentFilter.addAction(CallManagerCallBack.CONF_REMOVED);
152 intentFilter.addAction(CallManagerCallBack.CONF_CHANGED);
153 intentFilter.addAction(CallManagerCallBack.RECORD_STATE_CHANGED);
alision55c36cb2013-06-14 14:57:38 -0400154 registerReceiver(receiver, intentFilter);
Alexandre Lision0c384512013-09-17 17:15:57 -0400155
alision55c36cb2013-06-14 14:57:38 -0400156 super.onResume();
157 }
alisiond45da712013-05-30 09:18:49 -0400158
Alexandre Lision0c384512013-09-17 17:15:57 -0400159 private Handler mHandler = new Handler();
160 private Runnable mUpdateTimeTask = new Runnable() {
161 public void run() {
162 final long start = SystemClock.uptimeMillis();
163 long millis = SystemClock.uptimeMillis() - start;
164 int seconds = (int) (millis / 1000);
165 int minutes = seconds / 60;
166 seconds = seconds % 60;
167
Alexandre Lisionfd7a88f2013-09-18 10:03:17 -0400168 if(mCurrentCallFragment != null)
169 mCurrentCallFragment.updateTime();
Alexandre Lision0c384512013-09-17 17:15:57 -0400170 mCallsFragment.update();
171
172 mHandler.postAtTime(this, start + (((minutes * 60) + seconds + 1) * 1000));
173 }
174 };
175
alision55c36cb2013-06-14 14:57:38 -0400176 /* activity no more in foreground */
177 @Override
178 protected void onPause() {
179 super.onPause();
Alexandre Lision0c384512013-09-17 17:15:57 -0400180 mHandler.removeCallbacks(mUpdateTimeTask);
alision55c36cb2013-06-14 14:57:38 -0400181 }
Alexandre Savard6d54bbc2012-10-24 11:04:23 -0400182
alision55c36cb2013-06-14 14:57:38 -0400183 @Override
184 protected void onDestroy() {
Alexandre Savard6d54bbc2012-10-24 11:04:23 -0400185
alision55c36cb2013-06-14 14:57:38 -0400186 unregisterReceiver(receiver);
187
188 try {
alision2cb99562013-05-30 17:02:20 -0400189 service.createNotification();
190 } catch (RemoteException e) {
191 Log.e(TAG, e.toString());
192 }
alision55c36cb2013-06-14 14:57:38 -0400193 // Log.i(TAG, "Destroying Call Activity for call " + mCall.getCallId());
194 // LocalBroadcastManager.getInstance(this).unregisterReceiver(mMessageReceiver);
195 try {
alision2cb99562013-05-30 17:02:20 -0400196 service.destroyNotification();
197 } catch (RemoteException e) {
198 Log.e(TAG, e.toString());
199 }
alision55c36cb2013-06-14 14:57:38 -0400200 unbindService(mConnection);
Adrien Béraud33268882013-05-18 03:41:15 +1000201
alision55c36cb2013-06-14 14:57:38 -0400202 super.onDestroy();
203 }
Adrien Béraud33268882013-05-18 03:41:15 +1000204
alision55c36cb2013-06-14 14:57:38 -0400205 /** Defines callbacks for service binding, passed to bindService() */
206 private ServiceConnection mConnection = new ServiceConnection() {
207 @Override
208 public void onServiceConnected(ComponentName className, IBinder binder) {
209 service = ISipService.Stub.asInterface(binder);
alisiondf1dac92013-06-27 17:35:53 -0400210
alision55c36cb2013-06-14 14:57:38 -0400211 mCurrentCallFragment = new CallFragment();
Alexandre Lision0c384512013-09-17 17:15:57 -0400212
alision55c36cb2013-06-14 14:57:38 -0400213 Uri u = getIntent().getData();
214 if (u != null) {
215 CallContact c = CallContact.ContactBuilder.buildUnknownContact(u.getSchemeSpecificPart());
216 try {
217 service.destroyNotification();
alision907bde72013-06-20 14:40:37 -0400218 SipCall call = SipCall.SipCallBuilder.getInstance().startCallCreation().setContact(c)
alision55c36cb2013-06-14 14:57:38 -0400219 .setAccountID(service.getAccountList().get(1).toString()).setCallType(SipCall.state.CALL_TYPE_OUTGOING).build();
alisiondf1dac92013-06-27 17:35:53 -0400220 Conference tmp = new Conference("-1");
221 tmp.getParticipants().add(call);
alision55c36cb2013-06-14 14:57:38 -0400222 Bundle b = new Bundle();
alisiondf1dac92013-06-27 17:35:53 -0400223 b.putParcelable("conference", tmp);
alision1005ba12013-06-19 13:52:44 -0400224 Log.i(TAG, "Arguments set");
alision55c36cb2013-06-14 14:57:38 -0400225 mCurrentCallFragment.setArguments(b);
226 } catch (RemoteException e) {
alision55c36cb2013-06-14 14:57:38 -0400227 e.printStackTrace();
228 } catch (Exception e) {
alision55c36cb2013-06-14 14:57:38 -0400229 e.printStackTrace();
230 }
alision55c36cb2013-06-14 14:57:38 -0400231 } else {
alisiondf1dac92013-06-27 17:35:53 -0400232 if (getIntent().getBooleanExtra("resuming", false)) {
233
234 Bundle b = new Bundle();
Alexandre Lision1a9e3b12013-09-16 11:06:07 -0400235 b.putParcelable("conference", (Conference) getIntent().getParcelableExtra("conference"));
236 mCurrentCallFragment.setArguments(b);
237
alisiondf1dac92013-06-27 17:35:53 -0400238 } else {
239 mCurrentCallFragment.setArguments(getIntent().getExtras());
240 }
241
alision55c36cb2013-06-14 14:57:38 -0400242 }
Alexandre Savard6d54bbc2012-10-24 11:04:23 -0400243
alision55c36cb2013-06-14 14:57:38 -0400244 slidingPaneLayout.setCurFragment(mCurrentCallFragment);
245 getIntent().getExtras();
246 mCallsFragment.update();
247 getFragmentManager().beginTransaction().replace(R.id.ongoingcall_pane, mCurrentCallFragment).commit();
alisiond8c83882013-05-17 17:00:42 -0400248
alision55c36cb2013-06-14 14:57:38 -0400249 }
Adrien Béraud6bbce912013-05-24 00:48:13 +1000250
alision55c36cb2013-06-14 14:57:38 -0400251 @Override
252 public void onServiceDisconnected(ComponentName arg0) {
253 }
254 };
Adrien Béraud6bbce912013-05-24 00:48:13 +1000255
alision55c36cb2013-06-14 14:57:38 -0400256 @Override
257 public void incomingCall(Intent call) {
258 Toast.makeText(this, "New Call incoming", Toast.LENGTH_LONG).show();
Alexandre Savarde41f5212012-10-26 14:23:50 -0400259
alision55c36cb2013-06-14 14:57:38 -0400260 mCallsFragment.update();
Alexandre Savarddf544262012-10-25 14:24:08 -0400261
alision55c36cb2013-06-14 14:57:38 -0400262 }
alision84813a12013-05-27 17:40:39 -0400263
alision55c36cb2013-06-14 14:57:38 -0400264 @Override
265 public void callStateChanged(Intent callState) {
alision84813a12013-05-27 17:40:39 -0400266
alision55c36cb2013-06-14 14:57:38 -0400267 Bundle b = callState.getBundleExtra("com.savoirfairelinux.sflphone.service.newstate");
268 processCallStateChangedSignal(b.getString("CallID"), b.getString("State"));
alision84813a12013-05-27 17:40:39 -0400269
alision55c36cb2013-06-14 14:57:38 -0400270 }
alision84813a12013-05-27 17:40:39 -0400271
alision55c36cb2013-06-14 14:57:38 -0400272 public void processCallStateChangedSignal(String callID, String newState) {
273 /*
274 * Bundle bundle = intent.getBundleExtra("com.savoirfairelinux.sflphone.service.newstate"); String callID = bundle.getString("CallID"); String
275 * newState = bundle.getString("State");
276 */
277 // CallFragment fr = mCurrentCallFragment;
Alexandre Lision1a9e3b12013-09-16 11:06:07 -0400278
alision55c36cb2013-06-14 14:57:38 -0400279 mCallsFragment.update();
alision84813a12013-05-27 17:40:39 -0400280
Alexandre Lisiona764c682013-09-09 10:02:07 -0400281 if (mCurrentCallFragment != null)
282 mCurrentCallFragment.changeCallState(callID, newState);
Adrien Béraud29556042013-04-26 17:35:43 +1000283
alision55c36cb2013-06-14 14:57:38 -0400284 try {
alisiondf1dac92013-06-27 17:35:53 -0400285 HashMap<String, SipCall> callMap = (HashMap<String, SipCall>) service.getCallList();
286 HashMap<String, Conference> confMap = (HashMap<String, Conference>) service.getConferenceList();
Alexandre Lision3c6b7102013-09-16 16:56:46 -0400287
alision34673e62013-06-25 14:40:07 -0400288 if (callMap.size() == 0 && confMap.size() == 0) {
alision34673e62013-06-25 14:40:07 -0400289 finish();
alision55c36cb2013-06-14 14:57:38 -0400290 }
Alexandre Lision3c6b7102013-09-16 16:56:46 -0400291
292 if (callMap.size() > 0) {
293 ArrayList<SipCall> calls = new ArrayList<SipCall>(callMap.values());
294 HashMap<String, String> details = (HashMap<String, String>) service.getCallDetails(calls.get(0).getCallId());
Alexandre Lision0c384512013-09-17 17:15:57 -0400295
Alexandre Lision3c6b7102013-09-16 16:56:46 -0400296 }
alision55c36cb2013-06-14 14:57:38 -0400297 } catch (RemoteException e) {
Alexandre Lision3c6b7102013-09-16 16:56:46 -0400298
alision55c36cb2013-06-14 14:57:38 -0400299 Log.e(TAG, e.toString());
300 }
Adrien Béraud29556042013-04-26 17:35:43 +1000301
alision55c36cb2013-06-14 14:57:38 -0400302 Log.w(TAG, "processCallStateChangedSignal " + newState);
Adrien Béraud71b2f812013-04-26 18:51:02 +1000303
alision55c36cb2013-06-14 14:57:38 -0400304 }
305
306 @Override
307 public void incomingText(Intent msg) {
308 Bundle b = msg.getBundleExtra("com.savoirfairelinux.sflphone.service.newtext");
309
alisiona2a2da12013-06-05 15:58:39 -0400310 Toast.makeText(this, b.getString("From") + " : " + b.getString("Msg"), Toast.LENGTH_LONG).show();
Adrien Béraud71b2f812013-04-26 18:51:02 +1000311
alision55c36cb2013-06-14 14:57:38 -0400312 }
alision7f18fc82013-05-01 09:37:33 -0400313
alision55c36cb2013-06-14 14:57:38 -0400314 @Override
315 public ISipService getService() {
316 return service;
317 }
alision04a00182013-05-10 17:05:29 -0400318
alision55c36cb2013-06-14 14:57:38 -0400319 @Override
alisiondf1dac92013-06-27 17:35:53 -0400320 public void onCallSelected(Conference conf) {
alision85992112013-05-29 12:18:08 -0400321
Alexandre Lisiona764c682013-09-09 10:02:07 -0400322 if (mCurrentCallFragment == null || mCurrentCallFragment.getBubbleView() == null) {
alisiondf1dac92013-06-27 17:35:53 -0400323 return;
324 }
325 mCurrentCallFragment.getBubbleView().stopThread();
alision55c36cb2013-06-14 14:57:38 -0400326 mCurrentCallFragment = new CallFragment();
327 Bundle b = new Bundle();
alision34673e62013-06-25 14:40:07 -0400328
alisiondf1dac92013-06-27 17:35:53 -0400329 b.putParcelable("conference", conf);
alision55c36cb2013-06-14 14:57:38 -0400330 mCurrentCallFragment.setArguments(b);
alision85992112013-05-29 12:18:08 -0400331
alisiondf1dac92013-06-27 17:35:53 -0400332 // if (calls.size() == 1) {
333 // onCallResumed(calls.get(0));
334 // }
335
alision55c36cb2013-06-14 14:57:38 -0400336 slidingPaneLayout.setCurFragment(mCurrentCallFragment);
337 slidingPaneLayout.closePane();
alisiondf1dac92013-06-27 17:35:53 -0400338 fragIsChanging = true;
alision85992112013-05-29 12:18:08 -0400339
alision55c36cb2013-06-14 14:57:38 -0400340 }
alision85992112013-05-29 12:18:08 -0400341
alision55c36cb2013-06-14 14:57:38 -0400342 @Override
343 public void callContact(SipCall call) {
344 try {
345 service.placeCall(call);
346 } catch (RemoteException e) {
347 Log.e(TAG, "Cannot call service method", e);
348 }
alision85992112013-05-29 12:18:08 -0400349
alision55c36cb2013-06-14 14:57:38 -0400350 }
alision85992112013-05-29 12:18:08 -0400351
alision55c36cb2013-06-14 14:57:38 -0400352 @Override
353 public void onCallAccepted(SipCall call) {
354 int callState = call.getCallStateInt();
355 if (callState != state.CALL_STATE_RINGING && callState != state.CALL_STATE_NONE) {
356 return;
357 }
alision85992112013-05-29 12:18:08 -0400358
alision55c36cb2013-06-14 14:57:38 -0400359 try {
360 service.accept(call.getCallId());
361 } catch (RemoteException e) {
362 Log.e(TAG, "Cannot call service method", e);
363 }
alision85992112013-05-29 12:18:08 -0400364
alision55c36cb2013-06-14 14:57:38 -0400365 }
alision85992112013-05-29 12:18:08 -0400366
alision55c36cb2013-06-14 14:57:38 -0400367 @Override
368 public void onCallRejected(SipCall call) {
369 try {
370 if (call.getCallStateInt() == state.CALL_STATE_RINGING) {
371 service.refuse(call.getCallId());
372 return;
373 }
374 } catch (RemoteException e) {
375 Log.e(TAG, "Cannot call service method", e);
376 }
377 }
alision85992112013-05-29 12:18:08 -0400378
alision55c36cb2013-06-14 14:57:38 -0400379 @Override
380 public void onCallEnded(SipCall call) {
381 try {
382 if (call.getCallStateInt() == state.CALL_STATE_NONE || call.getCallStateInt() == state.CALL_STATE_CURRENT
383 || call.getCallStateInt() == state.CALL_STATE_HOLD) {
384 service.hangUp(call.getCallId());
385 return;
alision85992112013-05-29 12:18:08 -0400386
alision55c36cb2013-06-14 14:57:38 -0400387 } else if (call.getCallStateInt() == state.CALL_STATE_RINGING) {
388 if (call.getCallType() == state.CALL_TYPE_INCOMING) {
389 service.refuse(call.getCallId());
390 return;
391 } else if (call.getCallType() == state.CALL_TYPE_OUTGOING) {
392 service.hangUp(call.getCallId());
393 return;
394 }
395 }
396 } catch (RemoteException e) {
397 Log.e(TAG, "Cannot call service method", e);
398 }
399 }
alision85992112013-05-29 12:18:08 -0400400
alision55c36cb2013-06-14 14:57:38 -0400401 @Override
402 public void onCallSuspended(SipCall call) {
403 try {
404 if (call.getCallStateInt() == state.CALL_STATE_CURRENT) {
405 service.hold(call.getCallId());
406 return;
407 }
408 } catch (RemoteException e) {
409 Log.e(TAG, "Cannot call service method", e);
410 }
411 }
alision85992112013-05-29 12:18:08 -0400412
alision55c36cb2013-06-14 14:57:38 -0400413 @Override
414 public void onCallResumed(SipCall call) {
415 try {
416 if (call.getCallStateInt() == state.CALL_STATE_HOLD) {
417 service.unhold(call.getCallId());
418 return;
419 }
420 } catch (RemoteException e) {
421 Log.e(TAG, "Cannot call service method", e);
422 }
alision85992112013-05-29 12:18:08 -0400423
alision55c36cb2013-06-14 14:57:38 -0400424 }
alision85992112013-05-29 12:18:08 -0400425
alision55c36cb2013-06-14 14:57:38 -0400426 @Override
427 public void onCalltransfered(SipCall call, String to) {
428 try {
429 if (call.getCallStateInt() == state.CALL_STATE_CURRENT) {
430 service.transfer(call.getCallId(), to);
431 }
432 } catch (RemoteException e) {
433 Log.e(TAG, "Cannot call service method", e);
434 }
alision85992112013-05-29 12:18:08 -0400435
alision55c36cb2013-06-14 14:57:38 -0400436 }
alision85992112013-05-29 12:18:08 -0400437
alision55c36cb2013-06-14 14:57:38 -0400438 @Override
439 public void onRecordCall(SipCall call) {
440 try {
alisiondf1dac92013-06-27 17:35:53 -0400441
Alexandre Lision1a9e3b12013-09-16 11:06:07 -0400442 // service.setRecordPath(Environment.getExternalStorageDirectory().getAbsolutePath() + File.separator);
Alexandre Lision2b237922013-09-09 16:23:02 -0400443 Log.w(TAG, "Recording path " + service.getRecordPath());
Alexandre Lisiona764c682013-09-09 10:02:07 -0400444 service.toggleRecordingCall(call.getCallId());
445
alision55c36cb2013-06-14 14:57:38 -0400446 } catch (RemoteException e) {
447 Log.e(TAG, "Cannot call service method", e);
448 }
alision85992112013-05-29 12:18:08 -0400449
alision55c36cb2013-06-14 14:57:38 -0400450 }
alision85992112013-05-29 12:18:08 -0400451
alision55c36cb2013-06-14 14:57:38 -0400452 @Override
453 public void onBackPressed() {
454 super.onBackPressed();
455 Intent launchHome = new Intent(this, SFLPhoneHomeActivity.class);
456 launchHome.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
457 startActivity(launchHome);
458 }
alision85992112013-05-29 12:18:08 -0400459
alision55c36cb2013-06-14 14:57:38 -0400460 @Override
461 public void onSendMessage(SipCall call, String msg) {
462 try {
463 if (call.getCallStateInt() == state.CALL_STATE_CURRENT) {
464 service.sendTextMessage(call.getCallId(), msg, "Me");
465 }
466 } catch (RemoteException e) {
467 Log.e(TAG, "Cannot call service method", e);
468 }
alisiond45da712013-05-30 09:18:49 -0400469
alision55c36cb2013-06-14 14:57:38 -0400470 }
alisiond45da712013-05-30 09:18:49 -0400471
alision806e18e2013-06-21 15:30:17 -0400472 @Override
473 public void confCreated(Intent intent) {
474 mCallsFragment.update();
alision34673e62013-06-25 14:40:07 -0400475
alision806e18e2013-06-21 15:30:17 -0400476 }
477
478 @Override
479 public void confRemoved(Intent intent) {
480 mCallsFragment.update();
481 }
482
483 @Override
484 public void confChanged(Intent intent) {
485 mCallsFragment.update();
486 }
487
488 @Override
489 public void onCallsTerminated() {
alisiondf1dac92013-06-27 17:35:53 -0400490
491 }
492
493 @Override
494 public void recordingChanged(Intent intent) {
495 mCallsFragment.update();
496 }
497
498 @Override
499 public void replaceCurrentCallDisplayed() {
500 mCurrentCallFragment.getBubbleView().stopThread();
501 getFragmentManager().beginTransaction().remove(mCurrentCallFragment).commit();
alision465ceba2013-07-04 09:24:30 -0400502 mCurrentCallFragment = null;
alision34673e62013-06-25 14:40:07 -0400503
alision806e18e2013-06-21 15:30:17 -0400504 }
505
Alexandre Lision0c384512013-09-17 17:15:57 -0400506 @Override
507 public void startTimer() {
508 mHandler.postDelayed(mUpdateTimeTask, 0);
509 }
510
Alexandre Savard14323be2012-10-24 10:02:13 -0400511}