Change SMS logic and style
This commit is contained in:
@@ -31,7 +31,7 @@ public class LocationFinder implements LocationListener {
|
|||||||
Timer mTimeoutTimer = null;
|
Timer mTimeoutTimer = null;
|
||||||
LocationManager mLocationManager = null;
|
LocationManager mLocationManager = null;
|
||||||
LocationListener mLocationListener;
|
LocationListener mLocationListener;
|
||||||
int mTimeoutPeriod = 60; // Location search timeout period in seconds.
|
int mTimeoutPeriod = 7; // Location search timeout period in seconds.
|
||||||
|
|
||||||
String TAG = "LocationFinder";
|
String TAG = "LocationFinder";
|
||||||
|
|
||||||
|
|||||||
@@ -116,6 +116,9 @@ public abstract class SdDataSource {
|
|||||||
private Time mHrStatusTime;
|
private Time mHrStatusTime;
|
||||||
private double mHrFrozenPeriod = 60; // seconds
|
private double mHrFrozenPeriod = 60; // seconds
|
||||||
private boolean mHrFrozenAlarm;
|
private boolean mHrFrozenAlarm;
|
||||||
|
private boolean mRequireHrForSeizureAlarm = false;
|
||||||
|
private int mHrConfirmationWindowSecs = 0;
|
||||||
|
private long mLastHrAlarmMillis = 0;
|
||||||
private boolean mFidgetDetectorEnabled;
|
private boolean mFidgetDetectorEnabled;
|
||||||
private double mFidgetPeriod;
|
private double mFidgetPeriod;
|
||||||
private double mFidgetThreshold;
|
private double mFidgetThreshold;
|
||||||
@@ -734,9 +737,22 @@ public abstract class SdDataSource {
|
|||||||
// set the alarmState to Alarm, Warning or OK, depending on the current state and previous ones.
|
// set the alarmState to Alarm, Warning or OK, depending on the current state and previous ones.
|
||||||
if (inAlarm) {
|
if (inAlarm) {
|
||||||
mAlarmCount += mSamplePeriod;
|
mAlarmCount += mSamplePeriod;
|
||||||
|
|
||||||
if (mAlarmCount > mAlarmTime) {
|
if (mAlarmCount > mAlarmTime) {
|
||||||
// full alarm
|
if (mRequireHrForSeizureAlarm) {
|
||||||
mSdData.alarmState = 2;
|
if (hasRecentHrConfirmation()) {
|
||||||
|
mSdData.alarmState = 2;
|
||||||
|
mSdData.alarmCause = mSdData.alarmCause + "HR_CONFIRM ";
|
||||||
|
} else {
|
||||||
|
// Motion algorithm reached alarm, but HR has not confirmed it.
|
||||||
|
// Keep warning state rather than raising seizure alarm.
|
||||||
|
mSdData.alarmState = 1;
|
||||||
|
mSdData.alarmCause = mSdData.alarmCause + "NO_HR_CONFIRM ";
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// Existing behavior
|
||||||
|
mSdData.alarmState = 2;
|
||||||
|
}
|
||||||
} else if (mAlarmCount > mWarnTime) {
|
} else if (mAlarmCount > mWarnTime) {
|
||||||
// warning
|
// warning
|
||||||
mSdData.alarmState = 1;
|
mSdData.alarmState = 1;
|
||||||
@@ -761,7 +777,24 @@ public abstract class SdDataSource {
|
|||||||
+ " mAlarmTime=" + mAlarmTime);
|
+ " mAlarmTime=" + mAlarmTime);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
private boolean isHrAlarmStanding() {
|
||||||
|
return mSdData.mHRAlarmStanding
|
||||||
|
|| mSdData.mAdaptiveHrAlarmStanding
|
||||||
|
|| mSdData.mAverageHrAlarmStanding;
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean hasRecentHrConfirmation() {
|
||||||
|
if (mHrConfirmationWindowSecs <= 0) {
|
||||||
|
return isHrAlarmStanding();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (mLastHrAlarmMillis <= 0) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
long ageMillis = System.currentTimeMillis() - mLastHrAlarmMillis;
|
||||||
|
return ageMillis <= (mHrConfirmationWindowSecs * 1000L);
|
||||||
|
}
|
||||||
public void muteCheck() {
|
public void muteCheck() {
|
||||||
if (mMute != 0) {
|
if (mMute != 0) {
|
||||||
Log.v(TAG, "Mute Active - setting alarms to mute");
|
Log.v(TAG, "Mute Active - setting alarms to mute");
|
||||||
@@ -816,9 +849,14 @@ public abstract class SdDataSource {
|
|||||||
mSdData.mAverageHrAlarmStanding = checkResults.get(2);
|
mSdData.mAverageHrAlarmStanding = checkResults.get(2);
|
||||||
if (mSdData.mAverageHrAlarmStanding)
|
if (mSdData.mAverageHrAlarmStanding)
|
||||||
mSdData.alarmCause = mSdData.alarmCause + "HR_AVG ";
|
mSdData.alarmCause = mSdData.alarmCause + "HR_AVG ";
|
||||||
// Show an ALARM state if any of the HR alarms is standing.
|
// Record HR alarm timing. In HR-confirmation mode, HR is used to confirm
|
||||||
if (mSdData.mHRAlarmStanding | mSdData.mAdaptiveHrAlarmStanding | mSdData.mAverageHrAlarmStanding) {
|
// a motion/OSD seizure alarm rather than independently raising seizure alarm.
|
||||||
mSdData.alarmState = 2;
|
if (isHrAlarmStanding()) {
|
||||||
|
mLastHrAlarmMillis = System.currentTimeMillis();
|
||||||
|
|
||||||
|
if (!mRequireHrForSeizureAlarm) {
|
||||||
|
mSdData.alarmState = 2;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
@@ -1320,6 +1358,17 @@ public abstract class SdDataSource {
|
|||||||
Log.d(TAG, "updatePrefs(): mAverageHrAlarmThreshMin=" + mSdData.mAverageHrAlarmThreshMin);
|
Log.d(TAG, "updatePrefs(): mAverageHrAlarmThreshMin=" + mSdData.mAverageHrAlarmThreshMin);
|
||||||
Log.d(TAG, "updatePrefs(): mAverageHrAlarmThreshMax=" + mSdData.mAverageHrAlarmThreshMax);
|
Log.d(TAG, "updatePrefs(): mAverageHrAlarmThreshMax=" + mSdData.mAverageHrAlarmThreshMax);
|
||||||
|
|
||||||
|
mRequireHrForSeizureAlarm = SP.getBoolean("RequireHrForSeizureAlarm", false);
|
||||||
|
|
||||||
|
try {
|
||||||
|
String hrConfirmWindowStr = SP.getString("HrConfirmationWindowSecs", "0");
|
||||||
|
mHrConfirmationWindowSecs = Integer.parseInt(hrConfirmWindowStr);
|
||||||
|
} catch (Exception ex) {
|
||||||
|
mHrConfirmationWindowSecs = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
Log.d(TAG, "updatePrefs(): mRequireHrForSeizureAlarm=" + mRequireHrForSeizureAlarm);
|
||||||
|
Log.d(TAG, "updatePrefs(): mHrConfirmationWindowSecs=" + mHrConfirmationWindowSecs);
|
||||||
|
|
||||||
mSdData.mO2SatAlarmActive = SP.getBoolean("O2SatAlarmActive", false);
|
mSdData.mO2SatAlarmActive = SP.getBoolean("O2SatAlarmActive", false);
|
||||||
Log.v(TAG, "updatePrefs() O2SatAlarmActive = " + mSdData.mO2SatAlarmActive);
|
Log.v(TAG, "updatePrefs() O2SatAlarmActive = " + mSdData.mO2SatAlarmActive);
|
||||||
|
|||||||
@@ -1442,7 +1442,8 @@ public class SdServer extends Service implements SdDataReceiver {
|
|||||||
// SmsManager sm = SmsManager.getDefault();
|
// SmsManager sm = SmsManager.getDefault();
|
||||||
for (int i = 0; i < mSMSNumbers.length; i++) {
|
for (int i = 0; i < mSMSNumbers.length; i++) {
|
||||||
Log.i(TAG, "SmsTimer.onFinish() - Sending to " + mSMSNumbers[i]);
|
Log.i(TAG, "SmsTimer.onFinish() - Sending to " + mSMSNumbers[i]);
|
||||||
sendSMS(new String(mSMSNumbers[i]), mSMSMsgStr + " - " + dateStr + " " + shortUuidStr);
|
sendSMS(new String(mSMSNumbers[i]),
|
||||||
|
mSMSMsgStr + " at " + dateStr + ". Location pending. Device: " + shortUuidStr);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1510,8 +1511,11 @@ public class SdServer extends Service implements SdDataReceiver {
|
|||||||
+ ll.getLatitude() + "%2C" + ll.getLongitude();
|
+ ll.getLatitude() + "%2C" + ll.getLongitude();
|
||||||
String shortUuidStr = mUuidStr.substring(mUuidStr.length() - 6);
|
String shortUuidStr = mUuidStr.substring(mUuidStr.length() - 6);
|
||||||
|
|
||||||
String messageStr = mSMSMsgStr + " - " +
|
String messageStr = "Location update for seizure detected at "
|
||||||
dateStr + " - " + googleUrl + " " + shortUuidStr;
|
+ dateStr + ": "
|
||||||
|
+ googleUrl
|
||||||
|
+ " Device: "
|
||||||
|
+ shortUuidStr;
|
||||||
Log.i(TAG, "onSdLocationReceived() - Message is " + messageStr);
|
Log.i(TAG, "onSdLocationReceived() - Message is " + messageStr);
|
||||||
mUtil.showToast(messageStr);
|
mUtil.showToast(messageStr);
|
||||||
for (int i = 0; i < mSMSNumbers.length; i++) {
|
for (int i = 0; i < mSMSNumbers.length; i++) {
|
||||||
|
|||||||
@@ -12,8 +12,23 @@
|
|||||||
android:summary="@string/latch_timer_period_summary"
|
android:summary="@string/latch_timer_period_summary"
|
||||||
android:numeric="integer"
|
android:numeric="integer"
|
||||||
android:defaultValue="10" />
|
android:defaultValue="10" />
|
||||||
|
|
||||||
</PreferenceCategory>
|
</PreferenceCategory>
|
||||||
|
|
||||||
|
<PreferenceCategory android:title="Seizure Alarm Confirmation">
|
||||||
|
<CheckBoxPreference
|
||||||
|
android:defaultValue="false"
|
||||||
|
android:key="RequireHrForSeizureAlarm"
|
||||||
|
android:summary="Only raise a seizure alarm when the motion seizure algorithm is confirmed by a recent heart-rate alarm."
|
||||||
|
android:title="Require heart-rate confirmation" />
|
||||||
|
|
||||||
|
<EditTextPreference
|
||||||
|
android:key="HrConfirmationWindowSecs"
|
||||||
|
android:title="Heart-rate confirmation window"
|
||||||
|
android:summary="Seconds after an HR alarm that can confirm a motion seizure alarm. Use 0 for strict same-cycle confirmation."
|
||||||
|
android:inputType="number"
|
||||||
|
android:defaultValue="0" />
|
||||||
|
</PreferenceCategory>
|
||||||
|
|
||||||
<PreferenceCategory android:title="@string/AudibleAlarmSettingsTitle">
|
<PreferenceCategory android:title="@string/AudibleAlarmSettingsTitle">
|
||||||
<CheckBoxPreference
|
<CheckBoxPreference
|
||||||
android:defaultValue="true"
|
android:defaultValue="true"
|
||||||
|
|||||||
Reference in New Issue
Block a user