diff --git a/CHANGELOG.md b/CHANGELOG.md index 3c9b93f..74de59f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,8 @@ OpenSeizureDetector Android App - Change Log ============================================ + V4.2.8 - Fixed BLE2 data source to work with BangleJS2 watches + - Fixed crash in export data function when using european style comma based decimal separator. V4.2.7 - BLE2 data source re-start fixed?? V4.2.6 - Fixed problem with notifications in Android 13 - Improved start-up checks for permissions diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index b300399..bf629f1 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -1,7 +1,7 @@ diff --git a/app/src/main/java/uk/org/openseizuredetector/ExportDataActivity.java b/app/src/main/java/uk/org/openseizuredetector/ExportDataActivity.java index 3c43bf2..afccdc8 100644 --- a/app/src/main/java/uk/org/openseizuredetector/ExportDataActivity.java +++ b/app/src/main/java/uk/org/openseizuredetector/ExportDataActivity.java @@ -35,11 +35,13 @@ import java.io.FileOutputStream; import java.io.IOException; import java.nio.charset.StandardCharsets; import java.text.DateFormat; +import java.text.NumberFormat; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Arrays; import java.util.Calendar; import java.util.Date; +import java.util.Locale; public class ExportDataActivity extends AppCompatActivity implements View.OnClickListener { @@ -198,8 +200,8 @@ public class ExportDataActivity extends AppCompatActivity if (view == mExportBtn) { mDateTxt.setText(String.format("%02d-%02d-%04d", mDay, mMonth + 1, mYear)); mTimeTxt.setText(String.format("%02d:%02d:%02d", mHour, mMinute, 00)); - mDuration = Double.parseDouble(mDurationTxt.getText().toString()); + mDuration = mUtil.parseToDouble(mDurationTxt.getText().toString()); String dateTimeStr = String.format("%04d-%02d-%02dT%02d:%02d:%02dZ", mYear, mMonth + 1, mDay, mHour, mMinute, 00); //mUtil.showToast(dateTimeStr); mEndDate = mUtil.string2date(dateTimeStr); diff --git a/app/src/main/java/uk/org/openseizuredetector/FragmentOsdBaseClass.java b/app/src/main/java/uk/org/openseizuredetector/FragmentOsdBaseClass.java index 9a57353..91df850 100644 --- a/app/src/main/java/uk/org/openseizuredetector/FragmentOsdBaseClass.java +++ b/app/src/main/java/uk/org/openseizuredetector/FragmentOsdBaseClass.java @@ -111,7 +111,16 @@ public class FragmentOsdBaseClass extends Fragment { updateUiHandler.post(new Runnable() { @Override public void run() { - updateUi(); + // Check for context being null is an attempt to stop the crashes reported in Issue No 176 + if (mContext != null) { + try { + updateUi(); + } catch (Exception e) { + Log.e(TAG,"upateUiOnUiThread() - exception updating UI - "+e.getMessage()); + } + } else { + Log.e(TAG,"updateUionUiThread() - mContext is null?? Can't show a Toast message because context is null...."); + } } }); } diff --git a/app/src/main/java/uk/org/openseizuredetector/OsdUtil.java b/app/src/main/java/uk/org/openseizuredetector/OsdUtil.java index 2dee41e..4b86b0b 100644 --- a/app/src/main/java/uk/org/openseizuredetector/OsdUtil.java +++ b/app/src/main/java/uk/org/openseizuredetector/OsdUtil.java @@ -59,6 +59,7 @@ import java.io.File; import java.io.FileWriter; import java.net.InetAddress; import java.net.NetworkInterface; +import java.text.NumberFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.ArrayList; @@ -66,6 +67,7 @@ import java.util.Arrays; import java.util.Date; import java.util.Enumeration; import java.util.HashMap; +import java.util.Locale; import java.util.function.Consumer; /** @@ -778,4 +780,27 @@ public class OsdUtil { return allOk; } + public double parseToDouble(String userInput) { + /** + * Parse a string to a double value, taking localisation into account. + * Using NumberFormat as recommended by https://docs.oracle.com/javase%2F7%2Fdocs%2Fapi%2F%2F/java/lang/Double.html#valueOf(java.lang.String) + */ + double retVal; + try { + Locale currentLocale; + if (android.os.Build.VERSION.SDK_INT < 24) { + currentLocale = mContext.getResources().getConfiguration().locale; + } else { + currentLocale = mContext.getResources().getConfiguration().getLocales().get(0); + } + NumberFormat nf = NumberFormat.getInstance(currentLocale); + retVal = nf.parse(userInput).doubleValue(); + } catch (ParseException e) { + // Handle invalid input (e.g., non-numeric characters) + showToast("Invalid input. Please enter a valid numeric value."); + retVal = 0.0; + } + return(retVal); + } + } diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index e2ba239..f49b232 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -3,7 +3,7 @@ OpenSeizureDetector "\n - \nV4.2.8 - Fixed problem with BangleJS2 not working with new BLE2 data source + \nV4.2.8 - Fixed problem with BangleJS2 not working with new BLE2 data, fixed crash in export data function, fixed (rare) crash when re-opening app from background) \nV4.2.7 - Finally fixed BLE2 data source re-start after dropping connection? \nV4.2.6 - Fixed issues with Android 13 notifications and BLE data source shutdown. Added support for V2.x of Garmin watch app, Added new BLE2 data source, signal strength and battery level graphs. \nV4.2.4 - Fault alarm rather than crash if bluetooth system crashes.