diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 2c0bf3b..9b84410 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -3,7 +3,7 @@
xmlns:tools="http://schemas.android.com/tools"
package="uk.org.openseizuredetector"
android:versionCode="115"
- android:versionName="4.1.3m">
+ android:versionName="4.1.3n">
diff --git a/app/src/main/java/uk/org/openseizuredetector/SdAlgHr.java b/app/src/main/java/uk/org/openseizuredetector/SdAlgHr.java
new file mode 100644
index 0000000..78083dd
--- /dev/null
+++ b/app/src/main/java/uk/org/openseizuredetector/SdAlgHr.java
@@ -0,0 +1,83 @@
+package uk.org.openseizuredetector;
+
+import android.content.Context;
+import android.content.SharedPreferences;
+import android.os.Handler;
+import android.preference.PreferenceManager;
+import android.util.Log;
+
+public class SdAlgHr {
+ private final static String TAG = "SdAlgHr";
+ private Context mContext;
+ private OsdUtil mUtil;
+ private boolean mSimpleHrAlarmActive;
+ private double mSimpleHrAlarmThreshMin;
+ private double mSimpleHrAlarmThreshMax;
+
+ private boolean mAdaptiveHrAlarmActive;
+ private double mAdaptiveHrAlarmWindowSecs;
+ private int mAdaptiveHrAlarmWindowDp;
+ private double mAdaptiveHrAlarmThresh;
+ private boolean mAverageHrAlarmActive;
+ private double mAverageHrAlarmWindowSecs;
+ private int mAverageHrAlarmWindowDp;
+ private double mAverageHrAlarmThreshMin;
+ private double mAverageHrAlarmThreshMax;
+
+
+ public SdAlgHr(Context context) {
+ Log.d(TAG, "SdAlgHr Constructor");
+ mContext = context;
+ mUtil = new OsdUtil(mContext, new Handler());
+ }
+
+ public void close() {
+ Log.d(TAG, "close()");
+ }
+
+ public float getAlarmState(SdData sdData) {
+ return (0);
+ }
+
+ private double readDoublePref(SharedPreferences SP, String prefName, String defVal) {
+ String prefValStr;
+ double retVal = -1;
+ try {
+ prefValStr = SP.getString(prefName, defVal);
+ retVal = Double.parseDouble(prefValStr);
+ } catch (Exception ex) {
+ Log.v(TAG, "readDoublePref() - Problem with preference!");
+ mUtil.writeToSysLogFile(TAG+".readDoublePref() - Problem with preference!");
+ mUtil.showToast(TAG+":"+mContext.getString(R.string.problem_parsing_preferences));
+ }
+ return retVal;
+ }
+
+ private void updatePrefs() {
+ /**
+ * updatePrefs() - update basic settings from the SharedPreferences
+ * - defined in res/xml/prefs.xml
+ */
+ Log.i(TAG, "updatePrefs()");
+ mUtil.writeToSysLogFile(TAG+".updatePrefs()");
+
+ SharedPreferences SP = PreferenceManager
+ .getDefaultSharedPreferences(mContext);
+ mSimpleHrAlarmActive = SP.getBoolean("HRAlarmActive", false);
+ mSimpleHrAlarmThreshMin = readDoublePref(SP, "HRThreshMin", "20");
+ mSimpleHrAlarmThreshMax = readDoublePref(SP, "HRThreshMax", "150");
+
+
+ mAdaptiveHrAlarmActive = SP.getBoolean("HRAdaptiveAlarmActive", false);
+ mAdaptiveHrAlarmWindowSecs = readDoublePref(SP, "HRAdaptiveAlarmWindowSecs", "30");
+ mAdaptiveHrAlarmWindowDp = (int)Math.round(mAdaptiveHrAlarmWindowSecs/5.0);
+ mAdaptiveHrAlarmThresh = readDoublePref(SP, "HRAdaptiveAlarmThresh", "20");
+
+ mAverageHrAlarmActive = SP.getBoolean("HRAverageAlarmActive", false);
+ mAverageHrAlarmWindowSecs = readDoublePref(SP, "HRAverageAlarmWindowSecs", "120");
+ mAverageHrAlarmWindowDp = (int)Math.round(mAverageHrAlarmWindowSecs/5.0);
+ mAverageHrAlarmThreshMin = readDoublePref(SP, "HRAverageAlarmThreshMin", "40");
+ mAverageHrAlarmThreshMax = readDoublePref(SP, "HRAverageAlarmThreshMax", "120");
+
+ }
+}
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 7a249db..eb2f096 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -488,4 +488,17 @@
NO
Privacy Policy
Data Sharing
+ Enable Adaptive Threshold Heart Rate Alarm
+ Moving Average Time Window (seconds)
+ Window must be a multiple of 5 seconds
+ Adaptive Threshold Offset (bpm)
+ The alarm threshold offset from the average measured Heart Rate (bpm)
+ Enable Alarm based on rolling average heart rate
+
+ Lower Heart Rate Threshold for Average Heart Rate Alarm
+ Lower Threshold for Average Heart Rate Alarm
+ Upper Heart Rate Threshold for Average Heart Rate Alarm
+ Upper Threshold for Average Heart Rate Alarm
+ Window size (in seconds) for Average Heart Rate Calculation
+ Window size (in seconds) for Average Heart Rate Calculation - must be a factor of 5 seconds.
diff --git a/app/src/main/res/xml/seizure_detector_prefs.xml b/app/src/main/res/xml/seizure_detector_prefs.xml
index bd8d12c..fc64e98 100644
--- a/app/src/main/res/xml/seizure_detector_prefs.xml
+++ b/app/src/main/res/xml/seizure_detector_prefs.xml
@@ -90,6 +90,43 @@
android:key="HRThreshMax"
android:summary="@string/HRThreshMaxSummary"
android:title="@string/HRThreshMaxTitle" />
+
+
+
+
+
+
+
+
+