#17105: Go up to the Activity or the Application to get a service reference
diff --git a/src/com/savoirfairelinux/sflphone/client/AccountManagementFragment.java b/src/com/savoirfairelinux/sflphone/client/AccountManagementFragment.java
index a56f098..faf8f72 100644
--- a/src/com/savoirfairelinux/sflphone/client/AccountManagementFragment.java
+++ b/src/com/savoirfairelinux/sflphone/client/AccountManagementFragment.java
@@ -57,8 +57,6 @@
import com.savoirfairelinux.sflphone.R;
import com.savoirfairelinux.sflphone.service.ISipService;
-import com.savoirfairelinux.sflphone.service.SipService;
-import com.savoirfairelinux.sflphone.service.ServiceConstants;
import com.savoirfairelinux.sflphone.utils.AccountDetail;
import com.savoirfairelinux.sflphone.utils.AccountDetailsHandler;
import com.savoirfairelinux.sflphone.utils.AccountDetailBasic;
@@ -73,6 +71,7 @@
static final String DEFAULT_ACCOUNT_ID = "IP2IP";
static final int ACCOUNT_CREATE_REQUEST = 1;
static final int ACCOUNT_EDIT_REQUEST = 2;
+ private SFLPhonePreferenceActivity sflphonePreferenceActivity;
private ISipService service;
ArrayList<AccountDetail.PreferenceEntry> basicDetailKeys = null;
@@ -82,12 +81,16 @@
HashMap<String, Preference> accountPreferenceHashMap = null;
PreferenceScreen mRoot = null;
- Activity context = getActivity();
+ @Override
+ public void onAttach(Activity activity) {
+ super.onAttach(activity);
+ sflphonePreferenceActivity = (SFLPhonePreferenceActivity) activity;
+ service = sflphonePreferenceActivity.getSipService();
+ Log.i(TAG, "onAttach() service " + service);
+ }
- public AccountManagementFragment(ISipService s)
+ public AccountManagementFragment()
{
- service = s;
-
basicDetailKeys = AccountDetailBasic.getPreferenceEntries();
advancedDetailKeys = AccountDetailAdvanced.getPreferenceEntries();
srtpDetailKeys = AccountDetailSrtp.getPreferenceEntries();
diff --git a/src/com/savoirfairelinux/sflphone/client/AccountPreferenceActivity.java b/src/com/savoirfairelinux/sflphone/client/AccountPreferenceActivity.java
index a9f15ef..5c105e0 100644
--- a/src/com/savoirfairelinux/sflphone/client/AccountPreferenceActivity.java
+++ b/src/com/savoirfairelinux/sflphone/client/AccountPreferenceActivity.java
@@ -37,7 +37,6 @@
import android.content.ComponentName;
import android.content.Context;
import android.content.DialogInterface;
-import android.content.ServiceConnection;
import android.content.Intent;
import android.os.Bundle;
import android.os.IBinder;
diff --git a/src/com/savoirfairelinux/sflphone/client/CallElementList.java b/src/com/savoirfairelinux/sflphone/client/CallElementList.java
index 687059e..336bd33 100644
--- a/src/com/savoirfairelinux/sflphone/client/CallElementList.java
+++ b/src/com/savoirfairelinux/sflphone/client/CallElementList.java
@@ -36,6 +36,7 @@
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
+import android.app.Activity;
import android.app.ListFragment;
import android.app.LoaderManager;
import android.app.AlertDialog;
@@ -91,6 +92,14 @@
static final String[] CONTACTS_PHONES_PROJECTION = new String[] { Phone.NUMBER, Phone.TYPE };
static final String[] CONTACTS_SIP_PROJECTION = new String[] { SipAddress.SIP_ADDRESS, SipAddress.TYPE };
+ @Override
+ public void onAttach(Activity activity) {
+ super.onAttach(activity);
+ sflphoneHome = (SFLPhoneHome) activity;
+ service = ((SFLphoneApplication) sflphoneHome.getApplication()).getSipService();
+ Log.i(TAG, "onAttach() service " + service);
+ }
+
public String getSelectedAccount() {
return mAccountSelectionButton.getText().toString();
}
@@ -238,16 +247,9 @@
protected TextView state;
}
- public CallElementList(ISipService s, SFLPhoneHome home)
+ public CallElementList()
{
super();
- service = s;
- sflphoneHome = home;
- }
-
- public void setService(ISipService s)
- {
- service = s;
}
public void setAccountList(AccountList accountList) {
diff --git a/src/com/savoirfairelinux/sflphone/client/ContactListFragment.java b/src/com/savoirfairelinux/sflphone/client/ContactListFragment.java
index 0996cb2..70e1c43 100644
--- a/src/com/savoirfairelinux/sflphone/client/ContactListFragment.java
+++ b/src/com/savoirfairelinux/sflphone/client/ContactListFragment.java
@@ -30,6 +30,7 @@
*/
package com.savoirfairelinux.sflphone.client;
+import android.app.Activity;
import android.app.ListFragment;
import android.app.LoaderManager;
import android.app.AlertDialog;
@@ -87,6 +88,7 @@
ContactElementAdapter mAdapter;
Context mContext;
String mCurFilter;
+ private SFLPhoneHome sflphoneHome;
private ISipService service;
private AccountSelectionButton mAccountSelectionButton;
private AccountList mAccountList;
@@ -97,6 +99,14 @@
static final String[] CONTACTS_PHONES_PROJECTION = new String[] { Phone.NUMBER, Phone.TYPE };
static final String[] CONTACTS_SIP_PROJECTION = new String[] { SipAddress.SIP_ADDRESS, SipAddress.TYPE };
+ @Override
+ public void onAttach(Activity activity) {
+ super.onAttach(activity);
+ sflphoneHome = (SFLPhoneHome) activity;
+ service = ((SFLphoneApplication) sflphoneHome.getApplication()).getSipService();
+ Log.i(TAG, "onAttach() service " + service);
+ }
+
public static class InfosLoader implements Runnable
{
private View view;
@@ -185,15 +195,9 @@
}
};
- public ContactListFragment(ISipService s)
+ public ContactListFragment()
{
super();
- service = s;
- }
-
- public void setService(ISipService s)
- {
- service = s;
}
public void setAccountList(AccountList accountList) {
diff --git a/src/com/savoirfairelinux/sflphone/client/PrefManagementFragment.java b/src/com/savoirfairelinux/sflphone/client/PrefManagementFragment.java
index f5326f9..d1f8697 100644
--- a/src/com/savoirfairelinux/sflphone/client/PrefManagementFragment.java
+++ b/src/com/savoirfairelinux/sflphone/client/PrefManagementFragment.java
@@ -52,17 +52,14 @@
import android.widget.TextView;
import com.savoirfairelinux.sflphone.R;
-import com.savoirfairelinux.sflphone.service.ISipService;
public class PrefManagementFragment extends PreferenceFragment
{
static final String TAG = "PrefManagementFragment";
static final String CURRENT_VALUE = "Current value:: ";
- private ISipService service;
- public PrefManagementFragment(ISipService s)
+ public PrefManagementFragment()
{
- service = s;
}
@Override
diff --git a/src/com/savoirfairelinux/sflphone/client/SFLPhoneHome.java b/src/com/savoirfairelinux/sflphone/client/SFLPhoneHome.java
index 8de08a2..ac3e938 100644
--- a/src/com/savoirfairelinux/sflphone/client/SFLPhoneHome.java
+++ b/src/com/savoirfairelinux/sflphone/client/SFLPhoneHome.java
@@ -82,7 +82,6 @@
static final String TAG = "SFLPhoneHome";
private ButtonSectionFragment buttonFragment;
/* default callID */
- static boolean serviceIsOn = false;
private String incomingCallID = "";
private static final int REQUEST_CODE_PREFERENCES = 1;
ImageButton buttonCall, buttonHangup;
@@ -94,6 +93,7 @@
private ISipService service;
public AccountList mAccountList = new AccountList();
public CallList mCallList = new CallList(this);
+ private SFLphoneApplication mApplication;
private static final int ACTION_BAR_TAB_CONTACT = 0;
private static final int ACTION_BAR_TAB_CALL = 1;
@@ -113,7 +113,9 @@
{
super.onCreate(savedInstanceState);
- if (!serviceIsOn) {
+ mApplication = (SFLphoneApplication) getApplication();
+
+ if (!mApplication.isServiceRunning()) {
Log.i(TAG, "starting SipService");
startSipService();
}
@@ -226,7 +228,7 @@
}
Log.i(TAG, "onDestroy: stopping SipService...");
stopService(new Intent(this, SipService.class));
- serviceIsOn = false;
+ mApplication.setServiceRunning(false);
super.onDestroy();
}
@@ -237,15 +239,15 @@
public void onServiceConnected(ComponentName className,
IBinder binder) {
service = ISipService.Stub.asInterface(binder);
+ mApplication.setSipService(service);
mBound = true;
- mContactListFragment.setService(service);
- mCallElementList.setService(service);
mAccountList.setSipService(service);
Log.d(TAG, "Service connected");
}
@Override
public void onServiceDisconnected(ComponentName arg0) {
+ mApplication.setSipService(null);
mBound = false;
Log.d(TAG, "Service disconnected");
}
@@ -257,7 +259,7 @@
Intent sipServiceIntent = new Intent(SFLPhoneHome.this, SipService.class);
//sipServiceIntent.putExtra(ServiceConstants.EXTRA_OUTGOING_ACTIVITY, new ComponentName(SFLPhoneHome.this, SFLPhoneHome.class));
startService(sipServiceIntent);
- serviceIsOn = true;
+ mApplication.setServiceRunning(true);
};
};
try {
@@ -361,12 +363,12 @@
switch (i) {
case 0:
- mContactListFragment = new ContactListFragment(service);
+ mContactListFragment = new ContactListFragment();
mContactListFragment.setAccountList(mAccountList);
fragment = mContactListFragment;
break;
case 1:
- mCallElementList = new CallElementList(service, mHome);
+ mCallElementList = new CallElementList();
SipCall.setCallElementList(mCallElementList);
mCallElementList.setAccountList(mAccountList);
fragment = mCallElementList;
diff --git a/src/com/savoirfairelinux/sflphone/client/SFLPhonePreferenceActivity.java b/src/com/savoirfairelinux/sflphone/client/SFLPhonePreferenceActivity.java
index 42b5eb1..5070bb3 100644
--- a/src/com/savoirfairelinux/sflphone/client/SFLPhonePreferenceActivity.java
+++ b/src/com/savoirfairelinux/sflphone/client/SFLPhonePreferenceActivity.java
@@ -85,25 +85,6 @@
}
};
- private void startSipService() {
- Thread thread = new Thread("StartSFLphoneService") {
- public void run() {
- Intent sipServiceIntent = new Intent(SFLPhonePreferenceActivity.this, SipService.class);
- startService(sipServiceIntent);
- serviceIsOn = true;
- };
- };
- try {
- thread.start();
- } catch (IllegalThreadStateException e) {
- AlertDialog.Builder builder = new AlertDialog.Builder(this);
- builder.setMessage("Cannot start SFLPhone SipService!");
- AlertDialog alert = builder.create();
- alert.show();
- finish();
- }
- }
-
@Override
public void onCreate(Bundle savedInstanceState)
{
@@ -166,6 +147,10 @@
super.onDestroy();
}
+ public ISipService getSipService() {
+ return service;
+ }
+
@Override
public void onTabUnselected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction)
{
@@ -202,10 +187,10 @@
switch (position) {
case 0:
- fragment = new AccountManagementFragment(service);
+ fragment = new AccountManagementFragment();
break;
case 1:
- fragment = new PrefManagementFragment(service);
+ fragment = new PrefManagementFragment();
break;
default:
Log.i(TAG, "Get new fragment " + position + " is null");
diff --git a/src/com/savoirfairelinux/sflphone/client/SFLphoneApplication.java b/src/com/savoirfairelinux/sflphone/client/SFLphoneApplication.java
index 1dc2d99..17dcd6c 100644
--- a/src/com/savoirfairelinux/sflphone/client/SFLphoneApplication.java
+++ b/src/com/savoirfairelinux/sflphone/client/SFLphoneApplication.java
@@ -6,13 +6,13 @@
import android.content.pm.PackageManager.NameNotFoundException;
import android.util.Log;
-import com.savoirfairelinux.sflphone.service.SipService;
+import com.savoirfairelinux.sflphone.service.ISipService;
public class SFLphoneApplication extends Application {
static final String TAG = "SFLphoneApplication";
private boolean serviceRunning;
- private SipService sipService;
+ private ISipService sipService;
@Override
public void onCreate() {
@@ -34,11 +34,11 @@
this.serviceRunning = r;
}
- public SipService getSipService() {
+ public ISipService getSipService() {
return sipService;
}
- public void setSipService(SipService service) {
+ public void setSipService(ISipService service) {
sipService = service;
}