This commit is contained in:
Milos Kozak 2018-07-28 11:39:37 +02:00
commit 8e60e07b7c
71 changed files with 6000 additions and 776 deletions

View file

@ -10,6 +10,7 @@ import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import info.nightscout.androidaps.Constants;
import info.nightscout.androidaps.events.Event;
/** Logs events has they're being posted to and dispatched from the event bus.
@ -18,7 +19,7 @@ import info.nightscout.androidaps.events.Event;
* after 10s (after startup) and then again every 60s.
* */
public class LoggingBus extends Bus {
private static Logger log = LoggerFactory.getLogger(LoggingBus.class);
private static Logger log = LoggerFactory.getLogger(Constants.EVENTS);
private static long everyMinute = System.currentTimeMillis() + 10 * 1000;
private Map<String, Set<String>> event2Receiver = new HashMap<>();

View file

@ -35,7 +35,10 @@ public class Config {
public static final boolean logCongigBuilderActions = true;
public static final boolean logAutosensData = false;
public static final boolean logEvents = false;
public static final boolean logProfile = false;
public static final boolean logQueue = true;
public static final boolean logBgSource = true;
public static final boolean logOverview = true;
public static final boolean logNotification = true;
// DanaR specific
public static final boolean logDanaBTComm = true;

View file

@ -67,4 +67,12 @@ public class Constants {
//SMS Communicator
public static final long SMS_CONFIRM_TIMEOUT = T.mins(5).msecs();
// logging
public static final String AUTOSENS = "AUTOSENS";
public static final String EVENTS = "EVENTS";
public static final String QUEUE = "QUEUE";
public static final String BGSOURCE = "BGSOURCE";
public static final String OVERVIEW = "OVERVIEW";
public static final String NOTIFICATION = "NOTIFICATION";
}

View file

@ -86,7 +86,7 @@ public class PreferencesActivity extends PreferenceActivity implements SharedPre
pref.setSummary("******");
} else if (pref.getKey().equals(MainApp.gs(R.string.key_danars_name))) {
pref.setSummary(SP.getString(R.string.key_danars_name, ""));
} else if (editTextPref.getText() != null && !editTextPref.getText().equals("")) {
} else if (editTextPref.getText() != null ) {
((EditTextPreference) pref).setDialogMessage(editTextPref.getDialogMessage());
pref.setSummary(editTextPref.getText());
} else if (pref.getKey().contains("smscommunicator_allowednumbers") && TextUtils.isEmpty(editTextPref.getText().trim())) {

View file

@ -13,11 +13,8 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import info.nightscout.androidaps.Config;
import info.nightscout.androidaps.Constants;
import info.nightscout.androidaps.MainApp;
import info.nightscout.androidaps.R;
import info.nightscout.androidaps.data.ProfileStore;
import info.nightscout.androidaps.db.BgReading;
import info.nightscout.androidaps.db.CareportalEvent;
import info.nightscout.androidaps.events.EventNsFood;
import info.nightscout.androidaps.events.EventNsTreatment;
@ -26,15 +23,13 @@ import info.nightscout.androidaps.plugins.ConstraintsObjectives.ObjectivesPlugin
import info.nightscout.androidaps.plugins.NSClientInternal.data.NSDeviceStatus;
import info.nightscout.androidaps.plugins.NSClientInternal.data.NSMbg;
import info.nightscout.androidaps.plugins.NSClientInternal.data.NSSettingsStatus;
import info.nightscout.androidaps.plugins.NSClientInternal.data.NSSgv;
import info.nightscout.androidaps.plugins.Overview.OverviewPlugin;
import info.nightscout.androidaps.plugins.Overview.events.EventDismissNotification;
import info.nightscout.androidaps.plugins.Overview.events.EventNewNotification;
import info.nightscout.androidaps.plugins.Overview.notifications.Notification;
import info.nightscout.androidaps.plugins.ProfileNS.NSProfilePlugin;
import info.nightscout.androidaps.plugins.ProfileNS.events.EventNSProfileUpdateGUI;
import info.nightscout.androidaps.plugins.PumpDanaR.activities.DanaRNSHistorySync;
import info.nightscout.androidaps.plugins.SmsCommunicator.events.EventNewSMS;
import info.nightscout.androidaps.plugins.SmsCommunicator.SmsCommunicatorPlugin;
import info.nightscout.androidaps.plugins.Source.SourceDexcomG5Plugin;
import info.nightscout.androidaps.plugins.Source.SourceGlimpPlugin;
import info.nightscout.androidaps.plugins.Source.SourceMM640gPlugin;
@ -44,20 +39,12 @@ import info.nightscout.androidaps.plugins.Source.SourceXdripPlugin;
import info.nightscout.androidaps.receivers.DataReceiver;
import info.nightscout.utils.BundleLogger;
import info.nightscout.utils.JsonHelper;
import info.nightscout.utils.NSUpload;
import info.nightscout.utils.SP;
public class DataService extends IntentService {
private static Logger log = LoggerFactory.getLogger(DataService.class);
boolean xDripEnabled = false;
boolean nsClientEnabled = true;
boolean mm640gEnabled = false;
boolean glimpEnabled = false;
boolean dexcomG5Enabled = false;
boolean poctechEnabled = false;
public DataService() {
super("DataService");
registerBus();
@ -67,58 +54,6 @@ public class DataService extends IntentService {
protected void onHandleIntent(final Intent intent) {
if (Config.logFunctionCalls)
log.debug("onHandleIntent " + BundleLogger.log(intent.getExtras()));
if (ConfigBuilderPlugin.getPlugin().getActiveBgSource() == null) {
xDripEnabled = true;
nsClientEnabled = false;
mm640gEnabled = false;
glimpEnabled = false;
dexcomG5Enabled = false;
poctechEnabled = false;
} else if (ConfigBuilderPlugin.getPlugin().getActiveBgSource().getClass().equals(SourceXdripPlugin.class)) {
xDripEnabled = true;
nsClientEnabled = false;
mm640gEnabled = false;
glimpEnabled = false;
dexcomG5Enabled = false;
poctechEnabled = false;
} else if (ConfigBuilderPlugin.getPlugin().getActiveBgSource().getClass().equals(SourceNSClientPlugin.class)) {
xDripEnabled = false;
nsClientEnabled = true;
mm640gEnabled = false;
glimpEnabled = false;
dexcomG5Enabled = false;
poctechEnabled = false;
} else if (ConfigBuilderPlugin.getPlugin().getActiveBgSource().getClass().equals(SourceMM640gPlugin.class)) {
xDripEnabled = false;
nsClientEnabled = false;
mm640gEnabled = true;
glimpEnabled = false;
dexcomG5Enabled = false;
poctechEnabled = false;
} else if (ConfigBuilderPlugin.getPlugin().getActiveBgSource().getClass().equals(SourceGlimpPlugin.class)) {
xDripEnabled = false;
nsClientEnabled = false;
mm640gEnabled = false;
glimpEnabled = true;
dexcomG5Enabled = false;
poctechEnabled = false;
} else if (ConfigBuilderPlugin.getPlugin().getActiveBgSource().getClass().equals(SourceDexcomG5Plugin.class)) {
xDripEnabled = false;
nsClientEnabled = false;
mm640gEnabled = false;
glimpEnabled = false;
dexcomG5Enabled = true;
poctechEnabled = false;
} else if (ConfigBuilderPlugin.getPlugin().getActiveBgSource().getClass().equals(SourcePoctechPlugin.class)) {
xDripEnabled = false;
nsClientEnabled = false;
mm640gEnabled = false;
glimpEnabled = false;
dexcomG5Enabled = false;
poctechEnabled = true;
}
boolean isNSProfile = MainApp.getConfigBuilder().getActiveProfileInterface() != null && MainApp.getConfigBuilder().getActiveProfileInterface().getClass().equals(NSProfilePlugin.class);
boolean acceptNSData = !SP.getBoolean(R.string.key_ns_upload_only, false);
Bundle bundles = intent.getExtras();
@ -127,71 +62,44 @@ public class DataService extends IntentService {
}
if (intent != null) {
final String action = intent.getAction();
if (Intents.ACTION_NEW_BG_ESTIMATE.equals(action)) {
if (xDripEnabled) {
handleNewDataFromXDrip(intent);
}
} else if (Intents.NS_EMULATOR.equals(action)) {
if (mm640gEnabled) {
handleNewDataFromMM640g(intent);
}
} else if (Intents.GLIMP_BG.equals(action)) {
if (glimpEnabled) {
handleNewDataFromGlimp(intent);
}
} else if (Intents.DEXCOMG5_BG.equals(action)) {
if (dexcomG5Enabled) {
handleNewDataFromDexcomG5(intent);
}
} else if (Intents.POCTECH_BG.equals(action)) {
if (poctechEnabled) {
handleNewDataFromPoctech(intent);
}
} else if (Intents.ACTION_NEW_SGV.equals(action)) {
if (nsClientEnabled || SP.getBoolean(R.string.key_ns_autobackfill, true))
handleNewDataFromNSClient(intent);
// Objectives 0
ObjectivesPlugin.bgIsAvailableInNS = true;
ObjectivesPlugin.saveProgress();
} else if (isNSProfile && Intents.ACTION_NEW_PROFILE.equals(action) || Intents.ACTION_NEW_DEVICESTATUS.equals(action)) {
// always handle Profile if NSProfile is enabled without looking at nsUploadOnly
handleNewDataFromNSClient(intent);
} else if (acceptNSData &&
(Intents.ACTION_NEW_TREATMENT.equals(action) ||
Intents.ACTION_CHANGED_TREATMENT.equals(action) ||
Intents.ACTION_REMOVED_TREATMENT.equals(action) ||
Intents.ACTION_NEW_STATUS.equals(action) ||
Intents.ACTION_NEW_DEVICESTATUS.equals(action) ||
Intents.ACTION_NEW_FOOD.equals(action) ||
Intents.ACTION_CHANGED_FOOD.equals(action) ||
Intents.ACTION_REMOVED_FOOD.equals(action) ||
Intents.ACTION_NEW_CAL.equals(action) ||
Intents.ACTION_NEW_MBG.equals(action))
) {
handleNewDataFromNSClient(intent);
} else if (Telephony.Sms.Intents.SMS_RECEIVED_ACTION.equals(action)) {
handleNewSMS(intent);
}
final String action = intent.getAction();
if (Intents.ACTION_NEW_BG_ESTIMATE.equals(action)) {
SourceXdripPlugin.getPlugin().handleNewData(intent);
} else if (Intents.NS_EMULATOR.equals(action)) {
SourceMM640gPlugin.getPlugin().handleNewData(intent);
} else if (Intents.GLIMP_BG.equals(action)) {
SourceGlimpPlugin.getPlugin().handleNewData(intent);
} else if (Intents.DEXCOMG5_BG.equals(action)) {
SourceDexcomG5Plugin.getPlugin().handleNewData(intent);
} else if (Intents.POCTECH_BG.equals(action)) {
SourcePoctechPlugin.getPlugin().handleNewData(intent);
} else if (Intents.ACTION_NEW_SGV.equals(action)) {
SourceNSClientPlugin.getPlugin().handleNewData(intent);
} else if (Intents.ACTION_NEW_PROFILE.equals(action)) {
// always handle Profile if NSProfile is enabled without looking at nsUploadOnly
NSProfilePlugin.getPlugin().handleNewData(intent);
} else if (acceptNSData &&
(Intents.ACTION_NEW_TREATMENT.equals(action) ||
Intents.ACTION_CHANGED_TREATMENT.equals(action) ||
Intents.ACTION_REMOVED_TREATMENT.equals(action) ||
Intents.ACTION_NEW_STATUS.equals(action) ||
Intents.ACTION_NEW_DEVICESTATUS.equals(action) ||
Intents.ACTION_NEW_FOOD.equals(action) ||
Intents.ACTION_CHANGED_FOOD.equals(action) ||
Intents.ACTION_REMOVED_FOOD.equals(action) ||
Intents.ACTION_NEW_CAL.equals(action) ||
Intents.ACTION_NEW_MBG.equals(action))
) {
handleNewDataFromNSClient(intent);
} else if (Telephony.Sms.Intents.SMS_RECEIVED_ACTION.equals(action)) {
SmsCommunicatorPlugin.getPlugin().handleNewData(intent);
}
if (Config.logFunctionCalls)
log.debug("onHandleIntent exit " + intent);
DataReceiver.completeWakefulIntent(intent);
}
/*
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
super.onStartCommand(intent, flags, startId);
if (Config.logFunctionCalls)
log.debug("onStartCommand");
return START_STICKY;
}
*/
@Override
public void onDestroy() {
super.onDestroy();
@ -207,142 +115,6 @@ public class DataService extends IntentService {
MainApp.bus().register(this);
}
private void handleNewDataFromXDrip(Intent intent) {
Bundle bundle = intent.getExtras();
if (bundle == null) return;
BgReading bgReading = new BgReading();
bgReading.value = bundle.getDouble(Intents.EXTRA_BG_ESTIMATE);
bgReading.direction = bundle.getString(Intents.EXTRA_BG_SLOPE_NAME);
bgReading.date = bundle.getLong(Intents.EXTRA_TIMESTAMP);
bgReading.raw = bundle.getDouble(Intents.EXTRA_RAW);
String source = bundle.getString(Intents.XDRIP_DATA_SOURCE_DESCRIPTION, "no Source specified");
SourceXdripPlugin.getPlugin().setSource(source);
MainApp.getDbHelper().createIfNotExists(bgReading, "XDRIP");
}
private void handleNewDataFromGlimp(Intent intent) {
Bundle bundle = intent.getExtras();
if (bundle == null) return;
BgReading bgReading = new BgReading();
bgReading.value = bundle.getDouble("mySGV");
bgReading.direction = bundle.getString("myTrend");
bgReading.date = bundle.getLong("myTimestamp");
bgReading.raw = 0;
MainApp.getDbHelper().createIfNotExists(bgReading, "GLIMP");
}
private void handleNewDataFromDexcomG5(Intent intent) {
// onHandleIntent Bundle{ data => [{"m_time":1511939180,"m_trend":"NotComputable","m_value":335}]; android.support.content.wakelockid => 95; }Bundle
Bundle bundle = intent.getExtras();
if (bundle == null) return;
BgReading bgReading = new BgReading();
String data = bundle.getString("data");
log.debug("Received Dexcom Data", data);
try {
JSONArray jsonArray = new JSONArray(data);
log.debug("Received Dexcom Data size:" + jsonArray.length());
for (int i = 0; i < jsonArray.length(); i++) {
JSONObject json = jsonArray.getJSONObject(i);
bgReading.value = json.getInt("m_value");
bgReading.direction = json.getString("m_trend");
bgReading.date = json.getLong("m_time") * 1000L;
bgReading.raw = 0;
boolean isNew = MainApp.getDbHelper().createIfNotExists(bgReading, "DexcomG5");
if (isNew && SP.getBoolean(R.string.key_dexcomg5_nsupload, false)) {
NSUpload.uploadBg(bgReading);
}
if (isNew && SP.getBoolean(R.string.key_dexcomg5_xdripupload, false)) {
NSUpload.sendToXdrip(bgReading);
}
}
} catch (JSONException e) {
e.printStackTrace();
}
}
private void handleNewDataFromPoctech(Intent intent) {
Bundle bundle = intent.getExtras();
if (bundle == null) return;
BgReading bgReading = new BgReading();
String data = bundle.getString("data");
log.debug("Received Poctech Data", data);
try {
JSONArray jsonArray = new JSONArray(data);
log.debug("Received Poctech Data size:" + jsonArray.length());
for (int i = 0; i < jsonArray.length(); i++) {
JSONObject json = jsonArray.getJSONObject(i);
bgReading.value = json.getDouble("current");
bgReading.direction = json.getString("direction");
bgReading.date = json.getLong("date");
bgReading.raw = json.getDouble("raw");
if (JsonHelper.safeGetString(json, "units", Constants.MGDL).equals("mmol/L"))
bgReading.value = bgReading.value * Constants.MMOLL_TO_MGDL;
boolean isNew = MainApp.getDbHelper().createIfNotExists(bgReading, "Poctech");
if (isNew && SP.getBoolean(R.string.key_dexcomg5_nsupload, false)) {
NSUpload.uploadBg(bgReading);
}
if (isNew && SP.getBoolean(R.string.key_dexcomg5_xdripupload, false)) {
NSUpload.sendToXdrip(bgReading);
}
}
} catch (JSONException e) {
e.printStackTrace();
}
}
private void handleNewDataFromMM640g(Intent intent) {
Bundle bundle = intent.getExtras();
if (bundle == null) return;
final String collection = bundle.getString("collection");
if (collection == null) return;
if (collection.equals("entries")) {
final String data = bundle.getString("data");
if ((data != null) && (data.length() > 0)) {
try {
final JSONArray json_array = new JSONArray(data);
for (int i = 0; i < json_array.length(); i++) {
final JSONObject json_object = json_array.getJSONObject(i);
final String type = json_object.getString("type");
switch (type) {
case "sgv":
BgReading bgReading = new BgReading();
bgReading.value = json_object.getDouble("sgv");
bgReading.direction = json_object.getString("direction");
bgReading.date = json_object.getLong("date");
bgReading.raw = json_object.getDouble("sgv");
MainApp.getDbHelper().createIfNotExists(bgReading, "MM640g");
break;
default:
log.debug("Unknown entries type: " + type);
}
}
} catch (JSONException e) {
log.error("Got JSON exception: " + e);
}
}
}
}
private void handleNewDataFromNSClient(Intent intent) {
Bundle bundles = intent.getExtras();
if (bundles == null) return;
@ -422,20 +194,6 @@ public class DataService extends IntentService {
log.error("Unhandled exception", e);
}
}
// Handle profile
if (intent.getAction().equals(Intents.ACTION_NEW_PROFILE)) {
try {
String activeProfile = bundles.getString("activeprofile");
String profile = bundles.getString("profile");
ProfileStore profileStore = new ProfileStore(new JSONObject(profile));
NSProfilePlugin.getPlugin().storeNewProfile(profileStore);
MainApp.bus().post(new EventNSProfileUpdateGUI());
if (Config.logIncommingData)
log.debug("Received profileStore: " + activeProfile + " " + profile);
} catch (JSONException e) {
log.error("Unhandled exception", e);
}
}
if (intent.getAction().equals(Intents.ACTION_NEW_TREATMENT) || intent.getAction().equals(Intents.ACTION_CHANGED_TREATMENT)) {
try {
@ -477,27 +235,6 @@ public class DataService extends IntentService {
}
}
if (intent.getAction().equals(Intents.ACTION_NEW_SGV)) {
try {
if (bundles.containsKey("sgv")) {
String sgvstring = bundles.getString("sgv");
JSONObject sgvJson = new JSONObject(sgvstring);
storeSgv(sgvJson);
}
if (bundles.containsKey("sgvs")) {
String sgvstring = bundles.getString("sgvs");
JSONArray jsonArray = new JSONArray(sgvstring);
for (int i = 0; i < jsonArray.length(); i++) {
JSONObject sgvJson = jsonArray.getJSONObject(i);
storeSgv(sgvJson);
}
}
} catch (Exception e) {
log.error("Unhandled exception", e);
}
}
if (intent.getAction().equals(Intents.ACTION_NEW_MBG)) {
try {
if (bundles.containsKey("mbg")) {
@ -580,7 +317,7 @@ public class DataService extends IntentService {
}
if (eventType.equals(CareportalEvent.ANNOUNCEMENT)) {
long date = JsonHelper.safeGetLong(json,"mills");
long date = JsonHelper.safeGetLong(json, "mills");
long now = System.currentTimeMillis();
String enteredBy = JsonHelper.safeGetString(json, "enteredBy", "");
String notes = JsonHelper.safeGetString(json, "notes", "");
@ -600,17 +337,4 @@ public class DataService extends IntentService {
log.debug("Adding/Updating new MBG: " + careportalEvent.log());
}
private void storeSgv(JSONObject sgvJson) {
NSSgv nsSgv = new NSSgv(sgvJson);
BgReading bgReading = new BgReading(nsSgv);
MainApp.getDbHelper().createIfNotExists(bgReading, "NS");
SourceNSClientPlugin.getPlugin().detectSource(JsonHelper.safeGetString(sgvJson, "device"), JsonHelper.safeGetLong(sgvJson, "mills"));
}
private void handleNewSMS(Intent intent) {
Bundle bundle = intent.getExtras();
if (bundle == null) return;
MainApp.bus().post(new EventNewSMS(bundle));
}
}

View file

@ -52,6 +52,14 @@ public class Profile {
protected Profile() {
}
@Override
public String toString() {
if (json != null)
return json.toString();
else
return "Profile has no JSON";
}
// Constructor from profileStore JSON
public Profile(JSONObject json, String units) {
init(json, 100, 0);
@ -295,8 +303,6 @@ public class Profile {
Integer getShitfTimeSecs(Integer originalTime) {
Integer shiftedTime = originalTime + timeshift * 60 * 60;
shiftedTime = (shiftedTime + 24 * 60 * 60) % (24 * 60 * 60);
if (timeshift != 0 && Config.logProfile)
log.debug("(Sec) Original time: " + originalTime + " ShiftedTime: " + shiftedTime);
return shiftedTime;
}

View file

@ -1,8 +1,12 @@
package info.nightscout.androidaps.interfaces;
import android.content.Intent;
/**
* Created by mike on 20.06.2016.
*/
public interface BgSourceInterface {
boolean advancedFilteringSupported();
void handleNewData(Intent intent);
}

View file

@ -26,7 +26,7 @@ import info.nightscout.utils.SP;
*/
public class AutosensData implements DataPointWithLabelInterface {
private static Logger log = LoggerFactory.getLogger("AUTOSENS");
private static Logger log = LoggerFactory.getLogger(Constants.AUTOSENS);
public void setChartTime(long chartTime) {
this.chartTime = chartTime;

View file

@ -5,11 +5,13 @@ import org.json.JSONObject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import info.nightscout.androidaps.Constants;
/**
* Created by mike on 06.01.2017.
*/
public class AutosensResult {
private static Logger log = LoggerFactory.getLogger("AUTOSENS");
private static Logger log = LoggerFactory.getLogger(Constants.AUTOSENS);
//default values to show when autosens algorithm is not called
public double ratio = 1d;

View file

@ -49,7 +49,7 @@ import static info.nightscout.utils.DateUtil.now;
*/
public class IobCobCalculatorPlugin extends PluginBase {
private Logger log = LoggerFactory.getLogger("AUTOSENS");
private Logger log = LoggerFactory.getLogger(Constants.AUTOSENS);
private static IobCobCalculatorPlugin plugin = null;

View file

@ -43,7 +43,7 @@ import static java.util.Calendar.MINUTE;
*/
public class IobCobOref1Thread extends Thread {
private static Logger log = LoggerFactory.getLogger("AUTOSENS");
private static Logger log = LoggerFactory.getLogger(Constants.AUTOSENS);
private final Event cause;
private IobCobCalculatorPlugin iobCobCalculatorPlugin;

View file

@ -42,7 +42,7 @@ import static info.nightscout.utils.DateUtil.now;
*/
public class IobCobThread extends Thread {
private static Logger log = LoggerFactory.getLogger("AUTOSENS");
private static Logger log = LoggerFactory.getLogger(Constants.AUTOSENS);
private final Event cause;
private IobCobCalculatorPlugin iobCobCalculatorPlugin;

View file

@ -157,10 +157,12 @@ public class NewCarbsDialog extends DialogFragment implements OnClickListener, C
BgReading bgReading = DatabaseHelper.actualBg();
if (bgReading != null && bgReading.value < 72) {
startHypoTTCheckbox.setOnCheckedChangeListener(null);
startHypoTTCheckbox.setChecked(true);
// see #onCheckedChanged why listeners are registered like this
startHypoTTCheckbox.setOnClickListener(this);
} else {
startHypoTTCheckbox.setOnCheckedChangeListener(this);
}
startHypoTTCheckbox.setOnCheckedChangeListener(this);
setCancelable(true);
getDialog().setCanceledOnTouchOutside(false);

View file

@ -126,7 +126,7 @@ import info.nightscout.utils.ToastUtils;
import static info.nightscout.utils.DateUtil.now;
public class OverviewFragment extends Fragment implements View.OnClickListener, View.OnLongClickListener {
private static Logger log = LoggerFactory.getLogger(OverviewFragment.class);
private static Logger log = LoggerFactory.getLogger(Constants.OVERVIEW);
TextView timeView;
TextView bgView;
@ -201,143 +201,136 @@ public class OverviewFragment extends Fragment implements View.OnClickListener,
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
try {
//check screen width
final DisplayMetrics dm = new DisplayMetrics();
getActivity().getWindowManager().getDefaultDisplay().getMetrics(dm);
int screen_width = dm.widthPixels;
int screen_height = dm.heightPixels;
smallWidth = screen_width <= Constants.SMALL_WIDTH;
smallHeight = screen_height <= Constants.SMALL_HEIGHT;
boolean landscape = screen_height < screen_width;
//check screen width
final DisplayMetrics dm = new DisplayMetrics();
getActivity().getWindowManager().getDefaultDisplay().getMetrics(dm);
int screen_width = dm.widthPixels;
int screen_height = dm.heightPixels;
smallWidth = screen_width <= Constants.SMALL_WIDTH;
smallHeight = screen_height <= Constants.SMALL_HEIGHT;
boolean landscape = screen_height < screen_width;
View view;
View view;
if (MainApp.sResources.getBoolean(R.bool.isTablet) && (Config.NSCLIENT || Config.G5UPLOADER)) {
view = inflater.inflate(R.layout.overview_fragment_nsclient_tablet, container, false);
} else if (Config.NSCLIENT || Config.G5UPLOADER) {
view = inflater.inflate(R.layout.overview_fragment_nsclient, container, false);
shorttextmode = true;
} else if (smallHeight || landscape) {
view = inflater.inflate(R.layout.overview_fragment_smallheight, container, false);
} else {
view = inflater.inflate(R.layout.overview_fragment, container, false);
}
timeView = (TextView) view.findViewById(R.id.overview_time);
bgView = (TextView) view.findViewById(R.id.overview_bg);
arrowView = (TextView) view.findViewById(R.id.overview_arrow);
if (smallWidth) {
arrowView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 35);
}
sensitivityView = (TextView) view.findViewById(R.id.overview_sensitivity);
timeAgoView = (TextView) view.findViewById(R.id.overview_timeago);
timeAgoShortView = (TextView) view.findViewById(R.id.overview_timeagoshort);
deltaView = (TextView) view.findViewById(R.id.overview_delta);
deltaShortView = (TextView) view.findViewById(R.id.overview_deltashort);
avgdeltaView = (TextView) view.findViewById(R.id.overview_avgdelta);
baseBasalView = (TextView) view.findViewById(R.id.overview_basebasal);
extendedBolusView = (TextView) view.findViewById(R.id.overview_extendedbolus);
activeProfileView = (TextView) view.findViewById(R.id.overview_activeprofile);
pumpStatusView = (TextView) view.findViewById(R.id.overview_pumpstatus);
pumpDeviceStatusView = (TextView) view.findViewById(R.id.overview_pump);
openapsDeviceStatusView = (TextView) view.findViewById(R.id.overview_openaps);
uploaderDeviceStatusView = (TextView) view.findViewById(R.id.overview_uploader);
iobCalculationProgressView = (TextView) view.findViewById(R.id.overview_iobcalculationprogess);
loopStatusLayout = (LinearLayout) view.findViewById(R.id.overview_looplayout);
pumpStatusLayout = (LinearLayout) view.findViewById(R.id.overview_pumpstatuslayout);
pumpStatusView.setBackgroundColor(MainApp.gc(R.color.colorInitializingBorder));
iobView = (TextView) view.findViewById(R.id.overview_iob);
cobView = (TextView) view.findViewById(R.id.overview_cob);
apsModeView = (TextView) view.findViewById(R.id.overview_apsmode);
tempTargetView = (TextView) view.findViewById(R.id.overview_temptarget);
iage = (TextView) view.findViewById(R.id.careportal_insulinage);
cage = (TextView) view.findViewById(R.id.careportal_canulaage);
sage = (TextView) view.findViewById(R.id.careportal_sensorage);
pbage = (TextView) view.findViewById(R.id.careportal_pbage);
bgGraph = (GraphView) view.findViewById(R.id.overview_bggraph);
iobGraph = (GraphView) view.findViewById(R.id.overview_iobgraph);
treatmentButton = (SingleClickButton) view.findViewById(R.id.overview_treatmentbutton);
treatmentButton.setOnClickListener(this);
wizardButton = (SingleClickButton) view.findViewById(R.id.overview_wizardbutton);
wizardButton.setOnClickListener(this);
insulinButton = (SingleClickButton) view.findViewById(R.id.overview_insulinbutton);
if (insulinButton != null)
insulinButton.setOnClickListener(this);
carbsButton = (SingleClickButton) view.findViewById(R.id.overview_carbsbutton);
if (carbsButton != null)
carbsButton.setOnClickListener(this);
acceptTempButton = (SingleClickButton) view.findViewById(R.id.overview_accepttempbutton);
if (acceptTempButton != null)
acceptTempButton.setOnClickListener(this);
quickWizardButton = (SingleClickButton) view.findViewById(R.id.overview_quickwizardbutton);
quickWizardButton.setOnClickListener(this);
quickWizardButton.setOnLongClickListener(this);
calibrationButton = (SingleClickButton) view.findViewById(R.id.overview_calibrationbutton);
if (calibrationButton != null)
calibrationButton.setOnClickListener(this);
cgmButton = (SingleClickButton) view.findViewById(R.id.overview_cgmbutton);
if (cgmButton != null)
cgmButton.setOnClickListener(this);
acceptTempLayout = (LinearLayout) view.findViewById(R.id.overview_accepttemplayout);
notificationsView = (RecyclerView) view.findViewById(R.id.overview_notifications);
notificationsView.setHasFixedSize(false);
llm = new LinearLayoutManager(view.getContext());
notificationsView.setLayoutManager(llm);
int axisWidth = 50;
if (dm.densityDpi <= 120)
axisWidth = 3;
else if (dm.densityDpi <= 160)
axisWidth = 10;
else if (dm.densityDpi <= 320)
axisWidth = 35;
else if (dm.densityDpi <= 420)
axisWidth = 50;
else if (dm.densityDpi <= 560)
axisWidth = 70;
else
axisWidth = 80;
bgGraph.getGridLabelRenderer().setGridColor(MainApp.gc(R.color.graphgrid));
bgGraph.getGridLabelRenderer().reloadStyles();
iobGraph.getGridLabelRenderer().setGridColor(MainApp.gc(R.color.graphgrid));
iobGraph.getGridLabelRenderer().reloadStyles();
iobGraph.getGridLabelRenderer().setHorizontalLabelsVisible(false);
bgGraph.getGridLabelRenderer().setLabelVerticalWidth(axisWidth);
iobGraph.getGridLabelRenderer().setLabelVerticalWidth(axisWidth);
iobGraph.getGridLabelRenderer().setNumVerticalLabels(3);
rangeToDisplay = SP.getInt(R.string.key_rangetodisplay, 6);
bgGraph.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
rangeToDisplay += 6;
rangeToDisplay = rangeToDisplay > 24 ? 6 : rangeToDisplay;
SP.putInt(R.string.key_rangetodisplay, rangeToDisplay);
updateGUI("rangeChange");
return false;
}
});
setupChartMenu(view);
return view;
} catch (Exception e) {
FabricPrivacy.logException(e);
log.debug("Runtime Exception", e);
if (MainApp.sResources.getBoolean(R.bool.isTablet) && (Config.NSCLIENT || Config.G5UPLOADER)) {
view = inflater.inflate(R.layout.overview_fragment_nsclient_tablet, container, false);
} else if (Config.NSCLIENT || Config.G5UPLOADER) {
view = inflater.inflate(R.layout.overview_fragment_nsclient, container, false);
shorttextmode = true;
} else if (smallHeight || landscape) {
view = inflater.inflate(R.layout.overview_fragment_smallheight, container, false);
} else {
view = inflater.inflate(R.layout.overview_fragment, container, false);
}
return null;
timeView = (TextView) view.findViewById(R.id.overview_time);
bgView = (TextView) view.findViewById(R.id.overview_bg);
arrowView = (TextView) view.findViewById(R.id.overview_arrow);
if (smallWidth) {
arrowView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 35);
}
sensitivityView = (TextView) view.findViewById(R.id.overview_sensitivity);
timeAgoView = (TextView) view.findViewById(R.id.overview_timeago);
timeAgoShortView = (TextView) view.findViewById(R.id.overview_timeagoshort);
deltaView = (TextView) view.findViewById(R.id.overview_delta);
deltaShortView = (TextView) view.findViewById(R.id.overview_deltashort);
avgdeltaView = (TextView) view.findViewById(R.id.overview_avgdelta);
baseBasalView = (TextView) view.findViewById(R.id.overview_basebasal);
extendedBolusView = (TextView) view.findViewById(R.id.overview_extendedbolus);
activeProfileView = (TextView) view.findViewById(R.id.overview_activeprofile);
pumpStatusView = (TextView) view.findViewById(R.id.overview_pumpstatus);
pumpDeviceStatusView = (TextView) view.findViewById(R.id.overview_pump);
openapsDeviceStatusView = (TextView) view.findViewById(R.id.overview_openaps);
uploaderDeviceStatusView = (TextView) view.findViewById(R.id.overview_uploader);
iobCalculationProgressView = (TextView) view.findViewById(R.id.overview_iobcalculationprogess);
loopStatusLayout = (LinearLayout) view.findViewById(R.id.overview_looplayout);
pumpStatusLayout = (LinearLayout) view.findViewById(R.id.overview_pumpstatuslayout);
pumpStatusView.setBackgroundColor(MainApp.gc(R.color.colorInitializingBorder));
iobView = (TextView) view.findViewById(R.id.overview_iob);
cobView = (TextView) view.findViewById(R.id.overview_cob);
apsModeView = (TextView) view.findViewById(R.id.overview_apsmode);
tempTargetView = (TextView) view.findViewById(R.id.overview_temptarget);
iage = (TextView) view.findViewById(R.id.careportal_insulinage);
cage = (TextView) view.findViewById(R.id.careportal_canulaage);
sage = (TextView) view.findViewById(R.id.careportal_sensorage);
pbage = (TextView) view.findViewById(R.id.careportal_pbage);
bgGraph = (GraphView) view.findViewById(R.id.overview_bggraph);
iobGraph = (GraphView) view.findViewById(R.id.overview_iobgraph);
treatmentButton = (SingleClickButton) view.findViewById(R.id.overview_treatmentbutton);
treatmentButton.setOnClickListener(this);
wizardButton = (SingleClickButton) view.findViewById(R.id.overview_wizardbutton);
wizardButton.setOnClickListener(this);
insulinButton = (SingleClickButton) view.findViewById(R.id.overview_insulinbutton);
if (insulinButton != null)
insulinButton.setOnClickListener(this);
carbsButton = (SingleClickButton) view.findViewById(R.id.overview_carbsbutton);
if (carbsButton != null)
carbsButton.setOnClickListener(this);
acceptTempButton = (SingleClickButton) view.findViewById(R.id.overview_accepttempbutton);
if (acceptTempButton != null)
acceptTempButton.setOnClickListener(this);
quickWizardButton = (SingleClickButton) view.findViewById(R.id.overview_quickwizardbutton);
quickWizardButton.setOnClickListener(this);
quickWizardButton.setOnLongClickListener(this);
calibrationButton = (SingleClickButton) view.findViewById(R.id.overview_calibrationbutton);
if (calibrationButton != null)
calibrationButton.setOnClickListener(this);
cgmButton = (SingleClickButton) view.findViewById(R.id.overview_cgmbutton);
if (cgmButton != null)
cgmButton.setOnClickListener(this);
acceptTempLayout = (LinearLayout) view.findViewById(R.id.overview_accepttemplayout);
notificationsView = (RecyclerView) view.findViewById(R.id.overview_notifications);
notificationsView.setHasFixedSize(false);
llm = new LinearLayoutManager(view.getContext());
notificationsView.setLayoutManager(llm);
int axisWidth = 50;
if (dm.densityDpi <= 120)
axisWidth = 3;
else if (dm.densityDpi <= 160)
axisWidth = 10;
else if (dm.densityDpi <= 320)
axisWidth = 35;
else if (dm.densityDpi <= 420)
axisWidth = 50;
else if (dm.densityDpi <= 560)
axisWidth = 70;
else
axisWidth = 80;
bgGraph.getGridLabelRenderer().setGridColor(MainApp.gc(R.color.graphgrid));
bgGraph.getGridLabelRenderer().reloadStyles();
iobGraph.getGridLabelRenderer().setGridColor(MainApp.gc(R.color.graphgrid));
iobGraph.getGridLabelRenderer().reloadStyles();
iobGraph.getGridLabelRenderer().setHorizontalLabelsVisible(false);
bgGraph.getGridLabelRenderer().setLabelVerticalWidth(axisWidth);
iobGraph.getGridLabelRenderer().setLabelVerticalWidth(axisWidth);
iobGraph.getGridLabelRenderer().setNumVerticalLabels(3);
rangeToDisplay = SP.getInt(R.string.key_rangetodisplay, 6);
bgGraph.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
rangeToDisplay += 6;
rangeToDisplay = rangeToDisplay > 24 ? 6 : rangeToDisplay;
SP.putInt(R.string.key_rangetodisplay, rangeToDisplay);
updateGUI("rangeChange");
return false;
}
});
setupChartMenu(view);
return view;
}
private void setupChartMenu(View view) {
@ -590,7 +583,7 @@ public class OverviewFragment extends Fragment implements View.OnClickListener,
pvd.show(manager, "ProfileViewDialog");
} else if (item.getTitle().equals(MainApp.gs(R.string.eatingsoon))) {
DefaultValueHelper defHelper = new DefaultValueHelper();
double target = defHelper.determineEatingSoonTT(profile.getUnits());
double target = defHelper.determineEatingSoonTT(Constants.MGDL);
TempTarget tempTarget = new TempTarget()
.date(System.currentTimeMillis())
.duration(defHelper.determineEatingSoonTTDuration())
@ -601,7 +594,7 @@ public class OverviewFragment extends Fragment implements View.OnClickListener,
TreatmentsPlugin.getPlugin().addToHistoryTempTarget(tempTarget);
} else if (item.getTitle().equals(MainApp.gs(R.string.activity))) {
DefaultValueHelper defHelper = new DefaultValueHelper();
double target = defHelper.determineActivityTT(profile.getUnits());
double target = defHelper.determineActivityTT(Constants.MGDL);
TempTarget tempTarget = new TempTarget()
.date(now())
.duration(defHelper.determineActivityTTDuration())
@ -612,7 +605,7 @@ public class OverviewFragment extends Fragment implements View.OnClickListener,
TreatmentsPlugin.getPlugin().addToHistoryTempTarget(tempTarget);
} else if (item.getTitle().equals(MainApp.gs(R.string.hypo))) {
DefaultValueHelper defHelper = new DefaultValueHelper();
double target = defHelper.determineHypoTT(profile.getUnits());
double target = defHelper.determineHypoTT(Constants.MGDL);
TempTarget tempTarget = new TempTarget()
.date(now())
.duration(defHelper.determineHypoTTDuration())
@ -833,7 +826,8 @@ public class OverviewFragment extends Fragment implements View.OnClickListener,
builder.setPositiveButton(MainApp.gs(R.string.ok), (dialog, id) -> {
synchronized (builder) {
if (accepted) {
log.debug("guarding: already accepted");
if (Config.logOverview)
log.debug("guarding: already accepted");
return;
}
accepted = true;
@ -1038,7 +1032,8 @@ public class OverviewFragment extends Fragment implements View.OnClickListener,
@SuppressLint("SetTextI18n")
public void updateGUI(final String from) {
log.debug("updateGUI entered from: " + from);
if (Config.logOverview)
log.debug("updateGUI entered from: " + from);
final Date updateGUIStart = new Date();
if (getActivity() == null)
@ -1433,7 +1428,8 @@ public class OverviewFragment extends Fragment implements View.OnClickListener,
final long now = System.currentTimeMillis();
// ------------------ 1st graph
Profiler.log(log, from + " - 1st graph - START", updateGUIStart);
if (Config.logOverview)
Profiler.log(log, from + " - 1st graph - START", updateGUIStart);
final GraphData graphData = new GraphData(bgGraph, IobCobCalculatorPlugin.getPlugin());
@ -1465,7 +1461,8 @@ public class OverviewFragment extends Fragment implements View.OnClickListener,
graphData.addNowLine(now);
// ------------------ 2nd graph
Profiler.log(log, from + " - 2nd graph - START", updateGUIStart);
if (Config.logOverview)
Profiler.log(log, from + " - 2nd graph - START", updateGUIStart);
final GraphData secondGraphData = new GraphData(iobGraph, IobCobCalculatorPlugin.getPlugin());
@ -1519,12 +1516,14 @@ public class OverviewFragment extends Fragment implements View.OnClickListener,
// finally enforce drawing of graphs
graphData.performUpdate();
secondGraphData.performUpdate();
Profiler.log(log, from + " - onDataChanged", updateGUIStart);
if (Config.logOverview)
Profiler.log(log, from + " - onDataChanged", updateGUIStart);
});
}
}).start();
Profiler.log(log, from, updateGUIStart);
if (Config.logOverview)
Profiler.log(log, from, updateGUIStart);
}
//Notifications

View file

@ -7,6 +7,7 @@ import org.json.JSONException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import info.nightscout.androidaps.Constants;
import info.nightscout.androidaps.MainApp;
import info.nightscout.androidaps.R;
import info.nightscout.androidaps.data.Profile;
@ -24,7 +25,7 @@ import info.nightscout.utils.SP;
* Created by mike on 05.08.2016.
*/
public class OverviewPlugin extends PluginBase {
private static Logger log = LoggerFactory.getLogger(OverviewPlugin.class);
private static Logger log = LoggerFactory.getLogger(Constants.OVERVIEW);
private static OverviewPlugin overviewPlugin = new OverviewPlugin();

View file

@ -7,7 +7,6 @@ import info.nightscout.androidaps.plugins.Treatments.Treatment;
import info.nightscout.androidaps.events.Event;
public class EventOverviewBolusProgress extends Event {
private static Logger log = LoggerFactory.getLogger(EventOverviewBolusProgress.class);
public String status = "";
public Treatment t = null;
public int percent = 0;

View file

@ -18,6 +18,7 @@ import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import info.nightscout.androidaps.Config;
import info.nightscout.androidaps.Constants;
import info.nightscout.androidaps.MainApp;
import info.nightscout.androidaps.R;
@ -50,7 +51,7 @@ import info.nightscout.utils.Round;
*/
public class GraphData {
private static Logger log = LoggerFactory.getLogger(GraphData.class);
private static Logger log = LoggerFactory.getLogger(Constants.OVERVIEW);
private GraphView graph;
public double maxY = Double.MIN_VALUE;
@ -74,7 +75,8 @@ public class GraphData {
List<DataPointWithLabelInterface> bgListArray = new ArrayList<>();
if (bgReadingsArray == null || bgReadingsArray.size() == 0) {
log.debug("No BG data.");
if (Config.logOverview)
log.debug("No BG data.");
return;
}

View file

@ -20,8 +20,6 @@ import info.nightscout.utils.SP;
*/
public class Notification {
private static Logger log = LoggerFactory.getLogger(Notification.class);
public static final int URGENT = 0;
public static final int NORMAL = 1;
public static final int LOW = 2;

View file

@ -15,6 +15,8 @@ import org.slf4j.LoggerFactory;
import java.util.List;
import java.util.Objects;
import info.nightscout.androidaps.Config;
import info.nightscout.androidaps.Constants;
import info.nightscout.androidaps.MainApp;
import info.nightscout.androidaps.R;
import info.nightscout.androidaps.plugins.NSClientInternal.broadcasts.BroadcastAckAlarm;
@ -24,7 +26,7 @@ import info.nightscout.utils.DateUtil;
import info.nightscout.utils.SP;
public class NotificationRecyclerViewAdapter extends RecyclerView.Adapter<NotificationRecyclerViewAdapter.NotificationsViewHolder> {
private static Logger log = LoggerFactory.getLogger(NotificationRecyclerViewAdapter.class);
private static Logger log = LoggerFactory.getLogger(Constants.NOTIFICATION);
private List<Notification> notificationsList;
@ -96,11 +98,13 @@ public class NotificationRecyclerViewAdapter extends RecyclerView.Adapter<Notifi
BroadcastAckAlarm.handleClearAlarm(notification.nsAlarm, MainApp.instance().getApplicationContext(), 60 * 60 * 1000L);
}
// Adding current time to snooze if we got staleData
log.debug("Notification text is: " + notification.text);
if (Config.logNotification)
log.debug("Notification text is: " + notification.text);
if (notification.text.equals(MainApp.gs(R.string.nsalarm_staledata))) {
NotificationStore nstore = OverviewPlugin.getPlugin().notificationStore;
long msToSnooze = SP.getInt("nsalarm_staledatavalue", 15) * 60 * 1000L;
log.debug("snooze nsalarm_staledatavalue in minutes is " + SP.getInt("nsalarm_staledatavalue", 15) + "\n in ms is: " + msToSnooze + " currentTimeMillis is: " + System.currentTimeMillis());
if (Config.logNotification)
log.debug("snooze nsalarm_staledatavalue in minutes is " + SP.getInt("nsalarm_staledatavalue", 15) + "\n in ms is: " + msToSnooze + " currentTimeMillis is: " + System.currentTimeMillis());
nstore.snoozeTo(System.currentTimeMillis() + (SP.getInt("nsalarm_staledatavalue", 15) * 60 * 1000L));
}
if (notification instanceof NotificationWithAction) {

View file

@ -22,6 +22,7 @@ import java.util.Comparator;
import java.util.List;
import info.nightscout.androidaps.Config;
import info.nightscout.androidaps.Constants;
import info.nightscout.androidaps.MainApp;
import info.nightscout.androidaps.R;
import info.nightscout.androidaps.Services.AlarmSoundService;
@ -33,11 +34,10 @@ import info.nightscout.utils.SP;
public class NotificationStore {
public static final String CHANNEL_ID = "AndroidAPS-Overview";
private static final String CHANNEL_ID = "AndroidAPS-Overview";
private static Logger log = LoggerFactory.getLogger(NotificationStore.class);
public List<Notification> store = new ArrayList<Notification>();
public long snoozedUntil = 0L;
private static Logger log = LoggerFactory.getLogger(Constants.NOTIFICATION);
public List<Notification> store = new ArrayList<>();
private boolean usesChannels;
public NotificationStore() {
@ -52,7 +52,8 @@ public class NotificationStore {
}
public synchronized boolean add(Notification n) {
log.info("Notification received: " + n.text);
if (Config.logNotification)
log.debug("Notification received: " + n.text);
for (Notification storeNotification : store) {
if (storeNotification.id == n.id) {
storeNotification.date = n.date;
@ -107,7 +108,8 @@ public class NotificationStore {
}
public void snoozeTo(long timeToSnooze) {
log.debug("Snoozing alarm until: " + timeToSnooze);
if (Config.logNotification)
log.debug("Snoozing alarm until: " + timeToSnooze);
SP.putLong("snoozedTo", timeToSnooze);
}
@ -116,7 +118,8 @@ public class NotificationStore {
Notification notification = new Notification(Notification.NSALARM, MainApp.gs(R.string.nsalarm_staledata), Notification.URGENT);
SP.putLong("snoozedTo", System.currentTimeMillis());
add(notification);
log.debug("Snoozed to current time and added back notification!");
if (Config.logNotification)
log.debug("Snoozed to current time and added back notification!");
}
}
@ -125,7 +128,7 @@ public class NotificationStore {
NotificationManager mgr = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
Bitmap largeIcon = BitmapFactory.decodeResource(context.getResources(), R.mipmap.blueowl);
int smallIcon = R.drawable.ic_notification;
if (Config.NSCLIENT || Config.G5UPLOADER){
if (Config.NSCLIENT || Config.G5UPLOADER) {
largeIcon = BitmapFactory.decodeResource(MainApp.instance().getResources(), R.mipmap.yellowowl);
smallIcon = R.drawable.nsclient_smallicon;
}

View file

@ -1,10 +1,9 @@
package info.nightscout.androidaps.plugins.ProfileNS;
import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.Nullable;
import com.squareup.otto.Subscribe;
import org.json.JSONException;
import org.json.JSONObject;
import org.slf4j.Logger;
@ -65,12 +64,24 @@ public class NSProfilePlugin extends PluginBase implements ProfileInterface {
MainApp.bus().unregister(this);
}
@Subscribe
public void storeNewProfile(ProfileStore newProfile) {
profile = new ProfileStore(newProfile.getData());
storeNSProfile();
MainApp.bus().post(new EventNSProfileUpdateGUI());
MainApp.bus().post(new EventProfileStoreChanged());
public void handleNewData(Intent intent) {
try {
Bundle bundles = intent.getExtras();
if (bundles == null) return;
String activeProfile = bundles.getString("activeprofile");
String profileString = bundles.getString("profile");
profile = new ProfileStore(new JSONObject(profileString));
storeNSProfile();
if (isEnabled(PluginType.PROFILE)) {
MainApp.bus().post(new EventProfileStoreChanged());
MainApp.bus().post(new EventNSProfileUpdateGUI());
}
if (Config.logIncommingData)
log.debug("Received profileStore: " + activeProfile + " " + profile);
} catch (JSONException e) {
log.error("Unhandled exception", e);
}
}
private void storeNSProfile() {

View file

@ -4,6 +4,7 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import info.nightscout.androidaps.Config;
import info.nightscout.androidaps.Constants;
import info.nightscout.androidaps.R;
import info.nightscout.androidaps.interfaces.PluginBase;
import info.nightscout.androidaps.interfaces.PluginDescription;
@ -16,7 +17,7 @@ import info.nightscout.utils.SafeParse;
public abstract class AbstractSensitivityPlugin extends PluginBase implements SensitivityInterface {
private static final Logger log = LoggerFactory.getLogger("AUTOSENS");
private static final Logger log = LoggerFactory.getLogger(Constants.AUTOSENS);
public AbstractSensitivityPlugin(PluginDescription pluginDescription) {
super(pluginDescription);

View file

@ -11,6 +11,7 @@ import java.util.Date;
import java.util.List;
import info.nightscout.androidaps.Config;
import info.nightscout.androidaps.Constants;
import info.nightscout.androidaps.MainApp;
import info.nightscout.androidaps.R;
import info.nightscout.androidaps.data.Profile;
@ -28,7 +29,7 @@ import info.nightscout.utils.SP;
*/
public class SensitivityAAPSPlugin extends AbstractSensitivityPlugin {
private static Logger log = LoggerFactory.getLogger("AUTOSENS");
private static Logger log = LoggerFactory.getLogger(Constants.AUTOSENS);
static SensitivityAAPSPlugin plugin = null;

View file

@ -11,6 +11,7 @@ import java.util.Date;
import java.util.List;
import info.nightscout.androidaps.Config;
import info.nightscout.androidaps.Constants;
import info.nightscout.androidaps.MainApp;
import info.nightscout.androidaps.R;
import info.nightscout.androidaps.data.Profile;
@ -27,7 +28,7 @@ import info.nightscout.utils.DateUtil;
*/
public class SensitivityOref0Plugin extends AbstractSensitivityPlugin {
private static Logger log = LoggerFactory.getLogger("AUTOSENS");
private static Logger log = LoggerFactory.getLogger(Constants.AUTOSENS);
static SensitivityOref0Plugin plugin = null;

View file

@ -11,6 +11,7 @@ import java.util.Date;
import java.util.List;
import info.nightscout.androidaps.Config;
import info.nightscout.androidaps.Constants;
import info.nightscout.androidaps.MainApp;
import info.nightscout.androidaps.R;
import info.nightscout.androidaps.data.Profile;
@ -27,7 +28,7 @@ import info.nightscout.utils.DateUtil;
*/
public class SensitivityOref1Plugin extends AbstractSensitivityPlugin {
private static Logger log = LoggerFactory.getLogger("AUTOSENS");
private static Logger log = LoggerFactory.getLogger(Constants.AUTOSENS);
static SensitivityOref1Plugin plugin = null;

View file

@ -9,6 +9,7 @@ import java.util.Date;
import java.util.List;
import info.nightscout.androidaps.Config;
import info.nightscout.androidaps.Constants;
import info.nightscout.androidaps.MainApp;
import info.nightscout.androidaps.R;
import info.nightscout.androidaps.data.Profile;
@ -26,7 +27,7 @@ import info.nightscout.utils.SP;
*/
public class SensitivityWeightedAveragePlugin extends AbstractSensitivityPlugin {
private static Logger log = LoggerFactory.getLogger("AUTOSENS");
private static Logger log = LoggerFactory.getLogger(Constants.AUTOSENS);
private static SensitivityWeightedAveragePlugin plugin = null;

View file

@ -2,6 +2,7 @@ package info.nightscout.androidaps.plugins.SmsCommunicator;
import android.content.Intent;
import android.content.pm.ResolveInfo;
import android.os.Bundle;
import android.os.SystemClock;
import android.telephony.SmsManager;
import android.telephony.SmsMessage;
@ -39,7 +40,6 @@ import info.nightscout.androidaps.plugins.ConfigBuilder.ConfigBuilderPlugin;
import info.nightscout.androidaps.plugins.Loop.LoopPlugin;
import info.nightscout.androidaps.plugins.Overview.events.EventNewNotification;
import info.nightscout.androidaps.plugins.Overview.notifications.Notification;
import info.nightscout.androidaps.plugins.SmsCommunicator.events.EventNewSMS;
import info.nightscout.androidaps.plugins.SmsCommunicator.events.EventSmsCommunicatorUpdateGui;
import info.nightscout.androidaps.plugins.Treatments.TreatmentsPlugin;
import info.nightscout.androidaps.queue.Callback;
@ -165,10 +165,11 @@ public class SmsCommunicatorPlugin extends PluginBase {
return false;
}
@Subscribe
public void onStatusEvent(final EventNewSMS ev) {
public void handleNewData(Intent intent) {
Bundle bundle = intent.getExtras();
if (bundle == null) return;
Object[] pdus = (Object[]) ev.bundle.get("pdus");
Object[] pdus = (Object[]) bundle.get("pdus");
if (pdus != null) {
// For every SMS message received
for (Object pdu : pdus) {

View file

@ -1,15 +0,0 @@
package info.nightscout.androidaps.plugins.SmsCommunicator.events;
import android.os.Bundle;
import info.nightscout.androidaps.events.Event;
/**
* Created by mike on 13.07.2016.
*/
public class EventNewSMS extends Event {
public Bundle bundle;
public EventNewSMS(Bundle bundle) {
this.bundle = bundle;
}
}

View file

@ -1,17 +1,32 @@
package info.nightscout.androidaps.plugins.Source;
import android.content.Intent;
import android.os.Bundle;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import info.nightscout.androidaps.Config;
import info.nightscout.androidaps.Constants;
import info.nightscout.androidaps.MainApp;
import info.nightscout.androidaps.R;
import info.nightscout.androidaps.db.BgReading;
import info.nightscout.androidaps.interfaces.BgSourceInterface;
import info.nightscout.androidaps.interfaces.PluginBase;
import info.nightscout.androidaps.interfaces.PluginDescription;
import info.nightscout.androidaps.interfaces.PluginType;
import info.nightscout.utils.NSUpload;
import info.nightscout.utils.SP;
/**
* Created by mike on 28.11.2017.
*/
public class SourceDexcomG5Plugin extends PluginBase implements BgSourceInterface {
private static Logger log = LoggerFactory.getLogger(Constants.BGSOURCE);
private static SourceDexcomG5Plugin plugin = null;
@ -37,4 +52,43 @@ public class SourceDexcomG5Plugin extends PluginBase implements BgSourceInterfac
public boolean advancedFilteringSupported() {
return true;
}
@Override
public void handleNewData(Intent intent) {
// onHandleIntent Bundle{ data => [{"m_time":1511939180,"m_trend":"NotComputable","m_value":335}]; android.support.content.wakelockid => 95; }Bundle
if (!isEnabled(PluginType.BGSOURCE)) return;
Bundle bundle = intent.getExtras();
if (bundle == null) return;
BgReading bgReading = new BgReading();
String data = bundle.getString("data");
if (Config.logBgSource)
log.debug("Received Dexcom Data", data);
try {
JSONArray jsonArray = new JSONArray(data);
if (Config.logBgSource)
log.debug("Received Dexcom Data size:" + jsonArray.length());
for (int i = 0; i < jsonArray.length(); i++) {
JSONObject json = jsonArray.getJSONObject(i);
bgReading.value = json.getInt("m_value");
bgReading.direction = json.getString("m_trend");
bgReading.date = json.getLong("m_time") * 1000L;
bgReading.raw = 0;
boolean isNew = MainApp.getDbHelper().createIfNotExists(bgReading, "DexcomG5");
if (isNew && SP.getBoolean(R.string.key_dexcomg5_nsupload, false)) {
NSUpload.uploadBg(bgReading);
}
if (isNew && SP.getBoolean(R.string.key_dexcomg5_xdripupload, false)) {
NSUpload.sendToXdrip(bgReading);
}
}
} catch (JSONException e) {
log.error("Exception: ", e);
}
}
}

View file

@ -1,15 +1,27 @@
package info.nightscout.androidaps.plugins.Source;
import android.content.Intent;
import android.os.Bundle;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import info.nightscout.androidaps.Config;
import info.nightscout.androidaps.Constants;
import info.nightscout.androidaps.MainApp;
import info.nightscout.androidaps.R;
import info.nightscout.androidaps.db.BgReading;
import info.nightscout.androidaps.interfaces.BgSourceInterface;
import info.nightscout.androidaps.interfaces.PluginBase;
import info.nightscout.androidaps.interfaces.PluginDescription;
import info.nightscout.androidaps.interfaces.PluginType;
import info.nightscout.utils.BundleLogger;
/**
* Created by mike on 05.08.2016.
*/
public class SourceGlimpPlugin extends PluginBase implements BgSourceInterface {
private static Logger log = LoggerFactory.getLogger(Constants.BGSOURCE);
private static SourceGlimpPlugin plugin = null;
@ -32,4 +44,25 @@ public class SourceGlimpPlugin extends PluginBase implements BgSourceInterface {
public boolean advancedFilteringSupported() {
return false;
}
@Override
public void handleNewData(Intent intent) {
if (!isEnabled(PluginType.BGSOURCE)) return;
Bundle bundle = intent.getExtras();
if (bundle == null) return;
if (Config.logBgSource)
log.debug("Received Glimp Data: " + BundleLogger.log(bundle));
BgReading bgReading = new BgReading();
bgReading.value = bundle.getDouble("mySGV");
bgReading.direction = bundle.getString("myTrend");
bgReading.date = bundle.getLong("myTimestamp");
bgReading.raw = 0;
MainApp.getDbHelper().createIfNotExists(bgReading, "GLIMP");
}
}

View file

@ -1,6 +1,19 @@
package info.nightscout.androidaps.plugins.Source;
import android.content.Intent;
import android.os.Bundle;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import info.nightscout.androidaps.Config;
import info.nightscout.androidaps.Constants;
import info.nightscout.androidaps.MainApp;
import info.nightscout.androidaps.R;
import info.nightscout.androidaps.db.BgReading;
import info.nightscout.androidaps.interfaces.BgSourceInterface;
import info.nightscout.androidaps.interfaces.PluginBase;
import info.nightscout.androidaps.interfaces.PluginDescription;
@ -10,6 +23,8 @@ import info.nightscout.androidaps.interfaces.PluginType;
* Created by mike on 05.08.2016.
*/
public class SourceMM640gPlugin extends PluginBase implements BgSourceInterface {
private static Logger log = LoggerFactory.getLogger(Constants.BGSOURCE);
private static SourceMM640gPlugin plugin = null;
public static SourceMM640gPlugin getPlugin() {
@ -31,4 +46,49 @@ public class SourceMM640gPlugin extends PluginBase implements BgSourceInterface
public boolean advancedFilteringSupported() {
return false;
}
@Override
public void handleNewData(Intent intent) {
if (!isEnabled(PluginType.BGSOURCE)) return;
Bundle bundle = intent.getExtras();
if (bundle == null) return;
final String collection = bundle.getString("collection");
if (collection == null) return;
if (collection.equals("entries")) {
final String data = bundle.getString("data");
if (Config.logBgSource)
log.debug("Received MM640g Data: ", data);
if ((data != null) && (data.length() > 0)) {
try {
final JSONArray json_array = new JSONArray(data);
for (int i = 0; i < json_array.length(); i++) {
final JSONObject json_object = json_array.getJSONObject(i);
final String type = json_object.getString("type");
switch (type) {
case "sgv":
BgReading bgReading = new BgReading();
bgReading.value = json_object.getDouble("sgv");
bgReading.direction = json_object.getString("direction");
bgReading.date = json_object.getLong("date");
bgReading.raw = json_object.getDouble("sgv");
MainApp.getDbHelper().createIfNotExists(bgReading, "MM640g");
break;
default:
if (Config.logBgSource)
log.debug("Unknown entries type: " + type);
}
}
} catch (JSONException e) {
log.error("Exception: ", e);
}
}
}
}
}

View file

@ -1,16 +1,32 @@
package info.nightscout.androidaps.plugins.Source;
import android.content.Intent;
import android.os.Bundle;
import org.json.JSONArray;
import org.json.JSONObject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import info.nightscout.androidaps.Config;
import info.nightscout.androidaps.Constants;
import info.nightscout.androidaps.MainApp;
import info.nightscout.androidaps.R;
import info.nightscout.androidaps.db.BgReading;
import info.nightscout.androidaps.interfaces.BgSourceInterface;
import info.nightscout.androidaps.interfaces.PluginBase;
import info.nightscout.androidaps.interfaces.PluginDescription;
import info.nightscout.androidaps.interfaces.PluginType;
import info.nightscout.androidaps.plugins.ConstraintsObjectives.ObjectivesPlugin;
import info.nightscout.androidaps.plugins.NSClientInternal.data.NSSgv;
import info.nightscout.utils.JsonHelper;
import info.nightscout.utils.SP;
/**
* Created by mike on 05.08.2016.
*/
public class SourceNSClientPlugin extends PluginBase implements BgSourceInterface {
private static Logger log = LoggerFactory.getLogger(Constants.BGSOURCE);
private static SourceNSClientPlugin plugin = null;
@ -39,6 +55,50 @@ public class SourceNSClientPlugin extends PluginBase implements BgSourceInterfac
return isAdvancedFilteringEnabled;
}
@Override
public void handleNewData(Intent intent) {
if (!isEnabled(PluginType.BGSOURCE) && !SP.getBoolean(R.string.key_ns_autobackfill, true))
return;
Bundle bundles = intent.getExtras();
try {
if (bundles.containsKey("sgv")) {
String sgvstring = bundles.getString("sgv");
if (Config.logBgSource)
log.debug("Received NS Data: " + sgvstring);
JSONObject sgvJson = new JSONObject(sgvstring);
storeSgv(sgvJson);
}
if (bundles.containsKey("sgvs")) {
String sgvstring = bundles.getString("sgvs");
if (Config.logBgSource)
log.debug("Received NS Data: " + sgvstring);
JSONArray jsonArray = new JSONArray(sgvstring);
for (int i = 0; i < jsonArray.length(); i++) {
JSONObject sgvJson = jsonArray.getJSONObject(i);
storeSgv(sgvJson);
}
}
} catch (Exception e) {
log.error("Unhandled exception", e);
}
// Objectives 0
ObjectivesPlugin.bgIsAvailableInNS = true;
ObjectivesPlugin.saveProgress();
}
private void storeSgv(JSONObject sgvJson) {
NSSgv nsSgv = new NSSgv(sgvJson);
BgReading bgReading = new BgReading(nsSgv);
MainApp.getDbHelper().createIfNotExists(bgReading, "NS");
SourceNSClientPlugin.getPlugin().detectSource(JsonHelper.safeGetString(sgvJson, "device"), JsonHelper.safeGetLong(sgvJson, "mills"));
}
public void detectSource(String source, long timeStamp) {
if (timeStamp > lastBGTimeStamp) {
if (source.contains("G5 Native") || source.contains("AndroidAPS-DexcomG5"))

View file

@ -1,16 +1,32 @@
package info.nightscout.androidaps.plugins.Source;
import android.content.Intent;
import android.os.Bundle;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import info.nightscout.androidaps.Config;
import info.nightscout.androidaps.Constants;
import info.nightscout.androidaps.MainApp;
import info.nightscout.androidaps.R;
import info.nightscout.androidaps.db.BgReading;
import info.nightscout.androidaps.interfaces.BgSourceInterface;
import info.nightscout.androidaps.interfaces.PluginBase;
import info.nightscout.androidaps.interfaces.PluginDescription;
import info.nightscout.androidaps.interfaces.PluginType;
import info.nightscout.utils.JsonHelper;
import info.nightscout.utils.NSUpload;
import info.nightscout.utils.SP;
/**
* Created by mike on 05.08.2016.
*/
public class SourcePoctechPlugin extends PluginBase implements BgSourceInterface {
private static Logger log = LoggerFactory.getLogger(Constants.BGSOURCE);
private static SourcePoctechPlugin plugin = null;
@ -36,4 +52,44 @@ public class SourcePoctechPlugin extends PluginBase implements BgSourceInterface
return false;
}
@Override
public void handleNewData(Intent intent) {
if (!isEnabled(PluginType.BGSOURCE)) return;
Bundle bundle = intent.getExtras();
if (bundle == null) return;
BgReading bgReading = new BgReading();
String data = bundle.getString("data");
if (Config.logBgSource)
log.debug("Received Poctech Data", data);
try {
JSONArray jsonArray = new JSONArray(data);
if (Config.logBgSource)
log.debug("Received Poctech Data size:" + jsonArray.length());
for (int i = 0; i < jsonArray.length(); i++) {
JSONObject json = jsonArray.getJSONObject(i);
bgReading.value = json.getDouble("current");
bgReading.direction = json.getString("direction");
bgReading.date = json.getLong("date");
bgReading.raw = json.getDouble("raw");
if (JsonHelper.safeGetString(json, "units", Constants.MGDL).equals("mmol/L"))
bgReading.value = bgReading.value * Constants.MMOLL_TO_MGDL;
boolean isNew = MainApp.getDbHelper().createIfNotExists(bgReading, "Poctech");
if (isNew && SP.getBoolean(R.string.key_dexcomg5_nsupload, false)) {
NSUpload.uploadBg(bgReading);
}
if (isNew && SP.getBoolean(R.string.key_dexcomg5_xdripupload, false)) {
NSUpload.sendToXdrip(bgReading);
}
}
} catch (JSONException e) {
log.error("Exception: ", e);
}
}
}

View file

@ -1,18 +1,31 @@
package info.nightscout.androidaps.plugins.Source;
import android.content.Intent;
import android.os.Bundle;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import info.nightscout.androidaps.Config;
import info.nightscout.androidaps.Constants;
import info.nightscout.androidaps.MainApp;
import info.nightscout.androidaps.R;
import info.nightscout.androidaps.Services.Intents;
import info.nightscout.androidaps.db.BgReading;
import info.nightscout.androidaps.interfaces.BgSourceInterface;
import info.nightscout.androidaps.interfaces.PluginBase;
import info.nightscout.androidaps.interfaces.PluginDescription;
import info.nightscout.androidaps.interfaces.PluginType;
import info.nightscout.utils.BundleLogger;
/**
* Created by mike on 05.08.2016.
*/
public class SourceXdripPlugin extends PluginBase implements BgSourceInterface {
private static Logger log = LoggerFactory.getLogger(Constants.BGSOURCE);
private static SourceXdripPlugin plugin = null;
boolean advancedFiltering;
public static SourceXdripPlugin getPlugin() {
@ -35,6 +48,28 @@ public class SourceXdripPlugin extends PluginBase implements BgSourceInterface {
return advancedFiltering;
}
@Override
public void handleNewData(Intent intent) {
if (!isEnabled(PluginType.BGSOURCE)) return;
Bundle bundle = intent.getExtras();
if (bundle == null) return;
if (Config.logBgSource)
log.debug("Received xDrip data: " + BundleLogger.log(intent.getExtras()));
BgReading bgReading = new BgReading();
bgReading.value = bundle.getDouble(Intents.EXTRA_BG_ESTIMATE);
bgReading.direction = bundle.getString(Intents.EXTRA_BG_SLOPE_NAME);
bgReading.date = bundle.getLong(Intents.EXTRA_TIMESTAMP);
bgReading.raw = bundle.getDouble(Intents.EXTRA_RAW);
String source = bundle.getString(Intents.XDRIP_DATA_SOURCE_DESCRIPTION, "no Source specified");
SourceXdripPlugin.getPlugin().setSource(source);
MainApp.getDbHelper().createIfNotExists(bgReading, "XDRIP");
}
public void setSource(String source) {
this.advancedFiltering = source.contains("G5 Native");
}

View file

@ -12,6 +12,8 @@ import org.slf4j.LoggerFactory;
import java.util.LinkedList;
import info.nightscout.androidaps.Config;
import info.nightscout.androidaps.Constants;
import info.nightscout.androidaps.MainApp;
import info.nightscout.androidaps.R;
import info.nightscout.androidaps.data.DetailedBolusInfo;
@ -75,7 +77,7 @@ import info.nightscout.androidaps.queue.commands.CommandTempBasalPercent;
*/
public class CommandQueue {
private static Logger log = LoggerFactory.getLogger(CommandQueue.class);
private Logger log = LoggerFactory.getLogger(Constants.QUEUE);
private final LinkedList<Command> queue = new LinkedList<>();
protected Command performing;
@ -109,12 +111,14 @@ public class CommandQueue {
private synchronized void inject(Command command) {
// inject as a first command
log.debug("QUEUE: Adding as first: " + command.getClass().getSimpleName() + " - " + command.status());
if (Config.logQueue)
log.debug("Adding as first: " + command.getClass().getSimpleName() + " - " + command.status());
queue.addFirst(command);
}
private synchronized void add(Command command) {
log.debug("QUEUE: Adding: " + command.getClass().getSimpleName() + " - " + command.status());
if (Config.logQueue)
log.debug("Adding: " + command.getClass().getSimpleName() + " - " + command.status());
queue.add(command);
}
@ -147,15 +151,18 @@ public class CommandQueue {
// start thread again if not already running
protected synchronized void notifyAboutNewCommand() {
while (thread != null && thread.getState() != Thread.State.TERMINATED && thread.waitingForDisconnect) {
log.debug("QUEUE: Waiting for previous thread finish");
if (Config.logQueue)
log.debug("Waiting for previous thread finish");
SystemClock.sleep(500);
}
if (thread == null || thread.getState() == Thread.State.TERMINATED) {
thread = new QueueThread(this);
thread.start();
log.debug("QUEUE: Starting new thread");
if (Config.logQueue)
log.debug("Starting new thread");
} else {
log.debug("QUEUE: Thread is already running");
if (Config.logQueue)
log.debug("Thread is already running");
}
}
@ -164,8 +171,8 @@ public class CommandQueue {
tempCommandQueue.readStatus(reason, callback);
}
public synchronized boolean bolusInQueue(){
if(isRunning(Command.CommandType.BOLUS)) return true;
public synchronized boolean bolusInQueue() {
if (isRunning(Command.CommandType.BOLUS)) return true;
for (int i = 0; i < queue.size(); i++) {
if (queue.get(i).commandType == Command.CommandType.BOLUS) {
return true;
@ -180,17 +187,19 @@ public class CommandQueue {
if (type == Command.CommandType.SMB_BOLUS) {
if (isRunning(Command.CommandType.BOLUS) || bolusInQueue()) {
log.debug("Rejecting SMB since a bolus is queue/running");
if (Config.logQueue)
log.debug("Rejecting SMB since a bolus is queue/running");
return false;
}
if (detailedBolusInfo.lastKnownBolusTime < TreatmentsPlugin.getPlugin().getLastBolusTime()) {
log.debug("Rejecting bolus, another bolus was issued since request time");
if (Config.logQueue)
log.debug("Rejecting bolus, another bolus was issued since request time");
return false;
}
}
if(type.equals(Command.CommandType.BOLUS) && detailedBolusInfo.carbs > 0 && detailedBolusInfo.insulin == 0){
if (type.equals(Command.CommandType.BOLUS) && detailedBolusInfo.carbs > 0 && detailedBolusInfo.insulin == 0) {
type = Command.CommandType.CARBS_ONLY_TREATMENT;
//Carbs only can be added in parallel as they can be "in the future".
} else {
@ -213,7 +222,7 @@ public class CommandQueue {
add(new CommandSMBBolus(detailedBolusInfo, callback));
} else {
add(new CommandBolus(detailedBolusInfo, callback, type));
if(type.equals(Command.CommandType.BOLUS)) {
if (type.equals(Command.CommandType.BOLUS)) {
// Bring up bolus progress dialog (start here, so the dialog is shown when the bolus is requested,
// not when the Bolus command is starting. The command closes the dialog upon completion).
showBolusProgressDialog(detailedBolusInfo.insulin, detailedBolusInfo.context);
@ -337,7 +346,8 @@ public class CommandQueue {
// returns true if command is queued
public boolean setProfile(Profile profile, Callback callback) {
if (isThisProfileSet(profile)) {
log.debug("QUEUE: Correct profile already set");
if (Config.logQueue)
log.debug("Correct profile already set");
if (callback != null)
callback.result(new PumpEnactResult().success(true).enacted(false)).run();
return false;
@ -381,7 +391,8 @@ public class CommandQueue {
// returns true if command is queued
public boolean readStatus(String reason, Callback callback) {
if (isLastScheduled(Command.CommandType.READSTATUS)) {
log.debug("QUEUE: READSTATUS " + reason + " ignored as duplicated");
if (Config.logQueue)
log.debug("READSTATUS " + reason + " ignored as duplicated");
if (callback != null)
callback.result(executingNowError()).run();
return false;
@ -496,8 +507,10 @@ public class CommandQueue {
if (activePump != null && current != null) {
boolean result = activePump.isThisProfileSet(profile);
if (!result) {
log.debug("Current profile: " + current.getData().toString());
log.debug("New profile: " + profile.getData().toString());
if (Config.logQueue) {
log.debug("Current profile: " + current.toString());
log.debug("New profile: " + profile.toString());
}
}
return result;
} else return true;

View file

@ -8,6 +8,7 @@ import android.os.SystemClock;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import info.nightscout.androidaps.Config;
import info.nightscout.androidaps.Constants;
import info.nightscout.androidaps.MainApp;
import info.nightscout.androidaps.R;
@ -26,7 +27,7 @@ import info.nightscout.utils.SP;
*/
public class QueueThread extends Thread {
private static Logger log = LoggerFactory.getLogger(QueueThread.class);
private Logger log = LoggerFactory.getLogger(Constants.QUEUE);
private CommandQueue queue;
@ -54,7 +55,8 @@ public class QueueThread extends Thread {
while (true) {
PumpInterface pump = ConfigBuilderPlugin.getActivePump();
if (pump == null) {
log.debug("QUEUE: pump == null");
if (Config.logQueue)
log.debug("pump == null");
MainApp.bus().post(new EventPumpStatusChanged(MainApp.gs(R.string.pumpNotInitialized)));
SystemClock.sleep(1000);
continue;
@ -64,15 +66,17 @@ public class QueueThread extends Thread {
if (!pump.isConnected() && secondsElapsed > Constants.PUMP_MAX_CONNECTION_TIME_IN_SECONDS) {
MainApp.bus().post(new EventDismissBolusprogressIfRunning(null));
MainApp.bus().post(new EventPumpStatusChanged(MainApp.gs(R.string.connectiontimedout)));
log.debug("QUEUE: timed out");
if (Config.logQueue)
log.debug("timed out");
pump.stopConnecting();
//BLUETOOTH-WATCHDOG
boolean watchdog = SP.getBoolean(R.string.key_btwatchdog, false);
long last_watchdog = SP.getLong(R.string.key_btwatchdog_lastbark, 0l);
watchdog = watchdog && System.currentTimeMillis() - last_watchdog > (Constants.MIN_WATCHDOG_INTERVAL_IN_SECONDS * 1000);
if(watchdog) {
log.debug("BT watchdog - toggeling the phonest bluetooth");
if (watchdog) {
if (Config.logQueue)
log.debug("BT watchdog - toggeling the phonest bluetooth");
//write time
SP.putLong(R.string.key_btwatchdog_lastbark, System.currentTimeMillis());
//toggle BT
@ -91,7 +95,8 @@ public class QueueThread extends Thread {
pump.connect("watchdog");
} else {
queue.clear();
log.debug("QUEUE: no connection possible");
if (Config.logQueue)
log.debug("no connection possible");
MainApp.bus().post(new EventPumpStatusChanged(EventPumpStatusChanged.DISCONNECTING));
pump.disconnect("Queue empty");
MainApp.bus().post(new EventPumpStatusChanged(EventPumpStatusChanged.DISCONNECTED));
@ -100,7 +105,8 @@ public class QueueThread extends Thread {
}
if (pump.isConnecting()) {
log.debug("QUEUE: connecting " + secondsElapsed);
if (Config.logQueue)
log.debug("connecting " + secondsElapsed);
MainApp.bus().post(new EventPumpStatusChanged(EventPumpStatusChanged.CONNECTING, (int) secondsElapsed));
SystemClock.sleep(1000);
continue;
@ -108,7 +114,8 @@ public class QueueThread extends Thread {
if (!pump.isConnected()) {
log.debug("QUEUE: connect");
if (Config.logQueue)
log.debug("connect");
MainApp.bus().post(new EventPumpStatusChanged(EventPumpStatusChanged.CONNECTING, (int) secondsElapsed));
pump.connect("Connection needed");
SystemClock.sleep(1000);
@ -118,12 +125,14 @@ public class QueueThread extends Thread {
if (queue.performing() == null) {
if (!connectLogged) {
connectLogged = true;
log.debug("QUEUE: connection time " + secondsElapsed + "s");
if (Config.logQueue)
log.debug("connection time " + secondsElapsed + "s");
}
// Pickup 1st command and set performing variable
if (queue.size() > 0) {
queue.pickup();
log.debug("QUEUE: performing " + queue.performing().status());
if (Config.logQueue)
log.debug("performing " + queue.performing().status());
MainApp.bus().post(new EventQueueChanged());
queue.performing().execute();
queue.resetPerforming();
@ -138,14 +147,17 @@ public class QueueThread extends Thread {
long secondsFromLastCommand = (System.currentTimeMillis() - lastCommandTime) / 1000;
if (secondsFromLastCommand >= 5) {
waitingForDisconnect = true;
log.debug("QUEUE: queue empty. disconnect");
if (Config.logQueue)
log.debug("queue empty. disconnect");
MainApp.bus().post(new EventPumpStatusChanged(EventPumpStatusChanged.DISCONNECTING));
pump.disconnect("Queue empty");
MainApp.bus().post(new EventPumpStatusChanged(EventPumpStatusChanged.DISCONNECTED));
log.debug("QUEUE: disconnected");
if (Config.logQueue)
log.debug("disconnected");
return;
} else {
log.debug("QUEUE: waiting for disconnect");
if (Config.logQueue)
log.debug("waiting for disconnect");
SystemClock.sleep(1000);
}
}
@ -154,6 +166,4 @@ public class QueueThread extends Thread {
mWakeLock.release();
}
}
}

View file

@ -1,5 +1,10 @@
package info.nightscout.androidaps.queue.commands;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import info.nightscout.androidaps.Config;
import info.nightscout.androidaps.Constants;
import info.nightscout.androidaps.MainApp;
import info.nightscout.androidaps.R;
import info.nightscout.androidaps.data.PumpEnactResult;
@ -9,6 +14,8 @@ import info.nightscout.androidaps.queue.Callback;
* Created by mike on 09.11.2017.
*/
public abstract class Command {
private Logger log = LoggerFactory.getLogger(Constants.QUEUE);
public enum CommandType {
BOLUS,
SMB_BOLUS,
@ -33,6 +40,8 @@ public abstract class Command {
PumpEnactResult result = new PumpEnactResult();
result.success = false;
result.comment = MainApp.gs(R.string.connectiontimedout);
if (Config.logQueue)
log.debug("Result cancel");
if (callback != null)
callback.result(result).run();
}

View file

@ -1,5 +1,10 @@
package info.nightscout.androidaps.queue.commands;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import info.nightscout.androidaps.Config;
import info.nightscout.androidaps.Constants;
import info.nightscout.androidaps.MainApp;
import info.nightscout.androidaps.data.DetailedBolusInfo;
import info.nightscout.androidaps.data.PumpEnactResult;
@ -14,6 +19,8 @@ import info.nightscout.utils.DecimalFormatter;
*/
public class CommandBolus extends Command {
private Logger log = LoggerFactory.getLogger(Constants.QUEUE);
DetailedBolusInfo detailedBolusInfo;
public CommandBolus(DetailedBolusInfo detailedBolusInfo, Callback callback, CommandType type) {
@ -28,6 +35,8 @@ public class CommandBolus extends Command {
BolusProgressDialog.bolusEnded = true;
MainApp.bus().post(new EventDismissBolusprogressIfRunning(r));
if (Config.logQueue)
log.debug("Result success: " + r.success + " enacted: " + r.enacted);
if (callback != null)
callback.result(r).run();

View file

@ -4,7 +4,7 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import info.nightscout.androidaps.Config;
import info.nightscout.androidaps.MainApp;
import info.nightscout.androidaps.Constants;
import info.nightscout.androidaps.data.PumpEnactResult;
import info.nightscout.androidaps.plugins.ConfigBuilder.ConfigBuilderPlugin;
import info.nightscout.androidaps.queue.Callback;
@ -14,7 +14,7 @@ import info.nightscout.androidaps.queue.Callback;
*/
public class CommandCancelExtendedBolus extends Command {
private static Logger log = LoggerFactory.getLogger(CommandCancelExtendedBolus.class);
private Logger log = LoggerFactory.getLogger(Constants.QUEUE);
public CommandCancelExtendedBolus(Callback callback) {
commandType = CommandType.EXTENDEDBOLUS;
@ -24,8 +24,8 @@ public class CommandCancelExtendedBolus extends Command {
@Override
public void execute() {
PumpEnactResult r = ConfigBuilderPlugin.getActivePump().cancelExtendedBolus();
if (Config.logCongigBuilderActions)
log.debug("cancelExtendedBolus success: " + r.success + " enacted: " + r.enacted);
if (Config.logQueue)
log.debug("Result success: " + r.success + " enacted: " + r.enacted);
if (callback != null)
callback.result(r).run();
}

View file

@ -1,6 +1,10 @@
package info.nightscout.androidaps.queue.commands;
import info.nightscout.androidaps.MainApp;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import info.nightscout.androidaps.Config;
import info.nightscout.androidaps.Constants;
import info.nightscout.androidaps.data.PumpEnactResult;
import info.nightscout.androidaps.plugins.ConfigBuilder.ConfigBuilderPlugin;
import info.nightscout.androidaps.queue.Callback;
@ -10,6 +14,8 @@ import info.nightscout.androidaps.queue.Callback;
*/
public class CommandCancelTempBasal extends Command {
private Logger log = LoggerFactory.getLogger(Constants.QUEUE);
boolean enforceNew;
public CommandCancelTempBasal(boolean enforceNew, Callback callback) {
@ -21,6 +27,8 @@ public class CommandCancelTempBasal extends Command {
@Override
public void execute() {
PumpEnactResult r = ConfigBuilderPlugin.getActivePump().cancelTempBasal(enforceNew);
if (Config.logQueue)
log.debug("Result success: " + r.success + " enacted: " + r.enacted);
if (callback != null)
callback.result(r).run();
}

View file

@ -4,7 +4,7 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import info.nightscout.androidaps.Config;
import info.nightscout.androidaps.MainApp;
import info.nightscout.androidaps.Constants;
import info.nightscout.androidaps.data.PumpEnactResult;
import info.nightscout.androidaps.plugins.ConfigBuilder.ConfigBuilderPlugin;
import info.nightscout.androidaps.queue.Callback;
@ -14,7 +14,7 @@ import info.nightscout.androidaps.queue.Callback;
*/
public class CommandExtendedBolus extends Command {
private static Logger log = LoggerFactory.getLogger(CommandExtendedBolus.class);
private Logger log = LoggerFactory.getLogger(Constants.QUEUE);
private double insulin;
private int durationInMinutes;
@ -29,8 +29,8 @@ public class CommandExtendedBolus extends Command {
@Override
public void execute() {
PumpEnactResult r = ConfigBuilderPlugin.getActivePump().setExtendedBolus(insulin, durationInMinutes);
if (Config.logCongigBuilderActions)
log.debug("setExtendedBolus rate: " + insulin + " durationInMinutes: " + durationInMinutes + " success: " + r.success + " enacted: " + r.enacted);
if (Config.logQueue)
log.debug("Result rate: " + insulin + " durationInMinutes: " + durationInMinutes + " success: " + r.success + " enacted: " + r.enacted);
if (callback != null)
callback.result(r).run();
}

View file

@ -1,5 +1,10 @@
package info.nightscout.androidaps.queue.commands;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import info.nightscout.androidaps.Config;
import info.nightscout.androidaps.Constants;
import info.nightscout.androidaps.data.PumpEnactResult;
import info.nightscout.androidaps.interfaces.DanaRInterface;
import info.nightscout.androidaps.interfaces.PumpInterface;
@ -11,6 +16,8 @@ import info.nightscout.androidaps.queue.Callback;
*/
public class CommandLoadEvents extends Command {
private Logger log = LoggerFactory.getLogger(Constants.QUEUE);
public CommandLoadEvents(Callback callback) {
commandType = CommandType.LOADEVENTS;
this.callback = callback;
@ -22,6 +29,8 @@ public class CommandLoadEvents extends Command {
if (pump instanceof DanaRInterface) {
DanaRInterface danaPump = (DanaRInterface) pump;
PumpEnactResult r = danaPump.loadEvents();
if (Config.logQueue)
log.debug("Result success: " + r.success + " enacted: " + r.enacted);
if (callback != null)
callback.result(r).run();
}

View file

@ -1,17 +1,23 @@
package info.nightscout.androidaps.queue.commands;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import info.nightscout.androidaps.Config;
import info.nightscout.androidaps.Constants;
import info.nightscout.androidaps.data.PumpEnactResult;
import info.nightscout.androidaps.interfaces.DanaRInterface;
import info.nightscout.androidaps.interfaces.PumpInterface;
import info.nightscout.androidaps.plugins.ConfigBuilder.ConfigBuilderPlugin;
import info.nightscout.androidaps.queue.Callback;
import info.nightscout.androidaps.queue.commands.Command;
/**
* Created by mike on 10.11.2017.
*/
public class CommandLoadHistory extends Command {
private Logger log = LoggerFactory.getLogger(Constants.QUEUE);
byte type;
public CommandLoadHistory(byte type, Callback callback) {
@ -26,6 +32,8 @@ public class CommandLoadHistory extends Command {
if (pump instanceof DanaRInterface) {
DanaRInterface danaPump = (DanaRInterface) pump;
PumpEnactResult r = danaPump.loadHistory(type);
if (Config.logQueue)
log.debug("Result success: " + r.success + " enacted: " + r.enacted);
if (callback != null)
callback.result(r).run();
}

View file

@ -1,5 +1,10 @@
package info.nightscout.androidaps.queue.commands;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import info.nightscout.androidaps.Config;
import info.nightscout.androidaps.Constants;
import info.nightscout.androidaps.data.PumpEnactResult;
import info.nightscout.androidaps.interfaces.PumpInterface;
import info.nightscout.androidaps.plugins.ConfigBuilder.ConfigBuilderPlugin;
@ -10,6 +15,8 @@ import info.nightscout.androidaps.queue.Callback;
*/
public class CommandLoadTDDs extends Command {
private Logger log = LoggerFactory.getLogger(Constants.QUEUE);
public CommandLoadTDDs(Callback callback) {
commandType = CommandType.LOADHISTORY; //belongs to the history group of commands
@ -20,9 +27,11 @@ public class CommandLoadTDDs extends Command {
public void execute() {
PumpInterface pump = ConfigBuilderPlugin.getActivePump();
PumpEnactResult r = pump.loadTDDs();
if (Config.logQueue)
log.debug("Result success: " + r.success + " enacted: " + r.enacted);
if (callback != null)
callback.result(r).run();
}
}
@Override
public String status() {

View file

@ -1,5 +1,10 @@
package info.nightscout.androidaps.queue.commands;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import info.nightscout.androidaps.Config;
import info.nightscout.androidaps.Constants;
import info.nightscout.androidaps.plugins.ConfigBuilder.ConfigBuilderPlugin;
import info.nightscout.androidaps.queue.Callback;
import info.nightscout.utils.LocalAlertUtils;
@ -9,6 +14,8 @@ import info.nightscout.utils.LocalAlertUtils;
*/
public class CommandReadStatus extends Command {
private Logger log = LoggerFactory.getLogger(Constants.QUEUE);
String reason;
public CommandReadStatus(String reason, Callback callback) {
@ -21,6 +28,8 @@ public class CommandReadStatus extends Command {
public void execute() {
ConfigBuilderPlugin.getActivePump().getPumpStatus();
LocalAlertUtils.notifyPumpStatusRead();
if (Config.logQueue)
log.debug("CommandReadStatus executed. Reason: " + reason);
if (callback != null)
callback.result(null).run();
}

View file

@ -3,6 +3,8 @@ package info.nightscout.androidaps.queue.commands;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import info.nightscout.androidaps.Config;
import info.nightscout.androidaps.Constants;
import info.nightscout.androidaps.MainApp;
import info.nightscout.androidaps.data.DetailedBolusInfo;
import info.nightscout.androidaps.data.PumpEnactResult;
@ -20,7 +22,8 @@ import info.nightscout.utils.T;
*/
public class CommandSMBBolus extends Command {
private static Logger log = LoggerFactory.getLogger(CommandSMBBolus.class);
private Logger log = LoggerFactory.getLogger(Constants.QUEUE);
DetailedBolusInfo detailedBolusInfo;
public CommandSMBBolus(DetailedBolusInfo detailedBolusInfo, Callback callback) {
@ -34,20 +37,25 @@ public class CommandSMBBolus extends Command {
PumpEnactResult r;
long lastBolusTime = TreatmentsPlugin.getPlugin().getLastBolusTime();
if (lastBolusTime != 0 && lastBolusTime + T.mins(3).msecs() > DateUtil.now()) {
log.debug("SMB requsted but still in 3 min interval");
if (Config.logQueue)
log.debug("SMB requsted but still in 3 min interval");
r = new PumpEnactResult().enacted(false).success(false).comment("SMB requsted but still in 3 min interval");
} else if (detailedBolusInfo.deliverAt != 0 && detailedBolusInfo.deliverAt + T.mins(1).msecs() > System.currentTimeMillis())
} else if (detailedBolusInfo.deliverAt != 0 && detailedBolusInfo.deliverAt + T.mins(1).msecs() > System.currentTimeMillis()) {
r = ConfigBuilderPlugin.getActivePump().deliverTreatment(detailedBolusInfo);
else {
} else {
r = new PumpEnactResult().enacted(false).success(false).comment("SMB request too old");
log.debug("SMB bolus canceled. delivetAt=" + detailedBolusInfo.deliverAt + " now=" + System.currentTimeMillis());
if (Config.logQueue)
log.debug("SMB bolus canceled. delivetAt: " + DateUtil.dateAndTimeString(detailedBolusInfo.deliverAt));
}
if (Config.logQueue)
log.debug("Result success: " + r.success + " enacted: " + r.enacted);
if (callback != null)
callback.result(r).run();
}
public String status() {
return "SMBBOLUS " + DecimalFormatter.to1Decimal(detailedBolusInfo.insulin) + "U";
return "SMBBOLUS " + DecimalFormatter.to2Decimal(detailedBolusInfo.insulin) + "U";
}
}

View file

@ -3,6 +3,8 @@ package info.nightscout.androidaps.queue.commands;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import info.nightscout.androidaps.Config;
import info.nightscout.androidaps.Constants;
import info.nightscout.androidaps.MainApp;
import info.nightscout.androidaps.R;
import info.nightscout.androidaps.data.Profile;
@ -20,7 +22,8 @@ import info.nightscout.androidaps.queue.Callback;
*/
public class CommandSetProfile extends Command {
private static Logger log = LoggerFactory.getLogger(CommandSetProfile.class);
private Logger log = LoggerFactory.getLogger(Constants.QUEUE);
private Profile profile;
public CommandSetProfile(Profile profile, Callback callback) {
@ -32,13 +35,16 @@ public class CommandSetProfile extends Command {
@Override
public void execute() {
if (ConfigBuilderPlugin.getCommandQueue().isThisProfileSet(profile)) {
log.debug("QUEUE: Correct profile already set");
if (Config.logQueue)
log.debug("Correct profile already set. profile: " + profile.toString());
if (callback != null)
callback.result(new PumpEnactResult().success(true).enacted(false)).run();
return;
}
PumpEnactResult r = ConfigBuilderPlugin.getActivePump().setNewBasalProfile(profile);
if (Config.logQueue)
log.debug("Result success: " + r.success + " enacted: " + r.enacted + " profile: " + profile.toString());
if (callback != null)
callback.result(r).run();

View file

@ -3,13 +3,12 @@ package info.nightscout.androidaps.queue.commands;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import info.nightscout.androidaps.MainApp;
import info.nightscout.androidaps.Config;
import info.nightscout.androidaps.Constants;
import info.nightscout.androidaps.data.PumpEnactResult;
import info.nightscout.androidaps.interfaces.DanaRInterface;
import info.nightscout.androidaps.interfaces.PluginType;
import info.nightscout.androidaps.interfaces.PumpInterface;
import info.nightscout.androidaps.plugins.ConfigBuilder.ConfigBuilderPlugin;
import info.nightscout.androidaps.plugins.PumpDanaRv2.DanaRv2Plugin;
import info.nightscout.androidaps.queue.Callback;
/**
@ -17,7 +16,8 @@ import info.nightscout.androidaps.queue.Callback;
*/
public class CommandSetUserSettings extends Command {
private static Logger log = LoggerFactory.getLogger(CommandSetUserSettings.class);
private Logger log = LoggerFactory.getLogger(Constants.QUEUE);
public CommandSetUserSettings(Callback callback) {
commandType = CommandType.SETUSERSETTINGS;
this.callback = callback;
@ -28,11 +28,9 @@ public class CommandSetUserSettings extends Command {
PumpInterface pump = ConfigBuilderPlugin.getActivePump();
if (pump instanceof DanaRInterface) {
DanaRInterface danaPump = (DanaRInterface) pump;
boolean isDanaRv2 = MainApp.getSpecificPlugin(DanaRv2Plugin.class) != null && MainApp.getSpecificPlugin(DanaRv2Plugin.class).isEnabled(PluginType.PUMP);
if(isDanaRv2){
log.debug("MsgSetUserOptions detected for DanaRv2");
}
PumpEnactResult r = danaPump.setUserOptions();
if (Config.logQueue)
log.debug("Result success: " + r.success + " enacted: " + r.enacted);
if (callback != null)
callback.result(r).run();
}

View file

@ -4,6 +4,7 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import info.nightscout.androidaps.Config;
import info.nightscout.androidaps.Constants;
import info.nightscout.androidaps.MainApp;
import info.nightscout.androidaps.data.Profile;
import info.nightscout.androidaps.data.PumpEnactResult;
@ -15,7 +16,7 @@ import info.nightscout.androidaps.queue.Callback;
*/
public class CommandTempBasalAbsolute extends Command {
private static Logger log = LoggerFactory.getLogger(CommandTempBasalAbsolute.class);
private Logger log = LoggerFactory.getLogger(Constants.QUEUE);
int durationInMinutes;
double absoluteRate;
@ -34,8 +35,8 @@ public class CommandTempBasalAbsolute extends Command {
@Override
public void execute() {
PumpEnactResult r = ConfigBuilderPlugin.getActivePump().setTempBasalAbsolute(absoluteRate, durationInMinutes, profile, enforceNew);
if (Config.logCongigBuilderActions)
log.debug("setTempBasalAbsolute rate: " + absoluteRate + " durationInMinutes: " + durationInMinutes + " success: " + r.success + " enacted: " + r.enacted);
if (Config.logQueue)
log.debug("Result rate: " + absoluteRate + " durationInMinutes: " + durationInMinutes + " success: " + r.success + " enacted: " + r.enacted);
if (callback != null)
callback.result(r).run();
}

View file

@ -4,6 +4,7 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import info.nightscout.androidaps.Config;
import info.nightscout.androidaps.Constants;
import info.nightscout.androidaps.data.Profile;
import info.nightscout.androidaps.data.PumpEnactResult;
import info.nightscout.androidaps.plugins.ConfigBuilder.ConfigBuilderPlugin;
@ -14,7 +15,7 @@ import info.nightscout.androidaps.queue.Callback;
*/
public class CommandTempBasalPercent extends Command {
private static Logger log = LoggerFactory.getLogger(CommandTempBasalPercent.class);
private Logger log = LoggerFactory.getLogger(Constants.QUEUE);
int durationInMinutes;
int percent;
@ -33,8 +34,8 @@ public class CommandTempBasalPercent extends Command {
@Override
public void execute() {
PumpEnactResult r = ConfigBuilderPlugin.getActivePump().setTempBasalPercent(percent, durationInMinutes, profile, enforceNew);
if (Config.logCongigBuilderActions)
log.debug("setTempBasalPercent percent: " + percent + " durationInMinutes: " + durationInMinutes + " success: " + r.success + " enacted: " + r.enacted);
if (Config.logQueue)
log.debug("Result percent: " + percent + " durationInMinutes: " + durationInMinutes + " success: " + r.success + " enacted: " + r.enacted);
if (callback != null)
callback.result(r).run();
}

View file

@ -248,7 +248,7 @@
<string name="danar_glucose">КЗ</string>
<string name="danar_carbohydrate">въглехидрати</string>
<string name="danar_alarm">аларма</string>
<string name="danar_totaluploaded" formatted="false">Общо %d записа качени</string>
<string name="danar_totaluploaded">Общо %1$d записа качени</string>
<string name="danar_sbolus">S болус</string>
<string name="danar_history_alarm">Аларми</string>
<string name="danar_history_basalhours">Базален по часове</string>
@ -259,7 +259,7 @@
<string name="danar_history_glucose">КЗ</string>
<string name="danar_history_refill">Презареждане</string>
<string name="danar_history_syspend">Спиране</string>
<string name="danar_history_connectingfor" formatted="false">Свързва се с помпата за %d сек.</string>
<string name="danar_history_connectingfor">Свързва се с помпата за %1$d сек.</string>
<string name="danar_password_title">Парола за помпата</string>
<string name="wrongpumppassword">Грешна парола за помпата!</string>
<string name="pumpbusy">Помпата е заета</string>
@ -354,13 +354,13 @@
<string name="MM640g">MM640g</string>
<string name="ongoingnotificaction">Текущи известия</string>
<string name="old_data">СТАРИ ДАННИ</string>
<string name="minago">преди %d мин</string>
<string name="minago">преди %1$d мин</string>
<string name="sms_minago">%dmin ago</string>
<string name="localprofile">Локален профил</string>
<string name="openapsama">OpenAPS AMA</string>
<string name="short_avgdelta">Краткоср. Δ:</string>
<string name="long_avgdelta">Дългоср. Δ:</string>
<string name="array_of_elements">Масив от %d елемента.Актуална стойност:</string>
<string name="array_of_elements">Масив от %1$d елемента.Актуална стойност:</string>
<string name="openapsma_autosensdata_label">Autosens данни</string>
<string name="openapsma_scriptdebugdata_label">Script debug</string>
<string name="openapsama_useautosens">Разреши AMA autosens</string>
@ -465,10 +465,10 @@
<string name="adult">Възрастен</string>
<string name="patientage_summary">Изберете възраст за определяне лимитите на безопасност</string>
<string name="Glimp">Glimp</string>
<string name="needwhitelisting" formatted="false">%s се нуждае от зключване на оптимизиране на батерията за пълна функционалност</string>
<string name="needwhitelisting">%1$s се нуждае от зключване на оптимизиране на батерията за пълна функционалност</string>
<string name="loopsuspended">Loop изключен</string>
<string name="loopsuspendedfor" formatted="false">Изключен (%d мин)</string>
<string name="loopsuperbolusfor" formatted="false">Суперболус (%d мин)</string>
<string name="loopsuspendedfor">Изключен (%1$d мин)</string>
<string name="loopsuperbolusfor">Суперболус (%1$d мин)</string>
<string name="suspendloopfor1h">Изключи Loop за 1ч</string>
<string name="suspendloopfor2h">Изключи Loop за 2ч</string>
<string name="suspendloopfor3h">Изключи Loop за 3ч</string>
@ -656,11 +656,11 @@
<string name="startingbolus">Стартира доставка на болус</string>
<string name="unsupportedfirmware">Неподдържан фърмуер на помпата</string>
<string name="urgent_alarm">Спешна аларма</string>
<string name="waitingforestimatedbolusend" formatted="false">Очаква края на болуса. Остават %d сек.</string>
<string name="waitingforestimatedbolusend">Очаква края на болуса. Остават %1$d сек.</string>
<string name="wear_detailed_delta_summary">Показвай делта с още един десетичен знак</string>
<string name="wear_detailed_delta_title">Показвай подробна делта</string>
<string name="yes">Да</string>
<string name="zerovalueinprofile" formatted="false">Невалиден профил: %s</string>
<string name="zerovalueinprofile">Невалиден профил: %1$s</string>
<string name="shortenergy">En</string>
<string name="raise_notifications_as_android_notifications">Използвай системни известия за аларми и съобщения</string>
<string name="combo_warning">Внимание</string>
@ -698,7 +698,7 @@
<string name="combo_programming_bolus">Програмиране на помпа за болус</string>
<string name="combo_pump_state_label">Състояние</string>
<string name="combo_pump_activity_label">Активност</string>
<string name="combo_no_pump_connection" formatted="false">Няма връзка от %d мин.</string>
<string name="combo_no_pump_connection">Няма връзка от %1$d мин.</string>
<string name="combo_tbr_remaining">%1$d%% (%2$d мин. остават)</string>
<string name="combo_pump_state_initializing">Инициализация</string>
<string name="combo_pump_state_suspended_due_to_error">Прекратен поради грешка</string>
@ -818,8 +818,8 @@
<string name="start_eating_soon_tt">Старт на вр. цел за Eating soon</string>
<string name="temptargetshort">Вр.цел</string>
<string name="start_hypo_tt">Старт на вр. цел при хипо</string>
<string name="objectivenotstarted" formatted="false">ЦЕЛ %d не е стартирана</string>
<string name="objectivenotfinished" formatted="false">ЦЕЛ %d не е завършена</string>
<string name="objectivenotstarted">ЦЕЛ %1$d не е стартирана</string>
<string name="objectivenotfinished">ЦЕЛ %1$d не е завършена</string>
<string name="pumpisnottempbasalcapable">Помпата не може да подава временен базал</string>
<string name="novalidbasalrate">Няма валидна базална прочетена от помпата</string>
<string name="closedmodedisabledinpreferences">Closed loop е забранен в настройките</string>
@ -845,8 +845,8 @@
<string name="smbalwaysdisabled">SMB \"винаги\" и \"след въглехидрати\" е забранен, защото е активен източник на КЗ, който не поддържа необходимата филтрация</string>
<string name="smbnotallowedinopenloopmode">SMB не е позволен в режим open loop</string>
<string name="food_short">Храна</string>
<string name="waitingfortimesynchronization" formatted="false">Очаква синхронизация (%d sec)</string>
<string name="loopdisconnectedfor" formatted="false">Прекъснат (%d m)</string>
<string name="waitingfortimesynchronization">Очаква синхронизация (%1$d sec)</string>
<string name="loopdisconnectedfor">Прекъснат (%1$d m)</string>
<string name="automatic_careportal_events">Автоматично careportal събитие</string>
<string name="automatically_upload_insulin_cannula_and_battery_changes_to_nightscout">Автоматично изпраща смяна на резервоар, сет и аларми на помпата към Nightscout</string>
<string name="openapssmb_maxiob_title">Максималният общ IOB OpenAPS не може да бъде повече от [U]</string>

View file

@ -226,7 +226,7 @@
<string name="danar_history_basalhours">Hodinové bazály</string>
<string name="danar_history_bolus">Bolusy</string>
<string name="danar_history_carbohydrates">Sacharidy</string>
<string name="danar_history_connectingfor" formatted="false">Připojování %d sec</string>
<string name="danar_history_connectingfor">Připojování %1$d sec</string>
<string name="danar_history_dailyinsulin">Denní inzulín</string>
<string name="danar_history_errors">Chyby</string>
<string name="danar_history_glucose">Glykémie</string>
@ -235,7 +235,7 @@
<string name="danar_historyreload">Načíst</string>
<string name="danar_refill">plnění</string>
<string name="danar_sbolus">S bolus</string>
<string name="danar_totaluploaded" formatted="false">Celkem nahráno %d záznamů</string>
<string name="danar_totaluploaded">Celkem nahráno %1$d záznamů</string>
<string name="uploading">Nahrávám</string>
<string name="pumpbusy">Pumpa je zaneprázdněna</string>
<string name="wrongpumppassword">Špatné heslo k pumpě</string>
@ -330,18 +330,18 @@
<string name="mdi">Pera</string>
<string name="sms_actualbg">Glykémie:</string>
<string name="sms_lastbg">Poslední glykémie:</string>
<string name="minago" formatted="false">před %d min</string>
<string name="minago">před %1$d min</string>
<string name="sms_basal">Bazál:</string>
<string name="sms_bolus">Bolus:</string>
<string name="sms_delta">Rozdíl:</string>
<string name="sms_iob">IOB:</string>
<string name="sms_minago" formatted="false">před %d min</string>
<string name="sms_minago">před %1$d min</string>
<string name="smscommunicator_bolusdelivered">Bolus %.2fU aplikován úspěšně</string>
<string name="ongoingnotificaction">Průběžné oznámení</string>
<string name="old_data">ZASTARALÉ</string>
<string name="localprofile">Místní profil</string>
<string name="activity">Aktivita</string>
<string name="array_of_elements">Pole %d prvků. Aktuální hodnota:</string>
<string name="array_of_elements">Pole %1$d prvků. Aktuální hodnota:</string>
<string name="eatingsoon">Před jídlem</string>
<string name="el_lang">Greek</string>
<string name="initializing">Inicializuji ...</string>
@ -464,7 +464,7 @@
<string name="disconnectpumpfor3h">Odpojit pumpu na 3 h</string>
<string name="enableloop">Povolit smyčku</string>
<string name="loopsuspended">Smyčka pozastavena</string>
<string name="loopsuspendedfor" formatted="false">Pozastaveno (%d min)</string>
<string name="loopsuspendedfor">Pozastaveno (%1$d min)</string>
<string name="needwhitelisting">%s potřebuje vypnout optimalizace baterie pro optimální výkon</string>
<string name="resume">Uvolnit</string>
<string name="suspendloopfor10h">Pozastavit smyčku na 10 h</string>
@ -482,7 +482,7 @@
<string name="configbuilder_insulin">Inzulín</string>
<string name="fastactinginsulin">Rychlý inzulín</string>
<string name="insulin_shortname">INZ</string>
<string name="loopsuperbolusfor">Superbolus (%d m)</string>
<string name="loopsuperbolusfor">Superbolus (%1$d m)</string>
<string name="treatments_wizard_bgtrend_label">15min trend</string>
<string name="treatments_wizard_cob_label">COB</string>
<string name="superbolus">Superbolus</string>
@ -612,7 +612,7 @@
<string name="startingbolus">Spouštím bolus</string>
<string name="ultrafastactinginsulincomment">Fiasp</string>
<string name="ultrarapid_oref">Ultra rychlý - Oref</string>
<string name="waitingforestimatedbolusend" formatted="false">Čekání na konec bolusu. Zbývá %d sek.</string>
<string name="waitingforestimatedbolusend">Čekání na konec bolusu. Zbývá %1$d sek.</string>
<string name="objectives_7_objective">Povolit další funkce pro běžné používání jako SMB</string>
<string name="openapsama_max_daily_safety_multiplier_summary">Výchozí hodnota: 3 Toto je klíčová hodnota zabezpečení. Říká, že maximánlní nastavitelný bazál je trojnásobkem maximálního denního bazálu. Patrně to nebudete muset měnit, případně si přečtete o tématu \"3x max denní; 4x aktuální\"</string>
<string name="openapsama_current_basal_safety_multiplier_summary">Výchozí hodnota: 4 Toto je druhá klíčová hodnota. Říká, že maximální hodnota dočasného bazálu nikdy nebude větší, než čtyřnásobek aktuálního bazálu. Je to proto, aby se lidé nedostali do hodnot nebezpečných bazálu dříve, než pochpí jak OpenAPS pracuje. Znovy vychozí hodnota je 4 a většina lidí ji nidky nebude muset změnit. Pokud nestačí, obvykle je problém někde jinde.</string>
@ -678,7 +678,7 @@
<string name="combo_refresh">Obnovit</string>
<string name="combo_pump_state_label">Stav</string>
<string name="combo_pump_activity_label">Aktivita</string>
<string name="combo_no_pump_connection" formatted="false">Žádné spojení %d min</string>
<string name="combo_no_pump_connection">Žádné spojení %1$d min</string>
<string name="combo_tbr_remaining">%1$d%% (%2$d min zbývá)</string>
<string name="combo_pump_state_initializing">Inicializace</string>
<string name="combo_pump_state_suspended_due_to_error">Vypnuto díky chybě</string>
@ -857,9 +857,9 @@
<string name="hypo_target">Cílová glykémie při hypoglykémii</string>
<string name="shortminute">m</string>
<string name="shorthour">h</string>
<string name="objectivenotstarted">Výukový cíl %d nespuštěn</string>
<string name="objectivenotstarted">Výukový cíl %1$d nespuštěn</string>
<string name="fastactinginsulincomment">Novorapid, Novolog, Humalog</string>
<string name="objectivenotfinished">Výukový cíl %d nedokončen</string>
<string name="objectivenotfinished">Výukový cíl %1$d nedokončen</string>
<string name="pumpisnottempbasalcapable">Pumpa nepodporuje dočasné bazály</string>
<string name="novalidbasalrate">Z pumpy nepřečten žádný platný bazál</string>
<string name="closedmodedisabledinpreferences">Uzavřená smyčka zakázána v nastavení</string>
@ -887,8 +887,8 @@
<string name="smbnotallowedinopenloopmode">SBM není povoleno v otevřené smyčce</string>
<string name="food_short">Jídlo</string>
<string name="reset">reset</string>
<string name="waitingfortimesynchronization">Čekání na synchronizaci času (%d s)</string>
<string name="loopdisconnectedfor">Odpojeno (%d m)</string>
<string name="waitingfortimesynchronization">Čekání na synchronizaci času (%1$d s)</string>
<string name="loopdisconnectedfor">Odpojeno (%1$d m)</string>
<string name="automatic_careportal_events">Automatické vkládání péče</string>
<string name="automatically_upload_insulin_cannula_and_battery_changes_to_nightscout">Automaticky vloží výměnu inzulínu, setu, baterie a alarmů pumpy do NS</string>
<string name="openapssmb_maxiob_title">Maximální celkové IOB, které OpenAPS nemůže překročit [U]</string>

View file

@ -272,7 +272,7 @@
<string name="button2">Button 2</string>
<string name="button3">Button 3</string>
<string name="configbuilder">Konfiguration</string>
<string name="minago">vor %d min</string>
<string name="minago">vor %1$d min</string>
<string name="actions_shortname">AKT</string>
<string name="wear_shortname">WEAR</string>
<string name="virtualpump_shortname">VP</string>
@ -356,7 +356,7 @@
<string name="virtualpump_uploadstatus_title">Status zu Nightscout hochladen</string>
<string name="superbolus">Superbolus</string>
<string name="suspendloopfor10h">Pausiere Loop für 10 h</string>
<string name="array_of_elements">Insgesamt %d Einträge. Aktueller Wert:</string>
<string name="array_of_elements">Insgesamt %1$d Einträge. Aktueller Wert:</string>
<string name="careportal_insulinage_label_short">IAGE</string>
<string name="careportal_pbage_label">Batteriealter</string>
<string name="careportal_pump_label">PUMP</string>
@ -715,9 +715,9 @@
<string name="mute">Alarm stoppen</string>
<string name="bolusstopped">Bolus gestoppt</string>
<string name="bolusstopping">Bolus wird gestoppt</string>
<string formatted="false" name="basalprofilenotaligned">Basalraten beginnen nicht zur vollen Stunde: %s</string>
<string formatted="false" name="zerovalueinprofile">Ungültiges Profil: %s</string>
<string formatted="false" name="hoursago">vor %.1f h</string>
<string name="basalprofilenotaligned">Basalraten beginnen nicht zur vollen Stunde: %1$s</string>
<string name="zerovalueinprofile">Ungültiges Profil: %1$s</string>
<string name="hoursago">vor %1$.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_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>
@ -729,7 +729,7 @@
<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="waitingfortimesynchronization">Warte auf Zeitsynchronisierung (%1$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 Basalraten, um eine schnellere Wirkung zu erreichen.</string>
@ -784,8 +784,8 @@
<string name="firstcarbsincrement">Erste KH-Erhöhung</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="objectivenotstarted">Zielsetzung %1$d nicht gestartet.</string>
<string name="objectivenotfinished">Zielsetzung %1$d nicht abgeschlossen.</string>
<string name="do_not_bolus_record_only">Bolus nur erfassen</string>
<string name="bolusrecordedonly">Bolus wird nur erfasst.</string>
</resources>

View file

@ -244,7 +244,7 @@
<string name="danar_glucose">γλυκόζη</string>
<string name="danar_carbohydrate">υδατάνθρακες</string>
<string name="danar_alarm">συναγερμός</string>
<string name="danar_totaluploaded" formatted="false">"Σύνολο %d εγγραφών φορτώθηκαν "</string>
<string name="danar_totaluploaded">"Σύνολο %1$d εγγραφών φορτώθηκαν "</string>
<string name="danar_sbolus">S bolus</string>
<string name="danar_history_alarm">Συναγερμοί</string>
<string name="danar_history_basalhours">Ώρες Βασικού</string>
@ -255,7 +255,7 @@
<string name="danar_history_glucose">Γλυκόζη</string>
<string name="danar_history_refill">Ξαναγέμισμα</string>
<string name="danar_history_syspend">Κλείσιμο</string>
<string name="danar_history_connectingfor" formatted="false">Σύνδεση με %d s</string>
<string name="danar_history_connectingfor">Σύνδεση με %1$d s</string>
<string name="danar_password_title">Κωδικός αντλίας</string>
<string name="wrongpumppassword">Λάθος κωδικός αντλίας!</string>
<string name="pumpbusy">Αντλία απασχολημένη</string>
@ -357,7 +357,7 @@
<string name="openapsama">OpenAPS AMA</string>
<string name="short_avgdelta">Βραχυπρόθεσμος Μέσος Όρος</string>
<string name="long_avgdelta">ΜΑκροπρόθεσμος Μέσος Όρος</string>
<string name="array_of_elements" formatted="false">Πίνακας στοιχείων %d.Τρέχουσα Τιμή</string>
<string name="array_of_elements">Πίνακας στοιχείων %1$d.Τρέχουσα Τιμή</string>
<string name="openapsma_autosensdata_label">Δεδομένα Autosens</string>
<string name="openapsma_scriptdebugdata_label">Πληροφορίες συντονισμού</string>
<string name="openapsama_useautosens">Χρήση τοy AMA autosense</string>
@ -464,8 +464,8 @@
<string name="Glimp">Glimp</string>
<string name="needwhitelisting" formatted="false">Το %s πρέπει να απενεργοποιήσει τη βελτιστοποίηση της μπαταρίας για βέλτιστη απόδοση</string>
<string name="loopsuspended">Κύκλωμα σε παύση</string>
<string name="loopsuspendedfor" formatted="false">Παύση (%d m)</string>
<string name="loopsuperbolusfor" formatted="false">Superbolus (%d m)</string>
<string name="loopsuspendedfor">Παύση (%1$d m)</string>
<string name="loopsuperbolusfor">Superbolus (%1$d m)</string>
<string name="suspendloopfor1h">Κύκλωμα σε παύση για 1h</string>
<string name="suspendloopfor2h">Κύκλωμα σε παύση για 2h</string>
<string name="suspendloopfor3h">Κύκλωμα σε παύση για 3h</string>
@ -605,7 +605,7 @@
<string name="wearcontrol_title">Έλεγχος από ρολόι</string>
<string name="wearcontrol_summary">Ρυθμίστε Στόχους-Προσ. και βάλτε Θεραπείες από το ρολόι</string>
<string name="connectiontimedout">Ο χρόνος σύνδεσης έληξε</string>
<string name="waitingforestimatedbolusend" formatted="false">Περιμένετε το τέλος του bolus. Απομένουν %d sec</string>
<string name="waitingforestimatedbolusend">Περιμένετε το τέλος του bolus. Απομένουν %1$d sec</string>
<string name="processinghistory">Επεξεργασία</string>
<string name="startingbolus">Έναρξη bolus</string>
<string name="executingrightnow">Η εντολή εκτελείται τώρα</string>

View file

@ -11,6 +11,8 @@
<string name="danar_bt_name_title">DanaR dispositivo Bluetooth</string>
<string name="ns_sync_use_absolute_title">Usar siempre valor basal absoluto</string>
<string name="alert_dialog_storage_permission_text">Por favor reinicia el teléfono o AndroidAPS desde ajustes de sistema, sino AndroidAPS no guardará registros (importantes para trazar y verificar que el algoritmo funcione correctamente)</string>
<string name="objectives_objective_label_string">Objetivo:</string>
<string name="objectives_gate_label_string">Meta:</string>
<string name="objectives_button_start">Inicio</string>
<string name="objectives_button_verify">Verificar</string>
<string name="nsprofileview_units_label">Unidades</string>
@ -69,7 +71,7 @@
<string name="objectives">Objetivos</string>
<string name="openapsma">OpenAPS MA</string>
<string name="overview">Sinopsis</string>
<string name="nsprofile">Perfil NS</string>
<string name="profileviewer">Perfil NS</string>
<string name="simpleprofile">Perfil simple</string>
<string name="tempbasal">Basal temporal</string>
<string name="treatments">Tratamientos</string>
@ -81,6 +83,7 @@
<string name="configbuilder_aps">APS</string>
<string name="configbuilder_general">General</string>
<string name="days">días</string>
<string name="objectives_minimalduration">Duración mínima</string>
<string name="constraints">Restricciones</string>
<string name="loop">Loop</string>
<string name="configbuilder_loop">Loop</string>
@ -191,6 +194,7 @@
<string name="connected">Conectado</string>
<string name="disconnected">Desconectado</string>
<string name="danar_pump_settings">Ajustes de la bomba DanaR</string>
<string name="nightscout">Nightscout</string>
<string name="end_user_license_agreement">Acuerdo de licencia de usuario final</string>
<string name="end_user_license_agreement_text">No deben utilizarse para tomar decisiones médicas. NO HAY GARANTÍA PARA EL PROGRAMA, la extensión permitida por la legislación aplicable. Excepto cuando se indique de otra forma por escrito, los tenedores del copyright y / u otras partes proporcionan el programa \"tal cual\" sin garantía de ningún tipo, ya sea expresa o implícita, incluyendo, pero no limitado a, las garantías implícitas de COMERCIALIZACIÓN E IDONEIDAD PARA UN FIN DETERMINADO . TODO EL RIESGO EN CUANTO A LA CALIDAD Y RENDIMIENTO DEL PROGRAMA ES CON USTED. SI EL PROGRAMA TIENE UN ERROR, asume el coste de cualquier servicio, reparación o corrección.</string>
<string name="end_user_license_agreement_i_understand">Entiendo y acepto</string>
@ -217,7 +221,7 @@
<string name="waitingforpumpresult">Esperando resultado</string>
<string name="smscommunicator_allowednumbers">Números de teléfono permitidos</string>
<string name="smscommunicator_allowednumbers_summary">XXXXXXXXXX +; + YYYYYYYYYY</string>
<string name="smscommunicator_bolusreplywithcode" >Para entregar bolo %1$.2fU responder con código %2$s</string>
<string name="smscommunicator_bolusreplywithcode" formatted="false" >Para entregar bolo %.2fU responder con código %s</string>
<string name="smscommunicator_bolusfailed">Bolo falló</string>
<string name="bolusdelivered" formatted="false">Bolo %.2fU entregado con éxito</string>
<string name="smscommunicator_bolusdelivered">Bolo %.2fU enviado correctamente</string>
@ -243,7 +247,7 @@
<string name="danar_glucose">glucosa</string>
<string name="danar_carbohydrate">carbohidratos</string>
<string name="danar_alarm">alarma</string>
<string formatted="false" name="danar_totaluploaded">Total %d registros subidos</string>
<string name="danar_totaluploaded">Total %1$d registros subidos</string>
<string name="danar_sbolus">S bolo</string>
<string name="danar_history_alarm">alarmas</string>
<string name="danar_history_basalhours">Basal Horas</string>
@ -254,7 +258,7 @@
<string name="danar_history_glucose">Glucosa</string>
<string name="danar_history_refill">Rellenar</string>
<string name="danar_history_syspend">Suspender</string>
<string formatted="false" name="danar_history_connectingfor">Conexión de %d s</string>
<string name="danar_history_connectingfor">Conexión de %1$d s</string>
<string name="danar_password_title">Contraseña de la bomba</string>
<string name="wrongpumppassword">Contraseña de la bomba incorrecta!</string>
<string name="pumpbusy">Bomba ocupada</string>
@ -269,7 +273,7 @@
<string name="objectives_0_objective">Configuración de visualización y monitoreo, y el análisis de los basales y ratios</string>
<string name="objectives_0_gate">Comprobar que los datos de BG están disponibles en Nightscout, y que los datos de la bomba de insulina se están subiendo</string>
<string name="objectives_1_objective">Empezar con bucle abierto</string>
<string name="objectives_1_gate">Ejecutar en modo de Loop abierto durante unos días, y aceptar manualmente las basales temporales. Set up and use temporary and default temporary targets (e.g. for activity or hypo treatment carbs)</string>
<string name="objectives_1_gate">Ejecutar en modo de Loop abierto durante unos días, y aceptar manualmente las basales temporales</string>
<string name="objectives_2_objective">Entender el Loop abierto, incluidas las recomendaciones de basales temporales</string>
<string name="objectives_2_gate">Sobre la base de esa experiencia, decidir valores de máximo basal, y ajustar la bomba y preferencias</string>
<string name="objectives_3_objective">Iniciar el bucle cerrado con suspensión con baja glucosa</string>
@ -286,7 +290,7 @@
<string name="smscommunicator_loophasbeenenabled">Loop se ha activado</string>
<string name="smscommunicator_loopisdisabled">Loop inactivo</string>
<string name="smscommunicator_loopisenabled">loop activo</string>
<string name="valueoutofrange" formatted="false">Valor %s fuera de limites</string>
<string name="valueoutofrange">Valor %1$s fuera de limites</string>
<string name="overview_editquickwizard_buttontext">Botón Texto:</string>
<string name="overview_editquickwizard_carbs">Carbs:</string>
<string name="overview_editquickwizard_valid">Validar:</string>
@ -296,7 +300,7 @@
<string name="quickwizard">Asistente</string>
<string name="quickwizardsettings">Asistente configuración</string>
<string name="smscommunicator_remotebasalnotallowed">No permitidos ajustes basales remotos</string>
<string name="smscommunicator_basalreplywithcode" >Para iniciar basal %1$.2fU/h responder con código %2$s</string>
<string name="smscommunicator_basalreplywithcode">Para iniciar basal %1$.2fU/h responder con código %2$s</string>
<string name="smscommunicator_tempbasalset">Basal temporal %1$.2fU/h para %2$d min iniciada correctamente</string>
<string name="smscommunicator_tempbasalfailed">Fallo inicio basal temporal</string>
<string name="smscommunicator_basalstopreplywithcode" formatted="false">Para parar basal temporal responder con código %s</string>
@ -330,10 +334,10 @@
<string name="sv_lang">Sueco</string>
<string name="openapsma_maxbasal_title">Max U/h para el perfil base</string>
<string name="openapsma_maxiob_title">"Max IOB basal OpenAPs puede emitir "</string>
<string name="smscommunicator_calibrationreplywithcode">Para enviar calibracion %1$.2f responder con código %2$s</string>
<string name="smscommunicator_calibrationreplywithcode" formatted="false">Para enviar calibración %.2f responder con código %s</string>
<string name="bolusrequested" formatted="false">Entregaré %.2fU</string>
<string name="danarprofile_dia_summary">Duración de acitividad de insulina</string>
<string name="valuelimitedto">%1$.2f limitado a %2$.2f</string>
<string name="valuelimitedto" formatted="false">%.2f limitado a %.2f</string>
<string name="smscommunicator_remotecommandnotallowed">no permitido el mando remoto</string>
<string name="smscommunicator_suspendreplywithcode">Para cancelar loop por %1$d minutos responde con código %2$s</string>
<string name="primefill">Rellenar/Llenar</string>
@ -373,7 +377,7 @@
<string name="openapsama">OpenAPS AMA</string>
<string name="short_avgdelta">Delta media corta</string>
<string name="long_avgdelta">Delta media larga</string>
<string name="array_of_elements">Matriz de %d elementos. Valor actual:</string>
<string name="array_of_elements">Matriz de %1$d elementos. Valor actual:</string>
<string name="openapsma_autosensdata_label">Datos Autosens</string>
<string name="openapsma_scriptdebugdata_label">Script debug</string>
<string name="openapsama_useautosens">Usar característica AMA autosens</string>
@ -416,13 +420,13 @@
<string name="always_use_shortavg">Usa siempre delta media corto en vez de delta simple</string>
<string name="always_use_shortavg_summary">Recomendado si los datos de origen no filtrados como xDrip son inestables.</string>
<string name="advancedsettings_title">Ajustes avancados</string>
<string name="danar_model">Modelo: %1$02X Protocolo: %2$02X Codigo: %3$02X</string>
<string name="danar_model" formatted="false">Modelo: %02X Protocolo: %02X Codigo: %02X</string>
<string name="profile">Perfiles</string>
<string name="openapsama_max_daily_safety_multiplier_summary">"Valor por defecte: 3 Esto es valor de seguridad establecido pos OpenAPS. Limita tu base al máximo de x3 de tu base máxima. No necesitas cambiar esto, pero debes tener en cuenta, que esto se esta discutiento sobre „3 x max diario; 4x actual“ pro razones de seguridad. "</string>
<string name="openapsama_current_basal_safety_multiplier_summary">"Ajuste pro defecto: 4 Esto es la otra mitad de los ajustes de seguridad de OpenAPS y la otra mitad de \"3x max diario, 4x actual\". Esto significa, que tu base no puede ser mas alta que el numero que multiplica tu base. Esto es para evitar que las personas se encuentren en situaciones peligrosas por aumentar mucho la base sin entender el algoritmo del sistema. El ajuste por defecto es x4. La mayoría de las personas nunca tendra que cambiar estos ajustes, si no debe modificar otros ajustes en la terapia. "</string>
<string name="openapsama_autosens_max_summary">"Ajuste por defecto: 1.2\nEsto es un multilicador para autosens (y pronto autotune) para poner un 20% limite máximo a la cota de autosens ratio, la que determina cuantos ajustes autosens puede hacer a la base, a cuanto puede ajustar ISF y a cuanto puede bajar el objective de glucosa. "</string>
<string name="openapsama_autosens_min_summary">Ajuste pro defecto: 0.7\nEl otro lade de limitaciones de seguridad de autosens, limitando a cuanto puede bajar la base y a cuanto puede subir ISF y BG objectivos.</string>
<string name="openapsama_autosens_adjusttargets_summary">Ajuste por defecto: true\nEsto se usa para permitir autosens a ajustar objectivos BG ademas de ISF y bases.</string>
<string name="openapsama_autosens_adjusttargets_summary">Ajuste por defecto: true\nEsto se usa para permitir autosens a ajustar objectivos BG además de ISF y bases.</string>
<string name="openapsama_bolussnooze_dia_divisor_summary">Ajuste por defecto: 2 \nDormir bolo es iniciado después de proveder un bolo para comida, así el loop no interactuará con low temps cuando acabas de comer. El ajuste pro defecto es 2; quiere decir con el DIA de 3 h el bolo será dormido por fases por 1.5 h (3DIA/2).</string>
<string name="openapsama_min_5m_carbimpact_summary">"Ajustes pro defecto: 3.0\nEsto es un ajuste pro defecto para la absorción de carbohidratos pro 5 minutos. Por defecto se espera 3mg/dl/5min. Esto afecta la velocidad de reducción de COB y cuanta absorción se usa para calcular el BG futuro previsto, si la glucosa diminua mas de lo previsto o aumenta mas de lo previsto. "</string>
<string name="openapsama_link_to_preferncejson_doc_txt">"Atención!\nNormalment no tienes que editar los valores a continuación. Por favor PINCHA AQUI y LEE el texto y PROCURA ENTENDER antes de cambiar alguno de los valores. "</string>
@ -431,6 +435,7 @@
<string name="copied_to_clipboard">Copiado al clipboard</string>
<string name="nav_show_logcat">mostrar log</string>
<string name="overview_calibration">Calibración</string>
<string name="overview_calibration_bg_label">Calibración</string>
<string name="send_calibration" formatted="false">Mandar calibración %.1f a xDrip?</string>
<string name="xdripnotinstalled">xDrip+ no instalado</string>
<string name="calibrationsent">Calibración mandada a xDrip</string>
@ -482,10 +487,12 @@
<string name="adult">Adulto</string>
<string name="patientage_summary">Por favor elige edad del paciente para emplear limites de seguridad</string>
<string name="Glimp">Glimp</string>
<string name="needwhitelisting" formatted="false">%s necesita optimización de bateria whitelisting para funcionar bien</string>
<string name="batteryoptimalizationerror">Aparato parece no soportar optimización de bateria whitelisting!</string>
<string name="pleaseallowpermission">Por favor conceda permiso</string>
<string name="needwhitelisting">%1$s necesita optimización de bateria whitelisting para funcionar bien</string>
<string name="loopsuspended">Loop desactivado</string>
<string name="loopsuspendedfor" formatted="false">desactivado (%d m)</string>
<string name="loopsuperbolusfor" formatted="false">Superbolus (%d m)</string>
<string name="loopsuspendedfor">desactivado (%1$d m)</string>
<string name="loopsuperbolusfor">Superbolus (%1$d m)</string>
<string name="suspendloopfor1h">Desactivar loop por 1h</string>
<string name="suspendloopfor2h">Desactivar loop por 2h</string>
<string name="suspendloopfor3h">Desactivar loop por 3h</string>
@ -510,6 +517,7 @@
<string name="fastactinginsulincomment">Novorapid, Novolog, Humalog</string>
<string name="ultrafastactinginsulincomment">Fiasp</string>
<string name="insulin_shortname">INS</string>
<string name="fastactinginsulinprolonged">Insulina acción rápida prolongada</string>
<string name="enablesuperbolus">activar superbolo en wizard</string>
<string name="enablesuperbolus_summary">Activar función superbolo en wizard. No lo actives hasta que hayas aprendido lo que realmente hace. PUEDE CAUSAR SOBREDOSIS DE INSULINA usandolo sin precaución!</string>
<string name="iob">IOB</string>
@ -569,6 +577,8 @@
<string name="uploader_short">UPLD</string>
<string name="basal_short">BAS</string>
<string name="virtualpump_extendedbolus_label_short">EXT</string>
<string name="lock_screen">Bloqueo de pantalla</string>
<string name="lock_screen_short">Bloqueo</string>
<string name="sensitivity_warning">Al activar autosens recuerda editar todos carbohidratos comidos. Si no, sensibilidad será calculada incorrectamente !!!</string>
<string name="sensitivityweightedaverage">Sensitivity WeightedAverage</string>
<string name="mdtp_ok">OK</string>
@ -588,7 +598,7 @@
<string name="free_peak_oref">Free-Peak Oref</string>
<string name="rapid_acting_oref">Rapid-Acting Oref</string>
<string name="ultrarapid_oref">Ultra-Rapid Oref</string>
<string name="dia_too_short">DIA de %1$f demasiado corto - usando %2$f!</string>
<string name="dia_too_short" formatted="false">DIA de %f demasiado corto - usando %f!</string>
<string name="activate_profile">ACTIVAR PERFIL</string>
<string name="date">Fecha</string>
<string name="invalid">INVALIDO</string>
@ -632,7 +642,7 @@
<string name="shortprotein">Pr</string>
<string name="shortfat">Grasa</string>
<string name="active"><![CDATA[<Active>]]></string>
<string name="waitingforestimatedbolusend" formatted="false">Esperando terminar bolo. Faltan %d seg.</string>
<string name="waitingforestimatedbolusend">Esperando terminar bolo. Faltan %1$d seg.</string>
<string name="processinghistory">Processando</string>
<string name="startingbolus">"Iniciando emisión bolo "</string>
<string name="executingrightnow">Orden se esta efectuando en este momento</string>
@ -675,27 +685,27 @@
<string name="closedmodeenabled">Modo cerrado activado</string>
<string name="maxiobset">Máximo IOB puesto correctamente</string>
<string name="hasbgdata">BG adquirible del origen seleccionado</string>
<string name="basalprofilenotaligned" formatted="false">Valores base no asignados a las horas: %s</string>
<string name="zerovalueinprofile" formatted="false">Perfil invalido: %s</string>
<string name="basalprofilenotaligned">Valores base no asignados a las horas: %1$s</string>
<string name="zerovalueinprofile">Perfil invalido: %1$s</string>
<string name="combo_programming_bolus">Programando bomba para emitir bolo</string>
<string name="combo_refresh">Actualizar</string>
<string name="combo_pump_state_label">Estado</string>
<string name="combo_pump_activity_label">Actividad</string>
<string name="combo_no_pump_connection" formatted="false">Ninguna conexión por %d min</string>
<string name="combo_no_pump_connection">Ninguna conexión por %1$d min</string>
<string name="combo_tbr_remaining">%1$d%% (%2$d min restan)</string>
<string name="combo_pump_state_suspended_due_to_error">Apagado por error</string>
<string name="combo_pump_state_suspended_by_user">Apagado por usario</string>
<string name="combo_pump_state_running">Funcionando</string>
<string name="combo_pump_action_cancelling_tbr">Cancelando TBR</string>
<string name="combo_pump_action_setting_tbr">Poniendo TBR (%1$d%% / %2$d min)</string>
<string name="combo_pump_action_bolusing" formatted="false">Emitiendo bolo (%.1f U)</string>
<string name="combo_pump_action_bolusing">Emitiendo bolo (%1$.1f U)</string>
<string name="combo_pump_action_refreshing">Actualizando</string>
<string name="combo_pump_unsupported_operation">"Acción no disponible en la bomba "</string>
<string name="combo_low_suspend_forced_notification">Uso inseguro: bolo prolongado o multiwave activo. Modo Loop ha sido puesto a baja emisión para solo 6 horas. Solo bolo normal se puede emitir en modo loop.</string>
<string name="combo_force_disabled_notification">"Uso inseguro: la bomba usa base diferente a la primera. El loop ha sido apagado. Elige primero perfil en la bomba y acualiza. "</string>
<string name="bolus_frequency_exceeded">Un bolo de mismo valor ha sido dado durante el pasado minuto. Para evitar bolos dobles y asegurarse contra bugs esto no es permitido.</string>
<string name="combo_pump_connected_now">Ahora</string>
<string name="combo_activity_reading_pump_history">Leiendo historia bomba</string>
<string name="combo_activity_reading_pump_history">Leyendo historia bomba</string>
<string name="combo_activity_setting_basal_profile">" Activando perfil base "</string>
<string name="combo_pump_cartridge_low_warrning">"Nivel del deposito bajo "</string>
<string name="combo_pump_battery_low_warrning">Bateria casi agotada</string>
@ -708,7 +718,9 @@
<string name="combo_warning">Alerta</string>
<string name="combo_pump_tbr_cancelled_warrning">TBR cancelada, advertencia acceptada</string>
<string name="combo_error_no_bolus_delivered">Emisión del bolo fallada. Ningún bolo se ha emitido. Para asegurarse, por favor controle la bomba para evitar bolo doble. Para evitar bugs no se reinician bolos automaticamente.</string>
<string name="combo_error_partial_bolus_delivered">"Solo %1$.2f U del bolo mandado de %2$.2f U ha sido emitido por causa de un error. Por favorn controla la bomba para confirmar y toma acciones apropiadas. "</string>
<string name="combo_error_partial_bolus_delivered" formatted="false">"Solo %.2f U del bolo mandado de %.2f U ha sido emitido por causa de un error. Por favorn controla la bomba para confirmar y toma acciones apropiadas. "</string>
<string name="combo_error_bolus_verification_failed">"Fallo de emitir bolo y de controlar historical de la bomba.Por favor controla manualmente y crea un record en Careportal si el bolo ha sido emitido. "</string>
<string name="combo_error_bolus_recovery_progress">Reestablecido conexión fallada.</string>
<string name="combo_reservoir_level_insufficient_for_bolus">"No hay suficiente insulina en el deposito para emitir bolo. "</string>
<string name="extendedbolusdeliveryerror">"Error al emitir bolo prolongado. "</string>
<string name="pump_unreachable_threshold">Bomba no alcanzable durante [min]</string>
@ -719,7 +731,7 @@
<string name="combo_activity_checking_pump_state">Actualizando estado bomba</string>
<string name="combo_high_temp_rejected_due_to_pump_history_changes">Rechazando temporal alta ya que el calculo no consideró los cambios recientes en el historial de la bomba</string>
<string name="combo_error_updating_treatment_record">El bolus se administró con éxito, pero no se pudo agregar la entrada al tratamiento. Esto puede suceder si se administran dos bolos pequeños del mismo tamaño en los últimos dos minutos. Verifique el historial de la bomba y las entradas de tratamiento y use Careportal para agregar entradas faltantes. Asegúrese de no agregar ninguna entrada para el mismo minuto exacto y la misma cantidad.</string>
<string name="combo_bolus_rejected_due_to_pump_history_change">El historial de la bomba ha cambiado después de que se realizó el cálculo del bolo. El bolo no fue entregado. Por favor, vuelva a calcular si aún se necesita un bolo.</string>
<string name="combo_bolus_rejected_due_to_pump_history_change">El historial de la bomba ha cambiado después de que se realizó el cálculo del bolo. El bolo no fue entregado. Por favor, vuelva a calcular si aún se necesita un bolo. Si se requiere la misma cantidad de bolo, espere dos minutos ya que los bolos con la misma cantidad se bloquean cuando se solicita con menos de dos minutos entre ellos por seguridad (independientemente de si se administraron o no).</string>
<string name="combo_actvity_reading_basal_profile">Leyendo perfil basal</string>
<string name="start_hypo_tt">Inicio TT Hipo</string>
<string name="no_action_selected">Ninguna acción seleccionada, nada sucederá</string>
@ -728,10 +740,11 @@
<string name="overview_show_iob">Insulina activa IOB</string>
<string name="overview_show_deviations">Desviaciones</string>
<string name="overview_show_sensitivity">Sensibilidad</string>
<string name="ns_autobackfill">Autorelleno de lecturas perdidas de BG</string>
<string name="bolusrecordedonly">El Bolo solo será anotado</string>
<string name="category">Categoría</string>
<string name="subcategory">Subcategoría</string>
<string name="do_not_bolus_record_only">No administrar Bolo, solo anotar</string>
<string name="don_t_bolus_record_only">No administrar Bolo, solo anotar</string>
<string name="insight_min">min</string>
<string name="temptargetshort">TT</string>
<string name="start_activity_tt">Inicio TT Actividad</string>
@ -763,7 +776,7 @@
<string name="automatically_connect_when">Conectar automáticamente cuando se abre AndroidAPS, antes de solicitar ningún comando de bomba, para reducir el retraso de la conexión</string>
<string name="statistics">Estadísticas</string>
<string name="insight_keep_alive_status">Estado de Mantener-Activo</string>
<string name="insight_keepalive_format_string">%1$ds expira en %2$s</string>
<string name="insight_keepalive_format_string">%ds expira en %s</string>
<string name="resistantadult">Adulto resistente a la insulina</string>
<string name="enablesmbaftercarbs_summary">Habilitar SMB durante 6 h después de Carbohidratos, incluso con 0 COB. Solo posible con fuente BG con buen filtrado de datos como G5</string>
<string name="enablesmbalways_summary">Habilitar SMB siempre de forma independiente a los Bolos. Solo posible con fuente BG con buen filtrado de datos como G5</string>
@ -791,10 +804,14 @@
<string name="insight_companion_app_not_installed">Companion app parece no instalada!</string>
<string name="insight_not_connected_to_companion_app">¡La aplicación Companion no parece estar instalada!</string>
<string name="insight_stay_always_connected">Permanecer siempre conectado</string>
<string name="insight_use_real_tbr_cancels">Usar cancelación Basal Temporal (TBR) real</string>
<string name="insight_actually_cancel_tbr_summary">Actualmente, cancelar una Basal Temporal TBR (crea una alarma de bomba) en su lugar establecer el 90% durante 1 minuto</string>
<string name="alert_w31">Advertencia W31: Cartucho insulina bajo</string>
<string name="alert_w32">Advertencia W32: Bateria baja</string>
<string name="alert_w33">Advertencia W33: Fecha/hora inválida</string>
<string name="alert_w34">Advertencia W34: Final de garantía</string>
<string name="alert_w36">Advertencia W36: Basal Temporal cancelada</string>
<string name="alert_w38">Warning W38: Bolo cancelado</string>
<string name="alert_w39">Warning W39: Adevertencia tiempo de prestamo</string>
<string name="loop_smbsetbypump_label">SMB administrado por bomba</string>
<string name="combo_pump_state_initializing">Inicializando</string>
@ -832,14 +849,14 @@
<string name="hypo_target">Objetivo Hipo</string>
<string name="shortminute">m</string>
<string name="shorthour">h</string>
<string name="objectivenotstarted">Objetivo %d no iniciado</string>
<string name="objectivenotfinished">Objetivo %d no finalizado</string>
<string name="objectivenotstarted">Objetivo %1$d no iniciado</string>
<string name="objectivenotfinished">Objetivo %1$d no finalizado</string>
<string name="pumpisnottempbasalcapable">La bomba no tiene capacidad basal temporal</string>
<string name="novalidbasalrate">Tasa Basal no valida en la bomba</string>
<string name="closedmodedisabledinpreferences">Loop cerrado desabilitado en preferencias</string>
<string name="autosensdisabledinpreferences">Autosens desabilitado en preferencias</string>
<string name="smbdisabledinpreferences">SMB desabilitado en preferencias</string>
<string name="limitingbasalratio">limitando max basal rate a %1$.2f U/h debido a %2$s</string>
<string name="limitingbasalratio">limitando max basal rate a %.2f U/h debido a %s</string>
<string name="pumplimit">Limite de la bomba</string>
<string name="itmustbepositivevalue">Tiene que ser un valor positivo</string>
<string name="maxbasalmultiplier">Multiplicador basal máximo</string>
@ -847,10 +864,10 @@
<string name="smb_frequency_exceeded">Un Bolo entregado en los últimos 3 minutos</string>
<string name="basal_set_correctly">Basal establecida correctamente</string>
<string name="limitingpercentrate">Limitando porcentaje máximo de tasa a %1$d%% debido a %2$s</string>
<string name="limitingbolus">"Limitando el bolo a %1$.1f U debido a %2$s "</string>
<string name="limitingmaxiob">Limitando max IOB to %1$.1f U debido a %2$s</string>
<string name="limitingbolus">"Limitando el bolo a %.1f U debido a %s "</string>
<string name="limitingmaxiob">Limitando max IOB to %.1f U debido a %s</string>
<string name="limitingcarbs">Limitando carbs to %1$d g debido a %2$s</string>
<string name="limitingiob">Limitando IOB to %1$.1f U debido a %2$s</string>
<string name="limitingiob">Limitando IOB to %.1f U debido a %s</string>
<string name="maxvalueinpreferences">Valor máximo en preferencias</string>
<string name="hardlimit">Limite estricto</string>
<string name="unsafeusage">uso no seguro</string>
@ -861,8 +878,8 @@
<string name="smbnotallowedinopenloopmode">"SMB no permitido en modo de Loop abierto "</string>
<string name="food_short">Comida</string>
<string name="reset">reset</string>
<string name="waitingfortimesynchronization">Esperando para sincronización de tiempo (%d sec)</string>
<string name="loopdisconnectedfor">Desconectado (%d m)</string>
<string name="waitingfortimesynchronization">Esperando para sincronización de tiempo (%1$d sec)</string>
<string name="loopdisconnectedfor">Desconectado (%1$d m)</string>
<string name="automatic_careportal_events">Eventos Careportal automáticos</string>
<string name="automatically_upload_insulin_cannula_and_battery_changes_to_nightscout">"Subi automáticamente la insulina, la cánula y los cambios de batería y las alarmas de bombeo a Nightscout "</string>
<string name="openapssmb_maxiob_summary">Este valor se denomina IOB máx. En el contexto de OpenAPS. OpenAPS no agregará más insulina si el IOB actual es mayor que este valor.</string>
@ -923,4 +940,133 @@
<string name="wear_display_settings">Mostrar configuración</string>
<string name="wear_general_settings">Configuración general</string>
<string name="ro_lang">Rumano</string>
<string name="description_actions">Botones para acceder rápidamente a las funciones comunes</string>
<string name="description_careportal">Ingrese entradas de libro de registro avanzadas.</string>
<string name="description_config_builder">Utilizado para configurar los plugins activos</string>
<string name="description_objectives">Programa de aprendizaje</string>
<string name="description_food">Muestra los ajustes preestablecidos de alimentos definidos en Nightscout</string>
<string name="description_insulin_rapid">Ajuste de insulina para Humalog y NovoRapid / NovoLog</string>
<string name="description_insulin_ultra_rapid">Ajuste de insulina para Fiasp</string>
<string name="description_insulin_free_peak">Le permite definir el pico de actividad de la insulina y solo debe ser utilizado por usuarios avanzados</string>
<string name="description_loop">Active o desactive la implementación que desencadena el Loop.</string>
<string name="description_ns_client">Sincroniza sus datos con Nightscout</string>
<string name="description_ma">Estado del algoritmo en 2016</string>
<string name="description_ama">Estado del algoritmo en 2017</string>
<string name="description_smb">Algoritmo más reciente para usuarios avanzados</string>
<string name="description_overview">Muestra el estado actual de su Loop y botones para las acciones más comunes</string>
<string name="description_persistent_notification">Muestra una notificación ongoing con una breve descripción de lo que está haciendo su Loop</string>
<string name="description_profile_local">Define un perfil que está disponible fuera de línea.</string>
<string name="description_profile_nightscout">Proporciona el perfil que ha definido en Nightscout</string>
<string name="description_profile_simple">Define un perfil con solo un bloque de tiempo.</string>
<string name="description_pump_combo">Integración de la bomba para las bombas Comcu-Chek Combo, requiere tener Ruffy instalado</string>
<string name="description_pump_dana_r">Integración de bomba para bombas DANA Diabecare R</string>
<string name="description_pump_dana_r_korean">Integración de bomba para bombas domésticas DANA Diabecare R</string>
<string name="description_pump_dana_r_v2">Integración de bomba para bombas DANA Diabecare R con firmware actualizado</string>
<string name="description_pump_dana_rs">Pump integration for DANA Diabecare RS pumps</string>
<string name="description_pump_insight">Integración de la bomba para las bombas Accu-Chek Insight requiere la instalación de SightRemote</string>
<string name="description_pump_mdi">Integración de bomba para personas que realizan múltiples inyecciones diarias (MDI) para su terapia de diabetes</string>
<string name="description_pump_virtual">Integración de bomba para bombas que aún no tienen ningún controlador (Open Loop)</string>
<string name="description_sensitivity_aaps">"La sensibilidad se calcula de la misma manera que Oref0, pero puede especificar un lapso de tiempo para el pasado. La absorción mínima de carbohidratos se calcula a partir del tiempo máximo de absorción de carbohidratos en las preferencias."</string>
<string name="description_sensitivity_oref0">La sensibilidad se calcula a partir de datos de 24 horas en el pasado y los carbohidratos (si no se absorben) se cortan después del tiempo especificado en las preferencias.</string>
<string name="description_sensitivity_oref1">La sensibilidad se calcula a partir de datos de 8 h en el pasado y los carbohidratos (si no se absorben) se cortan después del tiempo especificado en las preferencias. El complemento también calcula UAM.</string>
<string name="description_sensitivity_weighted_average">La sensibilidad se calcula como un promedio ponderado de las desviaciones. Las desviaciones más nuevas tienen un mayor peso. La absorción mínima de carbohidratos se calcula a partir del tiempo máximo de absorción de carbohidratos de las preferencias. Este algoritmo es el más rápido en los siguientes cambios de sensibilidad.</string>
<string name="description_source_dexcom_g5">Recibe los valores de BG de la aplicación parcheada Dexcom G5.</string>
<string name="description_source_glimp">Recibe los valores de BG de Glimp.</string>
<string name="description_source_mm640g">Recibe los valores de BG del 600SeriesAndroidUploader</string>
<string name="description_source_ns_client">Descarga los datos de BG de Nightscout</string>
<string name="description_source_xdrip">Recibe los valores de BG de xDrip.</string>
<string name="description_treatments">Guarda todos los tratamientos que se hicieron</string>
<string name="description_wear">Monitorice y controle AndroidAPS con su reloj WearOS.</string>
<string name="description_xdrip_status_line">Muestra información sobre tu Loop en tu cara de reloj xDrip.</string>
<string name="description_sms_communicator">Control remoto de AndroidAPS utilizando comandos de SMS.</string>
<string name="nsprofile">Perfil NS</string>
<string name="configbuilder_pump_description">¿Qué bomba te gustaría usar con AndroidAPS?</string>
<string name="configbuilder_treatments_description">¿Qué complemento debería usarse para el tratamiento?</string>
<string name="configbuilder_profile_description">¿Qué perfil debería usar AndroidAPS?</string>
<string name="configbuilder_aps_description">¿Qué algoritmo de APS debería hacer ajustes en la terapia?</string>
<string name="configbuilder_general_description">Estos son algunos complementos generales que pueden serle útiles.</string>
<string name="configbuilder_constraints_description">¿Qué restricciones se aplican?</string>
<string name="configbuilder_loop_description">Use esto para activar la integración de Loop de AndroidAPS.</string>
<string name="configbuilder_bgsource_description">¿De dónde debería obtener AndroidAPS sus datos?</string>
<string name="pl_lang">Polski</string>
<string name="objectives_7_gate">¡Debes leer la wiki y subir a maxIOB para que las SMB funcionen bien! Un buen comienzo es maxIOB = mealbolus promedio + 3 x máximo diario basal</string>
<string name="deletefuturetreatments">Eliminar tratamientos en el futuro</string>
<string name="configbuilder_insulin_description">¿Qué tipo de insulina estás usando?</string>
<string name="configbuilder_sensitivity_description">¿Qué algoritmo de sensibilidad se debe usar?</string>
<string name="sensitivityoref1">Sensibilidad Oref1</string>
<string name="keep_screen_on_title">Mantener la pantalla encendida</string>
<string name="keep_screen_on_summary">Evite que Android apague la pantalla. Consumirá mucha energía cuando no esté enchufado a una toma de corriente.</string>
<string name="poctech_upload">Configuración de carga de Poctech</string>
<string name="maximumbasalvaluereplaced">Valor basal reemplazado por el valor máximo soportado</string>
<string name="do_not_bolus_record_only">No administrar solo anotar</string>
<string name="ns_autobackfill_summary">Autorelleno de valores BG omitidos.</string>
<string name="next_button">Siguiente</string>
<string name="previous_button">Anterior</string>
<string name="nav_setupwizard">"Asistente de configuración "</string>
<string name="setupwizard_finish">TERMINAR</string>
<string name="setupwizard_language_prompt">Elige tu idioma</string>
<string name="key_language">idioma</string>
<string name="ga_lang">Irish</string>
<string name="enable_nsclient">Habilitar NSClient</string>
<string name="welcometosetupwizard">Bienvenido al asistente de configuración. Lo guiará a través del proceso de configuración</string>
<string name="pumpsetup">Configuración de la bomba</string>
<string name="readstatus">Leer estado</string>
<string name="adjustprofileinns">Los cambios deben hacerse en NS</string>
<string name="exitwizard">Omitir asistente de configuración</string>
<string name="setupwizard_loop_description">Presione el botón a continuación para permitir que AndroidAPS sugiera / realice cambios basales</string>
<string name="setupwizard_objectives_description">Presione el botón de abajo para habilitar Objetivos. Mire en la pestaña Objetivos, después de terminar este asistente, para que AndroidAPS sea completamente funcional.</string>
<string name="enableobjectives">Activar objetivos</string>
<string name="apssetup">Configurar el plugin APS</string>
<string name="sensitivitysetup">Configurar el plugin de sensibilidad</string>
<string name="setupwizard_sensitivity_description">El plugin de sensibilidad se usa para la detección de sensibilidad y el cálculo de COB. Para más información, visite:</string>
<string name="nsclientinfotext">NSClient maneja la conexión a Nightscout. Puede omitir esta parte ahora, pero no podrá pasar objetivos hasta que la configure.</string>
<string name="diawarning">Recuerde: los nuevos perfiles de insulina requieren DIA al menos 5 h. DIA 5-6h en el nuevo perfil es igual a DIA 3h en los viejos perfiles de insulina.</string>
<string name="bgsourcesetup">Configurar fuente BG</string>
<string name="setupwizard_profile_description">Por favor seleccione la fuente del perfil. Si el paciente es un niño, debe usar el perfil NS. Si no hay nadie que lo siga en Nightscout, probablemente prefiera el perfil Local. Recuerde que solo está seleccionando el origen del perfil. Para usarlo debes activarlo ejecutando el cambio de Perfil</string>
<string name="setupwizard_aps_description">Seleccione uno de los algoritmos disponibles. Se ordenan desde el más antiguo al más nuevo. Algoritmo más nuevo es generalmente más poderoso y más agresivo. Por lo tanto, si eres un looper nuevo, probablemente comiences con AMA y no con el último. No olvide leer la documentación de OpenAPS y configurarla antes de su uso.</string>
<string name="startobjective">Comience su primer objetivo</string>
<string name="permission">Permisos</string>
<string name="askforpermission">Preguntar por permisos</string>
<string name="needlocationpermission">La aplicación necesita permiso de ubicación para escanear BT</string>
<string name="needstoragepermission">La aplicación necesita permiso de almacenamiento para poder almacenar archivos de registro</string>
<string name="request">"Solicitud "</string>
<string name="insulinsourcesetup">Configurar el complemento de Insulina</string>
<string name="exit">Salir</string>
<string name="danar_useroptions">"Opciones de usuario "</string>
<string name="danar_timedisplay">Formato de tiempo mostrado</string>
<string name="danar_buttonscroll">Botón de desplazamiento</string>
<string name="danar_beep">Beep on button press</string>
<string name="danar_pumpalarm">Alarma</string>
<string name="danar_pumpalarm_sound">Sonido</string>
<string name="danar_pumpalarm_vibrate">Vibrar</string>
<string name="danar_pumpalarm_both">Ambos</string>
<string name="danar_screentimeout">LCD en tiempo [s]</string>
<string name="danar_backlight">Luz de fondo a tiempo [h]</string>
<string name="danar_glucoseunits">Unidades de glucosa</string>
<string name="danar_shutdown">Parada (horas)</string>
<string name="danar_lowreservoir">Depósito bajo (Unidades)</string>
<string name="danar_saveuseroptions">Guardar las opciones en bomba</string>
<string name="option_on">Encendido</string>
<string name="option_off">Apagado</string>
<string name="open_navigation">Abrir navegación</string>
<string name="close_navigation">Cerrar navegación</string>
<string name="nav_plugin_preferences">Preferencias del plugin</string>
<string name="completed_well_done">Completado, bien hecho!</string>
<string name="not_completed_yet">Aún no completado</string>
<string name="time_elapsed">Tiempo transcurrido</string>
<string name="nth_objective">%1$d. Objetivo</string>
<string name="description_source_poctech">Recibe valores de BG de la aplicación Poctech</string>
<string name="high_temptarget_raises_sensitivity_title">Objetivos temporales Altos (high TT) aumentan la sensibilidad</string>
<string name="high_temptarget_raises_sensitivity_summary"><![CDATA[Aumentar la sensibilidad para objetivos temporales >= 100]]></string>
<string name="low_temptarget_lowers_sensitivity_title">Objetivos temporales Bajos (low TT) disminuye la sensibilidad</string>
<string name="low_temptarget_lowers_sensitivity_summary"><![CDATA[Disminuir la sensibilidad para objetivos temporales >= 100]]></string>
<string name="combo_invalid_setup">La configuración de la bomba no válida, verifique la documentación y verifique que el menú Información rápida se llame \"Quick Info\" utilizando el software de configuración 360.</string>
<string name="custom">Personalizar</string>
<string name="largetimedifftitle">"Gran diferencia de tiempo "</string>
<string name="largetimediff">Gran diferencia de tiempo: El tiempo en la bomba está desfasado en más de 1,5 horas. Ajuste la hora manualmente en la bomba y asegúrese de que la lectura del historial de la bomba no cause un comportamiento inesperado. Si es posible, elimine el historial de la bomba antes de cambiar la hora o deshabilite el ciclo cerrado para un DIA después de la última entrada incorrecta del historial, pero como mínimo un DIA a partir de ahora.</string>
<string name="storedsettingsfound">Configuraciones almacenadas encontradas</string>
<string name="allow_hardware_pump_text">Atención: si activa y conecta una bomba de hardware, AndroidAPS copiará las configuraciones basales del perfil a la bomba, sobrescribiendo la tasa basal existente almacenada en la bomba. Asegúrate de tener la configuración basal correcta en AndroidAPS. Si no está seguro o no desea sobrescribir la configuración básica de su bomba, presione cancelar y repita el cambio a la bomba más adelante.</string>
<string name="error_adding_treatment_title">Datos de tratamiento incompletos</string>
<string name="error_adding_treatment_message">o se pudo agregar un tratamiento (insulina: %1$.2f, carbs: %2$d, en: %3$s) a los tratamientos. Verifique y añada manualmente un registro según corresponda.</string>
<string name="generated_ecarbs_note">ECarbs generados con cantidad: %1$dg, duración: %2$dh, demora: %3$dm</string>
</resources>

View file

@ -243,7 +243,7 @@
<string name="danar_glucose">Glucose</string>
<string name="danar_carbohydrate">Glucides</string>
<string name="danar_alarm">Alarme</string>
<string name="danar_totaluploaded" formatted="false">Total %d des enregistrements téléchargés</string>
<string name="danar_totaluploaded">Total %1$d des enregistrements téléchargés</string>
<string name="danar_sbolus">Bolus S</string>
<string name="danar_history_alarm">Alarmes</string>
<string name="danar_history_basalhours">Heures Basal</string>
@ -351,13 +351,13 @@
<string name="MM640g">MM640g</string>
<string name="ongoingnotificaction">Notification En Cours</string>
<string name="old_data">DONNÉES ANCIENNES</string>
<string name="minago" formatted="false">%d min passées</string>
<string name="sms_minago" formatted="false">%dmin passées</string>
<string name="minago">%1$d min passées</string>
<string name="sms_minago">%1$dmin passées</string>
<string name="localprofile">Profil Local</string>
<string name="openapsama">OpenAPS AMA</string>
<string name="short_avgdelta">Courte moyenne delta</string>
<string name="long_avgdelta">Longue moyenne delta</string>
<string name="array_of_elements" formatted="false">Panoplie de %d d\'élements. Valeur réelle</string>
<string name="array_of_elements">Panoplie de %1$d d\'élements. Valeur réelle</string>
<string name="openapsma_autosensdata_label">Données autosens</string>
<string name="openapsma_scriptdebugdata_label">Script de débogage</string>
<string name="openapsama_useautosens">Utiliser la fonction AMA autosens</string>
@ -463,8 +463,8 @@
<string name="Glimp">Glimp</string>
<string name="needwhitelisting">%s a besoin de la liste blanche de l\optimisation batterie pour une bonne performance</string>
<string name="loopsuspended">Loop suspendu</string>
<string name="loopsuspendedfor" formatted="false">Suspendu (%d m)</string>
<string name="loopsuperbolusfor" formatted="false">Superbolus (%d m)</string>
<string name="loopsuspendedfor">Suspendu (%1$d m)</string>
<string name="loopsuperbolusfor">Superbolus (%1$d m)</string>
<string name="suspendloopfor1h">Suspendre Loop pour 1h</string>
<string name="suspendloopfor2h">Suspendre Loop pour 2h</string>
<string name="suspendloopfor3h">Suspendre Loop pour 3h</string>
@ -559,7 +559,7 @@
<string name="careportal_activity_label">ACTIVITÉ et FEEDBACK</string>
<string name="careportal_question">Question</string>
<string name="success">Succès</string>
<string name="danar_history_connectingfor" formatted="false">Se connecter pour %d s</string>
<string name="danar_history_connectingfor">Se connecter pour %1$d s</string>
<string name="careportal_pump_label">POMPE</string>
<string name="overview_newtempbasal_basalabsolute">"Valeur Basal [U/h] "</string>
<string name="careportal_newnstreatment_duration_min_label">Durée [min]</string>
@ -605,7 +605,7 @@
<string name="wearcontrol_summary">Définir les Cibles Temp et entrer les Traitements depuis la montre</string>
<string name="connectiontimedout">Connexion interrompue</string>
<string name="food">Aliments</string>
<string name="waitingforestimatedbolusend" formatted="false">Attendre la fin du bolus. %d sec. restants</string>
<string name="waitingforestimatedbolusend">Attendre la fin du bolus. %1$d sec. restants</string>
<string name="processinghistory">Traitement d\'événement</string>
<string name="startingbolus">Administration du bolus lancée</string>
<string name="executingrightnow">Commande exécutée à l\'instant</string>
@ -675,7 +675,7 @@
<string name="combo_refresh">Actualiser</string>
<string name="combo_pump_state_label">État</string>
<string name="combo_pump_activity_label">Activité</string>
<string name="combo_no_pump_connection" formatted="false">Pas de connexion depuis %d min</string>
<string name="combo_no_pump_connection">Pas de connexion depuis %1$d min</string>
<string name="combo_tbr_remaining">%1$d%% (%2$d min restantes)</string>
<string name="combo_pump_state_suspended_due_to_error">Suspendu pour cause d\'erreur</string>
<string name="combo_pump_state_suspended_by_user">Suspendu par l\'utilisateur</string>

View file

@ -116,11 +116,11 @@
<string name="configbuilder_aps">APS</string>
<string name="loop_aps_label">APS</string>
<string name="androidaps_start">AndroidAPS thosaigh</string>
<string formated="false" name="sms_minago">%dnóim ó shin</string>
<string formated="false" name="minago">%d nóim ó shin</string>
<string formated="false" name="hoursago">%.1fu ó shin</string>
<string formated="false" name="pump_basebasalrate">%.2f A/u</string>
<string formated="false" name="combo_tbr_remaining">%1$d%% (%2$d nóim fágtha)</string>
<string name="sms_minago">%1$dnóim ó shin</string>
<string name="minago">%1$d nóim ó shin</string>
<string name="hoursago">%1$.1fu ó shin</string>
<string name="pump_basebasalrate">%1$.2f A/u</string>
<string name="combo_tbr_remaining">%1$d%% (%2$d nóim fágtha)</string>
<string name="actions">Gníomhartha</string>
<string name="actions_shortname">GNÍ</string>
<string name="overview_editquickwizardlistactivity_add">Cuir</string>
@ -132,7 +132,7 @@
<string name="treatments_wizard_correction_label">Cear</string>
<string name="correctionbous">Cear</string>
<string name="overview_bolusprogress_delivered">Seachadta</string>
<string formated="false" name="bolusdelivering">Seachadadh %.2fA</string>
<string name="bolusdelivering">Seachadadh %1$.2fA</string>
<string name="deliver_now">Seachadadh anois</string>
<string name="disconnectpumpfor1h">Dhícheangal Caidéil do 1 u</string>
<string name="disconnectpumpfor2h">Dhícheangal Caidéil do 2 u</string>
@ -174,7 +174,7 @@
<string name="configbuilder_treatments">Cóireálacha</string>
<string name="overview_editquickwizard_valid">Bailí:</string>
<string name="objectives_button_verify">Fhíorú</string>
<string formated="false" name="loopsuspendedfor">Ar fionraí (%d n)</string>
<string name="loopsuspendedfor">Ar fionraí (%1$d n)</string>
<string name="combo_pump_state_suspended_by_user">Ar fionraí ag úsáideoir</string>
<string name="objectives_1_objective">Tosaigh ag lúb oscailte</string>
<string name="status">Stádas:</string>
@ -189,11 +189,11 @@
<string name="initializing">Tosaithe ...</string>
<string name="combo_actvity_reading_basal_profile">Léigh próifíl bunaidh</string>
<string name="combo_activity_reading_pump_history">Léigh stair caidéil</string>
<string formated="false" name="combo_pump_action_setting_tbr">Socrú BRS (%1$d%% / %2$d nóim)</string>
<string name="combo_pump_action_setting_tbr">Socrú BRS (%1$d%% / %2$d nóim)</string>
<string name="combo_pump_action_cancelling_tbr">Cealú BRS</string>
<string name="combo_pump_battery_low_warrning">Is ceallraí Caidéil íseal</string>
<string name="combo_pump_cartridge_low_warrning">Is leibhéal cartús íseal</string>
<string formated="false" name="combo_pump_action_bolusing">Ag bólas (%.1f A)</string>
<string name="combo_pump_action_bolusing">Ag bólas (%1$.1f A)</string>
<string name="carbs">Carbí</string>
<string name="careportal_newnstreatment_carbs_label">Carbí</string>
<string name="treatments_newtreatment_carbsamount_label">Carbí</string>
@ -201,7 +201,7 @@
<string name="overview_editquickwizard_carbs">Carbí:</string>
<string name="treatments_carbs_label_string">Carbí:</string>
<string name="careportal_carbsandbolus_label">CARBÍ &amp; BÓLAS</string>
<string formated="false" name="danar_history_connectingfor">Ag nascadh le %d s</string>
<string name="danar_history_connectingfor">Ag nascadh le %1$d s</string>
<string name="comment">Tuairim</string>
<string name="danar_bt_name_title">DanaR Bluetooth gléas</string>
<string name="cs_lang">Seice</string>
@ -244,10 +244,10 @@
<string name="bolus">Bólas</string>
<string name="bolusstopped">Bólas stopadh</string>
<string name="bolusstopping">Ag stopadh bólas</string>
<string formated="false" name="bolusrequested">Ag dul a sheachadadh %.2fA</string>
<string name="bolusrequested">Ag dul a sheachadadh %1$.2fA</string>
<string name="combo_activity_setting_basal_profile">Socrú próifíl bunaidh</string>
<string name="combo_activity_checking_for_history_changes">Ag féachaint d\'athruithe stair</string>
<string formated="false" name="combo_no_pump_connection">Níl nasc le haghaidh %d nóim</string>
<string name="combo_no_pump_connection">Níl nasc le haghaidh %1$d nóim</string>
<string name="combo_notification_check_time_date">Is nuashonrú gá clog Caidéil</string>
<string name="combo_programming_bolus">Cláir Caidéil bólas</string>
<string name="combo_pump_activity_label">Gníomhaíocht</string>

View file

@ -103,7 +103,7 @@
<string name="danar_history_basalhours">Basale oraria</string>
<string name="danar_history_bolus">Boli</string>
<string name="danar_history_carbohydrates">Carboidrati</string>
<string name="danar_history_connectingfor" formatted="false">Connessione %d s</string>
<string name="danar_history_connectingfor">Connessione %1$d s</string>
<string name="danar_history_dailyinsulin">Insulina Giornaliea</string>
<string name="danar_history_errors">Errore</string>
<string name="danar_history_glucose">Glucosio</string>
@ -182,9 +182,9 @@
<string name="loop_aps_label">APS</string>
<string name="loop_shortname">Loop</string>
<string name="loopdisabled">Loop disabilitato da vincolo</string>
<string name="loopsuperbolusfor" formatted="false">Superbolo (%d m)</string>
<string name="loopsuperbolusfor">Superbolo (%1$d m)</string>
<string name="loopsuspended">Sospensione Loop</string>
<string name="loopsuspendedfor" formatted="false">Sospendi (%d m)</string>
<string name="loopsuspendedfor">Sospendi (%1$d m)</string>
<string name="lowbattery">Batteria scarica</string>
<string name="manual">Manuale</string>
<string name="mdi">MDI</string>

View file

@ -249,7 +249,7 @@
<string name="danar_glucose">혈당</string>
<string name="danar_carbohydrate">탄수화물</string>
<string name="danar_alarm">알람</string>
<string name="danar_totaluploaded" formatted="false">총 %d 기록들이 업로드되었습니다.</string>
<string name="danar_totaluploaded">총 %1$d 기록들이 업로드되었습니다.</string>
<string name="danar_sbolus">S bolus</string>
<string name="danar_history_alarm">알람</string>
<string name="danar_history_basalhours">기초주입 시간</string>
@ -260,7 +260,7 @@
<string name="danar_history_glucose">혈당</string>
<string name="danar_history_refill">교체</string>
<string name="danar_history_syspend">중지</string>
<string name="danar_history_connectingfor" formatted="false">%d 초 동안 연결중</string>
<string name="danar_history_connectingfor">%1$d 초 동안 연결중</string>
<string name="danar_password_title">펌프 비밀번호</string>
<string name="wrongpumppassword">펌프 비밀번호가 잘못되었습니다!</string>
<string name="pumpbusy">펌프가 바쁩니다</string>
@ -363,7 +363,7 @@
<string name="openapsama">OpenAPS AMA</string>
<string name="short_avgdelta">Short avg. delta</string>
<string name="long_avgdelta">Long avg. delta</string>
<string name="array_of_elements" formatted="false">Array of %d elements.\nActual value:</string>
<string name="array_of_elements">Array of %1$d elements.\nActual value:</string>
<string name="openapsma_autosensdata_label">Autosens 정보</string>
<string name="openapsma_scriptdebugdata_label">Script debug</string>
<string name="openapsama_useautosens">AMA autosens 기능 사용하기</string>

View file

@ -311,9 +311,9 @@
<string name="ok">Ok</string>
<string name="danar_stats_basalrate">Basaal</string>
<string name="loopdisabled">Loop gedeactiveerd door doelen tab</string>
<string name="loopsuperbolusfor" formatted="false">Superbolus (%d m)</string>
<string name="loopsuperbolusfor">Superbolus (%1$d m)</string>
<string name="loopsuspended">Loop pauzeren</string>
<string name="loopsuspendedfor" formatted="false">Pauzeer (%d m)</string>
<string name="loopsuspendedfor">Pauzeer (%1$d m)</string>
<string name="lowbattery">Batterij bijna leeg</string>
<string name="manual">Manueel</string>
<string name="mdi">MDI</string>
@ -383,7 +383,7 @@
<string name="overview_bolusprogress_stoppressed">STOP INGEDRUKT</string>
<string name="overview_calibration">Kalibratie</string>
<string name="danar_stats_olddata_Message">Oude gegevens druk \"VERNIEUW\" a.u.b.</string>
<string name="minago">%d min geleden</string>
<string name="minago">%1$d min geleden</string>
<string name="reason">Berekening</string>
<string name="rate">Dosis</string>
<string name="duration">Periode</string>
@ -459,7 +459,7 @@
<string name="tempbasals_iobtotal_label_string">Totale IOB:</string>
<string name="ru_lang">русский</string>
<string name="always_use_shortavg">Gebruik altijd kleine gemiddelde verschillen ipv gewone verschillen</string>
<string name="array_of_elements">Tabel met %d elementen. Actuele waarde:</string>
<string name="array_of_elements">Tabel met %1$d elementen. Actuele waarde:</string>
<string name="overview_quickwizard_item_remove_button">Verwijder</string>
<string name="overview_quickwizard_item_edit_button">Wijzig</string>
<string name="overview_shortname">Home</string>
@ -565,8 +565,8 @@
<string name="objectives_5_gate">Gedurende 1 week succesvol closed loop met KH ingave</string>
<string name="careportal_activity_label">ACTIVITIJD &amp; FEEDBACK</string>
<string name="danar_model">Model: %1$02X Protokoll: %2$02X Code: %3$02X</string>
<string name="danar_history_connectingfor">Verbonden gedurende %d s</string>
<string name="danar_totaluploaded">Totaal %d gegevens geupload</string>
<string name="danar_history_connectingfor">Verbonden gedurende %1$d s</string>
<string name="danar_totaluploaded">Totaal %1$d gegevens geupload</string>
<string name="valuelimitedto">%1$.2f gelimitteerd tot %2$.2f</string>
<string name="smscommunicator_suspendreplywithcode">Om de loop te onderbreken voor %1$d minuten antwoord met de code %2$s</string>
<string name="smscommunicator_tempbasalset">Tijdelijk basaal %1$.2fE/u voor %2$d minuten succesvol gestart</string>
@ -640,7 +640,7 @@
<string name="localalertsettings_title">Lokaal gegenereerde waarschuwingen</string>
<string name="startingbolus">Bolus toediening gestart</string>
<string name="wear_detailed_delta_summary">Toon delta met eenextra decimaal punt</string>
<string name="waitingforestimatedbolusend">Wacht op complete bolus toediening Resterend %d sec.</string>
<string name="waitingforestimatedbolusend">Wacht op complete bolus toediening Resterend %1$d sec.</string>
<string name="urgent_alarm">Dringend alarm</string>
<string name="treatments_wizard_tt_label">TT</string>
<string name="raise_notifications_as_android_notifications">Gebruik systeem notficaties voor waarchuwingen en notificaties</string>
@ -675,7 +675,7 @@
<string name="combo_programming_bolus">"Bolus in pomp programmeren "</string>
<string name="combo_refresh">Vernieuw</string>
<string name="combo_pump_state_label">Status</string>
<string name="combo_no_pump_connection">Geen verbinding gedurende %d minuten</string>
<string name="combo_no_pump_connection">Geen verbinding gedurende %1$d minuten</string>
<string name="combo_tbr_remaining">%1$d%% (%2$d min resterend)</string>
<string name="combo_warning">Waarschuwing</string>
<string name="combo_notification_check_time_date">Pomp klok moet bijgesteld worden</string>
@ -827,7 +827,7 @@
<string name="cgm">CGM</string>
<string name="food_short">Voeding</string>
<string name="reset">Reset</string>
<string name="waitingfortimesynchronization">Wachttijd voor syncronisatie (%d sec)</string>
<string name="waitingfortimesynchronization">Wachttijd voor syncronisatie (%1$d sec)</string>
<string name="ago">Voorbij</string>
<string name="with">met</string>
<string name="insight_active_tbr">Actieve TBR</string>
@ -848,7 +848,7 @@
<string name="temptargetshort">TT</string>
<string name="combo_bolus_count">Aantal bolussen</string>
<string name="combo_tbr_count">Aantal TBR</string>
<string name="objectivenotstarted">Doel %d niet gestart</string>
<string name="objectivenotstarted">Doel %1$d niet gestart</string>
<string name="wear_notifysmb_summary">Toon SMB op horloge zoals gewone bolussen.</string>
<string name="wear_predictions_summary">Toon de voorspellingen op het horloge</string>
<string name="data_choices">Data Keuzes</string>
@ -878,7 +878,7 @@
<string name="start_hypo_tt">Start Hypo TT</string>
<string name="engineering_mode_enabled">Engineering modus is geactiveerd</string>
<string name="not_eng_mode_or_release">Engineering modus is niet geactiveerd en dit is niet de relaese branche</string>
<string name="objectivenotfinished" formatted="false">Doel %d niet afgewerkt</string>
<string name="objectivenotfinished">Doel %1$d niet afgewerkt</string>
<string name="pumpisnottempbasalcapable">Pomp kan geen tijdelijk basaal aanvaarden</string>
<string name="novalidbasalrate">Geen plausibel basale snelheid van pomp kunnen lezen</string>
<string name="autosensdisabledinpreferences">Autosens gedeactiveerd in de voorkeuren</string>
@ -892,7 +892,7 @@
<string name="limitingpercentrate">Begrezen van max procentuele wijzigen tot %1$d%% want de %2$s</string>
<string name="smbalwaysdisabled">SMB altijd gedeactiveerd doordat de gekozen BG bron geen optimale filtering toepast</string>
<string name="smbnotallowedinopenloopmode">SMB niet toegestaan in Open Loop modus</string>
<string name="loopdisconnectedfor">Niet verbonden (%d m)</string>
<string name="loopdisconnectedfor">Niet verbonden (%1$d m)</string>
<string name="hardlimit">max limiet (SC)</string>
<string name="unsafeusage">Onveilig gebruik</string>
<string name="closed_loop_disabled_on_dev_branch">Dev cersie actief. Closed loop gedeactiveerd</string>

View file

@ -263,7 +263,7 @@
<string name="danar_glucose">glukoza</string>
<string name="danar_carbohydrate">węglowodany</string>
<string name="danar_alarm">alarm</string>
<string name="danar_totaluploaded" formatted="false">Wszystkie %d rekordy załadowane</string>
<string name="danar_totaluploaded">Wszystkie %1$d rekordy załadowane</string>
<string name="danar_sbolus">S bolus</string>
<string name="danar_history_alarm">Alarmy</string>
<string name="danar_history_basalhours">Godziny Bazy</string>
@ -274,7 +274,7 @@
<string name="danar_history_glucose">Glukoza</string>
<string name="danar_history_refill">Napełnij</string>
<string name="danar_history_syspend">Wstrzymaj</string>
<string name="danar_history_connectingfor" formatted="false">Łączę przez %d s</string>
<string name="danar_history_connectingfor">Łączę przez %1$d s</string>
<string name="danar_password_title">Hasło pompy</string>
<string name="wrongpumppassword">Błędne hasło pompy!</string>
<string name="pumpbusy">Pompa jest zajęta</string>
@ -373,13 +373,13 @@
<string name="MM640g">MM640g</string>
<string name="ongoingnotificaction">Nadchodzące powiadomienia</string>
<string name="old_data">NIEAKTUALNE DANE</string>
<string name="minago">%d min temu</string>
<string name="minago">%1$d min temu</string>
<string name="sms_minago">%dmin temu</string>
<string name="localprofile">Lokalny Profil</string>
<string name="openapsama">OpenAPS AMA</string>
<string name="short_avgdelta">Krótka średnia delta</string>
<string name="long_avgdelta">Długa średnia delta</string>
<string name="array_of_elements">Lista %d elementów.\nBieżąca wartość:</string>
<string name="array_of_elements">Lista %1$d elementów.\nBieżąca wartość:</string>
<string name="openapsma_autosensdata_label">Dane Autosens</string>
<string name="openapsma_scriptdebugdata_label">Debugowanie skryptów</string>
<string name="openapsama_useautosens">Używaj funkcji AMA autosens</string>
@ -496,8 +496,8 @@
<string name="Glimp">Glimp</string>
<string name="needwhitelisting">%s Potrzebuję wpisu na białąlistę optymalizacji baterii w celu zapewnienia poprawnego działania</string>
<string name="loopsuspended">Pętla wstrzymana</string>
<string name="loopsuspendedfor" formatted="false">Wstrzymana (%d m)</string>
<string name="loopsuperbolusfor" formatted="false">Superbolus (%d m)</string>
<string name="loopsuspendedfor">Wstrzymana (%1$d m)</string>
<string name="loopsuperbolusfor">Superbolus (%1$d m)</string>
<string name="suspendloopfor1h">Wstrzymaj pętlę na 1h</string>
<string name="suspendloopfor2h">Wstrzymaj pętlę na 2h</string>
<string name="suspendloopfor3h">Wstrzymaj pętlę na 3h</string>
@ -656,7 +656,7 @@
<string name="shortprotein">Bi</string>
<string name="shortfat"></string>
<string name="active"><![CDATA[<Active>]]></string>
<string name="waitingforestimatedbolusend" formatted="false">Oczekuję na zakończenie bolusa. Pozostało %d sec.</string>
<string name="waitingforestimatedbolusend">Oczekuję na zakończenie bolusa. Pozostało %1$d sec.</string>
<string name="processinghistory">Przetwarzanie zdarzenia</string>
<string name="startingbolus">Rozpoczynam podawanie bolusa</string>
<string name="executingrightnow">Polecenie jest teraz wykonywane</string>
@ -707,7 +707,7 @@
<string name="combo_refresh">Odśwież</string>
<string name="combo_pump_state_label">Stan</string>
<string name="combo_pump_activity_label">Aktywność</string>
<string name="combo_no_pump_connection">Brak połączenia przez %d min</string>
<string name="combo_no_pump_connection">Brak połączenia przez %1$d min</string>
<string name="combo_tbr_remaining">%1$d%% (%2$d min pozostało)</string>
<string name="combo_pump_state_initializing">Rozpoczynanie</string>
<string name="combo_pump_state_suspended_due_to_error">Wstrzymane z powodu błędu</string>
@ -850,8 +850,8 @@
<string name="profileswitch_ismissing">Brakuje ZmianyProfilu. Proszę wykonać ZmianęProfilu lub nacisnąć "Aktywuj Profil" w ProfiluLokalnym</string>
<string name="combo_bolus_count">Obliczenia Bolusa</string>
<string name="combo_tbr_count">Obliczenia TBR</string>
<string name="objectivenotstarted" formatted="false">Zadanie %d nie uruchomione</string>
<string name="objectivenotfinished" formatted="false">Zadanie %d nie zakończone</string>
<string name="objectivenotstarted">Zadanie %1$d nie uruchomione</string>
<string name="objectivenotfinished">Zadanie %1$d nie zakończone</string>
<string name="pumpisnottempbasalcapable">Pompa nie jest zdolna do wykonywania dawek bazowych tymczasowych</string>
<string name="novalidbasalrate">Brak prawidłowej dawki bazowej odczytanej z pompy</string>
<string name="closedmodedisabledinpreferences">Tryb zamkniętej pętli wyłączony w ustawieniach</string>
@ -879,8 +879,8 @@
<string name="smbnotallowedinopenloopmode">SMB nie dozwolone w trybie otwartej pętli</string>
<string name="food_short">Posiłek</string>
<string name="reset">ponowne uruchomienie</string>
<string name="waitingfortimesynchronization">Oczekiwanie na synchronizację czasu (%d sec)</string>
<string name="loopdisconnectedfor">Rozłączono (%d m)</string>
<string name="waitingfortimesynchronization">Oczekiwanie na synchronizację czasu (%1$d sec)</string>
<string name="loopdisconnectedfor">Rozłączono (%1$d m)</string>
<string name="automatic_careportal_events">Automatyczne działania PortaluOpieki</string>
<string name="automatically_upload_insulin_cannula_and_battery_changes_to_nightscout">Automatycznie przesyłaj zmianę zasobnika, wkłucia i baterii oraz alarmy pompy do Nightscout</string>
<string name="openapssmb_maxiob_title">Maksymalna, całkowita IOB, której OpenAPS nie może przekroczyć [U]</string>

View file

@ -218,7 +218,7 @@
<string name="danar_glucose">glicemie</string>
<string name="danar_carbohydrate">carbohidrați</string>
<string name="danar_alarm">alarmă</string>
<string name="danar_totaluploaded" formatted="false">S-au transmis %d înregistrări</string>
<string name="danar_totaluploaded" formatted="false">S-au transmis %1$d înregistrări</string>
<string name="danar_sbolus">S bolus</string>
<string name="danar_history_alarm">Alarme</string>
<string name="danar_history_basalhours">Ore bazale</string>
@ -229,7 +229,7 @@
<string name="danar_history_glucose">Glicemie</string>
<string name="danar_history_refill">Reumplere</string>
<string name="danar_history_syspend">Suspendare</string>
<string name="danar_history_connectingfor" formatted="false">Conectare de %d s</string>
<string name="danar_history_connectingfor">Conectare de %1$d s</string>
<string name="danar_password_title">Parola pompei</string>
<string name="wrongpumppassword">Parola pompei greșită!</string>
<string name="pumpbusy">Pompa face altă acțiune</string>
@ -330,7 +330,7 @@
<string name="openapsama">OpenAPS AMA</string>
<string name="short_avgdelta">Media scurtă a deviației</string>
<string name="long_avgdelta">Media lungă a deviației</string>
<string name="array_of_elements">Matrice cu %d elemente.\nValorea efectivă:</string>
<string name="array_of_elements">Matrice cu %1$d elemente.\nValorea efectivă:</string>
<string name="openapsma_autosensdata_label">Date Autosens</string>
<string name="openapsma_scriptdebugdata_label">Script debug</string>
<string name="openapsama_useautosens">Folosește opțiunea autosens AMA</string>
@ -443,8 +443,8 @@
<string name="Glimp">Glimp</string>
<string name="needwhitelisting">%s necesită excluderea din lista de optimizare a bateriei pentru funcționare corespunzătoare</string>
<string name="loopsuspended">Buclă suspendată</string>
<string name="loopsuspendedfor" formatted="false">Suspendată (%d m)</string>
<string name="loopsuperbolusfor" formatted="false">Superbolus (%d m)</string>
<string name="loopsuspendedfor">Suspendată (%1$d m)</string>
<string name="loopsuperbolusfor">Superbolus (%1$d m)</string>
<string name="suspendloopfor1h">Suspendă bucla pentru 1h</string>
<string name="suspendloopfor2h">Suspendă bucla pentru 2h</string>
<string name="suspendloopfor3h">Suspendă bucla pentru 3h</string>
@ -651,7 +651,7 @@
<string name="shortprotein">Pr</string>
<string name="shortfat">Grăsime</string>
<string name="active"><![CDATA[<Active>]]></string>
<string name="waitingforestimatedbolusend" formatted="false">Se așteaptă finalul bolusării. Mai sunt %d sec.</string>
<string name="waitingforestimatedbolusend">Se așteaptă finalul bolusării. Mai sunt %1$d sec.</string>
<string name="processinghistory">Se procesează activitatea</string>
<string name="startingbolus">Pornire livrare bolus</string>
<string name="executingrightnow">Se execută comanda chiar acum</string>
@ -702,7 +702,7 @@
<string name="combo_refresh">Reîncarcă</string>
<string name="combo_pump_state_label">Stare</string>
<string name="combo_pump_activity_label">Activitate</string>
<string name="combo_no_pump_connection" formatted="false">Fără conexiune de %d min</string>
<string name="combo_no_pump_connection">Fără conexiune de %1$d min</string>
<string name="combo_tbr_remaining">%1$d%% (%2$d min rămase)</string>
<string name="combo_pump_state_initializing">Inițializare</string>
<string name="combo_pump_state_suspended_due_to_error">Suspendat din cauza unei erori</string>
@ -860,8 +860,8 @@
<string name="alert_e13">Eroare E13: Eroare de limbaj</string>
<string name="ns_wifionly">Folosește doar conexiune WiFi</string>
<string name="cgm">CGM</string>
<string name="objectivenotstarted" formatted="false">Obiectivul %d nu este pornit</string>
<string name="objectivenotfinished" formatted="false">Obiectivul %d nu este atins</string>
<string name="objectivenotstarted">Obiectivul %1$d nu este pornit</string>
<string name="objectivenotfinished">Obiectivul %1$d nu este atins</string>
<string name="pumpisnottempbasalcapable">Pompa nu suportă bazale temporare</string>
<string name="novalidbasalrate">Nu s-a citit o rată bazală validă din pompă</string>
<string name="closedmodedisabledinpreferences">Modul buclă închisă dezactivat în preferințe</string>
@ -887,8 +887,8 @@
<string name="smbalwaysdisabled">SMB dezactivat întotdeauna și după carbo deoarece sursa glicemiei nu suportă filtrare avansată</string>
<string name="smbnotallowedinopenloopmode">SMB nu este permis în mod buclă deschisă</string>
<string name="food_short">Mâncare</string>
<string name="waitingfortimesynchronization" formatted="false">Se așteaptă sincronizarea (%d s)</string>
<string name="loopdisconnectedfor" formatted="false">Deconectat (%d min)</string>
<string name="waitingfortimesynchronization">Se așteaptă sincronizarea (%1$d s)</string>
<string name="loopdisconnectedfor">Deconectat (%1$d min)</string>
<string name="automatic_careportal_events">Evenimente Careportal automate</string>
<string name="automatically_upload_insulin_cannula_and_battery_changes_to_nightscout">Încărcare automată a schimbărilor de insulină, rezervor, baterie și alarme de pompă în Nightscout</string>
<string name="openapssmb_maxiob_title">Maximul total IOB peste care OpenAPS nu poate trece [U]</string>

View file

@ -14,7 +14,7 @@
<string name="always_use_shortavg_summary">полезно когда данные из нефильтруемых источников вроде Xdrip зашумляются</string>
<string name="approachingdailylimit">приближается суточный лимит инсулина</string>
<string name="apsmode_title">режим APS</string>
<string name="array_of_elements" formatted="false">массив %d элементов. актуальная величина:</string>
<string name="array_of_elements">массив %1$d элементов. актуальная величина:</string>
<string name="basal">базал</string>
<string name="basal_rate">скорость усвоения базала:</string>
<string name="basal_step">шаг базала</string>
@ -120,7 +120,7 @@
<string name="danar_history_basalhours">почасовые базалы</string>
<string name="danar_history_bolus">болюсы</string>
<string name="danar_history_carbohydrates">углеводы</string>
<string name="danar_history_connectingfor" formatted="false">связь установлена за %d сек.</string>
<string name="danar_history_connectingfor">связь установлена за %1$d сек.</string>
<string name="danar_history_dailyinsulin">суточный инсулин</string>
<string name="danar_history_errors">ошибки</string>
<string name="danar_history_glucose">гликемия</string>
@ -150,7 +150,7 @@
<string name="danar_stats_warning_Message">возможны неточности если болюсы использовались для заполнения</string>
<string name="danar_stats_weight">вес</string>
<string name="danar_switchtouhmode">замена режима с U/d на U/h на помпе</string>
<string name="danar_totaluploaded" formatted="false">всего передано %d записей</string>
<string name="danar_totaluploaded">всего передано %1$d записей</string>
<string name="danar_useextended_title">для величин >200% пользуйтесь увеличенным болюсом</string>
<string name="danar_valuenotsetproperly">величина не задана должным образом</string>
<string name="danar_viewprofile">просмотр профиля</string>
@ -222,16 +222,16 @@
<string name="loop_constraintsprocessed_label">после наложенных ограничений</string>
<string name="loop_shortname">ЗЦ</string>
<string name="loopdisabled">ЗЦ ОТМЕНЕН ОГРАНИЧЕНИЯМИ</string>
<string name="loopsuperbolusfor" formatted="false">суперболюс(%d m)</string>
<string name="loopsuperbolusfor">суперболюс(%1$d m)</string>
<string name="loopsuspended">ЗЦ остановлен</string>
<string name="loopsuspendedfor" formatted="false">остановлен на(%d m)</string>
<string name="loopsuspendedfor">остановлен на(%1$d m)</string>
<string name="low_mark">отметка НИЗКИЙ</string>
<string name="lowbattery">низкий заряд батареи</string>
<string name="manual">вручную</string>
<string name="mdi">MDI</string>
<string name="mealbolus">болюс на еду</string>
<string name="mgdl">mg/dl</string>
<string name="minago" formatted="false">%d м. назад</string>
<string name="minago">%1$d м. назад</string>
<string name="missing">отсутствует</string>
<string name="mmol">mmol/l</string>
<string name="nav_about">о приложении</string>
@ -406,7 +406,7 @@
<string name="sms_delta">дельта:</string>
<string name="sms_iob">IOB:</string>
<string name="sms_lastbg">прошлый СК:</string>
<string name="sms_minago" formatted="false">%d мин назад</string>
<string name="sms_minago">%1$d мин назад</string>
<string name="smscommunicator">SMS коммуникатор</string>
<string name="smscommunicator_allowednumbers">разрешенные телефонные номера</string>
<string name="smscommunicator_allowednumbers_summary">+XXXXXXXXXX;+YYYYYYYYYY</string>

View file

@ -114,7 +114,7 @@
<string name="danar_history_basalhours">Basaltimmar</string>
<string name="danar_history_bolus">Bolusar</string>
<string name="danar_history_carbohydrates">Kolhydrater</string>
<string name="danar_history_connectingfor" formatted="false">Ansluter (%d s)</string>
<string name="danar_history_connectingfor">Ansluter (%1$d s)</string>
<string name="danar_history_dailyinsulin">Daglig insulinmängd</string>
<string name="danar_history_errors">Fel</string>
<string name="danar_history_glucose">Glukos</string>
@ -198,7 +198,7 @@
<string name="loop_constraintsprocessed_label">Efter begränsningar</string>
<string name="loop_shortname">Loop</string>
<string name="loopdisabled">LOOP STOPPAD PGA BEGRÄNSNINGAR</string>
<string name="loopsuperbolusfor" formatted="false">Superbolus (%d min)</string>
<string name="loopsuperbolusfor">Superbolus (%1$d min)</string>
<string name="loopsuspended">Loop pausad</string>
<string name="low_mark">LÅG-markering</string>
<string name="lowbattery">Svagt batteri</string>
@ -488,7 +488,7 @@
<string name="danar_stats_warning_Message">Kan visa fel om man använder bolus för priming/fyllning!</string>
<string name="end_user_license_agreement_text">MUST NOT BE USED TO MAKE MEDICAL DECISIONS. THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM “AS IS” WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.</string>
<string name="mmol">mmol/l</string>
<string name="minago" formatted="false">%d&#160;m</string>
<string name="minago">%1$d&#160;m</string>
<string name="mgdl">mg/dl</string>
<string name="mdtp_ok">OK</string>
<string name="mdi">MDI</string>
@ -508,7 +508,7 @@
<string name="sms_bolus">Bolus:</string>
<string name="sms_delta">Delta:</string>
<string name="sms_iob">IOB:</string>
<string name="sms_minago" formatted="false">%d min</string>
<string name="sms_minago">%1$d min</string>
<string name="nsalarm_staledatavalue_label">Första varning efter [min]</string>
<string name="nsalarm_urgent_staledatavalue_label">Akut varning efter [min]</string>
<string name="nsalarm_urgenthigh">Akut hög</string>
@ -519,7 +519,7 @@
<string name="overview_newtempbasal_basalpercent">Basal [%]</string>
<string name="careportal_newnstreatment_glucosetype">BG-källa</string>
<string name="sv_lang">Svenska</string>
<string name="danar_totaluploaded">Laddade upp totalt %d värden</string>
<string name="danar_totaluploaded">Laddade upp totalt %1$d värden</string>
<string name="objectives_7_objective">Aktiverar ytterligare funktioner för användning dagtid, t ex SMB.</string>
<string name="smscommunicator_remotecommandnotallowed">Otillåtet fjärrkommando</string>
<string name="danar_switchtouhmode">Ändra inställningen från E/d till E/tim i pumpen</string>
@ -533,7 +533,7 @@
<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="needwhitelisting">%s behöver kunna kringgå batterisparfunktionerna för att fungera korrekt</string>
<string name="loopsuspendedfor">Pausad (%d min)</string>
<string name="loopsuspendedfor">Pausad (%1$d min)</string>
<string name="uploader">Uppladdare</string>
<string name="configbuilder_sensitivity">Känslighetsavkänning</string>
<string name="overview_newtempbasal_basalabsolute">Basal [E/tim]</string>
@ -579,7 +579,7 @@
<string name="shortenergy">En</string>
<string name="shortprotein">Pr</string>
<string name="shortfat">Fett</string>
<string name="waitingforestimatedbolusend">Väntar på att bolus ska slutföras (%d sek)</string>
<string name="waitingforestimatedbolusend">Väntar på att bolus ska slutföras (%1$d sek)</string>
<string name="processinghistory">Behandlar</string>
<string name="startingbolus">Påbörjar bolus</string>
<string name="executingrightnow">Kommandot kör just nu</string>
@ -625,7 +625,7 @@
<string name="combo_refresh">Uppdatera</string>
<string name="combo_pump_state_label">Läge</string>
<string name="combo_pump_activity_label">Aktivitet</string>
<string name="combo_no_pump_connection">Ingen anslutning på %d min</string>
<string name="combo_no_pump_connection">Ingen anslutning på %1$d min</string>
<string name="combo_tbr_remaining">%1$d%% (%2$d min återstår)</string>
<string name="combo_pump_state_suspended_due_to_error">Pausad pga fel</string>
<string name="combo_pump_state_suspended_by_user">Pausad av användaren</string>
@ -764,8 +764,8 @@
<string name="profileswitch_ismissing">Profilbyte saknas. Vänligen gör ett profilbyte eller tryck Aktivera profil under Lokal Profil.</string>
<string name="combo_bolus_count">Antal bolus</string>
<string name="combo_tbr_count">Antal temp basaler</string>
<string name="objectivenotstarted">Mål %d inte startat</string>
<string name="objectivenotfinished">Mål %d inte nått</string>
<string name="objectivenotstarted">Mål %1$d inte startat</string>
<string name="objectivenotfinished">Mål %1$d inte nått</string>
<string name="pumpisnottempbasalcapable">Pumpen är inte kapabel till temp basal</string>
<string name="novalidbasalrate">Ingen giltig data om temp basaler fanns i pumpen</string>
<string name="closedmodedisabledinpreferences">Closed Loop inaktiverat i Inställningar</string>
@ -793,8 +793,8 @@
<string name="smbnotallowedinopenloopmode">SMB inte tillåtet i Open Loop</string>
<string name="food_short">Mat</string>
<string name="reset">Återställ</string>
<string name="waitingfortimesynchronization">Väntar på tidssynkronisering (%d sek)</string>
<string name="loopdisconnectedfor">Frånkopplad (%d min)</string>
<string name="waitingfortimesynchronization">Väntar på tidssynkronisering (%1$d sek)</string>
<string name="loopdisconnectedfor">Frånkopplad (%1$d min)</string>
<string name="automatic_careportal_events">Automatisk loggning i Careportal</string>
<string name="automatically_upload_insulin_cannula_and_battery_changes_to_nightscout">Ladda upp insulin-, kanyl- och batteribyten samt pumplarm till Nightscout</string>
<string name="openapssmb_maxiob_title">Max IOB som OpenAPS inte kan överstiga [E]</string>

View file

@ -249,8 +249,8 @@
<string name="waitingforpumpresult">等待结果</string>
<string name="smscommunicator_allowednumbers">允许的电话号码</string>
<string name="smscommunicator_allowednumbers_summary">+XXXXXXXXXX;+YYYYYYYYYY</string>
<string name="smscommunicator_bolusreplywithcode" formatted="false">要输入大剂量胰岛素 %.2fU 请回复 %s</string>
<string name="smscommunicator_calibrationreplywithcode" formatted="false">要发送校准值 %.2f 请回复 %s</string>
<string name="smscommunicator_bolusreplywithcode">要输入大剂量胰岛素 %1$.2fU 请回复 %2$s</string>
<string name="smscommunicator_calibrationreplywithcode">要发送校准值 %1$.2f 请回复 %2$s</string>
<string name="smscommunicator_bolusfailed">大剂量输注失败</string>
<string name="bolusdelivered" formatted="false">大剂量 %.2fU 输注成功了</string>
<string name="bolusrequested" formatted="false">将要输注 %.2fU</string>
@ -278,7 +278,7 @@
<string name="danar_glucose">血糖</string>
<string name="danar_carbohydrate">碳水化合物</string>
<string name="danar_alarm">报警</string>
<string name="danar_totaluploaded" formatted="false">总计 %d 个记录已经上传了</string>
<string name="danar_totaluploaded">总计 %1$d 个记录已经上传了</string>
<string name="danar_sbolus">S 大剂量</string>
<string name="danar_history_alarm">报警</string>
<string name="danar_history_basalhours">基础 小时</string>
@ -289,7 +289,7 @@
<string name="danar_history_glucose">血糖</string>
<string name="danar_history_refill">重新充盈</string>
<string name="danar_history_syspend">中止</string>
<string name="danar_history_connectingfor" formatted="false">正在连接中 %d s</string>
<string name="danar_history_connectingfor">正在连接中 %1$d s</string>
<string name="danar_password_title">胰岛素泵密码</string>
<string name="wrongpumppassword">错误的胰岛素泵密码!</string>
<string name="pumpbusy">胰岛素泵忙碌中</string>
@ -321,13 +321,13 @@
<string name="smscommunicator_loophasbeenenabled">闭环已经被启用</string>
<string name="smscommunicator_loopisdisabled">禁用闭环</string>
<string name="smscommunicator_loopisenabled">启用闭环</string>
<string name="openapsma_valuelimitedto" formatted="false">%.2f 仅限于 %.2f</string>
<string name="openapsma_valuelimitedto">%1$.2f 仅限于 %2$.2f</string>
<string name="openapsma_valueoutofrange" formatted="false">数值 %s 超出限制</string>
<string name="smscommunicator_remotebasalnotallowed">远程基础率设置没有被允许</string>
<string name="smscommunicator_remotecommandnotallowed">远程命令没有被允许</string>
<string name="smscommunicator_basalreplywithcode" formatted="false">开始基础率 %.2fU/h 请回复如下代码 %s</string>
<string name="smscommunicator_suspendreplywithcode" formatted="false">暂停闭环 %d 分钟,请回复 %s</string>
<string name="smscommunicator_tempbasalset" formatted="false">临时基础率 %.2fU/h for %d 分钟,启用成功</string>
<string name="smscommunicator_basalreplywithcode">开始基础率 %1$.2fU/h 请回复如下代码 %2$s</string>
<string name="smscommunicator_suspendreplywithcode">暂停闭环 %1$d 分钟,请回复 %2$s</string>
<string name="smscommunicator_tempbasalset">临时基础率 %1$.2fU/h for %2$d 分钟,启用成功</string>
<string name="smscommunicator_tempbasalfailed">临时基础率启用失败</string>
<string name="smscommunicator_basalstopreplywithcode" formatted="false">为了停止现在的临时基础率请回复 %s</string>
<string name="smscommunicator_tempbasalcanceled">临时基础率取消了</string>
@ -401,7 +401,7 @@
<string name="openapsama">OpenAPS AMA</string>
<string name="short_avgdelta">短 平均增量</string>
<string name="long_avgdelta">长 平均增量</string>
<string name="array_of_elements">Array of %d elements.\nActual value:</string>
<string name="array_of_elements">Array of %1$d elements.\nActual value:</string>
<string name="openapsma_autosensdata_label">autosens</string>
<string name="openapsma_scriptdebugdata_label">脚本调试</string>
<string name="openapsama_useautosens">使用 AMA autosens功能</string>
@ -447,7 +447,7 @@
<string name="always_use_shortavg">总是使用短时间的平均增量代替简单增量</string>
<string name="always_use_shortavg_summary">当数据来自没有过滤的源头时,例如 xDrip 偶尔出现噪音数据.</string>
<string name="advancedsettings_title">高级设置</string>
<string name="danar_model" formatted="false">模块: %02X 协议: %02X 代码: %02X</string>
<string name="danar_model">模块: %1$02X 协议: %2$02X 代码: %3$02X</string>
<string name="profile">Profile</string>
<string name="openapsama_current_basal_safety_multiplier" translatable="false">current_basal_safety_multiplier</string>
<string name="openapsama_current_basal_safety_multiplier_summary">Default value: 4 This is the other half of the key OpenAPS safety caps, and the other half of “3x max daily; 4x current” of the safety caps. This means your basal, regardless of max basal set on your pump, cannot be any higher than this number times the current level of your basal. This is to prevent people from getting into dangerous territory by setting excessively high max basals before understanding how the algorithm works. Again, the default is 4x; most people will never need to adjust this and are instead more likely to need to adjust other settings if they feel like they are “running into” this safety cap.</string>
@ -549,8 +549,8 @@
<string name="pleaseallowpermission">请允许权限</string>
<string name="needwhitelisting">%s 为了达到适当的性能请将android APS加入电池优化白名单</string>
<string name="loopsuspended">闭环暂停</string>
<string name="loopsuspendedfor" formatted="false">暂停 (%d m)</string>
<string name="loopsuperbolusfor" formatted="false">超级大剂量 (%d m)</string>
<string name="loopsuspendedfor">暂停 (%1$d m)</string>
<string name="loopsuperbolusfor">超级大剂量 (%1$d m)</string>
<string name="loopmenu">闭环菜单</string>
<string name="suspendloopfor1h">暂停闭环 1小时</string>
<string name="suspendloopfor2h">暂停闭环 2小时</string>
@ -694,7 +694,7 @@
<string name="free_peak_oref">Free-Peak Oref</string>
<string name="rapid_acting_oref">Rapid-Acting Oref</string>
<string name="ultrarapid_oref">Ultra-Rapid Oref</string>
<string name="dia_too_short" formatted="false">DIA of %s too short - using %s instead!</string>
<string name="dia_too_short">DIA of %1$s too short - using %2$s instead!</string>
<string name="activate_profile">激活配置文件</string>
<string name="date">日期</string>
<string name="invalid">不合规</string>
@ -751,7 +751,7 @@
<string name="shortprotein">Pr</string>
<string name="shortfat">Fat</string>
<string name="active"><![CDATA[<Active>]]></string>
<string name="waitingforestimatedbolusend" formatted="false">正在等待大剂量输注结束. 剩余 %d 秒.</string>
<string name="waitingforestimatedbolusend">正在等待大剂量输注结束. 剩余 %1$d 秒.</string>
<string name="processinghistory">正在处理事件</string>
<string name="startingbolus">正在开始大剂量输注</string>
<string name="executingrightnow">命令正在执行</string>
@ -812,16 +812,16 @@
<string name="combo_tdds">TDDS</string>
<string name="combo_pump_state_label">状态</string>
<string name="combo_pump_activity_label">活动</string>
<string name="combo_no_pump_connection">%d 分钟无连接</string>
<string name="combo_tbr_remaining">%d%% (剩余 %d 分钟)</string>
<string name="combo_last_bolus" translatable="false">%.1f %s (%s)</string>
<string name="combo_no_pump_connection">%1$d 分钟无连接</string>
<string name="combo_tbr_remaining">%1$d%% (剩余 %2$d 分钟)</string>
<string name="combo_last_bolus">%1$.1f %2$s (%3$s)</string>
<string name="combo_pump_state_initializing">正在初始化</string>
<string name="combo_pump_state_disconnected">断开连接</string>
<string name="combo_pump_state_suspended_due_to_error">由于错误导致泵暂停了</string>
<string name="combo_pump_state_suspended_by_user">被用户暂停(Suspended)</string>
<string name="combo_pump_state_running">正在运行</string>
<string name="combo_pump_action_cancelling_tbr">正在取消临时基础率(TBR)</string>
<string name="combo_pump_action_setting_tbr">正在设置临时基础率(TBR) (%d%% / %d 分钟)</string>
<string name="combo_pump_action_setting_tbr">正在设置临时基础率(TBR) (%1$d%% / %2$d 分钟)</string>
<string name="combo_pump_action_bolusing">正在输注大剂量 (%.1f U)</string>
<string name="combo_pump_action_refreshing">正在刷新中</string>
<string name="combo_pump_never_connected">Never</string>
@ -836,7 +836,7 @@
<string name="combo_activity_setting_basal_profile">正在设置基础率配置文件</string>
<string name="combo_pump_cartridge_low_warrning">泵储药器快没胰岛素了</string>
<string name="combo_pump_battery_low_warrning">泵电池电量低</string>
<string name="combo_is_in_error_state">泵上正在显示这个错误 E%d: %s</string>
<string name="combo_is_in_error_state">泵上正在显示这个错误 E%1$d: %2$s</string>
<string name="combo_no_alert_data_note">长按这个按钮,读取泵的错误历史</string>
<string name="combo_no_tdd_data_note">长按这个按钮读取泵的TDD历史</string>
<string name="combo_tdd_minimum">最小值: %3.1f U</string>
@ -855,7 +855,7 @@
<string name="combo_pump_tbr_cancelled_warrning">临时基础率取消告警被确认了</string>
<string name="combo_error_no_connection_no_bolus_delivered">找不到泵,大剂量输注失败</string>
<string name="combo_error_no_bolus_delivered">大剂量输注失败,看起来好像没有大剂量被输注。安全起见,请检查泵,避免重复输注大剂量。软件考虑安全因素,不会再自动重试大剂量输注.</string>
<string name="combo_error_partial_bolus_delivered">由于遇到一个错误,只有 %.2f U of the requested bolus of %.2f U 输注成功了. 请在泵上检查并核实,看是否需要采取适当的措施.</string>
<string name="combo_error_partial_bolus_delivered">由于遇到一个错误,只有 %1$.2f U of the requested bolus of %2$.2f U 输注成功了. 请在泵上检查并核实,看是否需要采取适当的措施.</string>
<string name="combo_error_bolus_verification_failed">输注大剂量和核实泵的历史失败请检查泵如果大剂量已经输注成功请在记录Tab里手动创建一个大剂量记录.</string>
<string name="combo_error_bolus_recovery_progress">正在从连接中断中恢复</string>
<string name="combo_reservoir_level_insufficient_for_bolus">储药器里没有足够的胰岛素可用于大剂量输注了</string>

View file

@ -313,7 +313,7 @@
<string name="danar_glucose">glucose</string>
<string name="danar_carbohydrate">carbohydrate</string>
<string name="danar_alarm">alarm</string>
<string name="danar_totaluploaded" formatted="false">Total %d records uploaded</string>
<string name="danar_totaluploaded">Total %1$d records uploaded</string>
<string name="danar_sbolus">S bolus</string>
<string name="danar_history_alarm">Alarms</string>
<string name="danar_history_basalhours">Basal Hours</string>
@ -324,7 +324,7 @@
<string name="danar_history_glucose">Glucose</string>
<string name="danar_history_refill">Refill</string>
<string name="danar_history_syspend">Suspend</string>
<string name="danar_history_connectingfor" formatted="false">Connecting for %d s</string>
<string name="danar_history_connectingfor">Connecting for %1$d s</string>
<string name="danar_password_title">Pump password</string>
<string name="wrongpumppassword">Wrong pump password!</string>
<string name="pumpbusy">Pump is busy</string>
@ -425,13 +425,13 @@
<string name="MM640g">MM640g</string>
<string name="ongoingnotificaction">Ongoing Notification</string>
<string name="old_data">OLD DATA</string>
<string name="minago">%d min ago</string>
<string name="sms_minago">%dmin ago</string>
<string name="minago">%1$d min ago</string>
<string name="sms_minago">%1$dmin ago</string>
<string name="localprofile">Local Profile</string>
<string name="openapsama">OpenAPS AMA</string>
<string name="short_avgdelta">Short avg. delta</string>
<string name="long_avgdelta">Long avg. delta</string>
<string name="array_of_elements">Array of %d elements.\nActual value:</string>
<string name="array_of_elements">Array of %1$d elements.\nActual value:</string>
<string name="openapsma_autosensdata_label">Autosens data</string>
<string name="openapsma_scriptdebugdata_label">Script debug</string>
<string name="openapsama_useautosens">Use AMA autosens feature</string>
@ -572,8 +572,8 @@
<string name="Glimp">Glimp</string>
<string name="needwhitelisting">%s needs battery optimalization whitelisting for proper performance</string>
<string name="loopsuspended">Loop suspended</string>
<string name="loopsuspendedfor" formatted="false">Suspended (%d m)</string>
<string name="loopsuperbolusfor" formatted="false">Superbolus (%d m)</string>
<string name="loopsuspendedfor">Suspended (%1$d m)</string>
<string name="loopsuperbolusfor">Superbolus (%1$d m)</string>
<string name="suspendloopfor1h">Suspend loop for 1h</string>
<string name="suspendloopfor2h">Suspend loop for 2h</string>
<string name="suspendloopfor3h">Suspend loop for 3h</string>
@ -771,7 +771,7 @@
<string name="shortprotein">Pr</string>
<string name="shortfat">Fat</string>
<string name="active"><![CDATA[<Active>]]></string>
<string name="waitingforestimatedbolusend" formatted="false">Waiting for bolus end. Remaining %d sec.</string>
<string name="waitingforestimatedbolusend">Waiting for bolus end. Remaining %1$d sec.</string>
<string name="processinghistory">Processing event</string>
<string name="startingbolus">Starting bolus delivery</string>
<string name="executingrightnow">Command is executed right now</string>
@ -834,7 +834,7 @@
<string name="combo_refresh">Refresh</string>
<string name="combo_pump_state_label">State</string>
<string name="combo_pump_activity_label">Activity</string>
<string name="combo_no_pump_connection">No connection for %d min</string>
<string name="combo_no_pump_connection">No connection for %1$d min</string>
<string name="combo_tbr_remaining">%1$d%% (%2$d min remaining)</string>
<string name="combo_last_bolus" translatable="false">%1$.1f %2$s (%3$s)</string>
<string name="combo_pump_state_initializing">Initializing</string>
@ -1000,8 +1000,8 @@
<string name="profileswitch_ismissing">ProfileSwitch missing. Please do a profile switch or press \"Activate Profile\" in the LocalProfile.</string>
<string name="combo_bolus_count">Bolus count</string>
<string name="combo_tbr_count">TBR count</string>
<string name="objectivenotstarted" formatted="false">Objective %d not started</string>
<string name="objectivenotfinished" formatted="false">Objective %d not finished</string>
<string name="objectivenotstarted">Objective %1$d not started</string>
<string name="objectivenotfinished">Objective %1$d not finished</string>
<string name="pumpisnottempbasalcapable">Pump is not temp basal capable</string>
<string name="novalidbasalrate">No valid basal rate read from pump</string>
<string name="closedmodedisabledinpreferences">Closed loop mode disabled in preferences</string>
@ -1037,8 +1037,8 @@
<string name="food_short">Food</string>
<string name="iobcobcalculator" translatable="false">IobCobCalculator</string>
<string name="reset">reset</string>
<string name="waitingfortimesynchronization">Waiting for time synchronization (%d sec)</string>
<string name="loopdisconnectedfor">Disconnected (%d m)</string>
<string name="waitingfortimesynchronization">Waiting for time synchronization (%1$d sec)</string>
<string name="loopdisconnectedfor">Disconnected (%1$d m)</string>
<string name="automatic_careportal_events">Automatic careportal events</string>
<string name="automatically_upload_insulin_cannula_and_battery_changes_to_nightscout">Automatically upload insulin, cannula and battery changes and pump alarms to Nightscout</string>
<string name="key_openapssmb_max_iob" translatable="false">openapsmb_max_iob</string>
@ -1164,22 +1164,21 @@
<string name="storedsettingsfound">Stored settings found</string>
<string name="allow_hardware_pump_text">Attention: If you activate and connect to a hardware pump, AndroidAPS will copy the basal settings from the profile to the pump, overwriting the existing basal rate stored on the pump. Make sure you have the correct basal setting in AndroidAPS. If you are not sure or don\'t want to overwrite the basal settings on your pump, press cancel and repeat switching to the pump at a later time.</string>
<string name="error_adding_treatment_title">Treatment data incomplete</string>
<!-- TODO convert to proper style -->
<string name="error_adding_treatment_message" formatted="false">A treatment (insulin: %.2f, carbs: %d, at: %s) could not be added to treatments. Please check and manually add a record as appropriate.</string>
<string name="error_adding_treatment_message">A treatment (insulin: %1$.2f, carbs: %2$d, at: %3$s) could not be added to treatments. Please check and manually add a record as appropriate.</string>
<string name="generated_ecarbs_note">Generated eCarbs with amount: %1$dg, duration: %2$dh, delay: %3$dm</string>
<string name="key_plugin_stats_report_timestamp" translatable="false">key_plugin_stats_report_timestamp</string>
<string name="openaps_noasdata">No autosens data available</string>
<plurals name="objective_days">
<item quantity="one">%d day</item>
<item quantity="other">%d days</item>
<item quantity="one">%1$d day</item>
<item quantity="other">%1$d days</item>
</plurals>
<plurals name="objective_hours">
<item quantity="one">%d hour</item>
<item quantity="other">%d hours</item>
<item quantity="one">%1$d hour</item>
<item quantity="other">%1$d hours</item>
</plurals>
<plurals name="objective_minutes">
<item quantity="one">%d minute</item>
<item quantity="other">%d minutes</item>
<item quantity="one">%1$d minute</item>
<item quantity="other">%1$d minutes</item>
</plurals>
</resources>

3
crowdin.yml Normal file
View file

@ -0,0 +1,3 @@
files:
- source: /app/src/main/res/values/strings.xml
translation: /app/src/main/res/values-%two_letters_code%/strings.xml

BIN
logo/androiaps.eps Normal file

Binary file not shown.

4922
logo/androiaps_tshirt.pdf Normal file

File diff suppressed because one or more lines are too long

Binary file not shown.

Before

Width:  |  Height:  |  Size: 38 KiB

BIN
logo/tshirt.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 492 KiB