Merge remote-tracking branch 'origin/dev' into dev

This commit is contained in:
Roumen Georgiev 2018-05-21 11:01:07 +03:00
commit d927b83281
65 changed files with 822 additions and 265 deletions

View file

@ -44,7 +44,7 @@ def generateGitBuild = { ->
stringBuilder.append('NoGitSystemAvailable') stringBuilder.append('NoGitSystemAvailable')
} }
stringBuilder.append('-') stringBuilder.append('-')
stringBuilder.append((new Date()).format('yyyy.MM.dd')) stringBuilder.append((new Date()).format('yyyy.MM.dd-HH:mm'))
stringBuilder.append('"') stringBuilder.append('"')
return stringBuilder.toString() return stringBuilder.toString()
} }

View file

@ -168,8 +168,9 @@
android:value="59d462666c664c57b29e1d79ea123e01f8057cfa" /> android:value="59d462666c664c57b29e1d79ea123e01f8057cfa" />
<activity <activity
android:name=".startupwizard.SetupWizardActivity" android:name=".setupwizard.SetupWizardActivity"
android:configChanges="orientation|keyboardHidden|screenSize" android:configChanges="orientation|keyboardHidden|screenSize"
android:theme="@style/AppTheme.SetupWizard"
android:label="@string/title_activity_setup_wizard"></activity> android:label="@string/title_activity_setup_wizard"></activity>
</application> </application>

View file

@ -49,7 +49,7 @@ import info.nightscout.androidaps.plugins.ConfigBuilder.ConfigBuilderPlugin;
import info.nightscout.androidaps.plugins.Food.FoodPlugin; import info.nightscout.androidaps.plugins.Food.FoodPlugin;
import info.nightscout.androidaps.plugins.Overview.events.EventSetWakeLock; import info.nightscout.androidaps.plugins.Overview.events.EventSetWakeLock;
import info.nightscout.androidaps.plugins.Treatments.TreatmentsPlugin; import info.nightscout.androidaps.plugins.Treatments.TreatmentsPlugin;
import info.nightscout.androidaps.startupwizard.SetupWizardActivity; import info.nightscout.androidaps.setupwizard.SetupWizardActivity;
import info.nightscout.androidaps.tabs.SlidingTabLayout; import info.nightscout.androidaps.tabs.SlidingTabLayout;
import info.nightscout.androidaps.tabs.TabPageAdapter; import info.nightscout.androidaps.tabs.TabPageAdapter;
import info.nightscout.utils.ImportExportPrefs; import info.nightscout.utils.ImportExportPrefs;
@ -90,6 +90,12 @@ public class MainActivity extends AppCompatActivity implements View.OnClickListe
} }
askForBatteryOptimizationPermission(); askForBatteryOptimizationPermission();
doMigrations(); doMigrations();
if (!SP.getBoolean(R.string.key_setupwizard_processed, false)) {
Intent intent = new Intent(this, SetupWizardActivity.class);
startActivity(intent);
}
if (Config.logFunctionCalls) if (Config.logFunctionCalls)
log.debug("onCreate"); log.debug("onCreate");

View file

@ -179,10 +179,10 @@ public class FillDialog extends DialogFragment implements OnClickListener {
} }
if (pumpSiteChangeCheckbox.isChecked()) if (pumpSiteChangeCheckbox.isChecked())
confirmMessage.add("" + "<font color='" + MainApp.gc(R.color.high) + "'>" + MainApp.gs(R.string.record_pump_site_change) + "</font>"); confirmMessage.add("" + "<font color='" + MainApp.gc(R.color.actionsConfirm) + "'>" + MainApp.gs(R.string.record_pump_site_change) + "</font>");
if (insulinCartridgeChangeCheckbox.isChecked()) if (insulinCartridgeChangeCheckbox.isChecked())
confirmMessage.add("" + "<font color='" + MainApp.gc(R.color.high) + "'>" + MainApp.gs(R.string.record_insulin_cartridge_change) + "</font>"); confirmMessage.add("" + "<font color='" + MainApp.gc(R.color.actionsConfirm) + "'>" + MainApp.gs(R.string.record_insulin_cartridge_change) + "</font>");
final String notes = notesEdit.getText().toString(); final String notes = notesEdit.getText().toString();
if (!notes.isEmpty()) { if (!notes.isEmpty()) {

View file

@ -67,23 +67,19 @@ public class ObjectivesFragment extends SubscriberFragment {
holder.startButton.setTag(o); holder.startButton.setTag(o);
holder.verifyButton.setTag(o); holder.verifyButton.setTag(o);
holder.startButton.setOnClickListener(new View.OnClickListener() { holder.startButton.setOnClickListener(v -> {
public void onClick(View v) { ObjectivesPlugin.Objective o1 = (ObjectivesPlugin.Objective) v.getTag();
ObjectivesPlugin.Objective o = (ObjectivesPlugin.Objective) v.getTag(); o1.started = new Date();
o.started = new Date();
updateGUI(); updateGUI();
ObjectivesPlugin.saveProgress(); ObjectivesPlugin.saveProgress();
}
}); });
holder.verifyButton.setOnClickListener(new View.OnClickListener() { holder.verifyButton.setOnClickListener(v -> {
public void onClick(View v) { ObjectivesPlugin.Objective o12 = (ObjectivesPlugin.Objective) v.getTag();
ObjectivesPlugin.Objective o = (ObjectivesPlugin.Objective) v.getTag(); if (ObjectivesPlugin.getPlugin().requirementsMet(o12.num).done || enableFake.isChecked()) {
if (ObjectivesPlugin.getPlugin().requirementsMet(o.num).done || enableFake.isChecked()) { o12.accomplished = new Date();
o.accomplished = new Date();
updateGUI(); updateGUI();
ObjectivesPlugin.saveProgress(); ObjectivesPlugin.saveProgress();
} }
}
}); });
long prevObjectiveAccomplishedTime = position > 0 ? long prevObjectiveAccomplishedTime = position > 0 ?

View file

@ -22,6 +22,7 @@ import info.nightscout.androidaps.interfaces.PluginDescription;
import info.nightscout.androidaps.interfaces.PluginType; import info.nightscout.androidaps.interfaces.PluginType;
import info.nightscout.androidaps.interfaces.PumpInterface; import info.nightscout.androidaps.interfaces.PumpInterface;
import info.nightscout.androidaps.plugins.ConfigBuilder.ConfigBuilderPlugin; import info.nightscout.androidaps.plugins.ConfigBuilder.ConfigBuilderPlugin;
import info.nightscout.androidaps.plugins.ConstraintsObjectives.events.EventObjectivesSaved;
import info.nightscout.androidaps.plugins.ConstraintsSafety.SafetyPlugin; import info.nightscout.androidaps.plugins.ConstraintsSafety.SafetyPlugin;
import info.nightscout.androidaps.plugins.Loop.LoopPlugin; import info.nightscout.androidaps.plugins.Loop.LoopPlugin;
import info.nightscout.androidaps.plugins.NSClientInternal.NSClientPlugin; import info.nightscout.androidaps.plugins.NSClientInternal.NSClientPlugin;
@ -87,7 +88,7 @@ public class ObjectivesPlugin extends PluginBase implements ConstraintsInterface
this.started = started; this.started = started;
} }
boolean isStarted() { public boolean isStarted() {
return started.getTime() > 0; return started.getTime() > 0;
} }
@ -233,6 +234,7 @@ public class ObjectivesPlugin extends PluginBase implements ConstraintsInterface
editor.apply(); editor.apply();
if (Config.logPrefsChange) if (Config.logPrefsChange)
log.debug("Objectives stored"); log.debug("Objectives stored");
MainApp.bus().post(new EventObjectivesSaved());
} }
} }

View file

@ -0,0 +1,6 @@
package info.nightscout.androidaps.plugins.ConstraintsObjectives.events;
import info.nightscout.androidaps.events.Event;
public class EventObjectivesSaved extends Event {
}

View file

@ -112,7 +112,7 @@ public class BolusProgressDialog extends DialogFragment implements View.OnClickL
stopPressed = true; stopPressed = true;
stopPressedView.setVisibility(View.VISIBLE); stopPressedView.setVisibility(View.VISIBLE);
stopButton.setVisibility(View.INVISIBLE); stopButton.setVisibility(View.INVISIBLE);
ConfigBuilderPlugin.getActivePump().stopBolusDelivering(); ConfigBuilderPlugin.getCommandQueue().cancelAllBoluses();
break; break;
} }
} }

View file

@ -303,21 +303,21 @@ public class NewCarbsDialog extends DialogFragment implements OnClickListener, C
if (currentProfile.getUnits().equals(Constants.MMOL)) { if (currentProfile.getUnits().equals(Constants.MMOL)) {
unitLabel = "mmol/l"; unitLabel = "mmol/l";
} }
actions.add(MainApp.gs(R.string.temptargetshort) + ": " + "<font color='" + MainApp.gc(R.color.tempTargetConfirmation) + "'>" + DecimalFormatter.to1Decimal(activityTT) + " " + unitLabel + " (" + activityTTDuration + " min)</font>");
actions.add(MainApp.gs(R.string.temptargetshort) + ": " + "<font color='" + MainApp.gc(R.color.high) + "'>" + DecimalFormatter.to1Decimal(activityTT) + " " + unitLabel + " (" + activityTTDuration + " min)</font>");
} }
if (startEatingSoonTTCheckbox.isChecked()) { if (startEatingSoonTTCheckbox.isChecked()) {
if (currentProfile.getUnits().equals(Constants.MMOL)) { if (currentProfile.getUnits().equals(Constants.MMOL)) {
actions.add(MainApp.gs(R.string.temptargetshort) + ": " + "<font color='" + MainApp.gc(R.color.high) + "'>" + DecimalFormatter.to1Decimal(eatingSoonTT) + " mmol/l (" + eatingSoonTTDuration + " min)</font>"); actions.add(MainApp.gs(R.string.temptargetshort) + ": " + "<font color='" + MainApp.gc(R.color.tempTargetConfirmation) + "'>" + DecimalFormatter.to1Decimal(eatingSoonTT) + " mmol/l (" + eatingSoonTTDuration + " min)</font>");
} else } else {
actions.add(MainApp.gs(R.string.temptargetshort) + ": " + "<font color='" + MainApp.gc(R.color.high) + "'>" + DecimalFormatter.to0Decimal(eatingSoonTT) + " mg/dl (" + eatingSoonTTDuration + " min)</font>"); actions.add(MainApp.gs(R.string.temptargetshort) + ": " + "<font color='" + MainApp.gc(R.color.tempTargetConfirmation) + "'>" + DecimalFormatter.to0Decimal(eatingSoonTT) + " mg/dl (" + eatingSoonTTDuration + " min)</font>");
}
} }
if (startHypoTTCheckbox.isChecked()) { if (startHypoTTCheckbox.isChecked()) {
if (currentProfile.getUnits().equals(Constants.MMOL)) { if (currentProfile.getUnits().equals(Constants.MMOL)) {
actions.add(MainApp.gs(R.string.temptargetshort) + ": " + "<font color='" + MainApp.gc(R.color.high) + "'>" + DecimalFormatter.to1Decimal(hypoTT) + " mmol/l (" + hypoTTDuration + " min)</font>"); actions.add(MainApp.gs(R.string.temptargetshort) + ": " + "<font color='" + MainApp.gc(R.color.tempTargetConfirmation) + "'>" + DecimalFormatter.to1Decimal(hypoTT) + " mmol/l (" + hypoTTDuration + " min)</font>");
} else } else {
actions.add(MainApp.gs(R.string.temptargetshort) + ": " + "<font color='" + MainApp.gc(R.color.high) + "'>" + DecimalFormatter.to0Decimal(hypoTT) + " mg/dl (" + hypoTTDuration + " min)</font>"); actions.add(MainApp.gs(R.string.temptargetshort) + ": " + "<font color='" + MainApp.gc(R.color.tempTargetConfirmation) + "'>" + DecimalFormatter.to0Decimal(hypoTT) + " mg/dl (" + hypoTTDuration + " min)</font>");
}
} }
int timeOffset = editTime.getValue().intValue(); int timeOffset = editTime.getValue().intValue();

View file

@ -217,9 +217,9 @@ public class NewInsulinDialog extends DialogFragment implements OnClickListener
if (startEatingSoonTTCheckbox.isChecked()) { if (startEatingSoonTTCheckbox.isChecked()) {
if (currentProfile.getUnits().equals(Constants.MMOL)) { if (currentProfile.getUnits().equals(Constants.MMOL)) {
actions.add(MainApp.gs(R.string.temptargetshort) + ": " + "<font color='" + MainApp.gc(R.color.high) + "'>" + DecimalFormatter.to1Decimal(eatingSoonTT) + " mmol/l (" + eatingSoonTTDuration + " min)</font>"); actions.add(MainApp.gs(R.string.temptargetshort) + ": " + "<font color='" + MainApp.gc(R.color.tempTargetConfirmation) + "'>" + DecimalFormatter.to1Decimal(eatingSoonTT) + " mmol/l (" + eatingSoonTTDuration + " min)</font>");
} else } else
actions.add(MainApp.gs(R.string.temptargetshort) + ": " + "<font color='" + MainApp.gc(R.color.high) + "'>" + DecimalFormatter.to0Decimal(eatingSoonTT) + " mg/dl (" + eatingSoonTTDuration + " min)</font>"); actions.add(MainApp.gs(R.string.temptargetshort) + ": " + "<font color='" + MainApp.gc(R.color.tempTargetConfirmation) + "'>" + DecimalFormatter.to0Decimal(eatingSoonTT) + " mg/dl (" + eatingSoonTTDuration + " min)</font>");
} }
int timeOffset = editTime.getValue().intValue(); int timeOffset = editTime.getValue().intValue();

View file

@ -59,6 +59,8 @@ public class Notification {
public static final int ZERO_VALUE_IN_PROFILE = 31; public static final int ZERO_VALUE_IN_PROFILE = 31;
public static final int PROFILE_SWITCH_MISSING = 32; public static final int PROFILE_SWITCH_MISSING = 32;
public static final int NOT_ENG_MODE_OR_RELEASE = 33; public static final int NOT_ENG_MODE_OR_RELEASE = 33;
public static final int WRONG_PUMP_PASSWORD = 34;
public int id; public int id;
public Date date; public Date date;

View file

@ -56,6 +56,7 @@ import info.nightscout.androidaps.plugins.PumpCombo.ruffyscripter.history.Bolus;
import info.nightscout.androidaps.plugins.PumpCombo.ruffyscripter.history.PumpHistory; import info.nightscout.androidaps.plugins.PumpCombo.ruffyscripter.history.PumpHistory;
import info.nightscout.androidaps.plugins.PumpCombo.ruffyscripter.history.PumpHistoryRequest; import info.nightscout.androidaps.plugins.PumpCombo.ruffyscripter.history.PumpHistoryRequest;
import info.nightscout.androidaps.plugins.PumpCombo.ruffyscripter.history.Tdd; import info.nightscout.androidaps.plugins.PumpCombo.ruffyscripter.history.Tdd;
import info.nightscout.androidaps.plugins.Treatments.Treatment;
import info.nightscout.androidaps.plugins.Treatments.TreatmentsPlugin; import info.nightscout.androidaps.plugins.Treatments.TreatmentsPlugin;
import info.nightscout.androidaps.queue.Callback; import info.nightscout.androidaps.queue.Callback;
import info.nightscout.androidaps.queue.CommandQueue; import info.nightscout.androidaps.queue.CommandQueue;
@ -421,9 +422,6 @@ public class ComboPlugin extends PluginBase implements PumpInterface, Constraint
return pump.basalProfile.hourlyRates[currentHour]; return pump.basalProfile.hourlyRates[currentHour];
} }
private static BolusProgressReporter nullBolusProgressReporter = (state, percent, delivered) -> {
};
private static BolusProgressReporter bolusProgressReporter = (state, percent, delivered) -> { private static BolusProgressReporter bolusProgressReporter = (state, percent, delivered) -> {
EventOverviewBolusProgress event = EventOverviewBolusProgress.getInstance(); EventOverviewBolusProgress event = EventOverviewBolusProgress.getInstance();
switch (state) { switch (state) {
@ -549,12 +547,14 @@ public class ComboPlugin extends PluginBase implements PumpInterface, Constraint
return new PumpEnactResult().success(true).enacted(false); return new PumpEnactResult().success(true).enacted(false);
} }
BolusProgressReporter progressReporter = detailedBolusInfo.isSMB ? nullBolusProgressReporter : bolusProgressReporter; Treatment treatment = new Treatment();
treatment.isSMB = detailedBolusInfo.isSMB;
EventOverviewBolusProgress.getInstance().t = treatment;
// start bolus delivery // start bolus delivery
scripterIsBolusing = true; scripterIsBolusing = true;
runCommand(null, 0, runCommand(null, 0,
() -> ruffyScripter.deliverBolus(detailedBolusInfo.insulin, progressReporter)); () -> ruffyScripter.deliverBolus(detailedBolusInfo.insulin, bolusProgressReporter));
scripterIsBolusing = false; scripterIsBolusing = false;
// Note that the result of the issued bolus command is not checked. If there was // Note that the result of the issued bolus command is not checked. If there was

View file

@ -65,6 +65,11 @@ public abstract class AbstractDanaRExecutionService extends Service {
protected final UUID SPP_UUID = UUID.fromString("00001101-0000-1000-8000-00805f9b34fb"); protected final UUID SPP_UUID = UUID.fromString("00001101-0000-1000-8000-00805f9b34fb");
protected long lastWrongPumpPassword = 0;
protected long lastApproachingDailyLimit = 0;
public abstract boolean updateBasalsInPump(final Profile profile); public abstract boolean updateBasalsInPump(final Profile profile);
public abstract void connect(); public abstract void connect();

View file

@ -97,7 +97,11 @@ public class DanaRExecutionService extends AbstractDanaRExecutionService{
public void connect() { public void connect() {
if (mDanaRPump.password != -1 && mDanaRPump.password != SP.getInt(R.string.key_danar_password, -1)) { if (mDanaRPump.password != -1 && mDanaRPump.password != SP.getInt(R.string.key_danar_password, -1)) {
ToastUtils.showToastInUiThread(MainApp.instance().getApplicationContext(), MainApp.gs(R.string.wrongpumppassword), R.raw.error); if(System.currentTimeMillis() > lastWrongPumpPassword + 30 * 1000) {
Notification notification = new Notification(Notification.WRONG_PUMP_PASSWORD, MainApp.gs(R.string.wrongpumppassword), Notification.URGENT);
notification.soundId = R.raw.error;
lastWrongPumpPassword = System.currentTimeMillis();
}
return; return;
} }
@ -192,9 +196,12 @@ public class DanaRExecutionService extends AbstractDanaRExecutionService{
NSUpload.uploadDeviceStatus(); NSUpload.uploadDeviceStatus();
if (mDanaRPump.dailyTotalUnits > mDanaRPump.maxDailyTotalUnits * Constants.dailyLimitWarning) { if (mDanaRPump.dailyTotalUnits > mDanaRPump.maxDailyTotalUnits * Constants.dailyLimitWarning) {
log.debug("Approaching daily limit: " + mDanaRPump.dailyTotalUnits + "/" + mDanaRPump.maxDailyTotalUnits); log.debug("Approaching daily limit: " + mDanaRPump.dailyTotalUnits + "/" + mDanaRPump.maxDailyTotalUnits);
if(System.currentTimeMillis() > lastApproachingDailyLimit + 30 * 60 * 1000) {
Notification reportFail = new Notification(Notification.APPROACHING_DAILY_LIMIT, MainApp.gs(R.string.approachingdailylimit), Notification.URGENT); Notification reportFail = new Notification(Notification.APPROACHING_DAILY_LIMIT, MainApp.gs(R.string.approachingdailylimit), Notification.URGENT);
MainApp.bus().post(new EventNewNotification(reportFail)); MainApp.bus().post(new EventNewNotification(reportFail));
NSUpload.uploadError(MainApp.gs(R.string.approachingdailylimit) + ": " + mDanaRPump.dailyTotalUnits + "/" + mDanaRPump.maxDailyTotalUnits + "U"); NSUpload.uploadError(MainApp.gs(R.string.approachingdailylimit) + ": " + mDanaRPump.dailyTotalUnits + "/" + mDanaRPump.maxDailyTotalUnits + "U");
lastApproachingDailyLimit = System.currentTimeMillis();
}
} }
} catch (Exception e) { } catch (Exception e) {
log.error("Unhandled exception", e); log.error("Unhandled exception", e);

View file

@ -105,7 +105,11 @@ public class DanaRKoreanExecutionService extends AbstractDanaRExecutionService {
public void connect() { public void connect() {
if (mDanaRPump.password != -1 && mDanaRPump.password != SP.getInt(R.string.key_danar_password, -1)) { if (mDanaRPump.password != -1 && mDanaRPump.password != SP.getInt(R.string.key_danar_password, -1)) {
ToastUtils.showToastInUiThread(MainApp.instance().getApplicationContext(), MainApp.gs(R.string.wrongpumppassword), R.raw.error); if(System.currentTimeMillis() > lastWrongPumpPassword + 30 * 1000) {
Notification notification = new Notification(Notification.WRONG_PUMP_PASSWORD, MainApp.gs(R.string.wrongpumppassword), Notification.URGENT);
notification.soundId = R.raw.error;
lastWrongPumpPassword = System.currentTimeMillis();
}
return; return;
} }
@ -197,9 +201,12 @@ public class DanaRKoreanExecutionService extends AbstractDanaRExecutionService {
NSUpload.uploadDeviceStatus(); NSUpload.uploadDeviceStatus();
if (mDanaRPump.dailyTotalUnits > mDanaRPump.maxDailyTotalUnits * Constants.dailyLimitWarning) { if (mDanaRPump.dailyTotalUnits > mDanaRPump.maxDailyTotalUnits * Constants.dailyLimitWarning) {
log.debug("Approaching daily limit: " + mDanaRPump.dailyTotalUnits + "/" + mDanaRPump.maxDailyTotalUnits); log.debug("Approaching daily limit: " + mDanaRPump.dailyTotalUnits + "/" + mDanaRPump.maxDailyTotalUnits);
if(System.currentTimeMillis() > lastApproachingDailyLimit + 30 * 60 * 1000) {
Notification reportFail = new Notification(Notification.APPROACHING_DAILY_LIMIT, MainApp.gs(R.string.approachingdailylimit), Notification.URGENT); Notification reportFail = new Notification(Notification.APPROACHING_DAILY_LIMIT, MainApp.gs(R.string.approachingdailylimit), Notification.URGENT);
MainApp.bus().post(new EventNewNotification(reportFail)); MainApp.bus().post(new EventNewNotification(reportFail));
NSUpload.uploadError(MainApp.gs(R.string.approachingdailylimit) + ": " + mDanaRPump.dailyTotalUnits + "/" + mDanaRPump.maxDailyTotalUnits + "U"); NSUpload.uploadError(MainApp.gs(R.string.approachingdailylimit) + ": " + mDanaRPump.dailyTotalUnits + "/" + mDanaRPump.maxDailyTotalUnits + "U");
lastApproachingDailyLimit = System.currentTimeMillis();
}
} }
} catch (Exception e) { } catch (Exception e) {
log.error("Unhandled exception", e); log.error("Unhandled exception", e);

View file

@ -62,6 +62,7 @@ public class BLEScanActivity extends AppCompatActivity {
super.onResume(); super.onResume();
mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter(); mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
if (mBluetoothAdapter != null) {
mBluetoothLeScanner = mBluetoothAdapter.getBluetoothLeScanner(); mBluetoothLeScanner = mBluetoothAdapter.getBluetoothLeScanner();
if (mBluetoothLeScanner == null) { if (mBluetoothLeScanner == null) {
@ -70,6 +71,7 @@ public class BLEScanActivity extends AppCompatActivity {
} }
startScan(); startScan();
} }
}
@Override @Override
protected void onPause() { protected void onPause() {
@ -79,10 +81,12 @@ public class BLEScanActivity extends AppCompatActivity {
} }
private void startScan() { private void startScan() {
if (mBluetoothLeScanner != null)
mBluetoothLeScanner.startScan(mBleScanCallback); mBluetoothLeScanner.startScan(mBleScanCallback);
} }
private void stopScan() { private void stopScan() {
if (mBluetoothLeScanner != null)
mBluetoothLeScanner.stopScan(mBleScanCallback); mBluetoothLeScanner.stopScan(mBleScanCallback);
} }

View file

@ -87,6 +87,7 @@ public class DanaRSService extends Service {
private Treatment bolusingTreatment = null; private Treatment bolusingTreatment = null;
private long lastHistoryFetched = 0; private long lastHistoryFetched = 0;
private long lastApproachingDailyLimit = 0;
public DanaRSService() { public DanaRSService() {
try { try {
@ -165,9 +166,12 @@ public class DanaRSService extends Service {
NSUpload.uploadDeviceStatus(); NSUpload.uploadDeviceStatus();
if (danaRPump.dailyTotalUnits > danaRPump.maxDailyTotalUnits * Constants.dailyLimitWarning) { if (danaRPump.dailyTotalUnits > danaRPump.maxDailyTotalUnits * Constants.dailyLimitWarning) {
log.debug("Approaching daily limit: " + danaRPump.dailyTotalUnits + "/" + danaRPump.maxDailyTotalUnits); log.debug("Approaching daily limit: " + danaRPump.dailyTotalUnits + "/" + danaRPump.maxDailyTotalUnits);
if(System.currentTimeMillis() > lastApproachingDailyLimit + 30 * 60 * 1000) {
Notification reportFail = new Notification(Notification.APPROACHING_DAILY_LIMIT, MainApp.gs(R.string.approachingdailylimit), Notification.URGENT); Notification reportFail = new Notification(Notification.APPROACHING_DAILY_LIMIT, MainApp.gs(R.string.approachingdailylimit), Notification.URGENT);
MainApp.bus().post(new EventNewNotification(reportFail)); MainApp.bus().post(new EventNewNotification(reportFail));
NSUpload.uploadError(MainApp.gs(R.string.approachingdailylimit) + ": " + danaRPump.dailyTotalUnits + "/" + danaRPump.maxDailyTotalUnits + "U"); NSUpload.uploadError(MainApp.gs(R.string.approachingdailylimit) + ": " + danaRPump.dailyTotalUnits + "/" + danaRPump.maxDailyTotalUnits + "U");
lastApproachingDailyLimit = System.currentTimeMillis();
}
} }
} catch (Exception e) { } catch (Exception e) {
log.error("Unhandled exception", e); log.error("Unhandled exception", e);

View file

@ -120,7 +120,11 @@ public class DanaRv2ExecutionService extends AbstractDanaRExecutionService {
public void connect() { public void connect() {
if (mDanaRPump.password != -1 && mDanaRPump.password != SP.getInt(R.string.key_danar_password, -1)) { if (mDanaRPump.password != -1 && mDanaRPump.password != SP.getInt(R.string.key_danar_password, -1)) {
ToastUtils.showToastInUiThread(MainApp.instance().getApplicationContext(), MainApp.gs(R.string.wrongpumppassword), R.raw.error); if(System.currentTimeMillis() > lastWrongPumpPassword + 30 * 1000) {
Notification notification = new Notification(Notification.WRONG_PUMP_PASSWORD, MainApp.gs(R.string.wrongpumppassword), Notification.URGENT);
notification.soundId = R.raw.error;
lastWrongPumpPassword = System.currentTimeMillis();
}
return; return;
} }
@ -218,9 +222,12 @@ public class DanaRv2ExecutionService extends AbstractDanaRExecutionService {
NSUpload.uploadDeviceStatus(); NSUpload.uploadDeviceStatus();
if (mDanaRPump.dailyTotalUnits > mDanaRPump.maxDailyTotalUnits * Constants.dailyLimitWarning) { if (mDanaRPump.dailyTotalUnits > mDanaRPump.maxDailyTotalUnits * Constants.dailyLimitWarning) {
log.debug("Approaching daily limit: " + mDanaRPump.dailyTotalUnits + "/" + mDanaRPump.maxDailyTotalUnits); log.debug("Approaching daily limit: " + mDanaRPump.dailyTotalUnits + "/" + mDanaRPump.maxDailyTotalUnits);
if(System.currentTimeMillis() > lastApproachingDailyLimit + 30 * 60 * 1000) {
Notification reportFail = new Notification(Notification.APPROACHING_DAILY_LIMIT, MainApp.gs(R.string.approachingdailylimit), Notification.URGENT); Notification reportFail = new Notification(Notification.APPROACHING_DAILY_LIMIT, MainApp.gs(R.string.approachingdailylimit), Notification.URGENT);
MainApp.bus().post(new EventNewNotification(reportFail)); MainApp.bus().post(new EventNewNotification(reportFail));
NSUpload.uploadError(MainApp.gs(R.string.approachingdailylimit) + ": " + mDanaRPump.dailyTotalUnits + "/" + mDanaRPump.maxDailyTotalUnits + "U"); NSUpload.uploadError(MainApp.gs(R.string.approachingdailylimit) + ": " + mDanaRPump.dailyTotalUnits + "/" + mDanaRPump.maxDailyTotalUnits + "U");
lastApproachingDailyLimit = System.currentTimeMillis();
}
} }
} catch (Exception e) { } catch (Exception e) {
log.error("Unhandled exception", e); log.error("Unhandled exception", e);

View file

@ -196,6 +196,7 @@ public class ActionStringHandler {
} }
boolean useBG = SP.getBoolean(R.string.key_wearwizard_bg, true); boolean useBG = SP.getBoolean(R.string.key_wearwizard_bg, true);
boolean useTT = SP.getBoolean(R.string.key_wearwizard_tt, false);
boolean useBolusIOB = SP.getBoolean(R.string.key_wearwizard_bolusiob, true); boolean useBolusIOB = SP.getBoolean(R.string.key_wearwizard_bolusiob, true);
boolean useBasalIOB = SP.getBoolean(R.string.key_wearwizard_basaliob, true); boolean useBasalIOB = SP.getBoolean(R.string.key_wearwizard_basaliob, true);
boolean useCOB = SP.getBoolean(R.string.key_wearwizard_cob, true); boolean useCOB = SP.getBoolean(R.string.key_wearwizard_cob, true);
@ -223,7 +224,9 @@ public class ActionStringHandler {
DecimalFormat format = new DecimalFormat("0.00"); DecimalFormat format = new DecimalFormat("0.00");
DecimalFormat formatInt = new DecimalFormat("0"); DecimalFormat formatInt = new DecimalFormat("0");
BolusWizard bolusWizard = new BolusWizard(); BolusWizard bolusWizard = new BolusWizard();
bolusWizard.doCalc(profile, null, carbsAfterConstraints, useCOB?cobInfo.displayCob:0d, useBG ? bgReading.valueToUnits(profile.getUnits()) : 0d, 0d, percentage, useBolusIOB, useBasalIOB, false, useTrend); bolusWizard.doCalc(profile, useTT ? TreatmentsPlugin.getPlugin().getTempTargetFromHistory() : null,
carbsAfterConstraints, useCOB?cobInfo.displayCob:0d, useBG ? bgReading.valueToUnits(profile.getUnits()) : 0d,
0d, percentage, useBolusIOB, useBasalIOB, false, useTrend);
Double insulinAfterConstraints = MainApp.getConstraintChecker().applyBolusConstraints(new Constraint<>(bolusWizard.calculatedTotalInsulin)).value(); Double insulinAfterConstraints = MainApp.getConstraintChecker().applyBolusConstraints(new Constraint<>(bolusWizard.calculatedTotalInsulin)).value();
if (insulinAfterConstraints - bolusWizard.calculatedTotalInsulin != 0) { if (insulinAfterConstraints - bolusWizard.calculatedTotalInsulin != 0) {

View file

@ -213,6 +213,12 @@ public class CommandQueue {
return true; return true;
} }
public synchronized void cancelAllBoluses() {
removeAll(Command.CommandType.BOLUS);
removeAll(Command.CommandType.SMB_BOLUS);
ConfigBuilderPlugin.getActivePump().stopBolusDelivering();
}
// returns true if command is queued // returns true if command is queued
public boolean tempBasalAbsolute(double absoluteRate, int durationInMinutes, boolean enforceNew, Profile profile, Callback callback) { public boolean tempBasalAbsolute(double absoluteRate, int durationInMinutes, boolean enforceNew, Profile profile, Callback callback) {
if (!enforceNew && isRunning(Command.CommandType.TEMPBASAL)) { if (!enforceNew && isRunning(Command.CommandType.TEMPBASAL)) {

View file

@ -1,4 +1,4 @@
package info.nightscout.androidaps.startupwizard; package info.nightscout.androidaps.setupwizard;
import android.content.Intent; import android.content.Intent;
import android.support.v7.app.AppCompatActivity; import android.support.v7.app.AppCompatActivity;
@ -23,17 +23,29 @@ import info.nightscout.androidaps.plugins.Careportal.Dialogs.NewNSTreatmentDialo
import info.nightscout.androidaps.plugins.Careportal.OptionsToShow; import info.nightscout.androidaps.plugins.Careportal.OptionsToShow;
import info.nightscout.androidaps.plugins.ConfigBuilder.ConfigBuilderFragment; import info.nightscout.androidaps.plugins.ConfigBuilder.ConfigBuilderFragment;
import info.nightscout.androidaps.plugins.ConfigBuilder.ConfigBuilderPlugin; import info.nightscout.androidaps.plugins.ConfigBuilder.ConfigBuilderPlugin;
import info.nightscout.androidaps.plugins.ConstraintsObjectives.ObjectivesFragment;
import info.nightscout.androidaps.plugins.ConstraintsObjectives.ObjectivesPlugin; import info.nightscout.androidaps.plugins.ConstraintsObjectives.ObjectivesPlugin;
import info.nightscout.androidaps.plugins.Loop.LoopPlugin; import info.nightscout.androidaps.plugins.Loop.LoopPlugin;
import info.nightscout.androidaps.plugins.NSClientInternal.NSClientPlugin; import info.nightscout.androidaps.plugins.NSClientInternal.NSClientPlugin;
import info.nightscout.androidaps.plugins.NSClientInternal.events.EventNSClientStatus;
import info.nightscout.androidaps.plugins.ProfileLocal.LocalProfileFragment; import info.nightscout.androidaps.plugins.ProfileLocal.LocalProfileFragment;
import info.nightscout.androidaps.plugins.ProfileLocal.LocalProfilePlugin; import info.nightscout.androidaps.plugins.ProfileLocal.LocalProfilePlugin;
import info.nightscout.androidaps.plugins.ProfileNS.NSProfileFragment; import info.nightscout.androidaps.plugins.ProfileNS.NSProfileFragment;
import info.nightscout.androidaps.plugins.ProfileNS.NSProfilePlugin; import info.nightscout.androidaps.plugins.ProfileNS.NSProfilePlugin;
import info.nightscout.androidaps.plugins.ProfileSimple.SimpleProfileFragment; import info.nightscout.androidaps.plugins.ProfileSimple.SimpleProfileFragment;
import info.nightscout.androidaps.plugins.ProfileSimple.SimpleProfilePlugin; import info.nightscout.androidaps.plugins.ProfileSimple.SimpleProfilePlugin;
import info.nightscout.androidaps.startupwizard.events.EventSWLabel; import info.nightscout.androidaps.setupwizard.elements.SWBreak;
import info.nightscout.androidaps.startupwizard.events.EventSWUpdate; import info.nightscout.androidaps.setupwizard.elements.SWButton;
import info.nightscout.androidaps.setupwizard.elements.SWFragment;
import info.nightscout.androidaps.setupwizard.elements.SWHtmlLink;
import info.nightscout.androidaps.setupwizard.elements.SWInfotext;
import info.nightscout.androidaps.setupwizard.elements.SWPlugin;
import info.nightscout.androidaps.setupwizard.elements.SWRadioButton;
import info.nightscout.androidaps.setupwizard.elements.SWEditString;
import info.nightscout.androidaps.setupwizard.elements.SWEditUrl;
import info.nightscout.androidaps.setupwizard.events.EventSWLabel;
import info.nightscout.androidaps.setupwizard.events.EventSWUpdate;
import info.nightscout.utils.ImportExportPrefs;
import info.nightscout.utils.LocaleHelper; import info.nightscout.utils.LocaleHelper;
import info.nightscout.utils.PasswordProtection; import info.nightscout.utils.PasswordProtection;
import info.nightscout.utils.SP; import info.nightscout.utils.SP;
@ -67,6 +79,13 @@ public class SWDefinition {
add(new SWScreen(R.string.nav_setupwizard) add(new SWScreen(R.string.nav_setupwizard)
.add(new SWInfotext() .add(new SWInfotext()
.label(R.string.welcometosetupwizard)) .label(R.string.welcometosetupwizard))
.add(new SWButton()
.text(R.string.nav_import)
.action(() -> ImportExportPrefs.importSharedPreferences(getActivity()))
.visibility(ImportExportPrefs.file::exists))
.add(new SWInfotext()
.label(R.string.backupismissing)
.visibility(() -> !ImportExportPrefs.file.exists()))
) )
.add(new SWScreen(R.string.language) .add(new SWScreen(R.string.language)
.skippable(false) .skippable(false)
@ -82,14 +101,9 @@ public class SWDefinition {
) )
.add(new SWScreen(R.string.nsclientinternal_title) .add(new SWScreen(R.string.nsclientinternal_title)
.skippable(true) .skippable(true)
.add(new SWUrl() .add(new SWInfotext()
.preferenceId(R.string.key_nsclientinternal_url) .label(R.string.nsclientinfotext))
.label(R.string.nsclientinternal_url_title) .add(new SWBreak())
.comment(R.string.nsclientinternal_url_dialogmessage))
.add(new SWString()
.preferenceId(R.string.key_nsclientinternal_api_secret)
.label(R.string.nsclientinternal_secret_dialogtitle)
.comment(R.string.nsclientinternal_secret_dialogmessage))
.add(new SWButton() .add(new SWButton()
.text(R.string.enable_nsclient) .text(R.string.enable_nsclient)
.action(() -> { .action(() -> {
@ -101,10 +115,35 @@ public class SWDefinition {
MainApp.bus().post(new EventSWUpdate(true)); MainApp.bus().post(new EventSWUpdate(true));
}) })
.visibility(() -> !NSClientPlugin.getPlugin().isEnabled(PluginType.GENERAL))) .visibility(() -> !NSClientPlugin.getPlugin().isEnabled(PluginType.GENERAL)))
.add(new SWEditUrl()
.preferenceId(R.string.key_nsclientinternal_url)
.label(R.string.nsclientinternal_url_title)
.comment(R.string.nsclientinternal_url_dialogmessage))
.add(new SWEditString()
.validator(text -> text.length() >= 12)
.preferenceId(R.string.key_nsclientinternal_api_secret)
.label(R.string.nsclientinternal_secret_dialogtitle)
.comment(R.string.nsclientinternal_secret_dialogmessage))
.add(new SWBreak())
.add(new SWEventListener(this)
.label(R.string.status)
.initialStatus(NSClientPlugin.getPlugin().status)
.listener(new Object() {
@Subscribe
public void onEventNSClientStatus(EventNSClientStatus event) {
MainApp.bus().post(new EventSWLabel(event.status));
}
})
)
.add(new SWBreak())
.validator(() -> NSClientPlugin.getPlugin().nsClientService != null && NSClientPlugin.getPlugin().nsClientService.isConnected && NSClientPlugin.getPlugin().nsClientService.hasWriteAuth) .validator(() -> NSClientPlugin.getPlugin().nsClientService != null && NSClientPlugin.getPlugin().nsClientService.isConnected && NSClientPlugin.getPlugin().nsClientService.hasWriteAuth)
.visibility(() -> !(NSClientPlugin.getPlugin().nsClientService != null && NSClientPlugin.getPlugin().nsClientService.isConnected && NSClientPlugin.getPlugin().nsClientService.hasWriteAuth))
) )
.add(new SWScreen(R.string.patientage) .add(new SWScreen(R.string.patientage)
.skippable(false) .skippable(false)
.add(new SWInfotext()
.label(R.string.patientage_summary))
.add(new SWBreak())
.add(new SWRadioButton() .add(new SWRadioButton()
.option(R.array.ageArray, R.array.ageValues) .option(R.array.ageArray, R.array.ageValues)
.preferenceId(R.string.key_age) .preferenceId(R.string.key_age)
@ -120,6 +159,10 @@ public class SWDefinition {
.label(MainApp.gs(R.string.ultrafastactinginsulincomment) + " = " + MainApp.gs(R.string.ultrarapid_oref))) .label(MainApp.gs(R.string.ultrafastactinginsulincomment) + " = " + MainApp.gs(R.string.ultrarapid_oref)))
.add(new SWInfotext() .add(new SWInfotext()
.label(MainApp.gs(R.string.free_peak_oref_description) + " = " + MainApp.gs(R.string.free_peak_oref))) .label(MainApp.gs(R.string.free_peak_oref_description) + " = " + MainApp.gs(R.string.free_peak_oref)))
.add(new SWBreak())
.add(new SWInfotext()
.label(R.string.diawarning))
.add(new SWBreak())
.add(new SWPlugin() .add(new SWPlugin()
.option(PluginType.INSULIN) .option(PluginType.INSULIN)
.label(R.string.configbuilder_insulin)) .label(R.string.configbuilder_insulin))
@ -132,10 +175,25 @@ public class SWDefinition {
.add(new SWPlugin() .add(new SWPlugin()
.option(PluginType.BGSOURCE) .option(PluginType.BGSOURCE)
.label(R.string.configbuilder_bgsource)) .label(R.string.configbuilder_bgsource))
.add(new SWBreak())
.add(new SWButton()
.text(R.string.bgsourcesetup)
.action(() -> {
final PluginBase plugin = (PluginBase) MainApp.getConfigBuilder().getActiveBgSource();
PasswordProtection.QueryPassword(activity, R.string.settings_password, "settings_password", () -> {
Intent i = new Intent(activity, PreferencesActivity.class);
i.putExtra("id", plugin.getPreferencesId());
activity.startActivity(i);
}, null);
})
.visibility(() -> MainApp.getConfigBuilder().getActiveBgSource()!= null && ((PluginBase) MainApp.getConfigBuilder().getActiveBgSource()).getPreferencesId() > 0))
.validator(() -> MainApp.getConfigBuilder().getActiveBgSource() != null) .validator(() -> MainApp.getConfigBuilder().getActiveBgSource() != null)
) )
.add(new SWScreen(R.string.configbuilder_profile) .add(new SWScreen(R.string.configbuilder_profile)
.skippable(false) .skippable(false)
.add(new SWInfotext()
.label(R.string.setupwizard_profile_description))
.add(new SWBreak())
.add(new SWPlugin() .add(new SWPlugin()
.option(PluginType.PROFILE) .option(PluginType.PROFILE)
.label(R.string.configbuilder_profile)) .label(R.string.configbuilder_profile))
@ -212,15 +270,33 @@ public class SWDefinition {
) )
.add(new SWScreen(R.string.configbuilder_aps) .add(new SWScreen(R.string.configbuilder_aps)
.skippable(false) .skippable(false)
.add(new SWInfotext()
.label(R.string.setupwizard_aps_description))
.add(new SWBreak())
.add(new SWHtmlLink()
.label("https://openaps.readthedocs.io/en/latest/"))
.add(new SWBreak())
.add(new SWPlugin() .add(new SWPlugin()
.option(PluginType.APS) .option(PluginType.APS)
.label(R.string.configbuilder_aps)) .label(R.string.configbuilder_aps))
.add(new SWButton()
.text(R.string.apssetup)
.action(() -> {
final PluginBase plugin = (PluginBase) MainApp.getConfigBuilder().getActiveAPS();
PasswordProtection.QueryPassword(activity, R.string.settings_password, "settings_password", () -> {
Intent i = new Intent(activity, PreferencesActivity.class);
i.putExtra("id", plugin.getPreferencesId());
activity.startActivity(i);
}, null);
})
.visibility(() -> MainApp.getConfigBuilder().getActiveAPS() != null && ((PluginBase) MainApp.getConfigBuilder().getActiveAPS()).getPreferencesId() > 0))
.validator(() -> MainApp.getConfigBuilder().getActiveAPS() != null) .validator(() -> MainApp.getConfigBuilder().getActiveAPS() != null)
) )
.add(new SWScreen(R.string.configbuilder_loop) .add(new SWScreen(R.string.configbuilder_loop)
.skippable(false) .skippable(false)
.add(new SWInfotext() .add(new SWInfotext()
.label(R.string.setupwizard_loop_description)) .label(R.string.setupwizard_loop_description))
.add(new SWBreak())
.add(new SWButton() .add(new SWButton()
.text(R.string.enableloop) .text(R.string.enableloop)
.action(() -> { .action(() -> {
@ -230,16 +306,41 @@ public class SWDefinition {
ConfigBuilderPlugin.getPlugin().storeSettings("SetupWizard"); ConfigBuilderPlugin.getPlugin().storeSettings("SetupWizard");
MainApp.bus().post(new EventConfigBuilderChange()); MainApp.bus().post(new EventConfigBuilderChange());
MainApp.bus().post(new EventSWUpdate(true)); MainApp.bus().post(new EventSWUpdate(true));
})) })
.visibility(() -> !LoopPlugin.getPlugin().isEnabled(PluginType.LOOP)))
.validator(() -> LoopPlugin.getPlugin().isEnabled(PluginType.LOOP)) .validator(() -> LoopPlugin.getPlugin().isEnabled(PluginType.LOOP))
.visibility(() -> !LoopPlugin.getPlugin().isEnabled(PluginType.LOOP)) .visibility(() -> !LoopPlugin.getPlugin().isEnabled(PluginType.LOOP))
) )
.add(new SWScreen(R.string.configbuilder_sensitivity)
.skippable(false)
.add(new SWInfotext()
.label(R.string.setupwizard_sensitivity_description))
.add(new SWHtmlLink()
.label(R.string.setupwizard_sensitivity_url))
.add(new SWBreak())
.add(new SWPlugin()
.option(PluginType.SENSITIVITY)
.label(R.string.configbuilder_sensitivity))
.add(new SWBreak())
.add(new SWButton()
.text(R.string.sensitivitysetup)
.action(() -> {
final PluginBase plugin = (PluginBase) MainApp.getConfigBuilder().getActiveSensitivity();
PasswordProtection.QueryPassword(activity, R.string.settings_password, "settings_password", () -> {
Intent i = new Intent(activity, PreferencesActivity.class);
i.putExtra("id", plugin.getPreferencesId());
activity.startActivity(i);
}, null);
})
.visibility(() -> MainApp.getConfigBuilder().getActiveSensitivity() != null && ((PluginBase) MainApp.getConfigBuilder().getActiveSensitivity()).getPreferencesId() > 0))
.validator(() -> MainApp.getConfigBuilder().getActiveSensitivity() != null)
)
.add(new SWScreen(R.string.objectives) .add(new SWScreen(R.string.objectives)
.skippable(false) .skippable(false)
.add(new SWInfotext() .add(new SWInfotext()
.label(R.string.setupwizard_objectives_description)) .label(R.string.setupwizard_objectives_description))
.add(new SWButton() .add(new SWButton()
.text(R.string.objectives_button_start) .text(R.string.enableobjectives)
.action(() -> { .action(() -> {
ObjectivesPlugin.getPlugin().setPluginEnabled(PluginType.CONSTRAINTS, true); ObjectivesPlugin.getPlugin().setPluginEnabled(PluginType.CONSTRAINTS, true);
ObjectivesPlugin.getPlugin().setFragmentVisible(PluginType.CONSTRAINTS, true); ObjectivesPlugin.getPlugin().setFragmentVisible(PluginType.CONSTRAINTS, true);
@ -247,10 +348,21 @@ public class SWDefinition {
ConfigBuilderPlugin.getPlugin().storeSettings("SetupWizard"); ConfigBuilderPlugin.getPlugin().storeSettings("SetupWizard");
MainApp.bus().post(new EventConfigBuilderChange()); MainApp.bus().post(new EventConfigBuilderChange());
MainApp.bus().post(new EventSWUpdate(true)); MainApp.bus().post(new EventSWUpdate(true));
})) })
.visibility(() -> !ObjectivesPlugin.getPlugin().isFragmentVisible()))
.validator(() -> ObjectivesPlugin.getPlugin().isEnabled(PluginType.CONSTRAINTS)) .validator(() -> ObjectivesPlugin.getPlugin().isEnabled(PluginType.CONSTRAINTS))
.visibility(() -> !ObjectivesPlugin.getPlugin().isFragmentVisible()) .visibility(() -> !ObjectivesPlugin.getPlugin().isFragmentVisible())
) )
.add(new SWScreen(R.string.objectives)
.skippable(false)
.add(new SWInfotext()
.label(R.string.startobjective))
.add(new SWBreak())
.add(new SWFragment(this)
.add(new ObjectivesFragment()))
.validator(() -> ObjectivesPlugin.getPlugin().objectives.get(0).isStarted())
.visibility(() -> !ObjectivesPlugin.getPlugin().objectives.get(0).isStarted())
)
; ;
} }

View file

@ -1,4 +1,4 @@
package info.nightscout.androidaps.startupwizard; package info.nightscout.androidaps.setupwizard;
import android.content.Context; import android.content.Context;
import android.view.View; import android.view.View;
@ -11,12 +11,15 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import info.nightscout.androidaps.MainApp; import info.nightscout.androidaps.MainApp;
import info.nightscout.androidaps.startupwizard.events.EventSWLabel; import info.nightscout.androidaps.setupwizard.elements.SWItem;
import info.nightscout.androidaps.setupwizard.events.EventSWLabel;
public class SWEventListener extends SWItem { public class SWEventListener extends SWItem {
private static Logger log = LoggerFactory.getLogger(SWEventListener.class); private static Logger log = LoggerFactory.getLogger(SWEventListener.class);
private int textLabel = 0;
private String status = "";
TextView textView; TextView textView;
Object listener; Object listener;
SWDefinition definition; SWDefinition definition;
@ -27,6 +30,16 @@ public class SWEventListener extends SWItem {
MainApp.bus().register(this); MainApp.bus().register(this);
} }
public SWEventListener label(int newLabel) {
this.textLabel = newLabel;
return this;
}
public SWEventListener initialStatus(String status) {
this.status = status;
return this;
}
public SWEventListener listener(Object listener) { public SWEventListener listener(Object listener) {
this.listener = listener; this.listener = listener;
return this; return this;
@ -38,17 +51,21 @@ public class SWEventListener extends SWItem {
textView = new TextView(context); textView = new TextView(context);
textView.setId(view.generateViewId()); textView.setId(view.generateViewId());
textView.setText((textLabel != 0 ? MainApp.gs(textLabel) : "") + " " + status);
layout.addView(textView); layout.addView(textView);
if (listener != null) if (listener != null)
try {
MainApp.bus().register(listener); MainApp.bus().register(listener);
} catch (Exception ignored) {}
} }
@Subscribe @Subscribe
public void onEventSWLabel(final EventSWLabel l) { public void onEventSWLabel(final EventSWLabel l) {
status = l.label;
if (definition != null && definition.getActivity() != null) if (definition != null && definition.getActivity() != null)
definition.getActivity().runOnUiThread(() -> { definition.getActivity().runOnUiThread(() -> {
if (textView != null) if (textView != null)
textView.setText(l.label); textView.setText((textLabel != 0 ? MainApp.gs(textLabel) : "") + " " + status);
}); });
} }

View file

@ -1,9 +1,10 @@
package info.nightscout.androidaps.startupwizard; package info.nightscout.androidaps.setupwizard;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import info.nightscout.androidaps.MainApp; import info.nightscout.androidaps.MainApp;
import info.nightscout.androidaps.setupwizard.elements.SWItem;
public class SWScreen { public class SWScreen {

View file

@ -0,0 +1,5 @@
package info.nightscout.androidaps.setupwizard;
public interface SWTextValidator {
boolean isValid(String text);
}

View file

@ -1,4 +1,4 @@
package info.nightscout.androidaps.startupwizard; package info.nightscout.androidaps.setupwizard;
public interface SWValidator { public interface SWValidator {
boolean isValid(); boolean isValid();

View file

@ -1,4 +1,4 @@
package info.nightscout.androidaps.startupwizard; package info.nightscout.androidaps.setupwizard;
import android.content.Intent; import android.content.Intent;
import android.os.Bundle; import android.os.Bundle;
@ -18,11 +18,15 @@ import info.nightscout.androidaps.MainActivity;
import info.nightscout.androidaps.MainApp; import info.nightscout.androidaps.MainApp;
import info.nightscout.androidaps.R; import info.nightscout.androidaps.R;
import info.nightscout.androidaps.events.EventProfileStoreChanged; import info.nightscout.androidaps.events.EventProfileStoreChanged;
import info.nightscout.androidaps.events.EventProfileSwitchChange;
import info.nightscout.androidaps.events.EventPumpStatusChanged; import info.nightscout.androidaps.events.EventPumpStatusChanged;
import info.nightscout.androidaps.plugins.ConstraintsObjectives.events.EventObjectivesSaved;
import info.nightscout.androidaps.plugins.NSClientInternal.events.EventNSClientStatus; import info.nightscout.androidaps.plugins.NSClientInternal.events.EventNSClientStatus;
import info.nightscout.androidaps.startupwizard.events.EventSWUpdate; import info.nightscout.androidaps.setupwizard.elements.SWItem;
import info.nightscout.androidaps.setupwizard.events.EventSWUpdate;
import info.nightscout.utils.LocaleHelper; import info.nightscout.utils.LocaleHelper;
import info.nightscout.utils.OKDialog; import info.nightscout.utils.OKDialog;
import info.nightscout.utils.SP;
public class SetupWizardActivity extends AppCompatActivity { public class SetupWizardActivity extends AppCompatActivity {
//logging //logging
@ -57,6 +61,11 @@ public class SetupWizardActivity extends AppCompatActivity {
@Override @Override
public void onBackPressed() { public void onBackPressed() {
if (currentWizardPage == 0) OKDialog.showConfirmation(this, MainApp.gs(R.string.exitwizard), this::finish);
else showPreviousPage(null);
}
public void exitPressed(View view) {
OKDialog.showConfirmation(this, MainApp.gs(R.string.exitwizard), this::finish); OKDialog.showConfirmation(this, MainApp.gs(R.string.exitwizard), this::finish);
} }
@ -95,6 +104,16 @@ public class SetupWizardActivity extends AppCompatActivity {
updateButtons(); updateButtons();
} }
@Subscribe
public void onEventProfileSwitchChange(EventProfileSwitchChange ignored) {
updateButtons();
}
@Subscribe
public void onEventObjectivesSaved(EventObjectivesSaved ignored) {
updateButtons();
}
private void generateLayout() { private void generateLayout() {
SWScreen currentScreen = screens.get(currentWizardPage); SWScreen currentScreen = screens.get(currentWizardPage);
LinearLayout layout = SWItem.generateLayout(this.findViewById(R.id.sw_content_fields)); LinearLayout layout = SWItem.generateLayout(this.findViewById(R.id.sw_content_fields));
@ -143,6 +162,7 @@ public class SetupWizardActivity extends AppCompatActivity {
// Go back to overview // Go back to overview
public void finishSetupWizard(View view) { public void finishSetupWizard(View view) {
SP.putBoolean(R.string.key_setupwizard_processed, true);
Intent intent = new Intent(this, MainActivity.class); Intent intent = new Intent(this, MainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent); startActivity(intent);

View file

@ -0,0 +1,47 @@
package info.nightscout.androidaps.setupwizard.elements;
import android.content.Context;
import android.view.View;
import android.widget.LinearLayout;
import android.widget.TextView;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import info.nightscout.androidaps.setupwizard.SWValidator;
public class SWBreak extends SWItem {
private static Logger log = LoggerFactory.getLogger(SWBreak.class);
private TextView l;
private SWValidator visibilityValidator;
public SWBreak() {
super(Type.TEXT);
}
public SWBreak visibility(SWValidator visibilityValidator) {
this.visibilityValidator = visibilityValidator;
return this;
}
@Override
public void generateDialog(View view, LinearLayout layout) {
Context context = view.getContext();
l = new TextView(context);
l.setId(View.generateViewId());
l.setText("\n");
layout.addView(l);
}
@Override
public void processVisibility() {
if (visibilityValidator != null && !visibilityValidator.isValid())
l.setVisibility(View.GONE);
else
l.setVisibility(View.VISIBLE);
}
}

View file

@ -1,4 +1,4 @@
package info.nightscout.androidaps.startupwizard; package info.nightscout.androidaps.setupwizard.elements;
import android.content.Context; import android.content.Context;
import android.view.View; import android.view.View;
@ -8,14 +8,16 @@ import android.widget.LinearLayout;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import info.nightscout.androidaps.setupwizard.SWValidator;
public class SWButton extends SWItem { public class SWButton extends SWItem {
private static Logger log = LoggerFactory.getLogger(SWButton.class); private static Logger log = LoggerFactory.getLogger(SWButton.class);
Runnable buttonRunnable; private Runnable buttonRunnable;
int buttonText; private int buttonText;
SWValidator buttonValidator; private SWValidator buttonValidator;
Button button; private Button button;
public SWButton() { public SWButton() {
super(Type.BUTTON); super(Type.BUTTON);

View file

@ -1,4 +1,4 @@
package info.nightscout.androidaps.startupwizard; package info.nightscout.androidaps.setupwizard.elements;
import android.content.Context; import android.content.Context;
import android.view.View; import android.view.View;
@ -14,7 +14,6 @@ import java.util.ArrayList;
import info.nightscout.androidaps.MainApp; import info.nightscout.androidaps.MainApp;
import info.nightscout.androidaps.interfaces.PluginBase; import info.nightscout.androidaps.interfaces.PluginBase;
import info.nightscout.androidaps.interfaces.PluginType; import info.nightscout.androidaps.interfaces.PluginType;
import info.nightscout.androidaps.plugins.ConfigBuilder.ConfigBuilderPlugin;
import info.nightscout.utils.SP; import info.nightscout.utils.SP;
/** /**

View file

@ -1,6 +1,7 @@
package info.nightscout.androidaps.startupwizard; package info.nightscout.androidaps.setupwizard.elements;
import android.content.Context; import android.content.Context;
import android.graphics.Typeface;
import android.text.Editable; import android.text.Editable;
import android.text.InputType; import android.text.InputType;
import android.text.TextWatcher; import android.text.TextWatcher;
@ -12,11 +13,16 @@ import android.widget.TextView;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import info.nightscout.androidaps.setupwizard.SWTextValidator;
import info.nightscout.utils.SP;
public class SWString extends SWItem {
private static Logger log = LoggerFactory.getLogger(SWString.class);
public SWString() { public class SWEditString extends SWItem {
private static Logger log = LoggerFactory.getLogger(SWEditString.class);
private SWTextValidator validator = null;
public SWEditString() {
super(Type.STRING); super(Type.STRING);
} }
@ -27,17 +33,20 @@ public class SWString extends SWItem {
TextView l = new TextView(context); TextView l = new TextView(context);
l.setId(view.generateViewId()); l.setId(view.generateViewId());
l.setText(label); l.setText(label);
l.setTypeface(l.getTypeface(), Typeface.BOLD);
layout.addView(l); layout.addView(l);
TextView c = new TextView(context); TextView c = new TextView(context);
c.setId(view.generateViewId()); c.setId(view.generateViewId());
c.setText(label); c.setText(comment);
c.setTypeface(c.getTypeface(), Typeface.ITALIC);
layout.addView(c); layout.addView(c);
EditText editText = new EditText(context); EditText editText = new EditText(context);
editText.setId(view.generateViewId()); editText.setId(view.generateViewId());
editText.setInputType(InputType.TYPE_CLASS_TEXT); editText.setInputType(InputType.TYPE_CLASS_TEXT);
editText.setMaxLines(1); editText.setMaxLines(1);
editText.setText(SP.getString(preferenceId, ""));
layout.addView(editText); layout.addView(editText);
super.generateDialog(view, layout); super.generateDialog(view, layout);
@ -48,6 +57,7 @@ public class SWString extends SWItem {
@Override @Override
public void onTextChanged(CharSequence s, int start, int before, int count) { public void onTextChanged(CharSequence s, int start, int before, int count) {
if (validator != null && validator.isValid(s.toString()))
save(s.toString()); save(s.toString());
} }
@ -57,4 +67,13 @@ public class SWString extends SWItem {
}); });
} }
public SWEditString preferenceId(int preferenceId) {
this.preferenceId = preferenceId;
return this;
}
public SWEditString validator(SWTextValidator validator) {
this.validator = validator;
return this;
}
} }

View file

@ -1,9 +1,11 @@
package info.nightscout.androidaps.startupwizard; package info.nightscout.androidaps.setupwizard.elements;
import android.content.Context; import android.content.Context;
import android.graphics.Typeface;
import android.text.Editable; import android.text.Editable;
import android.text.InputType; import android.text.InputType;
import android.text.TextWatcher; import android.text.TextWatcher;
import android.util.Patterns;
import android.view.View; import android.view.View;
import android.widget.EditText; import android.widget.EditText;
import android.widget.LinearLayout; import android.widget.LinearLayout;
@ -12,10 +14,15 @@ import android.widget.TextView;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
public class SWUrl extends SWItem { import info.nightscout.androidaps.MainApp;
private static Logger log = LoggerFactory.getLogger(SWUrl.class); import info.nightscout.androidaps.R;
import info.nightscout.androidaps.setupwizard.events.EventSWLabel;
import info.nightscout.utils.SP;
public SWUrl() { public class SWEditUrl extends SWItem {
private static Logger log = LoggerFactory.getLogger(SWEditUrl.class);
public SWEditUrl() {
super(Type.URL); super(Type.URL);
} }
@ -26,17 +33,20 @@ public class SWUrl extends SWItem {
TextView l = new TextView(context); TextView l = new TextView(context);
l.setId(View.generateViewId()); l.setId(View.generateViewId());
l.setText(label); l.setText(label);
l.setTypeface(l.getTypeface(), Typeface.BOLD);
layout.addView(l); layout.addView(l);
TextView c = new TextView(context); TextView c = new TextView(context);
c.setId(View.generateViewId()); c.setId(View.generateViewId());
c.setText(comment); c.setText(comment);
c.setTypeface(c.getTypeface(), Typeface.ITALIC);
layout.addView(c); layout.addView(c);
EditText editText = new EditText(context); EditText editText = new EditText(context);
editText.setId(View.generateViewId()); editText.setId(View.generateViewId());
editText.setInputType(InputType.TYPE_CLASS_TEXT); editText.setInputType(InputType.TYPE_CLASS_TEXT);
editText.setMaxLines(1); editText.setMaxLines(1);
editText.setText(SP.getString(preferenceId, ""));
layout.addView(editText); layout.addView(editText);
super.generateDialog(view, layout); super.generateDialog(view, layout);
@ -47,7 +57,10 @@ public class SWUrl extends SWItem {
@Override @Override
public void onTextChanged(CharSequence s, int start, int before, int count) { public void onTextChanged(CharSequence s, int start, int before, int count) {
if (Patterns.WEB_URL.matcher(s).matches())
save(s.toString()); save(s.toString());
else
MainApp.bus().post(new EventSWLabel(MainApp.gs(R.string.error_url_not_valid)));
} }
@Override @Override
@ -55,4 +68,10 @@ public class SWUrl extends SWItem {
} }
}); });
} }
public SWEditUrl preferenceId(int preferenceId) {
this.preferenceId = preferenceId;
return this;
}
} }

View file

@ -1,4 +1,4 @@
package info.nightscout.androidaps.startupwizard; package info.nightscout.androidaps.setupwizard.elements;
import android.support.v4.app.Fragment; import android.support.v4.app.Fragment;
import android.view.View; import android.view.View;
@ -7,6 +7,8 @@ import android.widget.LinearLayout;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import info.nightscout.androidaps.setupwizard.SWDefinition;
public class SWFragment extends SWItem { public class SWFragment extends SWItem {
private static Logger log = LoggerFactory.getLogger(SWFragment.class); private static Logger log = LoggerFactory.getLogger(SWFragment.class);

View file

@ -0,0 +1,63 @@
package info.nightscout.androidaps.setupwizard.elements;
import android.content.Context;
import android.text.util.Linkify;
import android.view.View;
import android.widget.LinearLayout;
import android.widget.TextView;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import info.nightscout.androidaps.setupwizard.SWValidator;
public class SWHtmlLink extends SWItem {
private static Logger log = LoggerFactory.getLogger(SWHtmlLink.class);
private String textLabel = null;
private TextView l;
private SWValidator visibilityValidator;
public SWHtmlLink() {
super(Type.HTMLLINK);
}
public SWHtmlLink label(int label) {
this.label = label;
return this;
}
public SWHtmlLink label(String newLabel){
this.textLabel = newLabel;
return this;
}
public SWHtmlLink visibility(SWValidator visibilityValidator) {
this.visibilityValidator = visibilityValidator;
return this;
}
@Override
public void generateDialog(View view, LinearLayout layout) {
Context context = view.getContext();
l = new TextView(context);
l.setId(View.generateViewId());
l.setAutoLinkMask(Linkify.ALL);
if(textLabel != null)
l.setText(textLabel);
else
l.setText(label);
layout.addView(l);
}
@Override
public void processVisibility() {
if (visibilityValidator != null && !visibilityValidator.isValid())
l.setVisibility(View.GONE);
else
l.setVisibility(View.VISIBLE);
}
}

View file

@ -1,37 +1,48 @@
package info.nightscout.androidaps.startupwizard; package info.nightscout.androidaps.setupwizard.elements;
import android.content.Context; import android.content.Context;
import android.text.Editable;
import android.text.InputType;
import android.text.TextWatcher;
import android.view.View; import android.view.View;
import android.widget.EditText;
import android.widget.LinearLayout; import android.widget.LinearLayout;
import android.widget.TextView; import android.widget.TextView;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import info.nightscout.androidaps.setupwizard.SWValidator;
public class SWInfotext extends SWItem { public class SWInfotext extends SWItem {
private static Logger log = LoggerFactory.getLogger(SWInfotext.class); private static Logger log = LoggerFactory.getLogger(SWInfotext.class);
private String textLabel = null; private String textLabel = null;
private TextView l;
private SWValidator visibilityValidator;
public SWInfotext() { public SWInfotext() {
super(Type.TEXT); super(Type.TEXT);
} }
public SWInfotext label(int label) {
this.label = label;
return this;
}
public SWInfotext label(String newLabel){ public SWInfotext label(String newLabel){
this.textLabel = newLabel; this.textLabel = newLabel;
return this; return this;
} }
public SWInfotext visibility(SWValidator visibilityValidator) {
this.visibilityValidator = visibilityValidator;
return this;
}
@Override @Override
public void generateDialog(View view, LinearLayout layout) { public void generateDialog(View view, LinearLayout layout) {
Context context = view.getContext(); Context context = view.getContext();
TextView l = new TextView(context); l = new TextView(context);
l.setId(view.generateViewId()); l.setId(View.generateViewId());
if(textLabel != null) if(textLabel != null)
l.setText(textLabel); l.setText(textLabel);
else else
@ -40,4 +51,11 @@ public class SWInfotext extends SWItem {
} }
@Override
public void processVisibility() {
if (visibilityValidator != null && !visibilityValidator.isValid())
l.setVisibility(View.GONE);
else
l.setVisibility(View.VISIBLE);
}
} }

View file

@ -1,4 +1,4 @@
package info.nightscout.androidaps.startupwizard; package info.nightscout.androidaps.setupwizard.elements;
import android.view.View; import android.view.View;
import android.widget.LinearLayout; import android.widget.LinearLayout;
@ -8,15 +8,17 @@ import org.slf4j.LoggerFactory;
import info.nightscout.androidaps.MainApp; import info.nightscout.androidaps.MainApp;
import info.nightscout.androidaps.events.EventPreferenceChange; import info.nightscout.androidaps.events.EventPreferenceChange;
import info.nightscout.androidaps.startupwizard.events.EventSWUpdate; import info.nightscout.androidaps.setupwizard.events.EventSWUpdate;
import info.nightscout.utils.SP; import info.nightscout.utils.SP;
public class SWItem { public class SWItem {
private static Logger log = LoggerFactory.getLogger(SWItem.class); private static Logger log = LoggerFactory.getLogger(SWItem.class);
enum Type { public enum Type {
NONE, NONE,
TEXT, TEXT,
HTMLLINK,
BREAK,
LISTENER, LISTENER,
URL, URL,
STRING, STRING,
@ -64,11 +66,6 @@ public class SWItem {
return this; return this;
} }
SWItem preferenceId(int preferenceId) {
this.preferenceId = preferenceId;
return this;
}
public void save(String value) { public void save(String value) {
SP.putString(preferenceId, value); SP.putString(preferenceId, value);
MainApp.bus().post(new EventPreferenceChange(preferenceId)); MainApp.bus().post(new EventPreferenceChange(preferenceId));

View file

@ -1,4 +1,4 @@
package info.nightscout.androidaps.startupwizard; package info.nightscout.androidaps.setupwizard.elements;
import android.content.Context; import android.content.Context;
import android.view.View; import android.view.View;
@ -17,7 +17,7 @@ import info.nightscout.androidaps.interfaces.PluginBase;
import info.nightscout.androidaps.interfaces.PluginType; import info.nightscout.androidaps.interfaces.PluginType;
import info.nightscout.androidaps.plugins.ConfigBuilder.ConfigBuilderFragment; import info.nightscout.androidaps.plugins.ConfigBuilder.ConfigBuilderFragment;
import info.nightscout.androidaps.plugins.ConfigBuilder.ConfigBuilderPlugin; import info.nightscout.androidaps.plugins.ConfigBuilder.ConfigBuilderPlugin;
import info.nightscout.androidaps.startupwizard.events.EventSWUpdate; import info.nightscout.androidaps.setupwizard.events.EventSWUpdate;
public class SWPlugin extends SWItem { public class SWPlugin extends SWItem {
private static Logger log = LoggerFactory.getLogger(SWPlugin.class); private static Logger log = LoggerFactory.getLogger(SWPlugin.class);

View file

@ -1,4 +1,4 @@
package info.nightscout.androidaps.startupwizard; package info.nightscout.androidaps.setupwizard.elements;
import android.content.Context; import android.content.Context;
import android.view.View; import android.view.View;
@ -64,4 +64,10 @@ public class SWRadioButton extends SWItem {
layout.addView(radioGroup); layout.addView(radioGroup);
super.generateDialog(view, layout); super.generateDialog(view, layout);
} }
public SWRadioButton preferenceId(int preferenceId) {
this.preferenceId = preferenceId;
return this;
}
} }

View file

@ -1,4 +1,4 @@
package info.nightscout.androidaps.startupwizard.events; package info.nightscout.androidaps.setupwizard.events;
import info.nightscout.androidaps.events.Event; import info.nightscout.androidaps.events.Event;

View file

@ -1,4 +1,4 @@
package info.nightscout.androidaps.startupwizard.events; package info.nightscout.androidaps.setupwizard.events;
import info.nightscout.androidaps.events.Event; import info.nightscout.androidaps.events.Event;

View file

@ -33,7 +33,7 @@ import info.nightscout.androidaps.events.EventAppExit;
public class ImportExportPrefs { public class ImportExportPrefs {
private static Logger log = LoggerFactory.getLogger(ImportExportPrefs.class); private static Logger log = LoggerFactory.getLogger(ImportExportPrefs.class);
static File path = new File(Environment.getExternalStorageDirectory().toString()); static File path = new File(Environment.getExternalStorageDirectory().toString());
static final File file = new File(path, MainApp.gs(R.string.app_name) + "Preferences"); static public final File file = new File(path, MainApp.gs(R.string.app_name) + "Preferences");
private static final int REQUEST_EXTERNAL_STORAGE = 1; private static final int REQUEST_EXTERNAL_STORAGE = 1;
private static String[] PERMISSIONS_STORAGE = { private static String[] PERMISSIONS_STORAGE = {

View file

@ -7,6 +7,12 @@ package info.nightscout.utils;
public class T { public class T {
private long time; // in msec private long time; // in msec
public static T now() {
T t = new T();
t.time = System.currentTimeMillis();
return t;
}
public static T msecs(long msec) { public static T msecs(long msec) {
T t = new T(); T t = new T();
t.time = msec; t.time = msec;
@ -56,4 +62,12 @@ public class T {
public long days() { public long days() {
return time / 24 / 60 / 60 / 1000L; return time / 24 / 60 / 60 / 1000L;
} }
public T plus(T plus) {
return T.msecs(time + plus.time);
}
public T minus(T minus) {
return T.msecs(time - minus.time);
}
} }

Binary file not shown.

After

Width:  |  Height:  |  Size: 602 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 295 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 499 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 965 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

View file

@ -11,27 +11,24 @@
android:padding="10dp"> android:padding="10dp">
<LinearLayout <LinearLayout
android:layout_width="match_parent" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_gravity="center" android:layout_gravity="center"
android:orientation="horizontal"> android:orientation="horizontal">
<ImageView <ImageView
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="match_parent" android:layout_height="wrap_content"
android:layout_gravity="center" android:layout_gravity="center"
android:padding="5dp"
android:src="@drawable/icon_cp_pump_canula" /> android:src="@drawable/icon_cp_pump_canula" />
<TextView <TextView
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:paddingBottom="10dp" android:layout_gravity="center"
android:paddingLeft="15dp" android:layout_marginLeft="10dp"
android:paddingRight="15dp" android:layout_marginRight="10dp"
android:paddingTop="10dp"
android:text="@string/primefill" android:text="@string/primefill"
android:textAlignment="center"
android:textAppearance="?android:attr/textAppearanceLarge" android:textAppearance="?android:attr/textAppearanceLarge"
android:textColor="@color/colorInsulinButton" /> android:textColor="@color/colorInsulinButton" />

View file

@ -1,29 +1,44 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools" xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:orientation="vertical" android:orientation="vertical"
tools:context=".startupwizard.SetupWizardActivity"> tools:context=".setupwizard.SetupWizardActivity">
<ImageButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="16dp"
android:layout_marginTop="16dp"
android:background="@android:color/transparent"
android:onClick="exitPressed"
app:srcCompat="@drawable/ic_exit_to_app" />
<TextView <TextView
android:id="@+id/sw_content" android:id="@+id/sw_content"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:keepScreenOn="true" android:keepScreenOn="true"
android:textColor="#33b5e5" android:textAlignment="center"
android:textSize="20dp" android:textColor="#FFFFFF"
android:textStyle="bold" /> android:textSize="32sp"
tools:text="Title" />
<ScrollView
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1">
<LinearLayout <LinearLayout
android:id="@+id/sw_content_fields" android:id="@+id/sw_content_fields"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_weight="1" android:layout_weight="1"
android:gravity="center_vertical|center_horizontal" android:gravity="center_vertical|center_horizontal"
android:orientation="vertical"> android:orientation="vertical"
android:padding="16dp" />
</LinearLayout> </ScrollView>
<LinearLayout <LinearLayout
android:id="@+id/sw_content_controls" android:id="@+id/sw_content_controls"
@ -31,42 +46,41 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_gravity="bottom|center_horizontal" android:layout_gravity="bottom|center_horizontal"
android:background="@color/black_overlay" android:background="@color/black_overlay"
android:orientation="horizontal"> android:orientation="horizontal"
android:paddingLeft="16dp"
android:paddingRight="16dp">
<Button <Button
android:id="@+id/previous_button" android:id="@+id/previous_button"
android:layout_width="0dp" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_weight="1" android:background="@android:color/transparent"
android:onClick="showPreviousPage" android:onClick="showPreviousPage"
android:text="@string/setupwizard_previous" /> android:text="@string/setupwizard_previous"
android:textColor="#FFFFFF" />
<Button <View
android:id="@+id/skip_button"
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="wrap_content" android:layout_height="match_parent"
android:layout_weight="1" android:layout_weight="1" />
android:onClick="showNextPage"
android:text="@string/setupwizard_skip"
android:visibility="invisible" />
<Button <Button
android:id="@+id/next_button" android:id="@+id/next_button"
android:layout_width="0dp" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_weight="1" android:background="@android:color/transparent"
android:onClick="showNextPage" android:onClick="showNextPage"
android:text="@string/setupwizard_next" android:text="@string/setupwizard_next"
android:visibility="gone" /> android:textColor="#FFFFFF" />
<Button <Button
android:id="@+id/finish_button" android:id="@+id/finish_button"
android:layout_width="0dp" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_weight="1" android:background="@android:color/transparent"
android:onClick="finishSetupWizard" android:onClick="finishSetupWizard"
android:text="@string/setupwizard_finish" android:text="@string/setupwizard_finish"
android:visibility="gone" /> android:textColor="#FFFFFF" />
</LinearLayout> </LinearLayout>

View file

@ -11,8 +11,8 @@
android:layout_height="match_parent"> android:layout_height="match_parent">
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent" android:layout_width="wrap_content"
android:layout_height="match_parent" android:layout_height="wrap_content"
android:orientation="vertical" android:orientation="vertical"
android:padding="10dp"> android:padding="10dp">
@ -20,10 +20,16 @@
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_gravity="center_horizontal" android:layout_gravity="center_horizontal"
android:padding="10dp" android:text="@string/overview_calibration"
android:text="@string/overview_calibration_bg_label" android:textColor="@color/colorCalibrationButton"
android:textAppearance="?android:attr/textAppearanceLarge" /> android:textAppearance="?android:attr/textAppearanceLarge" />
<ImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="5dp"
android:src="@drawable/icon_calibration" />
<TextView <TextView
android:id="@+id/overview_calibration_units" android:id="@+id/overview_calibration_units"
android:layout_width="wrap_content" android:layout_width="wrap_content"

View file

@ -20,28 +20,25 @@
android:padding="10dp"> android:padding="10dp">
<LinearLayout <LinearLayout
android:layout_width="match_parent" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_gravity="center" android:layout_gravity="center"
android:orientation="horizontal"> android:orientation="horizontal">
<ImageView <ImageView
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="match_parent" android:layout_height="wrap_content"
android:padding="5dp"
android:layout_gravity="center" android:layout_gravity="center"
android:src="@drawable/icon_cp_bolus_carbs" /> android:src="@drawable/icon_cp_bolus_carbs" />
<TextView <TextView
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:paddingBottom="10dp" android:layout_gravity="center"
android:paddingLeft="15dp" android:layout_marginLeft="10dp"
android:paddingRight="15dp" android:layout_marginRight="10dp"
android:paddingTop="10dp"
android:text="@string/carbs" android:text="@string/carbs"
android:textAlignment="center" android:textAppearance="?android:attr/textAppearanceLarge"
android:textAppearance="?android:attr/textAppearanceMedium"
android:textColor="@color/colorCarbsButton" /> android:textColor="@color/colorCarbsButton" />
</LinearLayout> </LinearLayout>

View file

@ -17,26 +17,23 @@
android:padding="10dp"> android:padding="10dp">
<LinearLayout <LinearLayout
android:layout_width="match_parent" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_gravity="center" android:layout_gravity="center"
android:orientation="horizontal"> android:orientation="horizontal">
<ImageView <ImageView
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="match_parent" android:layout_height="wrap_content"
android:padding="5dp"
android:layout_gravity="center" android:layout_gravity="center"
android:src="@drawable/icon_bolus" /> android:src="@drawable/icon_bolus" />
<TextView <TextView
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:paddingBottom="10dp" android:layout_gravity="center"
android:paddingLeft="15dp" android:layout_marginLeft="10dp"
android:paddingRight="15dp" android:layout_marginRight="10dp"
android:paddingTop="10dp"
android:textAlignment="center"
android:text="@string/overview_insulin_label" android:text="@string/overview_insulin_label"
android:textAppearance="?android:attr/textAppearanceLarge" android:textAppearance="?android:attr/textAppearanceLarge"
android:textColor="@color/colorInsulinButton" /> android:textColor="@color/colorInsulinButton" />
@ -59,7 +56,7 @@
android:id="@+id/newinsulin_record_only" android:id="@+id/newinsulin_record_only"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="match_parent" android:layout_height="match_parent"
android:text="@string/don_t_bolus_record_only" /> android:text="@string/do_not_bolus_record_only" />
</LinearLayout> </LinearLayout>
@ -124,6 +121,7 @@
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_gravity="center_vertical" android:layout_gravity="center_vertical"
android:layout_marginRight="5dp"
android:text="@string/insulin_unit_shortname" /> android:text="@string/insulin_unit_shortname" />
</LinearLayout> </LinearLayout>

View file

@ -29,7 +29,7 @@
android:id="@+id/newtreatment_record_only" android:id="@+id/newtreatment_record_only"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="match_parent" android:layout_height="match_parent"
android:text="@string/don_t_bolus_record_only" /> android:text="@string/do_not_bolus_record_only" />
<TextView <TextView
android:layout_width="wrap_content" android:layout_width="wrap_content"

View file

@ -810,7 +810,7 @@
<string name="data_choices">Избор на данни</string> <string name="data_choices">Избор на данни</string>
<string name="allow_automated_crash_reporting">Позволява автоматично изпращане на данни за грешки и статистически данни до разработчиците чрез fabric.io service.</string> <string name="allow_automated_crash_reporting">Позволява автоматично изпращане на данни за грешки и статистически данни до разработчиците чрез fabric.io service.</string>
<string name="g5appnotdetected">Моля обновете G5 приложението до поддържана версия.</string> <string name="g5appnotdetected">Моля обновете G5 приложението до поддържана версия.</string>
<string name="don_t_bolus_record_only">Не доставяй болус, само запис</string> <string name="do_not_bolus_record_only">Не доставяй болус, само запис</string>
<string name="category">Категория</string> <string name="category">Категория</string>
<string name="subcategory">Подкатегория</string> <string name="subcategory">Подкатегория</string>
<string name="bolusrecordedonly">Болусът ще бъде само записан</string> <string name="bolusrecordedonly">Болусът ще бъде само записан</string>

View file

@ -545,7 +545,7 @@
<string name="overview_extendedbolus_cancel_button">Zrušit prodloužený bolus</string> <string name="overview_extendedbolus_cancel_button">Zrušit prodloužený bolus</string>
<string name="overview_newtempbasal_basalabsolute">Hodnota bazálu [U/h]</string> <string name="overview_newtempbasal_basalabsolute">Hodnota bazálu [U/h]</string>
<string name="overview_newtempbasal_basaltype_label">Typ bazálu</string> <string name="overview_newtempbasal_basaltype_label">Typ bazálu</string>
<string name="profileswitch">PřepnutíProfilu</string> <string name="profileswitch">Přepnutí profilu</string>
<string name="pump">Pumpa</string> <string name="pump">Pumpa</string>
<string name="xdripstatus">Statusový řádek xDripu (hodinky)</string> <string name="xdripstatus">Statusový řádek xDripu (hodinky)</string>
<string name="xdripstatus_settings">Status z xDripu (hodinky)</string> <string name="xdripstatus_settings">Status z xDripu (hodinky)</string>
@ -810,7 +810,7 @@
<string name="start_eating_soon_tt">Spustit Dočasný cíl Blížící se jídlo</string> <string name="start_eating_soon_tt">Spustit Dočasný cíl Blížící se jídlo</string>
<string name="temptargetshort">DoCíl</string> <string name="temptargetshort">DoCíl</string>
<string name="insight_min">min</string> <string name="insight_min">min</string>
<string name="don_t_bolus_record_only">Nepouštět bolus, jen zaznamenat</string> <string name="do_not_bolus_record_only">Nepouštět bolus, jen zaznamenat</string>
<string name="subcategory">Podkategorie</string> <string name="subcategory">Podkategorie</string>
<string name="category">Kategorie</string> <string name="category">Kategorie</string>
<string name="bolusrecordedonly">Bolus bude pouze zaznamenán</string> <string name="bolusrecordedonly">Bolus bude pouze zaznamenán</string>

View file

@ -241,7 +241,7 @@
<string name="overview_editquickwizardlistactivity_add">Hinzufügen</string> <string name="overview_editquickwizardlistactivity_add">Hinzufügen</string>
<string name="overview_quickwizard_item_edit_button">Bearbeiten</string> <string name="overview_quickwizard_item_edit_button">Bearbeiten</string>
<string name="danar_history_basalhours">Basal-Stunden</string> <string name="danar_history_basalhours">Basal-Stunden</string>
<string name="danar_history_connectingfor">Verbindungsaufbau %d s</string> <string name="danar_history_connectingfor">Verbindungsaufbau %1$d s</string>
<string name="overview_editquickwizard_valid">Gültigkeit:</string> <string name="overview_editquickwizard_valid">Gültigkeit:</string>
<string name="overview_editquickwizard_carbs">Kohlenhydrate:</string> <string name="overview_editquickwizard_carbs">Kohlenhydrate:</string>
<string name="quickwizardsettings">QuickWizard-Einstellungen</string> <string name="quickwizardsettings">QuickWizard-Einstellungen</string>
@ -255,7 +255,7 @@
<string name="othersettings_title">Andere</string> <string name="othersettings_title">Andere</string>
<string name="occlusion">Verstopfung</string> <string name="occlusion">Verstopfung</string>
<string name="overview_bolusprogress_delivered">Abgegeben</string> <string name="overview_bolusprogress_delivered">Abgegeben</string>
<string name="overview_bolusprogress_goingtodeliver">Es werden %.2f IE abgegeben</string> <string name="overview_bolusprogress_goingtodeliver">Es werden %1$.2f IE abgegeben</string>
<string name="primefill">Vorfüllen/Füllen</string> <string name="primefill">Vorfüllen/Füllen</string>
<string name="uploading">Hochladen</string> <string name="uploading">Hochladen</string>
<string name="es_lang">Spanish</string> <string name="es_lang">Spanish</string>
@ -404,9 +404,9 @@
<string name="iob">IOB</string> <string name="iob">IOB</string>
<string name="localprofile">Lokales Profil</string> <string name="localprofile">Lokales Profil</string>
<string name="lock_screen">Sperrbildschirm</string> <string name="lock_screen">Sperrbildschirm</string>
<string name="loopsuperbolusfor">Superbolus (%d Min.)</string> <string name="loopsuperbolusfor">Superbolus (%1$d Min.)</string>
<string name="loopsuspended">Loop pausiert</string> <string name="loopsuspended">Loop pausiert</string>
<string name="loopsuspendedfor">Pausiert (%d Min.)</string> <string name="loopsuspendedfor">Pausiert (%1$d Min.)</string>
<string name="mdtp_cancel">Abbrechen</string> <string name="mdtp_cancel">Abbrechen</string>
<string name="mdtp_ok">OK</string> <string name="mdtp_ok">OK</string>
<string name="mgdl">mg/dl</string> <string name="mgdl">mg/dl</string>
@ -444,7 +444,7 @@
<string name="openaps_short">OAPS</string> <string name="openaps_short">OAPS</string>
<string name="openapsama">OpenAPS AMA</string> <string name="openapsama">OpenAPS AMA</string>
<string name="openapsma_scriptdebugdata_label">Skript Debug</string> <string name="openapsma_scriptdebugdata_label">Skript Debug</string>
<string name="valueoutofrange">Wert %s ist außerhalb des festen Limits</string> <string name="valueoutofrange">Wert %1$s ist außerhalb des festen Limits</string>
<string name="overview_calibration">Kalibrierung</string> <string name="overview_calibration">Kalibrierung</string>
<string name="overview_calibration_bg_label">Kalibrierung</string> <string name="overview_calibration_bg_label">Kalibrierung</string>
<string name="overview_editquickwizard_buttontext">Button-Text:</string> <string name="overview_editquickwizard_buttontext">Button-Text:</string>
@ -469,7 +469,7 @@
<string name="restartingapp">App wird beendet, um neue Einstellungen zu laden.</string> <string name="restartingapp">App wird beendet, um neue Einstellungen zu laden.</string>
<string name="resume">Fortsetzen</string> <string name="resume">Fortsetzen</string>
<string name="ru_lang">Russisch</string> <string name="ru_lang">Russisch</string>
<string name="send_calibration">Kalibrierung %.1f an xDrip+ senden?</string> <string name="send_calibration">Kalibrierung %1$.1f an xDrip+ senden?</string>
<string name="settings_password">Passwort für die Einstellungen</string> <string name="settings_password">Passwort für die Einstellungen</string>
<string name="settingtempbasal">TBR wird gesetzt</string> <string name="settingtempbasal">TBR wird gesetzt</string>
<string name="short_tabtitles">Kurze Tab-Überschriften</string> <string name="short_tabtitles">Kurze Tab-Überschriften</string>
@ -490,11 +490,11 @@
<string name="updatingbasalrates">Basalraten werden aktualisiert</string> <string name="updatingbasalrates">Basalraten werden aktualisiert</string>
<string name="careportal_sensorage_label">Sensoralter</string> <string name="careportal_sensorage_label">Sensoralter</string>
<string name="danar_switchtouhmode">Wechsle Modus von IE/d zu IE/h in der Pumpe</string> <string name="danar_switchtouhmode">Wechsle Modus von IE/d zu IE/h in der Pumpe</string>
<string name="danar_totaluploaded">Insgesamt %d Einträge erfolgreich hochgeladen</string> <string name="danar_totaluploaded">Insgesamt %1$d Einträge erfolgreich hochgeladen</string>
<string name="danarprofile_dia_summary">Dauer der Insulinwirkung</string> <string name="danarprofile_dia_summary">Dauer der Insulinwirkung</string>
<string name="insulin_shortname">INS</string> <string name="insulin_shortname">INS</string>
<string name="lock_screen_short">Sperr</string> <string name="lock_screen_short">Sperr</string>
<string name="needwhitelisting">%s benötigt Batterie-Optimierungs-Whitelisting, um korrekt arbeiten zu können</string> <string name="needwhitelisting">%1$s benötigt Batterie-Optimierungs-Whitelisting, um korrekt arbeiten zu können</string>
<string name="nsalarm_staledata">Veraltete Daten</string> <string name="nsalarm_staledata">Veraltete Daten</string>
<string name="nsalarm_staledatavalue_label">Veraltete Daten seit [Min.]</string> <string name="nsalarm_staledatavalue_label">Veraltete Daten seit [Min.]</string>
<string name="openapsma_autosensdata_label">Autosens-Daten</string> <string name="openapsma_autosensdata_label">Autosens-Daten</string>
@ -508,7 +508,7 @@
<string name="sensitivityoref0">Sensitivität Oref0</string> <string name="sensitivityoref0">Sensitivität Oref0</string>
<string name="sensitivityweightedaverage">Durchschnittliche Sensitivität</string> <string name="sensitivityweightedaverage">Durchschnittliche Sensitivität</string>
<string name="settingextendedbolus">Verlängerter Bolus wird gesetzt</string> <string name="settingextendedbolus">Verlängerter Bolus wird gesetzt</string>
<string name="sms_minago">vor %d Min.</string> <string name="sms_minago">vor %1$d Min.</string>
<string formatted="false" name="smscommunicator_basalstopreplywithcode">Um die TBR abzubrechen, antworte mit dem Code %s</string> <string formatted="false" name="smscommunicator_basalstopreplywithcode">Um die TBR abzubrechen, antworte mit dem Code %s</string>
<string formatted="false" name="smscommunicator_bolusdelivered">Bolus %.2f IE erfolgreich abgegeben</string> <string formatted="false" name="smscommunicator_bolusdelivered">Bolus %.2f IE erfolgreich abgegeben</string>
<string name="smscommunicator_calibrationfailed">xDrip+ hat die Kalbrierung nicht erhalten</string> <string name="smscommunicator_calibrationfailed">xDrip+ hat die Kalbrierung nicht erhalten</string>
@ -628,7 +628,7 @@
<string name="gettingbolusstatus">Status des Bolus wird ermittelt</string> <string name="gettingbolusstatus">Status des Bolus wird ermittelt</string>
<string name="pairing">PAIRING</string> <string name="pairing">PAIRING</string>
<string name="startingbolus">Bolus-Abgabe gestartet</string> <string name="startingbolus">Bolus-Abgabe gestartet</string>
<string name="waitingforestimatedbolusend">Warte auf Ende der Bolus-Abgabe. %d Sek. verbleiben.</string> <string name="waitingforestimatedbolusend">Warte auf Ende der Bolus-Abgabe. %1$d Sek. verbleiben.</string>
<string name="executingrightnow">Befehl wird zurzeit ausgeführt.</string> <string name="executingrightnow">Befehl wird zurzeit ausgeführt.</string>
<string name="missed_bg_readings">BZ-Werte fehlen</string> <string name="missed_bg_readings">BZ-Werte fehlen</string>
<string name="btwatchdog_summary">Deaktiviert Bluetooth kurzzeitig, falls keine Verbindung zur Pumpe besteht. Dies kann für Smartphones mit Verbindungsproblemen nützlich sein.</string> <string name="btwatchdog_summary">Deaktiviert Bluetooth kurzzeitig, falls keine Verbindung zur Pumpe besteht. Dies kann für Smartphones mit Verbindungsproblemen nützlich sein.</string>
@ -659,16 +659,16 @@
<string name="btwatchdog_title">BT Watchdog</string> <string name="btwatchdog_title">BT Watchdog</string>
<string name="DexcomG5">DexcomG5 App (patched)</string> <string name="DexcomG5">DexcomG5 App (patched)</string>
<string name="combo_pump_activity_label">Aktivität</string> <string name="combo_pump_activity_label">Aktivität</string>
<string name="combo_tbr_remaining">%d%% (%d Min. verbleibend)</string> <string name="combo_tbr_remaining">%1$d%% (%2$d Min. verbleibend)</string>
<string name="combo_no_pump_connection">Keine Verbindung zur Pumpe seit %d Min.</string> <string name="combo_no_pump_connection">Keine Verbindung zur Pumpe seit %1$d Min.</string>
<string name="combo_pump_state_label">Status</string> <string name="combo_pump_state_label">Status</string>
<string name="combo_pump_state_suspended_by_user">Gestoppt (Benutzer)</string> <string name="combo_pump_state_suspended_by_user">Gestoppt (Benutzer)</string>
<string name="combo_pump_state_suspended_due_to_error">Gestoppt (Fehler)</string> <string name="combo_pump_state_suspended_due_to_error">Gestoppt (Fehler)</string>
<string name="combo_pump_state_running">In Betrieb</string> <string name="combo_pump_state_running">In Betrieb</string>
<string name="combo_programming_bolus">Bolusabgabe wird vorbereitet</string> <string name="combo_programming_bolus">Bolusabgabe wird vorbereitet</string>
<string name="combo_pump_action_cancelling_tbr">TBR wird abgebrochen</string> <string name="combo_pump_action_cancelling_tbr">TBR wird abgebrochen</string>
<string name="combo_pump_action_setting_tbr">TBR wird gesetzt (%d%% / %d Min.)</string> <string name="combo_pump_action_setting_tbr">TBR wird gesetzt (%1$d%% / %2$d Min.)</string>
<string name="combo_pump_action_bolusing">Bolus (%.1f IE) wird abgegeben</string> <string name="combo_pump_action_bolusing">Bolus (%1$.1f IE) wird abgegeben</string>
<string name="alert_dialog_storage_permission_text">Bitte starte dein Telefon neu oder starte AndroidAPS in den System-Einstellungen neu. Andernfalls wird AndroidAPS nicht protokolliert (wichtig zum Nachverfolgen und Verifizieren, dass der Algorithmus korrekt funktioniert)</string> <string name="alert_dialog_storage_permission_text">Bitte starte dein Telefon neu oder starte AndroidAPS in den System-Einstellungen neu. Andernfalls wird AndroidAPS nicht protokolliert (wichtig zum Nachverfolgen und Verifizieren, dass der Algorithmus korrekt funktioniert)</string>
<string name="pump_tempbasal_label">TBR</string> <string name="pump_tempbasal_label">TBR</string>
<string name="bolus_frequency_exceeded">Ein gleich großer Bolus wurde in den letzten zwei Minuten angefordert. Dies ist nicht zulässig, um ungewollte Doppelboli zu verhindern und vor eventuellen Bugs zu schützen.</string> <string name="bolus_frequency_exceeded">Ein gleich großer Bolus wurde in den letzten zwei Minuten angefordert. Dies ist nicht zulässig, um ungewollte Doppelboli zu verhindern und vor eventuellen Bugs zu schützen.</string>
@ -677,7 +677,7 @@
<string name="combo_error_bolus_recovery_progress">Verbindung wird wieder hergestellt</string> <string name="combo_error_bolus_recovery_progress">Verbindung wird wieder hergestellt</string>
<string name="combo_error_bolus_verification_failed">Der abgegebene Bolus konnte nicht bestätigt werden. Bitte prüfe auf der Pumpe, ob ein Bolus abgegeben wurde und erstelle einen Eintrag im Careportal falls nötig.</string> <string name="combo_error_bolus_verification_failed">Der abgegebene Bolus konnte nicht bestätigt werden. Bitte prüfe auf der Pumpe, ob ein Bolus abgegeben wurde und erstelle einen Eintrag im Careportal falls nötig.</string>
<string name="combo_error_no_bolus_delivered">Die Bolusabgabe ist fehlgeschlagen: Es wurde scheinbar kein Bolus abgegeben. Bitte prüfe auf der Pumpe, ob ein Bolus abgegeben wurde. Um doppelte Boli durch Programmfehler zu vermeiden, werden Boli nicht automatisch wiederholt.</string> <string name="combo_error_no_bolus_delivered">Die Bolusabgabe ist fehlgeschlagen: Es wurde scheinbar kein Bolus abgegeben. Bitte prüfe auf der Pumpe, ob ein Bolus abgegeben wurde. Um doppelte Boli durch Programmfehler zu vermeiden, werden Boli nicht automatisch wiederholt.</string>
<string name="combo_error_partial_bolus_delivered">Wegen eines Fehlers wurden nur %.2f IE von den angeforderten %.2f IE abgegeben. Bitte prüfe den abgegebenen Bolus auf der Pumpe.</string> <string name="combo_error_partial_bolus_delivered">Wegen eines Fehlers wurden nur %1$.2f IE von den angeforderten %2$.2f IE abgegeben. Bitte prüfe den abgegebenen Bolus auf der Pumpe.</string>
<string name="combo_pump_action_refreshing">Status wird aktualisiert</string> <string name="combo_pump_action_refreshing">Status wird aktualisiert</string>
<string name="combo_pump_state_initializing">Die Pumpe wird initialisiert</string> <string name="combo_pump_state_initializing">Die Pumpe wird initialisiert</string>
<string name="combo_pump_connected_now">Jetzt</string> <string name="combo_pump_connected_now">Jetzt</string>
@ -689,7 +689,7 @@
<string name="combo_pump_unsupported_operation">Diese Aktion wird von der Pumpe nicht unterstützt</string> <string name="combo_pump_unsupported_operation">Diese Aktion wird von der Pumpe nicht unterstützt</string>
<string name="combo_pump_battery_low_warrning">Die Batterie in der Pumpe ist fast leer</string> <string name="combo_pump_battery_low_warrning">Die Batterie in der Pumpe ist fast leer</string>
<string name="combo_pump_cartridge_low_warrning">Das Reservoir in der Pumpe ist fast leer</string> <string name="combo_pump_cartridge_low_warrning">Das Reservoir in der Pumpe ist fast leer</string>
<string name="combo_is_in_error_state">Die Pumpe zeigt einen Fehler an E%d: %s</string> <string formatted="false" name="combo_is_in_error_state">Die Pumpe zeigt einen Fehler an E%d: %s</string>
<string name="combo_force_disabled_notification">Unsichere Verwendung: In der Pumpe ist nicht das erste Basalratenprofil gewählt. Der Loop wird deaktiviert bis dies korrigiert ist.</string> <string name="combo_force_disabled_notification">Unsichere Verwendung: In der Pumpe ist nicht das erste Basalratenprofil gewählt. Der Loop wird deaktiviert bis dies korrigiert ist.</string>
<string name="combo_low_suspend_forced_notification">Unsichere Verwendung: Ein erweiterter oder Multiwave-Bolus ist aktiv. Der Loop wird für die nächsten 6 Stunden kein zusätzliches Insulin abgeben.</string> <string name="combo_low_suspend_forced_notification">Unsichere Verwendung: Ein erweiterter oder Multiwave-Bolus ist aktiv. Der Loop wird für die nächsten 6 Stunden kein zusätzliches Insulin abgeben.</string>
<string name="combo_notification_check_time_date">Bitte aktualisiere die Uhrzeit der Pumpe</string> <string name="combo_notification_check_time_date">Bitte aktualisiere die Uhrzeit der Pumpe</string>
@ -713,7 +713,7 @@
<string name="openapsama_min_5m_carbimpact_summary">Standardwert: 3.0\nDies ist eine Einstellung für die Standard-Kohlenhydrat-Absorptionswirkung pro 5 Minuten. Der Standardwert ist 3mg/dl/5min. Dies wirkt sich darauf aus, wie schnell der COB-Wert fällt und wieviel KH-Absorption bei der Berechnung des vorhergesagten BZ angenommen wird, wenn der BZ stärker als erwartet fällt oder nicht so stark wie erwartet steigt.</string> <string name="openapsama_min_5m_carbimpact_summary">Standardwert: 3.0\nDies ist eine Einstellung für die Standard-Kohlenhydrat-Absorptionswirkung pro 5 Minuten. Der Standardwert ist 3mg/dl/5min. Dies wirkt sich darauf aus, wie schnell der COB-Wert fällt und wieviel KH-Absorption bei der Berechnung des vorhergesagten BZ angenommen wird, wenn der BZ stärker als erwartet fällt oder nicht so stark wie erwartet steigt.</string>
<string name="openapsama_link_to_preferncejson_doc_txt">Achtung! Normalerweise musst Du diese Werte nicht ändern. Bitte KLICKE HIER und LESE den Text. Verändere Werte erst, wenn Du den Inhalt des Textes verstanden hast.</string> <string name="openapsama_link_to_preferncejson_doc_txt">Achtung! Normalerweise musst Du diese Werte nicht ändern. Bitte KLICKE HIER und LESE den Text. Verändere Werte erst, wenn Du den Inhalt des Textes verstanden hast.</string>
<string name="combo_actvity_reading_basal_profile">Basalratenprofil wird gelesen</string> <string name="combo_actvity_reading_basal_profile">Basalratenprofil wird gelesen</string>
<string name="pump_basebasalrate">%.2f IE/h</string> <string formatted="false" name="pump_basebasalrate">%.2f IE/h</string>
<string name="combo_error_no_connection_no_bolus_delivered">Keine Verbindung zur Pumpe: Es wurde kein Bolus abgegeben.</string> <string name="combo_error_no_connection_no_bolus_delivered">Keine Verbindung zur Pumpe: Es wurde kein Bolus abgegeben.</string>
<string name="extendedbolusdeliveryerror">Fehler bei der Abgabe eines verlängerten Bolus</string> <string name="extendedbolusdeliveryerror">Fehler bei der Abgabe eines verlängerten Bolus</string>
<string name="combo_bolus_rejected_due_to_pump_history_change">Nach der Berechnung des Bolus hat sich die Pumpenhistorie geändert. Daher wurde kein Bolus abgegeben. Bitte prüfe, ob überhaupt noch ein Bolus benötigt wird. Wenn die gleiche Bolusmenge erforderlich ist, warte zwei Minuten ab, denn es werden aus Sicherheitsgründen keine gleich großen Boli abgegeben, wenn sie innerhalb von zwei Minuten angefordert wurden (unabhängig davon, ob sie verabreicht wurden oder nicht).</string> <string name="combo_bolus_rejected_due_to_pump_history_change">Nach der Berechnung des Bolus hat sich die Pumpenhistorie geändert. Daher wurde kein Bolus abgegeben. Bitte prüfe, ob überhaupt noch ein Bolus benötigt wird. Wenn die gleiche Bolusmenge erforderlich ist, warte zwei Minuten ab, denn es werden aus Sicherheitsgründen keine gleich großen Boli abgegeben, wenn sie innerhalb von zwei Minuten angefordert wurden (unabhängig davon, ob sie verabreicht wurden oder nicht).</string>
@ -726,9 +726,9 @@
<string name="mute">Alarm stoppen</string> <string name="mute">Alarm stoppen</string>
<string name="bolusstopped">Bolus gestoppt</string> <string name="bolusstopped">Bolus gestoppt</string>
<string name="bolusstopping">Bolus wird gestoppt</string> <string name="bolusstopping">Bolus wird gestoppt</string>
<string name="basalprofilenotaligned">Basalraten beginnen nicht zur vollen Stunde: %s</string> <string formatted="false" name="basalprofilenotaligned">Basalraten beginnen nicht zur vollen Stunde: %s</string>
<string name="zerovalueinprofile">Ungültiges Profil: %s</string> <string formatted="false" name="zerovalueinprofile">Ungültiges Profil: %s</string>
<string name="hoursago">vor %.1f h</string> <string formatted="false" name="hoursago">vor %.1f h</string>
<string name="combo_high_temp_rejected_due_to_pump_history_changes">Es wurde keine hohe TBR gesetzt, da nach der Berechnung Boluseinträge in der Pumpenhistorik gefunden wurden.</string> <string name="combo_high_temp_rejected_due_to_pump_history_changes">Es wurde keine hohe TBR gesetzt, da nach der Berechnung Boluseinträge in der Pumpenhistorik gefunden wurden.</string>
<string name="combo_check_date">Der letzte Bolus liegt mehr als 24 Stunden zurück oder liegt in der Zukunft. Prüfe bitte das Datum auf der Pumpe.</string> <string name="combo_check_date">Der letzte Bolus liegt mehr als 24 Stunden zurück oder liegt in der Zukunft. Prüfe bitte das Datum auf der Pumpe.</string>
<string name="combo_suspious_bolus_time">Zeit/Datum des abgegebenen Boluses auf der Pumpe erscheint falsch, IOB ist wahrscheinlich nicht korrekt. Bitte prüfe Zeit/Datum der Pumpe.</string> <string name="combo_suspious_bolus_time">Zeit/Datum des abgegebenen Boluses auf der Pumpe erscheint falsch, IOB ist wahrscheinlich nicht korrekt. Bitte prüfe Zeit/Datum der Pumpe.</string>
@ -737,4 +737,66 @@
<string name="pump_stopped">Pumpe gestoppt</string> <string name="pump_stopped">Pumpe gestoppt</string>
<string name="pump_started">Pumpe gestartet</string> <string name="pump_started">Pumpe gestartet</string>
<string name="pump_paused">Pumpe pausiert</string> <string name="pump_paused">Pumpe pausiert</string>
<string name="with">mit</string>
<string name="ns_wifi_ssids">Wlan SSID</string>
<string name="week">Woche</string>
<string formatted="false" name="waitingfortimesynchronization">Warte auf Zeitsynchronisierung (%d Sek.)</string>
<string name="insight_waiting_for_code">Warte auf Code-Bestätigung</string>
<string name="ns_wifionly">Benutze nur WLAN Verbindung</string>
<string name="enablesmb_summary">Benutze Super Micro Bolus anstelle von Temporären Basal für Schnellere Aktion</string>
<string name="unsafeusage">Unsichere Benutzung</string>
<string name="time">Zeit</string>
<string name="thirdcarbsincrement">Dritte KH Inkrement</string>
<string name="thirdinsulinincrement">Dritte Insulin Inkrement</string>
<string name="loop_tbrsetbypump_label">Temp. Basal der Pumpe</string>
<string name="subcategory">Unterkategorie</string>
<string name="insight_stay_always_connected">Bleibe immer verbunden</string>
<string name="start_hypo_tt">Starte Hypo TT</string>
<string name="start_eating_soon_tt">Starte Essen TT</string>
<string name="start_activity_tt">Starte Aktivität TT</string>
<string name="overview_show_sensitivity">Sensitivität</string>
<string name="show_calibration_button_summary">Sendet eine Kalibierung an xDrip+ oder öffnet den G5 Kalibrierungs-Dialog</string>
<string name="secondinsulinincrement">Zweites Insulin Inkrement</string>
<string name="secondcarbsincrement">Zweites KH Inkrement</string>
<string name="second">Sekunde</string>
<string name="closed_loop_disabled_on_dev_branch">Entwickler-Version. Closed Loop ist nicht verfügbar.</string>
<string name="record_pump_site_change">Erfasse Katheter-Wechsel</string>
<string name="record_insulin_cartridge_change">Erfasse Resoirvoir-Wechsel</string>
<string name="insight_needs">benötigt</string>
<string name="overview_show_deviations">Abweichungen</string>
<string name="day">Tag</string>
<string name="ns_wifi_allowedssids">Erlaubte SSIDs (Semikolon getrennt)</string>
<string name="ns_allowroaming">Erlaube Verbindung bei Roaming</string>
<string name="openapsama_autosens_adjusttargets">Autosense passt Zielwerte an</string>
<string name="resistantadult">Insulin Resistenter Erwachsener</string>
<string name="enableuam">Aktiviere UAM</string>
<string name="enablesmb">Aktiviere SMB</string>
<string name="enableuam_summary">Erkennung von Unangekündigten Mahlzeiten</string>
<string name="hypo_duration">Hypo Dauer</string>
<string name="hypo_target">Hypo Zielwert</string>
<string name="hasbgdata">BZ verfügbar von gewählter Quelle</string>
<string name="changed">Geändert</string>
<string name="pump_stopped_uppercase">PUMPE GESTOPPT</string>
<string name="insight_active_tbr">Aktive TBR</string>
<string name="statistics">Statistiken</string>
<string name="enablesmbalways">Aktiviere SMB immer</string>
<string name="enablesmbaftercarbs">Aktiviere SMB nach Mahlzeiten</string>
<string name="enablesmbwithcob">Aktiviere SMB bei COB</string>
<string name="enablesmbwithtemptarget">Aktiviere SMB mit Temporären Zielwerten</string>
<string name="wear_predictions_title">Vorhersagen</string>
<string name="data_choices">Daten Auswahl</string>
<string name="smbdisabledinpreferences">SMB in Einstellungen deaktiviert</string>
<string name="food_short">Mahlzeiten</string>
<string name="hardlimit">Hartes Limit</string>
<string name="readstatusfailed">Lesen des Status fehlgeschlagen</string>
<string name="loopdisconnectedfor">Getrennt (%1$d m)</string>
<string name="automatic_careportal_events">Automatische Careportal Ereignisse</string>
<string name="firstinsulinincrement">Erstes Insulin Inkrement</string>
<string name="firstcarbsincrement">Erstes KH Inkrement</string>
<string name="ns_chargingonly">Nur wenn geladen wird</string>
<string name="connectionsettings_title">Verbindungs-Einstellungen</string>
<string formatted="false" name="objectivenotstarted">Zielsetzung %d nicht gestartet</string>
<string formatted="false" name="objectivenotfinished">Zielsetzung %d nicht abgeschlossen</string>
<string name="do_not_bolus_record_only">Bolus nur erfassen</string>
<string name="bolusrecordedonly">Bolus wird nur erfasst</string>
</resources> </resources>

View file

@ -744,7 +744,7 @@
<string name="bolusrecordedonly">El Bolo solo será anotado</string> <string name="bolusrecordedonly">El Bolo solo será anotado</string>
<string name="category">Categoría</string> <string name="category">Categoría</string>
<string name="subcategory">Subcategoría</string> <string name="subcategory">Subcategoría</string>
<string name="don_t_bolus_record_only">No administrar Bolo, solo anotar</string> <string name="do_not_bolus_record_only">No administrar Bolo, solo anotar</string>
<string name="insight_min">min</string> <string name="insight_min">min</string>
<string name="temptargetshort">TT</string> <string name="temptargetshort">TT</string>
<string name="start_activity_tt">Inicio TT Actividad</string> <string name="start_activity_tt">Inicio TT Actividad</string>

View file

@ -557,7 +557,7 @@
<string name="careportal_sensorage_label">Czas sensora</string> <string name="careportal_sensorage_label">Czas sensora</string>
<string name="careportal_canulaage_label">Czas wkłucia</string> <string name="careportal_canulaage_label">Czas wkłucia</string>
<string name="careportal_insulinage_label">Czas insuliny</string> <string name="careportal_insulinage_label">Czas insuliny</string>
<string name="hours">godziny</string> <string name="hours">godzin</string>
<string name="overview_newtempbasal_basaltype_label">Typ bazy</string> <string name="overview_newtempbasal_basaltype_label">Typ bazy</string>
<string name="invalidprofile">Nieważny profil !!!</string> <string name="invalidprofile">Nieważny profil !!!</string>
<string name="profileswitch">ZmieńProfil</string> <string name="profileswitch">ZmieńProfil</string>
@ -835,7 +835,7 @@
<string name="start_activity_tt">Rozpocznij TT Ćwiczenia</string> <string name="start_activity_tt">Rozpocznij TT Ćwiczenia</string>
<string name="start_eating_soon_tt">Rozpocznij TT WkrótcePosiłek</string> <string name="start_eating_soon_tt">Rozpocznij TT WkrótcePosiłek</string>
<string name="temptargetshort">TT</string> <string name="temptargetshort">TT</string>
<string name="don_t_bolus_record_only">Nie podawaj bolusa, tylko zapisz rekord</string> <string name="do_not_bolus_record_only">Nie podawaj bolusa, tylko zapisz rekord</string>
<string name="category">Kategoria</string> <string name="category">Kategoria</string>
<string name="subcategory">Podkategoria</string> <string name="subcategory">Podkategoria</string>
<string name="bolusrecordedonly">Bolus zostanie tylko zapisany w rekordach</string> <string name="bolusrecordedonly">Bolus zostanie tylko zapisany w rekordach</string>

View file

@ -53,19 +53,19 @@
<string name="careportal_newnstreatment_carbs_label">KH</string> <string name="careportal_newnstreatment_carbs_label">KH</string>
<string name="careportal_newnstreatment_carbtime_label">KH-tid</string> <string name="careportal_newnstreatment_carbtime_label">KH-tid</string>
<string name="careportal_newnstreatment_duration_label">Duration</string> <string name="careportal_newnstreatment_duration_label">Duration</string>
<string name="careportal_newnstreatment_enteredby_title">Infört av</string> <string name="careportal_newnstreatment_enteredby_title">Loggat av</string>
<string name="careportal_newnstreatment_eventtime_label">Tid</string> <string name="careportal_newnstreatment_eventtime_label">Tid</string>
<string name="careportal_newnstreatment_eventtype">Händelsetyp</string> <string name="careportal_newnstreatment_eventtype">Händelsetyp</string>
<string name="careportal_newnstreatment_insulin_label">Insulin</string> <string name="careportal_newnstreatment_insulin_label">Insulin</string>
<string name="careportal_newnstreatment_meter">Mätare</string> <string name="careportal_newnstreatment_meter">Mätare</string>
<string name="careportal_newnstreatment_notes_label">Notering</string> <string name="careportal_newnstreatment_notes_label">Anteckning</string>
<string name="careportal_newnstreatment_other">Annat</string> <string name="careportal_newnstreatment_other">Annat</string>
<string name="careportal_newnstreatment_percent_label">Procent</string> <string name="careportal_newnstreatment_percent_label">Procent</string>
<string name="careportal_newnstreatment_profile_label">Profil</string> <string name="careportal_newnstreatment_profile_label">Profil</string>
<string name="careportal_newnstreatment_sensor">Sensor</string> <string name="careportal_newnstreatment_sensor">Sensor</string>
<string name="careportal_newnstreatment_split_label">Delad</string> <string name="careportal_newnstreatment_split_label">Delad</string>
<string name="careportal_note">Notering</string> <string name="careportal_note">Anteckning</string>
<string name="careportal_openapsoffline">Offline</string> <string name="careportal_openapsoffline">OpenAPS Offline</string>
<string name="careportal_pbage_label">Pumpbatteri ålder</string> <string name="careportal_pbage_label">Pumpbatteri ålder</string>
<string name="careportal_profileswitch">Byt profil</string> <string name="careportal_profileswitch">Byt profil</string>
<string name="careportal_pumpsitechange">Byte pumpkanyl</string> <string name="careportal_pumpsitechange">Byte pumpkanyl</string>
@ -89,7 +89,7 @@
<string name="configbuilder_aps">APS</string> <string name="configbuilder_aps">APS</string>
<string name="configbuilder_bgsource">BG-källa</string> <string name="configbuilder_bgsource">BG-källa</string>
<string name="configbuilder_constraints">Begränsningar</string> <string name="configbuilder_constraints">Begränsningar</string>
<string name="configbuilder_general">Generell</string> <string name="configbuilder_general">Generella inställningar</string>
<string name="configbuilder_insulin">Insulin</string> <string name="configbuilder_insulin">Insulin</string>
<string name="configbuilder_loop">Loop</string> <string name="configbuilder_loop">Loop</string>
<string name="configbuilder_nightscoutversion_label">Nightscoutversion:</string> <string name="configbuilder_nightscoutversion_label">Nightscoutversion:</string>
@ -229,7 +229,7 @@
<string name="nav_export">Exportera inställningar</string> <string name="nav_export">Exportera inställningar</string>
<string name="nav_import">Importera inställningar</string> <string name="nav_import">Importera inställningar</string>
<string name="nav_preferences">Inställningar</string> <string name="nav_preferences">Inställningar</string>
<string name="nav_refreshtreatments">Uppdatera behandlingar från NS</string> <string name="nav_refreshtreatments">Uppdatera från Nightscout</string>
<string name="nav_resetdb">Återställ databaserna</string> <string name="nav_resetdb">Återställ databaserna</string>
<string name="nav_show_logcat">Visa logg</string> <string name="nav_show_logcat">Visa logg</string>
<string name="nav_test_alert">Testa alarm</string> <string name="nav_test_alert">Testa alarm</string>
@ -243,7 +243,7 @@
<string name="nosuccess">misslyckat - kontrollera telefonen</string> <string name="nosuccess">misslyckat - kontrollera telefonen</string>
<string name="notavailable">Ej tillgängligt</string> <string name="notavailable">Ej tillgängligt</string>
<string name="nowritepermission">NS Client har inga skrivrättigheter. Fel API secret?</string> <string name="nowritepermission">NS Client har inga skrivrättigheter. Fel API secret?</string>
<string name="ns_alarmoptions">Alarm inställningar</string> <string name="ns_alarmoptions">Larminställningar</string>
<string name="ns_localbroadcasts">Slå på sändning av data till alla appar i telefonen (ex xDrip).</string> <string name="ns_localbroadcasts">Slå på sändning av data till alla appar i telefonen (ex xDrip).</string>
<string name="ns_localbroadcasts_title">Aktivera lokala broadcasts</string> <string name="ns_localbroadcasts_title">Aktivera lokala broadcasts</string>
<string name="ns_logappstartedevent">Markera appstart till Nightscout</string> <string name="ns_logappstartedevent">Markera appstart till Nightscout</string>
@ -254,19 +254,19 @@
<string name="ns_upload_only_summary">Endast uppladdning till Nightscout. Kommer inte få BG-data om inte lokal källa som xDrip används. Kommer heller inte att kunna hämta basalprofiler från Nightscout.</string> <string name="ns_upload_only_summary">Endast uppladdning till Nightscout. Kommer inte få BG-data om inte lokal källa som xDrip används. Kommer heller inte att kunna hämta basalprofiler från Nightscout.</string>
<string name="nsalarm_high">Hög</string> <string name="nsalarm_high">Hög</string>
<string name="nsalarm_low">Låg</string> <string name="nsalarm_low">Låg</string>
<string name="nsalarm_staledata">Gammal data</string> <string name="nsalarm_staledata">BG-data saknas</string>
<string name="nsclient">NSClient</string> <string name="nsclient">NSClient</string>
<string name="nsclientinternal_devicename_dialogtitle">Ange enhetens namn</string> <string name="nsclientinternal_devicename_dialogtitle">Ange enhetens namn</string>
<string name="nsclientinternal_devicename_title">Enhetens namn</string> <string name="nsclientinternal_devicename_title">Enhetens namn</string>
<string name="nsclientinternal_secret_dialogmessage">Ange NS API secret (min 12 tecken)</string> <string name="nsclientinternal_secret_dialogmessage">Ange Nightscout API secret (min 12 tecken)</string>
<string name="nsclientinternal_secret_dialogtitle">NS API secret</string> <string name="nsclientinternal_secret_dialogtitle">Nightscout API secret</string>
<string name="nsclientnotinstalled">NSClient är inte installerad. Data förlorad!</string> <string name="nsclientnotinstalled">NSClient är inte installerad. Data förlorad!</string>
<string name="nsclientinternal_url_title">Nightscout URL</string> <string name="nsclientinternal_url_title">Nightscout URL</string>
<string name="nsclientinternal_url_dialogmessage">Ange Nightscout URL</string> <string name="nsclientinternal_url_dialogmessage">Ange Nightscout URL</string>
<string name="nsclientinternal_url">URL:</string> <string name="nsclientinternal_url">URL:</string>
<string name="nsclientinternal_title">NSClient</string> <string name="nsclientinternal_title">NSClient</string>
<string name="nsclientinternal_shortname">NSCI</string> <string name="nsclientinternal_shortname">NSCI</string>
<string name="nsclientinternal_secret_title">NS API secret</string> <string name="nsclientinternal_secret_title">Nightscout API secret</string>
<string name="nsprofileview_activeprofile_label">Aktiv profil</string> <string name="nsprofileview_activeprofile_label">Aktiv profil</string>
<string name="nsprofileview_basal_label">Basal</string> <string name="nsprofileview_basal_label">Basal</string>
<string name="nsprofileview_dia_label">DIA</string> <string name="nsprofileview_dia_label">DIA</string>
@ -318,7 +318,7 @@
<string name="unsupportedclientver">Osupportad version av NSClient</string> <string name="unsupportedclientver">Osupportad version av NSClient</string>
<string name="unlock_settings">Lås upp inställningar</string> <string name="unlock_settings">Lås upp inställningar</string>
<string name="units">Enheter:</string> <string name="units">Enheter:</string>
<string name="treatmentssafety_title">Säkerhet vid behandling</string> <string name="treatmentssafety_title">Säkerhetsbegränsingar</string>
<string name="treatmentssafety_maxcarbs_title">Max tillåtna KH [g]</string> <string name="treatmentssafety_maxcarbs_title">Max tillåtna KH [g]</string>
<string name="treatmentssafety_maxbolus_title">Max tillåten bolus [E]</string> <string name="treatmentssafety_maxbolus_title">Max tillåten bolus [E]</string>
<string name="treatments_wizard_unit_label">E</string> <string name="treatments_wizard_unit_label">E</string>
@ -333,21 +333,21 @@
<string name="treatments_shortname">Beh</string> <string name="treatments_shortname">Beh</string>
<string name="treatments_newtreatment_insulinamount_label">Insulin</string> <string name="treatments_newtreatment_insulinamount_label">Insulin</string>
<string name="treatments_newtreatment_carbsamount_label">KH</string> <string name="treatments_newtreatment_carbsamount_label">KH</string>
<string name="treatments_iobtotal_label_string">Total IOB:</string> <string name="treatments_iobtotal_label_string">Total IOB (bolus):</string>
<string name="treatments_iobactivitytotal_label_string">Totalt aktiverat IOB:</string> <string name="treatments_iobactivitytotal_label_string">Total aktivitet (5m):</string>
<string name="treatments_iob_label_string">IOB:</string> <string name="treatments_iob_label_string">IOB:</string>
<string name="treatments_insulin_label_string">Insulin:</string> <string name="treatments_insulin_label_string">Insulin:</string>
<string name="treatments_carbs_label_string">KH:</string> <string name="treatments_carbs_label_string">KH:</string>
<string name="treatments_activity_string">Redan aktiverat:</string> <string name="treatments_activity_string">5m:</string>
<string name="treatments">Behandlingar</string> <string name="treatments">Behandlingar</string>
<string name="treatmentdeliveryerror">Fel vid bolusleverans</string> <string name="treatmentdeliveryerror">Fel vid bolusleverans</string>
<string name="temptargetrange_shortname">TT</string> <string name="temptargetrange_shortname">TT</string>
<string name="temptarget">Temp mål</string> <string name="temptarget">Temp mål</string>
<string name="tempbasals_shortname">TB</string> <string name="tempbasals_shortname">TB</string>
<string name="tempbasals_realduration_label_string">Dur:</string> <string name="tempbasals_realduration_label_string">Dur:</string>
<string name="tempbasals_netratio_label_string">Kvot:</string> <string name="tempbasals_netratio_label_string">Tot:</string>
<string name="tempbasals_netinsulin_label_string">Ins:</string> <string name="tempbasals_netinsulin_label_string">Ins:</string>
<string name="tempbasals_iobtotal_label_string">Total IOB:</string> <string name="tempbasals_iobtotal_label_string">Total IOB (basal):</string>
<string name="tempbasals_iob_label_string">IOB:</string> <string name="tempbasals_iob_label_string">IOB:</string>
<string name="tempbasaldeliveryerror">Fel vid justering av tempbasal</string> <string name="tempbasaldeliveryerror">Fel vid justering av tempbasal</string>
<string name="tempbasal">Temp basal</string> <string name="tempbasal">Temp basal</string>
@ -409,19 +409,19 @@
<string name="resume">Återuppta</string> <string name="resume">Återuppta</string>
<string name="result">Resultat</string> <string name="result">Resultat</string>
<string name="restartingapp">Avslutar appen för att inställningarna ska läsas in.</string> <string name="restartingapp">Avslutar appen för att inställningarna ska läsas in.</string>
<string name="restart">Omstart</string> <string name="restart">Starta om</string>
<string name="reset_db_confirm">Vill du verkligen återställa databaserna?</string> <string name="reset_db_confirm">Vill du verkligen återställa databaserna?</string>
<string name="resend_all_data">Uppdatera klockans data</string> <string name="resend_all_data">Uppdatera klockans data</string>
<string name="removerecord">Ta bort sparad data:</string> <string name="removerecord">Ta bort sparad data:</string>
<string name="reloadprofile">Ladda om profil</string> <string name="reloadprofile">Ladda om profil</string>
<string name="refresheventsfromnightscout">Uppdatera händelser från Nightscout</string> <string name="refresheventsfromnightscout">Uppdatera från Nightscout</string>
<string name="reason">Orsak</string> <string name="reason">Orsak</string>
<string name="ratio_short">RAT</string> <string name="ratio_short">RAT</string>
<string name="rate">Hastighet</string> <string name="rate">Hastighet</string>
<string name="quickwizardsettings">Kalkylatorinställningar</string> <string name="quickwizardsettings">Kalkylatorinställningar</string>
<string name="quickwizard">Kalkylator</string> <string name="quickwizard">Kalkylator</string>
<string name="queue">Kö:</string> <string name="queue">Kö:</string>
<string name="pumpsuspendedclicktorefresh">Pump pausad. Klicka för ladda om status.</string> <string name="pumpsuspendedclicktorefresh">Pump pausad. Klicka för att ladda om status.</string>
<string name="pumpsuspended">Pump pausad</string> <string name="pumpsuspended">Pump pausad</string>
<string name="pumpshutdown">Pump avstängd</string> <string name="pumpshutdown">Pump avstängd</string>
<string name="pumperror">Pumpfel</string> <string name="pumperror">Pumpfel</string>
@ -457,7 +457,7 @@
<string name="overview_calibration_bg_label">Kalibrering</string> <string name="overview_calibration_bg_label">Kalibrering</string>
<string name="overview_calibration">Kalibrering</string> <string name="overview_calibration">Kalibrering</string>
<string name="overview_calculator_label">Kalkylator</string> <string name="overview_calculator_label">Kalkylator</string>
<string name="overview_bolusprogress_stoppressed">STOPP NEDTRYCKT</string> <string name="overview_bolusprogress_stoppressed">Stopp nedtryckt</string>
<string name="overview_bolusprogress_stoped">Stoppad</string> <string name="overview_bolusprogress_stoped">Stoppad</string>
<string name="overview_bolusprogress_stop">Stopp</string> <string name="overview_bolusprogress_stop">Stopp</string>
<string name="overview_bolusprogress_goingtodeliver" formatted="false">Kommer tillföra %.2f enheter</string> <string name="overview_bolusprogress_goingtodeliver" formatted="false">Kommer tillföra %.2f enheter</string>
@ -496,12 +496,13 @@
<string name="openapsama_autosens_period_summary">Antal timmar för beräkning av känslighet (Absorptionstid för KH är exkluderad).</string> <string name="openapsama_autosens_period_summary">Antal timmar för beräkning av känslighet (Absorptionstid för KH är exkluderad).</string>
<string name="openapsama_autosens_period">Intervall för autosens [tim]</string> <string name="openapsama_autosens_period">Intervall för autosens [tim]</string>
<string name="openapsama_autosens_max_summary">Standardvärde: 1.2 Med standarvärdet 1.2 kan autosens justera upp dina basaler, kvoter etc med upp till 20% för att kompensera för t ex tillfällig insulinresistens.</string> <string name="openapsama_autosens_max_summary">Standardvärde: 1.2 Med standarvärdet 1.2 kan autosens justera upp dina basaler, kvoter etc med upp till 20% för att kompensera för t ex tillfällig insulinresistens.</string>
<string name="openapsama_autosens_adjusttargets_summary">Standardvärde: sant Detta för att tillåta autosens justera BG målvärden, ISF och basaler.</string> <string name="openapsama_autosens_adjusttargets_summary">Standardvärde: sant. Detta för att tillåta autosens justera mål-BG utöver ISF och basaler.</string>
<string name="openapsama_autosens_adjusttargets">Autosens justerar även mål-BG</string>
<string name="openapsama">OpenAPS AMA</string> <string name="openapsama">OpenAPS AMA</string>
<string name="openaps">OpenAPS</string> <string name="openaps">OpenAPS</string>
<string name="open_settings_on_wear">Öppna inställningar på klockan</string> <string name="open_settings_on_wear">Öppna inställningar på klockan</string>
<string name="ongoingnotificaction">Konstant infonotis i telefonen</string> <string name="ongoingnotificaction">Konstant avisering i telefonen</string>
<string name="old_data">GAMMAL DATA</string> <string name="old_data">Aktuellt BG saknas!</string>
<string name="ok">OK</string> <string name="ok">OK</string>
<string name="occlusion">Ocklusion</string> <string name="occlusion">Ocklusion</string>
<string name="objectives_shortname">Mål</string> <string name="objectives_shortname">Mål</string>
@ -540,7 +541,7 @@
<string name="lock_screen">Lås skärm</string> <string name="lock_screen">Lås skärm</string>
<string name="lock_screen_short">Lås</string> <string name="lock_screen_short">Lås</string>
<string name="mmol">mmol/l</string> <string name="mmol">mmol/l</string>
<string name="minago" formatted="false">%d min sedan</string> <string name="minago" formatted="false">%d&#160;m</string>
<string name="mgdl">mg/dl</string> <string name="mgdl">mg/dl</string>
<string name="mdtp_ok">OK</string> <string name="mdtp_ok">OK</string>
<string name="mdi">MDI</string> <string name="mdi">MDI</string>
@ -550,9 +551,9 @@
<string name="overview_newtempbasal_basaltype_label">Basaltyp</string> <string name="overview_newtempbasal_basaltype_label">Basaltyp</string>
<string name="sensitivity_shortname">SENS</string> <string name="sensitivity_shortname">SENS</string>
<string name="sensitivity_warning">Genom att slå på Autosens funktionen, kom ihåg att skriva in alla KH. Annars kommer programmet göra fel i beräkningar av känslighet (ISF)!!</string> <string name="sensitivity_warning">Genom att slå på Autosens funktionen, kom ihåg att skriva in alla KH. Annars kommer programmet göra fel i beräkningar av känslighet (ISF)!!</string>
<string name="sensitivityaaps">Känslighetsavkänning AAPS</string> <string name="sensitivityaaps">AAPS</string>
<string name="sensitivityoref0">Känslighetsavkänning Oref0</string> <string name="sensitivityoref0">Oref0</string>
<string name="sensitivityweightedaverage">Känslighetsavkänning WeightedAverage</string> <string name="sensitivityweightedaverage">WeightedAverage</string>
<string name="settingtempbasal">Ställer in temp basal</string> <string name="settingtempbasal">Ställer in temp basal</string>
<string name="simpleprofile_shortname">SP</string> <string name="simpleprofile_shortname">SP</string>
<string name="sms_actualbg">BG:</string> <string name="sms_actualbg">BG:</string>
@ -560,12 +561,12 @@
<string name="sms_bolus">Bolus:</string> <string name="sms_bolus">Bolus:</string>
<string name="sms_delta">Delta:</string> <string name="sms_delta">Delta:</string>
<string name="sms_iob">IOB:</string> <string name="sms_iob">IOB:</string>
<string name="sms_minago" formatted="false">%d min sedan</string> <string name="sms_minago" formatted="false">%d min</string>
<string name="nsalarm_staledatavalue_label">Tröskelvärde för \"Gammal data\" [min]</string> <string name="nsalarm_staledatavalue_label">Första varning efter [min]</string>
<string name="nsalarm_urgent_staledatavalue_label">Tröskelvärde för \"Väldigt gammal data\" [min]</string> <string name="nsalarm_urgent_staledatavalue_label">Akut varning efter [min]</string>
<string name="nsalarm_urgenthigh">Akut hög</string> <string name="nsalarm_urgenthigh">Akut hög</string>
<string name="nsalarm_urgentlow">Akut låg</string> <string name="nsalarm_urgentlow">Akut låg</string>
<string name="nsalarm_urgentstaledata">Väldigt gammal data</string> <string name="nsalarm_urgentstaledata">BG-data saknas (akut larm)</string>
<string name="app_name">AndroidAPS</string> <string name="app_name">AndroidAPS</string>
<string name="treatments_wizard_tt_label">TT</string> <string name="treatments_wizard_tt_label">TT</string>
<string name="overview_newtempbasal_basalpercent">Basal [%]</string> <string name="overview_newtempbasal_basalpercent">Basal [%]</string>
@ -586,7 +587,7 @@
<string name="danar_model">Modell: %02X Protokoll: %02X Kod: %02X</string> <string name="danar_model">Modell: %02X Protokoll: %02X Kod: %02X</string>
<string name="openapsama_current_basal_safety_multiplier_summary">"Standardvärde: 4 Detta är en grundsten i OpenAPS säkerhet. Detta begränsar dina tempbasaler till maximalt 4x din nuvarande basal, oberoende av din max basalhastighet. Detta för att undvika att man av misstag gör farliga inställningar. Om man når taket i denna inställning så kanske ändringar i andra inställningar behövs. De flesta behöver inte ändra denna inställning. "</string> <string name="openapsama_current_basal_safety_multiplier_summary">"Standardvärde: 4 Detta är en grundsten i OpenAPS säkerhet. Detta begränsar dina tempbasaler till maximalt 4x din nuvarande basal, oberoende av din max basalhastighet. Detta för att undvika att man av misstag gör farliga inställningar. Om man når taket i denna inställning så kanske ändringar i andra inställningar behövs. De flesta behöver inte ändra denna inställning. "</string>
<string name="openapsama_autosens_min_summary">Standardvärde: 0.7 Med standardvärdet 0.7 kan autosens justera ner dina basaler, kvoter etc med upp till 30% för att kompensera för t ex tillfällig hög insulinkänslighet.</string> <string name="openapsama_autosens_min_summary">Standardvärde: 0.7 Med standardvärdet 0.7 kan autosens justera ner dina basaler, kvoter etc med upp till 30% för att kompensera för t ex tillfällig hög insulinkänslighet.</string>
<string name="nsclientinternal_devicename_dialogmessage">"Det kommer att användas för att ange \"Inmatat av: \". "</string> <string name="nsclientinternal_devicename_dialogmessage">"Det kommer att användas för att ange \"Loggat av: \". "</string>
<string name="batteryoptimalizationerror">Enheten verkar inte stöda vitlistning av appar för batteriförbrukning</string> <string name="batteryoptimalizationerror">Enheten verkar inte stöda vitlistning av appar för batteriförbrukning</string>
<string name="pleaseallowpermission">Tillåt</string> <string name="pleaseallowpermission">Tillåt</string>
<string name="needwhitelisting">%s behöver kunna kringgå batterisparfunktionerna för att fungera korrekt</string> <string name="needwhitelisting">%s behöver kunna kringgå batterisparfunktionerna för att fungera korrekt</string>
@ -638,7 +639,7 @@
<string name="wearcontrol_title">Kontroller från klockan</string> <string name="wearcontrol_title">Kontroller från klockan</string>
<string name="wearcontrol_summary">Sätt tempmål och ange behandlingar från klockan.</string> <string name="wearcontrol_summary">Sätt tempmål och ange behandlingar från klockan.</string>
<string name="connectiontimedout">Anslutningen tog för lång tid</string> <string name="connectiontimedout">Anslutningen tog för lång tid</string>
<string name="food">Mat</string> <string name="food">Matdatabas</string>
<string name="shortkilojoul">kJ</string> <string name="shortkilojoul">kJ</string>
<string name="shortenergy">En</string> <string name="shortenergy">En</string>
<string name="shortprotein">Pr</string> <string name="shortprotein">Pr</string>
@ -813,7 +814,7 @@
<string name="g5appnotdetected">Vänligen uppdatera din G5-app till en supportad version</string> <string name="g5appnotdetected">Vänligen uppdatera din G5-app till en supportad version</string>
<string name="start_activity_tt">Starta \"Träning\"</string> <string name="start_activity_tt">Starta \"Träning\"</string>
<string name="start_eating_soon_tt">Starta \"Äta snart\"</string> <string name="start_eating_soon_tt">Starta \"Äta snart\"</string>
<string name="don_t_bolus_record_only">Ge ingen bolus, logga bara</string> <string name="do_not_bolus_record_only">Ge ingen bolus, logga bara</string>
<string name="category">Kategori</string> <string name="category">Kategori</string>
<string name="subcategory">Underkategori</string> <string name="subcategory">Underkategori</string>
<string name="bolusrecordedonly">Bolusen sparas bara i loggboken</string> <string name="bolusrecordedonly">Bolusen sparas bara i loggboken</string>
@ -868,7 +869,7 @@
<string name="unsafeusage">osäker användning</string> <string name="unsafeusage">osäker användning</string>
<string name="readstatusfailed">Statuskontroll misslyckad</string> <string name="readstatusfailed">Statuskontroll misslyckad</string>
<string name="record_pump_site_change">Logga byte av kanyl</string> <string name="record_pump_site_change">Logga byte av kanyl</string>
<string name="record_insulin_cartridge_change">Logga byte a insulinreservoar</string> <string name="record_insulin_cartridge_change">Logga byte av insulinreservoar</string>
<string name="smbalwaysdisabled">SMB Alltid På och SMB Efter Kolhydrater är inaktiverat pga att den aktiva BG-källan inte stöder avancerad filtrering</string> <string name="smbalwaysdisabled">SMB Alltid På och SMB Efter Kolhydrater är inaktiverat pga att den aktiva BG-källan inte stöder avancerad filtrering</string>
<string name="smbnotallowedinopenloopmode">SMB inte tillåtet i Open Loop</string> <string name="smbnotallowedinopenloopmode">SMB inte tillåtet i Open Loop</string>
<string name="food_short">Mat</string> <string name="food_short">Mat</string>
@ -885,7 +886,7 @@
<string name="absorption_cutoff_title">Max absorptionstid för kolhydrater [tim]</string> <string name="absorption_cutoff_title">Max absorptionstid för kolhydrater [tim]</string>
<string name="absorption_cutoff_summary">Efter denna tid anses alla kolhydrater vara absorberade. Om det fortfarande finns COB, kommer dessa att tas bort ur beräkningen.</string> <string name="absorption_cutoff_summary">Efter denna tid anses alla kolhydrater vara absorberade. Om det fortfarande finns COB, kommer dessa att tas bort ur beräkningen.</string>
<string name="time">Tid</string> <string name="time">Tid</string>
<string name="overview_show_notes_field_in_dialogs_title">Visa noteringsrutan i behandlingsdialogerna</string> <string name="overview_show_notes_field_in_dialogs_title">Visa anteckningar i behandlingsdialogerna</string>
<string name="boluserrorcode">Angivet: %.2f enheter. Levererat: %.2f enheter. Felkod: %d</string> <string name="boluserrorcode">Angivet: %.2f enheter. Levererat: %.2f enheter. Felkod: %d</string>
<string name="firstinsulinincrement">Första snabbknabben för insulin</string> <string name="firstinsulinincrement">Första snabbknabben för insulin</string>
<string name="secondinsulinincrement">Andra snabbknabben för insulin</string> <string name="secondinsulinincrement">Andra snabbknabben för insulin</string>
@ -925,4 +926,9 @@
<string name="careportal_carbsandbolus_label">KOLHYDRATER &amp; BOLUS</string> <string name="careportal_carbsandbolus_label">KOLHYDRATER &amp; BOLUS</string>
<string name="careportal_cgm_label">CGM &amp; LOGGNING</string> <string name="careportal_cgm_label">CGM &amp; LOGGNING</string>
<string name="othersettings_title">Övrigt</string> <string name="othersettings_title">Övrigt</string>
<string name="combo_pump_state_initializing">Initierar</string>
<string name="smbmaxminutes_summary">Max antal minuter som kan bli SMB</string>
<string name="shorthour">t</string>
<string name="shortminute">m</string>
<string name="danarv2pump">DanaR v2</string>
</resources> </resources>

View file

@ -14,6 +14,7 @@
<color name="inrange">#00FF00</color> <color name="inrange">#00FF00</color>
<color name="low">#FF0000</color> <color name="low">#FF0000</color>
<color name="high">#FFFF00</color> <color name="high">#FFFF00</color>
<color name="actionsConfirm">#FFFF00</color>
<color name="listdelimiter">#505050</color> <color name="listdelimiter">#505050</color>
<color name="tabBgColor">#f0003f59</color> <color name="tabBgColor">#f0003f59</color>
<color name="tabBgColorSelected">#FF33B5E5</color> <color name="tabBgColorSelected">#FF33B5E5</color>
@ -28,6 +29,7 @@
<color name="defaultbackground">#424242</color> <color name="defaultbackground">#424242</color>
<color name="tempTargetBackground">#77dd77</color> <color name="tempTargetBackground">#77dd77</color>
<color name="tempTargetConfirmation">#77dd77</color>
<color name="tempTargetDisabledBackground">#303F9F</color> <color name="tempTargetDisabledBackground">#303F9F</color>
@ -72,4 +74,10 @@
<color name="deviationred">#72FF0000</color> <color name="deviationred">#72FF0000</color>
<color name="deviationblack">#72000000</color> <color name="deviationblack">#72000000</color>
<color name="swColorPrimary">#303030</color>
<color name="swColorPrimaryDark">#303030</color>
<color name="swColorAccent">#FFEB3B</color>
<color name="swColorBackground">#303030</color>
</resources> </resources>

View file

@ -549,7 +549,6 @@
<string name="superbolus">Superbolus</string> <string name="superbolus">Superbolus</string>
<string name="ns_logappstartedevent">Log app start to NS</string> <string name="ns_logappstartedevent">Log app start to NS</string>
<string name="key_ns_logappstartedevent" translatable="false">ns_logappstartedevent</string> <string name="key_ns_logappstartedevent" translatable="false">ns_logappstartedevent</string>
<string name="key_ns_localbroadcasts" translatable="false">nsclient_localbroadcasts</string>
<string name="restartingapp">Exiting application to apply settings.</string> <string name="restartingapp">Exiting application to apply settings.</string>
<string name="danarv2pump">DanaRv2</string> <string name="danarv2pump">DanaRv2</string>
<string name="configbuilder_insulin">Insulin</string> <string name="configbuilder_insulin">Insulin</string>
@ -924,7 +923,7 @@
<string name="start_activity_tt">Start Activity TT</string> <string name="start_activity_tt">Start Activity TT</string>
<string name="start_eating_soon_tt">Start Eating soon TT</string> <string name="start_eating_soon_tt">Start Eating soon TT</string>
<string name="temptargetshort">TT</string> <string name="temptargetshort">TT</string>
<string name="don_t_bolus_record_only">Don\'t bolus, record only</string> <string name="do_not_bolus_record_only">Do not bolus, record only</string>
<string name="category">Category</string> <string name="category">Category</string>
<string name="subcategory">Subcategory</string> <string name="subcategory">Subcategory</string>
<string name="bolusrecordedonly">Bolus will be recorded only</string> <string name="bolusrecordedonly">Bolus will be recorded only</string>
@ -1051,6 +1050,7 @@
<string name="ga_lang">Irish</string> <string name="ga_lang">Irish</string>
<string name="wear_wizard_settings">Wizard Settings</string> <string name="wear_wizard_settings">Wizard Settings</string>
<string translatable="false" name="key_wearwizard_bg">wearwizard_bg</string> <string translatable="false" name="key_wearwizard_bg">wearwizard_bg</string>
<string translatable="false" name="key_wearwizard_tt">wearwizard_tt</string>
<string translatable="false" name="key_wearwizard_trend">wearwizard_trend</string> <string translatable="false" name="key_wearwizard_trend">wearwizard_trend</string>
<string translatable="false" name="key_wearwizard_cob">wearwizard_cob</string> <string translatable="false" name="key_wearwizard_cob">wearwizard_cob</string>
<string translatable="false" name="key_wearwizard_bolusiob">wearwizard_bolusiob</string> <string translatable="false" name="key_wearwizard_bolusiob">wearwizard_bolusiob</string>
@ -1059,13 +1059,25 @@
<string name="wear_display_settings">Display Settings</string> <string name="wear_display_settings">Display Settings</string>
<string name="wear_general_settings">General Settings</string> <string name="wear_general_settings">General Settings</string>
<string name="enable_nsclient">Enable NSClient</string> <string name="enable_nsclient">Enable NSClient</string>
<string name="welcometosetupwizard">Welcome to setup wizard. It will guide you through the setup process</string> <string name="welcometosetupwizard">Welcome to setup wizard. It will guide you through the setup process\n</string>
<string name="pumpsetup">Pump setup</string> <string name="pumpsetup">Pump setup</string>
<string name="readstatus">Read status</string> <string name="readstatus">Read status</string>
<string name="adjustprofileinns">Changes must be done in NS</string> <string name="adjustprofileinns">Changes must be done in NS</string>
<string name="exitwizard">Exit setup wizard?</string> <string name="exitwizard">Skip setup wizard</string>
<string name="setupwizard_bgsource_description">Where should blood glucose(BG) data be comming from ?</string> <string name="setupwizard_bgsource_description">Where should blood glucose(BG) data be comming from ?\n</string>
<string name="setupwizard_loop_description">Press the button below to enable AndroidAPS to suggest/make basal changes</string> <string name="setupwizard_loop_description">Press the button below to enable AndroidAPS to suggest/make basal changes</string>
<string name="setupwizard_objectives_description">Press the button below to enable Objectives. Look in the Objectives tab, after you finish this wizard, to make AndroidAPS completely functional.</string> <string name="setupwizard_objectives_description">Press the button below to enable Objectives. Look in the Objectives tab, after you finish this wizard, to make AndroidAPS completely functional.\n</string>
<string name="enableobjectives">Enable Objectives</string>
<string name="apssetup">Configure APS plugin</string>
<string name="backupismissing">Exported configuration is missing thus import configuration is not possible.\n</string>
<string name="key_setupwizard_processed" translatable="false">startupwizard_processed</string>
<string name="sensitivitysetup">Configure Sensitivity plugin</string>
<string name="setupwizard_sensitivity_description">Sensitivity plugin is used for sensitivity detection and COB calculation. For more info visit:</string>
<string name="setupwizard_sensitivity_url">https://github.com/MilosKozak/AndroidAPS/wiki/Sensitivity-detection-and-COB</string>
<string name="nsclientinfotext">NSClient handles connection to Nightscout. You can skip this part now but you will not be able to pass objectives until you setup it.</string>
<string name="diawarning">Please remember: new insulin profiles require DIA at least 5h. DIA 5-6h on new profile is equal to DIA 3h on old insulin profiles.</string>
<string name="bgsourcesetup">Configure BG source</string>
<string name="setupwizard_profile_description">Please select source of profile. If patient is a child you should use NS profile. If there is nobody following you on Nightscout you will probably prefer Local profile. Please remember that you are only selecting the profile source. To use it you must activate it by executing \"Profile switch\"</string>
<string name="setupwizard_aps_description">Select one from availables algorithms. They are sorted from oldest to newest. Newer algorithm is usualy more powerfull and more aggresive. Thus if you are new looper you may probably start with AMA and not with latest one. Do not forget to read the OpenAPS documentation and configure it before use.</string>
<string name="startobjective">Start your first objective</string>
</resources> </resources>

View file

@ -24,5 +24,12 @@
<item name="android:textSize">10sp</item> <item name="android:textSize">10sp</item>
</style> </style>
<style name="AppTheme.SetupWizard" parent="Theme.AppCompat.NoActionBar">
<item name="colorPrimary">@color/swColorPrimary</item>
<item name="colorPrimaryDark">@color/swColorPrimaryDark</item>
<item name="colorAccent">@color/swColorAccent</item>
<item name="android:windowBackground">@color/swColorBackground</item>
</style>
<!-- Preferences --> <!-- Preferences -->
</resources> </resources>

View file

@ -128,7 +128,7 @@
<SwitchPreference <SwitchPreference
android:defaultValue="true" android:defaultValue="true"
android:key="@string/key_ns_localbroadcasts" android:key="@string/key_nsclient_localbroadcasts"
android:summary="@string/ns_localbroadcasts" android:summary="@string/ns_localbroadcasts"
android:title="@string/ns_localbroadcasts_title" /> android:title="@string/ns_localbroadcasts_title" />

View file

@ -25,6 +25,12 @@
android:defaultValue="true" android:defaultValue="true"
android:dependency="wearcontrol"/> android:dependency="wearcontrol"/>
<CheckBoxPreference
android:key="@string/key_wearwizard_tt"
android:title="@string/treatments_wizard_tt_label"
android:defaultValue="false"
android:dependency="@string/key_wearwizard_bg"/>
<CheckBoxPreference <CheckBoxPreference
android:key="@string/key_wearwizard_trend" android:key="@string/key_wearwizard_trend"
android:title="@string/treatments_wizard_bgtrend_label" android:title="@string/treatments_wizard_bgtrend_label"

View file

@ -156,4 +156,24 @@ public class CommandQueueTest extends CommandQueue {
public boolean isThisProfileSet(Profile profile) { public boolean isThisProfileSet(Profile profile) {
return false; return false;
} }
@Test
public void callingCancelAllBolusesClearsQueue() throws Exception {
prepareMock(0d, 0);
// add normal and SMB-bolus to queue
Assert.assertEquals(0, size());
bolus(new DetailedBolusInfo(), null);
DetailedBolusInfo smb = new DetailedBolusInfo();
smb.isSMB = true;
bolus(smb, null);
Assert.assertEquals(2, size());
// cancelling all boluses clear all boluses from the queue
cancelAllBoluses();
Assert.assertEquals(0, size());
}
} }

View file

@ -9,11 +9,11 @@ import org.powermock.modules.junit4.PowerMockRunner;
* Created by mike on 26.03.2018. * Created by mike on 26.03.2018.
*/ */
@RunWith(PowerMockRunner.class) //@RunWith(PowerMockRunner.class)
public class TTest { public class TTest {
@Test @Test
public void doTests() { public void toUnits() {
Assert.assertEquals(1, T.msecs(1000).secs()); Assert.assertEquals(1, T.msecs(1000).secs());
Assert.assertEquals(1, T.secs(60).mins()); Assert.assertEquals(1, T.secs(60).mins());
Assert.assertEquals(1, T.mins(60).hours()); Assert.assertEquals(1, T.mins(60).hours());
@ -21,4 +21,31 @@ public class TTest {
Assert.assertEquals(24, T.days(1).hours()); Assert.assertEquals(24, T.days(1).hours());
Assert.assertEquals(60000, T.mins(1).msecs()); Assert.assertEquals(60000, T.mins(1).msecs());
} }
@Test
public void now() {
Assert.assertTrue(Math.abs(T.now().msecs() - System.currentTimeMillis()) < 5000);
}
@Test
public void additions() {
long nowMsecs = System.currentTimeMillis();
T now = T.msecs(nowMsecs);
Assert.assertEquals(now.plus(T.secs(5)).msecs(), nowMsecs + 5 * 1000);
Assert.assertEquals(now.plus(T.mins(5)).msecs(), nowMsecs + 5 * 60 * 1000);
Assert.assertEquals(now.plus(T.hours(5)).msecs(), nowMsecs + 5 * 60 * 60 * 1000);
Assert.assertEquals(now.plus(T.days(5)).msecs(), nowMsecs + 5 * 24 * 60 * 60 * 1000);
}
@Test
public void subtractions() {
long nowMsecs = System.currentTimeMillis();
T now = T.msecs(nowMsecs);
Assert.assertEquals(now.minus(T.secs(5)).msecs(), nowMsecs - 5 * 1000);
Assert.assertEquals(now.minus(T.mins(5)).msecs(), nowMsecs - 5 * 60 * 1000);
Assert.assertEquals(now.minus(T.hours(5)).msecs(), nowMsecs - 5 * 60 * 60 * 1000);
Assert.assertEquals(now.minus(T.days(5)).msecs(), nowMsecs - 5 * 24 * 60 * 60 * 1000);
}
} }