Is it ok to save user defined preferences in another preference (comma separated) or is there a cleaner and better way?
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen
    xmlns:android="http://schemas.android.com/apk/res/android">
    <PreferenceCategory android:key="client" android:title="@string/client">
        <PreferenceScreen
            android:key="manage_sources"
            android:title="@string/manage_sources"
            android:persistent="false">
            <com.example.preference.EditSourcePreference
                android:key="add_source"
                android:title="@string/add_source"
                android:dialogTitle="@string/add_source" />
            <PreferenceCategory
                android:key="sources"
                android:title="@string/sources" />
        </PreferenceScreen>
    </PreferenceCategory>
</PreferenceScreen>
This is a nested PreferenceScreen providing a Preference for adding sources. Here's the Java Code:
public class EditSourcePreference extends EditTextPreference implements TextWatcher {
    private EditText source;
    private Button positiveButton;
    private String originalSource;
    public EditSourcePreference(Context context) {
        super(context);
    }
    public EditSourcePreference(Context context, AttributeSet attrs) {
        super(context, attrs);
    }
    @Override
    protected void showDialog(Bundle state) {
        super.showDialog(state);
        source = getEditText();
        source.addTextChangedListener(this);
        positiveButton = ((AlertDialog) getDialog()).getButton(AlertDialog.BUTTON_POSITIVE);
        afterTextChanged(source.getText());
        originalSource = source.getText().toString();
    }
    @Override
    protected void onDialogClosed(boolean positiveResult) {
        if (!positiveResult) {
            return;
        }
        SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(getContext());
        SharedPreferences.Editor editor = pref.edit();
        String sources = pref.getString("sources", ""),
                newSource = source.getText().toString();
        boolean append = sources.indexOf(originalSource) != -1; // TODO: needs debugging!!!
        if (append) {
            if (!"".equals(sources)) {
                sources += ";";
            }
            sources += newSource;
        } else {
            sources = sources.replace(originalSource, newSource);
        }
        editor.putString("sources", sources);
        editor.commit();
        super.onDialogClosed(positiveResult);
    }
    @Override
    public void beforeTextChanged(CharSequence s, int start, int count, int after) {
    }
    @Override
    public void onTextChanged(CharSequence s, int start, int before, int count) {
    }
    @Override
    public void afterTextChanged(Editable s) {
        positiveButton.setEnabled(s.toString().matches("^[a-z0-9_:/]+[.]+[a-z0-9_.:/]+$"));
    }
}
It should look like this and will be extended by editing and deleting entries:

 
     
     
     
     
    