blob: 5902d2f409cc03996094c4f10d20a9e2e910b68d [file] [log] [blame]
alisionf76de3b2013-04-16 15:35:22 -04001/*
alision2ec64f92013-06-17 17:28:58 -04002 * Copyright (C) 2004-2013 Savoir-Faire Linux Inc.
alisionf76de3b2013-04-16 15:35:22 -04003 *
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
alisiond45da712013-05-30 09:18:49 -040034import java.util.HashMap;
alisionbd45a822013-06-06 17:35:35 -040035import java.util.Timer;
36import java.util.TimerTask;
alision84813a12013-05-27 17:40:39 -040037
alisionf76de3b2013-04-16 15:35:22 -040038import android.app.Activity;
alisionf76de3b2013-04-16 15:35:22 -040039import 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;
alisionf57d8a62013-07-02 09:37:12 -040044import android.content.res.Configuration;
alision55c36cb2013-06-14 14:57:38 -040045import android.database.Cursor;
Alexandre Lisionf41a3a82013-09-05 17:15:15 -040046import android.graphics.Color;
alisionf76de3b2013-04-16 15:35:22 -040047import android.os.Bundle;
48import android.os.IBinder;
alision5f899632013-04-22 17:26:56 -040049import android.os.RemoteException;
alision55c36cb2013-06-14 14:57:38 -040050import android.provider.ContactsContract.CommonDataKinds.Phone;
51import android.provider.ContactsContract.CommonDataKinds.SipAddress;
alision9f7a6ec2013-05-24 16:26:26 -040052import android.support.v4.app.ActionBarDrawerToggle;
53import android.support.v4.view.GravityCompat;
Alexandre Lisionf41a3a82013-09-05 17:15:15 -040054import android.support.v4.view.PagerTabStrip;
alisionf76de3b2013-04-16 15:35:22 -040055import android.support.v4.view.ViewPager;
alision9f7a6ec2013-05-24 16:26:26 -040056import android.support.v4.widget.DrawerLayout;
alisionf76de3b2013-04-16 15:35:22 -040057import android.util.Log;
Alexandre Lisionf41a3a82013-09-05 17:15:15 -040058import android.util.TypedValue;
alision9f7a6ec2013-05-24 16:26:26 -040059import android.view.MenuItem;
60import android.view.View;
alision7297bdb2013-05-21 11:56:55 -040061import android.widget.RelativeLayout;
alisiond45da712013-05-30 09:18:49 -040062import android.widget.TabHost;
alisiond45da712013-05-30 09:18:49 -040063import android.widget.TabHost.TabContentFactory;
alision04a00182013-05-10 17:05:29 -040064import android.widget.Toast;
alisionf76de3b2013-04-16 15:35:22 -040065
66import com.savoirfairelinux.sflphone.R;
alision9f7a6ec2013-05-24 16:26:26 -040067import com.savoirfairelinux.sflphone.adapters.SectionsPagerAdapter;
alisionf76de3b2013-04-16 15:35:22 -040068import com.savoirfairelinux.sflphone.fragments.ContactListFragment;
alision7297bdb2013-05-21 11:56:55 -040069import com.savoirfairelinux.sflphone.fragments.DialingFragment;
alisiond9e29442013-04-17 16:10:18 -040070import com.savoirfairelinux.sflphone.fragments.HistoryFragment;
alision55c36cb2013-06-14 14:57:38 -040071import com.savoirfairelinux.sflphone.fragments.HomeFragment;
alision9f7a6ec2013-05-24 16:26:26 -040072import com.savoirfairelinux.sflphone.fragments.MenuFragment;
alision84813a12013-05-27 17:40:39 -040073import com.savoirfairelinux.sflphone.interfaces.CallInterface;
alision2ec64f92013-06-17 17:28:58 -040074import com.savoirfairelinux.sflphone.loaders.LoaderConstants;
alision84813a12013-05-27 17:40:39 -040075import com.savoirfairelinux.sflphone.model.CallContact;
alisiondf1dac92013-06-27 17:35:53 -040076import com.savoirfairelinux.sflphone.model.Conference;
alisionf76de3b2013-04-16 15:35:22 -040077import com.savoirfairelinux.sflphone.model.SipCall;
alisioncc7bb422013-06-06 15:31:39 -040078import com.savoirfairelinux.sflphone.receivers.CallReceiver;
alision84813a12013-05-27 17:40:39 -040079import com.savoirfairelinux.sflphone.service.CallManagerCallBack;
alisionf76de3b2013-04-16 15:35:22 -040080import com.savoirfairelinux.sflphone.service.ISipService;
81import com.savoirfairelinux.sflphone.service.SipService;
alision7297bdb2013-05-21 11:56:55 -040082import com.savoirfairelinux.sflphone.views.CustomSlidingDrawer;
alisionf76de3b2013-04-16 15:35:22 -040083
alision907bde72013-06-20 14:40:37 -040084public class SFLPhoneHomeActivity extends Activity implements DialingFragment.Callbacks, ContactListFragment.Callbacks, HomeFragment.Callbacks,
85 HistoryFragment.Callbacks, CallInterface, MenuFragment.Callbacks {
alisionfde875f2013-05-28 17:01:54 -040086
alision9f7a6ec2013-05-24 16:26:26 -040087 SectionsPagerAdapter mSectionsPagerAdapter = null;
alision84813a12013-05-27 17:40:39 -040088 static final String TAG = "SFLPhoneHomeActivity";
alisionf76de3b2013-04-16 15:35:22 -040089
alision2cb99562013-05-30 17:02:20 -040090 /**
91 * Fragments used
92 */
alision9f7a6ec2013-05-24 16:26:26 -040093 private ContactListFragment mContactsFragment = null;
alision58356b72013-06-03 17:13:36 -040094 // private DialingFragment mDialingFragment = null;
95 // private CallElementListFragment mCallElementList = null;
96 // private HistoryFragment mHistorySectionFragment = null;
alision907bde72013-06-20 14:40:37 -040097 private MenuFragment fMenu;
alisionf76de3b2013-04-16 15:35:22 -040098
alision9f7a6ec2013-05-24 16:26:26 -040099 private boolean mBound = false;
100 private ISipService service;
alisionf76de3b2013-04-16 15:35:22 -0400101
alision9f7a6ec2013-05-24 16:26:26 -0400102 private CharSequence mDrawerTitle;
103 private CharSequence mTitle;
alisionf76de3b2013-04-16 15:35:22 -0400104
alision2cb99562013-05-30 17:02:20 -0400105 public static final int REQUEST_CODE_PREFERENCES = 1;
alision9f7a6ec2013-05-24 16:26:26 -0400106 private static final int REQUEST_CODE_CALL = 2;
alisionf76de3b2013-04-16 15:35:22 -0400107
alision0b553832013-05-30 09:31:06 -0400108 RelativeLayout mSliderButton;
alision9f7a6ec2013-05-24 16:26:26 -0400109 CustomSlidingDrawer mDrawer;
alision9f7a6ec2013-05-24 16:26:26 -0400110 private DrawerLayout mDrawerLayout;
alision9f7a6ec2013-05-24 16:26:26 -0400111 private ActionBarDrawerToggle mDrawerToggle;
112 /**
113 * The {@link ViewPager} that will host the section contents.
114 */
115 ViewPager mViewPager;
alisionf76de3b2013-04-16 15:35:22 -0400116
alision58356b72013-06-03 17:13:36 -0400117 CallReceiver callReceiver;
alision84813a12013-05-27 17:40:39 -0400118
Alexandre Lisionf41a3a82013-09-05 17:15:15 -0400119// private TabHost mTabHost;
alisionf76de3b2013-04-16 15:35:22 -0400120
alision9f7a6ec2013-05-24 16:26:26 -0400121 // public SFLPhoneHome extends Activity implements ActionBar.TabListener, OnClickListener
122
123 /* called before activity is killed, e.g. rotation */
124 @Override
125 protected void onSaveInstanceState(Bundle bundle) {
126 super.onSaveInstanceState(bundle);
127 for (int i = 0; i < mSectionsPagerAdapter.getCount(); i++) {
128 try {
129 getFragmentManager().putFragment(bundle, mSectionsPagerAdapter.getClassName(i), mSectionsPagerAdapter.getItem(i));
130 } catch (IllegalStateException e) {
131 Log.e(TAG, "fragment=" + mSectionsPagerAdapter.getItem(i));
132 }
133 }
134
135 getFragmentManager().putFragment(bundle, "ContactsListFragment", mContactsFragment);
136 Log.w(TAG, "onSaveInstanceState()");
137 }
138
139 @Override
140 public void onCreate(Bundle savedInstanceState) {
141 super.onCreate(savedInstanceState);
142
alision58356b72013-06-03 17:13:36 -0400143 callReceiver = new CallReceiver(this);
alision907bde72013-06-20 14:40:37 -0400144
alision2cb99562013-05-30 17:02:20 -0400145 // String libraryPath = getApplicationInfo().dataDir + "/lib";
146 // Log.i(TAG, libraryPath);
alision9f7a6ec2013-05-24 16:26:26 -0400147
alision58356b72013-06-03 17:13:36 -0400148 setContentView(R.layout.activity_sflphone_home);
149
alision9f7a6ec2013-05-24 16:26:26 -0400150 // Bind to LocalService
151 if (!mBound) {
152 Log.i(TAG, "onStart: Binding service...");
153 Intent intent = new Intent(this, SipService.class);
154 bindService(intent, mConnection, Context.BIND_AUTO_CREATE);
155 }
156
alision9f7a6ec2013-05-24 16:26:26 -0400157 if (mContactsFragment == null) {
158 mContactsFragment = new ContactListFragment();
159 Log.w(TAG, "Recreated mContactListFragment=" + mContactsFragment);
160 getFragmentManager().beginTransaction().replace(R.id.contacts_frame, mContactsFragment).commit();
161 }
alision2ec64f92013-06-17 17:28:58 -0400162
alision9f7a6ec2013-05-24 16:26:26 -0400163 mDrawer = (CustomSlidingDrawer) findViewById(R.id.custom_sliding_drawer);
alision7297bdb2013-05-21 11:56:55 -0400164
alision84813a12013-05-27 17:40:39 -0400165 mContactsFragment.setHandleView((RelativeLayout) findViewById(R.id.slider_button));
alision7297bdb2013-05-21 11:56:55 -0400166
167 mDrawer.setmTrackHandle(findViewById(R.id.handle_title));
alisionf76de3b2013-04-16 15:35:22 -0400168
alision9f7a6ec2013-05-24 16:26:26 -0400169 // Set up the ViewPager with the sections adapter.
170 mViewPager = (ViewPager) findViewById(R.id.pager);
alision55c36cb2013-06-14 14:57:38 -0400171 mViewPager.setPageTransformer(true, new ZoomOutPageTransformer(0.7f));
alisionf76de3b2013-04-16 15:35:22 -0400172
alision9f7a6ec2013-05-24 16:26:26 -0400173 mTitle = mDrawerTitle = getTitle();
174 mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
alisionf76de3b2013-04-16 15:35:22 -0400175
alision0b553832013-05-30 09:31:06 -0400176 // set a custom shadow that overlays the main content when the drawer opens
alision9f7a6ec2013-05-24 16:26:26 -0400177 mDrawerLayout.setDrawerShadow(R.drawable.drawer_shadow, GravityCompat.START);
alisionf76de3b2013-04-16 15:35:22 -0400178
alision9f7a6ec2013-05-24 16:26:26 -0400179 getActionBar().setDisplayHomeAsUpEnabled(true);
180 getActionBar().setHomeButtonEnabled(true);
alisionf76de3b2013-04-16 15:35:22 -0400181
alision9f7a6ec2013-05-24 16:26:26 -0400182 mDrawerToggle = new ActionBarDrawerToggle(this, /* host Activity */
183 mDrawerLayout, /* DrawerLayout object */
184 R.drawable.ic_drawer, /* nav drawer image to replace 'Up' caret */
185 R.string.drawer_open, /* "open drawer" description for accessibility */
186 R.string.drawer_close /* "close drawer" description for accessibility */
187 ) {
alision0b553832013-05-30 09:31:06 -0400188 @Override
alision9f7a6ec2013-05-24 16:26:26 -0400189 public void onDrawerClosed(View view) {
190 getActionBar().setTitle(mTitle);
191 invalidateOptionsMenu(); // creates call to onPrepareOptionsMenu()
192 }
alisionf76de3b2013-04-16 15:35:22 -0400193
alision0b553832013-05-30 09:31:06 -0400194 @Override
alision9f7a6ec2013-05-24 16:26:26 -0400195 public void onDrawerOpened(View drawerView) {
196 getActionBar().setTitle(mDrawerTitle);
197 invalidateOptionsMenu(); // creates call to onPrepareOptionsMenu()
198 }
199 };
alisionf76de3b2013-04-16 15:35:22 -0400200
Alexandre Lisionf41a3a82013-09-05 17:15:15 -0400201// mTabHost = (TabHost) findViewById(android.R.id.tabhost);
alision9f7a6ec2013-05-24 16:26:26 -0400202 mDrawerLayout.setDrawerListener(mDrawerToggle);
alisionf76de3b2013-04-16 15:35:22 -0400203
alision9f7a6ec2013-05-24 16:26:26 -0400204 mViewPager.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
205 @Override
206 public void onPageSelected(int position) {
Alexandre Lisionf41a3a82013-09-05 17:15:15 -0400207// mTabHost.setCurrentTab(position);
alision9f7a6ec2013-05-24 16:26:26 -0400208 }
209 });
alisionf76de3b2013-04-16 15:35:22 -0400210
alision9f7a6ec2013-05-24 16:26:26 -0400211 }
alisionf76de3b2013-04-16 15:35:22 -0400212
Alexandre Lisionf41a3a82013-09-05 17:15:15 -0400213// private void initialiseTabHost(Bundle args) {
214//
215// mTabHost.setup();
216// TabInfo tabInfo = null;
217// SFLPhoneHomeActivity
218// .AddTab(this,
219// this.mTabHost,
220// this.mTabHost.newTabSpec("Tab1").setIndicator(mSectionsPagerAdapter.getPageTitle(0),
221// getResources().getDrawable(mSectionsPagerAdapter.getIconOf(0))), (tabInfo = new TabInfo("Tab1",
222// DialingFragment.class, args)));
223// this.mapTabInfo.put(tabInfo.tag, tabInfo);
224// SFLPhoneHomeActivity.AddTab(
225// this,
226// this.mTabHost,
227// this.mTabHost.newTabSpec("Tab2").setIndicator(mSectionsPagerAdapter.getPageTitle(1),
228// getResources().getDrawable(mSectionsPagerAdapter.getIconOf(1))), (tabInfo = new TabInfo("Tab2", HomeFragment.class, args)));
229// this.mapTabInfo.put(tabInfo.tag, tabInfo);
230// SFLPhoneHomeActivity
231// .AddTab(this,
232// this.mTabHost,
233// this.mTabHost.newTabSpec("Tab3").setIndicator(mSectionsPagerAdapter.getPageTitle(2),
234// getResources().getDrawable(mSectionsPagerAdapter.getIconOf(2))), (tabInfo = new TabInfo("Tab3",
235// HistoryFragment.class, args)));
236// this.mapTabInfo.put(tabInfo.tag, tabInfo);
237//
238// mTabHost.setOnTabChangedListener(new OnTabChangeListener() {
239//
240// @Override
241// public void onTabChanged(String tabId) {
242// int pos = mTabHost.getCurrentTab();
243// mViewPager.setCurrentItem(pos);
244//
245// }
246// });
247// }
alision465ceba2013-07-04 09:24:30 -0400248
alisionf57d8a62013-07-02 09:37:12 -0400249 @Override
250 protected void onPostCreate(Bundle savedInstanceState) {
251 super.onPostCreate(savedInstanceState);
252 // Sync the toggle state after onRestoreInstanceState has occurred.
253 mDrawerToggle.syncState();
254 }
alision465ceba2013-07-04 09:24:30 -0400255
alisionf57d8a62013-07-02 09:37:12 -0400256 @Override
257 public void onConfigurationChanged(Configuration newConfig) {
258 super.onConfigurationChanged(newConfig);
259 mDrawerToggle.onConfigurationChanged(newConfig);
260 }
alision3c5c2a92013-05-30 09:50:47 -0400261
alision9f7a6ec2013-05-24 16:26:26 -0400262 @Override
263 protected void onStart() {
264 Log.i(TAG, "onStart");
265 super.onStart();
266 }
alisionf76de3b2013-04-16 15:35:22 -0400267
alision9f7a6ec2013-05-24 16:26:26 -0400268 /* user gets back to the activity, e.g. through task manager */
269 @Override
270 protected void onRestart() {
271 super.onRestart();
272 }
alisionf76de3b2013-04-16 15:35:22 -0400273
alision9f7a6ec2013-05-24 16:26:26 -0400274 /* activity gets back to the foreground and user input */
275 @Override
276 protected void onResume() {
alision58356b72013-06-03 17:13:36 -0400277 super.onResume();
alision84813a12013-05-27 17:40:39 -0400278 IntentFilter intentFilter = new IntentFilter();
279 intentFilter.addAction(CallManagerCallBack.INCOMING_CALL);
280 intentFilter.addAction(CallManagerCallBack.INCOMING_TEXT);
281 intentFilter.addAction(CallManagerCallBack.CALL_STATE_CHANGED);
alision58356b72013-06-03 17:13:36 -0400282 registerReceiver(callReceiver, intentFilter);
alision907bde72013-06-20 14:40:37 -0400283
alision9f7a6ec2013-05-24 16:26:26 -0400284 }
alision907bde72013-06-20 14:40:37 -0400285
alisionbd45a822013-06-06 17:35:35 -0400286 private boolean isClosing = false;
287 private Timer t = new Timer();
alision907bde72013-06-20 14:40:37 -0400288
alisionbd45a822013-06-06 17:35:35 -0400289 @Override
290 public void onBackPressed() {
alision907bde72013-06-20 14:40:37 -0400291
292 if (getActionBar().getCustomView() != null) {
alision2ec64f92013-06-17 17:28:58 -0400293 getActionBar().setDisplayShowCustomEnabled(false);
294 getActionBar().setCustomView(null);
295 // Display all the contacts again
296 getLoaderManager().restartLoader(LoaderConstants.CONTACT_LOADER, null, mContactsFragment);
297 return;
298 }
alision907bde72013-06-20 14:40:37 -0400299
alisionbd45a822013-06-06 17:35:35 -0400300 if (mDrawer.isOpened()) {
alision55c36cb2013-06-14 14:57:38 -0400301 mDrawer.animateClose();
alisionbd45a822013-06-06 17:35:35 -0400302 return;
303 }
alision2ec64f92013-06-17 17:28:58 -0400304
alisionbd45a822013-06-06 17:35:35 -0400305 if (isClosing) {
306 super.onBackPressed();
307 t.cancel();
308 finish();
309 } else {
310
311 t.schedule(new TimerTask() {
312 @Override
313 public void run() {
314 isClosing = false;
315 }
316 }, 3000);
317 Toast.makeText(this, getResources().getString(R.string.close_msg), Toast.LENGTH_SHORT).show();
318 isClosing = true;
319 }
320 }
alisione2a38e12013-04-25 14:20:20 -0400321
alision9f7a6ec2013-05-24 16:26:26 -0400322 /* activity no more in foreground */
323 @Override
324 protected void onPause() {
325 super.onPause();
alision58356b72013-06-03 17:13:36 -0400326 unregisterReceiver(callReceiver);
alision55c36cb2013-06-14 14:57:38 -0400327 try {
328 service.createNotification();
329
330 } catch (RemoteException e) {
331 Log.e(TAG, e.toString());
332 }
alision2cb99562013-05-30 17:02:20 -0400333
alision9f7a6ec2013-05-24 16:26:26 -0400334 }
alisionf76de3b2013-04-16 15:35:22 -0400335
alision9f7a6ec2013-05-24 16:26:26 -0400336 /* activity is no longer visible */
337 @Override
338 protected void onStop() {
339 super.onStop();
alision2cb99562013-05-30 17:02:20 -0400340
alision9f7a6ec2013-05-24 16:26:26 -0400341 }
alisionf76de3b2013-04-16 15:35:22 -0400342
alision9f7a6ec2013-05-24 16:26:26 -0400343 /* activity finishes itself or is being killed by the system */
344 @Override
345 protected void onDestroy() {
346 /* stop the service, if no other bound user, no need to check if it is running */
347 if (mBound) {
348 Log.i(TAG, "onDestroy: Unbinding service...");
alision907bde72013-06-20 14:40:37 -0400349
alision9f7a6ec2013-05-24 16:26:26 -0400350 unbindService(mConnection);
351 mBound = false;
alision2cb99562013-05-30 17:02:20 -0400352
alision9f7a6ec2013-05-24 16:26:26 -0400353 }
alision371b77e2013-04-23 14:51:26 -0400354
alision9f7a6ec2013-05-24 16:26:26 -0400355 super.onDestroy();
356 }
alision73424b62013-04-26 11:49:18 -0400357
alision55c36cb2013-06-14 14:57:38 -0400358 public void launchCallActivity(SipCall infos) {
alision9f7a6ec2013-05-24 16:26:26 -0400359 Log.i(TAG, "Launch Call Activity");
360 Bundle bundle = new Bundle();
alisiondf1dac92013-06-27 17:35:53 -0400361 Conference tmp = new Conference("-1");
alision465ceba2013-07-04 09:24:30 -0400362
alisiondf1dac92013-06-27 17:35:53 -0400363 tmp.getParticipants().add(infos);
alision465ceba2013-07-04 09:24:30 -0400364
alisiondf1dac92013-06-27 17:35:53 -0400365 bundle.putParcelable("conference", tmp);
alision9f7a6ec2013-05-24 16:26:26 -0400366 Intent intent = new Intent().setClass(this, CallActivity.class);
alisiondf1dac92013-06-27 17:35:53 -0400367 intent.putExtra("resuming", false);
alision9f7a6ec2013-05-24 16:26:26 -0400368 intent.putExtras(bundle);
369 startActivityForResult(intent, REQUEST_CODE_CALL);
alision465ceba2013-07-04 09:24:30 -0400370 overridePendingTransition(R.anim.slide_down, R.anim.slide_up);
alision9f7a6ec2013-05-24 16:26:26 -0400371 }
alisionf76de3b2013-04-16 15:35:22 -0400372
alision9f7a6ec2013-05-24 16:26:26 -0400373 /** Defines callbacks for service binding, passed to bindService() */
374 private ServiceConnection mConnection = new ServiceConnection() {
alision371b77e2013-04-23 14:51:26 -0400375
alision9f7a6ec2013-05-24 16:26:26 -0400376 @Override
377 public void onServiceConnected(ComponentName className, IBinder binder) {
378 service = ISipService.Stub.asInterface(binder);
alisione2a38e12013-04-25 14:20:20 -0400379
alision2cb99562013-05-30 17:02:20 -0400380 try {
alision58356b72013-06-03 17:13:36 -0400381
alision907bde72013-06-20 14:40:37 -0400382 fMenu = new MenuFragment();
383 getFragmentManager().beginTransaction().replace(R.id.left_drawer, fMenu).commit();
alision58356b72013-06-03 17:13:36 -0400384 mSectionsPagerAdapter = new SectionsPagerAdapter(SFLPhoneHomeActivity.this, getFragmentManager());
Alexandre Lisionf41a3a82013-09-05 17:15:15 -0400385
386 final PagerTabStrip strip = PagerTabStrip.class.cast(mViewPager.findViewById(R.id.pts_main));
387 strip.setDrawFullUnderline(false);
388 strip.setTabIndicatorColor(getResources().getColor(R.color.holo_blue_dark));
389 strip.setBackgroundColor(getResources().getColor(R.color.lighter_gray));
390 strip.setNonPrimaryAlpha(0.5f);
391 strip.setTextSpacing(25);
392 strip.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 16);
393
394
395// initialiseTabHost(null);
alisiondf1dac92013-06-27 17:35:53 -0400396 mViewPager.setOffscreenPageLimit(2);
alision58356b72013-06-03 17:13:36 -0400397 mViewPager.setAdapter(mSectionsPagerAdapter);
Alexandre Lisionf41a3a82013-09-05 17:15:15 -0400398// mTabHost.setCurrentTab(1);
alision2cb99562013-05-30 17:02:20 -0400399 service.destroyNotification();
alision58356b72013-06-03 17:13:36 -0400400 // mAdapter = new AccountSelectionAdapter(SFLPhoneHomeActivity.this, service, new ArrayList<Account>());
401 // spinnerAccounts.setAdapter(mAdapter);
alision2cb99562013-05-30 17:02:20 -0400402 } catch (RemoteException e) {
403 Log.e(TAG, e.toString());
404 }
alision9f7a6ec2013-05-24 16:26:26 -0400405 mBound = true;
alision9f7a6ec2013-05-24 16:26:26 -0400406 Log.d(TAG, "Service connected service=" + service);
alision371b77e2013-04-23 14:51:26 -0400407
alision9f7a6ec2013-05-24 16:26:26 -0400408 }
alision5f899632013-04-22 17:26:56 -0400409
alision9f7a6ec2013-05-24 16:26:26 -0400410 @Override
411 public void onServiceDisconnected(ComponentName arg0) {
alision5f899632013-04-22 17:26:56 -0400412
alision9f7a6ec2013-05-24 16:26:26 -0400413 mBound = false;
414 Log.d(TAG, "Service disconnected service=" + service);
415 }
416 };
alision5f899632013-04-22 17:26:56 -0400417
alision9f7a6ec2013-05-24 16:26:26 -0400418 @Override
419 public boolean onOptionsItemSelected(MenuItem item) {
420 Log.i(TAG, "onOptionsItemSelected " + item.getItemId());
alision5f899632013-04-22 17:26:56 -0400421
alision9f7a6ec2013-05-24 16:26:26 -0400422 if (mDrawerToggle.onOptionsItemSelected(item)) {
423 return true;
424 }
alision5f899632013-04-22 17:26:56 -0400425
alision9f7a6ec2013-05-24 16:26:26 -0400426 return super.onOptionsItemSelected(item);
427 }
alisionf76de3b2013-04-16 15:35:22 -0400428
alision9f7a6ec2013-05-24 16:26:26 -0400429 @Override
430 public void onActivityResult(int requestCode, int resultCode, Intent data) {
431 super.onActivityResult(requestCode, resultCode, data);
alision84813a12013-05-27 17:40:39 -0400432
433 switch (requestCode) {
alision9f7a6ec2013-05-24 16:26:26 -0400434 case REQUEST_CODE_PREFERENCES:
alision907bde72013-06-20 14:40:37 -0400435 Log.w(TAG, "In Activity");
436 fMenu.updateAllAccounts();
alision9f7a6ec2013-05-24 16:26:26 -0400437 break;
438 case REQUEST_CODE_CALL:
alision2cb99562013-05-30 17:02:20 -0400439 Log.w(TAG, "Result out of CallActivity");
Alexandre Lision4a56d432013-07-19 11:37:53 -0400440// if (mSectionsPagerAdapter != null && mSectionsPagerAdapter.getItem(2) != null)
441// getLoaderManager().restartLoader(LoaderConstants.HISTORY_LOADER, null, (HistoryFragment) mSectionsPagerAdapter.getItem(2));
alision9f7a6ec2013-05-24 16:26:26 -0400442 break;
443 }
alisionf76de3b2013-04-16 15:35:22 -0400444
alision9f7a6ec2013-05-24 16:26:26 -0400445 }
alisionf76de3b2013-04-16 15:35:22 -0400446
alision9f7a6ec2013-05-24 16:26:26 -0400447 @Override
alision9f7a6ec2013-05-24 16:26:26 -0400448 public ISipService getService() {
449 return service;
450 }
alisionf76de3b2013-04-16 15:35:22 -0400451
alision84813a12013-05-27 17:40:39 -0400452 /**
453 * Interface implemented to handle incoming events
454 */
alision9f7a6ec2013-05-24 16:26:26 -0400455 @Override
alision84813a12013-05-27 17:40:39 -0400456 public void incomingCall(Intent call) {
457 Toast.makeText(this, "New Call incoming", Toast.LENGTH_LONG).show();
alisionfde875f2013-05-28 17:01:54 -0400458 SipCall infos = call.getParcelableExtra("newcall");
alision84813a12013-05-27 17:40:39 -0400459
alision58356b72013-06-03 17:13:36 -0400460 // mCallElementList.addCall(infos);
alisionfde875f2013-05-28 17:01:54 -0400461
alision55c36cb2013-06-14 14:57:38 -0400462 launchCallActivity(infos);
alision84813a12013-05-27 17:40:39 -0400463
464 }
465
466 @Override
467 public void callStateChanged(Intent callState) {
468 Bundle b = callState.getBundleExtra("com.savoirfairelinux.sflphone.service.newstate");
469 String cID = b.getString("CallID");
470 String state = b.getString("State");
471 Log.i(TAG, "callStateChanged" + cID + " " + state);
alision58356b72013-06-03 17:13:36 -0400472 // mCallElementList.updateCall(cID, state);
alision84813a12013-05-27 17:40:39 -0400473
474 }
475
476 @Override
477 public void incomingText(Intent msg) {
478 Bundle b = msg.getBundleExtra("com.savoirfairelinux.sflphone.service.newtext");
479 b.getString("CallID");
480 String from = b.getString("From");
481 String mess = b.getString("Msg");
482 Toast.makeText(getApplicationContext(), "text from " + from + " : " + mess, Toast.LENGTH_LONG).show();
483 }
484
485 @Override
alision55c36cb2013-06-14 14:57:38 -0400486 public void onContactSelected(final CallContact c) {
alisionfde875f2013-05-28 17:01:54 -0400487
alision55c36cb2013-06-14 14:57:38 -0400488 Thread launcher = new Thread(new Runnable() {
alision907bde72013-06-20 14:40:37 -0400489
alision55c36cb2013-06-14 14:57:38 -0400490 final String[] CONTACTS_PHONES_PROJECTION = new String[] { Phone.NUMBER, Phone.TYPE };
491 final String[] CONTACTS_SIP_PROJECTION = new String[] { SipAddress.SIP_ADDRESS, SipAddress.TYPE };
alision907bde72013-06-20 14:40:37 -0400492
alision55c36cb2013-06-14 14:57:38 -0400493 @Override
494 public void run() {
495 SipCall.SipCallBuilder callBuilder = SipCall.SipCallBuilder.getInstance();
496 try {
alision907bde72013-06-20 14:40:37 -0400497 callBuilder.startCallCreation().setAccountID(service.getAccountList().get(1).toString())
498 .setCallType(SipCall.state.CALL_TYPE_OUTGOING);
499 Cursor cPhones = getContentResolver().query(Phone.CONTENT_URI, CONTACTS_PHONES_PROJECTION, Phone.CONTACT_ID + " =" + c.getId(),
500 null, null);
alision55c36cb2013-06-14 14:57:38 -0400501
alision907bde72013-06-20 14:40:37 -0400502 while (cPhones.moveToNext()) {
503 c.addPhoneNumber(cPhones.getString(cPhones.getColumnIndex(Phone.NUMBER)), cPhones.getInt(cPhones.getColumnIndex(Phone.TYPE)));
504 }
505 cPhones.close();
506
507 Cursor cSip = getContentResolver().query(Phone.CONTENT_URI, CONTACTS_SIP_PROJECTION, Phone.CONTACT_ID + "=" + c.getId(), null,
508 null);
509
510 while (cSip.moveToNext()) {
511 c.addSipNumber(cSip.getString(cSip.getColumnIndex(SipAddress.SIP_ADDRESS)), cSip.getInt(cSip.getColumnIndex(SipAddress.TYPE)));
512 }
513 cSip.close();
514 callBuilder.setContact(c);
alision55c36cb2013-06-14 14:57:38 -0400515 launchCallActivity(callBuilder.build());
516 } catch (RemoteException e1) {
517 Log.e(TAG, e1.toString());
518 } catch (Exception e) {
519 Log.e(TAG, e.toString());
520 }
alision907bde72013-06-20 14:40:37 -0400521
alision55c36cb2013-06-14 14:57:38 -0400522 }
523 });
524 launcher.start();
525 mDrawer.close();
alision84813a12013-05-27 17:40:39 -0400526
527 }
528
529 @Override
alision907bde72013-06-20 14:40:37 -0400530 public void onCallDialed(String to) {
alision84813a12013-05-27 17:40:39 -0400531
alisiondf1dac92013-06-27 17:35:53 -0400532 if (fMenu.getSelectedAccount() == null) {
533 Toast.makeText(this, "No Account Selected", Toast.LENGTH_SHORT).show();
534 return;
535 }
536
alisionfde875f2013-05-28 17:01:54 -0400537 SipCall.SipCallBuilder callBuilder = SipCall.SipCallBuilder.getInstance();
alision907bde72013-06-20 14:40:37 -0400538 callBuilder.startCallCreation().setAccountID(fMenu.getSelectedAccount().getAccountID()).setCallType(SipCall.state.CALL_TYPE_OUTGOING);
539 callBuilder.setContact(CallContact.ContactBuilder.buildUnknownContact(to));
alision84813a12013-05-27 17:40:39 -0400540
alisionfde875f2013-05-28 17:01:54 -0400541 try {
alision55c36cb2013-06-14 14:57:38 -0400542 launchCallActivity(callBuilder.build());
alisionfde875f2013-05-28 17:01:54 -0400543 } catch (Exception e) {
544 Log.e(TAG, e.toString());
545 }
alision84813a12013-05-27 17:40:39 -0400546
alision9f7a6ec2013-05-24 16:26:26 -0400547 }
alision371b77e2013-04-23 14:51:26 -0400548
alisiond45da712013-05-30 09:18:49 -0400549 @Override
550 public void onContactDragged() {
551
552 mDrawer.close();
Alexandre Lisionf41a3a82013-09-05 17:15:15 -0400553// mTabHost.setCurrentTab(1);
alisiond45da712013-05-30 09:18:49 -0400554
555 }
556
557 private HashMap<String, TabInfo> mapTabInfo = new HashMap<String, SFLPhoneHomeActivity.TabInfo>();
558
559 /**
560 * A simple factory that returns dummy views to the Tabhost
561 *
562 * @author mwho
563 */
564 class TabFactory implements TabContentFactory {
565
566 private final Context mContext;
567
568 /**
569 * @param context
570 */
571 public TabFactory(Context context) {
572 mContext = context;
573 }
574
575 /**
576 * (non-Javadoc)
577 *
578 * @see android.widget.TabHost.TabContentFactory#createTabContent(java.lang.String)
579 */
580 public View createTabContent(String tag) {
581 View v = new View(mContext);
582 v.setMinimumWidth(0);
583 v.setMinimumHeight(0);
584 return v;
585 }
586
587 }
588
589 /**
590 *
591 * @author mwho Maintains extrinsic info of a tab's construct
592 */
593 private class TabInfo {
594 private String tag;
alisiond45da712013-05-30 09:18:49 -0400595
596 TabInfo(String tag, Class<?> clazz, Bundle args) {
597 this.tag = tag;
alisiond45da712013-05-30 09:18:49 -0400598 }
599
600 }
601
602 private static void AddTab(SFLPhoneHomeActivity activity, TabHost tabHost, TabHost.TabSpec tabSpec, TabInfo tabInfo) {
603 // Attach a Tab view factory to the spec
604 tabSpec.setContent(activity.new TabFactory(activity));
605 tabHost.addTab(tabSpec);
606 }
607
alision58356b72013-06-03 17:13:36 -0400608 @Override
609 public void openDrawer() {
alision55c36cb2013-06-14 14:57:38 -0400610 mDrawer.animateOpen();
alision58356b72013-06-03 17:13:36 -0400611 }
612
alision806e18e2013-06-21 15:30:17 -0400613 @Override
614 public void confCreated(Intent intent) {
615 // TODO Auto-generated method stub
alisiondf1dac92013-06-27 17:35:53 -0400616
alision806e18e2013-06-21 15:30:17 -0400617 }
618
619 @Override
620 public void confRemoved(Intent intent) {
621 // TODO Auto-generated method stub
alisiondf1dac92013-06-27 17:35:53 -0400622
alision806e18e2013-06-21 15:30:17 -0400623 }
624
625 @Override
626 public void confChanged(Intent intent) {
627 // TODO Auto-generated method stub
alisiondf1dac92013-06-27 17:35:53 -0400628
629 }
630
631 @Override
632 public void recordingChanged(Intent intent) {
633 // TODO Auto-generated method stub
634
635 }
636
637 @Override
638 public void resumeCallActivity() {
639 Intent intent = new Intent().setClass(this, CallActivity.class);
640 intent.putExtra("resuming", true);
641 startActivityForResult(intent, REQUEST_CODE_CALL);
alision806e18e2013-06-21 15:30:17 -0400642 }
643
alisionf76de3b2013-04-16 15:35:22 -0400644}