blob: c0b94099672dcb2e37d3e203c7f7b67695930ce3 [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>
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 3 of the License, or
9 * (at your option) any later version.
10 *
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, write to the Free Software
18 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
19 *
20 * Additional permission under GNU GPL version 3 section 7:
21 *
22 * If you modify this program, or any covered work, by linking or
23 * combining it with the OpenSSL project's OpenSSL library (or a
24 * modified version of that library), containing parts covered by the
25 * terms of the OpenSSL or SSLeay licenses, Savoir-Faire Linux Inc.
26 * grants you additional permission to convey the resulting work.
27 * Corresponding Source for a non-source form of such a combination
28 * shall include the source code for the parts of OpenSSL used as well
29 * as that of the covered work.
30 */
31package com.savoirfairelinux.sflphone.client;
32
alision84813a12013-05-27 17:40:39 -040033import java.util.Random;
34
alisionf76de3b2013-04-16 15:35:22 -040035import android.app.ActionBar;
36import android.app.Activity;
37import android.app.Fragment;
alisionf76de3b2013-04-16 15:35:22 -040038import android.app.FragmentTransaction;
39import android.content.ComponentName;
40import android.content.Context;
41import android.content.Intent;
alision84813a12013-05-27 17:40:39 -040042import android.content.IntentFilter;
alisionf76de3b2013-04-16 15:35:22 -040043import android.content.ServiceConnection;
44import android.os.Bundle;
45import android.os.IBinder;
alision5f899632013-04-22 17:26:56 -040046import android.os.RemoteException;
alision9f7a6ec2013-05-24 16:26:26 -040047import android.support.v4.app.ActionBarDrawerToggle;
48import android.support.v4.view.GravityCompat;
alisionf76de3b2013-04-16 15:35:22 -040049import android.support.v4.view.ViewPager;
alision9f7a6ec2013-05-24 16:26:26 -040050import android.support.v4.widget.DrawerLayout;
alisionf76de3b2013-04-16 15:35:22 -040051import android.util.Log;
alision9f7a6ec2013-05-24 16:26:26 -040052import android.view.MenuItem;
53import android.view.View;
alisionf76de3b2013-04-16 15:35:22 -040054import android.widget.ImageButton;
alision7297bdb2013-05-21 11:56:55 -040055import android.widget.RelativeLayout;
alision04a00182013-05-10 17:05:29 -040056import android.widget.Toast;
alisionf76de3b2013-04-16 15:35:22 -040057
58import com.savoirfairelinux.sflphone.R;
alision9f7a6ec2013-05-24 16:26:26 -040059import com.savoirfairelinux.sflphone.adapters.SectionsPagerAdapter;
alision84813a12013-05-27 17:40:39 -040060import com.savoirfairelinux.sflphone.client.receiver.CallReceiver;
alisionf76de3b2013-04-16 15:35:22 -040061import com.savoirfairelinux.sflphone.fragments.CallElementListFragment;
62import com.savoirfairelinux.sflphone.fragments.ContactListFragment;
alision7297bdb2013-05-21 11:56:55 -040063import com.savoirfairelinux.sflphone.fragments.DialingFragment;
alisiond9e29442013-04-17 16:10:18 -040064import com.savoirfairelinux.sflphone.fragments.HistoryFragment;
alision9f7a6ec2013-05-24 16:26:26 -040065import com.savoirfairelinux.sflphone.fragments.MenuFragment;
alision84813a12013-05-27 17:40:39 -040066import com.savoirfairelinux.sflphone.interfaces.CallInterface;
67import com.savoirfairelinux.sflphone.model.CallContact;
68import com.savoirfairelinux.sflphone.model.CallContact.ContactBuilder;
alisionf76de3b2013-04-16 15:35:22 -040069import com.savoirfairelinux.sflphone.model.SipCall;
alision84813a12013-05-27 17:40:39 -040070import com.savoirfairelinux.sflphone.service.CallManagerCallBack;
alisionf76de3b2013-04-16 15:35:22 -040071import com.savoirfairelinux.sflphone.service.ISipService;
72import com.savoirfairelinux.sflphone.service.SipService;
alision7297bdb2013-05-21 11:56:55 -040073import com.savoirfairelinux.sflphone.views.CustomSlidingDrawer;
alisionf76de3b2013-04-16 15:35:22 -040074
alision84813a12013-05-27 17:40:39 -040075public class SFLPhoneHomeActivity extends Activity implements ActionBar.TabListener, DialingFragment.Callbacks, ContactListFragment.Callbacks,
76 CallElementListFragment.Callbacks, HistoryFragment.Callbacks, CallInterface {
alision9f7a6ec2013-05-24 16:26:26 -040077 SectionsPagerAdapter mSectionsPagerAdapter = null;
alision84813a12013-05-27 17:40:39 -040078 static final String TAG = "SFLPhoneHomeActivity";
alisionf76de3b2013-04-16 15:35:22 -040079
alision9f7a6ec2013-05-24 16:26:26 -040080 ImageButton buttonCall, buttonHangup;
81 private ContactListFragment mContactsFragment = null;
82 private DialingFragment mDialingFragment = null;
83 private CallElementListFragment mCallElementList = null;
84 private HistoryFragment mHistorySectionFragment = null;
alisionf76de3b2013-04-16 15:35:22 -040085
alision9f7a6ec2013-05-24 16:26:26 -040086 Fragment fMenu;
alisionf76de3b2013-04-16 15:35:22 -040087
alision9f7a6ec2013-05-24 16:26:26 -040088 private boolean mBound = false;
89 private ISipService service;
alisionf76de3b2013-04-16 15:35:22 -040090
alision9f7a6ec2013-05-24 16:26:26 -040091 private CharSequence mDrawerTitle;
92 private CharSequence mTitle;
alisionf76de3b2013-04-16 15:35:22 -040093
alision9f7a6ec2013-05-24 16:26:26 -040094 private static final int REQUEST_CODE_PREFERENCES = 1;
95 private static final int REQUEST_CODE_CALL = 2;
alisionf76de3b2013-04-16 15:35:22 -040096
alision9f7a6ec2013-05-24 16:26:26 -040097 private static final int ACTION_BAR_TAB_DIALING = 0;
98 private static final int ACTION_BAR_TAB_CALL = 1;
99 private static final int ACTION_BAR_TAB_HISTORY = 2;
alisionf76de3b2013-04-16 15:35:22 -0400100
alision9f7a6ec2013-05-24 16:26:26 -0400101 RelativeLayout mSliderButton;
102 CustomSlidingDrawer mDrawer;
alision9f7a6ec2013-05-24 16:26:26 -0400103 private DrawerLayout mDrawerLayout;
alision9f7a6ec2013-05-24 16:26:26 -0400104 private ActionBarDrawerToggle mDrawerToggle;
105 /**
106 * The {@link ViewPager} that will host the section contents.
107 */
108 ViewPager mViewPager;
alisionf76de3b2013-04-16 15:35:22 -0400109
alision84813a12013-05-27 17:40:39 -0400110 CallReceiver receiver;
111
alision9f7a6ec2013-05-24 16:26:26 -0400112 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 -0400113
alision9f7a6ec2013-05-24 16:26:26 -0400114 // public SFLPhoneHome extends Activity implements ActionBar.TabListener, OnClickListener
115
116 /* called before activity is killed, e.g. rotation */
117 @Override
118 protected void onSaveInstanceState(Bundle bundle) {
119 super.onSaveInstanceState(bundle);
120 for (int i = 0; i < mSectionsPagerAdapter.getCount(); i++) {
121 try {
122 getFragmentManager().putFragment(bundle, mSectionsPagerAdapter.getClassName(i), mSectionsPagerAdapter.getItem(i));
123 } catch (IllegalStateException e) {
124 Log.e(TAG, "fragment=" + mSectionsPagerAdapter.getItem(i));
125 }
126 }
127
128 getFragmentManager().putFragment(bundle, "ContactsListFragment", mContactsFragment);
129 Log.w(TAG, "onSaveInstanceState()");
130 }
131
132 @Override
133 public void onCreate(Bundle savedInstanceState) {
134 super.onCreate(savedInstanceState);
135
alision84813a12013-05-27 17:40:39 -0400136 receiver = new CallReceiver(this);
137
alision9f7a6ec2013-05-24 16:26:26 -0400138 String libraryPath = getApplicationInfo().dataDir + "/lib";
139 Log.i(TAG, libraryPath);
140
141 // Bind to LocalService
142 if (!mBound) {
143 Log.i(TAG, "onStart: Binding service...");
144 Intent intent = new Intent(this, SipService.class);
145 bindService(intent, mConnection, Context.BIND_AUTO_CREATE);
146 }
147
148 setContentView(R.layout.activity_sflphone_home);
149
150 if (mSectionsPagerAdapter == null) {
151 mSectionsPagerAdapter = new SectionsPagerAdapter(this, getFragmentManager());
152 }
153
154 /* getFragment(Bundle, String) */
155 if (savedInstanceState != null) {
156 Log.w(TAG, "Activity restarted, recreating PagerAdapter...");
157 /* getFragment (Bundle bundle, String key) */
158 mDialingFragment = (DialingFragment) getFragmentManager().getFragment(savedInstanceState,
159 mSectionsPagerAdapter.getClassName(ACTION_BAR_TAB_DIALING));
160 mCallElementList = (CallElementListFragment) getFragmentManager().getFragment(savedInstanceState,
161 mSectionsPagerAdapter.getClassName(ACTION_BAR_TAB_CALL));
162 mHistorySectionFragment = (HistoryFragment) getFragmentManager().getFragment(savedInstanceState,
163 mSectionsPagerAdapter.getClassName(ACTION_BAR_TAB_HISTORY));
164 }
165
166 if (mDialingFragment == null) {
167 mDialingFragment = new DialingFragment();
alision7297bdb2013-05-21 11:56:55 -0400168 Log.w(TAG, "Recreated mDialingFragment=" + mDialingFragment);
alision9f7a6ec2013-05-24 16:26:26 -0400169 }
alisionf76de3b2013-04-16 15:35:22 -0400170
alision9f7a6ec2013-05-24 16:26:26 -0400171 if (mContactsFragment == null) {
172 mContactsFragment = new ContactListFragment();
173 Log.w(TAG, "Recreated mContactListFragment=" + mContactsFragment);
174 getFragmentManager().beginTransaction().replace(R.id.contacts_frame, mContactsFragment).commit();
175 }
176 if (mCallElementList == null) {
177 mCallElementList = new CallElementListFragment();
178 Log.w(TAG, "Recreated mCallElementList=" + mCallElementList);
179 }
180 if (mHistorySectionFragment == null) {
181 mHistorySectionFragment = new HistoryFragment();
182 Log.w(TAG, "Recreated mHistorySectionFragment=" + mHistorySectionFragment);
183 }
184
185 mDrawer = (CustomSlidingDrawer) findViewById(R.id.custom_sliding_drawer);
alision7297bdb2013-05-21 11:56:55 -0400186
alision84813a12013-05-27 17:40:39 -0400187 mContactsFragment.setHandleView((RelativeLayout) findViewById(R.id.slider_button));
alision7297bdb2013-05-21 11:56:55 -0400188
189 mDrawer.setmTrackHandle(findViewById(R.id.handle_title));
alisionf76de3b2013-04-16 15:35:22 -0400190
alision9f7a6ec2013-05-24 16:26:26 -0400191 final ActionBar actionBar = getActionBar();
192 actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
alisionf76de3b2013-04-16 15:35:22 -0400193
alision9f7a6ec2013-05-24 16:26:26 -0400194 // Set up the ViewPager with the sections adapter.
195 mViewPager = (ViewPager) findViewById(R.id.pager);
196 mViewPager.setAdapter(mSectionsPagerAdapter);
alisionf76de3b2013-04-16 15:35:22 -0400197
alision9f7a6ec2013-05-24 16:26:26 -0400198 mTitle = mDrawerTitle = getTitle();
199 mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
200 // mDrawerList = (ListView) findViewById(R.id.left_drawer);
alisionf76de3b2013-04-16 15:35:22 -0400201
alision9f7a6ec2013-05-24 16:26:26 -0400202 // set a custom shadow that overlays the main content when the drawer opens
203 mDrawerLayout.setDrawerShadow(R.drawable.drawer_shadow, GravityCompat.START);
204 // set up the drawer's list view with items and click listener
205 // mDrawerList.setAdapter(new ArrayAdapter<String>(this, R.layout.drawer_list_item, mPlanetTitles));
206 // mDrawerList.setOnItemClickListener(new DrawerItemClickListener());
alisionf76de3b2013-04-16 15:35:22 -0400207
alision9f7a6ec2013-05-24 16:26:26 -0400208 getActionBar().setDisplayHomeAsUpEnabled(true);
209 getActionBar().setHomeButtonEnabled(true);
alisionf76de3b2013-04-16 15:35:22 -0400210
alision9f7a6ec2013-05-24 16:26:26 -0400211 mDrawerToggle = new ActionBarDrawerToggle(this, /* host Activity */
212 mDrawerLayout, /* DrawerLayout object */
213 R.drawable.ic_drawer, /* nav drawer image to replace 'Up' caret */
214 R.string.drawer_open, /* "open drawer" description for accessibility */
215 R.string.drawer_close /* "close drawer" description for accessibility */
216 ) {
217 public void onDrawerClosed(View view) {
218 getActionBar().setTitle(mTitle);
219 invalidateOptionsMenu(); // creates call to onPrepareOptionsMenu()
220 }
alisionf76de3b2013-04-16 15:35:22 -0400221
alision9f7a6ec2013-05-24 16:26:26 -0400222 public void onDrawerOpened(View drawerView) {
223 getActionBar().setTitle(mDrawerTitle);
224 invalidateOptionsMenu(); // creates call to onPrepareOptionsMenu()
225 }
226 };
alisionf76de3b2013-04-16 15:35:22 -0400227
alision9f7a6ec2013-05-24 16:26:26 -0400228 mDrawerLayout.setDrawerListener(mDrawerToggle);
alisionf76de3b2013-04-16 15:35:22 -0400229
alision9f7a6ec2013-05-24 16:26:26 -0400230 mViewPager.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
231 @Override
232 public void onPageSelected(int position) {
233 actionBar.setSelectedNavigationItem(position);
234 }
235 });
alisionf76de3b2013-04-16 15:35:22 -0400236
alision9f7a6ec2013-05-24 16:26:26 -0400237 // For each of the sections in the app, add a tab to the action bar.
238 for (int i = 0; i < mSectionsPagerAdapter.getCount(); i++) {
alisionf76de3b2013-04-16 15:35:22 -0400239
alision9f7a6ec2013-05-24 16:26:26 -0400240 actionBar.addTab(actionBar.newTab().setIcon(icon_res_id[i]).setText(mSectionsPagerAdapter.getPageTitle(i)).setTabListener(this));
241 }
alisionf76de3b2013-04-16 15:35:22 -0400242
alision9f7a6ec2013-05-24 16:26:26 -0400243 actionBar.setSelectedNavigationItem(ACTION_BAR_TAB_CALL);
alisionf76de3b2013-04-16 15:35:22 -0400244
alision9f7a6ec2013-05-24 16:26:26 -0400245 fMenu = new MenuFragment();
246 getFragmentManager().beginTransaction().replace(R.id.left_drawer, fMenu).commit();
247 }
alisionf76de3b2013-04-16 15:35:22 -0400248
alision9f7a6ec2013-05-24 16:26:26 -0400249 @Override
250 protected void onStart() {
251 Log.i(TAG, "onStart");
252 super.onStart();
253 }
alisionf76de3b2013-04-16 15:35:22 -0400254
alision9f7a6ec2013-05-24 16:26:26 -0400255 /* user gets back to the activity, e.g. through task manager */
256 @Override
257 protected void onRestart() {
258 super.onRestart();
259 }
alisionf76de3b2013-04-16 15:35:22 -0400260
alision9f7a6ec2013-05-24 16:26:26 -0400261 /* activity gets back to the foreground and user input */
262 @Override
263 protected void onResume() {
264 Log.i(TAG, "onResume");
alision84813a12013-05-27 17:40:39 -0400265 IntentFilter intentFilter = new IntentFilter();
266 intentFilter.addAction(CallManagerCallBack.INCOMING_CALL);
267 intentFilter.addAction(CallManagerCallBack.INCOMING_TEXT);
268 intentFilter.addAction(CallManagerCallBack.CALL_STATE_CHANGED);
269 registerReceiver(receiver, intentFilter);
alision9f7a6ec2013-05-24 16:26:26 -0400270 super.onResume();
271 }
alisione2a38e12013-04-25 14:20:20 -0400272
alision9f7a6ec2013-05-24 16:26:26 -0400273 /* activity no more in foreground */
274 @Override
275 protected void onPause() {
276 super.onPause();
alision84813a12013-05-27 17:40:39 -0400277 unregisterReceiver(receiver);
alision9f7a6ec2013-05-24 16:26:26 -0400278 }
alisionf76de3b2013-04-16 15:35:22 -0400279
alision9f7a6ec2013-05-24 16:26:26 -0400280 /* activity is no longer visible */
281 @Override
282 protected void onStop() {
283 super.onStop();
284 }
alisionf76de3b2013-04-16 15:35:22 -0400285
alision9f7a6ec2013-05-24 16:26:26 -0400286 /* activity finishes itself or is being killed by the system */
287 @Override
288 protected void onDestroy() {
289 /* stop the service, if no other bound user, no need to check if it is running */
290 if (mBound) {
291 Log.i(TAG, "onDestroy: Unbinding service...");
292 unbindService(mConnection);
293 mBound = false;
294 }
alision371b77e2013-04-23 14:51:26 -0400295
alision9f7a6ec2013-05-24 16:26:26 -0400296 super.onDestroy();
297 }
alision73424b62013-04-26 11:49:18 -0400298
alision84813a12013-05-27 17:40:39 -0400299 public void launchCallActivity(SipCall.CallInfo infos, String action) {
alision9f7a6ec2013-05-24 16:26:26 -0400300 Log.i(TAG, "Launch Call Activity");
301 Bundle bundle = new Bundle();
alision84813a12013-05-27 17:40:39 -0400302 bundle.putString("action", action);
alision9f7a6ec2013-05-24 16:26:26 -0400303 // bundle.putParcelable("CallContact", mListAdapter.getItem(pos));
304 bundle.putParcelable("CallInfo", infos);
305 Intent intent = new Intent().setClass(this, CallActivity.class);
306 intent.putExtras(bundle);
307 startActivityForResult(intent, REQUEST_CODE_CALL);
308 }
alisionf76de3b2013-04-16 15:35:22 -0400309
alision9f7a6ec2013-05-24 16:26:26 -0400310 /** Defines callbacks for service binding, passed to bindService() */
311 private ServiceConnection mConnection = new ServiceConnection() {
alision371b77e2013-04-23 14:51:26 -0400312
alision9f7a6ec2013-05-24 16:26:26 -0400313 @Override
314 public void onServiceConnected(ComponentName className, IBinder binder) {
315 service = ISipService.Stub.asInterface(binder);
alisione2a38e12013-04-25 14:20:20 -0400316
alision9f7a6ec2013-05-24 16:26:26 -0400317 mBound = true;
318 mCallElementList.onServiceSipBinded(service);
319 mHistorySectionFragment.onServiceSipBinded(service);
320 mDialingFragment.onServiceSipBinded(service);
321 Log.d(TAG, "Service connected service=" + service);
alision371b77e2013-04-23 14:51:26 -0400322
alision9f7a6ec2013-05-24 16:26:26 -0400323 }
alision5f899632013-04-22 17:26:56 -0400324
alision9f7a6ec2013-05-24 16:26:26 -0400325 @Override
326 public void onServiceDisconnected(ComponentName arg0) {
alision5f899632013-04-22 17:26:56 -0400327
alision9f7a6ec2013-05-24 16:26:26 -0400328 mBound = false;
329 Log.d(TAG, "Service disconnected service=" + service);
330 }
331 };
alision5f899632013-04-22 17:26:56 -0400332
alision9f7a6ec2013-05-24 16:26:26 -0400333 @Override
334 public boolean onOptionsItemSelected(MenuItem item) {
335 Log.i(TAG, "onOptionsItemSelected " + item.getItemId());
alision5f899632013-04-22 17:26:56 -0400336
alision9f7a6ec2013-05-24 16:26:26 -0400337 if (mDrawerToggle.onOptionsItemSelected(item)) {
338 return true;
339 }
alision5f899632013-04-22 17:26:56 -0400340
alision9f7a6ec2013-05-24 16:26:26 -0400341 return super.onOptionsItemSelected(item);
342 }
alisionf76de3b2013-04-16 15:35:22 -0400343
alision9f7a6ec2013-05-24 16:26:26 -0400344 @Override
345 public void onActivityResult(int requestCode, int resultCode, Intent data) {
346 super.onActivityResult(requestCode, resultCode, data);
alision84813a12013-05-27 17:40:39 -0400347
348 switch (requestCode) {
alision9f7a6ec2013-05-24 16:26:26 -0400349 case REQUEST_CODE_PREFERENCES:
350 mCallElementList.onServiceSipBinded(service);
351 break;
352 case REQUEST_CODE_CALL:
alision84813a12013-05-27 17:40:39 -0400353
alision9f7a6ec2013-05-24 16:26:26 -0400354 break;
355 }
alisionf76de3b2013-04-16 15:35:22 -0400356
alision9f7a6ec2013-05-24 16:26:26 -0400357 }
alisionf76de3b2013-04-16 15:35:22 -0400358
alision9f7a6ec2013-05-24 16:26:26 -0400359 // @Override
360 // public boolean onCreateOptionsMenu(Menu menu) {
361 // getMenuInflater().inflate(R.menu.activity_sflphone_home, menu);
362 // return true;
363 // }
alisionf76de3b2013-04-16 15:35:22 -0400364
alision9f7a6ec2013-05-24 16:26:26 -0400365 @Override
366 public void onTabUnselected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) {
367 }
alisionf76de3b2013-04-16 15:35:22 -0400368
alision9f7a6ec2013-05-24 16:26:26 -0400369 @Override
370 public void onTabSelected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) {
371 // When the given tab is selected, switch to the corresponding page in the ViewPager.
372 mViewPager.setCurrentItem(tab.getPosition());
373 }
alisionf76de3b2013-04-16 15:35:22 -0400374
alision9f7a6ec2013-05-24 16:26:26 -0400375 @Override
376 public void onTabReselected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) {
377 // Log.d(TAG, "onTabReselected");
378 }
alisionf76de3b2013-04-16 15:35:22 -0400379
alision9f7a6ec2013-05-24 16:26:26 -0400380 public void processingHangUpAction() {
381 SipCall call = (SipCall) buttonHangup.getTag();
382 if (call != null)
383 call.notifyServiceHangup(service);
384 }
alisionf76de3b2013-04-16 15:35:22 -0400385
alision9f7a6ec2013-05-24 16:26:26 -0400386 @Override
387 public void onCallSelected(SipCall c) {
alision84813a12013-05-27 17:40:39 -0400388 // launchCallActivity(c.mCallInfo);
alisionf76de3b2013-04-16 15:35:22 -0400389
alision9f7a6ec2013-05-24 16:26:26 -0400390 }
alisionf76de3b2013-04-16 15:35:22 -0400391
alision9f7a6ec2013-05-24 16:26:26 -0400392 @Override
393 public ISipService getService() {
394 return service;
395 }
alisionf76de3b2013-04-16 15:35:22 -0400396
alision84813a12013-05-27 17:40:39 -0400397 /**
398 * Interface implemented to handle incoming events
399 */
alision9f7a6ec2013-05-24 16:26:26 -0400400 @Override
alision84813a12013-05-27 17:40:39 -0400401 public void incomingCall(Intent call) {
402 Toast.makeText(this, "New Call incoming", Toast.LENGTH_LONG).show();
403 SipCall.CallInfo infos = new SipCall.CallInfo(call);
404 SipCall c = new SipCall(infos);
alision9f7a6ec2013-05-24 16:26:26 -0400405 mCallElementList.addCall(c);
alision84813a12013-05-27 17:40:39 -0400406
407 CallContact.ContactBuilder builder = new ContactBuilder();
408 infos.contact = builder.buildUnknownContact(infos.mPhone);
alision9f7a6ec2013-05-24 16:26:26 -0400409
alision84813a12013-05-27 17:40:39 -0400410 launchCallActivity(infos, CallManagerCallBack.INCOMING_CALL);
411
412 }
413
414 @Override
415 public void callStateChanged(Intent callState) {
416 Bundle b = callState.getBundleExtra("com.savoirfairelinux.sflphone.service.newstate");
417 String cID = b.getString("CallID");
418 String state = b.getString("State");
419 Log.i(TAG, "callStateChanged" + cID + " " + state);
420 mCallElementList.updateCall(cID, state);
421
422 }
423
424 @Override
425 public void incomingText(Intent msg) {
426 Bundle b = msg.getBundleExtra("com.savoirfairelinux.sflphone.service.newtext");
427 b.getString("CallID");
428 String from = b.getString("From");
429 String mess = b.getString("Msg");
430 Toast.makeText(getApplicationContext(), "text from " + from + " : " + mess, Toast.LENGTH_LONG).show();
431 }
432
433 @Override
434 public void onContactSelected(CallContact c) {
435 String callID = Integer.toString(new Random().nextInt());
436 SipCall.CallInfo info = new SipCall.CallInfo();
437 info.mCallID = callID;
438 try {
439 info.mAccountID = service.getAccountList().get(1).toString();
440 } catch (RemoteException e) {
441 Log.e(TAG, e.toString());
442 }
443 info.mDisplayName = c.getmDisplayName();
444 info.mPhone = c.getSipPhone().getNumber();
445 info.mEmail = c.getmEmail();
446 info.mCallType = SipCall.CALL_TYPE_OUTGOING;
447 info.contact = c;
448
449 launchCallActivity(info, "call");
450
451 }
452
453 @Override
454 public void onCallDialed(String accountID, String to) {
455 Random random = new Random();
456 String callID = Integer.toString(random.nextInt());
457 SipCall.CallInfo info = new SipCall.CallInfo();
458
459 info.mCallID = callID;
460 info.mAccountID = accountID;
461 info.mDisplayName = "Username";
462 info.mPhone = to;
463 info.mEmail = "username@xxxx.com";
464 info.mCallType = SipCall.CALL_TYPE_OUTGOING;
465
466 CallContact.ContactBuilder builder = new ContactBuilder();
467
468 info.contact = builder.buildUnknownContact(to);
469
470 launchCallActivity(info, "call");
471
alision9f7a6ec2013-05-24 16:26:26 -0400472 }
alision371b77e2013-04-23 14:51:26 -0400473
alisionf76de3b2013-04-16 15:35:22 -0400474}