blob: 7d4cfeeba3c52ebf70c76e5a26aff9161bb351c1 [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
Alexandre Lision064e1e02013-10-01 16:18:42 -040034package org.sflphone.client;
Alexandre Savard14323be2012-10-24 10:02:13 -040035
alision85704182013-05-29 15:23:03 -040036import java.util.HashMap;
Adrien Béraud33268882013-05-18 03:41:15 +100037
Alexandre Lision064e1e02013-10-01 16:18:42 -040038import org.sflphone.R;
39import org.sflphone.fragments.CallFragment;
40import org.sflphone.fragments.CallListFragment;
41import org.sflphone.interfaces.CallInterface;
Alexandre Lisiond588bff2013-10-08 12:43:01 -040042import org.sflphone.model.Account;
Alexandre Lision064e1e02013-10-01 16:18:42 -040043import org.sflphone.model.CallContact;
44import org.sflphone.model.Conference;
45import org.sflphone.model.SipCall;
46import org.sflphone.model.SipCall.state;
47import org.sflphone.receivers.CallReceiver;
48import org.sflphone.service.CallManagerCallBack;
49import org.sflphone.service.ISipService;
50import org.sflphone.service.SipService;
51import org.sflphone.views.CallPaneLayout;
52
Alexandre Savard14323be2012-10-24 10:02:13 -040053import android.app.Activity;
Alexandre Savard6d54bbc2012-10-24 11:04:23 -040054import android.content.ComponentName;
alision17052d42013-04-22 10:39:38 -040055import android.content.Context;
Alexandre Savard6d54bbc2012-10-24 11:04:23 -040056import android.content.Intent;
alision84813a12013-05-27 17:40:39 -040057import android.content.IntentFilter;
Alexandre Savard6d54bbc2012-10-24 11:04:23 -040058import android.content.ServiceConnection;
Alexandre Lision0edf18c2013-09-23 17:35:50 -040059import android.graphics.PixelFormat;
alision55c36cb2013-06-14 14:57:38 -040060import android.net.Uri;
Alexandre Savard14323be2012-10-24 10:02:13 -040061import android.os.Bundle;
Alexandre Lision0c384512013-09-17 17:15:57 -040062import android.os.Handler;
Alexandre Savard6d54bbc2012-10-24 11:04:23 -040063import android.os.IBinder;
alision85992112013-05-29 12:18:08 -040064import android.os.RemoteException;
Alexandre Lision0c384512013-09-17 17:15:57 -040065import android.os.SystemClock;
alisionfde875f2013-05-28 17:01:54 -040066import android.support.v4.widget.SlidingPaneLayout;
Alexandre Savard6d54bbc2012-10-24 11:04:23 -040067import android.util.Log;
Alexandre Lision64dc8c02013-09-25 15:32:25 -040068import android.view.KeyEvent;
alisionfde875f2013-05-28 17:01:54 -040069import android.view.View;
Alexandre Lision0edf18c2013-09-23 17:35:50 -040070import android.view.Window;
Adrien Béraud33268882013-05-18 03:41:15 +100071import android.widget.Toast;
Alexandre Savard14323be2012-10-24 10:02:13 -040072
alisionfde875f2013-05-28 17:01:54 -040073public class CallActivity extends Activity implements CallInterface, CallFragment.Callbacks, CallListFragment.Callbacks {
alision55c36cb2013-06-14 14:57:38 -040074 static final String TAG = "CallActivity";
75 private ISipService service;
alision84813a12013-05-27 17:40:39 -040076
alision55c36cb2013-06-14 14:57:38 -040077 CallReceiver receiver;
alision85992112013-05-29 12:18:08 -040078
alision55c36cb2013-06-14 14:57:38 -040079 CallPaneLayout slidingPaneLayout;
Adrien Béraud33268882013-05-18 03:41:15 +100080
Alexandre Lision0edf18c2013-09-23 17:35:50 -040081 // CallListFragment mCallsFragment;
alision55c36cb2013-06-14 14:57:38 -040082 CallFragment mCurrentCallFragment;
Alexandre Lision0edf18c2013-09-23 17:35:50 -040083 // private boolean fragIsChanging;
Alexandre Lision1a9e3b12013-09-16 11:06:07 -040084
Alexandre Lisionf1850c02013-09-23 14:19:34 -040085 /* result code sent in case of call failure */
Alexandre Lisionc51ccb12013-09-11 16:00:30 -040086 public static int RESULT_FAILURE = -10;
Alexandre Savard4f42ade2012-10-24 18:03:31 -040087
alision55c36cb2013-06-14 14:57:38 -040088 @Override
89 protected void onCreate(Bundle savedInstanceState) {
90 super.onCreate(savedInstanceState);
91 setContentView(R.layout.activity_call_layout);
Alexandre Savard4f42ade2012-10-24 18:03:31 -040092
alision55c36cb2013-06-14 14:57:38 -040093 receiver = new CallReceiver(this);
Adrien Béraud33268882013-05-18 03:41:15 +100094
Alexandre Lision0edf18c2013-09-23 17:35:50 -040095 // mCallsFragment = new CallListFragment();
Adrien Béraud33268882013-05-18 03:41:15 +100096
Alexandre Lision0edf18c2013-09-23 17:35:50 -040097 // getFragmentManager().beginTransaction().replace(R.id.calllist_pane, mCallsFragment).commit();
alision85992112013-05-29 12:18:08 -040098
alision55c36cb2013-06-14 14:57:38 -040099 slidingPaneLayout = (CallPaneLayout) findViewById(R.id.slidingpanelayout);
alisiondf1dac92013-06-27 17:35:53 -0400100
alision55c36cb2013-06-14 14:57:38 -0400101 slidingPaneLayout.setPanelSlideListener(new SlidingPaneLayout.PanelSlideListener() {
alision84813a12013-05-27 17:40:39 -0400102
alision55c36cb2013-06-14 14:57:38 -0400103 @Override
104 public void onPanelSlide(View view, float offSet) {
105 }
alisionfde875f2013-05-28 17:01:54 -0400106
alision55c36cb2013-06-14 14:57:38 -0400107 @Override
108 public void onPanelOpened(View view) {
alisionfde875f2013-05-28 17:01:54 -0400109
alision55c36cb2013-06-14 14:57:38 -0400110 switch (view.getId()) {
111 case R.id.calllist_pane:
112 // getFragmentManager().findFragmentById(R.id.calllist_pane).setHasOptionsMenu(true);
113 // getFragmentManager().findFragmentById(R.id.ongoingcall_pane).setHasOptionsMenu(false);
114 break;
115 default:
116 break;
117 }
118 }
alisionfde875f2013-05-28 17:01:54 -0400119
alision55c36cb2013-06-14 14:57:38 -0400120 @Override
121 public void onPanelClosed(View view) {
alisionfde875f2013-05-28 17:01:54 -0400122
alision55c36cb2013-06-14 14:57:38 -0400123 }
124 });
alisionfde875f2013-05-28 17:01:54 -0400125
alision55c36cb2013-06-14 14:57:38 -0400126 Intent intent = new Intent(this, SipService.class);
127 bindService(intent, mConnection, Context.BIND_AUTO_CREATE);
alision55c36cb2013-06-14 14:57:38 -0400128 }
alisiond45da712013-05-30 09:18:49 -0400129
alision55c36cb2013-06-14 14:57:38 -0400130 /* activity gets back to the foreground and user input */
131 @Override
132 protected void onResume() {
133 Log.i(TAG, "onResume");
134 IntentFilter intentFilter = new IntentFilter();
135 intentFilter.addAction(CallManagerCallBack.INCOMING_CALL);
136 intentFilter.addAction(CallManagerCallBack.INCOMING_TEXT);
137 intentFilter.addAction(CallManagerCallBack.CALL_STATE_CHANGED);
alisiondf1dac92013-06-27 17:35:53 -0400138 intentFilter.addAction(CallManagerCallBack.CONF_CREATED);
139 intentFilter.addAction(CallManagerCallBack.CONF_REMOVED);
140 intentFilter.addAction(CallManagerCallBack.CONF_CHANGED);
141 intentFilter.addAction(CallManagerCallBack.RECORD_STATE_CHANGED);
alision55c36cb2013-06-14 14:57:38 -0400142 registerReceiver(receiver, intentFilter);
Alexandre Lision0c384512013-09-17 17:15:57 -0400143
alision55c36cb2013-06-14 14:57:38 -0400144 super.onResume();
145 }
alisiond45da712013-05-30 09:18:49 -0400146
Alexandre Lision0edf18c2013-09-23 17:35:50 -0400147 @Override
148 public void onAttachedToWindow() {
149 super.onAttachedToWindow();
150 Window window = getWindow();
151 window.setFormat(PixelFormat.RGBA_8888);
152 }
153
Alexandre Lision0c384512013-09-17 17:15:57 -0400154 private Handler mHandler = new Handler();
155 private Runnable mUpdateTimeTask = new Runnable() {
Adrien Béraud9360f242013-09-19 11:07:42 +1000156 @Override
Alexandre Lision0c384512013-09-17 17:15:57 -0400157 public void run() {
Alexandre Lision0edf18c2013-09-23 17:35:50 -0400158 if (mCurrentCallFragment != null)
Alexandre Lisionfd7a88f2013-09-18 10:03:17 -0400159 mCurrentCallFragment.updateTime();
Alexandre Lision0edf18c2013-09-23 17:35:50 -0400160 // mCallsFragment.update();
Alexandre Lision0c384512013-09-17 17:15:57 -0400161
Adrien Béraud9360f242013-09-19 11:07:42 +1000162 mHandler.postAtTime(this, SystemClock.uptimeMillis() + 1000);
Alexandre Lision0c384512013-09-17 17:15:57 -0400163 }
164 };
165
alision55c36cb2013-06-14 14:57:38 -0400166 /* activity no more in foreground */
167 @Override
168 protected void onPause() {
169 super.onPause();
Alexandre Lision0c384512013-09-17 17:15:57 -0400170 mHandler.removeCallbacks(mUpdateTimeTask);
alision55c36cb2013-06-14 14:57:38 -0400171 }
Alexandre Lision40954dc2013-10-09 15:24:03 -0400172
Alexandre Lision64dc8c02013-09-25 15:32:25 -0400173 @Override
174 public boolean onKeyUp(int keyCode, KeyEvent event) {
Alexandre Lision40954dc2013-10-09 15:24:03 -0400175
176 if (keyCode == KeyEvent.KEYCODE_BACK) {
Alexandre Lision31f46fc2013-09-26 11:19:54 -0400177 return super.onKeyUp(keyCode, event);
178 }
Alexandre Lision64dc8c02013-09-25 15:32:25 -0400179 mCurrentCallFragment.onKeyUp(keyCode, event);
180 return true;
181 }
Alexandre Savard6d54bbc2012-10-24 11:04:23 -0400182
alision55c36cb2013-06-14 14:57:38 -0400183 @Override
184 protected void onDestroy() {
alision55c36cb2013-06-14 14:57:38 -0400185 unregisterReceiver(receiver);
alision55c36cb2013-06-14 14:57:38 -0400186 unbindService(mConnection);
alision55c36cb2013-06-14 14:57:38 -0400187 super.onDestroy();
188 }
Adrien Béraud33268882013-05-18 03:41:15 +1000189
alision55c36cb2013-06-14 14:57:38 -0400190 /** Defines callbacks for service binding, passed to bindService() */
191 private ServiceConnection mConnection = new ServiceConnection() {
192 @Override
193 public void onServiceConnected(ComponentName className, IBinder binder) {
194 service = ISipService.Stub.asInterface(binder);
alisiondf1dac92013-06-27 17:35:53 -0400195
alision55c36cb2013-06-14 14:57:38 -0400196 mCurrentCallFragment = new CallFragment();
Adrien Béraud9360f242013-09-19 11:07:42 +1000197
alision55c36cb2013-06-14 14:57:38 -0400198 Uri u = getIntent().getData();
199 if (u != null) {
200 CallContact c = CallContact.ContactBuilder.buildUnknownContact(u.getSchemeSpecificPart());
201 try {
202 service.destroyNotification();
alision907bde72013-06-20 14:40:37 -0400203 SipCall call = SipCall.SipCallBuilder.getInstance().startCallCreation().setContact(c)
Alexandre Lision40954dc2013-10-09 15:24:03 -0400204 .setAccount((Account) service.getAccountList().get(1)).setCallType(SipCall.state.CALL_TYPE_OUTGOING).build();
alisiondf1dac92013-06-27 17:35:53 -0400205 Conference tmp = new Conference("-1");
206 tmp.getParticipants().add(call);
alision55c36cb2013-06-14 14:57:38 -0400207 Bundle b = new Bundle();
alisiondf1dac92013-06-27 17:35:53 -0400208 b.putParcelable("conference", tmp);
alision1005ba12013-06-19 13:52:44 -0400209 Log.i(TAG, "Arguments set");
alision55c36cb2013-06-14 14:57:38 -0400210 mCurrentCallFragment.setArguments(b);
211 } catch (RemoteException e) {
alision55c36cb2013-06-14 14:57:38 -0400212 e.printStackTrace();
213 } catch (Exception e) {
alision55c36cb2013-06-14 14:57:38 -0400214 e.printStackTrace();
215 }
alision55c36cb2013-06-14 14:57:38 -0400216 } else {
alisiondf1dac92013-06-27 17:35:53 -0400217 if (getIntent().getBooleanExtra("resuming", false)) {
218
219 Bundle b = new Bundle();
Adrien Béraud9360f242013-09-19 11:07:42 +1000220 b.putParcelable("conference", getIntent().getParcelableExtra("conference"));
Alexandre Lision1a9e3b12013-09-16 11:06:07 -0400221 mCurrentCallFragment.setArguments(b);
222
alisiondf1dac92013-06-27 17:35:53 -0400223 } else {
224 mCurrentCallFragment.setArguments(getIntent().getExtras());
225 }
226
alision55c36cb2013-06-14 14:57:38 -0400227 }
Alexandre Savard6d54bbc2012-10-24 11:04:23 -0400228
Alexandre Lision0edf18c2013-09-23 17:35:50 -0400229 // slidingPaneLayout.setCurFragment(mCurrentCallFragment);
alision55c36cb2013-06-14 14:57:38 -0400230 getIntent().getExtras();
Alexandre Lision0edf18c2013-09-23 17:35:50 -0400231 // mCallsFragment.update();
alision55c36cb2013-06-14 14:57:38 -0400232 getFragmentManager().beginTransaction().replace(R.id.ongoingcall_pane, mCurrentCallFragment).commit();
alisiond8c83882013-05-17 17:00:42 -0400233
alision55c36cb2013-06-14 14:57:38 -0400234 }
Adrien Béraud6bbce912013-05-24 00:48:13 +1000235
alision55c36cb2013-06-14 14:57:38 -0400236 @Override
237 public void onServiceDisconnected(ComponentName arg0) {
238 }
239 };
Adrien Béraud6bbce912013-05-24 00:48:13 +1000240
alision55c36cb2013-06-14 14:57:38 -0400241 @Override
242 public void incomingCall(Intent call) {
Alexandre Savarde41f5212012-10-26 14:23:50 -0400243
Alexandre Lision0edf18c2013-09-23 17:35:50 -0400244 // mCallsFragment.update();
Alexandre Savarddf544262012-10-25 14:24:08 -0400245
alision55c36cb2013-06-14 14:57:38 -0400246 }
alision84813a12013-05-27 17:40:39 -0400247
alision55c36cb2013-06-14 14:57:38 -0400248 @Override
249 public void callStateChanged(Intent callState) {
alision84813a12013-05-27 17:40:39 -0400250
alision55c36cb2013-06-14 14:57:38 -0400251 Bundle b = callState.getBundleExtra("com.savoirfairelinux.sflphone.service.newstate");
252 processCallStateChangedSignal(b.getString("CallID"), b.getString("State"));
alision84813a12013-05-27 17:40:39 -0400253
alision55c36cb2013-06-14 14:57:38 -0400254 }
alision84813a12013-05-27 17:40:39 -0400255
Alexandre Lision0edf18c2013-09-23 17:35:50 -0400256 @SuppressWarnings("unchecked")
257 // No proper solution with HashMap runtime cast
alision55c36cb2013-06-14 14:57:38 -0400258 public void processCallStateChangedSignal(String callID, String newState) {
259 /*
260 * Bundle bundle = intent.getBundleExtra("com.savoirfairelinux.sflphone.service.newstate"); String callID = bundle.getString("CallID"); String
261 * newState = bundle.getString("State");
262 */
263 // CallFragment fr = mCurrentCallFragment;
Alexandre Lision1a9e3b12013-09-16 11:06:07 -0400264
Alexandre Lision0edf18c2013-09-23 17:35:50 -0400265 // mCallsFragment.update();
alision84813a12013-05-27 17:40:39 -0400266
Alexandre Lisiona764c682013-09-09 10:02:07 -0400267 if (mCurrentCallFragment != null)
268 mCurrentCallFragment.changeCallState(callID, newState);
Adrien Béraud29556042013-04-26 17:35:43 +1000269
alision55c36cb2013-06-14 14:57:38 -0400270 try {
alisiondf1dac92013-06-27 17:35:53 -0400271 HashMap<String, SipCall> callMap = (HashMap<String, SipCall>) service.getCallList();
272 HashMap<String, Conference> confMap = (HashMap<String, Conference>) service.getConferenceList();
Alexandre Lision3c6b7102013-09-16 16:56:46 -0400273
alision34673e62013-06-25 14:40:07 -0400274 if (callMap.size() == 0 && confMap.size() == 0) {
alision34673e62013-06-25 14:40:07 -0400275 finish();
alision55c36cb2013-06-14 14:57:38 -0400276 }
Alexandre Lision3c6b7102013-09-16 16:56:46 -0400277
278 if (callMap.size() > 0) {
Alexandre Lision0edf18c2013-09-23 17:35:50 -0400279 // ArrayList<SipCall> calls = new ArrayList<SipCall>(callMap.values());
280 // HashMap<String, String> details = (HashMap<String, String>) service.getCallDetails(calls.get(0).getCallId());
Alexandre Lision0c384512013-09-17 17:15:57 -0400281
Alexandre Lision3c6b7102013-09-16 16:56:46 -0400282 }
alision55c36cb2013-06-14 14:57:38 -0400283 } catch (RemoteException e) {
Alexandre Lision3c6b7102013-09-16 16:56:46 -0400284
alision55c36cb2013-06-14 14:57:38 -0400285 Log.e(TAG, e.toString());
286 }
Adrien Béraud29556042013-04-26 17:35:43 +1000287
alision55c36cb2013-06-14 14:57:38 -0400288 Log.w(TAG, "processCallStateChangedSignal " + newState);
Adrien Béraud71b2f812013-04-26 18:51:02 +1000289
alision55c36cb2013-06-14 14:57:38 -0400290 }
291
292 @Override
293 public void incomingText(Intent msg) {
294 Bundle b = msg.getBundleExtra("com.savoirfairelinux.sflphone.service.newtext");
295
alisiona2a2da12013-06-05 15:58:39 -0400296 Toast.makeText(this, b.getString("From") + " : " + b.getString("Msg"), Toast.LENGTH_LONG).show();
Adrien Béraud71b2f812013-04-26 18:51:02 +1000297
alision55c36cb2013-06-14 14:57:38 -0400298 }
alision7f18fc82013-05-01 09:37:33 -0400299
alision55c36cb2013-06-14 14:57:38 -0400300 @Override
301 public ISipService getService() {
302 return service;
303 }
alision04a00182013-05-10 17:05:29 -0400304
alision55c36cb2013-06-14 14:57:38 -0400305 @Override
alisiondf1dac92013-06-27 17:35:53 -0400306 public void onCallSelected(Conference conf) {
alision85992112013-05-29 12:18:08 -0400307
Alexandre Lisiona764c682013-09-09 10:02:07 -0400308 if (mCurrentCallFragment == null || mCurrentCallFragment.getBubbleView() == null) {
alisiondf1dac92013-06-27 17:35:53 -0400309 return;
310 }
Alexandre Lision6e8931e2013-09-19 16:49:34 -0400311 mHandler.removeCallbacks(mUpdateTimeTask);
alisiondf1dac92013-06-27 17:35:53 -0400312 mCurrentCallFragment.getBubbleView().stopThread();
alision55c36cb2013-06-14 14:57:38 -0400313 mCurrentCallFragment = new CallFragment();
314 Bundle b = new Bundle();
alision34673e62013-06-25 14:40:07 -0400315
alisiondf1dac92013-06-27 17:35:53 -0400316 b.putParcelable("conference", conf);
alision55c36cb2013-06-14 14:57:38 -0400317 mCurrentCallFragment.setArguments(b);
alision85992112013-05-29 12:18:08 -0400318
alisiondf1dac92013-06-27 17:35:53 -0400319 // if (calls.size() == 1) {
320 // onCallResumed(calls.get(0));
321 // }
322
Alexandre Lision0edf18c2013-09-23 17:35:50 -0400323 // slidingPaneLayout.setCurFragment(mCurrentCallFragment);
alision55c36cb2013-06-14 14:57:38 -0400324 slidingPaneLayout.closePane();
Alexandre Lision0edf18c2013-09-23 17:35:50 -0400325 // fragIsChanging = true;
alision85992112013-05-29 12:18:08 -0400326
alision55c36cb2013-06-14 14:57:38 -0400327 }
alision85992112013-05-29 12:18:08 -0400328
alision55c36cb2013-06-14 14:57:38 -0400329 @Override
330 public void callContact(SipCall call) {
331 try {
332 service.placeCall(call);
333 } catch (RemoteException e) {
334 Log.e(TAG, "Cannot call service method", e);
335 }
alision85992112013-05-29 12:18:08 -0400336
alision55c36cb2013-06-14 14:57:38 -0400337 }
alision85992112013-05-29 12:18:08 -0400338
alision55c36cb2013-06-14 14:57:38 -0400339 @Override
340 public void onCallAccepted(SipCall call) {
341 int callState = call.getCallStateInt();
342 if (callState != state.CALL_STATE_RINGING && callState != state.CALL_STATE_NONE) {
343 return;
344 }
alision85992112013-05-29 12:18:08 -0400345
alision55c36cb2013-06-14 14:57:38 -0400346 try {
347 service.accept(call.getCallId());
348 } catch (RemoteException e) {
349 Log.e(TAG, "Cannot call service method", e);
350 }
alision85992112013-05-29 12:18:08 -0400351
alision55c36cb2013-06-14 14:57:38 -0400352 }
alision85992112013-05-29 12:18:08 -0400353
alision55c36cb2013-06-14 14:57:38 -0400354 @Override
355 public void onCallRejected(SipCall call) {
356 try {
357 if (call.getCallStateInt() == state.CALL_STATE_RINGING) {
358 service.refuse(call.getCallId());
359 return;
360 }
361 } catch (RemoteException e) {
362 Log.e(TAG, "Cannot call service method", e);
363 }
364 }
alision85992112013-05-29 12:18:08 -0400365
alision55c36cb2013-06-14 14:57:38 -0400366 @Override
367 public void onCallEnded(SipCall call) {
Alexandre Lision0edf18c2013-09-23 17:35:50 -0400368
369 if (call.getContact().isUser()) {
370 Conference displayed = mCurrentCallFragment.getConference();
371 try {
Alexandre Lision40954dc2013-10-09 15:24:03 -0400372 if (displayed.hasMultipleParticipants())
373 service.hangUpConference(displayed.getId());
374 else
375 service.hangUp(displayed.getParticipants().get(0).getCallId());
Alexandre Lision0edf18c2013-09-23 17:35:50 -0400376 } catch (RemoteException e) {
377 e.printStackTrace();
378 }
379 }
alision55c36cb2013-06-14 14:57:38 -0400380 try {
381 if (call.getCallStateInt() == state.CALL_STATE_NONE || call.getCallStateInt() == state.CALL_STATE_CURRENT
382 || call.getCallStateInt() == state.CALL_STATE_HOLD) {
383 service.hangUp(call.getCallId());
384 return;
alision85992112013-05-29 12:18:08 -0400385
alision55c36cb2013-06-14 14:57:38 -0400386 } else if (call.getCallStateInt() == state.CALL_STATE_RINGING) {
387 if (call.getCallType() == state.CALL_TYPE_INCOMING) {
388 service.refuse(call.getCallId());
389 return;
390 } else if (call.getCallType() == state.CALL_TYPE_OUTGOING) {
391 service.hangUp(call.getCallId());
392 return;
393 }
394 }
395 } catch (RemoteException e) {
396 Log.e(TAG, "Cannot call service method", e);
397 }
398 }
alision85992112013-05-29 12:18:08 -0400399
alision55c36cb2013-06-14 14:57:38 -0400400 @Override
401 public void onCallSuspended(SipCall call) {
402 try {
403 if (call.getCallStateInt() == state.CALL_STATE_CURRENT) {
404 service.hold(call.getCallId());
405 return;
406 }
407 } catch (RemoteException e) {
408 Log.e(TAG, "Cannot call service method", e);
409 }
410 }
alision85992112013-05-29 12:18:08 -0400411
alision55c36cb2013-06-14 14:57:38 -0400412 @Override
413 public void onCallResumed(SipCall call) {
414 try {
415 if (call.getCallStateInt() == state.CALL_STATE_HOLD) {
416 service.unhold(call.getCallId());
417 return;
418 }
419 } catch (RemoteException e) {
420 Log.e(TAG, "Cannot call service method", e);
421 }
alision85992112013-05-29 12:18:08 -0400422
alision55c36cb2013-06-14 14:57:38 -0400423 }
alision85992112013-05-29 12:18:08 -0400424
alision55c36cb2013-06-14 14:57:38 -0400425 @Override
426 public void onCalltransfered(SipCall call, String to) {
427 try {
428 if (call.getCallStateInt() == state.CALL_STATE_CURRENT) {
429 service.transfer(call.getCallId(), to);
430 }
431 } catch (RemoteException e) {
432 Log.e(TAG, "Cannot call service method", e);
433 }
alision85992112013-05-29 12:18:08 -0400434
alision55c36cb2013-06-14 14:57:38 -0400435 }
alision85992112013-05-29 12:18:08 -0400436
alision55c36cb2013-06-14 14:57:38 -0400437 @Override
438 public void onRecordCall(SipCall call) {
alisiondf1dac92013-06-27 17:35:53 -0400439
Alexandre Lision40954dc2013-10-09 15:24:03 -0400440 try {
441 Conference displayed = mCurrentCallFragment.getConference();
442 if (displayed.hasMultipleParticipants()) {
443 service.toggleRecordingCall(displayed.getId());
444 } else {
445 service.toggleRecordingCall(displayed.getParticipants().get(0).getCallId());
446 }
Alexandre Lisiona764c682013-09-09 10:02:07 -0400447
alision55c36cb2013-06-14 14:57:38 -0400448 } catch (RemoteException e) {
Alexandre Lision40954dc2013-10-09 15:24:03 -0400449 e.printStackTrace();
alision55c36cb2013-06-14 14:57:38 -0400450 }
alision85992112013-05-29 12:18:08 -0400451
alision55c36cb2013-06-14 14:57:38 -0400452 }
alision85992112013-05-29 12:18:08 -0400453
alision55c36cb2013-06-14 14:57:38 -0400454 @Override
455 public void onBackPressed() {
456 super.onBackPressed();
457 Intent launchHome = new Intent(this, SFLPhoneHomeActivity.class);
458 launchHome.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
459 startActivity(launchHome);
460 }
alision85992112013-05-29 12:18:08 -0400461
alision55c36cb2013-06-14 14:57:38 -0400462 @Override
463 public void onSendMessage(SipCall call, String msg) {
464 try {
465 if (call.getCallStateInt() == state.CALL_STATE_CURRENT) {
466 service.sendTextMessage(call.getCallId(), msg, "Me");
467 }
468 } catch (RemoteException e) {
469 Log.e(TAG, "Cannot call service method", e);
470 }
alisiond45da712013-05-30 09:18:49 -0400471
alision55c36cb2013-06-14 14:57:38 -0400472 }
alisiond45da712013-05-30 09:18:49 -0400473
alision806e18e2013-06-21 15:30:17 -0400474 @Override
475 public void confCreated(Intent intent) {
Alexandre Lision0edf18c2013-09-23 17:35:50 -0400476 // mCallsFragment.update();
alision34673e62013-06-25 14:40:07 -0400477
alision806e18e2013-06-21 15:30:17 -0400478 }
479
480 @Override
481 public void confRemoved(Intent intent) {
Alexandre Lision0edf18c2013-09-23 17:35:50 -0400482 // mCallsFragment.update();
alision806e18e2013-06-21 15:30:17 -0400483 }
484
485 @Override
486 public void confChanged(Intent intent) {
Alexandre Lision0edf18c2013-09-23 17:35:50 -0400487 // mCallsFragment.update();
alision806e18e2013-06-21 15:30:17 -0400488 }
489
490 @Override
491 public void onCallsTerminated() {
alisiondf1dac92013-06-27 17:35:53 -0400492
493 }
494
495 @Override
496 public void recordingChanged(Intent intent) {
Alexandre Lision0edf18c2013-09-23 17:35:50 -0400497 // mCallsFragment.update();
alisiondf1dac92013-06-27 17:35:53 -0400498 }
499
500 @Override
501 public void replaceCurrentCallDisplayed() {
Alexandre Lision6e8931e2013-09-19 16:49:34 -0400502 mHandler.removeCallbacks(mUpdateTimeTask);
alisiondf1dac92013-06-27 17:35:53 -0400503 mCurrentCallFragment.getBubbleView().stopThread();
504 getFragmentManager().beginTransaction().remove(mCurrentCallFragment).commit();
alision465ceba2013-07-04 09:24:30 -0400505 mCurrentCallFragment = null;
alision34673e62013-06-25 14:40:07 -0400506
alision806e18e2013-06-21 15:30:17 -0400507 }
508
Alexandre Lision0c384512013-09-17 17:15:57 -0400509 @Override
510 public void startTimer() {
511 mHandler.postDelayed(mUpdateTimeTask, 0);
512 }
513
Alexandre Lision40954dc2013-10-09 15:24:03 -0400514 public void onCallSuspended() {
515 try {
516 if (mCurrentCallFragment.getConference().hasMultipleParticipants()) {
517 service.holdConference(mCurrentCallFragment.getConference().getId());
518 } else {
519 service.hold(mCurrentCallFragment.getConference().getParticipants().get(0).getCallId());
520 }
521 } catch (RemoteException e) {
522 // TODO Bloc catch généré automatiquement
523 e.printStackTrace();
524 }
525 }
Alexandre Savard14323be2012-10-24 10:02:13 -0400526}