blob: 79717b0ba0f1f3d8412f936c5b1b90b483c86810 [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;
Alexandre Lision0edf18c2013-09-23 17:35:50 -040044import android.graphics.PixelFormat;
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;
Alexandre Lision64dc8c02013-09-25 15:32:25 -040053import android.view.KeyEvent;
alisionfde875f2013-05-28 17:01:54 -040054import android.view.View;
Alexandre Lision0edf18c2013-09-23 17:35:50 -040055import android.view.Window;
Adrien Béraud33268882013-05-18 03:41:15 +100056import android.widget.Toast;
Alexandre Savard14323be2012-10-24 10:02:13 -040057
58import com.savoirfairelinux.sflphone.R;
alision84813a12013-05-27 17:40:39 -040059import com.savoirfairelinux.sflphone.fragments.CallFragment;
alisionfde875f2013-05-28 17:01:54 -040060import com.savoirfairelinux.sflphone.fragments.CallListFragment;
alision84813a12013-05-27 17:40:39 -040061import com.savoirfairelinux.sflphone.interfaces.CallInterface;
alision55c36cb2013-06-14 14:57:38 -040062import com.savoirfairelinux.sflphone.model.CallContact;
alisiondf1dac92013-06-27 17:35:53 -040063import com.savoirfairelinux.sflphone.model.Conference;
alisionf76de3b2013-04-16 15:35:22 -040064import com.savoirfairelinux.sflphone.model.SipCall;
alision85992112013-05-29 12:18:08 -040065import com.savoirfairelinux.sflphone.model.SipCall.state;
alisioncc7bb422013-06-06 15:31:39 -040066import com.savoirfairelinux.sflphone.receivers.CallReceiver;
alision84813a12013-05-27 17:40:39 -040067import com.savoirfairelinux.sflphone.service.CallManagerCallBack;
Alexandre Savard6d54bbc2012-10-24 11:04:23 -040068import com.savoirfairelinux.sflphone.service.ISipService;
69import com.savoirfairelinux.sflphone.service.SipService;
Adrien Béraudc9c424d2013-05-30 17:47:35 +100070import com.savoirfairelinux.sflphone.views.CallPaneLayout;
Alexandre Savard14323be2012-10-24 10:02:13 -040071
alisionfde875f2013-05-28 17:01:54 -040072public class CallActivity extends Activity implements CallInterface, CallFragment.Callbacks, CallListFragment.Callbacks {
alision55c36cb2013-06-14 14:57:38 -040073 static final String TAG = "CallActivity";
74 private ISipService service;
alision84813a12013-05-27 17:40:39 -040075
alision55c36cb2013-06-14 14:57:38 -040076 CallReceiver receiver;
alision85992112013-05-29 12:18:08 -040077
alision55c36cb2013-06-14 14:57:38 -040078 CallPaneLayout slidingPaneLayout;
Adrien Béraud33268882013-05-18 03:41:15 +100079
Alexandre Lision0edf18c2013-09-23 17:35:50 -040080 // CallListFragment mCallsFragment;
alision55c36cb2013-06-14 14:57:38 -040081 CallFragment mCurrentCallFragment;
Alexandre Lision0edf18c2013-09-23 17:35:50 -040082 // private boolean fragIsChanging;
Alexandre Lision1a9e3b12013-09-16 11:06:07 -040083
Alexandre Lisionf1850c02013-09-23 14:19:34 -040084 /* result code sent in case of call failure */
Alexandre Lisionc51ccb12013-09-11 16:00:30 -040085 public static int RESULT_FAILURE = -10;
Alexandre Savard4f42ade2012-10-24 18:03:31 -040086
alision55c36cb2013-06-14 14:57:38 -040087 @Override
88 protected void onCreate(Bundle savedInstanceState) {
89 super.onCreate(savedInstanceState);
90 setContentView(R.layout.activity_call_layout);
Alexandre Savard4f42ade2012-10-24 18:03:31 -040091
alision55c36cb2013-06-14 14:57:38 -040092 receiver = new CallReceiver(this);
Adrien Béraud33268882013-05-18 03:41:15 +100093
Alexandre Lision0edf18c2013-09-23 17:35:50 -040094 // mCallsFragment = new CallListFragment();
Adrien Béraud33268882013-05-18 03:41:15 +100095
Alexandre Lision0edf18c2013-09-23 17:35:50 -040096 // getFragmentManager().beginTransaction().replace(R.id.calllist_pane, mCallsFragment).commit();
alision85992112013-05-29 12:18:08 -040097
alision55c36cb2013-06-14 14:57:38 -040098 slidingPaneLayout = (CallPaneLayout) findViewById(R.id.slidingpanelayout);
alisiondf1dac92013-06-27 17:35:53 -040099
alision55c36cb2013-06-14 14:57:38 -0400100 slidingPaneLayout.setPanelSlideListener(new SlidingPaneLayout.PanelSlideListener() {
alision84813a12013-05-27 17:40:39 -0400101
alision55c36cb2013-06-14 14:57:38 -0400102 @Override
103 public void onPanelSlide(View view, float offSet) {
104 }
alisionfde875f2013-05-28 17:01:54 -0400105
alision55c36cb2013-06-14 14:57:38 -0400106 @Override
107 public void onPanelOpened(View view) {
alisionfde875f2013-05-28 17:01:54 -0400108
alision55c36cb2013-06-14 14:57:38 -0400109 switch (view.getId()) {
110 case R.id.calllist_pane:
111 // getFragmentManager().findFragmentById(R.id.calllist_pane).setHasOptionsMenu(true);
112 // getFragmentManager().findFragmentById(R.id.ongoingcall_pane).setHasOptionsMenu(false);
113 break;
114 default:
115 break;
116 }
117 }
alisionfde875f2013-05-28 17:01:54 -0400118
alision55c36cb2013-06-14 14:57:38 -0400119 @Override
120 public void onPanelClosed(View view) {
alisionfde875f2013-05-28 17:01:54 -0400121
Alexandre Lision0edf18c2013-09-23 17:35:50 -0400122 // switch (view.getId()) {
123 // case R.id.ongoingcall_pane:
124 // if (fragIsChanging) {
125 // getFragmentManager().beginTransaction().replace(R.id.ongoingcall_pane, mCurrentCallFragment).commit();
126 //
127 // fragIsChanging = false;
128 // } else if (mCurrentCallFragment != null && mCurrentCallFragment.getBubbleView() != null) {
129 // mCurrentCallFragment.getBubbleView().restartDrawing();
130 // }
131 //
132 // break;
133 // default:
134 // break;
135 // }
alision55c36cb2013-06-14 14:57:38 -0400136 }
137 });
alisionfde875f2013-05-28 17:01:54 -0400138
alision55c36cb2013-06-14 14:57:38 -0400139 Intent intent = new Intent(this, SipService.class);
140 bindService(intent, mConnection, Context.BIND_AUTO_CREATE);
alision55c36cb2013-06-14 14:57:38 -0400141 }
alisiond45da712013-05-30 09:18:49 -0400142
alision55c36cb2013-06-14 14:57:38 -0400143 /* activity gets back to the foreground and user input */
144 @Override
145 protected void onResume() {
146 Log.i(TAG, "onResume");
147 IntentFilter intentFilter = new IntentFilter();
148 intentFilter.addAction(CallManagerCallBack.INCOMING_CALL);
149 intentFilter.addAction(CallManagerCallBack.INCOMING_TEXT);
150 intentFilter.addAction(CallManagerCallBack.CALL_STATE_CHANGED);
alisiondf1dac92013-06-27 17:35:53 -0400151 intentFilter.addAction(CallManagerCallBack.CONF_CREATED);
152 intentFilter.addAction(CallManagerCallBack.CONF_REMOVED);
153 intentFilter.addAction(CallManagerCallBack.CONF_CHANGED);
154 intentFilter.addAction(CallManagerCallBack.RECORD_STATE_CHANGED);
alision55c36cb2013-06-14 14:57:38 -0400155 registerReceiver(receiver, intentFilter);
Alexandre Lision0c384512013-09-17 17:15:57 -0400156
alision55c36cb2013-06-14 14:57:38 -0400157 super.onResume();
158 }
alisiond45da712013-05-30 09:18:49 -0400159
Alexandre Lision0edf18c2013-09-23 17:35:50 -0400160 @Override
161 public void onAttachedToWindow() {
162 super.onAttachedToWindow();
163 Window window = getWindow();
164 window.setFormat(PixelFormat.RGBA_8888);
165 }
166
Alexandre Lision0c384512013-09-17 17:15:57 -0400167 private Handler mHandler = new Handler();
168 private Runnable mUpdateTimeTask = new Runnable() {
Adrien Béraud9360f242013-09-19 11:07:42 +1000169 @Override
Alexandre Lision0c384512013-09-17 17:15:57 -0400170 public void run() {
Alexandre Lision0edf18c2013-09-23 17:35:50 -0400171 if (mCurrentCallFragment != null)
Alexandre Lisionfd7a88f2013-09-18 10:03:17 -0400172 mCurrentCallFragment.updateTime();
Alexandre Lision0edf18c2013-09-23 17:35:50 -0400173 // mCallsFragment.update();
Alexandre Lision0c384512013-09-17 17:15:57 -0400174
Adrien Béraud9360f242013-09-19 11:07:42 +1000175 mHandler.postAtTime(this, SystemClock.uptimeMillis() + 1000);
Alexandre Lision0c384512013-09-17 17:15:57 -0400176 }
177 };
178
alision55c36cb2013-06-14 14:57:38 -0400179 /* activity no more in foreground */
180 @Override
181 protected void onPause() {
182 super.onPause();
Alexandre Lision0c384512013-09-17 17:15:57 -0400183 mHandler.removeCallbacks(mUpdateTimeTask);
alision55c36cb2013-06-14 14:57:38 -0400184 }
Alexandre Lision64dc8c02013-09-25 15:32:25 -0400185
186 @Override
187 public boolean onKeyUp(int keyCode, KeyEvent event) {
Alexandre Lision31f46fc2013-09-26 11:19:54 -0400188
189 if (keyCode == KeyEvent.KEYCODE_BACK){
190 return super.onKeyUp(keyCode, event);
191 }
Alexandre Lision64dc8c02013-09-25 15:32:25 -0400192 mCurrentCallFragment.onKeyUp(keyCode, event);
193 return true;
194 }
Alexandre Savard6d54bbc2012-10-24 11:04:23 -0400195
alision55c36cb2013-06-14 14:57:38 -0400196 @Override
197 protected void onDestroy() {
alision55c36cb2013-06-14 14:57:38 -0400198 unregisterReceiver(receiver);
alision55c36cb2013-06-14 14:57:38 -0400199 unbindService(mConnection);
alision55c36cb2013-06-14 14:57:38 -0400200 super.onDestroy();
201 }
Adrien Béraud33268882013-05-18 03:41:15 +1000202
alision55c36cb2013-06-14 14:57:38 -0400203 /** Defines callbacks for service binding, passed to bindService() */
204 private ServiceConnection mConnection = new ServiceConnection() {
205 @Override
206 public void onServiceConnected(ComponentName className, IBinder binder) {
207 service = ISipService.Stub.asInterface(binder);
alisiondf1dac92013-06-27 17:35:53 -0400208
alision55c36cb2013-06-14 14:57:38 -0400209 mCurrentCallFragment = new CallFragment();
Adrien Béraud9360f242013-09-19 11:07:42 +1000210
alision55c36cb2013-06-14 14:57:38 -0400211 Uri u = getIntent().getData();
212 if (u != null) {
213 CallContact c = CallContact.ContactBuilder.buildUnknownContact(u.getSchemeSpecificPart());
214 try {
215 service.destroyNotification();
alision907bde72013-06-20 14:40:37 -0400216 SipCall call = SipCall.SipCallBuilder.getInstance().startCallCreation().setContact(c)
alision55c36cb2013-06-14 14:57:38 -0400217 .setAccountID(service.getAccountList().get(1).toString()).setCallType(SipCall.state.CALL_TYPE_OUTGOING).build();
alisiondf1dac92013-06-27 17:35:53 -0400218 Conference tmp = new Conference("-1");
219 tmp.getParticipants().add(call);
alision55c36cb2013-06-14 14:57:38 -0400220 Bundle b = new Bundle();
alisiondf1dac92013-06-27 17:35:53 -0400221 b.putParcelable("conference", tmp);
alision1005ba12013-06-19 13:52:44 -0400222 Log.i(TAG, "Arguments set");
alision55c36cb2013-06-14 14:57:38 -0400223 mCurrentCallFragment.setArguments(b);
224 } catch (RemoteException e) {
alision55c36cb2013-06-14 14:57:38 -0400225 e.printStackTrace();
226 } catch (Exception e) {
alision55c36cb2013-06-14 14:57:38 -0400227 e.printStackTrace();
228 }
alision55c36cb2013-06-14 14:57:38 -0400229 } else {
alisiondf1dac92013-06-27 17:35:53 -0400230 if (getIntent().getBooleanExtra("resuming", false)) {
231
232 Bundle b = new Bundle();
Adrien Béraud9360f242013-09-19 11:07:42 +1000233 b.putParcelable("conference", getIntent().getParcelableExtra("conference"));
Alexandre Lision1a9e3b12013-09-16 11:06:07 -0400234 mCurrentCallFragment.setArguments(b);
235
alisiondf1dac92013-06-27 17:35:53 -0400236 } else {
237 mCurrentCallFragment.setArguments(getIntent().getExtras());
238 }
239
alision55c36cb2013-06-14 14:57:38 -0400240 }
Alexandre Savard6d54bbc2012-10-24 11:04:23 -0400241
Alexandre Lision0edf18c2013-09-23 17:35:50 -0400242 // slidingPaneLayout.setCurFragment(mCurrentCallFragment);
alision55c36cb2013-06-14 14:57:38 -0400243 getIntent().getExtras();
Alexandre Lision0edf18c2013-09-23 17:35:50 -0400244 // mCallsFragment.update();
alision55c36cb2013-06-14 14:57:38 -0400245 getFragmentManager().beginTransaction().replace(R.id.ongoingcall_pane, mCurrentCallFragment).commit();
alisiond8c83882013-05-17 17:00:42 -0400246
alision55c36cb2013-06-14 14:57:38 -0400247 }
Adrien Béraud6bbce912013-05-24 00:48:13 +1000248
alision55c36cb2013-06-14 14:57:38 -0400249 @Override
250 public void onServiceDisconnected(ComponentName arg0) {
251 }
252 };
Adrien Béraud6bbce912013-05-24 00:48:13 +1000253
alision55c36cb2013-06-14 14:57:38 -0400254 @Override
255 public void incomingCall(Intent call) {
Alexandre Savarde41f5212012-10-26 14:23:50 -0400256
Alexandre Lision0edf18c2013-09-23 17:35:50 -0400257 // mCallsFragment.update();
Alexandre Savarddf544262012-10-25 14:24:08 -0400258
alision55c36cb2013-06-14 14:57:38 -0400259 }
alision84813a12013-05-27 17:40:39 -0400260
alision55c36cb2013-06-14 14:57:38 -0400261 @Override
262 public void callStateChanged(Intent callState) {
alision84813a12013-05-27 17:40:39 -0400263
alision55c36cb2013-06-14 14:57:38 -0400264 Bundle b = callState.getBundleExtra("com.savoirfairelinux.sflphone.service.newstate");
265 processCallStateChangedSignal(b.getString("CallID"), b.getString("State"));
alision84813a12013-05-27 17:40:39 -0400266
alision55c36cb2013-06-14 14:57:38 -0400267 }
alision84813a12013-05-27 17:40:39 -0400268
Alexandre Lision0edf18c2013-09-23 17:35:50 -0400269 @SuppressWarnings("unchecked")
270 // No proper solution with HashMap runtime cast
alision55c36cb2013-06-14 14:57:38 -0400271 public void processCallStateChangedSignal(String callID, String newState) {
272 /*
273 * Bundle bundle = intent.getBundleExtra("com.savoirfairelinux.sflphone.service.newstate"); String callID = bundle.getString("CallID"); String
274 * newState = bundle.getString("State");
275 */
276 // CallFragment fr = mCurrentCallFragment;
Alexandre Lision1a9e3b12013-09-16 11:06:07 -0400277
Alexandre Lision0edf18c2013-09-23 17:35:50 -0400278 // mCallsFragment.update();
alision84813a12013-05-27 17:40:39 -0400279
Alexandre Lisiona764c682013-09-09 10:02:07 -0400280 if (mCurrentCallFragment != null)
281 mCurrentCallFragment.changeCallState(callID, newState);
Adrien Béraud29556042013-04-26 17:35:43 +1000282
alision55c36cb2013-06-14 14:57:38 -0400283 try {
alisiondf1dac92013-06-27 17:35:53 -0400284 HashMap<String, SipCall> callMap = (HashMap<String, SipCall>) service.getCallList();
285 HashMap<String, Conference> confMap = (HashMap<String, Conference>) service.getConferenceList();
Alexandre Lision3c6b7102013-09-16 16:56:46 -0400286
alision34673e62013-06-25 14:40:07 -0400287 if (callMap.size() == 0 && confMap.size() == 0) {
alision34673e62013-06-25 14:40:07 -0400288 finish();
alision55c36cb2013-06-14 14:57:38 -0400289 }
Alexandre Lision3c6b7102013-09-16 16:56:46 -0400290
291 if (callMap.size() > 0) {
Alexandre Lision0edf18c2013-09-23 17:35:50 -0400292 // ArrayList<SipCall> calls = new ArrayList<SipCall>(callMap.values());
293 // HashMap<String, String> details = (HashMap<String, String>) service.getCallDetails(calls.get(0).getCallId());
Alexandre Lision0c384512013-09-17 17:15:57 -0400294
Alexandre Lision3c6b7102013-09-16 16:56:46 -0400295 }
alision55c36cb2013-06-14 14:57:38 -0400296 } catch (RemoteException e) {
Alexandre Lision3c6b7102013-09-16 16:56:46 -0400297
alision55c36cb2013-06-14 14:57:38 -0400298 Log.e(TAG, e.toString());
299 }
Adrien Béraud29556042013-04-26 17:35:43 +1000300
alision55c36cb2013-06-14 14:57:38 -0400301 Log.w(TAG, "processCallStateChangedSignal " + newState);
Adrien Béraud71b2f812013-04-26 18:51:02 +1000302
alision55c36cb2013-06-14 14:57:38 -0400303 }
304
305 @Override
306 public void incomingText(Intent msg) {
307 Bundle b = msg.getBundleExtra("com.savoirfairelinux.sflphone.service.newtext");
308
alisiona2a2da12013-06-05 15:58:39 -0400309 Toast.makeText(this, b.getString("From") + " : " + b.getString("Msg"), Toast.LENGTH_LONG).show();
Adrien Béraud71b2f812013-04-26 18:51:02 +1000310
alision55c36cb2013-06-14 14:57:38 -0400311 }
alision7f18fc82013-05-01 09:37:33 -0400312
alision55c36cb2013-06-14 14:57:38 -0400313 @Override
314 public ISipService getService() {
315 return service;
316 }
alision04a00182013-05-10 17:05:29 -0400317
alision55c36cb2013-06-14 14:57:38 -0400318 @Override
alisiondf1dac92013-06-27 17:35:53 -0400319 public void onCallSelected(Conference conf) {
alision85992112013-05-29 12:18:08 -0400320
Alexandre Lisiona764c682013-09-09 10:02:07 -0400321 if (mCurrentCallFragment == null || mCurrentCallFragment.getBubbleView() == null) {
alisiondf1dac92013-06-27 17:35:53 -0400322 return;
323 }
Alexandre Lision6e8931e2013-09-19 16:49:34 -0400324 mHandler.removeCallbacks(mUpdateTimeTask);
alisiondf1dac92013-06-27 17:35:53 -0400325 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
Alexandre Lision0edf18c2013-09-23 17:35:50 -0400336 // slidingPaneLayout.setCurFragment(mCurrentCallFragment);
alision55c36cb2013-06-14 14:57:38 -0400337 slidingPaneLayout.closePane();
Alexandre Lision0edf18c2013-09-23 17:35:50 -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) {
Alexandre Lision0edf18c2013-09-23 17:35:50 -0400381
382 if (call.getContact().isUser()) {
383 Conference displayed = mCurrentCallFragment.getConference();
384 try {
385 if (displayed.hasMultipleParticipants())
386 service.hangUpConference(displayed.getId());
387 else
388 service.hangUp(displayed.getParticipants().get(0).getCallId());
389 } catch (RemoteException e) {
390 e.printStackTrace();
391 }
392 }
alision55c36cb2013-06-14 14:57:38 -0400393 try {
394 if (call.getCallStateInt() == state.CALL_STATE_NONE || call.getCallStateInt() == state.CALL_STATE_CURRENT
395 || call.getCallStateInt() == state.CALL_STATE_HOLD) {
396 service.hangUp(call.getCallId());
397 return;
alision85992112013-05-29 12:18:08 -0400398
alision55c36cb2013-06-14 14:57:38 -0400399 } else if (call.getCallStateInt() == state.CALL_STATE_RINGING) {
400 if (call.getCallType() == state.CALL_TYPE_INCOMING) {
401 service.refuse(call.getCallId());
402 return;
403 } else if (call.getCallType() == state.CALL_TYPE_OUTGOING) {
404 service.hangUp(call.getCallId());
405 return;
406 }
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 onCallSuspended(SipCall call) {
415 try {
416 if (call.getCallStateInt() == state.CALL_STATE_CURRENT) {
417 service.hold(call.getCallId());
418 return;
419 }
420 } catch (RemoteException e) {
421 Log.e(TAG, "Cannot call service method", e);
422 }
423 }
alision85992112013-05-29 12:18:08 -0400424
alision55c36cb2013-06-14 14:57:38 -0400425 @Override
426 public void onCallResumed(SipCall call) {
427 try {
428 if (call.getCallStateInt() == state.CALL_STATE_HOLD) {
429 service.unhold(call.getCallId());
430 return;
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 onCalltransfered(SipCall call, String to) {
440 try {
441 if (call.getCallStateInt() == state.CALL_STATE_CURRENT) {
442 service.transfer(call.getCallId(), to);
443 }
444 } catch (RemoteException e) {
445 Log.e(TAG, "Cannot call service method", e);
446 }
alision85992112013-05-29 12:18:08 -0400447
alision55c36cb2013-06-14 14:57:38 -0400448 }
alision85992112013-05-29 12:18:08 -0400449
alision55c36cb2013-06-14 14:57:38 -0400450 @Override
451 public void onRecordCall(SipCall call) {
452 try {
alisiondf1dac92013-06-27 17:35:53 -0400453
Alexandre Lision1a9e3b12013-09-16 11:06:07 -0400454 // service.setRecordPath(Environment.getExternalStorageDirectory().getAbsolutePath() + File.separator);
Alexandre Lision2b237922013-09-09 16:23:02 -0400455 Log.w(TAG, "Recording path " + service.getRecordPath());
Alexandre Lisiona764c682013-09-09 10:02:07 -0400456 service.toggleRecordingCall(call.getCallId());
457
alision55c36cb2013-06-14 14:57:38 -0400458 } catch (RemoteException e) {
459 Log.e(TAG, "Cannot call service method", e);
460 }
alision85992112013-05-29 12:18:08 -0400461
alision55c36cb2013-06-14 14:57:38 -0400462 }
alision85992112013-05-29 12:18:08 -0400463
alision55c36cb2013-06-14 14:57:38 -0400464 @Override
465 public void onBackPressed() {
466 super.onBackPressed();
467 Intent launchHome = new Intent(this, SFLPhoneHomeActivity.class);
468 launchHome.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
469 startActivity(launchHome);
470 }
alision85992112013-05-29 12:18:08 -0400471
alision55c36cb2013-06-14 14:57:38 -0400472 @Override
473 public void onSendMessage(SipCall call, String msg) {
474 try {
475 if (call.getCallStateInt() == state.CALL_STATE_CURRENT) {
476 service.sendTextMessage(call.getCallId(), msg, "Me");
477 }
478 } catch (RemoteException e) {
479 Log.e(TAG, "Cannot call service method", e);
480 }
alisiond45da712013-05-30 09:18:49 -0400481
alision55c36cb2013-06-14 14:57:38 -0400482 }
alisiond45da712013-05-30 09:18:49 -0400483
alision806e18e2013-06-21 15:30:17 -0400484 @Override
485 public void confCreated(Intent intent) {
Alexandre Lision0edf18c2013-09-23 17:35:50 -0400486 // mCallsFragment.update();
alision34673e62013-06-25 14:40:07 -0400487
alision806e18e2013-06-21 15:30:17 -0400488 }
489
490 @Override
491 public void confRemoved(Intent intent) {
Alexandre Lision0edf18c2013-09-23 17:35:50 -0400492 // mCallsFragment.update();
alision806e18e2013-06-21 15:30:17 -0400493 }
494
495 @Override
496 public void confChanged(Intent intent) {
Alexandre Lision0edf18c2013-09-23 17:35:50 -0400497 // mCallsFragment.update();
alision806e18e2013-06-21 15:30:17 -0400498 }
499
500 @Override
501 public void onCallsTerminated() {
alisiondf1dac92013-06-27 17:35:53 -0400502
503 }
504
505 @Override
506 public void recordingChanged(Intent intent) {
Alexandre Lision0edf18c2013-09-23 17:35:50 -0400507 // mCallsFragment.update();
alisiondf1dac92013-06-27 17:35:53 -0400508 }
509
510 @Override
511 public void replaceCurrentCallDisplayed() {
Alexandre Lision6e8931e2013-09-19 16:49:34 -0400512 mHandler.removeCallbacks(mUpdateTimeTask);
alisiondf1dac92013-06-27 17:35:53 -0400513 mCurrentCallFragment.getBubbleView().stopThread();
514 getFragmentManager().beginTransaction().remove(mCurrentCallFragment).commit();
alision465ceba2013-07-04 09:24:30 -0400515 mCurrentCallFragment = null;
alision34673e62013-06-25 14:40:07 -0400516
alision806e18e2013-06-21 15:30:17 -0400517 }
518
Alexandre Lision0c384512013-09-17 17:15:57 -0400519 @Override
520 public void startTimer() {
521 mHandler.postDelayed(mUpdateTimeTask, 0);
522 }
523
Alexandre Savard14323be2012-10-24 10:02:13 -0400524}