blob: faf5c048d574222c3dbfc32b2ebf2d0032bebace [file] [log] [blame]
Alexandre Savard14323be2012-10-24 10:02:13 -04001/*
Alexandre Lisionc1024c02014-01-06 11:12:53 -05002 * Copyright (C) 2004-2014 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
Alexandre Lisiond5686032013-10-29 11:09:21 -040036import java.util.ArrayList;
alision85704182013-05-29 15:23:03 -040037import java.util.HashMap;
Alexandre Lisione4b95842013-11-12 10:36:51 -050038import java.util.Timer;
39import java.util.TimerTask;
Adrien Béraud33268882013-05-18 03:41:15 +100040
Alexandre Lision064e1e02013-10-01 16:18:42 -040041import org.sflphone.R;
42import org.sflphone.fragments.CallFragment;
Alexandre Lision666b3772013-10-28 17:42:48 -040043import org.sflphone.fragments.IMFragment;
Alexandre Lision064e1e02013-10-01 16:18:42 -040044import org.sflphone.interfaces.CallInterface;
Alexandre Lisiond588bff2013-10-08 12:43:01 -040045import org.sflphone.model.Account;
Alexandre Lision064e1e02013-10-01 16:18:42 -040046import org.sflphone.model.CallContact;
47import org.sflphone.model.Conference;
48import org.sflphone.model.SipCall;
Alexandre Lision666b3772013-10-28 17:42:48 -040049import org.sflphone.model.SipMessage;
Alexandre Lision064e1e02013-10-01 16:18:42 -040050import org.sflphone.receivers.CallReceiver;
51import org.sflphone.service.CallManagerCallBack;
52import org.sflphone.service.ISipService;
53import org.sflphone.service.SipService;
Alexandre Lisionb8add812013-10-24 11:42:42 -040054import org.sflphone.utils.CallProximityManager;
55import org.sflphone.utils.CallProximityManager.ProximityDirector;
Alexandre Lision064e1e02013-10-01 16:18:42 -040056import org.sflphone.views.CallPaneLayout;
57
Alexandre Savard14323be2012-10-24 10:02:13 -040058import android.app.Activity;
Alexandre Savard6d54bbc2012-10-24 11:04:23 -040059import android.content.ComponentName;
alision17052d42013-04-22 10:39:38 -040060import android.content.Context;
Alexandre Savard6d54bbc2012-10-24 11:04:23 -040061import android.content.Intent;
alision84813a12013-05-27 17:40:39 -040062import android.content.IntentFilter;
Alexandre Savard6d54bbc2012-10-24 11:04:23 -040063import android.content.ServiceConnection;
Alexandre Lision93ed33d2013-10-29 15:56:59 -040064import android.graphics.Color;
Alexandre Lision0edf18c2013-09-23 17:35:50 -040065import android.graphics.PixelFormat;
alision55c36cb2013-06-14 14:57:38 -040066import android.net.Uri;
Alexandre Savard14323be2012-10-24 10:02:13 -040067import android.os.Bundle;
Alexandre Lision0c384512013-09-17 17:15:57 -040068import android.os.Handler;
Alexandre Savard6d54bbc2012-10-24 11:04:23 -040069import android.os.IBinder;
alision85992112013-05-29 12:18:08 -040070import android.os.RemoteException;
Alexandre Lision0c384512013-09-17 17:15:57 -040071import android.os.SystemClock;
alisionfde875f2013-05-28 17:01:54 -040072import android.support.v4.widget.SlidingPaneLayout;
Alexandre Savard6d54bbc2012-10-24 11:04:23 -040073import android.util.Log;
Alexandre Lision64dc8c02013-09-25 15:32:25 -040074import android.view.KeyEvent;
alisionfde875f2013-05-28 17:01:54 -040075import android.view.View;
Alexandre Lision0edf18c2013-09-23 17:35:50 -040076import android.view.Window;
Alexandre Lision93ed33d2013-10-29 15:56:59 -040077import android.view.WindowManager;
Alexandre Savard14323be2012-10-24 10:02:13 -040078
Alexandre Lision666b3772013-10-28 17:42:48 -040079public class CallActivity extends Activity implements CallInterface, IMFragment.Callbacks, CallFragment.Callbacks, ProximityDirector {
alision55c36cb2013-06-14 14:57:38 -040080 static final String TAG = "CallActivity";
Alexandre Lision47a72042013-12-10 10:43:02 -050081 private ISipService mService;
alision84813a12013-05-27 17:40:39 -040082
Alexandre Lision47a72042013-12-10 10:43:02 -050083 CallReceiver mReceiver;
alision85992112013-05-29 12:18:08 -040084
Alexandre Lision47a72042013-12-10 10:43:02 -050085 CallPaneLayout mSlidingPaneLayout;
Adrien Béraud33268882013-05-18 03:41:15 +100086
Alexandre Lision666b3772013-10-28 17:42:48 -040087 IMFragment mIMFragment;
alision55c36cb2013-06-14 14:57:38 -040088 CallFragment mCurrentCallFragment;
Alexandre Lision1a9e3b12013-09-16 11:06:07 -040089
Alexandre Lisionf02190d2013-12-12 17:26:12 -050090
Alexandre Lisionf1850c02013-09-23 14:19:34 -040091 /* result code sent in case of call failure */
Alexandre Lisionc51ccb12013-09-11 16:00:30 -040092 public static int RESULT_FAILURE = -10;
Alexandre Lision47a72042013-12-10 10:43:02 -050093 private CallProximityManager mProximityManager;
Alexandre Savard4f42ade2012-10-24 18:03:31 -040094
alision55c36cb2013-06-14 14:57:38 -040095 @Override
96 protected void onCreate(Bundle savedInstanceState) {
97 super.onCreate(savedInstanceState);
98 setContentView(R.layout.activity_call_layout);
Alexandre Savard4f42ade2012-10-24 18:03:31 -040099
Alexandre Lision47a72042013-12-10 10:43:02 -0500100 mReceiver = new CallReceiver(this);
Adrien Béraud33268882013-05-18 03:41:15 +1000101
Alexandre Lision47a72042013-12-10 10:43:02 -0500102 mProximityManager = new CallProximityManager(this, this);
alision85992112013-05-29 12:18:08 -0400103
Alexandre Lision47a72042013-12-10 10:43:02 -0500104 mSlidingPaneLayout = (CallPaneLayout) findViewById(R.id.slidingpanelayout);
105 mSlidingPaneLayout.setParallaxDistance(500);
106 mSlidingPaneLayout.setSliderFadeColor(Color.TRANSPARENT);
Alexandre Lision3b7148e2013-11-13 17:23:06 -0500107
Alexandre Lisionf02190d2013-12-12 17:26:12 -0500108 Window w = getWindow();
109 w.setFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED, WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED);
110
Alexandre Lision47a72042013-12-10 10:43:02 -0500111 mSlidingPaneLayout.setPanelSlideListener(new SlidingPaneLayout.PanelSlideListener() {
alision84813a12013-05-27 17:40:39 -0400112
alision55c36cb2013-06-14 14:57:38 -0400113 @Override
114 public void onPanelSlide(View view, float offSet) {
115 }
alisionfde875f2013-05-28 17:01:54 -0400116
alision55c36cb2013-06-14 14:57:38 -0400117 @Override
118 public void onPanelOpened(View view) {
Alexandre Lision93ed33d2013-10-29 15:56:59 -0400119 getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);
alision55c36cb2013-06-14 14:57:38 -0400120 }
alisionfde875f2013-05-28 17:01:54 -0400121
alision55c36cb2013-06-14 14:57:38 -0400122 @Override
123 public void onPanelClosed(View view) {
Alexandre Lision666b3772013-10-28 17:42:48 -0400124 mCurrentCallFragment.getBubbleView().restartDrawing();
Alexandre Lision93ed33d2013-10-29 15:56:59 -0400125 getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_NOTHING);
alision55c36cb2013-06-14 14:57:38 -0400126 }
127 });
alisionfde875f2013-05-28 17:01:54 -0400128
Alexandre Lision47a72042013-12-10 10:43:02 -0500129 mProximityManager.startTracking();
alision55c36cb2013-06-14 14:57:38 -0400130 Intent intent = new Intent(this, SipService.class);
131 bindService(intent, mConnection, Context.BIND_AUTO_CREATE);
alision55c36cb2013-06-14 14:57:38 -0400132 }
alisiond45da712013-05-30 09:18:49 -0400133
alision55c36cb2013-06-14 14:57:38 -0400134 /* activity gets back to the foreground and user input */
135 @Override
136 protected void onResume() {
137 Log.i(TAG, "onResume");
138 IntentFilter intentFilter = new IntentFilter();
139 intentFilter.addAction(CallManagerCallBack.INCOMING_CALL);
140 intentFilter.addAction(CallManagerCallBack.INCOMING_TEXT);
141 intentFilter.addAction(CallManagerCallBack.CALL_STATE_CHANGED);
alisiondf1dac92013-06-27 17:35:53 -0400142 intentFilter.addAction(CallManagerCallBack.CONF_CREATED);
143 intentFilter.addAction(CallManagerCallBack.CONF_REMOVED);
144 intentFilter.addAction(CallManagerCallBack.CONF_CHANGED);
145 intentFilter.addAction(CallManagerCallBack.RECORD_STATE_CHANGED);
Alexandre Lision47a72042013-12-10 10:43:02 -0500146 registerReceiver(mReceiver, intentFilter);
Alexandre Lision0c384512013-09-17 17:15:57 -0400147
alision55c36cb2013-06-14 14:57:38 -0400148 super.onResume();
149 }
alisiond45da712013-05-30 09:18:49 -0400150
Alexandre Lision0edf18c2013-09-23 17:35:50 -0400151 @Override
152 public void onAttachedToWindow() {
153 super.onAttachedToWindow();
154 Window window = getWindow();
155 window.setFormat(PixelFormat.RGBA_8888);
156 }
157
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 Lision0edf18c2013-09-23 17:35:50 -0400162 if (mCurrentCallFragment != null)
Alexandre Lisionfd7a88f2013-09-18 10:03:17 -0400163 mCurrentCallFragment.updateTime();
Adrien Béraud9360f242013-09-19 11:07:42 +1000164 mHandler.postAtTime(this, SystemClock.uptimeMillis() + 1000);
Alexandre Lision0c384512013-09-17 17:15:57 -0400165 }
166 };
167
alision55c36cb2013-06-14 14:57:38 -0400168 /* activity no more in foreground */
169 @Override
170 protected void onPause() {
171 super.onPause();
Alexandre Lision0c384512013-09-17 17:15:57 -0400172 mHandler.removeCallbacks(mUpdateTimeTask);
alision55c36cb2013-06-14 14:57:38 -0400173 }
Alexandre Lision40954dc2013-10-09 15:24:03 -0400174
Alexandre Lision64dc8c02013-09-25 15:32:25 -0400175 @Override
176 public boolean onKeyUp(int keyCode, KeyEvent event) {
Alexandre Lision40954dc2013-10-09 15:24:03 -0400177
178 if (keyCode == KeyEvent.KEYCODE_BACK) {
Alexandre Lision31f46fc2013-09-26 11:19:54 -0400179 return super.onKeyUp(keyCode, event);
180 }
Alexandre Lision64dc8c02013-09-25 15:32:25 -0400181 mCurrentCallFragment.onKeyUp(keyCode, event);
182 return true;
183 }
Alexandre Savard6d54bbc2012-10-24 11:04:23 -0400184
alision55c36cb2013-06-14 14:57:38 -0400185 @Override
186 protected void onDestroy() {
Alexandre Lision47a72042013-12-10 10:43:02 -0500187 unregisterReceiver(mReceiver);
alision55c36cb2013-06-14 14:57:38 -0400188 unbindService(mConnection);
Alexandre Lisionf02190d2013-12-12 17:26:12 -0500189
Alexandre Lision47a72042013-12-10 10:43:02 -0500190 mProximityManager.stopTracking();
191 mProximityManager.release(0);
Alexandre Lisionf02190d2013-12-12 17:26:12 -0500192
alision55c36cb2013-06-14 14:57:38 -0400193 super.onDestroy();
194 }
Adrien Béraud33268882013-05-18 03:41:15 +1000195
Alexandre Lision707f9082014-01-16 15:09:07 -0500196 /**
197 * Defines callbacks for service binding, passed to bindService()
198 */
alision55c36cb2013-06-14 14:57:38 -0400199 private ServiceConnection mConnection = new ServiceConnection() {
Alexandre Lisiona8b78722013-12-13 10:18:33 -0500200 @SuppressWarnings("unchecked")
alision55c36cb2013-06-14 14:57:38 -0400201 @Override
202 public void onServiceConnected(ComponentName className, IBinder binder) {
Alexandre Lision47a72042013-12-10 10:43:02 -0500203 mService = ISipService.Stub.asInterface(binder);
alisiondf1dac92013-06-27 17:35:53 -0400204
alision55c36cb2013-06-14 14:57:38 -0400205 mCurrentCallFragment = new CallFragment();
Alexandre Lisiond5686032013-10-29 11:09:21 -0400206 mIMFragment = new IMFragment();
Adrien Béraud9360f242013-09-19 11:07:42 +1000207
alision55c36cb2013-06-14 14:57:38 -0400208 Uri u = getIntent().getData();
209 if (u != null) {
210 CallContact c = CallContact.ContactBuilder.buildUnknownContact(u.getSchemeSpecificPart());
211 try {
Alexandre Lision47a72042013-12-10 10:43:02 -0500212 mService.destroyNotification();
Alexandre Lision666b3772013-10-28 17:42:48 -0400213
Alexandre Lision47a72042013-12-10 10:43:02 -0500214 String accountID = (String) mService.getAccountList().get(1); // We use the first account to place outgoing calls
215 HashMap<String, String> details = (HashMap<String, String>) mService.getAccountDetails(accountID);
216 ArrayList<HashMap<String, String>> credentials = (ArrayList<HashMap<String, String>>) mService.getCredentials(accountID);
Alexandre Lision3b7148e2013-11-13 17:23:06 -0500217 Account acc = new Account(accountID, details, credentials);
Alexandre Lision666b3772013-10-28 17:42:48 -0400218
219 SipCall call = SipCall.SipCallBuilder.getInstance().startCallCreation().setContact(c).setAccount(acc)
Alexandre Lision67c70b42014-01-16 13:57:15 -0500220 .setCallType(SipCall.direction.CALL_TYPE_OUTGOING).build();
221 Conference tmp = new Conference(Conference.DEFAULT_ID);
alisiondf1dac92013-06-27 17:35:53 -0400222 tmp.getParticipants().add(call);
alision55c36cb2013-06-14 14:57:38 -0400223 Bundle b = new Bundle();
alisiondf1dac92013-06-27 17:35:53 -0400224 b.putParcelable("conference", tmp);
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 Lisiond5686032013-10-29 11:09:21 -0400235 Conference resumed = getIntent().getParcelableExtra("conference");
Adrien Béraud9360f242013-09-19 11:07:42 +1000236 b.putParcelable("conference", getIntent().getParcelableExtra("conference"));
Alexandre Lision1a9e3b12013-09-16 11:06:07 -0400237 mCurrentCallFragment.setArguments(b);
238
Alexandre Lisiond5686032013-10-29 11:09:21 -0400239 Bundle IMBundle = new Bundle();
240 IMBundle.putParcelableArrayList("messages", resumed.getMessages());
241 mIMFragment.setArguments(IMBundle);
242
alisiondf1dac92013-06-27 17:35:53 -0400243 } else {
244 mCurrentCallFragment.setArguments(getIntent().getExtras());
Alexandre Lision3b7148e2013-11-13 17:23:06 -0500245
Alexandre Lisiond5686032013-10-29 11:09:21 -0400246 Bundle IMBundle = new Bundle();
247 IMBundle.putParcelableArrayList("messages", new ArrayList<SipMessage>());
248 mIMFragment.setArguments(IMBundle);
alisiondf1dac92013-06-27 17:35:53 -0400249 }
250
alision55c36cb2013-06-14 14:57:38 -0400251 }
Alexandre Lisiond5686032013-10-29 11:09:21 -0400252
Alexandre Lision47a72042013-12-10 10:43:02 -0500253 mSlidingPaneLayout.setCurFragment(mCurrentCallFragment);
alision55c36cb2013-06-14 14:57:38 -0400254 getIntent().getExtras();
Alexandre Lision0edf18c2013-09-23 17:35:50 -0400255 // mCallsFragment.update();
alision55c36cb2013-06-14 14:57:38 -0400256 getFragmentManager().beginTransaction().replace(R.id.ongoingcall_pane, mCurrentCallFragment).commit();
Alexandre Lision666b3772013-10-28 17:42:48 -0400257 getFragmentManager().beginTransaction().replace(R.id.message_list_frame, mIMFragment).commit();
alisiond8c83882013-05-17 17:00:42 -0400258
alision55c36cb2013-06-14 14:57:38 -0400259 }
Adrien Béraud6bbce912013-05-24 00:48:13 +1000260
alision55c36cb2013-06-14 14:57:38 -0400261 @Override
262 public void onServiceDisconnected(ComponentName arg0) {
263 }
264 };
Adrien Béraud6bbce912013-05-24 00:48:13 +1000265
alision55c36cb2013-06-14 14:57:38 -0400266 @Override
267 public void callStateChanged(Intent callState) {
alision84813a12013-05-27 17:40:39 -0400268
alision55c36cb2013-06-14 14:57:38 -0400269 Bundle b = callState.getBundleExtra("com.savoirfairelinux.sflphone.service.newstate");
270 processCallStateChangedSignal(b.getString("CallID"), b.getString("State"));
alision84813a12013-05-27 17:40:39 -0400271
alision55c36cb2013-06-14 14:57:38 -0400272 }
alision84813a12013-05-27 17:40:39 -0400273
alision55c36cb2013-06-14 14:57:38 -0400274 public void processCallStateChangedSignal(String callID, String newState) {
Alexandre Lision4fb22622013-10-21 16:26:33 -0400275 if (mCurrentCallFragment != null) {
Alexandre Lisiona764c682013-09-09 10:02:07 -0400276 mCurrentCallFragment.changeCallState(callID, newState);
Alexandre Lision4fb22622013-10-21 16:26:33 -0400277 }
Alexandre Lision47a72042013-12-10 10:43:02 -0500278 mProximityManager.updateProximitySensorMode();
alision55c36cb2013-06-14 14:57:38 -0400279 }
280
281 @Override
Alexandre Lision666b3772013-10-28 17:42:48 -0400282 public void incomingText(Intent in) {
283 Bundle b = in.getBundleExtra("com.savoirfairelinux.sflphone.service.newtext");
Alexandre Lisiond5686032013-10-29 11:09:21 -0400284
285 if (mIMFragment != null) {
Alexandre Lision666b3772013-10-28 17:42:48 -0400286 SipMessage msg = new SipMessage(true, b.getString("Msg"));
287 mIMFragment.putMessage(msg);
288 }
Adrien Béraud71b2f812013-04-26 18:51:02 +1000289
alision55c36cb2013-06-14 14:57:38 -0400290 }
alision7f18fc82013-05-01 09:37:33 -0400291
alision55c36cb2013-06-14 14:57:38 -0400292 @Override
293 public ISipService getService() {
Alexandre Lision47a72042013-12-10 10:43:02 -0500294 return mService;
alision55c36cb2013-06-14 14:57:38 -0400295 }
alision04a00182013-05-10 17:05:29 -0400296
alision55c36cb2013-06-14 14:57:38 -0400297 @Override
298 public void onBackPressed() {
299 super.onBackPressed();
Alexandre Lision4ab53972013-11-04 16:59:18 -0500300 Intent launchHome = new Intent(this, HomeActivity.class);
alision55c36cb2013-06-14 14:57:38 -0400301 launchHome.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
Alexandre Lision5ed2c972013-10-11 15:36:33 -0400302 launchHome.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
alision55c36cb2013-06-14 14:57:38 -0400303 startActivity(launchHome);
304 }
alision85992112013-05-29 12:18:08 -0400305
alision806e18e2013-06-21 15:30:17 -0400306 @Override
307 public void confCreated(Intent intent) {
Alexandre Lision0edf18c2013-09-23 17:35:50 -0400308 // mCallsFragment.update();
alision34673e62013-06-25 14:40:07 -0400309
alision806e18e2013-06-21 15:30:17 -0400310 }
311
312 @Override
313 public void confRemoved(Intent intent) {
Alexandre Lision0edf18c2013-09-23 17:35:50 -0400314 // mCallsFragment.update();
alision806e18e2013-06-21 15:30:17 -0400315 }
316
317 @Override
318 public void confChanged(Intent intent) {
Alexandre Lision0edf18c2013-09-23 17:35:50 -0400319 // mCallsFragment.update();
alision806e18e2013-06-21 15:30:17 -0400320 }
321
alisiondf1dac92013-06-27 17:35:53 -0400322 @Override
323 public void recordingChanged(Intent intent) {
Alexandre Lision707f9082014-01-16 15:09:07 -0500324
325 Log.i(TAG, "RECORDING CHANGED");
alisiondf1dac92013-06-27 17:35:53 -0400326 }
327
Alexandre Lisionccf0c932013-10-10 16:24:41 -0400328 @Override
Alexandre Lisiondafe9512013-10-28 16:31:41 -0400329 public void terminateCall() {
Alexandre Lisionccf0c932013-10-10 16:24:41 -0400330 mHandler.removeCallbacks(mUpdateTimeTask);
331 mCurrentCallFragment.getBubbleView().stopThread();
Alexandre Lisione4b95842013-11-12 10:36:51 -0500332 TimerTask quit = new TimerTask() {
Alexandre Lision3b7148e2013-11-13 17:23:06 -0500333
Alexandre Lisione4b95842013-11-12 10:36:51 -0500334 @Override
335 public void run() {
336 finish();
337 }
338 };
Alexandre Lision3b7148e2013-11-13 17:23:06 -0500339
Alexandre Lision681d0292013-11-22 12:47:34 -0500340 new Timer().schedule(quit, 1000);
Alexandre Lision3b7148e2013-11-13 17:23:06 -0500341
Alexandre Lisionccf0c932013-10-10 16:24:41 -0400342 }
alision806e18e2013-06-21 15:30:17 -0400343
Alexandre Lision0c384512013-09-17 17:15:57 -0400344 @Override
Alexandre Lisiond5686032013-10-29 11:09:21 -0400345 public boolean sendIM(SipMessage msg) {
346
347 try {
Alexandre Lision47a72042013-12-10 10:43:02 -0500348 mService.sendTextMessage(mCurrentCallFragment.getConference().getId(), msg);
Alexandre Lisiond5686032013-10-29 11:09:21 -0400349 } catch (RemoteException e) {
350 e.printStackTrace();
351 return false;
352 }
353
354 return true;
355 }
356
357 @Override
Alexandre Lision0c384512013-09-17 17:15:57 -0400358 public void startTimer() {
359 mHandler.postDelayed(mUpdateTimeTask, 0);
360 }
361
Alexandre Lision68855472013-10-10 16:20:46 -0400362 @Override
363 public void slideChatScreen() {
Alexandre Lision666b3772013-10-28 17:42:48 -0400364
Alexandre Lision47a72042013-12-10 10:43:02 -0500365 if (mSlidingPaneLayout.isOpen()) {
366 mSlidingPaneLayout.closePane();
Alexandre Lision666b3772013-10-28 17:42:48 -0400367 } else {
368 mCurrentCallFragment.getBubbleView().stopThread();
Alexandre Lision47a72042013-12-10 10:43:02 -0500369 mSlidingPaneLayout.openPane();
Alexandre Lision666b3772013-10-28 17:42:48 -0400370 }
Alexandre Lision68855472013-10-10 16:20:46 -0400371 }
Alexandre Lisionb8add812013-10-24 11:42:42 -0400372
373 @Override
374 public boolean shouldActivateProximity() {
375 return true;
376 }
377
378 @Override
379 public void onProximityTrackingChanged(boolean acquired) {
380 // TODO Stub de la méthode généré automatiquement
Alexandre Lision666b3772013-10-28 17:42:48 -0400381
Alexandre Lisionb8add812013-10-24 11:42:42 -0400382 }
Alexandre Savard14323be2012-10-24 10:02:13 -0400383}