diff --git a/app/build.gradle b/app/build.gradle
index ac3736b675..293e052d2d 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -44,7 +44,7 @@ android {
minSdkVersion 21
targetSdkVersion 23
versionCode 1500
- version "1.5d"
+ version "1.5f"
buildConfigField "String", "VERSION", '"' + version + '"'
buildConfigField "String", "BUILDVERSION", generateGitBuild()
}
@@ -183,4 +183,4 @@ dependencies {
compile 'com.google.code.gson:gson:2.7'
compile 'com.google.guava:guava:20.0'
-}
\ No newline at end of file
+}
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 74271acb90..7d792556b7 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -56,16 +56,6 @@
android:enabled="true"
android:exported="true">
-
-
-
-
-
-
-
-
-
-
@@ -76,20 +66,6 @@
-
-
-
-
-
-
-
-
-
-
-
@@ -120,14 +96,6 @@
-
-
-
-
-
pluginsList = null;
+ private static DataReceiver dataReceiver = new DataReceiver();
+ private static NSAlarmReceiver alarmReciever = new NSAlarmReceiver();
+ private static AckAlarmReceiver ackAlarmReciever = new AckAlarmReceiver();
+ private LocalBroadcastManager lbm;
+
@Override
public void onCreate() {
super.onCreate();
@@ -92,6 +103,8 @@ public class MainApp extends Application {
sInstance = this;
sResources = getResources();
+ registerLocalBroadcastReceiver();
+
if (pluginsList == null) {
pluginsList = new ArrayList<>();
// Register all tabs in app here
@@ -155,6 +168,29 @@ public class MainApp extends Application {
}
});
t.start();
+
+ }
+
+ private void registerLocalBroadcastReceiver() {
+ lbm = LocalBroadcastManager.getInstance(this);
+ lbm.registerReceiver(dataReceiver, new IntentFilter(Intents.ACTION_NEW_TREATMENT));
+ lbm.registerReceiver(dataReceiver, new IntentFilter(Intents.ACTION_CHANGED_TREATMENT));
+ lbm.registerReceiver(dataReceiver, new IntentFilter(Intents.ACTION_REMOVED_TREATMENT));
+ lbm.registerReceiver(dataReceiver, new IntentFilter(Intents.ACTION_NEW_SGV));
+ lbm.registerReceiver(dataReceiver, new IntentFilter(Intents.ACTION_NEW_PROFILE));
+ lbm.registerReceiver(dataReceiver, new IntentFilter(Intents.ACTION_NEW_STATUS));
+ lbm.registerReceiver(dataReceiver, new IntentFilter(Intents.ACTION_NEW_MBG));
+ lbm.registerReceiver(dataReceiver, new IntentFilter(Intents.ACTION_NEW_DEVICESTATUS));
+ lbm.registerReceiver(dataReceiver, new IntentFilter(Intents.ACTION_NEW_CAL));
+
+ //register alarms
+ lbm.registerReceiver(alarmReciever, new IntentFilter(Intents.ACTION_ALARM));
+ lbm.registerReceiver(alarmReciever, new IntentFilter(Intents.ACTION_ANNOUNCEMENT));
+ lbm.registerReceiver(alarmReciever, new IntentFilter(Intents.ACTION_CLEAR_ALARM));
+ lbm.registerReceiver(alarmReciever, new IntentFilter(Intents.ACTION_URGENT_ALARM));
+
+ //register ack alarm
+ lbm.registerReceiver(ackAlarmReciever, new IntentFilter(Intents.ACTION_ACK_ALARM));
}
private void startKeepAliveService() {
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 40cbbf3c52..3b04c30d94 100644
--- a/app/src/main/java/info/nightscout/androidaps/Services/DataService.java
+++ b/app/src/main/java/info/nightscout/androidaps/Services/DataService.java
@@ -506,7 +506,7 @@ public class DataService extends IntentService {
MainApp.getDbHelper().createCareportalEventFromJsonIfNotExists(trJson);
}
- if (trJson.getString("eventType").equals(CareportalEvent.ANNOUNCEMENT)) {
+ if (trJson.has("eventType") && trJson.getString("eventType").equals(CareportalEvent.ANNOUNCEMENT)) {
long date = trJson.getLong("mills");
long now = System.currentTimeMillis();
if (date > now - 15 * 60 * 1000L && trJson.has("notes")) {
diff --git a/app/src/main/java/info/nightscout/androidaps/data/Intervals.java b/app/src/main/java/info/nightscout/androidaps/data/Intervals.java
new file mode 100644
index 0000000000..108b4060e0
--- /dev/null
+++ b/app/src/main/java/info/nightscout/androidaps/data/Intervals.java
@@ -0,0 +1,90 @@
+package info.nightscout.androidaps.data;
+
+import android.support.annotation.Nullable;
+import android.support.v4.util.LongSparseArray;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import info.nightscout.androidaps.interfaces.Interval;
+
+/**
+ * Created by mike on 09.05.2017.
+ */
+
+// Zero duration means end of interval
+
+public abstract class Intervals {
+
+ LongSparseArray rawData = new LongSparseArray(); // oldest at index 0
+
+ public synchronized Intervals reset() {
+ rawData = new LongSparseArray();
+ return this;
+ }
+
+ protected abstract void merge();
+
+ /**
+ * The List must be sorted by `T.start()` in ascending order
+ *
+ * */
+ public synchronized void add(List list) {
+ for (T interval : list) {
+ rawData.put(interval.start(), interval);
+ }
+ merge();
+ }
+
+
+
+ public synchronized List getList() {
+ List list = new ArrayList<>();
+ for (int i = 0; i < rawData.size(); i++)
+ list.add(rawData.valueAt(i));
+ return list;
+ }
+
+ public synchronized List getReversedList() {
+ List list = new ArrayList<>();
+ for (int i = rawData.size() -1; i>=0; i--)
+ list.add(rawData.valueAt(i));
+ return list;
+ }
+
+ protected synchronized int binarySearch(long value) {
+ int lo = 0;
+ int hi = rawData.size() - 1;
+
+ while (lo <= hi) {
+ final int mid = (lo + hi) >>> 1;
+ final Interval midVal = rawData.valueAt(mid);
+
+ if (midVal.before(value)) {
+ lo = mid + 1;
+ } else if (midVal.after(value)) {
+ hi = mid - 1;
+ } else if (midVal.match(value)) {
+ return mid; // value found
+ }
+ }
+ return ~lo; // value not present
+ }
+
+ public abstract T getValueByInterval(long time);
+
+ public synchronized int size() {
+ return rawData.size();
+ }
+
+ public synchronized T get(int index) {
+ return rawData.valueAt(index);
+ }
+
+ public synchronized T getReversed(int index) {
+ return rawData.valueAt(size() - 1 - index);
+ }
+
+
+
+}
\ No newline at end of file
diff --git a/app/src/main/java/info/nightscout/androidaps/data/NonOverlappingIntervals.java b/app/src/main/java/info/nightscout/androidaps/data/NonOverlappingIntervals.java
new file mode 100644
index 0000000000..385eeb9594
--- /dev/null
+++ b/app/src/main/java/info/nightscout/androidaps/data/NonOverlappingIntervals.java
@@ -0,0 +1,30 @@
+package info.nightscout.androidaps.data;
+
+
+import android.support.annotation.Nullable;
+
+import info.nightscout.androidaps.interfaces.Interval;
+
+/**
+ * Created by adrian on 15/07/17.
+ */
+
+public class NonOverlappingIntervals extends Intervals {
+
+ protected synchronized void merge() {
+ for (int index = 0; index < rawData.size() - 1; index++) {
+ Interval i = rawData.valueAt(index);
+ long startOfNewer = rawData.valueAt(index + 1).start();
+ if (i.originalEnd() > startOfNewer) {
+ i.cutEndTo(startOfNewer);
+ }
+ }
+ }
+
+ @Nullable
+ public synchronized T getValueByInterval(long time) {
+ int index = binarySearch(time);
+ if (index >= 0) return rawData.valueAt(index);
+ return null;
+ }
+}
diff --git a/app/src/main/java/info/nightscout/androidaps/data/OverlappingIntervals.java b/app/src/main/java/info/nightscout/androidaps/data/OverlappingIntervals.java
index cc03936766..608fa8d328 100644
--- a/app/src/main/java/info/nightscout/androidaps/data/OverlappingIntervals.java
+++ b/app/src/main/java/info/nightscout/androidaps/data/OverlappingIntervals.java
@@ -1,99 +1,43 @@
package info.nightscout.androidaps.data;
-import android.support.annotation.Nullable;
-import android.support.v4.util.LongSparseArray;
-import java.util.ArrayList;
-import java.util.List;
+import android.support.annotation.Nullable;
import info.nightscout.androidaps.interfaces.Interval;
/**
- * Created by mike on 09.05.2017.
+ * Created by adrian on 15/07/17.
*/
-// Zero duration means end of interval
+public class OverlappingIntervals extends Intervals {
-public class OverlappingIntervals {
+ protected synchronized void merge() {
+ boolean needToCut = false;
+ long cutTime = 0;
- private LongSparseArray rawData = new LongSparseArray<>(); // oldest at index 0
-
- public OverlappingIntervals reset() {
- rawData = new LongSparseArray<>();
- return this;
- }
-
- public void add(T newInterval) {
- rawData.put(newInterval.start(), newInterval);
- merge();
- }
-
- public void add(List list) {
- for (T interval : list) {
- rawData.put(interval.start(), interval);
- }
- merge();
- }
-
- private void merge() {
- for (int index = 0; index < rawData.size() - 1; index++) {
- Interval i = rawData.valueAt(index);
- long startOfNewer = rawData.valueAt(index + 1).start();
- if (i.originalEnd() > startOfNewer) {
- i.cutEndTo(startOfNewer);
+ for (int index = rawData.size()-1; index > 0; index--) { //begin with newest
+ Interval cur = rawData.valueAt(index);
+ if (cur.isEndingEvent()){
+ needToCut = true;
+ cutTime = cur.start();
+ } else {
+ //event that is no EndingEvent might need to be stopped by an ending event
+ if(needToCut&&cur.end() > cutTime){
+ cur.cutEndTo(cutTime);
+ }
}
}
}
@Nullable
- public Interval getValueByInterval(long time) {
- int index = binarySearch(time);
- if (index >= 0) return rawData.valueAt(index);
+ public synchronized T getValueByInterval(long time) {
+ for (int index = rawData.size()-1; index > 0; index--) { //begin with newest
+ T cur = rawData.valueAt(index);
+ if (cur.match(time)){
+ return cur;
+ }
+ }
return null;
}
- public List getList() {
- List list = new ArrayList<>();
- for (int i = 0; i < rawData.size(); i++)
- list.add(rawData.valueAt(i));
- return list;
- }
-
- public List getReversedList() {
- List list = new ArrayList<>();
- for (int i = rawData.size() -1; i>=0; i--)
- list.add(rawData.valueAt(i));
- return list;
- }
-
- private int binarySearch(long value) {
- int lo = 0;
- int hi = rawData.size() - 1;
-
- while (lo <= hi) {
- final int mid = (lo + hi) >>> 1;
- final Interval midVal = rawData.valueAt(mid);
-
- if (midVal.before(value)) {
- lo = mid + 1;
- } else if (midVal.after(value)) {
- hi = mid - 1;
- } else if (midVal.match(value)) {
- return mid; // value found
- }
- }
- return ~lo; // value not present
- }
-
- public int size() {
- return rawData.size();
- }
-
- public T get(int index) {
- return rawData.valueAt(index);
- }
-
- public T getReversed(int index) {
- return rawData.valueAt(size() - 1 - index);
- }
-}
\ No newline at end of file
+}
diff --git a/app/src/main/java/info/nightscout/androidaps/data/ProfileIntervals.java b/app/src/main/java/info/nightscout/androidaps/data/ProfileIntervals.java
index ef255ed901..3633f1079e 100644
--- a/app/src/main/java/info/nightscout/androidaps/data/ProfileIntervals.java
+++ b/app/src/main/java/info/nightscout/androidaps/data/ProfileIntervals.java
@@ -19,24 +19,24 @@ public class ProfileIntervals {
private LongSparseArray rawData = new LongSparseArray<>(); // oldest at index 0
- public ProfileIntervals reset() {
+ public synchronized ProfileIntervals reset() {
rawData = new LongSparseArray<>();
return this;
}
- public void add(T newInterval) {
+ public synchronized void add(T newInterval) {
rawData.put(newInterval.start(), newInterval);
merge();
}
- public void add(List list) {
+ public synchronized void add(List list) {
for (T interval : list) {
rawData.put(interval.start(), interval);
}
merge();
}
- private void merge() {
+ private synchronized void merge() {
for (int index = 0; index < rawData.size() - 1; index++) {
Interval i = rawData.valueAt(index);
long startOfNewer = rawData.valueAt(index + 1).start();
@@ -47,27 +47,27 @@ public class ProfileIntervals {
}
@Nullable
- public Interval getValueToTime(long time) {
+ public synchronized Interval getValueToTime(long time) {
int index = binarySearch(time);
if (index >= 0) return rawData.valueAt(index);
return null;
}
- public List getList() {
+ public synchronized List getList() {
List list = new ArrayList<>();
for (int i = 0; i < rawData.size(); i++)
list.add(rawData.valueAt(i));
return list;
}
- public List getReversedList() {
+ public synchronized List getReversedList() {
List list = new ArrayList<>();
for (int i = rawData.size() -1; i>=0; i--)
list.add(rawData.valueAt(i));
return list;
}
- private int binarySearch(long value) {
+ private synchronized int binarySearch(long value) {
if (rawData.size() == 0)
return -1;
int lo = 0;
@@ -95,15 +95,15 @@ public class ProfileIntervals {
return -1; // value not present
}
- public int size() {
+ public synchronized int size() {
return rawData.size();
}
- public T get(int index) {
+ public synchronized T get(int index) {
return rawData.valueAt(index);
}
- public T getReversed(int index) {
+ public synchronized T getReversed(int index) {
return rawData.valueAt(size() - 1 - index);
}
}
\ No newline at end of file
diff --git a/app/src/main/java/info/nightscout/androidaps/db/TempTarget.java b/app/src/main/java/info/nightscout/androidaps/db/TempTarget.java
index 5aaeea1daa..3bbdcbc06c 100644
--- a/app/src/main/java/info/nightscout/androidaps/db/TempTarget.java
+++ b/app/src/main/java/info/nightscout/androidaps/db/TempTarget.java
@@ -51,7 +51,7 @@ public class TempTarget implements Interval {
return false;
if (high != other.high)
return false;
- if (reason != other.reason)
+ if (!Objects.equals(reason, other.reason))
return false;
if (!Objects.equals(_id, other._id))
return false;
diff --git a/app/src/main/java/info/nightscout/androidaps/db/TemporaryBasal.java b/app/src/main/java/info/nightscout/androidaps/db/TemporaryBasal.java
index 83ef07fbc8..751e679699 100644
--- a/app/src/main/java/info/nightscout/androidaps/db/TemporaryBasal.java
+++ b/app/src/main/java/info/nightscout/androidaps/db/TemporaryBasal.java
@@ -289,17 +289,17 @@ public class TemporaryBasal implements Interval {
Profile profile = MainApp.getConfigBuilder().getProfile();
Double currentBasalRate = profile.getBasal();
double rate = (currentBasalRate == null)?0d:(currentBasalRate+netExtendedRate);
- return DecimalFormatter.to2Decimal(rate) + "U/h ("+DecimalFormatter.to2Decimal(netExtendedRate)+"E) @" +
+ return getCalcuatedPercentageIfNeeded() + DecimalFormatter.to2Decimal(rate) + "U/h ("+DecimalFormatter.to2Decimal(netExtendedRate)+"E) @" +
DateUtil.timeString(date) +
- " " + getRealDuration() + "/" + durationInMinutes + "min";
+ " " + getRealDuration() + "/" + durationInMinutes + "'";
} else if (isAbsolute) {
return DecimalFormatter.to2Decimal(absoluteRate) + "U/h @" +
DateUtil.timeString(date) +
- " " + getRealDuration() + "/" + durationInMinutes + "min";
+ " " + getRealDuration() + "/" + durationInMinutes + "'";
} else { // percent
return percentRate + "% @" +
DateUtil.timeString(date) +
- " " + getRealDuration() + "/" + durationInMinutes + "min";
+ " " + getRealDuration() + "/" + durationInMinutes + "'";
}
}
@@ -330,6 +330,31 @@ public class TemporaryBasal implements Interval {
}
}
+ private String getCalcuatedPercentageIfNeeded(){
+ if (isAbsolute || isFakeExtended) {
+
+ double rate = 0d;
+ if (isFakeExtended) {
+ Profile profile = MainApp.getConfigBuilder().getProfile();
+ Double currentBasalRate = profile.getBasal();
+ rate = (currentBasalRate == null)?0d:(currentBasalRate+netExtendedRate);
+ } else if (isAbsolute){
+ rate = absoluteRate;
+ }
+
+ if(SP.getBoolean(R.string.key_danar_visualizeextendedaspercentage, false) && SP.getBoolean(R.string.key_danar_useextended, false)){
+ Profile profile = MainApp.getConfigBuilder().getProfile();
+ if(profile != null) {
+ double basal = profile.getBasal();
+ if(basal != 0){
+ return Math.round(rate*100d/basal) + "% ";
+ }
+ }
+ }
+ }
+ return "";
+ }
+
public String toStringVeryShort() {
if (isAbsolute || isFakeExtended) {
diff --git a/app/src/main/java/info/nightscout/androidaps/interfaces/PumpInterface.java b/app/src/main/java/info/nightscout/androidaps/interfaces/PumpInterface.java
index dbbdec2ce1..bb78ea1d0a 100644
--- a/app/src/main/java/info/nightscout/androidaps/interfaces/PumpInterface.java
+++ b/app/src/main/java/info/nightscout/androidaps/interfaces/PumpInterface.java
@@ -34,7 +34,9 @@ public interface PumpInterface {
PumpEnactResult setTempBasalAbsolute(Double absoluteRate, Integer durationInMinutes);
PumpEnactResult setTempBasalPercent(Integer percent, Integer durationInMinutes);
PumpEnactResult setExtendedBolus(Double insulin, Integer durationInMinutes);
- PumpEnactResult cancelTempBasal();
+ //some pumps might set a very short temp close to 100% as canecelling a temp can be noisy
+ //when the cancel request is requested by the user, the pump should always do a real cancel
+ PumpEnactResult cancelTempBasal(boolean userRequested);
PumpEnactResult cancelExtendedBolus();
// Status to be passed to NS
diff --git a/app/src/main/java/info/nightscout/androidaps/interfaces/TreatmentsInterface.java b/app/src/main/java/info/nightscout/androidaps/interfaces/TreatmentsInterface.java
index d9e3742c70..5e8b4e52e8 100644
--- a/app/src/main/java/info/nightscout/androidaps/interfaces/TreatmentsInterface.java
+++ b/app/src/main/java/info/nightscout/androidaps/interfaces/TreatmentsInterface.java
@@ -10,7 +10,7 @@ import info.nightscout.androidaps.db.ProfileSwitch;
import info.nightscout.androidaps.db.TempTarget;
import info.nightscout.androidaps.db.TemporaryBasal;
import info.nightscout.androidaps.db.Treatment;
-import info.nightscout.androidaps.data.OverlappingIntervals;
+import info.nightscout.androidaps.data.Intervals;
import info.nightscout.androidaps.data.ProfileIntervals;
/**
@@ -42,18 +42,18 @@ public interface TreatmentsInterface {
TemporaryBasal getTempBasalFromHistory(long time);
double getTempBasalAbsoluteRateHistory();
double getTempBasalRemainingMinutesFromHistory();
- OverlappingIntervals getTemporaryBasalsFromHistory();
+ Intervals getTemporaryBasalsFromHistory();
boolean isInHistoryExtendedBoluslInProgress();
ExtendedBolus getExtendedBolusFromHistory(long time);
- OverlappingIntervals getExtendedBolusesFromHistory();
+ Intervals getExtendedBolusesFromHistory();
boolean addToHistoryExtendedBolus(ExtendedBolus extendedBolus);
boolean addToHistoryTreatment(DetailedBolusInfo detailedBolusInfo);
TempTarget getTempTargetFromHistory(long time);
- OverlappingIntervals getTempTargetsFromHistory();
+ Intervals getTempTargetsFromHistory();
ProfileSwitch getProfileSwitchFromHistory(long time);
ProfileIntervals getProfileSwitchesFromHistory();
diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/Actions/ActionsFragment.java b/app/src/main/java/info/nightscout/androidaps/plugins/Actions/ActionsFragment.java
index bc2c0adb86..c6b278955f 100644
--- a/app/src/main/java/info/nightscout/androidaps/plugins/Actions/ActionsFragment.java
+++ b/app/src/main/java/info/nightscout/androidaps/plugins/Actions/ActionsFragment.java
@@ -20,6 +20,7 @@ import info.nightscout.androidaps.Config;
import info.nightscout.androidaps.MainApp;
import info.nightscout.androidaps.R;
import info.nightscout.androidaps.db.ExtendedBolus;
+import info.nightscout.androidaps.db.TemporaryBasal;
import info.nightscout.androidaps.events.EventExtendedBolusChange;
import info.nightscout.androidaps.events.EventInitializationChanged;
import info.nightscout.androidaps.events.EventRefreshOverview;
@@ -31,11 +32,12 @@ import info.nightscout.androidaps.plugins.Actions.dialogs.NewTempBasalDialog;
import info.nightscout.androidaps.plugins.Careportal.CareportalFragment;
import info.nightscout.androidaps.plugins.Careportal.Dialogs.NewNSTreatmentDialog;
import info.nightscout.androidaps.plugins.Careportal.OptionsToShow;
+import info.nightscout.androidaps.plugins.Common.SubscriberFragment;
/**
* A simple {@link Fragment} subclass.
*/
-public class ActionsFragment extends Fragment implements View.OnClickListener {
+public class ActionsFragment extends SubscriberFragment implements View.OnClickListener {
static ActionsPlugin actionsPlugin = new ActionsPlugin();
@@ -48,6 +50,7 @@ public class ActionsFragment extends Fragment implements View.OnClickListener {
Button extendedBolus;
Button extendedBolusCancel;
Button tempBasal;
+ Button tempBasalCancel;
Button fill;
private static Handler sHandler;
@@ -73,6 +76,7 @@ public class ActionsFragment extends Fragment implements View.OnClickListener {
extendedBolus = (Button) view.findViewById(R.id.actions_extendedbolus);
extendedBolusCancel = (Button) view.findViewById(R.id.actions_extendedbolus_cancel);
tempBasal = (Button) view.findViewById(R.id.actions_settempbasal);
+ tempBasalCancel = (Button) view.findViewById(R.id.actions_canceltempbasal);
fill = (Button) view.findViewById(R.id.actions_fill);
profileSwitch.setOnClickListener(this);
@@ -80,77 +84,93 @@ public class ActionsFragment extends Fragment implements View.OnClickListener {
extendedBolus.setOnClickListener(this);
extendedBolusCancel.setOnClickListener(this);
tempBasal.setOnClickListener(this);
+ tempBasalCancel.setOnClickListener(this);
fill.setOnClickListener(this);
- updateGUIIfVisible();
+ updateGUI();
return view;
}
- @Override
- public void onPause() {
- super.onPause();
- MainApp.bus().unregister(this);
- }
-
- @Override
- public void onResume() {
- super.onResume();
- MainApp.bus().register(this);
- }
-
@Subscribe
public void onStatusEvent(final EventInitializationChanged ev) {
- updateGUIIfVisible();
+ updateGUI();
}
@Subscribe
public void onStatusEvent(final EventRefreshOverview ev) {
- updateGUIIfVisible();
+ updateGUI();
}
@Subscribe
public void onStatusEvent(final EventExtendedBolusChange ev) {
- updateGUIIfVisible();
+ updateGUI();
}
@Subscribe
public void onStatusEvent(final EventTempBasalChange ev) {
- updateGUIIfVisible();
+ updateGUI();
}
- void updateGUIIfVisible() {
+ @Override
+ protected void updateGUI() {
Activity activity = getActivity();
if (activity != null)
activity.runOnUiThread(new Runnable() {
@Override
public void run() {
- if (MainApp.getConfigBuilder().getActiveProfileInterface().getProfile() == null)
+ if (MainApp.getConfigBuilder().getActiveProfileInterface().getProfile() == null) {
+ tempTarget.setVisibility(View.GONE);
+ profileSwitch.setVisibility(View.GONE);
+ extendedBolus.setVisibility(View.GONE);
+ extendedBolusCancel.setVisibility(View.GONE);
+ tempBasal.setVisibility(View.GONE);
+ tempBasalCancel.setVisibility(View.GONE);
+ fill.setVisibility(View.GONE);
return;
+ }
boolean allowProfileSwitch = MainApp.getConfigBuilder().getActiveProfileInterface().getProfile().getProfileList().size() > 1;
if (!MainApp.getConfigBuilder().getPumpDescription().isSetBasalProfileCapable || !MainApp.getConfigBuilder().isInitialized() || MainApp.getConfigBuilder().isSuspended() || !allowProfileSwitch)
profileSwitch.setVisibility(View.GONE);
else
profileSwitch.setVisibility(View.VISIBLE);
- if (!MainApp.getConfigBuilder().getPumpDescription().isExtendedBolusCapable || !MainApp.getConfigBuilder().isInitialized() || MainApp.getConfigBuilder().isSuspended() || MainApp.getConfigBuilder().isInHistoryExtendedBoluslInProgress() || MainApp.getConfigBuilder().isFakingTempsByExtendedBoluses())
+
+
+ if (!MainApp.getConfigBuilder().getPumpDescription().isExtendedBolusCapable || !MainApp.getConfigBuilder().isInitialized() || MainApp.getConfigBuilder().isSuspended() || MainApp.getConfigBuilder().isFakingTempsByExtendedBoluses()) {
extendedBolus.setVisibility(View.GONE);
- else {
- extendedBolus.setVisibility(View.VISIBLE);
- }
- if (!MainApp.getConfigBuilder().getPumpDescription().isExtendedBolusCapable || !MainApp.getConfigBuilder().isInitialized() || MainApp.getConfigBuilder().isSuspended() || !MainApp.getConfigBuilder().isInHistoryExtendedBoluslInProgress() || MainApp.getConfigBuilder().isFakingTempsByExtendedBoluses())
extendedBolusCancel.setVisibility(View.GONE);
- else {
- extendedBolusCancel.setVisibility(View.VISIBLE);
- ExtendedBolus running = MainApp.getConfigBuilder().getExtendedBolusFromHistory(System.currentTimeMillis());
- extendedBolusCancel.setText(MainApp.instance().getString(R.string.cancel) + " " + running.toString());
+ } else {
+ if (MainApp.getConfigBuilder().isInHistoryExtendedBoluslInProgress()) {
+ extendedBolus.setVisibility(View.GONE);
+ extendedBolusCancel.setVisibility(View.VISIBLE);
+ ExtendedBolus running = MainApp.getConfigBuilder().getExtendedBolusFromHistory(System.currentTimeMillis());
+ extendedBolusCancel.setText(MainApp.instance().getString(R.string.cancel) + " " + running.toString());
+ } else {
+ extendedBolus.setVisibility(View.VISIBLE);
+ extendedBolusCancel.setVisibility(View.GONE);
+ }
}
- if (!MainApp.getConfigBuilder().getPumpDescription().isTempBasalCapable || !MainApp.getConfigBuilder().isInitialized() || MainApp.getConfigBuilder().isSuspended() || MainApp.getConfigBuilder().isTempBasalInProgress())
+
+
+ if (!MainApp.getConfigBuilder().getPumpDescription().isTempBasalCapable || !MainApp.getConfigBuilder().isInitialized() || MainApp.getConfigBuilder().isSuspended()) {
tempBasal.setVisibility(View.GONE);
- else
- tempBasal.setVisibility(View.VISIBLE);
+ tempBasalCancel.setVisibility(View.GONE);
+ } else {
+ if (MainApp.getConfigBuilder().isTempBasalInProgress()) {
+ tempBasal.setVisibility(View.GONE);
+ tempBasalCancel.setVisibility(View.VISIBLE);
+ final TemporaryBasal activeTemp = MainApp.getConfigBuilder().getTempBasalFromHistory(System.currentTimeMillis());
+ tempBasalCancel.setText(MainApp.instance().getString(R.string.cancel) + "\n" + activeTemp.toStringShort());
+ } else {
+ tempBasal.setVisibility(View.VISIBLE);
+ tempBasalCancel.setVisibility(View.GONE);
+ }
+ }
+
if (!MainApp.getConfigBuilder().getPumpDescription().isRefillingCapable || !MainApp.getConfigBuilder().isInitialized() || MainApp.getConfigBuilder().isSuspended())
fill.setVisibility(View.GONE);
else
fill.setVisibility(View.VISIBLE);
+
if (!Config.APS)
tempTarget.setVisibility(View.GONE);
else
@@ -194,6 +214,17 @@ public class ActionsFragment extends Fragment implements View.OnClickListener {
});
}
break;
+ case R.id.actions_canceltempbasal:
+ if (MainApp.getConfigBuilder().isInHistoryRealTempBasalInProgress()) {
+ sHandler.post(new Runnable() {
+ @Override
+ public void run() {
+ pump.cancelTempBasal(true);
+ Answers.getInstance().logCustom(new CustomEvent("CancelTemp"));
+ }
+ });
+ }
+ break;
case R.id.actions_settempbasal:
NewTempBasalDialog newTempDialog = new NewTempBasalDialog();
newTempDialog.show(manager, "NewTempDialog");
diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/Actions/dialogs/NewTempBasalDialog.java b/app/src/main/java/info/nightscout/androidaps/plugins/Actions/dialogs/NewTempBasalDialog.java
index 51effccb86..0a379a904d 100644
--- a/app/src/main/java/info/nightscout/androidaps/plugins/Actions/dialogs/NewTempBasalDialog.java
+++ b/app/src/main/java/info/nightscout/androidaps/plugins/Actions/dialogs/NewTempBasalDialog.java
@@ -27,6 +27,7 @@ import info.nightscout.androidaps.data.PumpEnactResult;
import info.nightscout.androidaps.interfaces.PumpDescription;
import info.nightscout.androidaps.interfaces.PumpInterface;
import info.nightscout.androidaps.data.Profile;
+import info.nightscout.utils.NumberPicker;
import info.nightscout.utils.PlusMinusEditText;
import info.nightscout.utils.SafeParse;
@@ -35,14 +36,14 @@ public class NewTempBasalDialog extends DialogFragment implements View.OnClickLi
RadioButton percentRadio;
RadioButton absoluteRadio;
RadioGroup basalTypeRadioGroup;
- RelativeLayout typeSelectorLayout;
+ LinearLayout typeSelectorLayout;
LinearLayout percentLayout;
LinearLayout absoluteLayout;
- PlusMinusEditText basalPercent;
- PlusMinusEditText basalAbsolute;
- PlusMinusEditText duration;
+ NumberPicker basalPercent;
+ NumberPicker basalAbsolute;
+ NumberPicker duration;
Handler mHandler;
public static HandlerThread mHandlerThread;
@@ -65,22 +66,24 @@ public class NewTempBasalDialog extends DialogFragment implements View.OnClickLi
percentRadio = (RadioButton) view.findViewById(R.id.overview_newtempbasal_percent_radio);
basalTypeRadioGroup = (RadioGroup) view.findViewById(R.id.overview_newtempbasal_radiogroup);
absoluteRadio = (RadioButton) view.findViewById(R.id.overview_newtempbasal_absolute_radio);
- typeSelectorLayout = (RelativeLayout) view.findViewById(R.id.overview_newtempbasal_typeselector_layout);
+ typeSelectorLayout = (LinearLayout) view.findViewById(R.id.overview_newtempbasal_typeselector_layout);
PumpDescription pumpDescription = MainApp.getConfigBuilder().getPumpDescription();
- basalPercent = new PlusMinusEditText(view, R.id.overview_newtempbasal_basalpercentinput, R.id.overview_newtempbasal_basalpercent_plus, R.id.overview_newtempbasal_basalpercent_minus,
- 100d, 0d, (double) pumpDescription.maxTempPercent, (double) pumpDescription.tempPercentStep, new DecimalFormat("0"), true);
+ basalPercent = (NumberPicker) view.findViewById(R.id.overview_newtempbasal_basalpercentinput);
+ double maxTempPercent = pumpDescription.maxTempPercent;
+ double tempPercentStep = pumpDescription.tempPercentStep;
+ basalPercent.setParams(100d, 0d, maxTempPercent, tempPercentStep, new DecimalFormat("0"), true);
Profile profile = MainApp.getConfigBuilder().getProfile();
- Double currentBasal = profile.getBasal();
- basalAbsolute = new PlusMinusEditText(view, R.id.overview_newtempbasal_basalabsoluteinput, R.id.overview_newtempbasal_basalabsolute_plus, R.id.overview_newtempbasal_basalabsolute_minus,
- currentBasal, 0d, pumpDescription.maxTempAbsolute, pumpDescription.tempAbsoluteStep, new DecimalFormat("0.00"), true);
+ Double currentBasal = profile != null ? profile.getBasal() : 0d;
+ basalAbsolute = (NumberPicker) view.findViewById(R.id.overview_newtempbasal_basalabsoluteinput);
+ basalAbsolute.setParams(currentBasal, 0d, pumpDescription.maxTempAbsolute, pumpDescription.tempAbsoluteStep, new DecimalFormat("0.00"), true);
- double tempDurationStep = MainApp.getConfigBuilder().getPumpDescription().tempDurationStep;
- double tempMaxDuration = MainApp.getConfigBuilder().getPumpDescription().tempMaxDuration;
- duration = new PlusMinusEditText(view, R.id.overview_newtempbasal_duration, R.id.overview_newtempbasal_duration_plus, R.id.overview_newtempbasal_duration_minus,
- tempDurationStep, tempDurationStep, tempMaxDuration, tempDurationStep, new DecimalFormat("0"), false);
+ double tempDurationStep = pumpDescription.tempDurationStep;
+ double tempMaxDuration = pumpDescription.tempMaxDuration;
+ duration = (NumberPicker) view.findViewById(R.id.overview_newtempbasal_duration);
+ duration.setParams(tempDurationStep, tempDurationStep, tempMaxDuration, tempDurationStep, new DecimalFormat("0"), false);
if ((pumpDescription.tempBasalStyle & PumpDescription.PERCENT) == PumpDescription.PERCENT && (pumpDescription.tempBasalStyle & PumpDescription.ABSOLUTE) == PumpDescription.ABSOLUTE) {
// Both allowed
@@ -107,13 +110,6 @@ public class NewTempBasalDialog extends DialogFragment implements View.OnClickLi
return view;
}
- @Override
- public void onResume() {
- super.onResume();
- if (getDialog() != null)
- getDialog().getWindow().setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
- }
-
@Override
public void onClick(View view) {
switch (view.getId()) {
diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/Careportal/CareportalFragment.java b/app/src/main/java/info/nightscout/androidaps/plugins/Careportal/CareportalFragment.java
index abc67c4c39..6ddda8cd68 100644
--- a/app/src/main/java/info/nightscout/androidaps/plugins/Careportal/CareportalFragment.java
+++ b/app/src/main/java/info/nightscout/androidaps/plugins/Careportal/CareportalFragment.java
@@ -19,9 +19,10 @@ import info.nightscout.androidaps.R;
import info.nightscout.androidaps.db.CareportalEvent;
import info.nightscout.androidaps.events.EventCareportalEventChange;
import info.nightscout.androidaps.plugins.Careportal.Dialogs.NewNSTreatmentDialog;
+import info.nightscout.androidaps.plugins.Common.SubscriberFragment;
import info.nightscout.androidaps.plugins.Overview.OverviewFragment;
-public class CareportalFragment extends Fragment implements View.OnClickListener {
+public class CareportalFragment extends SubscriberFragment implements View.OnClickListener {
static CareportalPlugin careportalPlugin;
@@ -178,24 +179,13 @@ public class CareportalFragment extends Fragment implements View.OnClickListener
newDialog.show(manager, "NewNSTreatmentDialog");
}
- @Override
- public void onPause() {
- super.onPause();
- MainApp.bus().unregister(this);
- }
-
- @Override
- public void onResume() {
- super.onResume();
- MainApp.bus().register(this);
- }
-
@Subscribe
public void onStatusEvent(final EventCareportalEventChange c) {
updateGUI();
}
- void updateGUI() {
+ @Override
+ protected void updateGUI() {
Activity activity = getActivity();
updateAge(activity, sage, iage, cage, pbage);
}
diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/Common/SubscriberFragment.java b/app/src/main/java/info/nightscout/androidaps/plugins/Common/SubscriberFragment.java
new file mode 100644
index 0000000000..74abc837fe
--- /dev/null
+++ b/app/src/main/java/info/nightscout/androidaps/plugins/Common/SubscriberFragment.java
@@ -0,0 +1,22 @@
+package info.nightscout.androidaps.plugins.Common;
+
+import android.support.v4.app.Fragment;
+
+import info.nightscout.androidaps.MainApp;
+
+abstract public class SubscriberFragment extends Fragment {
+ @Override
+ public void onPause() {
+ super.onPause();
+ MainApp.bus().unregister(this);
+ }
+
+ @Override
+ public void onResume() {
+ super.onResume();
+ MainApp.bus().register(this);
+ updateGUI();
+ }
+
+ protected abstract void updateGUI();
+}
diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/ConfigBuilder/ConfigBuilderPlugin.java b/app/src/main/java/info/nightscout/androidaps/plugins/ConfigBuilder/ConfigBuilderPlugin.java
index 28821e0242..e65e5b8445 100644
--- a/app/src/main/java/info/nightscout/androidaps/plugins/ConfigBuilder/ConfigBuilderPlugin.java
+++ b/app/src/main/java/info/nightscout/androidaps/plugins/ConfigBuilder/ConfigBuilderPlugin.java
@@ -23,7 +23,7 @@ import info.nightscout.androidaps.R;
import info.nightscout.androidaps.data.DetailedBolusInfo;
import info.nightscout.androidaps.data.IobTotal;
import info.nightscout.androidaps.data.MealData;
-import info.nightscout.androidaps.data.OverlappingIntervals;
+import info.nightscout.androidaps.data.Intervals;
import info.nightscout.androidaps.data.Profile;
import info.nightscout.androidaps.data.ProfileIntervals;
import info.nightscout.androidaps.data.PumpEnactResult;
@@ -83,7 +83,6 @@ public class ConfigBuilderPlugin implements PluginBase, PumpInterface, Constrain
MainApp.bus().register(this);
PowerManager powerManager = (PowerManager) MainApp.instance().getApplicationContext().getSystemService(Context.POWER_SERVICE);
mWakeLock = powerManager.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK, "ConfigBuilderPlugin");
- ;
}
@Override
@@ -510,8 +509,8 @@ public class ConfigBuilderPlugin implements PluginBase, PumpInterface, Constrain
}
@Override
- public PumpEnactResult cancelTempBasal() {
- PumpEnactResult result = activePump.cancelTempBasal();
+ public PumpEnactResult cancelTempBasal(boolean userRequested) {
+ PumpEnactResult result = activePump.cancelTempBasal(userRequested);
if (Config.logCongigBuilderActions)
log.debug("cancelTempBasal success: " + result.success + " enacted: " + result.enacted);
return result;
@@ -560,7 +559,7 @@ public class ConfigBuilderPlugin implements PluginBase, PumpInterface, Constrain
if (isTempBasalInProgress()) {
if (Config.logCongigBuilderActions)
log.debug("applyAPSRequest: cancelTempBasal()");
- result = cancelTempBasal();
+ result = cancelTempBasal(false);
} else {
result = new PumpEnactResult();
result.absolute = request.rate;
@@ -827,7 +826,7 @@ public class ConfigBuilderPlugin implements PluginBase, PumpInterface, Constrain
}
@Override
- public OverlappingIntervals getTemporaryBasalsFromHistory() {
+ public Intervals getTemporaryBasalsFromHistory() {
return activeTreatments.getTemporaryBasalsFromHistory();
}
@@ -874,7 +873,7 @@ public class ConfigBuilderPlugin implements PluginBase, PumpInterface, Constrain
}
@Override
- public OverlappingIntervals getExtendedBolusesFromHistory() {
+ public Intervals getExtendedBolusesFromHistory() {
return activeTreatments.getExtendedBolusesFromHistory();
}
@@ -896,7 +895,7 @@ public class ConfigBuilderPlugin implements PluginBase, PumpInterface, Constrain
}
@Override
- public OverlappingIntervals getTempTargetsFromHistory() {
+ public Intervals getTempTargetsFromHistory() {
return activeTreatments.getTempTargetsFromHistory();
}
diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/InsulinFastacting/ActivityGraph.java b/app/src/main/java/info/nightscout/androidaps/plugins/InsulinFastacting/ActivityGraph.java
index 2d4795a3ec..a2181a3a15 100644
--- a/app/src/main/java/info/nightscout/androidaps/plugins/InsulinFastacting/ActivityGraph.java
+++ b/app/src/main/java/info/nightscout/androidaps/plugins/InsulinFastacting/ActivityGraph.java
@@ -63,6 +63,7 @@ public class ActivityGraph extends GraphView {
getViewport().setMaxX(hours * 60);
getGridLabelRenderer().setNumHorizontalLabels(hours + 1);
getGridLabelRenderer().setHorizontalAxisTitle("[min]");
+ getGridLabelRenderer().setVerticalLabelsColor(activitySeries.getColor());
DataPoint[] iobDataPoints = new DataPoint[iobArray.size()];
iobDataPoints = iobArray.toArray(iobDataPoints);
@@ -72,5 +73,6 @@ public class ActivityGraph extends GraphView {
iobSeries.setBackgroundColor(Color.argb(70, 255, 0, 255));
getSecondScale().setMinY(0);
getSecondScale().setMaxY(1);
+ getGridLabelRenderer().setVerticalLabelsSecondScaleColor(Color.MAGENTA);
}
}
diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/InsulinFastacting/InsulinFastactingFragment.java b/app/src/main/java/info/nightscout/androidaps/plugins/InsulinFastacting/InsulinFastactingFragment.java
index a99e016621..84741656f5 100644
--- a/app/src/main/java/info/nightscout/androidaps/plugins/InsulinFastacting/InsulinFastactingFragment.java
+++ b/app/src/main/java/info/nightscout/androidaps/plugins/InsulinFastacting/InsulinFastactingFragment.java
@@ -35,12 +35,22 @@ public class InsulinFastactingFragment extends Fragment {
insulinDia = (TextView) view.findViewById(R.id.insulin_dia);
insulinGraph = (ActivityGraph) view.findViewById(R.id.insuling_graph);
- insulinName.setText(insulinFastactingPlugin.getFriendlyName());
- insulinComment.setText(insulinFastactingPlugin.getComment());
- insulinDia.setText(MainApp.sResources.getText(R.string.dia) + " " + new Double(insulinFastactingPlugin.getDia()).toString() + "h");
- insulinGraph.show(insulinFastactingPlugin);
+ updateGUI();
return view;
}
+ @Override
+ public void onResume() {
+ super.onResume();
+ updateGUI();
+ }
+
+ private void updateGUI() {
+ insulinName.setText(insulinFastactingPlugin.getFriendlyName());
+ insulinComment.setText(insulinFastactingPlugin.getComment());
+ insulinDia.setText(MainApp.sResources.getText(R.string.dia) + " " + new Double(insulinFastactingPlugin.getDia()).toString() + "h");
+ insulinGraph.show(insulinFastactingPlugin);
+ }
+
}
diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/InsulinFastactingProlonged/InsulinFastactingProlongedFragment.java b/app/src/main/java/info/nightscout/androidaps/plugins/InsulinFastactingProlonged/InsulinFastactingProlongedFragment.java
index acc915b001..e1d0143934 100644
--- a/app/src/main/java/info/nightscout/androidaps/plugins/InsulinFastactingProlonged/InsulinFastactingProlongedFragment.java
+++ b/app/src/main/java/info/nightscout/androidaps/plugins/InsulinFastactingProlonged/InsulinFastactingProlongedFragment.java
@@ -36,12 +36,22 @@ public class InsulinFastactingProlongedFragment extends Fragment {
insulinDia = (TextView) view.findViewById(R.id.insulin_dia);
insulinGraph = (ActivityGraph) view.findViewById(R.id.insuling_graph);
- insulinName.setText(insulinFastactingProlongedPlugin.getFriendlyName());
- insulinComment.setText(insulinFastactingProlongedPlugin.getComment());
- insulinDia.setText(MainApp.sResources.getText(R.string.dia) + " " + new Double(insulinFastactingProlongedPlugin.getDia()).toString() + "h");
- insulinGraph.show(insulinFastactingProlongedPlugin);
+ updateGUI();
return view;
}
+ @Override
+ public void onResume() {
+ super.onResume();
+ updateGUI();
+ }
+
+ private void updateGUI() {
+ insulinName.setText(insulinFastactingProlongedPlugin.getFriendlyName());
+ insulinComment.setText(insulinFastactingProlongedPlugin.getComment());
+ insulinDia.setText(MainApp.sResources.getText(R.string.dia) + " " + new Double(insulinFastactingProlongedPlugin.getDia()).toString() + "h");
+ insulinGraph.show(insulinFastactingProlongedPlugin);
+ }
+
}
diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/Loop/LoopFragment.java b/app/src/main/java/info/nightscout/androidaps/plugins/Loop/LoopFragment.java
index de295d8a6e..2fb143517b 100644
--- a/app/src/main/java/info/nightscout/androidaps/plugins/Loop/LoopFragment.java
+++ b/app/src/main/java/info/nightscout/androidaps/plugins/Loop/LoopFragment.java
@@ -3,7 +3,6 @@ package info.nightscout.androidaps.plugins.Loop;
import android.app.Activity;
import android.os.Bundle;
-import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
@@ -19,10 +18,11 @@ import org.slf4j.LoggerFactory;
import info.nightscout.androidaps.MainApp;
import info.nightscout.androidaps.R;
+import info.nightscout.androidaps.plugins.Common.SubscriberFragment;
import info.nightscout.androidaps.plugins.Loop.events.EventLoopSetLastRunGui;
import info.nightscout.androidaps.plugins.Loop.events.EventLoopUpdateGui;
-public class LoopFragment extends Fragment implements View.OnClickListener {
+public class LoopFragment extends SubscriberFragment implements View.OnClickListener {
private static Logger log = LoggerFactory.getLogger(LoopFragment.class);
private static LoopPlugin loopPlugin;
@@ -61,18 +61,6 @@ public class LoopFragment extends Fragment implements View.OnClickListener {
return view;
}
- @Override
- public void onPause() {
- super.onPause();
- MainApp.bus().unregister(this);
- }
-
- @Override
- public void onResume() {
- super.onResume();
- MainApp.bus().register(this);
- }
-
@Override
public void onClick(View view) {
switch (view.getId()) {
@@ -110,7 +98,8 @@ public class LoopFragment extends Fragment implements View.OnClickListener {
}
- void updateGUI() {
+ @Override
+ protected void updateGUI() {
Activity activity = getActivity();
if (activity != null)
activity.runOnUiThread(new Runnable() {
diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/NSClientInternal/NSClientInternalFragment.java b/app/src/main/java/info/nightscout/androidaps/plugins/NSClientInternal/NSClientInternalFragment.java
index 3e37bf71d7..164e9902df 100644
--- a/app/src/main/java/info/nightscout/androidaps/plugins/NSClientInternal/NSClientInternalFragment.java
+++ b/app/src/main/java/info/nightscout/androidaps/plugins/NSClientInternal/NSClientInternalFragment.java
@@ -28,12 +28,13 @@ import org.slf4j.LoggerFactory;
import info.nightscout.androidaps.MainApp;
import info.nightscout.androidaps.R;
import info.nightscout.androidaps.events.EventPreferenceChange;
+import info.nightscout.androidaps.plugins.Common.SubscriberFragment;
import info.nightscout.androidaps.plugins.NSClientInternal.events.EventNSClientNewLog;
import info.nightscout.androidaps.plugins.NSClientInternal.events.EventNSClientRestart;
import info.nightscout.androidaps.plugins.NSClientInternal.events.EventNSClientUpdateGUI;
import info.nightscout.utils.SP;
-public class NSClientInternalFragment extends Fragment implements View.OnClickListener, CompoundButton.OnCheckedChangeListener {
+public class NSClientInternalFragment extends SubscriberFragment implements View.OnClickListener, CompoundButton.OnCheckedChangeListener {
private static Logger log = LoggerFactory.getLogger(NSClientInternalFragment.class);
static NSClientInternalPlugin nsClientInternalPlugin;
@@ -150,25 +151,13 @@ public class NSClientInternalFragment extends Fragment implements View.OnClickLi
}
}
- @Override
- public void onPause() {
- super.onPause();
- MainApp.bus().unregister(this);
- }
-
- @Override
- public void onResume() {
- super.onResume();
- MainApp.bus().register(this);
- updateGUI();
- }
-
@Subscribe
public void onStatusEvent(final EventNSClientUpdateGUI ev) {
updateGUI();
}
- private void updateGUI() {
+ @Override
+ protected void updateGUI() {
Activity activity = getActivity();
if (activity != null)
activity.runOnUiThread(new Runnable() {
diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/NSClientInternal/NSClientInternalPlugin.java b/app/src/main/java/info/nightscout/androidaps/plugins/NSClientInternal/NSClientInternalPlugin.java
index 827023f5b3..b33d1cb2c3 100644
--- a/app/src/main/java/info/nightscout/androidaps/plugins/NSClientInternal/NSClientInternalPlugin.java
+++ b/app/src/main/java/info/nightscout/androidaps/plugins/NSClientInternal/NSClientInternalPlugin.java
@@ -159,7 +159,7 @@ public class NSClientInternalPlugin implements PluginBase {
MainApp.bus().post(new EventNSClientUpdateGUI());
}
- void clearLog() {
+ synchronized void clearLog() {
handler.post(new Runnable() {
@Override
public void run() {
@@ -169,7 +169,7 @@ public class NSClientInternalPlugin implements PluginBase {
});
}
- private void addToLog(final EventNSClientNewLog ev) {
+ private synchronized void addToLog(final EventNSClientNewLog ev) {
handler.post(new Runnable() {
@Override
public void run() {
@@ -183,7 +183,7 @@ public class NSClientInternalPlugin implements PluginBase {
});
}
- static void updateLog() {
+ static synchronized void updateLog() {
try {
StringBuilder newTextLog = new StringBuilder();
List temporaryList = new ArrayList<>(listLog);
diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/NSClientInternal/broadcasts/BroadcastAckAlarm.java b/app/src/main/java/info/nightscout/androidaps/plugins/NSClientInternal/broadcasts/BroadcastAckAlarm.java
index 4e6566e330..216fa3d19a 100644
--- a/app/src/main/java/info/nightscout/androidaps/plugins/NSClientInternal/broadcasts/BroadcastAckAlarm.java
+++ b/app/src/main/java/info/nightscout/androidaps/plugins/NSClientInternal/broadcasts/BroadcastAckAlarm.java
@@ -4,14 +4,18 @@ import android.content.Context;
import android.content.Intent;
import android.content.pm.ResolveInfo;
import android.os.Bundle;
+import android.support.v4.content.LocalBroadcastManager;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.List;
+import info.nightscout.androidaps.MainApp;
+import info.nightscout.androidaps.R;
import info.nightscout.androidaps.Services.Intents;
import info.nightscout.androidaps.plugins.NSClientInternal.data.NSAlarm;
+import info.nightscout.utils.SP;
/**
* Created by mike on 11.06.2017.
@@ -21,6 +25,7 @@ public class BroadcastAckAlarm {
private static Logger log = LoggerFactory.getLogger(BroadcastAckAlarm.class);
public static void handleClearAlarm(NSAlarm originalAlarm, Context context, long silenceTimeInMsec) {
+
Bundle bundle = new Bundle();
bundle.putInt("level", originalAlarm.getLevel());
bundle.putString("group", originalAlarm.getGroup());
@@ -28,10 +33,18 @@ public class BroadcastAckAlarm {
Intent intent = new Intent(Intents.ACTION_ACK_ALARM);
intent.putExtras(bundle);
intent.addFlags(Intent.FLAG_INCLUDE_STOPPED_PACKAGES);
- context.sendBroadcast(intent);
- List x = context.getPackageManager().queryBroadcastReceivers(intent, 0);
+ LocalBroadcastManager.getInstance(MainApp.instance()).sendBroadcast(intent);
- log.debug("ACKALARM " + x.size() + " receivers");
+ if(SP.getBoolean(R.string.key_nsclient_localbroadcasts, true)) {
+ bundle = new Bundle();
+ bundle.putInt("level", originalAlarm.getLevel());
+ bundle.putString("group", originalAlarm.getGroup());
+ bundle.putLong("silenceTime", silenceTimeInMsec);
+ intent = new Intent(Intents.ACTION_ACK_ALARM);
+ intent.putExtras(bundle);
+ intent.addFlags(Intent.FLAG_INCLUDE_STOPPED_PACKAGES);
+ context.sendBroadcast(intent);
+ }
}
}
diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/NSClientInternal/broadcasts/BroadcastAlarm.java b/app/src/main/java/info/nightscout/androidaps/plugins/NSClientInternal/broadcasts/BroadcastAlarm.java
index 46e2ef1e68..0fee6600bd 100644
--- a/app/src/main/java/info/nightscout/androidaps/plugins/NSClientInternal/broadcasts/BroadcastAlarm.java
+++ b/app/src/main/java/info/nightscout/androidaps/plugins/NSClientInternal/broadcasts/BroadcastAlarm.java
@@ -4,6 +4,7 @@ import android.content.Context;
import android.content.Intent;
import android.content.pm.ResolveInfo;
import android.os.Bundle;
+import android.support.v4.content.LocalBroadcastManager;
import org.json.JSONObject;
import org.slf4j.Logger;
@@ -11,7 +12,10 @@ import org.slf4j.LoggerFactory;
import java.util.List;
+import info.nightscout.androidaps.MainApp;
+import info.nightscout.androidaps.R;
import info.nightscout.androidaps.Services.Intents;
+import info.nightscout.utils.SP;
/**
* Created by mike on 26.06.2016.
@@ -25,9 +29,15 @@ public class BroadcastAlarm {
Intent intent = new Intent(Intents.ACTION_ALARM);
intent.putExtras(bundle);
intent.addFlags(Intent.FLAG_INCLUDE_STOPPED_PACKAGES);
- context.sendBroadcast(intent);
- List x = context.getPackageManager().queryBroadcastReceivers(intent, 0);
+ LocalBroadcastManager.getInstance(MainApp.instance()).sendBroadcast(intent);
- log.debug("ALARM " + x.size() + " receivers");
+ if(SP.getBoolean(R.string.key_nsclient_localbroadcasts, true)) {
+ bundle = new Bundle();
+ bundle.putString("data", alarm.toString());
+ intent = new Intent(Intents.ACTION_ALARM);
+ intent.putExtras(bundle);
+ intent.addFlags(Intent.FLAG_INCLUDE_STOPPED_PACKAGES);
+ context.sendBroadcast(intent);
+ }
}
}
diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/NSClientInternal/broadcasts/BroadcastAnnouncement.java b/app/src/main/java/info/nightscout/androidaps/plugins/NSClientInternal/broadcasts/BroadcastAnnouncement.java
index bb4d3de726..9b133c2551 100644
--- a/app/src/main/java/info/nightscout/androidaps/plugins/NSClientInternal/broadcasts/BroadcastAnnouncement.java
+++ b/app/src/main/java/info/nightscout/androidaps/plugins/NSClientInternal/broadcasts/BroadcastAnnouncement.java
@@ -4,6 +4,7 @@ import android.content.Context;
import android.content.Intent;
import android.content.pm.ResolveInfo;
import android.os.Bundle;
+import android.support.v4.content.LocalBroadcastManager;
import org.json.JSONArray;
import org.json.JSONObject;
@@ -12,7 +13,10 @@ import org.slf4j.LoggerFactory;
import java.util.List;
+import info.nightscout.androidaps.MainApp;
+import info.nightscout.androidaps.R;
import info.nightscout.androidaps.Services.Intents;
+import info.nightscout.utils.SP;
/**
* Created by mike on 26.06.2016.
@@ -26,9 +30,15 @@ public class BroadcastAnnouncement {
Intent intent = new Intent(Intents.ACTION_ANNOUNCEMENT);
intent.putExtras(bundle);
intent.addFlags(Intent.FLAG_INCLUDE_STOPPED_PACKAGES);
- context.sendBroadcast(intent);
- List x = context.getPackageManager().queryBroadcastReceivers(intent, 0);
+ LocalBroadcastManager.getInstance(MainApp.instance()).sendBroadcast(intent);
- log.debug("ANNOUNCEMENT " + x.size() + " receivers");
+ if(SP.getBoolean(R.string.key_nsclient_localbroadcasts, true)) {
+ bundle = new Bundle();
+ bundle.putString("data", announcement.toString());
+ intent = new Intent(Intents.ACTION_ANNOUNCEMENT);
+ intent.putExtras(bundle);
+ intent.addFlags(Intent.FLAG_INCLUDE_STOPPED_PACKAGES);
+ context.sendBroadcast(intent);
+ }
}
}
diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/NSClientInternal/broadcasts/BroadcastCals.java b/app/src/main/java/info/nightscout/androidaps/plugins/NSClientInternal/broadcasts/BroadcastCals.java
index 6601207851..7580a00088 100644
--- a/app/src/main/java/info/nightscout/androidaps/plugins/NSClientInternal/broadcasts/BroadcastCals.java
+++ b/app/src/main/java/info/nightscout/androidaps/plugins/NSClientInternal/broadcasts/BroadcastCals.java
@@ -4,6 +4,7 @@ import android.content.Context;
import android.content.Intent;
import android.content.pm.ResolveInfo;
import android.os.Bundle;
+import android.support.v4.content.LocalBroadcastManager;
import org.json.JSONArray;
import org.slf4j.Logger;
@@ -11,7 +12,10 @@ import org.slf4j.LoggerFactory;
import java.util.List;
+import info.nightscout.androidaps.MainApp;
+import info.nightscout.androidaps.R;
import info.nightscout.androidaps.Services.Intents;
+import info.nightscout.utils.SP;
/**
* Created by mike on 26.06.2016.
@@ -20,15 +24,23 @@ public class BroadcastCals {
private static Logger log = LoggerFactory.getLogger(BroadcastCals.class);
public static void handleNewCal(JSONArray cals, Context context, boolean isDelta) {
+
Bundle bundle = new Bundle();
bundle.putString("cals", cals.toString());
bundle.putBoolean("delta", isDelta);
Intent intent = new Intent(Intents.ACTION_NEW_CAL);
intent.putExtras(bundle);
intent.addFlags(Intent.FLAG_INCLUDE_STOPPED_PACKAGES);
- context.sendBroadcast(intent);
- List x = context.getPackageManager().queryBroadcastReceivers(intent, 0);
+ LocalBroadcastManager.getInstance(MainApp.instance()).sendBroadcast(intent);
- log.debug("CAL " + x.size() + " receivers");
+ if(SP.getBoolean(R.string.key_nsclient_localbroadcasts, true)) {
+ bundle = new Bundle();
+ bundle.putString("cals", cals.toString());
+ bundle.putBoolean("delta", isDelta);
+ intent = new Intent(Intents.ACTION_NEW_CAL);
+ intent.putExtras(bundle);
+ intent.addFlags(Intent.FLAG_INCLUDE_STOPPED_PACKAGES);
+ context.sendBroadcast(intent);
+ }
}
}
diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/NSClientInternal/broadcasts/BroadcastClearAlarm.java b/app/src/main/java/info/nightscout/androidaps/plugins/NSClientInternal/broadcasts/BroadcastClearAlarm.java
index 7272a81d95..23406837a7 100644
--- a/app/src/main/java/info/nightscout/androidaps/plugins/NSClientInternal/broadcasts/BroadcastClearAlarm.java
+++ b/app/src/main/java/info/nightscout/androidaps/plugins/NSClientInternal/broadcasts/BroadcastClearAlarm.java
@@ -4,6 +4,7 @@ import android.content.Context;
import android.content.Intent;
import android.content.pm.ResolveInfo;
import android.os.Bundle;
+import android.support.v4.content.LocalBroadcastManager;
import org.json.JSONObject;
import org.slf4j.Logger;
@@ -11,7 +12,10 @@ import org.slf4j.LoggerFactory;
import java.util.List;
+import info.nightscout.androidaps.MainApp;
+import info.nightscout.androidaps.R;
import info.nightscout.androidaps.Services.Intents;
+import info.nightscout.utils.SP;
/**
* Created by mike on 26.06.2016.
@@ -25,9 +29,15 @@ public class BroadcastClearAlarm {
Intent intent = new Intent(Intents.ACTION_CLEAR_ALARM);
intent.putExtras(bundle);
intent.addFlags(Intent.FLAG_INCLUDE_STOPPED_PACKAGES);
- context.sendBroadcast(intent);
- List x = context.getPackageManager().queryBroadcastReceivers(intent, 0);
+ LocalBroadcastManager.getInstance(MainApp.instance()).sendBroadcast(intent);
- log.debug("CLEARALARM " + x.size() + " receivers");
+ if(SP.getBoolean(R.string.key_nsclient_localbroadcasts, true)) {
+ bundle = new Bundle();
+ bundle.putString("data", clearalarm.toString());
+ intent = new Intent(Intents.ACTION_CLEAR_ALARM);
+ intent.putExtras(bundle);
+ intent.addFlags(Intent.FLAG_INCLUDE_STOPPED_PACKAGES);
+ context.sendBroadcast(intent);
+ }
}
}
diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/NSClientInternal/broadcasts/BroadcastDeviceStatus.java b/app/src/main/java/info/nightscout/androidaps/plugins/NSClientInternal/broadcasts/BroadcastDeviceStatus.java
index 15d8fe5b5d..a912fc5d3c 100644
--- a/app/src/main/java/info/nightscout/androidaps/plugins/NSClientInternal/broadcasts/BroadcastDeviceStatus.java
+++ b/app/src/main/java/info/nightscout/androidaps/plugins/NSClientInternal/broadcasts/BroadcastDeviceStatus.java
@@ -4,6 +4,7 @@ import android.content.Context;
import android.content.Intent;
import android.content.pm.ResolveInfo;
import android.os.Bundle;
+import android.support.v4.content.LocalBroadcastManager;
import org.json.JSONArray;
import org.json.JSONObject;
@@ -12,7 +13,10 @@ import org.slf4j.LoggerFactory;
import java.util.List;
+import info.nightscout.androidaps.MainApp;
+import info.nightscout.androidaps.R;
import info.nightscout.androidaps.Services.Intents;
+import info.nightscout.utils.SP;
public class BroadcastDeviceStatus {
@@ -25,12 +29,20 @@ public class BroadcastDeviceStatus {
Intent intent = new Intent(Intents.ACTION_NEW_DEVICESTATUS);
intent.putExtras(bundle);
intent.addFlags(Intent.FLAG_INCLUDE_STOPPED_PACKAGES);
- context.sendBroadcast(intent);
- List x = context.getPackageManager().queryBroadcastReceivers(intent, 0);
+ LocalBroadcastManager.getInstance(MainApp.instance()).sendBroadcast(intent);
- log.debug("DEVICESTATUS " + x.size() + " receivers");
+ if(SP.getBoolean(R.string.key_nsclient_localbroadcasts, true)) {
+ bundle = new Bundle();
+ bundle.putString("devicestatus", status.toString());
+ bundle.putBoolean("delta", isDelta);
+ intent = new Intent(Intents.ACTION_NEW_DEVICESTATUS);
+ intent.putExtras(bundle);
+ intent.addFlags(Intent.FLAG_INCLUDE_STOPPED_PACKAGES);
+ context.sendBroadcast(intent);
+ }
}
public static void handleNewDeviceStatus(JSONArray statuses, Context context, boolean isDelta) {
+
List splitted = BroadcastTreatment.splitArray(statuses);
for (JSONArray part: splitted) {
Bundle bundle = new Bundle();
@@ -39,10 +51,20 @@ public class BroadcastDeviceStatus {
Intent intent = new Intent(Intents.ACTION_NEW_DEVICESTATUS);
intent.putExtras(bundle);
intent.addFlags(Intent.FLAG_INCLUDE_STOPPED_PACKAGES);
- context.sendBroadcast(intent);
- List x = context.getPackageManager().queryBroadcastReceivers(intent, 0);
+ LocalBroadcastManager.getInstance(MainApp.instance()).sendBroadcast(intent);
+ }
- log.debug("DEVICESTATUS " + part.length() + " records " + x.size() + " receivers");
+ if(SP.getBoolean(R.string.key_nsclient_localbroadcasts, true)) {
+ splitted = BroadcastTreatment.splitArray(statuses);
+ for (JSONArray part : splitted) {
+ Bundle bundle = new Bundle();
+ bundle.putString("devicestatuses", part.toString());
+ bundle.putBoolean("delta", isDelta);
+ Intent intent = new Intent(Intents.ACTION_NEW_DEVICESTATUS);
+ intent.putExtras(bundle);
+ intent.addFlags(Intent.FLAG_INCLUDE_STOPPED_PACKAGES);
+ context.sendBroadcast(intent);
+ }
}
}
}
diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/NSClientInternal/broadcasts/BroadcastMbgs.java b/app/src/main/java/info/nightscout/androidaps/plugins/NSClientInternal/broadcasts/BroadcastMbgs.java
index 1430fbaf1a..a715747791 100644
--- a/app/src/main/java/info/nightscout/androidaps/plugins/NSClientInternal/broadcasts/BroadcastMbgs.java
+++ b/app/src/main/java/info/nightscout/androidaps/plugins/NSClientInternal/broadcasts/BroadcastMbgs.java
@@ -4,6 +4,7 @@ import android.content.Context;
import android.content.Intent;
import android.content.pm.ResolveInfo;
import android.os.Bundle;
+import android.support.v4.content.LocalBroadcastManager;
import org.json.JSONArray;
import org.slf4j.Logger;
@@ -11,7 +12,10 @@ import org.slf4j.LoggerFactory;
import java.util.List;
+import info.nightscout.androidaps.MainApp;
+import info.nightscout.androidaps.R;
import info.nightscout.androidaps.Services.Intents;
+import info.nightscout.utils.SP;
/**
* Created by mike on 26.06.2016.
@@ -20,15 +24,23 @@ public class BroadcastMbgs {
private static Logger log = LoggerFactory.getLogger(BroadcastMbgs.class);
public static void handleNewMbg(JSONArray mbgs, Context context, boolean isDelta) {
+
Bundle bundle = new Bundle();
bundle.putString("mbgs", mbgs.toString());
bundle.putBoolean("delta", isDelta);
Intent intent = new Intent(Intents.ACTION_NEW_MBG);
intent.putExtras(bundle);
intent.addFlags(Intent.FLAG_INCLUDE_STOPPED_PACKAGES);
- context.sendBroadcast(intent);
- List x = context.getPackageManager().queryBroadcastReceivers(intent, 0);
+ LocalBroadcastManager.getInstance(MainApp.instance()).sendBroadcast(intent);
- log.debug("MBG " + x.size() + " receivers");
+ if(SP.getBoolean(R.string.key_nsclient_localbroadcasts, true)) {
+ bundle = new Bundle();
+ bundle.putString("mbgs", mbgs.toString());
+ bundle.putBoolean("delta", isDelta);
+ intent = new Intent(Intents.ACTION_NEW_MBG);
+ intent.putExtras(bundle);
+ intent.addFlags(Intent.FLAG_INCLUDE_STOPPED_PACKAGES);
+ context.sendBroadcast(intent);
+ }
}
}
diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/NSClientInternal/broadcasts/BroadcastProfile.java b/app/src/main/java/info/nightscout/androidaps/plugins/NSClientInternal/broadcasts/BroadcastProfile.java
index 4edad5db33..3802b09657 100644
--- a/app/src/main/java/info/nightscout/androidaps/plugins/NSClientInternal/broadcasts/BroadcastProfile.java
+++ b/app/src/main/java/info/nightscout/androidaps/plugins/NSClientInternal/broadcasts/BroadcastProfile.java
@@ -4,14 +4,18 @@ import android.content.Context;
import android.content.Intent;
import android.content.pm.ResolveInfo;
import android.os.Bundle;
+import android.support.v4.content.LocalBroadcastManager;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.List;
+import info.nightscout.androidaps.MainApp;
+import info.nightscout.androidaps.R;
import info.nightscout.androidaps.Services.Intents;
import info.nightscout.androidaps.data.ProfileStore;
+import info.nightscout.utils.SP;
/**
@@ -21,16 +25,24 @@ public class BroadcastProfile {
private static Logger log = LoggerFactory.getLogger(BroadcastProfile.class);
public static void handleNewTreatment(ProfileStore profile, Context context, boolean isDelta) {
+
Bundle bundle = new Bundle();
bundle.putString("profile", profile.getData().toString());
bundle.putBoolean("delta", isDelta);
Intent intent = new Intent(Intents.ACTION_NEW_PROFILE);
intent.putExtras(bundle);
intent.addFlags(Intent.FLAG_INCLUDE_STOPPED_PACKAGES);
- context.sendBroadcast(intent);
- List x = context.getPackageManager().queryBroadcastReceivers(intent, 0);
+ LocalBroadcastManager.getInstance(MainApp.instance()).sendBroadcast(intent);
- log.debug("PROFILE " + x.size() + " receivers");
+ if(SP.getBoolean(R.string.key_nsclient_localbroadcasts, true)) {
+ bundle = new Bundle();
+ bundle.putString("profile", profile.getData().toString());
+ bundle.putBoolean("delta", isDelta);
+ intent = new Intent(Intents.ACTION_NEW_PROFILE);
+ intent.putExtras(bundle);
+ intent.addFlags(Intent.FLAG_INCLUDE_STOPPED_PACKAGES);
+ context.sendBroadcast(intent);
+ }
}
}
diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/NSClientInternal/broadcasts/BroadcastQueueStatus.java b/app/src/main/java/info/nightscout/androidaps/plugins/NSClientInternal/broadcasts/BroadcastQueueStatus.java
index fbcc1ed7a3..abc49be18a 100644
--- a/app/src/main/java/info/nightscout/androidaps/plugins/NSClientInternal/broadcasts/BroadcastQueueStatus.java
+++ b/app/src/main/java/info/nightscout/androidaps/plugins/NSClientInternal/broadcasts/BroadcastQueueStatus.java
@@ -5,13 +5,18 @@ import android.content.Intent;
import android.os.Bundle;
import android.os.PowerManager;
+import info.nightscout.androidaps.R;
import info.nightscout.androidaps.Services.Intents;
+import info.nightscout.utils.SP;
/**
* Created by mike on 28.02.2016.
*/
public class BroadcastQueueStatus {
public static void handleNewStatus(int size, Context context) {
+
+ if(!SP.getBoolean(R.string.key_nsclient_localbroadcasts, true)) return;
+
PowerManager powerManager = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
PowerManager.WakeLock wakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK,
"sendQueue");
diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/NSClientInternal/broadcasts/BroadcastSgvs.java b/app/src/main/java/info/nightscout/androidaps/plugins/NSClientInternal/broadcasts/BroadcastSgvs.java
index e846b8171b..d4193f3cb7 100644
--- a/app/src/main/java/info/nightscout/androidaps/plugins/NSClientInternal/broadcasts/BroadcastSgvs.java
+++ b/app/src/main/java/info/nightscout/androidaps/plugins/NSClientInternal/broadcasts/BroadcastSgvs.java
@@ -4,6 +4,7 @@ import android.content.Context;
import android.content.Intent;
import android.content.pm.ResolveInfo;
import android.os.Bundle;
+import android.support.v4.content.LocalBroadcastManager;
import org.json.JSONArray;
import org.json.JSONObject;
@@ -12,7 +13,10 @@ import org.slf4j.LoggerFactory;
import java.util.List;
+import info.nightscout.androidaps.MainApp;
+import info.nightscout.androidaps.R;
import info.nightscout.androidaps.Services.Intents;
+import info.nightscout.utils.SP;
/**
* Created by mike on 22.02.2016.
@@ -21,16 +25,24 @@ public class BroadcastSgvs {
private static Logger log = LoggerFactory.getLogger(BroadcastSgvs.class);
public static void handleNewSgv(JSONObject sgv, Context context, boolean isDelta) {
+
Bundle bundle = new Bundle();
bundle.putString("sgv", sgv.toString());
bundle.putBoolean("delta", isDelta);
Intent intent = new Intent(Intents.ACTION_NEW_SGV);
intent.putExtras(bundle);
intent.addFlags(Intent.FLAG_INCLUDE_STOPPED_PACKAGES);
- context.sendBroadcast(intent);
- List x = context.getPackageManager().queryBroadcastReceivers(intent, 0);
+ LocalBroadcastManager.getInstance(MainApp.instance()).sendBroadcast(intent);
- log.debug("SGV " + x.size() + " receivers");
+ if(SP.getBoolean(R.string.key_nsclient_localbroadcasts, true)) {
+ bundle = new Bundle();
+ bundle.putString("sgv", sgv.toString());
+ bundle.putBoolean("delta", isDelta);
+ intent = new Intent(Intents.ACTION_NEW_SGV);
+ intent.putExtras(bundle);
+ intent.addFlags(Intent.FLAG_INCLUDE_STOPPED_PACKAGES);
+ context.sendBroadcast(intent);
+ }
}
public static void handleNewSgv(JSONArray sgvs, Context context, boolean isDelta) {
@@ -40,10 +52,17 @@ public class BroadcastSgvs {
Intent intent = new Intent(Intents.ACTION_NEW_SGV);
intent.putExtras(bundle);
intent.addFlags(Intent.FLAG_INCLUDE_STOPPED_PACKAGES);
- context.sendBroadcast(intent);
- List x = context.getPackageManager().queryBroadcastReceivers(intent, 0);
+ LocalBroadcastManager.getInstance(MainApp.instance()).sendBroadcast(intent);
- log.debug("SGV " + x.size() + " receivers");
+ if(SP.getBoolean(R.string.key_nsclient_localbroadcasts, true)) {
+ bundle = new Bundle();
+ bundle.putString("sgvs", sgvs.toString());
+ bundle.putBoolean("delta", isDelta);
+ intent = new Intent(Intents.ACTION_NEW_SGV);
+ intent.putExtras(bundle);
+ intent.addFlags(Intent.FLAG_INCLUDE_STOPPED_PACKAGES);
+ context.sendBroadcast(intent);
+ }
}
}
diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/NSClientInternal/broadcasts/BroadcastStatus.java b/app/src/main/java/info/nightscout/androidaps/plugins/NSClientInternal/broadcasts/BroadcastStatus.java
index 20055aa108..7c6862cb14 100644
--- a/app/src/main/java/info/nightscout/androidaps/plugins/NSClientInternal/broadcasts/BroadcastStatus.java
+++ b/app/src/main/java/info/nightscout/androidaps/plugins/NSClientInternal/broadcasts/BroadcastStatus.java
@@ -5,6 +5,7 @@ import android.content.Intent;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.os.Bundle;
+import android.support.v4.content.LocalBroadcastManager;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -12,9 +13,11 @@ import org.slf4j.LoggerFactory;
import java.util.List;
import info.nightscout.androidaps.MainApp;
+import info.nightscout.androidaps.R;
import info.nightscout.androidaps.Services.Intents;
import info.nightscout.androidaps.plugins.NSClientInternal.data.NSSettingsStatus;
import info.nightscout.androidaps.plugins.NSClientInternal.services.NSClientService;
+import info.nightscout.utils.SP;
/**
* Created by mike on 24.02.2016.
@@ -23,13 +26,14 @@ public class BroadcastStatus {
private static Logger log = LoggerFactory.getLogger(BroadcastStatus.class);
public static void handleNewStatus(NSSettingsStatus status, Context context, boolean isDelta) {
+
Bundle bundle = new Bundle();
try {
bundle.putString("nsclientversionname", MainApp.instance().getPackageManager().getPackageInfo(MainApp.instance().getPackageName(), 0).versionName);
bundle.putInt("nsclientversioncode", MainApp.instance().getPackageManager().getPackageInfo(MainApp.instance().getPackageName(), 0).versionCode);
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
- };
+ }
bundle.putString("nightscoutversionname", NSClientService.nightscoutVersionName);
bundle.putInt("nightscoutversioncode", NSClientService.nightscoutVersionCode);
bundle.putString("status", status.getData().toString());
@@ -37,9 +41,24 @@ public class BroadcastStatus {
Intent intent = new Intent(Intents.ACTION_NEW_STATUS);
intent.putExtras(bundle);
intent.addFlags(Intent.FLAG_INCLUDE_STOPPED_PACKAGES);
- context.sendBroadcast(intent);
- List x = context.getPackageManager().queryBroadcastReceivers(intent, 0);
+ LocalBroadcastManager.getInstance(MainApp.instance()).sendBroadcast(intent);
- log.debug("STATUS: " + x.size() + " receivers");
+ if(SP.getBoolean(R.string.key_nsclient_localbroadcasts, true)) {
+ bundle = new Bundle();
+ try {
+ bundle.putString("nsclientversionname", MainApp.instance().getPackageManager().getPackageInfo(MainApp.instance().getPackageName(), 0).versionName);
+ bundle.putInt("nsclientversioncode", MainApp.instance().getPackageManager().getPackageInfo(MainApp.instance().getPackageName(), 0).versionCode);
+ } catch (PackageManager.NameNotFoundException e) {
+ e.printStackTrace();
+ }
+ bundle.putString("nightscoutversionname", NSClientService.nightscoutVersionName);
+ bundle.putInt("nightscoutversioncode", NSClientService.nightscoutVersionCode);
+ bundle.putString("status", status.getData().toString());
+ bundle.putBoolean("delta", isDelta);
+ intent = new Intent(Intents.ACTION_NEW_STATUS);
+ intent.putExtras(bundle);
+ intent.addFlags(Intent.FLAG_INCLUDE_STOPPED_PACKAGES);
+ context.sendBroadcast(intent);
+ }
}
}
diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/NSClientInternal/broadcasts/BroadcastTreatment.java b/app/src/main/java/info/nightscout/androidaps/plugins/NSClientInternal/broadcasts/BroadcastTreatment.java
index 382d8734dd..0d998a2bcd 100644
--- a/app/src/main/java/info/nightscout/androidaps/plugins/NSClientInternal/broadcasts/BroadcastTreatment.java
+++ b/app/src/main/java/info/nightscout/androidaps/plugins/NSClientInternal/broadcasts/BroadcastTreatment.java
@@ -4,6 +4,8 @@ import android.content.Context;
import android.content.Intent;
import android.content.pm.ResolveInfo;
import android.os.Bundle;
+import android.os.TransactionTooLargeException;
+import android.support.v4.content.LocalBroadcastManager;
import org.json.JSONArray;
import org.json.JSONException;
@@ -14,8 +16,12 @@ import org.slf4j.LoggerFactory;
import java.util.ArrayList;
import java.util.List;
+import info.nightscout.androidaps.MainApp;
+import info.nightscout.androidaps.R;
import info.nightscout.androidaps.Services.Intents;
import info.nightscout.androidaps.plugins.NSClientInternal.data.NSTreatment;
+import info.nightscout.utils.SP;
+import info.nightscout.utils.ToastUtils;
/**
* Created by mike on 20.02.2016.
@@ -24,19 +30,28 @@ public class BroadcastTreatment {
private static Logger log = LoggerFactory.getLogger(BroadcastTreatment.class);
public static void handleNewTreatment(NSTreatment treatment, Context context, boolean isDelta) {
+
Bundle bundle = new Bundle();
bundle.putString("treatment", treatment.getData().toString());
bundle.putBoolean("delta", isDelta);
Intent intent = new Intent(Intents.ACTION_NEW_TREATMENT);
intent.putExtras(bundle);
intent.addFlags(Intent.FLAG_INCLUDE_STOPPED_PACKAGES);
- context.sendBroadcast(intent);
- List x = context.getPackageManager().queryBroadcastReceivers(intent, 0);
+ LocalBroadcastManager.getInstance(MainApp.instance()).sendBroadcast(intent);
- log.debug("TREAT_ADD " + treatment.getEventType() + " " + x.size() + " receivers");
+ if(SP.getBoolean(R.string.key_nsclient_localbroadcasts, true)) {
+ bundle = new Bundle();
+ bundle.putString("treatment", treatment.getData().toString());
+ bundle.putBoolean("delta", isDelta);
+ intent = new Intent(Intents.ACTION_NEW_TREATMENT);
+ intent.putExtras(bundle);
+ intent.addFlags(Intent.FLAG_INCLUDE_STOPPED_PACKAGES);
+ context.sendBroadcast(intent);
+ }
}
public static void handleNewTreatment(JSONArray treatments, Context context, boolean isDelta) {
+
List splitted = splitArray(treatments);
for (JSONArray part: splitted) {
Bundle bundle = new Bundle();
@@ -45,72 +60,114 @@ public class BroadcastTreatment {
Intent intent = new Intent(Intents.ACTION_NEW_TREATMENT);
intent.putExtras(bundle);
intent.addFlags(Intent.FLAG_INCLUDE_STOPPED_PACKAGES);
- context.sendBroadcast(intent);
- List x = context.getPackageManager().queryBroadcastReceivers(intent, 0);
+ LocalBroadcastManager.getInstance(MainApp.instance()).sendBroadcast(intent);
+ }
- log.debug("TREAT_ADD " + part.length() + " " + x.size() + " receivers");
+ if(SP.getBoolean(R.string.key_nsclient_localbroadcasts, true)){
+ splitted = splitArray(treatments);
+ for (JSONArray part: splitted) {
+ Bundle bundle = new Bundle();
+ bundle.putString("treatments", part.toString());
+ bundle.putBoolean("delta", isDelta);
+ Intent intent = new Intent(Intents.ACTION_NEW_TREATMENT);
+ intent.putExtras(bundle);
+ intent.addFlags(Intent.FLAG_INCLUDE_STOPPED_PACKAGES);
+ context.sendBroadcast(intent);
+ }
}
}
public void handleChangedTreatment(JSONObject treatment, Context context, boolean isDelta) {
+
Bundle bundle = new Bundle();
bundle.putString("treatment", treatment.toString());
bundle.putBoolean("delta", isDelta);
Intent intent = new Intent(Intents.ACTION_CHANGED_TREATMENT);
intent.putExtras(bundle);
intent.addFlags(Intent.FLAG_INCLUDE_STOPPED_PACKAGES);
- context.sendBroadcast(intent);
- List x = context.getPackageManager().queryBroadcastReceivers(intent, 0);
+ LocalBroadcastManager.getInstance(MainApp.instance()).sendBroadcast(intent);
- try {
- log.debug("TREAT_CHANGE " + treatment.getString("_id") + " " + x.size() + " receivers");
- } catch (JSONException e) {
+
+ if(SP.getBoolean(R.string.key_nsclient_localbroadcasts, true)) {
+ bundle = new Bundle();
+ bundle.putString("treatment", treatment.toString());
+ bundle.putBoolean("delta", isDelta);
+ intent = new Intent(Intents.ACTION_CHANGED_TREATMENT);
+ intent.putExtras(bundle);
+ intent.addFlags(Intent.FLAG_INCLUDE_STOPPED_PACKAGES);
+ context.sendBroadcast(intent);
}
}
public static void handleChangedTreatment(JSONArray treatments, Context context, boolean isDelta) {
+
List splitted = splitArray(treatments);
- for (JSONArray part: splitted) {
+ for (JSONArray part : splitted) {
Bundle bundle = new Bundle();
bundle.putString("treatments", part.toString());
bundle.putBoolean("delta", isDelta);
Intent intent = new Intent(Intents.ACTION_CHANGED_TREATMENT);
intent.putExtras(bundle);
intent.addFlags(Intent.FLAG_INCLUDE_STOPPED_PACKAGES);
- context.sendBroadcast(intent);
- List x = context.getPackageManager().queryBroadcastReceivers(intent, 0);
+ LocalBroadcastManager.getInstance(MainApp.instance()).sendBroadcast(intent);
+ }
- log.debug("TREAT_CHANGE " + part.length() + " " + x.size() + " receivers");
+ if(SP.getBoolean(R.string.key_nsclient_localbroadcasts, true)) {
+ splitted = splitArray(treatments);
+ for (JSONArray part : splitted) {
+ Bundle bundle = new Bundle();
+ bundle.putString("treatments", part.toString());
+ bundle.putBoolean("delta", isDelta);
+ Intent intent = new Intent(Intents.ACTION_CHANGED_TREATMENT);
+ intent.putExtras(bundle);
+ intent.addFlags(Intent.FLAG_INCLUDE_STOPPED_PACKAGES);
+ context.sendBroadcast(intent);
+ }
}
}
public static void handleRemovedTreatment(JSONObject treatment, Context context, boolean isDelta) {
+
Bundle bundle = new Bundle();
bundle.putString("treatment", treatment.toString());
bundle.putBoolean("delta", isDelta);
Intent intent = new Intent(Intents.ACTION_REMOVED_TREATMENT);
intent.putExtras(bundle);
intent.addFlags(Intent.FLAG_INCLUDE_STOPPED_PACKAGES);
- context.sendBroadcast(intent);
- List x = context.getPackageManager().queryBroadcastReceivers(intent, 0);
+ LocalBroadcastManager.getInstance(MainApp.instance()).sendBroadcast(intent);
- try {
- log.debug("TREAT_REMOVE " + treatment.getString("_id") + " " + x.size() + " receivers");
- } catch (JSONException e) {
+
+ if(SP.getBoolean(R.string.key_nsclient_localbroadcasts, true)) {
+ bundle = new Bundle();
+ bundle.putString("treatment", treatment.toString());
+ bundle.putBoolean("delta", isDelta);
+ intent = new Intent(Intents.ACTION_REMOVED_TREATMENT);
+ intent.putExtras(bundle);
+ intent.addFlags(Intent.FLAG_INCLUDE_STOPPED_PACKAGES);
+ context.sendBroadcast(intent);
}
}
public static void handleRemovedTreatment(JSONArray treatments, Context context, boolean isDelta) {
+
Bundle bundle = new Bundle();
bundle.putString("treatments", treatments.toString());
bundle.putBoolean("delta", isDelta);
Intent intent = new Intent(Intents.ACTION_REMOVED_TREATMENT);
intent.putExtras(bundle);
intent.addFlags(Intent.FLAG_INCLUDE_STOPPED_PACKAGES);
- context.sendBroadcast(intent);
- List x = context.getPackageManager().queryBroadcastReceivers(intent, 0);
+ LocalBroadcastManager.getInstance(MainApp.instance()).sendBroadcast(intent);
- log.debug("TREAT_REMOVE " + treatments.length() + " treatments " + x.size() + " receivers");
+
+ if(SP.getBoolean(R.string.key_nsclient_localbroadcasts, true)) {
+ bundle = new Bundle();
+ bundle.putString("treatments", treatments.toString());
+ bundle.putBoolean("delta", isDelta);
+ intent = new Intent(Intents.ACTION_REMOVED_TREATMENT);
+ intent.putExtras(bundle);
+ intent.addFlags(Intent.FLAG_INCLUDE_STOPPED_PACKAGES);
+ context.sendBroadcast(intent);
+ }
}
diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/NSClientInternal/broadcasts/BroadcastUrgentAlarm.java b/app/src/main/java/info/nightscout/androidaps/plugins/NSClientInternal/broadcasts/BroadcastUrgentAlarm.java
index 10d0f068f5..c332be03af 100644
--- a/app/src/main/java/info/nightscout/androidaps/plugins/NSClientInternal/broadcasts/BroadcastUrgentAlarm.java
+++ b/app/src/main/java/info/nightscout/androidaps/plugins/NSClientInternal/broadcasts/BroadcastUrgentAlarm.java
@@ -4,6 +4,7 @@ import android.content.Context;
import android.content.Intent;
import android.content.pm.ResolveInfo;
import android.os.Bundle;
+import android.support.v4.content.LocalBroadcastManager;
import org.json.JSONObject;
import org.slf4j.Logger;
@@ -11,7 +12,10 @@ import org.slf4j.LoggerFactory;
import java.util.List;
+import info.nightscout.androidaps.MainApp;
+import info.nightscout.androidaps.R;
import info.nightscout.androidaps.Services.Intents;
+import info.nightscout.utils.SP;
/**
* Created by mike on 26.06.2016.
@@ -25,9 +29,15 @@ public class BroadcastUrgentAlarm {
Intent intent = new Intent(Intents.ACTION_URGENT_ALARM);
intent.putExtras(bundle);
intent.addFlags(Intent.FLAG_INCLUDE_STOPPED_PACKAGES);
- context.sendBroadcast(intent);
- List x = context.getPackageManager().queryBroadcastReceivers(intent, 0);
+ LocalBroadcastManager.getInstance(MainApp.instance()).sendBroadcast(intent);
- log.debug("URGENTALARM " + x.size() + " receivers");
+ if(SP.getBoolean(R.string.key_nsclient_localbroadcasts, true)) {
+ bundle = new Bundle();
+ bundle.putString("data", urgentalarm.toString());
+ intent = new Intent(Intents.ACTION_URGENT_ALARM);
+ intent.putExtras(bundle);
+ intent.addFlags(Intent.FLAG_INCLUDE_STOPPED_PACKAGES);
+ context.sendBroadcast(intent);
+ }
}
}
diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/NSClientInternal/data/NSSettingsStatus.java b/app/src/main/java/info/nightscout/androidaps/plugins/NSClientInternal/data/NSSettingsStatus.java
index 3201d62f6e..4980b342e9 100644
--- a/app/src/main/java/info/nightscout/androidaps/plugins/NSClientInternal/data/NSSettingsStatus.java
+++ b/app/src/main/java/info/nightscout/androidaps/plugins/NSClientInternal/data/NSSettingsStatus.java
@@ -207,8 +207,6 @@ public class NSSettingsStatus {
return ret;
}
- ;
-
private Integer getIntegerOrNull(String key) {
Integer ret = null;
if (data.has(key)) {
@@ -221,8 +219,6 @@ public class NSSettingsStatus {
return ret;
}
- ;
-
private Long getLongOrNull(String key) {
Long ret = null;
if (data.has(key)) {
@@ -235,8 +231,6 @@ public class NSSettingsStatus {
return ret;
}
- ;
-
private Date getDateOrNull(String key) {
Date ret = null;
if (data.has(key)) {
@@ -249,8 +243,6 @@ public class NSSettingsStatus {
return ret;
}
- ;
-
private boolean getBooleanOrNull(String key) {
boolean ret = false;
if (data.has(key)) {
diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/NSClientInternal/data/NSSgv.java b/app/src/main/java/info/nightscout/androidaps/plugins/NSClientInternal/data/NSSgv.java
index c8666f4306..78ddc7a8f7 100644
--- a/app/src/main/java/info/nightscout/androidaps/plugins/NSClientInternal/data/NSSgv.java
+++ b/app/src/main/java/info/nightscout/androidaps/plugins/NSClientInternal/data/NSSgv.java
@@ -24,7 +24,7 @@ public class NSSgv {
}
}
return ret;
- };
+ }
private Integer getIntegerOrNull(String key) {
Integer ret = null;
@@ -36,7 +36,7 @@ public class NSSgv {
}
}
return ret;
- };
+ }
private Long getLongOrNull(String key) {
Long ret = null;
@@ -48,7 +48,7 @@ public class NSSgv {
}
}
return ret;
- };
+ }
public JSONObject getData () { return data; }
public Integer getMgdl () { return getIntegerOrNull("mgdl"); }
diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/NSClientInternal/data/NSTreatment.java b/app/src/main/java/info/nightscout/androidaps/plugins/NSClientInternal/data/NSTreatment.java
index 7430caf600..1b48f27e2f 100644
--- a/app/src/main/java/info/nightscout/androidaps/plugins/NSClientInternal/data/NSTreatment.java
+++ b/app/src/main/java/info/nightscout/androidaps/plugins/NSClientInternal/data/NSTreatment.java
@@ -25,7 +25,7 @@ public class NSTreatment {
}
}
return ret;
- };
+ }
private Double getDoubleOrNull(String key) {
Double ret = null;
@@ -37,7 +37,7 @@ public class NSTreatment {
}
}
return ret;
- };
+ }
private Integer getIntegerOrNull(String key) {
Integer ret = null;
@@ -49,7 +49,7 @@ public class NSTreatment {
}
}
return ret;
- };
+ }
private Long getLongOrNull(String key) {
Long ret = null;
@@ -61,7 +61,7 @@ public class NSTreatment {
}
}
return ret;
- };
+ }
private Date getDateOrNull(String key) {
Date ret = null;
@@ -73,7 +73,7 @@ public class NSTreatment {
}
}
return ret;
- };
+ }
public String getAction() { return action; }
public JSONObject getData() { return data; }
diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/OpenAPSAMA/DetermineBasalResultAMA.java b/app/src/main/java/info/nightscout/androidaps/plugins/OpenAPSAMA/DetermineBasalResultAMA.java
index c086ff2cd5..c2a55ff894 100644
--- a/app/src/main/java/info/nightscout/androidaps/plugins/OpenAPSAMA/DetermineBasalResultAMA.java
+++ b/app/src/main/java/info/nightscout/androidaps/plugins/OpenAPSAMA/DetermineBasalResultAMA.java
@@ -43,7 +43,7 @@ public class DetermineBasalResultAMA extends APSResult {
}
if (result.contains("duration")) {
duration = result.getInteger("duration");
- changeRequested = changeRequested;
+ //changeRequested as above
} else {
duration = -1;
changeRequested = false;
diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/OpenAPSAMA/OpenAPSAMAFragment.java b/app/src/main/java/info/nightscout/androidaps/plugins/OpenAPSAMA/OpenAPSAMAFragment.java
index c480ebfe3c..419a55f057 100644
--- a/app/src/main/java/info/nightscout/androidaps/plugins/OpenAPSAMA/OpenAPSAMAFragment.java
+++ b/app/src/main/java/info/nightscout/androidaps/plugins/OpenAPSAMA/OpenAPSAMAFragment.java
@@ -20,11 +20,12 @@ import org.slf4j.LoggerFactory;
import info.nightscout.androidaps.MainApp;
import info.nightscout.androidaps.R;
+import info.nightscout.androidaps.plugins.Common.SubscriberFragment;
import info.nightscout.androidaps.plugins.OpenAPSMA.events.EventOpenAPSUpdateGui;
import info.nightscout.androidaps.plugins.OpenAPSMA.events.EventOpenAPSUpdateResultGui;
import info.nightscout.utils.JSONFormatter;
-public class OpenAPSAMAFragment extends Fragment implements View.OnClickListener {
+public class OpenAPSAMAFragment extends SubscriberFragment implements View.OnClickListener {
private static Logger log = LoggerFactory.getLogger(OpenAPSAMAFragment.class);
private static OpenAPSAMAPlugin openAPSAMAPlugin;
@@ -81,18 +82,6 @@ public class OpenAPSAMAFragment extends Fragment implements View.OnClickListener
}
- @Override
- public void onPause() {
- super.onPause();
- MainApp.bus().unregister(this);
- }
-
- @Override
- public void onResume() {
- super.onResume();
- MainApp.bus().register(this);
- }
-
@Subscribe
public void onStatusEvent(final EventOpenAPSUpdateGui ev) {
updateGUI();
@@ -103,7 +92,8 @@ public class OpenAPSAMAFragment extends Fragment implements View.OnClickListener
updateResultGUI(ev.text);
}
- void updateGUI() {
+ @Override
+ protected void updateGUI() {
Activity activity = getActivity();
if (activity != null)
activity.runOnUiThread(new Runnable() {
diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/OpenAPSMA/DetermineBasalResultMA.java b/app/src/main/java/info/nightscout/androidaps/plugins/OpenAPSMA/DetermineBasalResultMA.java
index cb0e67249f..a0cd1a75b0 100644
--- a/app/src/main/java/info/nightscout/androidaps/plugins/OpenAPSMA/DetermineBasalResultMA.java
+++ b/app/src/main/java/info/nightscout/androidaps/plugins/OpenAPSMA/DetermineBasalResultMA.java
@@ -41,7 +41,7 @@ public class DetermineBasalResultMA extends APSResult {
}
if (result.contains("duration")) {
duration = result.getInteger("duration");
- changeRequested = changeRequested;
+ //changeRequested as above
} else {
duration = -1;
changeRequested = false;
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 16249dffc3..90bfc301b1 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
@@ -18,11 +18,12 @@ import org.slf4j.LoggerFactory;
import info.nightscout.androidaps.MainApp;
import info.nightscout.androidaps.R;
+import info.nightscout.androidaps.plugins.Common.SubscriberFragment;
import info.nightscout.androidaps.plugins.OpenAPSMA.events.EventOpenAPSUpdateGui;
import info.nightscout.androidaps.plugins.OpenAPSMA.events.EventOpenAPSUpdateResultGui;
import info.nightscout.utils.JSONFormatter;
-public class OpenAPSMAFragment extends Fragment implements View.OnClickListener {
+public class OpenAPSMAFragment extends SubscriberFragment implements View.OnClickListener {
private static Logger log = LoggerFactory.getLogger(OpenAPSMAFragment.class);
private static OpenAPSMAPlugin openAPSMAPlugin;
@@ -75,18 +76,6 @@ public class OpenAPSMAFragment extends Fragment implements View.OnClickListener
}
- @Override
- public void onPause() {
- super.onPause();
- MainApp.bus().unregister(this);
- }
-
- @Override
- public void onResume() {
- super.onResume();
- MainApp.bus().register(this);
- }
-
@Subscribe
public void onStatusEvent(final EventOpenAPSUpdateGui ev) {
updateGUI();
@@ -97,7 +86,8 @@ public class OpenAPSMAFragment extends Fragment implements View.OnClickListener
updateResultGUI(ev.text);
}
- void updateGUI() {
+ @Override
+ protected void updateGUI() {
Activity activity = getActivity();
if (activity != null)
activity.runOnUiThread(new Runnable() {
@@ -123,7 +113,7 @@ public class OpenAPSMAFragment extends Fragment implements View.OnClickListener
});
}
- void updateResultGUI(final String text) {
+ private void updateResultGUI(final String text) {
Activity activity = getActivity();
if (activity != null)
activity.runOnUiThread(new Runnable() {
diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/Overview/Dialogs/WizardDialog.java b/app/src/main/java/info/nightscout/androidaps/plugins/Overview/Dialogs/WizardDialog.java
index 0a1b5417a8..c68bbb19d7 100644
--- a/app/src/main/java/info/nightscout/androidaps/plugins/Overview/Dialogs/WizardDialog.java
+++ b/app/src/main/java/info/nightscout/androidaps/plugins/Overview/Dialogs/WizardDialog.java
@@ -213,9 +213,7 @@ public class WizardDialog extends DialogFragment implements OnClickListener, Com
bgTrendInsulin = (TextView) view.findViewById(R.id.treatments_wizard_bgtrendinsulin);
cobLayout = (LinearLayout) view.findViewById(R.id.treatments_wizard_cob_layout);
cob = (TextView) view.findViewById(R.id.treatments_wizard_cob);
- ;
cobInsulin = (TextView) view.findViewById(R.id.treatments_wizard_cobinsulin);
- ;
bgCheckbox = (CheckBox) view.findViewById(R.id.treatments_wizard_bgcheckbox);
bolusIobCheckbox = (CheckBox) view.findViewById(R.id.treatments_wizard_bolusiobcheckbox);
@@ -315,6 +313,7 @@ public class WizardDialog extends DialogFragment implements OnClickListener, Com
activeloop.superBolusTo(System.currentTimeMillis() + 2 * 60L * 60 * 1000);
MainApp.bus().post(new EventRefreshOverview("WizardDialog"));
}
+ pump.cancelTempBasal(true);
result = pump.setTempBasalAbsolute(0d, 120);
if (!result.success) {
OKDialog.show(getActivity(), MainApp.sResources.getString(R.string.tempbasaldeliveryerror), result.comment, null);
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 1e830effea..ce796c840e 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
@@ -175,7 +175,6 @@ public class OverviewFragment extends Fragment implements View.OnClickListener,
LinearLayoutManager llm;
LinearLayout acceptTempLayout;
- Button cancelTempButton;
Button treatmentButton;
Button wizardButton;
Button calibrationButton;
@@ -269,9 +268,6 @@ public class OverviewFragment extends Fragment implements View.OnClickListener,
bgGraph = (GraphView) view.findViewById(R.id.overview_bggraph);
iobGraph = (GraphView) view.findViewById(R.id.overview_iobgraph);
- cancelTempButton = (Button) view.findViewById(R.id.overview_canceltempbutton);
- if (cancelTempButton != null)
- cancelTempButton.setOnClickListener(this);
treatmentButton = (Button) view.findViewById(R.id.overview_treatmentbutton);
treatmentButton.setOnClickListener(this);
wizardButton = (Button) view.findViewById(R.id.overview_wizardbutton);
@@ -415,7 +411,7 @@ public class OverviewFragment extends Fragment implements View.OnClickListener,
sHandler.post(new Runnable() {
@Override
public void run() {
- PumpEnactResult result = MainApp.getConfigBuilder().cancelTempBasal();
+ PumpEnactResult result = MainApp.getConfigBuilder().cancelTempBasal(true);
if (!result.success) {
ToastUtils.showToastInUiThread(MainApp.instance().getApplicationContext(), MainApp.sResources.getString(R.string.tempbasaldeliveryerror));
}
@@ -436,7 +432,7 @@ public class OverviewFragment extends Fragment implements View.OnClickListener,
sHandler.post(new Runnable() {
@Override
public void run() {
- PumpEnactResult result = MainApp.getConfigBuilder().cancelTempBasal();
+ PumpEnactResult result = MainApp.getConfigBuilder().cancelTempBasal(true);
if (!result.success) {
ToastUtils.showToastInUiThread(MainApp.instance().getApplicationContext(), MainApp.sResources.getString(R.string.tempbasaldeliveryerror));
}
@@ -450,7 +446,7 @@ public class OverviewFragment extends Fragment implements View.OnClickListener,
sHandler.post(new Runnable() {
@Override
public void run() {
- PumpEnactResult result = MainApp.getConfigBuilder().cancelTempBasal();
+ PumpEnactResult result = MainApp.getConfigBuilder().cancelTempBasal(true);
if (!result.success) {
ToastUtils.showToastInUiThread(MainApp.instance().getApplicationContext(), MainApp.sResources.getString(R.string.tempbasaldeliveryerror));
}
@@ -464,7 +460,7 @@ public class OverviewFragment extends Fragment implements View.OnClickListener,
sHandler.post(new Runnable() {
@Override
public void run() {
- PumpEnactResult result = MainApp.getConfigBuilder().cancelTempBasal();
+ PumpEnactResult result = MainApp.getConfigBuilder().cancelTempBasal(true);
if (!result.success) {
ToastUtils.showToastInUiThread(MainApp.instance().getApplicationContext(), MainApp.sResources.getString(R.string.tempbasaldeliveryerror));
}
@@ -478,7 +474,7 @@ public class OverviewFragment extends Fragment implements View.OnClickListener,
sHandler.post(new Runnable() {
@Override
public void run() {
- PumpEnactResult result = MainApp.getConfigBuilder().cancelTempBasal();
+ PumpEnactResult result = MainApp.getConfigBuilder().cancelTempBasal(true);
if (!result.success) {
ToastUtils.showToastInUiThread(MainApp.instance().getApplicationContext(), MainApp.sResources.getString(R.string.tempbasaldeliveryerror));
}
@@ -492,7 +488,7 @@ public class OverviewFragment extends Fragment implements View.OnClickListener,
sHandler.post(new Runnable() {
@Override
public void run() {
- PumpEnactResult result = MainApp.getConfigBuilder().cancelTempBasal();
+ PumpEnactResult result = MainApp.getConfigBuilder().cancelTempBasal(true);
if (!result.success) {
ToastUtils.showToastInUiThread(MainApp.instance().getApplicationContext(), MainApp.sResources.getString(R.string.tempbasaldeliveryerror));
}
@@ -506,6 +502,7 @@ public class OverviewFragment extends Fragment implements View.OnClickListener,
sHandler.post(new Runnable() {
@Override
public void run() {
+ MainApp.getConfigBuilder().cancelTempBasal(true);
PumpEnactResult result = MainApp.getConfigBuilder().setTempBasalAbsolute(0d, 30);
if (!result.success) {
ToastUtils.showToastInUiThread(MainApp.instance().getApplicationContext(), MainApp.sResources.getString(R.string.tempbasaldeliveryerror));
@@ -520,6 +517,7 @@ public class OverviewFragment extends Fragment implements View.OnClickListener,
sHandler.post(new Runnable() {
@Override
public void run() {
+ MainApp.getConfigBuilder().cancelTempBasal(true);
PumpEnactResult result = MainApp.getConfigBuilder().setTempBasalAbsolute(0d, 60);
if (!result.success) {
ToastUtils.showToastInUiThread(MainApp.instance().getApplicationContext(), MainApp.sResources.getString(R.string.tempbasaldeliveryerror));
@@ -534,6 +532,7 @@ public class OverviewFragment extends Fragment implements View.OnClickListener,
sHandler.post(new Runnable() {
@Override
public void run() {
+ MainApp.getConfigBuilder().cancelTempBasal(true);
PumpEnactResult result = MainApp.getConfigBuilder().setTempBasalAbsolute(0d, 2 * 60);
if (!result.success) {
ToastUtils.showToastInUiThread(MainApp.instance().getApplicationContext(), MainApp.sResources.getString(R.string.tempbasaldeliveryerror));
@@ -548,6 +547,7 @@ public class OverviewFragment extends Fragment implements View.OnClickListener,
sHandler.post(new Runnable() {
@Override
public void run() {
+ MainApp.getConfigBuilder().cancelTempBasal(true);
PumpEnactResult result = MainApp.getConfigBuilder().setTempBasalAbsolute(0d, 3 * 60);
if (!result.success) {
ToastUtils.showToastInUiThread(MainApp.instance().getApplicationContext(), MainApp.sResources.getString(R.string.tempbasaldeliveryerror));
@@ -583,18 +583,6 @@ public class OverviewFragment extends Fragment implements View.OnClickListener,
NewTreatmentDialog treatmentDialogFragment = new NewTreatmentDialog();
treatmentDialogFragment.show(manager, "TreatmentDialog");
break;
- case R.id.overview_canceltempbutton:
- final PumpInterface pump = MainApp.getConfigBuilder();
- if (MainApp.getConfigBuilder().isTempBasalInProgress()) {
- sHandler.post(new Runnable() {
- @Override
- public void run() {
- pump.cancelTempBasal();
- Answers.getInstance().logCustom(new CustomEvent("CancelTemp"));
- }
- });
- }
- break;
case R.id.overview_pumpstatus:
if (MainApp.getConfigBuilder().isSuspended() || !MainApp.getConfigBuilder().isInitialized())
sHandler.post(new Runnable() {
@@ -1010,15 +998,6 @@ public class OverviewFragment extends Fragment implements View.OnClickListener,
}
final TemporaryBasal activeTemp = MainApp.getConfigBuilder().getTempBasalFromHistory(System.currentTimeMillis());
- if (cancelTempButton != null) {
- if (activeTemp != null) {
- cancelTempButton.setVisibility(View.VISIBLE);
- cancelTempButton.setText(MainApp.instance().getString(R.string.cancel) + "\n" + activeTemp.toStringShort());
- } else {
- cancelTempButton.setVisibility(View.GONE);
- }
- }
-
String basalText = "";
if (shorttextmode) {
if (activeTemp != null) {
@@ -1047,6 +1026,13 @@ public class OverviewFragment extends Fragment implements View.OnClickListener,
basalText += "(" + DecimalFormatter.to2Decimal(pump.getBaseBasalRate()) + "U/h)";
}
}
+ if (activeTemp != null) {
+ baseBasalView.setTextColor(MainApp.sResources.getColor(R.color.basal));
+ } else {
+ baseBasalView.setTextColor(Color.WHITE);
+
+ }
+
baseBasalView.setText(basalText);
final ExtendedBolus extendedBolus = MainApp.getConfigBuilder().getExtendedBolusFromHistory(System.currentTimeMillis());
diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/ProfileCircadianPercentage/CircadianPercentageProfileFragment.java b/app/src/main/java/info/nightscout/androidaps/plugins/ProfileCircadianPercentage/CircadianPercentageProfileFragment.java
index c70a66850f..c42f1d0c64 100644
--- a/app/src/main/java/info/nightscout/androidaps/plugins/ProfileCircadianPercentage/CircadianPercentageProfileFragment.java
+++ b/app/src/main/java/info/nightscout/androidaps/plugins/ProfileCircadianPercentage/CircadianPercentageProfileFragment.java
@@ -39,10 +39,11 @@ import info.nightscout.androidaps.interfaces.PumpInterface;
import info.nightscout.androidaps.plugins.Careportal.CareportalFragment;
import info.nightscout.androidaps.plugins.Careportal.Dialogs.NewNSTreatmentDialog;
import info.nightscout.androidaps.plugins.Careportal.OptionsToShow;
+import info.nightscout.androidaps.plugins.Common.SubscriberFragment;
import info.nightscout.utils.DecimalFormatter;
import info.nightscout.utils.SafeParse;
-public class CircadianPercentageProfileFragment extends Fragment {
+public class CircadianPercentageProfileFragment extends SubscriberFragment {
private static Logger log = LoggerFactory.getLogger(CircadianPercentageProfileFragment.class);
private static CircadianPercentageProfilePlugin circadianPercentageProfilePlugin = new CircadianPercentageProfilePlugin();
@@ -309,16 +310,14 @@ public class CircadianPercentageProfileFragment extends Fragment {
percentageView.addTextChangedListener(textWatch);
timeshiftView.addTextChangedListener(textWatch);
- updateGui();
+ updateGUI();
onStatusEvent(new EventInitializationChanged());
return layout;
}
- public void updateGui() {
-
-
+ public void updateGUI() {
updateProfileInfo();
diaView.removeTextChangedListener(textWatch);
@@ -434,7 +433,6 @@ public class CircadianPercentageProfileFragment extends Fragment {
if (i == 0) {
copyprevbutton.setVisibility(View.INVISIBLE);
- ;
} else {
final int j = i; //needs to be final to be passed to inner class.
copyprevbutton.setOnClickListener(new View.OnClickListener() {
@@ -485,15 +483,12 @@ public class CircadianPercentageProfileFragment extends Fragment {
}
basalEditDialog = null;
- MainApp.bus().unregister(this);
fl.requestFocusFromTouch();
}
@Override
public void onResume() {
super.onResume();
- updateGui();
- MainApp.bus().register(this);
onStatusEvent(new EventInitializationChanged());
fl.requestFocusFromTouch();
}
@@ -521,7 +516,7 @@ public class CircadianPercentageProfileFragment extends Fragment {
activity.runOnUiThread(new Runnable() {
@Override
public void run() {
- updateGui();
+ updateGUI();
}
});
}
diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/ProfileLocal/LocalProfileFragment.java b/app/src/main/java/info/nightscout/androidaps/plugins/ProfileLocal/LocalProfileFragment.java
index 97f32e232a..7161a1d9de 100644
--- a/app/src/main/java/info/nightscout/androidaps/plugins/ProfileLocal/LocalProfileFragment.java
+++ b/app/src/main/java/info/nightscout/androidaps/plugins/ProfileLocal/LocalProfileFragment.java
@@ -27,10 +27,11 @@ import info.nightscout.androidaps.interfaces.PumpInterface;
import info.nightscout.androidaps.plugins.Careportal.CareportalFragment;
import info.nightscout.androidaps.plugins.Careportal.Dialogs.NewNSTreatmentDialog;
import info.nightscout.androidaps.plugins.Careportal.OptionsToShow;
+import info.nightscout.androidaps.plugins.Common.SubscriberFragment;
import info.nightscout.utils.SafeParse;
import info.nightscout.utils.TimeListEdit;
-public class LocalProfileFragment extends Fragment {
+public class LocalProfileFragment extends SubscriberFragment {
private static Logger log = LoggerFactory.getLogger(LocalProfileFragment.class);
private static LocalProfilePlugin localProfilePlugin = new LocalProfilePlugin();
@@ -73,7 +74,7 @@ public class LocalProfileFragment extends Fragment {
layout.findViewById(R.id.localprofile_basal).setVisibility(View.GONE);
}
- onStatusEvent(null);
+ updateGUI();
mgdlView.setChecked(localProfilePlugin.mgdl);
mmolView.setChecked(localProfilePlugin.mmol);
@@ -130,26 +131,18 @@ public class LocalProfileFragment extends Fragment {
diaView.addTextChangedListener(textWatch);
- onStatusEvent(null);
+ updateGUI();
return layout;
}
- @Override
- public void onPause() {
- super.onPause();
- MainApp.bus().unregister(this);
- }
-
- @Override
- public void onResume() {
- super.onResume();
- MainApp.bus().register(this);
- onStatusEvent(null);
- }
-
@Subscribe
public void onStatusEvent(final EventInitializationChanged e) {
+ updateGUI();
+ }
+
+ @Override
+ protected void updateGUI() {
Activity activity = getActivity();
if (activity != null)
activity.runOnUiThread(new Runnable() {
diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/ProfileNS/NSProfileFragment.java b/app/src/main/java/info/nightscout/androidaps/plugins/ProfileNS/NSProfileFragment.java
index f765fe6ed1..c8b5b2c5db 100644
--- a/app/src/main/java/info/nightscout/androidaps/plugins/ProfileNS/NSProfileFragment.java
+++ b/app/src/main/java/info/nightscout/androidaps/plugins/ProfileNS/NSProfileFragment.java
@@ -13,10 +13,11 @@ import com.squareup.otto.Subscribe;
import info.nightscout.androidaps.MainApp;
import info.nightscout.androidaps.R;
import info.nightscout.androidaps.data.Profile;
+import info.nightscout.androidaps.plugins.Common.SubscriberFragment;
import info.nightscout.androidaps.plugins.ProfileNS.events.EventNSProfileUpdateGUI;
import info.nightscout.utils.DecimalFormatter;
-public class NSProfileFragment extends Fragment {
+public class NSProfileFragment extends SubscriberFragment {
private static NSProfilePlugin nsProfilePlugin = new NSProfilePlugin();
public static NSProfilePlugin getPlugin() {
@@ -50,18 +51,6 @@ public class NSProfileFragment extends Fragment {
return layout;
}
- @Override
- public void onPause() {
- super.onPause();
- MainApp.bus().unregister(this);
- }
-
- @Override
- public void onResume() {
- super.onResume();
- MainApp.bus().register(this);
- }
-
@Subscribe
public void onStatusEvent(final EventNSProfileUpdateGUI ev) {
Activity activity = getActivity();
@@ -74,7 +63,8 @@ public class NSProfileFragment extends Fragment {
});
}
- private void updateGUI() {
+ @Override
+ protected void updateGUI() {
if (MainApp.getConfigBuilder().getProfile() == null) {
noProfile.setVisibility(View.VISIBLE);
return;
diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/ProfileSimple/SimpleProfileFragment.java b/app/src/main/java/info/nightscout/androidaps/plugins/ProfileSimple/SimpleProfileFragment.java
index 7d1f829849..a4e3a8eecf 100644
--- a/app/src/main/java/info/nightscout/androidaps/plugins/ProfileSimple/SimpleProfileFragment.java
+++ b/app/src/main/java/info/nightscout/androidaps/plugins/ProfileSimple/SimpleProfileFragment.java
@@ -25,9 +25,10 @@ import info.nightscout.androidaps.interfaces.PumpInterface;
import info.nightscout.androidaps.plugins.Careportal.CareportalFragment;
import info.nightscout.androidaps.plugins.Careportal.Dialogs.NewNSTreatmentDialog;
import info.nightscout.androidaps.plugins.Careportal.OptionsToShow;
+import info.nightscout.androidaps.plugins.Common.SubscriberFragment;
import info.nightscout.utils.SafeParse;
-public class SimpleProfileFragment extends Fragment {
+public class SimpleProfileFragment extends SubscriberFragment {
private static Logger log = LoggerFactory.getLogger(SimpleProfileFragment.class);
private static SimpleProfilePlugin simpleProfilePlugin = new SimpleProfilePlugin();
@@ -66,7 +67,7 @@ public class SimpleProfileFragment extends Fragment {
layout.findViewById(R.id.simpleprofile_basalrate_label).setVisibility(View.GONE);
}
- onStatusEvent(null);
+ updateGUI();
mgdlView.setChecked(simpleProfilePlugin.mgdl);
mmolView.setChecked(simpleProfilePlugin.mmol);
@@ -138,26 +139,18 @@ public class SimpleProfileFragment extends Fragment {
targetlowView.addTextChangedListener(textWatch);
targethighView.addTextChangedListener(textWatch);
- onStatusEvent(null);
+ updateGUI();
return layout;
}
- @Override
- public void onPause() {
- super.onPause();
- MainApp.bus().unregister(this);
- }
-
- @Override
- public void onResume() {
- super.onResume();
- MainApp.bus().register(this);
- onStatusEvent(null);
- }
-
@Subscribe
public void onStatusEvent(final EventInitializationChanged e) {
+ updateGUI();
+ }
+
+ @Override
+ protected void updateGUI() {
Activity activity = getActivity();
if (activity != null)
activity.runOnUiThread(new Runnable() {
diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/PumpDanaR/DanaRFragment.java b/app/src/main/java/info/nightscout/androidaps/plugins/PumpDanaR/DanaRFragment.java
index 1780b1a53f..87c635cbef 100644
--- a/app/src/main/java/info/nightscout/androidaps/plugins/PumpDanaR/DanaRFragment.java
+++ b/app/src/main/java/info/nightscout/androidaps/plugins/PumpDanaR/DanaRFragment.java
@@ -27,6 +27,7 @@ import info.nightscout.androidaps.R;
import info.nightscout.androidaps.events.EventExtendedBolusChange;
import info.nightscout.androidaps.events.EventPumpStatusChanged;
import info.nightscout.androidaps.events.EventTempBasalChange;
+import info.nightscout.androidaps.plugins.Common.SubscriberFragment;
import info.nightscout.androidaps.plugins.PumpDanaR.Dialogs.ProfileViewDialog;
import info.nightscout.androidaps.plugins.PumpDanaR.activities.DanaRHistoryActivity;
import info.nightscout.androidaps.plugins.PumpDanaR.activities.DanaRStatsActivity;
@@ -35,7 +36,7 @@ import info.nightscout.utils.DateUtil;
import info.nightscout.utils.DecimalFormatter;
import info.nightscout.utils.SetWarnColor;
-public class DanaRFragment extends Fragment {
+public class DanaRFragment extends SubscriberFragment {
private static Logger log = LoggerFactory.getLogger(DanaRFragment.class);
private static DanaRPlugin danaRPlugin;
@@ -156,18 +157,6 @@ public class DanaRFragment extends Fragment {
return view;
}
- @Override
- public void onPause() {
- super.onPause();
- MainApp.bus().unregister(this);
- }
-
- @Override
- public void onResume() {
- super.onResume();
- MainApp.bus().register(this);
- }
-
@Subscribe
public void onStatusEvent(final EventPumpStatusChanged c) {
Activity activity = getActivity();
@@ -204,7 +193,8 @@ public class DanaRFragment extends Fragment {
}
// GUI functions
- private void updateGUI() {
+ @Override
+ protected void updateGUI() {
Activity activity = getActivity();
if (activity != null && basaBasalRateView != null)
activity.runOnUiThread(new Runnable() {
diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/PumpDanaR/DanaRPlugin.java b/app/src/main/java/info/nightscout/androidaps/plugins/PumpDanaR/DanaRPlugin.java
index 7ee13df40c..7ed4345093 100644
--- a/app/src/main/java/info/nightscout/androidaps/plugins/PumpDanaR/DanaRPlugin.java
+++ b/app/src/main/java/info/nightscout/androidaps/plugins/PumpDanaR/DanaRPlugin.java
@@ -566,7 +566,7 @@ public class DanaRPlugin implements PluginBase, PumpInterface, DanaRInterface, C
}
@Override
- public PumpEnactResult cancelTempBasal() {
+ public PumpEnactResult cancelTempBasal(boolean userRequested) {
if (MainApp.getConfigBuilder().isInHistoryRealTempBasalInProgress())
return cancelRealTempBasal();
if (MainApp.getConfigBuilder().isInHistoryExtendedBoluslInProgress() && useExtendedBoluses) {
diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/PumpDanaRKorean/DanaRKoreanFragment.java b/app/src/main/java/info/nightscout/androidaps/plugins/PumpDanaRKorean/DanaRKoreanFragment.java
index 02e7e5ba24..50ec8883c6 100644
--- a/app/src/main/java/info/nightscout/androidaps/plugins/PumpDanaRKorean/DanaRKoreanFragment.java
+++ b/app/src/main/java/info/nightscout/androidaps/plugins/PumpDanaRKorean/DanaRKoreanFragment.java
@@ -27,6 +27,7 @@ import info.nightscout.androidaps.R;
import info.nightscout.androidaps.events.EventExtendedBolusChange;
import info.nightscout.androidaps.events.EventPumpStatusChanged;
import info.nightscout.androidaps.events.EventTempBasalChange;
+import info.nightscout.androidaps.plugins.Common.SubscriberFragment;
import info.nightscout.androidaps.plugins.PumpDanaR.DanaRPump;
import info.nightscout.androidaps.plugins.PumpDanaR.Dialogs.ProfileViewDialog;
import info.nightscout.androidaps.plugins.PumpDanaR.activities.DanaRHistoryActivity;
@@ -36,7 +37,7 @@ import info.nightscout.utils.DateUtil;
import info.nightscout.utils.DecimalFormatter;
import info.nightscout.utils.SetWarnColor;
-public class DanaRKoreanFragment extends Fragment {
+public class DanaRKoreanFragment extends SubscriberFragment {
private static Logger log = LoggerFactory.getLogger(DanaRKoreanFragment.class);
private static DanaRKoreanPlugin danaRKoreanPlugin = new DanaRKoreanPlugin();
@@ -154,18 +155,6 @@ public class DanaRKoreanFragment extends Fragment {
return view;
}
- @Override
- public void onPause() {
- super.onPause();
- MainApp.bus().unregister(this);
- }
-
- @Override
- public void onResume() {
- super.onResume();
- MainApp.bus().register(this);
- }
-
@Subscribe
public void onStatusEvent(final EventPumpStatusChanged c) {
Activity activity = getActivity();
@@ -202,7 +191,8 @@ public class DanaRKoreanFragment extends Fragment {
}
// GUI functions
- private void updateGUI() {
+ @Override
+ protected void updateGUI() {
Activity activity = getActivity();
if (activity != null && basaBasalRateView != null)
diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/PumpDanaRKorean/DanaRKoreanPlugin.java b/app/src/main/java/info/nightscout/androidaps/plugins/PumpDanaRKorean/DanaRKoreanPlugin.java
index c3bd70c155..e3b6bf3598 100644
--- a/app/src/main/java/info/nightscout/androidaps/plugins/PumpDanaRKorean/DanaRKoreanPlugin.java
+++ b/app/src/main/java/info/nightscout/androidaps/plugins/PumpDanaRKorean/DanaRKoreanPlugin.java
@@ -570,7 +570,7 @@ public class DanaRKoreanPlugin implements PluginBase, PumpInterface, DanaRInterf
}
@Override
- public PumpEnactResult cancelTempBasal() {
+ public PumpEnactResult cancelTempBasal(boolean userRequested) {
if (MainApp.getConfigBuilder().isInHistoryRealTempBasalInProgress())
return cancelRealTempBasal();
if (MainApp.getConfigBuilder().isInHistoryExtendedBoluslInProgress() && useExtendedBoluses) {
diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/PumpDanaRv2/DanaRv2Fragment.java b/app/src/main/java/info/nightscout/androidaps/plugins/PumpDanaRv2/DanaRv2Fragment.java
index 9e87d45dca..7b92be30d8 100644
--- a/app/src/main/java/info/nightscout/androidaps/plugins/PumpDanaRv2/DanaRv2Fragment.java
+++ b/app/src/main/java/info/nightscout/androidaps/plugins/PumpDanaRv2/DanaRv2Fragment.java
@@ -27,6 +27,7 @@ import info.nightscout.androidaps.R;
import info.nightscout.androidaps.events.EventExtendedBolusChange;
import info.nightscout.androidaps.events.EventPumpStatusChanged;
import info.nightscout.androidaps.events.EventTempBasalChange;
+import info.nightscout.androidaps.plugins.Common.SubscriberFragment;
import info.nightscout.androidaps.plugins.PumpDanaR.DanaRPump;
import info.nightscout.androidaps.plugins.PumpDanaR.Dialogs.ProfileViewDialog;
import info.nightscout.androidaps.plugins.PumpDanaR.activities.DanaRHistoryActivity;
@@ -36,7 +37,7 @@ import info.nightscout.utils.DateUtil;
import info.nightscout.utils.DecimalFormatter;
import info.nightscout.utils.SetWarnColor;
-public class DanaRv2Fragment extends Fragment {
+public class DanaRv2Fragment extends SubscriberFragment {
private static Logger log = LoggerFactory.getLogger(DanaRv2Fragment.class);
private static DanaRv2Plugin danaRPlugin;
@@ -153,18 +154,6 @@ public class DanaRv2Fragment extends Fragment {
return view;
}
- @Override
- public void onPause() {
- super.onPause();
- MainApp.bus().unregister(this);
- }
-
- @Override
- public void onResume() {
- super.onResume();
- MainApp.bus().register(this);
- }
-
@Subscribe
public void onStatusEvent(final EventPumpStatusChanged c) {
Activity activity = getActivity();
@@ -201,7 +190,8 @@ public class DanaRv2Fragment extends Fragment {
}
// GUI functions
- private void updateGUI() {
+ @Override
+ protected void updateGUI() {
Activity activity = getActivity();
if (activity != null && basaBasalRateView != null)
activity.runOnUiThread(new Runnable() {
diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/PumpDanaRv2/DanaRv2Plugin.java b/app/src/main/java/info/nightscout/androidaps/plugins/PumpDanaRv2/DanaRv2Plugin.java
index 7a0eca5da3..bb944b1165 100644
--- a/app/src/main/java/info/nightscout/androidaps/plugins/PumpDanaRv2/DanaRv2Plugin.java
+++ b/app/src/main/java/info/nightscout/androidaps/plugins/PumpDanaRv2/DanaRv2Plugin.java
@@ -340,7 +340,7 @@ public class DanaRv2Plugin implements PluginBase, PumpInterface, DanaRInterface,
if (MainApp.getConfigBuilder().isTempBasalInProgress()) {
if (Config.logPumpActions)
log.debug("setTempBasalAbsolute: Stopping temp basal (doTempOff)");
- return cancelTempBasal();
+ return cancelTempBasal(false);
}
result.success = true;
result.enacted = false;
@@ -507,7 +507,7 @@ public class DanaRv2Plugin implements PluginBase, PumpInterface, DanaRInterface,
}
@Override
- public PumpEnactResult cancelTempBasal() {
+ public PumpEnactResult cancelTempBasal(boolean userRequested) {
PumpEnactResult result = new PumpEnactResult();
if (pump.isTempBasalInProgress) {
sExecutionService.tempBasalStop();
diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/PumpMDI/MDIPlugin.java b/app/src/main/java/info/nightscout/androidaps/plugins/PumpMDI/MDIPlugin.java
index b51a0bb66e..ddd05a2e0b 100644
--- a/app/src/main/java/info/nightscout/androidaps/plugins/PumpMDI/MDIPlugin.java
+++ b/app/src/main/java/info/nightscout/androidaps/plugins/PumpMDI/MDIPlugin.java
@@ -196,7 +196,7 @@ public class MDIPlugin implements PluginBase, PumpInterface {
}
@Override
- public PumpEnactResult cancelTempBasal() {
+ public PumpEnactResult cancelTempBasal(boolean userRequested) {
PumpEnactResult result = new PumpEnactResult();
result.success = false;
result.comment = MainApp.instance().getString(R.string.pumperror);
diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/PumpVirtual/VirtualPumpFragment.java b/app/src/main/java/info/nightscout/androidaps/plugins/PumpVirtual/VirtualPumpFragment.java
index f1e709e329..b479183b80 100644
--- a/app/src/main/java/info/nightscout/androidaps/plugins/PumpVirtual/VirtualPumpFragment.java
+++ b/app/src/main/java/info/nightscout/androidaps/plugins/PumpVirtual/VirtualPumpFragment.java
@@ -5,7 +5,6 @@ import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.support.annotation.Nullable;
-import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
@@ -16,13 +15,12 @@ import com.squareup.otto.Subscribe;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import java.util.Date;
-
import info.nightscout.androidaps.MainApp;
import info.nightscout.androidaps.R;
+import info.nightscout.androidaps.plugins.Common.SubscriberFragment;
import info.nightscout.androidaps.plugins.PumpVirtual.events.EventVirtualPumpUpdateGui;
-public class VirtualPumpFragment extends Fragment {
+public class VirtualPumpFragment extends SubscriberFragment {
private static Logger log = LoggerFactory.getLogger(VirtualPumpFragment.class);
TextView basaBasalRateView;
@@ -59,35 +57,23 @@ public class VirtualPumpFragment extends Fragment {
batteryView = (TextView) view.findViewById(R.id.virtualpump_battery);
reservoirView = (TextView) view.findViewById(R.id.virtualpump_reservoir);
- updateGUI();
return view;
}
- @Override
- public void onPause() {
- super.onPause();
- MainApp.bus().unregister(this);
- }
-
- @Override
- public void onResume() {
- super.onResume();
- MainApp.bus().register(this);
- }
-
@Subscribe
public void onStatusEvent(final EventVirtualPumpUpdateGui ev) {
updateGUI();
}
- public void updateGUI() {
+ @Override
+ protected void updateGUI() {
Activity activity = getActivity();
if (activity != null && basaBasalRateView != null)
activity.runOnUiThread(new Runnable() {
@Override
public void run() {
-
- basaBasalRateView.setText(VirtualPumpPlugin.getInstance().getBaseBasalRate() + "U");
+ VirtualPumpPlugin virtualPump = VirtualPumpPlugin.getInstance();
+ basaBasalRateView.setText(virtualPump.getBaseBasalRate() + "U");
if (MainApp.getConfigBuilder().isTempBasalInProgress()) {
tempBasalView.setText(MainApp.getConfigBuilder().getTempBasalFromHistory(System.currentTimeMillis()).toStringFull());
} else {
@@ -98,8 +84,8 @@ public class VirtualPumpFragment extends Fragment {
} else {
extendedBolusView.setText("");
}
- batteryView.setText(VirtualPumpPlugin.getInstance().batteryPercent + "%");
- reservoirView.setText(VirtualPumpPlugin.getInstance().reservoirInUnits + "U");
+ batteryView.setText(virtualPump.batteryPercent + "%");
+ reservoirView.setText(virtualPump.reservoirInUnits + "U");
}
});
}
diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/PumpVirtual/VirtualPumpPlugin.java b/app/src/main/java/info/nightscout/androidaps/plugins/PumpVirtual/VirtualPumpPlugin.java
index b42d1abfd6..7337859c47 100644
--- a/app/src/main/java/info/nightscout/androidaps/plugins/PumpVirtual/VirtualPumpPlugin.java
+++ b/app/src/main/java/info/nightscout/androidaps/plugins/PumpVirtual/VirtualPumpPlugin.java
@@ -204,7 +204,11 @@ public class VirtualPumpPlugin implements PluginBase, PumpInterface {
@Override
public double getBaseBasalRate() {
- return MainApp.getConfigBuilder().getProfile().getBasal();
+ Profile profile = MainApp.getConfigBuilder().getProfile();
+ if (profile != null)
+ return profile.getBasal();
+ else
+ return 0d;
}
@Override
@@ -282,7 +286,7 @@ public class VirtualPumpPlugin implements PluginBase, PumpInterface {
TreatmentsInterface treatmentsInterface = MainApp.getConfigBuilder();
PumpEnactResult result = new PumpEnactResult();
if (MainApp.getConfigBuilder().isTempBasalInProgress()) {
- result = cancelTempBasal();
+ result = cancelTempBasal(false);
if (!result.success)
return result;
}
@@ -333,7 +337,7 @@ public class VirtualPumpPlugin implements PluginBase, PumpInterface {
}
@Override
- public PumpEnactResult cancelTempBasal() {
+ public PumpEnactResult cancelTempBasal(boolean userRequested) {
TreatmentsInterface treatmentsInterface = MainApp.getConfigBuilder();
PumpEnactResult result = new PumpEnactResult();
result.success = true;
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 83973e83ff..09a635bf86 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
@@ -20,13 +20,14 @@ import java.util.Comparator;
import info.nightscout.androidaps.MainApp;
import info.nightscout.androidaps.R;
+import info.nightscout.androidaps.plugins.Common.SubscriberFragment;
import info.nightscout.androidaps.plugins.SmsCommunicator.events.EventSmsCommunicatorUpdateGui;
import info.nightscout.utils.DateUtil;
/**
* A simple {@link Fragment} subclass.
*/
-public class SmsCommunicatorFragment extends Fragment {
+public class SmsCommunicatorFragment extends SubscriberFragment {
private static Logger log = LoggerFactory.getLogger(SmsCommunicatorFragment.class);
private static SmsCommunicatorPlugin smsCommunicatorPlugin;
@@ -56,25 +57,14 @@ public class SmsCommunicatorFragment extends Fragment {
return view;
}
- @Override
- public void onPause() {
- super.onPause();
- MainApp.bus().unregister(this);
- }
-
- @Override
- public void onResume() {
- super.onResume();
- MainApp.bus().register(this);
- }
-
@Subscribe
public void onStatusEvent(final EventSmsCommunicatorUpdateGui ev) {
updateGUI();
}
- private void updateGUI() {
+ @Override
+ protected void updateGUI() {
Activity activity = getActivity();
if (activity != null)
activity.runOnUiThread(new Runnable() {
diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/SmsCommunicator/SmsCommunicatorPlugin.java b/app/src/main/java/info/nightscout/androidaps/plugins/SmsCommunicator/SmsCommunicatorPlugin.java
index ad8679beee..8e5e3bde46 100644
--- a/app/src/main/java/info/nightscout/androidaps/plugins/SmsCommunicator/SmsCommunicatorPlugin.java
+++ b/app/src/main/java/info/nightscout/androidaps/plugins/SmsCommunicator/SmsCommunicatorPlugin.java
@@ -272,7 +272,7 @@ public class SmsCommunicatorPlugin implements PluginBase {
LoopPlugin loopPlugin = (LoopPlugin) MainApp.getSpecificPlugin(LoopPlugin.class);
if (loopPlugin != null && loopPlugin.isEnabled(PluginBase.LOOP)) {
loopPlugin.setFragmentEnabled(PluginBase.LOOP, false);
- PumpEnactResult result = MainApp.getConfigBuilder().cancelTempBasal();
+ PumpEnactResult result = MainApp.getConfigBuilder().cancelTempBasal(true);
MainApp.bus().post(new EventRefreshOverview("SMS_LOOP_STOP"));
reply = MainApp.sResources.getString(R.string.smscommunicator_loophasbeendisabled)+ " " +
MainApp.sResources.getString(result.success?R.string.smscommunicator_tempbasalcanceled:R.string.smscommunicator_tempbasalcancelfailed);
@@ -506,7 +506,7 @@ public class SmsCommunicatorPlugin implements PluginBase {
PumpInterface pumpInterface = MainApp.getConfigBuilder();
if (pumpInterface != null) {
danaRPlugin = (DanaRPlugin) MainApp.getSpecificPlugin(DanaRPlugin.class);
- PumpEnactResult result = pumpInterface.cancelTempBasal();
+ PumpEnactResult result = pumpInterface.cancelTempBasal(true);
if (result.success) {
reply = MainApp.sResources.getString(R.string.smscommunicator_tempbasalcanceled);
if (danaRPlugin != null)
@@ -535,7 +535,7 @@ public class SmsCommunicatorPlugin implements PluginBase {
suspendWaitingForConfirmation.processed = true;
final LoopPlugin activeloop = ConfigBuilderPlugin.getActiveLoop();
activeloop.suspendTo(System.currentTimeMillis() + suspendWaitingForConfirmation.duration * 60L * 1000);
- PumpEnactResult result = MainApp.getConfigBuilder().cancelTempBasal();
+ PumpEnactResult result = MainApp.getConfigBuilder().cancelTempBasal(true);
NSUpload.uploadOpenAPSOffline(suspendWaitingForConfirmation.duration * 60);
MainApp.bus().post(new EventRefreshOverview("SMS_LOOP_SUSPENDED"));
reply = MainApp.sResources.getString(R.string.smscommunicator_loopsuspended) + " " +
diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/SmsCommunicator/Events/EventNewSMS.java b/app/src/main/java/info/nightscout/androidaps/plugins/SmsCommunicator/events/EventNewSMS.java
similarity index 100%
rename from app/src/main/java/info/nightscout/androidaps/plugins/SmsCommunicator/Events/EventNewSMS.java
rename to app/src/main/java/info/nightscout/androidaps/plugins/SmsCommunicator/events/EventNewSMS.java
diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/Treatments/TreatmentsPlugin.java b/app/src/main/java/info/nightscout/androidaps/plugins/Treatments/TreatmentsPlugin.java
index d7a2c26bc7..8a999cbcd6 100644
--- a/app/src/main/java/info/nightscout/androidaps/plugins/Treatments/TreatmentsPlugin.java
+++ b/app/src/main/java/info/nightscout/androidaps/plugins/Treatments/TreatmentsPlugin.java
@@ -8,7 +8,6 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.ArrayList;
-import java.util.Date;
import java.util.List;
import info.nightscout.androidaps.Config;
@@ -19,6 +18,8 @@ import info.nightscout.androidaps.data.DetailedBolusInfo;
import info.nightscout.androidaps.data.Iob;
import info.nightscout.androidaps.data.IobTotal;
import info.nightscout.androidaps.data.MealData;
+import info.nightscout.androidaps.data.Intervals;
+import info.nightscout.androidaps.data.NonOverlappingIntervals;
import info.nightscout.androidaps.data.OverlappingIntervals;
import info.nightscout.androidaps.data.Profile;
import info.nightscout.androidaps.data.ProfileIntervals;
@@ -48,9 +49,9 @@ public class TreatmentsPlugin implements PluginBase, TreatmentsInterface {
public static IobTotal lastTempBasalsCalculation;
public static List treatments;
- private static OverlappingIntervals tempBasals = new OverlappingIntervals<>();
- private static OverlappingIntervals extendedBoluses = new OverlappingIntervals<>();
- private static OverlappingIntervals tempTargets = new OverlappingIntervals<>();
+ private static Intervals tempBasals = new NonOverlappingIntervals();
+ private static Intervals extendedBoluses = new NonOverlappingIntervals();
+ private static Intervals tempTargets = new OverlappingIntervals();
private static ProfileIntervals profiles = new ProfileIntervals<>();
private static boolean fragmentEnabled = true;
@@ -187,11 +188,13 @@ public class TreatmentsPlugin implements PluginBase, TreatmentsInterface {
}
if (!MainApp.getConfigBuilder().isFakingTempsByExtendedBoluses())
- for (Integer pos = 0; pos < extendedBoluses.size(); pos++) {
- ExtendedBolus e = extendedBoluses.get(pos);
- if (e.date > time) continue;
- IobTotal calc = e.iobCalc(time);
- total.plus(calc);
+ synchronized (extendedBoluses) {
+ for (Integer pos = 0; pos < extendedBoluses.size(); pos++) {
+ ExtendedBolus e = extendedBoluses.get(pos);
+ if (e.date > time) continue;
+ IobTotal calc = e.iobCalc(time);
+ total.plus(calc);
+ }
}
return total;
}
@@ -291,20 +294,24 @@ public class TreatmentsPlugin implements PluginBase, TreatmentsInterface {
@Override
public IobTotal getCalculationToTimeTempBasals(long time) {
IobTotal total = new IobTotal(time);
- for (Integer pos = 0; pos < tempBasals.size(); pos++) {
- TemporaryBasal t = tempBasals.get(pos);
- if (t.date > time) continue;
- IobTotal calc = t.iobCalc(time);
- //log.debug("BasalIOB " + new Date(time) + " >>> " + calc.basaliob);
- total.plus(calc);
+ synchronized (tempBasals) {
+ for (Integer pos = 0; pos < tempBasals.size(); pos++) {
+ TemporaryBasal t = tempBasals.get(pos);
+ if (t.date > time) continue;
+ IobTotal calc = t.iobCalc(time);
+ //log.debug("BasalIOB " + new Date(time) + " >>> " + calc.basaliob);
+ total.plus(calc);
+ }
}
if (MainApp.getConfigBuilder().isFakingTempsByExtendedBoluses()) {
IobTotal totalExt = new IobTotal(time);
- for (Integer pos = 0; pos < extendedBoluses.size(); pos++) {
- ExtendedBolus e = extendedBoluses.get(pos);
- if (e.date > time) continue;
- IobTotal calc = e.iobCalc(time);
- totalExt.plus(calc);
+ synchronized (extendedBoluses) {
+ for (Integer pos = 0; pos < extendedBoluses.size(); pos++) {
+ ExtendedBolus e = extendedBoluses.get(pos);
+ if (e.date > time) continue;
+ IobTotal calc = e.iobCalc(time);
+ totalExt.plus(calc);
+ }
}
// Convert to basal iob
totalExt.basaliob = totalExt.iob;
@@ -347,7 +354,7 @@ public class TreatmentsPlugin implements PluginBase, TreatmentsInterface {
}
@Override
- public OverlappingIntervals getExtendedBolusesFromHistory() {
+ public Intervals getExtendedBolusesFromHistory() {
return extendedBoluses;
}
@@ -380,7 +387,7 @@ public class TreatmentsPlugin implements PluginBase, TreatmentsInterface {
}
@Override
- public OverlappingIntervals getTemporaryBasalsFromHistory() {
+ public Intervals getTemporaryBasalsFromHistory() {
return tempBasals;
}
@@ -419,12 +426,18 @@ public class TreatmentsPlugin implements PluginBase, TreatmentsInterface {
@Override
public long oldestDataAvailable() {
long oldestTime = System.currentTimeMillis();
- if (tempBasals.size() > 0)
- oldestTime = Math.min(oldestTime, tempBasals.get(0).date);
- if (extendedBoluses.size() > 0)
- oldestTime = Math.min(oldestTime, extendedBoluses.get(0).date);
- if (treatments.size() > 0)
- oldestTime = Math.min(oldestTime, treatments.get(treatments.size() - 1).date);
+ synchronized (tempBasals) {
+ if (tempBasals.size() > 0)
+ oldestTime = Math.min(oldestTime, tempBasals.get(0).date);
+ }
+ synchronized (extendedBoluses) {
+ if (extendedBoluses.size() > 0)
+ oldestTime = Math.min(oldestTime, extendedBoluses.get(0).date);
+ }
+ synchronized (treatments) {
+ if (treatments.size() > 0)
+ oldestTime = Math.min(oldestTime, treatments.get(treatments.size() - 1).date);
+ }
oldestTime -= 15 * 60 * 1000L; // allow 15 min before
return oldestTime;
}
@@ -442,7 +455,7 @@ public class TreatmentsPlugin implements PluginBase, TreatmentsInterface {
}
@Override
- public OverlappingIntervals getTempTargetsFromHistory() {
+ public Intervals getTempTargetsFromHistory() {
return tempTargets;
}
diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/Treatments/fragments/TreatmentsBolusFragment.java b/app/src/main/java/info/nightscout/androidaps/plugins/Treatments/fragments/TreatmentsBolusFragment.java
index c0e763ee90..0e7d94cd88 100644
--- a/app/src/main/java/info/nightscout/androidaps/plugins/Treatments/fragments/TreatmentsBolusFragment.java
+++ b/app/src/main/java/info/nightscout/androidaps/plugins/Treatments/fragments/TreatmentsBolusFragment.java
@@ -37,13 +37,14 @@ import info.nightscout.androidaps.db.Treatment;
import info.nightscout.androidaps.events.EventNewBG;
import info.nightscout.androidaps.events.EventTreatmentChange;
import info.nightscout.androidaps.data.Profile;
+import info.nightscout.androidaps.plugins.Common.SubscriberFragment;
import info.nightscout.androidaps.plugins.Treatments.TreatmentsPlugin;
import info.nightscout.utils.DateUtil;
import info.nightscout.utils.DecimalFormatter;
import info.nightscout.utils.NSUpload;
import info.nightscout.utils.SP;
-public class TreatmentsBolusFragment extends Fragment implements View.OnClickListener {
+public class TreatmentsBolusFragment extends SubscriberFragment implements View.OnClickListener {
private static Logger log = LoggerFactory.getLogger(TreatmentsBolusFragment.class);
RecyclerView recyclerView;
@@ -205,19 +206,6 @@ public class TreatmentsBolusFragment extends Fragment implements View.OnClickLis
}
}
- @Override
- public void onPause() {
- super.onPause();
- MainApp.bus().unregister(this);
- }
-
- @Override
- public void onResume() {
- super.onResume();
- MainApp.bus().register(this);
- updateGUI();
- }
-
@Subscribe
public void onStatusEvent(final EventTreatmentChange ev) {
updateGUI();
@@ -228,7 +216,8 @@ public class TreatmentsBolusFragment extends Fragment implements View.OnClickLis
updateGUI();
}
- public void updateGUI() {
+ @Override
+ protected void updateGUI() {
Activity activity = getActivity();
if (activity != null)
activity.runOnUiThread(new Runnable() {
diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/Treatments/fragments/TreatmentsExtendedBolusesFragment.java b/app/src/main/java/info/nightscout/androidaps/plugins/Treatments/fragments/TreatmentsExtendedBolusesFragment.java
index 0acbf4b2c5..eb3bd49d89 100644
--- a/app/src/main/java/info/nightscout/androidaps/plugins/Treatments/fragments/TreatmentsExtendedBolusesFragment.java
+++ b/app/src/main/java/info/nightscout/androidaps/plugins/Treatments/fragments/TreatmentsExtendedBolusesFragment.java
@@ -23,8 +23,6 @@ import com.squareup.otto.Subscribe;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import java.util.Date;
-
import info.nightscout.androidaps.MainApp;
import info.nightscout.androidaps.R;
import info.nightscout.androidaps.data.IobTotal;
@@ -32,13 +30,14 @@ import info.nightscout.androidaps.db.ExtendedBolus;
import info.nightscout.androidaps.db.Source;
import info.nightscout.androidaps.events.EventExtendedBolusChange;
import info.nightscout.androidaps.events.EventNewBG;
+import info.nightscout.androidaps.plugins.Common.SubscriberFragment;
import info.nightscout.utils.DateUtil;
import info.nightscout.utils.DecimalFormatter;
import info.nightscout.utils.NSUpload;
-import info.nightscout.androidaps.data.OverlappingIntervals;
+import info.nightscout.androidaps.data.Intervals;
-public class TreatmentsExtendedBolusesFragment extends Fragment {
+public class TreatmentsExtendedBolusesFragment extends SubscriberFragment {
private static Logger log = LoggerFactory.getLogger(TreatmentsExtendedBolusesFragment.class);
RecyclerView recyclerView;
@@ -48,9 +47,9 @@ public class TreatmentsExtendedBolusesFragment extends Fragment {
public class RecyclerViewAdapter extends RecyclerView.Adapter {
- OverlappingIntervals extendedBolusList;
+ Intervals extendedBolusList;
- RecyclerViewAdapter(OverlappingIntervals extendedBolusList) {
+ RecyclerViewAdapter(Intervals extendedBolusList) {
this.extendedBolusList = extendedBolusList;
}
@@ -183,18 +182,6 @@ public class TreatmentsExtendedBolusesFragment extends Fragment {
return view;
}
- @Override
- public void onPause() {
- super.onPause();
- MainApp.bus().unregister(this);
- }
-
- @Override
- public void onResume() {
- super.onResume();
- MainApp.bus().register(this);
- }
-
@Subscribe
public void onStatusEvent(final EventExtendedBolusChange ev) {
updateGUI();
@@ -205,7 +192,8 @@ public class TreatmentsExtendedBolusesFragment extends Fragment {
updateGUI();
}
- public void updateGUI() {
+ @Override
+ protected void updateGUI() {
Activity activity = getActivity();
if (activity != null && recyclerView != null)
activity.runOnUiThread(new Runnable() {
diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/Treatments/fragments/TreatmentsProfileSwitchFragment.java b/app/src/main/java/info/nightscout/androidaps/plugins/Treatments/fragments/TreatmentsProfileSwitchFragment.java
index 344abd8346..e5c1134787 100644
--- a/app/src/main/java/info/nightscout/androidaps/plugins/Treatments/fragments/TreatmentsProfileSwitchFragment.java
+++ b/app/src/main/java/info/nightscout/androidaps/plugins/Treatments/fragments/TreatmentsProfileSwitchFragment.java
@@ -30,6 +30,7 @@ import info.nightscout.androidaps.db.Source;
import info.nightscout.androidaps.db.TempTarget;
import info.nightscout.androidaps.events.EventProfileSwitchChange;
import info.nightscout.androidaps.events.EventTempTargetChange;
+import info.nightscout.androidaps.plugins.Common.SubscriberFragment;
import info.nightscout.utils.DateUtil;
import info.nightscout.utils.DecimalFormatter;
import info.nightscout.utils.NSUpload;
@@ -40,7 +41,7 @@ import info.nightscout.utils.SP;
* Created by mike on 13/01/17.
*/
-public class TreatmentsProfileSwitchFragment extends Fragment implements View.OnClickListener {
+public class TreatmentsProfileSwitchFragment extends SubscriberFragment implements View.OnClickListener {
RecyclerView recyclerView;
LinearLayoutManager llm;
@@ -180,24 +181,13 @@ public class TreatmentsProfileSwitchFragment extends Fragment implements View.On
}
}
- @Override
- public void onPause() {
- super.onPause();
- MainApp.bus().unregister(this);
- }
-
- @Override
- public void onResume() {
- super.onResume();
- MainApp.bus().register(this);
- }
-
@Subscribe
public void onStatusEvent(final EventProfileSwitchChange ev) {
updateGUI();
}
- void updateGUI() {
+ @Override
+ protected void updateGUI() {
Activity activity = getActivity();
if (activity != null)
activity.runOnUiThread(new Runnable() {
diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/Treatments/fragments/TreatmentsTempTargetFragment.java b/app/src/main/java/info/nightscout/androidaps/plugins/Treatments/fragments/TreatmentsTempTargetFragment.java
index 7a74ca4a86..008c82e612 100644
--- a/app/src/main/java/info/nightscout/androidaps/plugins/Treatments/fragments/TreatmentsTempTargetFragment.java
+++ b/app/src/main/java/info/nightscout/androidaps/plugins/Treatments/fragments/TreatmentsTempTargetFragment.java
@@ -26,18 +26,18 @@ import info.nightscout.androidaps.Services.Intents;
import info.nightscout.androidaps.db.Source;
import info.nightscout.androidaps.db.TempTarget;
import info.nightscout.androidaps.events.EventTempTargetChange;
-import info.nightscout.androidaps.data.Profile;
+import info.nightscout.androidaps.plugins.Common.SubscriberFragment;
import info.nightscout.utils.DateUtil;
import info.nightscout.utils.DecimalFormatter;
import info.nightscout.utils.NSUpload;
-import info.nightscout.androidaps.data.OverlappingIntervals;
+import info.nightscout.androidaps.data.Intervals;
import info.nightscout.utils.SP;
/**
* Created by mike on 13/01/17.
*/
-public class TreatmentsTempTargetFragment extends Fragment implements View.OnClickListener {
+public class TreatmentsTempTargetFragment extends SubscriberFragment implements View.OnClickListener {
RecyclerView recyclerView;
LinearLayoutManager llm;
@@ -47,10 +47,12 @@ public class TreatmentsTempTargetFragment extends Fragment implements View.OnCli
public class RecyclerViewAdapter extends RecyclerView.Adapter {
- OverlappingIntervals tempTargetList;
+ Intervals tempTargetList;
+ TempTarget currentlyActiveTarget;
- RecyclerViewAdapter(OverlappingIntervals TempTargetList) {
+ RecyclerViewAdapter(Intervals TempTargetList) {
this.tempTargetList = TempTargetList;
+ currentlyActiveTarget = tempTargetList.getValueByInterval(System.currentTimeMillis());
}
@Override
@@ -81,10 +83,18 @@ public class TreatmentsTempTargetFragment extends Fragment implements View.OnCli
holder.reasonLabel.setText("");
holder.reasonColon.setText("");
}
- if (tempTarget.isInProgress())
- holder.date.setTextColor(ContextCompat.getColor(MainApp.instance(), R.color.colorActive));
- else
+ if (tempTarget.isInProgress()) {
+ if(tempTarget == currentlyActiveTarget){
+ // active as newest
+ holder.date.setTextColor(ContextCompat.getColor(MainApp.instance(), R.color.colorInProgress));
+ } else {
+ // other's that might become active again after the latest (overlapping) is over
+ holder.date.setTextColor(ContextCompat.getColor(MainApp.instance(), R.color.colorActive));
+ }
+ }
+ else {
holder.date.setTextColor(holder.reasonColon.getCurrentTextColor());
+ }
holder.remove.setTag(tempTarget);
}
@@ -201,24 +211,13 @@ public class TreatmentsTempTargetFragment extends Fragment implements View.OnCli
}
- @Override
- public void onPause() {
- super.onPause();
- MainApp.bus().unregister(this);
- }
-
- @Override
- public void onResume() {
- super.onResume();
- MainApp.bus().register(this);
- }
-
@Subscribe
public void onStatusEvent(final EventTempTargetChange ev) {
updateGUI();
}
- void updateGUI() {
+ @Override
+ protected void updateGUI() {
Activity activity = getActivity();
if (activity != null)
activity.runOnUiThread(new Runnable() {
diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/Treatments/fragments/TreatmentsTemporaryBasalsFragment.java b/app/src/main/java/info/nightscout/androidaps/plugins/Treatments/fragments/TreatmentsTemporaryBasalsFragment.java
index 8db8a9c67b..9127bf1e7a 100644
--- a/app/src/main/java/info/nightscout/androidaps/plugins/Treatments/fragments/TreatmentsTemporaryBasalsFragment.java
+++ b/app/src/main/java/info/nightscout/androidaps/plugins/Treatments/fragments/TreatmentsTemporaryBasalsFragment.java
@@ -23,8 +23,6 @@ import com.squareup.otto.Subscribe;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import java.util.Date;
-
import info.nightscout.androidaps.MainApp;
import info.nightscout.androidaps.R;
import info.nightscout.androidaps.data.IobTotal;
@@ -32,13 +30,14 @@ import info.nightscout.androidaps.db.Source;
import info.nightscout.androidaps.db.TemporaryBasal;
import info.nightscout.androidaps.events.EventNewBG;
import info.nightscout.androidaps.events.EventTempBasalChange;
+import info.nightscout.androidaps.plugins.Common.SubscriberFragment;
import info.nightscout.utils.DateUtil;
import info.nightscout.utils.DecimalFormatter;
import info.nightscout.utils.NSUpload;
-import info.nightscout.androidaps.data.OverlappingIntervals;
+import info.nightscout.androidaps.data.Intervals;
-public class TreatmentsTemporaryBasalsFragment extends Fragment {
+public class TreatmentsTemporaryBasalsFragment extends SubscriberFragment {
private static Logger log = LoggerFactory.getLogger(TreatmentsTemporaryBasalsFragment.class);
RecyclerView recyclerView;
@@ -50,9 +49,9 @@ public class TreatmentsTemporaryBasalsFragment extends Fragment {
public class RecyclerViewAdapter extends RecyclerView.Adapter {
- OverlappingIntervals tempBasalList;
+ Intervals tempBasalList;
- RecyclerViewAdapter(OverlappingIntervals tempBasalList) {
+ RecyclerViewAdapter(Intervals tempBasalList) {
this.tempBasalList = tempBasalList;
}
@@ -202,18 +201,6 @@ public class TreatmentsTemporaryBasalsFragment extends Fragment {
return view;
}
- @Override
- public void onPause() {
- super.onPause();
- MainApp.bus().unregister(this);
- }
-
- @Override
- public void onResume() {
- super.onResume();
- MainApp.bus().register(this);
- }
-
@Subscribe
public void onStatusEvent(final EventTempBasalChange ev) {
updateGUI();
@@ -224,7 +211,8 @@ public class TreatmentsTemporaryBasalsFragment extends Fragment {
updateGUI();
}
- public void updateGUI() {
+ @Override
+ protected void updateGUI() {
Activity activity = getActivity();
if (activity != null)
activity.runOnUiThread(new Runnable() {
diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/Wear/ActionStringHandler.java b/app/src/main/java/info/nightscout/androidaps/plugins/Wear/ActionStringHandler.java
index 98634e0a06..2db941e1c5 100644
--- a/app/src/main/java/info/nightscout/androidaps/plugins/Wear/ActionStringHandler.java
+++ b/app/src/main/java/info/nightscout/androidaps/plugins/Wear/ActionStringHandler.java
@@ -4,8 +4,14 @@ import android.os.Handler;
import android.os.HandlerThread;
import android.support.annotation.NonNull;
+import java.text.DateFormat;
import java.text.DecimalFormat;
+import java.text.SimpleDateFormat;
+import java.util.Collections;
+import java.util.Comparator;
import java.util.Date;
+import java.util.LinkedList;
+import java.util.List;
import info.nightscout.androidaps.BuildConfig;
import info.nightscout.androidaps.Config;
@@ -15,17 +21,25 @@ import info.nightscout.androidaps.R;
import info.nightscout.androidaps.data.DetailedBolusInfo;
import info.nightscout.androidaps.data.PumpEnactResult;
import info.nightscout.androidaps.db.BgReading;
+import info.nightscout.androidaps.db.DanaRHistoryRecord;
import info.nightscout.androidaps.db.DatabaseHelper;
import info.nightscout.androidaps.db.Source;
import info.nightscout.androidaps.db.TempTarget;
import info.nightscout.androidaps.interfaces.APSInterface;
+import info.nightscout.androidaps.interfaces.DanaRInterface;
import info.nightscout.androidaps.interfaces.PluginBase;
+import info.nightscout.androidaps.interfaces.PumpInterface;
import info.nightscout.androidaps.plugins.Actions.dialogs.FillDialog;
import info.nightscout.androidaps.plugins.Loop.APSResult;
import info.nightscout.androidaps.plugins.Loop.LoopPlugin;
import info.nightscout.androidaps.data.Profile;
import info.nightscout.androidaps.plugins.Overview.events.EventDismissNotification;
import info.nightscout.androidaps.plugins.ProfileCircadianPercentage.CircadianPercentageProfilePlugin;
+import info.nightscout.androidaps.plugins.PumpDanaR.DanaRPlugin;
+import info.nightscout.androidaps.plugins.PumpDanaR.DanaRPump;
+import info.nightscout.androidaps.plugins.PumpDanaR.comm.RecordTypes;
+import info.nightscout.androidaps.plugins.PumpDanaRKorean.DanaRKoreanPlugin;
+import info.nightscout.androidaps.plugins.PumpDanaRv2.DanaRv2Plugin;
import info.nightscout.utils.BolusWizard;
import info.nightscout.utils.DateUtil;
import info.nightscout.utils.DecimalFormatter;
@@ -157,14 +171,9 @@ public class ActionStringHandler {
rMessage = getPumpStatus();
} else if ("loop".equals(act[1])) {
rTitle += " LOOP";
- rMessage = getLoopStatus();
-
- } else if ("targets".equals(act[1])) {
- rTitle += " TARGETS";
- rMessage = getTargetsStatus();
- } else if ("oapsresult".equals(act[1])) {
- rTitle += " OAPS RESULT";
- rMessage = getOAPSResultStatus();
+ rMessage = "TARGETS:\n" + getTargetsStatus();
+ rMessage += "\n\n" + getLoopStatus();
+ rMessage += "\n\nOAPS RESULT:\n" + getOAPSResultStatus();
}
} else if ("wizard".equals(act[0])) {
@@ -180,6 +189,7 @@ public class ActionStringHandler {
boolean useBG = Boolean.parseBoolean(act[2]);
boolean useBolusIOB = Boolean.parseBoolean(act[3]);
boolean useBasalIOB = Boolean.parseBoolean(act[4]);
+ int percentage = Integer.parseInt(act[5]);
Profile profile = MainApp.getConfigBuilder().getProfile();
if (profile == null) {
@@ -194,7 +204,7 @@ public class ActionStringHandler {
}
DecimalFormat format = new DecimalFormat("0.00");
BolusWizard bolusWizard = new BolusWizard();
- bolusWizard.doCalc(profile, carbsAfterConstraints, 0d, useBG ? bgReading.valueToUnits(profile.getUnits()) : 0d, 0d, useBolusIOB, useBasalIOB, false, false);
+ bolusWizard.doCalc(profile, carbsAfterConstraints, 0d, useBG ? bgReading.valueToUnits(profile.getUnits()) : 0d, 0d, percentage, useBolusIOB, useBasalIOB, false, false);
Double insulinAfterConstraints = MainApp.getConfigBuilder().applyBolusConstraints(bolusWizard.calculatedTotalInsulin);
if (insulinAfterConstraints - bolusWizard.calculatedTotalInsulin != 0) {
@@ -224,6 +234,9 @@ public class ActionStringHandler {
rMessage += "\nBolus IOB: " + format.format(bolusWizard.insulingFromBolusIOB) + "U";
if (useBasalIOB)
rMessage += "\nBasal IOB: " + format.format(bolusWizard.insulingFromBasalsIOB) + "U";
+ if(percentage != 100){
+ rMessage += "\nPercentage: " +format.format(bolusWizard.totalBeforePercentageAdjustment) + "U * " + percentage + "% -> ~" + format.format(bolusWizard.calculatedTotalInsulin) + "U";
+ }
lastBolusWizard = bolusWizard;
@@ -256,6 +269,58 @@ public class ActionStringHandler {
rAction = actionstring;
}
+ } else if("tddstats".equals(act[0])){
+ Object activePump = MainApp.getConfigBuilder().getActivePump();
+ PumpInterface dana = (PumpInterface) MainApp.getSpecificPlugin(DanaRPlugin.class);
+ PumpInterface danaV2 = (PumpInterface) MainApp.getSpecificPlugin(DanaRv2Plugin.class);
+ PumpInterface danaKorean = (PumpInterface) MainApp.getSpecificPlugin(DanaRKoreanPlugin.class);
+
+
+ if((dana == null || dana != activePump) &&
+ (danaV2 == null || danaV2 != activePump) &&
+ (danaKorean == null || danaKorean != activePump)
+ ){
+ sendError("Pump does not support TDDs!");
+ return;
+ } else {
+ // check if DB up to date
+ List dummies = new LinkedList();
+ List historyList = getTDDList(dummies);
+
+ if(isOldData(historyList)){
+ rTitle = "TDD";
+ rAction = "statusmessage";
+ rMessage = "OLD DATA - ";
+
+ //if pump is not busy: try to fetch data
+ final PumpInterface pump = MainApp.getConfigBuilder().getActivePump();
+ if (pump.isBusy()) {
+ rMessage += MainApp.instance().getString(R.string.pumpbusy);
+ } else {
+ rMessage += "trying to fetch data from pump.";
+ Handler handler = new Handler(handlerThread.getLooper());
+ handler.post(new Runnable() {
+ @Override
+ public void run() {
+ ((DanaRInterface)pump).loadHistory(RecordTypes.RECORD_TYPE_DAILY);
+ List dummies = new LinkedList();
+ List historyList = getTDDList(dummies);
+ if(isOldData(historyList)){
+ sendStatusmessage("TDD", "TDD: Still old data! Cannot load from pump.");
+ } else {
+ sendStatusmessage("TDD", generateTDDMessage(historyList, dummies));
+ }
+ }
+ });
+ }
+ } else {
+ // if up to date: prepare, send (check if CPP is activated -> add CPP stats)
+ rTitle = "TDD";
+ rAction = "statusmessage";
+ rMessage = generateTDDMessage(historyList, dummies);
+ }
+ }
+
}
else return;
@@ -266,6 +331,98 @@ public class ActionStringHandler {
lastConfirmActionString = rAction;
}
+ private static String generateTDDMessage(List historyList, List dummies) {
+
+ DateFormat df = new SimpleDateFormat("dd.MM.");
+ String message = "";
+
+ CircadianPercentageProfilePlugin cpp = (CircadianPercentageProfilePlugin) MainApp.getSpecificPlugin(CircadianPercentageProfilePlugin.class);
+ boolean isCPP = (cpp!= null && cpp.isEnabled(PluginBase.PROFILE));
+ double refTDD = 100;
+ if(isCPP) refTDD = cpp.baseBasalSum()*2;
+
+ int i = 0;
+ double sum = 0d;
+ double weighted03 = 0d;
+ double weighted05 = 0d;
+ double weighted07 = 0d;
+
+ Collections.reverse(historyList);
+ for (DanaRHistoryRecord record : historyList) {
+ double tdd = record.recordDailyBolus + record.recordDailyBasal;
+ if (i == 0) {
+ weighted03 = tdd;
+ weighted05 = tdd;
+ weighted07 = tdd;
+
+ } else {
+ weighted07 = (weighted07 * 0.3 + tdd * 0.7);
+ weighted05 = (weighted05 * 0.5 + tdd * 0.5);
+ weighted03 = (weighted03 * 0.7 + tdd * 0.3);
+ }
+ i++;
+ }
+ message += "weighted:\n";
+ message += "0.3: " + DecimalFormatter.to2Decimal(weighted03) + "U " + (isCPP?(DecimalFormatter.to0Decimal(100*weighted03/refTDD) + "%"):"") + "\n";
+ message += "0.5: " + DecimalFormatter.to2Decimal(weighted05) + "U " + (isCPP?(DecimalFormatter.to0Decimal(100*weighted05/refTDD) + "%"):"") + "\n";
+ message += "0.7: " + DecimalFormatter.to2Decimal(weighted07) + "U " + (isCPP?(DecimalFormatter.to0Decimal(100*weighted07/refTDD) + "%"):"") + "\n";
+ message += "\n";
+
+ PumpInterface pump = MainApp.getConfigBuilder().getActivePump();
+ if (pump != null && pump instanceof DanaRPlugin) {
+ double tdd = DanaRPump.getInstance().dailyTotalUnits;
+ message += "Today: " + DecimalFormatter.to2Decimal(tdd) + "U " + (isCPP?(DecimalFormatter.to0Decimal(100*tdd/refTDD) + "%"):"") + "\n";
+ message += "\n";
+ }
+
+ //add TDDs:
+ Collections.reverse(historyList);
+ for (DanaRHistoryRecord record : historyList) {
+ double tdd = record.recordDailyBolus + record.recordDailyBasal;
+ message += df.format(new Date(record.recordDate)) + " " + DecimalFormatter.to2Decimal(tdd) +"U " + (isCPP?(DecimalFormatter.to0Decimal(100*tdd/refTDD) + "%"):"") + (dummies.contains(record)?"x":"") +"\n";
+ }
+ return message;
+ }
+
+ public static boolean isOldData(List historyList) {
+ DateFormat df = new SimpleDateFormat("dd.MM.");
+ return (historyList.size() < 3 || !(df.format(new Date(historyList.get(0).recordDate)).equals(df.format(new Date(System.currentTimeMillis() - 1000 * 60 * 60 * 24)))));
+ }
+
+ @NonNull
+ public static List getTDDList(List returnDummies) {
+ List historyList = MainApp.getDbHelper().getDanaRHistoryRecordsByType(RecordTypes.RECORD_TYPE_DAILY);
+
+ //only use newest 10
+ historyList = historyList.subList(0, Math.min(10, historyList.size()));
+
+ //fill single gaps
+ List dummies = (returnDummies!=null)?returnDummies:(new LinkedList());
+ DateFormat df = new SimpleDateFormat("dd.MM.");
+ for(int i = 0; i < historyList.size()-1; i++){
+ DanaRHistoryRecord elem1 = historyList.get(i);
+ DanaRHistoryRecord elem2 = historyList.get(i+1);
+
+ if (!df.format(new Date(elem1.recordDate)).equals(df.format(new Date(elem2.recordDate + 25*60*60*1000)))){
+ DanaRHistoryRecord dummy = new DanaRHistoryRecord();
+ dummy.recordDate = elem1.recordDate - 24*60*60*1000;
+ dummy.recordDailyBasal = elem1.recordDailyBasal/2;
+ dummy.recordDailyBolus = elem1.recordDailyBolus/2;
+ dummies.add(dummy);
+ elem1.recordDailyBasal /= 2;
+ elem1.recordDailyBolus /= 2;
+ }
+ }
+ historyList.addAll(dummies);
+ Collections.sort(historyList, new Comparator() {
+ @Override
+ public int compare(DanaRHistoryRecord lhs, DanaRHistoryRecord rhs) {
+ return (int) (rhs.recordDate-lhs.recordDate);
+ }
+ });
+ return historyList;
+ }
+
@NonNull
private static String getPumpStatus() {
return MainApp.getConfigBuilder().shortStatus(false);
@@ -497,6 +654,13 @@ public class ActionStringHandler {
lastBolusWizard = null;
}
+ private synchronized static void sendStatusmessage(String title, String message) {
+ WearFragment.getPlugin(MainApp.instance()).requestActionConfirmation(title, message, "statusmessage");
+ lastSentTimestamp = System.currentTimeMillis();
+ lastConfirmActionString = null;
+ lastBolusWizard = null;
+ }
+
public synchronized static void expectNotificationAction(String message, int id) {
String actionstring = "dismissoverviewnotification " + id;
WearFragment.getPlugin(MainApp.instance()).requestActionConfirmation("DISMISS", message, actionstring);
diff --git a/app/src/main/java/info/nightscout/utils/BolusWizard.java b/app/src/main/java/info/nightscout/utils/BolusWizard.java
index e5af535759..f4eb4907ef 100644
--- a/app/src/main/java/info/nightscout/utils/BolusWizard.java
+++ b/app/src/main/java/info/nightscout/utils/BolusWizard.java
@@ -47,9 +47,14 @@ public class BolusWizard {
// Result
public Double calculatedTotalInsulin = 0d;
+ public Double totalBeforePercentageAdjustment = 0d;
public Double carbsEquivalent = 0d;
public Double doCalc(Profile specificProfile, Integer carbs, Double cob, Double bg, Double correction, Boolean includeBolusIOB, Boolean includeBasalIOB, Boolean superBolus, Boolean trend) {
+ return doCalc(specificProfile, carbs, cob, bg, correction, 100d, includeBolusIOB, includeBasalIOB, superBolus, trend);
+ }
+
+ public Double doCalc(Profile specificProfile, Integer carbs, Double cob, Double bg, Double correction, double percentageCorrection, Boolean includeBolusIOB, Boolean includeBasalIOB, Boolean superBolus, Boolean trend) {
this.specificProfile = specificProfile;
this.carbs = carbs;
this.bg = bg;
@@ -103,7 +108,13 @@ public class BolusWizard {
}
// Total
- calculatedTotalInsulin = insulinFromBG + insulinFromTrend + insulinFromCarbs + insulingFromBolusIOB + insulingFromBasalsIOB + insulinFromCorrection + insulinFromSuperBolus + insulinFromCOB;
+ calculatedTotalInsulin = totalBeforePercentageAdjustment = insulinFromBG + insulinFromTrend + insulinFromCarbs + insulingFromBolusIOB + insulingFromBasalsIOB + insulinFromCorrection + insulinFromSuperBolus + insulinFromCOB;
+
+ //percentage
+ if(totalBeforePercentageAdjustment > 0){
+ calculatedTotalInsulin = totalBeforePercentageAdjustment*percentageCorrection/100d;
+ }
+
if (calculatedTotalInsulin < 0) {
carbsEquivalent = -calculatedTotalInsulin * ic;
diff --git a/app/src/main/java/info/nightscout/utils/NSUpload.java b/app/src/main/java/info/nightscout/utils/NSUpload.java
index 4fa5a0d5e2..aeb1f7181d 100644
--- a/app/src/main/java/info/nightscout/utils/NSUpload.java
+++ b/app/src/main/java/info/nightscout/utils/NSUpload.java
@@ -49,7 +49,6 @@ public class NSUpload {
data.put("pumpId", temporaryBasal.pumpId);
data.put("created_at", DateUtil.toISOString(temporaryBasal.date));
data.put("enteredBy", "openaps://" + MainApp.instance().getString(R.string.app_name));
- data.put("notes", MainApp.sResources.getString(R.string.androidaps_tempbasalstartnote) + " " + temporaryBasal.absoluteRate + "u/h " + temporaryBasal.durationInMinutes + " min"); // ECOR
if (originalExtendedAmount != null)
data.put("originalExtendedAmount", originalExtendedAmount); // for back synchronization
Bundle bundle = new Bundle();
@@ -88,7 +87,6 @@ public class NSUpload {
data.put("pumpId", temporaryBasal.pumpId);
data.put("created_at", DateUtil.toISOString(temporaryBasal.date));
data.put("enteredBy", "openaps://" + MainApp.instance().getString(R.string.app_name));
- data.put("notes", MainApp.sResources.getString(R.string.androidaps_tempbasalstartnote) + " " + temporaryBasal.percentRate + "% " + temporaryBasal.durationInMinutes + " min"); // ECOR
Bundle bundle = new Bundle();
bundle.putString("action", "dbAdd");
bundle.putString("collection", "treatments");
@@ -111,7 +109,6 @@ public class NSUpload {
data.put("eventType", CareportalEvent.TEMPBASAL);
data.put("created_at", DateUtil.toISOString(time));
data.put("enteredBy", "openaps://" + MainApp.instance().getString(R.string.app_name));
- data.put("notes", MainApp.sResources.getString(R.string.androidaps_tempbasalendnote)); // ECOR
if (isFakedTempBasal)
data.put("isFakedTempBasal", isFakedTempBasal);
if (pumpId != 0)
diff --git a/app/src/main/res/drawable-hdpi/icon_actions_cancelextbolus.png b/app/src/main/res/drawable-hdpi/icon_actions_cancelextbolus.png
new file mode 100644
index 0000000000..95761084a9
Binary files /dev/null and b/app/src/main/res/drawable-hdpi/icon_actions_cancelextbolus.png differ
diff --git a/app/src/main/res/drawable-hdpi/icon_actions_profileswitch.png b/app/src/main/res/drawable-hdpi/icon_actions_profileswitch.png
new file mode 100644
index 0000000000..4b36a0cc23
Binary files /dev/null and b/app/src/main/res/drawable-hdpi/icon_actions_profileswitch.png differ
diff --git a/app/src/main/res/drawable-hdpi/icon_actions_refill.png b/app/src/main/res/drawable-hdpi/icon_actions_refill.png
new file mode 100644
index 0000000000..ace25d1558
Binary files /dev/null and b/app/src/main/res/drawable-hdpi/icon_actions_refill.png differ
diff --git a/app/src/main/res/drawable-hdpi/icon_actions_startextbolus.png b/app/src/main/res/drawable-hdpi/icon_actions_startextbolus.png
new file mode 100644
index 0000000000..a67d52838c
Binary files /dev/null and b/app/src/main/res/drawable-hdpi/icon_actions_startextbolus.png differ
diff --git a/app/src/main/res/drawable-hdpi/icon_actions_starttempbasal.png b/app/src/main/res/drawable-hdpi/icon_actions_starttempbasal.png
new file mode 100644
index 0000000000..8772df62a4
Binary files /dev/null and b/app/src/main/res/drawable-hdpi/icon_actions_starttempbasal.png differ
diff --git a/app/src/main/res/drawable-hdpi/icon_actions_temptarget.png b/app/src/main/res/drawable-hdpi/icon_actions_temptarget.png
new file mode 100644
index 0000000000..f839a6894b
Binary files /dev/null and b/app/src/main/res/drawable-hdpi/icon_actions_temptarget.png differ
diff --git a/app/src/main/res/drawable-hdpi/icon_cp_aaps_offline.png b/app/src/main/res/drawable-hdpi/icon_cp_aaps_offline.png
new file mode 100644
index 0000000000..0fe1cd628b
Binary files /dev/null and b/app/src/main/res/drawable-hdpi/icon_cp_aaps_offline.png differ
diff --git a/app/src/main/res/drawable-hdpi/icon_cp_age_battery.png b/app/src/main/res/drawable-hdpi/icon_cp_age_battery.png
new file mode 100644
index 0000000000..abc626901a
Binary files /dev/null and b/app/src/main/res/drawable-hdpi/icon_cp_age_battery.png differ
diff --git a/app/src/main/res/drawable-hdpi/icon_cp_age_canula.png b/app/src/main/res/drawable-hdpi/icon_cp_age_canula.png
new file mode 100644
index 0000000000..ecccc39426
Binary files /dev/null and b/app/src/main/res/drawable-hdpi/icon_cp_age_canula.png differ
diff --git a/app/src/main/res/drawable-hdpi/icon_cp_age_insulin.png b/app/src/main/res/drawable-hdpi/icon_cp_age_insulin.png
new file mode 100644
index 0000000000..ab4d345881
Binary files /dev/null and b/app/src/main/res/drawable-hdpi/icon_cp_age_insulin.png differ
diff --git a/app/src/main/res/drawable-hdpi/icon_cp_age_sensor.png b/app/src/main/res/drawable-hdpi/icon_cp_age_sensor.png
new file mode 100644
index 0000000000..30d5d02de0
Binary files /dev/null and b/app/src/main/res/drawable-hdpi/icon_cp_age_sensor.png differ
diff --git a/app/src/main/res/drawable-hdpi/icon_cp_announcement.png b/app/src/main/res/drawable-hdpi/icon_cp_announcement.png
new file mode 100644
index 0000000000..23c9a9847d
Binary files /dev/null and b/app/src/main/res/drawable-hdpi/icon_cp_announcement.png differ
diff --git a/app/src/main/res/drawable-hdpi/icon_cp_basal_end.png b/app/src/main/res/drawable-hdpi/icon_cp_basal_end.png
new file mode 100644
index 0000000000..b9cdf5cc1f
Binary files /dev/null and b/app/src/main/res/drawable-hdpi/icon_cp_basal_end.png differ
diff --git a/app/src/main/res/drawable-hdpi/icon_cp_basal_start.png b/app/src/main/res/drawable-hdpi/icon_cp_basal_start.png
new file mode 100644
index 0000000000..d79ca15f86
Binary files /dev/null and b/app/src/main/res/drawable-hdpi/icon_cp_basal_start.png differ
diff --git a/app/src/main/res/drawable-hdpi/icon_cp_bgcheck.png b/app/src/main/res/drawable-hdpi/icon_cp_bgcheck.png
new file mode 100644
index 0000000000..56569a264a
Binary files /dev/null and b/app/src/main/res/drawable-hdpi/icon_cp_bgcheck.png differ
diff --git a/app/src/main/res/drawable-hdpi/icon_cp_bolus_carbs.png b/app/src/main/res/drawable-hdpi/icon_cp_bolus_carbs.png
new file mode 100644
index 0000000000..ed6be099aa
Binary files /dev/null and b/app/src/main/res/drawable-hdpi/icon_cp_bolus_carbs.png differ
diff --git a/app/src/main/res/drawable-hdpi/icon_cp_bolus_combo.png b/app/src/main/res/drawable-hdpi/icon_cp_bolus_combo.png
new file mode 100644
index 0000000000..98c076905c
Binary files /dev/null and b/app/src/main/res/drawable-hdpi/icon_cp_bolus_combo.png differ
diff --git a/app/src/main/res/drawable-hdpi/icon_cp_bolus_correction.png b/app/src/main/res/drawable-hdpi/icon_cp_bolus_correction.png
new file mode 100644
index 0000000000..8ad7864406
Binary files /dev/null and b/app/src/main/res/drawable-hdpi/icon_cp_bolus_correction.png differ
diff --git a/app/src/main/res/drawable-hdpi/icon_cp_bolus_meal.png b/app/src/main/res/drawable-hdpi/icon_cp_bolus_meal.png
new file mode 100644
index 0000000000..97dd4e2ed8
Binary files /dev/null and b/app/src/main/res/drawable-hdpi/icon_cp_bolus_meal.png differ
diff --git a/app/src/main/res/drawable-hdpi/icon_cp_bolus_snack.png b/app/src/main/res/drawable-hdpi/icon_cp_bolus_snack.png
new file mode 100644
index 0000000000..710bf6e0da
Binary files /dev/null and b/app/src/main/res/drawable-hdpi/icon_cp_bolus_snack.png differ
diff --git a/app/src/main/res/drawable-hdpi/icon_cp_cgm_insert.png b/app/src/main/res/drawable-hdpi/icon_cp_cgm_insert.png
new file mode 100644
index 0000000000..699be54792
Binary files /dev/null and b/app/src/main/res/drawable-hdpi/icon_cp_cgm_insert.png differ
diff --git a/app/src/main/res/drawable-hdpi/icon_cp_cgm_profile.png b/app/src/main/res/drawable-hdpi/icon_cp_cgm_profile.png
new file mode 100644
index 0000000000..8887e60f27
Binary files /dev/null and b/app/src/main/res/drawable-hdpi/icon_cp_cgm_profile.png differ
diff --git a/app/src/main/res/drawable-hdpi/icon_cp_cgm_start.png b/app/src/main/res/drawable-hdpi/icon_cp_cgm_start.png
new file mode 100644
index 0000000000..e917402c48
Binary files /dev/null and b/app/src/main/res/drawable-hdpi/icon_cp_cgm_start.png differ
diff --git a/app/src/main/res/drawable-hdpi/icon_cp_cgm_target.png b/app/src/main/res/drawable-hdpi/icon_cp_cgm_target.png
new file mode 100644
index 0000000000..2cf826dad1
Binary files /dev/null and b/app/src/main/res/drawable-hdpi/icon_cp_cgm_target.png differ
diff --git a/app/src/main/res/drawable-hdpi/icon_cp_exercise.png b/app/src/main/res/drawable-hdpi/icon_cp_exercise.png
new file mode 100644
index 0000000000..e9aee1ac8a
Binary files /dev/null and b/app/src/main/res/drawable-hdpi/icon_cp_exercise.png differ
diff --git a/app/src/main/res/drawable-hdpi/icon_cp_note.png b/app/src/main/res/drawable-hdpi/icon_cp_note.png
new file mode 100644
index 0000000000..b6b752e150
Binary files /dev/null and b/app/src/main/res/drawable-hdpi/icon_cp_note.png differ
diff --git a/app/src/main/res/drawable-hdpi/icon_cp_pump_battery.png b/app/src/main/res/drawable-hdpi/icon_cp_pump_battery.png
new file mode 100644
index 0000000000..b4a4f2923a
Binary files /dev/null and b/app/src/main/res/drawable-hdpi/icon_cp_pump_battery.png differ
diff --git a/app/src/main/res/drawable-hdpi/icon_cp_pump_canula.png b/app/src/main/res/drawable-hdpi/icon_cp_pump_canula.png
new file mode 100644
index 0000000000..e75d9ed81d
Binary files /dev/null and b/app/src/main/res/drawable-hdpi/icon_cp_pump_canula.png differ
diff --git a/app/src/main/res/drawable-hdpi/icon_cp_pump_cartridge.png b/app/src/main/res/drawable-hdpi/icon_cp_pump_cartridge.png
new file mode 100644
index 0000000000..f780c23e37
Binary files /dev/null and b/app/src/main/res/drawable-hdpi/icon_cp_pump_cartridge.png differ
diff --git a/app/src/main/res/drawable-hdpi/icon_cp_question.png b/app/src/main/res/drawable-hdpi/icon_cp_question.png
new file mode 100644
index 0000000000..65102f2abf
Binary files /dev/null and b/app/src/main/res/drawable-hdpi/icon_cp_question.png differ
diff --git a/app/src/main/res/drawable-hdpi/icon_home_loop.png b/app/src/main/res/drawable-hdpi/icon_home_loop.png
new file mode 100644
index 0000000000..b0f9f6ea29
Binary files /dev/null and b/app/src/main/res/drawable-hdpi/icon_home_loop.png differ
diff --git a/app/src/main/res/drawable-hdpi/icon_home_profile.png b/app/src/main/res/drawable-hdpi/icon_home_profile.png
new file mode 100644
index 0000000000..b288171332
Binary files /dev/null and b/app/src/main/res/drawable-hdpi/icon_home_profile.png differ
diff --git a/app/src/main/res/drawable-hdpi/icon_home_target.png b/app/src/main/res/drawable-hdpi/icon_home_target.png
new file mode 100644
index 0000000000..0b2f2b166a
Binary files /dev/null and b/app/src/main/res/drawable-hdpi/icon_home_target.png differ
diff --git a/app/src/main/res/drawable-mdpi/icon_actions_cancelextbolus.png b/app/src/main/res/drawable-mdpi/icon_actions_cancelextbolus.png
new file mode 100644
index 0000000000..4ad378e374
Binary files /dev/null and b/app/src/main/res/drawable-mdpi/icon_actions_cancelextbolus.png differ
diff --git a/app/src/main/res/drawable-mdpi/icon_actions_profileswitch.png b/app/src/main/res/drawable-mdpi/icon_actions_profileswitch.png
new file mode 100644
index 0000000000..eeae6ccfdb
Binary files /dev/null and b/app/src/main/res/drawable-mdpi/icon_actions_profileswitch.png differ
diff --git a/app/src/main/res/drawable-mdpi/icon_actions_refill.png b/app/src/main/res/drawable-mdpi/icon_actions_refill.png
new file mode 100644
index 0000000000..737cca8b00
Binary files /dev/null and b/app/src/main/res/drawable-mdpi/icon_actions_refill.png differ
diff --git a/app/src/main/res/drawable-mdpi/icon_actions_startextbolus.png b/app/src/main/res/drawable-mdpi/icon_actions_startextbolus.png
new file mode 100644
index 0000000000..338df773c2
Binary files /dev/null and b/app/src/main/res/drawable-mdpi/icon_actions_startextbolus.png differ
diff --git a/app/src/main/res/drawable-mdpi/icon_actions_starttempbasal.png b/app/src/main/res/drawable-mdpi/icon_actions_starttempbasal.png
new file mode 100644
index 0000000000..18fbd8c111
Binary files /dev/null and b/app/src/main/res/drawable-mdpi/icon_actions_starttempbasal.png differ
diff --git a/app/src/main/res/drawable-mdpi/icon_actions_temptarget.png b/app/src/main/res/drawable-mdpi/icon_actions_temptarget.png
new file mode 100644
index 0000000000..39170bab37
Binary files /dev/null and b/app/src/main/res/drawable-mdpi/icon_actions_temptarget.png differ
diff --git a/app/src/main/res/drawable-mdpi/icon_cp_aaps_offline.png b/app/src/main/res/drawable-mdpi/icon_cp_aaps_offline.png
new file mode 100644
index 0000000000..dc50653883
Binary files /dev/null and b/app/src/main/res/drawable-mdpi/icon_cp_aaps_offline.png differ
diff --git a/app/src/main/res/drawable-mdpi/icon_cp_age_battery.png b/app/src/main/res/drawable-mdpi/icon_cp_age_battery.png
new file mode 100644
index 0000000000..6c7fc56139
Binary files /dev/null and b/app/src/main/res/drawable-mdpi/icon_cp_age_battery.png differ
diff --git a/app/src/main/res/drawable-mdpi/icon_cp_age_canula.png b/app/src/main/res/drawable-mdpi/icon_cp_age_canula.png
new file mode 100644
index 0000000000..303ad946cd
Binary files /dev/null and b/app/src/main/res/drawable-mdpi/icon_cp_age_canula.png differ
diff --git a/app/src/main/res/drawable-mdpi/icon_cp_age_insulin.png b/app/src/main/res/drawable-mdpi/icon_cp_age_insulin.png
new file mode 100644
index 0000000000..5cd8598faa
Binary files /dev/null and b/app/src/main/res/drawable-mdpi/icon_cp_age_insulin.png differ
diff --git a/app/src/main/res/drawable-mdpi/icon_cp_age_sensor.png b/app/src/main/res/drawable-mdpi/icon_cp_age_sensor.png
new file mode 100644
index 0000000000..d312b6c572
Binary files /dev/null and b/app/src/main/res/drawable-mdpi/icon_cp_age_sensor.png differ
diff --git a/app/src/main/res/drawable-mdpi/icon_cp_announcement.png b/app/src/main/res/drawable-mdpi/icon_cp_announcement.png
new file mode 100644
index 0000000000..6e1338ac24
Binary files /dev/null and b/app/src/main/res/drawable-mdpi/icon_cp_announcement.png differ
diff --git a/app/src/main/res/drawable-mdpi/icon_cp_basal_end.png b/app/src/main/res/drawable-mdpi/icon_cp_basal_end.png
new file mode 100644
index 0000000000..be8474f002
Binary files /dev/null and b/app/src/main/res/drawable-mdpi/icon_cp_basal_end.png differ
diff --git a/app/src/main/res/drawable-mdpi/icon_cp_basal_start.png b/app/src/main/res/drawable-mdpi/icon_cp_basal_start.png
new file mode 100644
index 0000000000..34cd31f14b
Binary files /dev/null and b/app/src/main/res/drawable-mdpi/icon_cp_basal_start.png differ
diff --git a/app/src/main/res/drawable-mdpi/icon_cp_bgcheck.png b/app/src/main/res/drawable-mdpi/icon_cp_bgcheck.png
new file mode 100644
index 0000000000..0cb14c2f57
Binary files /dev/null and b/app/src/main/res/drawable-mdpi/icon_cp_bgcheck.png differ
diff --git a/app/src/main/res/drawable-mdpi/icon_cp_bolus_carbs.png b/app/src/main/res/drawable-mdpi/icon_cp_bolus_carbs.png
new file mode 100644
index 0000000000..561703fb06
Binary files /dev/null and b/app/src/main/res/drawable-mdpi/icon_cp_bolus_carbs.png differ
diff --git a/app/src/main/res/drawable-mdpi/icon_cp_bolus_combo.png b/app/src/main/res/drawable-mdpi/icon_cp_bolus_combo.png
new file mode 100644
index 0000000000..ce4d8fb9d3
Binary files /dev/null and b/app/src/main/res/drawable-mdpi/icon_cp_bolus_combo.png differ
diff --git a/app/src/main/res/drawable-mdpi/icon_cp_bolus_correction.png b/app/src/main/res/drawable-mdpi/icon_cp_bolus_correction.png
new file mode 100644
index 0000000000..582472dc92
Binary files /dev/null and b/app/src/main/res/drawable-mdpi/icon_cp_bolus_correction.png differ
diff --git a/app/src/main/res/drawable-mdpi/icon_cp_bolus_meal.png b/app/src/main/res/drawable-mdpi/icon_cp_bolus_meal.png
new file mode 100644
index 0000000000..54b51e126e
Binary files /dev/null and b/app/src/main/res/drawable-mdpi/icon_cp_bolus_meal.png differ
diff --git a/app/src/main/res/drawable-mdpi/icon_cp_bolus_snack.png b/app/src/main/res/drawable-mdpi/icon_cp_bolus_snack.png
new file mode 100644
index 0000000000..b2ba41c27d
Binary files /dev/null and b/app/src/main/res/drawable-mdpi/icon_cp_bolus_snack.png differ
diff --git a/app/src/main/res/drawable-mdpi/icon_cp_cgm_insert.png b/app/src/main/res/drawable-mdpi/icon_cp_cgm_insert.png
new file mode 100644
index 0000000000..67c0fb1ba2
Binary files /dev/null and b/app/src/main/res/drawable-mdpi/icon_cp_cgm_insert.png differ
diff --git a/app/src/main/res/drawable-mdpi/icon_cp_cgm_profile.png b/app/src/main/res/drawable-mdpi/icon_cp_cgm_profile.png
new file mode 100644
index 0000000000..e0f0a15cc8
Binary files /dev/null and b/app/src/main/res/drawable-mdpi/icon_cp_cgm_profile.png differ
diff --git a/app/src/main/res/drawable-mdpi/icon_cp_cgm_start.png b/app/src/main/res/drawable-mdpi/icon_cp_cgm_start.png
new file mode 100644
index 0000000000..14a44bc852
Binary files /dev/null and b/app/src/main/res/drawable-mdpi/icon_cp_cgm_start.png differ
diff --git a/app/src/main/res/drawable-mdpi/icon_cp_cgm_target.png b/app/src/main/res/drawable-mdpi/icon_cp_cgm_target.png
new file mode 100644
index 0000000000..86ce00442c
Binary files /dev/null and b/app/src/main/res/drawable-mdpi/icon_cp_cgm_target.png differ
diff --git a/app/src/main/res/drawable-mdpi/icon_cp_exercise.png b/app/src/main/res/drawable-mdpi/icon_cp_exercise.png
new file mode 100644
index 0000000000..1c92c0ebb5
Binary files /dev/null and b/app/src/main/res/drawable-mdpi/icon_cp_exercise.png differ
diff --git a/app/src/main/res/drawable-mdpi/icon_cp_note.png b/app/src/main/res/drawable-mdpi/icon_cp_note.png
new file mode 100644
index 0000000000..7c8663a4fe
Binary files /dev/null and b/app/src/main/res/drawable-mdpi/icon_cp_note.png differ
diff --git a/app/src/main/res/drawable-mdpi/icon_cp_pump_battery.png b/app/src/main/res/drawable-mdpi/icon_cp_pump_battery.png
new file mode 100644
index 0000000000..f4dab169a8
Binary files /dev/null and b/app/src/main/res/drawable-mdpi/icon_cp_pump_battery.png differ
diff --git a/app/src/main/res/drawable-mdpi/icon_cp_pump_canula.png b/app/src/main/res/drawable-mdpi/icon_cp_pump_canula.png
new file mode 100644
index 0000000000..ee512c5fef
Binary files /dev/null and b/app/src/main/res/drawable-mdpi/icon_cp_pump_canula.png differ
diff --git a/app/src/main/res/drawable-mdpi/icon_cp_pump_cartridge.png b/app/src/main/res/drawable-mdpi/icon_cp_pump_cartridge.png
new file mode 100644
index 0000000000..70a90c596f
Binary files /dev/null and b/app/src/main/res/drawable-mdpi/icon_cp_pump_cartridge.png differ
diff --git a/app/src/main/res/drawable-mdpi/icon_cp_question.png b/app/src/main/res/drawable-mdpi/icon_cp_question.png
new file mode 100644
index 0000000000..5d430d9164
Binary files /dev/null and b/app/src/main/res/drawable-mdpi/icon_cp_question.png differ
diff --git a/app/src/main/res/drawable-mdpi/icon_home_loop.png b/app/src/main/res/drawable-mdpi/icon_home_loop.png
new file mode 100644
index 0000000000..5240cc85db
Binary files /dev/null and b/app/src/main/res/drawable-mdpi/icon_home_loop.png differ
diff --git a/app/src/main/res/drawable-mdpi/icon_home_profile.png b/app/src/main/res/drawable-mdpi/icon_home_profile.png
new file mode 100644
index 0000000000..f689df10c6
Binary files /dev/null and b/app/src/main/res/drawable-mdpi/icon_home_profile.png differ
diff --git a/app/src/main/res/drawable-mdpi/icon_home_target.png b/app/src/main/res/drawable-mdpi/icon_home_target.png
new file mode 100644
index 0000000000..9fc7086e9d
Binary files /dev/null and b/app/src/main/res/drawable-mdpi/icon_home_target.png differ
diff --git a/app/src/main/res/drawable-xhdpi/icon_actions_cancelextbolus.png b/app/src/main/res/drawable-xhdpi/icon_actions_cancelextbolus.png
new file mode 100644
index 0000000000..8c4ee82d1e
Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/icon_actions_cancelextbolus.png differ
diff --git a/app/src/main/res/drawable-xhdpi/icon_actions_profileswitch.png b/app/src/main/res/drawable-xhdpi/icon_actions_profileswitch.png
new file mode 100644
index 0000000000..57864f6ed5
Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/icon_actions_profileswitch.png differ
diff --git a/app/src/main/res/drawable-xhdpi/icon_actions_refill.png b/app/src/main/res/drawable-xhdpi/icon_actions_refill.png
new file mode 100644
index 0000000000..ace20f3bfe
Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/icon_actions_refill.png differ
diff --git a/app/src/main/res/drawable-xhdpi/icon_actions_startextbolus.png b/app/src/main/res/drawable-xhdpi/icon_actions_startextbolus.png
new file mode 100644
index 0000000000..0e59f6ec36
Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/icon_actions_startextbolus.png differ
diff --git a/app/src/main/res/drawable-xhdpi/icon_actions_starttempbasal.png b/app/src/main/res/drawable-xhdpi/icon_actions_starttempbasal.png
new file mode 100644
index 0000000000..1deb6f3ca8
Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/icon_actions_starttempbasal.png differ
diff --git a/app/src/main/res/drawable-xhdpi/icon_actions_temptarget.png b/app/src/main/res/drawable-xhdpi/icon_actions_temptarget.png
new file mode 100644
index 0000000000..c484837e53
Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/icon_actions_temptarget.png differ
diff --git a/app/src/main/res/drawable-xhdpi/icon_cp_aaps_offline.png b/app/src/main/res/drawable-xhdpi/icon_cp_aaps_offline.png
new file mode 100644
index 0000000000..4239e40ba7
Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/icon_cp_aaps_offline.png differ
diff --git a/app/src/main/res/drawable-xhdpi/icon_cp_age_battery.png b/app/src/main/res/drawable-xhdpi/icon_cp_age_battery.png
new file mode 100644
index 0000000000..3d75b9dc7a
Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/icon_cp_age_battery.png differ
diff --git a/app/src/main/res/drawable-xhdpi/icon_cp_age_canula.png b/app/src/main/res/drawable-xhdpi/icon_cp_age_canula.png
new file mode 100644
index 0000000000..8629a7998d
Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/icon_cp_age_canula.png differ
diff --git a/app/src/main/res/drawable-xhdpi/icon_cp_age_insulin.png b/app/src/main/res/drawable-xhdpi/icon_cp_age_insulin.png
new file mode 100644
index 0000000000..2e88ec9ad4
Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/icon_cp_age_insulin.png differ
diff --git a/app/src/main/res/drawable-xhdpi/icon_cp_age_sensor.png b/app/src/main/res/drawable-xhdpi/icon_cp_age_sensor.png
new file mode 100644
index 0000000000..a3577da118
Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/icon_cp_age_sensor.png differ
diff --git a/app/src/main/res/drawable-xhdpi/icon_cp_announcement.png b/app/src/main/res/drawable-xhdpi/icon_cp_announcement.png
new file mode 100644
index 0000000000..472b51d775
Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/icon_cp_announcement.png differ
diff --git a/app/src/main/res/drawable-xhdpi/icon_cp_basal_end.png b/app/src/main/res/drawable-xhdpi/icon_cp_basal_end.png
new file mode 100644
index 0000000000..c92af22df3
Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/icon_cp_basal_end.png differ
diff --git a/app/src/main/res/drawable-xhdpi/icon_cp_basal_start.png b/app/src/main/res/drawable-xhdpi/icon_cp_basal_start.png
new file mode 100644
index 0000000000..5e694ba89c
Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/icon_cp_basal_start.png differ
diff --git a/app/src/main/res/drawable-xhdpi/icon_cp_bgcheck.png b/app/src/main/res/drawable-xhdpi/icon_cp_bgcheck.png
new file mode 100644
index 0000000000..030099f910
Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/icon_cp_bgcheck.png differ
diff --git a/app/src/main/res/drawable-xhdpi/icon_cp_bolus_carbs.png b/app/src/main/res/drawable-xhdpi/icon_cp_bolus_carbs.png
new file mode 100644
index 0000000000..64815bc8f0
Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/icon_cp_bolus_carbs.png differ
diff --git a/app/src/main/res/drawable-xhdpi/icon_cp_bolus_combo.png b/app/src/main/res/drawable-xhdpi/icon_cp_bolus_combo.png
new file mode 100644
index 0000000000..908f33ccd8
Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/icon_cp_bolus_combo.png differ
diff --git a/app/src/main/res/drawable-xhdpi/icon_cp_bolus_correction.png b/app/src/main/res/drawable-xhdpi/icon_cp_bolus_correction.png
new file mode 100644
index 0000000000..0fe89d5f8b
Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/icon_cp_bolus_correction.png differ
diff --git a/app/src/main/res/drawable-xhdpi/icon_cp_bolus_meal.png b/app/src/main/res/drawable-xhdpi/icon_cp_bolus_meal.png
new file mode 100644
index 0000000000..52ef734adf
Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/icon_cp_bolus_meal.png differ
diff --git a/app/src/main/res/drawable-xhdpi/icon_cp_bolus_snack.png b/app/src/main/res/drawable-xhdpi/icon_cp_bolus_snack.png
new file mode 100644
index 0000000000..8d2e9690fc
Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/icon_cp_bolus_snack.png differ
diff --git a/app/src/main/res/drawable-xhdpi/icon_cp_cgm_insert.png b/app/src/main/res/drawable-xhdpi/icon_cp_cgm_insert.png
new file mode 100644
index 0000000000..af93321e3a
Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/icon_cp_cgm_insert.png differ
diff --git a/app/src/main/res/drawable-xhdpi/icon_cp_cgm_profile.png b/app/src/main/res/drawable-xhdpi/icon_cp_cgm_profile.png
new file mode 100644
index 0000000000..e4c50f2667
Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/icon_cp_cgm_profile.png differ
diff --git a/app/src/main/res/drawable-xhdpi/icon_cp_cgm_start.png b/app/src/main/res/drawable-xhdpi/icon_cp_cgm_start.png
new file mode 100644
index 0000000000..ce23d1cf54
Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/icon_cp_cgm_start.png differ
diff --git a/app/src/main/res/drawable-xhdpi/icon_cp_cgm_target.png b/app/src/main/res/drawable-xhdpi/icon_cp_cgm_target.png
new file mode 100644
index 0000000000..fbd5880490
Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/icon_cp_cgm_target.png differ
diff --git a/app/src/main/res/drawable-xhdpi/icon_cp_exercise.png b/app/src/main/res/drawable-xhdpi/icon_cp_exercise.png
new file mode 100644
index 0000000000..90cc102c07
Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/icon_cp_exercise.png differ
diff --git a/app/src/main/res/drawable-xhdpi/icon_cp_note.png b/app/src/main/res/drawable-xhdpi/icon_cp_note.png
new file mode 100644
index 0000000000..cf821a9d1f
Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/icon_cp_note.png differ
diff --git a/app/src/main/res/drawable-xhdpi/icon_cp_pump_battery.png b/app/src/main/res/drawable-xhdpi/icon_cp_pump_battery.png
new file mode 100644
index 0000000000..15af2af396
Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/icon_cp_pump_battery.png differ
diff --git a/app/src/main/res/drawable-xhdpi/icon_cp_pump_canula.png b/app/src/main/res/drawable-xhdpi/icon_cp_pump_canula.png
new file mode 100644
index 0000000000..84ae19c4a3
Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/icon_cp_pump_canula.png differ
diff --git a/app/src/main/res/drawable-xhdpi/icon_cp_pump_cartridge.png b/app/src/main/res/drawable-xhdpi/icon_cp_pump_cartridge.png
new file mode 100644
index 0000000000..d40a8540e6
Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/icon_cp_pump_cartridge.png differ
diff --git a/app/src/main/res/drawable-xhdpi/icon_cp_question.png b/app/src/main/res/drawable-xhdpi/icon_cp_question.png
new file mode 100644
index 0000000000..43df04ef81
Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/icon_cp_question.png differ
diff --git a/app/src/main/res/drawable-xhdpi/icon_home_loop.png b/app/src/main/res/drawable-xhdpi/icon_home_loop.png
new file mode 100644
index 0000000000..09ebbed57f
Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/icon_home_loop.png differ
diff --git a/app/src/main/res/drawable-xhdpi/icon_home_profile.png b/app/src/main/res/drawable-xhdpi/icon_home_profile.png
new file mode 100644
index 0000000000..95c0ca4502
Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/icon_home_profile.png differ
diff --git a/app/src/main/res/drawable-xhdpi/icon_home_target.png b/app/src/main/res/drawable-xhdpi/icon_home_target.png
new file mode 100644
index 0000000000..545ff5db79
Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/icon_home_target.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/icon_actions_cancelextbolus.png b/app/src/main/res/drawable-xxhdpi/icon_actions_cancelextbolus.png
new file mode 100644
index 0000000000..d223d16d8f
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/icon_actions_cancelextbolus.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/icon_actions_profileswitch.png b/app/src/main/res/drawable-xxhdpi/icon_actions_profileswitch.png
new file mode 100644
index 0000000000..29e28afe02
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/icon_actions_profileswitch.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/icon_actions_refill.png b/app/src/main/res/drawable-xxhdpi/icon_actions_refill.png
new file mode 100644
index 0000000000..45cc5d3e1a
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/icon_actions_refill.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/icon_actions_startextbolus.png b/app/src/main/res/drawable-xxhdpi/icon_actions_startextbolus.png
new file mode 100644
index 0000000000..e33b5e0a64
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/icon_actions_startextbolus.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/icon_actions_starttempbasal.png b/app/src/main/res/drawable-xxhdpi/icon_actions_starttempbasal.png
new file mode 100644
index 0000000000..9e4aca67e2
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/icon_actions_starttempbasal.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/icon_actions_temptarget.png b/app/src/main/res/drawable-xxhdpi/icon_actions_temptarget.png
new file mode 100644
index 0000000000..4fa88421ae
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/icon_actions_temptarget.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/icon_cp_aaps_offline.png b/app/src/main/res/drawable-xxhdpi/icon_cp_aaps_offline.png
new file mode 100644
index 0000000000..1b4603bafc
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/icon_cp_aaps_offline.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/icon_cp_age_battery.png b/app/src/main/res/drawable-xxhdpi/icon_cp_age_battery.png
new file mode 100644
index 0000000000..d32a7791e1
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/icon_cp_age_battery.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/icon_cp_age_canula.png b/app/src/main/res/drawable-xxhdpi/icon_cp_age_canula.png
new file mode 100644
index 0000000000..715682129b
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/icon_cp_age_canula.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/icon_cp_age_insulin.png b/app/src/main/res/drawable-xxhdpi/icon_cp_age_insulin.png
new file mode 100644
index 0000000000..79a21cea45
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/icon_cp_age_insulin.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/icon_cp_age_sensor.png b/app/src/main/res/drawable-xxhdpi/icon_cp_age_sensor.png
new file mode 100644
index 0000000000..bb269c3af9
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/icon_cp_age_sensor.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/icon_cp_announcement.png b/app/src/main/res/drawable-xxhdpi/icon_cp_announcement.png
new file mode 100644
index 0000000000..e287fa15d4
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/icon_cp_announcement.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/icon_cp_basal_end.png b/app/src/main/res/drawable-xxhdpi/icon_cp_basal_end.png
new file mode 100644
index 0000000000..08acae3012
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/icon_cp_basal_end.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/icon_cp_basal_start.png b/app/src/main/res/drawable-xxhdpi/icon_cp_basal_start.png
new file mode 100644
index 0000000000..1b6d970b95
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/icon_cp_basal_start.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/icon_cp_bgcheck.png b/app/src/main/res/drawable-xxhdpi/icon_cp_bgcheck.png
new file mode 100644
index 0000000000..4e68c25d70
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/icon_cp_bgcheck.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/icon_cp_bolus_carbs.png b/app/src/main/res/drawable-xxhdpi/icon_cp_bolus_carbs.png
new file mode 100644
index 0000000000..a110276120
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/icon_cp_bolus_carbs.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/icon_cp_bolus_combo.png b/app/src/main/res/drawable-xxhdpi/icon_cp_bolus_combo.png
new file mode 100644
index 0000000000..c91b515001
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/icon_cp_bolus_combo.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/icon_cp_bolus_correction.png b/app/src/main/res/drawable-xxhdpi/icon_cp_bolus_correction.png
new file mode 100644
index 0000000000..d0c7a40613
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/icon_cp_bolus_correction.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/icon_cp_bolus_meal.png b/app/src/main/res/drawable-xxhdpi/icon_cp_bolus_meal.png
new file mode 100644
index 0000000000..e13a420bad
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/icon_cp_bolus_meal.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/icon_cp_bolus_snack.png b/app/src/main/res/drawable-xxhdpi/icon_cp_bolus_snack.png
new file mode 100644
index 0000000000..6a9fb42088
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/icon_cp_bolus_snack.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/icon_cp_cgm_insert.png b/app/src/main/res/drawable-xxhdpi/icon_cp_cgm_insert.png
new file mode 100644
index 0000000000..f1a791b702
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/icon_cp_cgm_insert.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/icon_cp_cgm_profile.png b/app/src/main/res/drawable-xxhdpi/icon_cp_cgm_profile.png
new file mode 100644
index 0000000000..d40cba3c46
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/icon_cp_cgm_profile.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/icon_cp_cgm_start.png b/app/src/main/res/drawable-xxhdpi/icon_cp_cgm_start.png
new file mode 100644
index 0000000000..47d5de66a1
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/icon_cp_cgm_start.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/icon_cp_cgm_target.png b/app/src/main/res/drawable-xxhdpi/icon_cp_cgm_target.png
new file mode 100644
index 0000000000..13fc303aa2
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/icon_cp_cgm_target.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/icon_cp_exercise.png b/app/src/main/res/drawable-xxhdpi/icon_cp_exercise.png
new file mode 100644
index 0000000000..4fb54d3703
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/icon_cp_exercise.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/icon_cp_note.png b/app/src/main/res/drawable-xxhdpi/icon_cp_note.png
new file mode 100644
index 0000000000..c1881112b7
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/icon_cp_note.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/icon_cp_pump_battery.png b/app/src/main/res/drawable-xxhdpi/icon_cp_pump_battery.png
new file mode 100644
index 0000000000..1a6d44bba0
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/icon_cp_pump_battery.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/icon_cp_pump_canula.png b/app/src/main/res/drawable-xxhdpi/icon_cp_pump_canula.png
new file mode 100644
index 0000000000..6021f928ed
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/icon_cp_pump_canula.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/icon_cp_pump_cartridge.png b/app/src/main/res/drawable-xxhdpi/icon_cp_pump_cartridge.png
new file mode 100644
index 0000000000..c7a8897a52
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/icon_cp_pump_cartridge.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/icon_cp_question.png b/app/src/main/res/drawable-xxhdpi/icon_cp_question.png
new file mode 100644
index 0000000000..09455d09fd
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/icon_cp_question.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/icon_home_loop.png b/app/src/main/res/drawable-xxhdpi/icon_home_loop.png
new file mode 100644
index 0000000000..c33f090311
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/icon_home_loop.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/icon_home_profile.png b/app/src/main/res/drawable-xxhdpi/icon_home_profile.png
new file mode 100644
index 0000000000..00c4de023a
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/icon_home_profile.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/icon_home_target.png b/app/src/main/res/drawable-xxhdpi/icon_home_target.png
new file mode 100644
index 0000000000..70fd9ebc27
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/icon_home_target.png differ
diff --git a/app/src/main/res/drawable-xxxhdpi/icon_actions_cancelextbolus.png b/app/src/main/res/drawable-xxxhdpi/icon_actions_cancelextbolus.png
new file mode 100644
index 0000000000..f5b57a9bc9
Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/icon_actions_cancelextbolus.png differ
diff --git a/app/src/main/res/drawable-xxxhdpi/icon_actions_profileswitch.png b/app/src/main/res/drawable-xxxhdpi/icon_actions_profileswitch.png
new file mode 100644
index 0000000000..d5631ef3ae
Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/icon_actions_profileswitch.png differ
diff --git a/app/src/main/res/drawable-xxxhdpi/icon_actions_refill.png b/app/src/main/res/drawable-xxxhdpi/icon_actions_refill.png
new file mode 100644
index 0000000000..be3a5db708
Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/icon_actions_refill.png differ
diff --git a/app/src/main/res/drawable-xxxhdpi/icon_actions_startextbolus.png b/app/src/main/res/drawable-xxxhdpi/icon_actions_startextbolus.png
new file mode 100644
index 0000000000..89b44ea201
Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/icon_actions_startextbolus.png differ
diff --git a/app/src/main/res/drawable-xxxhdpi/icon_actions_starttempbasal.png b/app/src/main/res/drawable-xxxhdpi/icon_actions_starttempbasal.png
new file mode 100644
index 0000000000..7be2e32dfe
Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/icon_actions_starttempbasal.png differ
diff --git a/app/src/main/res/drawable-xxxhdpi/icon_actions_temptarget.png b/app/src/main/res/drawable-xxxhdpi/icon_actions_temptarget.png
new file mode 100644
index 0000000000..955a19f3bc
Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/icon_actions_temptarget.png differ
diff --git a/app/src/main/res/drawable-xxxhdpi/icon_cp_aaps_offline.png b/app/src/main/res/drawable-xxxhdpi/icon_cp_aaps_offline.png
new file mode 100644
index 0000000000..3da8775fb4
Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/icon_cp_aaps_offline.png differ
diff --git a/app/src/main/res/drawable-xxxhdpi/icon_cp_age_battery.png b/app/src/main/res/drawable-xxxhdpi/icon_cp_age_battery.png
new file mode 100644
index 0000000000..dd21ad490c
Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/icon_cp_age_battery.png differ
diff --git a/app/src/main/res/drawable-xxxhdpi/icon_cp_age_canula.png b/app/src/main/res/drawable-xxxhdpi/icon_cp_age_canula.png
new file mode 100644
index 0000000000..6a3585b72f
Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/icon_cp_age_canula.png differ
diff --git a/app/src/main/res/drawable-xxxhdpi/icon_cp_age_insulin.png b/app/src/main/res/drawable-xxxhdpi/icon_cp_age_insulin.png
new file mode 100644
index 0000000000..3b50b616fc
Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/icon_cp_age_insulin.png differ
diff --git a/app/src/main/res/drawable-xxxhdpi/icon_cp_age_sensor.png b/app/src/main/res/drawable-xxxhdpi/icon_cp_age_sensor.png
new file mode 100644
index 0000000000..2dd35e6e9e
Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/icon_cp_age_sensor.png differ
diff --git a/app/src/main/res/drawable-xxxhdpi/icon_cp_announcement.png b/app/src/main/res/drawable-xxxhdpi/icon_cp_announcement.png
new file mode 100644
index 0000000000..256631f49b
Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/icon_cp_announcement.png differ
diff --git a/app/src/main/res/drawable-xxxhdpi/icon_cp_basal_end.png b/app/src/main/res/drawable-xxxhdpi/icon_cp_basal_end.png
new file mode 100644
index 0000000000..a57ceb3b8a
Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/icon_cp_basal_end.png differ
diff --git a/app/src/main/res/drawable-xxxhdpi/icon_cp_basal_start.png b/app/src/main/res/drawable-xxxhdpi/icon_cp_basal_start.png
new file mode 100644
index 0000000000..d36b0b711c
Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/icon_cp_basal_start.png differ
diff --git a/app/src/main/res/drawable-xxxhdpi/icon_cp_bgcheck.png b/app/src/main/res/drawable-xxxhdpi/icon_cp_bgcheck.png
new file mode 100644
index 0000000000..fa72b549a9
Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/icon_cp_bgcheck.png differ
diff --git a/app/src/main/res/drawable-xxxhdpi/icon_cp_bolus_carbs.png b/app/src/main/res/drawable-xxxhdpi/icon_cp_bolus_carbs.png
new file mode 100644
index 0000000000..4dab75558b
Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/icon_cp_bolus_carbs.png differ
diff --git a/app/src/main/res/drawable-xxxhdpi/icon_cp_bolus_combo.png b/app/src/main/res/drawable-xxxhdpi/icon_cp_bolus_combo.png
new file mode 100644
index 0000000000..1418ea4994
Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/icon_cp_bolus_combo.png differ
diff --git a/app/src/main/res/drawable-xxxhdpi/icon_cp_bolus_correction.png b/app/src/main/res/drawable-xxxhdpi/icon_cp_bolus_correction.png
new file mode 100644
index 0000000000..ccc3d0e39c
Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/icon_cp_bolus_correction.png differ
diff --git a/app/src/main/res/drawable-xxxhdpi/icon_cp_bolus_meal.png b/app/src/main/res/drawable-xxxhdpi/icon_cp_bolus_meal.png
new file mode 100644
index 0000000000..aa7bdf7fe3
Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/icon_cp_bolus_meal.png differ
diff --git a/app/src/main/res/drawable-xxxhdpi/icon_cp_bolus_snack.png b/app/src/main/res/drawable-xxxhdpi/icon_cp_bolus_snack.png
new file mode 100644
index 0000000000..1f9ab1697d
Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/icon_cp_bolus_snack.png differ
diff --git a/app/src/main/res/drawable-xxxhdpi/icon_cp_cgm_insert.png b/app/src/main/res/drawable-xxxhdpi/icon_cp_cgm_insert.png
new file mode 100644
index 0000000000..2d7e6b4542
Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/icon_cp_cgm_insert.png differ
diff --git a/app/src/main/res/drawable-xxxhdpi/icon_cp_cgm_profile.png b/app/src/main/res/drawable-xxxhdpi/icon_cp_cgm_profile.png
new file mode 100644
index 0000000000..e8b4668b86
Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/icon_cp_cgm_profile.png differ
diff --git a/app/src/main/res/drawable-xxxhdpi/icon_cp_cgm_start.png b/app/src/main/res/drawable-xxxhdpi/icon_cp_cgm_start.png
new file mode 100644
index 0000000000..e8d0e6773e
Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/icon_cp_cgm_start.png differ
diff --git a/app/src/main/res/drawable-xxxhdpi/icon_cp_cgm_target.png b/app/src/main/res/drawable-xxxhdpi/icon_cp_cgm_target.png
new file mode 100644
index 0000000000..2bdaf7d73d
Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/icon_cp_cgm_target.png differ
diff --git a/app/src/main/res/drawable-xxxhdpi/icon_cp_exercise.png b/app/src/main/res/drawable-xxxhdpi/icon_cp_exercise.png
new file mode 100644
index 0000000000..c16560e8de
Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/icon_cp_exercise.png differ
diff --git a/app/src/main/res/drawable-xxxhdpi/icon_cp_note.png b/app/src/main/res/drawable-xxxhdpi/icon_cp_note.png
new file mode 100644
index 0000000000..dd1e04b419
Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/icon_cp_note.png differ
diff --git a/app/src/main/res/drawable-xxxhdpi/icon_cp_pump_battery.png b/app/src/main/res/drawable-xxxhdpi/icon_cp_pump_battery.png
new file mode 100644
index 0000000000..f1d306de12
Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/icon_cp_pump_battery.png differ
diff --git a/app/src/main/res/drawable-xxxhdpi/icon_cp_pump_canula.png b/app/src/main/res/drawable-xxxhdpi/icon_cp_pump_canula.png
new file mode 100644
index 0000000000..465111a6ba
Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/icon_cp_pump_canula.png differ
diff --git a/app/src/main/res/drawable-xxxhdpi/icon_cp_pump_cartridge.png b/app/src/main/res/drawable-xxxhdpi/icon_cp_pump_cartridge.png
new file mode 100644
index 0000000000..afffd90482
Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/icon_cp_pump_cartridge.png differ
diff --git a/app/src/main/res/drawable-xxxhdpi/icon_cp_question.png b/app/src/main/res/drawable-xxxhdpi/icon_cp_question.png
new file mode 100644
index 0000000000..b2e19c1575
Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/icon_cp_question.png differ
diff --git a/app/src/main/res/drawable-xxxhdpi/icon_home_loop.png b/app/src/main/res/drawable-xxxhdpi/icon_home_loop.png
new file mode 100644
index 0000000000..a59d73e2b4
Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/icon_home_loop.png differ
diff --git a/app/src/main/res/drawable-xxxhdpi/icon_home_profile.png b/app/src/main/res/drawable-xxxhdpi/icon_home_profile.png
new file mode 100644
index 0000000000..80234a0f75
Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/icon_home_profile.png differ
diff --git a/app/src/main/res/drawable-xxxhdpi/icon_home_target.png b/app/src/main/res/drawable-xxxhdpi/icon_home_target.png
new file mode 100644
index 0000000000..c1a4d99087
Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/icon_home_target.png differ
diff --git a/app/src/main/res/drawable/icon_actions_cancelextbolus.png b/app/src/main/res/drawable/icon_actions_cancelextbolus.png
new file mode 100644
index 0000000000..4ad378e374
Binary files /dev/null and b/app/src/main/res/drawable/icon_actions_cancelextbolus.png differ
diff --git a/app/src/main/res/drawable/icon_actions_profileswitch.png b/app/src/main/res/drawable/icon_actions_profileswitch.png
new file mode 100644
index 0000000000..eeae6ccfdb
Binary files /dev/null and b/app/src/main/res/drawable/icon_actions_profileswitch.png differ
diff --git a/app/src/main/res/drawable/icon_actions_refill.png b/app/src/main/res/drawable/icon_actions_refill.png
new file mode 100644
index 0000000000..737cca8b00
Binary files /dev/null and b/app/src/main/res/drawable/icon_actions_refill.png differ
diff --git a/app/src/main/res/drawable/icon_actions_startextbolus.png b/app/src/main/res/drawable/icon_actions_startextbolus.png
new file mode 100644
index 0000000000..338df773c2
Binary files /dev/null and b/app/src/main/res/drawable/icon_actions_startextbolus.png differ
diff --git a/app/src/main/res/drawable/icon_actions_starttempbasal.png b/app/src/main/res/drawable/icon_actions_starttempbasal.png
new file mode 100644
index 0000000000..18fbd8c111
Binary files /dev/null and b/app/src/main/res/drawable/icon_actions_starttempbasal.png differ
diff --git a/app/src/main/res/drawable/icon_actions_temptarget.png b/app/src/main/res/drawable/icon_actions_temptarget.png
new file mode 100644
index 0000000000..39170bab37
Binary files /dev/null and b/app/src/main/res/drawable/icon_actions_temptarget.png differ
diff --git a/app/src/main/res/drawable/icon_cp_aaps_offline.png b/app/src/main/res/drawable/icon_cp_aaps_offline.png
new file mode 100644
index 0000000000..dc50653883
Binary files /dev/null and b/app/src/main/res/drawable/icon_cp_aaps_offline.png differ
diff --git a/app/src/main/res/drawable/icon_cp_age_battery.png b/app/src/main/res/drawable/icon_cp_age_battery.png
new file mode 100644
index 0000000000..6c7fc56139
Binary files /dev/null and b/app/src/main/res/drawable/icon_cp_age_battery.png differ
diff --git a/app/src/main/res/drawable/icon_cp_age_canula.png b/app/src/main/res/drawable/icon_cp_age_canula.png
new file mode 100644
index 0000000000..303ad946cd
Binary files /dev/null and b/app/src/main/res/drawable/icon_cp_age_canula.png differ
diff --git a/app/src/main/res/drawable/icon_cp_age_insulin.png b/app/src/main/res/drawable/icon_cp_age_insulin.png
new file mode 100644
index 0000000000..5cd8598faa
Binary files /dev/null and b/app/src/main/res/drawable/icon_cp_age_insulin.png differ
diff --git a/app/src/main/res/drawable/icon_cp_age_sensor.png b/app/src/main/res/drawable/icon_cp_age_sensor.png
new file mode 100644
index 0000000000..d312b6c572
Binary files /dev/null and b/app/src/main/res/drawable/icon_cp_age_sensor.png differ
diff --git a/app/src/main/res/drawable/icon_cp_announcement.png b/app/src/main/res/drawable/icon_cp_announcement.png
new file mode 100644
index 0000000000..6e1338ac24
Binary files /dev/null and b/app/src/main/res/drawable/icon_cp_announcement.png differ
diff --git a/app/src/main/res/drawable/icon_cp_basal_end.png b/app/src/main/res/drawable/icon_cp_basal_end.png
new file mode 100644
index 0000000000..be8474f002
Binary files /dev/null and b/app/src/main/res/drawable/icon_cp_basal_end.png differ
diff --git a/app/src/main/res/drawable/icon_cp_basal_start.png b/app/src/main/res/drawable/icon_cp_basal_start.png
new file mode 100644
index 0000000000..34cd31f14b
Binary files /dev/null and b/app/src/main/res/drawable/icon_cp_basal_start.png differ
diff --git a/app/src/main/res/drawable/icon_cp_bgcheck.png b/app/src/main/res/drawable/icon_cp_bgcheck.png
new file mode 100644
index 0000000000..0cb14c2f57
Binary files /dev/null and b/app/src/main/res/drawable/icon_cp_bgcheck.png differ
diff --git a/app/src/main/res/drawable/icon_cp_bolus_carbs.png b/app/src/main/res/drawable/icon_cp_bolus_carbs.png
new file mode 100644
index 0000000000..561703fb06
Binary files /dev/null and b/app/src/main/res/drawable/icon_cp_bolus_carbs.png differ
diff --git a/app/src/main/res/drawable/icon_cp_bolus_combo.png b/app/src/main/res/drawable/icon_cp_bolus_combo.png
new file mode 100644
index 0000000000..ce4d8fb9d3
Binary files /dev/null and b/app/src/main/res/drawable/icon_cp_bolus_combo.png differ
diff --git a/app/src/main/res/drawable/icon_cp_bolus_correction.png b/app/src/main/res/drawable/icon_cp_bolus_correction.png
new file mode 100644
index 0000000000..582472dc92
Binary files /dev/null and b/app/src/main/res/drawable/icon_cp_bolus_correction.png differ
diff --git a/app/src/main/res/drawable/icon_cp_bolus_meal.png b/app/src/main/res/drawable/icon_cp_bolus_meal.png
new file mode 100644
index 0000000000..54b51e126e
Binary files /dev/null and b/app/src/main/res/drawable/icon_cp_bolus_meal.png differ
diff --git a/app/src/main/res/drawable/icon_cp_bolus_snack.png b/app/src/main/res/drawable/icon_cp_bolus_snack.png
new file mode 100644
index 0000000000..b2ba41c27d
Binary files /dev/null and b/app/src/main/res/drawable/icon_cp_bolus_snack.png differ
diff --git a/app/src/main/res/drawable/icon_cp_cgm_insert.png b/app/src/main/res/drawable/icon_cp_cgm_insert.png
new file mode 100644
index 0000000000..67c0fb1ba2
Binary files /dev/null and b/app/src/main/res/drawable/icon_cp_cgm_insert.png differ
diff --git a/app/src/main/res/drawable/icon_cp_cgm_profile.png b/app/src/main/res/drawable/icon_cp_cgm_profile.png
new file mode 100644
index 0000000000..e0f0a15cc8
Binary files /dev/null and b/app/src/main/res/drawable/icon_cp_cgm_profile.png differ
diff --git a/app/src/main/res/drawable/icon_cp_cgm_start.png b/app/src/main/res/drawable/icon_cp_cgm_start.png
new file mode 100644
index 0000000000..14a44bc852
Binary files /dev/null and b/app/src/main/res/drawable/icon_cp_cgm_start.png differ
diff --git a/app/src/main/res/drawable/icon_cp_cgm_target.png b/app/src/main/res/drawable/icon_cp_cgm_target.png
new file mode 100644
index 0000000000..86ce00442c
Binary files /dev/null and b/app/src/main/res/drawable/icon_cp_cgm_target.png differ
diff --git a/app/src/main/res/drawable/icon_cp_exercise.png b/app/src/main/res/drawable/icon_cp_exercise.png
new file mode 100644
index 0000000000..1c92c0ebb5
Binary files /dev/null and b/app/src/main/res/drawable/icon_cp_exercise.png differ
diff --git a/app/src/main/res/drawable/icon_cp_note.png b/app/src/main/res/drawable/icon_cp_note.png
new file mode 100644
index 0000000000..7c8663a4fe
Binary files /dev/null and b/app/src/main/res/drawable/icon_cp_note.png differ
diff --git a/app/src/main/res/drawable/icon_cp_pump_battery.png b/app/src/main/res/drawable/icon_cp_pump_battery.png
new file mode 100644
index 0000000000..f4dab169a8
Binary files /dev/null and b/app/src/main/res/drawable/icon_cp_pump_battery.png differ
diff --git a/app/src/main/res/drawable/icon_cp_pump_canula.png b/app/src/main/res/drawable/icon_cp_pump_canula.png
new file mode 100644
index 0000000000..ee512c5fef
Binary files /dev/null and b/app/src/main/res/drawable/icon_cp_pump_canula.png differ
diff --git a/app/src/main/res/drawable/icon_cp_pump_cartridge.png b/app/src/main/res/drawable/icon_cp_pump_cartridge.png
new file mode 100644
index 0000000000..70a90c596f
Binary files /dev/null and b/app/src/main/res/drawable/icon_cp_pump_cartridge.png differ
diff --git a/app/src/main/res/drawable/icon_cp_question.png b/app/src/main/res/drawable/icon_cp_question.png
new file mode 100644
index 0000000000..5d430d9164
Binary files /dev/null and b/app/src/main/res/drawable/icon_cp_question.png differ
diff --git a/app/src/main/res/drawable/icon_home_loop.png b/app/src/main/res/drawable/icon_home_loop.png
new file mode 100644
index 0000000000..5240cc85db
Binary files /dev/null and b/app/src/main/res/drawable/icon_home_loop.png differ
diff --git a/app/src/main/res/drawable/icon_home_profile.png b/app/src/main/res/drawable/icon_home_profile.png
new file mode 100644
index 0000000000..f689df10c6
Binary files /dev/null and b/app/src/main/res/drawable/icon_home_profile.png differ
diff --git a/app/src/main/res/drawable/icon_home_target.png b/app/src/main/res/drawable/icon_home_target.png
new file mode 100644
index 0000000000..9fc7086e9d
Binary files /dev/null and b/app/src/main/res/drawable/icon_home_target.png differ
diff --git a/app/src/main/res/layout/actions_fragment.xml b/app/src/main/res/layout/actions_fragment.xml
index 5a0faa4099..bc8f416770 100644
--- a/app/src/main/res/layout/actions_fragment.xml
+++ b/app/src/main/res/layout/actions_fragment.xml
@@ -23,8 +23,8 @@
android:layout_marginRight="10dp"
android:layout_marginTop="3dp"
android:layout_weight="0.5"
- android:text="@string/careportal_profileswitch"
- android:textColor="@color/colorProfileSwitchButton" />
+ android:drawableTop="@drawable/icon_actions_profileswitch"
+ android:text="@string/careportal_profileswitch" />
+ android:drawableTop="@drawable/icon_actions_temptarget"
+ android:text="@string/careportal_temporarytarget" />
+ android:drawableTop="@drawable/icon_actions_starttempbasal"
+ android:text="@string/overview_tempbasal_button" />
+
+
+ android:drawableTop="@drawable/icon_actions_startextbolus"
+ android:text="@string/overview_extendedbolus_button" />
+ android:drawableTop="@drawable/icon_actions_cancelextbolus"
+ android:text="@string/overview_extendedbolus_cancel_button" />
+ android:drawableTop="@drawable/icon_actions_refill"
+ android:text="@string/primefill" />
diff --git a/app/src/main/res/layout/careportal_fragment.xml b/app/src/main/res/layout/careportal_fragment.xml
index 967d148688..9c7d34d6a1 100644
--- a/app/src/main/res/layout/careportal_fragment.xml
+++ b/app/src/main/res/layout/careportal_fragment.xml
@@ -21,6 +21,12 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
+
+
+
+
+
+
+
+
+
+
-
+
-
-
+
-
+
-
-
+ app:layout_row="1" />
+
+ app:layout_row="1" />
+
+ app:layout_row="1" />
+
+ app:layout_row="4" />
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/careportal_stats_fragment.xml b/app/src/main/res/layout/careportal_stats_fragment.xml
index c7c8070f54..f7af98bdd3 100644
--- a/app/src/main/res/layout/careportal_stats_fragment.xml
+++ b/app/src/main/res/layout/careportal_stats_fragment.xml
@@ -18,11 +18,13 @@
android:orientation="horizontal">
@@ -63,11 +65,13 @@
android:orientation="horizontal">
@@ -108,11 +112,13 @@
android:orientation="horizontal">
@@ -128,8 +134,8 @@
diff --git a/app/src/main/res/layout/loop_fragment.xml b/app/src/main/res/layout/loop_fragment.xml
index 23a2f93d18..fb6038dcb3 100644
--- a/app/src/main/res/layout/loop_fragment.xml
+++ b/app/src/main/res/layout/loop_fragment.xml
@@ -5,7 +5,6 @@
tools:context="info.nightscout.androidaps.plugins.Loop.LoopFragment">
diff --git a/app/src/main/res/layout/openapsama_fragment.xml b/app/src/main/res/layout/openapsama_fragment.xml
index f1f4f364ec..a471429567 100644
--- a/app/src/main/res/layout/openapsama_fragment.xml
+++ b/app/src/main/res/layout/openapsama_fragment.xml
@@ -6,12 +6,11 @@
+ android:layout_height="match_parent">
+ android:layout_height="match_parent">
+ android:layout_height="100dp"
+ android:visibility="gone" />
@@ -385,7 +386,8 @@
android:layout_marginTop="3dp"
android:layout_weight="0.5"
android:text="Accept new temp\n0.25U/h"
- android:textColor="@color/colorAcceptTempButton" />
+ android:textColor="@color/colorAcceptTempButton"
+ android:visibility="gone" />
+ android:textSize="10sp"
+ android:visibility="gone" />
-
-
diff --git a/app/src/main/res/layout/overview_fragment_nsclient_tablet.xml b/app/src/main/res/layout/overview_fragment_nsclient_tablet.xml
index 014f5f5993..10148057bb 100644
--- a/app/src/main/res/layout/overview_fragment_nsclient_tablet.xml
+++ b/app/src/main/res/layout/overview_fragment_nsclient_tablet.xml
@@ -756,20 +756,6 @@
android:textSize="10sp"
android:visibility="gone" />
-
-
diff --git a/app/src/main/res/layout/overview_fragment_smallheight.xml b/app/src/main/res/layout/overview_fragment_smallheight.xml
index eaa632f3b4..e1d2338959 100644
--- a/app/src/main/res/layout/overview_fragment_smallheight.xml
+++ b/app/src/main/res/layout/overview_fragment_smallheight.xml
@@ -433,20 +433,6 @@
android:textSize="10sp"
android:visibility="gone" />
-
-
diff --git a/app/src/main/res/layout/overview_newtempbasal_dialog.xml b/app/src/main/res/layout/overview_newtempbasal_dialog.xml
index 04caae43f4..48c20b6809 100644
--- a/app/src/main/res/layout/overview_newtempbasal_dialog.xml
+++ b/app/src/main/res/layout/overview_newtempbasal_dialog.xml
@@ -12,266 +12,134 @@
android:layout_height="match_parent">
-
+
+
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_gravity="center_horizontal"
+ android:orientation="vertical">
+ android:text="@string/overview_newtempbasal_percent_label" />
+
-
+
-
-
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+ android:layout_marginTop="15dp"
+ android:text="@string/overview_newtempbasal_basalpercent"
+ android:textAppearance="@android:style/TextAppearance.Material.Small"
+ android:textStyle="bold" />
-
+
+
+
+
+
-
-
+
-
+
-
+
-
+
-
-
-
-
-
-
-
+
diff --git a/app/src/main/res/values-bg/strings.xml b/app/src/main/res/values-bg/strings.xml
index 0589e0a982..8b026dd0b2 100644
--- a/app/src/main/res/values-bg/strings.xml
+++ b/app/src/main/res/values-bg/strings.xml
@@ -1,159 +1,52 @@
- Closed Loop
- Open Loop
- APS режим
- Ср. изменение
- Базал
- КЗ достъпна в NS
- Болус
- Приложено ограничение за болус
- Откажи
- Въглехидрати
- Приложено ограничениe за въгл.
- Careportal
- Известие
- Проверка на КЗ
- Корекция с въглехидр.
- Смяна на сензор
- Рестарт на сензор
- Комбиниран болус
- Болус за корекция
- Физ. активност
- Смяна на резервоар
- Болус за осн. хранене
- Абсолютна
- ВХ
- ВХ след
- Продължителност
- min
- Въведено от
- Време
- Инсулин
- Глюкомер
- Бележки
- Друго
- Процент
- Профил
- Сензор
- Разделяне
- Бележка
- OpenAPS оффлайн
- Смяна на профил
- Смяна на сет
- Въпрос
- Болус за закуска
- Край на временен базал
- Начало на временен базал
- Променете данните!
- Конфигурация
- APS
- Източник на КЗ
- Ограничения
- Основен
- Loop
- Профил
- Помпа
- Временен базал
- Treatments
- Потвърждение
- Приложено ограничение!
- Нарушено ограничение
- Czech
- дни
- Изменение:
- Време
- English
- Enter new treatment:
- КЗ
- Loop
- APS
- След приложени ограничения
- Зададено на помпата
- Loop отказан от ограниченията
- Manual enacts
- Минимална продължителност
- Архивиране
- Изход
+ Настройки на сигурността
+ Максимален инсулин при болус [единици]
+ Максимални въглехидрати [гр]
Опции
- Обнови treatments от NS
+ Обнови леченията от NS
+ Резервно копие
+ Тест на аларма
Нулирай базата данни
- Тест на аларми
- Не е избран APS или изчислен резултат
- Не се изискват промени
- Не е зареден профил от NS
- Използване на абсолютни стойности
- NSClient
- Активен профил
- Базални стойности:
- DIA (Време на действие на инсулина):
- IC (Инсулин/въглехидр.):
- НЕ Е ЗАДАДЕН ПРОФИЛ
- Целeва КЗ:
- Единици
- Цели
- Старт
- Проверка
- Действие:
+ Сигурни ли сте че искате да изтриете всички данни?
+ Изход
+ Използвай удължен болус за над 200%
+ DanaR Bluetooth устройство
+ Използване на абсолютни стойности за базал
+ Рестартирайте телефона или AndroidAPS от системните настройки или Android APS няма да записва проблемите (което е важно за работата на алгоритъма)!
Цел:
- OK
- Настоящ базал
- Модулът е забранен
- КЗ стастус
- Входни параметри
- IOB данни
- Последно зададено
- Последно изпълнение
- Данни за хранене
- Долна граница
- Няма данни за КЗ
- Няма данни за профил
- Няма данни за помпа
- Профил
- Искане
- Резултат
- Старт сега
- Достъпно е ново предложение
- Преглед
- Калкулатор
- Базална стойност
- % (100% = current)
- Болус
- NS профил
- Статус на помпа в NS
- Стойност
- Основание
- Безопасност
- Задай нов удължен болусs:
- Приложи нов временен базал:
- Обикновен профил
+ Действие:
+ Стартирай
+ Провери
+ Единици
+ DIA (Време на действие на инсулина):
+ Активен профил
+ IC (Инсулин/въглехидр.):
+ ISF (Инс.чувствителност):
+ Базал
+ Целeва КЗ:
+ НЕ Е ЗАДАДЕН ПРОФИЛ
+ Инсулин:
+ Вълехидрати:
+ IOB:
+ IOB:
+ Активен:
+ Общо IOB:
+ Общо активен IOB:
+ Време:
+ Съотношение:
+ Инс:
IOB:
Общо IOB:
- Инс:
- Скорост:
- Време:
- Грешка при болус
- Treatments
- Активен:
- ВХ:
- Инсулин:
- IOB:
- Общо активен IOB:
- Общо IOB:
Количество въглехидрати
Количество инсулин
- Базален IOB
КЗ
- Болус IOB
ВХ
Корекция
- ОБЩО
- Ед.
- Макс. лимит на болус
- Макс. лимит на въглехидрати
- Tratments safety
- Неподържана версия на NSClient
- Виртуална помпа
+ Ед
+ IOB от болуси
+ ОБШО
+ Старт сега
Базова базална стойност
Батерия
Удължен болус
@@ -162,382 +55,584 @@
Грешка в базата данни
Временен базал
ВИРТУАЛНА ПОМПА
- xDrip
- Удължен болус
- Временен базал
- ISF (Инс.чувствителност):
- NSClient не е инсталиран. Записът е загубен!
- Тип събитие
- КЗ тип
+ Последно изпълнение
+ Параметри на входа
+ КЗ стастус
+ Настоящ базал
+ IOB данни
+ Профил
+ Данни за хранене
+ Резултат
+ Няма данни за КЗ
+ Няма зададен профил
+ Няма избана помпа
+ Не се изисква промяна
+ Искане
+ Долна граница(КЗ)
+ Стойност
+ Срок
+ Основание
+ КЗ
+ Промяна
+ Delta:
+ Средна промяна
+ Конфигурация
+ Цели
OpenAPS MA
+ Общ
+ NS Профил
+ Обикновен профил
+ TempBasal
+ Treatments
+ Виртуална помпа
+ Careportal
+
+
+ Помпа
+ Treatments
+ Временен базал
+ Профил
+ APS
+ Общи
+ дни
+ Минимална продължителност
+ Ограничения
+ Цикъл
+ Цикъл
+ APS
+ След ограничения
+ Зададено на помпата
+ Последно зададено
+ OK
+ Откажи
+ НЕ Е ИЗБРАН APS ИЛИ НЯМА РЕЗУЛТАТ ОТ НЕГО
+ Сигурност
+ Плъгина е изключен
+ Нарушено ограничение
+ Грешка при подаване на болус
+ Грешка при подаване на временен базал
+ Стойност на базал [%]
+ % (100% = текущ)
+ Приложи нов временен базал:
+ Болус
+ Калкулатор
+ Приложено ограничение!
+ Потвърждение
+ Въведете ново лечение:
+ Болус
+ Bolus:
+ Базал
+ Basal:
+ Въглехидрати
+ Променете данните!
+ Задай нов удължен болус:
+ Източник на данни за КЗ
+ xDrip
+ NSClient
+ APS режим
+
+ Затворен цикъл
+ Отворен цикъл
+ изключен
+ Изключи
+ Включи
+ Има ново предложение
+ Несъвместима версия на NSClient
+ Несъвместима версия на Nightscout
+ NSClient не е открит. Записът е загубен!
+ КЗ да се вижда в NS
+ Статуса на помпа да е достъпен в NS
+ Ръчно приложени
+ ЦИКЪЛА Е СПРЯН ОТ ОГРАНИЧЕНИЯТА
+ Czech
+ English
+ Базален IOB
+ Приложено ограничение на болус
+ Приложено ограничение на въглехидрати
+ Проверка на КЗ
+ Известие
+ Бележка
+ Въпрос
+ Физ. активност
+ Смяна на сет
+ Смяна на сензор
+ Старт на сензор
+ Смяна на резервоар
+ Смяна на профил
+ Болус за закуска
+ Болус за основно хранене
+ Болус корекция
+ Комбиниран болус
+ Старт на временен базал
+ Край на временен базал
+ Корекция с въглехидрати
+ OpenAPS спрян
+ Тип събитие
+ Друго
+ Глюкомер
+ Сензор
+ ВХ
+ Инсулин
+ ВХ след
+ Разделяне
+ Продължителност
+ Процент
+ Абсолютна
+ Бележки
+ Време на събитие
+ Профил
+ Въведен от
+ Тип КЗ
+ Още не е зареден профила от NS
+ Временен базал
+ Удължен болус
Nightscout версия:
ИЗПРАТИ
Липсва
- Разрешено
- Видимо
+ Разрешен
+ Видим
Нагоре
Настройките са експортирани
+ Експортирай настройките в
+ Импорт на настройки от
Настройките са импортирани
- Импортирай настройки от:
- Файлът не съществува
- Експортирай настройки до
+ Файлът не е намерен
Експорт настройки
Импорт настройки
German
- Макс. стойност, която е в границите
+ Spanish
+ Greek
+ Italian
+ Russian
Мин. стойност, която е в границите
+ Максималната стойност на КЗ за да бъде в границите.
+ Максимално позволен временен базал Е/ч
Макс. лимит на временен базал [Е/ч]
- Български
- Макс. лимит на не болус IOB подаван от openAPS
- Свързан
- Избраното устройство не съществува
- Прекъснат
- Свързва се
- Грешка при свързване с помпа
- DanaR Bluetooth устройство
- DanaR настройки
- Използвай удължен болус за над 200%
- DanaR
- РАЗБИРАМ И СЕ СЪГЛАСЯВАМ
- Език
- Сигурност
- Синхронизирай помпата с профила
- Няма bluetooth адаптер
- Nightscout
+ Максимален IOB
+ Този параметър се нарича максимален IOB в OpenAPS и подразбиране е 0. След няколко дни или седмици можете да го увеличите.
+ Bulgarian
Разбрах
+ Език
+ DanaR
+ Свързване
+ Свързана
+ Не е сврзана
+ Синхронизирай помпата с профила
+ DanaR настройки
+ Nightscout
End User License Agreement
MUST NOT BE USED TO MAKE MEDICAL DECISIONS. THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM “AS IS” WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
- +XXXXXXXXXX;+YYYYYYYYYY
- Болус %.2fU беше подаден успешно
- Bolus failed
- Откажи временен базал
- Последно свързване
- Изчаква резултат
- SMS комуникатор
- Позволени телефонни номера
- Успех
- To deliver bolus %.2fU reply with code %s
- Отдалечен болус не е разрешен
- Обнови профила
+ Разбирам и приемам
+ Съхрани
+ Не е открит Bluetooth адаптер
+ Избраното устройство не е открито
+ Грешка при свързване с помпата
+ IOB на помпата
+ Инсулин за деня
+ Последен болус:
+ ч по-рано
+ Грешни входящи данни
+ Неправилна стойност
+ Презареди профил
+ Виж профил
+ Приложено
+ Коментар
+ Успешен
Процент
+ Абсолютна
+ Откажи временен базал
+ SMS комуникатор
+ Изчаква резултат от помпата
+ Разрешени телефонни номера
+ +XXXXXXXXXX;+YYYYYYYYYY
+ За да доставите болус от %.2fЕ отговорете с код %s
+ За да изпратите калибрация %.2f отговорете с код %s
+ Болус отказан
+ Болус %.2fЕд беше подаден успешно
+ Подава болус %.2fЕ
+ Болус от %.2fЕ подаден успешно
+ Подава %.2fЕ
+ Позволи отдалечени команди чрез SMS
+ Отдалечено подаване на болус - забранено!
+ Пръст
Сензор
Ръчно
- Пръст
- Неправилно зададени стойности
- Виж профила
+ Времена цел
+ Откажи временна цел
DanaR профил
DIA (Време на действие на инсулина) ч.:
- Последен болус:
- Неправилни входни данни
- Единици за деня
- Временна цел
- Отакажи временна цел
- Коментар
- Абсолютна
- Запушване
- Доставено
- Подаване на %.2fU Е инсулин
- Стоп
- Спрян
- НАТИСНАТ СТОП
- КЗ цел за изчисления
- Помпата е заета
- Изчаква за помпа. Click to refresh.
- Грешна парола за помпата!
- Достигнахте лимита
- аларма
- базален по часове
- въглехидрати
- грешка
- кръвна захар
+ Време на действие на инсулина
+ Неуспешно обноввяване на базалния профил
История
+ Презареди
+ Качване
+ E болус
+ DS болус
+ DE болус
+ грешка
+ пълнене
+ базал по часове
+ КЗ
+ въглехидрати
+ аларма
+ Общо %d записа качени
+ S болус
Аларми
Базален по часове
Болуси
Въглехидрати
- Свъзва се за %d сек.
Инсулин за деня
Грешки
- Кръвна захар
+ КЗ
Пълнене
- Прекъсване
- Презареждане
- IOB на помпата
- Парола за помпа
- пълнене
- Общо %d записа са изпратени
- Приложено
- S bolus
- Не може да се обнови базалния профил
- h ago
- Потвърдете, че КЗ и данните от помпата са достъпни в Nightscout
- DE bolus
- DS bolus
- E bolus
+ Спиране
+ Свързване с помпата за %d сек.
+ Парола за помпата
+ Грешна парола за помпата!
+ Помпата е заета
+ Доставен
+ Спрян
+ Запушване
+ Спри
+ Натиснат е СТОП!
+ Очаква помпата
+ Очаква резутат. Натисни за обновяване.
+ Ще доставя %.2fЕ
Настройка на визуализацията и наблюдението, а също и анализиране на базалните нужди и коефициенти
- Стартиране в Open loop режим за няколко дни и ръчно прилагане на много временни базали
- Стартиране на Open Loop
+ Работете в Отворен режим няколко дни и ръчно прилагайте на много временни базали
+ Стартиране на Отворен режим
Определяне на макс. лимит на базалния инсулин и настройване в помпата и програмата
- Разбиране на вашият open loop режим, включително препоръчваните временни базали
- Стартиране на Closed loop с макс. IOB=0 без твърде много събития тип Low suspend
- Активиране на допълнителни функции за дневно използване, включително и advanced meal assist
- Стартиране на Close loop в режим Low Suspend
- Стартирайте за няколко дни и поне една нощ без аларми за ниска КЗ
- Настройване на Closed Loop, повишаване на максималният IOB над 0 и понижаване на целевите нива на КЗ
- Една седмица успешно дневно използване с редовно въвеждане на въглехидрати
+ Разбиране на вашият Отворен режим, включително препоръчваните временни базали
+ Стартиране на Затворен цикъл с изключване на базал при ниска КЗ
+ Стартиране на Затворен цикъл с макс. IOB=0 без твърде много събития тип ниска КЗ
+ Настройване на Затворения цикъл чрез повишаване на максималният IOB над 0 и понижаване на целевите нива на КЗ
+ Прекарайте няколко дни по този начин, като поне една нощ нямате аларма за ниска КЗ.
Настройване на базалния инсулин и коефициенти ако е необходимо и активиране на auto-sens
- Качване
- Подава %.2fU
- Spanish
- Не е избран профил
- Korean
- %s е недопустима стойност
- Текст на бутон:
- Корекция
- Loop забранен
- Въглехидрати:
- Валидно:
- Добави
- Редактирай
- Премахни
- Бърз болус
- Настройки за бърз болус
- Не са позволени отдалечени настройки
- To start basal %.2fU/h reply with code %s
- To stop temp basal reply with code %s
+ Една седмица успешно дневно използване с редовно въвеждане на въглехидрати
+ Активиране на допълнителни функции за дневно използване, включително и advanced meal assist
+ Достигнахте лимита
+ Целева стойност използвана в изчисленията
+ Няма избран профил
Loop has been disabled
Loop has been enabled
Loop is disabled
Loop is enabled
- Позволи команди през SMS
+ %.2f ограничен до %.2f
+ Стойността %s е извън границите
+ Remote basal setting is not allowed
+ Remote command is not allowed
+ To start basal %.2fU/h reply with code %s
+ To suspend loop for %d minutes reply with code %s
+ Temp basal %.2fU/h for %d min started successfully
+ Temp basal start failed
+ To stop temp basal reply with code %s
Temp basal canceled
Canceling temp basal failed
- Temp basal start failed
- Temp basal %.2fU/h for %d min started successfully
Uknonwn command or wrong reply
- Болус за хранене
+ Бърз болус
+ Настройки за бърз болус
+ Текст на бутона:
+ Въглехидрати:
+ Валиден от:
+ Добави
+ Редакция
+ Изтрий
+ Хранене
+ Корекция
+ Korean
Действия
Стартиран AndroidAPS
- Базов профил
+ NS upload only (изключва синхронизацията)
+ Само качване на данните в NS. Няма ефект върху данните за КЗ ако локален източник като xDrip е избран. Няма ефект върху профила освен ако не е избран NS-профил.
+ Помпата не е инициализирана!
+ Помпата не е инициализирана, профила не е зададен!
+ Prime/Fill
+ Моля, уверете се, че стойността съответсва на вашият сет! Този инсулин не се включва в IOB!
+ Други
+ Fill/Prime количества инсулин по подразбиране.
Бутон 1
Бутон 2
Бутон 3
- Процентен профил
- Изпрати към помпата
- Редактирай базални стойности
- DIA:
- Редактирай Инс./ВХ
- Редактирай Инс. чувствителност
- Fill/Prime стандарта стойност
- Моля, уверете се, че стойността съответсва на вашият сет! Този инсулин не се включва в IOB!
- mg/dl
- mmol/l
- Друго:
% с който базовият профил ще бъде променен.
- Prime/Fill
- Помпата не е инициализирана!
- Наистина ли искате да нулиратe базата данни?
+ Точен брой часове, с които ще бъде изместен профила!
+ ИЗПРАТИ КЪМ ПОМПАТА
+ Единици:
+ мг/дл
+ ммол/л
+ DIA(време на действие на инсулина):
Целеви диапазон:
- Брой часове, с които ще бъде преместен профила!
- Мерни единици:
- NS upload only (изключва синхронизацията)
- NS upload only. Not effective on SGV unless a local source like xDrip is selected. Not effective on Profiles while NS-Profiles is used.
- Моля рестартирайте телефона или AndroidAPS, в противен случай информацията за грешки няма да се запише(важно за да се потвърди, че алгоритъмът работи правилно)
- Край на временен базал
- Старт на временен базал
- Базал:
- Базалните стойности са под минимума. Не е зададен профил!
+ Редактирай базални стойности
+ Редактирай Инс. чувствителност
+ Редактирай Инс./ВХ
+ Базов профил:
+ Процентен профил
+ Диапазон за визуализация
+ Стойност на линиите за ниска и висока КЗ (mmol/l) за телефона и часовника
+ Ниска КЗ под
+ Висока КЗ над
+ Часовник
+ Изпрати отново всички дани
+ Отвори настройките на часовника
+ Грешка в промпата
+ Изтощена батерия
+ Помпа изключена
Батерията на помпата е изтощена
- КЗ:
+ DanaR Korean
+ Избран е грешен тип помпа
+ Базал:
+ Неуспешно задаване на базален профил
+ Профила на помпата е обновен
Забрани EasyUI режим в помпата
Разреши удължен болус в помпата
Промени режима от U/d на U/h в помпата
- DanaR за Корея
- Горна линия
- Последна КЗ:
- Долна линия
- Изтощена батерия
- Отвори Опции на часовника
- Стойност на линиите за ниска и висока КЗ (mmol/l)
- Диапазон на визуализация
- Неуспешно задаване на базален профил
- Базалният профил е обновен
- Помпата не е инициализирана, профила не е зададен!
- Грешка на помпата
- Помпата е изключена
- Изпрати всички данни отново
- Wear
- Избран е грешен тип помпа
- преди %d м.
- ДЕЙСТВ
- WEAR
- ВП
- TREAT
- ВЦeл
- ВБ
- SMS
- ОПРОФ
- ПРОф
- ОСН
- ЦЕЛИ
- OAPS
- "Loop "
- ЛПр
- Dana
- КОНФ
- ППр
- CaPr
+ Базалните стойности са под минимума. Не е зададен профил!
+ BG:
+ Last BG:
+ Писалки
+ MM640g
+ Текущи известия
+ ПЕКАЛЕНО СТАРИ ДАННИ
+ преди %d мин
+ %dmin ago
+ Локален профил
+ OpenAPS AMA
+ Краткоср. Δ:
+ Дългоср. Δ:
+ Масив от %d елемента.Актуална стойност:
+ Autosens данни
+ Script debug
+ Разреши AMA autosens
+ Обнови от NS
+ Преди хранене
Физ.активност
+ Премахни запис:
DanaR статистика
+ Комулативна TDD
+ Експоненциално претеглена TDD
Базал
Болус
- Дата
- Стари данни! Натиснете "Презареждане"
- Коефициент
- Общо базален инс.
- Общо базален инс.²
TDD
- Възможна неточност, ако сте използвали болус за презареждане!
- Преди хранене
- Greek
- Инициализиране ...
- Локален профил
- Дългоср. изменение
- Писалки
- OpenAPS AMA
- Разреши AMA autosens
- Autosens данни
- СТАРИ ДАННИ
- Текущи известия
- Script debug
- %.2f ограничено до %.2f
- Премахни запис:
- Краткоср. Δ:
- Къси имена
- Bolus %.2fU delivered successfully
- Експоненциално претеглена TDD
- Комулативна TDD
+ Дата
+ Коефициент
+ # дни
Тегло
- Дни
- MM640g
- Масив от %d елемента. Актуална стойност:
- Basal:
- Bolus:
- Delta:
- IOB:
- %dmin ago
- Изчаква за помпа
+ Възможна неточност, ако сте използвали болус за презареждане!
+ Стари данни - натиснете "ПРЕЗАРЕДИ"
+ Общо базален инсулин
+ ОБИ * 2
+ Инициализация ...
+ ДЕЙСТВ
+ КОНФ
+ LOOP
+ ОПр
+ OAPS
+ Вцел
+ ЛПр
+ DANA
+ ППр
+ ВБ
+ ОСН
+ ВП
+ NSП
+ Леч
+ КП
+ Цел
+ WEAR
+ SMS
+ Използвай къси имена
+ Настройки на параметър Δ КЗ
Използвай краткоср. Δ вместо разлика от последната КЗ
Полезно при данни за КЗ с много шум
- Приближава достигане на дневният лимит на иснулин
- Стартира подаване на %.2fU
- Изпратена калибрация до xDrip
- Копирано в клипборд
- Копирай в клипборд
- Продължителност на инсулиновата активност
- Прекъсване
- Не показвай отново
- Полето не може да бъде празно
+ Разширени настройки
+ Медел: %02X Протокол: %02X Код: %02X
+ Профил
+ По подразбиране: 3 Това е основен параметър в сигурността на OpenAPS. Той ограничава максималният базал да бъде 3 пъти най-голямата стойност от дневните базали. Не би трябвало да има нужа от промяна, защото от опит сме проверили, че максимумите са “3x от най-високия дневен; 4x от текущия”.
+ По подразбиране: 4\nТова е другият основен параметър в сигурността на OpenAPS, и другата половина от "3x от най-високия дневен; 4x от текущия". Това означава, че независимо от макс базал настроен в помпата, стойността на базала не може да е по-висока от тази стойност умножена по стойността на базала за текущият час от денонощието. Това е с цел да предпази от прекалено високи стойности на максималния базал преди да разбират как работи алгоритъма. Повечето от Вас няма да имат нужда от смяна на тази стойност и могат да се справят с настойки на другите параметри.
+ По подразбиране: 1.2\nТова е максималният множител на autosens (а скоро autotune) за да позволи 20% максимален лимит на autosens коефициента, който от своя страна настройва базалите, колко може да намали ISF, и колко ниско може да свали целевата КЗ.
+ По подразбиране: 0.7\nДругата част от сигурността на autosens, слагайки ограничение на колко ниско може да ограничи базалите, колко да повиши чувствителността (ISF) и целевите КЗ.
+ По подразбиране: разрешено\nТова позволява на autosens да променя и целевите КЗ(освен чувствителност и базал).
+ По подразбиране: 2\nBolus snooze се активира след като поставите болус за основно хранене, така цикъла няма да пуснка/намаля базалите веднага след като сте се хранили. Примерът тук е с 2; така при 3 часа DIA това ще означава че bolus snooze ще бъде внимателно изместен 1.5 часа (3DIA/2).
+ По подразбиране: 3.0\nТова е настройка на количеството на покачване на КЗ при усвояване на въглехидратите за всеки 5 минути. По подразбиране 3мг/дл/5мин. Това се отразява на това колко бързо се усвояват COB според алгоритъма, и как това се отразява в предвиждането на КЗ, когато тя не се покачва или пада с различен темп от очакваното.
+ Attention!\nNormally you do not have to change these values below. Please CLICK HERE and READ the text and make sure you UNDERSTAND it before change any of these values.
+ http://openaps.readthedocs.io/en/latest/docs/walkthrough/phase-3/beyond-low-glucose-suspend.html
Позволени са само числа
Позволени са числа между %1$s - %2$s
+ Полето не може да бъде празно
Телефонният номер не е валиден
- Изпълнение
- Получава статус на помпа
+ Грешен тел номер за SMS
+ Копирай
+ Копирано
Покажи лог
- Максимално позволен временен базал Е/ч
- Максимален базален IOB
Калибрация
- Помпата е спряна
+ Калибрация
+ Изпрати калибрация %.1f на xDrip?
xDrip+ не е инсталиран
- Грешна парола
- Изпраща статус в NS
- Настройки на виртуална помпа
- Качва базални стойности
- Отключи настройки
- Спиране на удължен болус
- Спиране на временен базал
+ Калибрацията е изпратена към xDrip
Не е разрешена отдалечена калибрация
- Грешка при подаване на временен базал
- Изпращане на калибрация %.1f към xDrip?
- Настройки на удължен болус
- Парола за настройки
- Настройки на временен базал
+ Неуспешно. Получаването трябва да е разрешено в xDrip.
+ xDrip не получава калибрации
+ Не показвай отново
Помпата е спряна. Натиснете за обновяване
- Настройки на параметър Δ КЗ
- Калибрация на КЗ
- Възрастен
- Разширени настройки
- Дете
- Изчисти опашката
- Изчисти log
-
- Изпрати сега
- неуспешно - проверете телефона
- Недостъпно
- NSCLIENT няма достъп. Грешна API secret?
+ Помпата е спряна
+ Получава статус на помпата
+ Настройва временен базал
+ Спира временен базал
+ Настойва удължен болус
+ Спира удължен болус
+ Обновява базални стойности
+ Спира връзката
+ Изпълнява
+ Настойки Виртуална Помпа
+ Качва статуса в NS
+ Грешна парола
+ Парола за настройки
+ Отключи настройките
+ Близо до максмалния дневен инсулин
вътрешен NSClient
- Autoscroll
- Ще бъде използвано в поле въведено от
- Въведи име на устройство
- Име на устройство
- Въведи API secret (мин. 12 символа)
- Вътрешен NSClient
+ NSCI
URL:
- Въведи Nightscout URL
- Nightscout URL
- NS API secret
- NS API secret
- NSCL
- Възраст на потребителя
- Изберете възраст за определяне лимитите на безопасност
- На пауза
- Профил
+ Autoscroll
Рестарт
- Покажи опашката
- xDrip не приема калибрация
- Статус:
- Тийнейджър
- Раздели IOB на болус и базал IOB на часовника
- Покажи подробен IOB
- Настройки на часовник
- To send calibration %.2f reply with code %s
- Calibration sent. Receiving must be enabled in xDrip.
- Invalid SMS phone number
+ Вътрешен NSClient
+ Nightscout адрес
+ Въведете Nightscout URL
+ NS API парола
+ NS API secret
+ Въведете NS API secret (мин 12 символа)
+ Име на устройството
+ Въведете името на телефона
+ Ще се използва за полето \"Въведено от\"
+ Изпрати сега
+ Изчисти опашка
+ Покажи опашка
Опашка:
- Firmware
+ Статус:
+ Пауза
+ Възраст на потребителя
+ Дете
+ Тийнейджър
+ Възрастен
+ Изберете възраст за определяне лимитите на безопасност
Glimp
- Устройството изглежда не подържа изключване на оптимизиране на батерията
- COB
- Инсулин
- Bluetooh статус
- DEV
- Деактивиран Loop
- Изключи помпата за 10 часа
- Изключи помпата за 1 час
- Изключи помпата за 2 часа
- Изключи помпата за 30 мин.
- Изключи помпата за 3 часа
- Разреши Loop
- Разреши суперболус
- Разреши функцията суперболус в съветника. Не я разрешавайте докато не научите какво наистина прави. ТОВА МОЖЕ ДА СЪЗДАДЕ ОПАСНОСТ ОТ ПРЕДОЗИРАНЕ С ИНСУЛИН.
- Бързодействащ инсулин
- Бързодействащ инсулин с удължаване
- ИНС
- Loop меню
- Loop спрян
- Суперболус (%d м.)
- За приложението
- Спрян (%d м.)
- %s трябва да изключите оптимизация на батерията за оптимална работа
- Отбелязвай старт на програмата в NS
+ Устройството изглежда не подържа изключване на оптимизиране на батерията!
Моля, позволете рарешение
-
- Изключи Loop за 10 ч.
- Суперболус
- "Изключи Loop за 1ч. "
- Изключи Loop за 2ч.
- Изключи Loop за 3ч.
- 15min trend
+ %s се нуждае от зключване на оптимизиране на батерията за пълна функционалност
+ Цикъл изключен
+ Изключен (%d мин)
+ Суперболус (%d мин)
+ Меню Цикъл
+ Изключи цикъла за 1ч
+ Изключи цикъла за 2ч
+ Изключи цикъла за 3ч
+ Изключи цикъла за 10 ч
+ Изключи помпата за 30 мин.
+ Изключи помпата за 1 ч
+ Изключи помпата за 2 ч
+ Изключи помпата за 3 ч
+ Изключи помпата за 10 ч
+ Възстанови
+ Wrong duration
+ Loop suspended
+ Loop resumed
+ промяна за 15мин
COB
- Italian
+ Суперболус
+ Записвай всяко стартиране на AndroidAPS в NS
+ Рестартиране за да се приложат новите настройки.
+ DanaRv2
+ Инсулин
+ Бързодействащ инсулин
+ Novorapid, Novolog, Humalog
+ ИНС
+ Бързодействащ инсулин с удължаване
+ Разреши използването на Суперболус
+ Разреши функцията суперболус в съветника. Не я разрешавайте докато не научите какво наистина прави. ТОВА МОЖЕ ДА СЪЗДАДЕ ОПАСНОСТ ОТ ПРЕДОЗИРАНЕ С ИНСУЛИН.
+ IOB
+ COB
+ PRE
+ BAS
+ Firmware
+ Последно свързване
+ Bluetooh статус
+ За приложението
+ Missing SMS permission
+ DEV
+ xDrip статус (часовник)
+ xDrip статус (часовник)
+ xds
+ Показвай BGI
+ Добави BGI към статуса
+ Без качване на данни в NS
+ Всички данни за NS се пропускат. AAPS е свързан с NS, но не прави промени в NS
+ Стъпка за базал
+ Стъпка за болус
+ Удължен болус
+ Вр. цел
+ Спри удължен болус
+ Възраст на сензора
+ Възраст на канюла
+ Възраст на инсулина
+ часа
+ Тип базал
+ ISF липсва в профила. По подразбиране.
+ IC липсва в профила. По подразбиране.
+ Базал липсва в профила. По подразбиране.
+ Целева КЗ липсва в профила. По подразбиране.
+ Грешен профил !!!
+ Смяна на профил
+ Възраст на батерията на помпата
+ Смяна на батерия
+ Опции за аларми
+ Много висока
+ Висока
+ Ниска
+ Много ниска
+ Текущата стойност е %f
+ Няма данни
+ Много стари данни
+ Когато няма данни повече от [мин]
+ Много стари данни при повече от [мин]
+ Интервал за autosens [ч]
+ Брой часове назад за определяне на чувствителността (приемът на въглехидрати е изключен)
+ Игнорирай събитията от тип Смяна на профил
+ Всички смени на профила се игнорират и винаги се използва текущия профил
+ Помпа
+ OpenAPS
+ Устройство
+ Uploader
+ Определяне на чувствителност
+ ЧУВСТВ
+ чрез Oref0
+ чрез AAPS
+ Настройки за абсорбция
+ Максимално време за усвояване на храненето [ч]
+ Брой часове, за които се очаква храненето да бъде напълно усвоено в организма
+ Показвай удължените болуси като %
+ ВСенз
+ ВИнс
+ ВКан
+ ВБат
+ OAPS
+ UPLD
+ БАЗА
+ УД.
+ Заключен екран
+ Закл
+ Когато включите Autosense feature трябва да въвеждате ВСИЧКИ въглехидрати. В противен случай те ще се изчисляват грешно като повишена чувствителност!!
+ чрез Среднопретеглената стойност
+ OK
+ Откажи
+ трябва да е активно за да изпрати стойностите към помпата!
+ Не всички профили са заредени!
+ Стойностите не са запазени!
+ Изчисти лога
+ неуспешно - моля проверете телефона
+ Недостъпно
+ NSClient няма права за запис. Грешна API secret?
+ Разреши предаване към други приложения (напр. xDrip)
+ Разреши локално предаване на данни
+ Потвърждаване, че КЗ е достъпна в Найтскаут и данните за помпата се качват там
+ Раздели IOB от болус и от базал на часовника
+ Покажи подробен IOB
+ AndroidAPS
diff --git a/app/src/main/res/values-cs/strings.xml b/app/src/main/res/values-cs/strings.xml
index 9dfb85f9a4..1deda05866 100644
--- a/app/src/main/res/values-cs/strings.xml
+++ b/app/src/main/res/values-cs/strings.xml
@@ -26,7 +26,6 @@
Sacharidy
Čas jídla
Trvání
- min
Zadal
Čas
Inzulín
@@ -116,7 +115,7 @@
Dostupné nové doporučení
Přehled
Kalkulačka
- Hodnota bazálu
+ Hodnota bazálu [%]
% (100% = současný)
Bolus
NS profil
@@ -313,8 +312,6 @@
Korekce
Akce
AndroidAPS restartován
- Dočasný bazál konec
- Dočasný bazál začátek
Prosím restartujte Váš telefon nebo restartujte AndroidAPS z nastavení systému jinak nebudou zaznamenány ladící informace (důležité pro sledování a kontrolu, zda algoritmus pracuje správně)
Bazální profil:
Baterie v pumpě vybitá
@@ -540,4 +537,91 @@
O aplikaci
Chybějící povolení SMS
Italian
+ Čas v hodinách, ve kterém předpokládáme, že všechny sacharidy budou strávené
+ Max. doba absorbce sacharidu [h]
+ Nastavení absorbce sacharidů
+ BAS
+ Krok bolusu
+ Stáří kanyly
+ KAN
+ SACHARIDY & BOLUSY
+ CGM & OPENAPS
+ Stáří inzulínu
+ INZ
+ Trvání [min]
+ Stáří baterie v pumpě
+ BAT
+ PUMPA
+ Výměna baterie pumpy
+ Stáří senzoru
+ SEN
+ COB
+ Detekce citlivosti
+ Všechny profily nenačteny
+ musí být aktivovaný, aby šly poslat hodnoty do pumpy!
+ Hodnoty nejsou uloženy!
+ DanaRv2
+ ODCH
+ Zařízení
+ Ignorovat přepnutí profilu
+ Všechny záznamy přepnutí profilu jsou ignorovány a vždy je použit aktivní profil
+ ProdlouženýBolus
+ hodin
+ I:S chybí. Je použita výchozí hodnota.
+ Chybný profil !!!
+ IOB
+ Senzitivita chybí. Je použita výchozí hodnota.
+ Zámek obrazovky
+ Zámek
+ Zrušit
+ OK
+ Nastavení alarmů
+ Povolit odesílání do ostatních aplikací (jako xDrip)
+ Povolení odesílaní
+ Zakazát nahrávání do NS
+ Všechny data odeslaná do NS jsou zahozena. AAPS je připojen k NS, ale nedělá do něj žádné změny.
+ Vysoká
+ Nízká
+ Zastaralá data
+ Mezní hodnota pro zastaralá data [min]
+ Právě nastaveno na %f
+ Urgetní mezní hodnota pro zastaralá data [min]
+ Urgentně vysoká
+ Urgentně nízká
+ Urgentně zastaralá data
+ Zrušit prodloužený bolus
+ Hodnota bazálu [U/h]
+ Typ bazálu
+ PRE
+ PřepnutíProfilu
+ Pumpa
+ SEN
+ Statusový řádek xDripu (hodinky)
+ Status z xDripu (hodinky)
+ xds
+ EXT
+ Chybí cílový rozsah. Použity výchozí hodnoty.
+ DočasnýBazál
+ DočasnýCíl
+ Oznámení na hodinkách
+ Předávat oznámení jako zprávy do hodinek
+ Přidat BGI do stavové řádky
+ Zobrazovat BGI
+ SENS
+ Ruština
+ Při zapnuté detektci sensitivity nezapomeňte vkládat všechny sacharidy. Jinak budou odchylky mylně vyhodnocovány jako změna sensitivity !!
+ Sensitivita AAPS
+ Sensotivita Oref0
+ Sensitivita vážený průměr
+ OpenAPS
+ OAPS
+ Bluetooth status
+ AKTIVITA & ZPĚTNÁ VAZBA
+ Chybějící bazál v profilu. Použita výchozí hodnota
+ Krok bazálu
+ BAZ
+ Nepodporovaná verze Nightscoutu
+ Uploader
+ UPLD
+ AndroidAPS
diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml
index 6fa152a194..702a18ca2a 100644
--- a/app/src/main/res/values-de/strings.xml
+++ b/app/src/main/res/values-de/strings.xml
@@ -33,7 +33,6 @@
CGM Sensor Start
Absolut
Kohlehydrate
- min
Insulin
Glukose-Art
Ereignis-Typ
@@ -90,7 +89,7 @@
Aktives IOB total:
IOB total:
Basal IOB
- U
+ E
Up
Virtuelle Pumpe
Reservoir
@@ -119,7 +118,7 @@
Benutze extended Bolus für hohe temps (\>200%)>
Pumpen Status verfügbar in NS
% (100% = current)
- Basal Wert
+ Basal Wert [%]
Extended Bolus
Übersicht
Neue Empfehlung verfügbar
@@ -286,7 +285,6 @@
Basalrate:
Basisprofil:
Pumpenbatterie entladen
- Basal Temp Ende
neu laden
Hoch Markierung
Niedrig Markierung
@@ -328,11 +326,10 @@
Telefonnummer ist nicht gültig.
Bitte verwenden Sie nur Ziffern von %1$s - %2$s
Warte auf Pumpe
-
+ Wear
Bitte starte dein Telefon neu oder starte AndroidAPS in den System-Einstellungen neu. Anderenfalls hat AndroidAPS kein logging (wichtig zum Nachverfolgen und Verifizieren, dass der Algorithmus korrekt funktioniert)
Immer das kurze Durchschnitts-Delta statt dem einfachen Delta verwenden
Sinnvoll, wenn die Daten von einer ungefilterten Quelle Signalrauschen haben.
- Basal Temp Anfang
Tagesinsulin-Limit wird erreicht.
BR
Kalibrierung an xDrip gesendet
@@ -357,4 +354,47 @@
Trenne IOB in Bolus- und Basal-IOB auf dem Watchface
Falsches Passwort
Italian
+ Glimp
+ MM640g
+ Zeit in Stunden in der zu erwarten ist, dass alle Kohlenhydrate resorbiert sein werden
+ Maximale Essens-Resorptionszeit [h]
+ Resorptions-Einstellungen
+ Aktivität
+ Erwachsener
+ Erweiter
+ AndroidAPS
+ BAS
+ Basal-Schritt
+ Basal fehlt im Profil. Verwende Standardwert.
+ Basalwert unter dem Minimum. Profil nicht gesetzt!
+ Gerät untertützt anscheinend das deaktivieren der Akku-Leistungsoptimierung nicht.
+ Bolus-Schritt
+ Werde %.2fE abgeben
+ AKTIVITÄT & FEEDBACK
+ Katheter-Liegedauer
+ CAGE
+ CARBS & BOLUS
+ CGM & OPENAPS
+
+ Dauer [min]
+ pausiert
+ Patientenalter
+ Bitte wähle das Pateintenalter um die Sicherheits-Limits festzulegen
+ Ziel fehlt im Profil. Verwende Standardwert.h
+ Teenager
+ TempBasal
+ Tempbasal Abgabe-Fehler
+ TempZiel
+ Zeit in Stunden um die das profil zylindrisch verschoben wird.
+
+ COB
+ Nicht-unterstütze Nightscout-Version
+ Uploader
+ UPLD
+ EXT
+ Firmware
+ Virtuelle Pumpe Einstellungen
+ Status zu NS hochladen
+ Superbolus
+
diff --git a/app/src/main/res/values-el/strings.xml b/app/src/main/res/values-el/strings.xml
index e146ba4571..729b67be9e 100644
--- a/app/src/main/res/values-el/strings.xml
+++ b/app/src/main/res/values-el/strings.xml
@@ -19,4 +19,5 @@
" "
" "
Italian
+ AndroidAPS
\ No newline at end of file
diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml
index 6aa5dc7979..c619bc3322 100644
--- a/app/src/main/res/values-es/strings.xml
+++ b/app/src/main/res/values-es/strings.xml
@@ -108,7 +108,7 @@
Plugin está desactivado
Violación restricciones
Error de administración del bolo
- Valor basal
+ Valor basal [%]
% (100% = actual)
Aceptar nueva basal temporal:
Bolo
@@ -170,7 +170,6 @@
Duración
Dosis
Absoluto
- min
Notas
Fecha Hora
Perfil
@@ -332,8 +331,6 @@
Comando desconocido o respuesta incorrecta
¡Por favor asegurar que la cantidad coincide con la especificación del set de infusión!
Para iniciar basal %.2fU/h responder con código %s
- Inicio Basal Temporal
- Fin Basal Temporal
" "
" "
" "
@@ -387,11 +384,10 @@
ENVIAR A BOMBA
Media corta delta
Bolo:
- Ultimo BG:
+ Último BG:
%dmin antes
Bolo %.2fU enviado correctamente
Rango Objetivo:
-
Unidades:
Sólo se permiten caracteres numéricos
Sólo se permiten dígitos en el rango %1$s - %2$s
@@ -399,4 +395,5 @@
Número de teléfono inválido
Esperando bomba
Italian
+ AndroidAPS
diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml
index 10ed6e1d4c..0461f4b0fc 100644
--- a/app/src/main/res/values-it/strings.xml
+++ b/app/src/main/res/values-it/strings.xml
@@ -4,9 +4,7 @@
Italiano
MM640g
assoluto
-
azioni
-
attivita\'
adulto
settaggi avanzati
@@ -49,7 +47,6 @@
Tipo di glucosio
Insulina
Glucometro
- Minimo
Note
Altro
Percentuale
@@ -312,7 +309,7 @@
Valido:
Aggiungere
Bolo Esteso
- Valore Basale
+ Valore Basale [%]
Uscire
Eliminare
HOME
@@ -499,5 +496,6 @@
Profilo NS
Profilo Basale aggiornato nel Micro
Impostazione Profilo Basale fallito
+ AndroidAPS
diff --git a/app/src/main/res/values-ko/strings.xml b/app/src/main/res/values-ko/strings.xml
index be4ded3526..f39c68d957 100644
--- a/app/src/main/res/values-ko/strings.xml
+++ b/app/src/main/res/values-ko/strings.xml
@@ -108,7 +108,7 @@
제한 위반
식사주입 전송 에러
Tempbasal delivery error
- 기초주입 값
+ 기초주입 값 [%]
% (100% = 현재)
새 임시기초주입 적용:
식사주입
@@ -171,7 +171,6 @@
Duration
Percent
Absolute
- min
Notes
Event time
Profile
@@ -358,8 +357,6 @@
Edit Base-IC:
Base Profile:
CircadianPercentageProfile
- Basal Temp End
- Basal Temp Start
차트 표시 범위
Overview/스마트워치 차트 표시용 고/저혈당 선
저혈당 선
@@ -515,4 +512,5 @@
성인
안전제한을 설정하기 위해 당뇨인의 나이를 선택하세요
Italian
+ AndroidAPS
diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml
index 7f797ea3a5..ee6f7cf8e9 100644
--- a/app/src/main/res/values-ru/strings.xml
+++ b/app/src/main/res/values-ru/strings.xml
@@ -12,8 +12,6 @@
всегда используйте укороченное среднее приращение вместо простого
AndroidAPS запущен
полезно когда данные из нефильтруемых источников вроде Xdrip зашумляются
- конец действия временного базала
- начало действия временного базала
приближается суточный лимит инсулина
режим APS
массив %d элементов. актуальная величина:
@@ -62,7 +60,6 @@
тип глюкозы
инсулин
глюкометр
- минут
заметки
другое
процент
@@ -389,7 +386,7 @@
использовать до:
добавить
расширенный болюс
- величина базала
+ величина базала
% (100% = current)
редактировать
удалить
@@ -430,7 +427,6 @@
перезапуск
выход из приложения для применения настроек
возобновить
- русский
безопасность
сохранить
ОТПРАВИТЬ
@@ -570,4 +566,5 @@
"состояние xdrip (часы) "
xds
разрешенный предел достигнут
+ AndroidAPS
diff --git a/app/src/main/res/values/arrays.xml b/app/src/main/res/values/arrays.xml
index 2e15c489da..459f671821 100644
--- a/app/src/main/res/values/arrays.xml
+++ b/app/src/main/res/values/arrays.xml
@@ -44,5 +44,4 @@
- @string/key_adult
- Russian
\ No newline at end of file
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index a44e5ef758..1f37d81e2d 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -1,4 +1,4 @@
-
+
Tratments safety
Max allowed bolus [U]
Max allowed carbs [g]
@@ -114,7 +114,7 @@
Constraints violation
Bolus delivery error
Tempbasal delivery error
- Basal value
+ Basal value [%]
% (100% = current)
Accept new temp basal:
Bolus
@@ -183,7 +183,6 @@
Duration
Percent
Absolute
- min
Notes
Event time
Profile
@@ -375,8 +374,6 @@
Edit Base-IC:
Base Profile:
CircadianPercentageProfile
- Basal Temp End
- Basal Temp Start
Range for Visualization
High and low mark for the charts in Overview and Smartwatch
LOW mark
@@ -580,6 +577,7 @@
Superbolus
Log app start to NS
ns_logappstartedevent
+ nsclient_localbroadcasts
Exiting application to apply settings.
DanaRv2
Insulin
@@ -648,8 +646,9 @@
Interval for autosens [h]
Amount of hours in the past for sensitivity detection (carbs absorption time is excluded)
openapsama_autosens_period
- RAT
- do_not_track_profile_switch
+ nsclient_localbroadcasts
+ SEN
+ do_not_track_profile_switch
Ignore profile switch events
All profile switch events are ignored and active profile is always used
Pump
@@ -685,4 +684,13 @@
Values not stored!
Overview Notifications
Pass the Overview Notifications through as wear confirmation messages.
+ Enable broadcasts to other apps (like xDrip).
+ Enable local Broadcasts.
+ ACTIVITY & FEEDBACK
+ CARBS & BOLUS
+ CGM & OPENAPS
+ PUMP
+ Basal value [U/h]
+ Duration [min]
+
diff --git a/app/src/main/res/xml/pref_nsclientinternal.xml b/app/src/main/res/xml/pref_nsclientinternal.xml
index 8c12efd5de..5f401d6c0e 100644
--- a/app/src/main/res/xml/pref_nsclientinternal.xml
+++ b/app/src/main/res/xml/pref_nsclientinternal.xml
@@ -27,6 +27,13 @@
android:key="@string/key_ns_logappstartedevent"
android:title="@string/ns_logappstartedevent" />
+
+
+
menuitems = new Vector();
+ menuitems.add("TempT");
+ menuitems.add("Bolus");
+ if(showWizard) menuitems.add("Wizard");
+ menuitems.add("Settings");
+ menuitems.add("Status");
+ if (showPrimeFill) menuitems.add("Prime/Fill");
+
+ return menuitems.toArray(new String[menuitems.size()]);
}
@Override
- protected void doAction(int position) {
+ protected void doAction(String action) {
Intent intent;
- if(!BuildConfig.WEAR_CONTROL) {
- switch (position) {
- case 0:
- intent = new Intent(this, AAPSPreferences.class);
- intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
- this.startActivity(intent);
- break;
- case 1:
- ListenerService.requestData(this);
- break;
- }
- return;
+ if ("Settings".equals(action)) {
+ intent = new Intent(this, AAPSPreferences.class);
+ intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+ this.startActivity(intent);
+ } else if ("Re-Sync".equals(action)) {
+ ListenerService.requestData(this);
+ } else if ("TempT".equals(action)) {
+ intent = new Intent(this, TempTargetActivity.class);
+ intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+ this.startActivity(intent);
+ } else if ("Bolus".equals(action)) {
+ intent = new Intent(this, BolusActivity.class);
+ intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+ this.startActivity(intent);
+ } else if ("Wizard".equals(action)) {
+ intent = new Intent(this, WizardActivity.class);
+ intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+ this.startActivity(intent);
+ } else if ("Status".equals(action)) {
+ intent = new Intent(this, StatusMenuActivity.class);
+ intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+ this.startActivity(intent);
+ } else if ("Prime/Fill".equals(action)) {
+ intent = new Intent(this, FillMenuActivity.class);
+ intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+ this.startActivity(intent);
}
-
-
- switch (position) {
- case 0:
- intent = new Intent(this, TempTargetActivity.class);
- intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
- this.startActivity(intent);
- break;
- case 1:
- intent = new Intent(this, BolusActivity.class);
- intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
- this.startActivity(intent);
- break;
- case 2:
- intent = new Intent(this, WizardActivity.class);
- intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
- this.startActivity(intent);
- break;
- case 3:
- intent = new Intent(this, AAPSPreferences.class);
- intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
- this.startActivity(intent);
- break;
- case 4:
- ListenerService.requestData(this);
- break;
- case 5:
- intent = new Intent(this, StatusMenuActivity.class);
- intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
- this.startActivity(intent);
- break;
- case 6:
- boolean showPrimeFill = sp.getBoolean("primefill", false);
- if(showPrimeFill) {
- intent = new Intent(this, FillMenuActivity.class);
- intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
- this.startActivity(intent);
- }
- break;
- }
-
}
}
diff --git a/wear/src/main/java/info/nightscout/androidaps/interaction/menus/MainMenuRestrictedActivity.java b/wear/src/main/java/info/nightscout/androidaps/interaction/menus/MainMenuRestrictedActivity.java
deleted file mode 100644
index 779e9611d2..0000000000
--- a/wear/src/main/java/info/nightscout/androidaps/interaction/menus/MainMenuRestrictedActivity.java
+++ /dev/null
@@ -1,53 +0,0 @@
-package info.nightscout.androidaps.interaction.menus;
-
-import android.content.Intent;
-import android.content.SharedPreferences;
-import android.os.Bundle;
-import android.preference.PreferenceManager;
-
-import info.nightscout.androidaps.data.ListenerService;
-import info.nightscout.androidaps.interaction.AAPSPreferences;
-import info.nightscout.androidaps.interaction.actions.BolusActivity;
-import info.nightscout.androidaps.interaction.actions.TempTargetActivity;
-import info.nightscout.androidaps.interaction.actions.WizardActivity;
-import info.nightscout.androidaps.interaction.utils.MenuListActivity;
-
-/**
- * Created by adrian on 09/02/17.
- */
-
-public class MainMenuRestrictedActivity extends MenuListActivity {
-
- SharedPreferences sp;
-
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- sp = PreferenceManager.getDefaultSharedPreferences(this);
- super.onCreate(savedInstanceState);
- ListenerService.requestData(this);
- }
-
- @Override
- protected String[] getElements() {
- return new String[] {
- "Settings",
- "Re-Sync"};
- }
-
- @Override
- protected void doAction(int position) {
-
- Intent intent;
- switch (position) {
- case 0:
- intent = new Intent(this, AAPSPreferences.class);
- intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
- this.startActivity(intent);
- break;
- case 1:
- ListenerService.requestData(this);
- break;
- }
-
- }
-}
diff --git a/wear/src/main/java/info/nightscout/androidaps/interaction/menus/StatusMenuActivity.java b/wear/src/main/java/info/nightscout/androidaps/interaction/menus/StatusMenuActivity.java
index a57bd17c8f..f17bc23e46 100644
--- a/wear/src/main/java/info/nightscout/androidaps/interaction/menus/StatusMenuActivity.java
+++ b/wear/src/main/java/info/nightscout/androidaps/interaction/menus/StatusMenuActivity.java
@@ -14,32 +14,22 @@ public class StatusMenuActivity extends MenuListActivity {
return new String[] {
"Pump",
"Loop",
- "Targets",
"CPP",
- "OAPS Result"};
+ "TDD"};
+
}
@Override
- protected void doAction(int position) {
- switch (position) {
-
- case 0:
- ListenerService.initiateAction(this, "status pump");
- break;
- case 1:
- ListenerService.initiateAction(this, "status loop");
- break;
- case 2:
- ListenerService.initiateAction(this, "status targets");
- break;
- case 3:
- ListenerService.initiateAction(this, "opencpp");
- break;
- case 4:
- ListenerService.initiateAction(this, "status oapsresult");
- break;
+ protected void doAction(String action) {
+ if ("Pump".equals(action)) {
+ ListenerService.initiateAction(this, "status pump");
+ } else if ("Loop".equals(action)) {
+ ListenerService.initiateAction(this, "status loop");
+ } else if ("CPP".equals(action)) {
+ ListenerService.initiateAction(this, "opencpp");
+ } else if ("TDD".equals(action)) {
+ ListenerService.initiateAction(this, "tddstats");
}
-
}
}
diff --git a/wear/src/main/java/info/nightscout/androidaps/interaction/utils/MenuListActivity.java b/wear/src/main/java/info/nightscout/androidaps/interaction/utils/MenuListActivity.java
index d151196091..9d6fd51126 100644
--- a/wear/src/main/java/info/nightscout/androidaps/interaction/utils/MenuListActivity.java
+++ b/wear/src/main/java/info/nightscout/androidaps/interaction/utils/MenuListActivity.java
@@ -22,7 +22,7 @@ public abstract class MenuListActivity extends Activity
protected abstract String[] getElements();
- protected abstract void doAction(int position);
+ protected abstract void doAction(String position);
@Override
protected void onPause(){
@@ -50,7 +50,7 @@ public abstract class MenuListActivity extends Activity
// WearableListView click listener
@Override
public void onClick(WearableListView.ViewHolder v) {
- Integer tag = (Integer) v.itemView.getTag();
+ String tag = (String) v.itemView.getTag();
doAction(tag);
//ActionsDefinitions.doAction(v.getAdapterPosition(), this);
finish();
@@ -105,7 +105,7 @@ public abstract class MenuListActivity extends Activity
// replace text contents
view.setText(mDataset[position]);
// replace list item's metadata
- holder.itemView.setTag(position);
+ holder.itemView.setTag(mDataset[position]);
}
// Return the size of your dataset
diff --git a/wear/src/main/res/xml/preferences.xml b/wear/src/main/res/xml/preferences.xml
index 57050ef0f5..aa78611b0c 100644
--- a/wear/src/main/res/xml/preferences.xml
+++ b/wear/src/main/res/xml/preferences.xml
@@ -121,6 +121,13 @@
app:wear_iconOff="@drawable/settings_off"
app:wear_iconOn="@drawable/settings_on"/>
+
+