Merge branch 'dev' into triggerPumpDisconnected

This commit is contained in:
Milos Kozak 2019-10-04 19:34:54 +02:00 committed by GitHub
commit b108f1fa78
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
6 changed files with 203 additions and 11 deletions

View file

@ -202,7 +202,8 @@ object AutomationPlugin : PluginBase(PluginDescription()
ActionStopTempTarget(),
ActionNotification(),
ActionProfileSwitchPercent(),
ActionProfileSwitch()
ActionProfileSwitch(),
ActionSendSMS()
)
}

View file

@ -0,0 +1,88 @@
package info.nightscout.androidaps.plugins.general.automation.actions;
import android.widget.LinearLayout;
import com.google.common.base.Optional;
import org.json.JSONException;
import org.json.JSONObject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import info.nightscout.androidaps.MainApp;
import info.nightscout.androidaps.R;
import info.nightscout.androidaps.data.PumpEnactResult;
import info.nightscout.androidaps.logging.L;
import info.nightscout.androidaps.plugins.general.automation.elements.InputString;
import info.nightscout.androidaps.plugins.general.automation.elements.LabelWithElement;
import info.nightscout.androidaps.plugins.general.automation.elements.LayoutBuilder;
import info.nightscout.androidaps.plugins.general.smsCommunicator.SmsCommunicatorPlugin;
import info.nightscout.androidaps.queue.Callback;
import info.nightscout.androidaps.utils.JsonHelper;
public class ActionSendSMS extends Action {
public InputString text = new InputString();
@Override
public int friendlyName() {
return R.string.sendsmsactiondescription;
}
@Override
public String shortDescription() {
return MainApp.gs(R.string.sendsmsactionlabel, text.getValue());
}
@Override
public void doAction(Callback callback) {
boolean result = SmsCommunicatorPlugin.getPlugin().sendNotificationToAllNumbers(text.getValue());
if (callback != null)
callback.result(new PumpEnactResult().success(result).comment(result ? R.string.ok : R.string.danar_error)).run();
}
@Override
public Optional<Integer> icon() {
return Optional.of(R.drawable.ic_notifications);
}
@Override
public String toJSON() {
JSONObject o = new JSONObject();
JSONObject data = new JSONObject();
try {
data.put("text", text.getValue());
o.put("type", this.getClass().getName());
o.put("data", data);
} catch (JSONException e) {
e.printStackTrace();
}
return o.toString();
}
@Override
public Action fromJSON(String data) {
try {
JSONObject o = new JSONObject(data);
text.setValue(JsonHelper.safeGetString(o, "text"));
} catch (JSONException e) {
e.printStackTrace();
}
return this;
}
@Override
public boolean hasDialog() {
return true;
}
@Override
public void generateDialog(LinearLayout root) {
new LayoutBuilder()
.add(new LabelWithElement(MainApp.gs(R.string.sendsmsactiontext), "", text))
.build(root);
}
}

View file

@ -33,11 +33,12 @@ public class Notification {
public static final int OLD_NSCLIENT = 8;
public static final int OLD_NS = 9;
public static final int INVALID_PHONE_NUMBER = 10;
public static final int APPROACHING_DAILY_LIMIT = 11;
public static final int NSCLIENT_NO_WRITE_PERMISSION = 12;
public static final int MISSING_SMS_PERMISSION = 13;
public static final int PUMPERROR = 14;
public static final int WRONGSERIALNUMBER = 15;
public static final int INVALID_MESSAGE_BODY = 11;
public static final int APPROACHING_DAILY_LIMIT = 12;
public static final int NSCLIENT_NO_WRITE_PERMISSION = 13;
public static final int MISSING_SMS_PERMISSION = 14;
public static final int PUMPERROR = 15;
public static final int WRONGSERIALNUMBER = 16;
public static final int NSANNOUNCEMENT = 18;
public static final int NSALARM = 19;

View file

@ -737,11 +737,13 @@ public class SmsCommunicatorPlugin extends PluginBase {
sendSMS(new Sms(receivedSms.phoneNumber, R.string.wrongformat));
}
public void sendNotificationToAllNumbers(String text) {
public boolean sendNotificationToAllNumbers(String text) {
boolean result = true;
for (int i = 0; i < allowedNumbers.size(); i++) {
Sms sms = new Sms(allowedNumbers.get(i), text);
sendSMS(sms);
result = result && sendSMS(sms);
}
return result;
}
private void sendSMSToAllNumbers(Sms sms) {
@ -751,7 +753,7 @@ public class SmsCommunicatorPlugin extends PluginBase {
}
}
void sendSMS(Sms sms) {
boolean sendSMS(Sms sms) {
SmsManager smsManager = SmsManager.getDefault();
sms.text = stripAccents(sms.text);
@ -768,13 +770,22 @@ public class SmsCommunicatorPlugin extends PluginBase {
messages.add(sms);
} catch (IllegalArgumentException e) {
if (e.getMessage().equals("Invalid message body")) {
Notification notification = new Notification(Notification.INVALID_MESSAGE_BODY, MainApp.gs(R.string.smscommunicator_messagebody), Notification.NORMAL);
RxBus.INSTANCE.send(new EventNewNotification(notification));
return false;
} else {
Notification notification = new Notification(Notification.INVALID_PHONE_NUMBER, MainApp.gs(R.string.smscommunicator_invalidphonennumber), Notification.NORMAL);
RxBus.INSTANCE.send(new EventNewNotification(notification));
return false;
}
} catch (java.lang.SecurityException e) {
Notification notification = new Notification(Notification.MISSING_SMS_PERMISSION, MainApp.gs(R.string.smscommunicator_missingsmspermission), Notification.NORMAL);
RxBus.INSTANCE.send(new EventNewNotification(notification));
return false;
}
MainApp.bus().post(new EventSmsCommunicatorUpdateGui());
return true;
}
private String generatePasscode() {

View file

@ -1578,6 +1578,9 @@
<string name="automation_trigger_pump_disconnected_label">Last connection to pump</string>
<string name="automation_trigger_pump_disconnected_description">Last connection to pump [minutes ago]</string>
<string name="automation_trigger_pump_disconnected_compared">Last connection to pump %1$s %2$s min ago</string>
<string name="sendsmsactionlabel">Send SMS: %1$s</string>
<string name="sendsmsactiondescription">Send SMS to all numbers in preferences</string>
<string name="sendsmsactiontext">Send SMS with text</string>
<string name="insulinFromCob"><![CDATA[COB vs IOB: <font color=\'%1$s\'>%2$+.2fU</font>]]></string>
@ -1595,5 +1598,6 @@
<string name="close">Close</string>
<string name="increasingmaxbasal">Increasing max basal value because setting is lower than your max basal in profile</string>
<string name="smscommunicator_messagebody">Invalid message body</string>
</resources>

View file

@ -0,0 +1,87 @@
package info.nightscout.androidaps.plugins.general.automation.actions;
import android.telephony.SmsManager;
import com.google.common.base.Optional;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.powermock.api.mockito.PowerMockito;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;
import info.AAPSMocker;
import info.nightscout.androidaps.MainApp;
import info.nightscout.androidaps.R;
import info.nightscout.androidaps.plugins.general.automation.elements.InputString;
import info.nightscout.androidaps.queue.Callback;
import info.nightscout.androidaps.utils.SP;
import static org.powermock.api.mockito.PowerMockito.mock;
import static org.powermock.api.mockito.PowerMockito.mockStatic;
@RunWith(PowerMockRunner.class)
@PrepareForTest({MainApp.class, SP.class, SmsManager.class})
public class ActionSendSMSTest {
private ActionSendSMS actionSendSMS;
@Test
public void friendlyNameTest() {
Assert.assertEquals(R.string.sendsmsactiondescription, actionSendSMS.friendlyName());
}
@Test
public void shortDescriptionTest() {
actionSendSMS = new ActionSendSMS();
Assert.assertEquals(null, actionSendSMS.shortDescription()); // not mocked
}
@Test
public void iconTest() {
Assert.assertEquals(Optional.of(R.drawable.ic_notifications), actionSendSMS.icon());
}
@Test
public void doActionTest() {
actionSendSMS.text = new InputString().setValue("Asd");
actionSendSMS.doAction(new Callback() {
@Override
public void run() {
Assert.assertTrue(result.success);
}
});
}
@Test
public void hasDialogTest() {
Assert.assertTrue(actionSendSMS.hasDialog());
}
@Test
public void toJSONTest() {
actionSendSMS = new ActionSendSMS();
actionSendSMS.text = new InputString().setValue("Asd");
Assert.assertEquals("{\"data\":{\"text\":\"Asd\"},\"type\":\"info.nightscout.androidaps.plugins.general.automation.actions.ActionSendSMS\"}", actionSendSMS.toJSON());
}
@Test
public void fromJSONTest() {
actionSendSMS = new ActionSendSMS();
actionSendSMS.fromJSON("{\"text\":\"Asd\"}");
Assert.assertEquals("Asd", actionSendSMS.text.getValue());
}
@Before
public void prepareTest() {
AAPSMocker.mockMainApp();
AAPSMocker.mockBus();
AAPSMocker.mockSP();
mockStatic(SmsManager.class);
SmsManager smsManager = mock(SmsManager.class);
PowerMockito.when(SmsManager.getDefault()).thenReturn(smsManager);
PowerMockito.when(SP.getString(R.string.key_smscommunicator_allowednumbers, "")).thenReturn("1234;5678");
actionSendSMS = new ActionSendSMS();
}
}