package com.robert.maps.applib.preference;
import org.json.JSONObject;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.SharedPreferences.OnSharedPreferenceChangeListener;
import android.database.sqlite.SQLiteException;
import android.os.Bundle;
import android.preference.CheckBoxPreference;
import android.preference.EditTextPreference;
import android.preference.ListPreference;
import android.preference.PreferenceCategory;
import com.robert.maps.applib.R;
import com.robert.maps.applib.tileprovider.TileSourceBase;
import com.robert.maps.applib.utils.RException;
public class PairMapsPrefActivity extends MMPreferenceActivity implements OnSharedPreferenceChangeListener {
private String mKey;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setPreferenceScreen(getPreferenceManager().createPreferenceScreen(this));
Intent intent = getIntent();
if(intent == null)
finish();
final String[][] listMap = getMaps(true, false, 0);
final String[][] listOverlays = getMaps(false, true, 0);
Bundle bundle = intent.getExtras();
mKey = bundle.getString("Key");
final PreferenceCategory prefscr = new PreferenceCategory(this);
prefscr.setKey(mKey);
prefscr.setTitle(bundle.getString(NAME));
getPreferenceScreen().addPreference(prefscr);
prefscr.setTitle(getPreferenceScreen().getSharedPreferences().getString(mKey + "_name", bundle.getString(NAME)));
prefscr.setSummary(R.string.menu_add_dualmap);
{
final CheckBoxPreference pref = new CheckBoxPreference(this);
pref.setKey(mKey + "_enabled");
pref.setTitle(getString(R.string.pref_usermap_enabled));
pref.setSummary(getString(R.string.pref_usermap_enabled_summary));
pref.setDefaultValue(true);
prefscr.addPreference(pref);
}
{
final EditTextPreference pref = new EditTextPreference(this);
pref.setKey(mKey + "_name");
pref.setTitle(getString(R.string.pref_usermap_name));
pref.setSummary(bundle.getString(NAME));
pref.setDefaultValue(bundle.getString(NAME));
prefscr.addPreference(pref);
}
{
final ListPreference pref = new ListPreference(this);
pref.setKey(mKey + "_"+MAPID);
pref.setTitle(getString(R.string.pref_mixmap_map));
if(listMap != null) {
pref.setEntryValues(listMap[0]);
pref.setEntries(listMap[1]);
}
pref.setValue(bundle.getString(MAPID));
prefscr.addPreference(pref);
pref.setSummary(pref.getEntry());
}
{
final ListPreference pref = new ListPreference(this);
pref.setKey(mKey + "_"+OVERLAYID);
pref.setTitle(getString(R.string.pref_mixmap_overlay));
if(listOverlays != null) {
pref.setEntryValues(listOverlays[0]);
pref.setEntries(listOverlays[1]);
}
pref.setValue(bundle.getString(OVERLAYID));
prefscr.addPreference(pref);
pref.setSummary(pref.getEntry());
}
}
@Override
protected void onResume() {
getPreferenceScreen().getSharedPreferences().registerOnSharedPreferenceChangeListener(this);
super.onResume();
}
@Override
protected void onPause() {
getPreferenceScreen().getSharedPreferences().unregisterOnSharedPreferenceChangeListener(this);
super.onPause();
}
@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
if(key.startsWith(PREF_MIXMAPS_)) {
final String params[] = key.split("_");
mMapHelper.getMap(Long.parseLong(params[2]));
if(key.endsWith("_name")) {
mMapHelper.NAME = sharedPreferences.getString(key, "");
if(findPreference(key) != null)
findPreference(key).setSummary(mMapHelper.NAME);
if(findPreference(PREF_MIXMAPS_+mMapHelper.ID) != null)
findPreference(PREF_MIXMAPS_+mMapHelper.ID).setTitle(mMapHelper.NAME);
} else if(key.endsWith(OVERLAYID)) {
final JSONObject json = MixedMapsPreference.getMapPairParams(mMapHelper.PARAMS);
try {
json.put(OVERLAYID, sharedPreferences.getString(key, ""));
mMapHelper.PARAMS = json.toString();
if(findPreference(key) != null)
findPreference(key).setSummary(((ListPreference)findPreference(key)).getEntry());
} catch (Exception e) {
}
} else if(key.endsWith(MAPID)) {
final JSONObject json = MixedMapsPreference.getMapPairParams(mMapHelper.PARAMS);
try {
json.put(MAPID, sharedPreferences.getString(key, ""));
try {
final TileSourceBase tileSouce = new TileSourceBase(this, sharedPreferences.getString(key, ""));
json.put(MAPPROJECTION, tileSouce.PROJECTION);
if(tileSouce.PROJECTION != json.optInt(OVERLAYPROJECTION)) {
json.put(OVERLAYID, "");
json.put(OVERLAYPROJECTION, tileSouce.PROJECTION);
final String overlaykey = key.replace(MAPID, OVERLAYID);
final ListPreference pref = (ListPreference) findPreference(overlaykey);
pref.setSummary("");
final String[][] listOverlays = getMaps(false, true, tileSouce.PROJECTION);
if(listOverlays != null) {
pref.setEntryValues(listOverlays[0]);
pref.setEntries(listOverlays[1]);
}
}
} catch (SQLiteException e) {
} catch (RException e) {
}
mMapHelper.PARAMS = json.toString();
if(findPreference(key) != null)
findPreference(key).setSummary(((ListPreference)findPreference(key)).getEntry());
} catch (Exception e) {
}
}
mMapHelper.updateMap();
}
}
}