* #36392: ringtone activable in settings
This commit also activates the DTMF route type (SIP or RTP)
diff --git a/src/org/sflphone/client/AccountEditionActivity.java b/src/org/sflphone/client/AccountEditionActivity.java
index b8b71b5..bbd970d 100644
--- a/src/org/sflphone/client/AccountEditionActivity.java
+++ b/src/org/sflphone/client/AccountEditionActivity.java
@@ -314,11 +314,6 @@
}
@Override
- public String getAccountID() {
- return acc_selected.getAccountID();
- }
-
- @Override
public Account getAccount() {
return acc_selected;
}
diff --git a/src/org/sflphone/fragments/AdvancedAccountFragment.java b/src/org/sflphone/fragments/AdvancedAccountFragment.java
index 6600f47..5581b03 100644
--- a/src/org/sflphone/fragments/AdvancedAccountFragment.java
+++ b/src/org/sflphone/fragments/AdvancedAccountFragment.java
@@ -23,8 +23,6 @@
private static final String TAG = AdvancedAccountFragment.class.getSimpleName();
- private boolean isDifferent = false;
-
private Callbacks mCallbacks = sDummyCallbacks;
private static Callbacks sDummyCallbacks = new Callbacks() {
@@ -141,13 +139,13 @@
findPreference("Account.publishedPort").setEnabled(!(Boolean) newValue);
findPreference("Account.publishedAddress").setEnabled(!(Boolean) newValue);
}
- mCallbacks.getAccount().notifyObservers();
} else {
preference.setSummary((CharSequence) newValue);
Log.i(TAG, "Changing" + preference.getKey() + " value:" + newValue);
mCallbacks.getAccount().getAdvancedDetails().setDetailString(preference.getKey(), ((CharSequence) newValue).toString());
- mCallbacks.getAccount().notifyObservers();
}
+
+ mCallbacks.getAccount().notifyObservers();
return true;
}
};
diff --git a/src/org/sflphone/fragments/AudioManagementFragment.java b/src/org/sflphone/fragments/AudioManagementFragment.java
index 8539ba5..25b1c4e 100644
--- a/src/org/sflphone/fragments/AudioManagementFragment.java
+++ b/src/org/sflphone/fragments/AudioManagementFragment.java
@@ -35,6 +35,8 @@
import java.util.ArrayList;
import org.sflphone.R;
+import org.sflphone.account.AccountDetail;
+import org.sflphone.model.Account;
import org.sflphone.model.Codec;
import org.sflphone.service.ISipService;
import org.sflphone.views.dragsortlv.DragSortListView;
@@ -43,12 +45,15 @@
import android.content.Context;
import android.os.Bundle;
import android.os.RemoteException;
+import android.preference.CheckBoxPreference;
import android.preference.Preference;
+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;
import android.view.View.MeasureSpec;
+import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.BaseAdapter;
@@ -73,7 +78,7 @@
}
@Override
- public String getAccountID() {
+ public Account getAccount() {
return null;
}
@@ -83,7 +88,7 @@
public ISipService getService();
- public String getAccountID();
+ public Account getAccount();
}
@@ -96,7 +101,7 @@
mCallbacks = (Callbacks) activity;
try {
- codecs = (ArrayList<Codec>) mCallbacks.getService().getAudioCodecList(mCallbacks.getAccountID());
+ codecs = (ArrayList<Codec>) mCallbacks.getService().getAudioCodecList(mCallbacks.getAccount().getAccountID());
mCallbacks.getService().getRingtoneList();
} catch (RemoteException e) {
e.printStackTrace();
@@ -117,7 +122,7 @@
listAdapter.remove(item);
listAdapter.insert(item, to);
try {
- mCallbacks.getService().setActiveCodecList(getActiveCodecList(), mCallbacks.getAccountID());
+ mCallbacks.getService().setActiveCodecList(getActiveCodecList(), mCallbacks.getAccount().getAccountID());
} catch (RemoteException e) {
e.printStackTrace();
}
@@ -125,6 +130,8 @@
}
};
+ private ListView mPrefsList;
+
public ArrayList<String> getActiveCodecList() {
ArrayList<String> results = new ArrayList<String>();
for (int i = 0; i < listAdapter.getCount(); ++i) {
@@ -139,6 +146,8 @@
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
super.onCreateView(inflater, container, savedInstanceState);
View rootView = LayoutInflater.from(getActivity()).inflate(R.layout.frag_audio_mgmt, null);
+
+ mPrefsList = (ListView) rootView.findViewById(android.R.id.list);
mCodecList = (DragSortListView) rootView.findViewById(R.id.dndlistview);
mCodecList.setAdapter(listAdapter);
mCodecList.setDropListener(onDrop);
@@ -149,7 +158,7 @@
listAdapter.getItem(pos).toggleState();
listAdapter.notifyDataSetChanged();
try {
- mCallbacks.getService().setActiveCodecList(getActiveCodecList(), mCallbacks.getAccountID());
+ mCallbacks.getService().setActiveCodecList(getActiveCodecList(), mCallbacks.getAccount().getAccountID());
} catch (RemoteException e) {
e.printStackTrace();
}
@@ -163,11 +172,13 @@
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
final LinearLayout holder = (LinearLayout) getView().findViewById(R.id.lv_holder);
+ final LinearLayout holder_prefs = (LinearLayout) getView().findViewById(R.id.lv_holder_prefs);
holder.post(new Runnable() {
@Override
public void run() {
setListViewHeight(mCodecList, holder);
+ setListViewHeight(mPrefsList, holder_prefs);
}
});
@@ -185,20 +196,18 @@
int desiredWidth = MeasureSpec.makeMeasureSpec(listView.getWidth(), MeasureSpec.AT_MOST);
for (int i = 0; i < listAdapter.getCount(); i++) {
-
- if (i == 0) {
- View listItem = listAdapter.getView(i, null, listView);
- listItem.measure(desiredWidth, MeasureSpec.UNSPECIFIED);
- firstHeight = listItem.getMeasuredHeight();
- }
+ View listItem = listAdapter.getView(i, null, listView);
+ listItem.measure(desiredWidth, MeasureSpec.UNSPECIFIED);
+ firstHeight = listItem.getMeasuredHeight();
totalHeight += firstHeight;
}
- // totalHeight -= iv.getMeasuredHeight();
+ totalHeight += getView().findViewById(R.id.list_header_title).getMeasuredHeight();
+ Log.w(TAG, "totalHeight:" + totalHeight);
LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) llMain.getLayoutParams();
- params.height = totalHeight + (listView.getDividerHeight() * (listAdapter.getCount() - 1));
+ params.height = totalHeight + (listView.getDividerHeight() * (listAdapter.getCount()));
llMain.setLayoutParams(params);
getView().requestLayout();
}
@@ -210,15 +219,81 @@
addPreferencesFromResource(R.xml.account_audio_prefs);
listAdapter = new CodecAdapter(getActivity());
listAdapter.setDataset(codecs);
+
+ setPreferenceDetails(mCallbacks.getAccount().getAdvancedDetails());
+ addPreferenceListener(mCallbacks.getAccount().getAdvancedDetails(), changeAudioPreferenceListener);
}
- Preference.OnPreferenceChangeListener changePreferenceListener = new Preference.OnPreferenceChangeListener() {
+ Preference.OnPreferenceChangeListener changeAudioPreferenceListener = new Preference.OnPreferenceChangeListener() {
+ @Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
- preference.setSummary((CharSequence) newValue);
+ if (preference instanceof CheckBoxPreference) {
+ mCallbacks.getAccount().getAdvancedDetails().setDetailString(preference.getKey(), ((Boolean) newValue).toString());
+ } else {
+ preference.setSummary((CharSequence) newValue);
+ Log.i(TAG, "Changing" + preference.getKey() + " value:" + newValue);
+ mCallbacks.getAccount().getAdvancedDetails().setDetailString(preference.getKey(), ((CharSequence) newValue).toString());
+ }
+ mCallbacks.getAccount().notifyObservers();
+
return true;
}
};
+ Preference.OnPreferenceChangeListener changePreferenceListener = new Preference.OnPreferenceChangeListener() {
+ public boolean onPreferenceChange(Preference preference, Object newValue) {
+
+ if (preference instanceof CheckBoxPreference) {
+ mCallbacks.getAccount().getAdvancedDetails().setDetailString(preference.getKey(), ((Boolean) newValue).toString());
+ } else {
+ preference.setSummary((CharSequence) newValue);
+ Log.i(TAG, "Changing" + preference.getKey() + " value:" + newValue);
+ mCallbacks.getAccount().getAdvancedDetails().setDetailString(preference.getKey(), ((CharSequence) newValue).toString());
+
+ }
+
+ mCallbacks.getAccount().notifyObservers();
+ return true;
+ }
+ };
+
+ 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) {
+ if (p.mKey.contentEquals("Account.dtmfType")){
+ pref.setDefaultValue(p.mValue.contentEquals("overrtp") ? "RTP" : "SIP");
+ pref.setSummary(p.mValue);
+ } else {
+ pref.setSummary(p.mValue);
+ }
+
+ } else {
+ ((CheckBoxPreference) pref).setChecked(p.mValue.contentEquals("true"));
+ }
+
+ } else {
+ Log.w(TAG, "pref not found");
+ }
+ }
+ }
+
+ private void addPreferenceListener(AccountDetail details, OnPreferenceChangeListener listener) {
+ for (AccountDetail.PreferenceEntry p : details.getDetailValues()) {
+ Log.i(TAG, "addPreferenceListener: pref " + p.mKey + p.mValue);
+ Preference pref = findPreference(p.mKey);
+ if (pref != null) {
+
+ pref.setOnPreferenceChangeListener(listener);
+
+ } else {
+ Log.w(TAG, "addPreferenceListener: pref not found");
+ }
+ }
+ }
+
public static class CodecAdapter extends BaseAdapter {
ArrayList<Codec> items;
diff --git a/src/org/sflphone/utils/SwigNativeConverter.java b/src/org/sflphone/utils/SwigNativeConverter.java
index 522eb93..7d8817a 100644
--- a/src/org/sflphone/utils/SwigNativeConverter.java
+++ b/src/org/sflphone/utils/SwigNativeConverter.java
@@ -13,6 +13,8 @@
import org.sflphone.service.StringMap;
import org.sflphone.service.VectMap;
+import android.util.Log;
+
public class SwigNativeConverter {
/**
@@ -24,7 +26,10 @@
Set<String> keys = nativemap.keySet();
for (String key : keys) {
- swigmap.set(key, nativemap.get(key));
+ if (nativemap.get(key) == null) {
+ swigmap.set(key, "");
+ } else
+ swigmap.set(key, nativemap.get(key));
}
return swigmap;
}