/**
* Copyright (c) 2012 Todoroo Inc
*
* See the file "LICENSE" for the full license governing this code.
*/
package com.todoroo.andlib.utility;
/**
* Copyright (c) 2012 Todoroo Inc
*
* See the file "LICENSE" for the full license governing this code.
*/
import android.content.SharedPreferences;
import android.os.Bundle;
import android.preference.CheckBoxPreference;
import android.preference.EditTextPreference;
import android.preference.ListPreference;
import android.preference.Preference;
import android.preference.Preference.OnPreferenceChangeListener;
import android.preference.PreferenceActivity;
import android.preference.PreferenceGroup;
import android.preference.RingtonePreference;
import com.todoroo.andlib.service.ContextManager;
/**
* Displays a preference screen for users to edit their preferences. Override
* updatePreferences to update the summary with preference values.
*
* @author Tim Su <tim@todoroo.com>
*
*/
abstract public class TodorooPreferenceActivity extends PreferenceActivity {
// --- abstract methods
public abstract int getPreferenceResource();
/**
* Update preferences for the given preference
* @param preference
* @param value setting. may be null.
*/
public abstract void updatePreferences(Preference preference, Object value);
// --- implementation
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ContextManager.setContext(this);
addPreferencesFromResource(getPreferenceResource());
}
@Override
public SharedPreferences getSharedPreferences(String name, int mode) {
return Preferences.getPrefs(this);
}
protected void initializePreference(Preference preference) {
if(preference instanceof PreferenceGroup) {
PreferenceGroup group = (PreferenceGroup)preference;
for(int i = 0; i < group.getPreferenceCount(); i++) {
initializePreference(group.getPreference(i));
}
updatePreferences(group, null);
} else {
Object value = null;
if(preference instanceof ListPreference)
value = ((ListPreference)preference).getValue();
else if(preference instanceof CheckBoxPreference)
value = ((CheckBoxPreference)preference).isChecked();
else if(preference instanceof EditTextPreference)
value = ((EditTextPreference)preference).getText();
else if(preference instanceof RingtonePreference)
value = getPreferenceManager().getSharedPreferences().getString(preference.getKey(), null);
updatePreferences(preference, value);
if (preference.getOnPreferenceChangeListener() == null) {
preference.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
public boolean onPreferenceChange(Preference myPreference, Object newValue) {
updatePreferences(myPreference, newValue);
return true;
}
});
}
}
}
@Override
public void onWindowFocusChanged(boolean hasFocus) {
super.onWindowFocusChanged(hasFocus);
if(hasFocus) {
initializePreference(getPreferenceScreen());
}
}
}