package de.tudarmstadt.informatik.hostage.ui.fragment; import android.content.SharedPreferences; import android.os.AsyncTask; import android.os.Bundle; import android.preference.EditTextPreference; import android.preference.MultiSelectListPreference; import android.preference.Preference; import android.preference.PreferenceFragment; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import de.tudarmstadt.informatik.hostage.R; import de.tudarmstadt.informatik.hostage.sync.android.SyncUtils; /** * Manages and creates the application preferences view * * @author Alexander Brakowski * @created 02.03.14 21:03 */ public class PreferenceHostageFrament extends PreferenceFragment implements SharedPreferences.OnSharedPreferenceChangeListener { public static CharSequence[] entries = null; public static CharSequence[] entriesValues = null; /** * Maps an text preference to an suffix string */ private HashMap mSuffixMap; /** * {@inheritDoc} */ @Override public void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); // these preferences are all text preferences String[] textPreferences = new String[]{ "pref_external_location", "pref_upload_server", "pref_download_server", "pref_max_connections", "pref_timeout", "pref_sleeptime", "pref_location_time", "pref_location_retries" }; // map the text preferences to suffixes this.mSuffixMap = new HashMap(); this.mSuffixMap.put("pref_timeout", "s"); this.mSuffixMap.put("pref_sleeptime", "ms"); this.mSuffixMap.put("pref_location_time", "ms"); addPreferencesFromResource(R.xml.settings_preferences); for(String k: textPreferences){ updatePreferenceSummary(k); } if(entries == null || entriesValues == null) { refreshCountryList(); } } private void refreshCountryList(){ final SharedPreferences sharedPreferences = this.getPreferenceManager().getSharedPreferences(); Preference p = getPreferenceManager().findPreference("pref_sync_countries"); final MultiSelectListPreference mp = (MultiSelectListPreference) p; AsyncTask> task = new AsyncTask>(){ @Override protected List doInBackground(String... params) { return SyncUtils.getCountriesFromServer(sharedPreferences.getString("pref_download_server", "http://192.168.1.118:8888")); } protected void onPostExecute(List lst) { if(lst != null) { entries = new CharSequence[lst.size()]; entriesValues = new CharSequence[lst.size()]; for (int i = 0; i < lst.size(); i++) { entries[i] = lst.get(i)[1]; entriesValues[i] = lst.get(i)[0]; } mp.setEntries(entries); mp.setEntryValues(entriesValues); } } }; task.execute(); } /** * Updates the summary text of the given preference * * @param key the preference key */ private void updatePreferenceSummary(String key){ Preference p = findPreference(key); SharedPreferences sharedPreferences = this.getPreferenceManager().getSharedPreferences(); if(p != null && p instanceof EditTextPreference){ String suffix = ""; if(this.mSuffixMap.containsKey(key)){ suffix = this.mSuffixMap.get(key); } p.setSummary(sharedPreferences.getString(key, "") + " " + suffix); } } /** * {@inheritDoc} */ @Override public void onResume() { super.onResume(); getPreferenceManager().getSharedPreferences().registerOnSharedPreferenceChangeListener(this); } /** * {@inheritDoc} */ @Override public void onPause() { getPreferenceManager().getSharedPreferences().unregisterOnSharedPreferenceChangeListener(this); super.onPause(); } /* @Override public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) { super.onPreferenceTreeClick(preferenceScreen, preference); if (preference instanceof PreferenceScreen) { if(MainActivity.getInstance().mDisplayedFragment != null && MainActivity.getInstance().mDisplayedFragment instanceof UpNavigatible){ ((UpNavigatible) MainActivity.getInstance().mDisplayedFragment).setUpNavigatible(true); ((UpNavigatible) MainActivity.getInstance().mDisplayedFragment).setUpFragment(SettingsFragment.class); MainActivity.getInstance().setDrawerIndicatorEnabled(false); return true; } } return false; }*/ /** * {@inheritDoc} */ @Override public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { if(key.equals("pref_download_server")){ refreshCountryList(); } updatePreferenceSummary(key); } }