diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 0f6d39c465..483c522e04 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -88,6 +88,8 @@ + + diff --git a/app/src/main/java/info/nightscout/androidaps/MainApp.java b/app/src/main/java/info/nightscout/androidaps/MainApp.java index a2a3a4ea11..6f9631548d 100644 --- a/app/src/main/java/info/nightscout/androidaps/MainApp.java +++ b/app/src/main/java/info/nightscout/androidaps/MainApp.java @@ -68,6 +68,8 @@ import info.nightscout.androidaps.plugins.Sensitivity.SensitivityOref1Plugin; import info.nightscout.androidaps.plugins.Sensitivity.SensitivityWeightedAveragePlugin; import info.nightscout.androidaps.plugins.SmsCommunicator.SmsCommunicatorPlugin; import info.nightscout.androidaps.plugins.Source.SourceDexcomG5Plugin; +import info.nightscout.androidaps.plugins.Source.SourceDexcomG6Plugin; +import info.nightscout.androidaps.plugins.Source.SourceEversensePlugin; import info.nightscout.androidaps.plugins.Source.SourceGlimpPlugin; import info.nightscout.androidaps.plugins.Source.SourceMM640gPlugin; import info.nightscout.androidaps.plugins.Source.SourceNSClientPlugin; @@ -180,7 +182,9 @@ public class MainApp extends Application { pluginsList.add(SourceMM640gPlugin.getPlugin()); pluginsList.add(SourceGlimpPlugin.getPlugin()); pluginsList.add(SourceDexcomG5Plugin.getPlugin()); + pluginsList.add(SourceDexcomG6Plugin.getPlugin()); pluginsList.add(SourcePoctechPlugin.getPlugin()); + pluginsList.add(SourceEversensePlugin.getPlugin()); if (Config.SMSCOMMUNICATORENABLED) pluginsList.add(SmsCommunicatorPlugin.getPlugin()); pluginsList.add(FoodPlugin.getPlugin()); diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/NSClientInternal/NSUpload.java b/app/src/main/java/info/nightscout/androidaps/plugins/NSClientInternal/NSUpload.java index 8f3f31f6e7..9ae8f3b0ec 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/NSClientInternal/NSUpload.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/NSClientInternal/NSUpload.java @@ -470,14 +470,14 @@ public class NSUpload { DbLogger.dbAdd(intent, data.toString()); } - public static void uploadBg(BgReading reading) { + public static void uploadBg(BgReading reading, String source) { Context context = MainApp.instance().getApplicationContext(); Bundle bundle = new Bundle(); bundle.putString("action", "dbAdd"); bundle.putString("collection", "entries"); JSONObject data = new JSONObject(); try { - data.put("device", "AndroidAPS-DexcomG5"); + data.put("device", source); data.put("date", reading.date); data.put("dateString", DateUtil.toISOString(reading.date)); data.put("sgv", reading.value); diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/Overview/OverviewFragment.java b/app/src/main/java/info/nightscout/androidaps/plugins/Overview/OverviewFragment.java index 281a06d472..340f78f68d 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/Overview/OverviewFragment.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/Overview/OverviewFragment.java @@ -110,6 +110,7 @@ import info.nightscout.androidaps.plugins.Overview.graphData.GraphData; import info.nightscout.androidaps.plugins.Overview.notifications.NotificationRecyclerViewAdapter; import info.nightscout.androidaps.plugins.Overview.notifications.NotificationStore; import info.nightscout.androidaps.plugins.Source.SourceDexcomG5Plugin; +import info.nightscout.androidaps.plugins.Source.SourceDexcomG6Plugin; import info.nightscout.androidaps.plugins.Source.SourceXdripPlugin; import info.nightscout.androidaps.plugins.Treatments.TreatmentsPlugin; import info.nightscout.androidaps.plugins.Treatments.fragments.ProfileViewerDialog; @@ -664,6 +665,7 @@ public class OverviewFragment extends Fragment implements View.OnClickListener, public void onClick(View v) { boolean xdrip = SourceXdripPlugin.getPlugin().isEnabled(PluginType.BGSOURCE); boolean g5 = SourceDexcomG5Plugin.getPlugin().isEnabled(PluginType.BGSOURCE); + boolean g6 = SourceDexcomG6Plugin.getPlugin().isEnabled(PluginType.BGSOURCE); String units = ProfileFunctions.getInstance().getProfileUnits(); FragmentManager manager = getFragmentManager(); @@ -686,7 +688,7 @@ public class OverviewFragment extends Fragment implements View.OnClickListener, if (xdrip) { CalibrationDialog calibrationDialog = new CalibrationDialog(); calibrationDialog.show(manager, "CalibrationDialog"); - } else if (g5) { + } else if (g5 || g6) { try { Intent i = new Intent("com.dexcom.cgm.activities.MeterEntryActivity"); startActivity(i); @@ -702,6 +704,10 @@ public class OverviewFragment extends Fragment implements View.OnClickListener, openCgmApp("com.dexcom.cgm.region5.mgdl"); else if (g5 && units.equals(Constants.MMOL)) openCgmApp("com.dexcom.cgm.region5.mmol"); + else if (g6 && units.equals(Constants.MGDL)) + openCgmApp("com.dexcom.g6.region3.mgdl"); + else if (g6 && units.equals(Constants.MMOL)) + openCgmApp("com.dexcom.g6.region3.mmol"); break; case R.id.overview_treatmentbutton: NewTreatmentDialog treatmentDialogFragment = new NewTreatmentDialog(); diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/Source/SourceDexcomG5Plugin.java b/app/src/main/java/info/nightscout/androidaps/plugins/Source/SourceDexcomG5Plugin.java index 460e550b8e..5e5bed20c0 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/Source/SourceDexcomG5Plugin.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/Source/SourceDexcomG5Plugin.java @@ -9,16 +9,21 @@ import org.json.JSONObject; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import info.nightscout.androidaps.Config; +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; import info.nightscout.androidaps.interfaces.PluginType; import info.nightscout.androidaps.logging.L; import info.nightscout.androidaps.plugins.NSClientInternal.NSUpload; +import info.nightscout.androidaps.services.Intents; +import info.nightscout.utils.DateUtil; import info.nightscout.utils.SP; /** @@ -42,7 +47,7 @@ public class SourceDexcomG5Plugin extends PluginBase implements BgSourceInterfac .fragmentClass(BGSourceFragment.class.getName()) .pluginName(R.string.DexcomG5) .shortName(R.string.dexcomG5_shortname) - .preferencesId(R.xml.pref_dexcomg5) + .preferencesId(R.xml.pref_bgsource) .description(R.string.description_source_dexcom_g5) ); } @@ -58,6 +63,16 @@ public class SourceDexcomG5Plugin extends PluginBase implements BgSourceInterfac if (!isEnabled(PluginType.BGSOURCE)) return; + if (intent.getAction().equals(Intents.DEXCOMG5_BG)) + handleNewDataOld(intent); + + if (intent.getAction().equals(Intents.DEXCOMG5_BG_NEW)) + handleNewDataNew(intent); + } + + public void handleNewDataOld(Intent intent) { + // onHandleIntent Bundle{ data => [{"m_time":1511939180,"m_trend":"NotComputable","m_value":335}]; android.support.content.wakelockid => 95; }Bundle + Bundle bundle = intent.getExtras(); if (bundle == null) return; @@ -81,7 +96,7 @@ public class SourceDexcomG5Plugin extends PluginBase implements BgSourceInterfac bgReading.raw = 0; boolean isNew = MainApp.getDbHelper().createIfNotExists(bgReading, "DexcomG5"); if (isNew && SP.getBoolean(R.string.key_dexcomg5_nsupload, false)) { - NSUpload.uploadBg(bgReading); + NSUpload.uploadBg(bgReading, "AndroidAPS-DexcomG5"); } if (isNew && SP.getBoolean(R.string.key_dexcomg5_xdripupload, false)) { NSUpload.sendToXdrip(bgReading); @@ -92,4 +107,126 @@ public class SourceDexcomG5Plugin extends PluginBase implements BgSourceInterfac log.error("Exception: ", e); } } + + public void handleNewDataNew(Intent intent) { + + Bundle bundle = intent.getExtras(); + if (bundle == null) return; + + if (L.isEnabled(L.BGSOURCE)) { + if (bundle.containsKey("transmitterSystemTime")) + log.debug("transmitterSystemTime: " + DateUtil.dateAndTimeFullString(bundle.getLong("transmitterSystemTime"))); + if (bundle.containsKey("transmitterRemainingTime")) + log.debug("transmitterRemainingTime: " + DateUtil.dateAndTimeFullString(bundle.getLong("transmitterRemainingTime"))); + log.debug("transmitterId: " + bundle.getString("transmitterId")); + if (bundle.containsKey("transmitterActivatedOn")) + log.debug("transmitterActivatedOn: " + DateUtil.dateAndTimeFullString(bundle.getLong("transmitterActivatedOn"))); + log.debug("transmitterVersion: " + bundle.getString("transmitterVersion")); + log.debug("transmitterSoftwareNumber: " + bundle.getString("transmitterSoftwareNumber")); + log.debug("transmitterStorageTimeDays: " + bundle.getInt("transmitterStorageTimeDays")); + log.debug("transmitterApiVersion: " + bundle.getInt("transmitterApiVersion")); + log.debug("transmitterMaxRuntimeDays: " + bundle.getInt("transmitterMaxRuntimeDays")); + log.debug("transmitterMaxStorageTimeDays: " + bundle.getInt("transmitterMaxStorageTimeDays")); + log.debug("transmitterCGMProcessorFirmwareVersion: " + bundle.getString("transmitterCGMProcessorFirmwareVersion")); + log.debug("transmitterBleRadioFirmwareVersion: " + bundle.getString("transmitterBleRadioFirmwareVersion")); + log.debug("transmitterHardwareVersion: " + bundle.getInt("transmitterHardwareVersion")); + log.debug("transmitterBleSoftDeviceVersion: " + bundle.getString("transmitterBleSoftDeviceVersion")); + log.debug("transmitterNordicAsicHwID: " + bundle.getInt("transmitterNordicAsicHwID")); + log.debug("transmitterSessionTimeDays: " + bundle.getInt("transmitterSessionTimeDays")); + log.debug("transmitterFeatureFlags: " + bundle.getInt("transmitterFeatureFlags")); + } + + if (bundle.containsKey("sensorInsertionTime")) { + long sensorInsertionTime = bundle.getLong("sensorInsertionTime"); + if (L.isEnabled(L.BGSOURCE)) + log.debug("sensorInsertionTime: " + DateUtil.dateAndTimeFullString(sensorInsertionTime)); + if (SP.getBoolean(R.string.key_dexcom_lognssensorchange, false)) { + try { + if (MainApp.getDbHelper().getCareportalEventFromTimestamp(sensorInsertionTime) == null) { + JSONObject data = new JSONObject(); + data.put("enteredBy", "AndroidAPS-DexcomG5"); + 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("glucoseValues")) { + int[] glucoseValues = bundle.getIntArray("glucoseValues"); + int[] glucoseRecordIDs = bundle.getIntArray("glucoseRecordIDs"); + long[] glucoseRecordedTimestamps = bundle.getLongArray("glucoseRecordedTimestamps"); + long[] glucoseSessionStartTimes = bundle.getLongArray("glucoseSessionStartTimes"); + long[] glucoseSystemTimestamps = bundle.getLongArray("glucoseSystemTimestamps"); + String[] glucoseTransmitterIDS = bundle.getStringArray("glucoseTransmitterIDS"); + long[] glucoseTransmitterTimestamps = bundle.getLongArray("glucoseTransmitterTimestamps"); + String[] glucoseTrendsArrows = bundle.getStringArray("glucoseTrendsArrows"); + boolean[] glucoseWasBackfilled = bundle.getBooleanArray("glucoseWasBackfilled"); + + if (L.isEnabled(L.BGSOURCE)) { + log.debug("glucoseValues", Arrays.toString(glucoseValues)); + log.debug("glucoseRecordIDs", Arrays.toString(glucoseRecordIDs)); + log.debug("glucoseRecordedTimestamps", Arrays.toString(glucoseRecordedTimestamps)); + log.debug("glucoseSessionStartTimes", Arrays.toString(glucoseSessionStartTimes)); + log.debug("glucoseSystemTimestamps", Arrays.toString(glucoseSystemTimestamps)); + log.debug("glucoseTransmitterIDS", Arrays.toString(glucoseTransmitterIDS)); + log.debug("glucoseTransmitterTimestamps", Arrays.toString(glucoseTransmitterTimestamps)); + log.debug("glucoseTrendsArrows", Arrays.toString(glucoseTrendsArrows)); + log.debug("glucoseWasBackfilled", Arrays.toString(glucoseWasBackfilled)); + } + + for (int i = 0; i < glucoseValues.length; i++) { + BgReading bgReading = new BgReading(); + bgReading.value = glucoseValues[i]; + bgReading.direction = glucoseTrendsArrows[i]; + bgReading.date = glucoseTransmitterTimestamps[i]; + bgReading.raw = 0; + boolean isNew = MainApp.getDbHelper().createIfNotExists(bgReading, "DexcomG5"); + if (isNew && SP.getBoolean(R.string.key_dexcomg5_nsupload, false)) { + NSUpload.uploadBg(bgReading, "AndroidAPS-DexcomG5"); + } + if (isNew && SP.getBoolean(R.string.key_dexcomg5_xdripupload, false)) { + NSUpload.sendToXdrip(bgReading); + } + } + } + + if (bundle.containsKey("meterValues")) { + String[] meterEntryTypes = bundle.getStringArray("meterEntryTypes"); + long[] meterTimestamps = bundle.getLongArray("meterTimestamps"); + int[] meterValues = bundle.getIntArray("meterValues"); + long[] meterRecordedTimestamps = bundle.getLongArray("meterRecordedTimestamps"); + int[] meterTransmitterIDs = bundle.getIntArray("meterTransmitterIDs"); + long[] meterTransmitterTimestamps = bundle.getLongArray("meterTransmitterTimestamps"); + + 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("meterTransmitterIDs", Arrays.toString(meterTransmitterIDs)); + } + + for (int i = 0; i < meterValues.length; i++) { + try { + if (MainApp.getDbHelper().getCareportalEventFromTimestamp(meterTimestamps[i]) == null) { + JSONObject data = new JSONObject(); + data.put("enteredBy", "AndroidAPS-DexcomG5"); + 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/plugins/Source/SourceDexcomG6Plugin.java b/app/src/main/java/info/nightscout/androidaps/plugins/Source/SourceDexcomG6Plugin.java new file mode 100644 index 0000000000..b496b19532 --- /dev/null +++ b/app/src/main/java/info/nightscout/androidaps/plugins/Source/SourceDexcomG6Plugin.java @@ -0,0 +1,174 @@ +package info.nightscout.androidaps.plugins.Source; + +import android.content.Intent; +import android.os.Bundle; + +import org.json.JSONException; +import org.json.JSONObject; +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; +import info.nightscout.androidaps.interfaces.PluginType; +import info.nightscout.androidaps.logging.L; +import info.nightscout.androidaps.plugins.NSClientInternal.NSUpload; +import info.nightscout.utils.DateUtil; +import info.nightscout.utils.SP; + +/** + * Created by mike on 30.11.2018. + */ + +public class SourceDexcomG6Plugin extends PluginBase implements BgSourceInterface { + private static Logger log = LoggerFactory.getLogger(L.BGSOURCE); + + private static SourceDexcomG6Plugin plugin = null; + + public static SourceDexcomG6Plugin getPlugin() { + if (plugin == null) + plugin = new SourceDexcomG6Plugin(); + return plugin; + } + + private SourceDexcomG6Plugin() { + super(new PluginDescription() + .mainType(PluginType.BGSOURCE) + .fragmentClass(BGSourceFragment.class.getName()) + .pluginName(R.string.DexcomG6) + .shortName(R.string.dexcomG6_shortname) + .preferencesId(R.xml.pref_bgsource) + .description(R.string.description_source_dexcom_g6) + ); + } + + @Override + public boolean advancedFilteringSupported() { + return true; + } + + @Override + public void handleNewData(Intent intent) { + if (!isEnabled(PluginType.BGSOURCE)) return; + + Bundle bundle = intent.getExtras(); + if (bundle == null) return; + + if (L.isEnabled(L.BGSOURCE)) { + if (bundle.containsKey("transmitterSystemTime")) + log.debug("transmitterSystemTime: " + DateUtil.dateAndTimeFullString(bundle.getLong("transmitterSystemTime"))); + log.debug("transmitterId: " + bundle.getString("transmitterId")); + if (bundle.containsKey("transmitterActivatedOn")) + log.debug("transmitterActivatedOn: " + DateUtil.dateAndTimeFullString(bundle.getLong("transmitterActivatedOn"))); + log.debug("transmitterVersion: " + bundle.getString("transmitterVersion")); + log.debug("transmitterSoftwareNumber: " + bundle.getString("transmitterSoftwareNumber")); + log.debug("transmitterStorageTimeDays: " + bundle.getInt("transmitterStorageTimeDays")); + log.debug("transmitterApiVersion: " + bundle.getInt("transmitterApiVersion")); + log.debug("transmitterMaxRuntimeDays: " + bundle.getInt("transmitterMaxRuntimeDays")); + log.debug("transmitterMaxStorageTimeDays: " + bundle.getInt("transmitterMaxStorageTimeDays")); + log.debug("transmitterCGMProcessorFirmwareVersion: " + bundle.getString("transmitterCGMProcessorFirmwareVersion")); + log.debug("transmitterBleRadioFirmwareVersion: " + bundle.getString("transmitterBleRadioFirmwareVersion")); + log.debug("transmitterHardwareVersion: " + bundle.getInt("transmitterHardwareVersion")); + log.debug("transmitterBleSoftDeviceVersion: " + bundle.getString("transmitterBleSoftDeviceVersion")); + log.debug("transmitterNordicAsicHwID: " + bundle.getInt("transmitterNordicAsicHwID")); + log.debug("transmitterSessionTimeDays: " + bundle.getInt("transmitterSessionTimeDays")); + log.debug("transmitterFeatureFlags: " + bundle.getInt("transmitterFeatureFlags")); + + if (bundle.containsKey("sensorCode")) + log.debug("sensorCode: " + bundle.getString("sensorCode")); + } + + if (bundle.containsKey("sensorInsertionTime")) { + long sensorInsertionTime = bundle.getLong("sensorInsertionTime"); + if (L.isEnabled(L.BGSOURCE)) + log.debug("sensorInsertionTime: " + DateUtil.dateAndTimeFullString(sensorInsertionTime)); + if (SP.getBoolean(R.string.key_dexcom_lognssensorchange, false)) { + 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)); + } + + 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/plugins/Source/SourceEversensePlugin.java b/app/src/main/java/info/nightscout/androidaps/plugins/Source/SourceEversensePlugin.java new file mode 100644 index 0000000000..60f147e3a4 --- /dev/null +++ b/app/src/main/java/info/nightscout/androidaps/plugins/Source/SourceEversensePlugin.java @@ -0,0 +1,154 @@ +package info.nightscout.androidaps.plugins.Source; + +import android.content.Intent; +import android.os.Bundle; + +import org.json.JSONException; +import org.json.JSONObject; +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; +import info.nightscout.androidaps.interfaces.PluginType; +import info.nightscout.androidaps.logging.L; +import info.nightscout.androidaps.plugins.NSClientInternal.NSUpload; +import info.nightscout.utils.DateUtil; +import info.nightscout.utils.SP; + +/** + * Created by mike on 28.11.2017. + */ + +public class SourceEversensePlugin extends PluginBase implements BgSourceInterface { + private static Logger log = LoggerFactory.getLogger(L.BGSOURCE); + + private static SourceEversensePlugin plugin = null; + + public static SourceEversensePlugin getPlugin() { + if (plugin == null) + plugin = new SourceEversensePlugin(); + return plugin; + } + + private SourceEversensePlugin() { + super(new PluginDescription() + .mainType(PluginType.BGSOURCE) + .fragmentClass(BGSourceFragment.class.getName()) + .pluginName(R.string.eversense) + .shortName(R.string.eversense_shortname) + .preferencesId(R.xml.pref_poctech) + .description(R.string.description_source_eversense) + ); + } + + @Override + public boolean advancedFilteringSupported() { + return false; + } + + @Override + public void handleNewData(Intent intent) { + + if (!isEnabled(PluginType.BGSOURCE)) return; + + Bundle bundle = intent.getExtras(); + if (bundle == null) return; + + if (L.isEnabled(L.BGSOURCE)) { + if (bundle.containsKey("currentCalibrationPhase")) + log.debug("currentCalibrationPhase: " + bundle.getString("currentCalibrationPhase")); + if (bundle.containsKey("placementModeInProgress")) + log.debug("placementModeInProgress: " + bundle.getBoolean("placementModeInProgress")); + if (bundle.containsKey("glucoseLevel")) + log.debug("glucoseLevel: " + bundle.getInt("glucoseLevel")); + if (bundle.containsKey("glucoseTrendDirection")) + log.debug("glucoseTrendDirection: " + bundle.getString("glucoseTrendDirection")); + if (bundle.containsKey("glucoseTimestamp")) + log.debug("glucoseTimestamp: " + DateUtil.dateAndTimeFullString(bundle.getLong("glucoseTimestamp"))); + if (bundle.containsKey("batteryLevel")) + log.debug("batteryLevel: " + bundle.getString("batteryLevel")); + if (bundle.containsKey("signalStrength")) + log.debug("signalStrength: " + bundle.getString("signalStrength")); + if (bundle.containsKey("transmitterVersionNumber")) + log.debug("transmitterVersionNumber: " + bundle.getString("transmitterVersionNumber")); + if (bundle.containsKey("isXLVersion")) + log.debug("isXLVersion: " + bundle.getBoolean("isXLVersion")); + if (bundle.containsKey("transmitterModelNumber")) + log.debug("transmitterModelNumber: " + bundle.getString("transmitterModelNumber")); + if (bundle.containsKey("transmitterSerialNumber")) + log.debug("transmitterSerialNumber: " + bundle.getString("transmitterSerialNumber")); + if (bundle.containsKey("transmitterAddress")) + log.debug("transmitterAddress: " + bundle.getString("transmitterAddress")); + if (bundle.containsKey("sensorInsertionTimestamp")) + log.debug("sensorInsertionTimestamp: " + DateUtil.dateAndTimeFullString(bundle.getLong("sensorInsertionTimestamp"))); + if (bundle.containsKey("transmitterVersionNumber")) + log.debug("transmitterVersionNumber: " + bundle.getString("transmitterVersionNumber")); + if (bundle.containsKey("transmitterConnectionState")) + log.debug("transmitterConnectionState: " + bundle.getString("transmitterConnectionState")); + } + + if (bundle.containsKey("glucoseLevels")) { + int[] glucoseLevels = bundle.getIntArray("glucoseLevels"); + int[] glucoseRecordNumbers = bundle.getIntArray("glucoseRecordNumbers"); + long[] glucoseTimestamps = bundle.getLongArray("glucoseTimestamps"); + + if (L.isEnabled(L.BGSOURCE)) { + log.debug("glucoseLevels", Arrays.toString(glucoseLevels)); + log.debug("glucoseRecordNumbers", Arrays.toString(glucoseRecordNumbers)); + log.debug("glucoseTimestamps", Arrays.toString(glucoseTimestamps)); + } + + for (int i = 0; i < glucoseLevels.length; i++) { + BgReading bgReading = new BgReading(); + bgReading.value = glucoseLevels[i]; + bgReading.date = glucoseTimestamps[i]; + bgReading.raw = 0; + boolean isNew = MainApp.getDbHelper().createIfNotExists(bgReading, "Eversense"); + if (isNew && SP.getBoolean(R.string.key_dexcomg5_nsupload, false)) { + NSUpload.uploadBg(bgReading, "AndroidAPS-Eversense"); + } + if (isNew && SP.getBoolean(R.string.key_dexcomg5_xdripupload, false)) { + NSUpload.sendToXdrip(bgReading); + } + } + } + + if (bundle.containsKey("calibrationGlucoseLevels")) { + int[] calibrationGlucoseLevels = bundle.getIntArray("calibrationGlucoseLevels"); + long[] calibrationTimestamps = bundle.getLongArray("calibrationTimestamps"); + long[] calibrationRecordNumbers = bundle.getLongArray("calibrationRecordNumbers"); + + if (L.isEnabled(L.BGSOURCE)) { + log.debug("calibrationGlucoseLevels", Arrays.toString(calibrationGlucoseLevels)); + log.debug("calibrationTimestamps", Arrays.toString(calibrationTimestamps)); + log.debug("calibrationRecordNumbers", Arrays.toString(calibrationRecordNumbers)); + } + + for (int i = 0; i < calibrationGlucoseLevels.length; i++) { + try { + if (MainApp.getDbHelper().getCareportalEventFromTimestamp(calibrationTimestamps[i]) == null) { + JSONObject data = new JSONObject(); + data.put("enteredBy", "AndroidAPS-Eversense"); + data.put("created_at", DateUtil.toISOString(calibrationTimestamps[i])); + data.put("eventType", CareportalEvent.BGCHECK); + data.put("glucoseType", "Finger"); + data.put("glucose", calibrationGlucoseLevels[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/plugins/Source/SourceNSClientPlugin.java b/app/src/main/java/info/nightscout/androidaps/plugins/Source/SourceNSClientPlugin.java index de110edd4e..f70c443d6e 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/Source/SourceNSClientPlugin.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/Source/SourceNSClientPlugin.java @@ -99,7 +99,7 @@ public class SourceNSClientPlugin extends PluginBase implements BgSourceInterfac public void detectSource(String source, long timeStamp) { if (timeStamp > lastBGTimeStamp) { - if (source.contains("G5 Native") || source.contains("G6 Native") || source.contains("AndroidAPS-DexcomG5")) + if (source.contains("G5 Native") || source.contains("G6 Native") || source.contains("AndroidAPS-DexcomG5") || source.contains("AndroidAPS-DexcomG6")) isAdvancedFilteringEnabled = true; else isAdvancedFilteringEnabled = false; diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/Source/SourcePoctechPlugin.java b/app/src/main/java/info/nightscout/androidaps/plugins/Source/SourcePoctechPlugin.java index df390522d3..6a63922426 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/Source/SourcePoctechPlugin.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/Source/SourcePoctechPlugin.java @@ -80,7 +80,7 @@ public class SourcePoctechPlugin extends PluginBase implements BgSourceInterface bgReading.value = bgReading.value * Constants.MMOLL_TO_MGDL; boolean isNew = MainApp.getDbHelper().createIfNotExists(bgReading, "Poctech"); if (isNew && SP.getBoolean(R.string.key_dexcomg5_nsupload, false)) { - NSUpload.uploadBg(bgReading); + NSUpload.uploadBg(bgReading, "AndroidAPS-Poctech"); } if (isNew && SP.getBoolean(R.string.key_dexcomg5_xdripupload, false)) { NSUpload.sendToXdrip(bgReading); diff --git a/app/src/main/java/info/nightscout/androidaps/services/DataService.java b/app/src/main/java/info/nightscout/androidaps/services/DataService.java index cfc564770d..3a787426b6 100644 --- a/app/src/main/java/info/nightscout/androidaps/services/DataService.java +++ b/app/src/main/java/info/nightscout/androidaps/services/DataService.java @@ -26,6 +26,8 @@ import info.nightscout.androidaps.plugins.ProfileNS.NSProfilePlugin; import info.nightscout.androidaps.plugins.PumpDanaR.activities.DanaRNSHistorySync; import info.nightscout.androidaps.plugins.SmsCommunicator.SmsCommunicatorPlugin; import info.nightscout.androidaps.plugins.Source.SourceDexcomG5Plugin; +import info.nightscout.androidaps.plugins.Source.SourceDexcomG6Plugin; +import info.nightscout.androidaps.plugins.Source.SourceEversensePlugin; import info.nightscout.androidaps.plugins.Source.SourceGlimpPlugin; import info.nightscout.androidaps.plugins.Source.SourceMM640gPlugin; import info.nightscout.androidaps.plugins.Source.SourceNSClientPlugin; @@ -68,8 +70,14 @@ public class DataService extends IntentService { SourceGlimpPlugin.getPlugin().handleNewData(intent); } else if (Intents.DEXCOMG5_BG.equals(action)) { SourceDexcomG5Plugin.getPlugin().handleNewData(intent); + } else if (Intents.DEXCOMG5_BG_NEW.equals(action)) { + SourceDexcomG5Plugin.getPlugin().handleNewData(intent); + } else if (Intents.DEXCOMG6_BG.equals(action)) { + SourceDexcomG6Plugin.getPlugin().handleNewData(intent); } else if (Intents.POCTECH_BG.equals(action)) { SourcePoctechPlugin.getPlugin().handleNewData(intent); + } else if (Intents.EVERSENSE_BG.equals(action)) { + SourceEversensePlugin.getPlugin().handleNewData(intent); } else if (Intents.ACTION_NEW_SGV.equals(action)) { SourceNSClientPlugin.getPlugin().handleNewData(intent); } else if (Intents.ACTION_NEW_PROFILE.equals(action)) { 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 6d3daf1ea9..50ec949f3d 100644 --- a/app/src/main/java/info/nightscout/androidaps/services/Intents.java +++ b/app/src/main/java/info/nightscout/androidaps/services/Intents.java @@ -49,6 +49,9 @@ public interface Intents { String GLIMP_BG = "it.ct.glicemia.ACTION_GLUCOSE_MEASURED"; String DEXCOMG5_BG = "com.dexcom.cgm.DATA"; + String DEXCOMG5_BG_NEW = "com.dexcom.cgm.g5.AndroidAPSEVGCallback.BROADCAST"; + String DEXCOMG6_BG = "com.dexcom.cgm.AndroidAPSEVGCallback.BROADCAST"; + String EVERSENSE_BG = "com.senseonics.AndroidAPSEventSubscriber.BROADCAST"; String POCTECH_BG = "com.china.poctech.data"; } diff --git a/app/src/main/res/values-af/strings.xml b/app/src/main/res/values-af/strings.xml index 84438cf194..acfd2f3496 100644 --- a/app/src/main/res/values-af/strings.xml +++ b/app/src/main/res/values-af/strings.xml @@ -704,7 +704,7 @@ Skakel asb die foon se bluetooth af vir een sekonde Indien geen verbinding met die pomp moontlik is nie. Dit mag help vir sommige selfone waar die bluetooth stapel vries. DexcomG5 App (gelapte) BG data oplaai na NS - G5 oplaai instellings + G5 oplaai instellings Poctech oplaai instellings Wys gedetailleerde delta Wys delta met een meer desimale plek diff --git a/app/src/main/res/values-bg/strings.xml b/app/src/main/res/values-bg/strings.xml index 97fa9bd01c..78728a9cf4 100644 --- a/app/src/main/res/values-bg/strings.xml +++ b/app/src/main/res/values-bg/strings.xml @@ -710,7 +710,7 @@ Изключва Bluetooth на телефона за една секунда, ако няма връзка с помпата. Това може да помогне на някои телефони, където Bluetooth блокира. Dexcom G5 приложение (модифицирано) Качвай данните за КЗ в NS - G5 настройки за качване + G5 настройки за качване Poctech настройки за качване Показвай подробна делта Показвай делта с още един десетичен знак diff --git a/app/src/main/res/values-cs/strings.xml b/app/src/main/res/values-cs/strings.xml index b7ce6ed2b3..61e69d6531 100644 --- a/app/src/main/res/values-cs/strings.xml +++ b/app/src/main/res/values-cs/strings.xml @@ -704,7 +704,7 @@ Vypne na 1 sek bluetooth v telefonu, pokud se nedaří připojit k pumpě. Může to pomoci u telefonů, které mají problémy s BT DexcomG5 aplikace (upravená) Nahrávat data do NS - Nastavení nahrávání z G5 + Nastavení nahrávání z G5 Nastavení nahrávání z Poctech Zobrazovat detailní změny Zobrazovat rozdíl s jedním desetinným místem navíc diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index 9032c729d5..fafac895ff 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -712,7 +712,7 @@ maxIOB = durchschnittlicher Essensbolus + 3 x maximale Basalrate Deaktiviert Bluetooth kurzzeitig, falls keine Verbindung zur Pumpe besteht. Dies kann für Smartphones mit Verbindungsproblemen nützlich sein. DexcomG5 App (gepatcht) Speichere BZ-Werte in Nightscout - G5 Upload Einstellungen + G5 Upload Einstellungen Poctech Upload-Einstellungen Zeige detailliertes Delta Delta wird mit Dezimalstelle angezeigt. diff --git a/app/src/main/res/values-el/strings.xml b/app/src/main/res/values-el/strings.xml index 9b1326788c..c88110fafe 100644 --- a/app/src/main/res/values-el/strings.xml +++ b/app/src/main/res/values-el/strings.xml @@ -703,7 +703,7 @@ Απενεργοποιεί το bluetooth του τηλεφώνου για ένα δευτερόλεπτο αν δεν είναι δυνατή η σύνδεση με την αντλία. Αυτό μπορεί να βοηθήσει σε ορισμένα τηλέφωνα όπου το bluetooth παγώνει. Εφαρμογή DexcomG5 (τροποποιημένη) Ανέβασμα δεδομένων BG στο NS - Ανέβασμα ρυθμίσεων G5 + Ανέβασμα ρυθμίσεων G5 Ανέβασμα ρυθμίσεων Poctech Εμφάνιση λεπτομερών στατιστικών Δείξτε τη διαφορά με ένα επιπλέον δεκαδικό ψηφίο diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index 2c901c9caf..4afc40f249 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -703,7 +703,7 @@ Apaga el bluetooth del móvil por un segundo si no hay conexión con la bomba. Esto ayuda con algunos móviles con problemas de establecer conexión bluetooth estable. Aplicación de DexcomG5 (parcheada) Subir datos BG a NS - Ajuste de subida datos G5 + Ajuste de subida datos G5 Configuración de carga Poctech Mostrar detalles delta Mostrar delta con un decimal mas diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index 67ecad3f5e..4fb31a0458 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -705,7 +705,7 @@ L\'ENSEMBLE DES RISQUES LIÉS À LA QUALITÉ ET À LA PERFORMANCE DU PROGRAMME S Ceci va arrêter le Bluetooth du téléphone pour une seconde si la connexion pompe n’est pas possible. Cela peut assister certains téléphones dont la connexion Bluetooth se bloque. App Dexcom G5 (adaptée) Remonter les données glycémiques vers NS - Paramètres de téléchargement du G5 + Paramètres de téléchargement du G5 Paramètres de téléchargement Poctech Afficher le delta détaillé Afficher delta avec une décimale supplémentaire diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index 4a57599cb7..2093f9e408 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -702,7 +702,7 @@ Spegnere il bluetooth del telefono per un secondo se non è possibile alcuna connessione al micro. Questo può aiutare in alcuni telefoni. DexcomG5 App (con correzione) Caricare dati di BG al NS - Impostazioni caricamento G5 + Impostazioni caricamento G5 Impostazioni di caricamento Poctech Visualizza dettagliata delta Visualizza delta con una cifra decimale più diff --git a/app/src/main/res/values-ko/strings.xml b/app/src/main/res/values-ko/strings.xml index 5c7c7ce95d..348a6bac38 100644 --- a/app/src/main/res/values-ko/strings.xml +++ b/app/src/main/res/values-ko/strings.xml @@ -702,7 +702,7 @@ 펌프에 연결이 되지 않을때 폰의 블루투스를 1초간 껐다 켭니다. 블루투스 스택이 정지되는 일부폰에 이 기능이 도움이 됩니다. DexcomG5 앱(패치버전) NS에 혈당데이터 업로드하기 - G5업로드 세팅 + G5업로드 세팅 Poctech 업로드 설정 델타(혈당증분값) 자세히 보여주기 소수점 자리 추가된 증분값 보여주기 diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml index 265fff24d1..237e29b122 100644 --- a/app/src/main/res/values-nl/strings.xml +++ b/app/src/main/res/values-nl/strings.xml @@ -705,7 +705,7 @@ Stel in en gebruik tijdelijk en standaard tijdelijke streefdoelen (bv. bij sport Deactiveert de bluetooth functie van de telefoon gedurende een ogenblik. Dit kan op sommige gsm\'s een vastgelopen bluetooth service verhelpen. DexcomG5 App (aangepast) Upload BG gegevens naar NS - G5 Upload instellingen + G5 Upload instellingen Poctech upload instellingen Toon gedetailleerde delta Toon delta met een extra decimaal punt diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml index 42c4afcbf1..1473078b10 100644 --- a/app/src/main/res/values-pl/strings.xml +++ b/app/src/main/res/values-pl/strings.xml @@ -705,7 +705,7 @@ Wyłącza bluetooth telefonu na jedną sekundę, jeśli nie jest możliwe połączenie z pompą. Może to pomóc w niektórych telefonach, w których blokuje się bluetooth. DexcomG5 App (patched) Przekaż dane BG do NS - G5 prześlij ustawienia + G5 prześlij ustawienia Poctech ustawienia przesyłania Pokaż szczegółowe delta Pokaż deltę z jednym więcej miejscem dziesiętnym diff --git a/app/src/main/res/values-pt/strings.xml b/app/src/main/res/values-pt/strings.xml index 65f47f413c..2f3cf600b4 100644 --- a/app/src/main/res/values-pt/strings.xml +++ b/app/src/main/res/values-pt/strings.xml @@ -704,7 +704,7 @@ Desliga o bluetooth do telefone durante um segundo se nenhuma conexão com bomba for possível. Este parâmetro pode ser util em alguns telefones, onde a pilha bluetooth congela. Aplicação DexcomG5 (com patch) Enviar dados Glic. para NS - Definições envio G5 + Definições envio G5 Definições de upload para Poctech Mostrar Delta detalho Mostrar delta com mais um ponto decimal diff --git a/app/src/main/res/values-ro/strings.xml b/app/src/main/res/values-ro/strings.xml index 545f27de74..e95c9992c0 100644 --- a/app/src/main/res/values-ro/strings.xml +++ b/app/src/main/res/values-ro/strings.xml @@ -703,7 +703,7 @@ Oprește bluetooth-ul telefonului pentru o secundă dacă nu se poate conecta la pompă. Aceasta poate ajuta în cazul telefoanelor cu bluetooth incompatitibil. App DexcomG5 (cu patch) Încarcă date glicemie în NS - Setări înregistrare G5 + Setări înregistrare G5 Setări upload Poctech Arată variație detaliată Arată variație cu încă o zecimală diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index 031fffc3f9..82ebfaabb3 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -704,7 +704,7 @@ Выключает bluetooth телефона на одну секунду, если подключение к помпе невозможно. Это помогает на тех телефонах, где зависает модуль bluetooth. Приложение Dexcom (пропатченное) Загрузить данные СК в Nightscout - Настройки загрузки c G5 + Настройки загрузки c G5 Настройка загрузки с Poctech Показать подробно дельту Показать дельту еще с одним десятичным знаком diff --git a/app/src/main/res/values-sk/strings.xml b/app/src/main/res/values-sk/strings.xml index 985319273b..289af0d7c2 100644 --- a/app/src/main/res/values-sk/strings.xml +++ b/app/src/main/res/values-sk/strings.xml @@ -710,7 +710,7 @@ Vypne na 1 sekundu Bluetooth v telefóne, pokiaľ se nedarí pripojiť k pumpe. Môže to pomôcť pri telefónoch, ktoré majú problémy s BT. DexcomG5 aplikácia (upravená) Nahrávať glykémie do NS - Nastavenie nahrávania z G5 + Nastavenie nahrávania z G5 Nastavenie nahrávania z Poctech Zobrazovať detailné zmeny Zobrazovať rozdiel s jedným desatinným miestom naviac diff --git a/app/src/main/res/values-sv/strings.xml b/app/src/main/res/values-sv/strings.xml index 8421e23586..6d12e95bc0 100644 --- a/app/src/main/res/values-sv/strings.xml +++ b/app/src/main/res/values-sv/strings.xml @@ -704,7 +704,7 @@ Startar om bluetooth på telefonen om anslutning till pumpen misslyckas. Detta hjälper på en del telefoner där bluetooth ibland hänger sig. DexcomG5 App (modifierad) Ladda upp BG-data till Nightscout - Uppladdningsinställningar för G5 + Uppladdningsinställningar för G5 Uppladdningsinställningar för Poctech Visa detaljerad delta Visa delta med en extra decimal diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml index bef2a6ab41..1d12e1efe3 100644 --- a/app/src/main/res/values-tr/strings.xml +++ b/app/src/main/res/values-tr/strings.xml @@ -705,7 +705,7 @@ Aktif Karbonhidratın ne kadar hızlı sindirildiğine ve KŞ\'nin beklenenden d Pompa ile herhangi bir bağlantı sorunu yaşanıyorsa, Akıllı telefonunuzda Bluetooth bağlantısını kapatıp açın. Bu bluetooth bağlantı sorununu giderecektir. DexcomG5 App (patched) KŞ verilerini NighScout\'a yükle - G5 yükleme ayarları + G5 yükleme ayarları Poctech yükleme ayarları Ayrıntılı delta göster Bir ondalık basamakla deltayı göster diff --git a/app/src/main/res/values-zh/strings.xml b/app/src/main/res/values-zh/strings.xml index ce3b97cfbc..322240548b 100644 --- a/app/src/main/res/values-zh/strings.xml +++ b/app/src/main/res/values-zh/strings.xml @@ -702,7 +702,7 @@ 如果没有连接到泵,关闭手机的蓝牙一秒钟再自动打开。这在一些蓝牙堆栈僵死的手机上是有帮助的, DexcomG5 app (补丁) 将 数据血糖数据上传到 NS服务器 - G5 上传设置 + G5 上传设置 Poctech 上传设置 显示详细的增量 增量再多显示一个小数位 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 24139fd979..f594474555 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -44,6 +44,8 @@ Sensitivity is calculated from 8h data in the past and carbs (if not absorbed) are cut after time specified in preferences. Plugin also calculates UAM. Sensitivity is calculated as a weighted average from deviations. Newer deviations have higher weight. Minimal carb absorption is calculated from max carb absorption time from preferences. This algorithm is the fastest in following sensitivity changes. Receive BG values from the patched Dexcom G5 app. + Receive BG values from the patched Dexcom G6 app. + Receive BG values from the patched Eversense app. Receive BG values from Glimp. Receive BG values from the 600SeriesAndroidUploader. Downloads BG data from Nightscout @@ -811,10 +813,11 @@ BT Watchdog Switches off the phone\'s bluetooth for one second if no connection to the pump is possible. This may help on some phones where the bluetooth stack freezes. DexcomG5 App (patched) + DexcomG6 App (patched) + Eversense App (patched) Upload BG data to NS dexcomg5_nsupload - G5 upload settings - Poctech upload settings + BG upload settings Show detailed delta Show delta with one more decimal place 45 60 75 90 105 120 @@ -972,12 +975,14 @@ Create announcements from errors Create Nightscout announcement for error dialogs and local alerts (also viewable in Careportal under Treatments) G5 + G6 + EVR Show the predictions on the watchface. Predictions Data Choices Fabric Upload Allow automated crash reporting and feature usage data to be sent to the developers via the fabric.io service. - Please update your G5 app to supported version + Please update your Dexcom app to supported version Start Activity TT Start Eating soon TT TT @@ -1293,6 +1298,9 @@ U/h g/U /U + dexcom_lognssensorchange + Log sensor change to NS + Create event \"Sensor Change\" in NS automaticaly on sensor start %1$d day diff --git a/app/src/main/res/xml/pref_dexcomg5.xml b/app/src/main/res/xml/pref_bgsource.xml similarity index 66% rename from app/src/main/res/xml/pref_dexcomg5.xml rename to app/src/main/res/xml/pref_bgsource.xml index cd987825d5..fa6f666109 100644 --- a/app/src/main/res/xml/pref_dexcomg5.xml +++ b/app/src/main/res/xml/pref_bgsource.xml @@ -1,7 +1,7 @@ + android:title="@string/bgsource_upload"> + + \ No newline at end of file diff --git a/app/src/main/res/xml/pref_poctech.xml b/app/src/main/res/xml/pref_poctech.xml index f6fd216963..8a48a7fd05 100644 --- a/app/src/main/res/xml/pref_poctech.xml +++ b/app/src/main/res/xml/pref_poctech.xml @@ -1,7 +1,7 @@ + android:title="@string/bgsource_upload">