package com.kedzie.vbox;
import java.util.List;
import android.content.SharedPreferences;
import android.content.SharedPreferences.OnSharedPreferenceChangeListener;
import android.os.Build;
import android.os.Bundle;
import android.preference.PreferenceFragment;
import com.actionbarsherlock.app.SherlockPreferenceActivity;
import com.actionbarsherlock.view.MenuItem;
import com.kedzie.vbox.R;
import com.kedzie.vbox.app.Utils;
/**
* Backwards compatible preferences with headers. Also updates summary of current preference values.
*
* @apiviz.stereotype activity
*/
@SuppressWarnings("deprecation")
public class SettingsActivity extends SherlockPreferenceActivity implements OnSharedPreferenceChangeListener {
public static final String PREF_ICON_COLORS="colored_icons";
public static final String PREF_TAB_TRANSITION="tab_transition";
public static final String PREF_NOTIFICATIONS = "notifications";
public static final String PREF_WIDGET_INTERVAL = "widget_interval";
public static final String PREF_PERIOD = "metric_period";
public static final String PREF_COUNT = "metric_count";
final static String ACTION_PREFS_GENERAL = "com.kedzie.vbox.prefs.GENERAL";
final static String ACTION_PREFS_METRIC = "com.kedzie.vbox.prefs.METRIC";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setDisplayShowHomeEnabled(true);
String action = getIntent().getAction();
if (action != null && action.equals(ACTION_PREFS_GENERAL)) {
addPreferencesFromResource(R.xml.general_preferences);
if(getPreferenceScreen()!=null) {
updateSummary(getPreferenceScreen().getSharedPreferences(), PREF_ICON_COLORS);
updateSummary(getPreferenceScreen().getSharedPreferences(), PREF_TAB_TRANSITION);
updateSummary(getPreferenceScreen().getSharedPreferences(), PREF_NOTIFICATIONS);
updateSummary(getPreferenceScreen().getSharedPreferences(), PREF_WIDGET_INTERVAL);
}
} else if (action != null && action.equals(ACTION_PREFS_METRIC)) {
addPreferencesFromResource(R.xml.metric_preferences);
if(getPreferenceScreen()!=null) {
updateSummary(getPreferenceScreen().getSharedPreferences(), PREF_PERIOD);
updateSummary(getPreferenceScreen().getSharedPreferences(), PREF_COUNT);
}
} else if (Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB)
addPreferencesFromResource(R.xml.preference_headers_legacy);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch(item.getItemId()) {
case android.R.id.home:
finish();
return true;
}
return false;
}
@Override
public void onBuildHeaders(List<Header> target) {
loadHeadersFromResource(R.xml.preference_headers, target);
}
@Override
protected void onPause() {
if(getPreferenceScreen()!=null)
getPreferenceScreen().getSharedPreferences().unregisterOnSharedPreferenceChangeListener(this);
super.onPause();
}
@Override
protected void onResume() {
if(getPreferenceScreen()!=null)
getPreferenceScreen().getSharedPreferences().registerOnSharedPreferenceChangeListener(this);
super.onResume();
}
@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
updateSummary(sharedPreferences, key);
}
public void updateSummary(SharedPreferences sharedPreferences, String key) {
if (key.equals(SettingsActivity.PREF_PERIOD))
findPreference(key).setSummary(sharedPreferences.getString(key, "") + " seconds");
else if (key.equals(SettingsActivity.PREF_COUNT))
findPreference(key).setSummary(sharedPreferences.getString(key, "") + " samples");
else if (key.equals(SettingsActivity.PREF_WIDGET_INTERVAL))
findPreference(key).setSummary(sharedPreferences.getString(key, "") + " ms");
else if (key.equals(SettingsActivity.PREF_TAB_TRANSITION))
findPreference(key).setSummary(sharedPreferences.getString(key, ""));
}
@Override
public void finish() {
super.finish();
Utils.overrideBackTransition(this);
}
public static class GeneralFragment extends SummaryPreferenceFragment {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.general_preferences);
updateSummary(getPreferenceScreen().getSharedPreferences(), PREF_ICON_COLORS);
updateSummary(getPreferenceScreen().getSharedPreferences(), PREF_TAB_TRANSITION);
updateSummary(getPreferenceScreen().getSharedPreferences(), PREF_NOTIFICATIONS);
updateSummary(getPreferenceScreen().getSharedPreferences(), PREF_WIDGET_INTERVAL);
}
}
public static class MetricFragment extends SummaryPreferenceFragment {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.metric_preferences);
updateSummary(getPreferenceScreen().getSharedPreferences(), PREF_PERIOD);
updateSummary(getPreferenceScreen().getSharedPreferences(), PREF_COUNT);
}
}
public static class SummaryPreferenceFragment extends PreferenceFragment implements OnSharedPreferenceChangeListener {
@Override
public void onResume() {
super.onResume();
getPreferenceScreen().getSharedPreferences().registerOnSharedPreferenceChangeListener(this);
}
@Override
public void onPause() {
super.onPause();
getPreferenceScreen().getSharedPreferences().unregisterOnSharedPreferenceChangeListener(this);
}
@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
updateSummary(sharedPreferences, key);
}
public void updateSummary(SharedPreferences sharedPreferences, String key) {
if (key.equals(SettingsActivity.PREF_PERIOD))
findPreference(key).setSummary(sharedPreferences.getString(key, "") + " seconds");
else if (key.equals(SettingsActivity.PREF_COUNT))
findPreference(key).setSummary(sharedPreferences.getString(key, "") + " samples");
else if (key.equals(SettingsActivity.PREF_WIDGET_INTERVAL))
findPreference(key).setSummary(sharedPreferences.getString(key, "") + " ms");
else if (key.equals(SettingsActivity.PREF_TAB_TRANSITION))
findPreference(key).setSummary(sharedPreferences.getString(key, ""));
}
}
}