quick actions map source
This commit is contained in:
parent
b0e3306de7
commit
616cc14048
3 changed files with 57 additions and 38 deletions
|
@ -2541,4 +2541,5 @@ If you need help with OsmAnd application, please contact our support team: suppo
|
|||
<string name="quick_action_map_source_title">Map sources</string>
|
||||
<string name="quick_action_map_source_dscr">Tap on the action button will toggle the map source, from the list order.</string>
|
||||
<string name="quick_action_map_source_action">Add Source</string>
|
||||
<string name="quick_action_map_source_switch">Map source has been changed to the \"%s\".</string>
|
||||
</resources>
|
||||
|
|
|
@ -34,8 +34,10 @@ import android.widget.Toast;
|
|||
import com.google.gson.Gson;
|
||||
import com.google.gson.reflect.TypeToken;
|
||||
|
||||
import net.osmand.ResultMatcher;
|
||||
import net.osmand.data.LatLon;
|
||||
import net.osmand.data.PointDescription;
|
||||
import net.osmand.map.TileSourceManager;
|
||||
import net.osmand.osm.AbstractPoiType;
|
||||
import net.osmand.osm.MapPoiTypes;
|
||||
import net.osmand.osm.PoiType;
|
||||
|
@ -1662,7 +1664,7 @@ public class QuickActionFactory {
|
|||
|
||||
public static final int TYPE = 14;
|
||||
|
||||
private static String KEY_STYLES = "styles";
|
||||
private final static String KEY_STYLES = "styles";
|
||||
|
||||
protected MapStyleAction() {
|
||||
super(TYPE);
|
||||
|
@ -1828,7 +1830,7 @@ public class QuickActionFactory {
|
|||
|
||||
public static final int TYPE = 15;
|
||||
|
||||
private static String KEY_OVERLAYS = "overlays";
|
||||
private final static String KEY_OVERLAYS = "overlays";
|
||||
|
||||
protected MapOverlayAction() {
|
||||
super(TYPE);
|
||||
|
@ -1899,7 +1901,7 @@ public class QuickActionFactory {
|
|||
|
||||
public static final int TYPE = 16;
|
||||
|
||||
private static String KEY_UNDERLAYS = "underlays";
|
||||
private final static String KEY_UNDERLAYS = "underlays";
|
||||
|
||||
protected MapUnderlayAction() {
|
||||
super(TYPE);
|
||||
|
@ -1969,7 +1971,8 @@ public class QuickActionFactory {
|
|||
|
||||
public static final int TYPE = 17;
|
||||
|
||||
private static String KEY_SOURCE = "source";
|
||||
private final static String KEY_SOURCE = "source";
|
||||
private final String LAYER_OSM_VECTOR = "LAYER_OSM_VECTOR";
|
||||
|
||||
protected MapSourceAction() {
|
||||
super(TYPE);
|
||||
|
@ -2010,6 +2013,36 @@ public class QuickActionFactory {
|
|||
@Override
|
||||
public void execute(MapActivity activity) {
|
||||
|
||||
if (OsmandPlugin.getEnabledPlugin(OsmandRasterMapsPlugin.class) != null) {
|
||||
|
||||
OsmandSettings settings = activity.getMyApplication().getSettings();
|
||||
List<Pair<String, String>> sources = loadListFromParams();
|
||||
|
||||
Pair<String, String> currentSource = settings.MAP_ONLINE_DATA.get()
|
||||
? new Pair<>(settings.MAP_TILE_SOURCES.get(), settings.MAP_TILE_SOURCES.get())
|
||||
: new Pair<>(LAYER_OSM_VECTOR, activity.getString(R.string.vector_data));
|
||||
|
||||
Pair<String, String> nextSource = sources.get(0);
|
||||
int index = sources.indexOf(currentSource);
|
||||
|
||||
if (index >= 0 && index + 1 < sources.size()) {
|
||||
nextSource = sources.get(index + 1);
|
||||
}
|
||||
|
||||
if (nextSource.first.equals(LAYER_OSM_VECTOR)) {
|
||||
|
||||
settings.MAP_ONLINE_DATA.set(false);
|
||||
activity.getMapLayers().updateMapSource(activity.getMapView(), null);
|
||||
|
||||
} else {
|
||||
|
||||
settings.MAP_TILE_SOURCES.set(nextSource.first);
|
||||
settings.MAP_ONLINE_DATA.set(true);
|
||||
activity.getMapLayers().updateMapSource(activity.getMapView(), settings.MAP_TILE_SOURCES);
|
||||
}
|
||||
|
||||
Toast.makeText(activity, activity.getString(R.string.quick_action_map_source_switch, nextSource.second), Toast.LENGTH_SHORT).show();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -2041,39 +2074,13 @@ public class QuickActionFactory {
|
|||
final OsmandSettings settings = activity.getMyApplication().getSettings();
|
||||
final LinkedHashMap<String, String> entriesMap = new LinkedHashMap<>();
|
||||
|
||||
final String layerOsmVector = "LAYER_OSM_VECTOR";
|
||||
|
||||
entriesMap.put(layerOsmVector, activity.getString(R.string.vector_data));
|
||||
entriesMap.put(LAYER_OSM_VECTOR, activity.getString(R.string.vector_data));
|
||||
entriesMap.putAll(settings.getTileSourceEntries());
|
||||
|
||||
final List<Entry<String, String>> entriesMapList = new ArrayList<>(entriesMap.entrySet());
|
||||
|
||||
AlertDialog.Builder builder = new AlertDialog.Builder(activity);
|
||||
|
||||
String selectedTileSourceKey = settings.MAP_TILE_SOURCES.get();
|
||||
|
||||
int selectedItem = -1;
|
||||
|
||||
if (!settings.MAP_ONLINE_DATA.get()) {
|
||||
|
||||
selectedItem = 0;
|
||||
|
||||
} else {
|
||||
|
||||
Entry<String, String> selectedEntry = null;
|
||||
for (Entry<String, String> entry : entriesMap.entrySet()) {
|
||||
if (entry.getKey().equals(selectedTileSourceKey)) {
|
||||
selectedEntry = entry;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (selectedEntry != null) {
|
||||
selectedItem = 0;
|
||||
entriesMapList.remove(selectedEntry);
|
||||
entriesMapList.add(0, selectedEntry);
|
||||
}
|
||||
}
|
||||
|
||||
final String[] items = new String[entriesMapList.size()];
|
||||
int i = 0;
|
||||
|
||||
|
@ -2081,20 +2088,23 @@ public class QuickActionFactory {
|
|||
items[i++] = entry.getValue();
|
||||
}
|
||||
|
||||
builder.setSingleChoiceItems(items, selectedItem, new DialogInterface.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(DialogInterface dialog, int which) {
|
||||
final ArrayAdapter<String> arrayAdapter = new ArrayAdapter<>(activity, R.layout.dialog_text_item);
|
||||
|
||||
Pair<String, String> layer = new Pair<String, String>(
|
||||
entriesMapList.get(which).getKey(),
|
||||
entriesMapList.get(which).getValue());
|
||||
arrayAdapter.addAll(items);
|
||||
builder.setAdapter(arrayAdapter, new DialogInterface.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(DialogInterface dialog, int i) {
|
||||
|
||||
Pair<String, String> layer = new Pair<>(
|
||||
entriesMapList.get(i).getKey(),
|
||||
entriesMapList.get(i).getValue());
|
||||
|
||||
adapter.addItem(layer, activity);
|
||||
|
||||
dialog.dismiss();
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
builder.setNegativeButton(R.string.shared_string_dismiss, null);
|
||||
builder.show();
|
||||
}
|
||||
|
|
|
@ -10,6 +10,7 @@ import net.osmand.plus.OsmandSettings;
|
|||
import net.osmand.plus.audionotes.AudioVideoNotesPlugin;
|
||||
import net.osmand.plus.openseamapsplugin.NauticalMapsPlugin;
|
||||
import net.osmand.plus.parkingpoint.ParkingPositionPlugin;
|
||||
import net.osmand.plus.rastermaps.OsmandRasterMapsPlugin;
|
||||
|
||||
import java.lang.reflect.Type;
|
||||
import java.util.ArrayList;
|
||||
|
@ -99,6 +100,13 @@ public class QuickActionRegistry {
|
|||
}
|
||||
}
|
||||
|
||||
if (OsmandPlugin.getEnabledPlugin(OsmandRasterMapsPlugin.class) == null) {
|
||||
|
||||
if (action.type == QuickActionFactory.MapSourceAction.TYPE) {
|
||||
skip = true;
|
||||
}
|
||||
}
|
||||
|
||||
if (!skip) filteredActions.add(action);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue