* #31728: display loaded codecs in preferences
diff --git a/src/org/sflphone/client/AccountEditionActivity.java b/src/org/sflphone/client/AccountEditionActivity.java
index ac23ad8..acc282d 100644
--- a/src/org/sflphone/client/AccountEditionActivity.java
+++ b/src/org/sflphone/client/AccountEditionActivity.java
@@ -71,7 +71,7 @@
 import android.view.MenuInflater;
 import android.view.MenuItem;
 
-public class AccountEditionActivity extends Activity implements TabListener, EditionFragment.Callbacks {
+public class AccountEditionActivity extends Activity implements TabListener, EditionFragment.Callbacks, AudioManagementFragment.Callbacks {
     private static final String TAG = "AccoutPreferenceActivity";
 
     public static final String KEY_MODE = "mode";
@@ -387,4 +387,14 @@
         return tlsPreferenceList;
     }
 
+    @Override
+    public ISipService getService() {
+       return service;
+    }
+    
+    @Override
+    public String getAccountID(){
+        return mAccountID;
+    }
+
 }
diff --git a/src/org/sflphone/client/SFLPhoneHomeActivity.java b/src/org/sflphone/client/SFLPhoneHomeActivity.java
index 7cd295f..74ecfe4 100644
--- a/src/org/sflphone/client/SFLPhoneHomeActivity.java
+++ b/src/org/sflphone/client/SFLPhoneHomeActivity.java
@@ -393,11 +393,10 @@
 
         switch (requestCode) {
         case REQUEST_CODE_PREFERENCES:
-            Log.w(TAG, "In Activity");
-            fMenu.updateAllAccounts();
+            if(fMenu != null)
+                fMenu.updateAllAccounts();
             break;
         case REQUEST_CODE_CALL:
-            Log.w(TAG, "Result out of CallActivity");
             if (resultCode == CallActivity.RESULT_FAILURE) {
                 Log.w(TAG, "Call Failed");
             }
diff --git a/src/org/sflphone/fragments/AudioManagementFragment.java b/src/org/sflphone/fragments/AudioManagementFragment.java
index 396c4e9..b58ec29 100644
--- a/src/org/sflphone/fragments/AudioManagementFragment.java
+++ b/src/org/sflphone/fragments/AudioManagementFragment.java
@@ -32,223 +32,269 @@
 
 package org.sflphone.fragments;
 
+import java.util.ArrayList;
+
 import org.sflphone.R;
+import org.sflphone.model.Codec;
+import org.sflphone.service.ISipService;
+import org.sflphone.views.AudioCodecListPreference;
 
 import android.app.Activity;
+import android.app.AlertDialog.Builder;
 import android.content.Context;
 import android.content.res.TypedArray;
+import android.database.DataSetObserver;
 import android.os.Bundle;
-import android.preference.EditTextPreference;
+import android.os.RemoteException;
 import android.preference.ListPreference;
 import android.preference.Preference;
-import android.preference.PreferenceCategory;
 import android.preference.PreferenceFragment;
-import android.preference.PreferenceScreen;
 import android.util.AttributeSet;
+import android.util.Log;
 import android.view.View;
 import android.view.ViewGroup;
 import android.widget.LinearLayout;
+import android.widget.ListAdapter;
 import android.widget.SeekBar;
 import android.widget.SeekBar.OnSeekBarChangeListener;
 import android.widget.TextView;
 
-public class AudioManagementFragment extends PreferenceFragment
-{
-    static final String TAG = "PrefManagementFragment";
+public class AudioManagementFragment extends PreferenceFragment {
+    static final String TAG = "AudioManagementFragment";
 
-    public AudioManagementFragment()
-    {
+    protected Callbacks mCallbacks = sDummyCallbacks;
+    ArrayList<Codec> codecs;
+    private static Callbacks sDummyCallbacks = new Callbacks() {
+
+        @Override
+        public ISipService getService() {
+            return null;
+        }
+
+        @Override
+        public String getAccountID() {
+            return null;
+        }
+
+    };
+
+    public interface Callbacks {
+
+        public ISipService getService();
+
+        public String getAccountID();
+
     }
 
     @Override
-    public void onCreate(Bundle savedInstanceState)
-    {
+    public void onAttach(Activity activity) {
+        super.onAttach(activity);
+        if (!(activity instanceof Callbacks)) {
+            throw new IllegalStateException("Activity must implement fragment's callbacks.");
+        }
+
+        mCallbacks = (Callbacks) activity;
+        try {
+            codecs = (ArrayList<Codec>) mCallbacks.getService().getAudioCodecList(mCallbacks.getAccountID());
+        } catch (RemoteException e) {
+            e.printStackTrace();
+        }
+    }
+
+    @Override
+    public void onDetach() {
+        super.onDetach();
+        mCallbacks = sDummyCallbacks;
+    }
+
+    @Override
+    public void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
 
         addPreferencesFromResource(R.xml.audio_prefs);
+        
+        ((AudioCodecListPreference)getPreferenceManager().findPreference("Audio.codec")).setList(codecs);
+        
+        
     }
 
     Preference.OnPreferenceChangeListener changePreferenceListener = new Preference.OnPreferenceChangeListener() {
         public boolean onPreferenceChange(Preference preference, Object newValue) {
-            preference.setSummary((CharSequence)newValue);
+            preference.setSummary((CharSequence) newValue);
             return true;
         }
     };
 
-//    public PreferenceScreen getAudioPreferenceScreen()
-//    {
-//        Activity currentContext = getActivity();
-//
-//        PreferenceScreen root = getPreferenceManager().createPreferenceScreen(currentContext);
-//
-//        PreferenceCategory audioPrefCat = new PreferenceCategory(currentContext);
-//        audioPrefCat.setTitle(R.string.audio_preferences);
-//        root.addPreference(audioPrefCat);
-//
-//        // Codec List
-//        ListPreference codecListPref = new ListPreference(currentContext);
-//        codecListPref.setEntries(R.array.audio_codec_list);
-//        codecListPref.setEntryValues(R.array.audio_codec_list_value);
-//        codecListPref.setDialogTitle(R.string.dialogtitle_audio_codec_list);
-//        codecListPref.setPersistent(false);
-//        codecListPref.setTitle(R.string.title_audio_codec_list);
-//        codecListPref.setSummary("PCMU");
-//        codecListPref.setOnPreferenceChangeListener(changePreferenceListener);
-//        audioPrefCat.addPreference(codecListPref);
-//
-//        // Ringtone
-//        EditTextPreference audioRingtonePref = new EditTextPreference(currentContext);
-//        audioRingtonePref.setDialogTitle(R.string.dialogtitle_audio_ringtone_field);
-//        audioRingtonePref.setPersistent(false);
-//        audioRingtonePref.setTitle(R.string.title_audio_ringtone_field);
-//        audioRingtonePref.setSummary("path/to/ringtone");
-//        audioRingtonePref.setOnPreferenceChangeListener(changePreferenceListener);
-//        audioPrefCat.addPreference(audioRingtonePref);
-//
-//        // Speaker volume seekbar
-//        SeekBarPreference speakerSeekBarPref = new SeekBarPreference(currentContext);
-//        speakerSeekBarPref.setPersistent(false);
-//        speakerSeekBarPref.setTitle("Speaker Volume");
-//        speakerSeekBarPref.setProgress(50);
-//        speakerSeekBarPref.setSummary(speakerSeekBarPref.getProgress());
-//        audioPrefCat.addPreference(speakerSeekBarPref);
-//
-//        // Capture volume seekbar
-//        SeekBarPreference captureSeekBarPref = new SeekBarPreference(currentContext);
-//        captureSeekBarPref.setPersistent(false);
-//        captureSeekBarPref.setTitle("Capture Volume");
-//        captureSeekBarPref.setProgress(50);
-//        captureSeekBarPref.setSummary(captureSeekBarPref.getProgress());
-//        audioPrefCat.addPreference(captureSeekBarPref);
-//
-//        // Ringtone volume seekbar
-//        SeekBarPreference ringtoneSeekBarPref = new SeekBarPreference(currentContext);
-//        ringtoneSeekBarPref.setPersistent(false);
-//        ringtoneSeekBarPref.setTitle("Ringtone Volume");
-//        ringtoneSeekBarPref.setProgress(50);
-//        ringtoneSeekBarPref.setSummary(ringtoneSeekBarPref.getProgress());
-//        audioPrefCat.addPreference(ringtoneSeekBarPref);
-//
-//        return root;
-//    }
+    // public PreferenceScreen getAudioPreferenceScreen()
+    // {
+    // Activity currentContext = getActivity();
+    //
+    // PreferenceScreen root = getPreferenceManager().createPreferenceScreen(currentContext);
+    //
+    // PreferenceCategory audioPrefCat = new PreferenceCategory(currentContext);
+    // audioPrefCat.setTitle(R.string.audio_preferences);
+    // root.addPreference(audioPrefCat);
+    //
+    // // Codec List
+    // ListPreference codecListPref = new ListPreference(currentContext);
+    // codecListPref.setEntries(R.array.audio_codec_list);
+    // codecListPref.setEntryValues(R.array.audio_codec_list_value);
+    // codecListPref.setDialogTitle(R.string.dialogtitle_audio_codec_list);
+    // codecListPref.setPersistent(false);
+    // codecListPref.setTitle(R.string.title_audio_codec_list);
+    // codecListPref.setSummary("PCMU");
+    // codecListPref.setOnPreferenceChangeListener(changePreferenceListener);
+    // audioPrefCat.addPreference(codecListPref);
+    //
+    // // Ringtone
+    // EditTextPreference audioRingtonePref = new EditTextPreference(currentContext);
+    // audioRingtonePref.setDialogTitle(R.string.dialogtitle_audio_ringtone_field);
+    // audioRingtonePref.setPersistent(false);
+    // audioRingtonePref.setTitle(R.string.title_audio_ringtone_field);
+    // audioRingtonePref.setSummary("path/to/ringtone");
+    // audioRingtonePref.setOnPreferenceChangeListener(changePreferenceListener);
+    // audioPrefCat.addPreference(audioRingtonePref);
+    //
+    // // Speaker volume seekbar
+    // SeekBarPreference speakerSeekBarPref = new SeekBarPreference(currentContext);
+    // speakerSeekBarPref.setPersistent(false);
+    // speakerSeekBarPref.setTitle("Speaker Volume");
+    // speakerSeekBarPref.setProgress(50);
+    // speakerSeekBarPref.setSummary(speakerSeekBarPref.getProgress());
+    // audioPrefCat.addPreference(speakerSeekBarPref);
+    //
+    // // Capture volume seekbar
+    // SeekBarPreference captureSeekBarPref = new SeekBarPreference(currentContext);
+    // captureSeekBarPref.setPersistent(false);
+    // captureSeekBarPref.setTitle("Capture Volume");
+    // captureSeekBarPref.setProgress(50);
+    // captureSeekBarPref.setSummary(captureSeekBarPref.getProgress());
+    // audioPrefCat.addPreference(captureSeekBarPref);
+    //
+    // // Ringtone volume seekbar
+    // SeekBarPreference ringtoneSeekBarPref = new SeekBarPreference(currentContext);
+    // ringtoneSeekBarPref.setPersistent(false);
+    // ringtoneSeekBarPref.setTitle("Ringtone Volume");
+    // ringtoneSeekBarPref.setProgress(50);
+    // ringtoneSeekBarPref.setSummary(ringtoneSeekBarPref.getProgress());
+    // audioPrefCat.addPreference(ringtoneSeekBarPref);
+    //
+    // return root;
+    // }
 
-    public class SeekBarPreference extends Preference implements OnSeekBarChangeListener
-    {
+    
+
+    public class SeekBarPreference extends Preference implements OnSeekBarChangeListener {
         private SeekBar seekbar;
         private int progress;
         private int max = 100;
         private TextView summary;
         private boolean discard;
 
-        public SeekBarPreference (Context context)
-        {
-            super( context );
+        public SeekBarPreference(Context context) {
+            super(context);
         }
 
-        public SeekBarPreference (Context context, AttributeSet attrs)
-        {
-            super( context, attrs );
+        public SeekBarPreference(Context context, AttributeSet attrs) {
+            super(context, attrs);
         }
 
-        public SeekBarPreference (Context context, AttributeSet attrs, int defStyle)
-        {
-            super( context, attrs, defStyle );
+        public SeekBarPreference(Context context, AttributeSet attrs, int defStyle) {
+            super(context, attrs, defStyle);
         }
 
-        protected View onCreateView (ViewGroup p)
-        {
+        protected View onCreateView(ViewGroup p) {
             final Context ctx = getContext();
 
-            LinearLayout layout = new LinearLayout( ctx );
-            layout.setId( android.R.id.widget_frame );
-            layout.setOrientation( LinearLayout.VERTICAL );
+            LinearLayout layout = new LinearLayout(ctx);
+            layout.setId(android.R.id.widget_frame);
+            layout.setOrientation(LinearLayout.VERTICAL);
             layout.setPadding(65, 10, 15, 10);
 
-            TextView title = new TextView( ctx );
+            TextView title = new TextView(ctx);
             int textColor = title.getCurrentTextColor();
-            title.setId( android.R.id.title );
+            title.setId(android.R.id.title);
             title.setSingleLine();
-            title.setTextAppearance( ctx, android.R.style.TextAppearance_Medium );
-            title.setTextColor( textColor );
-            layout.addView( title );
+            title.setTextAppearance(ctx, android.R.style.TextAppearance_Medium);
+            title.setTextColor(textColor);
+            layout.addView(title);
 
-            summary = new TextView( ctx );
-            summary.setId( android.R.id.summary );
+            summary = new TextView(ctx);
+            summary.setId(android.R.id.summary);
             summary.setSingleLine();
-            summary.setTextAppearance( ctx, android.R.style.TextAppearance_Small );
-            summary.setTextColor( textColor );
-            layout.addView( summary );
+            summary.setTextAppearance(ctx, android.R.style.TextAppearance_Small);
+            summary.setTextColor(textColor);
+            layout.addView(summary);
 
-            seekbar = new SeekBar( ctx );
-            seekbar.setId( android.R.id.progress );
-            seekbar.setMax( max );
-            seekbar.setOnSeekBarChangeListener( this );
-            layout.addView( seekbar );
+            seekbar = new SeekBar(ctx);
+            seekbar.setId(android.R.id.progress);
+            seekbar.setMax(max);
+            seekbar.setOnSeekBarChangeListener(this);
+            layout.addView(seekbar);
 
             return layout;
         }
 
         @Override
-        protected void onBindView (View view)
-        {
-            super.onBindView( view );
+        protected void onBindView(View view) {
+            super.onBindView(view);
 
             if (seekbar != null)
-                seekbar.setProgress( progress );
+                seekbar.setProgress(progress);
         }
 
-        public void setProgress (int pcnt) {
+        public void setProgress(int pcnt) {
             if (progress != pcnt) {
-                persistInt( progress = pcnt );
+                persistInt(progress = pcnt);
 
-                notifyDependencyChange( shouldDisableDependents() );
+                notifyDependencyChange(shouldDisableDependents());
                 notifyChanged();
             }
         }
 
-        public int getProgress () {
+        public int getProgress() {
             return progress;
         }
 
-        public void setMax (int max) {
+        public void setMax(int max) {
             this.max = max;
             if (seekbar != null)
-                seekbar.setMax( max );
+                seekbar.setMax(max);
         }
 
         @Override
-        protected Object onGetDefaultValue (TypedArray a, int index) {
-            return a.getInt( index, progress );
+        protected Object onGetDefaultValue(TypedArray a, int index) {
+            return a.getInt(index, progress);
         }
 
         @Override
-        protected void onSetInitialValue (boolean restoreValue, Object defaultValue) {
-            setProgress( restoreValue ? getPersistedInt( progress ) : (Integer)defaultValue );
+        protected void onSetInitialValue(boolean restoreValue, Object defaultValue) {
+            setProgress(restoreValue ? getPersistedInt(progress) : (Integer) defaultValue);
         }
 
         @Override
-        public boolean shouldDisableDependents () {
+        public boolean shouldDisableDependents() {
             return progress == 0 || super.shouldDisableDependents();
         }
 
-        public void onProgressChanged (SeekBar seekBar, int progress, boolean fromUser) {
-            discard = !callChangeListener( progress );
-            summary.setText(progress); 
+        public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
+            discard = !callChangeListener(progress);
+            summary.setText(progress);
         }
 
-        public void onStartTrackingTouch (SeekBar seekBar) {
+        public void onStartTrackingTouch(SeekBar seekBar) {
             discard = false;
         }
 
-        public void onStopTrackingTouch (SeekBar seekBar) {
+        public void onStopTrackingTouch(SeekBar seekBar) {
             if (discard)
-                seekBar.setProgress( progress );
+                seekBar.setProgress(progress);
             else {
-                setProgress( seekBar.getProgress() );
+                setProgress(seekBar.getProgress());
 
-//                OnPreferenceChangeListener listener = getOnPreferenceChangeListener();
-                //if (listener instanceof AbstractSeekBarListener)
-                ////        setSummary( ((AbstractSeekBarListener)listener).toSummary( seekBar.getProgress() ) );
+                // OnPreferenceChangeListener listener = getOnPreferenceChangeListener();
+                // if (listener instanceof AbstractSeekBarListener)
+                // // setSummary( ((AbstractSeekBarListener)listener).toSummary( seekBar.getProgress() ) );
             }
         }
     }
diff --git a/src/org/sflphone/model/Codec.java b/src/org/sflphone/model/Codec.java
new file mode 100644
index 0000000..a2b38ab
--- /dev/null
+++ b/src/org/sflphone/model/Codec.java
@@ -0,0 +1,84 @@
+package org.sflphone.model;
+
+import java.util.ArrayList;
+
+import org.sflphone.service.StringVect;
+
+import android.os.Parcel;
+import android.os.Parcelable;
+
+public class Codec implements Parcelable {
+    int payload;
+    String name;
+    String sampleRate;
+    String bitRate;
+    String channels;
+
+    public Codec(int i, StringVect audioCodecDetails) {
+        payload = i;
+        name = audioCodecDetails.get(0);
+        sampleRate = audioCodecDetails.get(1);
+        bitRate = audioCodecDetails.get(2);
+        channels = audioCodecDetails.get(3);
+    }
+
+    @Override
+    public int describeContents() {
+        return 0;
+    }
+
+    @Override
+    public void writeToParcel(Parcel out, int flags) {
+        out.writeInt(payload);
+        out.writeString(name);
+        out.writeString(sampleRate);
+        out.writeString(bitRate);
+        out.writeString(channels);
+    }
+
+    public static final Parcelable.Creator<Codec> CREATOR = new Parcelable.Creator<Codec>() {
+        public Codec createFromParcel(Parcel in) {
+            return new Codec(in);
+        }
+
+        public Codec[] newArray(int size) {
+            return new Codec[size];
+        }
+    };
+
+    private Codec(Parcel in) {
+        payload = in.readInt();
+        name = in.readString();
+        sampleRate = in.readString();
+        bitRate = in.readString();
+        channels = in.readString();
+    }
+
+    @Override
+    public String toString() {
+        String str = "Codec: " + name + "\n" + "Payload: " + payload + "\n" + "Sample Rate: " + sampleRate + "\n" + "Bit Rate: " + bitRate + "\n"
+                + "Channels: " + channels;
+        return str;
+    }
+
+    public CharSequence getPayload() {
+        return Integer.toString(payload);
+    }
+
+    public CharSequence getName() {
+        return name;
+    }
+
+    public String getSampleRate() {
+        return sampleRate;
+    }
+
+    public String getBitRate() {
+        return bitRate;
+    }
+
+    public String getChannels() {
+        return channels;
+    }
+
+}
diff --git a/src/org/sflphone/service/SipService.java b/src/org/sflphone/service/SipService.java
index cd403e1..003b29e 100644
--- a/src/org/sflphone/service/SipService.java
+++ b/src/org/sflphone/service/SipService.java
@@ -40,6 +40,7 @@
 import org.sflphone.account.CallDetailsHandler;
 import org.sflphone.account.HistoryHandler;
 import org.sflphone.client.SFLPhoneHomeActivity;
+import org.sflphone.model.Codec;
 import org.sflphone.model.Conference;
 import org.sflphone.model.SipCall;
 import org.sflphone.receivers.IncomingReceiver;
@@ -61,6 +62,7 @@
 import android.support.v4.app.NotificationCompat;
 import android.support.v4.content.LocalBroadcastManager;
 import android.util.Log;
+import android.widget.Toast;
 
 public class SipService extends Service {
 
@@ -1026,21 +1028,22 @@
             class AudioCodecList extends SipRunnableWithReturn {
 
                 @Override
-                protected IntVect doRun() throws SameThreadException {
+                protected ArrayList<Codec> doRun() throws SameThreadException {
                     Log.i(TAG, "SipService.getAudioCodecList() thread running...");
-                    return configurationManagerJNI.getAudioCodecList();
+                    ArrayList<Codec> results = new ArrayList<Codec>();
+                    IntVect payloads = configurationManagerJNI.getAudioCodecList();
+                    for(int i = 0; i < payloads.size() ; ++i ){
+                        results.add(new Codec(payloads.get(i), configurationManagerJNI.getAudioCodecDetails(payloads.get(i))));
+                    }
+                    return results;
                 }
             }
 
             AudioCodecList runInstance = new AudioCodecList();
             getExecutor().execute(runInstance);
             while (!runInstance.isDone()) {
-                Log.w(TAG, "Waiting for getAudioCodecList");
             }
-            IntVect swigmap = (IntVect) runInstance.getVal();
-
-            ArrayList<Integer> codecs = AudioHandler.convertSwigToNative(swigmap);
-
+            ArrayList<Codec> codecs = (ArrayList<Codec>) runInstance.getVal();
             return codecs;
         }
 
diff --git a/src/org/sflphone/views/AudioCodecListPreference.java b/src/org/sflphone/views/AudioCodecListPreference.java
new file mode 100644
index 0000000..8f28058
--- /dev/null
+++ b/src/org/sflphone/views/AudioCodecListPreference.java
@@ -0,0 +1,158 @@
+package org.sflphone.views;
+
+import java.util.ArrayList;
+
+import org.sflphone.R;
+import org.sflphone.model.Codec;
+
+import android.app.AlertDialog.Builder;
+import android.content.Context;
+import android.preference.DialogPreference;
+import android.util.AttributeSet;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.BaseAdapter;
+import android.widget.CheckBox;
+import android.widget.TextView;
+
+public class AudioCodecListPreference extends DialogPreference {
+
+    CodecAdapter listAdapter;
+
+    public AudioCodecListPreference(Context context, AttributeSet attrs) {
+        super(context, attrs);
+        listAdapter = new CodecAdapter(getContext());
+
+    }
+
+    @Override
+    protected void onPrepareDialogBuilder(Builder builder) {
+
+        builder.setAdapter(listAdapter, this);
+        super.onPrepareDialogBuilder(builder);
+    }
+
+    private static class CodecAdapter extends BaseAdapter {
+
+        ArrayList<Codec> items;
+        private Context mContext;
+
+        public CodecAdapter(Context context) {
+            
+            mContext = context;
+        }
+
+        @Override
+        public int getCount() {
+            return items.size();
+        }
+
+        @Override
+        public Codec getItem(int position) {
+            return items.get(position);
+        }
+
+        @Override
+        public long getItemId(int position) {
+            return 0;
+        }
+
+        @Override
+        public int getItemViewType(int position) {
+            return 0;
+        }
+
+        @Override
+        public View getView(int pos, View convertView, ViewGroup parent) {
+            View rowView = convertView;
+            CodecView entryView = null;
+
+            if (rowView == null) {
+                LayoutInflater inflater = LayoutInflater.from(mContext);
+                rowView = inflater.inflate(R.layout.item_codec, null);
+
+                entryView = new CodecView();
+                entryView.name = (TextView) rowView.findViewById(R.id.codec_name);
+                entryView.bitrate = (TextView) rowView.findViewById(R.id.codec_bitrate);
+                entryView.samplerate = (TextView) rowView.findViewById(R.id.codec_samplerate);
+                entryView.channels = (TextView) rowView.findViewById(R.id.codec_channels);
+                entryView.enabled = (CheckBox) rowView.findViewById(R.id.codec_checked);
+                rowView.setTag(entryView);
+            } else {
+                entryView = (CodecView) rowView.getTag();
+            }
+
+            entryView.name.setText(items.get(pos).getName());
+            entryView.samplerate.setText(items.get(pos).getSampleRate());
+            entryView.bitrate.setText(items.get(pos).getBitRate());
+            entryView.channels.setText(items.get(pos).getChannels());
+            
+//            entryView.enabled.setChecked(items.get(pos).isEnabled());
+
+//            entryView.enabled.setOnCheckedChangeListener(new OnCheckedChangeListener() {
+//
+//                @Override
+//                public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
+//                    items.get(pos).setEnabled(isChecked);
+//
+//                    try {
+//                        mCallbacks.getService().setAccountDetails(accounts.get(pos).getAccountID(), accounts.get(pos).getDetails());
+//                    } catch (RemoteException e) {
+//                        e.printStackTrace();
+//                    }
+//                }
+//            });
+            
+            return rowView;
+
+        }
+
+        @Override
+        public int getViewTypeCount() {
+            return 1;
+        }
+
+        @Override
+        public boolean hasStableIds() {
+            return true;
+        }
+
+        @Override
+        public boolean isEmpty() {
+            return getCount() == 0;
+        }
+
+        @Override
+        public boolean areAllItemsEnabled() {
+            return true;
+        }
+
+        @Override
+        public boolean isEnabled(int position) {
+            return true;
+        }
+
+        public void setDataset(ArrayList<Codec> codecs) {
+            items = new ArrayList<Codec>(codecs);
+        }
+        
+        /*********************
+         * ViewHolder Pattern
+         *********************/
+        public class CodecView {
+            public TextView name;
+            public TextView samplerate;
+            public TextView bitrate;
+            public TextView channels;
+            public CheckBox enabled;
+        }
+
+    }
+
+    public void setList(ArrayList<Codec> codecs) {
+        listAdapter.setDataset(codecs);
+        listAdapter.notifyDataSetChanged();
+    }
+
+}