Skip to content

Commit

Permalink
Merge pull request #19872 from osmandapp/srtmPluginOptions
Browse files Browse the repository at this point in the history
Srtm plugin options
  • Loading branch information
Chumva committed May 14, 2024
2 parents 758d874 + c76726a commit c7ee81d
Show file tree
Hide file tree
Showing 5 changed files with 216 additions and 159 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@
import static net.osmand.plus.download.DownloadActivityType.GEOTIFF_FILE;
import static net.osmand.plus.download.DownloadActivityType.HILLSHADE_FILE;
import static net.osmand.plus.download.DownloadActivityType.SLOPE_FILE;
import static net.osmand.plus.plugins.srtm.TerrainMode.HILLSHADE;

import android.view.View;
import android.widget.ArrayAdapter;
Expand Down Expand Up @@ -196,7 +195,7 @@ private DownloadActivityType getDownloadActivityType() {
if (plugin != null && plugin.generateTerrainFrom3DMaps()) {
return GEOTIFF_FILE;
} else {
return srtmPlugin.getTerrainMode() == HILLSHADE ? HILLSHADE_FILE : SLOPE_FILE;
return srtmPlugin.getTerrainMode().isHillshade() ? HILLSHADE_FILE : SLOPE_FILE;
}
}

Expand Down
109 changes: 17 additions & 92 deletions OsmAnd/src/net/osmand/plus/plugins/srtm/SRTMPlugin.java
Original file line number Diff line number Diff line change
Expand Up @@ -75,33 +75,22 @@ public class SRTMPlugin extends OsmandPlugin {
public static final String CONTOUR_WIDTH_ATTR = "contourWidth";
public static final String CONTOUR_DENSITY_ATTR = "contourDensity";

public static final String SLOPE_MAIN_COLOR_FILENAME = "clr_slope.txt";
public static final String HILLSHADE_MAIN_COLOR_FILENAME = "hs_main_hillshade.txt";
public static final String SLOPE_SECONDARY_COLOR_FILENAME = "hs_scnd_hillshade.txt";

public static final int TERRAIN_MIN_SUPPORTED_ZOOM = 4;
public static final int TERRAIN_MAX_SUPPORTED_ZOOM = 19;

public static final float MIN_VERTICAL_EXAGGERATION = 1.0f;
public static final float MAX_VERTICAL_EXAGGERATION = 3.0f;

public final CommonPreference<Integer> HILLSHADE_MIN_ZOOM;
public final CommonPreference<Integer> HILLSHADE_MAX_ZOOM;
public final CommonPreference<Integer> HILLSHADE_TRANSPARENCY;

public final CommonPreference<Integer> SLOPE_MIN_ZOOM;
public final CommonPreference<Integer> SLOPE_MAX_ZOOM;
public final CommonPreference<Integer> SLOPE_TRANSPARENCY;

public final CommonPreference<Boolean> TERRAIN;
public final CommonPreference<TerrainMode> TERRAIN_MODE;
public final CommonPreference<String> TERRAIN_MODE;


public final CommonPreference<String> CONTOUR_LINES_ZOOM;

private final StateChangedListener<Boolean> enable3DMapsListener;
private final StateChangedListener<Boolean> terrainListener;
private final StateChangedListener<TerrainMode> terrainModeListener;
private final StateChangedListener<String> terrainModeListener;
private final StateChangedListener<Float> verticalExaggerationListener;

private TerrainLayer terrainLayer;
Expand All @@ -114,16 +103,10 @@ public String getId() {
public SRTMPlugin(OsmandApplication app) {
super(app);

HILLSHADE_MIN_ZOOM = registerIntPreference("hillshade_min_zoom", 3).makeProfile();
HILLSHADE_MAX_ZOOM = registerIntPreference("hillshade_max_zoom", 17).makeProfile();
HILLSHADE_TRANSPARENCY = registerIntPreference("hillshade_transparency", 100).makeProfile();

SLOPE_MIN_ZOOM = registerIntPreference("slope_min_zoom", 3).makeProfile();
SLOPE_MAX_ZOOM = registerIntPreference("slope_max_zoom", 17).makeProfile();
SLOPE_TRANSPARENCY = registerIntPreference("slope_transparency", 80).makeProfile();

TERRAIN = registerBooleanPreference("terrain_layer", true).makeProfile();
TERRAIN_MODE = registerEnumStringPreference("terrain_mode", TerrainMode.HILLSHADE, TerrainMode.values(), TerrainMode.class).makeProfile();
TerrainMode[] tms = TerrainMode.values(app);
TERRAIN_MODE = registerStringPreference("terrain_mode", tms.length == 0 ? "" : tms[0].getKey()).makeProfile();

CONTOUR_LINES_ZOOM = registerStringPreference("contour_lines_zoom", null).makeProfile().cache();

Expand Down Expand Up @@ -268,43 +251,27 @@ public void setTerrainLayerEnabled(boolean enabled) {
}

public boolean isSlopeMode() {
return getTerrainMode() == TerrainMode.SLOPE;
return getTerrainMode().isColor();
}

public boolean isHillshadeMode() {
return getTerrainMode() == TerrainMode.HILLSHADE;
return getTerrainMode().isHillshade();
}

public TerrainMode getTerrainMode() {
return TERRAIN_MODE.get();
return TerrainMode.getByKey(TERRAIN_MODE.get());
}

public void setTerrainMode(TerrainMode mode) {
TERRAIN_MODE.set(mode);
TERRAIN_MODE.set(mode.getKey());
}

public void setTerrainTransparency(int transparency, TerrainMode mode) {
switch (mode) {
case HILLSHADE:
HILLSHADE_TRANSPARENCY.set(transparency);
break;
case SLOPE:
SLOPE_TRANSPARENCY.set(transparency);
break;
}
mode.setTransparency(transparency);
}

public void setTerrainZoomValues(int minZoom, int maxZoom, TerrainMode mode) {
switch (mode) {
case HILLSHADE:
HILLSHADE_MIN_ZOOM.set(minZoom);
HILLSHADE_MAX_ZOOM.set(maxZoom);
break;
case SLOPE:
SLOPE_MIN_ZOOM.set(minZoom);
SLOPE_MAX_ZOOM.set(maxZoom);
break;
}
mode.setZoomValues(minZoom, maxZoom);
}

public static float normalizeVerticalExaggerationScale(float scale) {
Expand All @@ -320,37 +287,15 @@ public void setVerticalExaggerationScale(float scale) {
}

public int getTerrainTransparency() {
switch (getTerrainMode()) {
case HILLSHADE:
return HILLSHADE_TRANSPARENCY.get();
case SLOPE:
return SLOPE_TRANSPARENCY.get();
}
return 100;
return getTerrainMode().getTransparency();
}

public void resetZoomLevelsToDefault() {
switch (getTerrainMode()) {
case HILLSHADE:
HILLSHADE_MIN_ZOOM.resetToDefault();
HILLSHADE_MAX_ZOOM.resetToDefault();
break;
case SLOPE:
SLOPE_MIN_ZOOM.resetToDefault();
SLOPE_MAX_ZOOM.resetToDefault();
break;
}
getTerrainMode().resetZoomsToDefault();
}

public void resetTransparencyToDefault() {
switch (getTerrainMode()) {
case HILLSHADE:
HILLSHADE_TRANSPARENCY.resetToDefault();
break;
case SLOPE:
SLOPE_TRANSPARENCY.resetToDefault();
break;
}
getTerrainMode().resetTransparencyToDefault();
}

public void resetVerticalExaggerationToDefault(){
Expand All @@ -359,30 +304,12 @@ public void resetVerticalExaggerationToDefault(){

public int getTerrainMinZoom() {
int minSupportedZoom = TERRAIN_MIN_SUPPORTED_ZOOM;
int minZoom = minSupportedZoom;
switch (getTerrainMode()) {
case HILLSHADE:
minZoom = HILLSHADE_MIN_ZOOM.get();
break;
case SLOPE:
minZoom = SLOPE_MIN_ZOOM.get();
break;
}
return Math.max(minSupportedZoom, minZoom);
return Math.max(minSupportedZoom, getTerrainMode().getMinZoom());
}

public int getTerrainMaxZoom() {
int maxSupportedZoom = TERRAIN_MAX_SUPPORTED_ZOOM;
int maxZoom = maxSupportedZoom;
switch (getTerrainMode()) {
case HILLSHADE:
maxZoom = HILLSHADE_MAX_ZOOM.get();
break;
case SLOPE:
maxZoom = SLOPE_MAX_ZOOM.get();
break;
}
return Math.min(maxSupportedZoom, maxZoom);
return Math.min(maxSupportedZoom, getTerrainMode().getMaxZoom());
}

public static boolean isContourLinesLayerEnabled(OsmandApplication app) {
Expand Down Expand Up @@ -550,12 +477,10 @@ public boolean onContextMenuClick(@Nullable OnDataChangeUiAdapter uiAdapter, @Nu
.setListener(listener));
}
boolean terrainEnabled = TERRAIN.get();
TerrainMode terrainMode = TERRAIN_MODE.get();
TerrainMode terrainMode = TerrainMode.getByKey(TERRAIN_MODE.get());
adapter.addItem(new ContextMenuItem(TERRAIN_ID)
.setTitleId(R.string.shared_string_terrain, mapActivity)
.setDescription(app.getString(terrainMode == TerrainMode.HILLSHADE
? R.string.shared_string_hillshade
: R.string.download_slope_maps))
.setDescription(terrainMode.getDescription())
.setSelected(terrainEnabled)
.setColor(app, terrainEnabled ? R.color.osmand_orange : ContextMenuItem.INVALID_ID)
.setIcon(R.drawable.ic_action_hillshade_dark)
Expand Down
38 changes: 17 additions & 21 deletions OsmAnd/src/net/osmand/plus/plugins/srtm/TerrainFragment.java
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package net.osmand.plus.plugins.srtm;

import static net.osmand.IndexConstants.GEOTIFF_SQLITE_CACHE_DIR;
import static net.osmand.plus.plugins.srtm.TerrainMode.SLOPE;

import android.app.Activity;
import android.content.Intent;
Expand Down Expand Up @@ -153,17 +152,17 @@ private void updateColorSchemeCard(TerrainMode mode) {
int maxZoom = srtmPlugin.getTerrainMaxZoom();
String zoomLevels = minZoom + " - " + maxZoom;
zoomLevelsTv.setText(zoomLevels);
coloSchemeTv.setText(mode.nameId);
AndroidUiHelper.updateVisibility(legend, mode == SLOPE);
coloSchemeTv.setText(mode.getDescription());
AndroidUiHelper.updateVisibility(legend, mode.isColor());
}

private void setupColorSchemeCard(@NonNull View root) {
View colorSchemeBtn = root.findViewById(R.id.color_scheme_button);
colorSchemeBtn.setOnClickListener(view -> {
List<PopUpMenuItem> menuItems = new ArrayList<>();
for (TerrainMode mode : TerrainMode.values()) {
for (TerrainMode mode : TerrainMode.values(app)) {
menuItems.add(new PopUpMenuItem.Builder(app)
.setTitle(getString(mode.nameId))
.setTitle(mode.getDescription())
.setOnClickListener(v -> setupTerrainMode(mode))
.create());
}
Expand Down Expand Up @@ -234,22 +233,19 @@ private void updateUiMode() {
iconIv.setImageDrawable(uiUtilities.getPaintedIcon(R.drawable.ic_action_hillshade_dark, profileColor));
stateTv.setText(R.string.shared_string_enabled);

switch (mode) {
case HILLSHADE:
descriptionTv.setText(R.string.hillshade_description);
downloadDescriptionTv.setText(R.string.hillshade_download_description);
break;
case SLOPE:
descriptionTv.setText(R.string.slope_legend_description);
String wikiString = getString(R.string.shared_string_wikipedia);
String readMoreText = String.format(
getString(R.string.slope_legend_description),
wikiString
);
String wikiSlopeUrl = getString(R.string.url_wikipedia_slope);
setupClickableText(descriptionTv, readMoreText, wikiString, wikiSlopeUrl, false);
downloadDescriptionTv.setText(R.string.slope_download_description);
break;
if (mode.isHillshade()) {
descriptionTv.setText(R.string.hillshade_description);
downloadDescriptionTv.setText(R.string.hillshade_download_description);
} else if (mode.isColor()) {
descriptionTv.setText(R.string.slope_legend_description);
String wikiString = getString(R.string.shared_string_wikipedia);
String readMoreText = String.format(
getString(R.string.slope_legend_description),
wikiString
);
String wikiSlopeUrl = getString(R.string.url_wikipedia_slope);
setupClickableText(descriptionTv, readMoreText, wikiString, wikiSlopeUrl, false);
downloadDescriptionTv.setText(R.string.slope_download_description);
}
downloadMapsCard.updateDownloadSection(getMapActivity());
} else {
Expand Down

0 comments on commit c7ee81d

Please sign in to comment.