diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 59bdf15251..3fc0f27e2a 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -88,7 +88,7 @@ - + diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/Source/SourceDexcomG6Plugin.java b/app/src/main/java/info/nightscout/androidaps/plugins/Source/SourceDexcomG6Plugin.java index a460b75e69..a8a50f85be 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/Source/SourceDexcomG6Plugin.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/Source/SourceDexcomG6Plugin.java @@ -3,12 +3,19 @@ package info.nightscout.androidaps.plugins.Source; import android.content.Intent; import android.os.Bundle; +import org.json.JSONException; +import org.json.JSONObject; +import org.mozilla.javascript.tools.jsc.Main; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import java.util.Arrays; + +import info.nightscout.androidaps.Constants; import info.nightscout.androidaps.MainApp; import info.nightscout.androidaps.R; import info.nightscout.androidaps.db.BgReading; +import info.nightscout.androidaps.db.CareportalEvent; import info.nightscout.androidaps.interfaces.BgSourceInterface; import info.nightscout.androidaps.interfaces.PluginBase; import info.nightscout.androidaps.interfaces.PluginDescription; @@ -17,6 +24,7 @@ import info.nightscout.androidaps.logging.L; import info.nightscout.androidaps.plugins.NSClientInternal.NSUpload; import info.nightscout.utils.DateUtil; import info.nightscout.utils.SP; +import info.nightscout.utils.SafeParse; /** * Created by mike on 30.11.2018. @@ -76,51 +84,90 @@ public class SourceDexcomG6Plugin extends PluginBase implements BgSourceInterfac log.debug("transmitterSessionTimeDays: " + bundle.getInt("transmitterSessionTimeDays")); log.debug("transmitterFeatureFlags: " + bundle.getInt("transmitterFeatureFlags")); - if (bundle.containsKey("sensorInsertionTime")) - log.debug("sensorInsertionTime: " + DateUtil.dateAndTimeFullString(bundle.getLong("sensorInsertionTime"))); - if (bundle.containsKey("sensorCode")) log.debug("sensorCode: " + bundle.getString("sensorCode")); + } - if (bundle.containsKey("evgTimestamps")) { - long[] timestamps = bundle.getLongArray("evgTimestamps"); - long[] transmitterTimes = bundle.getLongArray("transmitterTimes"); - int[] evgs = bundle.getIntArray("evgs"); - int[] predictiveEVGs = bundle.getIntArray("predictiveEVGs"); - String[] trendArrows = bundle.getStringArray("trendArrows"); - - for (int i = 0; i < transmitterTimes.length; i++) { - BgReading bgReading = new BgReading(); - bgReading.value = evgs[i]; - bgReading.direction = trendArrows[i]; - bgReading.date = timestamps[i]; - bgReading.raw = 0; - boolean isNew = MainApp.getDbHelper().createIfNotExists(bgReading, "DexcomG6"); - if (isNew && SP.getBoolean(R.string.key_dexcomg5_nsupload, false)) { - NSUpload.uploadBg(bgReading, "AndroidAPS-DexcomG6"); - } - if (isNew && SP.getBoolean(R.string.key_dexcomg5_xdripupload, false)) { - NSUpload.sendToXdrip(bgReading); - } + if (bundle.containsKey("sensorInsertionTime")) { + long sensorInsertionTime = bundle.getLong("sensorInsertionTime"); + if (L.isEnabled(L.BGSOURCE)) log.debug("sensorInsertionTime: " + DateUtil.dateAndTimeFullString(sensorInsertionTime)); + try { + if (MainApp.getDbHelper().getCareportalEventFromTimestamp(sensorInsertionTime) == null) { + JSONObject data = new JSONObject(); + data.put("enteredBy", "AndroidAPS-DexcomG6"); + data.put("created_at", DateUtil.toISOString(sensorInsertionTime)); + data.put("eventType", CareportalEvent.SENSORCHANGE); + NSUpload.uploadCareportalEntryToNS(data); } + } catch (JSONException e) { + log.error("Unhandled exception", e); + } + } + + if (bundle.containsKey("evgTimestamps")) { + long[] timestamps = bundle.getLongArray("evgTimestamps"); + long[] transmitterTimes = bundle.getLongArray("transmitterTimes"); + int[] evgs = bundle.getIntArray("evgs"); + int[] predictiveEVGs = bundle.getIntArray("predictiveEVGs"); + String[] trendArrows = bundle.getStringArray("trendArrows"); + + if (L.isEnabled(L.BGSOURCE)) { + log.debug("timestamps", Arrays.toString(timestamps)); + log.debug("transmitterTimes", Arrays.toString(transmitterTimes)); + log.debug("evgs", Arrays.toString(evgs)); + log.debug("predictiveEVGs", Arrays.toString(predictiveEVGs)); + log.debug("trendArrows", Arrays.toString(trendArrows)); } - if (bundle.containsKey("meterValues")) { - int[] meterValues = bundle.getIntArray("meterValues"); - String[] meterEntryTypes = bundle.getStringArray("meterEntryTypes"); - long[] meterTimestamps = bundle.getLongArray("meterTimestamps"); - long[] meterTransmitterTimestamps = bundle.getLongArray("meterTransmitterTimestamps"); - long[] meterRecordedTimestamps = bundle.getLongArray("meterRecordedTimestamps"); - int[] meterRecordIDs = bundle.getIntArray("meterRecordIDs"); - - for (int i = 0; i < meterValues.length; i++) { - if (L.isEnabled(L.BGSOURCE)) { - log.debug("meterValues: " + meterValues[i] + " meterEntryTypes: " + meterEntryTypes[i] + " meterTimestamps: " + meterTimestamps[i] + " meterTransmitterTimestamps: " + - meterTransmitterTimestamps[i] + " meterRecordedTimestamps: " + meterRecordedTimestamps[i] + " meterRecordIDs: " + meterRecordIDs[i]); - } + for (int i = 0; i < transmitterTimes.length; i++) { + BgReading bgReading = new BgReading(); + bgReading.value = evgs[i]; + bgReading.direction = trendArrows[i]; + bgReading.date = timestamps[i]; + bgReading.raw = 0; + boolean isNew = MainApp.getDbHelper().createIfNotExists(bgReading, "DexcomG6"); + if (isNew && SP.getBoolean(R.string.key_dexcomg5_nsupload, false)) { + NSUpload.uploadBg(bgReading, "AndroidAPS-DexcomG6"); + } + if (isNew && SP.getBoolean(R.string.key_dexcomg5_xdripupload, false)) { + NSUpload.sendToXdrip(bgReading); } } + } + if (bundle.containsKey("meterValues")) { + int[] meterValues = bundle.getIntArray("meterValues"); + String[] meterEntryTypes = bundle.getStringArray("meterEntryTypes"); + long[] meterTimestamps = bundle.getLongArray("meterTimestamps"); + long[] meterTransmitterTimestamps = bundle.getLongArray("meterTransmitterTimestamps"); + long[] meterRecordedTimestamps = bundle.getLongArray("meterRecordedTimestamps"); + int[] meterRecordIDs = bundle.getIntArray("meterRecordIDs"); + + if (L.isEnabled(L.BGSOURCE)) { + log.debug("meterValues", Arrays.toString(meterValues)); + log.debug("meterEntryTypes", Arrays.toString(meterEntryTypes)); + log.debug("meterTimestamps", Arrays.toString(meterTimestamps)); + log.debug("meterTransmitterTimestamps", Arrays.toString(meterTransmitterTimestamps)); + log.debug("meterRecordedTimestamps", Arrays.toString(meterRecordedTimestamps)); + log.debug("meterRecordIDs", Arrays.toString(meterRecordIDs)); + } + + for (int i = 0; i < meterValues.length; i++) { + try { + if (MainApp.getDbHelper().getCareportalEventFromTimestamp(meterTimestamps[i]) == null) { + JSONObject data = new JSONObject(); + data.put("enteredBy", "AndroidAPS-DexcomG6"); + data.put("created_at", DateUtil.toISOString(meterTimestamps[i])); + data.put("eventType", CareportalEvent.BGCHECK); + data.put("glucoseType", "Finger"); + data.put("glucose", meterValues[i]); + data.put("units", Constants.MGDL); + NSUpload.uploadCareportalEntryToNS(data); + } + } catch (JSONException e) { + log.error("Unhandled exception", e); + } + } } } } diff --git a/app/src/main/java/info/nightscout/androidaps/services/Intents.java b/app/src/main/java/info/nightscout/androidaps/services/Intents.java index 0ef4e16590..f9442470ee 100644 --- a/app/src/main/java/info/nightscout/androidaps/services/Intents.java +++ b/app/src/main/java/info/nightscout/androidaps/services/Intents.java @@ -49,7 +49,8 @@ public interface Intents { String GLIMP_BG = "it.ct.glicemia.ACTION_GLUCOSE_MEASURED"; String DEXCOMG5_BG = "com.dexcom.cgm.DATA"; - String DEXCOMG6_BG = "com.dexcom.cgm.AndroidAPSEVGCallback.Broadcast"; + String DEXCOMG5_BG_NEW = "com.dexcom.cgm.g5.AndroidAPSEVGCallback.BROADCAST"; + String DEXCOMG6_BG = "com.dexcom.cgm.AndroidAPSEVGCallback.BROADCAST"; String POCTECH_BG = "com.china.poctech.data"; }