move SetupWizard

This commit is contained in:
Milos Kozak 2022-11-21 16:48:45 +01:00
parent 0d960c2b44
commit 7725812e4a
86 changed files with 549 additions and 418 deletions

View file

@ -196,6 +196,7 @@ dependencies {
implementation project(':plugins:automation')
implementation project(':plugins:main')
implementation project(':plugins:openhumans')
implementation project(':plugins:configuration')
implementation project(':implementation')
implementation project(':database:entities')
implementation project(':database:impl')

View file

@ -176,13 +176,6 @@
<service android:name=".plugins.general.persistentNotification.DummyService" />
<activity
android:name=".setupwizard.SetupWizardActivity"
android:configChanges="orientation|keyboardHidden|screenSize"
android:exported="false"
android:label="@string/title_activity_setup_wizard"
android:theme="@style/AppTheme" />
<activity
android:name=".activities.SingleFragmentActivity"
android:exported="false"

View file

@ -37,10 +37,10 @@ import info.nightscout.androidaps.activities.SingleFragmentActivity
import info.nightscout.androidaps.databinding.ActivityMainBinding
import info.nightscout.androidaps.logging.UserEntryLogger
import info.nightscout.androidaps.plugins.constraints.versionChecker.VersionCheckerUtils
import info.nightscout.androidaps.setupwizard.SetupWizardActivity
import info.nightscout.androidaps.utils.extensions.isRunningRealPumpTest
import info.nightscout.androidaps.utils.protection.PasswordCheck
import info.nightscout.androidaps.utils.protection.ProtectionCheck
import info.nightscout.configuration.setupwizard.SetupWizardActivity
import info.nightscout.core.fabric.FabricPrivacy
import info.nightscout.core.ui.UIRunnable
import info.nightscout.core.ui.dialogs.OKDialog

View file

@ -8,7 +8,6 @@ import info.nightscout.androidaps.activities.PreferencesActivity
import info.nightscout.androidaps.activities.SingleFragmentActivity
import info.nightscout.androidaps.plugins.general.maintenance.activities.LogSettingActivity
import info.nightscout.androidaps.plugins.general.overview.activities.QuickWizardListActivity
import info.nightscout.androidaps.setupwizard.SetupWizardActivity
@Module
@Suppress("unused")
@ -19,7 +18,6 @@ abstract class ActivitiesModule {
@ContributesAndroidInjector abstract fun contributeMainActivity(): MainActivity
@ContributesAndroidInjector abstract fun contributesPreferencesActivity(): PreferencesActivity
@ContributesAndroidInjector abstract fun contributesQuickWizardListActivity(): QuickWizardListActivity
@ContributesAndroidInjector abstract fun contributesSetupWizardActivity(): SetupWizardActivity
@ContributesAndroidInjector abstract fun contributesSingleFragmentActivity(): SingleFragmentActivity
}

View file

@ -21,6 +21,7 @@ import info.nightscout.androidaps.plugins.pump.medtronic.di.MedtronicModule
import info.nightscout.androidaps.plugins.pump.omnipod.dash.di.OmnipodDashModule
import info.nightscout.androidaps.plugins.pump.omnipod.eros.di.OmnipodErosModule
import info.nightscout.automation.di.AutomationModule
import info.nightscout.configuration.di.ConfigurationModule
import info.nightscout.core.di.CoreModule
import info.nightscout.database.impl.DatabaseModule
import info.nightscout.implementation.di.ImplementationModule
@ -42,22 +43,22 @@ import javax.inject.Singleton
FragmentsModule::class,
ReceiversModule::class,
ServicesModule::class,
WizardModule::class,
ApsModule::class,
WorkflowModule::class,
OverviewModule::class,
WorkersModule::class,
// Gradle modules
AutomationModule::class,
ApsModule::class,
ConfigurationModule::class,
CoreModule::class,
DatabaseModule::class,
ImplementationModule::class,
OpenHumansModule::class,
PluginsModule::class,
RxModule::class,
SharedModule::class,
SharedImplModule::class,
OpenHumansModule::class,
UiModule::class,
// pumps

View file

@ -8,6 +8,7 @@ import androidx.annotation.StringRes
import androidx.fragment.app.FragmentManager
import info.nightscout.androidaps.MainActivity
import info.nightscout.androidaps.activities.HistoryBrowseActivity
import info.nightscout.androidaps.activities.MyPreferenceFragment
import info.nightscout.androidaps.activities.SingleFragmentActivity
import info.nightscout.androidaps.services.AlarmSoundService
import info.nightscout.interfaces.ui.ActivityNames
@ -32,6 +33,7 @@ class ActivityNamesImpl @Inject constructor() : ActivityNames {
override val errorHelperActivity: Class<*> = ErrorHelperActivity::class.java
override val bolusProgressHelperActivity: Class<*> = BolusProgressHelperActivity::class.java
override val singleFragmentActivity: Class<*> = SingleFragmentActivity::class.java
override val myPreferenceFragment: Class<*> = MyPreferenceFragment::class.java
override fun runAlarm(ctx: Context, status: String, title: String, @RawRes soundId: Int) {
val i = Intent(ctx, errorHelperActivity)

View file

@ -190,7 +190,7 @@ class ConfigBuilderPlugin @Inject constructor(
logPluginStatus()
}
fun processOnEnabledCategoryChanged(changedPlugin: PluginBase, type: PluginType) {
override fun processOnEnabledCategoryChanged(changedPlugin: PluginBase, type: PluginType) {
var pluginsInCategory: ArrayList<PluginBase>? = null
when (type) {
PluginType.INSULIN -> pluginsInCategory = activePlugin.getSpecificPluginsListByInterface(Insulin::class.java)

View file

@ -46,7 +46,7 @@ class PluginStore @Inject constructor(
throw IllegalStateException("Default plugin not found")
}
fun getSpecificPluginsList(type: PluginType): ArrayList<PluginBase> {
override fun getSpecificPluginsList(type: PluginType): ArrayList<PluginBase> {
val newList = ArrayList<PluginBase>()
for (p in plugins) {
if (p.getType() == type) newList.add(p)

View file

@ -1,12 +0,0 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:pathData="M16.495,12.092l-4.921,-4.92l-1.444,1.444l2.468,2.467l-9.765,0l0,2.042l9.765,0l-2.468,2.467l1.444,1.444l4.921,-4.92l-0.012,-0.012z"
android:fillColor="?attr/defaultTextColor"/>
<path
android:pathData="M18.682,2.975H5.152c-1.272,0 -2.307,1.035 -2.307,2.307v3.801h2.126V5.282c0,-0.1 0.081,-0.181 0.181,-0.181h13.53c0.1,0 0.181,0.081 0.181,0.181v13.436c0,0.1 -0.081,0.181 -0.181,0.181H5.152c-0.1,0 -0.181,-0.081 -0.181,-0.181v-3.593H2.845v3.593c0,1.272 1.035,2.307 2.307,2.307h13.53c1.272,0 2.308,-1.034 2.308,-2.307V5.282C20.989,4.01 19.954,2.975 18.682,2.975z"
android:fillColor="?attr/defaultTextColor"/>
</vector>

View file

@ -1,15 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string-array name="unitsArray">
<item>mg/dL</item>
<item>mmol/L</item>
</string-array>
<string-array name="unitsValues" translatable="false">
<item>mg/dl</item>
<item>mmol</item>
</string-array>
<string-array name="languagesArray">
<item>@string/default_lang</item>
<item>@string/en_lang</item>

View file

@ -28,7 +28,6 @@
<string name="es_lang" translatable="false">Spanish</string>
<string name="sv_lang" translatable="false">Swedish</string>
<string name="tr_lang" translatable="false">Turkish</string>
<string name="key_email_for_crash_report" translatable="false">email_for_crash_report</string>
<string name="key_smscommunicator_settings" translatable="false">smscommunicator</string>
<string name="key_protection_settings" translatable="false">protection</string>
<string name="key_absorption_category_settings" translatable="false">absorption_category_settings</string>
@ -51,23 +50,8 @@
<string name="configbuilder">Config Builder</string>
<string name="overview">Overview</string>
<string name="treatments">Treatments</string>
<string name="configbuilder_pump">Pump</string>
<string name="configbuilder_pump_description">Which pump would you like to use with AAPS?</string>
<string name="configbuilder_profile">Profile</string>
<string name="configbuilder_profile_description">Which profile should AAPS 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_sync">Synchronization</string>
<string name="configbuilder_sync_description">Data upload and synchronization plugins.</string>
<string name="configbuilder_constraints_description">Which constraints are applied?</string>
<string name="configbuilder_loop">Loop</string>
<string name="configbuilder_loop_description">Use this to activate AAPS\' loop integration.</string>
<string name="constraints_violation">Constraints violation</string>
<string name="changeyourinput">Change your input!</string>
<string name="configbuilder_bgsource">BG Source</string>
<string name="configbuilder_bgsource_description">Where should AAPS gain it\'s data from?</string>
<string name="profile_label">Profile</string>
<string name="configbuilder_nightscoutversion_label">Nightscout version:</string>
<string name="exported">Preferences exported</string>
@ -86,9 +70,6 @@
<string name="old_master_password">Old Master Password</string>
<string name="different_password_used">This file was exported and encrypted with different master password. Provide old master password to decrypt file.</string>
<string name="master_password_will_be_replaced">As a result of successful import current master password WILL BE REPLACED with that old master password!</string>
<string name="end_user_license_agreement">End User License Agreement</string>
<string name="end_user_license_agreement_text">MUST NOT BE USED TO MAKE MEDICAL DECISIONS. THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM “AS IS” WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.</string>
<string name="end_user_license_agreement_i_understand">I UNDERSTAND AND AGREE</string>
<string name="save">Save</string>
<string name="reloadprofile">Reload profile</string>
<string name="quickwizardsettings">QuickWizard settings</string>
@ -100,7 +81,6 @@
<string name="correctionbous">Corr</string>
<string name="ns_upload_only">(DANGEROUS TO DISABLE) NS upload only</string>
<string name="ns_upload_only_summary">NS upload only (disabled sync). Not effective on SGV unless a local source like xDrip+ is selected. Not effective on Profiles while NS-Profiles is used.\n!!! WARNING !!! Disabling this option may cause malfunctions and insulin overdose if any of your component (AAPS, NS, xDrip+) is wrong configured. Carefully watch if data displayed by AAPS match the pump state!</string>
<string name="units">Units</string>
<string name="prefs_range_title">Range for Visualization</string>
<string name="prefs_range_summary">High and low mark for the charts in Overview and Smartwatch</string>
<string name="low_mark">LOW mark</string>
@ -117,11 +97,7 @@
<string name="short_tabtitles">Shorten tab titles</string>
<string name="wear_settings">Wear settings</string>
<string name="nosuccess">not successful - please check phone</string>
<string name="patient_name">Patient name</string>
<string name="patient_name_summary">Please provide patient name or nickname to differentiate among multiple setups</string>
<string name="key_i_understand" translatable="false">I_understand</string>
<string name="restartingapp">Exiting application to apply settings.</string>
<string name="configbuilder_insulin_description">Which type of insulin are you using?</string>
<string name="enablesuperbolus">Enable superbolus in wizard</string>
<string name="enablesuperbolus_summary">Enable superbolus functionality in wizard. Do not enable until you learn what it really does. IT MAY CAUSE INSULIN OVERDOSE IF USED BLINDLY!</string>
<string name="prediction_shortname">PRED</string>
@ -133,7 +109,6 @@
<string name="devslope_shortname">DEVSLOPE</string>
<string name="nav_about">About</string>
<string name="smscommunicator_missingphonestatepermission">Missing phone state permission</string>
<string name="doprofileswitch">Do Profile Switch</string>
<string name="ns_alarm_options">Alarm options</string>
<string name="key_ns_announcements" translatable="false">ns_announcements</string>
<string name="key_ns_alarms" translatable="false">ns_alarms</string>
@ -148,8 +123,6 @@
<string name="key_openapsama_autosens_period" translatable="false">openapsama_autosens_period</string>
<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="sensitivityoref1">Sensitivity Oref1</string>
<string name="sensitivityaaps">Sensitivity AAPS</string>
@ -206,9 +179,6 @@
<string name="wear_notifysmb_summary">Show SMB on the watch like a standard bolus.</string>
<string name="wear_predictions_summary">Show the predictions on the watchface.</string>
<string name="wear_predictions_title">Predictions</string>
<string name="data_choices">Data Choices</string>
<string name="fabric_upload">Fabric Upload</string>
<string name="allow_automated_crash_reporting">Allow automated crash reporting and feature usage data to be sent to the developers via the fabric.io service.</string>
<string name="g5appnotdetected">Please update your Dexcom app to supported version</string>
<string name="dexcom_app_not_installed">Dexcom app is not installed.</string>
<string name="overview_show_activity">Activity</string>
@ -223,11 +193,6 @@
<string name="absorption_cutoff_title">Meal max absorption time [h]</string>
<string name="absorption_cutoff_summary">Time at which any meal is considered absorbed. Remaining carbs will be cut off.</string>
<string name="overview_show_notes_field_in_dialogs_title">Show notes field in treatment dialogs</string>
<string name="title_activity_setup_wizard" translatable="false">SetupWizardActivity</string>
<string name="next_button">Next</string>
<string name="previous_button">Prev</string>
<string name="nav_setupwizard">Setup Wizard</string>
<string name="setupwizard_finish">FINISH</string>
<string name="firstinsulinincrement">First insulin increment</string>
<string name="secondinsulinincrement">Second insulin increment</string>
<string name="thirdinsulinincrement">Third insulin increment</string>
@ -245,27 +210,12 @@
<string name="wear_wizard_settings_summary">Calculations included in the Wizard result:</string>
<string name="wear_display_settings">Display Settings</string>
<string name="wear_general_settings">General Settings</string>
<string name="welcometosetupwizard">Welcome to setup wizard. It will guide you through the setup process\n</string>
<string name="readstatus">Read status</string>
<string name="exitwizard">Skip setup wizard</string>
<string name="setupwizard_loop_description">Press the button below to enable AAPS to suggest/make basal changes</string>
<string name="key_setupwizard_processed" translatable="false">startupwizard_processed</string>
<string name="setupwizard_sensitivity_description">Sensitivity plugin is used for sensitivity detection and COB calculation. For more info visit:</string>
<string name="setupwizard_sensitivity_url">https://androidaps.readthedocs.io/en/latest/Configuration/Sensitivity-detection-and-COB.html</string>
<string name="syncinfotext">Synchronize data to the cloud. You can skip this part now but you will not be able to pass objectives until you set it up.</string>
<string name="diawarning">Please remember: new insulin profiles require DIA at least 5h. DIA 56h on new profile is equal to DIA 3h on old insulin profiles.</string>
<string name="setupwizard_aps_description">Select one from availables algorithms. They are sorted from oldest to newest. Newer algorithm is usually more powerful and more aggressive. Thus if you are new looper you may probably start with AMA and not with latest one. Do not forget to read the OpenAPS documentation and configure it before use.</string>
<string name="setupwizard_pump_waiting_for_riley_link_connection">Please configure your RileyLink below. After selecting a RileyLink, it will be possible to continue setup once the RileyLink status is \"Connected\". This might take a minute.\n</string>
<string name="setupwizard_pump_pump_not_initialized"><b>Note:</b> You can continue setup once the pump has been set up.\n</string>
<string name="startobjective">Start your first objective</string>
<string name="askforpermission">Ask for permission</string>
<string name="open_navigation">Open navigation</string>
<string name="close_navigation">Close navigation</string>
<string name="nav_plugin_preferences">Plugin preferences</string>
<string name="key_keep_screen_on" translatable="false">keep_screen_on</string>
<string name="remove_items">Remove items</string>
<string name="sort_items">Sort items</string>
<string name="storedsettingsfound">Stored settings found</string>
<string name="allow_hardware_pump_text">Attention: If you activate and connect to a hardware pump, AAPS will copy the basal settings from the profile to the pump, overwriting the existing basal rate stored on the pump. Make sure you have the correct basal setting in AAPS. If you are not sure or don\'t want to overwrite the basal settings on your pump, press cancel and repeat switching to the pump at a later time.</string>
<string name="error_adding_treatment_title">Treatment data incomplete</string>
<string name="maintenance_settings">Maintenance Settings</string>
@ -285,17 +235,13 @@
<string name="miscellaneous">Miscellaneous</string>
<string name="nav_logsettings">Log settings</string>
<string name="resettodefaults">Reset to defaults</string>
<string name="setupwizard_preferred_aps_mode">Preferred APS mode</string>
<string name="sendlogfiles">Send today\'s log files to developers along with this time. Unexpected situation.</string>
<string name="key_short_tabtitles" translatable="false">short_tabtitles</string>
<string name="profile_total">== ∑ %1$s U</string>
<string name="deliverpartofboluswizard">Bolus wizard performs calculation but only this part of calculated insulin is delivered. Useful with SMB algorithm.</string>
<string name="unitsnosemicolon">Units</string>
<string name="setupwizard_units_prompt">Select units you want to display values in</string>
<string name="key_wear_detailediob" translatable="false">wear_detailediob</string>
<string name="key_wear_showbgi" translatable="false">wear_showbgi</string>
<string name="low_mark_comment">Lower value of in range area (display only)</string>
<string name="high_mark_comment">Higher value of in range area (display only)</string>
<string name="show_removed">Show removed</string>
<string name="clearqueueconfirm">Clear queue? All data in queue will be lost!</string>
<string name="key_wear_detailed_delta" translatable="false">wear_detailed_delta</string>
@ -306,9 +252,6 @@
<string name="key_graphconfig" translatable="false">graphconfig</string>
<string name="authorizationfailed">Authorization failed</string>
<string name="overview_show_absinsulin">Absolute insulin</string>
<string name="master_password_summary">Master password is used for backup encryption and to override security in application. Remember it or store on a safe place.</string>
<string name="current_master_password">Current master password</string>
<string name="setupwizard_pump_riley_link_status">RileyLink status:</string>
<string name="copytolocalprofile_invalid">Unable to create profile. Profile is invalid.</string>
<string name="cta_dont_kill_my_app_info">Don\'t kill my app?</string>
<string name="time_to_eat">Time to eat!\nRun Bolus wizard and do calculation again.</string>
@ -318,14 +261,9 @@
<string name="graph_menu_divider_header">Graph</string>
<string name="clear_filter">Clear filter</string>
<string name="cannula">Cannula</string>
<string name="common_values">Use values of your largest food you usually eat\n</string>
<string name="summary_email_for_crash_report">This identification will attached to crash reports so we can contact you in urgent cases. It\'s optional.</string>
<string name="email_address">Email address</string>
<string name="privacy_settings">Privacy setting</string>
<string name="privacy_summary">You can provide optional email address if you want to be notified about app crashes. This is not an automated service. You will be contacted by developers in dangerous situations.</string>
<string name="data_status">BG data status</string>
<string name="remove_bg_readings">Remove BG readings</string>
<string name="identification">Identification (email, FB or Discord nick etc)</string>
<string name="identification_not_set">Identification not set in dev mode</string>
<string name="a11y_dialog">dialog</string>
<string name="not_available_full">Not available</string>

View file

@ -0,0 +1,29 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string-array name="ageArray">
<item>@string/child</item>
<item>@string/teenage</item>
<item>@string/adult</item>
<item>@string/resistant_adult</item>
<item>@string/pregnant</item>
</string-array>
<string-array name="ageValues" translatable="false">
<item>@string/key_child</item>
<item>@string/key_teenage</item>
<item>@string/key_adult</item>
<item>@string/key_resistantadult</item>
<item>@string/key_pregnant</item>
</string-array>
<string-array name="aps_modeArray">
<item>@string/closedloop</item>
<item>@string/openloop</item>
<item>@string/lowglucosesuspend</item>
</string-array>
<string-array name="aps_modeValues" translatable="false">
<item>closed</item>
<item>open</item>
<item>lgs</item>
</string-array>
</resources>

View file

@ -98,6 +98,10 @@
<string name="key_aps_mode" translatable="false">aps_mode</string>
<string name="key_boluswizard_percentage" translatable="false">boluswizard_percentage</string>
<string name="key_usesuperbolus" translatable="false">key_usersuperbolus</string>
<string name="key_treatmentssafety_maxbolus" translatable="false">treatmentssafety_maxbolus</string>
<string name="key_patient_name" translatable="false">patient_name</string>
<string name="key_email_for_crash_report" translatable="false">email_for_crash_report</string>
<!-- General-->
<string name="refresh">Refresh</string>
@ -680,6 +684,18 @@
<string name="wizard_explain_tt_to">%1$s to %2$s</string>
<string name="wizard_pump_not_available">No pump available!</string>
<!-- Preferences-->
<string name="child">Child</string>
<string name="teenage">Teenage</string>
<string name="adult">Adult</string>
<string name="resistant_adult">Insulin resistant adult</string>
<string name="pregnant">Pregnancy</string>
<string name="patient_age_summary">Please select patient type to setup safety limits</string>
<string name="max_bolus_title">Max allowed bolus [U]</string>
<string name="max_carbs_title">Max allowed carbs [g]</string>
<string name="patient_type">Patient type</string>
<plurals name="days">
<item quantity="one">%1$d day</item>
<item quantity="other">%1$d days</item>

View file

@ -15,6 +15,8 @@ files:
translation: /plugins/automation/src/main/res/values-%android_code%/strings.xml
- source: /plugins/openhumans/src/main/res/values/strings.xml
translation: /plugins/openhumans/src/main/res/values-%android_code%/strings.xml
- source: /plugins/configuration/src/main/res/values/strings.xml
translation: /plugins/configuration/src/main/res/values-%android_code%/strings.xml
- source: /core/core-main/src/main/res/values/protection.xml
translation: /core/core-main/src/main/res/values-%android_code%/protection.xml
- source: /core/core-main/src/main/res/values/validator.xml

View file

@ -14,12 +14,11 @@
<string name="basal_value_below_minimum">Basal value below minimum. Profile not set!</string>
<string name="request">Request</string>
<string name="permission">Permission</string>
<string name="need_whitelisting">%1$s needs battery optimization whitelisting for proper performance</string>
<string name="need_system_window_permission">Application needs system window permission for notifications</string>
<string name="need_location_permission">Application needs location permission for BT scan and WiFi identification</string>
<string name="need_storage_permission">Application needs storage permission to be able store log files and export settings</string>
<string name="error_asking_for_permissions">Error asking for permissions</string>
<string name="alert_dialog_permission_battery_optimization_failed">This device does not appear to support battery optimization whitelisting - you may experience performance issues.</string>
<string name="need_whitelisting">%1$s needs battery optimization whitelisting for proper performance</string>
<string name="need_location_permission">Application needs location permission for BT scan and WiFi identification</string>
<string name="need_storage_permission">Application needs storage permission to be able store log files and export settings</string>
<!-- Stats -->
<string name="veryLow" comment="below 3.1">Very low</string>

View file

@ -4,7 +4,13 @@ import info.nightscout.interfaces.plugin.PluginBase
import info.nightscout.interfaces.plugin.PluginType
interface ConfigBuilder {
fun initialize()
fun storeSettings(from: String)
fun performPluginSwitch(changedPlugin: PluginBase, enabled: Boolean, type: PluginType)
/**
* Make sure plugins configuration is valid after enabling/disabling plugin
*/
fun processOnEnabledCategoryChanged(changedPlugin: PluginBase, type: PluginType)
}

View file

@ -105,4 +105,9 @@ interface ActivePlugin {
* Pre-process all plugin types and validate active plugins (ie. only only one plugin for type is selected)
*/
fun verifySelectionInCategories()
/**
* List of all plugins of type
*/
fun getSpecificPluginsList(type: PluginType): ArrayList<PluginBase>
}

View file

@ -17,6 +17,7 @@ interface ActivityNames {
val errorHelperActivity: Class<*>
val bolusProgressHelperActivity: Class<*>
val singleFragmentActivity: Class<*>
val myPreferenceFragment: Class<*>
/**
* Show ErrorHelperActivity and start alarm

1
plugins/configuration/.gitignore vendored Normal file
View file

@ -0,0 +1 @@
/build

View file

@ -0,0 +1,27 @@
plugins {
id 'com.android.library'
id 'kotlin-android'
id 'kotlin-kapt'
id 'kotlin-allopen'
id 'com.hiya.jacoco-android'
}
apply from: "${project.rootDir}/core/core-main/android_dependencies.gradle"
apply from: "${project.rootDir}/core/core-main/android_module_dependencies.gradle"
apply from: "${project.rootDir}/core/core-main/allopen_dependencies.gradle"
apply from: "${project.rootDir}/core/core-main/test_dependencies.gradle"
apply from: "${project.rootDir}/core/core-main/jacoco_global.gradle"
android {
namespace 'info.nightscout.configuration'
}
dependencies {
implementation project(':interfaces')
implementation project(':app-wear-shared:rx')
implementation project(':app-wear-shared:shared')
implementation project(':database:entities')
implementation project(':core:core-main')
implementation project(':core:fabric')
implementation project(':core:ui')
}

View file

View file

@ -0,0 +1,21 @@
# Add project specific ProGuard rules here.
# You can control the set of applied configuration files using the
# proguardFiles setting in build.gradle.
#
# For more details, see
# http://developer.android.com/guide/developing/tools/proguard.html
# If your project uses WebView with JS, uncomment the following
# and specify the fully qualified class name to the JavaScript interface
# class:
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
# public *;
#}
# Uncomment this to preserve the line number information for
# debugging stack traces.
#-keepattributes SourceFile,LineNumberTable
# If you keep the line number information, uncomment this to
# hide the original source file name.
#-renamesourcefileattribute SourceFile

View file

@ -0,0 +1,14 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
<application>
<activity
android:name=".setupwizard.SetupWizardActivity"
android:configChanges="orientation|keyboardHidden|screenSize"
android:exported="false"
android:label="@string/title_activity_setup_wizard"
android:theme="@style/AppTheme" />
</application>
</manifest>

View file

@ -0,0 +1,10 @@
package info.nightscout.configuration.di
import dagger.Module
@Module(
includes = [
SetupWizardModule::class
]
)
open class ConfigurationModule

View file

@ -1,28 +1,31 @@
package info.nightscout.androidaps.di
package info.nightscout.configuration.di
import dagger.Module
import dagger.android.ContributesAndroidInjector
import info.nightscout.androidaps.setupwizard.SWEventListener
import info.nightscout.androidaps.setupwizard.SWScreen
import info.nightscout.androidaps.setupwizard.elements.SWBreak
import info.nightscout.androidaps.setupwizard.elements.SWButton
import info.nightscout.androidaps.setupwizard.elements.SWEditEncryptedPassword
import info.nightscout.androidaps.setupwizard.elements.SWEditIntNumber
import info.nightscout.androidaps.setupwizard.elements.SWEditNumber
import info.nightscout.androidaps.setupwizard.elements.SWEditNumberWithUnits
import info.nightscout.androidaps.setupwizard.elements.SWEditString
import info.nightscout.androidaps.setupwizard.elements.SWEditUrl
import info.nightscout.androidaps.setupwizard.elements.SWFragment
import info.nightscout.androidaps.setupwizard.elements.SWHtmlLink
import info.nightscout.androidaps.setupwizard.elements.SWInfoText
import info.nightscout.androidaps.setupwizard.elements.SWItem
import info.nightscout.androidaps.setupwizard.elements.SWPlugin
import info.nightscout.androidaps.setupwizard.elements.SWPreference
import info.nightscout.androidaps.setupwizard.elements.SWRadioButton
import info.nightscout.configuration.setupwizard.SWEventListener
import info.nightscout.configuration.setupwizard.SWScreen
import info.nightscout.configuration.setupwizard.SetupWizardActivity
import info.nightscout.configuration.setupwizard.elements.SWBreak
import info.nightscout.configuration.setupwizard.elements.SWButton
import info.nightscout.configuration.setupwizard.elements.SWEditEncryptedPassword
import info.nightscout.configuration.setupwizard.elements.SWEditIntNumber
import info.nightscout.configuration.setupwizard.elements.SWEditNumber
import info.nightscout.configuration.setupwizard.elements.SWEditNumberWithUnits
import info.nightscout.configuration.setupwizard.elements.SWEditString
import info.nightscout.configuration.setupwizard.elements.SWEditUrl
import info.nightscout.configuration.setupwizard.elements.SWFragment
import info.nightscout.configuration.setupwizard.elements.SWHtmlLink
import info.nightscout.configuration.setupwizard.elements.SWInfoText
import info.nightscout.configuration.setupwizard.elements.SWItem
import info.nightscout.configuration.setupwizard.elements.SWPlugin
import info.nightscout.configuration.setupwizard.elements.SWPreference
import info.nightscout.configuration.setupwizard.elements.SWRadioButton
@Module
@Suppress("unused")
abstract class WizardModule {
abstract class SetupWizardModule {
@ContributesAndroidInjector abstract fun contributesSetupWizardActivity(): SetupWizardActivity
@ContributesAndroidInjector abstract fun swBreakInjector(): SWBreak
@ContributesAndroidInjector abstract fun swButtonInjector(): SWButton

View file

@ -1,4 +1,4 @@
package info.nightscout.androidaps.setupwizard
package info.nightscout.configuration.setupwizard
import android.Manifest
import android.content.Context
@ -7,23 +7,23 @@ import android.net.Uri
import android.provider.Settings
import androidx.appcompat.app.AppCompatActivity
import dagger.android.HasAndroidInjector
import info.nightscout.androidaps.R
import info.nightscout.androidaps.data.ProfileSealed
import info.nightscout.androidaps.setupwizard.elements.SWBreak
import info.nightscout.androidaps.setupwizard.elements.SWButton
import info.nightscout.androidaps.setupwizard.elements.SWEditEncryptedPassword
import info.nightscout.androidaps.setupwizard.elements.SWEditIntNumber
import info.nightscout.androidaps.setupwizard.elements.SWEditNumber
import info.nightscout.androidaps.setupwizard.elements.SWEditNumberWithUnits
import info.nightscout.androidaps.setupwizard.elements.SWEditString
import info.nightscout.androidaps.setupwizard.elements.SWFragment
import info.nightscout.androidaps.setupwizard.elements.SWHtmlLink
import info.nightscout.androidaps.setupwizard.elements.SWInfoText
import info.nightscout.androidaps.setupwizard.elements.SWPlugin
import info.nightscout.androidaps.setupwizard.elements.SWPreference
import info.nightscout.androidaps.setupwizard.elements.SWRadioButton
import info.nightscout.androidaps.utils.CryptoUtil
import info.nightscout.androidaps.utils.extensions.isRunningTest
import info.nightscout.configuration.R
import info.nightscout.configuration.setupwizard.elements.SWBreak
import info.nightscout.configuration.setupwizard.elements.SWButton
import info.nightscout.configuration.setupwizard.elements.SWEditEncryptedPassword
import info.nightscout.configuration.setupwizard.elements.SWEditIntNumber
import info.nightscout.configuration.setupwizard.elements.SWEditNumber
import info.nightscout.configuration.setupwizard.elements.SWEditNumberWithUnits
import info.nightscout.configuration.setupwizard.elements.SWEditString
import info.nightscout.configuration.setupwizard.elements.SWFragment
import info.nightscout.configuration.setupwizard.elements.SWHtmlLink
import info.nightscout.configuration.setupwizard.elements.SWInfoText
import info.nightscout.configuration.setupwizard.elements.SWPlugin
import info.nightscout.configuration.setupwizard.elements.SWPreference
import info.nightscout.configuration.setupwizard.elements.SWRadioButton
import info.nightscout.interfaces.AndroidPermission
import info.nightscout.interfaces.Config
import info.nightscout.interfaces.ConfigBuilder
@ -99,47 +99,51 @@ class SWDefinition @Inject constructor(
.label(R.string.end_user_license_agreement_text)
)
.add(SWBreak(injector))
.add(SWButton(injector)
.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)
rxBus.send(EventSWUpdate(false))
})
.add(
SWButton(injector)
.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)
rxBus.send(EventSWUpdate(false))
})
.visibility { !sp.getBoolean(R.string.key_i_understand, false) }
.validator { sp.getBoolean(R.string.key_i_understand, false) }
private val screenUnits get() = SWScreen(injector, R.string.units)
.skippable(false)
.add(
SWRadioButton(injector)
.option(R.array.unitsArray, R.array.unitsValues)
.preferenceId(R.string.key_units).label(R.string.units)
.comment(R.string.setupwizard_units_prompt)
)
.validator { sp.contains(R.string.key_units) }
private val screenUnits
get() = SWScreen(injector, R.string.units)
.skippable(false)
.add(
SWRadioButton(injector)
.option(R.array.unitsArray, R.array.unitsValues)
.preferenceId(R.string.key_units).label(R.string.units)
.comment(R.string.setupwizard_units_prompt)
)
.validator { sp.contains(R.string.key_units) }
private val displaySettings get() = SWScreen(injector, R.string.wear_display_settings)
.skippable(false)
.add(
SWEditNumberWithUnits(injector, Constants.LOW_MARK * Constants.MGDL_TO_MMOLL, 3.0, 8.0)
.preferenceId(R.string.key_low_mark)
.updateDelay(5)
.label(R.string.low_mark)
.comment(R.string.low_mark_comment)
)
.add(SWBreak(injector))
.add(
SWEditNumberWithUnits(injector, Constants.HIGH_MARK * Constants.MGDL_TO_MMOLL, 5.0, 20.0)
.preferenceId(R.string.key_high_mark)
.updateDelay(5)
.label(R.string.high_mark)
.comment(R.string.high_mark_comment)
)
private val displaySettings
get() = SWScreen(injector, R.string.display_settings)
.skippable(false)
.add(
SWEditNumberWithUnits(injector, Constants.LOW_MARK * Constants.MGDL_TO_MMOLL, 3.0, 8.0)
.preferenceId(R.string.key_low_mark)
.updateDelay(5)
.label(R.string.low_mark)
.comment(R.string.low_mark_comment)
)
.add(SWBreak(injector))
.add(
SWEditNumberWithUnits(injector, Constants.HIGH_MARK * Constants.MGDL_TO_MMOLL, 5.0, 20.0)
.preferenceId(R.string.key_high_mark)
.updateDelay(5)
.label(R.string.high_mark)
.comment(R.string.high_mark_comment)
)
private val screenPermissionWindow get() = SWScreen(injector, R.string.permission)
.skippable(false)
.add(
private val screenPermissionWindow
get() = SWScreen(injector, R.string.permission)
.skippable(false)
.add(
SWInfoText(injector)
.label(rh.gs(R.string.need_system_window_permission))
)
@ -155,7 +159,7 @@ class SWDefinition @Inject constructor(
.skippable(false)
.add(
SWInfoText(injector)
.label(rh.gs(R.string.need_whitelisting, rh.gs(R.string.app_name)))
.label(rh.gs(R.string.need_whitelisting, rh.gs(config.appName)))
)
.add(SWBreak(injector))
.add(SWButton(injector)
@ -265,29 +269,29 @@ class SWDefinition @Inject constructor(
)
.validator { !cryptoUtil.checkPassword("", sp.getString(R.string.key_master_password, "")) }
private val screenAge get() = SWScreen(injector, R.string.patientage)
private val screenAge get() = SWScreen(injector, R.string.patient_type)
.skippable(false)
.add(SWBreak(injector))
.add(
SWRadioButton(injector)
.option(R.array.ageArray, R.array.ageValues)
.preferenceId(R.string.key_age)
.label(R.string.patientage)
.comment(R.string.patientage_summary)
.label(R.string.patient_type)
.comment(R.string.patient_age_summary)
)
.add(SWBreak(injector))
.add(
SWEditNumber(injector, 3.0, 0.1, 25.0)
.preferenceId(R.string.key_treatmentssafety_maxbolus)
.updateDelay(5)
.label(R.string.treatmentssafety_maxbolus_title)
.label(R.string.max_bolus_title)
.comment(R.string.common_values)
)
.add(
SWEditIntNumber(injector, 48, 1, 100)
.preferenceId(R.string.key_treatmentssafety_maxcarbs)
.updateDelay(5)
.label(R.string.treatmentssafety_maxcarbs_title)
.label(R.string.max_carbs_title)
.comment(R.string.common_values)
)
.validator {
@ -310,29 +314,38 @@ class SWDefinition @Inject constructor(
.label(R.string.diawarning)
)
private val screenBgSource get() = SWScreen(injector, R.string.configbuilder_bgsource)
.skippable(false)
.add(
SWPlugin(injector, this)
.option(PluginType.BGSOURCE, R.string.configbuilder_bgsource_description)
.label(R.string.configbuilder_bgsource)
)
.add(SWBreak(injector))
private val screenBgSource
get() = SWScreen(injector, R.string.configbuilder_bgsource)
.skippable(false)
.add(
SWPlugin(injector, this)
.option(PluginType.BGSOURCE, R.string.configbuilder_bgsource_description)
.label(R.string.configbuilder_bgsource)
)
.add(SWBreak(injector))
private val screenLocalProfile get() = SWScreen(injector, R.string.localprofile)
.skippable(false)
.add(
SWFragment(injector, this)
.add(activity.supportFragmentManager.fragmentFactory.instantiate(ClassLoader.getSystemClassLoader(), (activePlugin.activeProfileSource as PluginBase).pluginDescription.fragmentClass!!))
private val screenLocalProfile
get() = SWScreen(injector, R.string.profile)
.skippable(false)
.add(
SWFragment(injector, this)
.add(
activity.supportFragmentManager.fragmentFactory.instantiate(
ClassLoader.getSystemClassLoader(),
(activePlugin.activeProfileSource as PluginBase).pluginDescription.fragmentClass!!
)
)
//.add(ProfileFragment())
)
.validator {
activePlugin.activeProfileSource.profile?.getDefaultProfile()?.let { ProfileSealed.Pure(it).isValid("StartupWizard", activePlugin.activePump, config, rh, rxBus, hardLimits, false).isValid }
?: false
}
.visibility { (activePlugin.activeProfileSource as PluginBase).isEnabled() }
)
.validator {
activePlugin.activeProfileSource.profile?.getDefaultProfile()
?.let { ProfileSealed.Pure(it).isValid("StartupWizard", activePlugin.activePump, config, rh, rxBus, hardLimits, false).isValid }
?: false
}
.visibility { (activePlugin.activeProfileSource as PluginBase).isEnabled() }
private val screenProfileSwitch get() = SWScreen(injector, R.string.careportal_profileswitch)
private val screenProfileSwitch
get() = SWScreen(injector, R.string.careportal_profileswitch)
.skippable(false)
.add(
SWInfoText(injector)
@ -404,7 +417,7 @@ class SWDefinition @Inject constructor(
.add(SWBreak(injector))
.add(
SWHtmlLink(injector)
.label("https://openaps.readthedocs.io/en/latest/")
.label("https://wiki.aaps.app")
)
.add(SWBreak(injector))

View file

@ -1,4 +1,4 @@
package info.nightscout.androidaps.setupwizard
package info.nightscout.configuration.setupwizard
import android.annotation.SuppressLint
import android.content.Context
@ -6,7 +6,7 @@ import android.view.View
import android.widget.LinearLayout
import android.widget.TextView
import dagger.android.HasAndroidInjector
import info.nightscout.androidaps.setupwizard.elements.SWItem
import info.nightscout.configuration.setupwizard.elements.SWItem
import info.nightscout.rx.AapsSchedulers
import info.nightscout.rx.events.EventStatus
import io.reactivex.rxjava3.disposables.CompositeDisposable

View file

@ -1,4 +1,4 @@
package info.nightscout.androidaps.setupwizard;
package info.nightscout.configuration.setupwizard;
// keep in java, it's easier
public interface SWIntNumberValidator {

View file

@ -1,4 +1,4 @@
package info.nightscout.androidaps.setupwizard;
package info.nightscout.configuration.setupwizard;
// keep in java, it's easier
public interface SWNumberValidator {

View file

@ -1,9 +1,8 @@
package info.nightscout.androidaps.setupwizard
package info.nightscout.configuration.setupwizard
import dagger.android.HasAndroidInjector
import info.nightscout.androidaps.setupwizard.elements.SWItem
import info.nightscout.configuration.setupwizard.elements.SWItem
import info.nightscout.shared.interfaces.ResourceHelper
import java.util.*
import javax.inject.Inject
class SWScreen(val injector: HasAndroidInjector, private var header: Int) {

View file

@ -1,4 +1,4 @@
package info.nightscout.androidaps.setupwizard;
package info.nightscout.configuration.setupwizard;
// keep in java, it's easier
public interface SWTextValidator {

View file

@ -1,4 +1,4 @@
package info.nightscout.androidaps.setupwizard;
package info.nightscout.configuration.setupwizard;
// keep in java, it's easier
public interface SWValidator {

View file

@ -1,18 +1,18 @@
package info.nightscout.androidaps.setupwizard
package info.nightscout.configuration.setupwizard
import android.content.Intent
import android.os.Bundle
import android.view.View
import android.widget.TextView
import dagger.android.HasAndroidInjector
import info.nightscout.androidaps.MainActivity
import info.nightscout.androidaps.R
import info.nightscout.androidaps.activities.NoSplashAppCompatActivity
import info.nightscout.androidaps.databinding.ActivitySetupwizardBinding
import info.nightscout.androidaps.setupwizard.elements.SWItem
import info.nightscout.configuration.R
import info.nightscout.configuration.databinding.ActivitySetupwizardBinding
import info.nightscout.configuration.setupwizard.elements.SWItem
import info.nightscout.core.fabric.FabricPrivacy
import info.nightscout.core.ui.dialogs.OKDialog
import info.nightscout.interfaces.locale.LocaleHelper.update
import info.nightscout.interfaces.ui.ActivityNames
import info.nightscout.rx.AapsSchedulers
import info.nightscout.rx.events.EventProfileStoreChanged
import info.nightscout.rx.events.EventProfileSwitchChanged
@ -34,6 +34,7 @@ class SetupWizardActivity : NoSplashAppCompatActivity() {
@Inject lateinit var sp: SP
@Inject lateinit var fabricPrivacy: FabricPrivacy
@Inject lateinit var aapsSchedulers: AapsSchedulers
@Inject lateinit var activityNames: ActivityNames
private val disposable = CompositeDisposable()
private lateinit var screens: List<SWScreen>
@ -163,7 +164,7 @@ class SetupWizardActivity : NoSplashAppCompatActivity() {
@Suppress("UNUSED_PARAMETER")
fun finishSetupWizard(view: View?) {
sp.putBoolean(R.string.key_setupwizard_processed, true)
val intent = Intent(this, MainActivity::class.java)
val intent = Intent(this, activityNames.mainActivity)
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)
startActivity(intent)
finish()

View file

@ -1,10 +1,10 @@
package info.nightscout.androidaps.setupwizard.elements
package info.nightscout.configuration.setupwizard.elements
import android.view.View
import android.widget.LinearLayout
import android.widget.TextView
import dagger.android.HasAndroidInjector
import info.nightscout.androidaps.setupwizard.SWValidator
import info.nightscout.configuration.setupwizard.SWValidator
class SWBreak(injector: HasAndroidInjector) : SWItem(injector, Type.BREAK) {
private var l: TextView? = null

View file

@ -1,10 +1,10 @@
package info.nightscout.androidaps.setupwizard.elements
package info.nightscout.configuration.setupwizard.elements
import android.view.View
import android.widget.Button
import android.widget.LinearLayout
import dagger.android.HasAndroidInjector
import info.nightscout.androidaps.setupwizard.SWValidator
import info.nightscout.configuration.setupwizard.SWValidator
class SWButton(injector: HasAndroidInjector) : SWItem(injector, Type.BUTTON) {
private var buttonRunnable: Runnable? = null

View file

@ -1,4 +1,4 @@
package info.nightscout.androidaps.setupwizard.elements
package info.nightscout.configuration.setupwizard.elements
import android.graphics.Typeface
import android.text.Editable
@ -10,14 +10,15 @@ import android.widget.EditText
import android.widget.LinearLayout
import android.widget.TextView
import dagger.android.HasAndroidInjector
import info.nightscout.androidaps.R
import info.nightscout.shared.extensions.toVisibility
import info.nightscout.androidaps.setupwizard.SWTextValidator
import info.nightscout.androidaps.utils.CryptoUtil
import info.nightscout.configuration.R
import info.nightscout.configuration.setupwizard.SWTextValidator
import info.nightscout.shared.extensions.toVisibility
class SWEditEncryptedPassword(injector: HasAndroidInjector, private val cryptoUtil: CryptoUtil) : SWItem(injector, Type.STRING) {
private var validator: SWTextValidator = SWTextValidator(String::isNotEmpty)
private var validator: SWTextValidator =
SWTextValidator(String::isNotEmpty)
private var updateDelay = 0L
private var button: Button? = null
private var editText: EditText? = null

View file

@ -1,4 +1,4 @@
package info.nightscout.androidaps.setupwizard.elements
package info.nightscout.configuration.setupwizard.elements
import android.graphics.Typeface
import android.text.Editable
@ -7,14 +7,15 @@ import android.view.View
import android.widget.LinearLayout
import android.widget.TextView
import dagger.android.HasAndroidInjector
import info.nightscout.androidaps.setupwizard.SWIntNumberValidator
import info.nightscout.configuration.setupwizard.SWIntNumberValidator
import info.nightscout.core.ui.elements.NumberPicker
import info.nightscout.shared.SafeParse
import java.text.DecimalFormat
class SWEditIntNumber(injector: HasAndroidInjector, private val init: Int, private val min: Int, private val max: Int) : SWItem(injector, Type.NUMBER) {
private val validator: SWIntNumberValidator = SWIntNumberValidator { value -> value in min..max }
private val validator: SWIntNumberValidator =
SWIntNumberValidator { value -> value in min..max }
private var updateDelay = 0
override fun generateDialog(layout: LinearLayout) {

View file

@ -1,4 +1,4 @@
package info.nightscout.androidaps.setupwizard.elements
package info.nightscout.configuration.setupwizard.elements
import android.graphics.Typeface
import android.text.Editable
@ -7,14 +7,15 @@ import android.view.View
import android.widget.LinearLayout
import android.widget.TextView
import dagger.android.HasAndroidInjector
import info.nightscout.androidaps.setupwizard.SWNumberValidator
import info.nightscout.configuration.setupwizard.SWNumberValidator
import info.nightscout.core.ui.elements.NumberPicker
import info.nightscout.shared.SafeParse
import java.text.DecimalFormat
class SWEditNumber(injector: HasAndroidInjector, private val init: Double, private val min: Double, private val max: Double) : SWItem(injector, Type.DECIMAL_NUMBER) {
private val validator: SWNumberValidator = SWNumberValidator { value -> value in min..max }
private val validator: SWNumberValidator =
SWNumberValidator { value -> value in min..max }
private var updateDelay = 0
override fun generateDialog(layout: LinearLayout) {

View file

@ -1,4 +1,4 @@
package info.nightscout.androidaps.setupwizard.elements
package info.nightscout.configuration.setupwizard.elements
import android.graphics.Typeface
import android.text.Editable
@ -7,7 +7,7 @@ import android.view.View
import android.widget.LinearLayout
import android.widget.TextView
import dagger.android.HasAndroidInjector
import info.nightscout.androidaps.setupwizard.SWNumberValidator
import info.nightscout.configuration.setupwizard.SWNumberValidator
import info.nightscout.core.profile.toCurrentUnits
import info.nightscout.core.ui.elements.NumberPicker
import info.nightscout.interfaces.GlucoseUnit
@ -21,7 +21,8 @@ class SWEditNumberWithUnits(injector: HasAndroidInjector, private val init: Doub
@Inject lateinit var profileFunction: ProfileFunction
private val validator: SWNumberValidator = SWNumberValidator { value -> value in min..max }
private val validator: SWNumberValidator =
SWNumberValidator { value -> value in min..max }
private var updateDelay = 0
override fun generateDialog(layout: LinearLayout) {

View file

@ -1,4 +1,4 @@
package info.nightscout.androidaps.setupwizard.elements
package info.nightscout.configuration.setupwizard.elements
import android.graphics.Typeface
import android.text.Editable
@ -9,7 +9,7 @@ import android.widget.EditText
import android.widget.LinearLayout
import android.widget.TextView
import dagger.android.HasAndroidInjector
import info.nightscout.androidaps.setupwizard.SWTextValidator
import info.nightscout.configuration.setupwizard.SWTextValidator
class SWEditString(injector: HasAndroidInjector) : SWItem(injector, Type.STRING) {

View file

@ -1,4 +1,4 @@
package info.nightscout.androidaps.setupwizard.elements
package info.nightscout.configuration.setupwizard.elements
import android.graphics.Typeface
import android.text.Editable
@ -10,8 +10,8 @@ import android.widget.EditText
import android.widget.LinearLayout
import android.widget.TextView
import dagger.android.HasAndroidInjector
import info.nightscout.androidaps.R
import info.nightscout.androidaps.setupwizard.events.EventSWLabel
import info.nightscout.configuration.R
import info.nightscout.configuration.setupwizard.events.EventSWLabel
class SWEditUrl(injector: HasAndroidInjector) : SWItem(injector, Type.URL) {
private var updateDelay = 0L

View file

@ -1,9 +1,9 @@
package info.nightscout.androidaps.setupwizard.elements
package info.nightscout.configuration.setupwizard.elements
import android.widget.LinearLayout
import androidx.fragment.app.Fragment
import dagger.android.HasAndroidInjector
import info.nightscout.androidaps.setupwizard.SWDefinition
import info.nightscout.configuration.setupwizard.SWDefinition
class SWFragment(injector:HasAndroidInjector, private var definition: SWDefinition) : SWItem(injector, Type.FRAGMENT) {
lateinit var fragment: Fragment

View file

@ -1,4 +1,4 @@
package info.nightscout.androidaps.setupwizard.elements
package info.nightscout.configuration.setupwizard.elements
import android.text.util.Linkify
import android.view.View
@ -6,7 +6,7 @@ import android.widget.LinearLayout
import android.widget.TextView
import androidx.annotation.StringRes
import dagger.android.HasAndroidInjector
import info.nightscout.androidaps.setupwizard.SWValidator
import info.nightscout.configuration.setupwizard.SWValidator
class SWHtmlLink(injector: HasAndroidInjector) : SWItem(injector, Type.HTML_LINK) {

View file

@ -1,10 +1,10 @@
package info.nightscout.androidaps.setupwizard.elements
package info.nightscout.configuration.setupwizard.elements
import android.view.View
import android.widget.LinearLayout
import android.widget.TextView
import dagger.android.HasAndroidInjector
import info.nightscout.androidaps.setupwizard.SWValidator
import info.nightscout.configuration.setupwizard.SWValidator
class SWInfoText(injector: HasAndroidInjector) : SWItem(injector, Type.TEXT) {
private var textLabel: String? = null

View file

@ -1,4 +1,4 @@
package info.nightscout.androidaps.setupwizard.elements
package info.nightscout.configuration.setupwizard.elements
import android.content.Context
import android.content.ContextWrapper

View file

@ -1,4 +1,4 @@
package info.nightscout.androidaps.setupwizard.elements
package info.nightscout.configuration.setupwizard.elements
import android.os.Bundle
import android.view.View
@ -7,28 +7,30 @@ import android.widget.LinearLayout
import android.widget.RadioButton
import android.widget.RadioGroup
import android.widget.TextView
import androidx.fragment.app.Fragment
import dagger.android.HasAndroidInjector
import info.nightscout.androidaps.activities.MyPreferenceFragment
import info.nightscout.androidaps.plugins.configBuilder.ConfigBuilderPlugin
import info.nightscout.androidaps.plugins.configBuilder.PluginStore
import info.nightscout.androidaps.setupwizard.SWDefinition
import info.nightscout.rx.events.EventSWUpdate
import info.nightscout.configuration.setupwizard.SWDefinition
import info.nightscout.interfaces.ConfigBuilder
import info.nightscout.interfaces.plugin.ActivePlugin
import info.nightscout.interfaces.plugin.PluginBase
import info.nightscout.interfaces.plugin.PluginType
import info.nightscout.interfaces.ui.ActivityNames
import info.nightscout.rx.events.EventConfigBuilderChange
import info.nightscout.rx.events.EventSWUpdate
import javax.inject.Inject
class SWPlugin(injector: HasAndroidInjector, private val definition: SWDefinition) : SWItem(injector, Type.PLUGIN) {
@Inject lateinit var pluginStore: PluginStore
@Inject lateinit var configBuilderPlugin: ConfigBuilderPlugin
@Inject lateinit var activePlugin: ActivePlugin
@Inject lateinit var configBuilder: ConfigBuilder
@Inject lateinit var activityNames: ActivityNames
private var pType: PluginType? = null
private var radioGroup: RadioGroup? = null
private var pluginDescription = 0
private var makeVisible = true
private var fragment: MyPreferenceFragment? = null
private var fragment: Fragment? = null
fun option(pType: PluginType, pluginDescription: Int): SWPlugin {
this.pType = pType
@ -46,7 +48,7 @@ class SWPlugin(injector: HasAndroidInjector, private val definition: SWDefinitio
val context = layout.context
radioGroup = RadioGroup(context)
radioGroup?.clearCheck()
val pluginsInCategory = pluginStore.getSpecificPluginsList(pType!!)
val pluginsInCategory = activePlugin.getSpecificPluginsList(pType!!)
radioGroup?.orientation = LinearLayout.VERTICAL
radioGroup?.visibility = View.VISIBLE
val pDesc = TextView(context)
@ -78,8 +80,8 @@ class SWPlugin(injector: HasAndroidInjector, private val definition: SWDefinitio
val plugin = rb.tag as PluginBase
plugin.setPluginEnabled(pType!!, rb.isChecked)
plugin.setFragmentVisible(pType!!, rb.isChecked && makeVisible)
configBuilderPlugin.processOnEnabledCategoryChanged(plugin, pType!!)
configBuilderPlugin.storeSettings("SetupWizard")
configBuilder.processOnEnabledCategoryChanged(plugin, pType!!)
configBuilder.storeSettings("SetupWizard")
rxBus.send(EventConfigBuilderChange())
rxBus.send(EventSWUpdate(false))
addConfiguration(layout, plugin)
@ -91,15 +93,17 @@ class SWPlugin(injector: HasAndroidInjector, private val definition: SWDefinitio
private fun addConfiguration(layout: LinearLayout, plugin: PluginBase) {
if (plugin.preferencesId != -1) {
fragment = MyPreferenceFragment()
fragment?.arguments = Bundle().also { it.putInt("id", plugin.preferencesId) }
definition.activity.supportFragmentManager.beginTransaction().run {
replace(layout.id, fragment!!)
commit()
fragment = Class.forName(activityNames.myPreferenceFragment.name).newInstance() as Fragment //MyPreferenceFragment()
fragment?.let {
it.arguments = Bundle().also { it.putInt("id", plugin.preferencesId) }
definition.activity.supportFragmentManager.beginTransaction().run {
replace(layout.id, it)
commit()
}
}
} else {
definition.activity.supportFragmentManager.beginTransaction().run {
if (fragment != null) remove(fragment!!)
fragment?.let { remove(it) }
fragment = null
commit()
}

View file

@ -1,18 +1,16 @@
package info.nightscout.androidaps.setupwizard.elements
package info.nightscout.configuration.setupwizard.elements
import android.os.Bundle
import android.widget.LinearLayout
import androidx.fragment.app.Fragment
import dagger.android.HasAndroidInjector
import info.nightscout.androidaps.activities.MyPreferenceFragment
import info.nightscout.androidaps.plugins.configBuilder.ConfigBuilderPlugin
import info.nightscout.androidaps.plugins.configBuilder.PluginStore
import info.nightscout.androidaps.setupwizard.SWDefinition
import info.nightscout.configuration.setupwizard.SWDefinition
import info.nightscout.interfaces.ui.ActivityNames
import javax.inject.Inject
class SWPreference(injector: HasAndroidInjector, private val definition: SWDefinition) : SWItem(injector, Type.PREFERENCE) {
@Inject lateinit var pluginStore: PluginStore
@Inject lateinit var configBuilderPlugin: ConfigBuilderPlugin
@Inject lateinit var activityNames: ActivityNames
private var xml: Int = -1
@ -27,7 +25,7 @@ class SWPreference(injector: HasAndroidInjector, private val definition: SWDefin
}
private fun addConfiguration(layout: LinearLayout, xml: Int) {
MyPreferenceFragment().also { fragment ->
(Class.forName(activityNames.myPreferenceFragment.name).newInstance() as Fragment).also { fragment ->
fragment.arguments = Bundle().also { it.putInt("id", xml) }
definition.activity.supportFragmentManager.beginTransaction().run {
replace(layout.id, fragment)

View file

@ -1,4 +1,4 @@
package info.nightscout.androidaps.setupwizard.elements
package info.nightscout.configuration.setupwizard.elements
import android.view.View
import android.view.ViewGroup
@ -23,7 +23,7 @@ class SWRadioButton(injector: HasAndroidInjector) : SWItem(injector, Type.RADIOB
return rh.gsa(labelsArray)
}
fun values(): Array<String> {
private fun values(): Array<String> {
return rh.gsa(valuesArray)
}

View file

@ -1,4 +1,4 @@
package info.nightscout.androidaps.setupwizard.events
package info.nightscout.configuration.setupwizard.events
import info.nightscout.rx.events.Event

View file

@ -0,0 +1,12 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:pathData="M16.495,12.092l-4.921,-4.92l-1.444,1.444l2.468,2.467l-9.765,0l0,2.042l9.765,0l-2.468,2.467l1.444,1.444l4.921,-4.92l-0.012,-0.012z"
android:fillColor="?attr/defaultTextColor" />
<path
android:pathData="M18.682,2.975H5.152c-1.272,0 -2.307,1.035 -2.307,2.307v3.801h2.126V5.282c0,-0.1 0.081,-0.181 0.181,-0.181h13.53c0.1,0 0.181,0.081 0.181,0.181v13.436c0,0.1 -0.081,0.181 -0.181,0.181H5.152c-0.1,0 -0.181,-0.081 -0.181,-0.181v-3.593H2.845v3.593c0,1.272 1.035,2.307 2.307,2.307h13.53c1.272,0 2.308,-1.034 2.308,-2.307V5.282C20.989,4.01 19.954,2.975 18.682,2.975z"
android:fillColor="?attr/defaultTextColor" />
</vector>

View file

@ -5,7 +5,7 @@
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".setupwizard.SetupWizardActivity">
tools:context="info.nightscout.configuration.setupwizard.SetupWizardActivity">
<LinearLayout
android:layout_width="wrap_content"
@ -50,6 +50,7 @@
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1">
<LinearLayout
android:id="@+id/sw_content_fields"
android:layout_width="match_parent"

View file

@ -0,0 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string-array name="unitsArray">
<item>mg/dL</item>
<item>mmol/L</item>
</string-array>
<string-array name="unitsValues" translatable="false">
<item>mg/dl</item>
<item>mmol</item>
</string-array>
</resources>

View file

@ -0,0 +1,79 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="key_i_understand" translatable="false">I_understand</string>
<string name="units">Units</string>
<string name="setupwizard_units_prompt">Select units you want to display values in</string>
<string name="title_activity_setup_wizard" translatable="false">SetupWizardActivity</string>
<string name="next_button">Next</string>
<string name="previous_button">Prev</string>
<string name="nav_setupwizard">Setup Wizard</string>
<string name="setupwizard_finish">FINISH</string>
<string name="welcometosetupwizard">Welcome to setup wizard. It will guide you through the setup process\n</string>
<string name="end_user_license_agreement">End User License Agreement</string>
<string name="end_user_license_agreement_text">MUST NOT BE USED TO MAKE MEDICAL DECISIONS. THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM “AS IS” WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.</string>
<string name="end_user_license_agreement_i_understand">I UNDERSTAND AND AGREE</string>
<string name="display_settings">Display Settings</string>
<string name="low_mark">LOW mark</string>
<string name="high_mark">HIGH mark</string>
<string name="low_mark_comment">Lower value of in range area (display only)</string>
<string name="high_mark_comment">Higher value of in range area (display only)</string>
<string name="permission">Permission</string>
<string name="need_system_window_permission">Application needs system window permission for notifications</string>
<string name="need_location_permission">Application needs location permission for BT scan and WiFi identification</string>
<string name="need_storage_permission">Application needs storage permission to be able store log files and export settings</string>
<string name="askforpermission">Ask for permission</string>
<string name="need_whitelisting">%1$s needs battery optimization whitelisting for proper performance</string>
<string name="import_setting">Import settings</string>
<string name="storedsettingsfound">Stored settings found</string>
<string name="master_password_summary">Master password is used for backup encryption and to override security in application. Remember it or store on a safe place.</string>
<string name="current_master_password">Current master password</string>
<string name="common_values">Use values of your largest food you usually eat\n</string>
<string name="syncinfotext">Synchronize data to the cloud. You can skip this part now but you will not be able to pass objectives until you set it up.</string>
<string name="status">Status:</string>
<string name="patient_name">Patient name</string>
<string name="patient_name_summary">Please provide patient name or nickname to differentiate among multiple setups</string>
<string name="privacy_settings">Privacy setting</string>
<string name="privacy_summary">You can provide optional email address if you want to be notified about app crashes. This is not an automated service. You will be contacted by developers in dangerous situations.</string>
<string name="diawarning">Please remember: new insulin profiles require DIA at least 5h. DIA 56h on new profile is equal to DIA 3h on old insulin profiles.</string>
<string name="profile">Profile</string>
<string name="doprofileswitch">Do Profile Switch</string>
<string name="exitwizard">Skip setup wizard</string>
<string name="setupwizard_loop_description">Press the button below to enable AAPS to suggest/make basal changes</string>
<string name="key_setupwizard_processed" translatable="false">startupwizard_processed</string>
<string name="setupwizard_sensitivity_description">Sensitivity plugin is used for sensitivity detection and COB calculation. For more info visit:</string>
<string name="setupwizard_sensitivity_url">https://androidaps.readthedocs.io/en/latest/Configuration/Sensitivity-detection-and-COB.html</string>
<string name="setupwizard_aps_description">Select one from availables algorithms. They are sorted from oldest to newest. Newer algorithm is usually more powerful and more aggressive. Thus if you are new looper you may probably start with AMA and not with latest one. Do not forget to read the OpenAPS documentation and configure it before use.</string>
<string name="setupwizard_pump_waiting_for_riley_link_connection">Please configure your RileyLink below. After selecting a RileyLink, it will be possible to continue setup once the RileyLink status is \"Connected\". This might take a minute.\n</string>
<string name="setupwizard_pump_pump_not_initialized"><b>Note:</b> You can continue setup once the pump has been set up.\n</string>
<string name="startobjective">Start your first objective</string>
<string name="setupwizard_pump_riley_link_status">RileyLink status:</string>
<string name="readstatus">Read status</string>
<string name="data_choices">Data Choices</string>
<string name="fabric_upload">Fabric Upload</string>
<string name="allow_automated_crash_reporting">Allow automated crash reporting and feature usage data to be sent to the developers via the fabric.io service.</string>
<string name="summary_email_for_crash_report">This identification will attached to crash reports so we can contact you in urgent cases. It\'s optional.</string>
<string name="identification">Identification (email, FB or Discord nick etc)</string>
<string name="configbuilder_pump">Pump</string>
<string name="configbuilder_pump_description">Which pump would you like to use with AAPS?</string>
<string name="configbuilder_profile">Profile</string>
<string name="configbuilder_profile_description">Which profile should AAPS 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_sync">Synchronization</string>
<string name="configbuilder_sync_description">Data upload and synchronization plugins.</string>
<string name="configbuilder_constraints_description">Which constraints are applied?</string>
<string name="configbuilder_loop">Loop</string>
<string name="configbuilder_loop_description">Use this to activate AAPS\' loop integration.</string>
<string name="configbuilder_insulin_description">Which type of insulin are you using?</string>
<string name="configbuilder_bgsource">BG Source</string>
<string name="configbuilder_bgsource_description">Where should AAPS gain it\'s data from?</string>
<string name="apsmode_title">APS Mode</string>
<string name="setupwizard_preferred_aps_mode">Preferred APS mode</string>
<string name="configbuilder_sensitivity">Sensitivity detection</string>
<string name="configbuilder_sensitivity_description">Which sensitivity algorithm should be used?</string>
</resources>

View file

@ -1,7 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.preference.PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:validate="http://schemas.android.com/apk/res-auto">
xmlns:app="http://schemas.android.com/apk/res-auto">
<PreferenceCategory
android:key="@string/key_data_choices_settings"

View file

@ -51,8 +51,8 @@
<string name="teenage">Tiener</string>
<string name="adult">Volwassene</string>
<string name="resistantadult">Insulien weerstandige volwasse</string>
<string name="treatmentssafety_maxbolus_title">Maks toelaatbare Bolus [U]</string>
<string name="treatmentssafety_maxcarbs_title">Maks Toelaatbare karbs [g]</string>
<string name="max_bolus_title">Maks toelaatbare Bolus [U]</string>
<string name="max_carbs_title">Maks Toelaatbare karbs [g]</string>
<!-- Overview -->
<string name="snooze">Sluimer</string>
<string name="show_statuslights">Wys status vlae op tuisskerm</string>

View file

@ -52,15 +52,15 @@
<string name="maxvalueinpreferences">макс. стойност в настройките</string>
<string name="hardlimit">твърд лимит</string>
<string name="treatmentssafety_title">Настройки на сигурността</string>
<string name="patientage_summary">Моля, изберете тип на пациента за настройка на границите за безопастност</string>
<string name="patient_age_summary">Моля, изберете тип на пациента за настройка на границите за безопастност</string>
<string name="child">Дете</string>
<string name="teenage">Тийнейджър</string>
<string name="adult">Възрастен</string>
<string name="resistantadult">Възрастни с голяма инсулинова резистентност</string>
<string name="pregnant">Бременност</string>
<string name="treatmentssafety_maxbolus_title">Максимален инсулин при болус [единици]</string>
<string name="treatmentssafety_maxcarbs_title">Максимални въглехидрати [гр]</string>
<string name="patientage">Тип пациент</string>
<string name="max_bolus_title">Максимален инсулин при болус [единици]</string>
<string name="max_carbs_title">Максимални въглехидрати [гр]</string>
<string name="patient_type">Тип пациент</string>
<!-- Overview -->
<string name="snooze">Отложи</string>
<string name="show_statuslights">Покажи статус светлини на началния екран</string>

View file

@ -58,15 +58,15 @@
<string name="maxvalueinpreferences">valor màxim a la configuració</string>
<string name="hardlimit">límit estricte</string>
<string name="treatmentssafety_title">Seguretat tractaments</string>
<string name="patientage_summary">Si us plau, seleccioneu el tipus de pacient per configurar els límits de seguretat</string>
<string name="patient_age_summary">Si us plau, seleccioneu el tipus de pacient per configurar els límits de seguretat</string>
<string name="child">Nen</string>
<string name="teenage">Adolescent</string>
<string name="adult">Adult</string>
<string name="resistantadult">Adult resistent a l\'insulina</string>
<string name="pregnant">Embaraç</string>
<string name="treatmentssafety_maxbolus_title">Max bolus permès [U]</string>
<string name="treatmentssafety_maxcarbs_title">Max carbs permesos [g]</string>
<string name="patientage">Tipus de pacient</string>
<string name="max_bolus_title">Max bolus permès [U]</string>
<string name="max_carbs_title">Max carbs permesos [g]</string>
<string name="patient_type">Tipus de pacient</string>
<!-- Overview -->
<string name="snooze">Postposar</string>
<string name="show_statuslights">Mostrar indicadors d\'estat a la pantalla d\'inici</string>

View file

@ -240,15 +240,15 @@
<string name="maxvalueinpreferences">maximální hodnota v nastavení</string>
<string name="hardlimit">pevný limit</string>
<string name="treatmentssafety_title">Bezpečnost zadání ošetřeni</string>
<string name="patientage_summary">Prosím vyberte typ pacienta pro nastavení bezpečnostních limitů</string>
<string name="patient_age_summary">Prosím vyberte typ pacienta pro nastavení bezpečnostních limitů</string>
<string name="child">Dítě</string>
<string name="teenage">Dospívající</string>
<string name="adult">Dospělý</string>
<string name="resistantadult">Dospělý s nízkou citlivostí</string>
<string name="pregnant">Těhotenství</string>
<string name="treatmentssafety_maxbolus_title">Maximální povolený bolus [U]</string>
<string name="treatmentssafety_maxcarbs_title">Maximální počet sacharidů [g]</string>
<string name="patientage">Typ pacienta</string>
<string name="max_bolus_title">Maximální povolený bolus [U]</string>
<string name="max_carbs_title">Maximální počet sacharidů [g]</string>
<string name="patient_type">Typ pacienta</string>
<!-- Overview -->
<string name="snooze">Odložit</string>
<string name="copy_existing_values">Zkopírovat nastavení NS (existuje-li)?</string>

View file

@ -63,15 +63,15 @@
<string name="maxvalueinpreferences">max værdi i præferencer</string>
<string name="hardlimit">hård grænse</string>
<string name="treatmentssafety_title">Behandlings sikkerhed</string>
<string name="patientage_summary">Vælg venligst patienttype til opsætning af sikkerhedsgrænser</string>
<string name="patient_age_summary">Vælg venligst patienttype til opsætning af sikkerhedsgrænser</string>
<string name="child">Barn</string>
<string name="teenage">Teeanger</string>
<string name="adult">Voksen</string>
<string name="resistantadult">Insulinresistent voksen</string>
<string name="pregnant">Graviditet</string>
<string name="treatmentssafety_maxbolus_title">Maks tilladt bolus [IE]</string>
<string name="treatmentssafety_maxcarbs_title">Maks tilladte kulhydrater [g]</string>
<string name="patientage">Patienttype</string>
<string name="max_bolus_title">Maks tilladt bolus [IE]</string>
<string name="max_carbs_title">Maks tilladte kulhydrater [g]</string>
<string name="patient_type">Patienttype</string>
<!-- Overview -->
<string name="snooze">Udsæt</string>
<string name="show_statuslights">Vis statuslys på startskærm</string>

View file

@ -64,15 +64,15 @@
<string name="maxvalueinpreferences">Max. Wert in den Einstellungen</string>
<string name="hardlimit">festem Grenzwert</string>
<string name="treatmentssafety_title">Sicherheitseinstellungen der Behandlungen</string>
<string name="patientage_summary">Bitte wähle den Patiententyp, um die Sicherheits-Limits festzulegen</string>
<string name="patient_age_summary">Bitte wähle den Patiententyp, um die Sicherheits-Limits festzulegen</string>
<string name="child">Kind</string>
<string name="teenage">Teenager</string>
<string name="adult">Erwachsener</string>
<string name="resistantadult">Insulinresistenter Erwachsener</string>
<string name="pregnant">Schwangerschaft</string>
<string name="treatmentssafety_maxbolus_title">Max. erlaubter Bolus [IE]</string>
<string name="treatmentssafety_maxcarbs_title">Max. erlaubte Kohlenhydrate [g]</string>
<string name="patientage">Patiententyp</string>
<string name="max_bolus_title">Max. erlaubter Bolus [IE]</string>
<string name="max_carbs_title">Max. erlaubte Kohlenhydrate [g]</string>
<string name="patient_type">Patiententyp</string>
<!-- Overview -->
<string name="snooze">Schlummern</string>
<string name="show_statuslights">Statusanzeige auf Homescreen</string>

View file

@ -46,15 +46,15 @@
<string name="maxvalueinpreferences">μέγιστη τιμή στις Επιλογές</string>
<string name="hardlimit">σταθερό όριο</string>
<string name="treatmentssafety_title">Ασφάλεια Θεραπειών</string>
<string name="patientage_summary">Παρακαλώ επιλέξτε τύπο ασθενούς για να ορισθούν όρια ασφαλείας</string>
<string name="patient_age_summary">Παρακαλώ επιλέξτε τύπο ασθενούς για να ορισθούν όρια ασφαλείας</string>
<string name="child">Παιδί</string>
<string name="teenage">Έφηβος</string>
<string name="adult">Ενήλικας</string>
<string name="resistantadult">Αντίσταση ινσουλίνης ενηλίκων</string>
<string name="pregnant">Κύηση</string>
<string name="treatmentssafety_maxbolus_title">Μέγιστο Επιτρεπτό bolus[U]</string>
<string name="treatmentssafety_maxcarbs_title">Μέγιστο Επιτρεπτό υδατανθράκων [g]</string>
<string name="patientage">Τύπος ασθενή</string>
<string name="max_bolus_title">Μέγιστο Επιτρεπτό bolus[U]</string>
<string name="max_carbs_title">Μέγιστο Επιτρεπτό υδατανθράκων [g]</string>
<string name="patient_type">Τύπος ασθενή</string>
<!-- Overview -->
<string name="snooze">Αναβολή</string>
<string name="show_statuslights">Εμφάνιση του φωτισμού κατάστασης στην αρχική οθόνη</string>

View file

@ -240,15 +240,15 @@
<string name="maxvalueinpreferences">valor máximo en preferencias</string>
<string name="hardlimit">límite estricto</string>
<string name="treatmentssafety_title">Seguridad de tratamientos</string>
<string name="patientage_summary">Por favor, selecciona el tipo de paciente para establecer los límites de seguridad</string>
<string name="patient_age_summary">Por favor, selecciona el tipo de paciente para establecer los límites de seguridad</string>
<string name="child">Niño</string>
<string name="teenage">Adolescente</string>
<string name="adult">Adulto</string>
<string name="resistantadult">Adulto resistente a la insulina</string>
<string name="pregnant">Embarazada</string>
<string name="treatmentssafety_maxbolus_title">Máximo bolo permitido [U]</string>
<string name="treatmentssafety_maxcarbs_title">Máximos carbohidratos permitidos [g]</string>
<string name="patientage">Tipo de paciente</string>
<string name="max_bolus_title">Máximo bolo permitido [U]</string>
<string name="max_carbs_title">Máximos carbohidratos permitidos [g]</string>
<string name="patient_type">Tipo de paciente</string>
<!-- Overview -->
<string name="snooze">Silenciar</string>
<string name="copy_existing_values">¿Deseas copiar los ajustes desde Nightscout, si existen?</string>

View file

@ -240,15 +240,15 @@
<string name="maxvalueinpreferences">valeur Max dans les préférences</string>
<string name="hardlimit">limite fixée</string>
<string name="treatmentssafety_title">Traitements de sécurité</string>
<string name="patientage_summary">Veuillez sélectionner le type de patient pour définir les limites de sécurité</string>
<string name="patient_age_summary">Veuillez sélectionner le type de patient pour définir les limites de sécurité</string>
<string name="child"> Enfant</string>
<string name="teenage">Adolescent</string>
<string name="adult">Adulte</string>
<string name="resistantadult">Adulte résistant à l\'insuline</string>
<string name="pregnant">Grossesse</string>
<string name="treatmentssafety_maxbolus_title">Maximum Bolus autorisé [U]</string>
<string name="treatmentssafety_maxcarbs_title">Maximum de Glucides autorisé [g]</string>
<string name="patientage">Type de patient</string>
<string name="max_bolus_title">Maximum Bolus autorisé [U]</string>
<string name="max_carbs_title">Maximum de Glucides autorisé [g]</string>
<string name="patient_type">Type de patient</string>
<!-- Overview -->
<string name="snooze">Masquer</string>
<string name="copy_existing_values">Copier les paramètres NS (s\'ils existent)?</string>

View file

@ -29,7 +29,7 @@
<string name="child">Páiste</string>
<string name="teenage">Déagóirí</string>
<string name="adult">Duine fásta</string>
<string name="patientage">Othar cineál</string>
<string name="patient_type">Othar cineál</string>
<!-- Overview -->
<string name="apsmode_title">APS mód</string>
<string name="overview_cgm">CGM</string>

View file

@ -136,8 +136,8 @@
<string name="description_actions">Nekoliko izbora za brzi pristup uobičajenim funkcijama</string>
<!-- Safety -->
<string name="treatmentssafety_title">Sigurnosne postavke medikacije</string>
<string name="treatmentssafety_maxbolus_title">Max dozvoljen bolus [U]</string>
<string name="treatmentssafety_maxcarbs_title">Max dozvoljeni Uh [g]</string>
<string name="max_bolus_title">Max dozvoljen bolus [U]</string>
<string name="max_carbs_title">Max dozvoljeni Uh [g]</string>
<!-- Overview -->
<!-- NSClient -->
<string name="ns_upload_summary">Profili, bolusi, ugljikohidrati, privremeni bazali učitavaju se u NS</string>

View file

@ -26,7 +26,7 @@
<string name="adult">Felnőtt</string>
<string name="resistantadult">Inzulinrezisztens felnőtt</string>
<string name="pregnant">Várandós</string>
<string name="patientage">Betegkategória</string>
<string name="patient_type">Betegkategória</string>
<!-- Overview -->
<string name="snooze">Szundi</string>
<string name="overview_cgm">CGM</string>

View file

@ -152,15 +152,15 @@
<string name="maxvalueinpreferences">valore max nelle preferenze</string>
<string name="hardlimit">limite fisso</string>
<string name="treatmentssafety_title">Sicurezza trattamenti</string>
<string name="patientage_summary">Seleziona il tipo di paziente per configurare i limiti di sicurezza</string>
<string name="patient_age_summary">Seleziona il tipo di paziente per configurare i limiti di sicurezza</string>
<string name="child">Bambino</string>
<string name="teenage">Adolescente</string>
<string name="adult">Adulto</string>
<string name="resistantadult">Adulto insulino-resistente</string>
<string name="pregnant">Gravidanza</string>
<string name="treatmentssafety_maxbolus_title">Max bolo consentito [U]</string>
<string name="treatmentssafety_maxcarbs_title">Max CHO consentiti [g]</string>
<string name="patientage">Tipo paziente</string>
<string name="max_bolus_title">Max bolo consentito [U]</string>
<string name="max_carbs_title">Max CHO consentiti [g]</string>
<string name="patient_type">Tipo paziente</string>
<!-- Overview -->
<string name="snooze">Posticipa</string>
<string name="copy_existing_values">Copiare impostazioni NS (se esiste)?</string>

View file

@ -55,15 +55,15 @@
<string name="maxvalueinpreferences">ערך מקסימלי בהעדפות</string>
<string name="hardlimit">מגבלה קשיחה</string>
<string name="treatmentssafety_title">בטיחות טיפולים</string>
<string name="patientage_summary">נא לבחור את גיל המטופל\\ת להתאמת מגבלות בטיחות</string>
<string name="patient_age_summary">נא לבחור את גיל המטופל\\ת להתאמת מגבלות בטיחות</string>
<string name="child">ילד\\ה</string>
<string name="teenage">מתבגר\\ת</string>
<string name="adult">מבוגר\\ת</string>
<string name="resistantadult">מבוגר\\ת עם תנגודת אינסולין גבוהה</string>
<string name="pregnant">הריון</string>
<string name="treatmentssafety_maxbolus_title">בולוס מקסימלי מותר [U]</string>
<string name="treatmentssafety_maxcarbs_title">מקסימום פחמימות מותר [g]</string>
<string name="patientage">סוג המטופל\\ת</string>
<string name="max_bolus_title">בולוס מקסימלי מותר [U]</string>
<string name="max_carbs_title">מקסימום פחמימות מותר [g]</string>
<string name="patient_type">סוג המטופל\\ת</string>
<!-- Overview -->
<string name="snooze">נודניק</string>
<string name="show_statuslights">הצגת אורות חיווי במסך הבית</string>

View file

@ -59,15 +59,15 @@
<string name="maxvalueinpreferences">설정에서의 최대값</string>
<string name="hardlimit">하드한계</string>
<string name="treatmentssafety_title">관리 안전설정</string>
<string name="patientage_summary">안전 제한 설정을 위해 환자 유형을 선택하십시오.</string>
<string name="patient_age_summary">안전 제한 설정을 위해 환자 유형을 선택하십시오.</string>
<string name="child">어린이</string>
<string name="teenage">청소년</string>
<string name="adult">성인</string>
<string name="resistantadult">인슐린 저항성 높은 성인</string>
<string name="pregnant">임신 중</string>
<string name="treatmentssafety_maxbolus_title">최대 허용 Bolus [U]</string>
<string name="treatmentssafety_maxcarbs_title">최대 허용 탄수화물 [g]</string>
<string name="patientage">환자 유형</string>
<string name="max_bolus_title">최대 허용 Bolus [U]</string>
<string name="max_carbs_title">최대 허용 탄수화물 [g]</string>
<string name="patient_type">환자 유형</string>
<!-- Overview -->
<string name="snooze">스누즈</string>
<string name="show_statuslights">홈화면에 상태 표시등 보여주기</string>

View file

@ -75,15 +75,15 @@
<string name="maxvalueinpreferences">Maksimali reikšmė nustatymuose</string>
<string name="hardlimit">Nekeičiama riba</string>
<string name="treatmentssafety_title">Terapijos saugumas</string>
<string name="patientage_summary">Pasirinkite paciento tipą saugumo riboms nustatyti</string>
<string name="patient_age_summary">Pasirinkite paciento tipą saugumo riboms nustatyti</string>
<string name="child">Vaikas</string>
<string name="teenage">Paauglys</string>
<string name="adult">Suaugęs</string>
<string name="resistantadult">Insulinui rezistentiškas suaugęs</string>
<string name="pregnant">Nėštumas</string>
<string name="treatmentssafety_maxbolus_title">Maksimalus leistinas bolusas [U]</string>
<string name="treatmentssafety_maxcarbs_title">Maks. leistini angliavandeniai [g]</string>
<string name="patientage">Paciento tipas</string>
<string name="max_bolus_title">Maksimalus leistinas bolusas [U]</string>
<string name="max_carbs_title">Maks. leistini angliavandeniai [g]</string>
<string name="patient_type">Paciento tipas</string>
<!-- Overview -->
<string name="snooze">Snausti</string>
<string name="show_statuslights">Pradžios ekrane rodyti spalvotus indikatorius</string>

View file

@ -124,15 +124,15 @@
<string name="maxvalueinpreferences">Maximum waarde in instellingen</string>
<string name="hardlimit">max limiet (SC)</string>
<string name="treatmentssafety_title">Behandelingen veiligheid</string>
<string name="patientage_summary">Selecteer het type patiënt om de veiligheidslimieten in te stellen</string>
<string name="patient_age_summary">Selecteer het type patiënt om de veiligheidslimieten in te stellen</string>
<string name="child">Kind</string>
<string name="teenage">Tiener</string>
<string name="adult">Volwassene</string>
<string name="resistantadult">insuline resistente volwassene</string>
<string name="pregnant">Zwangerschap</string>
<string name="treatmentssafety_maxbolus_title">Max toegestane bolus [E]</string>
<string name="treatmentssafety_maxcarbs_title">Max toegestane koolhydraten [g]</string>
<string name="patientage">Type patiënt</string>
<string name="max_bolus_title">Max toegestane bolus [E]</string>
<string name="max_carbs_title">Max toegestane koolhydraten [g]</string>
<string name="patient_type">Type patiënt</string>
<!-- Overview -->
<string name="copy_existing_values">NS instellingen kopiëren (indien aanwezig)?</string>
<string name="show_statuslights">Toon statusindicatoren op startscherm</string>

View file

@ -239,15 +239,15 @@
<string name="maxvalueinpreferences">maks verdi i innstillingene</string>
<string name="hardlimit">hard begrensning</string>
<string name="treatmentssafety_title">Sikkerhet ved behandlinger</string>
<string name="patientage_summary">Velg pasienttype for oppsett av sikkerhetsgrenser</string>
<string name="patient_age_summary">Velg pasienttype for oppsett av sikkerhetsgrenser</string>
<string name="child">Barn</string>
<string name="teenage">Tenåring</string>
<string name="adult">Voksen</string>
<string name="resistantadult">Insulinresistent voksen</string>
<string name="pregnant">Graviditet</string>
<string name="treatmentssafety_maxbolus_title">Maks tillat bolus [U]</string>
<string name="treatmentssafety_maxcarbs_title">Maks tillat karbo [g]</string>
<string name="patientage">Pasienttype</string>
<string name="max_bolus_title">Maks tillat bolus [U]</string>
<string name="max_carbs_title">Maks tillat karbo [g]</string>
<string name="patient_type">Pasienttype</string>
<!-- Overview -->
<string name="snooze">Slumre</string>
<string name="copy_existing_values">Kopiere NS innstillinger (hvis de eksisterer)?</string>

View file

@ -57,15 +57,15 @@
<string name="maxvalueinpreferences">maks. wartość w ustawieniach</string>
<string name="hardlimit">twarde ograniczenie</string>
<string name="treatmentssafety_title">Bezpieczeństwo terapii</string>
<string name="patientage_summary">Wybierz typ pacjenta, aby ustawić limity bezpieczeństwa</string>
<string name="patient_age_summary">Wybierz typ pacjenta, aby ustawić limity bezpieczeństwa</string>
<string name="child">Dziecko</string>
<string name="teenage">Nastolatek</string>
<string name="adult">Osoba dorosła</string>
<string name="resistantadult">Osoba dorosła insulinooporna</string>
<string name="pregnant">Ciąża</string>
<string name="treatmentssafety_maxbolus_title">Maks. dopuszczalny bolus [U]</string>
<string name="treatmentssafety_maxcarbs_title">Maks. dopuszczalne węglowodany [g]</string>
<string name="patientage">Typ pacjenta</string>
<string name="max_bolus_title">Maks. dopuszczalny bolus [U]</string>
<string name="max_carbs_title">Maks. dopuszczalne węglowodany [g]</string>
<string name="patient_type">Typ pacjenta</string>
<!-- Overview -->
<string name="snooze">Wycisz</string>
<string name="show_statuslights">Pokaż diody stanu na ekranie głównym</string>

View file

@ -59,15 +59,15 @@
<string name="maxvalueinpreferences">valor máx nas preferências</string>
<string name="hardlimit">limite rígido</string>
<string name="treatmentssafety_title">Segurança do Tratamento</string>
<string name="patientage_summary">Selecione o tipo de paciente para configurar os limites de segurança</string>
<string name="patient_age_summary">Selecione o tipo de paciente para configurar os limites de segurança</string>
<string name="child">Criança</string>
<string name="teenage">Adolescente</string>
<string name="adult">Adulto</string>
<string name="resistantadult">Adulto resistente à insulina</string>
<string name="pregnant">Grávida</string>
<string name="treatmentssafety_maxbolus_title">Máximo bolus permitido [U]</string>
<string name="treatmentssafety_maxcarbs_title">Máximo de carbs permitidos [g]</string>
<string name="patientage">Tipo de paciente</string>
<string name="max_bolus_title">Máximo bolus permitido [U]</string>
<string name="max_carbs_title">Máximo de carbs permitidos [g]</string>
<string name="patient_type">Tipo de paciente</string>
<!-- Overview -->
<string name="snooze">Silenciar</string>
<string name="show_statuslights">Mostrar luzes de estado no ecrã principal</string>

View file

@ -55,15 +55,15 @@
<string name="maxvalueinpreferences">valor máx nas preferências</string>
<string name="hardlimit">limite rígido</string>
<string name="treatmentssafety_title">Segurança de Tratamentos</string>
<string name="patientage_summary">Por favor seleccione o tipo de paciente para configurar limites de segurança</string>
<string name="patient_age_summary">Por favor seleccione o tipo de paciente para configurar limites de segurança</string>
<string name="child">Criança</string>
<string name="teenage">Adolescente</string>
<string name="adult">Adulto</string>
<string name="resistantadult">Adulto resistente insulina</string>
<string name="pregnant">Gravidez</string>
<string name="treatmentssafety_maxbolus_title">Máx bólus permitido [U]</string>
<string name="treatmentssafety_maxcarbs_title">Máx hidratos permitidos [g]</string>
<string name="patientage">Tipo de Paciente</string>
<string name="max_bolus_title">Máx bólus permitido [U]</string>
<string name="max_carbs_title">Máx hidratos permitidos [g]</string>
<string name="patient_type">Tipo de Paciente</string>
<!-- Overview -->
<string name="snooze">Silenciar</string>
<string name="show_statuslights">Mostrar luzes de estado no ecrã principal</string>

View file

@ -54,15 +54,15 @@
<string name="maxvalueinpreferences">valoare maximă în preferințe</string>
<string name="hardlimit">limită fizică</string>
<string name="treatmentssafety_title">Setări siguranță tratament</string>
<string name="patientage_summary">Te rog confirmă tipul de pacient pentru a stabilii limitele de siguranță</string>
<string name="patient_age_summary">Te rog confirmă tipul de pacient pentru a stabilii limitele de siguranță</string>
<string name="child">Copil</string>
<string name="teenage">Adolescent</string>
<string name="adult">Adult</string>
<string name="resistantadult">Adult rezistent la insulină</string>
<string name="pregnant">Sarcină</string>
<string name="treatmentssafety_maxbolus_title">Bolus maxim admis [U]</string>
<string name="treatmentssafety_maxcarbs_title">Carbohidrați admiși maxim [g]</string>
<string name="patientage">Tip de pacient</string>
<string name="max_bolus_title">Bolus maxim admis [U]</string>
<string name="max_carbs_title">Carbohidrați admiși maxim [g]</string>
<string name="patient_type">Tip de pacient</string>
<!-- Overview -->
<string name="snooze">Amână</string>
<string name="show_statuslights">Afișați indicatorii luminoși ai pompei pe ecranul de start</string>

View file

@ -79,15 +79,15 @@
<string name="maxvalueinpreferences">максимальное значение в настройках</string>
<string name="hardlimit">жесткий предел</string>
<string name="treatmentssafety_title">Безопасность терапии</string>
<string name="patientage_summary">Выберите возраст пациента для установки ограничителей безопасности</string>
<string name="patient_age_summary">Выберите возраст пациента для установки ограничителей безопасности</string>
<string name="child">Ребенок</string>
<string name="teenage">Подросток</string>
<string name="adult">Взрослый</string>
<string name="resistantadult">Инсулинорезистентный взрослый</string>
<string name="pregnant">Беременность</string>
<string name="treatmentssafety_maxbolus_title">Макс разрешенный болюс [U]</string>
<string name="treatmentssafety_maxcarbs_title">Макс разрешенные углеводы [g]</string>
<string name="patientage">Тип пациента</string>
<string name="max_bolus_title">Макс разрешенный болюс [U]</string>
<string name="max_carbs_title">Макс разрешенные углеводы [g]</string>
<string name="patient_type">Тип пациента</string>
<!-- Overview -->
<string name="snooze">Отложить</string>
<string name="show_statuslights">Показать индикаторы состояния на главном экране</string>

View file

@ -116,15 +116,15 @@
<string name="maxvalueinpreferences">maximálna hodnota v nastaveniach</string>
<string name="hardlimit">pevný limit</string>
<string name="treatmentssafety_title">Bezpečnosť zadania ošetrenia</string>
<string name="patientage_summary">Prosím vyberte typ pacienta pre nastavenie bezpečnostných limitov</string>
<string name="patient_age_summary">Prosím vyberte typ pacienta pre nastavenie bezpečnostných limitov</string>
<string name="child">Dieťa</string>
<string name="teenage">Dospievajúci</string>
<string name="adult">Dospelý</string>
<string name="resistantadult">Dospelý s nízkou citlivosťou</string>
<string name="pregnant">Tehotenstvo</string>
<string name="treatmentssafety_maxbolus_title">Maximálny povolený bolus [JI]</string>
<string name="treatmentssafety_maxcarbs_title">Max. povolené množstvo sacharidov [g]</string>
<string name="patientage">Typ pacienta</string>
<string name="max_bolus_title">Maximálny povolený bolus [JI]</string>
<string name="max_carbs_title">Max. povolené množstvo sacharidov [g]</string>
<string name="patient_type">Typ pacienta</string>
<!-- Overview -->
<string name="copy_existing_values">Skopírovať nastavenia NS (ak existujú)?</string>
<string name="show_statuslights">Zobraziť indikátory stavu na domovskej obrazovke</string>

View file

@ -24,8 +24,8 @@
<string name="description_actions">Neke tipke za brzi pristup uobičajenim funkcijama</string>
<!-- Safety -->
<string name="treatmentssafety_title">Sigurnost tretmana</string>
<string name="treatmentssafety_maxbolus_title">Maks. dozvoljen bolus [U]</string>
<string name="treatmentssafety_maxcarbs_title">Maks. dozvoljeni ugljeni hidrati [g]</string>
<string name="max_bolus_title">Maks. dozvoljen bolus [U]</string>
<string name="max_carbs_title">Maks. dozvoljeni ugljeni hidrati [g]</string>
<!-- Overview -->
<string name="apsmode_title">APS režim</string>
<string name="setbasalquestion">Prihvatite novi privremeni bazal:</string>

View file

@ -62,15 +62,15 @@
<string name="maxvalueinpreferences">maxvärde i Inställningar</string>
<string name="hardlimit">hård begränsning</string>
<string name="treatmentssafety_title">Säkerhetsbegränsningar</string>
<string name="patientage_summary">Välj en patienttyp för att ställa in säkerhetsgränser</string>
<string name="patient_age_summary">Välj en patienttyp för att ställa in säkerhetsgränser</string>
<string name="child">Barn</string>
<string name="teenage">Tonåring</string>
<string name="adult">Vuxen</string>
<string name="resistantadult">Insulinresistent vuxen</string>
<string name="pregnant">Gravid</string>
<string name="treatmentssafety_maxbolus_title">Max tillåten bolus [U]</string>
<string name="treatmentssafety_maxcarbs_title">Max tillåtna KH [g]</string>
<string name="patientage">Patienttyp</string>
<string name="max_bolus_title">Max tillåten bolus [U]</string>
<string name="max_carbs_title">Max tillåtna KH [g]</string>
<string name="patient_type">Patienttyp</string>
<!-- Overview -->
<string name="snooze">Snooze</string>
<string name="show_statuslights">Visa \"statuslampor\" på hemskärmen</string>

View file

@ -72,15 +72,15 @@
<string name="maxvalueinpreferences">tercihlerde maksimum değer</string>
<string name="hardlimit">sert sınır</string>
<string name="treatmentssafety_title">Tedavi güvenliği</string>
<string name="patientage_summary">Güvenlik limitlerini ayarlamak için lütfen hasta tipini seçin</string>
<string name="patient_age_summary">Güvenlik limitlerini ayarlamak için lütfen hasta tipini seçin</string>
<string name="child">Çocuk</string>
<string name="teenage">Ergen</string>
<string name="adult">Yetişkin</string>
<string name="resistantadult">Yetişkin İnsülin direnci</string>
<string name="pregnant">Hamile</string>
<string name="treatmentssafety_maxbolus_title">Maks izin verilen bolus [U]</string>
<string name="treatmentssafety_maxcarbs_title">Maks izin verilen karbonhidrat [g]</string>
<string name="patientage">Hasta tipi</string>
<string name="max_bolus_title">Maks izin verilen bolus [U]</string>
<string name="max_carbs_title">Maks izin verilen karbonhidrat [g]</string>
<string name="patient_type">Hasta tipi</string>
<!-- Overview -->
<string name="snooze">Ertele</string>
<string name="show_statuslights">Ana ekranda durum ışıklarını göster</string>

View file

@ -54,15 +54,15 @@
<string name="maxvalueinpreferences">在参数选项里的最大值</string>
<string name="hardlimit">硬限制</string>
<string name="treatmentssafety_title">治疗安全</string>
<string name="patientage_summary">请选择患者类型,以设置安全限制</string>
<string name="patient_age_summary">请选择患者类型,以设置安全限制</string>
<string name="child">儿童</string>
<string name="teenage">青少年</string>
<string name="adult">成人</string>
<string name="resistantadult">胰岛素抵抗成人</string>
<string name="pregnant">孕妇</string>
<string name="treatmentssafety_maxbolus_title">允许的最大大剂量值[U]</string>
<string name="treatmentssafety_maxcarbs_title">最大允许碳水化合物 [g]</string>
<string name="patientage">患者类型</string>
<string name="max_bolus_title">允许的最大大剂量值[U]</string>
<string name="max_carbs_title">最大允许碳水化合物 [g]</string>
<string name="patient_type">患者类型</string>
<!-- Overview -->
<string name="snooze">稍后再响</string>
<string name="show_statuslights">在主屏幕上显示状态指示灯</string>

View file

@ -44,30 +44,4 @@
<item>YpsoPump</item>
</string-array>
<string-array name="ageArray">
<item>@string/child</item>
<item>@string/teenage</item>
<item>@string/adult</item>
<item>@string/resistantadult</item>
<item>@string/pregnant</item>
</string-array>
<string-array name="ageValues" translatable="false">
<item>@string/key_child</item>
<item>@string/key_teenage</item>
<item>@string/key_adult</item>
<item>@string/key_resistantadult</item>
<item>@string/key_pregnant</item>
</string-array>
<string-array name="aps_modeArray">
<item>@string/closedloop</item>
<item>@string/openloop</item>
<item>@string/lowglucosesuspend</item>
</string-array>
<string-array name="aps_modeValues" translatable="false">
<item>closed</item>
<item>open</item>
<item>lgs</item>
</string-array>
</resources>

View file

@ -4,7 +4,6 @@
<!-- SMS Communicator & OTP Authenticator -->
<string name="key_smscommunicator_otp_password" translatable="false">smscommunicator_otp_password</string>
<string name="key_smscommunicator_otp_secret" translatable="false">smscommunicator_otp_secret</string>
<string name="key_patient_name" translatable="false">patient_name</string>
<string name="key_smscommunicator_remote_bolus_min_distance" translatable="false">smscommunicator_remotebolusmindistance</string>
<string name="key_smscommunicator_allowednumbers" translatable="false">smscommunicator_allowednumbers</string>
<string name="key_smscommunicator_remote_commands_allowed" translatable="false">smscommunicator_remotecommandsallowed</string>
@ -272,8 +271,6 @@
<string name="patch_pump">Patch pump</string>
<!-- Safety -->
<string name="key_treatmentssafety_maxbolus" translatable="false">treatmentssafety_maxbolus</string>
<string name="limitingextendedbolus">Limiting extended bolus to %1$.1f U because of %2$s</string>
<string name="limitingcarbs">Limiting carbs to %1$d g because of %2$s</string>
<string name="limitingiob">Limiting IOB to %1$.1f U because of %2$s</string>
@ -289,15 +286,6 @@
<string name="maxvalueinpreferences">max value in preferences</string>
<string name="hardlimit">hard limit</string>
<string name="treatmentssafety_title">Treatments safety</string>
<string name="patientage_summary">Please select patient type to setup safety limits</string>
<string name="child">Child</string>
<string name="teenage">Teenage</string>
<string name="adult">Adult</string>
<string name="resistantadult">Insulin resistant adult</string>
<string name="pregnant">Pregnancy</string>
<string name="treatmentssafety_maxbolus_title">Max allowed bolus [U]</string>
<string name="treatmentssafety_maxcarbs_title">Max allowed carbs [g]</string>
<string name="patientage">Patient type</string>
<!-- Overview -->
<string name="key_statuslights_copy_ns" translatable="false">statuslights_copy_ns</string>

View file

@ -13,14 +13,14 @@
android:entries="@array/ageArray"
android:entryValues="@array/ageValues"
android:key="@string/key_age"
android:summary="@string/patientage_summary"
android:title="@string/patientage" />
android:summary="@string/patient_age_summary"
android:title="@string/patient_type" />
<info.nightscout.androidaps.utils.textValidator.ValidatingEditTextPreference
android:defaultValue="3"
android:inputType="numberDecimal"
android:key="@string/key_treatmentssafety_maxbolus"
android:title="@string/treatmentssafety_maxbolus_title"
android:title="@string/max_bolus_title"
validate:floatmaxNumber="25.0"
validate:floatminNumber="0.1"
validate:testType="floatNumericRange" />
@ -29,7 +29,7 @@
android:defaultValue="48"
android:inputType="number"
android:key="@string/key_treatmentssafety_maxcarbs"
android:title="@string/treatmentssafety_maxcarbs_title"
android:title="@string/max_carbs_title"
validate:floatmaxNumber="200"
validate:floatminNumber="1"
validate:testType="numericRange" />

View file

@ -18,6 +18,7 @@ include ':plugins:aps'
include ':plugins:automation'
include ':plugins:main'
include ':plugins:openhumans'
include ':plugins:configuration'
include ':pump:combo'
include ':pump:dana'
include ':pump:danar'