blob: bae5c321f940984428a0995efc18840c2660aad8 [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
alisiond45da712013-05-30 09:18:49 -040034import java.util.HashMap;
alision84813a12013-05-27 17:40:39 -040035
alisionf76de3b2013-04-16 15:35:22 -040036import android.app.Activity;
37import android.app.Fragment;
alisionf76de3b2013-04-16 15:35:22 -040038import android.content.ComponentName;
39import android.content.Context;
40import android.content.Intent;
alision84813a12013-05-27 17:40:39 -040041import android.content.IntentFilter;
alisionf76de3b2013-04-16 15:35:22 -040042import android.content.ServiceConnection;
43import android.os.Bundle;
44import android.os.IBinder;
alision5f899632013-04-22 17:26:56 -040045import android.os.RemoteException;
alision9f7a6ec2013-05-24 16:26:26 -040046import android.support.v4.app.ActionBarDrawerToggle;
47import android.support.v4.view.GravityCompat;
alisionf76de3b2013-04-16 15:35:22 -040048import android.support.v4.view.ViewPager;
alision9f7a6ec2013-05-24 16:26:26 -040049import android.support.v4.widget.DrawerLayout;
alisionf76de3b2013-04-16 15:35:22 -040050import android.util.Log;
alision9f7a6ec2013-05-24 16:26:26 -040051import android.view.MenuItem;
52import android.view.View;
alision7297bdb2013-05-21 11:56:55 -040053import android.widget.RelativeLayout;
alisiond45da712013-05-30 09:18:49 -040054import android.widget.TabHost;
alision3c5c2a92013-05-30 09:50:47 -040055import android.widget.TabHost.OnTabChangeListener;
alisiond45da712013-05-30 09:18:49 -040056import android.widget.TabHost.TabContentFactory;
alision04a00182013-05-10 17:05:29 -040057import android.widget.Toast;
alisionf76de3b2013-04-16 15:35:22 -040058
59import com.savoirfairelinux.sflphone.R;
alision58356b72013-06-03 17:13:36 -040060import com.savoirfairelinux.sflphone.adapters.AccountSelectionAdapter;
alision9f7a6ec2013-05-24 16:26:26 -040061import com.savoirfairelinux.sflphone.adapters.SectionsPagerAdapter;
alision58356b72013-06-03 17:13:36 -040062import com.savoirfairelinux.sflphone.client.receiver.AccountsReceiver;
alision84813a12013-05-27 17:40:39 -040063import com.savoirfairelinux.sflphone.client.receiver.CallReceiver;
alisionf76de3b2013-04-16 15:35:22 -040064import com.savoirfairelinux.sflphone.fragments.CallElementListFragment;
65import com.savoirfairelinux.sflphone.fragments.ContactListFragment;
alision7297bdb2013-05-21 11:56:55 -040066import com.savoirfairelinux.sflphone.fragments.DialingFragment;
alisiond9e29442013-04-17 16:10:18 -040067import com.savoirfairelinux.sflphone.fragments.HistoryFragment;
alision9f7a6ec2013-05-24 16:26:26 -040068import com.savoirfairelinux.sflphone.fragments.MenuFragment;
alision58356b72013-06-03 17:13:36 -040069import com.savoirfairelinux.sflphone.interfaces.AccountsInterface;
alision84813a12013-05-27 17:40:39 -040070import com.savoirfairelinux.sflphone.interfaces.CallInterface;
71import com.savoirfairelinux.sflphone.model.CallContact;
alisionf76de3b2013-04-16 15:35:22 -040072import com.savoirfairelinux.sflphone.model.SipCall;
alision84813a12013-05-27 17:40:39 -040073import com.savoirfairelinux.sflphone.service.CallManagerCallBack;
alision58356b72013-06-03 17:13:36 -040074import com.savoirfairelinux.sflphone.service.ConfigurationManagerCallback;
alisionf76de3b2013-04-16 15:35:22 -040075import com.savoirfairelinux.sflphone.service.ISipService;
76import com.savoirfairelinux.sflphone.service.SipService;
alision7297bdb2013-05-21 11:56:55 -040077import com.savoirfairelinux.sflphone.views.CustomSlidingDrawer;
alisionf76de3b2013-04-16 15:35:22 -040078
alision2cb99562013-05-30 17:02:20 -040079public class SFLPhoneHomeActivity extends Activity implements DialingFragment.Callbacks, ContactListFragment.Callbacks,
alision58356b72013-06-03 17:13:36 -040080 CallElementListFragment.Callbacks, HistoryFragment.Callbacks, CallInterface, AccountsInterface {
alisionfde875f2013-05-28 17:01:54 -040081
alision9f7a6ec2013-05-24 16:26:26 -040082 SectionsPagerAdapter mSectionsPagerAdapter = null;
alision84813a12013-05-27 17:40:39 -040083 static final String TAG = "SFLPhoneHomeActivity";
alisionf76de3b2013-04-16 15:35:22 -040084
alision2cb99562013-05-30 17:02:20 -040085 /**
86 * Fragments used
87 */
alision9f7a6ec2013-05-24 16:26:26 -040088 private ContactListFragment mContactsFragment = null;
alision58356b72013-06-03 17:13:36 -040089 // private DialingFragment mDialingFragment = null;
90 // private CallElementListFragment mCallElementList = null;
91 // private HistoryFragment mHistorySectionFragment = null;
alision2cb99562013-05-30 17:02:20 -040092 private Fragment fMenu;
alisionf76de3b2013-04-16 15:35:22 -040093
alision9f7a6ec2013-05-24 16:26:26 -040094 private boolean mBound = false;
95 private ISipService service;
alisionf76de3b2013-04-16 15:35:22 -040096
alision9f7a6ec2013-05-24 16:26:26 -040097 private CharSequence mDrawerTitle;
98 private CharSequence mTitle;
alisionf76de3b2013-04-16 15:35:22 -040099
alision58356b72013-06-03 17:13:36 -0400100 AccountSelectionAdapter mAdapter;
101// private Spinner spinnerAccounts;
102
alision2cb99562013-05-30 17:02:20 -0400103 public static final int REQUEST_CODE_PREFERENCES = 1;
alision9f7a6ec2013-05-24 16:26:26 -0400104 private static final int REQUEST_CODE_CALL = 2;
alisionf76de3b2013-04-16 15:35:22 -0400105
alision58356b72013-06-03 17:13:36 -0400106// private static final int ACTION_BAR_TAB_DIALING = 0;
107// private static final int ACTION_BAR_TAB_CALL = 1;
108// private static final int ACTION_BAR_TAB_HISTORY = 2;
alisionf76de3b2013-04-16 15:35:22 -0400109
alision0b553832013-05-30 09:31:06 -0400110 RelativeLayout mSliderButton;
alision9f7a6ec2013-05-24 16:26:26 -0400111 CustomSlidingDrawer mDrawer;
alision9f7a6ec2013-05-24 16:26:26 -0400112 private DrawerLayout mDrawerLayout;
alision9f7a6ec2013-05-24 16:26:26 -0400113 private ActionBarDrawerToggle mDrawerToggle;
114 /**
115 * The {@link ViewPager} that will host the section contents.
116 */
117 ViewPager mViewPager;
alisionf76de3b2013-04-16 15:35:22 -0400118
alision58356b72013-06-03 17:13:36 -0400119 CallReceiver callReceiver;
120 AccountsReceiver accountReceiver;
alision84813a12013-05-27 17:40:39 -0400121
alision3c5c2a92013-05-30 09:50:47 -0400122 private TabHost mTabHost;
alisionf76de3b2013-04-16 15:35:22 -0400123
alision9f7a6ec2013-05-24 16:26:26 -0400124 // public SFLPhoneHome extends Activity implements ActionBar.TabListener, OnClickListener
125
126 /* called before activity is killed, e.g. rotation */
127 @Override
128 protected void onSaveInstanceState(Bundle bundle) {
129 super.onSaveInstanceState(bundle);
130 for (int i = 0; i < mSectionsPagerAdapter.getCount(); i++) {
131 try {
132 getFragmentManager().putFragment(bundle, mSectionsPagerAdapter.getClassName(i), mSectionsPagerAdapter.getItem(i));
133 } catch (IllegalStateException e) {
134 Log.e(TAG, "fragment=" + mSectionsPagerAdapter.getItem(i));
135 }
136 }
137
138 getFragmentManager().putFragment(bundle, "ContactsListFragment", mContactsFragment);
139 Log.w(TAG, "onSaveInstanceState()");
140 }
141
142 @Override
143 public void onCreate(Bundle savedInstanceState) {
144 super.onCreate(savedInstanceState);
145
alision58356b72013-06-03 17:13:36 -0400146 callReceiver = new CallReceiver(this);
147 accountReceiver = new AccountsReceiver(this);
alision2cb99562013-05-30 17:02:20 -0400148 // String libraryPath = getApplicationInfo().dataDir + "/lib";
149 // Log.i(TAG, libraryPath);
alision9f7a6ec2013-05-24 16:26:26 -0400150
alision58356b72013-06-03 17:13:36 -0400151 setContentView(R.layout.activity_sflphone_home);
152
alision9f7a6ec2013-05-24 16:26:26 -0400153 // Bind to LocalService
154 if (!mBound) {
155 Log.i(TAG, "onStart: Binding service...");
156 Intent intent = new Intent(this, SipService.class);
157 bindService(intent, mConnection, Context.BIND_AUTO_CREATE);
158 }
159
alision9f7a6ec2013-05-24 16:26:26 -0400160 /* getFragment(Bundle, String) */
alision58356b72013-06-03 17:13:36 -0400161 // if (savedInstanceState != null) {
162 // Log.w(TAG, "Activity restarted, recreating PagerAdapter...");
163 // /* getFragment (Bundle bundle, String key) */
164 // mDialingFragment = (DialingFragment) getFragmentManager().getFragment(savedInstanceState,
165 // mSectionsPagerAdapter.getClassName(ACTION_BAR_TAB_DIALING));
166 // mCallElementList = (CallElementListFragment) getFragmentManager().getFragment(savedInstanceState,
167 // mSectionsPagerAdapter.getClassName(ACTION_BAR_TAB_CALL));
168 // mHistorySectionFragment = (HistoryFragment) getFragmentManager().getFragment(savedInstanceState,
169 // mSectionsPagerAdapter.getClassName(ACTION_BAR_TAB_HISTORY));
170 // }
alision9f7a6ec2013-05-24 16:26:26 -0400171
alision58356b72013-06-03 17:13:36 -0400172 // if (mDialingFragment == null) {
173 // mDialingFragment = new DialingFragment();
174 // Log.w(TAG, "Recreated mDialingFragment=" + mDialingFragment);
175 // }
176 //
alision9f7a6ec2013-05-24 16:26:26 -0400177 if (mContactsFragment == null) {
178 mContactsFragment = new ContactListFragment();
179 Log.w(TAG, "Recreated mContactListFragment=" + mContactsFragment);
180 getFragmentManager().beginTransaction().replace(R.id.contacts_frame, mContactsFragment).commit();
181 }
alision58356b72013-06-03 17:13:36 -0400182 // if (mCallElementList == null) {
183 // mCallElementList = new CallElementListFragment();
184 // Log.w(TAG, "Recreated mCallElementList=" + mCallElementList);
185 // }
186 // if (mHistorySectionFragment == null) {
187 // mHistorySectionFragment = new HistoryFragment();
188 // Log.w(TAG, "Recreated mHistorySectionFragment=" + mHistorySectionFragment);
189 // }
alision9f7a6ec2013-05-24 16:26:26 -0400190
191 mDrawer = (CustomSlidingDrawer) findViewById(R.id.custom_sliding_drawer);
alision7297bdb2013-05-21 11:56:55 -0400192
alision84813a12013-05-27 17:40:39 -0400193 mContactsFragment.setHandleView((RelativeLayout) findViewById(R.id.slider_button));
alision7297bdb2013-05-21 11:56:55 -0400194
195 mDrawer.setmTrackHandle(findViewById(R.id.handle_title));
alisionf76de3b2013-04-16 15:35:22 -0400196
alision9f7a6ec2013-05-24 16:26:26 -0400197 // Set up the ViewPager with the sections adapter.
198 mViewPager = (ViewPager) findViewById(R.id.pager);
alision58356b72013-06-03 17:13:36 -0400199
alisionf76de3b2013-04-16 15:35:22 -0400200
alision9f7a6ec2013-05-24 16:26:26 -0400201 mTitle = mDrawerTitle = getTitle();
202 mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
alisionf76de3b2013-04-16 15:35:22 -0400203
alision0b553832013-05-30 09:31:06 -0400204 // set a custom shadow that overlays the main content when the drawer opens
alision9f7a6ec2013-05-24 16:26:26 -0400205 mDrawerLayout.setDrawerShadow(R.drawable.drawer_shadow, GravityCompat.START);
alisionf76de3b2013-04-16 15:35:22 -0400206
alision9f7a6ec2013-05-24 16:26:26 -0400207 getActionBar().setDisplayHomeAsUpEnabled(true);
208 getActionBar().setHomeButtonEnabled(true);
alisionf76de3b2013-04-16 15:35:22 -0400209
alision9f7a6ec2013-05-24 16:26:26 -0400210 mDrawerToggle = new ActionBarDrawerToggle(this, /* host Activity */
211 mDrawerLayout, /* DrawerLayout object */
212 R.drawable.ic_drawer, /* nav drawer image to replace 'Up' caret */
213 R.string.drawer_open, /* "open drawer" description for accessibility */
214 R.string.drawer_close /* "close drawer" description for accessibility */
215 ) {
alision0b553832013-05-30 09:31:06 -0400216 @Override
alision9f7a6ec2013-05-24 16:26:26 -0400217 public void onDrawerClosed(View view) {
218 getActionBar().setTitle(mTitle);
219 invalidateOptionsMenu(); // creates call to onPrepareOptionsMenu()
220 }
alisionf76de3b2013-04-16 15:35:22 -0400221
alision0b553832013-05-30 09:31:06 -0400222 @Override
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
alision3c5c2a92013-05-30 09:50:47 -0400229 mTabHost = (TabHost) findViewById(android.R.id.tabhost);
alision9f7a6ec2013-05-24 16:26:26 -0400230 mDrawerLayout.setDrawerListener(mDrawerToggle);
alisionf76de3b2013-04-16 15:35:22 -0400231
alision9f7a6ec2013-05-24 16:26:26 -0400232 mViewPager.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
233 @Override
234 public void onPageSelected(int position) {
alision3c5c2a92013-05-30 09:50:47 -0400235 mTabHost.setCurrentTab(position);
alision9f7a6ec2013-05-24 16:26:26 -0400236 }
237 });
alisionf76de3b2013-04-16 15:35:22 -0400238
alision58356b72013-06-03 17:13:36 -0400239 // getActionBar().setCustomView(R.layout.actionbar);
240 // spinnerAccounts = (Spinner) getActionBar().getCustomView().findViewById(R.id.account_selection);
241 // spinnerAccounts.setOnItemSelectedListener(new OnItemSelectedListener() {
242 //
243 // @Override
244 // public void onItemSelected(AdapterView<?> arg0, View view, int pos, long arg3) {
245 // // public void onClick(DialogInterface dialog, int which) {
246 //
247 // Log.i(TAG, "Selected Account: " + mAdapter.getItem(pos));
248 // if (null != view) {
249 // ((RadioButton) view.findViewById(R.id.account_checked)).toggle();
250 // }
251 // mAdapter.setSelectedAccount(pos);
252 // // accountSelectedNotifyAccountList(mAdapter.getItem(pos));
253 // // setSelection(cursor.getPosition(),true);
254 //
255 // }
256 //
257 // @Override
258 // public void onNothingSelected(AdapterView<?> arg0) {
259 // // TODO Auto-generated method stub
260 //
261 // }
262 // });
263 // ((TextView) getActionBar().getCustomView().findViewById(R.id.activity_title)).setText(getTitle());
264 // getActionBar().setDisplayShowCustomEnabled(true);
265
266
alisionf76de3b2013-04-16 15:35:22 -0400267
alision9f7a6ec2013-05-24 16:26:26 -0400268 fMenu = new MenuFragment();
269 getFragmentManager().beginTransaction().replace(R.id.left_drawer, fMenu).commit();
270 }
alisionf76de3b2013-04-16 15:35:22 -0400271
alision3c5c2a92013-05-30 09:50:47 -0400272 private void initialiseTabHost(Bundle args) {
273
alision3c5c2a92013-05-30 09:50:47 -0400274 mTabHost.setup();
275 TabInfo tabInfo = null;
alision2cb99562013-05-30 17:02:20 -0400276 SFLPhoneHomeActivity
277 .AddTab(this,
278 this.mTabHost,
279 this.mTabHost.newTabSpec("Tab1").setIndicator(mSectionsPagerAdapter.getPageTitle(0),
280 getResources().getDrawable(mSectionsPagerAdapter.getIconOf(0))), (tabInfo = new TabInfo("Tab1",
281 DialingFragment.class, args)));
alision3c5c2a92013-05-30 09:50:47 -0400282 this.mapTabInfo.put(tabInfo.tag, tabInfo);
alision2cb99562013-05-30 17:02:20 -0400283 SFLPhoneHomeActivity.AddTab(
284 this,
285 this.mTabHost,
286 this.mTabHost.newTabSpec("Tab2").setIndicator(mSectionsPagerAdapter.getPageTitle(1),
287 getResources().getDrawable(mSectionsPagerAdapter.getIconOf(1))), (tabInfo = new TabInfo("Tab2",
288 CallElementListFragment.class, args)));
alision3c5c2a92013-05-30 09:50:47 -0400289 this.mapTabInfo.put(tabInfo.tag, tabInfo);
alision2cb99562013-05-30 17:02:20 -0400290 SFLPhoneHomeActivity
291 .AddTab(this,
292 this.mTabHost,
293 this.mTabHost.newTabSpec("Tab3").setIndicator(mSectionsPagerAdapter.getPageTitle(2),
294 getResources().getDrawable(mSectionsPagerAdapter.getIconOf(2))), (tabInfo = new TabInfo("Tab3",
295 HistoryFragment.class, args)));
alision3c5c2a92013-05-30 09:50:47 -0400296 this.mapTabInfo.put(tabInfo.tag, tabInfo);
alision58356b72013-06-03 17:13:36 -0400297
298
alision3c5c2a92013-05-30 09:50:47 -0400299
300 mTabHost.setOnTabChangedListener(new OnTabChangeListener() {
301
302 @Override
303 public void onTabChanged(String tabId) {
304 int pos = mTabHost.getCurrentTab();
305 mViewPager.setCurrentItem(pos);
306
307 }
308 });
309 }
310
alision9f7a6ec2013-05-24 16:26:26 -0400311 @Override
312 protected void onStart() {
313 Log.i(TAG, "onStart");
314 super.onStart();
315 }
alisionf76de3b2013-04-16 15:35:22 -0400316
alision9f7a6ec2013-05-24 16:26:26 -0400317 /* user gets back to the activity, e.g. through task manager */
318 @Override
319 protected void onRestart() {
320 super.onRestart();
321 }
alisionf76de3b2013-04-16 15:35:22 -0400322
alision9f7a6ec2013-05-24 16:26:26 -0400323 /* activity gets back to the foreground and user input */
324 @Override
325 protected void onResume() {
alision58356b72013-06-03 17:13:36 -0400326 super.onResume();
alision84813a12013-05-27 17:40:39 -0400327 IntentFilter intentFilter = new IntentFilter();
328 intentFilter.addAction(CallManagerCallBack.INCOMING_CALL);
329 intentFilter.addAction(CallManagerCallBack.INCOMING_TEXT);
330 intentFilter.addAction(CallManagerCallBack.CALL_STATE_CHANGED);
alision58356b72013-06-03 17:13:36 -0400331 registerReceiver(callReceiver, intentFilter);
332
333
334 IntentFilter intentFilter2 = new IntentFilter();
335 intentFilter2.addAction(ConfigurationManagerCallback.ACCOUNT_STATE_CHANGED);
336 intentFilter2.addAction(ConfigurationManagerCallback.ACCOUNTS_CHANGED);
337 registerReceiver(accountReceiver, intentFilter2);
338
alision9f7a6ec2013-05-24 16:26:26 -0400339 }
alisione2a38e12013-04-25 14:20:20 -0400340
alision9f7a6ec2013-05-24 16:26:26 -0400341 /* activity no more in foreground */
342 @Override
343 protected void onPause() {
344 super.onPause();
alision58356b72013-06-03 17:13:36 -0400345 unregisterReceiver(callReceiver);
346 unregisterReceiver(accountReceiver);
alision2cb99562013-05-30 17:02:20 -0400347
alision9f7a6ec2013-05-24 16:26:26 -0400348 }
alisionf76de3b2013-04-16 15:35:22 -0400349
alision9f7a6ec2013-05-24 16:26:26 -0400350 /* activity is no longer visible */
351 @Override
352 protected void onStop() {
353 super.onStop();
alision2cb99562013-05-30 17:02:20 -0400354
alision9f7a6ec2013-05-24 16:26:26 -0400355 }
alisionf76de3b2013-04-16 15:35:22 -0400356
alision9f7a6ec2013-05-24 16:26:26 -0400357 /* activity finishes itself or is being killed by the system */
358 @Override
359 protected void onDestroy() {
360 /* stop the service, if no other bound user, no need to check if it is running */
361 if (mBound) {
362 Log.i(TAG, "onDestroy: Unbinding service...");
alision2cb99562013-05-30 17:02:20 -0400363 try {
364 service.createNotification();
365
366 } catch (RemoteException e) {
367 Log.e(TAG, e.toString());
368 }
alision9f7a6ec2013-05-24 16:26:26 -0400369 unbindService(mConnection);
370 mBound = false;
alision2cb99562013-05-30 17:02:20 -0400371
alision9f7a6ec2013-05-24 16:26:26 -0400372 }
alision371b77e2013-04-23 14:51:26 -0400373
alision9f7a6ec2013-05-24 16:26:26 -0400374 super.onDestroy();
375 }
alision73424b62013-04-26 11:49:18 -0400376
alisionfde875f2013-05-28 17:01:54 -0400377 public void launchCallActivity(SipCall infos, String action) {
alision9f7a6ec2013-05-24 16:26:26 -0400378 Log.i(TAG, "Launch Call Activity");
379 Bundle bundle = new Bundle();
alision84813a12013-05-27 17:40:39 -0400380 bundle.putString("action", action);
alision9f7a6ec2013-05-24 16:26:26 -0400381 bundle.putParcelable("CallInfo", infos);
382 Intent intent = new Intent().setClass(this, CallActivity.class);
383 intent.putExtras(bundle);
384 startActivityForResult(intent, REQUEST_CODE_CALL);
385 }
alisionf76de3b2013-04-16 15:35:22 -0400386
alision9f7a6ec2013-05-24 16:26:26 -0400387 /** Defines callbacks for service binding, passed to bindService() */
388 private ServiceConnection mConnection = new ServiceConnection() {
alision371b77e2013-04-23 14:51:26 -0400389
alision9f7a6ec2013-05-24 16:26:26 -0400390 @Override
391 public void onServiceConnected(ComponentName className, IBinder binder) {
392 service = ISipService.Stub.asInterface(binder);
alisione2a38e12013-04-25 14:20:20 -0400393
alision2cb99562013-05-30 17:02:20 -0400394 try {
alision58356b72013-06-03 17:13:36 -0400395
396 mSectionsPagerAdapter = new SectionsPagerAdapter(SFLPhoneHomeActivity.this, getFragmentManager());
397 initialiseTabHost(null);
398 mViewPager.setAdapter(mSectionsPagerAdapter);
399 mTabHost.setCurrentTab(1);
alision2cb99562013-05-30 17:02:20 -0400400 service.destroyNotification();
alision58356b72013-06-03 17:13:36 -0400401 // mAdapter = new AccountSelectionAdapter(SFLPhoneHomeActivity.this, service, new ArrayList<Account>());
402 // spinnerAccounts.setAdapter(mAdapter);
alision2cb99562013-05-30 17:02:20 -0400403 } catch (RemoteException e) {
404 Log.e(TAG, e.toString());
405 }
alision9f7a6ec2013-05-24 16:26:26 -0400406 mBound = true;
alision9f7a6ec2013-05-24 16:26:26 -0400407 Log.d(TAG, "Service connected service=" + service);
alision371b77e2013-04-23 14:51:26 -0400408
alision9f7a6ec2013-05-24 16:26:26 -0400409 }
alision5f899632013-04-22 17:26:56 -0400410
alision9f7a6ec2013-05-24 16:26:26 -0400411 @Override
412 public void onServiceDisconnected(ComponentName arg0) {
alision5f899632013-04-22 17:26:56 -0400413
alision9f7a6ec2013-05-24 16:26:26 -0400414 mBound = false;
415 Log.d(TAG, "Service disconnected service=" + service);
416 }
417 };
alision5f899632013-04-22 17:26:56 -0400418
alision9f7a6ec2013-05-24 16:26:26 -0400419 @Override
420 public boolean onOptionsItemSelected(MenuItem item) {
421 Log.i(TAG, "onOptionsItemSelected " + item.getItemId());
alision5f899632013-04-22 17:26:56 -0400422
alision9f7a6ec2013-05-24 16:26:26 -0400423 if (mDrawerToggle.onOptionsItemSelected(item)) {
424 return true;
425 }
alision5f899632013-04-22 17:26:56 -0400426
alision9f7a6ec2013-05-24 16:26:26 -0400427 return super.onOptionsItemSelected(item);
428 }
alisionf76de3b2013-04-16 15:35:22 -0400429
alision9f7a6ec2013-05-24 16:26:26 -0400430 @Override
431 public void onActivityResult(int requestCode, int resultCode, Intent data) {
432 super.onActivityResult(requestCode, resultCode, data);
alision84813a12013-05-27 17:40:39 -0400433
434 switch (requestCode) {
alision9f7a6ec2013-05-24 16:26:26 -0400435 case REQUEST_CODE_PREFERENCES:
alision9f7a6ec2013-05-24 16:26:26 -0400436 break;
437 case REQUEST_CODE_CALL:
alision2cb99562013-05-30 17:02:20 -0400438 Log.w(TAG, "Result out of CallActivity");
alision9f7a6ec2013-05-24 16:26:26 -0400439 break;
440 }
alisionf76de3b2013-04-16 15:35:22 -0400441
alision9f7a6ec2013-05-24 16:26:26 -0400442 }
alisionf76de3b2013-04-16 15:35:22 -0400443
alision9f7a6ec2013-05-24 16:26:26 -0400444 @Override
445 public void onCallSelected(SipCall c) {
alision2cb99562013-05-30 17:02:20 -0400446 launchCallActivity(c, "display");
alisionf76de3b2013-04-16 15:35:22 -0400447
alision9f7a6ec2013-05-24 16:26:26 -0400448 }
alisionf76de3b2013-04-16 15:35:22 -0400449
alision9f7a6ec2013-05-24 16:26:26 -0400450 @Override
451 public ISipService getService() {
452 return service;
453 }
alisionf76de3b2013-04-16 15:35:22 -0400454
alision84813a12013-05-27 17:40:39 -0400455 /**
456 * Interface implemented to handle incoming events
457 */
alision9f7a6ec2013-05-24 16:26:26 -0400458 @Override
alision84813a12013-05-27 17:40:39 -0400459 public void incomingCall(Intent call) {
460 Toast.makeText(this, "New Call incoming", Toast.LENGTH_LONG).show();
alisionfde875f2013-05-28 17:01:54 -0400461 SipCall infos = call.getParcelableExtra("newcall");
alision84813a12013-05-27 17:40:39 -0400462
alision58356b72013-06-03 17:13:36 -0400463 // mCallElementList.addCall(infos);
alisionfde875f2013-05-28 17:01:54 -0400464
alision84813a12013-05-27 17:40:39 -0400465 launchCallActivity(infos, CallManagerCallBack.INCOMING_CALL);
466
467 }
468
469 @Override
470 public void callStateChanged(Intent callState) {
471 Bundle b = callState.getBundleExtra("com.savoirfairelinux.sflphone.service.newstate");
472 String cID = b.getString("CallID");
473 String state = b.getString("State");
474 Log.i(TAG, "callStateChanged" + cID + " " + state);
alision58356b72013-06-03 17:13:36 -0400475 // mCallElementList.updateCall(cID, state);
alision84813a12013-05-27 17:40:39 -0400476
477 }
478
479 @Override
480 public void incomingText(Intent msg) {
481 Bundle b = msg.getBundleExtra("com.savoirfairelinux.sflphone.service.newtext");
482 b.getString("CallID");
483 String from = b.getString("From");
484 String mess = b.getString("Msg");
485 Toast.makeText(getApplicationContext(), "text from " + from + " : " + mess, Toast.LENGTH_LONG).show();
486 }
487
488 @Override
489 public void onContactSelected(CallContact c) {
alisionfde875f2013-05-28 17:01:54 -0400490
491 SipCall.SipCallBuilder callBuilder = SipCall.SipCallBuilder.getInstance();
alision84813a12013-05-27 17:40:39 -0400492 try {
alision2cb99562013-05-30 17:02:20 -0400493 callBuilder.startCallCreation().setAccountID(service.getAccountList().get(1).toString()).setCallType(SipCall.state.CALL_TYPE_OUTGOING);
494 callBuilder.addContact(c);
495 launchCallActivity(callBuilder.build(), "call");
alisionfde875f2013-05-28 17:01:54 -0400496 } catch (RemoteException e1) {
alisiond45da712013-05-30 09:18:49 -0400497 Log.e(TAG, e1.toString());
alisionfde875f2013-05-28 17:01:54 -0400498 } catch (Exception e) {
alision84813a12013-05-27 17:40:39 -0400499 Log.e(TAG, e.toString());
500 }
alision84813a12013-05-27 17:40:39 -0400501
502 }
503
504 @Override
505 public void onCallDialed(String accountID, String to) {
alision84813a12013-05-27 17:40:39 -0400506
alisionfde875f2013-05-28 17:01:54 -0400507 SipCall.SipCallBuilder callBuilder = SipCall.SipCallBuilder.getInstance();
508 callBuilder.startCallCreation().setAccountID(accountID).setCallType(SipCall.state.CALL_TYPE_OUTGOING);
509 callBuilder.addContact(CallContact.ContactBuilder.buildUnknownContact(to));
alision84813a12013-05-27 17:40:39 -0400510
alisionfde875f2013-05-28 17:01:54 -0400511 try {
512 launchCallActivity(callBuilder.build(), "call");
513 } catch (Exception e) {
514 Log.e(TAG, e.toString());
515 }
alision84813a12013-05-27 17:40:39 -0400516
alision9f7a6ec2013-05-24 16:26:26 -0400517 }
alision371b77e2013-04-23 14:51:26 -0400518
alisiond45da712013-05-30 09:18:49 -0400519 @Override
520 public void onContactDragged() {
521
522 mDrawer.close();
alision2cb99562013-05-30 17:02:20 -0400523 mTabHost.setCurrentTab(1);
alisiond45da712013-05-30 09:18:49 -0400524
525 }
526
527 private HashMap<String, TabInfo> mapTabInfo = new HashMap<String, SFLPhoneHomeActivity.TabInfo>();
528
529 /**
530 * A simple factory that returns dummy views to the Tabhost
531 *
532 * @author mwho
533 */
534 class TabFactory implements TabContentFactory {
535
536 private final Context mContext;
537
538 /**
539 * @param context
540 */
541 public TabFactory(Context context) {
542 mContext = context;
543 }
544
545 /**
546 * (non-Javadoc)
547 *
548 * @see android.widget.TabHost.TabContentFactory#createTabContent(java.lang.String)
549 */
550 public View createTabContent(String tag) {
551 View v = new View(mContext);
552 v.setMinimumWidth(0);
553 v.setMinimumHeight(0);
554 return v;
555 }
556
557 }
558
559 /**
560 *
561 * @author mwho Maintains extrinsic info of a tab's construct
562 */
563 private class TabInfo {
564 private String tag;
565 private Class<?> clss;
566 private Bundle args;
567 private Fragment fragment;
568
569 TabInfo(String tag, Class<?> clazz, Bundle args) {
570 this.tag = tag;
571 this.clss = clazz;
572 this.args = args;
573 }
574
575 }
576
577 private static void AddTab(SFLPhoneHomeActivity activity, TabHost tabHost, TabHost.TabSpec tabSpec, TabInfo tabInfo) {
578 // Attach a Tab view factory to the spec
579 tabSpec.setContent(activity.new TabFactory(activity));
580 tabHost.addTab(tabSpec);
581 }
582
alision58356b72013-06-03 17:13:36 -0400583 @Override
584 public void openDrawer() {
585 mDrawer.open();
586 }
587
588 @Override
589 public void accountsChanged() {
590 ((DialingFragment)mSectionsPagerAdapter.getItem(0)).updateAllAccounts();
591
592 }
593
594 @Override
595 public void accountStateChanged(Intent accountState) {
596 ((DialingFragment)mSectionsPagerAdapter.getItem(0)).updateAccount(accountState);
597
598 }
599
alisionf76de3b2013-04-16 15:35:22 -0400600}