diff --git a/src/main/java/de/blau/android/dialogs/BarometerCalibration.java b/src/main/java/de/blau/android/dialogs/BarometerCalibration.java index 54951e8fc7..81f4893c62 100644 --- a/src/main/java/de/blau/android/dialogs/BarometerCalibration.java +++ b/src/main/java/de/blau/android/dialogs/BarometerCalibration.java @@ -1,5 +1,8 @@ package de.blau.android.dialogs; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + import android.annotation.SuppressLint; import android.content.Intent; import android.os.Bundle; @@ -30,6 +33,8 @@ public class BarometerCalibration extends ImmersiveDialogFragment { private static final String TAG = "fragment_calibration_form"; + private static final Pattern FLOAT_PATTERN = Pattern.compile("[^0-9]*([0-9]+[.][0-9]*)[^0-9]*"); + /** * Display a dialog allowing barometer calibration * @@ -93,7 +98,12 @@ public AppCompatDialog onCreateDialog(Bundle savedInstanceState) { intent.putExtra(TrackerService.CALIBRATE_HEIGHT_KEY, Integer.parseInt(calibrationValue)); break; case 1: // reference pressure - intent.putExtra(TrackerService.CALIBRATE_P0_KEY, Float.parseFloat(calibrationValue.substring(0, calibrationValue.length() - 2).trim())); + Matcher matcher = FLOAT_PATTERN.matcher(calibrationValue); + if (matcher.find()) { + intent.putExtra(TrackerService.CALIBRATE_P0_KEY, Float.parseFloat(matcher.group(1))); + } else { + throw new NumberFormatException(calibrationValue); + } break; default: // GNSS // this is the default diff --git a/src/main/java/de/blau/android/easyedit/EasyEditManager.java b/src/main/java/de/blau/android/easyedit/EasyEditManager.java index d48ef0b804..c28cdf39b6 100644 --- a/src/main/java/de/blau/android/easyedit/EasyEditManager.java +++ b/src/main/java/de/blau/android/easyedit/EasyEditManager.java @@ -327,7 +327,7 @@ protected void onPostExecute(SerializableState state) { getMain().startSupportActionMode(cb); return; } catch (ClassNotFoundException | NoSuchMethodException | SecurityException | InstantiationException - | IllegalAccessException | IllegalArgumentException | InvocationTargetException exception) { + | IllegalAccessException | IllegalArgumentException | InvocationTargetException | NullPointerException exception) { Log.e(DEBUG_TAG, "Restarting " + restartActionModeCallbackName + " received " + exception.getClass().getCanonicalName() + " " + exception.getMessage()); } diff --git a/src/main/java/de/blau/android/resources/TileLayerSource.java b/src/main/java/de/blau/android/resources/TileLayerSource.java index 59580b354b..bf0255a06b 100644 --- a/src/main/java/de/blau/android/resources/TileLayerSource.java +++ b/src/main/java/de/blau/android/resources/TileLayerSource.java @@ -2252,7 +2252,7 @@ public int getMinZoom() { */ public void setMinZoom(int newZoomLevelMin) { synchronized (this) { - if (offsets != null && zoomLevelMin != newZoomLevelMin) { + if (offsets != null && zoomLevelMin != newZoomLevelMin && zoomLevelMax > newZoomLevelMin) { Offset[] tempOffsets = new Offset[zoomLevelMax - newZoomLevelMin + 1]; int destOffset = Math.max(0, zoomLevelMin - newZoomLevelMin); System.arraycopy(offsets, Math.max(0, newZoomLevelMin - zoomLevelMin), tempOffsets, destOffset, tempOffsets.length - destOffset); @@ -2280,7 +2280,7 @@ public int getMaxZoom() { */ public void setMaxZoom(int newZoomLevelMax) { synchronized (this) { - if (offsets != null && zoomLevelMax != newZoomLevelMax) { + if (offsets != null && zoomLevelMax != newZoomLevelMax && newZoomLevelMax > zoomLevelMin) { Offset[] tempOffsets = new Offset[newZoomLevelMax - zoomLevelMin + 1]; System.arraycopy(offsets, 0, tempOffsets, 0, Math.min(offsets.length, tempOffsets.length)); offsets = tempOffsets;