package ru.shutoff.cgstarter; import android.content.Intent; import android.content.SharedPreferences; import android.os.Bundle; import android.preference.EditTextPreference; import android.preference.ListPreference; import android.preference.Preference; import android.preference.PreferenceActivity; import android.preference.PreferenceManager; public class SetupButton extends PreferenceActivity { ListPreference itemsPref; EditTextPreference namePref; TimePreference intervalPref; DaysPreference daysPref; Preference clearPref; int id; State.Point point; SharedPreferences preferences; Intent intent; @Override public void onCreate(Bundle savedInstanceState) { preferences = PreferenceManager.getDefaultSharedPreferences(this); State.Point[] points = State.get(this, false); intent = getIntent(); if (intent != null) id = intent.getIntExtra("ID", 0); if (id < 0) id = 0; if (id >= points.length) id = 0; point = points[id]; SharedPreferences.Editor ed = preferences.edit(); ed.putString("item", point.original); ed.putString("name", point.name); if (point.days == 0) point.interval = ""; if (point.interval.equals("")) { ed.putString("period", "00:00-00:00"); ed.putInt("days", 0); } else { ed.putString("period", point.interval); ed.putInt("days", point.days); } ed.commit(); super.onCreate(savedInstanceState); addPreferencesFromResource(R.xml.button); itemsPref = (ListPreference) findPreference("item"); namePref = (EditTextPreference) findPreference("name"); intervalPref = (TimePreference) findPreference("period"); daysPref = (DaysPreference) findPreference("days"); clearPref = findPreference("clear"); setupInterval(); Bookmarks.Point[] poi = Bookmarks.get(this); String[] values = new String[poi.length]; for (int i = 0; i < values.length; i++) { values[i] = poi[i].name; } itemsPref.setEntries(values); itemsPref.setEntryValues(values); itemsPref.setDefaultValue(point.original); itemsPref.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() { @Override public boolean onPreferenceChange(Preference preference, Object newValue) { if (newValue instanceof String) { String v = (String) newValue; namePref.setText(v); namePref.setSummary(v); itemsPref.setSummary(v); Bookmarks.Point[] points = Bookmarks.get(SetupButton.this); for (Bookmarks.Point p : points) { if (p.name.equals(v)) { point.lat = p.lat + ""; point.lng = p.lng + ""; point.original = v; point.name = v; point.points = p.points; SharedPreferences.Editor ed = preferences.edit(); ed.putString("name", v); ed.commit(); boolean not_empty = !v.equals(""); namePref.setEnabled(not_empty); setupInterval(); return true; } } } return false; } }); if (point.name.equals("")) { itemsPref.setSummary(getString(R.string.item_sum)); namePref.setSummary(getString(R.string.name_sum)); namePref.setEnabled(false); } else { itemsPref.setSummary(point.original); namePref.setSummary(point.name); } namePref.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() { @Override public boolean onPreferenceChange(Preference preference, Object newValue) { if (newValue instanceof String) { String v = (String) newValue; point.name = v; namePref.setSummary(v); if (point.days == 0) point.days = State.ALLDAYS; return true; } return false; } }); intervalPref.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() { @Override public boolean onPreferenceChange(Preference preference, Object newValue) { if (newValue instanceof String) { String v = (String) newValue; if (v.equals("") || v.equals("00:00-00:00")) { daysPref.setEnabled(false); } else { daysPref.setEnabled(true); } point.interval = v; if (point.days == 0) point.days = State.ALLDAYS; return true; } return false; } }); daysPref.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() { @Override public boolean onPreferenceChange(Preference preference, Object newValue) { if (newValue instanceof Integer) { preference.setSummary(DaysPreference.getSummary(preference.getContext(), (Integer) newValue)); point.days = (Integer) newValue; return true; } return false; } }); clearPref.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() { @Override public boolean onPreferenceClick(Preference preference) { point.name = ""; point.original = ""; finish(); return true; } }); } @Override public void finish() { setResult(RESULT_OK, intent); super.finish(); } void setupInterval() { if (preferences.getString("name", "").equals("")) { intervalPref.setEnabled(false); intervalPref.setSummary(getString(R.string.interval_sum)); daysPref.setEnabled(false); clearPref.setEnabled(false); return; } clearPref.setEnabled(true); intervalPref.setEnabled(true); String v = point.interval; if (v.equals("") || v.equals("00:00-00:00")) { daysPref.setEnabled(false); } else { daysPref.setEnabled(true); } daysPref.setSummary(DaysPreference.getSummary(this, preferences.getInt("days", 0))); } }