Merge branch 'dev' into rsoption

This commit is contained in:
Milos Kozak 2018-06-12 21:59:20 +02:00
commit d051e081e2
82 changed files with 1657 additions and 618 deletions

View file

@ -83,6 +83,8 @@
<action android:name="it.ct.glicemia.ACTION_GLUCOSE_MEASURED" />
<!-- Receiver from DexcomG5 -->
<action android:name="com.dexcom.cgm.DATA" />
<!-- Receiver from Poctech -->
<action android:name="com.china.poctech.data" />
</intent-filter>
</receiver>
<!-- Receiver keepalive, scheduled every 30 min -->
@ -170,7 +172,7 @@
<activity
android:name=".setupwizard.SetupWizardActivity"
android:configChanges="orientation|keyboardHidden|screenSize"
android:theme="@style/AppTheme.SetupWizard"
android:theme="@style/AppTheme.NoActionBar"
android:label="@string/title_activity_setup_wizard" />
<activity android:name=".SingleFragmentActivity"

View file

@ -139,8 +139,10 @@ public class MainActivity extends AppCompatActivity {
AndroidPermission.notifyForStoragePermission(this);
AndroidPermission.notifyForBatteryOptimizationPermission(this);
AndroidPermission.notifyForLocationPermissions(this);
AndroidPermission.notifyForSMSPermissions(this);
if (BuildConfig.APS || BuildConfig.PUMPCONTROL) {
AndroidPermission.notifyForLocationPermissions(this);
AndroidPermission.notifyForSMSPermissions(this);
}
MainApp.bus().post(new EventFeatureRunning(EventFeatureRunning.Feature.MAIN));
}
@ -200,13 +202,14 @@ public class MainActivity extends AppCompatActivity {
menu.clear();
for (PluginBase p : MainApp.getPluginsList()) {
pageAdapter.registerNewFragment(p);
if (p.hasFragment() && !p.isFragmentVisible() && p.isEnabled(p.pluginDescription.getType())) {
if (p.hasFragment() && !p.isFragmentVisible() && p.isEnabled(p.pluginDescription.getType()) && !p.pluginDescription.neverVisible) {
MenuItem menuItem = menu.add(p.getName());
menuItem.setCheckable(true);
menuItem.setOnMenuItemClickListener(item -> {
Intent intent = new Intent(this, SingleFragmentActivity.class);
intent.putExtra("plugin", MainApp.getPluginsList().indexOf(p));
startActivity(intent);
((DrawerLayout) findViewById(R.id.drawer_layout)).closeDrawers();
return true;
});
}

View file

@ -69,6 +69,7 @@ import info.nightscout.androidaps.plugins.Source.SourceDexcomG5Plugin;
import info.nightscout.androidaps.plugins.Source.SourceGlimpPlugin;
import info.nightscout.androidaps.plugins.Source.SourceMM640gPlugin;
import info.nightscout.androidaps.plugins.Source.SourceNSClientPlugin;
import info.nightscout.androidaps.plugins.Source.SourcePoctechPlugin;
import info.nightscout.androidaps.plugins.Source.SourceXdripPlugin;
import info.nightscout.androidaps.plugins.Treatments.TreatmentsPlugin;
import info.nightscout.androidaps.plugins.Wear.WearPlugin;
@ -178,6 +179,8 @@ public class MainApp extends Application {
pluginsList.add(SourceGlimpPlugin.getPlugin());
if (!Config.NSCLIENT)
pluginsList.add(SourceDexcomG5Plugin.getPlugin());
if (!Config.NSCLIENT)
pluginsList.add(SourcePoctechPlugin.getPlugin());
if (Config.SMSCOMMUNICATORENABLED) pluginsList.add(SmsCommunicatorPlugin.getPlugin());
pluginsList.add(FoodPlugin.getPlugin());

View file

@ -13,6 +13,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.R;
import info.nightscout.androidaps.data.ProfileStore;
@ -38,6 +39,7 @@ import info.nightscout.androidaps.plugins.Source.SourceDexcomG5Plugin;
import info.nightscout.androidaps.plugins.Source.SourceGlimpPlugin;
import info.nightscout.androidaps.plugins.Source.SourceMM640gPlugin;
import info.nightscout.androidaps.plugins.Source.SourceNSClientPlugin;
import info.nightscout.androidaps.plugins.Source.SourcePoctechPlugin;
import info.nightscout.androidaps.plugins.Source.SourceXdripPlugin;
import info.nightscout.androidaps.receivers.DataReceiver;
import info.nightscout.utils.BundleLogger;
@ -54,6 +56,7 @@ public class DataService extends IntentService {
boolean mm640gEnabled = false;
boolean glimpEnabled = false;
boolean dexcomG5Enabled = false;
boolean poctechEnabled = false;
public DataService() {
super("DataService");
@ -70,36 +73,49 @@ public class DataService extends IntentService {
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);
@ -129,6 +145,10 @@ public class DataService extends IntentService {
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);
@ -250,6 +270,41 @@ public class DataService extends IntentService {
}
}
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, "utils", 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;

View file

@ -49,4 +49,6 @@ public interface Intents {
String GLIMP_BG = "it.ct.glicemia.ACTION_GLUCOSE_MEASURED";
String DEXCOMG5_BG = "com.dexcom.cgm.DATA";
String POCTECH_BG = "com.china.poctech.data";
}

View file

@ -57,6 +57,11 @@ public abstract class PluginBase {
return getName();
}
public String getDescription() {
if (pluginDescription.description == -1) return null;
else return MainApp.gs(pluginDescription.description);
}
public PluginType getType() {
return pluginDescription.mainType;
}

View file

@ -9,6 +9,7 @@ public class PluginDescription {
boolean showInList = true;
int pluginName = -1;
int shortName = -1;
int description = -1;
int preferencesId = -1;
int advancedPreferencesId = -1;
public boolean enableByDefault = false;
@ -74,6 +75,11 @@ public class PluginDescription {
return this;
}
public PluginDescription description(int description) {
this.description = description;
return this;
}
public String getFragmentClass() {
return fragmentClass;
}

View file

@ -17,6 +17,7 @@ public class ActionsPlugin extends PluginBase {
.fragmentClass(ActionsFragment.class.getName())
.pluginName(R.string.actions)
.shortName(R.string.actions_shortname)
.description(R.string.description_actions)
);
}
}

View file

@ -61,6 +61,10 @@ public class FillDialog extends DialogFragment implements OnClickListener {
private EditText notesEdit;
//one shot guards
private boolean accepted;
private boolean okClicked;
final private TextWatcher textWatcher = new TextWatcher() {
@Override
public void afterTextChanged(Editable s) {
@ -163,7 +167,14 @@ public class FillDialog extends DialogFragment implements OnClickListener {
}
private void confirmAndDeliver() {
private synchronized void confirmAndDeliver() {
if (okClicked) {
log.debug("guarding: ok already clicked");
dismiss();
return;
}
okClicked = true;
try {
Double insulin = SafeParse.stringToDouble(editInsulin.getText());
@ -198,32 +209,40 @@ public class FillDialog extends DialogFragment implements OnClickListener {
if (insulinAfterConstraints > 0 || pumpSiteChangeCheckbox.isChecked() || insulinCartridgeChangeCheckbox.isChecked()) {
builder.setMessage(Html.fromHtml(Joiner.on("<br/>").join(confirmMessage)));
builder.setPositiveButton(MainApp.gs(R.string.primefill), (dialog, id) -> {
if (finalInsulinAfterConstraints > 0) {
DetailedBolusInfo detailedBolusInfo = new DetailedBolusInfo();
detailedBolusInfo.insulin = finalInsulinAfterConstraints;
detailedBolusInfo.context = context;
detailedBolusInfo.source = Source.USER;
detailedBolusInfo.isValid = false; // do not count it in IOB (for pump history)
detailedBolusInfo.notes = notes;
ConfigBuilderPlugin.getCommandQueue().bolus(detailedBolusInfo, new Callback() {
@Override
public void run() {
if (!result.success) {
Intent i = new Intent(MainApp.instance(), ErrorHelperActivity.class);
i.putExtra("soundid", R.raw.boluserror);
i.putExtra("status", result.comment);
i.putExtra("title", MainApp.gs(R.string.treatmentdeliveryerror));
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
MainApp.instance().startActivity(i);
synchronized (builder) {
if (accepted) {
log.debug("guarding: already accepted");
return;
}
accepted = true;
if (finalInsulinAfterConstraints > 0) {
DetailedBolusInfo detailedBolusInfo = new DetailedBolusInfo();
detailedBolusInfo.insulin = finalInsulinAfterConstraints;
detailedBolusInfo.context = context;
detailedBolusInfo.source = Source.USER;
detailedBolusInfo.isValid = false; // do not count it in IOB (for pump history)
detailedBolusInfo.notes = notes;
ConfigBuilderPlugin.getCommandQueue().bolus(detailedBolusInfo, new Callback() {
@Override
public void run() {
if (!result.success) {
Intent i = new Intent(MainApp.instance(), ErrorHelperActivity.class);
i.putExtra("soundid", R.raw.boluserror);
i.putExtra("status", result.comment);
i.putExtra("title", MainApp.gs(R.string.treatmentdeliveryerror));
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
MainApp.instance().startActivity(i);
}
}
}
});
FabricPrivacy.getInstance().logCustom(new CustomEvent("Fill"));
});
FabricPrivacy.getInstance().logCustom(new CustomEvent("Fill"));
}
if (pumpSiteChangeCheckbox.isChecked())
NSUpload.uploadEvent(CareportalEvent.SITECHANGE, now(), notes);
if (insulinCartridgeChangeCheckbox.isChecked())
NSUpload.uploadEvent(CareportalEvent.INSULINCHANGE, now() + 1000, notes);
}
if (pumpSiteChangeCheckbox.isChecked())
NSUpload.uploadEvent(CareportalEvent.SITECHANGE, now(), notes);
if (insulinCartridgeChangeCheckbox.isChecked())
NSUpload.uploadEvent(CareportalEvent.INSULINCHANGE, now() + 1000, notes);
});
} else {
builder.setMessage(MainApp.gs(R.string.no_action_selected));

View file

@ -23,6 +23,9 @@ public class CareportalPlugin extends PluginBase {
.fragmentClass(CareportalFragment.class.getName())
.pluginName(R.string.careportal)
.shortName(R.string.careportal_shortname)
.visibleByDefault(true)
.enableByDefault(true)
.description(R.string.description_careportal)
);
}

View file

@ -21,7 +21,7 @@ abstract public class SubscriberFragment extends Fragment {
updateGUI();
}
@Override public void onDestroyView() {
@Override public synchronized void onDestroyView() {
super.onDestroyView();
if (unbinder != null)
unbinder.unbind();

View file

@ -1,30 +1,31 @@
package info.nightscout.androidaps.plugins.ConfigBuilder;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.ImageView;
import android.widget.ImageButton;
import android.widget.LinearLayout;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.RadioButton;
import android.widget.ScrollView;
import android.widget.TextView;
import com.crashlytics.android.answers.CustomEvent;
import java.util.ArrayList;
import java.util.List;
import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.OnCheckedChanged;
import butterknife.OnClick;
import info.nightscout.androidaps.Config;
import butterknife.Optional;
import butterknife.Unbinder;
import info.nightscout.androidaps.MainApp;
import info.nightscout.androidaps.PreferencesActivity;
import info.nightscout.androidaps.R;
@ -50,69 +51,47 @@ import info.nightscout.utils.PasswordProtection;
public class ConfigBuilderFragment extends SubscriberFragment {
@BindView(R.id.configbuilder_insulinlistview)
ListView insulinListView;
@BindView(R.id.configbuilder_sensitivitylistview)
ListView sensitivityListView;
@BindView(R.id.configbuilder_bgsourcelistview)
ListView bgsourceListView;
@BindView(R.id.configbuilder_bgsourcelabel)
TextView bgsourceLabel;
@BindView(R.id.configbuilder_pumplistview)
ListView pumpListView;
@BindView(R.id.configbuilder_pumplabel)
TextView pumpLabel;
@BindView(R.id.configbuilder_looplistview)
ListView loopListView;
@BindView(R.id.configbuilder_looplabel)
TextView loopLabel;
@BindView(R.id.configbuilder_treatmentslistview)
ListView treatmentsListView;
@BindView(R.id.configbuilder_treatmentslabel)
TextView treatmentsLabel;
@BindView(R.id.configbuilder_profilelistview)
ListView profileListView;
@BindView(R.id.configbuilder_profilelabel)
TextView profileLabel;
@BindView(R.id.configbuilder_apslistview)
ListView apsListView;
@BindView(R.id.configbuilder_apslabel)
TextView apsLabel;
@BindView(R.id.configbuilder_constraintslistview)
ListView constraintsListView;
@BindView(R.id.configbuilder_constraintslabel)
TextView constraintsLabel;
@BindView(R.id.configbuilder_generallistview)
ListView generalListView;
private List<PluginView> pluginViews = new ArrayList<>();
@BindView(R.id.configbuilder_mainlayout)
LinearLayout mainLayout;
@BindView(R.id.configbuilder_unlock)
@BindView(R.id.profile_plugins)
LinearLayout profilePlugins;
@BindView(R.id.insulin_plugins)
LinearLayout insulinPlugins;
@BindView(R.id.bgsource_plugins)
LinearLayout bgSourcePlugins;
@BindView(R.id.pump_plugins)
LinearLayout pumpPlugins;
@BindView(R.id.sensitivity_plugins)
LinearLayout sensitivityPlugins;
@BindView(R.id.aps_plugins)
LinearLayout apsPlugins;
@BindView(R.id.loop_plugins)
LinearLayout loopPlugins;
@BindView(R.id.constraints_plugins)
LinearLayout constraintsPlugins;
@BindView(R.id.treatments_plugins)
LinearLayout treatmentsPlugins;
@BindView(R.id.general_plugins)
LinearLayout generalPlugins;
@BindView(R.id.main_layout)
ScrollView mainLayout;
@BindView(R.id.unlock)
Button unlock;
PluginCustomAdapter insulinDataAdapter = null;
PluginCustomAdapter sensivityDataAdapter = null;
PluginCustomAdapter bgsourceDataAdapter = null;
PluginCustomAdapter pumpDataAdapter = null;
PluginCustomAdapter loopDataAdapter = null;
PluginCustomAdapter treatmentDataAdapter = null;
PluginCustomAdapter profileDataAdapter = null;
PluginCustomAdapter apsDataAdapter = null;
PluginCustomAdapter constraintsDataAdapter = null;
PluginCustomAdapter generalDataAdapter = null;
@Override
public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
try {
View view = inflater.inflate(R.layout.configbuilder_fragment, container, false);
unbinder = ButterKnife.bind(this, view);
if (PasswordProtection.isLocked("settings_password"))
mainLayout.setVisibility(View.GONE);
else
unlock.setVisibility(View.GONE);
else unlock.setVisibility(View.GONE);
createViews();
return view;
} catch (Exception e) {
FabricPrivacy.logException(e);
@ -121,222 +100,49 @@ public class ConfigBuilderFragment extends SubscriberFragment {
return null;
}
@OnClick(R.id.configbuilder_unlock)
public void onClickUnlock() {
@OnClick(R.id.unlock)
void onClickUnlock() {
PasswordProtection.QueryPassword(getContext(), R.string.settings_password, "settings_password", () -> {
mainLayout.setVisibility(View.VISIBLE);
unlock.setVisibility(View.GONE);
}, null);
}
@Override
public void onDestroyView() {
super.onDestroyView();
for (PluginView pluginView : pluginViews) pluginView.unbind();
pluginViews.clear();
}
@Override
protected void updateGUI() {
insulinDataAdapter = new PluginCustomAdapter(getContext(), R.layout.configbuilder_simpleitem, MainApp.getSpecificPluginsVisibleInListByInterface(InsulinInterface.class, PluginType.INSULIN), PluginType.INSULIN);
insulinListView.setAdapter(insulinDataAdapter);
setListViewHeightBasedOnChildren(insulinListView);
bgsourceDataAdapter = new PluginCustomAdapter(getContext(), R.layout.configbuilder_simpleitem, MainApp.getSpecificPluginsVisibleInListByInterface(BgSourceInterface.class, PluginType.BGSOURCE), PluginType.BGSOURCE);
bgsourceListView.setAdapter(bgsourceDataAdapter);
if (MainApp.getSpecificPluginsVisibleInList(PluginType.BGSOURCE).size() == 0)
bgsourceLabel.setVisibility(View.GONE);
setListViewHeightBasedOnChildren(bgsourceListView);
pumpDataAdapter = new PluginCustomAdapter(getContext(), R.layout.configbuilder_simpleitem, MainApp.getSpecificPluginsVisibleInList(PluginType.PUMP), PluginType.PUMP);
pumpListView.setAdapter(pumpDataAdapter);
if (MainApp.getSpecificPluginsVisibleInList(PluginType.PUMP).size() == 0 || Config.NSCLIENT || Config.G5UPLOADER) {
pumpLabel.setVisibility(View.GONE);
pumpListView.setVisibility(View.GONE);
}
setListViewHeightBasedOnChildren(pumpListView);
loopDataAdapter = new PluginCustomAdapter(getContext(), R.layout.configbuilder_simpleitem, MainApp.getSpecificPluginsVisibleInList(PluginType.LOOP), PluginType.LOOP);
loopListView.setAdapter(loopDataAdapter);
setListViewHeightBasedOnChildren(loopListView);
if (MainApp.getSpecificPluginsVisibleInList(PluginType.LOOP).size() == 0)
loopLabel.setVisibility(View.GONE);
treatmentDataAdapter = new PluginCustomAdapter(getContext(), R.layout.configbuilder_simpleitem, MainApp.getSpecificPluginsVisibleInList(PluginType.TREATMENT), PluginType.TREATMENT);
treatmentsListView.setAdapter(treatmentDataAdapter);
setListViewHeightBasedOnChildren(treatmentsListView);
if (MainApp.getSpecificPluginsVisibleInList(PluginType.TREATMENT).size() == 0)
treatmentsLabel.setVisibility(View.GONE);
profileDataAdapter = new PluginCustomAdapter(getContext(), R.layout.configbuilder_simpleitem, MainApp.getSpecificPluginsVisibleInListByInterface(ProfileInterface.class, PluginType.PROFILE), PluginType.PROFILE);
profileListView.setAdapter(profileDataAdapter);
if (MainApp.getSpecificPluginsVisibleInList(PluginType.PROFILE).size() == 0)
profileLabel.setVisibility(View.GONE);
setListViewHeightBasedOnChildren(profileListView);
apsDataAdapter = new PluginCustomAdapter(getContext(), R.layout.configbuilder_simpleitem, MainApp.getSpecificPluginsVisibleInList(PluginType.APS), PluginType.APS);
apsListView.setAdapter(apsDataAdapter);
setListViewHeightBasedOnChildren(apsListView);
if (MainApp.getSpecificPluginsVisibleInList(PluginType.APS).size() == 0)
apsLabel.setVisibility(View.GONE);
sensivityDataAdapter = new PluginCustomAdapter(getContext(), R.layout.configbuilder_simpleitem, MainApp.getSpecificPluginsVisibleInListByInterface(SensitivityInterface.class, PluginType.SENSITIVITY), PluginType.SENSITIVITY);
sensitivityListView.setAdapter(sensivityDataAdapter);
setListViewHeightBasedOnChildren(sensitivityListView);
constraintsDataAdapter = new PluginCustomAdapter(getContext(), R.layout.configbuilder_simpleitem, MainApp.getSpecificPluginsVisibleInListByInterface(ConstraintsInterface.class, PluginType.CONSTRAINTS), PluginType.CONSTRAINTS);
constraintsListView.setAdapter(constraintsDataAdapter);
setListViewHeightBasedOnChildren(constraintsListView);
if (MainApp.getSpecificPluginsVisibleInList(PluginType.CONSTRAINTS).size() == 0)
constraintsLabel.setVisibility(View.GONE);
generalDataAdapter = new PluginCustomAdapter(getContext(), R.layout.configbuilder_simpleitem, MainApp.getSpecificPluginsVisibleInList(PluginType.GENERAL), PluginType.GENERAL);
generalListView.setAdapter(generalDataAdapter);
setListViewHeightBasedOnChildren(generalListView);
for (PluginView pluginView : pluginViews) pluginView.update();
}
/*
* ConfigBuilderFragment code
*/
private class PluginCustomAdapter extends ArrayAdapter<PluginBase> {
private ArrayList<PluginBase> pluginList;
final private PluginType type;
PluginCustomAdapter(Context context, int textViewResourceId,
ArrayList<PluginBase> pluginList, PluginType type) {
super(context, textViewResourceId, pluginList);
this.pluginList = new ArrayList<>();
this.pluginList.addAll(pluginList);
this.type = type;
}
private class PluginViewHolder {
TextView name;
CheckBox checkboxEnabled;
CheckBox checkboxVisible;
ImageView settings;
}
@NonNull
@Override
public View getView(int position, View view, @NonNull ViewGroup parent) {
PluginViewHolder holder;
PluginBase plugin = pluginList.get(position);
if (view == null) {
view = LayoutInflater.from(parent.getContext()).inflate(R.layout.configbuilder_simpleitem, null);
holder = new PluginViewHolder();
holder.name = (TextView) view.findViewById(R.id.configbuilder_simpleitem_name);
holder.checkboxEnabled = (CheckBox) view.findViewById(R.id.configbuilder_simpleitem_checkboxenabled);
holder.checkboxVisible = (CheckBox) view.findViewById(R.id.configbuilder_simpleitem_checkboxvisible);
holder.settings = (ImageView) view.findViewById(R.id.configbuilder_simpleitem_settings);
if (plugin.isEnabled(type) && plugin.getPreferencesId() != -1)
holder.settings.setVisibility(View.VISIBLE);
else
holder.settings.setVisibility(View.INVISIBLE);
view.setTag(holder);
holder.checkboxEnabled.setOnClickListener(v -> {
CheckBox cb = (CheckBox) v;
PluginBase plugin1 = (PluginBase) cb.getTag();
plugin1.setPluginEnabled(type, cb.isChecked());
plugin1.setFragmentVisible(type, cb.isChecked());
onEnabledCategoryChanged(plugin1, type);
ConfigBuilderPlugin.getPlugin().storeSettings("CheckedCheckboxEnabled");
MainApp.bus().post(new EventRefreshGui());
MainApp.bus().post(new EventConfigBuilderChange());
ConfigBuilderPlugin.getPlugin().logPluginStatus();
FabricPrivacy.getInstance().logCustom(new CustomEvent("ConfigurationChange"));
});
holder.checkboxVisible.setOnClickListener(v -> {
CheckBox cb = (CheckBox) v;
PluginBase plugin12 = (PluginBase) cb.getTag();
plugin12.setFragmentVisible(type, cb.isChecked());
ConfigBuilderPlugin.getPlugin().storeSettings("CheckedCheckboxVisible");
MainApp.bus().post(new EventRefreshGui());
ConfigBuilderPlugin.getPlugin().logPluginStatus();
});
holder.settings.setOnClickListener(v -> {
final PluginBase plugin13 = (PluginBase) v.getTag();
PasswordProtection.QueryPassword(getContext(), R.string.settings_password, "settings_password", () -> {
Intent i = new Intent(getContext(), PreferencesActivity.class);
i.putExtra("id", plugin13.getPreferencesId());
startActivity(i);
}, null);
});
holder.name.setOnLongClickListener(v -> {
final PluginBase plugin14 = (PluginBase) v.getTag();
PasswordProtection.QueryPassword(getContext(), R.string.settings_password, "settings_password", () -> {
Intent i = new Intent(getContext(), PreferencesActivity.class);
i.putExtra("id", plugin14.getPreferencesId());
startActivity(i);
}, null);
return false;
});
} else {
holder = (PluginViewHolder) view.getTag();
}
holder.name.setText(plugin.getName());
holder.checkboxEnabled.setChecked(plugin.isEnabled(type));
holder.checkboxVisible.setChecked(plugin.isFragmentVisible());
holder.name.setTag(plugin);
holder.checkboxEnabled.setTag(plugin);
holder.checkboxVisible.setTag(plugin);
holder.settings.setTag(plugin);
if (plugin.pluginDescription.alwaysEnabled) {
holder.checkboxEnabled.setEnabled(false);
}
if (plugin.pluginDescription.alwayVisible) {
holder.checkboxEnabled.setEnabled(false);
}
if (!plugin.isEnabled(type)) {
holder.checkboxVisible.setEnabled(false);
}
if (!plugin.hasFragment()) {
holder.checkboxVisible.setVisibility(View.INVISIBLE);
}
// Hide enabled control and force enabled plugin if there is only one plugin available
if (type == PluginType.INSULIN || type == PluginType.PUMP || type == PluginType.SENSITIVITY)
if (pluginList.size() < 2) {
holder.checkboxEnabled.setEnabled(false);
plugin.setPluginEnabled(type, true);
ConfigBuilderPlugin.getPlugin().storeSettings("ForceEnable");
}
// Constraints cannot be disabled
if (type == PluginType.CONSTRAINTS)
holder.checkboxEnabled.setEnabled(false);
// Hide disabled profiles by default
if (type == PluginType.PROFILE) {
if (!plugin.isEnabled(type)) {
holder.checkboxVisible.setEnabled(false);
holder.checkboxVisible.setChecked(false);
} else {
holder.checkboxVisible.setEnabled(true);
}
}
// Disable profile control for pump profiles if pump is not enabled
if (type == PluginType.PROFILE) {
if (PumpInterface.class.isAssignableFrom(plugin.getClass())) {
if (!plugin.isEnabled(PluginType.PUMP)) {
holder.checkboxEnabled.setEnabled(false);
holder.checkboxEnabled.setChecked(false);
}
}
}
if (plugin.isEnabled(type)) {
view.setBackgroundColor(MainApp.gc(R.color.configBuilderSelectedBackground));
}
return view;
private void createViews() {
createViewsForPlugins(profilePlugins, MainApp.getSpecificPluginsVisibleInListByInterface(ProfileInterface.class, PluginType.PROFILE));
createViewsForPlugins(insulinPlugins, MainApp.getSpecificPluginsVisibleInListByInterface(InsulinInterface.class, PluginType.INSULIN));
createViewsForPlugins(bgSourcePlugins, MainApp.getSpecificPluginsVisibleInListByInterface(BgSourceInterface.class, PluginType.BGSOURCE));
createViewsForPlugins(pumpPlugins, MainApp.getSpecificPluginsVisibleInList(PluginType.PUMP));
createViewsForPlugins(sensitivityPlugins, MainApp.getSpecificPluginsVisibleInListByInterface(SensitivityInterface.class, PluginType.SENSITIVITY));
createViewsForPlugins(apsPlugins, MainApp.getSpecificPluginsVisibleInList(PluginType.APS));
createViewsForPlugins(loopPlugins, MainApp.getSpecificPluginsVisibleInList(PluginType.LOOP));
createViewsForPlugins(constraintsPlugins, MainApp.getSpecificPluginsVisibleInListByInterface(ConstraintsInterface.class, PluginType.CONSTRAINTS));
createViewsForPlugins(treatmentsPlugins, MainApp.getSpecificPluginsVisibleInList(PluginType.TREATMENT));
createViewsForPlugins(generalPlugins, MainApp.getSpecificPluginsVisibleInList(PluginType.GENERAL));
}
private void createViewsForPlugins(LinearLayout parent, List<PluginBase> plugins) {
for (PluginBase plugin: plugins) {
PluginView pluginView = new PluginView(plugin);
parent.addView(pluginView.getBaseView());
pluginViews.add(pluginView);
}
}
private boolean areMultipleSelectionsAllowed(PluginType type) {
return type == PluginType.GENERAL || type == PluginType.CONSTRAINTS ||type == PluginType.LOOP;
}
public static void processOnEnabledCategoryChanged(PluginBase changedPlugin, PluginType type) {
@ -394,35 +200,90 @@ public class ConfigBuilderFragment extends SubscriberFragment {
}
}
void onEnabledCategoryChanged(PluginBase changedPlugin, PluginType type) {
processOnEnabledCategoryChanged(changedPlugin, type);
updateGUI();
}
class PluginView {
/****
* Method for Setting the Height of the ListView dynamically.
* *** Hack to fix the issue of not showing all the items of the ListView
* *** when placed inside a ScrollView
****/
public static void setListViewHeightBasedOnChildren(ListView listView) {
ListAdapter listAdapter = listView.getAdapter();
if (listAdapter == null)
return;
private Unbinder unbinder;
private PluginBase plugin;
int desiredWidth = View.MeasureSpec.makeMeasureSpec(listView.getWidth(), View.MeasureSpec.UNSPECIFIED);
int totalHeight = 0;
View view = null;
for (int i = 0; i < listAdapter.getCount(); i++) {
view = listAdapter.getView(i, view, listView);
if (i == 0)
view.setLayoutParams(new ViewGroup.LayoutParams(desiredWidth, ViewGroup.LayoutParams.WRAP_CONTENT));
LinearLayout baseView;
@BindView(R.id.plugin_enabled_exclusive)
RadioButton enabledExclusive;
@BindView(R.id.plugin_enabled_inclusive)
CheckBox enabledInclusive;
@BindView(R.id.plugin_name)
TextView pluginName;
@BindView(R.id.plugin_description)
TextView pluginDescription;
@BindView(R.id.plugin_preferences)
ImageButton pluginPreferences;
@BindView(R.id.plugin_visibility)
CheckBox pluginVisibility;
view.measure(desiredWidth, View.MeasureSpec.UNSPECIFIED);
totalHeight += view.getMeasuredHeight();
public PluginView(PluginBase plugin) {
this.plugin = plugin;
baseView = (LinearLayout) getLayoutInflater().inflate(R.layout.configbuilder_single_plugin, null);
unbinder = ButterKnife.bind(this, baseView);
update();
}
ViewGroup.LayoutParams params = listView.getLayoutParams();
params.height = totalHeight + (listView.getDividerHeight() * (listAdapter.getCount() - 1));
listView.setLayoutParams(params);
public LinearLayout getBaseView() {
return baseView;
}
public void update() {
enabledExclusive.setVisibility(areMultipleSelectionsAllowed(plugin.getType()) ? View.GONE : View.VISIBLE);
enabledInclusive.setVisibility(areMultipleSelectionsAllowed(plugin.getType()) ? View.VISIBLE : View.GONE);
enabledExclusive.setChecked(plugin.isEnabled(plugin.getType()));
enabledInclusive.setChecked(plugin.isEnabled(plugin.getType()));
enabledInclusive.setEnabled(!plugin.pluginDescription.alwaysEnabled);
enabledExclusive.setEnabled(!plugin.pluginDescription.alwaysEnabled);
pluginName.setText(plugin.getName());
if (plugin.getDescription() == null) pluginDescription.setVisibility(View.GONE);
else {
pluginDescription.setVisibility(View.VISIBLE);
pluginDescription.setText(plugin.getDescription());
}
pluginPreferences.setVisibility(plugin.getPreferencesId() == -1 || !plugin.isEnabled(plugin.getType()) ? View.INVISIBLE : View.VISIBLE);
pluginVisibility.setVisibility(plugin.hasFragment() ? View.VISIBLE : View.INVISIBLE);
pluginVisibility.setEnabled(!(plugin.pluginDescription.neverVisible || plugin.pluginDescription.alwayVisible) && plugin.isEnabled(plugin.getType()));
pluginVisibility.setChecked(plugin.isFragmentVisible());
}
@OnClick(R.id.plugin_visibility)
void onVisibilityChanged() {
plugin.setFragmentVisible(plugin.getType(), pluginVisibility.isChecked());
ConfigBuilderPlugin.getPlugin().storeSettings("CheckedCheckboxVisible");
MainApp.bus().post(new EventRefreshGui());
ConfigBuilderPlugin.getPlugin().logPluginStatus();
}
@OnClick({R.id.plugin_enabled_exclusive, R.id.plugin_enabled_inclusive})
void onEnabledChanged() {
boolean enabled = enabledExclusive.getVisibility() == View.VISIBLE ? enabledExclusive.isChecked() : enabledInclusive.isChecked();
plugin.setPluginEnabled(plugin.getType(), enabled);
plugin.setFragmentVisible(plugin.getType(), enabled);
processOnEnabledCategoryChanged(plugin, plugin.getType());
updateGUI();
ConfigBuilderPlugin.getPlugin().storeSettings("CheckedCheckboxEnabled");
MainApp.bus().post(new EventRefreshGui());
MainApp.bus().post(new EventConfigBuilderChange());
ConfigBuilderPlugin.getPlugin().logPluginStatus();
FabricPrivacy.getInstance().logCustom(new CustomEvent("ConfigurationChange"));
}
@OnClick(R.id.plugin_preferences)
void onPluginPreferencesClicked() {
PasswordProtection.QueryPassword(getContext(), R.string.settings_password, "settings_password", () -> {
Intent i = new Intent(getContext(), PreferencesActivity.class);
i.putExtra("id", plugin.getPreferencesId());
startActivity(i);
}, null);
}
public void unbind() {
unbinder.unbind();
}
}
}

View file

@ -92,6 +92,7 @@ public class ConfigBuilderPlugin extends PluginBase {
.alwayVisible(false)
.pluginName(R.string.configbuilder)
.shortName(R.string.configbuilder_shortname)
.description(R.string.description_config_builder)
);
}

View file

@ -56,6 +56,7 @@ public class ObjectivesPlugin extends PluginBase implements ConstraintsInterface
.showInList(!Config.NSCLIENT && !Config.G5UPLOADER)
.pluginName(R.string.objectives)
.shortName(R.string.objectives_shortname)
.description(R.string.description_objectives)
);
initializeData();
loadProgress();

View file

@ -26,6 +26,7 @@ public class FoodPlugin extends PluginBase {
.fragmentClass(FoodFragment.class.getName())
.pluginName(R.string.food)
.shortName(R.string.food_short)
.description(R.string.description_food)
);
this.service = new FoodService();
}

View file

@ -29,6 +29,7 @@ public abstract class InsulinOrefBasePlugin extends PluginBase implements Insuli
.fragmentClass(InsulinFragment.class.getName())
.pluginName(R.string.fastactinginsulin)
.shortName(R.string.insulin_shortname)
.visibleByDefault(false)
);
}

View file

@ -24,7 +24,8 @@ public class InsulinOrefFreePeakPlugin extends InsulinOrefBasePlugin {
super();
pluginDescription
.pluginName(R.string.free_peak_oref)
.preferencesId(R.xml.pref_insulinoreffreepeak);
.preferencesId(R.xml.pref_insulinoreffreepeak)
.description(R.string.description_insulin_free_peak);
}
@Override

View file

@ -22,7 +22,8 @@ public class InsulinOrefRapidActingPlugin extends InsulinOrefBasePlugin {
private InsulinOrefRapidActingPlugin() {
super();
pluginDescription
.pluginName(R.string.rapid_acting_oref);
.pluginName(R.string.rapid_acting_oref)
.description(R.string.description_insulin_rapid);
}
@Override

View file

@ -22,7 +22,8 @@ public class InsulinOrefUltraRapidActingPlugin extends InsulinOrefBasePlugin {
private InsulinOrefUltraRapidActingPlugin() {
super();
pluginDescription
.pluginName(R.string.ultrarapid_oref);
.pluginName(R.string.ultrarapid_oref)
.description(R.string.description_insulin_ultra_rapid);
}
@Override

View file

@ -94,6 +94,7 @@ public class LoopPlugin extends PluginBase {
.pluginName(R.string.loop)
.shortName(R.string.loop_shortname)
.preferencesId(R.xml.pref_closedmode)
.description(R.string.description_loop)
);
loopSuspendedTill = SP.getLong("loopSuspendedTill", 0L);
isSuperBolus = SP.getBoolean("isSuperBolus", false);

View file

@ -69,6 +69,7 @@ public class NSClientPlugin extends PluginBase {
.pluginName(R.string.nsclientinternal)
.shortName(R.string.nsclientinternal_shortname)
.preferencesId(R.xml.pref_nsclientinternal)
.description(R.string.description_ns_client)
);
if (Config.NSCLIENT || Config.G5UPLOADER) {

View file

@ -62,6 +62,7 @@ public class OpenAPSAMAPlugin extends PluginBase implements APSInterface {
.pluginName(R.string.openapsama)
.shortName(R.string.oaps_shortname)
.preferencesId(R.xml.pref_openapsama)
.description(R.string.description_ama)
);
}

View file

@ -62,6 +62,7 @@ public class OpenAPSMAPlugin extends PluginBase implements APSInterface {
.pluginName(R.string.openapsma)
.shortName(R.string.oaps_shortname)
.preferencesId(R.xml.pref_openapsma)
.description(R.string.description_ma)
);
}

View file

@ -65,6 +65,7 @@ public class OpenAPSSMBPlugin extends PluginBase implements APSInterface {
.pluginName(R.string.openapssmb)
.shortName(R.string.smb_shortname)
.preferencesId(R.xml.pref_openapssmb)
.description(R.string.description_smb)
);
}

View file

@ -315,6 +315,7 @@ public class WizardDialog extends DialogFragment implements OnClickListener, Com
confirmMessage += "<br/>" + MainApp.gs(R.string.carbs) + ": " + "<font color='" + MainApp.gc(R.color.carbs) + "'>" + carbsAfterConstraints + "g" + "</font>";
if (insulinAfterConstraints - calculatedTotalInsulin != 0 || !carbsAfterConstraints.equals(calculatedCarbs)) {
okClicked = false;
AlertDialog.Builder builder = new AlertDialog.Builder(context);
builder.setTitle(MainApp.gs(R.string.treatmentdeliveryerror));
builder.setMessage(MainApp.gs(R.string.constraints_violation) + "\n" + MainApp.gs(R.string.changeyourinput));
@ -408,9 +409,9 @@ public class WizardDialog extends DialogFragment implements OnClickListener, Com
private void initDialog() {
Profile profile = MainApp.getConfigBuilder().getProfile();
ProfileStore profileStore = MainApp.getConfigBuilder().getActiveProfileInterface().getProfile();
ProfileStore profileStore = MainApp.getConfigBuilder().getActiveProfileInterface() != null ? MainApp.getConfigBuilder().getActiveProfileInterface().getProfile() : null;
if (profile == null) {
if (profile == null || profileStore == null) {
ToastUtils.showToastInUiThread(MainApp.instance().getApplicationContext(), MainApp.gs(R.string.noprofile));
dismiss();
return;

View file

@ -672,12 +672,15 @@ public class OverviewFragment extends Fragment implements View.OnClickListener,
private void onClickAcceptTemp() {
Profile profile = MainApp.getConfigBuilder().getProfile();
Context context = getContext();
if (context == null) return;
if (LoopPlugin.getPlugin().isEnabled(PluginType.LOOP) && profile != null) {
LoopPlugin.getPlugin().invoke("Accept temp button", false);
final LoopPlugin.LastRun finalLastRun = LoopPlugin.lastRun;
if (finalLastRun != null && finalLastRun.lastAPSRun != null && finalLastRun.constraintsProcessed.isChangeRequested()) {
AlertDialog.Builder builder = new AlertDialog.Builder(getContext());
AlertDialog.Builder builder = new AlertDialog.Builder(context);
builder.setTitle(MainApp.gs(R.string.confirmation));
builder.setMessage(MainApp.gs(R.string.setbasalquestion) + "\n" + finalLastRun.constraintsProcessed);
builder.setPositiveButton(MainApp.gs(R.string.ok), (dialog, id) -> {

View file

@ -50,6 +50,7 @@ public class OverviewPlugin extends PluginBase {
.pluginName(R.string.overview)
.shortName(R.string.overview_shortname)
.preferencesId(R.xml.pref_overview)
.description(R.string.description_overview)
);
String storedData = SP.getString("QuickWizard", "[]");
try {

View file

@ -57,6 +57,7 @@ public class PersistentNotificationPlugin extends PluginBase {
.neverVisible(true)
.pluginName(R.string.ongoingnotificaction)
.enableByDefault(true)
.description(R.string.description_persistent_notification)
);
this.ctx = ctx;
}

View file

@ -64,6 +64,7 @@ public class LocalProfilePlugin extends PluginBase implements ProfileInterface {
.fragmentClass(LocalProfileFragment.class.getName())
.pluginName(R.string.localprofile)
.shortName(R.string.localprofile_shortname)
.description(R.string.description_profile_local)
);
loadSettings();
}

View file

@ -49,6 +49,7 @@ public class NSProfilePlugin extends PluginBase implements ProfileInterface {
.alwaysEnabled(Config.NSCLIENT)
.alwayVisible(Config.NSCLIENT)
.showInList(!Config.NSCLIENT)
.description(R.string.description_profile_nightscout)
);
loadNSProfile();
}

View file

@ -52,6 +52,7 @@ public class SimpleProfilePlugin extends PluginBase implements ProfileInterface
.fragmentClass(SimpleProfileFragment.class.getName())
.pluginName(R.string.simpleprofile)
.shortName(R.string.simpleprofile_shortname)
.description(R.string.description_profile_simple)
);
loadSettings();
}

View file

@ -167,6 +167,7 @@ public class ComboPlugin extends PluginBase implements PumpInterface, Constraint
.fragmentClass(ComboFragment.class.getName())
.pluginName(R.string.combopump)
.shortName(R.string.combopump_shortname)
.description(R.string.description_pump_combo)
);
ruffyScripter = new RuffyScripter(MainApp.instance().getApplicationContext());
}

View file

@ -59,6 +59,7 @@ public abstract class AbstractDanaRPlugin extends PluginBase implements PumpInte
.pluginName(R.string.danarspump)
.shortName(R.string.danarpump_shortname)
.preferencesId(R.xml.pref_danars)
.description(R.string.description_pump_dana_r)
);
}

View file

@ -162,19 +162,24 @@ public class DanaRFragment extends SubscriberFragment {
activity.runOnUiThread(
new Runnable() {
@Override
public void run() {
if (c.sStatus == EventPumpStatusChanged.CONNECTING)
btConnectionView.setText("{fa-bluetooth-b spin} " + c.sSecondsElapsed + "s");
else if (c.sStatus == EventPumpStatusChanged.CONNECTED)
btConnectionView.setText("{fa-bluetooth}");
else if (c.sStatus == EventPumpStatusChanged.DISCONNECTED)
btConnectionView.setText("{fa-bluetooth-b}");
public void run() {
synchronized(DanaRFragment.this){
if (!status.equals("")) {
pumpStatusView.setText(status);
pumpStatusLayout.setVisibility(View.VISIBLE);
} else {
pumpStatusLayout.setVisibility(View.GONE);
if(btConnectionView == null || pumpStatusView == null || pumpStatusLayout == null ) return;
if (c.sStatus == EventPumpStatusChanged.CONNECTING)
btConnectionView.setText("{fa-bluetooth-b spin} " + c.sSecondsElapsed + "s");
else if (c.sStatus == EventPumpStatusChanged.CONNECTED)
btConnectionView.setText("{fa-bluetooth}");
else if (c.sStatus == EventPumpStatusChanged.DISCONNECTED)
btConnectionView.setText("{fa-bluetooth-b}");
if (!status.equals("")) {
pumpStatusView.setText(status);
pumpStatusLayout.setVisibility(View.VISIBLE);
} else {
pumpStatusLayout.setVisibility(View.GONE);
}
}
}
}

View file

@ -83,6 +83,7 @@ public class DanaRSPlugin extends PluginBase implements PumpInterface, DanaRInte
.pluginName(R.string.danarspump)
.shortName(R.string.danarspump_shortname)
.preferencesId(R.xml.pref_danars)
.description(R.string.description_pump_dana_rs)
);
pumpDescription.isBolusCapable = true;

View file

@ -112,6 +112,7 @@ public class InsightPlugin extends PluginBase implements PumpInterface, Constrai
.pluginName(R.string.insightpump)
.shortName(R.string.insightpump_shortname)
.preferencesId(R.xml.pref_insightpump)
.description(R.string.description_pump_insight)
);
log("InsightPlugin instantiated");
pumpDescription.isBolusCapable = true;

View file

@ -42,6 +42,7 @@ public class MDIPlugin extends PluginBase implements PumpInterface {
super(new PluginDescription()
.mainType(PluginType.PUMP)
.pluginName(R.string.mdi)
.description(R.string.description_pump_mdi)
);
pumpDescription.isBolusCapable = true;
pumpDescription.bolusStep = 0.5d;

View file

@ -77,6 +77,8 @@ public class VirtualPumpPlugin extends PluginBase implements PumpInterface {
.pluginName(R.string.virtualpump)
.shortName(R.string.virtualpump_shortname)
.preferencesId(R.xml.pref_virtualpump)
.neverVisible(BuildConfig.NSCLIENTOLNY || BuildConfig.G5UPLOADER)
.description(R.string.description_pump_virtual)
);
pumpDescription.isBolusCapable = true;
pumpDescription.bolusStep = 0.1d;

View file

@ -47,6 +47,7 @@ public class SensitivityAAPSPlugin extends PluginBase implements SensitivityInte
.pluginName(R.string.sensitivityaaps)
.shortName(R.string.sensitivity_shortname)
.preferencesId(R.xml.pref_absorption_aaps)
.description(R.string.description_sensitivity_aaps)
);
}

View file

@ -46,6 +46,7 @@ public class SensitivityOref0Plugin extends PluginBase implements SensitivityInt
.pluginName(R.string.sensitivityoref0)
.shortName(R.string.sensitivity_shortname)
.preferencesId(R.xml.pref_absorption_oref0)
.description(R.string.description_sensitivity_oref0)
);
}

View file

@ -43,6 +43,7 @@ public class SensitivityWeightedAveragePlugin extends PluginBase implements Sens
.pluginName(R.string.sensitivityweightedaverage)
.shortName(R.string.sensitivity_shortname)
.preferencesId(R.xml.pref_absorption_aaps)
.description(R.string.description_sensitivity_weighted_average)
);
}

View file

@ -124,6 +124,7 @@ public class SmsCommunicatorPlugin extends PluginBase {
.pluginName(R.string.smscommunicator)
.shortName(R.string.smscommunicator_shortname)
.preferencesId(R.xml.pref_smscommunicator)
.description(R.string.description_sms_communicator)
);
processSettings(null);
}

View file

@ -29,6 +29,7 @@ public class SourceDexcomG5Plugin extends PluginBase implements BgSourceInterfac
.shortName(R.string.dexcomG5_shortname)
.showInList(!Config.NSCLIENT)
.preferencesId(R.xml.pref_dexcomg5)
.description(R.string.description_source_dexcom_g5)
);
}

View file

@ -24,6 +24,7 @@ public class SourceGlimpPlugin extends PluginBase implements BgSourceInterface {
.mainType(PluginType.BGSOURCE)
.fragmentClass(BGSourceFragment.class.getName())
.pluginName(R.string.Glimp)
.description(R.string.description_source_glimp)
);
}

View file

@ -23,6 +23,7 @@ public class SourceMM640gPlugin extends PluginBase implements BgSourceInterface
.mainType(PluginType.BGSOURCE)
.fragmentClass(BGSourceFragment.class.getName())
.pluginName(R.string.MM640g)
.description(R.string.description_source_mm640g)
);
}

View file

@ -27,6 +27,7 @@ public class SourceNSClientPlugin extends PluginBase implements BgSourceInterfac
.pluginName(R.string.nsclientbg)
.showInList(!Config.NSCLIENT)
.alwaysEnabled(Config.NSCLIENT)
.description(R.string.description_source_ns_client)
);
}

View file

@ -0,0 +1,39 @@
package info.nightscout.androidaps.plugins.Source;
import info.nightscout.androidaps.Config;
import info.nightscout.androidaps.R;
import info.nightscout.androidaps.interfaces.BgSourceInterface;
import info.nightscout.androidaps.interfaces.PluginBase;
import info.nightscout.androidaps.interfaces.PluginDescription;
import info.nightscout.androidaps.interfaces.PluginType;
/**
* Created by mike on 05.08.2016.
*/
public class SourcePoctechPlugin extends PluginBase implements BgSourceInterface {
private static SourcePoctechPlugin plugin = null;
public static SourcePoctechPlugin getPlugin() {
if (plugin == null)
plugin = new SourcePoctechPlugin();
return plugin;
}
private SourcePoctechPlugin() {
super(new PluginDescription()
.mainType(PluginType.BGSOURCE)
.fragmentClass(BGSourceFragment.class.getName())
.pluginName(R.string.poctech)
.showInList(!Config.NSCLIENT)
.preferencesId(R.xml.pref_poctech)
.description(R.string.description_source_poctech)
);
}
@Override
public boolean advancedFilteringSupported() {
return false;
}
}

View file

@ -26,6 +26,7 @@ public class SourceXdripPlugin extends PluginBase implements BgSourceInterface {
.mainType(PluginType.BGSOURCE)
.fragmentClass(BGSourceFragment.class.getName())
.pluginName(R.string.xdrip)
.description(R.string.description_source_xdrip)
);
}

View file

@ -80,6 +80,7 @@ public class TreatmentsPlugin extends PluginBase implements TreatmentsInterface
.shortName(R.string.treatments_shortname)
.preferencesId(R.xml.pref_absorption_oref0)
.alwaysEnabled(true)
.description(R.string.description_treatments)
);
this.service = new TreatmentService();
}

View file

@ -56,6 +56,7 @@ public class WearPlugin extends PluginBase {
.pluginName(R.string.wear)
.shortName(R.string.wear_shortname)
.preferencesId(R.xml.pref_wear)
.description(R.string.description_wear)
);
this.ctx = ctx;
}

View file

@ -70,6 +70,7 @@ public class StatuslinePlugin extends PluginBase {
.shortName(R.string.xdripstatus_shortname)
.neverVisible(true)
.preferencesId(R.xml.pref_xdripstatus)
.description(R.string.description_xdrip_status_line)
);
this.ctx = ctx;
this.mPrefs = PreferenceManager.getDefaultSharedPreferences(ctx);

View file

@ -18,6 +18,7 @@ import org.slf4j.LoggerFactory;
import java.util.ArrayList;
import java.util.List;
import info.nightscout.androidaps.BuildConfig;
import info.nightscout.androidaps.MainApp;
import info.nightscout.androidaps.PreferencesActivity;
import info.nightscout.androidaps.R;
@ -85,8 +86,14 @@ public class SWDefinition {
return this;
}
SWDefinition() {
if (BuildConfig.FLAVOR.equals("full"))
SWDefinitionFull();
else if (BuildConfig.FLAVOR.equals("nsclient"))
SWDefinitionNSClient();
}
private void SWDefinitionFull() {
// List all the screens here
add(new SWScreen(R.string.nav_setupwizard)
.add(new SWInfotext()
@ -228,6 +235,7 @@ public class SWDefinition {
.add(new SWBreak())
.add(new SWPlugin()
.option(PluginType.INSULIN)
.makeVisible(false)
.label(R.string.configbuilder_insulin))
.add(new SWBreak())
.add(new SWButton()
@ -441,4 +449,177 @@ public class SWDefinition {
;
}
private void SWDefinitionNSClient() {
// List all the screens here
add(new SWScreen(R.string.nav_setupwizard)
.add(new SWInfotext()
.label(R.string.welcometosetupwizard))
.add(new SWButton()
.text(R.string.nav_import)
.action(() -> ImportExportPrefs.importSharedPreferences(getActivity()))
.visibility(ImportExportPrefs.file::exists))
.add(new SWInfotext()
.label(R.string.backupismissing)
.visibility(() -> !ImportExportPrefs.file.exists()))
)
.add(new SWScreen(R.string.language)
.skippable(false)
.add(new SWRadioButton()
.option(R.array.languagesArray, R.array.languagesValues)
.preferenceId(R.string.key_language).label(R.string.language)
.comment(R.string.setupwizard_language_prompt))
.validator(() -> {
String lang = SP.getString("language", "en");
LocaleHelper.setLocale(MainApp.instance().getApplicationContext(), lang);
return SP.contains(R.string.key_language);
})
)
.add(new SWScreen(R.string.end_user_license_agreement)
.skippable(false)
.add(new SWInfotext()
.label(R.string.end_user_license_agreement_text))
.add(new SWBreak())
.add(new SWButton()
.text(R.string.end_user_license_agreement_i_understand)
.visibility(() -> !SP.getBoolean(R.string.key_i_understand, false))
.action(() -> {
SP.putBoolean(R.string.key_i_understand, true);
MainApp.bus().post(new EventSWUpdate(false));
}))
.visibility(() -> !SP.getBoolean(R.string.key_i_understand, false))
.validator(() -> SP.getBoolean(R.string.key_i_understand, false))
)
.add(new SWScreen(R.string.permission)
.skippable(false)
.add(new SWInfotext()
.label(String.format(MainApp.gs(R.string.needwhitelisting), MainApp.gs(R.string.app_name))))
.add(new SWBreak())
.add(new SWButton()
.text(R.string.askforpermission)
.visibility(() -> Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && !AndroidPermission.checkForPermission(getActivity(), Manifest.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS))
.action(() -> AndroidPermission.askForPermission(getActivity(), Manifest.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS, AndroidPermission.CASE_BATTERY)))
.visibility(() -> Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && !AndroidPermission.checkForPermission(getActivity(), Manifest.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS))
.validator(() -> !(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && !AndroidPermission.checkForPermission(getActivity(), Manifest.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS)))
)
.add(new SWScreen(R.string.permission)
.skippable(false)
.add(new SWInfotext()
.label(MainApp.gs(R.string.needstoragepermission)))
.add(new SWBreak())
.add(new SWButton()
.text(R.string.askforpermission)
.visibility(() -> Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && !AndroidPermission.checkForPermission(getActivity(), Manifest.permission.WRITE_EXTERNAL_STORAGE))
.action(() -> AndroidPermission.askForPermission(getActivity(), Manifest.permission.WRITE_EXTERNAL_STORAGE, AndroidPermission.CASE_STORAGE)))
.visibility(() -> Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && !AndroidPermission.checkForPermission(getActivity(), Manifest.permission.WRITE_EXTERNAL_STORAGE))
.validator(() -> !(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && !AndroidPermission.checkForPermission(getActivity(), Manifest.permission.WRITE_EXTERNAL_STORAGE)))
)
.add(new SWScreen(R.string.nsclientinternal_title)
.skippable(true)
.add(new SWInfotext()
.label(R.string.nsclientinfotext))
.add(new SWBreak())
.add(new SWButton()
.text(R.string.enable_nsclient)
.action(() -> {
NSClientPlugin.getPlugin().setPluginEnabled(PluginType.GENERAL, true);
NSClientPlugin.getPlugin().setFragmentVisible(PluginType.GENERAL, true);
ConfigBuilderFragment.processOnEnabledCategoryChanged(NSClientPlugin.getPlugin(), PluginType.GENERAL);
ConfigBuilderPlugin.getPlugin().storeSettings("SetupWizard");
MainApp.bus().post(new EventConfigBuilderChange());
MainApp.bus().post(new EventSWUpdate(true));
})
.visibility(() -> !NSClientPlugin.getPlugin().isEnabled(PluginType.GENERAL)))
.add(new SWEditUrl()
.preferenceId(R.string.key_nsclientinternal_url)
.label(R.string.nsclientinternal_url_title)
.comment(R.string.nsclientinternal_url_dialogmessage))
.add(new SWEditString()
.validator(text -> text.length() >= 12)
.preferenceId(R.string.key_nsclientinternal_api_secret)
.label(R.string.nsclientinternal_secret_dialogtitle)
.comment(R.string.nsclientinternal_secret_dialogmessage))
.add(new SWBreak())
.add(new SWEventListener(this)
.label(R.string.status)
.initialStatus(NSClientPlugin.getPlugin().status)
.listener(new Object() {
@Subscribe
public void onEventNSClientStatus(EventNSClientStatus event) {
MainApp.bus().post(new EventSWLabel(event.status));
}
})
)
.add(new SWBreak())
.validator(() -> NSClientPlugin.getPlugin().nsClientService != null && NSClientPlugin.getPlugin().nsClientService.isConnected && NSClientPlugin.getPlugin().nsClientService.hasWriteAuth)
.visibility(() -> !(NSClientPlugin.getPlugin().nsClientService != null && NSClientPlugin.getPlugin().nsClientService.isConnected && NSClientPlugin.getPlugin().nsClientService.hasWriteAuth))
)
.add(new SWScreen(R.string.patientage)
.skippable(false)
.add(new SWInfotext()
.label(R.string.patientage_summary))
.add(new SWBreak())
.add(new SWRadioButton()
.option(R.array.ageArray, R.array.ageValues)
.preferenceId(R.string.key_age)
.label(R.string.patientage)
.comment(R.string.patientage_summary))
.validator(() -> SP.contains(R.string.key_age))
)
.add(new SWScreen(R.string.configbuilder_insulin)
.skippable(false)
.add(new SWInfotext()
.label(MainApp.gs(R.string.rapid_acting_oref) + ": " + MainApp.gs(R.string.fastactinginsulincomment)))
.add(new SWInfotext()
.label(MainApp.gs(R.string.ultrarapid_oref) + ": " + MainApp.gs(R.string.ultrafastactinginsulincomment)))
.add(new SWInfotext()
.label(MainApp.gs(R.string.free_peak_oref) + ": " + MainApp.gs(R.string.free_peak_oref_description)))
.add(new SWBreak())
.add(new SWInfotext()
.label(R.string.diawarning))
.add(new SWBreak())
.add(new SWPlugin()
.option(PluginType.INSULIN)
.makeVisible(false)
.label(R.string.configbuilder_insulin))
.add(new SWBreak())
.add(new SWButton()
.text(R.string.insulinsourcesetup)
.action(() -> {
final PluginBase plugin = (PluginBase) MainApp.getConfigBuilder().getActiveInsulin();
PasswordProtection.QueryPassword(activity, R.string.settings_password, "settings_password", () -> {
Intent i = new Intent(activity, PreferencesActivity.class);
i.putExtra("id", plugin.getPreferencesId());
activity.startActivity(i);
}, null);
})
.visibility(() -> MainApp.getConfigBuilder().getActiveInsulin()!= null && ((PluginBase) MainApp.getConfigBuilder().getActiveInsulin()).getPreferencesId() > 0))
.validator(() -> MainApp.getConfigBuilder().getActiveInsulin() != null)
)
.add(new SWScreen(R.string.configbuilder_sensitivity)
.skippable(false)
.add(new SWInfotext()
.label(R.string.setupwizard_sensitivity_description))
.add(new SWHtmlLink()
.label(R.string.setupwizard_sensitivity_url))
.add(new SWBreak())
.add(new SWPlugin()
.option(PluginType.SENSITIVITY)
.label(R.string.configbuilder_sensitivity))
.add(new SWBreak())
.add(new SWButton()
.text(R.string.sensitivitysetup)
.action(() -> {
final PluginBase plugin = (PluginBase) MainApp.getConfigBuilder().getActiveSensitivity();
PasswordProtection.QueryPassword(activity, R.string.settings_password, "settings_password", () -> {
Intent i = new Intent(activity, PreferencesActivity.class);
i.putExtra("id", plugin.getPreferencesId());
activity.startActivity(i);
}, null);
})
.visibility(() -> MainApp.getConfigBuilder().getActiveSensitivity() != null && ((PluginBase) MainApp.getConfigBuilder().getActiveSensitivity()).getPreferencesId() > 0))
.validator(() -> MainApp.getConfigBuilder().getActiveSensitivity() != null)
)
;
}
}

View file

@ -25,6 +25,8 @@ public class SWPlugin extends SWItem {
private PluginType pType;
private RadioGroup radioGroup;
private boolean makeVisible = true;
public SWPlugin() {
super(Type.PLUGIN);
}
@ -34,6 +36,11 @@ public class SWPlugin extends SWItem {
return this;
}
public SWPlugin makeVisible(boolean makeVisible) {
this.makeVisible = makeVisible;
return this;
}
@Override
public void generateDialog(View view, LinearLayout layout) {
Context context = view.getContext();
@ -58,10 +65,10 @@ public class SWPlugin extends SWItem {
radioGroup.setOnCheckedChangeListener((group, checkedId) -> {
RadioButton rb = group.findViewById(checkedId);
PluginBase plugin1 = (PluginBase) rb.getTag();
plugin1.setPluginEnabled(pType, rb.isChecked());
plugin1.setFragmentVisible(pType, rb.isChecked());
ConfigBuilderFragment.processOnEnabledCategoryChanged(plugin1, pType);
PluginBase plugin = (PluginBase) rb.getTag();
plugin.setPluginEnabled(pType, rb.isChecked());
plugin.setFragmentVisible(pType, rb.isChecked() && makeVisible);
ConfigBuilderFragment.processOnEnabledCategoryChanged(plugin, pType);
ConfigBuilderPlugin.getPlugin().storeSettings("SetupWizard");
MainApp.bus().post(new EventConfigBuilderChange());
MainApp.bus().post(new EventSWUpdate());

View file

@ -3,9 +3,11 @@ package info.nightscout.androidaps.tabs;
import android.content.Context;
import android.content.SharedPreferences;
import android.preference.PreferenceManager;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.app.FragmentStatePagerAdapter;
import android.view.ViewGroup;
@ -19,7 +21,7 @@ import info.nightscout.androidaps.interfaces.PluginBase;
/**
* Created by mike on 30.05.2016.
*/
public class TabPageAdapter extends FragmentStatePagerAdapter {
public class TabPageAdapter extends FragmentPagerAdapter {
ArrayList<PluginBase> visibleFragmentList = new ArrayList<>();
@ -76,5 +78,8 @@ public class TabPageAdapter extends FragmentStatePagerAdapter {
}
}
@Override
public long getItemId(int position) {
return System.identityHashCode(visibleFragmentList.get(position));
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 953 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 413 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 847 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 233 B

View file

@ -3,6 +3,7 @@
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingTop="2dp"
tools:context="info.nightscout.androidaps.plugins.Source.BGSourceFragment">
<LinearLayout

View file

@ -3,6 +3,7 @@
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:paddingTop="5dp"
tools:context="info.nightscout.androidaps.plugins.Careportal.CareportalFragment">

View file

@ -2,6 +2,7 @@
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingTop="5dp"
tools:context=".plugins.PumpCombo.ComboFragment">
<RelativeLayout

View file

@ -1,240 +1,437 @@
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="info.nightscout.androidaps.plugins.ConfigBuilder.ConfigBuilderFragment">
android:gravity="center"
android:orientation="vertical">
<Button
android:id="@+id/unlock"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@android:color/transparent"
android:text="@string/unlock_settings" />
<ScrollView
android:id="@+id/main_layout"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<Button
android:id="@+id/configbuilder_unlock"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/unlock_settings" />
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="16dp">
<LinearLayout
android:id="@+id/configbuilder_mainlayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
android:layout_height="wrap_content"
android:orientation="horizontal">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:orientation="vertical">
<TextView
android:id="@+id/configbuilder_profilelabel"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="5dp"
android:layout_weight="1"
android:background="@color/mdtp_circle_color"
android:paddingLeft="5dp"
android:text="@string/configbuilder_profile"
android:textAllCaps="true"
android:textAppearance="?android:attr/textAppearanceSmall"
android:textColor="@android:color/black"
android:textStyle="bold" />
<ImageView
android:id="@+id/imageView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="false"
android:layout_alignParentRight="true"
android:layout_weight="1"
android:paddingRight="10dp"
app:srcCompat="@drawable/visibility_black_16x16" />
</RelativeLayout>
android:text="@string/configbuilder_profile"
android:textColor="@color/colorAccent"
android:textSize="16sp" />
<ListView
android:id="@+id/configbuilder_profilelistview"
android:layout_width="match_parent"
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/configbuilder_profile_description"
android:textColor="@color/colorAccent"
android:textSize="12sp" />
</LinearLayout>
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@color/cardColorBackground" />
<TextView
android:id="@+id/configbuilder_insulinlabel"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="5dp"
android:background="@color/mdtp_circle_color"
android:paddingLeft="5dp"
android:text="@string/configbuilder_insulin"
android:textAllCaps="true"
android:textAppearance="?android:attr/textAppearanceSmall"
android:textColor="@android:color/black"
android:textStyle="bold" />
<ListView
android:id="@+id/configbuilder_insulinlistview"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/cardColorBackground" />
<TextView
android:id="@+id/configbuilder_bgsourcelabel"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="5dp"
android:background="@color/mdtp_circle_color"
android:paddingLeft="5dp"
android:text="@string/configbuilder_bgsource"
android:textAllCaps="true"
android:textAppearance="?android:attr/textAppearanceSmall"
android:textColor="@android:color/black"
android:textStyle="bold" />
<ListView
android:id="@+id/configbuilder_bgsourcelistview"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/cardColorBackground" />
<TextView
android:id="@+id/configbuilder_pumplabel"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="5dp"
android:background="@color/mdtp_circle_color"
android:paddingLeft="5dp"
android:text="@string/configbuilder_pump"
android:textAllCaps="true"
android:textAppearance="?android:attr/textAppearanceSmall"
android:textColor="@android:color/black"
android:textStyle="bold" />
<ListView
android:id="@+id/configbuilder_pumplistview"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/cardColorBackground" />
<TextView
android:id="@+id/configbuilder_sensitivitylabel"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="5dp"
android:background="@color/mdtp_circle_color"
android:paddingLeft="5dp"
android:text="@string/configbuilder_sensitivity"
android:textAllCaps="true"
android:textAppearance="?android:attr/textAppearanceSmall"
android:textColor="@android:color/black"
android:textStyle="bold" />
<ListView
android:id="@+id/configbuilder_sensitivitylistview"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/cardColorBackground" />
<TextView
android:id="@+id/configbuilder_apslabel"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="5dp"
android:background="@color/mdtp_circle_color"
android:paddingLeft="5dp"
android:text="@string/configbuilder_aps"
android:textAllCaps="true"
android:textAppearance="?android:attr/textAppearanceSmall"
android:textColor="@android:color/black"
android:textStyle="bold" />
<ListView
android:id="@+id/configbuilder_apslistview"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/cardColorBackground" />
<TextView
android:id="@+id/configbuilder_looplabel"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="5dp"
android:background="@color/mdtp_circle_color"
android:paddingLeft="5dp"
android:text="@string/configbuilder_loop"
android:textAllCaps="true"
android:textAppearance="?android:attr/textAppearanceSmall"
android:textColor="@android:color/black"
android:textStyle="bold" />
<ListView
android:id="@+id/configbuilder_looplistview"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/cardColorBackground" />
<TextView
android:id="@+id/configbuilder_constraintslabel"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="5dp"
android:background="@color/mdtp_circle_color"
android:paddingLeft="5dp"
android:text="@string/constraints"
android:textAllCaps="true"
android:textAppearance="?android:attr/textAppearanceSmall"
android:textColor="@android:color/black"
android:textStyle="bold" />
<ListView
android:id="@+id/configbuilder_constraintslistview"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/cardColorBackground" />
<TextView
android:id="@+id/configbuilder_treatmentslabel"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="5dp"
android:background="@color/mdtp_circle_color"
android:paddingLeft="5dp"
android:text="@string/configbuilder_treatments"
android:textAllCaps="true"
android:textAppearance="?android:attr/textAppearanceSmall"
android:textColor="@android:color/black"
android:textStyle="bold" />
<ListView
android:id="@+id/configbuilder_treatmentslistview"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/cardColorBackground" />
<TextView
android:id="@+id/configbuilder_generallabel"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="5dp"
android:background="@color/mdtp_circle_color"
android:paddingLeft="5dp"
android:text="@string/configbuilder_general"
android:textAllCaps="true"
android:textAppearance="?android:attr/textAppearanceSmall"
android:textColor="@android:color/black"
android:textStyle="bold" />
<ListView
android:id="@+id/configbuilder_generallistview"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/cardColorBackground" />
android:layout_gravity="center"
android:layout_margin="4dp"
app:srcCompat="@drawable/ic_visibility" />
</LinearLayout>
<LinearLayout
android:id="@+id/profile_plugins"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical" />
<LinearLayout
android:layout_marginTop="16dp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/configbuilder_insulin"
android:textColor="@color/colorAccent"
android:textSize="16sp" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/configbuilder_insulin_description"
android:textColor="@color/colorAccent"
android:textSize="12sp" />
</LinearLayout>
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_margin="4dp"
app:srcCompat="@drawable/ic_visibility" />
</LinearLayout>
<LinearLayout
android:id="@+id/insulin_plugins"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical" />
<LinearLayout
android:layout_marginTop="16dp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/configbuilder_bgsource"
android:textColor="@color/colorAccent"
android:textSize="16sp" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/configbuilder_bgsource_description"
android:textColor="@color/colorAccent"
android:textSize="12sp" />
</LinearLayout>
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_margin="4dp"
app:srcCompat="@drawable/ic_visibility" />
</LinearLayout>
<LinearLayout
android:id="@+id/bgsource_plugins"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical" />
<LinearLayout
android:layout_marginTop="16dp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/configbuilder_pump"
android:textColor="@color/colorAccent"
android:textSize="16sp" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/configbuilder_pump_description"
android:textColor="@color/colorAccent"
android:textSize="12sp" />
</LinearLayout>
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_margin="4dp"
app:srcCompat="@drawable/ic_visibility" />
</LinearLayout>
<LinearLayout
android:id="@+id/pump_plugins"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical" />
<LinearLayout
android:layout_marginTop="16dp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/configbuilder_sensitivity"
android:textColor="@color/colorAccent"
android:textSize="16sp" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/configbuilder_sensitivity_description"
android:textColor="@color/colorAccent"
android:textSize="12sp" />
</LinearLayout>
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_margin="4dp"
app:srcCompat="@drawable/ic_visibility" />
</LinearLayout>
<LinearLayout
android:id="@+id/sensitivity_plugins"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical" />
<LinearLayout
android:layout_marginTop="16dp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/configbuilder_aps"
android:textColor="@color/colorAccent"
android:textSize="16sp" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/configbuilder_aps_description"
android:textColor="@color/colorAccent"
android:textSize="12sp" />
</LinearLayout>
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_margin="4dp"
app:srcCompat="@drawable/ic_visibility" />
</LinearLayout>
<LinearLayout
android:id="@+id/aps_plugins"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical" />
<LinearLayout
android:layout_marginTop="16dp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/configbuilder_loop"
android:textColor="@color/colorAccent"
android:textSize="16sp" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/configbuilder_loop_description"
android:textColor="@color/colorAccent"
android:textSize="12sp" />
</LinearLayout>
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_margin="4dp"
app:srcCompat="@drawable/ic_visibility" />
</LinearLayout>
<LinearLayout
android:id="@+id/loop_plugins"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical" />
<LinearLayout
android:layout_marginTop="16dp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/constraints"
android:textColor="@color/colorAccent"
android:textSize="16sp" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/configbuilder_constraints_description"
android:textColor="@color/colorAccent"
android:textSize="12sp" />
</LinearLayout>
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_margin="4dp"
app:srcCompat="@drawable/ic_visibility" />
</LinearLayout>
<LinearLayout
android:id="@+id/constraints_plugins"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical" />
<LinearLayout
android:layout_marginTop="16dp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/configbuilder_treatments"
android:textColor="@color/colorAccent"
android:textSize="16sp" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/configbuilder_treatments_description"
android:textColor="@color/colorAccent"
android:textSize="12sp" />
</LinearLayout>
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_margin="4dp"
app:srcCompat="@drawable/ic_visibility" />
</LinearLayout>
<LinearLayout
android:id="@+id/treatments_plugins"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical" />
<LinearLayout
android:layout_marginTop="16dp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/configbuilder_general"
android:textColor="@color/colorAccent"
android:textSize="16sp" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/configbuilder_general_description"
android:textColor="@color/colorAccent"
android:textSize="12sp" />
</LinearLayout>
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_margin="4dp"
app:srcCompat="@drawable/ic_visibility" />
</LinearLayout>
<LinearLayout
android:id="@+id/general_plugins"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical" />
</LinearLayout>
</ScrollView>
</FrameLayout>
</LinearLayout>

View file

@ -1,42 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<CheckBox
android:id="@+id/configbuilder_simpleitem_checkboxenabled"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:focusable="false"
android:focusableInTouchMode="false"
android:gravity="center_vertical" />
<TextView
android:id="@+id/configbuilder_simpleitem_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="ConfigBuilder plugin text" />
<ImageView
android:id="@+id/configbuilder_simpleitem_settings"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginLeft="10dp"
android:focusable="false"
android:focusableInTouchMode="false"
app:srcCompat="@drawable/ic_settings" />
<CheckBox
android:id="@+id/configbuilder_simpleitem_checkboxvisible"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
android:focusable="false"
android:focusableInTouchMode="false" />
</LinearLayout>

View file

@ -0,0 +1,63 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:orientation="horizontal">
<RadioButton
android:id="@+id/plugin_enabled_exclusive"
android:saveEnabled="false"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginRight="16dp" />
<CheckBox
android:id="@+id/plugin_enabled_inclusive"
android:saveEnabled="false"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginRight="16dp" />
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginBottom="12dp"
android:layout_marginTop="12dp"
android:layout_weight="1"
android:orientation="vertical">
<TextView
android:id="@+id/plugin_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#FFFFFF"
android:textSize="16sp"
tools:text="Plugin name" />
<TextView
android:id="@+id/plugin_description"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#FFFFFF"
android:textSize="12sp"
tools:text="A super exquisite plugin description" />
</LinearLayout>
<ImageButton
android:id="@+id/plugin_preferences"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="16dp"
android:layout_marginRight="16dp"
android:background="?android:selectableItemBackgroundBorderless"
app:srcCompat="@drawable/ic_settings" />
<CheckBox
android:id="@+id/plugin_visibility"
android:saveEnabled="false"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>

View file

@ -2,6 +2,7 @@
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingTop="5dp"
tools:context="info.nightscout.androidaps.plugins.PumpDanaR.DanaRFragment">

View file

@ -2,6 +2,7 @@
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingTop="2dp"
tools:context="info.nightscout.androidaps.plugins.Loop.LoopFragment">
<ScrollView

View file

@ -2,6 +2,7 @@
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingTop="2dp"
tools:context=".plugins.ConstraintsObjectives.ObjectivesFragment">
<LinearLayout

View file

@ -2,6 +2,7 @@
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingTop="2dp"
tools:context="info.nightscout.androidaps.plugins.OpenAPSAMA.OpenAPSAMAFragment">
<ScrollView

View file

@ -41,7 +41,10 @@
android:layout_marginRight="5dp"
android:layout_weight="1"
android:gravity="center_vertical|center_horizontal"
android:paddingBottom="3dp"
android:paddingTop="3dp"
android:text="Open Loop"
android:textAppearance="?android:attr/textAppearanceSmall" />
@ -53,6 +56,8 @@
android:layout_marginRight="5dp"
android:layout_weight="1"
android:gravity="center_vertical|center_horizontal"
android:paddingBottom="3dp"
android:paddingTop="3dp"
android:text="Profile"
android:textAppearance="?android:attr/textAppearanceSmall" />
@ -64,6 +69,8 @@
android:layout_weight="1"
android:gravity="center_vertical|center_horizontal"
android:text="TempTarget"
android:paddingBottom="3dp"
android:paddingTop="3dp"
android:textAppearance="?android:attr/textAppearanceSmall"
android:textColor="@color/mdtp_white" />
@ -82,6 +89,8 @@
android:layout_height="wrap_content"
android:layout_marginLeft="5dp"
android:layout_marginRight="5dp"
android:paddingBottom="3dp"
android:paddingTop="3dp"
android:gravity="center_vertical|center_horizontal"
android:text="@string/initializing"
android:textAppearance="?android:attr/textAppearanceSmall" />

View file

@ -24,7 +24,7 @@
<LinearLayout
android:id="@+id/overview_looplayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:paddingTop="2dp">
@ -35,7 +35,10 @@
android:layout_marginRight="5dp"
android:layout_weight="1"
android:gravity="center_vertical|center_horizontal"
android:paddingBottom="3dp"
android:paddingTop="3dp"
android:text="Open Loop"
android:textAppearance="?android:attr/textAppearanceSmall" />
@ -47,6 +50,8 @@
android:layout_marginRight="5dp"
android:layout_weight="1"
android:gravity="center_vertical|center_horizontal"
android:paddingBottom="3dp"
android:paddingTop="3dp"
android:text="Profile"
android:textAppearance="?android:attr/textAppearanceSmall" />
@ -58,6 +63,8 @@
android:layout_weight="1"
android:gravity="center_vertical|center_horizontal"
android:text="TempTarget"
android:paddingBottom="3dp"
android:paddingTop="3dp"
android:textAppearance="?android:attr/textAppearanceSmall"
android:textColor="@color/mdtp_white" />
@ -76,6 +83,8 @@
android:layout_height="match_parent"
android:layout_marginLeft="5dp"
android:layout_marginRight="5dp"
android:paddingBottom="3dp"
android:paddingTop="3dp"
android:gravity="center_vertical|center_horizontal"
android:text="@string/initializing"
android:textAppearance="?android:attr/textAppearanceSmall" />

View file

@ -41,7 +41,10 @@
android:layout_marginRight="5dp"
android:layout_weight="1"
android:gravity="center_vertical|center_horizontal"
android:paddingBottom="3dp"
android:paddingTop="3dp"
android:text="Open Loop"
android:textAppearance="?android:attr/textAppearanceSmall" />
@ -53,6 +56,8 @@
android:layout_marginRight="5dp"
android:layout_weight="1"
android:gravity="center_vertical|center_horizontal"
android:paddingBottom="3dp"
android:paddingTop="3dp"
android:text="Profile"
android:textAppearance="?android:attr/textAppearanceSmall" />
@ -64,6 +69,8 @@
android:layout_weight="1"
android:gravity="center_vertical|center_horizontal"
android:text="TempTarget"
android:paddingBottom="3dp"
android:paddingTop="3dp"
android:textAppearance="?android:attr/textAppearanceSmall"
android:textColor="@color/mdtp_white" />
@ -82,6 +89,8 @@
android:layout_height="wrap_content"
android:layout_marginLeft="5dp"
android:layout_marginRight="5dp"
android:paddingBottom="3dp"
android:paddingTop="3dp"
android:gravity="center_vertical|center_horizontal"
android:text="@string/initializing"
android:textAppearance="?android:attr/textAppearanceSmall" />

View file

@ -24,7 +24,7 @@
<LinearLayout
android:id="@+id/overview_looplayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:paddingTop="2dp">
@ -35,7 +35,10 @@
android:layout_marginRight="5dp"
android:layout_weight="1"
android:gravity="center_vertical|center_horizontal"
android:paddingBottom="3dp"
android:paddingTop="3dp"
android:text="Open Loop"
android:textAppearance="?android:attr/textAppearanceSmall" />
@ -47,6 +50,8 @@
android:layout_marginRight="5dp"
android:layout_weight="1"
android:gravity="center_vertical|center_horizontal"
android:paddingBottom="3dp"
android:paddingTop="3dp"
android:text="Profile"
android:textAppearance="?android:attr/textAppearanceSmall" />
@ -58,6 +63,8 @@
android:layout_weight="1"
android:gravity="center_vertical|center_horizontal"
android:text="TempTarget"
android:paddingBottom="3dp"
android:paddingTop="3dp"
android:textAppearance="?android:attr/textAppearanceSmall"
android:textColor="@color/mdtp_white" />
@ -76,6 +83,8 @@
android:layout_height="match_parent"
android:layout_marginLeft="5dp"
android:layout_marginRight="5dp"
android:paddingBottom="3dp"
android:paddingTop="3dp"
android:gravity="center_vertical|center_horizontal"
android:text="@string/initializing"
android:textAppearance="?android:attr/textAppearanceSmall" />

View file

@ -2,6 +2,7 @@
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingTop="2dp"
tools:context="info.nightscout.androidaps.plugins.Wear.WearFragment">
<LinearLayout

View file

@ -468,7 +468,7 @@
<string name="Glimp">Glimp</string>
<string name="batteryoptimalizationerror">Le dispositif napparaît pas pour renforcer la liste blanche de loptimisation de batterie!</string>
<string name="pleaseallowpermission">Autorisez l\'accès svp</string>
<string name="needwhitelisting">% a besoin de la liste blanche de loptimisation batterie pour une bonne performance</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>

View file

@ -40,11 +40,11 @@
<string name="treatments_newtreatment_insulinamount_label">Cantitatea de insulină</string>
<string name="treatments_newtreatment_carbsamount_label">Cantitatea de carbohidrați</string>
<string name="treatments_wizard_bg_label">BG</string>
<string name="treatments_wizard_carbs_label">Carbohidrați</string>
<string name="treatments_wizard_carbs_label">Carbo</string>
<string name="treatments_wizard_correction_label">Corecție</string>
<string name="insulin_unit_shortname">U</string>
<string name="treatments_wizard_bolusiob_label">Bolus IOB</string>
<string name="openapsma_run">Fă acum</string>
<string name="openapsma_run">Execută</string>
<string name="vitualpump_label">POMPĂ VIRTUALĂ</string>
<string name="virtualpump_extendedbolus_label">Bolus extins</string>
<string name="virtualpump_resultok">OK</string>
@ -495,4 +495,488 @@
<string name="ns_noupload_summary">Toate trimiterile de date către NS sunt oprite. AAPS este conectat la NS dar nu se fac schimbări în NS</string>
<string name="basal_step">Pas bazală</string>
<string name="bolus_step">Pas bolus</string>
<string name="treatments_wizard_tt_label">TT</string>
<string name="pump_basebasalrate_label">Rată bazală normală</string>
<string name="pump_tempbasal_label">Bazală temporală</string>
<string name="pump_battery_label">Baterie</string>
<string name="pump_reservoir_label">Rezervor</string>
<string name="result">Rezultat</string>
<string name="tempbasal">BazalăTemp</string>
<string name="loop_tbrsetbypump_label">BazalăTemp setată în pompă</string>
<string name="openapsma_lastenact_label">Ultima comandă</string>
<string name="ok">OK</string>
<string name="cancel">Renunță</string>
<string name="noapsselected">NU AȚI SELECTAT APS SAU NU EXISTĂ REZULTAT</string>
<string name="safety">Siguranță</string>
<string name="openapsma_disabled">Modul inactiv</string>
<string name="constraints_violation">Încălcare a unei limite</string>
<string name="treatmentdeliveryerror">Eroare la livrarea bolusului</string>
<string name="tempbasaldeliveryerror">Eroare la setare bazală temporară</string>
<string name="overview_newtempbasal_basalpercent">Valoare bazală [%]</string>
<string name="overview_newtempbasal_percent_label">% (100% = curent)</string>
<string name="setbasalquestion">Acceptă noua bazală temporară:</string>
<string name="overview_treatment_label">Tratament</string>
<string name="overview_calculator_label">Calculator</string>
<string name="constraintapllied">Limitare aplicată!</string>
<string name="confirmation">Confirmare</string>
<string name="entertreatmentquestion">Introduceți tratament nou:</string>
<string name="bolus">Bolus</string>
<string name="sms_bolus">Bolus:</string>
<string name="basal">Bazală</string>
<string name="sms_basal">Bazală:</string>
<string name="carbs">Carbo</string>
<string name="changeyourinput">Schimbați valoarea!</string>
<string name="setextendedbolusquestion">Setați un nou bolus extins:</string>
<string name="configbuilder_bgsource">Sursă glicemie</string>
<string name="xdrip">xDrip</string>
<string name="apsmode_title">Mod APS</string>
<string name="closedloop">Buclă închisă</string>
<string name="openloop">Buclă deschisă</string>
<string name="unsupportednsversion">Versiune de Nightscout nesuportată</string>
<string name="ro_lang">Română</string>
<string name="pump_lastbolus_label">Ultimul bolus</string>
<string name="bolusstopped">Bolus oprit</string>
<string name="bolusstopping">Se oprește bolusul</string>
<string name="objectives_7_objective">Se activează opțiuni pentru uzul în timpul zilei, cum ar fi SMB</string>
<string name="objectives_7_gate">Trebuie sa citiți wiki și măriți maxIOB pentru a obține SMB corect! Un start bun este maxIOB=media bolusurilor + 3x maxima bazalei din zi</string>
<string name="valuelimitedto" formatted="false">%.2f este limitată la %.2f</string>
<string name="valueoutofrange" formatted="false">Valarea %s este mai mare decât limita fizică</string>
<string name="refresheventsfromnightscout">Sincronizează cu NS</string>
<string name="hypo">Hipo</string>
<string name="openapsama_autosens_adjusttargets">Autosens ajustează țintele la</string>
<string name="resistantadult">Adult rezistent la insulină</string>
<string name="danarv2pump">DanaRv2</string>
<string name="ultrafastactinginsulincomment">Fiasp</string>
<string name="pump_lastconnection_label">Ultima conexiune</string>
<string name="extendedbolus">BolusExtins</string>
<string name="temptarget">ȚintăTemporară</string>
<string name="overview_extendedbolus_cancel_button">Renunță la bolusul extins</string>
<string name="careportal_sensorage_label">Vechime senzor</string>
<string name="careportal_canulaage_label">Vechime canulă</string>
<string name="careportal_insulinage_label">Vechime insulină</string>
<string name="hours">ore</string>
<string name="overview_newtempbasal_basaltype_label">Tip bazală</string>
<string name="invalidprofile">Profil invalid!!!</string>
<string name="profileswitch">SchimbareProfil</string>
<string name="careportal_pbage_label">Vechime baterie pompă</string>
<string name="careportal_pumpbatterychange">Schimbare baterie pompă</string>
<string name="ns_alarmoptions">Opțiuni alarmare</string>
<string name="nsalarm_urgenthigh">Hiper urgent</string>
<string name="nsalarm_high">Hiper</string>
<string name="nsalarm_low">Hipo</string>
<string name="nsalarm_urgentlow">Hipo urgent</string>
<string name="nsalarm_staledata">Date învechite</string>
<string name="nsalarm_urgentstaledata">Date mult prea vechi</string>
<string name="nsalarm_staledatavalue_label">Prag vechime date [min]</string>
<string name="nsalarm_urgent_staledatavalue_label">Prag date mult prea vechi [min]</string>
<string name="openapsama_autosens_period">Interval pentru autosens [o]</string>
<string name="openapsama_autosens_period_summary">Numărul de ore din trecut pentru detectarea sensibilității (se exclude timpul de absorbție al carbo)</string>
<string name="pump">Pompă</string>
<string name="openaps">OpenAPS</string>
<string name="uploader">Uploader</string>
<string name="configbuilder_sensitivity">Detectare sensilitate</string>
<string name="sensitivity_shortname">SENS</string>
<string name="sensitivityoref0">Sensibilitate Oref0</string>
<string name="sensitivityaaps">Sensibilitate AAPS</string>
<string name="absorptionsettings_title">Setări absorbție</string>
<string name="absorption_maxtime_title">Timp maxim absorbție masă [o]</string>
<string name="absorption_maxtime_summary">Timp în ore la care se presupune că toți carbo sunt absorbiți</string>
<string name="careportal_sensorage_label_short">VS</string>
<string name="careportal_insulinage_label_short">VI</string>
<string name="careportal_canulaage_label_short">VC</string>
<string name="careportal_pbage_label_short">BAT</string>
<string name="openaps_short">OAPS</string>
<string name="uploader_short">UPLD</string>
<string name="basal_short">BAZ</string>
<string name="virtualpump_extendedbolus_label_short">EXT</string>
<string name="lock_screen">Ecran blocare</string>
<string name="lock_screen_short">Blocat</string>
<string name="sensitivity_warning">Trebuie introduși toți carbo la pornirea Autosens. În caz contrar, acțiunea carbo va fi percepută ca schimbare a sensibilității!</string>
<string name="sensitivityweightedaverage">Mediană sensibilitate</string>
<string name="mdtp_ok">OK</string>
<string name="mdtp_cancel">Renunță</string>
<string name="notloadedplugins">Nu s-au încărcat toate profilele!</string>
<string name="valuesnotstored">Nu s-au salvat valorile!</string>
<string name="ns_localbroadcasts">Permite anunțarea altor aplicații (ca xDrip).</string>
<string name="ns_localbroadcasts_title">Permite anunțuri locale.</string>
<string name="careportal_activity_label">ACTIVITATE ȘÎ VERIFICĂRI</string>
<string name="careportal_carbsandbolus_label">CARBO ȘÎ BOLUS</string>
<string name="careportal_cgm_label">CGM ȘÎ OPENAPS</string>
<string name="careportal_pump_label">POMPĂ</string>
<string name="overview_newtempbasal_basalabsolute">Valoare bazală [U/o]</string>
<string name="careportal_newnstreatment_duration_min_label">Durată [min]</string>
<string name="openapssmb">OpenAPS SMB</string>
<string name="smb_shortname">SMB</string>
<string name="enableuam">Activează UAM</string>
<string name="enablesmb">Activează SMB</string>
<string name="enablesmb_summary">Folosește SMB în locul bazalei temporare pentru reacție mai rapidă</string>
<string name="enableuam_summary">S-a detectat masă neanunțată</string>
<string name="insulin_oref_peak">Curbă timp vârf IOB</string>
<string name="insulin_peak_time">Timp vârf [min]</string>
<string name="free_peak_oref">Oref Fără-Vârf</string>
<string name="rapid_acting_oref">Oref Insulină-Rapidă</string>
<string name="ultrarapid_oref">Oref Insulină-UltraRapidă</string>
<string name="free_peak_oref_description">Insulină personalizată</string>
<string name="dia_too_short" formatted="false">DIA din %f prea scurtă - se folosește %f în schimb!</string>
<string name="activate_profile">Activează profil</string>
<string name="date">Data</string>
<string name="invalid">INVALID</string>
<string name="waitingforpairing">Se așteaptă conectarea la pompă</string>
<string name="pairingok">Conectare OK</string>
<string name="pairingtimedout">Conectare nereușită</string>
<string name="pairing">CONECTARE</string>
<string name="danars_nodeviceavailable">Niciun dispozitiv găsit până acum</string>
<string name="emptyreservoir">Rezervor gol</string>
<string name="bloodsugarmeasurementalert">Alertă măsurare glicemie</string>
<string name="remaininsulinalert">Nivel insulină rămas</string>
<string name="danarspump">DanaRS</string>
<string name="danarspump_shortname">Dana</string>
<string name="selectedpump">Pompa selectată</string>
<string name="pairpump">Conectare la pompă nouă</string>
<string name="bolusspeed">Viteză bolusare</string>
<string name="danar_setbasalstep001">Setare pas bazală la 0.01 U/o</string>
<string name="serialnumber">Număr serial</string>
<string name="careportal_newnstreatment_percentage_label">Procentaj</string>
<string name="careportal_newnstreatment_timeshift_label">Decalare</string>
<string name="default_temptargets">Ținte-Temporare implicite</string>
<string name="eatingsoon_duration">durată semănâncăcurând</string>
<string name="eatingsoon_target">țintă semănâncăcurând</string>
<string name="activity_duration">durată activitate</string>
<string name="activity_target">țintă activitate</string>
<string name="hypo_duration">durată țintă</string>
<string name="hypo_target">țintă hipo</string>
<string name="danar_history_prime">Amorsare tub</string>
<string name="gettingextendedbolusstatus">Se obține starea bolusului extins</string>
<string name="gettingbolusstatus">Se obține starea bolusului</string>
<string name="gettingtempbasalstatus">Se obține starea bazalei temporare</string>
<string name="gettingpumpsettings">Se obțin setările pompei</string>
<string name="gettingpumptime">Se obține ora pompei</string>
<string name="reuse">refolosire</string>
<string name="wearcontrol_title">Controlare din ceas</string>
<string name="wearcontrol_summary">Setare Ținte-Temporare și se introduc Tratamente din ceas.</string>
<string name="connectiontimedout">Conectare eșuată</string>
<string name="food">Mâncare</string>
<string name="shortgramm">g</string>
<string name="shortminute">m</string>
<string name="shorthour">o</string>
<string name="none"><![CDATA[<none>]]></string>
<string name="shortkilojoul">kJ</string>
<string name="shortenergy">En</string>
<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="processinghistory">Se procesează activitatea</string>
<string name="startingbolus">Pornire livrare bolus</string>
<string name="executingrightnow">Se execută comanda chiar acum</string>
<string name="pumpdrivercorrected">S-a corectat driverul pompei</string>
<string name="pump_unreachable">Pompă indisponibilă</string>
<string name="missed_bg_readings">Lipsesc date glicemie</string>
<string name="raise_notifications_as_android_notifications">Se folosesc notificările sistemului pentru alerte și notificări</string>
<string name="localalertsettings_title">Alerte locale</string>
<string name="enable_missed_bg_readings_alert">Alarmează dacă nu se primesc glicemii</string>
<string name="enable_pump_unreachable_alert">Se alertează dacă pompa este indisponibilă</string>
<string name="pump_unreachable_threshold">Prag pompă indisponibilă [min]</string>
<string name="urgent_alarm">Alarmă urgentă</string>
<string name="info">INFO</string>
<string name="bluetooth">Bluetooth</string>
<string name="btwatchdog_title">BT Watchdog</string>
<string name="btwatchdog_summary">Oprește bluetooth-ul telefonului pentru o secundă dacă nu se poate conecta la pompă. Aceasta poate ajuta în cazul telefoanelor cu bluetooth incompatitibil.</string>
<string name="DexcomG5">App DexcomG5 (cu patch)</string>
<string name="dexcomg5_nsupload_title">Încarcă date glicemie în NS</string>
<string name="dexcomg5_upload">Setări înregistrare G5</string>
<string name="wear_detailed_delta_title">Arată variație detaliată</string>
<string name="wear_detailed_delta_summary">Arată variație cu încă o zecimală</string>
<string name="smbmaxminutes_summary">Max minute de bazală la care să se limiteze SMB</string>
<string name="unsupportedfirmware">Soft pompă incompatibil</string>
<string name="dexcomg5_xdripupload_title">Trimite date glicemie la xDrip+</string>
<string name="dexcomg5_xdripupload_summary">Selectați 640g/Eversense ca sursă de date în xDrip+</string>
<string name="nsclientbg">Glicemie NSClient</string>
<string name="minimalbasalvaluereplaced">Valoare bazală înlocuită cu valoarea minimă suportată</string>
<string name="overview_editquickwizard_usebg">Calcul glicemie</string>
<string name="overview_editquickwizard_usebolusiob">Calcul IOB bolus</string>
<string name="overview_editquickwizard_usebasaliob">Calcul IOB bazală</string>
<string name="overview_editquickwizard_usetrend">Calcul pantă</string>
<string name="overview_editquickwizard_usesuperbolus">Calcul superbolus</string>
<string name="yes">Da</string>
<string name="no">Nu</string>
<string name="positiveonly">Doar pozitiv</string>
<string name="negativeonly">Doar negativ</string>
<string name="overview_editquickwizard_usecob">Calcul COB</string>
<string name="overview_editquickwizard_usetemptarget">Calcul țintă temporară</string>
<string name="loopenabled">Buclă activată</string>
<string name="apsselected">APS selectat</string>
<string name="nsclienthaswritepermission">NSClient are drepturi de scriere</string>
<string name="closedmodeenabled">Mod buclă închisă activat</string>
<string name="maxiobset">IOB maxim configurat corect</string>
<string name="hasbgdata">Glicemie disponibilă din sursa selectată</string>
<string name="basalprofilenotaligned" formatted="false">Valori bazale nealiniate la ore: %s</string>
<string name="zerovalueinprofile">Profil invalid</string>
<string name="combo_programming_bolus">Se programează pompa pentru livrare bolus</string>
<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_tbr_remaining" formatted="false">%d%% (%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>
<string name="combo_pump_state_suspended_by_user">Suspendat de utilizator</string>
<string name="combo_pump_state_running">Funcționează</string>
<string name="combo_pump_action_cancelling_tbr">Se oprește TBR</string>
<string name="combo_pump_action_setting_tbr" formatted="false">Se setează TBR (%d%% / %d min)</string>
<string name="combo_pump_action_bolusing" formatted="false">Bolusare (%.1f U)</string>
<string name="combo_pump_action_refreshing">Reîncărcare</string>
<string name="combo_pump_unsupported_operation">Operațiunea nu este suportată de pompă</string>
<string name="combo_low_suspend_forced_notification">Folosire nesigură: un bolus extins sau multiwave este activ. Modul buclă este setat să funcționeze în low-suspend pentru 6 ore. Doar bolusurile normale sunt posibile.</string>
<string name="combo_force_disabled_notification">Folosire nesigură: pompa folosește un alt profil decât primul. Bucla a fost dezactivată. Selectați primul profil din pompă șî reîncercați.</string>
<string name="bolus_frequency_exceeded">Un bolus de aceeași valoare a fost livrat în ultimile două minute. Pentru a preveni bolusarea accidentală dublă și pentru a evita greșelile , acesta nu se va livra</string>
<string name="combo_pump_connected_now">Acum</string>
<string name="combo_activity_reading_pump_history">Se citește istoricul din pompă</string>
<string name="combo_activity_setting_basal_profile">Se setează profilul bazalei</string>
<string name="combo_pump_cartridge_low_warrning">Nivelul insulinei din pompă este scăzut</string>
<string name="combo_pump_battery_low_warrning">Nivelul bateriei pompei este scăzut</string>
<string name="combo_is_in_error_state" formatted="false">Pompa are eroarea: E%d: %s</string>
<string name="combo_reservoir_low">Scăzut</string>
<string name="combo_reservoir_empty">Gol</string>
<string name="combo_reservoir_normal">Normal</string>
<string name="combo_notification_check_time_date">Ceasul pompei trebuie ajustat</string>
<string name="combo_warning">Atenție</string>
<string name="combo_pump_tbr_cancelled_warrning">Alerta RBT ANULATĂ a fost confirmată</string>
<string name="combo_error_no_connection_no_bolus_delivered">Pompa nu poate fi contactată. Nu s-a livrat niciun bolus</string>
<string name="combo_error_no_bolus_delivered">Livrare eșuată. Se pare că nu a fost livrat bolusul. Pentru siguranță, verificați în pompă pentru a evita bolusarea dublă. Pentru evitarea greșelilor, bolusurile nu sunt retrimise automat.</string>
<string name="combo_error_partial_bolus_delivered" formatted="false">Doar %.2f U din totalul cerut de %.2f U a fost livrat din cauza unei erori. Verificați pompa pentru confirmare și acționați corespunzător.</string>
<string name="combo_error_bolus_verification_failed">Livrarea bolusului și verificarea istoricului pompei a eșuat, verificați pompa și creați manual un bolus folosind Careportal, dacă a fost livrat un bolus.</string>
<string name="combo_error_bolus_recovery_progress">Revenire după pierderea conexiunii</string>
<string name="combo_reservoir_level_insufficient_for_bolus">Nu este suficientă insulină în rezervor</string>
<string name="extendedbolusdeliveryerror">Eroare de livrare a bolusului extins</string>
<string name="insightpump_shortname">Insight</string>
<string name="insightpump">Pompă Insight</string>
<string name="status_no_colon">Stare</string>
<string name="changed">Schimbat</string>
<string name="pump_stopped_uppercase">POMPĂ OPRITĂ</string>
<string name="status_updated">Stare actualizată</string>
<string name="ago">în trecut</string>
<string name="with">cu</string>
<string name="insight_active_tbr">RBT activ</string>
<string name="insight_min_left">min. rămase</string>
<string name="log_book">Jurnal</string>
<string name="insight_last_completed_action">Ultima acțiune efectuată</string>
<string name="insight_min">min.</string>
<string name="insight_remaining_over">rămase peste</string>
<string name="insight_total_with">total cu</string>
<string name="insight_upfront_with">față de</string>
<string name="insight_stay_always_connected">Rămâneți conectat permanent</string>
<string name="insight_use_real_tbr_cancels">Se folosesc anulări de RBT</string>
<string name="insight_actually_cancel_tbr_summary">Anulare reală a unei RBT (generează alarmă a pompei) în loc de a seta 90% pentru 1 minut</string>
<string name="insight_history_idle">LIBER</string>
<string name="insight_history_syncing">SINCRONIZARE</string>
<string name="insight_history_busy">OCUPAT</string>
<string name="insight_history_synced">SINCRONIZAT</string>
<string name="insight_startup_uppercase">PORNIRE</string>
<string name="insight_needs">nevoi</string>
<string name="insight_not_connected_to_companion_app">Aplicația nu este conectată!</string>
<string name="insight_companion_app_not_installed">Aplicația pare să nu fie instalată!</string>
<string name="insight_incompatible_compantion_app_we_need_version">Aplicație incompatibila, este necesară versiunea</string>
<string name="insight_unknown">Necunoscut</string>
<string name="insight_waiting_for_code">Se așteaptă confirmarea codului</string>
<string name="insight_code_rejected">Cod respins</string>
<string name="insight_app_binding">Conectare aplicație</string>
<string name="insight_not_authorized">Neautorizat</string>
<string name="insight_incompatible">Incompatibil</string>
<string name="second">secundă</string>
<string name="minute">minut</string>
<string name="hour">oră</string>
<string name="day">z</string>
<string name="week">săptămână</string>
<string name="time_plural">e</string>
<string name="insight_keepalive_format_string" formatted="false">%ds expiră %s</string>
<string name="insight_keep_alive_status">Stare de menținere</string>
<string name="statistics">Statistici</string>
<string name="connect_preemptively">Conectare preventivă</string>
<string name="automatically_connect_when">Conectare automată atunci când AndroidAPS este afișat pe ecran, înaintea cererii de efectuare a unei comenzi către pompă, pentru reducerea întârzierilor</string>
<string name="not_recommended_due_to_battery_drain">Nerecomandat datorită epuizării bateriei</string>
<string name="enablesmbalways">Activează SMB întotdeauna</string>
<string name="enablesmbalways_summary">Activează SMB întotdeauna independent de bolusuri. Este posibil doar în cazul unei surse de glicemii filtrate, cum ar fi G5</string>
<string name="enablesmbaftercarbs">Activează SMB după carbo</string>
<string name="enablesmbaftercarbs_summary">Activează SMB pentru 6 ore după carbo, chiar și cu 0 COB. Este posibil doar cu o sursă de glicemii filtrate, ca datele din G5</string>
<string name="enablesmbwithcob">Activează SMB cu COB</string>
<string name="enablesmbwithcob_summary">Activează SMB atunci când sunt COB activi.</string>
<string name="enablesmbwithtemptarget">Activează SMB cu ținte temporare</string>
<string name="enablesmbwithtemptarget_summary">Activează SMB chiar atunci când este o țintă temporară activă (mâncare in curând, exerciții fizice)</string>
<string name="enablesmbwithhightemptarget">Activează SMB cu ținte temporare mari</string>
<string name="enablesmbwithhightemptarget_summary">Activează SMB atunci când există o țintă temporară mare activă (exerciții fizice)</string>
<string name="let_temp_basal_run">Lasă să funcționeze bazala temporară</string>
<string name="mute">Liniște</string>
<string name="overview_insulin_label">Insulină</string>
<string name="overview_carbs_label">Carbohidrați</string>
<string name="overview_buttons_selection">Butoane</string>
<string name="show_calibration_button_summary">Trimite calibrarea către xDrip+ sau deschide calibrarea pentru G5</string>
<string name="show_cgm_button_summary">Deschide xDrip+, butonul de înapoi returnează la AAPS</string>
<string name="carb_increment_button_message">Cantitate de carbohidrați de adăugat când se apasă butonul</string>
<string name="insulin_increment_button_message">Cantitatea de insulină de adăugat când se apasă butonul</string>
<string name="error_starting_cgm">Nu s-a putut deschide aplicația CGM. Asigurați-vă că este instalată.</string>
<string name="overview_cgm">CGM</string>
<string name="nav_historybrowser">Vizualizare istoric</string>
<string name="wear_notifysmb_title">Notifică despre SMB</string>
<string name="wear_notifysmb_summary">Arată SMB pe ceas ca și un bolus standard.</string>
<string name="ns_create_announcements_from_errors_title">Crează anunțuri pentru erori</string>
<string name="ns_create_announcements_from_errors_summary">Crează anunțuri în Nightscout pentru dialoguri de erori și alerte locale (vizibile și în Careportal - Tratamente)</string>
<string name="wear_predictions_summary">Arată previziunile pe ceas.</string>
<string name="wear_predictions_title">Predicții</string>
<string name="data_choices">Alegeri date</string>
<string name="fabric_upload">Încărcare \"fabric\"</string>
<string name="allow_automated_crash_reporting">Permite trimiterea de rapoarte automate de eroare și de date despre folosire către dezvoltatori prin serviciul fabric.io</string>
<string name="g5appnotdetected">Actualizați aplicația G5 la o versiune suportată</string>
<string name="start_activity_tt">Start TT activitate</string>
<string name="start_eating_soon_tt">Start TT mănânc în curând</string>
<string name="temptargetshort">TT</string>
<string name="do_not_bolus_record_only">Nu bolusa, doar înregistrează</string>
<string name="category">Categorie</string>
<string name="subcategory">Subcategorie</string>
<string name="bolusrecordedonly">Bolusul se va înregistra doar</string>
<string name="ns_autobackfill_summary">Autocompletează valorile glicemiei lipsă din NS</string>
<string name="loop_smbsetbypump_label">SMB setat de pompă</string>
<string name="overview_show_sensitivity">Sensibilitate</string>
<string name="overview_show_deviations">Deviații</string>
<string name="overview_show_cob">Carbohidrați activi</string>
<string name="overview_show_iob">Insulină activă</string>
<string name="overview_show_basals">Bazale</string>
<string name="no_action_selected">Nicio acțiune selectată, nu se va întâmpla nimic</string>
<string name="start_hypo_tt">Start TT hipo</string>
<string name="closed_loop_disabled_on_dev_branch">Se folosește versiunea dev. Bucla închisă este dezactivată.</string>
<string name="engineering_mode_enabled">Mod inginer activat</string>
<string name="not_eng_mode_or_release">Modul inginer nu este activat și nu este în versiunea lansată</string>
<string name="pump_basebasalrate" formatted="false">%.2f U/h</string>
<string name="combo_actvity_reading_basal_profile">Se citește profilul bazal</string>
<string name="combo_bolus_rejected_due_to_pump_history_change">Istoricul pompei s-a schimbat după calcularea bolusului. Bolusul nu a fost livrat. Recalculați dacă mai este necesar un bolus. Dacă aceeași cantitate de bolus este necesară, așteptați două minute deoarece două bolusuri cu aceeași valoare nu sunt permise într-un interval mai mic de două minute, din rațiuni de siguranță (indiferent dacă au fost livrate sau nu).</string>
<string name="combo_error_updating_treatment_record">Bolus livrat, dar nu s-a reușit înregistrarea evenimentului. Aceasta se poate întâmpla când două bolusuri mici de aceeași valoare sunt livrate în mai puțin de două minute. Verificați istoricul pompei și înregistrările tratamentelor și folosiți Careportal pentru adăugarea intrărilor lipsă. Asigurați-vă că nu adăugați intrări duble.</string>
<string name="combo_high_temp_rejected_due_to_pump_history_changes">Se respinge temporara mare deoarece calculul nu a luat în calcul istoricul recent schimbat din pompă</string>
<string name="combo_activity_checking_pump_state">Actualizare stare pompă</string>
<string name="combo_warning_pump_basal_rate_changed">Rata bazală din pompă s-a schimbat și va fi actualizată în curând</string>
<string name="combo_error_failure_reading_changed_basal_rate">Rata bazală schimbată în pompă, dar nu s-a putut actualiza</string>
<string name="combo_activity_checking_for_history_changes">Se verifică schimbările în istoric</string>
<string name="combo_error_multiple_boluses_with_identical_timestamp">Mai multe bolusuri de aceeași valoare au fost importate. Doar o singură înregistrare va fi adăugată în tratamente. Verifcați manual în pompă și adăugați înregistrările folosind Careportal. Asigurați-vă că veți crea un bolus care nu se suprapune peste altul în timp.</string>
<string name="alert_w31">Atenționare W31: Rezervor aproape gol</string>
<string name="alert_w32">Atenționare W32: Baterie aproape terminată</string>
<string name="alert_w33">Atenționare W33: Timp/dată invalide</string>
<string name="alert_w34">Atenționare W34: Sfârșitul garanției</string>
<string name="alert_w36">Atenționare W36: RBT terminat</string>
<string name="alert_w38">Atenționare W38: Bolus anulat</string>
<string name="alert_w39">Atenționare W39: Alertă timp închiriere</string>
<string name="alert_m20">Mentenanță M20: Rezervorul nu este inserat</string>
<string name="alert_m21">Mentenanță M21: Rezervol gol</string>
<string name="alert_m22">Mentenanță M22: Baterie goală</string>
<string name="alert_m23">Mentenanță M23: Oprire automată</string>
<string name="alert_m24">Mentenanță M24: Ocluzie</string>
<string name="alert_m25">Mentenanță M25: Închiriere terminată - sfârșitul operațiunilor</string>
<string name="alert_m26">Mentenanță M26: Rezervorul nu a fost schimbat</string>
<string name="alert_m27">Mentenanță M27: Descărcarea datelor eșuată</string>
<string name="alert_m28">Mentenanță M28: Modul pauză expirat</string>
<string name="alert_m29">Mentenanță M29: Tipul bateriei nu este setat</string>
<string name="alert_m30">Mentenanță M30: Tipul rezervorului nu este setat</string>
<string name="alert_e6">Eroare E6: Eroare mecanică</string>
<string name="alert_e7">Eroare E7: Eroare electronică</string>
<string name="alert_e10">Eroare E10: Eroare de revenire tijă piston</string>
<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="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>
<string name="autosensdisabledinpreferences">Autosens dezactivat în preferințe</string>
<string name="smbdisabledinpreferences">SMB dezactivat în preferințe</string>
<string name="limitingbasalratio" formatted="false">Se limitează maximul ratei bazale la %.2f U/o datorită %s</string>
<string name="pumplimit">limită pompă</string>
<string name="itmustbepositivevalue">trebuie să fie o valoare pozitivă</string>
<string name="maxbasalmultiplier">maximul multiplicatorului bazalei</string>
<string name="maxdailybasalmultiplier">maximul zilnic al multiplicatorului bazalei</string>
<string name="smb_frequency_exceeded">S-a livrat un bolus în ultimile 3 minute, nu se livrează SMB</string>
<string name="basal_set_correctly">Bazala setată corect</string>
<string name="limitingpercentrate" formatted="false">Se limitează procentul ratei maxime la %d%% datorită %s</string>
<string name="limitingbolus" formatted="false">Se limitează bolusul la %.1f U datorită %s</string>
<string name="limitingmaxiob" formatted="false">Se limitează max IOB la %.1f U datorită %s</string>
<string name="limitingcarbs" formatted="false">Se limitează carbohidrații %d g datorită %s</string>
<string name="limitingiob" formatted="false">Se limitează IOB la %.1f U datorită %s</string>
<string name="maxvalueinpreferences">valoare maximă în preferințe</string>
<string name="unsafeusage">folosire nesigură</string>
<string name="readstatusfailed">Citire eșuată a stării</string>
<string name="record_pump_site_change">Înregistrare schimbare a locului pompei</string>
<string name="record_insulin_cartridge_change">Înregistrare schimbare rezervor insulină</string>
<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="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>
<string name="pump_stopped">Pompă oprită</string>
<string name="pump_started">Pompă pornită</string>
<string name="pump_paused">Pompă în pauză</string>
<string name="absorption_cutoff_title">Timpul maxim de absorbție a mesei [o]</string>
<string name="absorption_cutoff_summary">Timpul în care orice mâncare se consideră absorbită. Carbohidrații rămași vor fi ignorați.</string>
<string name="time">Timp</string>
<string name="reset">reset</string>
<string name="openapssmb_maxiob_summary">Această valoare este denumită Max IOB în contextul OpenAPS, OpenAPS nu va adăuga mai multă insulină dacă IOB este mai mare ca această valoare</string>
<string name="boluserrorcode" formatted="false">Solicitat: %.2fU Livrat: %.2fU Cod eroare: %d</string>
<string name="firstinsulinincrement">Primul increment de insulină</string>
<string name="secondinsulinincrement">Al doilea increment de insulină</string>
<string name="thirdinsulinincrement">Al treilea increment de insulină</string>
<string name="firstcarbsincrement">Primul increment de carbohidrați</string>
<string name="secondcarbsincrement">Al doilea increment de carbohidrați</string>
<string name="thirdcarbsincrement">Al treilea increment de carbohidrați</string>
<string name="ns_wifi_ssids">SSID WiFi</string>
<string name="ns_wifi_allowedssids">SSIDuri permise (separare prin punct și virgulă)</string>
<string name="combo_check_date">Ultimul bolus este mai vechi de 24 ore sau este în viitor. Verificați ca data să fie configurată corect în pompă.</string>
<string name="combo_suspious_bolus_time">Ora/data bolusului livrat de pompă pare eronat, IOB este probabil incorect. Verificați ora/data pompei.</string>
<string name="profileswitch_ismissing">Lipsă SchimbareProfil. Efectuați o schimbare de profil sau apăsați \"Activare profil\" în ProfilulLocal.</string>
<string name="danar_visualizeextendedaspercentage_title">Afișati bolusul extins ca %</string>
<string name="wear_wizard_settings">Asistent setări</string>
<string name="ns_autobackfill_title">Autocompletează glicemiile lipsă</string>
<string name="value_unavailable_short">n/a</string>
<string name="openapsama_current_basal_safety_multiplier">Multiplicator sigur pentru bazala curentă</string>
<string name="openapsama_max_daily_safety_multiplier">Multiplicator sigur maxim zilnic</string>
<string name="openapsama_autosens_min">Rată minimă autosens</string>
<string name="openapsama_autosens_max">Rată maximă autosens</string>
<string name="ns_allowroaming">Permite conexiuni în roaming</string>
<string name="connectionsettings_title">Setări conexiune</string>
<string name="ns_chargingonly">Doar când se încarcă</string>
<string name="wear_display_settings">Setări afișare</string>
<string name="wear_general_settings">Setări generale</string>
<string name="combo_bolus_count">Total bolusuri</string>
<string name="combo_tbr_count">Total RBTuri</string>
<string name="hardlimit">limită fizică</string>
<string name="overview_show_notes_field_in_dialogs_title">Afișează câmp pentru note în dialogurile de tratamente</string>
<string name="openapsama_bolussnooze_dia_divisor">Amână bolusul prin divizor</string>
<string name="wear_wizard_settings_summary">Calcule incluse în rezultatul asistentului:</string>
<string name="ga_lang">Irlandeză</string>
<string name="enable_nsclient">Activează NSClient</string>
<string name="welcometosetupwizard">Ați pornit asistentul pentru setări. Acesta vă va ajuta pentru configurarea setărilor</string>
<string name="pumpsetup">Setări pompă</string>
<string name="readstatus">Citire stare</string>
<string name="adjustprofileinns">Schimbările trebuie făcute în NS</string>
<string name="exitwizard">Ignoră asistentul pentru setări</string>
<string name="setupwizard_bgsource_description">Care este sursa de glicemii?</string>
<string name="setupwizard_loop_description">Apăsați butonul pentru a permite AndroidAPS să sugereze/facă schimbări ale bazalei</string>
<string name="setupwizard_objectives_description">Apăsați butonul pentru a activa Obiectivele. După terminarea procesului de setare, alegeți fereastra Obiective pentru a face AndroidAPS complet funcțional.</string>
<string name="enableobjectives">Activați Obiectivele</string>
<string name="apssetup">Configurați plugin APS</string>
<string name="backupismissing">Nu există configurații exportate, decin nu se poate face import de configurații.</string>
<string name="sensitivitysetup">Configurați pluginul pentru Sensibilitate</string>
<string name="setupwizard_sensitivity_description">Pluginul Sensibilitate este folosit pentru estimarea sensibilității și calcularea COB. Pentru mai multe info vizitați:</string>
<string name="nsclientinfotext">NSClient răspunde de conexiunea cu Nightscout. Puteți ignora această secțiune, dar nu veți putea completa obiectivele până nu îl configurați.</string>
<string name="diawarning">Atenție: noul profil presupune o durată a acțiunii insulinei (DIA) de cel puțin 5 ore. DIA de 5-6 ore este echivalent cu DIA de 3 ore în vechile profiluri.</string>
<string name="bgsourcesetup">Configurați sursa glicemiilor</string>
<string name="setupwizard_profile_description">Selectați sursa sau profilul. Dacă pacientul este copil, ar fi bine să alegeți un profil NS. Dacă nu aveți profil NS, puteți alege profil local. De aici alegeți doar sursa profilului; pentru a utiliza acest profil, trebuie să îl activați prin executarea unei \"Schimbări de profil\".</string>
<string name="setupwizard_aps_description">Selectați un algoritm dintre cei disponibili. Aceștia sunt sortați de la cei mai vechi la cei mai noi. Algoritmii mai noi sunt, de obicei, mai puternici și mai agresivi. De aceea, dacă sunteți la început, veți dori să alegeți AMA și nu cu cel mai nou algoritm. NU uitați să citiți documentația OpenAPS și să faceți configurările corecte înainte de folosire!</string>
<string name="startobjective">Începeți primul obiectiv</string>
<string name="permission">Permisiune</string>
<string name="askforpermission">Solicitați permisiunea</string>
<string name="needlocationpermission">Aplicația necesită permisiune de localizare pentru scanarea prin BT</string>
<string name="needstoragepermission">Aplicația necesită permisiune de acces la mediul de stocare pentru a putea înregistra jurnalele.</string>
<string name="request">Cerință</string>
<string name="insulinsourcesetup">Configurați plugin insulină</string>
<string name="exit">Ieșire</string>
</resources>

View file

@ -35,7 +35,8 @@
<color name="colorPrimary">#212121</color>
<color name="colorPrimaryDark">#000000</color>
<color name="colorAccent">#009688</color>
<color name="colorAccent">#40bbaa</color>
<color name="mdtp_accent_color">#40bbaa</color>
<color name="colorInitializingBorder">#00695c</color>
<color name="cardColorBackground">#121212</color>
@ -74,10 +75,4 @@
<color name="deviationred">#72FF0000</color>
<color name="deviationblack">#72000000</color>
<color name="swColorPrimary">#303030</color>
<color name="swColorPrimaryDark">#303030</color>
<color name="swColorAccent">#FFEB3B</color>
<color name="swColorBackground">#303030</color>
</resources>

View file

@ -13,6 +13,43 @@
<string name="ns_sync_use_absolute_title">Always use basal absolute values</string>
<string name="alert_dialog_storage_permission_text">Please reboot your phone or restart AndroidAPS from the System Settings \notherwise Android APS will not have logging (important to track and verify that the algorithms are working correctly)!</string>
<string name="description_actions">Some buttons to quickly access common features</string>
<string name="description_careportal">Enter advanced log book entries.</string>
<string name="description_config_builder">Used for configuring the active plugins</string>
<string name="description_objectives">Helps you to get started with AndroidAPS</string>
<string name="description_food">Displays the food presets defined in Nightscout</string>
<string name="description_insulin_rapid">Insulin preset for Humalog and NovoRapid / NovoLog</string>
<string name="description_insulin_ultra_rapid">Insulin preset for Fiasp</string>
<string name="description_insulin_free_peak">Allows you to define the peak of the insulin activity and should only be used by advanced users</string>
<string name="description_loop">Activate or deactivate the implementation triggering the loop.</string>
<string name="description_ns_client">Synchronizes your data with Nightscout</string>
<string name="description_ma">State of the algorithm in 2016</string>
<string name="description_ama">State of the algorithm in 2017</string>
<string name="description_smb">Most recent and most stable</string>
<string name="description_overview">Displays the current state of your loop and buttons for most common actions</string>
<string name="description_persistent_notification">Shows an ongoing notification with a short overview of what your loop is doing</string>
<string name="description_profile_local">Define a profile which is offline available.</string>
<string name="description_profile_nightscout">Provides the profile you have defined in Nightscout</string>
<string name="description_profile_simple">Define a profile with only one time block.</string>
<string name="description_pump_combo">Pump integration for Accu-Chek Combo pumps, requires having ruffy installed</string>
<string name="description_pump_dana_r">Pump integration for DANA Diabecare R pumps</string>
<string name="description_pump_dana_rs">Pump integration for DANA Diabecare RS pumps</string>
<string name="description_pump_insight">Pump integration for Accu-Chek Insight pumps, requires having SightRemote installed</string>
<string name="description_pump_mdi">Pump integration for people who do multiple daily injections for their diabetes therapy</string>
<string name="description_pump_virtual">Pump integration for pumps which don\'t have any driver yet (Open Loop)</string>
<string name="description_sensitivity_aaps">Sensitivity is calculated the same way like Oref0, but you can specify timeframe to the past. Minimal carb absorption is calculated from max carb absorption time from preferences.</string>
<string name="description_sensitivity_oref0">Sensitivity is calculated from 24h data in the past and carbs (if not absorbed) are cut after time specified in preferences.</string>
<string name="description_sensitivity_weighted_average">Sensitivity is calculated as a weighted average from deviations. Newer deviations have higher weight. Minimal carb absorption is calculated from max carb absorption time from preferences. This algorithm is the fastest in following sensitivity changes.</string>
<string name="description_source_dexcom_g5">Receive BG values from the patched Dexcom G5 app.</string>
<string name="description_source_glimp">Receive BG values from Glimp.</string>
<string name="description_source_mm640g">Receive BG values from the 600SeriesAndroidUploader.</string>
<string name="description_source_ns_client">Downloads BG data from Nightscout</string>
<string name="description_source_xdrip">Receive BG values from xDrip.</string>
<string name="description_treatments">Saves all treatments that were made</string>
<string name="description_wear">Monitor and control AndroidAPS using your WearOS watch.</string>
<string name="description_xdrip_status_line">Show information about your loop on your xDrip+ watchface.</string>
<string name="description_sms_communicator">Remote control AndroidAPS using SMS commands.</string>
<string name="objectives_objective_label_string">Objective:</string>
<string name="objectives_gate_label_string">Gate:</string>
<string name="objectives_button_start">Start</string>
@ -83,16 +120,23 @@
<string name="configbuilder_pump">Pump</string>
<string name="configbuilder_pump_description">Which pump would you like to use with AndroidAPS?</string>
<string name="configbuilder_treatments">Treatments</string>
<string name="configbuilder_treatments_description">Which plugin should be used for treatment handling?</string>
<string name="configbuilder_profile">Profile</string>
<string name="configbuilder_profile_description">Which profile should AndroidAPS use?</string>
<string name="configbuilder_aps">APS</string>
<string name="configbuilder_aps_description">Which APS algorithm should make therapy adjustments?</string>
<string name="configbuilder_general">General</string>
<string name="configbuilder_general_description">These are some general plugins you might find useful.</string>
<string name="configbuilder_constraints_description">Which constraints are applied?</string>
<string name="days">days</string>
<string name="objectives_minimalduration">Minimal duration</string>
<string name="constraints">Constraints</string>
<string name="loop">Loop</string>
<string name="configbuilder_loop">Loop</string>
<string name="configbuilder_loop_description">Use this to activate AndroidAPS\' loop integration.</string>
<string name="loop_aps_label">APS</string>
<string name="loop_constraintsprocessed_label">After processed constraints</string>
<string name="loop_tbrsetbypump_label">Temp basal set by pump</string>
@ -121,6 +165,7 @@
<string name="changeyourinput">Change your input!</string>
<string name="setextendedbolusquestion">Set new extended bolus:</string>
<string name="configbuilder_bgsource">BG Source</string>
<string name="configbuilder_bgsource_description">Where should AndroidAPS gain it\'s data from?</string>
<string name="xdrip">xDrip</string>
<string name="apsmode_title">APS Mode</string>
@ -553,6 +598,7 @@
<string name="restartingapp">Exiting application to apply settings.</string>
<string name="danarv2pump">DanaRv2</string>
<string name="configbuilder_insulin">Insulin</string>
<string name="configbuilder_insulin_description">Which type of insulin are you using?</string>
<string name="fastactinginsulin">Fast Acting Insulin</string>
<string name="fastactinginsulincomment">Novorapid, Novolog, Humalog</string>
<string name="ultrafastactinginsulincomment">Fiasp</string>
@ -616,6 +662,7 @@
<string name="openaps">OpenAPS</string>
<string name="uploader">Uploader</string>
<string name="configbuilder_sensitivity">Sensitivity detection</string>
<string name="configbuilder_sensitivity_description">Which sensitivity algorithm should be used?</string>
<string name="sensitivity_shortname">SENS</string>
<string name="sensitivityoref0">Sensitivity Oref0</string>
<string name="sensitivityaaps">Sensitivity AAPS</string>
@ -756,6 +803,7 @@
<string name="dexcomg5_nsupload_title">Upload BG data to NS</string>
<string name="key_dexcomg5_nsupload" translatable="false">dexcomg5_nsupload</string>
<string name="dexcomg5_upload">G5 upload settings</string>
<string name="poctech_upload">Poctech upload settings</string>
<string name="wear_detailed_delta_title">Show detailed delta</string>
<string name="wear_detailed_delta_summary">Show delta with one more decimal place</string>
<string name="smbmaxminutes" translatable="false">45 60 75 90 105 120</string>
@ -1108,4 +1156,6 @@
<string name="open_navigation">Open navigation</string>
<string name="close_navigation">Close navigation</string>
<string name="nav_plugin_preferences">Plugin preferences</string>
<string name="poctech">Poctech</string>
<string name="description_source_poctech">Receive BG values from Poctech app</string>
</resources>

View file

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

View file

@ -1,7 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<PreferenceCategory
android:key="danar"
android:title="@string/dexcomg5_upload">
<SwitchPreference

View file

@ -0,0 +1,19 @@
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<PreferenceCategory
android:title="@string/poctech_upload">
<SwitchPreference
android:defaultValue="false"
android:key="@string/key_dexcomg5_nsupload"
android:title="@string/dexcomg5_nsupload_title" />
<SwitchPreference
android:defaultValue="false"
android:key="@string/key_dexcomg5_xdripupload"
android:summary="@string/dexcomg5_xdripupload_summary"
android:title="@string/dexcomg5_xdripupload_title" />
</PreferenceCategory>
</PreferenceScreen>