diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/general/smsCommunicator/SmsCommunicatorPlugin.kt b/app/src/main/java/info/nightscout/androidaps/plugins/general/smsCommunicator/SmsCommunicatorPlugin.kt index 1c8f44e0a8..229f1209e3 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/general/smsCommunicator/SmsCommunicatorPlugin.kt +++ b/app/src/main/java/info/nightscout/androidaps/plugins/general/smsCommunicator/SmsCommunicatorPlugin.kt @@ -85,7 +85,7 @@ class SmsCommunicatorPlugin @Inject constructor( "LOOP" to "LOOP STOP/DISABLE/START/ENABLE/RESUME/STATUS\nLOOP SUSPEND 20", "TREATMENTS" to "TREATMENTS REFRESH", "NSCLIENT" to "NSCLIENT RESTART", - "PUMP" to "PUMP", + "PUMP" to "PUMP\nPUMP CONNECT\nPUMP DISCONNECT 30\n", "BASAL" to "BASAL STOP/CANCEL\nBASAL 0.3\nBASAL 0.3 20\nBASAL 30%\nBASAL 30% 20\n", "BOLUS" to "BOLUS 1.2\nBOLUS 1.2 MEAL", "EXTENDED" to "EXTENDED STOP/CANCEL\nEXTENDED 2 120", @@ -227,8 +227,9 @@ class SmsCommunicatorPlugin @Inject constructor( "NSCLIENT" -> if (splitted.size == 2) processNSCLIENT(splitted, receivedSms) else sendSMS(Sms(receivedSms.phoneNumber, resourceHelper.gs(R.string.wrongformat))) - "PUMP" -> - if (splitted.size == 1) processPUMP(receivedSms) + "PUMP" ->//TODO remoteCommandsAllowed + if (!remoteCommandsAllowed) sendSMS(Sms(receivedSms.phoneNumber, resourceHelper.gs(R.string.smscommunicator_remotecommandnotallowed))) + else if (splitted.size <=3) processPUMP(splitted,receivedSms) else sendSMS(Sms(receivedSms.phoneNumber, resourceHelper.gs(R.string.wrongformat))) "PROFILE" -> if (!remoteCommandsAllowed) sendSMS(Sms(receivedSms.phoneNumber, resourceHelper.gs(R.string.smscommunicator_remotecommandnotallowed))) @@ -441,20 +442,77 @@ class SmsCommunicatorPlugin @Inject constructor( sendSMS(Sms(receivedSms.phoneNumber, resourceHelper.gs(R.string.wrongformat))) } - private fun processPUMP(receivedSms: Sms) { - commandQueue.readStatus("SMS", object : Callback() { - override fun run() { - val pump = activePlugin.activePump - if (result.success) { - val reply = pump.shortStatus(true) - sendSMS(Sms(receivedSms.phoneNumber, reply)) - } else { - val reply = resourceHelper.gs(R.string.readstatusfailed) - sendSMS(Sms(receivedSms.phoneNumber, reply)) + private fun processPUMP(splitted: Array,receivedSms: Sms) { + if (splitted.size == 1) { + commandQueue.readStatus("SMS", object : Callback() { + override fun run() { + val pump = activePlugin.activePump + if (result.success) { + val reply = pump.shortStatus(true) + sendSMS(Sms(receivedSms.phoneNumber, reply)) + } else { + val reply = resourceHelper.gs(R.string.readstatusfailed) + sendSMS(Sms(receivedSms.phoneNumber, reply)) + } } + }) + receivedSms.processed = true + } + else if ((splitted.size == 2) && (splitted[1].equals("CONNECT", ignoreCase = true))) + { + + val passCode = generatePasscode() + val reply = String.format(resourceHelper.gs(R.string.smscommunicator_pumpconnect),passCode) + receivedSms.processed = true + messageToConfirm = AuthRequest(injector,receivedSms,reply,passCode,object : SmsAction(){ + override fun run() { + + commandQueue.cancelTempBasal(true, object : Callback() { + override fun run() { + if (!result.success) { + sendSMS(Sms(receivedSms.phoneNumber, resourceHelper.gs(R.string.smscommunicator_pumpconnectfail))) + } + else + { + loopPlugin.suspendTo(0L) + sendSMS(Sms(receivedSms.phoneNumber, resourceHelper.gs(R.string.reconnect))) + rxBus.send(EventRefreshOverview("SMS_PUMP_START")) + //rxBus.send(EventRefreshOverview("SMS_PUMP_CONNECT")) + sp.putBoolean(R.string.key_objectiveusereconnect, true) + loopPlugin.createOfflineEvent(0) + + + } + } + }) + + } + }) + } + else if (splitted.size == 3) + { + if (splitted[1].equals("DISCONNECT", ignoreCase = true)){ + val minutes = SafeParse.stringToInt(splitted[2]) + val passCode = generatePasscode() + val reply = String.format(resourceHelper.gs(R.string.smscommunicator_pumpdisconnect),minutes,passCode) + receivedSms.processed = true + messageToConfirm = AuthRequest(injector,receivedSms,reply,passCode,object : SmsAction(){ + override fun run() { + val profile = profileFunction.getProfile() + loopPlugin.disconnectPump(minutes, profile) + rxBus.send(EventRefreshOverview("SMS_PUMP_DISCONNECT")) + sendSMS(Sms(receivedSms.phoneNumber, resourceHelper.gs(R.string.pumpsuspended))) + //rxBus.send(EventRefreshOverview("suspendmenu")) + } + }) } - }) - receivedSms.processed = true + else{ + sendSMS(Sms(receivedSms.phoneNumber, resourceHelper.gs(R.string.wrongformat))) + return + } + + } + } private fun processPROFILE(splitted: Array, receivedSms: Sms) { // load profiles diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index c3a821332c..b1916d9769 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -300,6 +300,9 @@ Loop is enabled %1$.2f limited to %2$.2f Value %1$s is out of hard limits + To connect pump reply with code %1$s + To disconnect pump to %1d minutes reply with code %2$s + To connect pump failed Remote command is not allowed Remote bolus not available. Try again later. To start basal %1$.2fU/h for %2$d min reply with code %3$s