package de.blau.android.prefs;
import android.content.Intent;
import android.content.res.Resources;
import android.os.Bundle;
import android.support.v4.app.DialogFragment;
import android.support.v7.preference.ListPreference;
import android.support.v7.preference.Preference;
import android.support.v7.preference.Preference.OnPreferenceChangeListener;
import android.support.v7.preference.PreferenceFragmentCompat;
import android.util.Log;
import de.blau.android.App;
import de.blau.android.DebugInformation;
import de.blau.android.LicenseViewer;
import de.blau.android.R;
import de.blau.android.osm.BoundingBox;
import de.blau.android.resources.DataStyle;
import de.blau.android.resources.TileLayerServer;
/**
* Simple class for Android's standard-Preference Activity
*
* @author mb
*/
public class PrefEditorFragment extends PreferenceFragmentCompat {
private static String DEBUG_TAG = PrefEditorFragment.class.getSimpleName();
private Resources r;
private String KEY_MAPBG;
private String KEY_MAPOL;
private String KEY_MAPPROFILE;
private String KEY_ADVPREFS;
private String KEY_LICENSE;
private String KEY_DEBUG;
private BoundingBox viewBox = null;
@Override
public void onCreatePreferences(Bundle arg0, String arg1) {
Log.d(DEBUG_TAG, "onCreatePreferences " + arg1);
viewBox = (BoundingBox) getArguments().getSerializable(PrefEditor.CURRENT_VIEWBOX);
setPreferencesFromResource(R.xml.preferences, arg1);
r = getResources();
KEY_MAPBG = r.getString(R.string.config_backgroundLayer_key);
KEY_MAPOL = r.getString(R.string.config_overlayLayer_key);
KEY_MAPPROFILE = r.getString(R.string.config_mapProfile_key);
KEY_ADVPREFS = r.getString(R.string.config_advancedprefs_key);
KEY_LICENSE = r.getString(R.string.config_licensebutton_key);
KEY_DEBUG = r.getString(R.string.config_debugbutton_key);
fixUpPrefs();
}
@Override
public void onResume() {
Log.d(DEBUG_TAG, "onResume");
super.onResume();
Log.d(DEBUG_TAG, "onResume done");
}
/** Perform initialization of the advanced preference buttons (API/Presets) */
private void fixUpPrefs() {
Preferences prefs = new Preferences(getActivity());
// remove any problematic imagery URLs
TileLayerServer.applyBlacklist(prefs.getServer().getCachedCapabilities().imageryBlacklist);
ListPreference mapbgpref = (ListPreference) getPreferenceScreen().findPreference(KEY_MAPBG);
String[] ids = TileLayerServer.getIds(viewBox,true);
mapbgpref.setEntries(TileLayerServer.getNames(ids));
mapbgpref.setEntryValues(ids);
OnPreferenceChangeListener l = new OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
Log.d(DEBUG_TAG, "onPreferenceChange background");
String id = (String)newValue;
String[] ids = TileLayerServer.getIds(null,false); // r.getStringArray(R.array.renderer_ids);
String[] names = TileLayerServer.getNames(ids); // r.getStringArray(R.array.renderer_names);
for (int i = 0; i < ids.length; i++) {
if (ids[i].equals(id)) {
preference.setSummary(names[i]);
break;
}
}
App.getDelegator().setImageryRecorded(false);
return true;
}
};
mapbgpref.setOnPreferenceChangeListener(l);
l.onPreferenceChange(mapbgpref, prefs.backgroundLayer());
ListPreference mapolpref = (ListPreference) getPreferenceScreen().findPreference(KEY_MAPOL);
String[] overlayIds = TileLayerServer.getOverlayIds(viewBox,true);
mapolpref.setEntries(TileLayerServer.getOverlayNames(overlayIds));
mapolpref.setEntryValues(overlayIds);
OnPreferenceChangeListener ol = new OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
Log.d(DEBUG_TAG, "onPreferenceChange overlay");
String id = (String)newValue;
String[] ids = TileLayerServer.getOverlayIds(null,false); // r.getStringArray(R.array.renderer_ids);
String[] names = TileLayerServer.getOverlayNames(ids); // r.getStringArray(R.array.renderer_names);
for (int i = 0; i < ids.length; i++) {
if (ids[i].equals(id)) {
preference.setSummary(names[i]);
break;
}
}
App.getDelegator().setImageryRecorded(false);
return true;
}
};
mapolpref.setOnPreferenceChangeListener(ol);
ol.onPreferenceChange(mapolpref, prefs.overlayLayer());
ListPreference mapProfilePref = (ListPreference) getPreferenceScreen().findPreference(KEY_MAPPROFILE);
String[] profileList = DataStyle.getStyleList(getActivity());
mapProfilePref.setEntries(profileList);
mapProfilePref.setEntryValues(profileList);
OnPreferenceChangeListener p = new OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
Log.d(DEBUG_TAG, "onPreferenceChange mapProfile");
String id = (String)newValue;
String[] profileList = DataStyle.getStyleList(getActivity());
String[] ids = profileList;
String[] names = profileList;
for (int i = 0; i < ids.length; i++) {
if (ids[i].equals(id)) {
preference.setSummary(names[i]);
break;
}
}
return true;
}
};
mapProfilePref.setOnPreferenceChangeListener(p);
p.onPreferenceChange(mapProfilePref, prefs.getMapProfile());
Preference advprefs = getPreferenceScreen().findPreference(KEY_ADVPREFS);
advprefs.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
@Override
public boolean onPreferenceClick(Preference preference) {
Log.d(DEBUG_TAG, "onPreferenceClick advanced");
startActivity(new Intent(getActivity(), AdvancedPrefEditor.class));
return true;
}
});
Preference licensepref = getPreferenceScreen().findPreference(KEY_LICENSE);
licensepref.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
@Override
public boolean onPreferenceClick(Preference preference) {
Log.d(DEBUG_TAG, "onPreferenceClick licence");
startActivity(new Intent(getActivity(), LicenseViewer.class));
return true;
}
});
Preference debugpref = getPreferenceScreen().findPreference(KEY_DEBUG);
debugpref.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
@Override
public boolean onPreferenceClick(Preference preference) {
Log.d(DEBUG_TAG, "onPreferenceClick debug");
startActivity(new Intent(getActivity(), DebugInformation.class));
return true;
}
});
}
@Override
public void onDisplayPreferenceDialog(Preference preference) {
DialogFragment fragment;
if (preference instanceof MultiSelectListPreference) {
fragment = MultiSelectListPreferenceDialogFragment.newInstance(preference.getKey());
fragment.setTargetFragment(this, 0);
fragment.show(getFragmentManager(),
"android.support.v7.preference.PreferenceFragment.MULTISELECTLIST");
} else super.onDisplayPreferenceDialog(preference);
}
}