package com.todoroo.astrid.service;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import android.os.Bundle;
import android.preference.CheckBoxPreference;
import android.preference.Preference;
import android.preference.Preference.OnPreferenceChangeListener;
import android.preference.PreferenceActivity;
import com.timsu.astrid.R;
import com.todoroo.andlib.utility.Preferences;
public class UpdateMessagePreference extends PreferenceActivity {
public static final String TOKEN_PREFS_ARRAY = "prefs_array"; //$NON-NLS-1$
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.preferences_blank);
String prefsArray = getIntent().getStringExtra(TOKEN_PREFS_ARRAY);
try {
JSONArray array = new JSONArray(prefsArray);
if (array.length() == 0)
finish();
for (int i = 0; i < array.length(); i++) {
try {
JSONObject pref = array.getJSONObject(i);
addPreferenceFromJSON(pref);
} catch (JSONException e) {
continue;
}
}
} catch (JSONException e) {
finish();
}
}
@SuppressWarnings("nls")
private void addPreferenceFromJSON(JSONObject obj) {
String type = obj.optString("type", null);
String key = obj.optString("key", null);
String title = obj.optString("title", null);
if (type == null || key == null || title == null)
return;
Preference pref = null;
if ("bool".equals(type)) { // We can add other types we want to support and handle the preference construction here
pref = new CheckBoxPreference(this);
pref.setKey(key);
pref.setTitle(title);
pref.setDefaultValue(Preferences.getBoolean(key, false));
}
if (pref == null)
return;
if (obj.optBoolean("restart")) {
pref.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
setResult(RESULT_OK);
return true;
}
});
}
getPreferenceScreen().addPreference(pref);
}
}