#17105 AccountPreferenceActivity should not bind to SipService, add preference in Intent's bundle instead
diff --git a/src/com/savoirfairelinux/sflphone/client/AccountManagementFragment.java b/src/com/savoirfairelinux/sflphone/client/AccountManagementFragment.java
index 4cfa8a7..52c6430 100644
--- a/src/com/savoirfairelinux/sflphone/client/AccountManagementFragment.java
+++ b/src/com/savoirfairelinux/sflphone/client/AccountManagementFragment.java
@@ -75,8 +75,6 @@
static final int ACCOUNT_EDIT_REQUEST = 2;
private ISipService service;
- // HashMap<String,HashMap<String,String>> mAccountList = new HashMap<String,HashMap<String,String>>();
- HashMap<String, AccountPreferenceScreen> mAccountList = new HashMap<String, AccountPreferenceScreen>();
ArrayList<AccountDetail.PreferenceEntry> basicDetailKeys;
ArrayList<AccountDetail.PreferenceEntry> advancedDetailKeys;
ArrayList<AccountDetail.PreferenceEntry> srtpDetailKeys;
@@ -112,20 +110,6 @@
{
super.onStop();
Log.i(TAG, "onStop");
-
- ArrayList<String> accountList = getAccountList();
-
- try {
- for(String s : accountList) {
- Log.i(TAG, " set details for " + s);
- AccountPreferenceScreen accountPref = mAccountList.get(s);
- if(accountPref != null) {
- service.setAccountDetails(s, accountPref.preferenceMap);
- }
- }
- } catch (RemoteException e) {
- Log.e(TAG, "Cannot call service method", e);
- }
}
@Override
@@ -147,6 +131,23 @@
Bundle bundle = data.getExtras();
String accountID = bundle.getString("AccountID");
Log.i(TAG, "Update account settings for " + accountID);
+
+ AccountDetailBasic basicDetails =
+ new AccountDetailBasic(bundle.getStringArrayList(AccountDetailBasic.BUNDLE_TAG));
+ AccountDetailAdvanced advancedDetails =
+ new AccountDetailAdvanced(bundle.getStringArrayList(AccountDetailAdvanced.BUNDLE_TAG));
+ AccountDetailSrtp srtpDetails =
+ new AccountDetailSrtp(bundle.getStringArrayList(AccountDetailSrtp.BUNDLE_TAG));
+ AccountDetailTls tlsDetails =
+ new AccountDetailTls(bundle.getStringArrayList(AccountDetailTls.BUNDLE_TAG));
+
+ HashMap<String, String> map = new HashMap<String, String>();
+ map.putAll(basicDetails.getDetailsHashMap());
+ map.putAll(advancedDetails.getDetailsHashMap());
+ map.putAll(srtpDetails.getDetailsHashMap());
+ map.putAll(tlsDetails.getDetailsHashMap());
+
+ setAccountDetails(accountID, map);
}
break;
default:
@@ -159,6 +160,7 @@
public void onReceive(Context context, Intent intent) {
String message = intent.getStringExtra("message");
Log.d("receiver", "Got message: " + message);
+ /*
ArrayList<String> newList = (ArrayList<String>) getAccountList();
Set<String> currentList = (Set<String>) mAccountList.keySet();
currentList.remove(DEFAULT_ACCOUNT_ID);
@@ -179,27 +181,7 @@
}
}
}
- }
- };
-
-
- Preference.OnPreferenceChangeListener changeBasicTextEditListener = new Preference.OnPreferenceChangeListener() {
- public boolean onPreferenceChange(Preference preference, Object newValue) {
- preference.setSummary(getString(R.string.account_current_value_label) + (CharSequence)newValue);
- AccountPreferenceScreen accountPreference = mAccountList.get(preference.getKey());
- String preferenceKey = basicDetailKeys.get(preference.getOrder()).mKey;
- accountPreference.preferenceMap.put(preferenceKey, ((CharSequence)newValue).toString());
- if(preferenceKey == AccountDetailBasic.CONFIG_ACCOUNT_ALIAS)
- accountPreference.mScreen.setTitle(((CharSequence)newValue.toString()));
- return true;
- }
- };
-
- Preference.OnPreferenceChangeListener changeAdvancedTextEditListener = new Preference.OnPreferenceChangeListener() {
- public boolean onPreferenceChange(Preference preference, Object newValue) {
- preference.setSummary(getString(R.string.account_current_value_label) + (CharSequence)newValue);
- mAccountList.get(preference.getKey()).preferenceMap.put(advancedDetailKeys.get(preference.getOrder()).mKey, ((CharSequence)newValue).toString());
- return true;
+ */
}
};
@@ -239,6 +221,24 @@
{
Log.i(TAG, "Launch account edit activity");
Intent intent = preference.getIntent();
+
+ Bundle bundle = intent.getExtras();
+ String accountID = bundle.getString("AccountID");
+
+ HashMap<String, String> preferenceMap = getAccountDetails(accountID);
+
+ AccountDetailBasic basicDetails = new AccountDetailBasic(preferenceMap);
+ AccountDetailAdvanced advancedDetails = new AccountDetailAdvanced(preferenceMap);
+ AccountDetailSrtp srtpDetails = new AccountDetailSrtp(preferenceMap);
+ AccountDetailTls tlsDetails = new AccountDetailTls(preferenceMap);
+
+ bundle.putStringArrayList(AccountDetailBasic.BUNDLE_TAG, basicDetails.getValuesOnly());
+ bundle.putStringArrayList(AccountDetailAdvanced.BUNDLE_TAG, advancedDetails.getValuesOnly());
+ bundle.putStringArrayList(AccountDetailSrtp.BUNDLE_TAG, srtpDetails.getValuesOnly());
+ bundle.putStringArrayList(AccountDetailTls.BUNDLE_TAG, tlsDetails.getValuesOnly());
+
+ intent.putExtras(bundle);
+
startActivityForResult(intent, ACCOUNT_EDIT_REQUEST);
}
@@ -291,9 +291,6 @@
{
Activity currentContext = getActivity();
- ArrayList<String> accountList = getAccountList();
- // Log.i(TAG, "GetAccountList: " + mAccountList);
-
mRoot = getPreferenceManager().createPreferenceScreen(currentContext);
// Default account category
@@ -314,6 +311,7 @@
createNewAccount.setIntent(new Intent().setClass(getActivity(), AccountCreationActivity.class));
mRoot.addPreference(createNewAccount);
+ ArrayList<String> accountList = getAccountList();
for(String s : accountList) {
// mRoot.addPreference(getAccountPreferenceScreen(s));
mRoot.addPreference(createAccountPreferenceScreen(s));
@@ -324,19 +322,8 @@
Preference createAccountPreferenceScreen(String accountID) {
- HashMap<String, String> preferenceMap = getAccountDetails(accountID);
-
- AccountDetailBasic basicDetails = new AccountDetailBasic(preferenceMap);
- AccountDetailAdvanced advancedDetails = new AccountDetailAdvanced(preferenceMap);
- AccountDetailSrtp srtpDetails = new AccountDetailSrtp(preferenceMap);
- AccountDetailTls tlsDetails = new AccountDetailTls(preferenceMap);
-
Bundle bundle = new Bundle();
bundle.putString("AccountID", accountID);
- bundle.putStringArrayList(AccountDetailBasic.BUNDLE_TAG, basicDetails.getValuesOnly());
- bundle.putStringArrayList(AccountDetailAdvanced.BUNDLE_TAG, advancedDetails.getValuesOnly());
- bundle.putStringArrayList(AccountDetailSrtp.BUNDLE_TAG, srtpDetails.getValuesOnly());
- bundle.putStringArrayList(AccountDetailTls.BUNDLE_TAG, tlsDetails.getValuesOnly());
Intent intent = new Intent().setClass(getActivity(), AccountPreferenceActivity.class);
intent.putExtras(bundle);
@@ -348,62 +335,4 @@
return editAccount;
}
-
- /*
- AccountPreferenceScreen createAccountPreferenceScreen(String accountID) {
- AccountPreferenceScreen preference = new AccountPreferenceScreen(getPreferenceManager(), getActivity(), accountID);
- mAccountList.put(accountID, preference);
-
- return preference;
- }
- */
-
- private class AccountPreferenceScreen
- {
- public PreferenceScreen mScreen;
- public HashMap<String, String> preferenceMap;
-
- public AccountPreferenceScreen(PreferenceManager prefManager, Context context, String accountID)
- {
- mScreen = prefManager.createPreferenceScreen(context);
- preferenceMap = getAccountDetails(accountID);
-
- mScreen.setTitle(preferenceMap.get(ServiceConstants.CONFIG_ACCOUNT_ALIAS));
-
- if(accountID != DEFAULT_ACCOUNT_ID) {
- Preference deleteThisAccount = new Preference(context);
- deleteThisAccount.setTitle("Delete Account");
- deleteThisAccount.setKey(accountID);
- deleteThisAccount.setOnPreferenceClickListener(removeSelectedAccountOnClick);
- deleteThisAccount.setIntent(new Intent().setClass(getActivity(), AccountCreationActivity.class));
- mScreen.addPreference(deleteThisAccount);
- }
-
- createPreferenceSection(mScreen, context, R.string.account_preferences_basic, basicDetailKeys, accountID, preferenceMap);
- createPreferenceSection(mScreen, context, R.string.account_preferences_advanced, advancedDetailKeys, accountID, preferenceMap);
- createPreferenceSection(mScreen, context, R.string.account_preferences_srtp, srtpDetailKeys, accountID, preferenceMap);
- createPreferenceSection(mScreen, context, R.string.account_preferences_tls, tlsDetailKeys, accountID, preferenceMap);
- }
-
- public void createPreferenceSection(PreferenceScreen root, Context context, int titleId, ArrayList<AccountDetail.PreferenceEntry> detailEntries,
- String accountID, HashMap<String, String> map)
- {
- // Inline preference
- PreferenceCategory accountPrefCat = new PreferenceCategory(context);
- accountPrefCat.setTitle(titleId);
- root.addPreference(accountPrefCat);
-
- for(AccountDetail.PreferenceEntry entry : detailEntries)
- {
- EditTextPreference accountPref = new EditTextPreference(context);
- accountPref.setDialogTitle(entry.mLabelId);
- accountPref.setPersistent(false);
- accountPref.setTitle(entry.mLabelId);
- accountPref.setSummary(getString(R.string.account_current_value_label) + map.get(entry.mKey));
- accountPref.setOnPreferenceChangeListener(changeBasicTextEditListener);
- accountPref.setKey(accountID);
- accountPrefCat.addPreference(accountPref);
- }
- }
- }
}
diff --git a/src/com/savoirfairelinux/sflphone/client/AccountPreferenceActivity.java b/src/com/savoirfairelinux/sflphone/client/AccountPreferenceActivity.java
index 5703f5f..b53adf5 100644
--- a/src/com/savoirfairelinux/sflphone/client/AccountPreferenceActivity.java
+++ b/src/com/savoirfairelinux/sflphone/client/AccountPreferenceActivity.java
@@ -66,17 +66,23 @@
public static final int ACCOUNT_MODIFIED = Activity.RESULT_FIRST_USER + 0;
public static final int ACCOUNT_NOT_MODIFIED = Activity.RESULT_FIRST_USER + 1;
- private AccountDetailBasic basicDetails;
- private AccountDetailAdvanced advancedDetails;
- private AccountDetailSrtp srtpDetails;
- private AccountDetailTls tlsDetails;
+ private AccountDetailBasic basicDetails = null;
+ private AccountDetailAdvanced advancedDetails = null;
+ private AccountDetailSrtp srtpDetails = null;
+ private AccountDetailTls tlsDetails = null;
private PreferenceManager mPreferenceManager;
private HashMap<String, String> mPreferenceMap;
private String mAccountID;
- Preference.OnPreferenceChangeListener changeNewAccountPreferenceListener = new Preference.OnPreferenceChangeListener() {
+ Preference.OnPreferenceChangeListener changeBasicPreferenceListener = new Preference.OnPreferenceChangeListener() {
public boolean onPreferenceChange(Preference preference, Object newValue) {
- preference.setSummary(getString(R.string.account_current_value_label) + (CharSequence)newValue);
+ preference.setSummary(getString(R.string.account_current_value_label)+(CharSequence)newValue);
+
+ // String preferenceKey = basicDetailKeys.get(preference.getOrder()).mKey;
+ // accountPreference.preferenceMap.put(preferenceKey, ((CharSequence)newValue).toString());
+ basicDetails.setDetailString(preference.getOrder(), ((CharSequence)newValue).toString());
+ // if(preferenceKey == AccountDetailBasic.CONFIG_ACCOUNT_ALIAS)
+ // accountPreference.mScreen.setTitle(((CharSequence)newValue.toString()));
return true;
}
};
@@ -87,12 +93,7 @@
}
};
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
-
- addPreferencesFromResource(R.xml.account_creation_preferences);
- mPreferenceManager = getPreferenceManager();
+ private void init() {
Bundle b = getIntent().getExtras();
mAccountID = b.getString("AccountID");
@@ -107,6 +108,14 @@
tlsDetails = new AccountDetailTls(tlsPreferenceList);
setPreferenceDetails(basicDetails);
+ setPreferenceDetails(advancedDetails);
+ setPreferenceDetails(srtpDetails);
+ setPreferenceDetails(tlsDetails);
+
+ addPreferenceListener(basicDetails);
+ addPreferenceListener(advancedDetails);
+ addPreferenceListener(srtpDetails);
+ addPreferenceListener(tlsDetails);
}
private void setPreferenceDetails(AccountDetail details) {
@@ -127,37 +136,30 @@
Preference pref = mPreferenceManager.findPreference(p.mKey);
if(pref != null) {
if(!p.isTwoState) {
- pref.setOnPreferenceChangeListener(changeNewAccountPreferenceListener);
+ pref.setOnPreferenceChangeListener(changeBasicPreferenceListener);
}
}
}
}
@Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+
+ addPreferencesFromResource(R.xml.account_creation_preferences);
+ mPreferenceManager = getPreferenceManager();
+
+ init();
+ }
+
+ @Override
protected void onStart() {
super.onStart();
-
- addPreferenceListener(basicDetails);
- addPreferenceListener(advancedDetails);
- addPreferenceListener(srtpDetails);
- addPreferenceListener(tlsDetails);
}
@Override
protected void onStop() {
super.onStop();
-
- Bundle bundle = new Bundle();
- bundle.putString("AccountID", mAccountID);
- bundle.putStringArrayList(AccountDetailBasic.BUNDLE_TAG, basicDetails.getValuesOnly());
- bundle.putStringArrayList(AccountDetailAdvanced.BUNDLE_TAG, advancedDetails.getValuesOnly());
- bundle.putStringArrayList(AccountDetailSrtp.BUNDLE_TAG, srtpDetails.getValuesOnly());
- bundle.putStringArrayList(AccountDetailTls.BUNDLE_TAG, tlsDetails.getValuesOnly());
-
- Intent resultIntent = new Intent();
- resultIntent.putExtras(bundle);
-
- setResult(ACCOUNT_MODIFIED, resultIntent);
}
@Override
diff --git a/src/com/savoirfairelinux/sflphone/client/SFLPhonePreferenceActivity.java b/src/com/savoirfairelinux/sflphone/client/SFLPhonePreferenceActivity.java
index 6980f8c..42b5eb1 100644
--- a/src/com/savoirfairelinux/sflphone/client/SFLPhonePreferenceActivity.java
+++ b/src/com/savoirfairelinux/sflphone/client/SFLPhonePreferenceActivity.java
@@ -134,13 +134,6 @@
actionBar.addTab(actionBar.newTab().setText(mPreferencesPagerAdapter.getPageTitle(i)).setTabListener(this));
}
-
- }
-
- @Override
- protected void onStart() {
- Log.i(TAG, "onStart");
- super.onStart();
if(!mBound) {
Log.i(TAG, "onStart: Binding service...");
Intent intent = new Intent(this, SipService.class);
@@ -149,17 +142,25 @@
}
@Override
+ protected void onStart() {
+ Log.i(TAG, "onStart");
+ super.onStart();
+ }
+
+ @Override
protected void onStop() {
super.onStop();
- if(mBound) {
- unbindService(mConnection);
- mBound = false;
- }
}
@Override
protected void onDestroy() {
Log.i(TAG, "onDestroy: stopping SipService...");
+
+ if(mBound) {
+ unbindService(mConnection);
+ mBound = false;
+ }
+
stopService(new Intent(this, SipService.class));
serviceIsOn = false;
super.onDestroy();
diff --git a/src/com/savoirfairelinux/sflphone/utils/AccountDetail.java b/src/com/savoirfairelinux/sflphone/utils/AccountDetail.java
index 86519b9..a133e97 100644
--- a/src/com/savoirfairelinux/sflphone/utils/AccountDetail.java
+++ b/src/com/savoirfairelinux/sflphone/utils/AccountDetail.java
@@ -27,6 +27,7 @@
import com.savoirfairelinux.sflphone.service.StringMap;
import java.util.ArrayList;
+import java.util.HashMap;
public interface AccountDetail {
@@ -66,8 +67,12 @@
public ArrayList<String> getValuesOnly();
+ public HashMap<String, String> getDetailsHashMap();
+
public String getDetailString(String key);
+ public void setDetailString(int position, String newValue);
+
public boolean getDetailBoolean();
}
diff --git a/src/com/savoirfairelinux/sflphone/utils/AccountDetailAdvanced.java b/src/com/savoirfairelinux/sflphone/utils/AccountDetailAdvanced.java
index 0faa79a..d3bace1 100644
--- a/src/com/savoirfairelinux/sflphone/utils/AccountDetailAdvanced.java
+++ b/src/com/savoirfairelinux/sflphone/utils/AccountDetailAdvanced.java
@@ -139,6 +139,17 @@
return valueList;
}
+ public HashMap<String, String> getDetailsHashMap()
+ {
+ HashMap<String, String> map = new HashMap<String, String>();
+
+ for(AccountDetail.PreferenceEntry p : privateArray) {
+ map.put(p.mKey, p.mValue);
+ }
+
+ return map;
+ }
+
public String getDetailString(String key)
{
String value = "";
@@ -153,6 +164,11 @@
return value;
}
+ public void setDetailString(int position, String newValue)
+ {
+ privateArray.get(position).mValue = newValue;
+ }
+
public boolean getDetailBoolean()
{
return true;
diff --git a/src/com/savoirfairelinux/sflphone/utils/AccountDetailBasic.java b/src/com/savoirfairelinux/sflphone/utils/AccountDetailBasic.java
index 97e42e9..cb07474 100644
--- a/src/com/savoirfairelinux/sflphone/utils/AccountDetailBasic.java
+++ b/src/com/savoirfairelinux/sflphone/utils/AccountDetailBasic.java
@@ -113,6 +113,17 @@
return valueList;
}
+ public HashMap<String, String> getDetailsHashMap()
+ {
+ HashMap<String, String> map = new HashMap<String, String>();
+
+ for(AccountDetail.PreferenceEntry p : privateArray) {
+ map.put(p.mKey, p.mValue);
+ }
+
+ return map;
+ }
+
public String getDetailString(String key)
{
String value = "";
@@ -127,6 +138,12 @@
return value;
}
+ public void setDetailString(int position, String newValue)
+ {
+ privateArray.get(position).mValue = newValue;
+ }
+
+
public boolean getDetailBoolean()
{
return true;
diff --git a/src/com/savoirfairelinux/sflphone/utils/AccountDetailSrtp.java b/src/com/savoirfairelinux/sflphone/utils/AccountDetailSrtp.java
index d205419..7cf8149 100644
--- a/src/com/savoirfairelinux/sflphone/utils/AccountDetailSrtp.java
+++ b/src/com/savoirfairelinux/sflphone/utils/AccountDetailSrtp.java
@@ -109,6 +109,17 @@
return valueList;
}
+ public HashMap<String, String> getDetailsHashMap()
+ {
+ HashMap<String, String> map = new HashMap<String, String>();
+
+ for(AccountDetail.PreferenceEntry p : privateArray) {
+ map.put(p.mKey, p.mValue);
+ }
+
+ return map;
+ }
+
public String getDetailString(String key)
{
String value = "";
@@ -123,6 +134,12 @@
return value;
}
+ public void setDetailString(int position, String newValue)
+ {
+ privateArray.get(position).mValue = newValue;
+ }
+
+
public boolean getDetailBoolean()
{
return true;
diff --git a/src/com/savoirfairelinux/sflphone/utils/AccountDetailTls.java b/src/com/savoirfairelinux/sflphone/utils/AccountDetailTls.java
index bd2d6e5..1bbd504 100644
--- a/src/com/savoirfairelinux/sflphone/utils/AccountDetailTls.java
+++ b/src/com/savoirfairelinux/sflphone/utils/AccountDetailTls.java
@@ -121,6 +121,17 @@
return valueList;
}
+ public HashMap<String, String> getDetailsHashMap()
+ {
+ HashMap<String, String> map = new HashMap<String, String>();
+
+ for(AccountDetail.PreferenceEntry p : privateArray) {
+ map.put(p.mKey, p.mValue);
+ }
+
+ return map;
+ }
+
public String getDetailString(String key)
{
String value = "";
@@ -135,6 +146,11 @@
return value;
}
+ public void setDetailString(int position, String newValue)
+ {
+ privateArray.get(position).mValue = newValue;
+ }
+
public boolean getDetailBoolean()
{
return true;