From c589993985787cd4777389f4ff16d9ac04e66b51 Mon Sep 17 00:00:00 2001 From: Andy Rozman Date: Wed, 25 Dec 2019 19:21:22 +0100 Subject: [PATCH] - added Pod debug button (its 5th button and needs to be enabled in configuration) - changed PodHistoryActivity to use PodHistory entries, removed filter for now, and values are not yet supported - added configuration for debug button - extended DatabaseHelper t retrive PodHistory for last day... --- app/src/main/AndroidManifest.xml | 2 +- .../androidaps/db/DatabaseHelper.java | 20 +++++- .../plugins/pump/omnipod/OmnipodFragment.kt | 44 +++++++++---- .../pump/omnipod/OmnipodPumpPlugin.java | 3 +- .../omnipod/dialogs/PodHistoryActivity.java | 65 ++++++++++++------- .../omnipod/dialogs/PodManagementActivity.kt | 8 ++- .../omnipod/driver/OmnipodPumpStatus.java | 2 + .../pump/omnipod/driver/db/PodHistory.java | 8 ++- .../driver/db/PodHistoryEntryType.java | 58 ++++++++++++----- .../pump/omnipod/util/OmnipodConst.java | 1 + app/src/main/res/layout/omnipod_fragment.xml | 12 ++++ .../layout/omnipod_pod_history_activity.xml | 2 +- app/src/main/res/values/strings.xml | 16 +++++ app/src/main/res/xml/pref_omnipod.xml | 5 ++ 14 files changed, 187 insertions(+), 59 deletions(-) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index c431ea59a9..b498f68ecc 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -307,7 +307,7 @@ android:exported="true" /> - + diff --git a/app/src/main/java/info/nightscout/androidaps/db/DatabaseHelper.java b/app/src/main/java/info/nightscout/androidaps/db/DatabaseHelper.java index 9ab1b08dc2..c93a66a3be 100644 --- a/app/src/main/java/info/nightscout/androidaps/db/DatabaseHelper.java +++ b/app/src/main/java/info/nightscout/androidaps/db/DatabaseHelper.java @@ -369,7 +369,7 @@ public class DatabaseHelper extends OrmLiteSqliteOpenHelper { return getDao(InsightHistoryOffset.class); } - private Dao getDaoPodHistory() throws SQLException { + private Dao getDaoPodHistory() throws SQLException { return getDao(PodHistory.class); } @@ -1913,4 +1913,22 @@ public class DatabaseHelper extends OrmLiteSqliteOpenHelper { } + public List getPodHistoryFromTime(long from, boolean ascending) { + try { + Dao daoPodHistory = getDaoPodHistory(); + List podHistories; + QueryBuilder queryBuilder = daoPodHistory.queryBuilder(); + queryBuilder.orderBy("date", ascending); + //queryBuilder.limit(100L); + Where where = queryBuilder.where(); + where.ge("date", from); + PreparedQuery preparedQuery = queryBuilder.prepare(); + podHistories = daoPodHistory.query(preparedQuery); + return podHistories; + } catch (SQLException e) { + log.error("Unhandled exception", e); + } + return new ArrayList<>(); + } + } diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/OmnipodFragment.kt b/app/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/OmnipodFragment.kt index 88b8455e2b..b1437612ea 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/OmnipodFragment.kt +++ b/app/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/OmnipodFragment.kt @@ -10,6 +10,7 @@ import android.view.ViewGroup import androidx.fragment.app.Fragment import info.nightscout.androidaps.MainApp import info.nightscout.androidaps.R +import info.nightscout.androidaps.events.EventPreferenceChange import info.nightscout.androidaps.logging.L import info.nightscout.androidaps.plugins.bus.RxBus import info.nightscout.androidaps.plugins.configBuilder.ConfigBuilderPlugin @@ -25,17 +26,17 @@ import info.nightscout.androidaps.plugins.pump.omnipod.events.EventOmnipodDevice import info.nightscout.androidaps.plugins.pump.omnipod.events.EventOmnipodPumpValuesChanged import info.nightscout.androidaps.plugins.pump.omnipod.events.EventOmnipodRefreshButtonState import info.nightscout.androidaps.plugins.pump.omnipod.driver.OmnipodPumpStatus +import info.nightscout.androidaps.plugins.pump.omnipod.driver.comm.AapsOmnipodManager import info.nightscout.androidaps.plugins.pump.omnipod.events.EventOmnipodAcknowledgeAlertsChanged +import info.nightscout.androidaps.plugins.pump.omnipod.util.OmnipodConst import info.nightscout.androidaps.plugins.pump.omnipod.util.OmnipodUtil import info.nightscout.androidaps.plugins.treatments.TreatmentsPlugin import info.nightscout.androidaps.queue.Callback -import info.nightscout.androidaps.utils.DateUtil -import info.nightscout.androidaps.utils.FabricPrivacy -import info.nightscout.androidaps.utils.SetWarnColor -import info.nightscout.androidaps.utils.T +import info.nightscout.androidaps.utils.* import io.reactivex.android.schedulers.AndroidSchedulers import io.reactivex.disposables.CompositeDisposable import io.reactivex.disposables.Disposable +import io.reactivex.schedulers.Schedulers import kotlinx.android.synthetic.main.omnipod_fragment.* import org.slf4j.LoggerFactory @@ -66,8 +67,6 @@ class OmnipodFragment : Fragment() { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) - //omnipod_pod_status.setBackgroundColor(MainApp.gc(R.color.colorInitializingBorder)) - omnipod_rl_status.text = MainApp.gs(RileyLinkServiceState.NotStarted.getResourceId(RileyLinkTargetDevice.Omnipod)) omnipod_pod_status.setTextColor(Color.WHITE) @@ -113,6 +112,19 @@ class OmnipodFragment : Fragment() { } } + omnipod_pod_debug.setOnClickListener { + if (!OmnipodUtil.getPumpStatus().verifyConfiguration()) { + OmnipodUtil.displayNotConfiguredDialog(context) + } else { + val readPulseLog = AapsOmnipodManager.getInstance().readPulseLog() + + OKDialog.showConfirmation(null, + "Pulse Log:\n" + readPulseLog.toString(), null) + } + } + + setVisibilityOfPodDebugButton() + updateGUI() } @@ -139,9 +151,24 @@ class OmnipodFragment : Fragment() { .toObservable(EventOmnipodAcknowledgeAlertsChanged::class.java) .observeOn(AndroidSchedulers.mainThread()) .subscribe({ updateAcknowledgeAlerts(OmnipodUtil.getPumpStatus()) }, { FabricPrivacy.logException(it) }) + disposable.add(RxBus + .toObservable(EventPreferenceChange::class.java) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe({ event -> + setVisibilityOfPodDebugButton() + }, { FabricPrivacy.logException(it) }) + ) } + fun setVisibilityOfPodDebugButton() { + val isEnabled = SP.getBoolean(OmnipodConst.Prefs.PodExpertDebugModeEnabled, false) + + if (isEnabled) + omnipod_pod_debug.visibility = View.VISIBLE + else + omnipod_pod_debug.visibility = View.GONE + } override fun onPause() { @@ -197,11 +224,6 @@ class OmnipodFragment : Fragment() { MainApp.gs(it.getResourceId(RileyLinkTargetDevice.Omnipod)) } ?: "-" - if (pumpStatus.podNumber == null) { - - } - - if (pumpStatus.podSessionState == null) { omnipod_pod_address.text = MainApp.gs(R.string.omnipod_pod_name_no_info) omnipod_pod_expiry.text = "-" diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/OmnipodPumpPlugin.java b/app/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/OmnipodPumpPlugin.java index a6ace0c972..7dc4563cf8 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/OmnipodPumpPlugin.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/OmnipodPumpPlugin.java @@ -185,6 +185,7 @@ public class OmnipodPumpPlugin extends PumpPluginAbstract implements OmnipodPump if ((event.isChanged(R.string.key_omnipod_beep_basal_enabled)) || (event.isChanged(R.string.key_omnipod_beep_bolus_enabled)) || (event.isChanged(R.string.key_omnipod_beep_tbr_enabled)) || + (event.isChanged(R.string.key_omnipod_pod_expert_debug_enabled)) || (event.isChanged(R.string.key_omnipod_beep_smb_enabled))) refreshConfiguration(); }, FabricPrivacy::logException) @@ -380,7 +381,6 @@ public class OmnipodPumpPlugin extends PumpPluginAbstract implements OmnipodPump omnipodStatusRequestList.removeAll(removeList); - //getPodPumpStatus(); } else if (this.hasTimeDateOrTimeZoneChanged) { OmnipodUITask omnipodUITask = omnipodUIComm.executeCommand(OmnipodCommandType.SetTime); @@ -396,7 +396,6 @@ public class OmnipodPumpPlugin extends PumpPluginAbstract implements OmnipodPump } } } - } diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dialogs/PodHistoryActivity.java b/app/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dialogs/PodHistoryActivity.java index 274791ddfb..b2d59378ab 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dialogs/PodHistoryActivity.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dialogs/PodHistoryActivity.java @@ -17,14 +17,19 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.util.ArrayList; +import java.util.Calendar; +import java.util.GregorianCalendar; import java.util.List; +import info.nightscout.androidaps.MainApp; import info.nightscout.androidaps.R; import info.nightscout.androidaps.activities.NoSplashActivity; +import info.nightscout.androidaps.db.DatabaseHelper; import info.nightscout.androidaps.logging.L; import info.nightscout.androidaps.plugins.pump.medtronic.MedtronicPumpPlugin; import info.nightscout.androidaps.plugins.pump.medtronic.comm.history.pump.PumpHistoryEntry; import info.nightscout.androidaps.plugins.pump.medtronic.comm.history.pump.PumpHistoryEntryGroup; +import info.nightscout.androidaps.plugins.pump.omnipod.driver.db.PodHistory; public class PodHistoryActivity extends NoSplashActivity { @@ -37,7 +42,8 @@ public class PodHistoryActivity extends NoSplashActivity { static TypeList showingType = null; static PumpHistoryEntryGroup selectedGroup = PumpHistoryEntryGroup.All; - List filteredHistoryList = new ArrayList<>(); + List fullHistoryList = new ArrayList<>(); + List filteredHistoryList = new ArrayList<>(); RecyclerViewAdapter recyclerViewAdapter; boolean manualChange = false; @@ -50,24 +56,37 @@ public class PodHistoryActivity extends NoSplashActivity { } + private void prepareData() { + GregorianCalendar gc = new GregorianCalendar(); + gc.add(Calendar.HOUR_OF_DAY, -24); + + MainApp.getDbHelper().getPodHistoryFromTime(gc.getTimeInMillis(), false); + + fullHistoryList.addAll(MainApp.getDbHelper().getPodHistoryFromTime(gc.getTimeInMillis(), true)); + } + + private void filterHistory(PumpHistoryEntryGroup group) { this.filteredHistoryList.clear(); - List list = new ArrayList<>(); - list.addAll(MedtronicPumpPlugin.getPlugin().getMedtronicHistoryData().getAllHistory()); + //LOG.debug("Items on full list: {}", list.size()); - if (group == PumpHistoryEntryGroup.All) { - this.filteredHistoryList.addAll(list); - } else { - for (PumpHistoryEntry pumpHistoryEntry : list) { - if (pumpHistoryEntry.getEntryType().getGroup() == group) { - this.filteredHistoryList.add(pumpHistoryEntry); - } - } - } + this.filteredHistoryList.addAll(fullHistoryList); + + // TODO + +// if (group == PumpHistoryEntryGroup.All) { +// this.filteredHistoryList.addAll(list); +// } else { +// for (PumpHistoryEntry pumpHistoryEntry : list) { +// if (pumpHistoryEntry.getEntryType().getGroup() == group) { +// this.filteredHistoryList.add(pumpHistoryEntry); +// } +// } +// } if (this.recyclerViewAdapter != null) { this.recyclerViewAdapter.setHistoryList(this.filteredHistoryList); @@ -120,6 +139,8 @@ public class PodHistoryActivity extends NoSplashActivity { llm = new LinearLayoutManager(this); recyclerView.setLayoutManager(llm); + prepareData(); + recyclerViewAdapter = new RecyclerViewAdapter(filteredHistoryList); recyclerView.setAdapter(recyclerViewAdapter); @@ -185,15 +206,15 @@ public class PodHistoryActivity extends NoSplashActivity { public static class RecyclerViewAdapter extends RecyclerView.Adapter { - List historyList; + List historyList; - RecyclerViewAdapter(List historyList) { + RecyclerViewAdapter(List historyList) { this.historyList = historyList; } - public void setHistoryList(List historyList) { + public void setHistoryList(List historyList) { // this.historyList.clear(); // this.historyList.addAll(historyList); @@ -213,12 +234,12 @@ public class PodHistoryActivity extends NoSplashActivity { @Override public void onBindViewHolder(HistoryViewHolder holder, int position) { - PumpHistoryEntry record = historyList.get(position); + PodHistory record = historyList.get(position); if (record != null) { holder.timeView.setText(record.getDateTimeString()); - holder.typeView.setText(record.getEntryType().getDescription()); - holder.valueView.setText(record.getDisplayableValue()); + holder.typeView.setText(record.getPodDbEntryType().getResourceId()); + holder.valueView.setText(""); // TODO } } @@ -234,18 +255,18 @@ public class PodHistoryActivity extends NoSplashActivity { super.onAttachedToRecyclerView(recyclerView); } + static class HistoryViewHolder extends RecyclerView.ViewHolder { TextView timeView; TextView typeView; TextView valueView; - HistoryViewHolder(View itemView) { super(itemView); - timeView = (TextView) itemView.findViewById(R.id.omnipod_history_time); - typeView = (TextView) itemView.findViewById(R.id.omnipod_history_source); - valueView = (TextView) itemView.findViewById(R.id.omnipod_history_description); + timeView = itemView.findViewById(R.id.omnipod_history_time); + typeView = itemView.findViewById(R.id.omnipod_history_source); + valueView = itemView.findViewById(R.id.omnipod_history_description); } } } diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dialogs/PodManagementActivity.kt b/app/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dialogs/PodManagementActivity.kt index 3b1ca5642a..a08cc2089b 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dialogs/PodManagementActivity.kt +++ b/app/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dialogs/PodManagementActivity.kt @@ -11,6 +11,8 @@ import info.nightscout.androidaps.R import info.nightscout.androidaps.activities.NoSplashActivity import info.nightscout.androidaps.events.EventRefreshOverview import info.nightscout.androidaps.plugins.bus.RxBus +import info.nightscout.androidaps.plugins.pump.medtronic.dialog.MedtronicHistoryActivity +import info.nightscout.androidaps.plugins.pump.medtronic.util.MedtronicUtil import info.nightscout.androidaps.plugins.pump.omnipod.defs.SetupProgress import info.nightscout.androidaps.plugins.pump.omnipod.dialogs.wizard.initpod.FullInitPodWizardModel import info.nightscout.androidaps.plugins.pump.omnipod.dialogs.wizard.initpod.ShortInitPodWizardModel @@ -129,8 +131,10 @@ class PodManagementActivity : NoSplashActivity() { } fun showPodHistory() { - OKDialog.showConfirmation(this, - MainApp.gs(R.string.omnipod_cmd_pod_history_na), null) +// OKDialog.showConfirmation(this, +// MainApp.gs(R.string.omnipod_cmd_pod_history_na), null) + + startActivity(Intent(applicationContext, PodHistoryActivity::class.java)) } diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/driver/OmnipodPumpStatus.java b/app/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/driver/OmnipodPumpStatus.java index 223f507bfb..f6eb4ec51e 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/driver/OmnipodPumpStatus.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/driver/OmnipodPumpStatus.java @@ -58,6 +58,7 @@ public class OmnipodPumpStatus extends PumpStatus { public boolean beepBasalEnabled = true; public boolean beepSMBEnabled = true; public boolean beepTBREnabled = true; + public boolean podExpertDebugModeEnabled = false; public OmnipodPumpStatus(PumpDescription pumpDescription) { super(pumpDescription); @@ -105,6 +106,7 @@ public class OmnipodPumpStatus extends PumpStatus { this.beepBolusEnabled = SP.getBoolean(OmnipodConst.Prefs.BeepBolusEnabled, true); this.beepSMBEnabled = SP.getBoolean(OmnipodConst.Prefs.BeepSMBEnabled, true); this.beepTBREnabled = SP.getBoolean(OmnipodConst.Prefs.BeepTBREnabled, true); + this.podExpertDebugModeEnabled = SP.getBoolean(OmnipodConst.Prefs.PodExpertDebugModeEnabled, false); LOG.debug("Beeps [basal={}, bolus={}, SMB={}, TBR={}]", this.beepBasalEnabled, this.beepBolusEnabled, this.beepSMBEnabled, this.beepTBREnabled); diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/driver/db/PodHistory.java b/app/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/driver/db/PodHistory.java index 10eb0e33c5..933bde6bcf 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/driver/db/PodHistory.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/driver/db/PodHistory.java @@ -72,12 +72,16 @@ public class PodHistory implements DbObjectBase { this.date = date; } + public String getDateTimeString() { + return DateTimeUtil.toStringFromTimeInMillis(this.date); + } + public PodHistoryEntryType getPodDbEntryType() { - return podHistoryEntryType; + return PodHistoryEntryType.getByCode((int)this.podEntryTypeCode); } public void setPodDbEntryType(PodHistoryEntryType podDbEntryType) { - this.podHistoryEntryType = podDbEntryType; + //this.podHistoryEntryType = podDbEntryType; this.podEntryTypeCode = podDbEntryType.getCode(); } diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/driver/db/PodHistoryEntryType.java b/app/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/driver/db/PodHistoryEntryType.java index c215130219..b75453c8e5 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/driver/db/PodHistoryEntryType.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/driver/db/PodHistoryEntryType.java @@ -1,40 +1,50 @@ package info.nightscout.androidaps.plugins.pump.omnipod.driver.db; +import androidx.annotation.IdRes; +import androidx.annotation.StringRes; + import java.util.HashMap; import java.util.Map; +import info.nightscout.androidaps.R; + /** * Created by andy on 24.11.2019 */ public enum PodHistoryEntryType { - PairAndPrime(1), - FillCannulaSetBasalProfile(2), - DeactivatePod(3), - ResetPodState(4), + PairAndPrime(1, R.string.omnipod_init_pod_wizard_step2_title), + FillCannulaSetBasalProfile(2, R.string.omnipod_init_pod_wizard_step4_title), + DeactivatePod(3, R.string.omnipod_cmd_deactivate_pod), + ResetPodState(4, R.string.omnipod_cmd_reset_pod), - SetTemporaryBasal(10), - CancelTemporaryBasal(11), + SetTemporaryBasal(10, R.string.omnipod_cmd_set_tbr), + CancelTemporaryBasal(11, R.string.omnipod_cmd_cancel_tbr), - SetBasalSchedule(20), + SetBasalSchedule(20, R.string.omnipod_cmd_set_basal_schedule), - GetPodStatus(30), - GetPodInfo(31), - SetTime(32), + GetPodStatus(30, R.string.omnipod_cmd_get_pod_status), + GetPodInfo(31, R.string.omnipod_cmd_get_pod_info), + SetTime(32, R.string.omnipod_cmd_set_time), - SetBolus(40), - CancelBolus(41), + SetBolus(40, R.string.omnipod_cmd_set_bolus), + CancelBolus(41, R.string.omnipod_cmd_cancel_bolus), - ConfigureAlerts(50), - AcknowledgeAlerts(51), + ConfigureAlerts(50, R.string.omnipod_cmd_configure_alerts), + AcknowledgeAlerts(51, R.string.omnipod_cmd_acknowledge_alerts), - SuspendDelivery(60), - ResumeDelivery(61) + SuspendDelivery(60, R.string.omnipod_cmd_suspend_delivery), + ResumeDelivery(61, R.string.omnipod_cmd_resume_delivery), + + UnknownEntryType(99, R.string.omnipod_cmd_umknown_entry) ; private int code; private static Map instanceMap; + @StringRes + private int resourceId; + static { instanceMap = new HashMap<>(); @@ -45,11 +55,25 @@ public enum PodHistoryEntryType { } - PodHistoryEntryType(int code) { + PodHistoryEntryType(int code, @StringRes int resourceId) { this.code = code; + this.resourceId = resourceId; } public int getCode() { return code; } + + + public static PodHistoryEntryType getByCode(int code) { + if (instanceMap.containsKey(code)) { + return instanceMap.get(code); + } else { + return UnknownEntryType; + } + } + + public int getResourceId() { + return resourceId; + } } diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/util/OmnipodConst.java b/app/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/util/OmnipodConst.java index 0f1532fd5d..7d3f62ed20 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/util/OmnipodConst.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/util/OmnipodConst.java @@ -18,6 +18,7 @@ public class OmnipodConst { public static final int BeepBolusEnabled = R.string.key_omnipod_beep_bolus_enabled; public static final int BeepSMBEnabled = R.string.key_omnipod_beep_smb_enabled; public static final int BeepTBREnabled = R.string.key_omnipod_beep_tbr_enabled; + public static final int PodExpertDebugModeEnabled = R.string.key_omnipod_pod_expert_debug_enabled; } public class Statistics { diff --git a/app/src/main/res/layout/omnipod_fragment.xml b/app/src/main/res/layout/omnipod_fragment.xml index 0c23e847ca..03ab29d287 100644 --- a/app/src/main/res/layout/omnipod_fragment.xml +++ b/app/src/main/res/layout/omnipod_fragment.xml @@ -612,6 +612,18 @@ android:paddingRight="0dp" android:text="RL Stats" /> +