diff --git a/.idea/misc.xml b/.idea/misc.xml index 5d19981032..fbb68289f4 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -37,7 +37,7 @@ - + diff --git a/app/build.gradle b/app/build.gradle index da35bd40a7..9740cf7335 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -43,8 +43,8 @@ android { applicationId "info.nightscout.androidaps" minSdkVersion 21 targetSdkVersion 23 - versionCode 1020 - versionName "1.0.20" + versionCode 1100 + versionName "1.1" buildConfigField "String", "BUILDVERSION", generateGitBuild() } lintOptions { diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index f6e693e611..d49ee22092 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -63,6 +63,8 @@ + + diff --git a/app/src/main/java/info/nightscout/androidaps/MainApp.java b/app/src/main/java/info/nightscout/androidaps/MainApp.java index 8f9d7606e8..2c5f46a259 100644 --- a/app/src/main/java/info/nightscout/androidaps/MainApp.java +++ b/app/src/main/java/info/nightscout/androidaps/MainApp.java @@ -34,6 +34,7 @@ import info.nightscout.androidaps.plugins.Overview.OverviewFragment; import info.nightscout.androidaps.plugins.SafetyFragment.SafetyFragment; import info.nightscout.androidaps.plugins.SimpleProfile.SimpleProfileFragment; import info.nightscout.androidaps.plugins.SmsCommunicator.SmsCommunicatorFragment; +import info.nightscout.androidaps.plugins.SourceMM640g.SourceMM640gFragment; import info.nightscout.androidaps.plugins.SourceNSClient.SourceNSClientFragment; import info.nightscout.androidaps.plugins.SourceXdrip.SourceXdripFragment; import info.nightscout.androidaps.plugins.TempBasals.TempBasalsFragment; @@ -92,6 +93,7 @@ public class MainApp extends Application { if (Config.APS) pluginsList.add(ObjectivesFragment.getPlugin()); pluginsList.add(SourceXdripFragment.getPlugin()); pluginsList.add(SourceNSClientFragment.getPlugin()); + pluginsList.add(SourceMM640gFragment.getPlugin()); if (Config.SMSCOMMUNICATORENABLED) pluginsList.add(SmsCommunicatorFragment.getPlugin()); 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 95a6b81b68..7ba381f130 100644 --- a/app/src/main/java/info/nightscout/androidaps/Services/DataService.java +++ b/app/src/main/java/info/nightscout/androidaps/Services/DataService.java @@ -42,6 +42,7 @@ import info.nightscout.androidaps.plugins.Objectives.ObjectivesPlugin; import info.nightscout.androidaps.plugins.Overview.OverviewPlugin; import info.nightscout.androidaps.plugins.SmsCommunicator.SmsCommunicatorPlugin; import info.nightscout.androidaps.plugins.SmsCommunicator.events.EventNewSMS; +import info.nightscout.androidaps.plugins.SourceMM640g.SourceMM640gPlugin; import info.nightscout.androidaps.plugins.SourceNSClient.SourceNSClientPlugin; import info.nightscout.androidaps.plugins.SourceXdrip.SourceXdripPlugin; import info.nightscout.androidaps.receivers.DataReceiver; @@ -55,6 +56,7 @@ public class DataService extends IntentService { boolean xDripEnabled = false; boolean nsClientEnabled = true; + boolean mm640gEnabled = false; public DataService() { super("DataService"); @@ -69,9 +71,15 @@ public class DataService extends IntentService { if (ConfigBuilderPlugin.getActiveBgSource().getClass().equals(SourceXdripPlugin.class)) { xDripEnabled = true; nsClientEnabled = false; + mm640gEnabled = false; } else if (ConfigBuilderPlugin.getActiveBgSource().getClass().equals(SourceNSClientPlugin.class)) { xDripEnabled = false; nsClientEnabled = true; + mm640gEnabled = false; + } else if (ConfigBuilderPlugin.getActiveBgSource().getClass().equals(SourceMM640gPlugin.class)) { + xDripEnabled = false; + nsClientEnabled = false; + mm640gEnabled = true; } boolean isNSProfile = ConfigBuilderPlugin.getActiveProfile().getClass().equals(NSProfilePlugin.class); @@ -85,6 +93,10 @@ public class DataService extends IntentService { if (xDripEnabled) { handleNewDataFromXDrip(intent); } + } else if (Intents.NS_EMULATOR.equals(action)) { + if (mm640gEnabled) { + handleNewDataFromMM640g(intent); + } } else if (Intents.ACTION_NEW_SGV.equals(action)) { // always handle SGV if NS-Client is the source if (nsClientEnabled) { @@ -171,6 +183,58 @@ public class DataService extends IntentService { MainApp.bus().post(new EventNewBG()); } + private void handleNewDataFromMM640g(Intent intent) { + Bundle bundle = intent.getExtras(); + if (bundle == null) return; + + final String collection = bundle.getString("collection"); + if (collection == null) return; + + if (collection.equals("entries")) { + final String data = bundle.getString("data"); + + if ((data != null) && (data.length() > 0)) { + try { + final JSONArray json_array = new JSONArray(data); + for (int i = 0; i < json_array.length(); i++) { + final JSONObject json_object = json_array.getJSONObject(i); + final String type = json_object.getString("type"); + switch (type) { + case "sgv": + BgReading bgReading = new BgReading(); + + bgReading.value = json_object.getDouble("sgv"); + bgReading.direction = json_object.getString("direction"); + bgReading.timeIndex = json_object.getLong("date"); + bgReading.raw = json_object.getDouble("sgv"); + + if (bgReading.timeIndex < new Date().getTime() - Constants.hoursToKeepInDatabase * 60 * 60 * 1000L) { + if (Config.logIncommingBG) + log.debug("Ignoring old MM640g BG " + bgReading.toString()); + return; + } + + if (Config.logIncommingBG) + log.debug("MM640g BG " + bgReading.toString()); + + try { + MainApp.getDbHelper().getDaoBgReadings().createIfNotExists(bgReading); + } catch (SQLException e) { + e.printStackTrace(); + } + break; + default: + log.debug("Unknown entries type: " + type); + } + } + } catch (JSONException e) { + log.error("Got JSON exception: " + e); + } + } + } + MainApp.bus().post(new EventNewBG()); + } + private void handleNewDataFromNSClient(Intent intent) { Bundle bundles = intent.getExtras(); if (bundles == null) return; @@ -282,7 +346,6 @@ public class DataService extends IntentService { handleAddedTreatment(trstr); } } - scheduleTreatmentChange(); } catch (Exception e) { e.printStackTrace(); } @@ -304,7 +367,6 @@ public class DataService extends IntentService { handleChangedTreatment(trstr); } } - scheduleTreatmentChange(); } catch (Exception e) { e.printStackTrace(); } @@ -328,7 +390,6 @@ public class DataService extends IntentService { removeTreatmentFromDb(_id); } } - scheduleTreatmentChange(); } catch (Exception e) { e.printStackTrace(); } @@ -407,6 +468,7 @@ public class DataService extends IntentService { int updated = MainApp.getDbHelper().getDaoTreatments().update(stored); if (Config.logIncommingData) log.debug("Records updated: " + updated); + scheduleTreatmentChange(); } } else { if (Config.logIncommingData) @@ -430,6 +492,7 @@ public class DataService extends IntentService { } catch (SQLException e) { e.printStackTrace(); } + scheduleTreatmentChange(); } } @@ -483,6 +546,7 @@ public class DataService extends IntentService { } catch (SQLException e) { e.printStackTrace(); } + scheduleTreatmentChange(); } public void handleDanaRHistoryRecords(JSONObject trJson) throws JSONException, SQLException { 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 63ef83e298..e46071e7ff 100644 --- a/app/src/main/java/info/nightscout/androidaps/Services/Intents.java +++ b/app/src/main/java/info/nightscout/androidaps/Services/Intents.java @@ -29,4 +29,6 @@ public interface Intents { String EXTRA_RAW = "com.eveningoutpost.dexdrip.Extras.Raw"; String ACTION_NEW_BG_ESTIMATE_NO_DATA = "com.eveningoutpost.dexdrip.BgEstimateNoData"; + + String NS_EMULATOR = "com.eveningoutpost.dexdrip.NS_EMULATOR"; } diff --git a/app/src/main/java/info/nightscout/androidaps/db/TempBasal.java b/app/src/main/java/info/nightscout/androidaps/db/TempBasal.java index 835fec8a59..649ada3738 100644 --- a/app/src/main/java/info/nightscout/androidaps/db/TempBasal.java +++ b/app/src/main/java/info/nightscout/androidaps/db/TempBasal.java @@ -6,14 +6,13 @@ import com.j256.ormlite.table.DatabaseTable; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.text.DateFormat; -import java.text.SimpleDateFormat; import java.util.Date; import info.nightscout.androidaps.MainApp; import info.nightscout.androidaps.data.Iob; import info.nightscout.androidaps.plugins.OpenAPSMA.IobTotal; import info.nightscout.client.data.NSProfile; +import info.nightscout.utils.DateUtil; import info.nightscout.utils.DecimalFormatter; @DatabaseTable(tableName = DatabaseHelper.DATABASE_TEMPBASALS) @@ -190,16 +189,15 @@ public class TempBasal { } public String toString() { - DateFormat formatDateToJustTime = new SimpleDateFormat("HH:mm"); String extended = isExtended ? "E " : ""; if (isAbsolute) { return extended + DecimalFormatter.to2Decimal(absolute) + "U/h @" + - formatDateToJustTime.format(timeStart) + + DateUtil.timeString(timeStart) + " " + getRealDuration() + "/" + duration + "min"; } else { // percent return percent + "% @" + - formatDateToJustTime.format(timeStart) + + DateUtil.timeString(timeStart) + " " + getRealDuration() + "/" + duration + "min"; } } diff --git a/app/src/main/java/info/nightscout/androidaps/db/Treatment.java b/app/src/main/java/info/nightscout/androidaps/db/Treatment.java index f7a40284d6..f8c2f3b829 100644 --- a/app/src/main/java/info/nightscout/androidaps/db/Treatment.java +++ b/app/src/main/java/info/nightscout/androidaps/db/Treatment.java @@ -13,9 +13,8 @@ import java.util.List; import info.nightscout.androidaps.MainApp; import info.nightscout.androidaps.data.Iob; -import info.nightscout.androidaps.plugins.ConfigBuilder.ConfigBuilderFragment; import info.nightscout.androidaps.plugins.ConfigBuilder.ConfigBuilderPlugin; -import info.nightscout.androidaps.plugins.Overview.GraphSeriesExtension.DataPointWithLabelInterface; +import info.nightscout.androidaps.plugins.Overview.graphExtensions.DataPointWithLabelInterface; import info.nightscout.client.data.NSProfile; import info.nightscout.utils.DateUtil; import info.nightscout.utils.DecimalFormatter; diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/Careportal/Dialogs/NewNSTreatmentDialog.java b/app/src/main/java/info/nightscout/androidaps/plugins/Careportal/Dialogs/NewNSTreatmentDialog.java index 43b383f33a..b941cdb4c2 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/Careportal/Dialogs/NewNSTreatmentDialog.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/Careportal/Dialogs/NewNSTreatmentDialog.java @@ -33,7 +33,6 @@ import org.json.JSONObject; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.text.DateFormat; import java.text.DecimalFormat; import java.util.ArrayList; import java.util.Calendar; @@ -197,10 +196,8 @@ public class NewNSTreatmentDialog extends DialogFragment implements View.OnClick eventTime = new Date(); dateButton = (Button) view.findViewById(R.id.careportal_newnstreatment_eventdate); timeButton = (Button) view.findViewById(R.id.careportal_newnstreatment_eventtime); - DateFormat df = DateFormat.getDateInstance(DateFormat.SHORT); - DateFormat tf = DateFormat.getTimeInstance(DateFormat.SHORT); - dateButton.setText(df.format(eventTime)); - timeButton.setText(tf.format(eventTime)); + dateButton.setText(DateUtil.dateString(eventTime)); + timeButton.setText(DateUtil.timeString(eventTime)); dateButton.setOnClickListener(this); timeButton.setOnClickListener(this); @@ -330,8 +327,7 @@ public class NewNSTreatmentDialog extends DialogFragment implements View.OnClick eventTime.setYear(year - 1900); eventTime.setMonth(monthOfYear); eventTime.setDate(dayOfMonth); - DateFormat df = DateFormat.getDateInstance(DateFormat.SHORT); - dateButton.setText(df.format(eventTime)); + dateButton.setText(DateUtil.dateString(eventTime)); } @Override @@ -339,8 +335,7 @@ public class NewNSTreatmentDialog extends DialogFragment implements View.OnClick eventTime.setHours(hourOfDay); eventTime.setMinutes(minute); eventTime.setSeconds(second); - DateFormat tf = DateFormat.getTimeInstance(DateFormat.SHORT); - timeButton.setText(tf.format(eventTime)); + timeButton.setText(DateUtil.timeString(eventTime)); } diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/CircadianPercentageProfile/CircadianPercentageProfileFragment.java b/app/src/main/java/info/nightscout/androidaps/plugins/CircadianPercentageProfile/CircadianPercentageProfileFragment.java index 0bf490abb6..8158490197 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/CircadianPercentageProfile/CircadianPercentageProfileFragment.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/CircadianPercentageProfile/CircadianPercentageProfileFragment.java @@ -29,6 +29,7 @@ import info.nightscout.androidaps.MainApp; import info.nightscout.androidaps.R; import info.nightscout.androidaps.events.EventInitializationChanged; import info.nightscout.androidaps.interfaces.FragmentBase; +import info.nightscout.androidaps.interfaces.PumpInterface; import info.nightscout.androidaps.plugins.Careportal.Dialogs.NewNSTreatmentDialog; import info.nightscout.androidaps.plugins.Careportal.OptionsToShow; import info.nightscout.utils.DecimalFormatter; @@ -55,6 +56,7 @@ public class CircadianPercentageProfileFragment extends Fragment implements Frag TextView profileView; TextView baseprofileIC; TextView baseprofileBasal; + LinearLayout baseprofileBasalLayout; TextView baseprofileISF; Button profileswitchButton; ImageView percentageIcon; @@ -79,6 +81,7 @@ public class CircadianPercentageProfileFragment extends Fragment implements Frag timeshiftView = (EditText) layout.findViewById(R.id.circadianpercentageprofile_timeshift); profileView = (TextView) layout.findViewById(R.id.circadianpercentageprofile_profileview); baseprofileBasal = (TextView) layout.findViewById(R.id.circadianpercentageprofile_baseprofilebasal); + baseprofileBasalLayout = (LinearLayout) layout.findViewById(R.id.circadianpercentageprofile_baseprofilebasal_layout); baseprofileIC = (TextView) layout.findViewById(R.id.circadianpercentageprofile_baseprofileic); baseprofileISF = (TextView) layout.findViewById(R.id.circadianpercentageprofile_baseprofileisf); percentageIcon = (ImageView) layout.findViewById(R.id.circadianpercentageprofile_percentageicon); @@ -89,6 +92,11 @@ public class CircadianPercentageProfileFragment extends Fragment implements Frag iceditIcon = (ImageView) layout.findViewById(R.id.circadianpercentageprofile_icedit); isfeditIcon = (ImageView) layout.findViewById(R.id.circadianpercentageprofile_isfedit); + PumpInterface pump = MainApp.getConfigBuilder(); + if (!pump.getPumpDescription().isTempBasalCapable) { + layout.findViewById(R.id.circadianpercentageprofile_baseprofilebasal_layout).setVisibility(View.GONE); + } + mgdlView.setChecked(circadianPercentageProfilePlugin.mgdl); mmolView.setChecked(circadianPercentageProfilePlugin.mmol); @@ -344,6 +352,12 @@ public class CircadianPercentageProfileFragment extends Fragment implements Frag @Override public void onPause() { super.onPause(); + + if (basalEditDialog != null && basalEditDialog.isVisible()) { + basalEditDialog.dismiss(); + } + basalEditDialog = null; + MainApp.bus().unregister(this); } diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/ConfigBuilder/ConfigBuilderFragment.java b/app/src/main/java/info/nightscout/androidaps/plugins/ConfigBuilder/ConfigBuilderFragment.java index e15f97d5fb..7c23346711 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/ConfigBuilder/ConfigBuilderFragment.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/ConfigBuilder/ConfigBuilderFragment.java @@ -205,6 +205,10 @@ public class ConfigBuilderFragment extends Fragment implements FragmentBase { holder.checkboxVisible.setEnabled(false); } + if (!plugin.isEnabled(type)) { + holder.checkboxVisible.setEnabled(false); + } + // Hide enabled control and force enabled plugin if there is only one plugin available if (type == PluginBase.PUMP || type == PluginBase.TREATMENT || type == PluginBase.TEMPBASAL || type == PluginBase.PROFILE) if (pluginList.size() < 2) { diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/DanaR/DanaRFragment.java b/app/src/main/java/info/nightscout/androidaps/plugins/DanaR/DanaRFragment.java index 63186fc4db..b7fae2a125 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/DanaR/DanaRFragment.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/DanaR/DanaRFragment.java @@ -20,7 +20,6 @@ import com.squareup.otto.Subscribe; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.text.DateFormat; import java.util.Date; import info.nightscout.androidaps.MainApp; @@ -32,6 +31,7 @@ import info.nightscout.androidaps.plugins.DanaR.Dialogs.ProfileViewDialog; import info.nightscout.androidaps.plugins.DanaR.History.DanaRHistoryActivity; import info.nightscout.androidaps.plugins.DanaR.events.EventDanaRConnectionStatus; import info.nightscout.androidaps.plugins.DanaR.events.EventDanaRNewStatus; +import info.nightscout.utils.DateUtil; import info.nightscout.utils.DecimalFormatter; import info.nightscout.utils.SetWarnColor; @@ -188,8 +188,6 @@ public class DanaRFragment extends Fragment implements FragmentBase { // GUI functions private void updateGUI() { - final DateFormat formatTime = DateFormat.getTimeInstance(DateFormat.SHORT); - Activity activity = getActivity(); if (activity != null && basaBasalRateView != null) activity.runOnUiThread(new Runnable() { @@ -200,14 +198,14 @@ public class DanaRFragment extends Fragment implements FragmentBase { if (DanaRPlugin.getDanaRPump().lastConnection.getTime() != 0) { Long agoMsec = new Date().getTime() - DanaRPlugin.getDanaRPump().lastConnection.getTime(); int agoMin = (int) (agoMsec / 60d / 1000d); - lastConnectionView.setText(formatTime.format(DanaRPlugin.getDanaRPump().lastConnection) + " (" + String.format(MainApp.sResources.getString(R.string.minago), agoMin) + ")"); + lastConnectionView.setText(DateUtil.timeString(DanaRPlugin.getDanaRPump().lastConnection) + " (" + String.format(MainApp.sResources.getString(R.string.minago), agoMin) + ")"); SetWarnColor.setColor(lastConnectionView, agoMin, 16d, 31d); } if (DanaRPlugin.getDanaRPump().lastBolusTime.getTime() != 0) { Long agoMsec = new Date().getTime() - DanaRPlugin.getDanaRPump().lastBolusTime.getTime(); double agoHours = agoMsec / 60d / 60d / 1000d; if (agoHours < 6) // max 6h back - lastBolusView.setText(formatTime.format(DanaRPlugin.getDanaRPump().lastBolusTime) + " (" + DecimalFormatter.to1Decimal(agoHours) + " " + getString(R.string.hoursago) + ") " + DecimalFormatter.to2Decimal(getPlugin().getDanaRPump().lastBolusAmount) + " U"); + lastBolusView.setText(DateUtil.timeString(DanaRPlugin.getDanaRPump().lastBolusTime) + " (" + DecimalFormatter.to1Decimal(agoHours) + " " + getString(R.string.hoursago) + ") " + DecimalFormatter.to2Decimal(getPlugin().getDanaRPump().lastBolusAmount) + " U"); else lastBolusView.setText(""); } diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/DanaR/History/DanaRHistoryActivity.java b/app/src/main/java/info/nightscout/androidaps/plugins/DanaR/History/DanaRHistoryActivity.java index 1fe6acf43d..4056943e70 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/DanaR/History/DanaRHistoryActivity.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/DanaR/History/DanaRHistoryActivity.java @@ -31,7 +31,6 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.sql.SQLException; -import java.text.DateFormat; import java.util.ArrayList; import java.util.Date; import java.util.List; @@ -46,6 +45,7 @@ import info.nightscout.androidaps.plugins.DanaR.comm.RecordTypes; import info.nightscout.androidaps.plugins.DanaR.events.EventDanaRConnectionStatus; import info.nightscout.androidaps.plugins.DanaR.events.EventDanaRSyncStatus; import info.nightscout.client.data.NSProfile; +import info.nightscout.utils.DateUtil; import info.nightscout.utils.DecimalFormatter; import info.nightscout.utils.ToastUtils; @@ -274,9 +274,8 @@ public class DanaRHistoryActivity extends Activity { @Override public void onBindViewHolder(HistoryViewHolder holder, int position) { - DateFormat df = DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT); DanaRHistoryRecord record = historyList.get(position); - holder.time.setText(df.format(new Date(record.getRecordDate()))); + holder.time.setText(DateUtil.dateAndTimeString(record.getRecordDate())); holder.value.setText(DecimalFormatter.to2Decimal(record.getRecordValue())); holder.stringvalue.setText(record.getStringRecordValue()); holder.bolustype.setText(record.getBolusType()); @@ -306,11 +305,10 @@ public class DanaRHistoryActivity extends Activity { holder.alarm.setVisibility(View.GONE); break; case RecordTypes.RECORD_TYPE_DAILY: - df = DateFormat.getDateInstance(DateFormat.SHORT); holder.dailybasal.setText(DecimalFormatter.to2Decimal(record.getRecordDailyBasal()) + "U"); holder.dailybolus.setText(DecimalFormatter.to2Decimal(record.getRecordDailyBolus()) + "U"); holder.dailytotal.setText(DecimalFormatter.to2Decimal(record.getRecordDailyBolus()+ record.getRecordDailyBasal()) + "U"); - holder.time.setText(df.format(new Date(record.getRecordDate()))); + holder.time.setText(DateUtil.dateString(record.getRecordDate())); holder.time.setVisibility(View.VISIBLE); holder.value.setVisibility(View.GONE); holder.stringvalue.setVisibility(View.GONE); diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/DanaR/comm/MsgHistoryAll.java b/app/src/main/java/info/nightscout/androidaps/plugins/DanaR/comm/MsgHistoryAll.java index 13e1b48cd2..c00f7f6c8e 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/DanaR/comm/MsgHistoryAll.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/DanaR/comm/MsgHistoryAll.java @@ -6,12 +6,12 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.sql.SQLException; -import java.text.DateFormat; import java.util.Date; import info.nightscout.androidaps.MainApp; import info.nightscout.androidaps.db.DanaRHistoryRecord; import info.nightscout.androidaps.plugins.DanaR.events.EventDanaRSyncStatus; +import info.nightscout.utils.DateUtil; public class MsgHistoryAll extends MessageBase { private static Logger log = LoggerFactory.getLogger(MsgHistoryAll.class); @@ -150,8 +150,7 @@ public class MsgHistoryAll extends MessageBase { log.error(e.getMessage(), e); } - DateFormat df = DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT); - ev.message = df.format(new Date(danaRHistoryRecord.getRecordDate())); + ev.message = DateUtil.dateAndTimeString(danaRHistoryRecord.getRecordDate()); ev.message += " " + messageType; MainApp.bus().post(ev); diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/DanaRKorean/DanaRKoreanFragment.java b/app/src/main/java/info/nightscout/androidaps/plugins/DanaRKorean/DanaRKoreanFragment.java index 94beeea1f3..907718f636 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/DanaRKorean/DanaRKoreanFragment.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/DanaRKorean/DanaRKoreanFragment.java @@ -20,7 +20,6 @@ import com.squareup.otto.Subscribe; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.text.DateFormat; import java.util.Date; import info.nightscout.androidaps.MainApp; @@ -32,6 +31,7 @@ import info.nightscout.androidaps.plugins.DanaR.Dialogs.ProfileViewDialog; import info.nightscout.androidaps.plugins.DanaR.events.EventDanaRConnectionStatus; import info.nightscout.androidaps.plugins.DanaR.events.EventDanaRNewStatus; import info.nightscout.androidaps.plugins.DanaRKorean.History.DanaRHistoryActivity; +import info.nightscout.utils.DateUtil; import info.nightscout.utils.DecimalFormatter; import info.nightscout.utils.SetWarnColor; @@ -185,7 +185,6 @@ public class DanaRKoreanFragment extends Fragment implements FragmentBase { // GUI functions private void updateGUI() { - final DateFormat formatTime = DateFormat.getTimeInstance(DateFormat.SHORT); Activity activity = getActivity(); if (activity != null && basaBasalRateView != null) @@ -197,7 +196,7 @@ public class DanaRKoreanFragment extends Fragment implements FragmentBase { if (DanaRKoreanPlugin.getDanaRPump().lastConnection.getTime() != 0) { Long agoMsec = new Date().getTime() - DanaRKoreanPlugin.getDanaRPump().lastConnection.getTime(); int agoMin = (int) (agoMsec / 60d / 1000d); - lastConnectionView.setText(formatTime.format(DanaRKoreanPlugin.getDanaRPump().lastConnection) + " (" + String.format(MainApp.sResources.getString(R.string.minago), agoMin) + ")"); + lastConnectionView.setText(DateUtil.timeString(DanaRKoreanPlugin.getDanaRPump().lastConnection) + " (" + String.format(MainApp.sResources.getString(R.string.minago), agoMin) + ")"); SetWarnColor.setColor(lastConnectionView, agoMin, 16d, 31d); } // if (DanaRKoreanPlugin.getDanaRPump().lastBolusTime.getTime() != 0) { diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/DanaRKorean/History/DanaRHistoryActivity.java b/app/src/main/java/info/nightscout/androidaps/plugins/DanaRKorean/History/DanaRHistoryActivity.java index 1b2f8165cf..d23cff488b 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/DanaRKorean/History/DanaRHistoryActivity.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/DanaRKorean/History/DanaRHistoryActivity.java @@ -31,7 +31,6 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.sql.SQLException; -import java.text.DateFormat; import java.util.ArrayList; import java.util.Date; import java.util.List; @@ -47,6 +46,7 @@ import info.nightscout.androidaps.plugins.DanaR.events.EventDanaRConnectionStatu import info.nightscout.androidaps.plugins.DanaR.events.EventDanaRSyncStatus; import info.nightscout.androidaps.plugins.DanaRKorean.Services.ExecutionService; import info.nightscout.client.data.NSProfile; +import info.nightscout.utils.DateUtil; import info.nightscout.utils.DecimalFormatter; import info.nightscout.utils.ToastUtils; @@ -273,9 +273,8 @@ public class DanaRHistoryActivity extends Activity { @Override public void onBindViewHolder(HistoryViewHolder holder, int position) { - DateFormat df = DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT); DanaRHistoryRecord record = historyList.get(position); - holder.time.setText(df.format(new Date(record.getRecordDate()))); + holder.time.setText(DateUtil.dateAndTimeString(record.getRecordDate())); holder.value.setText(DecimalFormatter.to2Decimal(record.getRecordValue())); holder.stringvalue.setText(record.getStringRecordValue()); holder.bolustype.setText(record.getBolusType()); @@ -305,11 +304,10 @@ public class DanaRHistoryActivity extends Activity { holder.alarm.setVisibility(View.GONE); break; case RecordTypes.RECORD_TYPE_DAILY: - df = DateFormat.getDateInstance(DateFormat.SHORT); holder.dailybasal.setText(DecimalFormatter.to2Decimal(record.getRecordDailyBasal()) + "U"); holder.dailybolus.setText(DecimalFormatter.to2Decimal(record.getRecordDailyBolus()) + "U"); holder.dailytotal.setText(DecimalFormatter.to2Decimal(record.getRecordDailyBolus()+ record.getRecordDailyBasal()) + "U"); - holder.time.setText(df.format(new Date(record.getRecordDate()))); + holder.time.setText(DateUtil.dateString(record.getRecordDate())); holder.time.setVisibility(View.VISIBLE); holder.value.setVisibility(View.GONE); holder.stringvalue.setVisibility(View.GONE); diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/LocalProfile/LocalProfileFragment.java b/app/src/main/java/info/nightscout/androidaps/plugins/LocalProfile/LocalProfileFragment.java index 401344d4df..cc891eb98a 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/LocalProfile/LocalProfileFragment.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/LocalProfile/LocalProfileFragment.java @@ -25,6 +25,7 @@ import info.nightscout.androidaps.MainApp; import info.nightscout.androidaps.R; import info.nightscout.androidaps.events.EventInitializationChanged; import info.nightscout.androidaps.interfaces.FragmentBase; +import info.nightscout.androidaps.interfaces.PumpInterface; import info.nightscout.androidaps.plugins.Careportal.Dialogs.NewNSTreatmentDialog; import info.nightscout.androidaps.plugins.Careportal.OptionsToShow; import info.nightscout.utils.SafeParse; @@ -70,6 +71,11 @@ public class LocalProfileFragment extends Fragment implements FragmentBase { targetView = new TimeListEdit(getContext(), layout, R.id.localprofile_target, MainApp.sResources.getString(R.string.nsprofileview_target_label), getPlugin().targetLow, getPlugin().targetHigh, new DecimalFormat("0.0"), save); profileswitchButton = (Button) layout.findViewById(R.id.localprofile_profileswitch); + PumpInterface pump = MainApp.getConfigBuilder(); + if (!pump.getPumpDescription().isTempBasalCapable) { + layout.findViewById(R.id.localprofile_basal).setVisibility(View.GONE); + } + onStatusEvent(null); mgdlView.setChecked(localProfilePlugin.mgdl); diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/OpenAPSMA/DetermineBasalAdapterJS.java b/app/src/main/java/info/nightscout/androidaps/plugins/OpenAPSMA/DetermineBasalAdapterJS.java index ca62b7a197..a695e6a866 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/OpenAPSMA/DetermineBasalAdapterJS.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/OpenAPSMA/DetermineBasalAdapterJS.java @@ -111,7 +111,7 @@ public class DetermineBasalAdapterJS implements Parcelable { mProfile.add("max_basal", 0); mProfile.add("max_bg", 0); mProfile.add("min_bg", 0); - mProfile.add("carbratio", 0); + mProfile.add("carb_ratio", 0); mProfile.add("sens", 0); mProfile.add("current_basal", 0); mV8rt.add(PARAM_profile, mProfile); @@ -280,7 +280,7 @@ public class DetermineBasalAdapterJS implements Parcelable { mProfile.add("min_bg", minBg); mProfile.add("max_bg", maxBg); mProfile.add("target_bg", targetBg); - mProfile.add("carbratio", profile.getIc(profile.secondsFromMidnight())); + mProfile.add("carb_ratio", profile.getIc(profile.secondsFromMidnight())); mProfile.add("sens", NSProfile.toMgdl(profile.getIsf(NSProfile.secondsFromMidnight()).doubleValue(), units)); mProfile.add("current_basal", pump.getBaseBasalRate()); diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/OpenAPSMA/OpenAPSMAFragment.java b/app/src/main/java/info/nightscout/androidaps/plugins/OpenAPSMA/OpenAPSMAFragment.java index a3838d53a6..86cd729dcb 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/OpenAPSMA/OpenAPSMAFragment.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/OpenAPSMA/OpenAPSMAFragment.java @@ -17,6 +17,7 @@ import org.slf4j.LoggerFactory; import info.nightscout.androidaps.MainApp; import info.nightscout.androidaps.R; import info.nightscout.androidaps.interfaces.FragmentBase; +import info.nightscout.androidaps.plugins.Loop.APSResult; import info.nightscout.androidaps.plugins.OpenAPSMA.events.EventOpenAPSMAUpdateGui; import info.nightscout.androidaps.plugins.OpenAPSMA.events.EventOpenAPSMAUpdateResultGui; import info.nightscout.utils.JSONFormatter; @@ -101,14 +102,20 @@ public class OpenAPSMAFragment extends Fragment implements View.OnClickListener, activity.runOnUiThread(new Runnable() { @Override public void run() { - if (getPlugin().lastAPSResult != null) { - glucoseStatusView.setText(JSONFormatter.format(getPlugin().lastDetermineBasalAdapterJS.getGlucoseStatusParam())); - currentTempView.setText(JSONFormatter.format(getPlugin().lastDetermineBasalAdapterJS.getCurrentTempParam())); - iobDataView.setText(JSONFormatter.format(getPlugin().lastDetermineBasalAdapterJS.getIobDataParam())); - profileView.setText(JSONFormatter.format(getPlugin().lastDetermineBasalAdapterJS.getProfileParam())); - mealDataView.setText(JSONFormatter.format(getPlugin().lastDetermineBasalAdapterJS.getMealDataParam())); - resultView.setText(JSONFormatter.format(getPlugin().lastAPSResult.json)); - requestView.setText(getPlugin().lastAPSResult.toSpanned()); + DetermineBasalResult lastAPSResult = getPlugin().lastAPSResult; + if (lastAPSResult != null) { + resultView.setText(JSONFormatter.format(lastAPSResult.json)); + requestView.setText(lastAPSResult.toSpanned()); + } + DetermineBasalAdapterJS determineBasalAdapterJS = getPlugin().lastDetermineBasalAdapterJS; + if (determineBasalAdapterJS != null) { + glucoseStatusView.setText(JSONFormatter.format(determineBasalAdapterJS.getGlucoseStatusParam())); + currentTempView.setText(JSONFormatter.format(determineBasalAdapterJS.getCurrentTempParam())); + iobDataView.setText(JSONFormatter.format(determineBasalAdapterJS.getIobDataParam())); + profileView.setText(JSONFormatter.format(determineBasalAdapterJS.getProfileParam())); + mealDataView.setText(JSONFormatter.format(determineBasalAdapterJS.getMealDataParam())); + } + if (getPlugin().lastAPSRun != null) { lastRunView.setText(getPlugin().lastAPSRun.toLocaleString()); } } diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/Overview/Dialogs/EditQuickWizardDialog.java b/app/src/main/java/info/nightscout/androidaps/plugins/Overview/Dialogs/EditQuickWizardDialog.java index 4cc94432d5..a86740cdfd 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/Overview/Dialogs/EditQuickWizardDialog.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/Overview/Dialogs/EditQuickWizardDialog.java @@ -15,7 +15,6 @@ import android.widget.Spinner; import org.json.JSONException; -import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.ArrayList; @@ -62,15 +61,14 @@ public class EditQuickWizardDialog extends DialogFragment implements View.OnClic int posFrom = 0; int posTo = 95; ArrayList timeList = new ArrayList<>(); - DateFormat df = new SimpleDateFormat("HH:mm"); int pos = 0; for (int t = 0; t < 24 * 60 * 60; t += 15 * 60) { - timeList.add(df.format(DateUtil.toDate(t))); + timeList.add(DateUtil.timeString(DateUtil.toDate(t))); if (entry.validFrom() == t) posFrom = pos; if (entry.validTo() == t) posTo = pos; pos++; } - timeList.add(df.format(DateUtil.toDate(24 * 60 * 60 - 60))); + timeList.add(DateUtil.timeString(DateUtil.toDate(24 * 60 * 60 - 60))); ArrayAdapter adapter = new ArrayAdapter(getContext(), android.R.layout.simple_spinner_item, timeList); 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 c7760d7af7..1cb7ae9b59 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 @@ -38,7 +38,6 @@ import org.json.JSONObject; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.text.DateFormat; import java.text.DecimalFormat; import java.util.ArrayList; import java.util.Calendar; @@ -73,9 +72,10 @@ import info.nightscout.androidaps.plugins.Objectives.ObjectivesPlugin; import info.nightscout.androidaps.plugins.OpenAPSMA.IobTotal; import info.nightscout.androidaps.plugins.Overview.Dialogs.NewTreatmentDialog; import info.nightscout.androidaps.plugins.Overview.Dialogs.WizardDialog; -import info.nightscout.androidaps.plugins.Overview.GraphSeriesExtension.PointsWithLabelGraphSeries; +import info.nightscout.androidaps.plugins.Overview.graphExtensions.PointsWithLabelGraphSeries; import info.nightscout.androidaps.plugins.Overview.events.EventDismissNotification; import info.nightscout.androidaps.plugins.Overview.events.EventNewNotification; +import info.nightscout.androidaps.plugins.Overview.graphExtensions.TimeAsXAxisLabelFormatter; import info.nightscout.client.data.NSProfile; import info.nightscout.utils.BolusWizard; import info.nightscout.utils.DateUtil; @@ -101,6 +101,7 @@ public class OverviewFragment extends Fragment { TextView avgdeltaView; TextView runningTempView; TextView baseBasalView; + LinearLayout basalLayout; TextView activeProfileView; TextView iobView; TextView apsModeView; @@ -146,6 +147,7 @@ public class OverviewFragment extends Fragment { avgdeltaView = (TextView) view.findViewById(R.id.overview_avgdelta); runningTempView = (TextView) view.findViewById(R.id.overview_runningtemp); baseBasalView = (TextView) view.findViewById(R.id.overview_basebasal); + basalLayout = (LinearLayout) view.findViewById(R.id.overview_basallayout); activeProfileView = (TextView) view.findViewById(R.id.overview_activeprofile); iobView = (TextView) view.findViewById(R.id.overview_iob); @@ -521,7 +523,13 @@ public class OverviewFragment extends Fragment { cancelTempLayout.setVisibility(View.GONE); runningTempView.setVisibility(View.GONE); } - baseBasalView.setText(DecimalFormatter.to2Decimal(pump.getBaseBasalRate()) + " U/h"); + + if (pump.getPumpDescription().isTempBasalCapable) { + basalLayout.setVisibility(View.VISIBLE); + baseBasalView.setText(DecimalFormatter.to2Decimal(pump.getBaseBasalRate()) + " U/h"); + } else { + basalLayout.setVisibility(View.GONE); + } if (profile != null && profile.getActiveProfile() != null) activeProfileView.setText(profile.getActiveProfile()); @@ -668,27 +676,29 @@ public class OverviewFragment extends Fragment { Double maxBasalValueFound = 0d; long now = new Date().getTime(); - List basalArray = new ArrayList(); - for (long time = fromTime; time < now; time += 5 * 60 * 1000L) { - TempBasal tb = MainApp.getConfigBuilder().getTempBasal(new Date(time)); - Double basal = 0d; - if (tb != null) - basalArray.add(new BarDataPoint(time, basal = tb.tempBasalConvertedToAbsolute(new Date(time)), true)); - else - basalArray.add(new BarDataPoint(time, basal = profile.getBasal(NSProfile.secondsFromMidnight(new Date(time))), false)); - maxBasalValueFound = Math.max(maxBasalValueFound, basal); - } - BarDataPoint[] basal = new BarDataPoint[basalArray.size()]; - basal = basalArray.toArray(basal); - bgGraph.addSeries(basalsSeries = new BarGraphSeries(basal)); - basalsSeries.setValueDependentColor(new ValueDependentColor() { - @Override - public int get(DataPoint data) { - BarDataPoint point = (BarDataPoint) data; - if (point.isTempBasal) return Color.BLUE; - else return Color.CYAN; + if (pump.getPumpDescription().isTempBasalCapable) { + List basalArray = new ArrayList(); + for (long time = fromTime; time < now; time += 5 * 60 * 1000L) { + TempBasal tb = MainApp.getConfigBuilder().getTempBasal(new Date(time)); + Double basal = 0d; + if (tb != null) + basalArray.add(new BarDataPoint(time, basal = tb.tempBasalConvertedToAbsolute(new Date(time)), true)); + else + basalArray.add(new BarDataPoint(time, basal = profile.getBasal(NSProfile.secondsFromMidnight(new Date(time))), false)); + maxBasalValueFound = Math.max(maxBasalValueFound, basal); } - }); + BarDataPoint[] basal = new BarDataPoint[basalArray.size()]; + basal = basalArray.toArray(basal); + bgGraph.addSeries(basalsSeries = new BarGraphSeries(basal)); + basalsSeries.setValueDependentColor(new ValueDependentColor() { + @Override + public int get(DataPoint data) { + BarDataPoint point = (BarDataPoint) data; + if (point.isTempBasal) return Color.BLUE; + else return Color.CYAN; + } + }); + } // set manual x bounds to have nice steps bgGraph.getViewport().setMaxX(toTime); @@ -784,10 +794,12 @@ public class OverviewFragment extends Fragment { bgGraph.getGridLabelRenderer().setNumVerticalLabels(numOfHorizLines); // set second scale - bgGraph.getSecondScale().addSeries(basalsSeries); - bgGraph.getSecondScale().setMinY(0); - bgGraph.getSecondScale().setMaxY(maxBgValue / lowLine * maxBasalValueFound * 1.2d); - bgGraph.getGridLabelRenderer().setVerticalLabelsSecondScaleColor(MainApp.instance().getResources().getColor(R.color.background_material_dark)); // same color as backround = hide + if (pump.getPumpDescription().isTempBasalCapable) { + bgGraph.getSecondScale().addSeries(basalsSeries); + bgGraph.getSecondScale().setMinY(0); + bgGraph.getSecondScale().setMaxY(maxBgValue / lowLine * maxBasalValueFound * 1.2d); + bgGraph.getGridLabelRenderer().setVerticalLabelsSecondScaleColor(MainApp.instance().getResources().getColor(R.color.background_material_dark)); // same color as backround = hide + } } @@ -810,11 +822,10 @@ public class OverviewFragment extends Fragment { @Override public void onBindViewHolder(NotificationsViewHolder holder, int position) { - DateFormat df = DateFormat.getTimeInstance(DateFormat.SHORT); Notification notification = notificationsList.get(position); holder.dismiss.setTag(notification); holder.text.setText(notification.text); - holder.time.setText(df.format(notification.date)); + holder.time.setText(DateUtil.timeString(notification.date)); if (notification.level == Notification.URGENT) holder.cv.setBackgroundColor(MainApp.instance().getResources().getColor(R.color.notificationUrgent)); else if (notification.level == Notification.NORMAL) diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/Overview/activities/QuickWizardListActivity.java b/app/src/main/java/info/nightscout/androidaps/plugins/Overview/activities/QuickWizardListActivity.java index dafd0766d1..ef2ebe240c 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/Overview/activities/QuickWizardListActivity.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/Overview/activities/QuickWizardListActivity.java @@ -15,17 +15,15 @@ import android.widget.TextView; import com.squareup.otto.Subscribe; -import java.text.DateFormat; import java.text.SimpleDateFormat; -import info.nightscout.androidaps.AgreementActivity; import info.nightscout.androidaps.MainApp; import info.nightscout.androidaps.R; import info.nightscout.androidaps.plugins.Overview.Dialogs.EditQuickWizardDialog; import info.nightscout.androidaps.plugins.Overview.OverviewPlugin; import info.nightscout.androidaps.plugins.Overview.QuickWizard; import info.nightscout.androidaps.plugins.Overview.events.EventQuickWizardChange; -import info.nightscout.androidaps.plugins.TempBasals.TempBasalsFragment; +import info.nightscout.utils.DateUtil; import info.nightscout.utils.DecimalFormatter; public class QuickWizardListActivity extends AppCompatActivity implements View.OnClickListener { @@ -54,9 +52,8 @@ public class QuickWizardListActivity extends AppCompatActivity implements View.O @Override public void onBindViewHolder(QuickWizardEntryViewHolder holder, int position) { - DateFormat df = new SimpleDateFormat("HH:mm"); - holder.from.setText(df.format(qvData.get(position).validFromDate())); - holder.to.setText(df.format(qvData.get(position).validToDate())); + holder.from.setText(DateUtil.timeString(qvData.get(position).validFromDate())); + holder.to.setText(DateUtil.timeString(qvData.get(position).validToDate())); holder.buttonText.setText(qvData.get(position).buttonText()); holder.carbs.setText(DecimalFormatter.to0Decimal(qvData.get(position).carbs()) + " g"); } diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/Overview/GraphSeriesExtension/DataPointWithLabelInterface.java b/app/src/main/java/info/nightscout/androidaps/plugins/Overview/graphExtensions/DataPointWithLabelInterface.java similarity index 95% rename from app/src/main/java/info/nightscout/androidaps/plugins/Overview/GraphSeriesExtension/DataPointWithLabelInterface.java rename to app/src/main/java/info/nightscout/androidaps/plugins/Overview/graphExtensions/DataPointWithLabelInterface.java index af6c61272c..1c02eb66d7 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/Overview/GraphSeriesExtension/DataPointWithLabelInterface.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/Overview/graphExtensions/DataPointWithLabelInterface.java @@ -1,4 +1,4 @@ -package info.nightscout.androidaps.plugins.Overview.GraphSeriesExtension; +package info.nightscout.androidaps.plugins.Overview.graphExtensions; /** * GraphView * Copyright (C) 2014 Jonas Gehring diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/Overview/GraphSeriesExtension/PointsWithLabelGraphSeries.java b/app/src/main/java/info/nightscout/androidaps/plugins/Overview/graphExtensions/PointsWithLabelGraphSeries.java similarity index 98% rename from app/src/main/java/info/nightscout/androidaps/plugins/Overview/GraphSeriesExtension/PointsWithLabelGraphSeries.java rename to app/src/main/java/info/nightscout/androidaps/plugins/Overview/graphExtensions/PointsWithLabelGraphSeries.java index 44c07ef6c8..7671813090 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/Overview/GraphSeriesExtension/PointsWithLabelGraphSeries.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/Overview/graphExtensions/PointsWithLabelGraphSeries.java @@ -1,4 +1,4 @@ -package info.nightscout.androidaps.plugins.Overview.GraphSeriesExtension; +package info.nightscout.androidaps.plugins.Overview.graphExtensions; /** * GraphView @@ -25,7 +25,6 @@ package info.nightscout.androidaps.plugins.Overview.GraphSeriesExtension; */ import android.graphics.Canvas; -import android.graphics.Color; import android.graphics.Paint; import android.graphics.Path; import android.graphics.Point; diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/Overview/TimeAsXAxisLabelFormatter.java b/app/src/main/java/info/nightscout/androidaps/plugins/Overview/graphExtensions/TimeAsXAxisLabelFormatter.java similarity index 92% rename from app/src/main/java/info/nightscout/androidaps/plugins/Overview/TimeAsXAxisLabelFormatter.java rename to app/src/main/java/info/nightscout/androidaps/plugins/Overview/graphExtensions/TimeAsXAxisLabelFormatter.java index f108c631e1..c8ba40369d 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/Overview/TimeAsXAxisLabelFormatter.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/Overview/graphExtensions/TimeAsXAxisLabelFormatter.java @@ -1,4 +1,4 @@ -package info.nightscout.androidaps.plugins.Overview; +package info.nightscout.androidaps.plugins.Overview.graphExtensions; import android.content.Context; diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/SimpleProfile/SimpleProfileFragment.java b/app/src/main/java/info/nightscout/androidaps/plugins/SimpleProfile/SimpleProfileFragment.java index 1d0381ce3b..22e293a023 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/SimpleProfile/SimpleProfileFragment.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/SimpleProfile/SimpleProfileFragment.java @@ -26,6 +26,7 @@ import info.nightscout.androidaps.MainApp; import info.nightscout.androidaps.R; import info.nightscout.androidaps.events.EventInitializationChanged; import info.nightscout.androidaps.interfaces.FragmentBase; +import info.nightscout.androidaps.interfaces.PumpInterface; import info.nightscout.androidaps.plugins.Careportal.Dialogs.NewNSTreatmentDialog; import info.nightscout.androidaps.plugins.Careportal.OptionsToShow; import info.nightscout.androidaps.plugins.Overview.events.EventNewNotification; @@ -68,6 +69,12 @@ public class SimpleProfileFragment extends Fragment implements FragmentBase { targethighView = (EditText) layout.findViewById(R.id.simpleprofile_targethigh); profileswitchButton = (Button) layout.findViewById(R.id.simpleprofile_profileswitch); + PumpInterface pump = MainApp.getConfigBuilder(); + if (!pump.getPumpDescription().isTempBasalCapable) { + layout.findViewById(R.id.simpleprofile_basalrate).setVisibility(View.GONE); + layout.findViewById(R.id.simpleprofile_basalrate_label).setVisibility(View.GONE); + } + onStatusEvent(null); mgdlView.setChecked(simpleProfilePlugin.mgdl); diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/SmsCommunicator/SmsCommunicatorFragment.java b/app/src/main/java/info/nightscout/androidaps/plugins/SmsCommunicator/SmsCommunicatorFragment.java index 852562ddda..83973e83ff 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/SmsCommunicator/SmsCommunicatorFragment.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/SmsCommunicator/SmsCommunicatorFragment.java @@ -15,13 +15,13 @@ import com.squareup.otto.Subscribe; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.text.DateFormat; import java.util.Collections; import java.util.Comparator; import info.nightscout.androidaps.MainApp; import info.nightscout.androidaps.R; import info.nightscout.androidaps.plugins.SmsCommunicator.events.EventSmsCommunicatorUpdateGui; +import info.nightscout.utils.DateUtil; /** * A simple {@link Fragment} subclass. @@ -89,15 +89,14 @@ public class SmsCommunicatorFragment extends Fragment { int messagesToShow = 40; int start = Math.max(0, getPlugin().messages.size() - messagesToShow); - DateFormat df = DateFormat.getTimeInstance(DateFormat.SHORT); String logText = ""; for (int x = start; x < getPlugin().messages.size(); x++) { SmsCommunicatorPlugin.Sms sms = getPlugin().messages.get(x); if (sms.received) { - logText += df.format(sms.date) + " <<< " + (sms.processed ? "● " : "○ ") + sms.phoneNumber + " " + sms.text + "
"; + logText += DateUtil.timeString(sms.date) + " <<< " + (sms.processed ? "● " : "○ ") + sms.phoneNumber + " " + sms.text + "
"; } else if (sms.sent) { - logText += df.format(sms.date) + " >>> " + (sms.processed ? "● " : "○ ") + sms.phoneNumber + " " + sms.text + "
"; + logText += DateUtil.timeString(sms.date) + " >>> " + (sms.processed ? "● " : "○ ") + sms.phoneNumber + " " + sms.text + "
"; } } logView.setText(Html.fromHtml(logText)); diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/SourceMM640g/SourceMM640gFragment.java b/app/src/main/java/info/nightscout/androidaps/plugins/SourceMM640g/SourceMM640gFragment.java new file mode 100644 index 0000000000..f43dc6ada7 --- /dev/null +++ b/app/src/main/java/info/nightscout/androidaps/plugins/SourceMM640g/SourceMM640gFragment.java @@ -0,0 +1,16 @@ +package info.nightscout.androidaps.plugins.SourceMM640g; + + +import android.support.v4.app.Fragment; + +import info.nightscout.androidaps.interfaces.FragmentBase; + +public class SourceMM640gFragment extends Fragment implements FragmentBase { + + private static SourceMM640gPlugin sourceMM640gPlugin = new SourceMM640gPlugin(); + + public static SourceMM640gPlugin getPlugin() { + return sourceMM640gPlugin; + } + +} diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/SourceMM640g/SourceMM640gPlugin.java b/app/src/main/java/info/nightscout/androidaps/plugins/SourceMM640g/SourceMM640gPlugin.java new file mode 100644 index 0000000000..f7f0de23fb --- /dev/null +++ b/app/src/main/java/info/nightscout/androidaps/plugins/SourceMM640g/SourceMM640gPlugin.java @@ -0,0 +1,56 @@ +package info.nightscout.androidaps.plugins.SourceMM640g; + +import info.nightscout.androidaps.MainApp; +import info.nightscout.androidaps.R; +import info.nightscout.androidaps.interfaces.BgSourceInterface; +import info.nightscout.androidaps.interfaces.PluginBase; +import info.nightscout.androidaps.plugins.SourceNSClient.SourceNSClientFragment; + +/** + * Created by mike on 05.08.2016. + */ +public class SourceMM640gPlugin implements PluginBase, BgSourceInterface { + boolean fragmentEnabled = true; + + @Override + public String getFragmentClass() { + return SourceMM640gFragment.class.getName(); + } + + @Override + public int getType() { + return PluginBase.BGSOURCE; + } + + @Override + public String getName() { + return MainApp.instance().getString(R.string.MM640g); + } + + @Override + public boolean isEnabled(int type) { + return type == BGSOURCE && fragmentEnabled; + } + + @Override + public boolean isVisibleInTabs(int type) { + return false; + } + + @Override + public boolean canBeHidden(int type) { + return true; + } + + @Override + public void setFragmentEnabled(int type, boolean fragmentEnabled) { + if (type == BGSOURCE) this.fragmentEnabled = fragmentEnabled; + } + + @Override + public void setFragmentVisible(int type, boolean fragmentVisible) { + + } + + +} diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/TempBasals/TempBasalsFragment.java b/app/src/main/java/info/nightscout/androidaps/plugins/TempBasals/TempBasalsFragment.java index f194c3a53a..f661cc4a5b 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/TempBasals/TempBasalsFragment.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/TempBasals/TempBasalsFragment.java @@ -17,7 +17,6 @@ import com.squareup.otto.Subscribe; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.text.DateFormat; import java.util.Date; import java.util.List; @@ -27,6 +26,7 @@ import info.nightscout.androidaps.db.TempBasal; import info.nightscout.androidaps.events.EventTempBasalChange; import info.nightscout.androidaps.interfaces.FragmentBase; import info.nightscout.androidaps.plugins.OpenAPSMA.IobTotal; +import info.nightscout.utils.DateUtil; import info.nightscout.utils.DecimalFormatter; @@ -61,13 +61,11 @@ public class TempBasalsFragment extends Fragment implements FragmentBase { @Override public void onBindViewHolder(TempBasalsViewHolder holder, int position) { - DateFormat df = DateFormat.getDateTimeInstance(DateFormat.MEDIUM, DateFormat.SHORT); - DateFormat enddf = DateFormat.getTimeInstance(DateFormat.SHORT); TempBasal tempBasal = tempBasalList.get(position); if (tempBasal.timeEnd != null) { - holder.date.setText(df.format(tempBasal.timeStart) + " - " + enddf.format(tempBasalList.get(position).timeEnd)); + holder.date.setText(DateUtil.dateAndTimeString(tempBasal.timeStart) + " - " + DateUtil.timeString(tempBasalList.get(position).timeEnd)); } else { - holder.date.setText(df.format(tempBasal.timeStart)); + holder.date.setText(DateUtil.dateAndTimeString(tempBasal.timeStart)); } holder.duration.setText(DecimalFormatter.to0Decimal(tempBasal.duration) + " min"); if (tempBasal.isAbsolute) { diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/Treatments/TreatmentsFragment.java b/app/src/main/java/info/nightscout/androidaps/plugins/Treatments/TreatmentsFragment.java index 0c36451573..818d33f245 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/Treatments/TreatmentsFragment.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/Treatments/TreatmentsFragment.java @@ -23,7 +23,6 @@ import com.squareup.otto.Subscribe; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.text.DateFormat; import java.util.Date; import java.util.List; @@ -35,6 +34,7 @@ import info.nightscout.androidaps.db.Treatment; import info.nightscout.androidaps.events.EventTreatmentChange; import info.nightscout.androidaps.interfaces.FragmentBase; import info.nightscout.client.data.NSProfile; +import info.nightscout.utils.DateUtil; import info.nightscout.utils.DecimalFormatter; import info.nightscout.utils.ToastUtils; @@ -76,8 +76,7 @@ public class TreatmentsFragment extends Fragment implements View.OnClickListener NSProfile profile = MainApp.getConfigBuilder().getActiveProfile().getProfile(); if (profile == null) return; - DateFormat df = DateFormat.getDateTimeInstance(DateFormat.MEDIUM, DateFormat.SHORT); - holder.date.setText(df.format(treatments.get(position).created_at)); + holder.date.setText(DateUtil.dateAndTimeString(treatments.get(position).created_at)); holder.insulin.setText(DecimalFormatter.to2Decimal(treatments.get(position).insulin) + " U"); holder.carbs.setText(DecimalFormatter.to0Decimal(treatments.get(position).carbs) + " g"); Iob iob = treatments.get(position).iobCalc(new Date(), profile.getDia()); diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/persistentnotification/PersistentNotificationPlugin.java b/app/src/main/java/info/nightscout/androidaps/plugins/persistentnotification/PersistentNotificationPlugin.java index dffe461ead..653bc6e7b6 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/persistentnotification/PersistentNotificationPlugin.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/persistentnotification/PersistentNotificationPlugin.java @@ -176,7 +176,9 @@ public class PersistentNotificationPlugin implements PluginBase{ if(fragmentEnabled){ MainApp.bus().register(this); } else { - MainApp.bus().unregister(this); + try { + MainApp.bus().unregister(this); + } catch (Exception e) {} } } diff --git a/app/src/main/java/info/nightscout/utils/DateUtil.java b/app/src/main/java/info/nightscout/utils/DateUtil.java index fb12986b7d..c4efa45f93 100644 --- a/app/src/main/java/info/nightscout/utils/DateUtil.java +++ b/app/src/main/java/info/nightscout/utils/DateUtil.java @@ -1,5 +1,7 @@ package info.nightscout.utils; +import android.text.format.DateUtils; + import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Calendar; @@ -9,6 +11,8 @@ import java.util.TimeZone; import java.util.regex.Matcher; import java.util.regex.Pattern; +import info.nightscout.androidaps.MainApp; + /** * The Class DateUtil. A simple wrapper around SimpleDateFormat to ease the handling of iso date string <-> date obj * with TZ @@ -81,4 +85,30 @@ public class DateUtil { return retval; } + public static String dateString(Date date) { + //return DateUtils.formatDateTime(MainApp.instance(), date.getTime(), DateUtils.FORMAT_SHOW_DATE); this provide month name not number + DateFormat df = DateFormat.getDateInstance(DateFormat.SHORT); + return df.format(date); + } + + public static String dateString(long mills) { + //return DateUtils.formatDateTime(MainApp.instance(), mills, DateUtils.FORMAT_SHOW_DATE); this provide month name not number + DateFormat df = DateFormat.getDateInstance(DateFormat.SHORT); + return df.format(mills); + } + + public static String timeString(Date date) { + return DateUtils.formatDateTime(MainApp.instance(), date.getTime(), DateUtils.FORMAT_SHOW_TIME); + } + + public static String timeString(long mills) { + return DateUtils.formatDateTime(MainApp.instance(), mills, DateUtils.FORMAT_SHOW_TIME); + } + + public static String dateAndTimeString(Date date) { + return dateString(date) + " " + timeString(date); + } + public static String dateAndTimeString(long mills) { + return dateString(mills) + " " + timeString(mills); + } } \ No newline at end of file diff --git a/app/src/main/java/info/nightscout/utils/TimeListEdit.java b/app/src/main/java/info/nightscout/utils/TimeListEdit.java index b1abfb6849..811bec61fe 100644 --- a/app/src/main/java/info/nightscout/utils/TimeListEdit.java +++ b/app/src/main/java/info/nightscout/utils/TimeListEdit.java @@ -23,9 +23,7 @@ import org.json.JSONObject; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.text.DateFormat; import java.text.NumberFormat; -import java.text.SimpleDateFormat; import java.util.ArrayList; import info.nightscout.androidaps.MainApp; @@ -84,23 +82,29 @@ public class TimeListEdit { for (int i = 0; i < itemsCount(); i++) { View childview = inflater.inflate(R.layout.timelistedit_element, layout, false); + childview.setId(View.generateViewId()); final Spinner timeSpinner = (Spinner) childview.findViewById(R.id.timelistedit_time); + timeSpinner.setId(View.generateViewId()); int previous = i == 0 ? -1 * ONEHOURINSECONDS : secondFromMidnight(i - 1); int next = i == itemsCount() - 1 ? 24 * ONEHOURINSECONDS : secondFromMidnight(i + 1); if (i == 0) next = ONEHOURINSECONDS; fillSpinner(timeSpinner, secondFromMidnight(i), previous, next); final EditText editText1 = (EditText) childview.findViewById(R.id.timelistedit_edit1); + editText1.setId(View.generateViewId()); fillNumber(editText1, value1(i)); final EditText editText2 = ((EditText) childview.findViewById(R.id.timelistedit_edit2)); fillNumber(editText2, value2(i)); + editText2.setId(View.generateViewId()); if (data2 == null) { editText2.setVisibility(View.GONE); } ImageView addbutton = (ImageView) childview.findViewById(R.id.timelistedit_add); + addbutton.setId(View.generateViewId()); ImageView removebutton = (ImageView) childview.findViewById(R.id.timelistedit_remove); + removebutton.setId(View.generateViewId()); if (itemsCount() == 1 && i == 0) { removebutton.setVisibility(View.GONE); @@ -218,10 +222,9 @@ public class TimeListEdit { public void fillSpinner(Spinner spinner, int secondsFromMidnight, int previous, int next) { int posInList = 0; ArrayList timeList = new ArrayList<>(); - DateFormat df = new SimpleDateFormat("HH:mm"); int pos = 0; for (int t = previous + ONEHOURINSECONDS; t < next; t += ONEHOURINSECONDS) { - timeList.add(df.format(DateUtil.toDate(t))); + timeList.add(DateUtil.timeString(DateUtil.toDate(t))); if (secondsFromMidnight == t) posInList = pos; pos++; } @@ -326,10 +329,9 @@ public class TimeListEdit { } void log() { - DateFormat df = new SimpleDateFormat("HH:mm"); for (int i = 0; i < data1.length(); i++) { int pos = 0; - log.debug(i + ": @" + df.format(DateUtil.toDate(secondFromMidnight(i))) + " " + value1(i) + (data2 != null ? " " + value2(i) : "")); + log.debug(i + ": @" + DateUtil.timeString(DateUtil.toDate(secondFromMidnight(i))) + " " + value1(i) + (data2 != null ? " " + value2(i) : "")); } } } diff --git a/app/src/main/res/layout/circadianpercentageprofile_fragment.xml b/app/src/main/res/layout/circadianpercentageprofile_fragment.xml index da2a23b4cd..db5067d881 100644 --- a/app/src/main/res/layout/circadianpercentageprofile_fragment.xml +++ b/app/src/main/res/layout/circadianpercentageprofile_fragment.xml @@ -110,6 +110,7 @@ android:layout_height="wrap_content" android:background="@color/cardColorBackground" android:orientation="horizontal" + android:id="@+id/circadianpercentageprofile_baseprofilebasal_layout" android:textAppearance="?android:attr/textAppearanceSmall"> diff --git a/app/src/main/res/layout/simpleprofile_fragment.xml b/app/src/main/res/layout/simpleprofile_fragment.xml index 2b5a2390db..f10b91e227 100644 --- a/app/src/main/res/layout/simpleprofile_fragment.xml +++ b/app/src/main/res/layout/simpleprofile_fragment.xml @@ -89,6 +89,7 @@ diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index fc536ee468..c6313d7dbf 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -141,7 +141,7 @@ Current temp Gate: Objective: - Objectives + Zielsetzungen KEIN PROFIL GESETZT NSClient nicht installiert. Record lost! Verwende absolute statt prozentuelle Basalwerte beim Upload zu NightScout @@ -161,7 +161,6 @@ Eingegeben durch Anderes Split - Konfigurations Builder Constraints Generell Treatments @@ -204,7 +203,7 @@ Kommentar Verbunden Verbinden - Puempen Verbindungsfehler + Pumpen Verbindungsfehler DanaR Blueetooth Gerät Pumpen IOB: DanaR Pumpen Einstellungen @@ -222,15 +221,14 @@ Profil anzeigen DanaR Profil Einstellungen DIA [h] - Carbs absorption rate + Kohlehydrahte Absorptionsrate Manuell Einheiten (Tag) ungültige Eingabe Wert nicht korrekt gesetzt ausgewähltes Gerät nicht gefunden - ABWEISEN - Verordnet - Einbenutzervereinbarung + VERWERFEN + Endbenutzervereinbarung Ich verstehe und stimme zu darf nicht eingestzt werden um med. Eintscheidungen zu treffen Fehler beim aktualisieren der Basalrate @@ -257,9 +255,9 @@ Alarme Bolus Kohlenhydrate - Inslin-Tagesmengen + Insulin-Tagesmengen Fehler - Glucose + Glukose Füllmenge Unterbrechungen Pumpen-Passwort @@ -279,7 +277,7 @@ Aktionen Android APS gestartet Loop deaktiviert - Füllbolus-Standardmengen + Vorfüll-Standardmengen Bitte vergewissern Sie sich, dass die Menge der Spezifikation des Katheters entspricht. Zu NightScout nur hochladen (kein sync) Bitte deaktivieren Sie \"Zu NightScout nur hochladen\" um dieses Feature zu nutzen. @@ -288,7 +286,30 @@ Verstopfung Abgegeben %.2fU werden abgegeben werden - Füllen + Vorfüllen / Füllen Hochladen Spanish + Basalrate: + Basisprofil: + Pumpenbatterie entladen + Basal Temp Ende + neu laden + Hoch Markierung + Niedrig Markierung + Niedrige Batterie + Pumpe ist beschäftigt + Pumpenfehler + an Pumpe senden + Zielbereich: + Einheiten: + Falscher Pumpentreiber ausgewählt + Befüllen + EasyUI mode in Pumpe deaktivieren + Basal-Stunde + Knopf 1 + Knopf 2 + Knopf 3 + Absorptionsrate: + Config Builder + vor %d min diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 9359821c78..4c7be2caad 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -391,6 +391,7 @@ BG: Last BG: MDI + MM640g Ongoing Notification OLD DATA %dmin ago