cleanup
This commit is contained in:
parent
78cc3ca139
commit
acf3b23bf7
5 changed files with 139 additions and 177 deletions
|
@ -21,7 +21,7 @@ class AuthRequest internal constructor(
|
||||||
@Inject lateinit var aapsLogger: AAPSLogger
|
@Inject lateinit var aapsLogger: AAPSLogger
|
||||||
@Inject lateinit var smsCommunicatorPlugin: SmsCommunicatorPlugin
|
@Inject lateinit var smsCommunicatorPlugin: SmsCommunicatorPlugin
|
||||||
@Inject lateinit var resourceHelper: ResourceHelper
|
@Inject lateinit var resourceHelper: ResourceHelper
|
||||||
@Inject lateinit var otp : OneTimePassword
|
@Inject lateinit var otp: OneTimePassword
|
||||||
|
|
||||||
private val date = DateUtil.now()
|
private val date = DateUtil.now()
|
||||||
private var processed = false
|
private var processed = false
|
||||||
|
@ -31,13 +31,8 @@ class AuthRequest internal constructor(
|
||||||
smsCommunicatorPlugin.sendSMS(Sms(requester.phoneNumber, requestText))
|
smsCommunicatorPlugin.sendSMS(Sms(requester.phoneNumber, requestText))
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun codeIsValid(toValidate: String) : Boolean {
|
private fun codeIsValid(toValidate: String): Boolean =
|
||||||
return if (otp.isEnabled()) {
|
|
||||||
otp.checkOTP(toValidate) == OneTimePasswordValidationResult.OK
|
otp.checkOTP(toValidate) == OneTimePasswordValidationResult.OK
|
||||||
} else {
|
|
||||||
confirmCode == toValidate
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fun action(codeReceived: String) {
|
fun action(codeReceived: String) {
|
||||||
if (processed) {
|
if (processed) {
|
||||||
|
|
|
@ -44,6 +44,8 @@ import java.text.Normalizer
|
||||||
import java.util.*
|
import java.util.*
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
import javax.inject.Singleton
|
import javax.inject.Singleton
|
||||||
|
import kotlin.math.max
|
||||||
|
import kotlin.math.min
|
||||||
|
|
||||||
@Singleton
|
@Singleton
|
||||||
class SmsCommunicatorPlugin @Inject constructor(
|
class SmsCommunicatorPlugin @Inject constructor(
|
||||||
|
@ -144,8 +146,7 @@ class SmsCommunicatorPlugin @Inject constructor(
|
||||||
override fun updatePreferenceSummary(pref: Preference) {
|
override fun updatePreferenceSummary(pref: Preference) {
|
||||||
super.updatePreferenceSummary(pref)
|
super.updatePreferenceSummary(pref)
|
||||||
if (pref is EditTextPreference) {
|
if (pref is EditTextPreference) {
|
||||||
val editTextPref = pref
|
if (pref.getKey().contains("smscommunicator_allowednumbers") && (pref.text == null || TextUtils.isEmpty(pref.text.trim { it <= ' ' }))) {
|
||||||
if (pref.getKey().contains("smscommunicator_allowednumbers") && (editTextPref.text == null || TextUtils.isEmpty(editTextPref.text.trim { it <= ' ' }))) {
|
|
||||||
pref.setSummary(resourceHelper.gs(R.string.smscommunicator_allowednumbers_summary))
|
pref.setSummary(resourceHelper.gs(R.string.smscommunicator_allowednumbers_summary))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -204,7 +205,7 @@ class SmsCommunicatorPlugin @Inject constructor(
|
||||||
val pump = activePlugin.activePump
|
val pump = activePlugin.activePump
|
||||||
messages.add(receivedSms)
|
messages.add(receivedSms)
|
||||||
aapsLogger.debug(LTag.SMS, receivedSms.toString())
|
aapsLogger.debug(LTag.SMS, receivedSms.toString())
|
||||||
val splitted = receivedSms.text.split(Regex("\\s+")).toTypedArray()
|
val divided = receivedSms.text.split(Regex("\\s+")).toTypedArray()
|
||||||
val remoteCommandsAllowed = sp.getBoolean(R.string.key_smscommunicator_remotecommandsallowed, false)
|
val remoteCommandsAllowed = sp.getBoolean(R.string.key_smscommunicator_remotecommandsallowed, false)
|
||||||
|
|
||||||
val minDistance =
|
val minDistance =
|
||||||
|
@ -212,65 +213,65 @@ class SmsCommunicatorPlugin @Inject constructor(
|
||||||
T.mins(sp.getLong(R.string.key_smscommunicator_remotebolusmindistance, T.msecs(Constants.remoteBolusMinDistance).mins())).msecs()
|
T.mins(sp.getLong(R.string.key_smscommunicator_remotebolusmindistance, T.msecs(Constants.remoteBolusMinDistance).mins())).msecs()
|
||||||
else Constants.remoteBolusMinDistance
|
else Constants.remoteBolusMinDistance
|
||||||
|
|
||||||
if (splitted.isNotEmpty() && isCommand(splitted[0].toUpperCase(Locale.getDefault()), receivedSms.phoneNumber)) {
|
if (divided.isNotEmpty() && isCommand(divided[0].toUpperCase(Locale.getDefault()), receivedSms.phoneNumber)) {
|
||||||
when (splitted[0].toUpperCase(Locale.getDefault())) {
|
when (divided[0].toUpperCase(Locale.getDefault())) {
|
||||||
"BG" ->
|
"BG" ->
|
||||||
if (splitted.size == 1) processBG(receivedSms)
|
if (divided.size == 1) processBG(receivedSms)
|
||||||
else sendSMS(Sms(receivedSms.phoneNumber, resourceHelper.gs(R.string.wrongformat)))
|
else sendSMS(Sms(receivedSms.phoneNumber, resourceHelper.gs(R.string.wrongformat)))
|
||||||
"LOOP" ->
|
"LOOP" ->
|
||||||
if (!remoteCommandsAllowed) sendSMS(Sms(receivedSms.phoneNumber, resourceHelper.gs(R.string.smscommunicator_remotecommandnotallowed)))
|
if (!remoteCommandsAllowed) sendSMS(Sms(receivedSms.phoneNumber, resourceHelper.gs(R.string.smscommunicator_remotecommandnotallowed)))
|
||||||
else if (splitted.size == 2 || splitted.size == 3) processLOOP(splitted, receivedSms)
|
else if (divided.size == 2 || divided.size == 3) processLOOP(divided, receivedSms)
|
||||||
else sendSMS(Sms(receivedSms.phoneNumber, resourceHelper.gs(R.string.wrongformat)))
|
else sendSMS(Sms(receivedSms.phoneNumber, resourceHelper.gs(R.string.wrongformat)))
|
||||||
"TREATMENTS" ->
|
"TREATMENTS" ->
|
||||||
if (splitted.size == 2) processTREATMENTS(splitted, receivedSms)
|
if (divided.size == 2) processTREATMENTS(divided, receivedSms)
|
||||||
else sendSMS(Sms(receivedSms.phoneNumber, resourceHelper.gs(R.string.wrongformat)))
|
else sendSMS(Sms(receivedSms.phoneNumber, resourceHelper.gs(R.string.wrongformat)))
|
||||||
"NSCLIENT" ->
|
"NSCLIENT" ->
|
||||||
if (splitted.size == 2) processNSCLIENT(splitted, receivedSms)
|
if (divided.size == 2) processNSCLIENT(divided, receivedSms)
|
||||||
else sendSMS(Sms(receivedSms.phoneNumber, resourceHelper.gs(R.string.wrongformat)))
|
else sendSMS(Sms(receivedSms.phoneNumber, resourceHelper.gs(R.string.wrongformat)))
|
||||||
"PUMP" ->
|
"PUMP" ->
|
||||||
if (!remoteCommandsAllowed && splitted.size > 1) sendSMS(Sms(receivedSms.phoneNumber, resourceHelper.gs(R.string.smscommunicator_remotecommandnotallowed)))
|
if (!remoteCommandsAllowed && divided.size > 1) sendSMS(Sms(receivedSms.phoneNumber, resourceHelper.gs(R.string.smscommunicator_remotecommandnotallowed)))
|
||||||
else if (splitted.size <= 3) processPUMP(splitted, receivedSms)
|
else if (divided.size <= 3) processPUMP(divided, receivedSms)
|
||||||
else sendSMS(Sms(receivedSms.phoneNumber, resourceHelper.gs(R.string.wrongformat)))
|
else sendSMS(Sms(receivedSms.phoneNumber, resourceHelper.gs(R.string.wrongformat)))
|
||||||
"PROFILE" ->
|
"PROFILE" ->
|
||||||
if (!remoteCommandsAllowed) sendSMS(Sms(receivedSms.phoneNumber, resourceHelper.gs(R.string.smscommunicator_remotecommandnotallowed)))
|
if (!remoteCommandsAllowed) sendSMS(Sms(receivedSms.phoneNumber, resourceHelper.gs(R.string.smscommunicator_remotecommandnotallowed)))
|
||||||
else if (splitted.size == 2 || splitted.size == 3) processPROFILE(splitted, receivedSms)
|
else if (divided.size == 2 || divided.size == 3) processPROFILE(divided, receivedSms)
|
||||||
else sendSMS(Sms(receivedSms.phoneNumber, resourceHelper.gs(R.string.wrongformat)))
|
else sendSMS(Sms(receivedSms.phoneNumber, resourceHelper.gs(R.string.wrongformat)))
|
||||||
"BASAL" ->
|
"BASAL" ->
|
||||||
if (!remoteCommandsAllowed) sendSMS(Sms(receivedSms.phoneNumber, resourceHelper.gs(R.string.smscommunicator_remotecommandnotallowed)))
|
if (!remoteCommandsAllowed) sendSMS(Sms(receivedSms.phoneNumber, resourceHelper.gs(R.string.smscommunicator_remotecommandnotallowed)))
|
||||||
else if (splitted.size == 2 || splitted.size == 3) processBASAL(splitted, receivedSms)
|
else if (divided.size == 2 || divided.size == 3) processBASAL(divided, receivedSms)
|
||||||
else sendSMS(Sms(receivedSms.phoneNumber, resourceHelper.gs(R.string.wrongformat)))
|
else sendSMS(Sms(receivedSms.phoneNumber, resourceHelper.gs(R.string.wrongformat)))
|
||||||
"EXTENDED" ->
|
"EXTENDED" ->
|
||||||
if (!remoteCommandsAllowed) sendSMS(Sms(receivedSms.phoneNumber, resourceHelper.gs(R.string.smscommunicator_remotecommandnotallowed)))
|
if (!remoteCommandsAllowed) sendSMS(Sms(receivedSms.phoneNumber, resourceHelper.gs(R.string.smscommunicator_remotecommandnotallowed)))
|
||||||
else if (splitted.size == 2 || splitted.size == 3) processEXTENDED(splitted, receivedSms)
|
else if (divided.size == 2 || divided.size == 3) processEXTENDED(divided, receivedSms)
|
||||||
else sendSMS(Sms(receivedSms.phoneNumber, resourceHelper.gs(R.string.wrongformat)))
|
else sendSMS(Sms(receivedSms.phoneNumber, resourceHelper.gs(R.string.wrongformat)))
|
||||||
"BOLUS" ->
|
"BOLUS" ->
|
||||||
if (!remoteCommandsAllowed) sendSMS(Sms(receivedSms.phoneNumber, resourceHelper.gs(R.string.smscommunicator_remotecommandnotallowed)))
|
if (!remoteCommandsAllowed) sendSMS(Sms(receivedSms.phoneNumber, resourceHelper.gs(R.string.smscommunicator_remotecommandnotallowed)))
|
||||||
else if (splitted.size == 2 && DateUtil.now() - lastRemoteBolusTime < minDistance) sendSMS(Sms(receivedSms.phoneNumber, resourceHelper.gs(R.string.smscommunicator_remotebolusnotallowed)))
|
else if (divided.size == 2 && DateUtil.now() - lastRemoteBolusTime < minDistance) sendSMS(Sms(receivedSms.phoneNumber, resourceHelper.gs(R.string.smscommunicator_remotebolusnotallowed)))
|
||||||
else if (splitted.size == 2 && pump.isSuspended) sendSMS(Sms(receivedSms.phoneNumber, resourceHelper.gs(R.string.pumpsuspended)))
|
else if (divided.size == 2 && pump.isSuspended) sendSMS(Sms(receivedSms.phoneNumber, resourceHelper.gs(R.string.pumpsuspended)))
|
||||||
else if (splitted.size == 2 || splitted.size == 3) processBOLUS(splitted, receivedSms)
|
else if (divided.size == 2 || divided.size == 3) processBOLUS(divided, receivedSms)
|
||||||
else sendSMS(Sms(receivedSms.phoneNumber, resourceHelper.gs(R.string.wrongformat)))
|
else sendSMS(Sms(receivedSms.phoneNumber, resourceHelper.gs(R.string.wrongformat)))
|
||||||
"CARBS" ->
|
"CARBS" ->
|
||||||
if (!remoteCommandsAllowed) sendSMS(Sms(receivedSms.phoneNumber, resourceHelper.gs(R.string.smscommunicator_remotecommandnotallowed)))
|
if (!remoteCommandsAllowed) sendSMS(Sms(receivedSms.phoneNumber, resourceHelper.gs(R.string.smscommunicator_remotecommandnotallowed)))
|
||||||
else if (splitted.size == 2 || splitted.size == 3) processCARBS(splitted, receivedSms)
|
else if (divided.size == 2 || divided.size == 3) processCARBS(divided, receivedSms)
|
||||||
else sendSMS(Sms(receivedSms.phoneNumber, resourceHelper.gs(R.string.wrongformat)))
|
else sendSMS(Sms(receivedSms.phoneNumber, resourceHelper.gs(R.string.wrongformat)))
|
||||||
"CAL" ->
|
"CAL" ->
|
||||||
if (!remoteCommandsAllowed) sendSMS(Sms(receivedSms.phoneNumber, resourceHelper.gs(R.string.smscommunicator_remotecommandnotallowed)))
|
if (!remoteCommandsAllowed) sendSMS(Sms(receivedSms.phoneNumber, resourceHelper.gs(R.string.smscommunicator_remotecommandnotallowed)))
|
||||||
else if (splitted.size == 2) processCAL(splitted, receivedSms)
|
else if (divided.size == 2) processCAL(divided, receivedSms)
|
||||||
else sendSMS(Sms(receivedSms.phoneNumber, resourceHelper.gs(R.string.wrongformat)))
|
else sendSMS(Sms(receivedSms.phoneNumber, resourceHelper.gs(R.string.wrongformat)))
|
||||||
"TARGET" ->
|
"TARGET" ->
|
||||||
if (!remoteCommandsAllowed) sendSMS(Sms(receivedSms.phoneNumber, resourceHelper.gs(R.string.smscommunicator_remotecommandnotallowed)))
|
if (!remoteCommandsAllowed) sendSMS(Sms(receivedSms.phoneNumber, resourceHelper.gs(R.string.smscommunicator_remotecommandnotallowed)))
|
||||||
else if (splitted.size == 2) processTARGET(splitted, receivedSms)
|
else if (divided.size == 2) processTARGET(divided, receivedSms)
|
||||||
else sendSMS(Sms(receivedSms.phoneNumber, resourceHelper.gs(R.string.wrongformat)))
|
else sendSMS(Sms(receivedSms.phoneNumber, resourceHelper.gs(R.string.wrongformat)))
|
||||||
"SMS" ->
|
"SMS" ->
|
||||||
if (!remoteCommandsAllowed) sendSMS(Sms(receivedSms.phoneNumber, resourceHelper.gs(R.string.smscommunicator_remotecommandnotallowed)))
|
if (!remoteCommandsAllowed) sendSMS(Sms(receivedSms.phoneNumber, resourceHelper.gs(R.string.smscommunicator_remotecommandnotallowed)))
|
||||||
else if (splitted.size == 2) processSMS(splitted, receivedSms)
|
else if (divided.size == 2) processSMS(divided, receivedSms)
|
||||||
else sendSMS(Sms(receivedSms.phoneNumber, resourceHelper.gs(R.string.wrongformat)))
|
else sendSMS(Sms(receivedSms.phoneNumber, resourceHelper.gs(R.string.wrongformat)))
|
||||||
"HELP" ->
|
"HELP" ->
|
||||||
if (splitted.size == 1 || splitted.size == 2) processHELP(splitted, receivedSms)
|
if (divided.size == 1 || divided.size == 2) processHELP(divided, receivedSms)
|
||||||
else sendSMS(Sms(receivedSms.phoneNumber, resourceHelper.gs(R.string.wrongformat)))
|
else sendSMS(Sms(receivedSms.phoneNumber, resourceHelper.gs(R.string.wrongformat)))
|
||||||
else ->
|
else ->
|
||||||
if (messageToConfirm?.requester?.phoneNumber == receivedSms.phoneNumber) {
|
if (messageToConfirm?.requester?.phoneNumber == receivedSms.phoneNumber) {
|
||||||
messageToConfirm?.action(splitted[0])
|
messageToConfirm?.action(divided[0])
|
||||||
messageToConfirm = null
|
messageToConfirm = null
|
||||||
} else sendSMS(Sms(receivedSms.phoneNumber, resourceHelper.gs(R.string.smscommunicator_unknowncommand)))
|
} else sendSMS(Sms(receivedSms.phoneNumber, resourceHelper.gs(R.string.smscommunicator_unknowncommand)))
|
||||||
}
|
}
|
||||||
|
@ -305,11 +306,11 @@ class SmsCommunicatorPlugin @Inject constructor(
|
||||||
receivedSms.processed = true
|
receivedSms.processed = true
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun processLOOP(splitted: Array<String>, receivedSms: Sms) {
|
private fun processLOOP(divided: Array<String>, receivedSms: Sms) {
|
||||||
when (splitted[1].toUpperCase(Locale.getDefault())) {
|
when (divided[1].toUpperCase(Locale.getDefault())) {
|
||||||
"DISABLE", "STOP" -> {
|
"DISABLE", "STOP" -> {
|
||||||
if (loopPlugin.isEnabled(PluginType.LOOP)) {
|
if (loopPlugin.isEnabled(PluginType.LOOP)) {
|
||||||
val passCode = generatePasscode()
|
val passCode = generatePassCode()
|
||||||
val reply = String.format(resourceHelper.gs(R.string.smscommunicator_loopdisablereplywithcode), passCode)
|
val reply = String.format(resourceHelper.gs(R.string.smscommunicator_loopdisablereplywithcode), passCode)
|
||||||
receivedSms.processed = true
|
receivedSms.processed = true
|
||||||
messageToConfirm = AuthRequest(injector, receivedSms, reply, passCode, object : SmsAction() {
|
messageToConfirm = AuthRequest(injector, receivedSms, reply, passCode, object : SmsAction() {
|
||||||
|
@ -333,7 +334,7 @@ class SmsCommunicatorPlugin @Inject constructor(
|
||||||
|
|
||||||
"ENABLE", "START" -> {
|
"ENABLE", "START" -> {
|
||||||
if (!loopPlugin.isEnabled(PluginType.LOOP)) {
|
if (!loopPlugin.isEnabled(PluginType.LOOP)) {
|
||||||
val passCode = generatePasscode()
|
val passCode = generatePassCode()
|
||||||
val reply = String.format(resourceHelper.gs(R.string.smscommunicator_loopenablereplywithcode), passCode)
|
val reply = String.format(resourceHelper.gs(R.string.smscommunicator_loopenablereplywithcode), passCode)
|
||||||
receivedSms.processed = true
|
receivedSms.processed = true
|
||||||
messageToConfirm = AuthRequest(injector, receivedSms, reply, passCode, object : SmsAction() {
|
messageToConfirm = AuthRequest(injector, receivedSms, reply, passCode, object : SmsAction() {
|
||||||
|
@ -360,7 +361,7 @@ class SmsCommunicatorPlugin @Inject constructor(
|
||||||
}
|
}
|
||||||
|
|
||||||
"RESUME" -> {
|
"RESUME" -> {
|
||||||
val passCode = generatePasscode()
|
val passCode = generatePassCode()
|
||||||
val reply = String.format(resourceHelper.gs(R.string.smscommunicator_loopresumereplywithcode), passCode)
|
val reply = String.format(resourceHelper.gs(R.string.smscommunicator_loopresumereplywithcode), passCode)
|
||||||
receivedSms.processed = true
|
receivedSms.processed = true
|
||||||
messageToConfirm = AuthRequest(injector, receivedSms, reply, passCode, object : SmsAction() {
|
messageToConfirm = AuthRequest(injector, receivedSms, reply, passCode, object : SmsAction() {
|
||||||
|
@ -385,15 +386,15 @@ class SmsCommunicatorPlugin @Inject constructor(
|
||||||
|
|
||||||
"SUSPEND" -> {
|
"SUSPEND" -> {
|
||||||
var duration = 0
|
var duration = 0
|
||||||
if (splitted.size == 3) duration = SafeParse.stringToInt(splitted[2])
|
if (divided.size == 3) duration = SafeParse.stringToInt(divided[2])
|
||||||
duration = Math.max(0, duration)
|
duration = max(0, duration)
|
||||||
duration = Math.min(180, duration)
|
duration = min(180, duration)
|
||||||
if (duration == 0) {
|
if (duration == 0) {
|
||||||
receivedSms.processed = true
|
receivedSms.processed = true
|
||||||
sendSMS(Sms(receivedSms.phoneNumber, resourceHelper.gs(R.string.smscommunicator_wrongduration)))
|
sendSMS(Sms(receivedSms.phoneNumber, resourceHelper.gs(R.string.smscommunicator_wrongduration)))
|
||||||
return
|
return
|
||||||
} else {
|
} else {
|
||||||
val passCode = generatePasscode()
|
val passCode = generatePassCode()
|
||||||
val reply = String.format(resourceHelper.gs(R.string.smscommunicator_suspendreplywithcode), duration, passCode)
|
val reply = String.format(resourceHelper.gs(R.string.smscommunicator_suspendreplywithcode), duration, passCode)
|
||||||
receivedSms.processed = true
|
receivedSms.processed = true
|
||||||
messageToConfirm = AuthRequest(injector, receivedSms, reply, passCode, object : SmsAction(duration) {
|
messageToConfirm = AuthRequest(injector, receivedSms, reply, passCode, object : SmsAction(duration) {
|
||||||
|
@ -424,8 +425,8 @@ class SmsCommunicatorPlugin @Inject constructor(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun processTREATMENTS(splitted: Array<String>, receivedSms: Sms) {
|
private fun processTREATMENTS(divided: Array<String>, receivedSms: Sms) {
|
||||||
if (splitted[1].toUpperCase(Locale.getDefault()) == "REFRESH") {
|
if (divided[1].toUpperCase(Locale.getDefault()) == "REFRESH") {
|
||||||
(activePlugin.activeTreatments as TreatmentsPlugin).service.resetTreatments()
|
(activePlugin.activeTreatments as TreatmentsPlugin).service.resetTreatments()
|
||||||
rxBus.send(EventNSClientRestart())
|
rxBus.send(EventNSClientRestart())
|
||||||
sendSMS(Sms(receivedSms.phoneNumber, "TREATMENTS REFRESH SENT"))
|
sendSMS(Sms(receivedSms.phoneNumber, "TREATMENTS REFRESH SENT"))
|
||||||
|
@ -434,8 +435,8 @@ class SmsCommunicatorPlugin @Inject constructor(
|
||||||
sendSMS(Sms(receivedSms.phoneNumber, resourceHelper.gs(R.string.wrongformat)))
|
sendSMS(Sms(receivedSms.phoneNumber, resourceHelper.gs(R.string.wrongformat)))
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun processNSCLIENT(splitted: Array<String>, receivedSms: Sms) {
|
private fun processNSCLIENT(divided: Array<String>, receivedSms: Sms) {
|
||||||
if (splitted[1].toUpperCase(Locale.getDefault()) == "RESTART") {
|
if (divided[1].toUpperCase(Locale.getDefault()) == "RESTART") {
|
||||||
rxBus.send(EventNSClientRestart())
|
rxBus.send(EventNSClientRestart())
|
||||||
sendSMS(Sms(receivedSms.phoneNumber, "NSCLIENT RESTART SENT"))
|
sendSMS(Sms(receivedSms.phoneNumber, "NSCLIENT RESTART SENT"))
|
||||||
receivedSms.processed = true
|
receivedSms.processed = true
|
||||||
|
@ -443,21 +444,26 @@ class SmsCommunicatorPlugin @Inject constructor(
|
||||||
sendSMS(Sms(receivedSms.phoneNumber, resourceHelper.gs(R.string.wrongformat)))
|
sendSMS(Sms(receivedSms.phoneNumber, resourceHelper.gs(R.string.wrongformat)))
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun processHELP(splitted: Array<String>, receivedSms: Sms) {
|
private fun processHELP(divided: Array<String>, receivedSms: Sms) {
|
||||||
if (splitted.size == 1) {
|
when {
|
||||||
|
divided.size == 1 -> {
|
||||||
sendSMS(Sms(receivedSms.phoneNumber, commands.keys.toString().replace("[", "").replace("]", "")))
|
sendSMS(Sms(receivedSms.phoneNumber, commands.keys.toString().replace("[", "").replace("]", "")))
|
||||||
receivedSms.processed = true
|
receivedSms.processed = true
|
||||||
} else if (isCommand(splitted[1].toUpperCase(Locale.getDefault()), receivedSms.phoneNumber)) {
|
}
|
||||||
commands[splitted[1].toUpperCase(Locale.getDefault())]?.let {
|
|
||||||
|
isCommand(divided[1].toUpperCase(Locale.getDefault()), receivedSms.phoneNumber) -> {
|
||||||
|
commands[divided[1].toUpperCase(Locale.getDefault())]?.let {
|
||||||
sendSMS(Sms(receivedSms.phoneNumber, it))
|
sendSMS(Sms(receivedSms.phoneNumber, it))
|
||||||
receivedSms.processed = true
|
receivedSms.processed = true
|
||||||
}
|
}
|
||||||
} else
|
|
||||||
sendSMS(Sms(receivedSms.phoneNumber, resourceHelper.gs(R.string.wrongformat)))
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun processPUMP(splitted: Array<String>, receivedSms: Sms) {
|
else -> sendSMS(Sms(receivedSms.phoneNumber, resourceHelper.gs(R.string.wrongformat)))
|
||||||
if (splitted.size == 1) {
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun processPUMP(divided: Array<String>, receivedSms: Sms) {
|
||||||
|
if (divided.size == 1) {
|
||||||
commandQueue.readStatus("SMS", object : Callback() {
|
commandQueue.readStatus("SMS", object : Callback() {
|
||||||
override fun run() {
|
override fun run() {
|
||||||
val pump = activePlugin.activePump
|
val pump = activePlugin.activePump
|
||||||
|
@ -471,8 +477,8 @@ class SmsCommunicatorPlugin @Inject constructor(
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
receivedSms.processed = true
|
receivedSms.processed = true
|
||||||
} else if ((splitted.size == 2) && (splitted[1].equals("CONNECT", ignoreCase = true))) {
|
} else if ((divided.size == 2) && (divided[1].equals("CONNECT", ignoreCase = true))) {
|
||||||
val passCode = generatePasscode()
|
val passCode = generatePassCode()
|
||||||
val reply = String.format(resourceHelper.gs(R.string.smscommunicator_pumpconnectwithcode), passCode)
|
val reply = String.format(resourceHelper.gs(R.string.smscommunicator_pumpconnectwithcode), passCode)
|
||||||
receivedSms.processed = true
|
receivedSms.processed = true
|
||||||
messageToConfirm = AuthRequest(injector, receivedSms, reply, passCode, object : SmsAction() {
|
messageToConfirm = AuthRequest(injector, receivedSms, reply, passCode, object : SmsAction() {
|
||||||
|
@ -492,16 +498,16 @@ class SmsCommunicatorPlugin @Inject constructor(
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
} else if ((splitted.size == 3) && (splitted[1].equals("DISCONNECT", ignoreCase = true))) {
|
} else if ((divided.size == 3) && (divided[1].equals("DISCONNECT", ignoreCase = true))) {
|
||||||
var duration = SafeParse.stringToInt(splitted[2])
|
var duration = SafeParse.stringToInt(divided[2])
|
||||||
duration = Math.max(0, duration)
|
duration = max(0, duration)
|
||||||
duration = Math.min(120, duration)
|
duration = min(120, duration)
|
||||||
if (duration == 0) {
|
if (duration == 0) {
|
||||||
receivedSms.processed = true
|
receivedSms.processed = true
|
||||||
sendSMS(Sms(receivedSms.phoneNumber, resourceHelper.gs(R.string.smscommunicator_wrongduration)))
|
sendSMS(Sms(receivedSms.phoneNumber, resourceHelper.gs(R.string.smscommunicator_wrongduration)))
|
||||||
return
|
return
|
||||||
} else {
|
} else {
|
||||||
val passCode = generatePasscode()
|
val passCode = generatePassCode()
|
||||||
val reply = String.format(resourceHelper.gs(R.string.smscommunicator_pumpdisconnectwithcode), duration, passCode)
|
val reply = String.format(resourceHelper.gs(R.string.smscommunicator_pumpdisconnectwithcode), duration, passCode)
|
||||||
receivedSms.processed = true
|
receivedSms.processed = true
|
||||||
messageToConfirm = AuthRequest(injector, receivedSms, reply, passCode, object : SmsAction() {
|
messageToConfirm = AuthRequest(injector, receivedSms, reply, passCode, object : SmsAction() {
|
||||||
|
@ -520,7 +526,7 @@ class SmsCommunicatorPlugin @Inject constructor(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun processPROFILE(splitted: Array<String>, receivedSms: Sms) { // load profiles
|
private fun processPROFILE(divided: Array<String>, receivedSms: Sms) { // load profiles
|
||||||
val anInterface = activePlugin.activeProfileInterface
|
val anInterface = activePlugin.activeProfileInterface
|
||||||
val store = anInterface.profile
|
val store = anInterface.profile
|
||||||
if (store == null) {
|
if (store == null) {
|
||||||
|
@ -530,9 +536,9 @@ class SmsCommunicatorPlugin @Inject constructor(
|
||||||
}
|
}
|
||||||
val profileName = profileFunction.getProfileName()
|
val profileName = profileFunction.getProfileName()
|
||||||
val list = store.getProfileList()
|
val list = store.getProfileList()
|
||||||
if (splitted[1].toUpperCase(Locale.getDefault()) == "STATUS") {
|
if (divided[1].toUpperCase(Locale.getDefault()) == "STATUS") {
|
||||||
sendSMS(Sms(receivedSms.phoneNumber, profileName))
|
sendSMS(Sms(receivedSms.phoneNumber, profileName))
|
||||||
} else if (splitted[1].toUpperCase(Locale.getDefault()) == "LIST") {
|
} else if (divided[1].toUpperCase(Locale.getDefault()) == "LIST") {
|
||||||
if (list.isEmpty()) sendSMS(Sms(receivedSms.phoneNumber, resourceHelper.gs(R.string.invalidprofile)))
|
if (list.isEmpty()) sendSMS(Sms(receivedSms.phoneNumber, resourceHelper.gs(R.string.invalidprofile)))
|
||||||
else {
|
else {
|
||||||
var reply = ""
|
var reply = ""
|
||||||
|
@ -544,9 +550,9 @@ class SmsCommunicatorPlugin @Inject constructor(
|
||||||
sendSMS(Sms(receivedSms.phoneNumber, reply))
|
sendSMS(Sms(receivedSms.phoneNumber, reply))
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
val pindex = SafeParse.stringToInt(splitted[1])
|
val pindex = SafeParse.stringToInt(divided[1])
|
||||||
var percentage = 100
|
var percentage = 100
|
||||||
if (splitted.size > 2) percentage = SafeParse.stringToInt(splitted[2])
|
if (divided.size > 2) percentage = SafeParse.stringToInt(divided[2])
|
||||||
if (pindex > list.size) sendSMS(Sms(receivedSms.phoneNumber, resourceHelper.gs(R.string.wrongformat)))
|
if (pindex > list.size) sendSMS(Sms(receivedSms.phoneNumber, resourceHelper.gs(R.string.wrongformat)))
|
||||||
else if (percentage == 0) sendSMS(Sms(receivedSms.phoneNumber, resourceHelper.gs(R.string.wrongformat)))
|
else if (percentage == 0) sendSMS(Sms(receivedSms.phoneNumber, resourceHelper.gs(R.string.wrongformat)))
|
||||||
else if (pindex == 0) sendSMS(Sms(receivedSms.phoneNumber, resourceHelper.gs(R.string.wrongformat)))
|
else if (pindex == 0) sendSMS(Sms(receivedSms.phoneNumber, resourceHelper.gs(R.string.wrongformat)))
|
||||||
|
@ -554,7 +560,7 @@ class SmsCommunicatorPlugin @Inject constructor(
|
||||||
val profile = store.getSpecificProfile(list[pindex - 1] as String)
|
val profile = store.getSpecificProfile(list[pindex - 1] as String)
|
||||||
if (profile == null) sendSMS(Sms(receivedSms.phoneNumber, resourceHelper.gs(R.string.noprofile)))
|
if (profile == null) sendSMS(Sms(receivedSms.phoneNumber, resourceHelper.gs(R.string.noprofile)))
|
||||||
else {
|
else {
|
||||||
val passCode = generatePasscode()
|
val passCode = generatePassCode()
|
||||||
val reply = String.format(resourceHelper.gs(R.string.smscommunicator_profilereplywithcode), list[pindex - 1], percentage, passCode)
|
val reply = String.format(resourceHelper.gs(R.string.smscommunicator_profilereplywithcode), list[pindex - 1], percentage, passCode)
|
||||||
receivedSms.processed = true
|
receivedSms.processed = true
|
||||||
val finalPercentage = percentage
|
val finalPercentage = percentage
|
||||||
|
@ -571,9 +577,9 @@ class SmsCommunicatorPlugin @Inject constructor(
|
||||||
receivedSms.processed = true
|
receivedSms.processed = true
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun processBASAL(splitted: Array<String>, receivedSms: Sms) {
|
private fun processBASAL(divided: Array<String>, receivedSms: Sms) {
|
||||||
if (splitted[1].toUpperCase(Locale.getDefault()) == "CANCEL" || splitted[1].toUpperCase(Locale.getDefault()) == "STOP") {
|
if (divided[1].toUpperCase(Locale.getDefault()) == "CANCEL" || divided[1].toUpperCase(Locale.getDefault()) == "STOP") {
|
||||||
val passCode = generatePasscode()
|
val passCode = generatePassCode()
|
||||||
val reply = String.format(resourceHelper.gs(R.string.smscommunicator_basalstopreplywithcode), passCode)
|
val reply = String.format(resourceHelper.gs(R.string.smscommunicator_basalstopreplywithcode), passCode)
|
||||||
receivedSms.processed = true
|
receivedSms.processed = true
|
||||||
messageToConfirm = AuthRequest(injector, receivedSms, reply, passCode, object : SmsAction() {
|
messageToConfirm = AuthRequest(injector, receivedSms, reply, passCode, object : SmsAction() {
|
||||||
|
@ -594,18 +600,18 @@ class SmsCommunicatorPlugin @Inject constructor(
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
} else if (splitted[1].endsWith("%")) {
|
} else if (divided[1].endsWith("%")) {
|
||||||
var tempBasalPct = SafeParse.stringToInt(StringUtils.removeEnd(splitted[1], "%"))
|
var tempBasalPct = SafeParse.stringToInt(StringUtils.removeEnd(divided[1], "%"))
|
||||||
val durationStep = activePlugin.activePump.model().tbrSettings.durationStep
|
val durationStep = activePlugin.activePump.model().tbrSettings.durationStep
|
||||||
var duration = 30
|
var duration = 30
|
||||||
if (splitted.size > 2) duration = SafeParse.stringToInt(splitted[2])
|
if (divided.size > 2) duration = SafeParse.stringToInt(divided[2])
|
||||||
val profile = profileFunction.getProfile()
|
val profile = profileFunction.getProfile()
|
||||||
if (profile == null) sendSMS(Sms(receivedSms.phoneNumber, resourceHelper.gs(R.string.noprofile)))
|
if (profile == null) sendSMS(Sms(receivedSms.phoneNumber, resourceHelper.gs(R.string.noprofile)))
|
||||||
else if (tempBasalPct == 0 && splitted[1] != "0%") sendSMS(Sms(receivedSms.phoneNumber, resourceHelper.gs(R.string.wrongformat)))
|
else if (tempBasalPct == 0 && divided[1] != "0%") sendSMS(Sms(receivedSms.phoneNumber, resourceHelper.gs(R.string.wrongformat)))
|
||||||
else if (duration <= 0 || duration % durationStep != 0) sendSMS(Sms(receivedSms.phoneNumber, resourceHelper.gs(R.string.wrongTbrDuration, durationStep)))
|
else if (duration <= 0 || duration % durationStep != 0) sendSMS(Sms(receivedSms.phoneNumber, resourceHelper.gs(R.string.wrongTbrDuration, durationStep)))
|
||||||
else {
|
else {
|
||||||
tempBasalPct = constraintChecker.applyBasalPercentConstraints(Constraint(tempBasalPct), profile).value()
|
tempBasalPct = constraintChecker.applyBasalPercentConstraints(Constraint(tempBasalPct), profile).value()
|
||||||
val passCode = generatePasscode()
|
val passCode = generatePassCode()
|
||||||
val reply = String.format(resourceHelper.gs(R.string.smscommunicator_basalpctreplywithcode), tempBasalPct, duration, passCode)
|
val reply = String.format(resourceHelper.gs(R.string.smscommunicator_basalpctreplywithcode), tempBasalPct, duration, passCode)
|
||||||
receivedSms.processed = true
|
receivedSms.processed = true
|
||||||
messageToConfirm = AuthRequest(injector, receivedSms, reply, passCode, object : SmsAction(tempBasalPct, duration) {
|
messageToConfirm = AuthRequest(injector, receivedSms, reply, passCode, object : SmsAction(tempBasalPct, duration) {
|
||||||
|
@ -614,8 +620,7 @@ class SmsCommunicatorPlugin @Inject constructor(
|
||||||
commandQueue.tempBasalPercent(anInteger(), secondInteger(), true, profile, object : Callback() {
|
commandQueue.tempBasalPercent(anInteger(), secondInteger(), true, profile, object : Callback() {
|
||||||
override fun run() {
|
override fun run() {
|
||||||
if (result.success) {
|
if (result.success) {
|
||||||
var replyText: String
|
var replyText = if (result.isPercent) String.format(resourceHelper.gs(R.string.smscommunicator_tempbasalset_percent), result.percent, result.duration) else String.format(resourceHelper.gs(R.string.smscommunicator_tempbasalset), result.absolute, result.duration)
|
||||||
replyText = if (result.isPercent) String.format(resourceHelper.gs(R.string.smscommunicator_tempbasalset_percent), result.percent, result.duration) else String.format(resourceHelper.gs(R.string.smscommunicator_tempbasalset), result.absolute, result.duration)
|
|
||||||
replyText += "\n" + activePlugin.activePump.shortStatus(true)
|
replyText += "\n" + activePlugin.activePump.shortStatus(true)
|
||||||
sendSMSToAllNumbers(Sms(receivedSms.phoneNumber, replyText))
|
sendSMSToAllNumbers(Sms(receivedSms.phoneNumber, replyText))
|
||||||
} else {
|
} else {
|
||||||
|
@ -629,17 +634,17 @@ class SmsCommunicatorPlugin @Inject constructor(
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
var tempBasal = SafeParse.stringToDouble(splitted[1])
|
var tempBasal = SafeParse.stringToDouble(divided[1])
|
||||||
val durationStep = activePlugin.activePump.model().tbrSettings.durationStep
|
val durationStep = activePlugin.activePump.model().tbrSettings.durationStep
|
||||||
var duration = 30
|
var duration = 30
|
||||||
if (splitted.size > 2) duration = SafeParse.stringToInt(splitted[2])
|
if (divided.size > 2) duration = SafeParse.stringToInt(divided[2])
|
||||||
val profile = profileFunction.getProfile()
|
val profile = profileFunction.getProfile()
|
||||||
if (profile == null) sendSMS(Sms(receivedSms.phoneNumber, resourceHelper.gs(R.string.noprofile)))
|
if (profile == null) sendSMS(Sms(receivedSms.phoneNumber, resourceHelper.gs(R.string.noprofile)))
|
||||||
else if (tempBasal == 0.0 && splitted[1] != "0") sendSMS(Sms(receivedSms.phoneNumber, resourceHelper.gs(R.string.wrongformat)))
|
else if (tempBasal == 0.0 && divided[1] != "0") sendSMS(Sms(receivedSms.phoneNumber, resourceHelper.gs(R.string.wrongformat)))
|
||||||
else if (duration <= 0 || duration % durationStep != 0) sendSMS(Sms(receivedSms.phoneNumber, resourceHelper.gs(R.string.wrongTbrDuration, durationStep)))
|
else if (duration <= 0 || duration % durationStep != 0) sendSMS(Sms(receivedSms.phoneNumber, resourceHelper.gs(R.string.wrongTbrDuration, durationStep)))
|
||||||
else {
|
else {
|
||||||
tempBasal = constraintChecker.applyBasalConstraints(Constraint(tempBasal), profile).value()
|
tempBasal = constraintChecker.applyBasalConstraints(Constraint(tempBasal), profile).value()
|
||||||
val passCode = generatePasscode()
|
val passCode = generatePassCode()
|
||||||
val reply = String.format(resourceHelper.gs(R.string.smscommunicator_basalreplywithcode), tempBasal, duration, passCode)
|
val reply = String.format(resourceHelper.gs(R.string.smscommunicator_basalreplywithcode), tempBasal, duration, passCode)
|
||||||
receivedSms.processed = true
|
receivedSms.processed = true
|
||||||
messageToConfirm = AuthRequest(injector, receivedSms, reply, passCode, object : SmsAction(tempBasal, duration) {
|
messageToConfirm = AuthRequest(injector, receivedSms, reply, passCode, object : SmsAction(tempBasal, duration) {
|
||||||
|
@ -665,9 +670,9 @@ class SmsCommunicatorPlugin @Inject constructor(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun processEXTENDED(splitted: Array<String>, receivedSms: Sms) {
|
private fun processEXTENDED(divided: Array<String>, receivedSms: Sms) {
|
||||||
if (splitted[1].toUpperCase(Locale.getDefault()) == "CANCEL" || splitted[1].toUpperCase(Locale.getDefault()) == "STOP") {
|
if (divided[1].toUpperCase(Locale.getDefault()) == "CANCEL" || divided[1].toUpperCase(Locale.getDefault()) == "STOP") {
|
||||||
val passCode = generatePasscode()
|
val passCode = generatePassCode()
|
||||||
val reply = String.format(resourceHelper.gs(R.string.smscommunicator_extendedstopreplywithcode), passCode)
|
val reply = String.format(resourceHelper.gs(R.string.smscommunicator_extendedstopreplywithcode), passCode)
|
||||||
receivedSms.processed = true
|
receivedSms.processed = true
|
||||||
messageToConfirm = AuthRequest(injector, receivedSms, reply, passCode, object : SmsAction() {
|
messageToConfirm = AuthRequest(injector, receivedSms, reply, passCode, object : SmsAction() {
|
||||||
|
@ -688,15 +693,15 @@ class SmsCommunicatorPlugin @Inject constructor(
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
} else if (splitted.size != 3) {
|
} else if (divided.size != 3) {
|
||||||
sendSMS(Sms(receivedSms.phoneNumber, resourceHelper.gs(R.string.wrongformat)))
|
sendSMS(Sms(receivedSms.phoneNumber, resourceHelper.gs(R.string.wrongformat)))
|
||||||
} else {
|
} else {
|
||||||
var extended = SafeParse.stringToDouble(splitted[1])
|
var extended = SafeParse.stringToDouble(divided[1])
|
||||||
val duration = SafeParse.stringToInt(splitted[2])
|
val duration = SafeParse.stringToInt(divided[2])
|
||||||
extended = constraintChecker.applyExtendedBolusConstraints(Constraint(extended)).value()
|
extended = constraintChecker.applyExtendedBolusConstraints(Constraint(extended)).value()
|
||||||
if (extended == 0.0 || duration == 0) sendSMS(Sms(receivedSms.phoneNumber, resourceHelper.gs(R.string.wrongformat)))
|
if (extended == 0.0 || duration == 0) sendSMS(Sms(receivedSms.phoneNumber, resourceHelper.gs(R.string.wrongformat)))
|
||||||
else {
|
else {
|
||||||
val passCode = generatePasscode()
|
val passCode = generatePassCode()
|
||||||
val reply = String.format(resourceHelper.gs(R.string.smscommunicator_extendedreplywithcode), extended, duration, passCode)
|
val reply = String.format(resourceHelper.gs(R.string.smscommunicator_extendedreplywithcode), extended, duration, passCode)
|
||||||
receivedSms.processed = true
|
receivedSms.processed = true
|
||||||
messageToConfirm = AuthRequest(injector, receivedSms, reply, passCode, object : SmsAction(extended, duration) {
|
messageToConfirm = AuthRequest(injector, receivedSms, reply, passCode, object : SmsAction(extended, duration) {
|
||||||
|
@ -722,14 +727,14 @@ class SmsCommunicatorPlugin @Inject constructor(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun processBOLUS(splitted: Array<String>, receivedSms: Sms) {
|
private fun processBOLUS(divided: Array<String>, receivedSms: Sms) {
|
||||||
var bolus = SafeParse.stringToDouble(splitted[1])
|
var bolus = SafeParse.stringToDouble(divided[1])
|
||||||
val isMeal = splitted.size > 2 && splitted[2].equals("MEAL", ignoreCase = true)
|
val isMeal = divided.size > 2 && divided[2].equals("MEAL", ignoreCase = true)
|
||||||
bolus = constraintChecker.applyBolusConstraints(Constraint(bolus)).value()
|
bolus = constraintChecker.applyBolusConstraints(Constraint(bolus)).value()
|
||||||
if (splitted.size == 3 && !isMeal) {
|
if (divided.size == 3 && !isMeal) {
|
||||||
sendSMS(Sms(receivedSms.phoneNumber, resourceHelper.gs(R.string.wrongformat)))
|
sendSMS(Sms(receivedSms.phoneNumber, resourceHelper.gs(R.string.wrongformat)))
|
||||||
} else if (bolus > 0.0) {
|
} else if (bolus > 0.0) {
|
||||||
val passCode = generatePasscode()
|
val passCode = generatePassCode()
|
||||||
val reply = if (isMeal)
|
val reply = if (isMeal)
|
||||||
String.format(resourceHelper.gs(R.string.smscommunicator_mealbolusreplywithcode), bolus, passCode)
|
String.format(resourceHelper.gs(R.string.smscommunicator_mealbolusreplywithcode), bolus, passCode)
|
||||||
else
|
else
|
||||||
|
@ -762,9 +767,11 @@ class SmsCommunicatorPlugin @Inject constructor(
|
||||||
else Constants.defaultEatingSoonTTDuration
|
else Constants.defaultEatingSoonTTDuration
|
||||||
var eatingSoonTT = sp.getDouble(R.string.key_eatingsoon_target, if (currentProfile.units == Constants.MMOL) Constants.defaultEatingSoonTTmmol else Constants.defaultEatingSoonTTmgdl)
|
var eatingSoonTT = sp.getDouble(R.string.key_eatingsoon_target, if (currentProfile.units == Constants.MMOL) Constants.defaultEatingSoonTTmmol else Constants.defaultEatingSoonTTmgdl)
|
||||||
eatingSoonTT =
|
eatingSoonTT =
|
||||||
if (eatingSoonTT > 0) eatingSoonTT
|
when {
|
||||||
else if (currentProfile.units == Constants.MMOL) Constants.defaultEatingSoonTTmmol
|
eatingSoonTT > 0 -> eatingSoonTT
|
||||||
else Constants.defaultEatingSoonTTmgdl
|
currentProfile.units == Constants.MMOL -> Constants.defaultEatingSoonTTmmol
|
||||||
|
else -> Constants.defaultEatingSoonTTmgdl
|
||||||
|
}
|
||||||
val tempTarget = TempTarget()
|
val tempTarget = TempTarget()
|
||||||
.date(System.currentTimeMillis())
|
.date(System.currentTimeMillis())
|
||||||
.duration(eatingSoonTTDuration)
|
.duration(eatingSoonTTDuration)
|
||||||
|
@ -794,11 +801,11 @@ class SmsCommunicatorPlugin @Inject constructor(
|
||||||
} else sendSMS(Sms(receivedSms.phoneNumber, resourceHelper.gs(R.string.wrongformat)))
|
} else sendSMS(Sms(receivedSms.phoneNumber, resourceHelper.gs(R.string.wrongformat)))
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun processCARBS(splitted: Array<String>, receivedSms: Sms) {
|
private fun processCARBS(divided: Array<String>, receivedSms: Sms) {
|
||||||
var grams = SafeParse.stringToInt(splitted[1])
|
var grams = SafeParse.stringToInt(divided[1])
|
||||||
var time = DateUtil.now()
|
var time = DateUtil.now()
|
||||||
if (splitted.size > 2) {
|
if (divided.size > 2) {
|
||||||
time = DateUtil.toTodayTime(splitted[2].toUpperCase(Locale.getDefault()))
|
time = DateUtil.toTodayTime(divided[2].toUpperCase(Locale.getDefault()))
|
||||||
if (time == 0L) {
|
if (time == 0L) {
|
||||||
sendSMS(Sms(receivedSms.phoneNumber, resourceHelper.gs(R.string.wrongformat)))
|
sendSMS(Sms(receivedSms.phoneNumber, resourceHelper.gs(R.string.wrongformat)))
|
||||||
return
|
return
|
||||||
|
@ -807,7 +814,7 @@ class SmsCommunicatorPlugin @Inject constructor(
|
||||||
grams = constraintChecker.applyCarbsConstraints(Constraint(grams)).value()
|
grams = constraintChecker.applyCarbsConstraints(Constraint(grams)).value()
|
||||||
if (grams == 0) sendSMS(Sms(receivedSms.phoneNumber, resourceHelper.gs(R.string.wrongformat)))
|
if (grams == 0) sendSMS(Sms(receivedSms.phoneNumber, resourceHelper.gs(R.string.wrongformat)))
|
||||||
else {
|
else {
|
||||||
val passCode = generatePasscode()
|
val passCode = generatePassCode()
|
||||||
val reply = String.format(resourceHelper.gs(R.string.smscommunicator_carbsreplywithcode), grams, dateUtil.timeString(time), passCode)
|
val reply = String.format(resourceHelper.gs(R.string.smscommunicator_carbsreplywithcode), grams, dateUtil.timeString(time), passCode)
|
||||||
receivedSms.processed = true
|
receivedSms.processed = true
|
||||||
messageToConfirm = AuthRequest(injector, receivedSms, reply, passCode, object : SmsAction(grams, time) {
|
messageToConfirm = AuthRequest(injector, receivedSms, reply, passCode, object : SmsAction(grams, time) {
|
||||||
|
@ -842,14 +849,14 @@ class SmsCommunicatorPlugin @Inject constructor(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun processTARGET(splitted: Array<String>, receivedSms: Sms) {
|
private fun processTARGET(divided: Array<String>, receivedSms: Sms) {
|
||||||
val isMeal = splitted[1].equals("MEAL", ignoreCase = true)
|
val isMeal = divided[1].equals("MEAL", ignoreCase = true)
|
||||||
val isActivity = splitted[1].equals("ACTIVITY", ignoreCase = true)
|
val isActivity = divided[1].equals("ACTIVITY", ignoreCase = true)
|
||||||
val isHypo = splitted[1].equals("HYPO", ignoreCase = true)
|
val isHypo = divided[1].equals("HYPO", ignoreCase = true)
|
||||||
val isStop = splitted[1].equals("STOP", ignoreCase = true) || splitted[1].equals("CANCEL", ignoreCase = true)
|
val isStop = divided[1].equals("STOP", ignoreCase = true) || divided[1].equals("CANCEL", ignoreCase = true)
|
||||||
if (isMeal || isActivity || isHypo) {
|
if (isMeal || isActivity || isHypo) {
|
||||||
val passCode = generatePasscode()
|
val passCode = generatePassCode()
|
||||||
val reply = String.format(resourceHelper.gs(R.string.smscommunicator_temptargetwithcode), splitted[1].toUpperCase(Locale.getDefault()), passCode)
|
val reply = String.format(resourceHelper.gs(R.string.smscommunicator_temptargetwithcode), divided[1].toUpperCase(Locale.getDefault()), passCode)
|
||||||
receivedSms.processed = true
|
receivedSms.processed = true
|
||||||
messageToConfirm = AuthRequest(injector, receivedSms, reply, passCode, object : SmsAction() {
|
messageToConfirm = AuthRequest(injector, receivedSms, reply, passCode, object : SmsAction() {
|
||||||
override fun run() {
|
override fun run() {
|
||||||
|
@ -904,7 +911,7 @@ class SmsCommunicatorPlugin @Inject constructor(
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
} else if (isStop) {
|
} else if (isStop) {
|
||||||
val passCode = generatePasscode()
|
val passCode = generatePassCode()
|
||||||
val reply = String.format(resourceHelper.gs(R.string.smscommunicator_temptargetcancel), passCode)
|
val reply = String.format(resourceHelper.gs(R.string.smscommunicator_temptargetcancel), passCode)
|
||||||
receivedSms.processed = true
|
receivedSms.processed = true
|
||||||
messageToConfirm = AuthRequest(injector, receivedSms, reply, passCode, object : SmsAction() {
|
messageToConfirm = AuthRequest(injector, receivedSms, reply, passCode, object : SmsAction() {
|
||||||
|
@ -925,11 +932,11 @@ class SmsCommunicatorPlugin @Inject constructor(
|
||||||
sendSMS(Sms(receivedSms.phoneNumber, resourceHelper.gs(R.string.wrongformat)))
|
sendSMS(Sms(receivedSms.phoneNumber, resourceHelper.gs(R.string.wrongformat)))
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun processSMS(splitted: Array<String>, receivedSms: Sms) {
|
private fun processSMS(divided: Array<String>, receivedSms: Sms) {
|
||||||
val isStop = (splitted[1].equals("STOP", ignoreCase = true)
|
val isStop = (divided[1].equals("STOP", ignoreCase = true)
|
||||||
|| splitted[1].equals("DISABLE", ignoreCase = true))
|
|| divided[1].equals("DISABLE", ignoreCase = true))
|
||||||
if (isStop) {
|
if (isStop) {
|
||||||
val passCode = generatePasscode()
|
val passCode = generatePassCode()
|
||||||
val reply = String.format(resourceHelper.gs(R.string.smscommunicator_stopsmswithcode), passCode)
|
val reply = String.format(resourceHelper.gs(R.string.smscommunicator_stopsmswithcode), passCode)
|
||||||
receivedSms.processed = true
|
receivedSms.processed = true
|
||||||
messageToConfirm = AuthRequest(injector, receivedSms, reply, passCode, object : SmsAction() {
|
messageToConfirm = AuthRequest(injector, receivedSms, reply, passCode, object : SmsAction() {
|
||||||
|
@ -943,10 +950,10 @@ class SmsCommunicatorPlugin @Inject constructor(
|
||||||
} else sendSMS(Sms(receivedSms.phoneNumber, resourceHelper.gs(R.string.wrongformat)))
|
} else sendSMS(Sms(receivedSms.phoneNumber, resourceHelper.gs(R.string.wrongformat)))
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun processCAL(splitted: Array<String>, receivedSms: Sms) {
|
private fun processCAL(divided: Array<String>, receivedSms: Sms) {
|
||||||
val cal = SafeParse.stringToDouble(splitted[1])
|
val cal = SafeParse.stringToDouble(divided[1])
|
||||||
if (cal > 0.0) {
|
if (cal > 0.0) {
|
||||||
val passCode = generatePasscode()
|
val passCode = generatePassCode()
|
||||||
val reply = String.format(resourceHelper.gs(R.string.smscommunicator_calibrationreplywithcode), cal, passCode)
|
val reply = String.format(resourceHelper.gs(R.string.smscommunicator_calibrationreplywithcode), cal, passCode)
|
||||||
receivedSms.processed = true
|
receivedSms.processed = true
|
||||||
messageToConfirm = AuthRequest(injector, receivedSms, reply, passCode, object : SmsAction(cal) {
|
messageToConfirm = AuthRequest(injector, receivedSms, reply, passCode, object : SmsAction(cal) {
|
||||||
|
@ -1006,22 +1013,8 @@ class SmsCommunicatorPlugin @Inject constructor(
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun generatePasscode(): String {
|
private fun generatePassCode(): String =
|
||||||
|
resourceHelper.gs(R.string.smscommunicator_code_from_authenticator_for, otp.name())
|
||||||
if (otp.isEnabled()) {
|
|
||||||
// this not realy generate password - rather info to use Authenticator TOTP instead
|
|
||||||
return resourceHelper.gs(R.string.smscommunicator_code_from_authenticator_for, otp.name())
|
|
||||||
}
|
|
||||||
|
|
||||||
val startChar1 = 'A'.toInt() // on iphone 1st char is uppercase :)
|
|
||||||
var passCode = Character.toString((startChar1 + Math.random() * ('z' - 'a' + 1)).toChar())
|
|
||||||
val startChar2: Int = if (Math.random() > 0.5) 'a'.toInt() else 'A'.toInt()
|
|
||||||
passCode += Character.toString((startChar2 + Math.random() * ('z' - 'a' + 1)).toChar())
|
|
||||||
val startChar3: Int = if (Math.random() > 0.5) 'a'.toInt() else 'A'.toInt()
|
|
||||||
passCode += Character.toString((startChar3 + Math.random() * ('z' - 'a' + 1)).toChar())
|
|
||||||
passCode = passCode.replace('l', 'k').replace('I', 'J')
|
|
||||||
return passCode
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun stripAccents(str: String): String {
|
private fun stripAccents(str: String): String {
|
||||||
var s = str
|
var s = str
|
||||||
|
@ -1030,8 +1023,8 @@ class SmsCommunicatorPlugin @Inject constructor(
|
||||||
return s
|
return s
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun areMoreNumbers(allowednumbers: String?): Boolean {
|
private fun areMoreNumbers(allowedNumbers: String?): Boolean {
|
||||||
return allowednumbers?.let {
|
return allowedNumbers?.let {
|
||||||
val knownNumbers = HashSet<String>()
|
val knownNumbers = HashSet<String>()
|
||||||
val substrings = it.split(";").toTypedArray()
|
val substrings = it.split(";").toTypedArray()
|
||||||
for (number in substrings) {
|
for (number in substrings) {
|
||||||
|
|
|
@ -26,24 +26,9 @@ class OneTimePassword @Inject constructor(
|
||||||
private val totp = HmacOneTimePasswordGenerator()
|
private val totp = HmacOneTimePasswordGenerator()
|
||||||
|
|
||||||
init {
|
init {
|
||||||
instance = this
|
|
||||||
configure()
|
configure()
|
||||||
}
|
}
|
||||||
|
|
||||||
companion object {
|
|
||||||
private lateinit var instance: OneTimePassword
|
|
||||||
|
|
||||||
@JvmStatic
|
|
||||||
fun getInstance(): OneTimePassword = instance
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* If OTP Authenticator support is enabled by user
|
|
||||||
*/
|
|
||||||
fun isEnabled(): Boolean {
|
|
||||||
return sp.getBoolean(R.string.key_smscommunicator_otp_enabled, true)
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Name of master device (target of OTP)
|
* Name of master device (target of OTP)
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -1266,14 +1266,11 @@
|
||||||
|
|
||||||
<!-- SMS Communicator & OTP Authenticator -->
|
<!-- SMS Communicator & OTP Authenticator -->
|
||||||
|
|
||||||
<string name="key_smscommunicator_otp_enabled" translatable="false">smscommunicator_otp_enabled</string>
|
|
||||||
<string name="key_smscommunicator_otp_password" translatable="false">smscommunicator_otp_password</string>
|
<string name="key_smscommunicator_otp_password" translatable="false">smscommunicator_otp_password</string>
|
||||||
<string name="key_smscommunicator_otp_secret" translatable="false">smscommunicator_otp_secret</string>
|
<string name="key_smscommunicator_otp_secret" translatable="false">smscommunicator_otp_secret</string>
|
||||||
|
|
||||||
<string name="smscommunicator_code_from_authenticator_for" comment="This is continuation of sentence: To [ACTION] reply with code">from Authenticator app for: %1$s followed by PIN</string>
|
<string name="smscommunicator_code_from_authenticator_for" comment="This is continuation of sentence: To [ACTION] reply with code">from Authenticator app for: %1$s followed by PIN</string>
|
||||||
|
|
||||||
<string name="smscommunicator_otp_enabled">Enable Authenticator</string>
|
|
||||||
<string name="smscommunicator_otp_enabled_summary">Authenticate commands using One Time Passwords generated by Google Authenticator or similar 2FA apps.</string>
|
|
||||||
<string name="smscommunicator_otp_pin">Additional mandatory PIN at token end</string>
|
<string name="smscommunicator_otp_pin">Additional mandatory PIN at token end</string>
|
||||||
<string name="smscommunicator_otp_pin_summary">Additional digits that should be memorised and glued at end of each generated One Time Password</string>
|
<string name="smscommunicator_otp_pin_summary">Additional digits that should be memorised and glued at end of each generated One Time Password</string>
|
||||||
|
|
||||||
|
|
|
@ -27,14 +27,6 @@
|
||||||
validate:minNumber="3"
|
validate:minNumber="3"
|
||||||
validate:testType="numericRange" />
|
validate:testType="numericRange" />
|
||||||
|
|
||||||
<SwitchPreference
|
|
||||||
android:defaultValue="true"
|
|
||||||
android:enabled="false"
|
|
||||||
android:key="@string/key_smscommunicator_otp_enabled"
|
|
||||||
android:summary="@string/smscommunicator_otp_enabled_summary"
|
|
||||||
android:title="@string/smscommunicator_otp_enabled"
|
|
||||||
app:isPreferenceVisible="false" />
|
|
||||||
|
|
||||||
<info.nightscout.androidaps.utils.textValidator.ValidatingEditTextPreference
|
<info.nightscout.androidaps.utils.textValidator.ValidatingEditTextPreference
|
||||||
android:dependency="@string/key_smscommunicator_remotecommandsallowed"
|
android:dependency="@string/key_smscommunicator_remotecommandsallowed"
|
||||||
android:key="@string/key_smscommunicator_otp_password"
|
android:key="@string/key_smscommunicator_otp_password"
|
||||||
|
|
Loading…
Reference in a new issue