Merge remote-tracking branch 'Nightscout/dev' into Autotune/TuneWeekDaysClean

This commit is contained in:
Philoul 2022-06-08 23:04:28 +02:00
commit 8f6765ee31
23 changed files with 273 additions and 35 deletions

View file

@ -111,7 +111,7 @@ android {
defaultConfig { defaultConfig {
multiDexEnabled true multiDexEnabled true
versionCode 1500 versionCode 1500
version "3.0.0.2-dev-l" version "3.0.0.2-dev-m"
buildConfigField "String", "VERSION", '"' + version + '"' buildConfigField "String", "VERSION", '"' + version + '"'
buildConfigField "String", "BUILDVERSION", '"' + generateGitBuild() + '-' + generateDate() + '"' buildConfigField "String", "BUILDVERSION", '"' + generateGitBuild() + '-' + generateDate() + '"'
buildConfigField "String", "REMOTE", '"' + generateGitRemote() + '"' buildConfigField "String", "REMOTE", '"' + generateGitRemote() + '"'

View file

@ -249,7 +249,7 @@ class MainApp : DaggerApplication() {
override fun onTerminate() { override fun onTerminate() {
aapsLogger.debug(LTag.CORE, "onTerminate") aapsLogger.debug(LTag.CORE, "onTerminate")
unregisterActivityLifecycleCallbacks(activityMonitor) unregisterActivityLifecycleCallbacks(activityMonitor)
alarmSoundServiceHelper.stopService(this) alarmSoundServiceHelper.stopService(this, "onTerminate")
super.onTerminate() super.onTerminate()
} }
} }

View file

@ -60,7 +60,7 @@ class WizardInfoDialog : DaggerDialogFragment() {
override fun onSaveInstanceState(outState: Bundle) { override fun onSaveInstanceState(outState: Bundle) {
super.onSaveInstanceState(outState) super.onSaveInstanceState(outState)
outState.putString("data", data.toJson(true, dateUtil).toString()) outState.putString("data", data.toJson(true, dateUtil, profileFunction).toString())
} }
override fun onViewCreated(view: View, savedInstanceState: Bundle?) { override fun onViewCreated(view: View, savedInstanceState: Bundle?) {

View file

@ -286,14 +286,14 @@ class DataSyncSelectorImplementation @Inject constructor(
bolusCalculatorResult.first.interfaceIDs.nightscoutId == null -> bolusCalculatorResult.first.interfaceIDs.nightscoutId == null ->
nsClientPlugin.nsClientService?.dbAdd( nsClientPlugin.nsClientService?.dbAdd(
"treatments", "treatments",
bolusCalculatorResult.first.toJson(true, dateUtil), bolusCalculatorResult.first.toJson(true, dateUtil, profileFunction),
DataSyncSelector.PairBolusCalculatorResult(bolusCalculatorResult.first, bolusCalculatorResult.second.id), DataSyncSelector.PairBolusCalculatorResult(bolusCalculatorResult.first, bolusCalculatorResult.second.id),
"$startId/$lastDbId" "$startId/$lastDbId"
) )
// with nsId = update // with nsId = update
bolusCalculatorResult.first.interfaceIDs.nightscoutId != null -> bolusCalculatorResult.first.interfaceIDs.nightscoutId != null ->
nsClientPlugin.nsClientService?.dbUpdate( nsClientPlugin.nsClientService?.dbUpdate(
"treatments", bolusCalculatorResult.first.interfaceIDs.nightscoutId, bolusCalculatorResult.first.toJson(false, dateUtil), "treatments", bolusCalculatorResult.first.interfaceIDs.nightscoutId, bolusCalculatorResult.first.toJson(false, dateUtil, profileFunction),
DataSyncSelector.PairBolusCalculatorResult(bolusCalculatorResult.first, bolusCalculatorResult.second.id), "$startId/$lastDbId" DataSyncSelector.PairBolusCalculatorResult(bolusCalculatorResult.first, bolusCalculatorResult.second.id), "$startId/$lastDbId"
) )
} }

View file

@ -73,6 +73,7 @@ class GraphData(
} }
fun addBasals() { fun addBasals() {
maxY = max(maxY, defaultValueHelper.determineHighLine())
val scale = defaultValueHelper.determineLowLine() / maxY / 1.2 val scale = defaultValueHelper.determineLowLine() / maxY / 1.2
addSeries(overviewData.baseBasalGraphSeries) addSeries(overviewData.baseBasalGraphSeries)
addSeries(overviewData.tempBasalGraphSeries) addSeries(overviewData.tempBasalGraphSeries)

View file

@ -17,12 +17,12 @@ import info.nightscout.androidaps.databinding.OverviewNotificationItemBinding
import info.nightscout.androidaps.interfaces.ActivePlugin import info.nightscout.androidaps.interfaces.ActivePlugin
import info.nightscout.androidaps.interfaces.IconsProvider import info.nightscout.androidaps.interfaces.IconsProvider
import info.nightscout.androidaps.interfaces.NotificationHolder import info.nightscout.androidaps.interfaces.NotificationHolder
import info.nightscout.shared.logging.AAPSLogger import info.nightscout.androidaps.interfaces.ResourceHelper
import info.nightscout.shared.logging.LTag
import info.nightscout.androidaps.plugins.general.overview.events.EventUpdateOverviewNotification import info.nightscout.androidaps.plugins.general.overview.events.EventUpdateOverviewNotification
import info.nightscout.androidaps.services.AlarmSoundServiceHelper import info.nightscout.androidaps.services.AlarmSoundServiceHelper
import info.nightscout.androidaps.utils.DateUtil import info.nightscout.androidaps.utils.DateUtil
import info.nightscout.androidaps.interfaces.ResourceHelper import info.nightscout.shared.logging.AAPSLogger
import info.nightscout.shared.logging.LTag
import info.nightscout.shared.sharedPreferences.SP import info.nightscout.shared.sharedPreferences.SP
import java.util.* import java.util.*
import javax.inject.Inject import javax.inject.Inject
@ -68,7 +68,7 @@ class NotificationStore @Inject constructor(
store.add(n) store.add(n)
if (sp.getBoolean(R.string.key_raise_notifications_as_android_notifications, true) && n !is NotificationWithAction) if (sp.getBoolean(R.string.key_raise_notifications_as_android_notifications, true) && n !is NotificationWithAction)
raiseSystemNotification(n) raiseSystemNotification(n)
if (n.soundId != null && n.soundId != 0) alarmSoundServiceHelper.startAlarm(context, n.soundId!!) if (n.soundId != null && n.soundId != 0) alarmSoundServiceHelper.startAlarm(context, n.soundId!!, n.text)
Collections.sort(store, NotificationComparator()) Collections.sort(store, NotificationComparator())
return true return true
} }
@ -77,7 +77,7 @@ class NotificationStore @Inject constructor(
fun remove(id: Int): Boolean { fun remove(id: Int): Boolean {
for (i in store.indices) { for (i in store.indices) {
if (store[i].id == id) { if (store[i].id == id) {
if (store[i].soundId != null) alarmSoundServiceHelper.stopService(context) if (store[i].soundId != null) alarmSoundServiceHelper.stopService(context, "Removed " + store[i].text)
aapsLogger.debug(LTag.NOTIFICATION, "Notification removed: " + store[i].text) aapsLogger.debug(LTag.NOTIFICATION, "Notification removed: " + store[i].text)
store.removeAt(i) store.removeAt(i)
return true return true
@ -92,7 +92,7 @@ class NotificationStore @Inject constructor(
while (i < store.size) { while (i < store.size) {
val n = store[i] val n = store[i]
if (n.validTo != 0L && n.validTo < System.currentTimeMillis()) { if (n.validTo != 0L && n.validTo < System.currentTimeMillis()) {
if (store[i].soundId != null) alarmSoundServiceHelper.stopService(context) if (store[i].soundId != null) alarmSoundServiceHelper.stopService(context, "Expired " + store[i].text)
aapsLogger.debug(LTag.NOTIFICATION, "Notification expired: " + store[i].text) aapsLogger.debug(LTag.NOTIFICATION, "Notification expired: " + store[i].text)
store.removeAt(i) store.removeAt(i)
i-- i--

View file

@ -10,13 +10,10 @@ import info.nightscout.androidaps.R
import info.nightscout.androidaps.database.AppRepository import info.nightscout.androidaps.database.AppRepository
import info.nightscout.androidaps.database.entities.GlucoseValue import info.nightscout.androidaps.database.entities.GlucoseValue
import info.nightscout.androidaps.database.transactions.CgmSourceTransaction import info.nightscout.androidaps.database.transactions.CgmSourceTransaction
import info.nightscout.androidaps.interfaces.BgSource import info.nightscout.androidaps.interfaces.*
import info.nightscout.androidaps.interfaces.PluginBase
import info.nightscout.androidaps.interfaces.PluginDescription
import info.nightscout.androidaps.interfaces.PluginType
import info.nightscout.androidaps.receivers.DataWorker import info.nightscout.androidaps.receivers.DataWorker
import info.nightscout.androidaps.receivers.Intents import info.nightscout.androidaps.receivers.Intents
import info.nightscout.androidaps.interfaces.ResourceHelper import info.nightscout.androidaps.utils.buildHelper.BuildHelper
import info.nightscout.shared.logging.AAPSLogger import info.nightscout.shared.logging.AAPSLogger
import info.nightscout.shared.logging.LTag import info.nightscout.shared.logging.LTag
import javax.inject.Inject import javax.inject.Inject
@ -26,7 +23,9 @@ import javax.inject.Singleton
class AidexPlugin @Inject constructor( class AidexPlugin @Inject constructor(
injector: HasAndroidInjector, injector: HasAndroidInjector,
rh: ResourceHelper, rh: ResourceHelper,
aapsLogger: AAPSLogger aapsLogger: AAPSLogger,
private val buildHelper: BuildHelper,
private val config: Config
) : PluginBase( ) : PluginBase(
PluginDescription() PluginDescription()
.mainType(PluginType.BGSOURCE) .mainType(PluginType.BGSOURCE)
@ -49,6 +48,11 @@ class AidexPlugin @Inject constructor(
return advancedFiltering return advancedFiltering
} }
// Allow only for pumpcontrol or dev & engineering_mode
override fun specialEnableCondition(): Boolean {
return config.APS.not() || buildHelper.isDev() && buildHelper.isEngineeringMode()
}
// cannot be inner class because of needed injection // cannot be inner class because of needed injection
class AidexWorker( class AidexWorker(
context: Context, context: Context,

View file

@ -605,7 +605,11 @@ L\'ENSEMBLE DES RISQUES LIÉS À LA QUALITÉ ET À LA PERFORMANCE DU PROGRAMME S
<string name="secondcarbsincrement">Deuxième incrément de glucides</string> <string name="secondcarbsincrement">Deuxième incrément de glucides</string>
<string name="thirdcarbsincrement">Troisième incrément de glucides</string> <string name="thirdcarbsincrement">Troisième incrément de glucides</string>
<string name="cgm">MGC</string> <string name="cgm">MGC</string>
<string name="ns_cellular">Utiliser la connexion mobile</string>
<string name="ns_wifi">Utilisez la connexion Wi-Fi</string>
<string name="ns_wifi_ssids">Wi-fi SSID</string> <string name="ns_wifi_ssids">Wi-fi SSID</string>
<string name="ns_charging">Pendant la charge</string>
<string name="ns_battery">Sur batterie</string>
<string name="connectionsettings_title">Paramètres de connexion</string> <string name="connectionsettings_title">Paramètres de connexion</string>
<string name="ns_wifi_allowedssids">SSIDs autorisés (séparés par point-virgule)</string> <string name="ns_wifi_allowedssids">SSIDs autorisés (séparés par point-virgule)</string>
<string name="ns_allowroaming">Autoriser connexion données itinérance</string> <string name="ns_allowroaming">Autoriser connexion données itinérance</string>
@ -684,7 +688,7 @@ L\'ENSEMBLE DES RISQUES LIÉS À LA QUALITÉ ET À LA PERFORMANCE DU PROGRAMME S
<string name="miscellaneous">Divers</string> <string name="miscellaneous">Divers</string>
<string name="nav_logsettings">Paramètres journal</string> <string name="nav_logsettings">Paramètres journal</string>
<string name="resettodefaults">Réinitialiser les valeurs par défaut</string> <string name="resettodefaults">Réinitialiser les valeurs par défaut</string>
<string name="nsmalfunction">Dysfonctionnement NSClient. Faites une réinitialisation de NS et de NSClient.</string> <string name="nsmalfunction">Dysfonctionnement NSClient. Redémarrez NS et NSClient.</string>
<string name="time_offset">Décalage horaire</string> <string name="time_offset">Décalage horaire</string>
<string name="bolus_reminder">Rappel du bolus plus tard</string> <string name="bolus_reminder">Rappel du bolus plus tard</string>
<string name="setupwizard_preferred_aps_mode">Mode APS préféré</string> <string name="setupwizard_preferred_aps_mode">Mode APS préféré</string>
@ -1035,4 +1039,6 @@ L\'ENSEMBLE DES RISQUES LIÉS À LA QUALITÉ ET À LA PERFORMANCE DU PROGRAMME S
<string name="aidex">GlucoRx Aidex</string> <string name="aidex">GlucoRx Aidex</string>
<string name="aidex_short">Aidex</string> <string name="aidex_short">Aidex</string>
<string name="description_source_aidex">Recevoir les valeurs de glycémie du MGC GlucoRx Aidex.</string> <string name="description_source_aidex">Recevoir les valeurs de glycémie du MGC GlucoRx Aidex.</string>
<string name="blocked_by_charging">Bloqué par les options de recharge</string>
<string name="blocked_by_connectivity">Bloqué par les options de connectivité</string>
</resources> </resources>

View file

@ -475,6 +475,7 @@ Aktif Karbonhidratın ne kadar hızlı sindirildiğine ve KŞ\'nin beklenenden d
<string name="localalertsettings_title">Yerel uyarılar</string> <string name="localalertsettings_title">Yerel uyarılar</string>
<string name="enable_missed_bg_readings_alert">KŞ bilgisi alınmadığında uyar</string> <string name="enable_missed_bg_readings_alert">KŞ bilgisi alınmadığında uyar</string>
<string name="enable_pump_unreachable_alert">Pompa ulaşılamıyorsa uyar</string> <string name="enable_pump_unreachable_alert">Pompa ulaşılamıyorsa uyar</string>
<string name="pump_unreachable_threshold">Pompa ulaşılamaz eşiği [dk]</string>
<string name="enable_carbs_req_alert">Karbonhidrat gerekliyse uyar</string> <string name="enable_carbs_req_alert">Karbonhidrat gerekliyse uyar</string>
<string name="urgent_alarm">Acil önemli Alarm</string> <string name="urgent_alarm">Acil önemli Alarm</string>
<string name="info">BİLGİ</string> <string name="info">BİLGİ</string>

View file

@ -74,11 +74,11 @@ class ErrorDialog : DaggerDialogFragment() {
} }
binding.mute.setOnClickListener { binding.mute.setOnClickListener {
uel.log(Action.ERROR_DIALOG_MUTE, Sources.Unknown) uel.log(Action.ERROR_DIALOG_MUTE, Sources.Unknown)
stopAlarm() stopAlarm("Mute")
} }
binding.mute5min.setOnClickListener { binding.mute5min.setOnClickListener {
uel.log(Action.ERROR_DIALOG_MUTE_5MIN, Sources.Unknown) uel.log(Action.ERROR_DIALOG_MUTE_5MIN, Sources.Unknown)
stopAlarm() stopAlarm("Mute 5 min")
handler.postDelayed(this::startAlarm, T.mins(5).msecs()) handler.postDelayed(this::startAlarm, T.mins(5).msecs())
} }
startAlarm() startAlarm()
@ -110,14 +110,14 @@ class ErrorDialog : DaggerDialogFragment() {
super.dismissAllowingStateLoss() super.dismissAllowingStateLoss()
helperActivity?.finish() helperActivity?.finish()
handler.removeCallbacksAndMessages(null) handler.removeCallbacksAndMessages(null)
stopAlarm() stopAlarm("Dismiss")
} }
private fun startAlarm() { private fun startAlarm() {
if (sound != 0) if (sound != 0)
alarmSoundServiceHelper.startAlarm(ctx, sound) alarmSoundServiceHelper.startAlarm(ctx, sound, "$title:$status")
} }
private fun stopAlarm() = private fun stopAlarm(reason: String) =
alarmSoundServiceHelper.stopService(ctx) alarmSoundServiceHelper.stopService(ctx, reason)
} }

View file

@ -2,22 +2,23 @@ package info.nightscout.androidaps.extensions
import com.google.gson.Gson import com.google.gson.Gson
import com.google.gson.JsonSyntaxException import com.google.gson.JsonSyntaxException
import info.nightscout.androidaps.Constants
import info.nightscout.androidaps.database.entities.BolusCalculatorResult import info.nightscout.androidaps.database.entities.BolusCalculatorResult
import info.nightscout.androidaps.database.entities.TherapyEvent import info.nightscout.androidaps.database.entities.TherapyEvent
import info.nightscout.androidaps.interfaces.Profile
import info.nightscout.androidaps.interfaces.ProfileFunction
import info.nightscout.androidaps.utils.DateUtil import info.nightscout.androidaps.utils.DateUtil
import info.nightscout.androidaps.utils.JsonHelper import info.nightscout.androidaps.utils.JsonHelper
import org.json.JSONObject import org.json.JSONObject
fun BolusCalculatorResult.toJson(isAdd: Boolean, dateUtil: DateUtil): JSONObject = fun BolusCalculatorResult.toJson(isAdd: Boolean, dateUtil: DateUtil, profileFunction: ProfileFunction): JSONObject =
JSONObject() JSONObject()
.put("eventType", TherapyEvent.Type.BOLUS_WIZARD.text) .put("eventType", TherapyEvent.Type.BOLUS_WIZARD.text)
.put("created_at", dateUtil.toISOString(timestamp)) .put("created_at", dateUtil.toISOString(timestamp))
.put("isValid", isValid) .put("isValid", isValid)
.put("bolusCalculatorResult", Gson().toJson(this)) .put("bolusCalculatorResult", Gson().toJson(this))
.put("date", timestamp) .put("date", timestamp)
.put("glucose", glucoseValue) .put("glucose", Profile.fromMgdlToUnits(glucoseValue, profileFunction.getUnits()))
.put("units", Constants.MGDL) .put("units", profileFunction.getUnits().asText)
.put("notes", note) .put("notes", note)
.also { if (isAdd && interfaceIDs.nightscoutId != null) it.put("_id", interfaceIDs.nightscoutId) } .also { if (isAdd && interfaceIDs.nightscoutId != null) it.put("_id", interfaceIDs.nightscoutId) }

View file

@ -8,7 +8,7 @@ open class Notification {
var id = 0 var id = 0
var date: Long = 0 var date: Long = 0
var text: String? = null var text: String = ""
var level = 0 var level = 0
var validTo: Long = 0 var validTo: Long = 0
@RawRes var soundId: Int? = null @RawRes var soundId: Int? = null

View file

@ -28,8 +28,8 @@ class AlarmSoundServiceHelper @Inject constructor(
private val notificationHolder: NotificationHolder private val notificationHolder: NotificationHolder
) { ) {
fun startAlarm(context: Context, sound: Int) { fun startAlarm(context: Context, sound: Int, reason: String) {
aapsLogger.debug(LTag.CORE, "Starting alarm") aapsLogger.debug(LTag.CORE, "Starting alarm from $reason")
val connection = object : ServiceConnection { val connection = object : ServiceConnection {
override fun onServiceConnected(name: ComponentName?, service: IBinder?) { override fun onServiceConnected(name: ComponentName?, service: IBinder?) {
// The binder of the service that returns the instance that is created. // The binder of the service that returns the instance that is created.
@ -62,8 +62,8 @@ class AlarmSoundServiceHelper @Inject constructor(
} }
} }
fun stopService(context: Context) { fun stopService(context: Context, reason: String) {
aapsLogger.debug(LTag.CORE, "Stopping alarm") aapsLogger.debug(LTag.CORE, "Stopping alarm from $reason")
val alarm = Intent(context, AlarmSoundService::class.java) val alarm = Intent(context, AlarmSoundService::class.java)
context.stopService(alarm) context.stopService(alarm)
} }

View file

@ -446,7 +446,7 @@
<string name="autotune_description">Aide pour ajuster le profil (SI, rapport G/I et débits de basal)</string> <string name="autotune_description">Aide pour ajuster le profil (SI, rapport G/I et débits de basal)</string>
<string name="autotune_shortname">AT</string> <string name="autotune_shortname">AT</string>
<string name="autotune_settings">Paramètres Autotune</string> <string name="autotune_settings">Paramètres Autotune</string>
<string name="autotune_auto_title">Changement de profil avec l\'Automatisation</string> <string name="autotune_auto_title">Changr le profil avec l\'automatisation</string>
<string name="autotune_auto_summary">Si activé, Autotune mettra à jour automatiquement à jour le profil sélectionné et activera le profil calculé effectué à partir d\'une règle d\'automatisation.</string> <string name="autotune_auto_summary">Si activé, Autotune mettra à jour automatiquement à jour le profil sélectionné et activera le profil calculé effectué à partir d\'une règle d\'automatisation.</string>
<string name="autotune_categorize_uam_as_basal_title">Catégoriser UAM en tant que Basal</string> <string name="autotune_categorize_uam_as_basal_title">Catégoriser UAM en tant que Basal</string>
<string name="autotune_categorize_uam_as_basal_summary">Activer uniquement si vous avez correctement saisi tous les glucides consommés, avec cette option, des hausses soudaines vues par Autotune seront utilisées pour modifier les débits de basal.</string> <string name="autotune_categorize_uam_as_basal_summary">Activer uniquement si vous avez correctement saisi tous les glucides consommés, avec cette option, des hausses soudaines vues par Autotune seront utilisées pour modifier les débits de basal.</string>

View file

@ -451,6 +451,11 @@
<string name="autotune_categorize_uam_as_basal_title">Классифицировать UAM как базал</string> <string name="autotune_categorize_uam_as_basal_title">Классифицировать UAM как базал</string>
<string name="autotune_categorize_uam_as_basal_summary">Включите, если только вы точно ввели все съеденные углеводы. С этой опцией внезапные подъемы, зафиксированные Autotune, будут использованы для рекомендаций изменения базальной скорости.</string> <string name="autotune_categorize_uam_as_basal_summary">Включите, если только вы точно ввели все съеденные углеводы. С этой опцией внезапные подъемы, зафиксированные Autotune, будут использованы для рекомендаций изменения базальной скорости.</string>
<string name="autotune_tune_insulin_curve_title">Настройка кривой инсулина</string> <string name="autotune_tune_insulin_curve_title">Настройка кривой инсулина</string>
<string name="autotune_tune_insulin_curve_summary">Включите, если используете беспиковый. Настроит пики и DIA</string>
<string name="autotune_default_tune_days_title">Количество дней с данными</string>
<string name="autotune_circadian_ic_isf_title">Применить усредненный суточный IC/ISF</string>
<string name="autotune_circadian_ic_isf_summary">Autotune не настраивает суточные вариации, эта опция только применяет усредненные коэффициенты IC и ISF к суточному профилю</string>
<string name="autotune_additional_log_title">Включить больше информации логов для отладки</string>
<string name="autotune_default_tune_days_summary">Количество дней обработки данных Autotune по умолчанию (до 30)</string> <string name="autotune_default_tune_days_summary">Количество дней обработки данных Autotune по умолчанию (до 30)</string>
<string name="autotune_error">Ошибка ввода данных, попробуйте запустить снова autotune или уменьшить количество дней</string> <string name="autotune_error">Ошибка ввода данных, попробуйте запустить снова autotune или уменьшить количество дней</string>
<string name="autotune_profile_invalid">Неверный профиль</string> <string name="autotune_profile_invalid">Неверный профиль</string>

View file

@ -21,4 +21,5 @@ org.gradle.jvmargs=-Xmx2g
android.enableJetifier=true android.enableJetifier=true
android.useAndroidX=true android.useAndroidX=true
org.gradle.unsafe.configuration-cache=true # Cache is causeing issues with CircleCI nad maybe Studio 2021
# org.gradle.unsafe.configuration-cache=true

127
wear/google-services.json Normal file
View file

@ -0,0 +1,127 @@
{
"project_info": {
"project_number": "477603612366",
"firebase_url": "https://androidaps-c34f8.firebaseio.com",
"project_id": "androidaps-c34f8",
"storage_bucket": "androidaps-c34f8.appspot.com"
},
"client": [
{
"client_info": {
"mobilesdk_app_id": "1:477603612366:android:aef229914e3e5448",
"android_client_info": {
"package_name": "info.nightscout.aapspumpcontrol"
}
},
"oauth_client": [
{
"client_id": "477603612366-a925drvlvs7qn7gt73r585erbqto8c79.apps.googleusercontent.com",
"client_type": 3
}
],
"api_key": [
{
"current_key": "AIzaSyD9HRtJJsnk_SbAMAuvudSua2vEm3j3430"
}
],
"services": {
"appinvite_service": {
"other_platform_oauth_client": [
{
"client_id": "477603612366-a925drvlvs7qn7gt73r585erbqto8c79.apps.googleusercontent.com",
"client_type": 3
}
]
}
}
},
{
"client_info": {
"mobilesdk_app_id": "1:477603612366:android:efc956f55b281623",
"android_client_info": {
"package_name": "info.nightscout.androidaps"
}
},
"oauth_client": [
{
"client_id": "477603612366-a925drvlvs7qn7gt73r585erbqto8c79.apps.googleusercontent.com",
"client_type": 3
}
],
"api_key": [
{
"current_key": "AIzaSyD9HRtJJsnk_SbAMAuvudSua2vEm3j3430"
}
],
"services": {
"appinvite_service": {
"other_platform_oauth_client": [
{
"client_id": "477603612366-a925drvlvs7qn7gt73r585erbqto8c79.apps.googleusercontent.com",
"client_type": 3
}
]
}
}
},
{
"client_info": {
"mobilesdk_app_id": "1:477603612366:android:b38d6e7351f73cc0",
"android_client_info": {
"package_name": "info.nightscout.nsclient"
}
},
"oauth_client": [
{
"client_id": "477603612366-a925drvlvs7qn7gt73r585erbqto8c79.apps.googleusercontent.com",
"client_type": 3
}
],
"api_key": [
{
"current_key": "AIzaSyD9HRtJJsnk_SbAMAuvudSua2vEm3j3430"
}
],
"services": {
"appinvite_service": {
"other_platform_oauth_client": [
{
"client_id": "477603612366-a925drvlvs7qn7gt73r585erbqto8c79.apps.googleusercontent.com",
"client_type": 3
}
]
}
}
},
{
"client_info": {
"mobilesdk_app_id": "1:477603612366:android:2dc8cf3acd3332e7",
"android_client_info": {
"package_name": "info.nightscout.nsclient2"
}
},
"oauth_client": [
{
"client_id": "477603612366-a925drvlvs7qn7gt73r585erbqto8c79.apps.googleusercontent.com",
"client_type": 3
}
],
"api_key": [
{
"current_key": "AIzaSyD9HRtJJsnk_SbAMAuvudSua2vEm3j3430"
}
],
"services": {
"appinvite_service": {
"other_platform_oauth_client": [
{
"client_id": "477603612366-a925drvlvs7qn7gt73r585erbqto8c79.apps.googleusercontent.com",
"client_type": 3
}
]
}
}
}
],
"configuration_version": "1"
}

View file

@ -168,4 +168,20 @@
<string name="tile_no_config">Není dostupná žádná konfigurace</string> <string name="tile_no_config">Není dostupná žádná konfigurace</string>
<string name="wear_control_not_enabled">Ovládání hodinkami vypnuto</string> <string name="wear_control_not_enabled">Ovládání hodinkami vypnuto</string>
<string name="wear_control_no_data">Žádná data k dispozici</string> <string name="wear_control_no_data">Žádná data k dispozici</string>
<string name="increment">zvýšení</string>
<string name="decrement">snížení</string>
<string name="first_char_high">V</string>
<string name="first_char_low">N</string>
<string name="abbreviation_average">prům</string>
<string name="no_iob_u">--U</string>
<string name="no_cob_g">--g</string>
<string name="no_tmp_basal_u_h">-.--U/h</string>
<string name="uploader_na">Uploader: ---%</string>
<string name="no_status">S: žádný status</string>
<string name="time_stamp_na_min_ago">Před -- minutamí</string>
<string name="delta_na">--- mg/dl</string>
<string name="no_loop_status">Žádný stav smyčky</string>
<string name="cob_000g">000g</string>
<string name="svg_00_0">00,0</string>
<string name="iob_0_00u">0,00U</string>
</resources> </resources>

View file

@ -168,4 +168,17 @@
<string name="tile_no_config">Aucune configuration disponible</string> <string name="tile_no_config">Aucune configuration disponible</string>
<string name="wear_control_not_enabled">Contrôles Wear désactivés</string> <string name="wear_control_not_enabled">Contrôles Wear désactivés</string>
<string name="wear_control_no_data">Aucune donnée disponible</string> <string name="wear_control_no_data">Aucune donnée disponible</string>
<string name="first_char_high">H</string>
<string name="first_char_low">B</string>
<string name="abbreviation_average">moy</string>
<string name="no_iob_u">--U</string>
<string name="no_cob_g">--g</string>
<string name="no_tmp_basal_u_h">-.-- U/h</string>
<string name="uploader_na">Téléchargement : ---%</string>
<string name="time_stamp_na_min_ago">Il y a -- minutes</string>
<string name="delta_na">--- mg/dl</string>
<string name="no_loop_status">Aucun statut de la boucle</string>
<string name="cob_000g">000 g</string>
<string name="svg_00_0">00,0</string>
<string name="iob_0_00u">0,00 U</string>
</resources> </resources>

View file

@ -168,4 +168,20 @@
<string name="tile_no_config">Ingen konfigurasjon tilgjengelig</string> <string name="tile_no_config">Ingen konfigurasjon tilgjengelig</string>
<string name="wear_control_not_enabled">Wear kontroller deaktivert</string> <string name="wear_control_not_enabled">Wear kontroller deaktivert</string>
<string name="wear_control_no_data">Ingen data tilgjengelig</string> <string name="wear_control_no_data">Ingen data tilgjengelig</string>
<string name="increment">økning</string>
<string name="decrement">reduksjon</string>
<string name="first_char_high">H</string>
<string name="first_char_low">L</string>
<string name="abbreviation_average">snitt</string>
<string name="no_iob_u">--E</string>
<string name="no_cob_g">--g</string>
<string name="no_tmp_basal_u_h">-.--E/t</string>
<string name="uploader_na">Opplaster: ---%</string>
<string name="no_status">S: ingen status</string>
<string name="time_stamp_na_min_ago">-- Minutter siden</string>
<string name="delta_na">--- mg/dl</string>
<string name="no_loop_status">Ingen loop status</string>
<string name="cob_000g">000g</string>
<string name="svg_00_0">00,0</string>
<string name="iob_0_00u">0,00E</string>
</resources> </resources>

View file

@ -168,4 +168,20 @@
<string name="tile_no_config">Нет доступной конфигурации</string> <string name="tile_no_config">Нет доступной конфигурации</string>
<string name="wear_control_not_enabled">Функция управления Wear выключена</string> <string name="wear_control_not_enabled">Функция управления Wear выключена</string>
<string name="wear_control_no_data">Нет данных</string> <string name="wear_control_no_data">Нет данных</string>
<string name="increment">приращение</string>
<string name="decrement">декремент</string>
<string name="first_char_high">В</string>
<string name="first_char_low">Н</string>
<string name="abbreviation_average">сред</string>
<string name="no_iob_u">--ед</string>
<string name="no_cob_g">--г</string>
<string name="no_tmp_basal_u_h">-.--ед/ч</string>
<string name="uploader_na">Загрузчик: --%</string>
<string name="no_status">S: статус отсутствует</string>
<string name="time_stamp_na_min_ago">-- Минут назад</string>
<string name="delta_na">--- мг/дл</string>
<string name="no_loop_status">Нет статуса</string>
<string name="cob_000g">000г</string>
<string name="svg_00_0">00,0</string>
<string name="iob_0_00u">0,00 ед</string>
</resources> </resources>

View file

@ -168,4 +168,19 @@
<string name="tile_no_config">Nie je dostupná žiadna konfigurácia</string> <string name="tile_no_config">Nie je dostupná žiadna konfigurácia</string>
<string name="wear_control_not_enabled">Ovládanie hodinkami vypnuté</string> <string name="wear_control_not_enabled">Ovládanie hodinkami vypnuté</string>
<string name="wear_control_no_data">Žiadne údaje nie sú k dispozícii</string> <string name="wear_control_no_data">Žiadne údaje nie sú k dispozícii</string>
<string name="increment">prírastok</string>
<string name="decrement">zníženie</string>
<string name="first_char_high">H</string>
<string name="first_char_low">L</string>
<string name="abbreviation_average">priemer</string>
<string name="no_iob_u">--JI</string>
<string name="no_cob_g">--g</string>
<string name="no_tmp_basal_u_h">-.--JI/h</string>
<string name="no_status">S: žiadny stav</string>
<string name="time_stamp_na_min_ago">Pred -- minútami</string>
<string name="delta_na">--- mg/dl</string>
<string name="no_loop_status">Žiadny stav uzavretého okruhu</string>
<string name="cob_000g">000g</string>
<string name="svg_00_0">00,0</string>
<string name="iob_0_00u">0,00JI</string>
</resources> </resources>

View file

@ -168,4 +168,20 @@
<string name="tile_no_config">Mevcut yapılandırma yok</string> <string name="tile_no_config">Mevcut yapılandırma yok</string>
<string name="wear_control_not_enabled">Saat kontrolleri devre dışı</string> <string name="wear_control_not_enabled">Saat kontrolleri devre dışı</string>
<string name="wear_control_no_data">Veri yok</string> <string name="wear_control_no_data">Veri yok</string>
<string name="increment">artış</string>
<string name="decrement">azalma</string>
<string name="first_char_high">Y</string>
<string name="first_char_low">D</string>
<string name="abbreviation_average">ort</string>
<string name="no_iob_u">--Ü</string>
<string name="no_cob_g">--g</string>
<string name="no_tmp_basal_u_h">-.--Ü/sa</string>
<string name="uploader_na">Yükleyici: ---%</string>
<string name="no_status">S: durum yok</string>
<string name="time_stamp_na_min_ago">-- Dakika önce</string>
<string name="delta_na">--- mg/dl</string>
<string name="no_loop_status">Döngü Durumu Yok</string>
<string name="cob_000g">000g</string>
<string name="svg_00_0">00,0</string>
<string name="iob_0_00u">0,00Ü</string>
</resources> </resources>