From 3bf922fcc060e0a02b8681071a4fc5c4c30ff49b Mon Sep 17 00:00:00 2001 From: sylviaa23 Date: Wed, 29 Apr 2026 13:53:49 +0000 Subject: [PATCH] Changed values and added checkbox --- app/google-services.json.template | 47 +++++++++++++++++++ .../org/openseizuredetector/LogManager.java | 6 ++- .../uk/org/openseizuredetector/SdServer.java | 18 ++++++- app/src/main/res/values/strings.xml | 8 ++-- .../main/res/xml/seizure_detector_prefs.xml | 13 +++-- 5 files changed, 80 insertions(+), 12 deletions(-) create mode 100644 app/google-services.json.template diff --git a/app/google-services.json.template b/app/google-services.json.template new file mode 100644 index 0000000..f62842f --- /dev/null +++ b/app/google-services.json.template @@ -0,0 +1,47 @@ +{ + "project_info": { + "project_number": "1234", + "project_id": "osd-data-sharing", + "storage_bucket": "osd-data-sharing.appspot.com" + }, + "client": [ + { + "client_info": { + "mobilesdk_app_id": "xxxx", + "android_client_info": { + "package_name": "uk.org.openseizuredetector" + } + }, + "oauth_client": [ + { + "client_id": "xxxx", + "client_type": 1, + "android_info": { + "package_name": "uk.org.openseizuredetector", + "certificate_hash": "xxx" + } + }, + { + "client_id": "xxx", + "client_type": 3 + } + ], + "api_key": [ + { + "current_key": "xxx" + } + ], + "services": { + "appinvite_service": { + "other_platform_oauth_client": [ + { + "client_id": "xxx", + "client_type": 3 + } + ] + } + } + } + ], + "configuration_version": "1" +} \ No newline at end of file diff --git a/app/src/main/java/uk/org/openseizuredetector/LogManager.java b/app/src/main/java/uk/org/openseizuredetector/LogManager.java index babd01d..66a26c5 100644 --- a/app/src/main/java/uk/org/openseizuredetector/LogManager.java +++ b/app/src/main/java/uk/org/openseizuredetector/LogManager.java @@ -328,7 +328,7 @@ public class LogManager { * Write data to local database * FIXME - I am sure we should not be using raw SQL Srings to do this! */ - public void writeDatapointToLocalDb(SdData sdData) { + public void writeDatapointToLocalDb(SdData sdData, long alarmDuration) { //Log.v(TAG, "writeDatapointToLocalDb()"); Date curDate = new Date(); SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); @@ -355,7 +355,9 @@ public class LogManager { if (sdData.alarmState != 0) { Log.i(TAG, "writeDatapointToLocalDb(): adding event to local DB"); - createLocalEvent(dateStr, sdData.alarmState, null, null, null, sdData.toSettingsJSON()); + createLocalEvent(dateStr, sdData.alarmState, "seizure", null, + "Duration: " + alarmDuration + "s HR: " + sdData.mHR, + sdData.toSettingsJSON()); } } catch (SQLException e) { Log.e(TAG, "writeToLocalDb(): Error Writing Data: " + e.toString()); diff --git a/app/src/main/java/uk/org/openseizuredetector/SdServer.java b/app/src/main/java/uk/org/openseizuredetector/SdServer.java index 4ad088f..93cd591 100644 --- a/app/src/main/java/uk/org/openseizuredetector/SdServer.java +++ b/app/src/main/java/uk/org/openseizuredetector/SdServer.java @@ -125,6 +125,8 @@ public class SdServer extends Service implements SdDataReceiver { private boolean mMp3Alarm = false; private boolean mPhoneAlarm = false; private boolean mSMSAlarm = false; + private boolean mFlogaEmergencyEscalation = true; + private long mAlarmStartTime = 0; private String[] mSMSNumbers; private String mSMSMsgStr = "default SMS Message"; private String mSMSFalseAlarmMsgStr = "default SMS False Alarm Message"; @@ -655,6 +657,7 @@ public class SdServer extends Service implements SdDataReceiver { if ((sdData.alarmState == 2) || (sdData.alarmState == 5)) { sdData.alarmPhrase = "ALARM"; sdData.alarmStanding = true; + if (mAlarmStartTime == 0) mAlarmStartTime = System.currentTimeMillis(); if (mLogAlarms) { Log.v(TAG, "***ALARM*** - Logging to SD Card"); //writeAlarmToSD(); @@ -675,7 +678,12 @@ public class SdServer extends Service implements SdDataReceiver { - mSMSTime.toMillis(false)) > 60000) { sendSMSAlarm(); - sendPhoneAlarm(); + // Floga: escalate to emergency call if seizure longer than 5 minutes + long alarmDurationSecs = (System.currentTimeMillis() - mAlarmStartTime) / 1000; + if (alarmDurationSecs >= 300 && mFlogaEmergencyEscalation) { + sendPhoneAlarm(); + Log.v(TAG, "Floga: 5 minute threshold reached - calling emergency contacts"); + } mSMSTime = tnow; } else { mUtil.showToast(getString(R.string.SMSAlarmAlreadySentMsg)); @@ -820,6 +828,7 @@ public class SdServer extends Service implements SdDataReceiver { mSdData.alarmState = 4; // set fault alarm state. mSdData.alarmPhrase = "FAULT"; mSdData.alarmStanding = false; + mAlarmStartTime = 0; if (webServer != null) webServer.setSdData(mSdData); // We only take action to warn the user and re-start the data source to attempt to fix it // ourselves if we have been in a fault condition for a while - signified by the mFaultTimerCompleted @@ -1238,7 +1247,11 @@ public class SdServer extends Service implements SdDataReceiver { if (mLm != null) { Log.v(TAG, "logData() - writing data to Database"); //writeToSD(); - mLm.writeDatapointToLocalDb(mSdData); + long alarmDurationSecs = 0; + if (mAlarmStartTime != 0) { + alarmDurationSecs = (System.currentTimeMillis() - mAlarmStartTime) / 1000; + } + mLm.writeDatapointToLocalDb(mSdData, alarmDurationSecs); } else { Log.e(TAG, "logData() - mLm is null - this should not happen"); } @@ -1302,6 +1315,7 @@ public class SdServer extends Service implements SdDataReceiver { mSMSAlarm = SP.getBoolean("SMSAlarm", false); Log.v(TAG, "updatePrefs() - mSMSAlarm = " + mSMSAlarm); mUtil.writeToSysLogFile("updatePrefs() - mSMSAlarm = " + mSMSAlarm); + mFlogaEmergencyEscalation = SP.getBoolean("FlogaEmergencyEscalation", true); mPhoneAlarm = SP.getBoolean("PhoneCallAlarm", false); Log.v(TAG, "updatePrefs() - mSMSAlarm = " + mSMSAlarm); mUtil.writeToSysLogFile("updatePrefs() - mSMSAlarm = " + mSMSAlarm); diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index a889561..999bda9 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -105,11 +105,11 @@ Alarm Ratio Threshold Alarm Ratio Threshold (Default = 57). Increase to reduce sensitivity. AlarmFreqMax (Hz) - Maximum Frequency of ROI (Hz) (Default = 8 Hz) + Maximum Frequency of ROI (Hz) ([Floga] Default = 5 Hz) AlarmFreqMin (Hz) Minimum Frequency of ROI (Hz) (Default = 3 Hz) Enable Simple Heart Rate Alarm - + Floga: Triggers alarm if heart rate rises by 20% during detected seizure motion, reducing false alarms Treat a Null heart rate as an alarm condition Heart Rate Min Threshold (bpm) @@ -303,7 +303,7 @@ SMS Alarm Settings **SEIZURE DETECTED** Alarm Logging - Time to wait before initiating warning (Default = 5 sec) + Time to wait before initiating warning ([Floga] Default = 10 sec) WarnTime (sec) Time to wait before initiating alarm (Default = 10 sec) AlarmTime (sec) @@ -486,7 +486,7 @@ NO Privacy Policy Data Sharing - Enable Adaptive Threshold Heart Rate Alarm + [Floga] Enable Adaptive Threshold Heart Rate Alarm Window Size for Adaptive Threshold Calculation Moving Average Time Window (seconds) must be a multiple of 5 seconds Adaptive Threshold Offset (bpm) diff --git a/app/src/main/res/xml/seizure_detector_prefs.xml b/app/src/main/res/xml/seizure_detector_prefs.xml index 48013c5..520be3c 100644 --- a/app/src/main/res/xml/seizure_detector_prefs.xml +++ b/app/src/main/res/xml/seizure_detector_prefs.xml @@ -22,7 +22,7 @@ android:summary="@string/HRAlarmEnabledSummary" android:title="@string/HRAlarmEnabledTitle" /> @@ -50,7 +50,7 @@ android:summary="@string/OsdAlarmEnabledSummary" android:title="@string/OsdAlarmEnabledTitle" /> @@ -59,6 +59,11 @@ android:key="AlarmTime" android:summary="@string/AlarmTimeSummary" android:title="@string/AlarmTimeTitle" /> + @@ -168,7 +173,7 @@