* #34699: large rewrite of account credentials access to display preferences
diff --git a/src/org/sflphone/account/AccountCredentials.java b/src/org/sflphone/account/AccountCredentials.java
new file mode 100644
index 0000000..baeb12f
--- /dev/null
+++ b/src/org/sflphone/account/AccountCredentials.java
@@ -0,0 +1,104 @@
+package org.sflphone.account;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+
+import org.sflphone.R;
+
+import android.util.Log;
+
+public class AccountCredentials implements AccountDetail {
+
+ private static final String TAG = AccountCredentials.class.getSimpleName();
+
+ public static final String CONFIG_ACCOUNT_USERNAME = "Account.username";
+ public static final String CONFIG_ACCOUNT_PASSWORD = "Account.password";
+ public static final String CONFIG_ACCOUNT_REALM = "Account.realm";
+
+
+ private ArrayList<AccountDetail.PreferenceEntry> privateArray;
+
+ public static ArrayList<AccountDetail.PreferenceEntry> getPreferenceEntries() {
+ ArrayList<AccountDetail.PreferenceEntry> preference = new ArrayList<AccountDetail.PreferenceEntry>();
+
+ preference.add(new PreferenceEntry(CONFIG_ACCOUNT_USERNAME, R.string.account_username_label));
+ preference.add(new PreferenceEntry(CONFIG_ACCOUNT_PASSWORD, R.string.account_password_label));
+ preference.add(new PreferenceEntry(CONFIG_ACCOUNT_REALM, R.string.account_realm_label));
+
+ return preference;
+ }
+
+ public AccountCredentials() {
+ privateArray = getPreferenceEntries();
+ }
+
+ public AccountCredentials(HashMap<String, String> pref) {
+ privateArray = getPreferenceEntries();
+
+ for (AccountDetail.PreferenceEntry p : privateArray) {
+ p.mValue = pref.get(p.mKey);
+ }
+ }
+
+ public AccountCredentials(ArrayList<String> pref) {
+ privateArray = getPreferenceEntries();
+
+ if (pref.size() != privateArray.size()) {
+ Log.i(TAG, "Error list are not of equal size");
+ } else {
+ int index = 0;
+ for (String s : pref) {
+ privateArray.get(index).mValue = s;
+ index++;
+ }
+ }
+ }
+
+ public ArrayList<AccountDetail.PreferenceEntry> getDetailValues() {
+ return privateArray;
+ }
+
+ public ArrayList<String> getValuesOnly() {
+ ArrayList<String> valueList = new ArrayList<String>();
+
+ for (AccountDetail.PreferenceEntry p : privateArray) {
+ Log.i(TAG, "" + p.mValue);
+ valueList.add(p.mValue);
+ }
+
+ 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 = "";
+
+ for (AccountDetail.PreferenceEntry p : privateArray) {
+ if (p.mKey.equals(key)) {
+ value = p.mValue;
+ return value;
+ }
+ }
+ return value;
+ }
+
+ public void setDetailString(String key, String newValue) {
+ for (int i = 0; i < privateArray.size(); ++i) {
+ PreferenceEntry p = privateArray.get(i);
+ if (p.mKey.equals(key)) {
+ privateArray.get(i).mValue = newValue;
+ }
+ }
+
+ }
+
+}
\ No newline at end of file
diff --git a/src/org/sflphone/account/AccountDetailBasic.java b/src/org/sflphone/account/AccountDetailBasic.java
index 6b312bc..66ea886 100644
--- a/src/org/sflphone/account/AccountDetailBasic.java
+++ b/src/org/sflphone/account/AccountDetailBasic.java
@@ -45,10 +45,7 @@
public static final String CONFIG_ACCOUNT_TYPE = "Account.type";
public static final String CONFIG_ACCOUNT_ENABLE = "Account.enable";
- public static final String CONFIG_ACCOUNT_DEFAULT_TYPE = "SIP";
- public static final String CONFIG_ACCOUNT_DEFAULT_ENABLE = "true";
- public static final String CONFIG_ACCOUNT_DEFAULT_REALM = "*";
- public static final String CONFIG_ACCOUNT_DEFAULT_USERAGENT = "SFLphone";
+
private ArrayList<AccountDetail.PreferenceEntry> privateArray;
diff --git a/src/org/sflphone/account/AccountDetailsHandler.java b/src/org/sflphone/account/AccountDetailsHandler.java
index b16022c..e3a43d5 100644
--- a/src/org/sflphone/account/AccountDetailsHandler.java
+++ b/src/org/sflphone/account/AccountDetailsHandler.java
@@ -24,9 +24,11 @@
import java.util.ArrayList;
import java.util.HashMap;
+import java.util.List;
import org.sflphone.R;
import org.sflphone.service.StringMap;
+import org.sflphone.service.VectMap;
public class AccountDetailsHandler {
// private static final String TAG = "AccountDetailsHandler";
@@ -243,4 +245,34 @@
return nativemap;
}
+
+ public static ArrayList<HashMap<String, String>> convertCredentialsToNative(VectMap map) {
+
+ ArrayList<HashMap<String, String>> toReturn = new ArrayList<HashMap<String,String>>();
+ StringMap entry;
+ HashMap<String, String> nativeEntry = new HashMap<String, String>();
+ for(int i = 0 ; i < map.size() ; ++i){
+ entry = map.get(i);
+ nativeEntry.put(AccountDetailBasic.CONFIG_ACCOUNT_PASSWORD, entry.get(AccountDetailBasic.CONFIG_ACCOUNT_PASSWORD));
+ nativeEntry.put(AccountDetailBasic.CONFIG_ACCOUNT_USERNAME, entry.get(AccountDetailBasic.CONFIG_ACCOUNT_USERNAME));
+ nativeEntry.put(AccountDetailBasic.CONFIG_ACCOUNT_REALM, entry.get(AccountDetailBasic.CONFIG_ACCOUNT_REALM));
+ toReturn.add(nativeEntry);
+ }
+ return toReturn;
+ }
+
+ public static VectMap convertCredentialsToSwig(List creds) {
+ ArrayList<HashMap<String, String>> todecode = (ArrayList<HashMap<String, String>>) creds;
+ VectMap toReturn = new VectMap();
+ StringMap entry = new StringMap();
+ HashMap<String, String> nativeEntry;
+ for(int i = 0 ; i < todecode.size() ; ++i){
+ nativeEntry = todecode.get(i);
+ entry.set(AccountDetailBasic.CONFIG_ACCOUNT_PASSWORD, nativeEntry.get(AccountDetailBasic.CONFIG_ACCOUNT_PASSWORD));
+ entry.set(AccountDetailBasic.CONFIG_ACCOUNT_USERNAME, nativeEntry.get(AccountDetailBasic.CONFIG_ACCOUNT_USERNAME));
+ entry.set(AccountDetailBasic.CONFIG_ACCOUNT_REALM, nativeEntry.get(AccountDetailBasic.CONFIG_ACCOUNT_REALM));
+ toReturn.add(entry);
+ }
+ return toReturn;
+ }
};
diff --git a/src/org/sflphone/client/AccountEditionActivity.java b/src/org/sflphone/client/AccountEditionActivity.java
index a84d127..b083f4b 100644
--- a/src/org/sflphone/client/AccountEditionActivity.java
+++ b/src/org/sflphone/client/AccountEditionActivity.java
@@ -69,6 +69,7 @@
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
+import android.view.View;
public class AccountEditionActivity extends Activity implements TabListener, GeneralAccountFragment.Callbacks, AudioManagementFragment.Callbacks,
AdvancedAccountFragment.Callbacks, SecurityAccountFragment.Callbacks, NestedSettingsFragment.Callbacks {
@@ -78,6 +79,8 @@
private boolean mBound = false;
private ISipService service;
+ private View mOverlayContainer;
+
private Account acc_selected;
PreferencesPagerAdapter mPreferencesPagerAdapter;
@@ -140,6 +143,7 @@
}
});
+ mOverlayContainer = findViewById(R.id.hidden_container);
acc_selected = getIntent().getExtras().getParcelable("account");
if (!mBound) {
@@ -401,4 +405,13 @@
return acc_selected;
}
+ @Override
+ public void displayCredentialsScreen() {
+ Fragment toDisplay = new NestedSettingsFragment();
+ Bundle b = new Bundle();
+ b.putInt("MODE", 0);
+ toDisplay.setArguments(b);
+ getFragmentManager().beginTransaction().replace(R.id.hidden_container, toDisplay).commit();
+ }
+
}
diff --git a/src/org/sflphone/client/CallActivity.java b/src/org/sflphone/client/CallActivity.java
index a4781b4..e237277 100644
--- a/src/org/sflphone/client/CallActivity.java
+++ b/src/org/sflphone/client/CallActivity.java
@@ -105,7 +105,7 @@
slidingPaneLayout = (CallPaneLayout) findViewById(R.id.slidingpanelayout);
slidingPaneLayout.setParallaxDistance(500);
slidingPaneLayout.setSliderFadeColor(Color.TRANSPARENT);
-
+
slidingPaneLayout.setPanelSlideListener(new SlidingPaneLayout.PanelSlideListener() {
@Override
@@ -207,7 +207,9 @@
service.destroyNotification();
String accountID = (String) service.getAccountList().get(1); // We use the first account to place outgoing calls
- Account acc = new Account(accountID, (HashMap<String, String>) service.getAccountDetails(accountID));
+ HashMap<String, String> details = (HashMap<String, String>) service.getAccountDetails(accountID);
+ ArrayList<HashMap<String, String>> credentials = (ArrayList<HashMap<String, String>>) service.getCredentials(accountID);
+ Account acc = new Account(accountID, details, credentials);
SipCall call = SipCall.SipCallBuilder.getInstance().startCallCreation().setContact(c).setAccount(acc)
.setCallType(SipCall.state.CALL_TYPE_OUTGOING).build();
@@ -235,7 +237,7 @@
} else {
mCurrentCallFragment.setArguments(getIntent().getExtras());
-
+
Bundle IMBundle = new Bundle();
IMBundle.putParcelableArrayList("messages", new ArrayList<SipMessage>());
mIMFragment.setArguments(IMBundle);
@@ -350,15 +352,15 @@
mHandler.removeCallbacks(mUpdateTimeTask);
mCurrentCallFragment.getBubbleView().stopThread();
TimerTask quit = new TimerTask() {
-
+
@Override
public void run() {
finish();
}
};
-
+
new Timer().schedule(quit, 2000);
-
+
}
@Override
diff --git a/src/org/sflphone/fragments/NestedSettingsFragment.java b/src/org/sflphone/fragments/NestedSettingsFragment.java
index 6a27c6e..c418e41 100644
--- a/src/org/sflphone/fragments/NestedSettingsFragment.java
+++ b/src/org/sflphone/fragments/NestedSettingsFragment.java
@@ -6,6 +6,7 @@
import java.util.Enumeration;
import org.sflphone.R;
+import org.sflphone.account.AccountCredentials;
import org.sflphone.account.AccountDetail;
import org.sflphone.account.AccountDetailAdvanced;
import org.sflphone.model.Account;
@@ -18,6 +19,9 @@
import android.preference.Preference.OnPreferenceChangeListener;
import android.preference.PreferenceFragment;
import android.util.Log;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
public class NestedSettingsFragment extends PreferenceFragment {
@@ -48,7 +52,7 @@
throw new IllegalStateException("Activity must implement fragment's callbacks.");
}
- Log.e(TAG,"Attaching Adavnced");
+ Log.e(TAG, "Attaching Adavnced");
mCallbacks = (Callbacks) activity;
}
@@ -63,11 +67,41 @@
super.onCreate(savedInstanceState);
// Load the preferences from an XML resource
-// addPreferencesFromResource(R.xml.account_advanced_prefs);
-// setPreferenceDetails(mCallbacks.getAccount().getAdvancedDetails());
-// addPreferenceListener(mCallbacks.getAccount().getAdvancedDetails(), changeAdvancedPreferenceListener);
-
-
+ switch (getArguments().getInt("MODE")) {
+ case 0:
+
+ addPreferencesFromResource(R.xml.account_credentials);
+ addAllCredentials();
+ break;
+ case 1:
+ break;
+ case 2:
+ break;
+ }
+
+ // setPreferenceDetails(mCallbacks.getAccount().getAdvancedDetails());
+ // addPreferenceListener(mCallbacks.getAccount().getAdvancedDetails(), changeAdvancedPreferenceListener);
+
+ }
+
+ private void addAllCredentials() {
+
+ ArrayList<AccountCredentials> credentials = mCallbacks.getAccount().getCredentials();
+ for (AccountCredentials cred : credentials) {
+ Preference toAdd = new Preference(getActivity());
+ toAdd.setTitle(cred.getDetailString(AccountCredentials.CONFIG_ACCOUNT_USERNAME));
+ toAdd.setSummary(cred.getDetailString(AccountCredentials.CONFIG_ACCOUNT_PASSWORD));
+ getPreferenceScreen().addPreference(toAdd);
+ }
+
+ }
+
+ @Override
+ public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
+ View view = super.onCreateView(inflater, container, savedInstanceState);
+ view.setBackgroundColor(getResources().getColor(android.R.color.white));
+
+ return view;
}
private void setPreferenceDetails(AccountDetail details) {
@@ -125,15 +159,14 @@
public boolean onPreferenceChange(Preference preference, Object newValue) {
setDifferent(true);
if (preference instanceof CheckBoxPreference) {
- mCallbacks.getAccount().getAdvancedDetails().setDetailString(preference.getKey(), ((Boolean) newValue).toString());
- if(preference.getKey().contentEquals("STUN.enable")){
- findPreference("STUN.server").setEnabled((Boolean) newValue);
- } else if (preference.getKey().contentEquals("Account.publishedSameAsLocal")){
- findPreference("Account.publishedPort").setEnabled((Boolean) newValue);
- findPreference("Account.publishedAddress").setEnabled((Boolean) newValue);
- }
-
-
+ mCallbacks.getAccount().getAdvancedDetails().setDetailString(preference.getKey(), ((Boolean) newValue).toString());
+ if (preference.getKey().contentEquals("STUN.enable")) {
+ findPreference("STUN.server").setEnabled((Boolean) newValue);
+ } else if (preference.getKey().contentEquals("Account.publishedSameAsLocal")) {
+ findPreference("Account.publishedPort").setEnabled((Boolean) newValue);
+ findPreference("Account.publishedAddress").setEnabled((Boolean) newValue);
+ }
+
} else {
preference.setSummary((CharSequence) newValue);
Log.i(TAG, "Changing preference value:" + newValue);
diff --git a/src/org/sflphone/fragments/SecurityAccountFragment.java b/src/org/sflphone/fragments/SecurityAccountFragment.java
index 020edc0..51c6cb3 100644
--- a/src/org/sflphone/fragments/SecurityAccountFragment.java
+++ b/src/org/sflphone/fragments/SecurityAccountFragment.java
@@ -7,9 +7,9 @@
import android.app.Activity;
import android.os.Bundle;
import android.preference.CheckBoxPreference;
-import android.preference.EditTextPreference;
import android.preference.Preference;
import android.preference.Preference.OnPreferenceChangeListener;
+import android.preference.Preference.OnPreferenceClickListener;
import android.preference.PreferenceFragment;
import android.util.Log;
@@ -18,7 +18,6 @@
private static final String TAG = SecurityAccountFragment.class.getSimpleName();
private boolean isDifferent = false;
-
private Callbacks mCallbacks = sDummyCallbacks;
private static Callbacks sDummyCallbacks = new Callbacks() {
@@ -27,12 +26,18 @@
return null;
}
+ @Override
+ public void displayCredentialsScreen() {
+ }
+
};
public interface Callbacks {
public Account getAccount();
+ public void displayCredentialsScreen();
+
}
@Override
@@ -57,26 +62,36 @@
// Load the preferences from an XML resource
addPreferencesFromResource(R.xml.account_security_prefs);
-// setPreferenceDetails(mCallbacks.getAccount().getTlsDetails());
-// setPreferenceDetails(mCallbacks.getAccount().getSrtpDetails());
-// addPreferenceListener(mCallbacks.getAccount().getTlsDetails(), changeTlsPreferenceListener);
-// addPreferenceListener(mCallbacks.getAccount().getSrtpDetails(), changeSrtpPreferenceListener);
+ setPreferenceDetails(mCallbacks.getAccount().getTlsDetails());
+ // setPreferenceDetails(mCallbacks.getAccount().getSrtpDetails());
+ // addPreferenceListener(mCallbacks.getAccount().getTlsDetails(), changeTlsPreferenceListener);
+ // addPreferenceListener(mCallbacks.getAccount().getSrtpDetails(), changeSrtpPreferenceListener);
}
private void setPreferenceDetails(AccountDetail details) {
- for (AccountDetail.PreferenceEntry p : details.getDetailValues()) {
- Log.i(TAG, "setPreferenceDetails: pref " + p.mKey + " value " + p.mValue);
- Preference pref = findPreference(p.mKey);
- if (pref != null) {
- if (!p.isTwoState) {
- ((EditTextPreference) pref).setText(p.mValue);
- pref.setSummary(p.mValue);
- }
- } else {
- Log.w(TAG, "pref not found");
+
+ findPreference("Credential.count").setOnPreferenceClickListener(new OnPreferenceClickListener() {
+
+ @Override
+ public boolean onPreferenceClick(Preference preference) {
+ mCallbacks.displayCredentialsScreen();
+ return false;
}
- }
+ });
+
+ // for (AccountDetail.PreferenceEntry p : details.getDetailValues()) {
+ // Log.i(TAG, "setPreferenceDetails: pref " + p.mKey + " value " + p.mValue);
+ // Preference pref = findPreference(p.mKey);
+ // if (pref != null) {
+ // if (!p.isTwoState) {
+ // ((EditTextPreference) pref).setText(p.mValue);
+ // pref.setSummary(p.mValue);
+ // }
+ // } else {
+ // Log.w(TAG, "pref not found");
+ // }
+ // }
}
private void addPreferenceListener(AccountDetail details, OnPreferenceChangeListener listener) {
diff --git a/src/org/sflphone/loaders/AccountsLoader.java b/src/org/sflphone/loaders/AccountsLoader.java
index e4bf4ce..e5b85e3 100644
--- a/src/org/sflphone/loaders/AccountsLoader.java
+++ b/src/org/sflphone/loaders/AccountsLoader.java
@@ -35,15 +35,17 @@
try {
ArrayList<String> accountIDs = (ArrayList<String>) service.getAccountList();
HashMap<String, String> details;
+ ArrayList<HashMap<String, String>> credentials;
for (String id : accountIDs) {
if (id.contentEquals(ACCOUNT_IP2IP)) {
details = (HashMap<String, String>) service.getAccountDetails(id);
- IP2IP = new Account(ACCOUNT_IP2IP, details);
+ IP2IP = new Account(ACCOUNT_IP2IP, details, new ArrayList<HashMap<String, String>>()); // Empty credentials
continue;
}
details = (HashMap<String, String>) service.getAccountDetails(id);
- Account tmp = new Account(id, details);
+ credentials = (ArrayList<HashMap<String, String>>) service.getCredentials(id);
+ Account tmp = new Account(id, details, credentials);
accounts.add(tmp);
@@ -55,7 +57,7 @@
} catch (NullPointerException e1) {
Log.e(TAG, e1.toString());
}
-
+
Bundle result = new Bundle();
result.putParcelableArrayList(ACCOUNTS, accounts);
result.putParcelable(ACCOUNT_IP2IP, IP2IP);
diff --git a/src/org/sflphone/model/Account.java b/src/org/sflphone/model/Account.java
index 0a41479..5f1a93a 100644
--- a/src/org/sflphone/model/Account.java
+++ b/src/org/sflphone/model/Account.java
@@ -31,8 +31,10 @@
package org.sflphone.model;
+import java.util.ArrayList;
import java.util.HashMap;
+import org.sflphone.account.AccountCredentials;
import org.sflphone.account.AccountDetailAdvanced;
import org.sflphone.account.AccountDetailBasic;
import org.sflphone.account.AccountDetailSrtp;
@@ -48,13 +50,18 @@
private AccountDetailAdvanced advancedDetails = null;
private AccountDetailSrtp srtpDetails = null;
private AccountDetailTls tlsDetails = null;
+ private ArrayList<AccountCredentials> credentialsDetails;
- public Account(String bAccountID, HashMap<String, String> details) {
+ public Account(String bAccountID, HashMap<String, String> details, ArrayList<HashMap<String, String>> credentials) {
accountID = bAccountID;
basicDetails = new AccountDetailBasic(details);
advancedDetails = new AccountDetailAdvanced(details);
srtpDetails = new AccountDetailSrtp(details);
tlsDetails = new AccountDetailTls(details);
+ credentialsDetails = new ArrayList<AccountCredentials>();
+ for (int i = 0; i < credentials.size(); ++i) {
+ credentialsDetails.add(new AccountCredentials(credentials.get(i)));
+ }
}
public String getAccountID() {
@@ -106,6 +113,10 @@
dest.writeSerializable(advancedDetails.getDetailsHashMap());
dest.writeSerializable(tlsDetails.getDetailsHashMap());
dest.writeSerializable(srtpDetails.getDetailsHashMap());
+ dest.writeInt(credentialsDetails.size());
+ for (AccountCredentials cred : credentialsDetails) {
+ dest.writeSerializable(cred.getDetailsHashMap());
+ }
}
private void readFromParcel(Parcel in) {
@@ -115,6 +126,11 @@
advancedDetails = new AccountDetailAdvanced((HashMap<String, String>) in.readSerializable());
srtpDetails = new AccountDetailSrtp((HashMap<String, String>) in.readSerializable());
tlsDetails = new AccountDetailTls((HashMap<String, String>) in.readSerializable());
+ credentialsDetails = new ArrayList<AccountCredentials>();
+ int cred_count = in.readInt();
+ for (int i = 0; i < cred_count; ++i) {
+ credentialsDetails.add(new AccountCredentials((HashMap<String, String>) in.readSerializable()));
+ }
}
public static final Parcelable.Creator<Account> CREATOR = new Parcelable.Creator<Account>() {
@@ -162,8 +178,7 @@
}
public boolean isEnabled() {
- return (basicDetails.getDetailString(AccountDetailBasic.CONFIG_ACCOUNT_ENABLE)
- .contentEquals(AccountDetailBasic.CONFIG_ACCOUNT_DEFAULT_ENABLE));
+ return (basicDetails.getDetailString(AccountDetailBasic.CONFIG_ACCOUNT_ENABLE).contentEquals("true"));
}
public void setEnabled(boolean isChecked) {
@@ -194,4 +209,8 @@
return basicDetails.getDetailString(AccountDetailBasic.CONFIG_ACCOUNT_AUTOANSWER).contentEquals("true");
}
+ public ArrayList<AccountCredentials> getCredentials() {
+ return credentialsDetails;
+ }
+
}
diff --git a/src/org/sflphone/receivers/IncomingReceiver.java b/src/org/sflphone/receivers/IncomingReceiver.java
index 077be7c..6c9b8d2 100644
--- a/src/org/sflphone/receivers/IncomingReceiver.java
+++ b/src/org/sflphone/receivers/IncomingReceiver.java
@@ -12,6 +12,7 @@
import org.sflphone.model.SipMessage;
import org.sflphone.service.CallManagerCallBack;
import org.sflphone.service.ConfigurationManagerCallback;
+import org.sflphone.service.ISipService.Stub;
import org.sflphone.service.ServiceConstants;
import org.sflphone.service.SipService;
@@ -21,10 +22,6 @@
import android.os.Bundle;
import android.os.RemoteException;
import android.util.Log;
-import android.widget.Toast;
-
-import org.sflphone.service.ISipService.Stub;
-import org.sflphone.service.ServiceConstants.call;
public class IncomingReceiver extends BroadcastReceiver {
@@ -59,12 +56,11 @@
Log.i(TAG, "Received" + intent.getAction());
if (callback.getCurrent_calls().get(extra.getString("CallID")) != null) {
callback.getCurrent_calls().get(extra.get("CallID")).addSipMessage(new SipMessage(true, extra.getString("Msg")));
- } else if(callback.getCurrent_confs().get(extra.getString("CallID")) != null){
+ } else if (callback.getCurrent_confs().get(extra.getString("CallID")) != null) {
callback.getCurrent_confs().get(extra.get("CallID")).addSipMessage(new SipMessage(true, extra.getString("Msg")));
- } else
+ } else
return;
-
-
+
callback.sendBroadcast(intent);
} else if (intent.getAction().contentEquals(CallManagerCallBack.INCOMING_CALL)) {
@@ -74,7 +70,10 @@
Account acc;
try {
- acc = new Account(b.getString("AccountID"), (HashMap<String, String>) mBinder.getAccountDetails(b.getString("AccountID")));
+ HashMap<String, String> details = (HashMap<String, String>) mBinder.getAccountDetails(b.getString("AccountID"));
+ ArrayList<HashMap<String, String>> credentials = (ArrayList<HashMap<String, String>>) mBinder
+ .getCredentials(b.getString("AccountID"));
+ acc = new Account(b.getString("AccountID"), details, credentials);
callBuilder.startCallCreation(b.getString("CallID")).setAccount(acc).setCallState(SipCall.state.CALL_STATE_RINGING)
.setCallType(SipCall.state.CALL_TYPE_INCOMING);
callBuilder.setContact(CallContact.ContactBuilder.buildUnknownContact(b.getString("From")));
@@ -83,11 +82,11 @@
SipCall newCall = callBuilder.build();
toSend.putExtra("newcall", newCall);
- HashMap<String, String> details = (HashMap<String, String>) mBinder.getCallDetails(b.getString("CallID"));
- newCall.setTimestamp_start(Long.parseLong(details.get(ServiceConstants.call.TIMESTAMP_START)));
+ HashMap<String, String> callDetails = (HashMap<String, String>) mBinder.getCallDetails(b.getString("CallID"));
+ newCall.setTimestamp_start(Long.parseLong(callDetails.get(ServiceConstants.call.TIMESTAMP_START)));
callback.getCurrent_calls().put(newCall.getCallId(), newCall);
callback.sendBroadcast(toSend);
-
+
callback.mediaManager.obtainAudioFocus();
} catch (RemoteException e1) {
e1.printStackTrace();
@@ -116,7 +115,7 @@
callback.getCurrent_calls().get(b.getString("CallID")).setCallState(SipCall.state.CALL_STATE_RINGING);
} catch (NullPointerException e) {
if (callback.getCurrent_calls() == null) {
-
+
return;
}
if (callback.getCurrent_calls().get(b.getString("CallID")) == null) {
@@ -270,27 +269,27 @@
Log.i(TAG, "Received" + intent.getAction());
-// try {
-// if (callback.getCurrent_confs().get(intent.getStringExtra("id")) != null) {
-// callback.getCurrent_confs().get(intent.getStringExtra("id")).setRecording(mBinder.isRecording(intent.getStringExtra("id")));
-// } else if (callback.getCurrent_calls().get(intent.getStringExtra("id")) != null) {
-// callback.getCurrent_calls().get(intent.getStringExtra("id")).setRecording(mBinder.isRecording(intent.getStringExtra("id")));
-// } else {
-// // A call in a conference has been put on hold
-// Iterator<Conference> it = callback.getCurrent_confs().values().iterator();
-// while (it.hasNext()) {
-// Conference c = it.next();
-// if (c.getCall(intent.getStringExtra("id")) != null)
-// c.getCall(intent.getStringExtra("id")).setRecording(mBinder.isRecording(intent.getStringExtra("id")));
-// }
-// }
-// // Re sending the same intent to the app
-// callback.sendBroadcast(intent);
-// ;
-// } catch (RemoteException e) {
-// // TODO Auto-generated catch block
-// e.printStackTrace();
-// }
+ // try {
+ // if (callback.getCurrent_confs().get(intent.getStringExtra("id")) != null) {
+ // callback.getCurrent_confs().get(intent.getStringExtra("id")).setRecording(mBinder.isRecording(intent.getStringExtra("id")));
+ // } else if (callback.getCurrent_calls().get(intent.getStringExtra("id")) != null) {
+ // callback.getCurrent_calls().get(intent.getStringExtra("id")).setRecording(mBinder.isRecording(intent.getStringExtra("id")));
+ // } else {
+ // // A call in a conference has been put on hold
+ // Iterator<Conference> it = callback.getCurrent_confs().values().iterator();
+ // while (it.hasNext()) {
+ // Conference c = it.next();
+ // if (c.getCall(intent.getStringExtra("id")) != null)
+ // c.getCall(intent.getStringExtra("id")).setRecording(mBinder.isRecording(intent.getStringExtra("id")));
+ // }
+ // }
+ // // Re sending the same intent to the app
+ // callback.sendBroadcast(intent);
+ // ;
+ // } catch (RemoteException e) {
+ // // TODO Auto-generated catch block
+ // e.printStackTrace();
+ // }
}
diff --git a/src/org/sflphone/service/ISipService.aidl b/src/org/sflphone/service/ISipService.aidl
index 4a965d2..a953acf 100644
--- a/src/org/sflphone/service/ISipService.aidl
+++ b/src/org/sflphone/service/ISipService.aidl
@@ -21,6 +21,8 @@
Map getAccountDetails(in String accountID);
Map getAccountTemplate();
void setAccountDetails(in String accountId, in Map accountDetails);
+ List getCredentials(in String accountID);
+ void setCredentials(in String accountID, in List creds);
void setAudioPlugin(in String callID);
String getCurrentAudioOutputPlugin();
List getAudioCodecList(in String accountID);
diff --git a/src/org/sflphone/service/SipService.java b/src/org/sflphone/service/SipService.java
index 998e37f..9fe9f5b 100644
--- a/src/org/sflphone/service/SipService.java
+++ b/src/org/sflphone/service/SipService.java
@@ -550,7 +550,6 @@
public void setAccountDetails(final String accountId, final Map map) {
HashMap<String, String> nativemap = (HashMap<String, String>) map;
- Log.e(TAG,"CONFIG_ACCOUNT_REGISTRATION_EXPIRE:"+map.get(AccountDetailAdvanced.CONFIG_ACCOUNT_REGISTRATION_EXPIRE));
final StringMap swigmap = AccountDetailsHandler.convertFromNativeToSwig(nativemap);
getExecutor().execute(new SipRunnable() {
@@ -1301,6 +1300,37 @@
return (Boolean) runInstance.getVal();
}
+ @Override
+ public List getCredentials(final String accountID) throws RemoteException {
+ class Credentials extends SipRunnableWithReturn {
+
+ @Override
+ protected List doRun() throws SameThreadException {
+ Log.i(TAG, "SipService.getCredentials() thread running...");
+ VectMap map = configurationManagerJNI.getCredentials(accountID);
+ ArrayList<HashMap<String, String>> result = AccountDetailsHandler.convertCredentialsToNative(map);
+ return result;
+ }
+ }
+
+ Credentials runInstance = new Credentials();
+ getExecutor().execute(runInstance);
+ while (!runInstance.isDone()) {
+ }
+ return (List) runInstance.getVal();
+ }
+
+ @Override
+ public void setCredentials(final String accountID, final List creds) throws RemoteException {
+ getExecutor().execute(new SipRunnable() {
+ @Override
+ protected void doRun() throws SameThreadException, RemoteException {
+ Log.i(TAG, "SipService.setCredentials() thread running...");
+ configurationManagerJNI.setCredentials(accountID, AccountDetailsHandler.convertCredentialsToSwig(creds));;
+ }
+ });
+ }
+
};