From 1f1ced3880d3812ae69ea8e5eb7f797a3204ed0b Mon Sep 17 00:00:00 2001 From: Emeric Vigier <emeric.vigier@savoirfairelinux.com> Date: Fri, 2 Nov 2012 16:56:32 -0400 Subject: [PATCH] #17105: Go up to the Activity or the Application to get a service reference --- .../client/AccountManagementFragment.java | 15 ++++++----- .../client/AccountPreferenceActivity.java | 1 - .../sflphone/client/CallElementList.java | 18 +++++++------ .../sflphone/client/ContactListFragment.java | 18 ++++++++----- .../client/PrefManagementFragment.java | 5 +--- .../sflphone/client/SFLPhoneHome.java | 18 +++++++------ .../client/SFLPhonePreferenceActivity.java | 27 +++++-------------- .../sflphone/client/SFLphoneApplication.java | 8 +++--- 8 files changed, 51 insertions(+), 59 deletions(-) diff --git a/src/com/savoirfairelinux/sflphone/client/AccountManagementFragment.java b/src/com/savoirfairelinux/sflphone/client/AccountManagementFragment.java index a56f098ff..faf8f729d 100644 --- a/src/com/savoirfairelinux/sflphone/client/AccountManagementFragment.java +++ b/src/com/savoirfairelinux/sflphone/client/AccountManagementFragment.java @@ -57,8 +57,6 @@ import java.util.ArrayList; 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 @@ public class AccountManagementFragment extends PreferenceFragment 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 @@ public class AccountManagementFragment extends PreferenceFragment 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 a9f15ef2c..5c105e095 100644 --- a/src/com/savoirfairelinux/sflphone/client/AccountPreferenceActivity.java +++ b/src/com/savoirfairelinux/sflphone/client/AccountPreferenceActivity.java @@ -37,7 +37,6 @@ import android.app.Dialog; 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 687059e5c..336bd3335 100644 --- a/src/com/savoirfairelinux/sflphone/client/CallElementList.java +++ b/src/com/savoirfairelinux/sflphone/client/CallElementList.java @@ -36,6 +36,7 @@ import java.util.List; 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 @@ public class CallElementList extends ListFragment implements LoaderManager.Loade 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 @@ public class CallElementList extends ListFragment implements LoaderManager.Loade 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 0996cb24c..70e1c43d5 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 @@ public class ContactListFragment extends ListFragment implements OnQueryTextList ContactElementAdapter mAdapter; Context mContext; String mCurFilter; + private SFLPhoneHome sflphoneHome; private ISipService service; private AccountSelectionButton mAccountSelectionButton; private AccountList mAccountList; @@ -97,6 +99,14 @@ public class ContactListFragment extends ListFragment implements OnQueryTextList 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 class ContactListFragment extends ListFragment implements OnQueryTextList } }; - 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 f5326f90e..d1f8697cc 100644 --- a/src/com/savoirfairelinux/sflphone/client/PrefManagementFragment.java +++ b/src/com/savoirfairelinux/sflphone/client/PrefManagementFragment.java @@ -52,17 +52,14 @@ import android.widget.SeekBar.OnSeekBarChangeListener; 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 8de08a227..ac3e93830 100644 --- a/src/com/savoirfairelinux/sflphone/client/SFLPhoneHome.java +++ b/src/com/savoirfairelinux/sflphone/client/SFLPhoneHome.java @@ -82,7 +82,6 @@ public class SFLPhoneHome extends Activity implements ActionBar.TabListener, OnC 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 @@ public class SFLPhoneHome extends Activity implements ActionBar.TabListener, OnC 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 @@ public class SFLPhoneHome extends Activity implements ActionBar.TabListener, OnC { super.onCreate(savedInstanceState); - if (!serviceIsOn) { + mApplication = (SFLphoneApplication) getApplication(); + + if (!mApplication.isServiceRunning()) { Log.i(TAG, "starting SipService"); startSipService(); } @@ -226,7 +228,7 @@ public class SFLPhoneHome extends Activity implements ActionBar.TabListener, OnC } Log.i(TAG, "onDestroy: stopping SipService..."); stopService(new Intent(this, SipService.class)); - serviceIsOn = false; + mApplication.setServiceRunning(false); super.onDestroy(); } @@ -237,15 +239,15 @@ public class SFLPhoneHome extends Activity implements ActionBar.TabListener, OnC 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 @@ public class SFLPhoneHome extends Activity implements ActionBar.TabListener, OnC 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 @@ public class SFLPhoneHome extends Activity implements ActionBar.TabListener, OnC 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 42b5eb13f..5070bb3d5 100644 --- a/src/com/savoirfairelinux/sflphone/client/SFLPhonePreferenceActivity.java +++ b/src/com/savoirfairelinux/sflphone/client/SFLPhonePreferenceActivity.java @@ -85,25 +85,6 @@ public class SFLPhonePreferenceActivity extends Activity implements ActionBar.Ta } }; - 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 @@ public class SFLPhonePreferenceActivity extends Activity implements ActionBar.Ta super.onDestroy(); } + public ISipService getSipService() { + return service; + } + @Override public void onTabUnselected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) { @@ -202,10 +187,10 @@ public class SFLPhonePreferenceActivity extends Activity implements ActionBar.Ta 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 1dc2d9948..17dcd6c20 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; 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 @@ public class SFLphoneApplication extends Application { this.serviceRunning = r; } - public SipService getSipService() { + public ISipService getSipService() { return sipService; } - public void setSipService(SipService service) { + public void setSipService(ISipService service) { sipService = service; } -- GitLab