blob: d47a6531168e109b14411334da51e7813fd1c2f9 [file] [log] [blame]
alisionf76de3b2013-04-16 15:35:22 -04001/*
2 * Copyright (C) 2004-2012 Savoir-Faire Linux Inc.
3 *
4 * Author: Adrien Beraud <adrien.beraud@gmail.com>
alision11e8e162013-05-28 10:33:14 -04005 * Alexandre Lision <alexandre.lision@savoirfairelinux.com>
alisionf76de3b2013-04-16 15:35:22 -04006 *
7 * This program is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation; either version 3 of the License, or
10 * (at your option) any later version.
11 *
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with this program; if not, write to the Free Software
19 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
20 *
21 * Additional permission under GNU GPL version 3 section 7:
22 *
23 * If you modify this program, or any covered work, by linking or
24 * combining it with the OpenSSL project's OpenSSL library (or a
25 * modified version of that library), containing parts covered by the
26 * terms of the OpenSSL or SSLeay licenses, Savoir-Faire Linux Inc.
27 * grants you additional permission to convey the resulting work.
28 * Corresponding Source for a non-source form of such a combination
29 * shall include the source code for the parts of OpenSSL used as well
30 * as that of the covered work.
31 */
32package com.savoirfairelinux.sflphone.client;
33
alision84813a12013-05-27 17:40:39 -040034import java.util.Random;
35
alisionf76de3b2013-04-16 15:35:22 -040036import android.app.ActionBar;
37import android.app.Activity;
38import android.app.Fragment;
alisionf76de3b2013-04-16 15:35:22 -040039import android.app.FragmentTransaction;
40import android.content.ComponentName;
41import android.content.Context;
42import android.content.Intent;
alision84813a12013-05-27 17:40:39 -040043import android.content.IntentFilter;
alisionf76de3b2013-04-16 15:35:22 -040044import android.content.ServiceConnection;
45import android.os.Bundle;
46import android.os.IBinder;
alision5f899632013-04-22 17:26:56 -040047import android.os.RemoteException;
alision9f7a6ec2013-05-24 16:26:26 -040048import android.support.v4.app.ActionBarDrawerToggle;
49import android.support.v4.view.GravityCompat;
alisionf76de3b2013-04-16 15:35:22 -040050import android.support.v4.view.ViewPager;
alision9f7a6ec2013-05-24 16:26:26 -040051import android.support.v4.widget.DrawerLayout;
alisionf76de3b2013-04-16 15:35:22 -040052import android.util.Log;
alision9f7a6ec2013-05-24 16:26:26 -040053import android.view.MenuItem;
54import android.view.View;
alisionf76de3b2013-04-16 15:35:22 -040055import android.widget.ImageButton;
alision7297bdb2013-05-21 11:56:55 -040056import android.widget.RelativeLayout;
alision04a00182013-05-10 17:05:29 -040057import android.widget.Toast;
alisionf76de3b2013-04-16 15:35:22 -040058
59import com.savoirfairelinux.sflphone.R;
alision9f7a6ec2013-05-24 16:26:26 -040060import com.savoirfairelinux.sflphone.adapters.SectionsPagerAdapter;
alision84813a12013-05-27 17:40:39 -040061import com.savoirfairelinux.sflphone.client.receiver.CallReceiver;
alisionf76de3b2013-04-16 15:35:22 -040062import com.savoirfairelinux.sflphone.fragments.CallElementListFragment;
63import com.savoirfairelinux.sflphone.fragments.ContactListFragment;
alision7297bdb2013-05-21 11:56:55 -040064import com.savoirfairelinux.sflphone.fragments.DialingFragment;
alisiond9e29442013-04-17 16:10:18 -040065import com.savoirfairelinux.sflphone.fragments.HistoryFragment;
alision9f7a6ec2013-05-24 16:26:26 -040066import com.savoirfairelinux.sflphone.fragments.MenuFragment;
alision84813a12013-05-27 17:40:39 -040067import com.savoirfairelinux.sflphone.interfaces.CallInterface;
68import com.savoirfairelinux.sflphone.model.CallContact;
69import com.savoirfairelinux.sflphone.model.CallContact.ContactBuilder;
alisionf76de3b2013-04-16 15:35:22 -040070import com.savoirfairelinux.sflphone.model.SipCall;
alision84813a12013-05-27 17:40:39 -040071import com.savoirfairelinux.sflphone.service.CallManagerCallBack;
alisionf76de3b2013-04-16 15:35:22 -040072import com.savoirfairelinux.sflphone.service.ISipService;
73import com.savoirfairelinux.sflphone.service.SipService;
alision7297bdb2013-05-21 11:56:55 -040074import com.savoirfairelinux.sflphone.views.CustomSlidingDrawer;
alisionf76de3b2013-04-16 15:35:22 -040075
alision84813a12013-05-27 17:40:39 -040076public class SFLPhoneHomeActivity extends Activity implements ActionBar.TabListener, DialingFragment.Callbacks, ContactListFragment.Callbacks,
77 CallElementListFragment.Callbacks, HistoryFragment.Callbacks, CallInterface {
alision9f7a6ec2013-05-24 16:26:26 -040078 SectionsPagerAdapter mSectionsPagerAdapter = null;
alision84813a12013-05-27 17:40:39 -040079 static final String TAG = "SFLPhoneHomeActivity";
alisionf76de3b2013-04-16 15:35:22 -040080
alision9f7a6ec2013-05-24 16:26:26 -040081 ImageButton buttonCall, buttonHangup;
82 private ContactListFragment mContactsFragment = null;
83 private DialingFragment mDialingFragment = null;
84 private CallElementListFragment mCallElementList = null;
85 private HistoryFragment mHistorySectionFragment = null;
alisionf76de3b2013-04-16 15:35:22 -040086
alision9f7a6ec2013-05-24 16:26:26 -040087 Fragment fMenu;
alisionf76de3b2013-04-16 15:35:22 -040088
alision9f7a6ec2013-05-24 16:26:26 -040089 private boolean mBound = false;
90 private ISipService service;
alisionf76de3b2013-04-16 15:35:22 -040091
alision9f7a6ec2013-05-24 16:26:26 -040092 private CharSequence mDrawerTitle;
93 private CharSequence mTitle;
alisionf76de3b2013-04-16 15:35:22 -040094
alision9f7a6ec2013-05-24 16:26:26 -040095 private static final int REQUEST_CODE_PREFERENCES = 1;
96 private static final int REQUEST_CODE_CALL = 2;
alisionf76de3b2013-04-16 15:35:22 -040097
alision9f7a6ec2013-05-24 16:26:26 -040098 private static final int ACTION_BAR_TAB_DIALING = 0;
99 private static final int ACTION_BAR_TAB_CALL = 1;
100 private static final int ACTION_BAR_TAB_HISTORY = 2;
alisionf76de3b2013-04-16 15:35:22 -0400101
alision9f7a6ec2013-05-24 16:26:26 -0400102 RelativeLayout mSliderButton;
103 CustomSlidingDrawer mDrawer;
alision9f7a6ec2013-05-24 16:26:26 -0400104 private DrawerLayout mDrawerLayout;
alision9f7a6ec2013-05-24 16:26:26 -0400105 private ActionBarDrawerToggle mDrawerToggle;
106 /**
107 * The {@link ViewPager} that will host the section contents.
108 */
109 ViewPager mViewPager;
alisionf76de3b2013-04-16 15:35:22 -0400110
alision84813a12013-05-27 17:40:39 -0400111 CallReceiver receiver;
112
alision9f7a6ec2013-05-24 16:26:26 -0400113 final private int[] icon_res_id = { R.drawable.ic_tab_call, R.drawable.ic_tab_call, R.drawable.ic_tab_history };
alisionf76de3b2013-04-16 15:35:22 -0400114
alision9f7a6ec2013-05-24 16:26:26 -0400115 // public SFLPhoneHome extends Activity implements ActionBar.TabListener, OnClickListener
116
117 /* called before activity is killed, e.g. rotation */
118 @Override
119 protected void onSaveInstanceState(Bundle bundle) {
120 super.onSaveInstanceState(bundle);
121 for (int i = 0; i < mSectionsPagerAdapter.getCount(); i++) {
122 try {
123 getFragmentManager().putFragment(bundle, mSectionsPagerAdapter.getClassName(i), mSectionsPagerAdapter.getItem(i));
124 } catch (IllegalStateException e) {
125 Log.e(TAG, "fragment=" + mSectionsPagerAdapter.getItem(i));
126 }
127 }
128
129 getFragmentManager().putFragment(bundle, "ContactsListFragment", mContactsFragment);
130 Log.w(TAG, "onSaveInstanceState()");
131 }
132
133 @Override
134 public void onCreate(Bundle savedInstanceState) {
135 super.onCreate(savedInstanceState);
136
alision84813a12013-05-27 17:40:39 -0400137 receiver = new CallReceiver(this);
138
alision9f7a6ec2013-05-24 16:26:26 -0400139 String libraryPath = getApplicationInfo().dataDir + "/lib";
140 Log.i(TAG, libraryPath);
141
142 // Bind to LocalService
143 if (!mBound) {
144 Log.i(TAG, "onStart: Binding service...");
145 Intent intent = new Intent(this, SipService.class);
146 bindService(intent, mConnection, Context.BIND_AUTO_CREATE);
147 }
148
149 setContentView(R.layout.activity_sflphone_home);
150
151 if (mSectionsPagerAdapter == null) {
152 mSectionsPagerAdapter = new SectionsPagerAdapter(this, getFragmentManager());
153 }
154
155 /* getFragment(Bundle, String) */
156 if (savedInstanceState != null) {
157 Log.w(TAG, "Activity restarted, recreating PagerAdapter...");
158 /* getFragment (Bundle bundle, String key) */
159 mDialingFragment = (DialingFragment) getFragmentManager().getFragment(savedInstanceState,
160 mSectionsPagerAdapter.getClassName(ACTION_BAR_TAB_DIALING));
161 mCallElementList = (CallElementListFragment) getFragmentManager().getFragment(savedInstanceState,
162 mSectionsPagerAdapter.getClassName(ACTION_BAR_TAB_CALL));
163 mHistorySectionFragment = (HistoryFragment) getFragmentManager().getFragment(savedInstanceState,
164 mSectionsPagerAdapter.getClassName(ACTION_BAR_TAB_HISTORY));
165 }
166
167 if (mDialingFragment == null) {
168 mDialingFragment = new DialingFragment();
alision7297bdb2013-05-21 11:56:55 -0400169 Log.w(TAG, "Recreated mDialingFragment=" + mDialingFragment);
alision9f7a6ec2013-05-24 16:26:26 -0400170 }
alisionf76de3b2013-04-16 15:35:22 -0400171
alision9f7a6ec2013-05-24 16:26:26 -0400172 if (mContactsFragment == null) {
173 mContactsFragment = new ContactListFragment();
174 Log.w(TAG, "Recreated mContactListFragment=" + mContactsFragment);
175 getFragmentManager().beginTransaction().replace(R.id.contacts_frame, mContactsFragment).commit();
176 }
177 if (mCallElementList == null) {
178 mCallElementList = new CallElementListFragment();
179 Log.w(TAG, "Recreated mCallElementList=" + mCallElementList);
180 }
181 if (mHistorySectionFragment == null) {
182 mHistorySectionFragment = new HistoryFragment();
183 Log.w(TAG, "Recreated mHistorySectionFragment=" + mHistorySectionFragment);
184 }
185
186 mDrawer = (CustomSlidingDrawer) findViewById(R.id.custom_sliding_drawer);
alision7297bdb2013-05-21 11:56:55 -0400187
alision84813a12013-05-27 17:40:39 -0400188 mContactsFragment.setHandleView((RelativeLayout) findViewById(R.id.slider_button));
alision7297bdb2013-05-21 11:56:55 -0400189
190 mDrawer.setmTrackHandle(findViewById(R.id.handle_title));
alisionf76de3b2013-04-16 15:35:22 -0400191
alision9f7a6ec2013-05-24 16:26:26 -0400192 final ActionBar actionBar = getActionBar();
193 actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
alisionf76de3b2013-04-16 15:35:22 -0400194
alision9f7a6ec2013-05-24 16:26:26 -0400195 // Set up the ViewPager with the sections adapter.
196 mViewPager = (ViewPager) findViewById(R.id.pager);
197 mViewPager.setAdapter(mSectionsPagerAdapter);
alisionf76de3b2013-04-16 15:35:22 -0400198
alision9f7a6ec2013-05-24 16:26:26 -0400199 mTitle = mDrawerTitle = getTitle();
200 mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
201 // mDrawerList = (ListView) findViewById(R.id.left_drawer);
alisionf76de3b2013-04-16 15:35:22 -0400202
alision9f7a6ec2013-05-24 16:26:26 -0400203 // set a custom shadow that overlays the main content when the drawer opens
204 mDrawerLayout.setDrawerShadow(R.drawable.drawer_shadow, GravityCompat.START);
205 // set up the drawer's list view with items and click listener
206 // mDrawerList.setAdapter(new ArrayAdapter<String>(this, R.layout.drawer_list_item, mPlanetTitles));
207 // mDrawerList.setOnItemClickListener(new DrawerItemClickListener());
alisionf76de3b2013-04-16 15:35:22 -0400208
alision9f7a6ec2013-05-24 16:26:26 -0400209 getActionBar().setDisplayHomeAsUpEnabled(true);
210 getActionBar().setHomeButtonEnabled(true);
alisionf76de3b2013-04-16 15:35:22 -0400211
alision9f7a6ec2013-05-24 16:26:26 -0400212 mDrawerToggle = new ActionBarDrawerToggle(this, /* host Activity */
213 mDrawerLayout, /* DrawerLayout object */
214 R.drawable.ic_drawer, /* nav drawer image to replace 'Up' caret */
215 R.string.drawer_open, /* "open drawer" description for accessibility */
216 R.string.drawer_close /* "close drawer" description for accessibility */
217 ) {
218 public void onDrawerClosed(View view) {
219 getActionBar().setTitle(mTitle);
220 invalidateOptionsMenu(); // creates call to onPrepareOptionsMenu()
221 }
alisionf76de3b2013-04-16 15:35:22 -0400222
alision9f7a6ec2013-05-24 16:26:26 -0400223 public void onDrawerOpened(View drawerView) {
224 getActionBar().setTitle(mDrawerTitle);
225 invalidateOptionsMenu(); // creates call to onPrepareOptionsMenu()
226 }
227 };
alisionf76de3b2013-04-16 15:35:22 -0400228
alision9f7a6ec2013-05-24 16:26:26 -0400229 mDrawerLayout.setDrawerListener(mDrawerToggle);
alisionf76de3b2013-04-16 15:35:22 -0400230
alision9f7a6ec2013-05-24 16:26:26 -0400231 mViewPager.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
232 @Override
233 public void onPageSelected(int position) {
234 actionBar.setSelectedNavigationItem(position);
235 }
236 });
alisionf76de3b2013-04-16 15:35:22 -0400237
alision9f7a6ec2013-05-24 16:26:26 -0400238 // For each of the sections in the app, add a tab to the action bar.
239 for (int i = 0; i < mSectionsPagerAdapter.getCount(); i++) {
alisionf76de3b2013-04-16 15:35:22 -0400240
alision9f7a6ec2013-05-24 16:26:26 -0400241 actionBar.addTab(actionBar.newTab().setIcon(icon_res_id[i]).setText(mSectionsPagerAdapter.getPageTitle(i)).setTabListener(this));
242 }
alisionf76de3b2013-04-16 15:35:22 -0400243
alision9f7a6ec2013-05-24 16:26:26 -0400244 actionBar.setSelectedNavigationItem(ACTION_BAR_TAB_CALL);
alisionf76de3b2013-04-16 15:35:22 -0400245
alision9f7a6ec2013-05-24 16:26:26 -0400246 fMenu = new MenuFragment();
247 getFragmentManager().beginTransaction().replace(R.id.left_drawer, fMenu).commit();
248 }
alisionf76de3b2013-04-16 15:35:22 -0400249
alision9f7a6ec2013-05-24 16:26:26 -0400250 @Override
251 protected void onStart() {
252 Log.i(TAG, "onStart");
253 super.onStart();
254 }
alisionf76de3b2013-04-16 15:35:22 -0400255
alision9f7a6ec2013-05-24 16:26:26 -0400256 /* user gets back to the activity, e.g. through task manager */
257 @Override
258 protected void onRestart() {
259 super.onRestart();
260 }
alisionf76de3b2013-04-16 15:35:22 -0400261
alision9f7a6ec2013-05-24 16:26:26 -0400262 /* activity gets back to the foreground and user input */
263 @Override
264 protected void onResume() {
265 Log.i(TAG, "onResume");
alision84813a12013-05-27 17:40:39 -0400266 IntentFilter intentFilter = new IntentFilter();
267 intentFilter.addAction(CallManagerCallBack.INCOMING_CALL);
268 intentFilter.addAction(CallManagerCallBack.INCOMING_TEXT);
269 intentFilter.addAction(CallManagerCallBack.CALL_STATE_CHANGED);
270 registerReceiver(receiver, intentFilter);
alision9f7a6ec2013-05-24 16:26:26 -0400271 super.onResume();
272 }
alisione2a38e12013-04-25 14:20:20 -0400273
alision9f7a6ec2013-05-24 16:26:26 -0400274 /* activity no more in foreground */
275 @Override
276 protected void onPause() {
277 super.onPause();
alision84813a12013-05-27 17:40:39 -0400278 unregisterReceiver(receiver);
alision9f7a6ec2013-05-24 16:26:26 -0400279 }
alisionf76de3b2013-04-16 15:35:22 -0400280
alision9f7a6ec2013-05-24 16:26:26 -0400281 /* activity is no longer visible */
282 @Override
283 protected void onStop() {
284 super.onStop();
285 }
alisionf76de3b2013-04-16 15:35:22 -0400286
alision9f7a6ec2013-05-24 16:26:26 -0400287 /* activity finishes itself or is being killed by the system */
288 @Override
289 protected void onDestroy() {
290 /* stop the service, if no other bound user, no need to check if it is running */
291 if (mBound) {
292 Log.i(TAG, "onDestroy: Unbinding service...");
293 unbindService(mConnection);
294 mBound = false;
295 }
alision371b77e2013-04-23 14:51:26 -0400296
alision9f7a6ec2013-05-24 16:26:26 -0400297 super.onDestroy();
298 }
alision73424b62013-04-26 11:49:18 -0400299
alision84813a12013-05-27 17:40:39 -0400300 public void launchCallActivity(SipCall.CallInfo infos, String action) {
alision9f7a6ec2013-05-24 16:26:26 -0400301 Log.i(TAG, "Launch Call Activity");
302 Bundle bundle = new Bundle();
alision84813a12013-05-27 17:40:39 -0400303 bundle.putString("action", action);
alision9f7a6ec2013-05-24 16:26:26 -0400304 // bundle.putParcelable("CallContact", mListAdapter.getItem(pos));
305 bundle.putParcelable("CallInfo", infos);
306 Intent intent = new Intent().setClass(this, CallActivity.class);
307 intent.putExtras(bundle);
308 startActivityForResult(intent, REQUEST_CODE_CALL);
309 }
alisionf76de3b2013-04-16 15:35:22 -0400310
alision9f7a6ec2013-05-24 16:26:26 -0400311 /** Defines callbacks for service binding, passed to bindService() */
312 private ServiceConnection mConnection = new ServiceConnection() {
alision371b77e2013-04-23 14:51:26 -0400313
alision9f7a6ec2013-05-24 16:26:26 -0400314 @Override
315 public void onServiceConnected(ComponentName className, IBinder binder) {
316 service = ISipService.Stub.asInterface(binder);
alisione2a38e12013-04-25 14:20:20 -0400317
alision9f7a6ec2013-05-24 16:26:26 -0400318 mBound = true;
319 mCallElementList.onServiceSipBinded(service);
320 mHistorySectionFragment.onServiceSipBinded(service);
321 mDialingFragment.onServiceSipBinded(service);
322 Log.d(TAG, "Service connected service=" + service);
alision371b77e2013-04-23 14:51:26 -0400323
alision9f7a6ec2013-05-24 16:26:26 -0400324 }
alision5f899632013-04-22 17:26:56 -0400325
alision9f7a6ec2013-05-24 16:26:26 -0400326 @Override
327 public void onServiceDisconnected(ComponentName arg0) {
alision5f899632013-04-22 17:26:56 -0400328
alision9f7a6ec2013-05-24 16:26:26 -0400329 mBound = false;
330 Log.d(TAG, "Service disconnected service=" + service);
331 }
332 };
alision5f899632013-04-22 17:26:56 -0400333
alision9f7a6ec2013-05-24 16:26:26 -0400334 @Override
335 public boolean onOptionsItemSelected(MenuItem item) {
336 Log.i(TAG, "onOptionsItemSelected " + item.getItemId());
alision5f899632013-04-22 17:26:56 -0400337
alision9f7a6ec2013-05-24 16:26:26 -0400338 if (mDrawerToggle.onOptionsItemSelected(item)) {
339 return true;
340 }
alision5f899632013-04-22 17:26:56 -0400341
alision9f7a6ec2013-05-24 16:26:26 -0400342 return super.onOptionsItemSelected(item);
343 }
alisionf76de3b2013-04-16 15:35:22 -0400344
alision9f7a6ec2013-05-24 16:26:26 -0400345 @Override
346 public void onActivityResult(int requestCode, int resultCode, Intent data) {
347 super.onActivityResult(requestCode, resultCode, data);
alision84813a12013-05-27 17:40:39 -0400348
349 switch (requestCode) {
alision9f7a6ec2013-05-24 16:26:26 -0400350 case REQUEST_CODE_PREFERENCES:
351 mCallElementList.onServiceSipBinded(service);
352 break;
353 case REQUEST_CODE_CALL:
alision84813a12013-05-27 17:40:39 -0400354
alision9f7a6ec2013-05-24 16:26:26 -0400355 break;
356 }
alisionf76de3b2013-04-16 15:35:22 -0400357
alision9f7a6ec2013-05-24 16:26:26 -0400358 }
alisionf76de3b2013-04-16 15:35:22 -0400359
alision9f7a6ec2013-05-24 16:26:26 -0400360 // @Override
361 // public boolean onCreateOptionsMenu(Menu menu) {
362 // getMenuInflater().inflate(R.menu.activity_sflphone_home, menu);
363 // return true;
364 // }
alisionf76de3b2013-04-16 15:35:22 -0400365
alision9f7a6ec2013-05-24 16:26:26 -0400366 @Override
367 public void onTabUnselected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) {
368 }
alisionf76de3b2013-04-16 15:35:22 -0400369
alision9f7a6ec2013-05-24 16:26:26 -0400370 @Override
371 public void onTabSelected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) {
372 // When the given tab is selected, switch to the corresponding page in the ViewPager.
373 mViewPager.setCurrentItem(tab.getPosition());
374 }
alisionf76de3b2013-04-16 15:35:22 -0400375
alision9f7a6ec2013-05-24 16:26:26 -0400376 @Override
377 public void onTabReselected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) {
378 // Log.d(TAG, "onTabReselected");
379 }
alisionf76de3b2013-04-16 15:35:22 -0400380
alision9f7a6ec2013-05-24 16:26:26 -0400381 public void processingHangUpAction() {
382 SipCall call = (SipCall) buttonHangup.getTag();
383 if (call != null)
384 call.notifyServiceHangup(service);
385 }
alisionf76de3b2013-04-16 15:35:22 -0400386
alision9f7a6ec2013-05-24 16:26:26 -0400387 @Override
388 public void onCallSelected(SipCall c) {
alision84813a12013-05-27 17:40:39 -0400389 // launchCallActivity(c.mCallInfo);
alisionf76de3b2013-04-16 15:35:22 -0400390
alision9f7a6ec2013-05-24 16:26:26 -0400391 }
alisionf76de3b2013-04-16 15:35:22 -0400392
alision9f7a6ec2013-05-24 16:26:26 -0400393 @Override
394 public ISipService getService() {
395 return service;
396 }
alisionf76de3b2013-04-16 15:35:22 -0400397
alision84813a12013-05-27 17:40:39 -0400398 /**
399 * Interface implemented to handle incoming events
400 */
alision9f7a6ec2013-05-24 16:26:26 -0400401 @Override
alision84813a12013-05-27 17:40:39 -0400402 public void incomingCall(Intent call) {
403 Toast.makeText(this, "New Call incoming", Toast.LENGTH_LONG).show();
404 SipCall.CallInfo infos = new SipCall.CallInfo(call);
405 SipCall c = new SipCall(infos);
alision9f7a6ec2013-05-24 16:26:26 -0400406 mCallElementList.addCall(c);
alision84813a12013-05-27 17:40:39 -0400407
408 CallContact.ContactBuilder builder = new ContactBuilder();
alision11e8e162013-05-28 10:33:14 -0400409 infos.contacts.add(builder.buildUnknownContact(infos.mPhone));
alision9f7a6ec2013-05-24 16:26:26 -0400410
alision84813a12013-05-27 17:40:39 -0400411 launchCallActivity(infos, CallManagerCallBack.INCOMING_CALL);
412
413 }
414
415 @Override
416 public void callStateChanged(Intent callState) {
417 Bundle b = callState.getBundleExtra("com.savoirfairelinux.sflphone.service.newstate");
418 String cID = b.getString("CallID");
419 String state = b.getString("State");
420 Log.i(TAG, "callStateChanged" + cID + " " + state);
421 mCallElementList.updateCall(cID, state);
422
423 }
424
425 @Override
426 public void incomingText(Intent msg) {
427 Bundle b = msg.getBundleExtra("com.savoirfairelinux.sflphone.service.newtext");
428 b.getString("CallID");
429 String from = b.getString("From");
430 String mess = b.getString("Msg");
431 Toast.makeText(getApplicationContext(), "text from " + from + " : " + mess, Toast.LENGTH_LONG).show();
432 }
433
434 @Override
435 public void onContactSelected(CallContact c) {
436 String callID = Integer.toString(new Random().nextInt());
437 SipCall.CallInfo info = new SipCall.CallInfo();
438 info.mCallID = callID;
439 try {
440 info.mAccountID = service.getAccountList().get(1).toString();
441 } catch (RemoteException e) {
442 Log.e(TAG, e.toString());
443 }
444 info.mDisplayName = c.getmDisplayName();
445 info.mPhone = c.getSipPhone().getNumber();
446 info.mEmail = c.getmEmail();
447 info.mCallType = SipCall.CALL_TYPE_OUTGOING;
alision11e8e162013-05-28 10:33:14 -0400448 info.contacts.add(c);
alision84813a12013-05-27 17:40:39 -0400449
450 launchCallActivity(info, "call");
451
452 }
453
454 @Override
455 public void onCallDialed(String accountID, String to) {
456 Random random = new Random();
457 String callID = Integer.toString(random.nextInt());
458 SipCall.CallInfo info = new SipCall.CallInfo();
459
460 info.mCallID = callID;
461 info.mAccountID = accountID;
462 info.mDisplayName = "Username";
463 info.mPhone = to;
464 info.mEmail = "username@xxxx.com";
465 info.mCallType = SipCall.CALL_TYPE_OUTGOING;
466
467 CallContact.ContactBuilder builder = new ContactBuilder();
468
alision11e8e162013-05-28 10:33:14 -0400469 info.contacts.add(builder.buildUnknownContact(info.mPhone));
alision84813a12013-05-27 17:40:39 -0400470
471 launchCallActivity(info, "call");
472
alision9f7a6ec2013-05-24 16:26:26 -0400473 }
alision371b77e2013-04-23 14:51:26 -0400474
alisionf76de3b2013-04-16 15:35:22 -0400475}