package net.osmand.plus.rastermaps;
import android.os.Bundle;
import android.preference.CheckBoxPreference;
import android.preference.ListPreference;
import android.preference.Preference;
import android.preference.Preference.OnPreferenceChangeListener;
import android.preference.PreferenceCategory;
import android.preference.PreferenceScreen;
import net.osmand.ResultMatcher;
import net.osmand.map.TileSourceManager.TileSourceTemplate;
import net.osmand.plus.OsmandApplication;
import net.osmand.plus.R;
import net.osmand.plus.activities.SettingsBaseActivity;
import net.osmand.plus.views.SeekBarPreference;
import java.util.Map;
public class SettingsRasterMapsActivity extends SettingsBaseActivity {
private ListPreference tileSourcePreference;
private ListPreference overlayPreference;
private ListPreference underlayPreference;
public static final String MORE_VALUE = "MORE_VALUE";
public static final String DEFINE_EDIT = "DEFINE_EDIT";
@Override
public void onCreate(Bundle savedInstanceState) {
((OsmandApplication) getApplication()).applyTheme(this);
super.onCreate(savedInstanceState);
getToolbar().setTitle(R.string.shared_string_online_maps);
PreferenceScreen grp = getPreferenceScreen();
OnPreferenceChangeListener listener = createPreferenceListener();
PreferenceCategory cat = new PreferenceCategory(this);
cat.setTitle(R.string.pref_raster_map);
grp.addPreference(cat);
// present on configure map
// addTileSourcePrefs(listener, cat);
cat.addPreference(createCheckBoxPreference(settings.USE_INTERNET_TO_DOWNLOAD_TILES,
R.string.use_internet, R.string.use_internet_to_download_tile));
// int startZoom = 1;
// int endZoom = 18;
// String[] entries = new String[endZoom - startZoom + 1];
// Integer[] intValues = new Integer[endZoom - startZoom + 1];
// for (int i = startZoom; i <= endZoom; i++) {
// entries[i - startZoom] = i + ""; //$NON-NLS-1$
// intValues[i - startZoom] = i ;
// }
// ListPreference lp = createListPreference(settings.LEVEL_TO_SWITCH_VECTOR_RASTER,
// entries, intValues, R.string.level_to_switch_vector_raster, R.string.level_to_switch_vector_raster_descr);
// cat.addPreference(lp);
// present on configure map
// addOverlayPrefs(grp, listener);
}
@SuppressWarnings("unused")
private void addOverlayPrefs(PreferenceScreen grp, OnPreferenceChangeListener listener) {
PreferenceCategory cat;
cat = new PreferenceCategory(this);
cat.setTitle(R.string.pref_overlay);
grp.addPreference(cat);
overlayPreference = new ListPreference(this);
overlayPreference.setSummary(R.string.map_overlay_descr);
overlayPreference.setTitle(R.string.map_overlay);
overlayPreference.setOnPreferenceChangeListener(listener);
cat.addPreference(overlayPreference);
underlayPreference = new ListPreference(this);
underlayPreference.setSummary(R.string.map_underlay_descr);
underlayPreference.setTitle(R.string.map_underlay);
underlayPreference.setOnPreferenceChangeListener(listener);
cat.addPreference(underlayPreference);
SeekBarPreference sp = createSeekBarPreference(settings.MAP_OVERLAY_TRANSPARENCY, R.string.overlay_transparency, R.string.overlay_transparency_descr,
R.string.modify_transparency, 0, 255);
cat.addPreference(sp);
sp = createSeekBarPreference(settings.MAP_TRANSPARENCY, R.string.map_transparency, R.string.map_transparency_descr,
R.string.modify_transparency, 0, 255);
cat.addPreference(sp);
}
@SuppressWarnings("unused")
private void addTileSourcePrefs(OnPreferenceChangeListener listener, PreferenceCategory cat) {
CheckBoxPreference mapVectorData = createCheckBoxPreference(settings.MAP_ONLINE_DATA,
R.string.map_online_data, R.string.map_online_data_descr);
cat.addPreference(mapVectorData);
tileSourcePreference = new ListPreference(this);
tileSourcePreference.setSummary(R.string.map_tile_source_descr);
tileSourcePreference.setTitle(R.string.map_tile_source);
tileSourcePreference.setOnPreferenceChangeListener(listener);
cat.addPreference(tileSourcePreference);
}
public void updateAllSettings() {
super.updateAllSettings();
updateTileSourceSummary();
}
private void updateTileSourceSummary() {
if (tileSourcePreference != null) {
fillTileSourcesToPreference(tileSourcePreference, settings.MAP_TILE_SOURCES.get(), false);
fillTileSourcesToPreference(overlayPreference, settings.MAP_OVERLAY.get(), true);
fillTileSourcesToPreference(underlayPreference, settings.MAP_UNDERLAY.get(), true);
// String mapName = " " + osmandSettings.MAP_TILE_SOURCES.get(); //$NON-NLS-1$
// String summary = tileSourcePreference.getSummary().toString();
// if (summary.lastIndexOf(':') != -1) {
// summary = summary.substring(0, summary.lastIndexOf(':') + 1);
// }
// tileSourcePreference.setSummary(summary + mapName);
;
tileSourcePreference.setSummary(format(R.string.map_tile_source_descr, settings.MAP_TILE_SOURCES.get()));
overlayPreference.setSummary(format(R.string.map_overlay_descr, settings.MAP_OVERLAY.get()) );
underlayPreference.setSummary(format(R.string.map_underlay_descr, settings.MAP_UNDERLAY.get()) );
}
}
private String format(int r, String string) {
return getString(r) + " [" + (string == null ? "" : string) + "]";
}
private void fillTileSourcesToPreference(ListPreference tileSourcePreference, String value, boolean addNone) {
Map<String, String> entriesMap = settings.getTileSourceEntries();
int add = addNone ? 1 : 0;
String[] entries = new String[entriesMap.size() + 2 + add];
String[] values = new String[entriesMap.size() + 2 + add];
int ki = 0;
if (addNone) {
entries[ki] = getString(R.string.shared_string_none);
values[ki] = "";
ki++;
}
if (value == null) {
value = "";
}
for (Map.Entry<String, String> es : entriesMap.entrySet()) {
entries[ki] = es.getValue();
values[ki] = es.getKey();
ki++;
}
entries[ki] = getMyApplication().getString(R.string.install_more);
values[ki] = MORE_VALUE;
ki++;
entries[ki] = getMyApplication().getString(R.string.maps_define_edit);
values[ki] = DEFINE_EDIT;
fill(tileSourcePreference, entries, values, value);
}
private void fill(ListPreference component, String[] list, String[] values, String selected) {
component.setEntries(list);
component.setEntryValues(values);
component.setValue(selected);
}
private OnPreferenceChangeListener createPreferenceListener() {
return new OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
if (preference == tileSourcePreference || preference == overlayPreference
|| preference == underlayPreference) {
if(MORE_VALUE.equals(newValue)){
OsmandRasterMapsPlugin.installMapLayers(SettingsRasterMapsActivity.this, new ResultMatcher<TileSourceTemplate>() {
@Override
public boolean isCancelled() { return false;}
@Override
public boolean publish(TileSourceTemplate object) {
if(object == null){
updateTileSourceSummary();
}
return true;
}
});
} else if(DEFINE_EDIT.equals(newValue)){
OsmandRasterMapsPlugin.defineNewEditLayer(SettingsRasterMapsActivity.this, new ResultMatcher<TileSourceTemplate>() {
@Override
public boolean isCancelled() { return false;}
@Override
public boolean publish(TileSourceTemplate object) {
updateTileSourceSummary();
return true;
}
});
} else if(preference == tileSourcePreference){
settings.MAP_TILE_SOURCES.set((String) newValue);
updateTileSourceSummary();
} else {
if(((String) newValue).length() == 0){
newValue = null;
}
if(preference == underlayPreference){
settings.MAP_UNDERLAY.set(((String) newValue));
underlayPreference.setSummary(getString(R.string.map_underlay_descr) + " [" + settings.MAP_UNDERLAY.get() + "]");
} else if(preference == overlayPreference){
settings.MAP_OVERLAY.set(((String) newValue));
overlayPreference.setSummary(getString(R.string.map_overlay_descr) + " [" + settings.MAP_OVERLAY.get() + "]");
}
}
}
return true;
}
};
}
}