Merge pull request #255 from nightscout/2.8.2prep

2.8.2 release
This commit is contained in:
Milos Kozak 2021-01-23 13:04:10 +01:00 committed by GitHub
commit 194549adc4
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
261 changed files with 6833 additions and 4208 deletions

View file

@ -87,7 +87,7 @@ def gitAvailable = { ->
}
def allCommited = { ->
def allCommitted = { ->
StringBuilder stringBuilder = new StringBuilder()
try {
def stdout = new ByteArrayOutputStream()
@ -120,12 +120,12 @@ android {
targetSdkVersion 28
multiDexEnabled true
versionCode 1500
version "2.8.1.1"
version "2.8.2"
buildConfigField "String", "VERSION", '"' + version + '"'
buildConfigField "String", "BUILDVERSION", '"' + generateGitBuild() + '-' + generateDate() + '"'
buildConfigField "String", "REMOTE", '"' + generateGitRemote() + '"'
buildConfigField "String", "HEAD", '"' + generateGitBuild() + '"'
buildConfigField "String", "COMMITED", '"' + allCommited() + '"'
buildConfigField "String", "COMMITTED", '"' + allCommitted() + '"'
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
// if you change minSdkVersion to less than 11, you need to change executeTask for wear
@ -315,12 +315,12 @@ tasks.whenTaskAdded { task ->
printf('--------------\n')
printf('isMaster: %s\n', isMaster().toString())
printf('gitAvailable: %s\n', gitAvailable().toString())
printf('allCommited: %s\n', allCommited().toString())
printf('allCommitted: %s\n', allCommitted().toString())
printf('--------------\n')
if (isMaster() && !gitAvailable()) {
throw new GradleException('GIT system is not available. On Windows try to run Android Studio as an Administrator. Check if GIT is installed and Studio have permissions to use it')
}
if (isMaster() && !allCommited()) {
if (isMaster() && !allCommitted()) {
throw new GradleException('There are uncommitted changes. Clone sources again as described in wiki and do not allow gradle update')
}

BIN
app/jacoco.exec Normal file

Binary file not shown.

View file

@ -3,6 +3,7 @@
xmlns:tools="http://schemas.android.com/tools"
package="info.nightscout.androidaps">
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />

View file

@ -1,15 +1,21 @@
package info.nightscout.androidaps
import android.os.Build
import info.nightscout.androidaps.interfaces.ConfigInterface
import javax.inject.Inject
import javax.inject.Singleton
@Singleton
class Config @Inject constructor(): ConfigInterface{
class Config @Inject constructor() : ConfigInterface {
override val SUPPORTEDNSVERSION = 1002 // 0.10.00
override val APS = BuildConfig.FLAVOR == "full"
override val NSCLIENT = BuildConfig.FLAVOR == "nsclient" || BuildConfig.FLAVOR == "nsclient2"
override val PUMPCONTROL = BuildConfig.FLAVOR == "pumpcontrol"
override val PUMPDRIVERS = BuildConfig.FLAVOR == "full" || BuildConfig.FLAVOR == "pumpcontrol"
override val FLAVOR = BuildConfig.FLAVOR
override val VERSION_NAME = BuildConfig.VERSION_NAME
override val currentDeviceModelString =
Build.MANUFACTURER + " " + Build.MODEL + " (" + Build.DEVICE + ")"
}

View file

@ -2,7 +2,6 @@ package info.nightscout.androidaps
import android.content.Context
import android.content.Intent
import android.content.pm.PackageManager
import android.graphics.Rect
import android.os.Bundle
import android.os.PersistableBundle
@ -22,7 +21,6 @@ import android.widget.TextView
import androidx.appcompat.app.ActionBarDrawerToggle
import androidx.appcompat.app.AlertDialog
import androidx.appcompat.widget.Toolbar
import androidx.core.app.ActivityCompat
import androidx.viewpager2.widget.ViewPager2
import com.google.android.material.tabs.TabLayoutMediator
import com.google.firebase.crashlytics.FirebaseCrashlytics
@ -34,6 +32,7 @@ import info.nightscout.androidaps.activities.PreferencesActivity
import info.nightscout.androidaps.activities.ProfileHelperActivity
import info.nightscout.androidaps.activities.SingleFragmentActivity
import info.nightscout.androidaps.activities.StatsActivity
import info.nightscout.androidaps.databinding.ActivityMainBinding
import info.nightscout.androidaps.events.EventAppExit
import info.nightscout.androidaps.events.EventPreferenceChange
import info.nightscout.androidaps.events.EventRebuildTabs
@ -47,8 +46,6 @@ import info.nightscout.androidaps.plugins.bus.RxBusWrapper
import info.nightscout.androidaps.plugins.configBuilder.ConstraintChecker
import info.nightscout.androidaps.plugins.constraints.signatureVerifier.SignatureVerifierPlugin
import info.nightscout.androidaps.plugins.constraints.versionChecker.VersionCheckerUtils
import info.nightscout.androidaps.plugins.general.maintenance.ImportExportPrefs
import info.nightscout.androidaps.plugins.general.maintenance.PrefsFileContract
import info.nightscout.androidaps.plugins.general.nsclient.data.NSSettingsStatus
import info.nightscout.androidaps.plugins.general.smsCommunicator.SmsCommunicatorPlugin
import info.nightscout.androidaps.setupwizard.SetupWizardActivity
@ -60,13 +57,11 @@ import info.nightscout.androidaps.utils.extensions.isRunningRealPumpTest
import info.nightscout.androidaps.utils.locale.LocaleHelper
import info.nightscout.androidaps.utils.protection.ProtectionCheck
import info.nightscout.androidaps.utils.resources.IconsProvider
import info.nightscout.androidaps.utils.resources.ResourceHelper
import info.nightscout.androidaps.utils.sharedPreferences.SP
import info.nightscout.androidaps.utils.tabs.TabPageAdapter
import info.nightscout.androidaps.utils.ui.UIRunnable
import io.reactivex.android.schedulers.AndroidSchedulers
import io.reactivex.disposables.CompositeDisposable
import kotlinx.android.synthetic.main.activity_main.*
import java.util.*
import javax.inject.Inject
import kotlin.system.exitProcess
@ -79,7 +74,6 @@ class MainActivity : NoSplashAppCompatActivity() {
@Inject lateinit var rxBus: RxBusWrapper
@Inject lateinit var androidPermission: AndroidPermission
@Inject lateinit var sp: SP
@Inject lateinit var resourceHelper: ResourceHelper
@Inject lateinit var versionCheckerUtils: VersionCheckerUtils
@Inject lateinit var smsCommunicatorPlugin: SmsCommunicatorPlugin
@Inject lateinit var loopPlugin: LoopPlugin
@ -92,40 +86,36 @@ class MainActivity : NoSplashAppCompatActivity() {
@Inject lateinit var constraintChecker: ConstraintChecker
@Inject lateinit var signatureVerifierPlugin: SignatureVerifierPlugin
@Inject lateinit var config: Config
@Inject lateinit var importExportPrefs: ImportExportPrefs
private lateinit var actionBarDrawerToggle: ActionBarDrawerToggle
private var pluginPreferencesMenuItem: MenuItem? = null
private var menu: Menu? = null
val callForPrefFile = registerForActivityResult(PrefsFileContract()) {
it?.let {
importExportPrefs.importSharedPreferences(this, it)
}
}
private lateinit var binding: ActivityMainBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
Iconify.with(FontAwesomeModule())
LocaleHelper.update(applicationContext)
setContentView(R.layout.activity_main)
setSupportActionBar(toolbar)
binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
setSupportActionBar(binding.toolbar)
supportActionBar?.setDisplayShowTitleEnabled(false)
supportActionBar?.setDisplayHomeAsUpEnabled(true)
supportActionBar?.setHomeButtonEnabled(true)
actionBarDrawerToggle = ActionBarDrawerToggle(this, main_drawer_layout, R.string.open_navigation, R.string.close_navigation).also {
main_drawer_layout.addDrawerListener(it)
actionBarDrawerToggle = ActionBarDrawerToggle(this, binding.mainDrawerLayout, R.string.open_navigation, R.string.close_navigation).also {
binding.mainDrawerLayout.addDrawerListener(it)
it.syncState()
}
// initialize screen wake lock
processPreferenceChange(EventPreferenceChange(resourceHelper.gs(R.string.key_keep_screen_on)))
main_pager.registerOnPageChangeCallback(object : ViewPager2.OnPageChangeCallback() {
binding.mainPager.registerOnPageChangeCallback(object : ViewPager2.OnPageChangeCallback() {
override fun onPageScrollStateChanged(state: Int) {}
override fun onPageScrolled(position: Int, positionOffset: Float, positionOffsetPixels: Int) {}
override fun onPageSelected(position: Int) {
setPluginPreferenceMenuName()
checkPluginPreferences(main_pager)
checkPluginPreferences(binding.mainPager)
}
})
@ -196,69 +186,53 @@ class MainActivity : NoSplashAppCompatActivity() {
private fun setupViews() {
// Menu
val pageAdapter = TabPageAdapter(this)
main_navigation_view.setNavigationItemSelectedListener { true }
val menu = main_navigation_view.menu.also { it.clear() }
binding.mainNavigationView.setNavigationItemSelectedListener { true }
val menu = binding.mainNavigationView.menu.also { it.clear() }
for (p in activePlugin.getPluginsList()) {
pageAdapter.registerNewFragment(p)
if (p.isEnabled() && p.hasFragment() && !p.isFragmentVisible() && !p.pluginDescription.neverVisible) {
val menuItem = menu.add(p.name)
menuItem.isCheckable = true
if(p.menuIcon != -1) {
if (p.menuIcon != -1) {
menuItem.setIcon(p.menuIcon)
} else
{
} else {
menuItem.setIcon(R.drawable.ic_settings)
}
menuItem.setOnMenuItemClickListener {
val intent = Intent(this, SingleFragmentActivity::class.java)
intent.putExtra("plugin", activePlugin.getPluginsList().indexOf(p))
startActivity(intent)
main_drawer_layout.closeDrawers()
binding.mainDrawerLayout.closeDrawers()
true
}
}
}
main_pager.adapter = pageAdapter
main_pager.offscreenPageLimit = 8 // This may cause more memory consumption
checkPluginPreferences(main_pager)
binding.mainPager.adapter = pageAdapter
binding.mainPager.offscreenPageLimit = 8 // This may cause more memory consumption
checkPluginPreferences(binding.mainPager)
// Tabs
if (sp.getBoolean(R.string.key_short_tabtitles, false)) {
tabs_normal.visibility = View.GONE
tabs_compact.visibility = View.VISIBLE
toolbar.layoutParams = LinearLayout.LayoutParams(Toolbar.LayoutParams.MATCH_PARENT, resources.getDimension(R.dimen.compact_height).toInt())
TabLayoutMediator(tabs_compact, main_pager) { tab, position ->
tab.text = (main_pager.adapter as TabPageAdapter).getPluginAt(position).nameShort
binding.tabsNormal.visibility = View.GONE
binding.tabsCompact.visibility = View.VISIBLE
binding.toolbar.layoutParams = LinearLayout.LayoutParams(Toolbar.LayoutParams.MATCH_PARENT, resources.getDimension(R.dimen.compact_height).toInt())
TabLayoutMediator(binding.tabsCompact, binding.mainPager) { tab, position ->
tab.text = (binding.mainPager.adapter as TabPageAdapter).getPluginAt(position).nameShort
}.attach()
} else {
tabs_normal.visibility = View.VISIBLE
tabs_compact.visibility = View.GONE
binding.tabsNormal.visibility = View.VISIBLE
binding.tabsCompact.visibility = View.GONE
val typedValue = TypedValue()
if (theme.resolveAttribute(R.attr.actionBarSize, typedValue, true)) {
toolbar.layoutParams = LinearLayout.LayoutParams(Toolbar.LayoutParams.MATCH_PARENT,
binding.toolbar.layoutParams = LinearLayout.LayoutParams(Toolbar.LayoutParams.MATCH_PARENT,
TypedValue.complexToDimensionPixelSize(typedValue.data, resources.displayMetrics))
}
TabLayoutMediator(tabs_normal, main_pager) { tab, position ->
tab.text = (main_pager.adapter as TabPageAdapter).getPluginAt(position).name
TabLayoutMediator(binding.tabsNormal, binding.mainPager) { tab, position ->
tab.text = (binding.mainPager.adapter as TabPageAdapter).getPluginAt(position).name
}.attach()
}
}
override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<String>, grantResults: IntArray) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults)
if (permissions.isNotEmpty()) {
if (ActivityCompat.checkSelfPermission(this, permissions[0]) == PackageManager.PERMISSION_GRANTED) {
when (requestCode) {
AndroidPermission.CASE_STORAGE -> //show dialog after permission is granted
OKDialog.show(this, "", resourceHelper.gs(R.string.alert_dialog_storage_permission_text))
AndroidPermission.CASE_LOCATION, AndroidPermission.CASE_SMS, AndroidPermission.CASE_BATTERY, AndroidPermission.CASE_PHONE_STATE, AndroidPermission.CASE_SYSTEM_WINDOW -> {
}
}
}
}
}
override fun dispatchTouchEvent(event: MotionEvent): Boolean {
if (event.action == MotionEvent.ACTION_DOWN) {
val v = currentFocus
@ -276,18 +250,18 @@ class MainActivity : NoSplashAppCompatActivity() {
}
private fun setPluginPreferenceMenuName() {
if (main_pager.currentItem > 0) {
val plugin = (main_pager.adapter as TabPageAdapter).getPluginAt(main_pager.currentItem)
if (binding.mainPager.currentItem >= 0) {
val plugin = (binding.mainPager.adapter as TabPageAdapter).getPluginAt(binding.mainPager.currentItem)
this.menu?.findItem(R.id.nav_plugin_preferences)?.title = resourceHelper.gs(R.string.nav_preferences_plugin, plugin.name)
}
}
override fun onCreateOptionsMenu(menu: Menu): Boolean {
this.menu = menu
this.menu = menu
menuInflater.inflate(R.menu.menu_main, menu)
pluginPreferencesMenuItem = menu.findItem(R.id.nav_plugin_preferences)
setPluginPreferenceMenuName()
checkPluginPreferences(main_pager)
checkPluginPreferences(binding.mainPager)
return true
}
@ -345,7 +319,7 @@ class MainActivity : NoSplashAppCompatActivity() {
}
R.id.nav_plugin_preferences -> {
val plugin = (main_pager.adapter as TabPageAdapter).getPluginAt(main_pager.currentItem)
val plugin = (binding.mainPager.adapter as TabPageAdapter).getPluginAt(binding.mainPager.currentItem)
protectionCheck.queryProtection(this, ProtectionCheck.Protection.PREFERENCES, {
val i = Intent(this, PreferencesActivity::class.java)
i.putExtra("id", plugin.preferencesId)
@ -404,8 +378,8 @@ class MainActivity : NoSplashAppCompatActivity() {
FirebaseCrashlytics.getInstance().setCustomKey("HEAD", BuildConfig.HEAD)
FirebaseCrashlytics.getInstance().setCustomKey("Version", BuildConfig.VERSION)
FirebaseCrashlytics.getInstance().setCustomKey("Remote", remote)
FirebaseCrashlytics.getInstance().setCustomKey("Commited", BuildConfig.COMMITED)
FirebaseCrashlytics.getInstance().setCustomKey("Committed", BuildConfig.COMMITTED)
FirebaseCrashlytics.getInstance().setCustomKey("Hash", hashes[0])
}
}
}

View file

@ -420,6 +420,6 @@ class MyPreferenceFragment : PreferenceFragmentCompat(), OnSharedPreferenceChang
fun setFilter(filter: String) {
this.filter = filter
updateFilterVisibility(filter, preferenceScreen)
preferenceManager?.preferenceScreen?.let { updateFilterVisibility(filter, it) }
}
}

View file

@ -7,23 +7,22 @@ import android.text.TextWatcher
import androidx.preference.PreferenceFragmentCompat
import androidx.preference.PreferenceScreen
import info.nightscout.androidaps.R
import info.nightscout.androidaps.databinding.ActivityPreferencesBinding
import info.nightscout.androidaps.utils.locale.LocaleHelper
import info.nightscout.androidaps.utils.resources.ResourceHelper
import kotlinx.android.synthetic.main.activity_preferences.*
import javax.inject.Inject
class PreferencesActivity : NoSplashAppCompatActivity(), PreferenceFragmentCompat.OnPreferenceStartScreenCallback {
@Inject lateinit var resourceHelper: ResourceHelper
private var preferenceId = 0
private var myPreferenceFragment: MyPreferenceFragment? = null
var preferenceId = 0
var myPreferenceFragment: MyPreferenceFragment? = null
private lateinit var binding: ActivityPreferencesBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_preferences)
binding = ActivityPreferencesBinding.inflate(layoutInflater)
setContentView(binding.root)
pref_filter.addTextChangedListener(object : TextWatcher {
binding.prefFilter.addTextChangedListener(object : TextWatcher {
override fun beforeTextChanged(s: CharSequence, start: Int, count: Int, after: Int) {}
override fun onTextChanged(s: CharSequence, start: Int, before: Int, count: Int) {
filterPreferences()
@ -37,23 +36,21 @@ class PreferencesActivity : NoSplashAppCompatActivity(), PreferenceFragmentCompa
supportActionBar?.setDisplayShowHomeEnabled(true)
myPreferenceFragment = MyPreferenceFragment()
preferenceId = intent.getIntExtra("id", -1)
val args = Bundle()
args.putInt("id", preferenceId)
args.putString("filter", pref_filter.text.toString())
myPreferenceFragment?.arguments = args
supportFragmentManager.beginTransaction().replace(R.id.frame_layout, myPreferenceFragment!!).commit()
myPreferenceFragment?.arguments = Bundle().also {
it.putInt("id", preferenceId)
it.putString("filter", binding.prefFilter.text.toString())
}
if (savedInstanceState == null)
supportFragmentManager.beginTransaction().replace(R.id.frame_layout, myPreferenceFragment!!).commit()
}
override fun onPreferenceStartScreen(caller: PreferenceFragmentCompat, pref: PreferenceScreen): Boolean {
val fragment = MyPreferenceFragment()
val args = Bundle()
args.putString(PreferenceFragmentCompat.ARG_PREFERENCE_ROOT, pref.key)
args.putInt("id", preferenceId)
fragment.arguments = args
supportFragmentManager.beginTransaction()
.replace(R.id.frame_layout, fragment, pref.key)
.addToBackStack(pref.key)
.commit()
fragment.arguments = Bundle().also {
it.putString(PreferenceFragmentCompat.ARG_PREFERENCE_ROOT, pref.key)
it.putInt("id", preferenceId)
}
supportFragmentManager.beginTransaction().replace(R.id.frame_layout, fragment, pref.key).addToBackStack(pref.key).commit()
return true
}
@ -62,6 +59,6 @@ class PreferencesActivity : NoSplashAppCompatActivity(), PreferenceFragmentCompa
}
private fun filterPreferences() {
myPreferenceFragment?.setFilter(pref_filter.text.toString())
myPreferenceFragment?.setFilter(binding.prefFilter.text.toString())
}
}

View file

@ -10,6 +10,7 @@ import info.nightscout.androidaps.R
import info.nightscout.androidaps.data.Profile
import info.nightscout.androidaps.data.defaultProfile.DefaultProfile
import info.nightscout.androidaps.data.defaultProfile.DefaultProfileDPV
import info.nightscout.androidaps.databinding.ActivityProfilehelperBinding
import info.nightscout.androidaps.db.ProfileSwitch
import info.nightscout.androidaps.dialogs.ProfileViewerDialog
import info.nightscout.androidaps.interfaces.ActivePluginProvider
@ -24,15 +25,13 @@ import info.nightscout.androidaps.utils.T
import info.nightscout.androidaps.utils.ToastUtils
import info.nightscout.androidaps.utils.alertDialogs.OKDialog
import info.nightscout.androidaps.utils.extensions.toVisibility
import info.nightscout.androidaps.utils.resources.ResourceHelper
import info.nightscout.androidaps.utils.stats.TddCalculator
import kotlinx.android.synthetic.main.activity_profilehelper.*
import java.text.DecimalFormat
import javax.inject.Inject
class ProfileHelperActivity : NoSplashAppCompatActivity() {
@Inject lateinit var aapsLogger: AAPSLogger
@Inject lateinit var resourceHelper: ResourceHelper
@Inject lateinit var tddCalculator: TddCalculator
@Inject lateinit var profileFunction: ProfileFunction
@Inject lateinit var defaultProfile: DefaultProfile
@ -65,27 +64,31 @@ class ProfileHelperActivity : NoSplashAppCompatActivity() {
private lateinit var profileSwitch: List<ProfileSwitch>
private val profileSwitchUsed = arrayOf(0, 0)
private lateinit var binding: ActivityProfilehelperBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_profilehelper)
profilehelper_menu1.setOnClickListener {
binding = ActivityProfilehelperBinding.inflate(layoutInflater)
setContentView(binding.root)
binding.menu1.setOnClickListener {
switchTab(0, typeSelected[0])
}
profilehelper_menu2.setOnClickListener {
binding.menu2.setOnClickListener {
switchTab(1, typeSelected[1])
}
profilehelper_profiletype.setOnClickListener {
PopupMenu(this, profilehelper_profiletype).apply {
binding.profiletype.setOnClickListener {
PopupMenu(this, binding.profiletype).apply {
menuInflater.inflate(R.menu.menu_profilehelper, menu)
setOnMenuItemClickListener { item ->
profilehelper_profiletype.setText(item.title)
binding.profiletype.setText(item.title)
when (item.itemId) {
R.id.menu_default -> switchTab(tabSelected, ProfileType.MOTOL_DEFAULT)
R.id.menu_default_dpv -> switchTab(tabSelected, ProfileType.DPV_DEFAULT)
R.id.menu_current -> switchTab(tabSelected, ProfileType.CURRENT)
R.id.menu_available -> switchTab(tabSelected, ProfileType.AVAILABLE_PROFILE)
R.id.menu_default -> switchTab(tabSelected, ProfileType.MOTOL_DEFAULT)
R.id.menu_default_dpv -> switchTab(tabSelected, ProfileType.DPV_DEFAULT)
R.id.menu_current -> switchTab(tabSelected, ProfileType.CURRENT)
R.id.menu_available -> switchTab(tabSelected, ProfileType.AVAILABLE_PROFILE)
R.id.menu_profileswitch -> switchTab(tabSelected, ProfileType.PROFILE_SWITCH)
}
true
@ -97,12 +100,12 @@ class ProfileHelperActivity : NoSplashAppCompatActivity() {
// Active profile
profileList = activePlugin.activeProfileInterface.profile?.getProfileList() ?: ArrayList()
profilehelper_available_profile_list.setOnClickListener {
PopupMenu(this, profilehelper_available_profile_list).apply {
binding.availableProfileList.setOnClickListener {
PopupMenu(this, binding.availableProfileList).apply {
var order = 0
for (name in profileList) menu.add(Menu.NONE, order, order++, name)
setOnMenuItemClickListener { item ->
profilehelper_available_profile_list.setText(item.title)
binding.availableProfileList.setText(item.title)
profileUsed[tabSelected] = item.itemId
true
}
@ -113,12 +116,12 @@ class ProfileHelperActivity : NoSplashAppCompatActivity() {
// Profile switch
profileSwitch = databaseHelper.getProfileSwitchData(dateUtil._now() - T.months(2).msecs(), true)
profilehelper_profileswitch_list.setOnClickListener {
PopupMenu(this, profilehelper_profileswitch_list).apply {
binding.profileswitchList.setOnClickListener {
PopupMenu(this, binding.profileswitchList).apply {
var order = 0
for (name in profileSwitch) menu.add(Menu.NONE, order, order++, name.customizedName)
setOnMenuItemClickListener { item ->
profilehelper_profileswitch_list.setText(item.title)
binding.profileswitchList.setText(item.title)
profileSwitchUsed[tabSelected] = item.itemId
true
}
@ -127,7 +130,7 @@ class ProfileHelperActivity : NoSplashAppCompatActivity() {
}
// Default profile
profilehelper_copytolocalprofile.setOnClickListener {
binding.copytolocalprofile.setOnClickListener {
val age = ageUsed[tabSelected]
val weight = weightUsed[tabSelected]
val tdd = tddUsed[tabSelected]
@ -142,31 +145,31 @@ class ProfileHelperActivity : NoSplashAppCompatActivity() {
}
}
profilehelper_age.setParams(0.0, 1.0, 18.0, 1.0, DecimalFormat("0"), false, null)
profilehelper_weight.setParams(0.0, 0.0, 150.0, 1.0, DecimalFormat("0"), false, null, object : TextWatcher {
binding.age.setParams(0.0, 1.0, 18.0, 1.0, DecimalFormat("0"), false, null)
binding.weight.setParams(0.0, 0.0, 150.0, 1.0, DecimalFormat("0"), false, null, object : TextWatcher {
override fun afterTextChanged(s: Editable) {}
override fun beforeTextChanged(s: CharSequence, start: Int, count: Int, after: Int) {}
override fun onTextChanged(s: CharSequence, start: Int, before: Int, count: Int) {
profilehelper_tdd_row.visibility = (profilehelper_weight.value == 0.0).toVisibility()
binding.tddRow.visibility = (binding.weight.value == 0.0).toVisibility()
}
})
profilehelper_tdd.setParams(0.0, 0.0, 200.0, 1.0, DecimalFormat("0"), false, null, object : TextWatcher {
binding.tdd.setParams(0.0, 0.0, 200.0, 1.0, DecimalFormat("0"), false, null, object : TextWatcher {
override fun afterTextChanged(s: Editable) {}
override fun beforeTextChanged(s: CharSequence, start: Int, count: Int, after: Int) {}
override fun onTextChanged(s: CharSequence, start: Int, before: Int, count: Int) {
profilehelper_weight_row.visibility = (profilehelper_tdd.value == 0.0).toVisibility()
binding.weightRow.visibility = (binding.tdd.value == 0.0).toVisibility()
}
})
profilehelper_basalpctfromtdd.setParams(32.0, 32.0, 37.0, 1.0, DecimalFormat("0"), false, null)
binding.basalpctfromtdd.setParams(32.0, 32.0, 37.0, 1.0, DecimalFormat("0"), false, null)
profilehelper_tdds.text = tddCalculator.stats()
binding.tdds.text = tddCalculator.stats()
// Current profile
profilehelper_current_profile_text.text = profileFunction.getProfileName()
binding.currentProfileText.text = profileFunction.getProfileName()
// General
profilehelper_compareprofile.setOnClickListener {
binding.compareprofile.setOnClickListener {
storeValues()
for (i in 0..1) {
if (typeSelected[i] == ProfileType.MOTOL_DEFAULT) {
@ -221,28 +224,32 @@ class ProfileHelperActivity : NoSplashAppCompatActivity() {
}
private fun getProfile(age: Double, tdd: Double, weight: Double, basalPct: Double, tab: Int): Profile? =
when (typeSelected[tab]) {
ProfileType.MOTOL_DEFAULT -> defaultProfile.profile(age, tdd, weight, profileFunction.getUnits())
ProfileType.DPV_DEFAULT -> defaultProfileDPV.profile(age, tdd, basalPct, profileFunction.getUnits())
ProfileType.CURRENT -> profileFunction.getProfile()?.convertToNonCustomizedProfile()
ProfileType.AVAILABLE_PROFILE -> activePlugin.activeProfileInterface.profile?.getSpecificProfile(profileList[profileUsed[tab]].toString())
ProfileType.PROFILE_SWITCH -> profileSwitch[profileSwitchUsed[tab]].profileObject?.convertToNonCustomizedProfile()
try { // profile must not exist
when (typeSelected[tab]) {
ProfileType.MOTOL_DEFAULT -> defaultProfile.profile(age, tdd, weight, profileFunction.getUnits())
ProfileType.DPV_DEFAULT -> defaultProfileDPV.profile(age, tdd, basalPct, profileFunction.getUnits())
ProfileType.CURRENT -> profileFunction.getProfile()?.convertToNonCustomizedProfile()
ProfileType.AVAILABLE_PROFILE -> activePlugin.activeProfileInterface.profile?.getSpecificProfile(profileList[profileUsed[tab]].toString())
ProfileType.PROFILE_SWITCH -> profileSwitch[profileSwitchUsed[tab]].profileObject?.convertToNonCustomizedProfile()
}
} catch (e: Exception) {
null
}
private fun getProfileName(age: Double, tdd: Double, weight: Double, basalSumPct: Double, tab: Int): String =
when (typeSelected[tab]) {
ProfileType.MOTOL_DEFAULT -> if (tdd > 0) resourceHelper.gs(R.string.formatwithtdd, age, tdd) else resourceHelper.gs(R.string.formatwithweight, age, weight)
ProfileType.DPV_DEFAULT -> resourceHelper.gs(R.string.formatwittddandpct, age, tdd, (basalSumPct * 100).toInt())
ProfileType.CURRENT -> profileFunction.getProfileName()
ProfileType.MOTOL_DEFAULT -> if (tdd > 0) resourceHelper.gs(R.string.formatwithtdd, age, tdd) else resourceHelper.gs(R.string.formatwithweight, age, weight)
ProfileType.DPV_DEFAULT -> resourceHelper.gs(R.string.formatwittddandpct, age, tdd, (basalSumPct * 100).toInt())
ProfileType.CURRENT -> profileFunction.getProfileName()
ProfileType.AVAILABLE_PROFILE -> profileList[profileUsed[tab]].toString()
ProfileType.PROFILE_SWITCH -> profileSwitch[profileSwitchUsed[tab]].customizedName
ProfileType.PROFILE_SWITCH -> profileSwitch[profileSwitchUsed[tab]].customizedName
}
private fun storeValues() {
ageUsed[tabSelected] = profilehelper_age.value
weightUsed[tabSelected] = profilehelper_weight.value
tddUsed[tabSelected] = profilehelper_tdd.value
pctUsed[tabSelected] = profilehelper_basalpctfromtdd.value
ageUsed[tabSelected] = binding.age.value
weightUsed[tabSelected] = binding.weight.value
tddUsed[tabSelected] = binding.tdd.value
pctUsed[tabSelected] = binding.basalpctfromtdd.value
}
private fun switchTab(tab: Int, newContent: ProfileType, storeOld: Boolean = true) {
@ -252,10 +259,10 @@ class ProfileHelperActivity : NoSplashAppCompatActivity() {
tabSelected = tab
typeSelected[tabSelected] = newContent
profilehelper_profiletype_title.defaultHintTextColor = ColorStateList.valueOf(resourceHelper.gc(if (tab == 0) R.color.tabBgColorSelected else R.color.examinedProfile))
binding.profiletypeTitle.defaultHintTextColor = ColorStateList.valueOf(resourceHelper.gc(if (tab == 0) R.color.tabBgColorSelected else R.color.examinedProfile))
// show new content
profilehelper_profiletype.setText(
binding.profiletype.setText(
when (typeSelected[tabSelected]) {
ProfileType.MOTOL_DEFAULT -> resourceHelper.gs(R.string.motoldefaultprofile)
ProfileType.DPV_DEFAULT -> resourceHelper.gs(R.string.dpvdefaultprofile)
@ -263,26 +270,26 @@ class ProfileHelperActivity : NoSplashAppCompatActivity() {
ProfileType.AVAILABLE_PROFILE -> resourceHelper.gs(R.string.availableprofile)
ProfileType.PROFILE_SWITCH -> resourceHelper.gs(R.string.careportal_profileswitch)
})
profilehelper_default_profile.visibility = (newContent == ProfileType.MOTOL_DEFAULT || newContent == ProfileType.DPV_DEFAULT).toVisibility()
profilehelper_current_profile.visibility = (newContent == ProfileType.CURRENT).toVisibility()
profilehelper_available_profile.visibility = (newContent == ProfileType.AVAILABLE_PROFILE).toVisibility()
profilehelper_profile_switch.visibility = (newContent == ProfileType.PROFILE_SWITCH).toVisibility()
binding.defaultProfile.visibility = (newContent == ProfileType.MOTOL_DEFAULT || newContent == ProfileType.DPV_DEFAULT).toVisibility()
binding.currentProfile.visibility = (newContent == ProfileType.CURRENT).toVisibility()
binding.availableProfile.visibility = (newContent == ProfileType.AVAILABLE_PROFILE).toVisibility()
binding.profileSwitch.visibility = (newContent == ProfileType.PROFILE_SWITCH).toVisibility()
// restore selected values
profilehelper_age.value = ageUsed[tabSelected]
profilehelper_weight.value = weightUsed[tabSelected]
profilehelper_tdd.value = tddUsed[tabSelected]
profilehelper_basalpctfromtdd.value = pctUsed[tabSelected]
binding.age.value = ageUsed[tabSelected]
binding.weight.value = weightUsed[tabSelected]
binding.tdd.value = tddUsed[tabSelected]
binding.basalpctfromtdd.value = pctUsed[tabSelected]
profilehelper_basalpctfromtdd_row.visibility = (newContent == ProfileType.DPV_DEFAULT).toVisibility()
binding.basalpctfromtddRow.visibility = (newContent == ProfileType.DPV_DEFAULT).toVisibility()
if (profileList.isNotEmpty())
profilehelper_available_profile_list.setText(profileList[profileUsed[tabSelected]].toString())
binding.availableProfileList.setText(profileList[profileUsed[tabSelected]].toString())
if (profileSwitch.isNotEmpty())
profilehelper_profileswitch_list.setText(profileSwitch[profileSwitchUsed[tabSelected]].customizedName)
binding.profileswitchList.setText(profileSwitch[profileSwitchUsed[tabSelected]].customizedName)
}
private fun setBackgroundColorOnSelected(tab: Int) {
profilehelper_menu1.setBackgroundColor(resourceHelper.gc(if (tab == 1) R.color.defaultbackground else R.color.tabBgColorSelected))
profilehelper_menu2.setBackgroundColor(resourceHelper.gc(if (tab == 0) R.color.defaultbackground else R.color.examinedProfile))
binding.menu1.setBackgroundColor(resourceHelper.gc(if (tab == 1) R.color.defaultbackground else R.color.tabBgColorSelected))
binding.menu2.setBackgroundColor(resourceHelper.gc(if (tab == 0) R.color.defaultbackground else R.color.examinedProfile))
}
}

View file

@ -15,6 +15,7 @@ class RequestDexcomPermissionActivity : DialogAppCompatActivity() {
}
override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<out String>, grantResults: IntArray) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults)
finish()
}

View file

@ -5,29 +5,20 @@ import android.content.Intent
import android.os.Bundle
import android.view.Menu
import android.view.MenuItem
import dagger.android.support.DaggerAppCompatActivity
import info.nightscout.androidaps.R
import info.nightscout.androidaps.interfaces.PluginBase
import info.nightscout.androidaps.plugins.configBuilder.PluginStore
import info.nightscout.androidaps.plugins.general.maintenance.ImportExportPrefs
import info.nightscout.androidaps.plugins.general.maintenance.PrefsFileContract
import info.nightscout.androidaps.utils.locale.LocaleHelper
import info.nightscout.androidaps.utils.protection.ProtectionCheck
import javax.inject.Inject
class SingleFragmentActivity : DaggerAppCompatActivity() {
class SingleFragmentActivity : DaggerAppCompatActivityWithResult() {
@Inject lateinit var pluginStore: PluginStore
@Inject lateinit var protectionCheck: ProtectionCheck
@Inject lateinit var importExportPrefs: ImportExportPrefs
private var plugin: PluginBase? = null
val callForPrefFile = registerForActivityResult(PrefsFileContract()) {
it?.let {
importExportPrefs.importSharedPreferences(this, it)
}
}
public override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_single_fragment)

View file

@ -2,35 +2,36 @@ package info.nightscout.androidaps.activities
import android.os.Bundle
import info.nightscout.androidaps.R
import info.nightscout.androidaps.databinding.ActivityStatsBinding
import info.nightscout.androidaps.utils.ActivityMonitor
import info.nightscout.androidaps.utils.DateUtil
import info.nightscout.androidaps.utils.alertDialogs.OKDialog
import info.nightscout.androidaps.utils.stats.TddCalculator
import info.nightscout.androidaps.utils.stats.TirCalculator
import info.nightscout.androidaps.utils.resources.ResourceHelper
import kotlinx.android.synthetic.main.activity_stats.*
import javax.inject.Inject
class StatsActivity : NoSplashAppCompatActivity() {
@Inject lateinit var tddCalculator: TddCalculator
@Inject lateinit var tirCalculator: TirCalculator
@Inject lateinit var resourceHelper: ResourceHelper
@Inject lateinit var activityMonitor: ActivityMonitor
private lateinit var binding: ActivityStatsBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_stats)
binding = ActivityStatsBinding.inflate(layoutInflater)
setContentView(binding.root)
stats_tdds.text = tddCalculator.stats()
stats_tir.text = tirCalculator.stats()
stats_activity.text = activityMonitor.stats()
binding.tdds.text = tddCalculator.stats()
binding.tir.text = tirCalculator.stats()
binding.activity.text = activityMonitor.stats()
ok.setOnClickListener { finish() }
stats_reset.setOnClickListener {
OKDialog.showConfirmation(this, resourceHelper.gs(R.string.doyouwantresetstats), Runnable {
binding.ok.setOnClickListener { finish() }
binding.reset.setOnClickListener {
OKDialog.showConfirmation(this, resourceHelper.gs(R.string.doyouwantresetstats)) {
activityMonitor.reset()
recreate()
})
}
}
}
}

View file

@ -6,6 +6,7 @@ import com.google.firebase.auth.FirebaseAuth
import com.google.firebase.database.FirebaseDatabase
import info.nightscout.androidaps.R
import info.nightscout.androidaps.data.defaultProfile.DefaultProfile
import info.nightscout.androidaps.databinding.ActivitySurveyBinding
import info.nightscout.androidaps.dialogs.ProfileViewerDialog
import info.nightscout.androidaps.interfaces.ActivePluginProvider
import info.nightscout.androidaps.interfaces.ProfileFunction
@ -16,15 +17,13 @@ import info.nightscout.androidaps.utils.DateUtil
import info.nightscout.androidaps.utils.InstanceId
import info.nightscout.androidaps.utils.SafeParse
import info.nightscout.androidaps.utils.ToastUtils
import info.nightscout.androidaps.utils.resources.ResourceHelper
import info.nightscout.androidaps.utils.stats.TddCalculator
import info.nightscout.androidaps.utils.stats.TirCalculator
import kotlinx.android.synthetic.main.activity_survey.*
import javax.inject.Inject
class SurveyActivity : NoSplashAppCompatActivity() {
@Inject lateinit var aapsLogger: AAPSLogger
@Inject lateinit var resourceHelper: ResourceHelper
@Inject lateinit var activePlugin: ActivePluginProvider
@Inject lateinit var tddCalculator: TddCalculator
@Inject lateinit var tirCalculator: TirCalculator
@ -32,24 +31,27 @@ class SurveyActivity : NoSplashAppCompatActivity() {
@Inject lateinit var activityMonitor: ActivityMonitor
@Inject lateinit var defaultProfile: DefaultProfile
private lateinit var binding: ActivitySurveyBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_survey)
binding = ActivitySurveyBinding.inflate(layoutInflater)
setContentView(binding.root)
survey_id.text = InstanceId.instanceId()
binding.id.text = InstanceId.instanceId()
val profileStore = activePlugin.activeProfileInterface.profile
val profileList = profileStore?.getProfileList() ?: return
survey_spinner.adapter = ArrayAdapter(this, R.layout.spinner_centered, profileList)
binding.spinner.adapter = ArrayAdapter(this, R.layout.spinner_centered, profileList)
survey_tdds.text = tddCalculator.stats()
survey_tir.text = tirCalculator.stats()
survey_activity.text = activityMonitor.stats()
binding.tdds.text = tddCalculator.stats()
binding.tir.text = tirCalculator.stats()
binding.activity.text = activityMonitor.stats()
survey_profile.setOnClickListener {
val age = SafeParse.stringToDouble(survey_age.text.toString())
val weight = SafeParse.stringToDouble(survey_weight.text.toString())
val tdd = SafeParse.stringToDouble(survey_tdd.text.toString())
binding.profile.setOnClickListener {
val age = SafeParse.stringToDouble(binding.age.text.toString())
val weight = SafeParse.stringToDouble(binding.weight.text.toString())
val tdd = SafeParse.stringToDouble(binding.tdd.text.toString())
if (age < 1 || age > 120) {
ToastUtils.showToastInUiThread(this, R.string.invalidage)
return@setOnClickListener
@ -78,11 +80,11 @@ class SurveyActivity : NoSplashAppCompatActivity() {
}
}
survey_submit.setOnClickListener {
binding.submit.setOnClickListener {
val r = FirebaseRecord()
r.id = InstanceId.instanceId()
r.age = SafeParse.stringToInt(survey_age.text.toString())
r.weight = SafeParse.stringToInt(survey_weight.text.toString())
r.age = SafeParse.stringToInt(binding.age.text.toString())
r.weight = SafeParse.stringToInt(binding.weight.text.toString())
if (r.age < 1 || r.age > 120) {
ToastUtils.showToastInUiThread(this, R.string.invalidage)
return@setOnClickListener
@ -92,9 +94,9 @@ class SurveyActivity : NoSplashAppCompatActivity() {
return@setOnClickListener
}
if (survey_spinner.selectedItem == null)
if (binding.spinner.selectedItem == null)
return@setOnClickListener
val profileName = survey_spinner.selectedItem.toString()
val profileName = binding.spinner.selectedItem.toString()
val specificProfile = profileStore.getSpecificProfile(profileName)
r.profileJson = specificProfile.toString()
@ -121,6 +123,7 @@ class SurveyActivity : NoSplashAppCompatActivity() {
}
inner class FirebaseRecord {
var id = ""
var age: Int = 0
var weight: Int = 0

View file

@ -6,7 +6,6 @@ import info.nightscout.androidaps.MainActivity
import info.nightscout.androidaps.activities.*
import info.nightscout.androidaps.historyBrowser.HistoryBrowseActivity
import info.nightscout.androidaps.plugins.general.maintenance.activities.LogSettingActivity
import info.nightscout.androidaps.plugins.general.maintenance.activities.PrefImportListActivity
import info.nightscout.androidaps.plugins.general.openhumans.OpenHumansLoginActivity
import info.nightscout.androidaps.plugins.general.overview.activities.QuickWizardListActivity
import info.nightscout.androidaps.plugins.general.smsCommunicator.activities.SmsCommunicatorOtpActivity
@ -40,7 +39,6 @@ abstract class ActivitiesModule {
@ContributesAndroidInjector abstract fun contributesStatsActivity(): StatsActivity
@ContributesAndroidInjector abstract fun contributesSurveyActivity(): SurveyActivity
@ContributesAndroidInjector abstract fun contributesDefaultProfileActivity(): ProfileHelperActivity
@ContributesAndroidInjector abstract fun contributesPrefImportListActivity(): PrefImportListActivity
@ContributesAndroidInjector abstract fun contributesOpenHumansLoginActivity(): OpenHumansLoginActivity
}

View file

@ -12,6 +12,7 @@ import info.nightscout.androidaps.db.DatabaseHelperProvider
import info.nightscout.androidaps.interfaces.*
import info.nightscout.androidaps.plugins.configBuilder.ConfigBuilderPlugin
import info.nightscout.androidaps.plugins.configBuilder.PluginStore
import info.nightscout.androidaps.plugins.general.maintenance.ImportExportPrefs
import info.nightscout.androidaps.plugins.general.nsclient.UploadQueue
import info.nightscout.androidaps.plugins.treatments.TreatmentsPlugin
import info.nightscout.androidaps.queue.CommandQueue
@ -58,5 +59,6 @@ open class AppModule {
@Binds fun bindDatabaseHelperInterface(databaseHelperProvider: DatabaseHelperProvider): DatabaseHelperInterface
@Binds fun bindUploadQueueInterface(uploadQueue: UploadQueue): UploadQueueInterface
@Binds fun bindNotificationHolderInterface(notificationHolder: NotificationHolder): NotificationHolderInterface
@Binds fun bindImportExportPrefsInterface(importExportPrefs: ImportExportPrefs): ImportExportPrefsInterface
}
}

View file

@ -205,7 +205,7 @@ abstract class PluginsModule {
abstract fun bindLocalProfilePlugin(plugin: LocalProfilePlugin): PluginBase
@Binds
@APS
@AllConfigs
@IntoMap
@IntKey(250)
abstract fun bindAutomationPlugin(plugin: AutomationPlugin): PluginBase

View file

@ -2,7 +2,6 @@ package info.nightscout.androidaps.dependencyInjection
import dagger.Module
import dagger.android.ContributesAndroidInjector
import info.nightscout.androidaps.plugins.general.maintenance.ImportExportPrefs
import info.nightscout.androidaps.plugins.general.maintenance.PrefFileListProvider
import info.nightscout.androidaps.plugins.general.maintenance.formats.ClassicPrefsFormat
import info.nightscout.androidaps.plugins.general.maintenance.formats.EncryptedPrefsFormat
@ -13,7 +12,6 @@ import info.nightscout.androidaps.utils.CryptoUtil
abstract class PreferencesModule {
@ContributesAndroidInjector abstract fun cryptoUtilInjector(): CryptoUtil
@ContributesAndroidInjector abstract fun importExportPrefsInjector(): ImportExportPrefs
@ContributesAndroidInjector abstract fun encryptedPrefsFormatInjector(): EncryptedPrefsFormat
@ContributesAndroidInjector abstract fun classicPrefsFormatInjector(): ClassicPrefsFormat
@ContributesAndroidInjector abstract fun prefImportListProviderInjector(): PrefFileListProvider

View file

@ -12,6 +12,7 @@ import info.nightscout.androidaps.receivers.*
@Suppress("unused")
abstract class ReceiversModule {
@ContributesAndroidInjector abstract fun contributesAutoStartReceiver(): AutoStartReceiver
@ContributesAndroidInjector abstract fun contributesBTReceiver(): BTReceiver
@ContributesAndroidInjector abstract fun contributesChargingStateReceiver(): ChargingStateReceiver
@ContributesAndroidInjector abstract fun contributesDataReceiver(): DataReceiver

View file

@ -9,14 +9,13 @@ import dagger.android.HasAndroidInjector
import info.nightscout.androidaps.Constants
import info.nightscout.androidaps.R
import info.nightscout.androidaps.data.Profile
import info.nightscout.androidaps.databinding.DialogCalibrationBinding
import info.nightscout.androidaps.interfaces.ProfileFunction
import info.nightscout.androidaps.plugins.iob.iobCobCalculator.GlucoseStatus
import info.nightscout.androidaps.utils.HtmlHelper
import info.nightscout.androidaps.utils.alertDialogs.OKDialog
import info.nightscout.androidaps.utils.XdripCalibrations
import info.nightscout.androidaps.utils.alertDialogs.OKDialog
import info.nightscout.androidaps.utils.resources.ResourceHelper
import kotlinx.android.synthetic.main.dialog_calibration.*
import kotlinx.android.synthetic.main.okcancel.*
import java.text.DecimalFormat
import java.util.*
import javax.inject.Inject
@ -28,15 +27,22 @@ class CalibrationDialog : DialogFragmentWithDate() {
@Inject lateinit var profileFunction: ProfileFunction
@Inject lateinit var xdripCalibrations: XdripCalibrations
private var _binding: DialogCalibrationBinding? = null
// This property is only valid between onCreateView and
// onDestroyView.
private val binding get() = _binding!!
override fun onSaveInstanceState(savedInstanceState: Bundle) {
super.onSaveInstanceState(savedInstanceState)
savedInstanceState.putDouble("overview_calibration_bg", overview_calibration_bg.value)
savedInstanceState.putDouble("bg", binding.bg.value)
}
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?): View? {
savedInstanceState: Bundle?): View {
onCreateViewGeneral()
return inflater.inflate(R.layout.dialog_calibration, container, false)
_binding = DialogCalibrationBinding.inflate(inflater, container, false)
return binding.root
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
@ -46,23 +52,29 @@ class CalibrationDialog : DialogFragmentWithDate() {
val bg = Profile.fromMgdlToUnits(GlucoseStatus(injector).glucoseStatusData?.glucose
?: 0.0, units)
if (units == Constants.MMOL)
overview_calibration_bg.setParams(savedInstanceState?.getDouble("overview_calibration_bg")
?: bg, 2.0, 30.0, 0.1, DecimalFormat("0.0"), false, ok)
binding.bg.setParams(savedInstanceState?.getDouble("bg")
?: bg, 2.0, 30.0, 0.1, DecimalFormat("0.0"), false, binding.okcancel.ok)
else
overview_calibration_bg.setParams(savedInstanceState?.getDouble("overview_calibration_bg")
?: bg, 36.0, 500.0, 1.0, DecimalFormat("0"), false, ok)
overview_calibration_units.text = if (units == Constants.MMOL) resourceHelper.gs(R.string.mmol) else resourceHelper.gs(R.string.mgdl)
binding.bg.setParams(savedInstanceState?.getDouble("bg")
?: bg, 36.0, 500.0, 1.0, DecimalFormat("0"), false, binding.okcancel.ok)
binding.units.text = if (units == Constants.MMOL) resourceHelper.gs(R.string.mmol) else resourceHelper.gs(R.string.mgdl)
}
override fun onDestroyView() {
super.onDestroyView()
_binding = null
}
override fun submit(): Boolean {
if (_binding == null) return false
val units = profileFunction.getUnits()
val unitLabel = if (units == Constants.MMOL) resourceHelper.gs(R.string.mmol) else resourceHelper.gs(R.string.mgdl)
val actions: LinkedList<String?> = LinkedList()
val bg = overview_calibration_bg?.value ?: return false
val bg = binding.bg.value ?: return false
actions.add(resourceHelper.gs(R.string.treatments_wizard_bg_label) + ": " + Profile.toCurrentUnitsString(profileFunction, bg) + " " + unitLabel)
if (bg > 0) {
activity?.let { activity ->
OKDialog.showConfirmation(activity, resourceHelper.gs(R.string.overview_calibration), HtmlHelper.fromHtml(Joiner.on("<br/>").join(actions)), Runnable {
OKDialog.showConfirmation(activity, resourceHelper.gs(R.string.overview_calibration), HtmlHelper.fromHtml(Joiner.on("<br/>").join(actions)), {
aapsLogger.debug("USER ENTRY: CALIBRATION $bg")
xdripCalibrations.sendIntent(bg)
})

View file

@ -11,6 +11,7 @@ import info.nightscout.androidaps.Constants
import info.nightscout.androidaps.MainApp
import info.nightscout.androidaps.R
import info.nightscout.androidaps.data.Profile
import info.nightscout.androidaps.databinding.DialogCarbsBinding
import info.nightscout.androidaps.db.CareportalEvent
import info.nightscout.androidaps.db.Source
import info.nightscout.androidaps.db.TempTarget
@ -29,15 +30,13 @@ import info.nightscout.androidaps.utils.ToastUtils
import info.nightscout.androidaps.utils.alertDialogs.OKDialog
import info.nightscout.androidaps.utils.extensions.formatColor
import info.nightscout.androidaps.utils.resources.ResourceHelper
import kotlinx.android.synthetic.main.dialog_carbs.*
import kotlinx.android.synthetic.main.notes.*
import kotlinx.android.synthetic.main.okcancel.*
import java.text.DecimalFormat
import java.util.*
import javax.inject.Inject
import kotlin.math.max
class CarbsDialog : DialogFragmentWithDate() {
@Inject lateinit var mainApp: MainApp
@Inject lateinit var resourceHelper: ResourceHelper
@Inject lateinit var constraintChecker: ConstraintChecker
@ -49,6 +48,7 @@ class CarbsDialog : DialogFragmentWithDate() {
@Inject lateinit var carbsGenerator: CarbsGenerator
companion object {
private const val FAV1_DEFAULT = 5
private const val FAV2_DEFAULT = 10
private const val FAV3_DEFAULT = 20
@ -65,92 +65,105 @@ class CarbsDialog : DialogFragmentWithDate() {
private fun validateInputs() {
val maxCarbs = constraintChecker.getMaxCarbsAllowed().value().toDouble()
val time = overview_carbs_time.value.toInt()
val time = binding.time.value.toInt()
if (time > 12 * 60 || time < -12 * 60) {
overview_carbs_time.value = 0.0
binding.time.value = 0.0
ToastUtils.showToastInUiThread(mainApp, resourceHelper.gs(R.string.constraintapllied))
}
if (overview_carbs_duration.value > 10) {
overview_carbs_duration.value = 0.0
if (binding.duration.value > 10) {
binding.duration.value = 0.0
ToastUtils.showToastInUiThread(mainApp, resourceHelper.gs(R.string.constraintapllied))
}
if (overview_carbs_carbs.value.toInt() > maxCarbs) {
overview_carbs_carbs.value = 0.0
if (binding.carbs.value.toInt() > maxCarbs) {
binding.carbs.value = 0.0
ToastUtils.showToastInUiThread(mainApp, resourceHelper.gs(R.string.carbsconstraintapplied))
}
}
private var _binding: DialogCarbsBinding? = null
// This property is only valid between onCreateView and
// onDestroyView.
private val binding get() = _binding!!
override fun onSaveInstanceState(savedInstanceState: Bundle) {
super.onSaveInstanceState(savedInstanceState)
savedInstanceState.putDouble("overview_carbs_time", overview_carbs_time.value)
savedInstanceState.putDouble("overview_carbs_duration", overview_carbs_duration.value)
savedInstanceState.putDouble("overview_carbs_carbs", overview_carbs_carbs.value)
savedInstanceState.putDouble("time", binding.time.value)
savedInstanceState.putDouble("duration", binding.duration.value)
savedInstanceState.putDouble("carbs", binding.carbs.value)
}
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?): View? {
savedInstanceState: Bundle?): View {
onCreateViewGeneral()
return inflater.inflate(R.layout.dialog_carbs, container, false)
_binding = DialogCarbsBinding.inflate(inflater, container, false)
return binding.root
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
val maxCarbs = constraintChecker.getMaxCarbsAllowed().value().toDouble()
overview_carbs_time.setParams(savedInstanceState?.getDouble("overview_carbs_time")
?: 0.0, -12 * 60.0, 12 * 60.0, 5.0, DecimalFormat("0"), false, ok, textWatcher)
binding.time.setParams(savedInstanceState?.getDouble("time")
?: 0.0, -12 * 60.0, 12 * 60.0, 5.0, DecimalFormat("0"), false, binding.okcancel.ok, textWatcher)
overview_carbs_duration.setParams(savedInstanceState?.getDouble("overview_carbs_duration")
?: 0.0, 0.0, 10.0, 1.0, DecimalFormat("0"), false, ok, textWatcher)
binding.duration.setParams(savedInstanceState?.getDouble("duration")
?: 0.0, 0.0, 10.0, 1.0, DecimalFormat("0"), false, binding.okcancel.ok, textWatcher)
overview_carbs_carbs.setParams(savedInstanceState?.getDouble("overview_carbs_carbs")
?: 0.0, 0.0, maxCarbs, 1.0, DecimalFormat("0"), false, ok, textWatcher)
binding.carbs.setParams(savedInstanceState?.getDouble("carbs")
?: 0.0, 0.0, maxCarbs, 1.0, DecimalFormat("0"), false, binding.okcancel.ok, textWatcher)
overview_carbs_plus1.text = toSignedString(sp.getInt(R.string.key_carbs_button_increment_1, FAV1_DEFAULT))
overview_carbs_plus1.setOnClickListener {
overview_carbs_carbs.value = max(0.0, overview_carbs_carbs.value
binding.plus1.text = toSignedString(sp.getInt(R.string.key_carbs_button_increment_1, FAV1_DEFAULT))
binding.plus1.setOnClickListener {
binding.carbs.value = max(0.0, binding.carbs.value
+ sp.getInt(R.string.key_carbs_button_increment_1, FAV1_DEFAULT))
validateInputs()
}
overview_carbs_plus2.text = toSignedString(sp.getInt(R.string.key_carbs_button_increment_2, FAV2_DEFAULT))
overview_carbs_plus2.setOnClickListener {
overview_carbs_carbs.value = max(0.0, overview_carbs_carbs.value
binding.plus2.text = toSignedString(sp.getInt(R.string.key_carbs_button_increment_2, FAV2_DEFAULT))
binding.plus2.setOnClickListener {
binding.carbs.value = max(0.0, binding.carbs.value
+ sp.getInt(R.string.key_carbs_button_increment_2, FAV2_DEFAULT))
validateInputs()
}
overview_carbs_plus3.text = toSignedString(sp.getInt(R.string.key_carbs_button_increment_3, FAV3_DEFAULT))
overview_carbs_plus3.setOnClickListener {
overview_carbs_carbs.value = max(0.0, overview_carbs_carbs.value
binding.plus3.text = toSignedString(sp.getInt(R.string.key_carbs_button_increment_3, FAV3_DEFAULT))
binding.plus3.setOnClickListener {
binding.carbs.value = max(0.0, binding.carbs.value
+ sp.getInt(R.string.key_carbs_button_increment_3, FAV3_DEFAULT))
validateInputs()
}
iobCobCalculatorPlugin.actualBg()?.let { bgReading ->
if (bgReading.value < 72)
overview_carbs_hypo_tt.isChecked = true
binding.hypoTt.isChecked = true
}
overview_carbs_hypo_tt.setOnClickListener {
overview_carbs_activity_tt.isChecked = false
overview_carbs_eating_soon_tt.isChecked = false
binding.hypoTt.setOnClickListener {
binding.activityTt.isChecked = false
binding.eatingSoonTt.isChecked = false
}
overview_carbs_activity_tt.setOnClickListener {
overview_carbs_hypo_tt.isChecked = false
overview_carbs_eating_soon_tt.isChecked = false
binding.activityTt.setOnClickListener {
binding.hypoTt.isChecked = false
binding.eatingSoonTt.isChecked = false
}
overview_carbs_eating_soon_tt.setOnClickListener {
overview_carbs_hypo_tt.isChecked = false
overview_carbs_activity_tt.isChecked = false
binding.eatingSoonTt.setOnClickListener {
binding.hypoTt.isChecked = false
binding.activityTt.isChecked = false
}
}
override fun onDestroyView() {
super.onDestroyView()
_binding = null
}
private fun toSignedString(value: Int): String {
return if (value > 0) "+$value" else value.toString()
}
override fun submit(): Boolean {
val carbs = overview_carbs_carbs?.value?.toInt() ?: return false
if (_binding == null) return false
val carbs = binding.carbs.value?.toInt() ?: return false
val carbsAfterConstraints = constraintChecker.applyCarbsConstraints(Constraint(carbs)).value()
val units = profileFunction.getUnits()
val activityTTDuration = defaultValueHelper.determineActivityTTDuration()
@ -162,22 +175,22 @@ class CarbsDialog : DialogFragmentWithDate() {
val actions: LinkedList<String?> = LinkedList()
val unitLabel = if (units == Constants.MMOL) resourceHelper.gs(R.string.mmol) else resourceHelper.gs(R.string.mgdl)
val activitySelected = overview_carbs_activity_tt.isChecked
val activitySelected = binding.activityTt.isChecked
if (activitySelected)
actions.add(resourceHelper.gs(R.string.temptargetshort) + ": " + (DecimalFormatter.to1Decimal(activityTT) + " " + unitLabel + " (" + resourceHelper.gs(R.string.format_mins, activityTTDuration) + ")").formatColor(resourceHelper, R.color.tempTargetConfirmation))
val eatingSoonSelected = overview_carbs_eating_soon_tt.isChecked
val eatingSoonSelected = binding.eatingSoonTt.isChecked
if (eatingSoonSelected)
actions.add(resourceHelper.gs(R.string.temptargetshort) + ": " + (DecimalFormatter.to1Decimal(eatingSoonTT) + " " + unitLabel + " (" + resourceHelper.gs(R.string.format_mins, eatingSoonTTDuration) + ")").formatColor(resourceHelper, R.color.tempTargetConfirmation))
val hypoSelected = overview_carbs_hypo_tt.isChecked
val hypoSelected = binding.hypoTt.isChecked
if (hypoSelected)
actions.add(resourceHelper.gs(R.string.temptargetshort) + ": " + (DecimalFormatter.to1Decimal(hypoTT) + " " + unitLabel + " (" + resourceHelper.gs(R.string.format_mins, hypoTTDuration) + ")").formatColor(resourceHelper, R.color.tempTargetConfirmation))
val timeOffset = overview_carbs_time.value.toInt()
val timeOffset = binding.time.value.toInt()
eventTime -= eventTime % 1000
val time = eventTime + timeOffset * 1000 * 60
if (timeOffset != 0)
actions.add(resourceHelper.gs(R.string.time) + ": " + dateUtil.dateAndTimeString(time))
val duration = overview_carbs_duration.value.toInt()
val duration = binding.duration.value.toInt()
if (duration > 0)
actions.add(resourceHelper.gs(R.string.duration) + ": " + duration + resourceHelper.gs(R.string.shorthour))
if (carbsAfterConstraints > 0) {
@ -185,7 +198,7 @@ class CarbsDialog : DialogFragmentWithDate() {
if (carbsAfterConstraints != carbs)
actions.add("<font color='" + resourceHelper.gc(R.color.warning) + "'>" + resourceHelper.gs(R.string.carbsconstraintapplied) + "</font>")
}
val notes = notes.text.toString()
val notes = binding.notesLayout.notes.text.toString()
if (notes.isNotEmpty())
actions.add(resourceHelper.gs(R.string.careportal_newnstreatment_notes_label) + ": " + notes)
@ -194,7 +207,7 @@ class CarbsDialog : DialogFragmentWithDate() {
if (carbsAfterConstraints > 0 || activitySelected || eatingSoonSelected || hypoSelected) {
activity?.let { activity ->
OKDialog.showConfirmation(activity, resourceHelper.gs(R.string.carbs), HtmlHelper.fromHtml(Joiner.on("<br/>").join(actions)), Runnable {
OKDialog.showConfirmation(activity, resourceHelper.gs(R.string.carbs), HtmlHelper.fromHtml(Joiner.on("<br/>").join(actions)), {
when {
activitySelected -> {
aapsLogger.debug("USER ENTRY: TEMPTARGET ACTIVITY $activityTT duration: $activityTTDuration")

View file

@ -13,6 +13,7 @@ import info.nightscout.androidaps.Constants
import info.nightscout.androidaps.MainApp
import info.nightscout.androidaps.R
import info.nightscout.androidaps.data.Profile
import info.nightscout.androidaps.databinding.DialogCareBinding
import info.nightscout.androidaps.db.CareportalEvent
import info.nightscout.androidaps.db.Source
import info.nightscout.androidaps.interfaces.ProfileFunction
@ -23,15 +24,13 @@ import info.nightscout.androidaps.utils.HtmlHelper
import info.nightscout.androidaps.utils.Translator
import info.nightscout.androidaps.utils.alertDialogs.OKDialog
import info.nightscout.androidaps.utils.resources.ResourceHelper
import kotlinx.android.synthetic.main.dialog_care.*
import kotlinx.android.synthetic.main.notes.*
import kotlinx.android.synthetic.main.okcancel.*
import org.json.JSONObject
import java.text.DecimalFormat
import java.util.*
import javax.inject.Inject
class CareDialog : DialogFragmentWithDate() {
@Inject lateinit var injector: HasAndroidInjector
@Inject lateinit var mainApp: MainApp
@Inject lateinit var resourceHelper: ResourceHelper
@ -60,18 +59,25 @@ class CareDialog : DialogFragmentWithDate() {
return this
}
private var _binding: DialogCareBinding? = null
// This property is only valid between onCreateView and
// onDestroyView.
private val binding get() = _binding!!
override fun onSaveInstanceState(savedInstanceState: Bundle) {
super.onSaveInstanceState(savedInstanceState)
savedInstanceState.putDouble("actions_care_bg", actions_care_bg.value)
savedInstanceState.putDouble("actions_care_duration", actions_care_duration.value)
savedInstanceState.putDouble("bg", binding.bg.value)
savedInstanceState.putDouble("duration", binding.duration.value)
savedInstanceState.putInt("event", event)
savedInstanceState.putInt("options", options.ordinal)
}
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?): View? {
savedInstanceState: Bundle?): View {
onCreateViewGeneral()
return inflater.inflate(R.layout.dialog_care, container, false)
_binding = DialogCareBinding.inflate(inflater, container, false)
return binding.root
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
@ -82,7 +88,7 @@ class CareDialog : DialogFragmentWithDate() {
options = EventType.values()[savedInstanceState.getInt("options", 0)]
}
actions_care_icon.setImageResource(when (options) {
binding.icon.setImageResource(when (options) {
EventType.BGCHECK -> R.drawable.ic_cp_bgcheck
EventType.SENSOR_INSERT -> R.drawable.ic_cp_cgm_insert
EventType.BATTERY_CHANGE -> R.drawable.ic_cp_pump_battery
@ -91,7 +97,7 @@ class CareDialog : DialogFragmentWithDate() {
EventType.QUESTION -> R.drawable.ic_cp_question
EventType.ANNOUNCEMENT -> R.drawable.ic_cp_announcement
})
actions_care_title.text = resourceHelper.gs(when (options) {
binding.title.text = resourceHelper.gs(when (options) {
EventType.BGCHECK -> R.string.careportal_bgcheck
EventType.SENSOR_INSERT -> R.string.careportal_cgmsensorinsert
EventType.BATTERY_CHANGE -> R.string.careportal_pumpbatterychange
@ -104,21 +110,21 @@ class CareDialog : DialogFragmentWithDate() {
when (options) {
EventType.QUESTION,
EventType.ANNOUNCEMENT,
EventType.BGCHECK -> {
action_care_duration_layout.visibility = View.GONE
EventType.BGCHECK -> {
binding.durationLayout.visibility = View.GONE
}
EventType.SENSOR_INSERT,
EventType.BATTERY_CHANGE -> {
action_care_bg_layout.visibility = View.GONE
actions_care_bgsource.visibility = View.GONE
action_care_duration_layout.visibility = View.GONE
binding.bgLayout.visibility = View.GONE
binding.bgsource.visibility = View.GONE
binding.durationLayout.visibility = View.GONE
}
EventType.NOTE,
EventType.EXERCISE -> {
action_care_bg_layout.visibility = View.GONE
actions_care_bgsource.visibility = View.GONE
EventType.EXERCISE -> {
binding.bgLayout.visibility = View.GONE
binding.bgsource.visibility = View.GONE
}
}
@ -128,23 +134,28 @@ class CareDialog : DialogFragmentWithDate() {
override fun afterTextChanged(s: Editable) {}
override fun beforeTextChanged(s: CharSequence, start: Int, count: Int, after: Int) {}
override fun onTextChanged(s: CharSequence, start: Int, before: Int, count: Int) {
if (actions_care_sensor.isChecked) actions_care_meter.isChecked = true
if (binding.sensor.isChecked) binding.meter.isChecked = true
}
}
if (profileFunction.getUnits() == Constants.MMOL) {
actions_care_bgunits.text = resourceHelper.gs(R.string.mmol)
actions_care_bg.setParams(savedInstanceState?.getDouble("actions_care_bg")
?: bg, 2.0, 30.0, 0.1, DecimalFormat("0.0"), false, ok, bgTextWatcher)
binding.bgunits.text = resourceHelper.gs(R.string.mmol)
binding.bg.setParams(savedInstanceState?.getDouble("bg")
?: bg, 2.0, 30.0, 0.1, DecimalFormat("0.0"), false, binding.okcancel.ok, bgTextWatcher)
} else {
actions_care_bgunits.text = resourceHelper.gs(R.string.mgdl)
actions_care_bg.setParams(savedInstanceState?.getDouble("actions_care_bg")
?: bg, 36.0, 500.0, 1.0, DecimalFormat("0"), false, ok, bgTextWatcher)
binding.bgunits.text = resourceHelper.gs(R.string.mgdl)
binding.bg.setParams(savedInstanceState?.getDouble("bg")
?: bg, 36.0, 500.0, 1.0, DecimalFormat("0"), false, binding.okcancel.ok, bgTextWatcher)
}
actions_care_duration.setParams(savedInstanceState?.getDouble("actions_care_duration")
?: 0.0, 0.0, Constants.MAX_PROFILE_SWITCH_DURATION, 10.0, DecimalFormat("0"), false, ok)
binding.duration.setParams(savedInstanceState?.getDouble("duration")
?: 0.0, 0.0, Constants.MAX_PROFILE_SWITCH_DURATION, 10.0, DecimalFormat("0"), false, binding.okcancel.ok)
if (options == EventType.NOTE || options == EventType.QUESTION || options == EventType.ANNOUNCEMENT)
notes_layout?.visibility = View.VISIBLE // independent to preferences
binding.notesLayout.root.visibility = View.VISIBLE // independent to preferences
}
override fun onDestroyView() {
super.onDestroyView()
_binding = null
}
override fun submit(): Boolean {
@ -156,20 +167,20 @@ class CareDialog : DialogFragmentWithDate() {
if (options == EventType.BGCHECK || options == EventType.QUESTION || options == EventType.ANNOUNCEMENT) {
val type =
when {
actions_care_meter.isChecked -> CareportalEvent.FINGER
actions_care_sensor.isChecked -> CareportalEvent.SENSOR
else -> CareportalEvent.MANUAL
binding.meter.isChecked -> CareportalEvent.FINGER
binding.sensor.isChecked -> CareportalEvent.SENSOR
else -> CareportalEvent.MANUAL
}
actions.add(resourceHelper.gs(R.string.careportal_newnstreatment_glucosetype) + ": " + translator.translate(type))
actions.add(resourceHelper.gs(R.string.treatments_wizard_bg_label) + ": " + Profile.toCurrentUnitsString(profileFunction, actions_care_bg.value) + " " + resourceHelper.gs(unitResId))
json.put("glucose", actions_care_bg.value)
actions.add(resourceHelper.gs(R.string.treatments_wizard_bg_label) + ": " + Profile.toCurrentUnitsString(profileFunction, binding.bg.value) + " " + resourceHelper.gs(unitResId))
json.put("glucose", binding.bg.value)
json.put("glucoseType", type)
}
if (options == EventType.NOTE || options == EventType.EXERCISE) {
actions.add(resourceHelper.gs(R.string.careportal_newnstreatment_duration_label) + ": " + resourceHelper.gs(R.string.format_mins, actions_care_duration.value.toInt()))
json.put("duration", actions_care_duration.value.toInt())
actions.add(resourceHelper.gs(R.string.careportal_newnstreatment_duration_label) + ": " + resourceHelper.gs(R.string.format_mins, binding.duration.value.toInt()))
json.put("duration", binding.duration.value.toInt())
}
val notes = notes.text.toString()
val notes = binding.notesLayout.notes.text.toString()
if (notes.isNotEmpty()) {
actions.add(resourceHelper.gs(R.string.careportal_newnstreatment_notes_label) + ": " + notes)
json.put("notes", notes)
@ -195,7 +206,7 @@ class CareDialog : DialogFragmentWithDate() {
json.put("enteredBy", enteredBy)
activity?.let { activity ->
OKDialog.showConfirmation(activity, resourceHelper.gs(event), HtmlHelper.fromHtml(Joiner.on("<br/>").join(actions)), Runnable {
OKDialog.showConfirmation(activity, resourceHelper.gs(event), HtmlHelper.fromHtml(Joiner.on("<br/>").join(actions)), {
val careportalEvent = CareportalEvent(injector)
careportalEvent.date = eventTime
careportalEvent.source = Source.USER

View file

@ -8,6 +8,8 @@ import android.view.View
import android.view.ViewGroup
import android.view.Window
import android.view.WindowManager
import android.widget.Button
import android.widget.TextView
import androidx.fragment.app.FragmentManager
import dagger.android.support.DaggerDialogFragment
import info.nightscout.androidaps.R
@ -16,9 +18,6 @@ import info.nightscout.androidaps.logging.LTag
import info.nightscout.androidaps.utils.DateUtil
import info.nightscout.androidaps.utils.extensions.toVisibility
import info.nightscout.androidaps.utils.sharedPreferences.SP
import kotlinx.android.synthetic.main.datetime.*
import kotlinx.android.synthetic.main.notes.*
import kotlinx.android.synthetic.main.okcancel.*
import java.util.*
import javax.inject.Inject
@ -58,10 +57,14 @@ abstract class DialogFragmentWithDate : DaggerDialogFragment() {
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
val eventDateView = view.findViewById(R.id.eventdate) as TextView?
val eventTimeView = view.findViewById(R.id.eventtime) as TextView?
eventTime = savedInstanceState?.getLong("eventTime") ?: DateUtil.now()
eventTimeChanged = savedInstanceState?.getBoolean("eventTimeChanged") ?: false
overview_eventdate?.text = DateUtil.dateString(eventTime)
overview_eventtime?.text = dateUtil.timeString(eventTime)
eventDateView?.text = DateUtil.dateString(eventTime)
eventTimeView?.text = dateUtil.timeString(eventTime)
// create an OnDateSetListener
val dateSetListener = DatePickerDialog.OnDateSetListener { _, year, monthOfYear, dayOfMonth ->
@ -72,10 +75,10 @@ abstract class DialogFragmentWithDate : DaggerDialogFragment() {
cal.set(Calendar.DAY_OF_MONTH, dayOfMonth)
eventTime = cal.timeInMillis
eventTimeChanged = true
overview_eventdate?.text = DateUtil.dateString(eventTime)
eventDateView?.text = DateUtil.dateString(eventTime)
}
overview_eventdate?.setOnClickListener {
eventDateView?.setOnClickListener {
context?.let {
val cal = Calendar.getInstance()
cal.timeInMillis = eventTime
@ -96,10 +99,10 @@ abstract class DialogFragmentWithDate : DaggerDialogFragment() {
cal.set(Calendar.SECOND, seconds++) // randomize seconds to prevent creating record of the same time, if user choose time manually
eventTime = cal.timeInMillis
eventTimeChanged = true
overview_eventtime?.text = dateUtil.timeString(eventTime)
eventTimeView?.text = dateUtil.timeString(eventTime)
}
overview_eventtime?.setOnClickListener {
eventTimeView?.setOnClickListener {
context?.let {
val cal = Calendar.getInstance()
cal.timeInMillis = eventTime
@ -111,9 +114,9 @@ abstract class DialogFragmentWithDate : DaggerDialogFragment() {
}
}
notes_layout?.visibility = sp.getBoolean(R.string.key_show_notes_entry_dialogs, false).toVisibility()
(view.findViewById(R.id.notes_layout) as View?)?.visibility = sp.getBoolean(R.string.key_show_notes_entry_dialogs, false).toVisibility()
ok.setOnClickListener {
(view.findViewById(R.id.ok) as Button?)?.setOnClickListener {
synchronized(okClicked) {
if (okClicked) {
aapsLogger.warn(LTag.UI, "guarding: ok already clicked")
@ -124,7 +127,7 @@ abstract class DialogFragmentWithDate : DaggerDialogFragment() {
}
}
}
cancel.setOnClickListener { dismiss() }
(view.findViewById(R.id.cancel) as Button?)?.setOnClickListener { dismiss() }
}
override fun show(manager: FragmentManager, tag: String?) {

View file

@ -9,6 +9,7 @@ import android.view.ViewGroup
import com.google.common.base.Joiner
import info.nightscout.androidaps.R
import info.nightscout.androidaps.activities.ErrorHelperActivity
import info.nightscout.androidaps.databinding.DialogExtendedbolusBinding
import info.nightscout.androidaps.interfaces.ActivePluginProvider
import info.nightscout.androidaps.interfaces.CommandQueueProvider
import info.nightscout.androidaps.interfaces.Constraint
@ -19,8 +20,6 @@ import info.nightscout.androidaps.utils.SafeParse
import info.nightscout.androidaps.utils.alertDialogs.OKDialog
import info.nightscout.androidaps.utils.extensions.formatColor
import info.nightscout.androidaps.utils.resources.ResourceHelper
import kotlinx.android.synthetic.main.dialog_extendedbolus.*
import kotlinx.android.synthetic.main.okcancel.*
import java.text.DecimalFormat
import java.util.*
import javax.inject.Inject
@ -34,16 +33,23 @@ class ExtendedBolusDialog : DialogFragmentWithDate() {
@Inject lateinit var commandQueue: CommandQueueProvider
@Inject lateinit var activePlugin: ActivePluginProvider
private var _binding: DialogExtendedbolusBinding? = null
// This property is only valid between onCreateView and
// onDestroyView.
private val binding get() = _binding!!
override fun onSaveInstanceState(savedInstanceState: Bundle) {
super.onSaveInstanceState(savedInstanceState)
savedInstanceState.putDouble("actions_extendedbolus_insulin", actions_extendedbolus_insulin.value)
savedInstanceState.putDouble("actions_extendedbolus_duration", actions_extendedbolus_duration.value)
savedInstanceState.putDouble("insulin", binding.insulin.value)
savedInstanceState.putDouble("duration", binding.duration.value)
}
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?): View? {
savedInstanceState: Bundle?): View {
onCreateViewGeneral()
return inflater.inflate(R.layout.dialog_extendedbolus, container, false)
_binding = DialogExtendedbolusBinding.inflate(inflater, container, false)
return binding.root
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
@ -53,18 +59,24 @@ class ExtendedBolusDialog : DialogFragmentWithDate() {
val maxInsulin = constraintChecker.getMaxExtendedBolusAllowed().value()
val extendedStep = pumpDescription.extendedBolusStep
actions_extendedbolus_insulin.setParams(savedInstanceState?.getDouble("actions_extendedbolus_insulin")
?: extendedStep, extendedStep, maxInsulin, extendedStep, DecimalFormat("0.00"), false, ok)
binding.insulin.setParams(savedInstanceState?.getDouble("insulin")
?: extendedStep, extendedStep, maxInsulin, extendedStep, DecimalFormat("0.00"), false, binding.okcancel.ok)
val extendedDurationStep = pumpDescription.extendedBolusDurationStep
val extendedMaxDuration = pumpDescription.extendedBolusMaxDuration
actions_extendedbolus_duration.setParams(savedInstanceState?.getDouble("actions_extendedbolus_duration")
?: extendedDurationStep, extendedDurationStep, extendedMaxDuration, extendedDurationStep, DecimalFormat("0"), false, ok)
binding.duration.setParams(savedInstanceState?.getDouble("duration")
?: extendedDurationStep, extendedDurationStep, extendedMaxDuration, extendedDurationStep, DecimalFormat("0"), false, binding.okcancel.ok)
}
override fun onDestroyView() {
super.onDestroyView()
_binding = null
}
override fun submit(): Boolean {
val insulin = SafeParse.stringToDouble(actions_extendedbolus_insulin?.text ?: return false)
val durationInMinutes = actions_extendedbolus_duration.value.toInt()
if (_binding == null) return false
val insulin = SafeParse.stringToDouble(binding.insulin.text ?: return false)
val durationInMinutes = binding.duration.value.toInt()
val actions: LinkedList<String> = LinkedList()
val insulinAfterConstraint = constraintChecker.applyExtendedBolusConstraints(Constraint(insulin)).value()
actions.add(resourceHelper.gs(R.string.formatinsulinunits, insulinAfterConstraint))
@ -73,7 +85,7 @@ class ExtendedBolusDialog : DialogFragmentWithDate() {
actions.add(resourceHelper.gs(R.string.constraintapllied).formatColor(resourceHelper, R.color.warning))
activity?.let { activity ->
OKDialog.showConfirmation(activity, resourceHelper.gs(R.string.extended_bolus), HtmlHelper.fromHtml(Joiner.on("<br/>").join(actions)), Runnable {
OKDialog.showConfirmation(activity, resourceHelper.gs(R.string.extended_bolus), HtmlHelper.fromHtml(Joiner.on("<br/>").join(actions)), {
aapsLogger.debug("USER ENTRY: EXTENDED BOLUS $insulinAfterConstraint duration: $durationInMinutes")
commandQueue.extendedBolus(insulinAfterConstraint, durationInMinutes, object : Callback() {
override fun run() {

View file

@ -10,6 +10,7 @@ import com.google.common.base.Joiner
import info.nightscout.androidaps.R
import info.nightscout.androidaps.activities.ErrorHelperActivity
import info.nightscout.androidaps.data.DetailedBolusInfo
import info.nightscout.androidaps.databinding.DialogFillBinding
import info.nightscout.androidaps.db.CareportalEvent
import info.nightscout.androidaps.db.Source
import info.nightscout.androidaps.interfaces.ActivePluginProvider
@ -24,14 +25,12 @@ import info.nightscout.androidaps.utils.SafeParse
import info.nightscout.androidaps.utils.alertDialogs.OKDialog
import info.nightscout.androidaps.utils.extensions.formatColor
import info.nightscout.androidaps.utils.resources.ResourceHelper
import kotlinx.android.synthetic.main.dialog_fill.*
import kotlinx.android.synthetic.main.notes.*
import kotlinx.android.synthetic.main.okcancel.*
import java.util.*
import javax.inject.Inject
import kotlin.math.abs
class FillDialog : DialogFragmentWithDate() {
@Inject lateinit var constraintChecker: ConstraintChecker
@Inject lateinit var resourceHelper: ResourceHelper
@Inject lateinit var ctx: Context
@ -39,15 +38,22 @@ class FillDialog : DialogFragmentWithDate() {
@Inject lateinit var commandQueue: CommandQueueProvider
@Inject lateinit var activePlugin: ActivePluginProvider
private var _binding: DialogFillBinding? = null
// This property is only valid between onCreateView and
// onDestroyView.
private val binding get() = _binding!!
override fun onSaveInstanceState(savedInstanceState: Bundle) {
super.onSaveInstanceState(savedInstanceState)
savedInstanceState.putDouble("fill_insulin_amount", fill_insulinamount.value)
savedInstanceState.putDouble("fill_insulin_amount", binding.fillInsulinamount.value)
}
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?): View? {
savedInstanceState: Bundle?): View {
onCreateViewGeneral()
return inflater.inflate(R.layout.dialog_fill, container, false)
_binding = DialogFillBinding.inflate(inflater, container, false)
return binding.root
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
@ -55,37 +61,43 @@ class FillDialog : DialogFragmentWithDate() {
val maxInsulin = constraintChecker.getMaxBolusAllowed().value()
val bolusStep = activePlugin.activePump.pumpDescription.bolusStep
fill_insulinamount.setParams(savedInstanceState?.getDouble("fill_insulin_amount")
?: 0.0, 0.0, maxInsulin, bolusStep, DecimalFormatter.pumpSupportedBolusFormat(activePlugin.activePump), true, ok)
binding.fillInsulinamount.setParams(savedInstanceState?.getDouble("fill_insulin_amount")
?: 0.0, 0.0, maxInsulin, bolusStep, DecimalFormatter.pumpSupportedBolusFormat(activePlugin.activePump), true, binding.okcancel.ok)
val amount1 = sp.getDouble("fill_button1", 0.3)
if (amount1 > 0) {
fill_preset_button1.visibility = View.VISIBLE
fill_preset_button1.text = DecimalFormatter.toPumpSupportedBolus(amount1, activePlugin.activePump) // + "U");
fill_preset_button1.setOnClickListener { fill_insulinamount.value = amount1 }
binding.fillPresetButton1.visibility = View.VISIBLE
binding.fillPresetButton1.text = DecimalFormatter.toPumpSupportedBolus(amount1, activePlugin.activePump) // + "U");
binding.fillPresetButton1.setOnClickListener { binding.fillInsulinamount.value = amount1 }
} else {
fill_preset_button1.visibility = View.GONE
binding.fillPresetButton1.visibility = View.GONE
}
val amount2 = sp.getDouble("fill_button2", 0.0)
if (amount2 > 0) {
fill_preset_button2.visibility = View.VISIBLE
fill_preset_button2.text = DecimalFormatter.toPumpSupportedBolus(amount2, activePlugin.activePump) // + "U");
fill_preset_button2.setOnClickListener { fill_insulinamount.value = amount2 }
binding.fillPresetButton2.visibility = View.VISIBLE
binding.fillPresetButton2.text = DecimalFormatter.toPumpSupportedBolus(amount2, activePlugin.activePump) // + "U");
binding.fillPresetButton2.setOnClickListener { binding.fillInsulinamount.value = amount2 }
} else {
fill_preset_button2.visibility = View.GONE
binding.fillPresetButton2.visibility = View.GONE
}
val amount3 = sp.getDouble("fill_button3", 0.0)
if (amount3 > 0) {
fill_preset_button3.visibility = View.VISIBLE
fill_preset_button3.text = DecimalFormatter.toPumpSupportedBolus(amount3, activePlugin.activePump) // + "U");
fill_preset_button3.setOnClickListener { fill_insulinamount.value = amount3 }
binding.fillPresetButton3.visibility = View.VISIBLE
binding.fillPresetButton3.text = DecimalFormatter.toPumpSupportedBolus(amount3, activePlugin.activePump) // + "U");
binding.fillPresetButton3.setOnClickListener { binding.fillInsulinamount.value = amount3 }
} else {
fill_preset_button3.visibility = View.GONE
binding.fillPresetButton3.visibility = View.GONE
}
}
override fun onDestroyView() {
super.onDestroyView()
_binding = null
}
override fun submit(): Boolean {
val insulin = SafeParse.stringToDouble(fill_insulinamount?.text ?: return false)
if (_binding == null) return false
val insulin = SafeParse.stringToDouble(binding.fillInsulinamount.text ?: return false)
val actions: LinkedList<String?> = LinkedList()
val insulinAfterConstraints = constraintChecker.applyBolusConstraints(Constraint(insulin)).value()
@ -96,13 +108,13 @@ class FillDialog : DialogFragmentWithDate() {
if (abs(insulinAfterConstraints - insulin) > 0.01)
actions.add(resourceHelper.gs(R.string.bolusconstraintappliedwarn, insulin, insulinAfterConstraints).formatColor(resourceHelper, R.color.warning))
}
val siteChange = fill_catheter_change.isChecked
val siteChange = binding.fillCatheterChange.isChecked
if (siteChange)
actions.add(resourceHelper.gs(R.string.record_pump_site_change).formatColor(resourceHelper, R.color.actionsConfirm))
val insulinChange = fill_cartridge_change.isChecked
val insulinChange = binding.fillCartridgeChange.isChecked
if (insulinChange)
actions.add(resourceHelper.gs(R.string.record_insulin_cartridge_change).formatColor(resourceHelper, R.color.actionsConfirm))
val notes = notes.text.toString()
val notes = binding.notesLayout.notes.text.toString()
if (notes.isNotEmpty())
actions.add(resourceHelper.gs(R.string.careportal_newnstreatment_notes_label) + ": " + notes)
eventTime -= eventTime % 1000
@ -110,9 +122,9 @@ class FillDialog : DialogFragmentWithDate() {
if (eventTimeChanged)
actions.add(resourceHelper.gs(R.string.time) + ": " + dateUtil.dateAndTimeString(eventTime))
if (insulinAfterConstraints > 0 || fill_catheter_change.isChecked || fill_cartridge_change.isChecked) {
if (insulinAfterConstraints > 0 || binding.fillCatheterChange.isChecked || binding.fillCartridgeChange.isChecked) {
activity?.let { activity ->
OKDialog.showConfirmation(activity, resourceHelper.gs(R.string.primefill), HtmlHelper.fromHtml(Joiner.on("<br/>").join(actions)), Runnable {
OKDialog.showConfirmation(activity, resourceHelper.gs(R.string.primefill), HtmlHelper.fromHtml(Joiner.on("<br/>").join(actions)), {
if (insulinAfterConstraints > 0) {
aapsLogger.debug("USER ENTRY: PRIME BOLUS $insulinAfterConstraints")
requestPrimeBolus(insulinAfterConstraints, notes)

View file

@ -15,14 +15,15 @@ import info.nightscout.androidaps.R
import info.nightscout.androidaps.activities.ErrorHelperActivity
import info.nightscout.androidaps.data.DetailedBolusInfo
import info.nightscout.androidaps.data.Profile
import info.nightscout.androidaps.databinding.DialogInsulinBinding
import info.nightscout.androidaps.db.CareportalEvent
import info.nightscout.androidaps.db.Source
import info.nightscout.androidaps.db.TempTarget
import info.nightscout.androidaps.interfaces.ActivePluginProvider
import info.nightscout.androidaps.interfaces.CommandQueueProvider
import info.nightscout.androidaps.interfaces.Constraint
import info.nightscout.androidaps.plugins.configBuilder.ConstraintChecker
import info.nightscout.androidaps.interfaces.ProfileFunction
import info.nightscout.androidaps.plugins.configBuilder.ConstraintChecker
import info.nightscout.androidaps.queue.Callback
import info.nightscout.androidaps.utils.*
import info.nightscout.androidaps.utils.alertDialogs.OKDialog
@ -30,9 +31,6 @@ import info.nightscout.androidaps.utils.extensions.formatColor
import info.nightscout.androidaps.utils.extensions.toSignedString
import info.nightscout.androidaps.utils.extensions.toVisibility
import info.nightscout.androidaps.utils.resources.ResourceHelper
import kotlinx.android.synthetic.main.dialog_insulin.*
import kotlinx.android.synthetic.main.notes.*
import kotlinx.android.synthetic.main.okcancel.*
import java.text.DecimalFormat
import java.util.*
import javax.inject.Inject
@ -40,6 +38,7 @@ import kotlin.math.abs
import kotlin.math.max
class InsulinDialog : DialogFragmentWithDate() {
@Inject lateinit var constraintChecker: ConstraintChecker
@Inject lateinit var resourceHelper: ResourceHelper
@Inject lateinit var defaultValueHelper: DefaultValueHelper
@ -50,6 +49,7 @@ class InsulinDialog : DialogFragmentWithDate() {
@Inject lateinit var config: Config
companion object {
private const val PLUS1_DEFAULT = 0.5
private const val PLUS2_DEFAULT = 1.0
private const val PLUS3_DEFAULT = 2.0
@ -64,78 +64,91 @@ class InsulinDialog : DialogFragmentWithDate() {
override fun onTextChanged(s: CharSequence, start: Int, before: Int, count: Int) {}
}
private var _binding: DialogInsulinBinding? = null
// This property is only valid between onCreateView and
// onDestroyView.
private val binding get() = _binding!!
private fun validateInputs() {
val maxInsulin = constraintChecker.getMaxBolusAllowed().value()
if (abs(overview_insulin_time.value.toInt()) > 12 * 60) {
overview_insulin_time.value = 0.0
if (abs(binding.time.value.toInt()) > 12 * 60) {
binding.time.value = 0.0
ToastUtils.showToastInUiThread(context, resourceHelper.gs(R.string.constraintapllied))
}
if (overview_insulin_amount.value > maxInsulin) {
overview_insulin_amount.value = 0.0
if (binding.amount.value > maxInsulin) {
binding.amount.value = 0.0
ToastUtils.showToastInUiThread(context, resourceHelper.gs(R.string.bolusconstraintapplied))
}
}
override fun onSaveInstanceState(savedInstanceState: Bundle) {
super.onSaveInstanceState(savedInstanceState)
savedInstanceState.putDouble("overview_insulin_time", overview_insulin_time.value)
savedInstanceState.putDouble("overview_insulin_amount", overview_insulin_amount.value)
savedInstanceState.putDouble("time", binding.time.value)
savedInstanceState.putDouble("amount", binding.amount.value)
}
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?): View? {
savedInstanceState: Bundle?): View {
onCreateViewGeneral()
return inflater.inflate(R.layout.dialog_insulin, container, false)
_binding = DialogInsulinBinding.inflate(inflater, container, false)
return binding.root
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
if (config.NSCLIENT) {
overview_insulin_record_only.isChecked = true
overview_insulin_record_only.isEnabled = false
binding.recordOnly.isChecked = true
binding.recordOnly.isEnabled = false
}
val maxInsulin = constraintChecker.getMaxBolusAllowed().value()
overview_insulin_time.setParams(savedInstanceState?.getDouble("overview_insulin_time")
?: 0.0, -12 * 60.0, 12 * 60.0, 5.0, DecimalFormat("0"), false, ok, textWatcher)
overview_insulin_amount.setParams(savedInstanceState?.getDouble("overview_insulin_amount")
?: 0.0, 0.0, maxInsulin, activePlugin.activePump.pumpDescription.bolusStep, DecimalFormatter.pumpSupportedBolusFormat(activePlugin.activePump), false, ok, textWatcher)
binding.time.setParams(savedInstanceState?.getDouble("time")
?: 0.0, -12 * 60.0, 12 * 60.0, 5.0, DecimalFormat("0"), false, binding.okcancel.ok, textWatcher)
binding.amount.setParams(savedInstanceState?.getDouble("amount")
?: 0.0, 0.0, maxInsulin, activePlugin.activePump.pumpDescription.bolusStep, DecimalFormatter.pumpSupportedBolusFormat(activePlugin.activePump), false, binding.okcancel.ok, textWatcher)
overview_insulin_plus05.text = sp.getDouble(resourceHelper.gs(R.string.key_insulin_button_increment_1), PLUS1_DEFAULT).toSignedString(activePlugin.activePump)
overview_insulin_plus05.setOnClickListener {
overview_insulin_amount.value = max(0.0, overview_insulin_amount.value
binding.plus05.text = sp.getDouble(resourceHelper.gs(R.string.key_insulin_button_increment_1), PLUS1_DEFAULT).toSignedString(activePlugin.activePump)
binding.plus05.setOnClickListener {
binding.amount.value = max(0.0, binding.amount.value
+ sp.getDouble(resourceHelper.gs(R.string.key_insulin_button_increment_1), PLUS1_DEFAULT))
validateInputs()
}
overview_insulin_plus10.text = sp.getDouble(resourceHelper.gs(R.string.key_insulin_button_increment_2), PLUS2_DEFAULT).toSignedString(activePlugin.activePump)
overview_insulin_plus10.setOnClickListener {
overview_insulin_amount.value = max(0.0, overview_insulin_amount.value
binding.plus10.text = sp.getDouble(resourceHelper.gs(R.string.key_insulin_button_increment_2), PLUS2_DEFAULT).toSignedString(activePlugin.activePump)
binding.plus10.setOnClickListener {
binding.amount.value = max(0.0, binding.amount.value
+ sp.getDouble(resourceHelper.gs(R.string.key_insulin_button_increment_2), PLUS2_DEFAULT))
validateInputs()
}
overview_insulin_plus20.text = sp.getDouble(resourceHelper.gs(R.string.key_insulin_button_increment_3), PLUS3_DEFAULT).toSignedString(activePlugin.activePump)
overview_insulin_plus20.setOnClickListener {
overview_insulin_amount.value = max(0.0, overview_insulin_amount.value
binding.plus20.text = sp.getDouble(resourceHelper.gs(R.string.key_insulin_button_increment_3), PLUS3_DEFAULT).toSignedString(activePlugin.activePump)
binding.plus20.setOnClickListener {
binding.amount.value = max(0.0, binding.amount.value
+ sp.getDouble(resourceHelper.gs(R.string.key_insulin_button_increment_3), PLUS3_DEFAULT))
validateInputs()
}
overview_insulin_time_layout.visibility = View.GONE
overview_insulin_record_only.setOnCheckedChangeListener { _, isChecked: Boolean ->
overview_insulin_time_layout.visibility = isChecked.toVisibility()
binding.timeLayout.visibility = View.GONE
binding.recordOnly.setOnCheckedChangeListener { _, isChecked: Boolean ->
binding.timeLayout.visibility = isChecked.toVisibility()
}
}
override fun onDestroyView() {
super.onDestroyView()
_binding = null
}
override fun submit(): Boolean {
if (_binding == null) return false
val pumpDescription = activePlugin.activePump.pumpDescription
val insulin = SafeParse.stringToDouble(overview_insulin_amount?.text ?: return false)
val insulin = SafeParse.stringToDouble(binding.amount.text ?: return false)
val insulinAfterConstraints = constraintChecker.applyBolusConstraints(Constraint(insulin)).value()
val actions: LinkedList<String?> = LinkedList()
val units = profileFunction.getUnits()
val unitLabel = if (units == Constants.MMOL) resourceHelper.gs(R.string.mmol) else resourceHelper.gs(R.string.mgdl)
val recordOnlyChecked = overview_insulin_record_only.isChecked
val eatingSoonChecked = overview_insulin_start_eating_soon_tt.isChecked
val recordOnlyChecked = binding.recordOnly.isChecked
val eatingSoonChecked = binding.startEatingSoonTt.isChecked
if (insulinAfterConstraints > 0) {
actions.add(resourceHelper.gs(R.string.bolus) + ": " + DecimalFormatter.toPumpSupportedBolus(insulinAfterConstraints, activePlugin.activePump, resourceHelper).formatColor(resourceHelper, R.color.bolus))
@ -149,18 +162,18 @@ class InsulinDialog : DialogFragmentWithDate() {
if (eatingSoonChecked)
actions.add(resourceHelper.gs(R.string.temptargetshort) + ": " + (DecimalFormatter.to1Decimal(eatingSoonTT) + " " + unitLabel + " (" + resourceHelper.gs(R.string.format_mins, eatingSoonTTDuration) + ")").formatColor(resourceHelper, R.color.tempTargetConfirmation))
val timeOffset = overview_insulin_time.value.toInt()
val timeOffset = binding.time.value.toInt()
val time = DateUtil.now() + T.mins(timeOffset.toLong()).msecs()
if (timeOffset != 0)
actions.add(resourceHelper.gs(R.string.time) + ": " + dateUtil.dateAndTimeString(time))
val notes = notes.text.toString()
val notes = binding.notesLayout.notes.text.toString()
if (notes.isNotEmpty())
actions.add(resourceHelper.gs(R.string.careportal_newnstreatment_notes_label) + ": " + notes)
if (insulinAfterConstraints > 0 || eatingSoonChecked) {
activity?.let { activity ->
OKDialog.showConfirmation(activity, resourceHelper.gs(R.string.bolus), HtmlHelper.fromHtml(Joiner.on("<br/>").join(actions)), Runnable {
OKDialog.showConfirmation(activity, resourceHelper.gs(R.string.bolus), HtmlHelper.fromHtml(Joiner.on("<br/>").join(actions)), {
if (eatingSoonChecked) {
aapsLogger.debug("USER ENTRY: TEMPTARGET EATING SOON $eatingSoonTT duration: $eatingSoonTTDuration")
val tempTarget = TempTarget()

View file

@ -8,6 +8,7 @@ import android.widget.ArrayAdapter
import com.google.common.base.Joiner
import info.nightscout.androidaps.Constants
import info.nightscout.androidaps.R
import info.nightscout.androidaps.databinding.DialogProfileswitchBinding
import info.nightscout.androidaps.interfaces.ActivePluginProvider
import info.nightscout.androidaps.interfaces.ProfileFunction
import info.nightscout.androidaps.plugins.treatments.TreatmentsPlugin
@ -15,46 +16,51 @@ import info.nightscout.androidaps.utils.DateUtil
import info.nightscout.androidaps.utils.HtmlHelper
import info.nightscout.androidaps.utils.alertDialogs.OKDialog
import info.nightscout.androidaps.utils.resources.ResourceHelper
import kotlinx.android.synthetic.main.dialog_profileswitch.*
import kotlinx.android.synthetic.main.notes.*
import kotlinx.android.synthetic.main.okcancel.*
import java.text.DecimalFormat
import java.util.*
import javax.inject.Inject
class ProfileSwitchDialog : DialogFragmentWithDate() {
@Inject lateinit var resourceHelper: ResourceHelper
@Inject lateinit var profileFunction: ProfileFunction
@Inject lateinit var treatmentsPlugin: TreatmentsPlugin
@Inject lateinit var activePlugin: ActivePluginProvider
var profileIndex: Int? = null
private var profileIndex: Int? = null
private var _binding: DialogProfileswitchBinding? = null
// This property is only valid between onCreateView and
// onDestroyView.
private val binding get() = _binding!!
override fun onSaveInstanceState(savedInstanceState: Bundle) {
super.onSaveInstanceState(savedInstanceState)
savedInstanceState.putDouble("overview_profileswitch_duration", overview_profileswitch_duration.value)
savedInstanceState.putDouble("overview_profileswitch_percentage", overview_profileswitch_percentage.value)
savedInstanceState.putDouble("overview_profileswitch_timeshift", overview_profileswitch_timeshift.value)
savedInstanceState.putDouble("duration", binding.duration.value)
savedInstanceState.putDouble("percentage", binding.percentage.value)
savedInstanceState.putDouble("timeshift", binding.timeshift.value)
}
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?): View? {
savedInstanceState: Bundle?): View {
onCreateViewGeneral()
arguments?.let { bundle ->
profileIndex = bundle.getInt("profileIndex", 0)
}
return inflater.inflate(R.layout.dialog_profileswitch, container, false)
_binding = DialogProfileswitchBinding.inflate(inflater, container, false)
return binding.root
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
overview_profileswitch_duration.setParams(savedInstanceState?.getDouble("overview_profileswitch_duration")
?: 0.0, 0.0, Constants.MAX_PROFILE_SWITCH_DURATION, 10.0, DecimalFormat("0"), false, ok)
overview_profileswitch_percentage.setParams(savedInstanceState?.getDouble("overview_profileswitch_percentage")
?: 100.0, Constants.CPP_MIN_PERCENTAGE.toDouble(), Constants.CPP_MAX_PERCENTAGE.toDouble(), 5.0, DecimalFormat("0"), false, ok)
overview_profileswitch_timeshift.setParams(savedInstanceState?.getDouble("overview_profileswitch_timeshift")
?: 0.0, Constants.CPP_MIN_TIMESHIFT.toDouble(), Constants.CPP_MAX_TIMESHIFT.toDouble(), 1.0, DecimalFormat("0"), false, ok)
binding.duration.setParams(savedInstanceState?.getDouble("duration")
?: 0.0, 0.0, Constants.MAX_PROFILE_SWITCH_DURATION, 10.0, DecimalFormat("0"), false, binding.okcancel.ok)
binding.percentage.setParams(savedInstanceState?.getDouble("percentage")
?: 100.0, Constants.CPP_MIN_PERCENTAGE.toDouble(), Constants.CPP_MAX_PERCENTAGE.toDouble(), 5.0, DecimalFormat("0"), false, binding.okcancel.ok)
binding.timeshift.setParams(savedInstanceState?.getDouble("timeshift")
?: 0.0, Constants.CPP_MIN_TIMESHIFT.toDouble(), Constants.CPP_MAX_TIMESHIFT.toDouble(), 1.0, DecimalFormat("0"), false, binding.okcancel.ok)
// profile
context?.let { context ->
@ -62,54 +68,60 @@ class ProfileSwitchDialog : DialogFragmentWithDate() {
?: return
val profileList = profileStore.getProfileList()
val adapter = ArrayAdapter(context, R.layout.spinner_centered, profileList)
overview_profileswitch_profile.adapter = adapter
binding.profile.adapter = adapter
// set selected to actual profile
if (profileIndex != null)
overview_profileswitch_profile.setSelection(profileIndex as Int)
binding.profile.setSelection(profileIndex as Int)
else
for (p in profileList.indices)
if (profileList[p] == profileFunction.getProfileName(false))
overview_profileswitch_profile.setSelection(p)
binding.profile.setSelection(p)
} ?: return
treatmentsPlugin.getProfileSwitchFromHistory(DateUtil.now())?.let { ps ->
if (ps.isCPP) {
overview_profileswitch_reuselayout.visibility = View.VISIBLE
overview_profileswitch_reusebutton.text = resourceHelper.gs(R.string.reuse) + " " + ps.percentage + "% " + ps.timeshift + "h"
overview_profileswitch_reusebutton.setOnClickListener {
overview_profileswitch_percentage.value = ps.percentage.toDouble()
overview_profileswitch_timeshift.value = ps.timeshift.toDouble()
binding.reuselayout.visibility = View.VISIBLE
binding.reusebutton.text = resourceHelper.gs(R.string.reuse_profile_pct_hours, ps.percentage, ps.timeshift)
binding.reusebutton.setOnClickListener {
binding.percentage.value = ps.percentage.toDouble()
binding.timeshift.value = ps.timeshift.toDouble()
}
} else {
overview_profileswitch_reuselayout.visibility = View.GONE
binding.reuselayout.visibility = View.GONE
}
}
}
override fun onDestroyView() {
super.onDestroyView()
_binding = null
}
override fun submit(): Boolean {
if (_binding == null) return false
val profileStore = activePlugin.activeProfileInterface.profile
?: return false
val actions: LinkedList<String> = LinkedList()
val duration = overview_profileswitch_duration?.value?.toInt() ?: return false
val duration = binding.duration.value?.toInt() ?: return false
if (duration > 0)
actions.add(resourceHelper.gs(R.string.duration) + ": " + resourceHelper.gs(R.string.format_mins, duration))
val profile = overview_profileswitch_profile.selectedItem.toString()
val profile = binding.profile.selectedItem.toString()
actions.add(resourceHelper.gs(R.string.profile) + ": " + profile)
val percent = overview_profileswitch_percentage.value.toInt()
val percent = binding.percentage.value.toInt()
if (percent != 100)
actions.add(resourceHelper.gs(R.string.percent) + ": " + percent + "%")
val timeShift = overview_profileswitch_timeshift.value.toInt()
val timeShift = binding.timeshift.value.toInt()
if (timeShift != 0)
actions.add(resourceHelper.gs(R.string.careportal_newnstreatment_timeshift_label) + ": " + resourceHelper.gs(R.string.format_hours, timeShift.toDouble()))
val notes = notes.text.toString()
val notes = binding.notesLayout.notes.text.toString()
if (notes.isNotEmpty())
actions.add(resourceHelper.gs(R.string.careportal_newnstreatment_notes_label) + ": " + notes)
if (eventTimeChanged)
actions.add(resourceHelper.gs(R.string.time) + ": " + dateUtil.dateAndTimeString(eventTime))
activity?.let { activity ->
OKDialog.showConfirmation(activity, resourceHelper.gs(R.string.careportal_profileswitch), HtmlHelper.fromHtml(Joiner.on("<br/>").join(actions)), Runnable {
OKDialog.showConfirmation(activity, resourceHelper.gs(R.string.careportal_profileswitch), HtmlHelper.fromHtml(Joiner.on("<br/>").join(actions)), {
aapsLogger.debug("USER ENTRY: PROFILE SWITCH $profile percent: $percent timeshift: $timeShift duration: $duration")
treatmentsPlugin.doProfileSwitch(profileStore, profile, duration, percent, timeShift, eventTime)
})

View file

@ -9,26 +9,26 @@ import android.view.ViewGroup
import com.google.common.base.Joiner
import info.nightscout.androidaps.R
import info.nightscout.androidaps.activities.ErrorHelperActivity
import info.nightscout.androidaps.databinding.DialogTempbasalBinding
import info.nightscout.androidaps.interfaces.ActivePluginProvider
import info.nightscout.androidaps.interfaces.CommandQueueProvider
import info.nightscout.androidaps.interfaces.Constraint
import info.nightscout.androidaps.interfaces.ProfileFunction
import info.nightscout.androidaps.interfaces.PumpDescription
import info.nightscout.androidaps.plugins.configBuilder.ConstraintChecker
import info.nightscout.androidaps.interfaces.ProfileFunction
import info.nightscout.androidaps.queue.Callback
import info.nightscout.androidaps.utils.HtmlHelper
import info.nightscout.androidaps.utils.alertDialogs.OKDialog
import info.nightscout.androidaps.utils.SafeParse
import info.nightscout.androidaps.utils.alertDialogs.OKDialog
import info.nightscout.androidaps.utils.extensions.formatColor
import info.nightscout.androidaps.utils.resources.ResourceHelper
import kotlinx.android.synthetic.main.dialog_tempbasal.*
import kotlinx.android.synthetic.main.okcancel.*
import java.text.DecimalFormat
import java.util.*
import javax.inject.Inject
import kotlin.math.abs
class TempBasalDialog : DialogFragmentWithDate() {
@Inject lateinit var constraintChecker: ConstraintChecker
@Inject lateinit var resourceHelper: ResourceHelper
@Inject lateinit var profileFunction: ProfileFunction
@ -38,17 +38,24 @@ class TempBasalDialog : DialogFragmentWithDate() {
private var isPercentPump = true
private var _binding: DialogTempbasalBinding? = null
// This property is only valid between onCreateView and
// onDestroyView.
private val binding get() = _binding!!
override fun onSaveInstanceState(savedInstanceState: Bundle) {
super.onSaveInstanceState(savedInstanceState)
savedInstanceState.putDouble("actions_tempbasal_duration", actions_tempbasal_duration.value)
savedInstanceState.putDouble("actions_tempbasal_basalpercentinput", actions_tempbasal_basalpercentinput.value)
savedInstanceState.putDouble("actions_tempbasal_basalabsoluteinput", actions_tempbasal_basalabsoluteinput.value)
savedInstanceState.putDouble("duration", binding.duration.value)
savedInstanceState.putDouble("basalpercentinput", binding.basalpercentinput.value)
savedInstanceState.putDouble("basalabsoluteinput", binding.basalabsoluteinput.value)
}
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?): View? {
savedInstanceState: Bundle?): View {
onCreateViewGeneral()
return inflater.inflate(R.layout.dialog_tempbasal, container, false)
_binding = DialogTempbasalBinding.inflate(inflater, container, false)
return binding.root
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
@ -60,41 +67,47 @@ class TempBasalDialog : DialogFragmentWithDate() {
val maxTempPercent = pumpDescription.maxTempPercent.toDouble()
val tempPercentStep = pumpDescription.tempPercentStep.toDouble()
actions_tempbasal_basalpercentinput.setParams(savedInstanceState?.getDouble("actions_tempbasal_basalpercentinput")
?: 100.0, 0.0, maxTempPercent, tempPercentStep, DecimalFormat("0"), true, ok)
binding.basalpercentinput.setParams(savedInstanceState?.getDouble("basalpercentinput")
?: 100.0, 0.0, maxTempPercent, tempPercentStep, DecimalFormat("0"), true, binding.okcancel.ok)
actions_tempbasal_basalabsoluteinput.setParams(savedInstanceState?.getDouble("actions_tempbasal_basalabsoluteinput")
?: profile.basal, 0.0, pumpDescription.maxTempAbsolute, pumpDescription.tempAbsoluteStep, DecimalFormat("0.00"), true, ok)
binding.basalabsoluteinput.setParams(savedInstanceState?.getDouble("basalabsoluteinput")
?: profile.basal, 0.0, pumpDescription.maxTempAbsolute, pumpDescription.tempAbsoluteStep, DecimalFormat("0.00"), true, binding.okcancel.ok)
val tempDurationStep = pumpDescription.tempDurationStep.toDouble()
val tempMaxDuration = pumpDescription.tempMaxDuration.toDouble()
actions_tempbasal_duration.setParams(savedInstanceState?.getDouble("actions_tempbasal_duration")
?: tempDurationStep, tempDurationStep, tempMaxDuration, tempDurationStep, DecimalFormat("0"), false, ok)
binding.duration.setParams(savedInstanceState?.getDouble("duration")
?: tempDurationStep, tempDurationStep, tempMaxDuration, tempDurationStep, DecimalFormat("0"), false, binding.okcancel.ok)
isPercentPump = pumpDescription.tempBasalStyle and PumpDescription.PERCENT == PumpDescription.PERCENT
if (isPercentPump) {
actions_tempbasal_percent_layout.visibility = View.VISIBLE
actions_tempbasal_absolute_layout.visibility = View.GONE
binding.percentLayout.visibility = View.VISIBLE
binding.absoluteLayout.visibility = View.GONE
} else {
actions_tempbasal_percent_layout.visibility = View.GONE
actions_tempbasal_absolute_layout.visibility = View.VISIBLE
binding.percentLayout.visibility = View.GONE
binding.absoluteLayout.visibility = View.VISIBLE
}
}
override fun onDestroyView() {
super.onDestroyView()
_binding = null
}
override fun submit(): Boolean {
if (_binding == null) return false
var percent = 0
var absolute = 0.0
val durationInMinutes = actions_tempbasal_duration?.value?.toInt() ?: return false
val durationInMinutes = binding.duration.value?.toInt() ?: return false
val profile = profileFunction.getProfile() ?: return false
val actions: LinkedList<String> = LinkedList()
if (isPercentPump) {
val basalPercentInput = SafeParse.stringToInt(actions_tempbasal_basalpercentinput.text)
val basalPercentInput = SafeParse.stringToInt(binding.basalpercentinput.text)
percent = constraintChecker.applyBasalPercentConstraints(Constraint(basalPercentInput), profile).value()
actions.add(resourceHelper.gs(R.string.tempbasal_label) + ": $percent%")
actions.add(resourceHelper.gs(R.string.duration) + ": " + resourceHelper.gs(R.string.format_mins, durationInMinutes))
if (percent != basalPercentInput) actions.add(resourceHelper.gs(R.string.constraintapllied))
} else {
val basalAbsoluteInput = SafeParse.stringToDouble(actions_tempbasal_basalabsoluteinput.text)
val basalAbsoluteInput = SafeParse.stringToDouble(binding.basalabsoluteinput.text)
absolute = constraintChecker.applyBasalConstraints(Constraint(basalAbsoluteInput), profile).value()
actions.add(resourceHelper.gs(R.string.tempbasal_label) + ": " + resourceHelper.gs(R.string.pump_basebasalrate, absolute))
actions.add(resourceHelper.gs(R.string.duration) + ": " + resourceHelper.gs(R.string.format_mins, durationInMinutes))
@ -102,7 +115,7 @@ class TempBasalDialog : DialogFragmentWithDate() {
actions.add(resourceHelper.gs(R.string.constraintapllied).formatColor(resourceHelper, R.color.warning))
}
activity?.let { activity ->
OKDialog.showConfirmation(activity, resourceHelper.gs(R.string.tempbasal_label), HtmlHelper.fromHtml(Joiner.on("<br/>").join(actions)), Runnable {
OKDialog.showConfirmation(activity, resourceHelper.gs(R.string.tempbasal_label), HtmlHelper.fromHtml(Joiner.on("<br/>").join(actions)), {
val callback: Callback = object : Callback() {
override fun run() {
if (!result.success) {

View file

@ -4,30 +4,29 @@ import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.AdapterView
import android.widget.ArrayAdapter
import com.google.common.base.Joiner
import com.google.common.collect.Lists
import info.nightscout.androidaps.Constants
import info.nightscout.androidaps.R
import info.nightscout.androidaps.data.Profile
import info.nightscout.androidaps.databinding.DialogTemptargetBinding
import info.nightscout.androidaps.db.Source
import info.nightscout.androidaps.db.TempTarget
import info.nightscout.androidaps.interfaces.ActivePluginProvider
import info.nightscout.androidaps.plugins.configBuilder.ConstraintChecker
import info.nightscout.androidaps.interfaces.ProfileFunction
import info.nightscout.androidaps.plugins.configBuilder.ConstraintChecker
import info.nightscout.androidaps.plugins.treatments.TreatmentsPlugin
import info.nightscout.androidaps.utils.DefaultValueHelper
import info.nightscout.androidaps.utils.HtmlHelper
import info.nightscout.androidaps.utils.alertDialogs.OKDialog
import info.nightscout.androidaps.utils.resources.ResourceHelper
import kotlinx.android.synthetic.main.dialog_temptarget.*
import kotlinx.android.synthetic.main.okcancel.*
import java.text.DecimalFormat
import java.util.*
import javax.inject.Inject
class TempTargetDialog : DialogFragmentWithDate() {
@Inject lateinit var constraintChecker: ConstraintChecker
@Inject lateinit var resourceHelper: ResourceHelper
@Inject lateinit var profileFunction: ProfileFunction
@ -37,44 +36,51 @@ class TempTargetDialog : DialogFragmentWithDate() {
lateinit var reasonList: List<String>
private var _binding: DialogTemptargetBinding? = null
// This property is only valid between onCreateView and
// onDestroyView.
private val binding get() = _binding!!
override fun onSaveInstanceState(savedInstanceState: Bundle) {
super.onSaveInstanceState(savedInstanceState)
savedInstanceState.putDouble("overview_temptarget_duration", overview_temptarget_duration.value)
savedInstanceState.putDouble("overview_temptarget_temptarget", overview_temptarget_temptarget.value)
savedInstanceState.putDouble("duration", binding.duration.value)
savedInstanceState.putDouble("temptarget", binding.temptarget.value)
}
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?): View? {
savedInstanceState: Bundle?): View {
onCreateViewGeneral()
return inflater.inflate(R.layout.dialog_temptarget, container, false)
_binding = DialogTemptargetBinding.inflate(inflater, container, false)
return binding.root
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
overview_temptarget_duration.setParams(savedInstanceState?.getDouble("overview_temptarget_duration")
?: 0.0, 0.0, Constants.MAX_PROFILE_SWITCH_DURATION, 10.0, DecimalFormat("0"), false, ok)
binding.duration.setParams(savedInstanceState?.getDouble("duration")
?: 0.0, 0.0, Constants.MAX_PROFILE_SWITCH_DURATION, 10.0, DecimalFormat("0"), false, binding.okcancel.ok)
if (profileFunction.getUnits() == Constants.MMOL)
overview_temptarget_temptarget.setParams(
savedInstanceState?.getDouble("overview_temptarget_temptarget")
?: Constants.MIN_TT_MMOL,
Constants.MIN_TT_MMOL, Constants.MAX_TT_MMOL, 0.1, DecimalFormat("0.0"), false, ok)
binding.temptarget.setParams(
savedInstanceState?.getDouble("temptarget")
?: 8.0,
Constants.MIN_TT_MMOL, Constants.MAX_TT_MMOL, 0.1, DecimalFormat("0.0"), false, binding.okcancel.ok)
else
overview_temptarget_temptarget.setParams(
savedInstanceState?.getDouble("overview_temptarget_temptarget")
?: Constants.MIN_TT_MGDL,
Constants.MIN_TT_MGDL, Constants.MAX_TT_MGDL, 1.0, DecimalFormat("0"), false, ok)
binding.temptarget.setParams(
savedInstanceState?.getDouble("temptarget")
?: 144.0,
Constants.MIN_TT_MGDL, Constants.MAX_TT_MGDL, 1.0, DecimalFormat("0"), false, binding.okcancel.ok)
val units = profileFunction.getUnits()
overview_temptarget_units.text = if (units == Constants.MMOL) resourceHelper.gs(R.string.mmol) else resourceHelper.gs(R.string.mgdl)
binding.units.text = if (units == Constants.MMOL) resourceHelper.gs(R.string.mmol) else resourceHelper.gs(R.string.mgdl)
// temp target
context?.let { context ->
if (activePlugin.activeTreatments.tempTargetFromHistory != null)
overview_temptarget_cancel?.visibility = View.VISIBLE
binding.targetCancel.visibility = View.VISIBLE
else
overview_temptarget_cancel?.visibility = View.GONE
binding.targetCancel.visibility = View.GONE
reasonList = Lists.newArrayList(
resourceHelper.gs(R.string.manual),
@ -83,59 +89,67 @@ class TempTargetDialog : DialogFragmentWithDate() {
resourceHelper.gs(R.string.hypo)
)
val adapterReason = ArrayAdapter(context, R.layout.spinner_centered, reasonList)
overview_temptarget_reason.adapter = adapterReason
binding.reason.adapter = adapterReason
overview_temptarget_cancel?.setOnClickListener { shortClick(it) }
overview_temptarget_eating_soon?.setOnClickListener { shortClick(it) }
overview_temptarget_activity?.setOnClickListener { shortClick(it) }
overview_temptarget_hypo?.setOnClickListener { shortClick(it) }
binding.targetCancel.setOnClickListener { shortClick(it) }
binding.eatingSoon.setOnClickListener { shortClick(it) }
binding.activity.setOnClickListener { shortClick(it) }
binding.hypo.setOnClickListener { shortClick(it) }
overview_temptarget_eating_soon?.setOnLongClickListener {
binding.eatingSoon.setOnLongClickListener {
longClick(it)
return@setOnLongClickListener true
}
overview_temptarget_activity?.setOnLongClickListener {
binding.activity.setOnLongClickListener {
longClick(it)
return@setOnLongClickListener true
}
overview_temptarget_hypo?.setOnLongClickListener {
binding.hypo.setOnLongClickListener {
longClick(it)
return@setOnLongClickListener true
}
}
}
private fun shortClick(v:View){
private fun shortClick(v: View) {
v.performLongClick()
if (submit()) dismiss()
}
private fun longClick(v:View) {
private fun longClick(v: View) {
when (v.id) {
R.id.overview_temptarget_eating_soon -> {
overview_temptarget_temptarget.value = defaultValueHelper.determineEatingSoonTT()
overview_temptarget_duration.value = defaultValueHelper.determineEatingSoonTTDuration().toDouble()
overview_temptarget_reason.setSelection(reasonList.indexOf( resourceHelper.gs(R.string.eatingsoon)))
R.id.eating_soon -> {
binding.temptarget.value = defaultValueHelper.determineEatingSoonTT()
binding.duration.value = defaultValueHelper.determineEatingSoonTTDuration().toDouble()
binding.reason.setSelection(reasonList.indexOf(resourceHelper.gs(R.string.eatingsoon)))
}
R.id.overview_temptarget_activity -> {
overview_temptarget_temptarget.value = defaultValueHelper.determineActivityTT()
overview_temptarget_duration.value = defaultValueHelper.determineActivityTTDuration().toDouble()
overview_temptarget_reason.setSelection(reasonList.indexOf(resourceHelper.gs(R.string.activity)))
R.id.activity -> {
binding.temptarget.value = defaultValueHelper.determineActivityTT()
binding.duration.value = defaultValueHelper.determineActivityTTDuration().toDouble()
binding.reason.setSelection(reasonList.indexOf(resourceHelper.gs(R.string.activity)))
}
R.id.overview_temptarget_hypo -> {
overview_temptarget_temptarget.value = defaultValueHelper.determineHypoTT()
overview_temptarget_duration.value = defaultValueHelper.determineHypoTTDuration().toDouble()
overview_temptarget_reason.setSelection(reasonList.indexOf(resourceHelper.gs(R.string.hypo)))
R.id.hypo -> {
binding.temptarget.value = defaultValueHelper.determineHypoTT()
binding.duration.value = defaultValueHelper.determineHypoTTDuration().toDouble()
binding.reason.setSelection(reasonList.indexOf(resourceHelper.gs(R.string.hypo)))
}
}
}
override fun onDestroyView() {
super.onDestroyView()
_binding = null
}
override fun submit(): Boolean {
if (_binding == null) return false
val actions: LinkedList<String> = LinkedList()
val reason = overview_temptarget_reason?.selectedItem?.toString() ?: return false
val reason = binding.reason.selectedItem?.toString() ?: return false
val unitResId = if (profileFunction.getUnits() == Constants.MGDL) R.string.mgdl else R.string.mmol
val target = overview_temptarget_temptarget.value
val duration = overview_temptarget_duration.value.toInt()
val target = binding.temptarget.value
val duration = binding.duration.value.toInt()
if (target != 0.0 && duration != 0) {
actions.add(resourceHelper.gs(R.string.reason) + ": " + reason)
actions.add(resourceHelper.gs(R.string.target_label) + ": " + Profile.toCurrentUnitsString(profileFunction, target) + " " + resourceHelper.gs(unitResId))
@ -147,7 +161,7 @@ class TempTargetDialog : DialogFragmentWithDate() {
actions.add(resourceHelper.gs(R.string.time) + ": " + dateUtil.dateAndTimeString(eventTime))
activity?.let { activity ->
OKDialog.showConfirmation(activity, resourceHelper.gs(R.string.careportal_temporarytarget), HtmlHelper.fromHtml(Joiner.on("<br/>").join(actions)), Runnable {
OKDialog.showConfirmation(activity, resourceHelper.gs(R.string.careportal_temporarytarget), HtmlHelper.fromHtml(Joiner.on("<br/>").join(actions)), {
aapsLogger.debug("USER ENTRY: TEMP TARGET $target duration: $duration")
if (target == 0.0 || duration == 0) {
val tempTarget = TempTarget()

View file

@ -13,6 +13,7 @@ import info.nightscout.androidaps.Config
import info.nightscout.androidaps.R
import info.nightscout.androidaps.activities.ErrorHelperActivity
import info.nightscout.androidaps.data.DetailedBolusInfo
import info.nightscout.androidaps.databinding.DialogTreatmentBinding
import info.nightscout.androidaps.db.CareportalEvent
import info.nightscout.androidaps.db.Source
import info.nightscout.androidaps.interfaces.ActivePluginProvider
@ -22,20 +23,18 @@ import info.nightscout.androidaps.plugins.configBuilder.ConstraintChecker
import info.nightscout.androidaps.queue.Callback
import info.nightscout.androidaps.utils.DecimalFormatter
import info.nightscout.androidaps.utils.HtmlHelper
import info.nightscout.androidaps.utils.alertDialogs.OKDialog
import info.nightscout.androidaps.utils.SafeParse
import info.nightscout.androidaps.utils.ToastUtils
import info.nightscout.androidaps.utils.alertDialogs.OKDialog
import info.nightscout.androidaps.utils.extensions.formatColor
import info.nightscout.androidaps.utils.resources.ResourceHelper
import kotlinx.android.synthetic.main.dialog_insulin.*
import kotlinx.android.synthetic.main.dialog_treatment.*
import kotlinx.android.synthetic.main.okcancel.*
import java.text.DecimalFormat
import java.util.*
import javax.inject.Inject
import kotlin.math.abs
class TreatmentDialog : DialogFragmentWithDate() {
@Inject lateinit var constraintChecker: ConstraintChecker
@Inject lateinit var resourceHelper: ResourceHelper
@Inject lateinit var activePlugin: ActivePluginProvider
@ -54,49 +53,62 @@ class TreatmentDialog : DialogFragmentWithDate() {
private fun validateInputs() {
val maxCarbs = constraintChecker.getMaxCarbsAllowed().value().toDouble()
val maxInsulin = constraintChecker.getMaxBolusAllowed().value()
if (SafeParse.stringToInt(overview_treatment_carbs.text) > maxCarbs) {
overview_treatment_carbs.value = 0.0
if (SafeParse.stringToInt(binding.carbs.text) > maxCarbs) {
binding.carbs.value = 0.0
ToastUtils.showToastInUiThread(context, resourceHelper.gs(R.string.carbsconstraintapplied))
}
if (SafeParse.stringToDouble(overview_treatment_insulin.text) > maxInsulin) {
overview_treatment_insulin.value = 0.0
if (SafeParse.stringToDouble(binding.insulin.text) > maxInsulin) {
binding.insulin.value = 0.0
ToastUtils.showToastInUiThread(context, resourceHelper.gs(R.string.bolusconstraintapplied))
}
}
private var _binding: DialogTreatmentBinding? = null
// This property is only valid between onCreateView and
// onDestroyView.
private val binding get() = _binding!!
override fun onSaveInstanceState(savedInstanceState: Bundle) {
super.onSaveInstanceState(savedInstanceState)
savedInstanceState.putDouble("overview_treatment_carbs", overview_treatment_carbs.value)
savedInstanceState.putDouble("overview_treatment_insulin", overview_treatment_insulin.value)
savedInstanceState.putDouble("carbs", binding.carbs.value)
savedInstanceState.putDouble("insulin", binding.insulin.value)
}
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?): View? {
savedInstanceState: Bundle?): View {
onCreateViewGeneral()
return inflater.inflate(R.layout.dialog_treatment, container, false)
_binding = DialogTreatmentBinding.inflate(inflater, container, false)
return binding.root
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
if (config.NSCLIENT) {
overview_treatment_record_only.isChecked = true
overview_treatment_record_only.isEnabled = false
binding.recordOnly.isChecked = true
binding.recordOnly.isEnabled = false
}
val maxCarbs = constraintChecker.getMaxCarbsAllowed().value().toDouble()
val maxInsulin = constraintChecker.getMaxBolusAllowed().value()
val pumpDescription = activePlugin.activePump.pumpDescription
overview_treatment_carbs.setParams(savedInstanceState?.getDouble("overview_treatment_carbs")
?: 0.0, 0.0, maxCarbs, 1.0, DecimalFormat("0"), false, ok, textWatcher)
overview_treatment_insulin.setParams(savedInstanceState?.getDouble("overview_treatment_insulin")
?: 0.0, 0.0, maxInsulin, pumpDescription.bolusStep, DecimalFormatter.pumpSupportedBolusFormat(activePlugin.activePump), false, ok, textWatcher)
binding.carbs.setParams(savedInstanceState?.getDouble("carbs")
?: 0.0, 0.0, maxCarbs, 1.0, DecimalFormat("0"), false, binding.okcancel.ok, textWatcher)
binding.insulin.setParams(savedInstanceState?.getDouble("insulin")
?: 0.0, 0.0, maxInsulin, pumpDescription.bolusStep, DecimalFormatter.pumpSupportedBolusFormat(activePlugin.activePump), false, binding.okcancel.ok, textWatcher)
}
override fun onDestroyView() {
super.onDestroyView()
_binding = null
}
override fun submit(): Boolean {
if (_binding == null) return false
val pumpDescription = activePlugin.activePump.pumpDescription
val insulin = SafeParse.stringToDouble(overview_treatment_insulin?.text ?: return false)
val carbs = SafeParse.stringToInt(overview_treatment_carbs.text)
val recordOnlyChecked = overview_treatment_record_only.isChecked
val insulin = SafeParse.stringToDouble(binding.insulin.text ?: return false)
val carbs = SafeParse.stringToInt(binding.carbs.text)
val recordOnlyChecked = binding.recordOnly.isChecked
val actions: LinkedList<String?> = LinkedList()
val insulinAfterConstraints = constraintChecker.applyBolusConstraints(Constraint(insulin)).value()
val carbsAfterConstraints = constraintChecker.applyCarbsConstraints(Constraint(carbs)).value()
@ -115,7 +127,7 @@ class TreatmentDialog : DialogFragmentWithDate() {
}
if (insulinAfterConstraints > 0 || carbsAfterConstraints > 0) {
activity?.let { activity ->
OKDialog.showConfirmation(activity, resourceHelper.gs(R.string.overview_treatment_label), HtmlHelper.fromHtml(Joiner.on("<br/>").join(actions)), Runnable {
OKDialog.showConfirmation(activity, resourceHelper.gs(R.string.overview_treatment_label), HtmlHelper.fromHtml(Joiner.on("<br/>").join(actions)), {
aapsLogger.debug("USER ENTRY: BOLUS insulin $insulin carbs: $carbs")
val detailedBolusInfo = DetailedBolusInfo()
if (insulinAfterConstraints == 0.0) detailedBolusInfo.eventType = CareportalEvent.CARBCORRECTION

View file

@ -9,15 +9,16 @@ import android.view.WindowManager
import dagger.android.support.DaggerDialogFragment
import info.nightscout.androidaps.Constants
import info.nightscout.androidaps.R
import info.nightscout.androidaps.databinding.DialogWizardinfoBinding
import info.nightscout.androidaps.interfaces.ProfileFunction
import info.nightscout.androidaps.utils.DecimalFormatter
import info.nightscout.androidaps.utils.JsonHelper
import info.nightscout.androidaps.utils.resources.ResourceHelper
import kotlinx.android.synthetic.main.dialog_wizardinfo.*
import org.json.JSONObject
import javax.inject.Inject
class WizardInfoDialog : DaggerDialogFragment() {
@Inject lateinit var resourceHelper: ResourceHelper
@Inject lateinit var profileFunction: ProfileFunction
@ -27,62 +28,74 @@ class WizardInfoDialog : DaggerDialogFragment() {
this.json = json
}
private var _binding: DialogWizardinfoBinding? = null
// This property is only valid between onCreateView and
// onDestroyView.
private val binding get() = _binding!!
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?): View? {
savedInstanceState: Bundle?): View {
dialog?.window?.requestFeature(Window.FEATURE_NO_TITLE)
dialog?.window?.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN)
isCancelable = true
dialog?.setCanceledOnTouchOutside(false)
return inflater.inflate(R.layout.dialog_wizardinfo, container, false)
_binding = DialogWizardinfoBinding.inflate(inflater, container, false)
return binding.root
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
close.setOnClickListener { dismiss() }
binding.close.setOnClickListener { dismiss() }
val units = profileFunction.getUnits()
val bgString =
if (units == Constants.MGDL) DecimalFormatter.to0Decimal(JsonHelper.safeGetDouble(json, "bg"))
else DecimalFormatter.to1Decimal(JsonHelper.safeGetDouble(json, "bg"))
// BG
treatments_wizard_bg.text = resourceHelper.gs(R.string.format_bg_isf, bgString, JsonHelper.safeGetDouble(json, "isf"))
treatments_wizard_bginsulin.text = resourceHelper.gs(R.string.formatinsulinunits, JsonHelper.safeGetDouble(json, "insulinbg"))
treatments_wizard_bgcheckbox.isChecked = JsonHelper.safeGetBoolean(json, "insulinbgused")
treatments_wizard_ttcheckbox.isChecked = JsonHelper.safeGetBoolean(json, "ttused")
binding.bg.text = resourceHelper.gs(R.string.format_bg_isf, bgString, JsonHelper.safeGetDouble(json, "isf"))
binding.bginsulin.text = resourceHelper.gs(R.string.formatinsulinunits, JsonHelper.safeGetDouble(json, "insulinbg"))
binding.bgcheckbox.isChecked = JsonHelper.safeGetBoolean(json, "insulinbgused")
binding.ttcheckbox.isChecked = JsonHelper.safeGetBoolean(json, "ttused")
// Trend
treatments_wizard_bgtrend.text = JsonHelper.safeGetString(json, "trend")
treatments_wizard_bgtrendinsulin.text = resourceHelper.gs(R.string.formatinsulinunits, JsonHelper.safeGetDouble(json, "insulintrend"))
treatments_wizard_bgtrendcheckbox.isChecked = JsonHelper.safeGetBoolean(json, "trendused")
binding.bgtrend.text = JsonHelper.safeGetString(json, "trend")
binding.bgtrendinsulin.text = resourceHelper.gs(R.string.formatinsulinunits, JsonHelper.safeGetDouble(json, "insulintrend"))
binding.bgtrendcheckbox.isChecked = JsonHelper.safeGetBoolean(json, "trendused")
// COB
treatments_wizard_cob.text = resourceHelper.gs(R.string.format_cob_ic, JsonHelper.safeGetDouble(json, "cob"), JsonHelper.safeGetDouble(json, "ic"))
treatments_wizard_cobinsulin.text = resourceHelper.gs(R.string.formatinsulinunits, JsonHelper.safeGetDouble(json, "insulincob"))
treatments_wizard_cobcheckbox.isChecked = JsonHelper.safeGetBoolean(json, "cobused")
binding.cob.text = resourceHelper.gs(R.string.format_cob_ic, JsonHelper.safeGetDouble(json, "cob"), JsonHelper.safeGetDouble(json, "ic"))
binding.cobinsulin.text = resourceHelper.gs(R.string.formatinsulinunits, JsonHelper.safeGetDouble(json, "insulincob"))
binding.cobcheckbox.isChecked = JsonHelper.safeGetBoolean(json, "cobused")
// Bolus IOB
treatments_wizard_bolusiobinsulin.text = resourceHelper.gs(R.string.formatinsulinunits, JsonHelper.safeGetDouble(json, "bolusiob"))
treatments_wizard_bolusiobcheckbox.isChecked = JsonHelper.safeGetBoolean(json, "bolusiobused")
binding.bolusiobinsulin.text = resourceHelper.gs(R.string.formatinsulinunits, JsonHelper.safeGetDouble(json, "bolusiob"))
binding.bolusiobcheckbox.isChecked = JsonHelper.safeGetBoolean(json, "bolusiobused")
// Basal IOB
treatments_wizard_basaliobinsulin.text = resourceHelper.gs(R.string.formatinsulinunits, JsonHelper.safeGetDouble(json, "basaliob"))
treatments_wizard_basaliobcheckbox.isChecked = JsonHelper.safeGetBoolean(json, "basaliobused")
binding.basaliobinsulin.text = resourceHelper.gs(R.string.formatinsulinunits, JsonHelper.safeGetDouble(json, "basaliob"))
binding.basaliobcheckbox.isChecked = JsonHelper.safeGetBoolean(json, "basaliobused")
// Superbolus
treatments_wizard_sbinsulin.text = resourceHelper.gs(R.string.formatinsulinunits, JsonHelper.safeGetDouble(json, "insulinsuperbolus"))
treatments_wizard_sbcheckbox.isChecked = JsonHelper.safeGetBoolean(json, "superbolusused")
binding.sbinsulin.text = resourceHelper.gs(R.string.formatinsulinunits, JsonHelper.safeGetDouble(json, "insulinsuperbolus"))
binding.sbcheckbox.isChecked = JsonHelper.safeGetBoolean(json, "superbolusused")
// Carbs
treatments_wizard_carbs.text = resourceHelper.gs(R.string.format_carbs_ic, JsonHelper.safeGetDouble(json, "carbs"), JsonHelper.safeGetDouble(json, "ic"))
treatments_wizard_carbsinsulin.text = resourceHelper.gs(R.string.formatinsulinunits, JsonHelper.safeGetDouble(json, "insulincarbs"))
binding.carbs.text = resourceHelper.gs(R.string.format_carbs_ic, JsonHelper.safeGetDouble(json, "carbs"), JsonHelper.safeGetDouble(json, "ic"))
binding.carbsinsulin.text = resourceHelper.gs(R.string.formatinsulinunits, JsonHelper.safeGetDouble(json, "insulincarbs"))
// Correction
treatments_wizard_correctioninsulin.text = resourceHelper.gs(R.string.formatinsulinunits, JsonHelper.safeGetDouble(json, "othercorrection"))
binding.correctioninsulin.text = resourceHelper.gs(R.string.formatinsulinunits, JsonHelper.safeGetDouble(json, "othercorrection"))
// Profile
treatments_wizard_profile.text = JsonHelper.safeGetString(json, "profile")
binding.profile.text = JsonHelper.safeGetString(json, "profile")
// Notes
treatments_wizard_notes.text = JsonHelper.safeGetString(json, "notes")
binding.notes.text = JsonHelper.safeGetString(json, "notes")
// Percentage
treatments_wizard_percent_used.text = DecimalFormatter.to0Decimal(JsonHelper.safeGetDouble(json, "percentageCorrection", 100.0)) + "%"
binding.percentUsed.text = resourceHelper.gs(R.string.format_percent, (JsonHelper.safeGetInt(json, "percentageCorrection", 100)))
// Total
treatments_wizard_totalinsulin.text = resourceHelper.gs(R.string.formatinsulinunits, JsonHelper.safeGetDouble(json, "insulin"))
binding.totalinsulin.text = resourceHelper.gs(R.string.formatinsulinunits, JsonHelper.safeGetDouble(json, "insulin"))
}
override fun onStart() {
super.onStart()
dialog?.window?.setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT)
}
override fun onDestroyView() {
super.onDestroyView()
_binding = null
}
}

View file

@ -31,7 +31,6 @@ import info.nightscout.androidaps.utils.FabricPrivacy
import info.nightscout.androidaps.utils.T
import info.nightscout.androidaps.utils.buildHelper.BuildHelper
import info.nightscout.androidaps.utils.extensions.toVisibility
import info.nightscout.androidaps.utils.resources.ResourceHelper
import info.nightscout.androidaps.utils.sharedPreferences.SP
import io.reactivex.android.schedulers.AndroidSchedulers
import io.reactivex.disposables.CompositeDisposable
@ -49,7 +48,6 @@ class HistoryBrowseActivity : NoSplashAppCompatActivity() {
@Inject lateinit var aapsLogger: AAPSLogger
@Inject lateinit var rxBus: RxBusWrapper
@Inject lateinit var sp: SP
@Inject lateinit var resourceHelper: ResourceHelper
@Inject lateinit var profileFunction: ProfileFunction
@Inject lateinit var defaultValueHelper: DefaultValueHelper
@Inject lateinit var iobCobCalculatorPluginHistory: IobCobCalculatorPluginHistory
@ -69,6 +67,8 @@ class HistoryBrowseActivity : NoSplashAppCompatActivity() {
private var rangeToDisplay = 24 // for graph
private var start: Long = 0
private val graphLock = Object()
private var eventCustomCalculationFinished = EventCustomCalculationFinished()
override fun onCreate(savedInstanceState: Bundle?) {
@ -218,40 +218,40 @@ class HistoryBrowseActivity : NoSplashAppCompatActivity() {
}
private fun prepareGraphsIfNeeded(numOfGraphs: Int) {
synchronized(graphLock) {
if (numOfGraphs != secondaryGraphs.size - 1) {
//aapsLogger.debug("New secondary graph count ${numOfGraphs-1}")
// rebuild needed
secondaryGraphs.clear()
secondaryGraphsLabel.clear()
history_iobgraph.removeAllViews()
for (i in 1 until numOfGraphs) {
val relativeLayout = RelativeLayout(this)
relativeLayout.layoutParams = RelativeLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT)
if (numOfGraphs != secondaryGraphs.size - 1) {
//aapsLogger.debug("New secondary graph count ${numOfGraphs-1}")
// rebuild needed
secondaryGraphs.clear()
secondaryGraphsLabel.clear()
history_iobgraph.removeAllViews()
for (i in 1 until numOfGraphs) {
val relativeLayout = RelativeLayout(this)
relativeLayout.layoutParams = RelativeLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT)
val graph = GraphView(this)
graph.layoutParams = LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, resourceHelper.dpToPx(100)).also { it.setMargins(0, resourceHelper.dpToPx(15), 0, resourceHelper.dpToPx(10)) }
graph.gridLabelRenderer?.gridColor = resourceHelper.gc(R.color.graphgrid)
graph.gridLabelRenderer?.reloadStyles()
graph.gridLabelRenderer?.isHorizontalLabelsVisible = false
graph.gridLabelRenderer?.labelVerticalWidth = axisWidth
graph.gridLabelRenderer?.numVerticalLabels = 3
graph.viewport.backgroundColor = Color.argb(20, 255, 255, 255) // 8% of gray
relativeLayout.addView(graph)
val graph = GraphView(this)
graph.layoutParams = LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, resourceHelper.dpToPx(100)).also { it.setMargins(0, resourceHelper.dpToPx(15), 0, resourceHelper.dpToPx(10)) }
graph.gridLabelRenderer?.gridColor = resourceHelper.gc(R.color.graphgrid)
graph.gridLabelRenderer?.reloadStyles()
graph.gridLabelRenderer?.isHorizontalLabelsVisible = false
graph.gridLabelRenderer?.labelVerticalWidth = axisWidth
graph.gridLabelRenderer?.numVerticalLabels = 3
graph.viewport.backgroundColor = Color.argb(20, 255, 255, 255) // 8% of gray
relativeLayout.addView(graph)
val label = TextView(this)
val layoutParams = RelativeLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT).also { it.setMargins(resourceHelper.dpToPx(30), resourceHelper.dpToPx(25), 0, 0) }
layoutParams.addRule(RelativeLayout.ALIGN_PARENT_TOP)
layoutParams.addRule(RelativeLayout.ALIGN_PARENT_LEFT)
label.layoutParams = layoutParams
relativeLayout.addView(label)
secondaryGraphsLabel.add(label)
val label = TextView(this)
val layoutParams = RelativeLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT).also { it.setMargins(resourceHelper.dpToPx(30), resourceHelper.dpToPx(25), 0, 0) }
layoutParams.addRule(RelativeLayout.ALIGN_PARENT_TOP)
layoutParams.addRule(RelativeLayout.ALIGN_PARENT_LEFT)
label.layoutParams = layoutParams
relativeLayout.addView(label)
secondaryGraphsLabel.add(label)
history_iobgraph.addView(relativeLayout)
secondaryGraphs.add(graph)
history_iobgraph.addView(relativeLayout)
secondaryGraphs.add(graph)
}
}
}
}
private fun runCalculation(from: String) {
@ -317,55 +317,59 @@ class HistoryBrowseActivity : NoSplashAppCompatActivity() {
graphData.addBasals(fromTime, toTime, lowLine / graphData.maxY / 1.2)
}
// ------------------ 2nd graph
for (g in 0 until secondaryGraphs.size) {
val secondGraphData = GraphData(injector, secondaryGraphs[g], iobCobCalculatorPluginHistory, treatmentsPluginHistory)
var useIobForScale = false
var useCobForScale = false
var useDevForScale = false
var useRatioForScale = false
var useDSForScale = false
var useIAForScale = false
var useABSForScale = false
when {
menuChartSettings[g + 1][OverviewMenus.CharType.IOB.ordinal] -> useIobForScale = true
menuChartSettings[g + 1][OverviewMenus.CharType.COB.ordinal] -> useCobForScale = true
menuChartSettings[g + 1][OverviewMenus.CharType.DEV.ordinal] -> useDevForScale = true
menuChartSettings[g + 1][OverviewMenus.CharType.SEN.ordinal] -> useRatioForScale = true
menuChartSettings[g + 1][OverviewMenus.CharType.ACT.ordinal] -> useIAForScale = true
menuChartSettings[g + 1][OverviewMenus.CharType.ABS.ordinal] -> useABSForScale = true
menuChartSettings[g + 1][OverviewMenus.CharType.DEVSLOPE.ordinal] -> useDSForScale = true
synchronized(graphLock) {
for (g in 0 until secondaryGraphs.size) {
val secondGraphData = GraphData(injector, secondaryGraphs[g], iobCobCalculatorPluginHistory, treatmentsPluginHistory)
var useIobForScale = false
var useCobForScale = false
var useDevForScale = false
var useRatioForScale = false
var useDSForScale = false
var useIAForScale = false
var useABSForScale = false
when {
menuChartSettings[g + 1][OverviewMenus.CharType.IOB.ordinal] -> useIobForScale = true
menuChartSettings[g + 1][OverviewMenus.CharType.COB.ordinal] -> useCobForScale = true
menuChartSettings[g + 1][OverviewMenus.CharType.DEV.ordinal] -> useDevForScale = true
menuChartSettings[g + 1][OverviewMenus.CharType.SEN.ordinal] -> useRatioForScale = true
menuChartSettings[g + 1][OverviewMenus.CharType.ACT.ordinal] -> useIAForScale = true
menuChartSettings[g + 1][OverviewMenus.CharType.ABS.ordinal] -> useABSForScale = true
menuChartSettings[g + 1][OverviewMenus.CharType.DEVSLOPE.ordinal] -> useDSForScale = true
}
if (menuChartSettings[g + 1][OverviewMenus.CharType.IOB.ordinal]) secondGraphData.addIob(fromTime, toTime, useIobForScale, 1.0, menuChartSettings[g + 1][OverviewMenus.CharType.PRE.ordinal])
if (menuChartSettings[g + 1][OverviewMenus.CharType.COB.ordinal]) secondGraphData.addCob(fromTime, toTime, useCobForScale, if (useCobForScale) 1.0 else 0.5)
if (menuChartSettings[g + 1][OverviewMenus.CharType.DEV.ordinal]) secondGraphData.addDeviations(fromTime, toTime, useDevForScale, 1.0)
if (menuChartSettings[g + 1][OverviewMenus.CharType.SEN.ordinal]) secondGraphData.addRatio(fromTime, toTime, useRatioForScale, 1.0)
if (menuChartSettings[g + 1][OverviewMenus.CharType.ACT.ordinal]) secondGraphData.addActivity(fromTime, toTime, useIAForScale, 0.8)
if (menuChartSettings[g + 1][OverviewMenus.CharType.ABS.ordinal]) secondGraphData.addAbsIob(fromTime, toTime, useABSForScale, 1.0)
if (menuChartSettings[g + 1][OverviewMenus.CharType.DEVSLOPE.ordinal] && buildHelper.isDev()) secondGraphData.addDeviationSlope(fromTime, toTime, useDSForScale, 1.0)
// set manual x bounds to have nice steps
secondGraphData.formatAxis(fromTime, toTime)
secondGraphData.addNowLine(pointer)
secondaryGraphsData.add(secondGraphData)
}
if (menuChartSettings[g + 1][OverviewMenus.CharType.IOB.ordinal]) secondGraphData.addIob(fromTime, toTime, useIobForScale, 1.0, menuChartSettings[g + 1][OverviewMenus.CharType.PRE.ordinal])
if (menuChartSettings[g + 1][OverviewMenus.CharType.COB.ordinal]) secondGraphData.addCob(fromTime, toTime, useCobForScale, if (useCobForScale) 1.0 else 0.5)
if (menuChartSettings[g + 1][OverviewMenus.CharType.DEV.ordinal]) secondGraphData.addDeviations(fromTime, toTime, useDevForScale, 1.0)
if (menuChartSettings[g + 1][OverviewMenus.CharType.SEN.ordinal]) secondGraphData.addRatio(fromTime, toTime, useRatioForScale, 1.0)
if (menuChartSettings[g + 1][OverviewMenus.CharType.ACT.ordinal]) secondGraphData.addActivity(fromTime, toTime, useIAForScale, 0.8)
if (menuChartSettings[g + 1][OverviewMenus.CharType.ABS.ordinal]) secondGraphData.addAbsIob(fromTime, toTime, useABSForScale, 1.0)
if (menuChartSettings[g + 1][OverviewMenus.CharType.DEVSLOPE.ordinal] && buildHelper.isDev()) secondGraphData.addDeviationSlope(fromTime, toTime, useDSForScale, 1.0)
// set manual x bounds to have nice steps
secondGraphData.formatAxis(fromTime, toTime)
secondGraphData.addNowLine(pointer)
secondaryGraphsData.add(secondGraphData)
}
}
}
// finally enforce drawing of graphs in UI thread
graphData.performUpdate()
if (!bgOnly)
for (g in 0 until secondaryGraphs.size) {
secondaryGraphsLabel[g].text = overviewMenus.enabledTypes(g + 1)
secondaryGraphs[g].visibility = (!bgOnly && (
menuChartSettings[g + 1][OverviewMenus.CharType.IOB.ordinal] ||
menuChartSettings[g + 1][OverviewMenus.CharType.COB.ordinal] ||
menuChartSettings[g + 1][OverviewMenus.CharType.DEV.ordinal] ||
menuChartSettings[g + 1][OverviewMenus.CharType.SEN.ordinal] ||
menuChartSettings[g + 1][OverviewMenus.CharType.ACT.ordinal] ||
menuChartSettings[g + 1][OverviewMenus.CharType.ABS.ordinal] ||
menuChartSettings[g + 1][OverviewMenus.CharType.DEVSLOPE.ordinal]
)).toVisibility()
secondaryGraphsData[g].performUpdate()
synchronized(graphLock) {
for (g in 0 until secondaryGraphs.size) {
secondaryGraphsLabel[g].text = overviewMenus.enabledTypes(g + 1)
secondaryGraphs[g].visibility = (!bgOnly && (
menuChartSettings[g + 1][OverviewMenus.CharType.IOB.ordinal] ||
menuChartSettings[g + 1][OverviewMenus.CharType.COB.ordinal] ||
menuChartSettings[g + 1][OverviewMenus.CharType.DEV.ordinal] ||
menuChartSettings[g + 1][OverviewMenus.CharType.SEN.ordinal] ||
menuChartSettings[g + 1][OverviewMenus.CharType.ACT.ordinal] ||
menuChartSettings[g + 1][OverviewMenus.CharType.ABS.ordinal] ||
menuChartSettings[g + 1][OverviewMenus.CharType.DEVSLOPE.ordinal]
)).toVisibility()
secondaryGraphsData[g].performUpdate()
}
}
}
}

View file

@ -7,7 +7,6 @@ import android.app.PendingIntent;
import android.app.TaskStackBuilder;
import android.content.Context;
import android.content.Intent;
import android.os.Build;
import android.os.SystemClock;
import androidx.core.app.NotificationCompat;
@ -185,12 +184,12 @@ public class LoopPlugin extends PluginBase implements LoopInterface {
.observeOn(Schedulers.io())
.subscribe(event -> invoke("EventTempTargetChange", true), fabricPrivacy::logException)
);
/**
* This method is triggered once autosens calculation has completed, so the LoopPlugin
* has current data to work with. However, autosens calculation can be triggered by multiple
* sources and currently only a new BG should trigger a loop run. Hence we return early if
* the event causing the calculation is not EventNewBg.
* <p>
/*
This method is triggered once autosens calculation has completed, so the LoopPlugin
has current data to work with. However, autosens calculation can be triggered by multiple
sources and currently only a new BG should trigger a loop run. Hence we return early if
the event causing the calculation is not EventNewBg.
<p>
*/
disposable.add(rxBus
.toObservable(EventAutosensCalculationFinished.class)
@ -212,15 +211,12 @@ public class LoopPlugin extends PluginBase implements LoopInterface {
}
private void createNotificationChannel() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
NotificationManager mNotificationManager =
(NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
@SuppressLint("WrongConstant") NotificationChannel channel = new NotificationChannel(CHANNEL_ID,
CHANNEL_ID,
NotificationManager.IMPORTANCE_HIGH);
mNotificationManager.createNotificationChannel(channel);
}
NotificationManager mNotificationManager =
(NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
@SuppressLint("WrongConstant") NotificationChannel channel = new NotificationChannel(CHANNEL_ID,
CHANNEL_ID,
NotificationManager.IMPORTANCE_HIGH);
mNotificationManager.createNotificationChannel(channel);
}
@Override
@ -240,10 +236,6 @@ public class LoopPlugin extends PluginBase implements LoopInterface {
}
}
public long suspendedTo() {
return loopSuspendedTill;
}
public void suspendTo(long endTime) {
loopSuspendedTill = endTime;
isSuperBolus = false;
@ -341,8 +333,9 @@ public class LoopPlugin extends PluginBase implements LoopInterface {
}
return isDisconnected;
}
public boolean treatmentTimethreshold(int duartionMinutes) {
long threshold = System.currentTimeMillis() + (duartionMinutes*60*1000);
long threshold = System.currentTimeMillis() + (duartionMinutes * 60 * 1000);
boolean bool = false;
if (treatmentsPlugin.getLastBolusTime() > threshold || treatmentsPlugin.getLastCarbTime() > threshold)
bool = true;
@ -414,7 +407,7 @@ public class LoopPlugin extends PluginBase implements LoopInterface {
// safety check for multiple SMBs
long lastBolusTime = treatmentsPlugin.getLastBolusTime();
if (lastBolusTime != 0 && lastBolusTime + T.mins(3).msecs() > System.currentTimeMillis()) {
getAapsLogger().debug(LTag.APS, "SMB requsted but still in 3 min interval");
getAapsLogger().debug(LTag.APS, "SMB requested but still in 3 min interval");
resultAfterConstraints.smb = 0;
}
@ -456,31 +449,31 @@ public class LoopPlugin extends PluginBase implements LoopInterface {
&& resultAfterConstraints.carbsReq >= sp.getInt(R.string.key_smb_enable_carbs_suggestions_threshold, 0)
&& carbsSuggestionsSuspendedUntil < System.currentTimeMillis() && !treatmentTimethreshold(-15)) {
if (sp.getBoolean(R.string.key_enable_carbs_required_alert_local,true) && !sp.getBoolean(R.string.key_raise_notifications_as_android_notifications, false)) {
if (sp.getBoolean(R.string.key_enable_carbs_required_alert_local, true) && !sp.getBoolean(R.string.key_raise_notifications_as_android_notifications, false)) {
Notification carbreqlocal = new Notification(Notification.CARBS_REQUIRED, resultAfterConstraints.getCarbsRequiredText(), Notification.NORMAL);
rxBus.send(new EventNewNotification(carbreqlocal));
}
if (sp.getBoolean(R.string.key_ns_create_announcements_from_carbs_req, false)) {
nsUpload.uploadError(resultAfterConstraints.getCarbsRequiredText());
}
if (sp.getBoolean(R.string.key_enable_carbs_required_alert_local,true) && sp.getBoolean(R.string.key_raise_notifications_as_android_notifications, false)){
if (sp.getBoolean(R.string.key_enable_carbs_required_alert_local, true) && sp.getBoolean(R.string.key_raise_notifications_as_android_notifications, false)) {
Intent intentAction5m = new Intent(context, CarbSuggestionReceiver.class);
intentAction5m.putExtra("ignoreDuration", 5);
PendingIntent pendingIntent5m = PendingIntent.getBroadcast(context, 1, intentAction5m, PendingIntent.FLAG_UPDATE_CURRENT);
NotificationCompat.Action actionIgnore5m = new
NotificationCompat.Action(R.drawable.ic_notif_aaps, resourceHelper.gs(R.string.ignore5m,"Ignore 5m"), pendingIntent5m);
NotificationCompat.Action(R.drawable.ic_notif_aaps, resourceHelper.gs(R.string.ignore5m, "Ignore 5m"), pendingIntent5m);
Intent intentAction15m = new Intent(context, CarbSuggestionReceiver.class);
intentAction15m.putExtra("ignoreDuration", 15);
PendingIntent pendingIntent15m = PendingIntent.getBroadcast(context, 1, intentAction15m, PendingIntent.FLAG_UPDATE_CURRENT);
NotificationCompat.Action actionIgnore15m = new
NotificationCompat.Action(R.drawable.ic_notif_aaps, resourceHelper.gs(R.string.ignore15m,"Ignore 15m"), pendingIntent15m);
NotificationCompat.Action(R.drawable.ic_notif_aaps, resourceHelper.gs(R.string.ignore15m, "Ignore 15m"), pendingIntent15m);
Intent intentAction30m = new Intent(context, CarbSuggestionReceiver.class);
intentAction30m.putExtra("ignoreDuration", 30);
PendingIntent pendingIntent30m = PendingIntent.getBroadcast(context, 1, intentAction30m, PendingIntent.FLAG_UPDATE_CURRENT);
NotificationCompat.Action actionIgnore30m = new
NotificationCompat.Action(R.drawable.ic_notif_aaps, resourceHelper.gs(R.string.ignore30m,"Ignore 30m"), pendingIntent30m);
NotificationCompat.Action(R.drawable.ic_notif_aaps, resourceHelper.gs(R.string.ignore30m, "Ignore 30m"), pendingIntent30m);
NotificationCompat.Builder builder = new NotificationCompat.Builder(context, CHANNEL_ID);
builder.setSmallIcon(R.drawable.notif_icon)
@ -511,7 +504,7 @@ public class LoopPlugin extends PluginBase implements LoopInterface {
} else {
//If carbs were required previously, but are no longer needed, dismiss notifications
if ( prevCarbsreq > 0 ) {
if (prevCarbsreq > 0) {
dismissSuggestion();
rxBus.send(new EventDismissNotification(Notification.CARBS_REQUIRED));
}
@ -591,8 +584,8 @@ public class LoopPlugin extends PluginBase implements LoopInterface {
}
}
public void disableCarbSuggestions(int duartionMinutes) {
carbsSuggestionsSuspendedUntil = System.currentTimeMillis() + (duartionMinutes*60*1000);
public void disableCarbSuggestions(int durationMinutes) {
carbsSuggestionsSuspendedUntil = System.currentTimeMillis() + (durationMinutes * 60 * 1000);
dismissSuggestion();
}

View file

@ -1,6 +1,5 @@
package info.nightscout.androidaps.plugins.constraints.objectives.objectives;
import android.app.Activity;
import android.content.Context;
import android.graphics.Color;
import android.text.util.Linkify;
@ -185,9 +184,9 @@ public abstract class Objective {
int days = (int) Math.floor((double) duration / T.days(1).msecs());
int hours = (int) Math.floor((double) duration / T.hours(1).msecs());
int minutes = (int) Math.floor((double) duration / T.mins(1).msecs());
if (days > 0) return resourceHelper.gq(R.plurals.objective_days, days, days);
else if (hours > 0) return resourceHelper.gq(R.plurals.objective_hours, hours, hours);
else return resourceHelper.gq(R.plurals.objective_minutes, minutes, minutes);
if (days > 0) return resourceHelper.gq(R.plurals.days, days, days);
else if (hours > 0) return resourceHelper.gq(R.plurals.hours, hours, hours);
else return resourceHelper.gq(R.plurals.minutes, minutes, minutes);
}
}

View file

@ -1,12 +1,11 @@
package info.nightscout.androidaps.plugins.general.automation
import android.content.Context
import android.content.Intent
import android.os.Build
import android.os.Handler
import android.os.HandlerThread
import android.os.SystemClock
import dagger.android.HasAndroidInjector
import info.nightscout.androidaps.Config
import info.nightscout.androidaps.R
import info.nightscout.androidaps.events.EventBTChange
import info.nightscout.androidaps.events.EventChargingState
@ -27,7 +26,7 @@ import info.nightscout.androidaps.plugins.general.automation.events.EventAutomat
import info.nightscout.androidaps.plugins.general.automation.triggers.*
import info.nightscout.androidaps.plugins.iob.iobCobCalculator.events.EventAutosensCalculationFinished
import info.nightscout.androidaps.queue.Callback
import info.nightscout.androidaps.services.LocationService
import info.nightscout.androidaps.services.LocationServiceHelper
import info.nightscout.androidaps.utils.DateUtil
import info.nightscout.androidaps.utils.FabricPrivacy
import info.nightscout.androidaps.utils.T
@ -55,6 +54,8 @@ class AutomationPlugin @Inject constructor(
private val rxBus: RxBusWrapper,
private val constraintChecker: ConstraintChecker,
aapsLogger: AAPSLogger,
private val config: Config,
private val locationServiceHelper: LocationServiceHelper,
private val dateUtil: DateUtil
) : PluginBase(PluginDescription()
.mainType(PluginType.GENERAL)
@ -62,6 +63,9 @@ class AutomationPlugin @Inject constructor(
.pluginIcon(R.drawable.ic_automation)
.pluginName(R.string.automation)
.shortName(R.string.automation_short)
.showInList(config.APS)
.neverVisible(!config.APS)
.alwaysEnabled(!config.APS)
.preferencesId(R.xml.pref_automation)
.description(R.string.automation_description),
aapsLogger, resourceHelper, injector
@ -91,10 +95,7 @@ class AutomationPlugin @Inject constructor(
}
override fun onStart() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O)
context.startForegroundService(Intent(context, LocationService::class.java))
else
context.startService(Intent(context, LocationService::class.java))
locationServiceHelper.startService(context)
super.onStart()
loadFromSP()
@ -105,17 +106,14 @@ class AutomationPlugin @Inject constructor(
.observeOn(Schedulers.io())
.subscribe({ e ->
if (e.isChanged(resourceHelper, R.string.key_location)) {
context.stopService(Intent(context, LocationService::class.java))
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O)
context.startForegroundService(Intent(context, LocationService::class.java))
else
context.startService(Intent(context, LocationService::class.java))
locationServiceHelper.stopService(context)
locationServiceHelper.startService(context)
}
}, { fabricPrivacy.logException(it) })
}, fabricPrivacy::logException)
disposable += rxBus
.toObservable(EventAutomationDataChanged::class.java)
.observeOn(Schedulers.io())
.subscribe({ storeToSP() }, { fabricPrivacy.logException(it) })
.subscribe({ storeToSP() }, fabricPrivacy::logException)
disposable += rxBus
.toObservable(EventLocationChange::class.java)
.observeOn(Schedulers.io())
@ -124,19 +122,19 @@ class AutomationPlugin @Inject constructor(
aapsLogger.debug(LTag.AUTOMATION, "Grabbed location: $it.location.latitude $it.location.longitude Provider: $it.location.provider")
processActions()
}
}, { fabricPrivacy.logException(it) })
}, fabricPrivacy::logException)
disposable += rxBus
.toObservable(EventChargingState::class.java)
.observeOn(Schedulers.io())
.subscribe({ processActions() }, { fabricPrivacy.logException(it) })
.subscribe({ processActions() }, fabricPrivacy::logException)
disposable += rxBus
.toObservable(EventNetworkChange::class.java)
.observeOn(Schedulers.io())
.subscribe({ processActions() }, { fabricPrivacy.logException(it) })
.subscribe({ processActions() }, fabricPrivacy::logException)
disposable += rxBus
.toObservable(EventAutosensCalculationFinished::class.java)
.observeOn(Schedulers.io())
.subscribe({ processActions() }, { fabricPrivacy.logException(it) })
.subscribe({ processActions() }, fabricPrivacy::logException)
disposable += rxBus
.toObservable(EventBTChange::class.java)
.observeOn(Schedulers.io())
@ -144,13 +142,13 @@ class AutomationPlugin @Inject constructor(
aapsLogger.debug(LTag.AUTOMATION, "Grabbed new BT event: $it")
btConnects.add(it)
processActions()
}, { fabricPrivacy.logException(it) })
}, fabricPrivacy::logException)
}
override fun onStop() {
disposable.clear()
loopHandler.removeCallbacks(refreshLoop)
context.stopService(Intent(context, LocationService::class.java))
locationServiceHelper.stopService(context)
super.onStop()
}
@ -187,20 +185,24 @@ class AutomationPlugin @Inject constructor(
@Synchronized
private fun processActions() {
var userEventsEnabled = true
if (loopPlugin.isSuspended || !loopPlugin.isEnabled()) {
aapsLogger.debug(LTag.AUTOMATION, "Loop deactivated")
executionLog.add(resourceHelper.gs(R.string.smscommunicator_loopisdisabled))
userEventsEnabled = false
}
val enabled = constraintChecker.isAutomationEnabled()
if (!enabled.value()) {
executionLog.add(enabled.getMostLimitedReasons(aapsLogger))
userEventsEnabled = false
var userEventsEnabled = config.APS
if (config.APS) {
if (loopPlugin.isSuspended || !loopPlugin.isEnabled()) {
aapsLogger.debug(LTag.AUTOMATION, "Loop deactivated")
executionLog.add(resourceHelper.gs(R.string.smscommunicator_loopisdisabled))
userEventsEnabled = false
}
val enabled = constraintChecker.isAutomationEnabled()
if (!enabled.value()) {
executionLog.add(enabled.getMostLimitedReasons(aapsLogger))
userEventsEnabled = false
}
}
aapsLogger.debug(LTag.AUTOMATION, "processActions")
for (event in automationEvents) {
val iterator = automationEvents.iterator()
while (iterator.hasNext()) {
val event = iterator.next()
if (event.isEnabled && event.shouldRun() && event.trigger.shouldRun() && event.getPreconditions().shouldRun()) {
if (event.systemAction || userEventsEnabled) {
val actions = event.actions

View file

@ -12,16 +12,16 @@ import androidx.core.content.ContextCompat
import androidx.fragment.app.Fragment
import androidx.fragment.app.FragmentActivity
import info.nightscout.androidaps.BuildConfig
import info.nightscout.androidaps.MainActivity
import info.nightscout.androidaps.R
import info.nightscout.androidaps.activities.DaggerAppCompatActivityWithResult
import info.nightscout.androidaps.activities.PreferencesActivity
import info.nightscout.androidaps.activities.SingleFragmentActivity
import info.nightscout.androidaps.events.EventAppExit
import info.nightscout.androidaps.interfaces.ConfigInterface
import info.nightscout.androidaps.interfaces.ImportExportPrefsInterface
import info.nightscout.androidaps.logging.AAPSLogger
import info.nightscout.androidaps.logging.LTag
import info.nightscout.androidaps.plugins.bus.RxBusWrapper
import info.nightscout.androidaps.plugins.general.maintenance.formats.*
import info.nightscout.androidaps.setupwizard.SetupWizardActivity
import info.nightscout.androidaps.utils.AndroidPermission
import info.nightscout.androidaps.utils.DateUtil
import info.nightscout.androidaps.utils.ToastUtils
@ -40,6 +40,7 @@ import java.io.IOException
import java.util.*
import javax.inject.Inject
import javax.inject.Singleton
import kotlin.system.exitProcess
/**
* Created by mike on 03.07.2016.
@ -53,31 +54,30 @@ class ImportExportPrefs @Inject constructor(
private val buildHelper: BuildHelper,
private val rxBus: RxBusWrapper,
private val passwordCheck: PasswordCheck,
private val config: ConfigInterface,
private val androidPermission: AndroidPermission,
private val classicPrefsFormat: ClassicPrefsFormat,
private val encryptedPrefsFormat: EncryptedPrefsFormat,
private val prefFileList: PrefFileListProvider
) {
) : ImportExportPrefsInterface {
val TAG = LTag.CORE
fun prefsFileExists(): Boolean {
override fun prefsFileExists(): Boolean {
return prefFileList.listPreferenceFiles().size > 0
}
fun exportSharedPreferences(f: Fragment) {
override fun exportSharedPreferences(f: Fragment) {
f.activity?.let { exportSharedPreferences(it) }
}
fun verifyStoragePermissions(fragment: Fragment, onGranted: Runnable) {
override fun verifyStoragePermissions(fragment: Fragment, onGranted: Runnable) {
fragment.context?.let { ctx ->
val permission = ContextCompat.checkSelfPermission(ctx,
Manifest.permission.WRITE_EXTERNAL_STORAGE)
if (permission != PackageManager.PERMISSION_GRANTED) {
// We don't have permission so prompt the user
fragment.activity?.let {
androidPermission.askForPermission(it, arrayOf(Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.WRITE_EXTERNAL_STORAGE), AndroidPermission.CASE_STORAGE)
androidPermission.askForPermission(it,
arrayOf(Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE))
}
} else {
onGranted.run()
@ -93,7 +93,7 @@ class ImportExportPrefs @Inject constructor(
metadata[PrefsMetadataKey.CREATED_AT] = PrefMetadata(DateUtil.toISOString(Date()), PrefsStatus.OK)
metadata[PrefsMetadataKey.AAPS_VERSION] = PrefMetadata(BuildConfig.VERSION_NAME, PrefsStatus.OK)
metadata[PrefsMetadataKey.AAPS_FLAVOUR] = PrefMetadata(BuildConfig.FLAVOR, PrefsStatus.OK)
metadata[PrefsMetadataKey.DEVICE_MODEL] = PrefMetadata(getCurrentDeviceModelString(), PrefsStatus.OK)
metadata[PrefsMetadataKey.DEVICE_MODEL] = PrefMetadata(config.currentDeviceModelString, PrefsStatus.OK)
if (prefsEncryptionIsDisabled()) {
metadata[PrefsMetadataKey.ENCRYPTION] = PrefMetadata("Disabled", PrefsStatus.DISABLED)
@ -119,8 +119,7 @@ class ImportExportPrefs @Inject constructor(
// name we detect from OS
val systemName = n1 ?: n2 ?: n3 ?: n4 ?: n5 ?: n6 ?: defaultPatientName
val name = if (patientName.isNotEmpty() && patientName != defaultPatientName) patientName else systemName
return name
return if (patientName.isNotEmpty() && patientName != defaultPatientName) patientName else systemName
}
private fun prefsEncryptionIsDisabled() =
@ -134,6 +133,7 @@ class ImportExportPrefs @Inject constructor(
})
}
@Suppress("SameParameterValue")
private fun askForEncryptionPass(activity: FragmentActivity, @StringRes canceledMsg: Int, @StringRes passwordName: Int, @StringRes passwordExplanation: Int?,
@StringRes passwordWarning: Int?, then: ((password: String) -> Unit)) {
passwordCheck.queryAnyPassword(activity, passwordName, R.string.key_master_password, passwordExplanation, passwordWarning, { password ->
@ -143,6 +143,7 @@ class ImportExportPrefs @Inject constructor(
})
}
@Suppress("SameParameterValue")
private fun askForMasterPassIfNeeded(activity: FragmentActivity, @StringRes canceledMsg: Int, then: ((password: String) -> Unit)) {
if (prefsEncryptionIsDisabled()) {
then("")
@ -239,49 +240,45 @@ class ImportExportPrefs @Inject constructor(
ToastUtils.okToast(activity, resourceHelper.gs(R.string.exported))
} catch (e: FileNotFoundException) {
ToastUtils.errorToast(activity, resourceHelper.gs(R.string.filenotfound) + " " + newFile)
log.error(TAG, "Unhandled exception", e)
log.error(LTag.CORE, "Unhandled exception", e)
} catch (e: IOException) {
ToastUtils.errorToast(activity, e.message)
log.error(TAG, "Unhandled exception", e)
log.error(LTag.CORE, "Unhandled exception", e)
} catch (e: PrefFileNotFoundError) {
ToastUtils.Long.errorToast(activity, resourceHelper.gs(R.string.preferences_export_canceled)
+ "\n\n" + resourceHelper.gs(R.string.filenotfound)
+ ": " + e.message
+ "\n\n" + resourceHelper.gs(R.string.needstoragepermission))
log.error(TAG, "File system exception", e)
log.error(LTag.CORE, "File system exception", e)
} catch (e: PrefIOError) {
ToastUtils.Long.errorToast(activity, resourceHelper.gs(R.string.preferences_export_canceled)
+ "\n\n" + resourceHelper.gs(R.string.needstoragepermission)
+ ": " + e.message)
log.error(TAG, "File system exception", e)
log.error(LTag.CORE, "File system exception", e)
}
}
}
fun importSharedPreferences(fragment: Fragment) {
override fun importSharedPreferences(fragment: Fragment) {
fragment.activity?.let { fragmentAct ->
importSharedPreferences(fragmentAct)
}
}
fun importSharedPreferences(activity: FragmentActivity) {
override fun importSharedPreferences(activity: FragmentActivity) {
try {
if (activity is SingleFragmentActivity)
activity.callForPrefFile.launch(null)
if (activity is MainActivity)
activity.callForPrefFile.launch(null)
if (activity is SetupWizardActivity)
if (activity is DaggerAppCompatActivityWithResult)
activity.callForPrefFile.launch(null)
} catch (e: IllegalArgumentException) {
// this exception happens on some early implementations of ActivityResult contracts
// when registered and called for the second time
ToastUtils.errorToast(activity, resourceHelper.gs(R.string.goto_main_try_again))
log.error(TAG, "Internal android framework exception", e)
log.error(LTag.CORE, "Internal android framework exception", e)
}
}
fun importSharedPreferences(activity: FragmentActivity, importFile: PrefsFile) {
override fun importSharedPreferences(activity: FragmentActivity, importFile: PrefsFile) {
askToConfirmImport(activity, importFile) { password ->
@ -301,7 +298,7 @@ class ImportExportPrefs @Inject constructor(
promptForDecryptionPasswordIfNeeded(activity, prefsAttempted, importOkAttempted, format, importFile) { prefs, importOk ->
// if at end we allow to import preferences
val importPossible = (importOk || buildHelper.isEngineeringMode()) && (prefs.values.size > 0)
val importPossible = (importOk || buildHelper.isEngineeringMode()) && (prefs.values.isNotEmpty())
PrefImportSummaryDialog.showSummary(activity, importOk, importPossible, prefs, {
if (importPossible) {
@ -325,9 +322,9 @@ class ImportExportPrefs @Inject constructor(
} catch (e: PrefFileNotFoundError) {
ToastUtils.errorToast(activity, resourceHelper.gs(R.string.filenotfound) + " " + importFile)
log.error(TAG, "Unhandled exception", e)
log.error(LTag.CORE, "Unhandled exception", e)
} catch (e: PrefIOError) {
log.error(TAG, "Unhandled exception", e)
log.error(LTag.CORE, "Unhandled exception", e)
ToastUtils.errorToast(activity, e.message)
}
}
@ -346,13 +343,13 @@ class ImportExportPrefs @Inject constructor(
private fun restartAppAfterImport(context: Context) {
sp.putBoolean(R.string.key_setupwizard_processed, true)
show(context, resourceHelper.gs(R.string.setting_imported), resourceHelper.gs(R.string.restartingapp), Runnable {
log.debug(TAG, "Exiting")
log.debug(LTag.CORE, "Exiting")
rxBus.send(EventAppExit())
if (context is AppCompatActivity) {
context.finish()
}
System.runFinalization()
System.exit(0)
exitProcess(0)
})
}
}

View file

@ -8,6 +8,7 @@ import android.view.ViewGroup
import dagger.android.support.DaggerFragment
import info.nightscout.androidaps.MainApp
import info.nightscout.androidaps.R
import info.nightscout.androidaps.interfaces.ImportExportPrefsInterface
import info.nightscout.androidaps.plugins.general.food.FoodPlugin
import info.nightscout.androidaps.plugins.general.maintenance.activities.LogSettingActivity
import info.nightscout.androidaps.plugins.treatments.TreatmentsPlugin
@ -23,7 +24,7 @@ class MaintenanceFragment : DaggerFragment() {
@Inject lateinit var resourceHelper: ResourceHelper
@Inject lateinit var treatmentsPlugin: TreatmentsPlugin
@Inject lateinit var foodPlugin: FoodPlugin
@Inject lateinit var importExportPrefs: ImportExportPrefs
@Inject lateinit var importExportPrefs: ImportExportPrefsInterface
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
return inflater.inflate(R.layout.maintenance_fragment, container, false)

View file

@ -7,37 +7,41 @@ import android.widget.LinearLayout
import android.widget.TextView
import info.nightscout.androidaps.R
import info.nightscout.androidaps.activities.NoSplashAppCompatActivity
import info.nightscout.androidaps.databinding.ActivityLogsettingBinding
import info.nightscout.androidaps.logging.L
import kotlinx.android.synthetic.main.activity_logsetting.*
import javax.inject.Inject
class LogSettingActivity : NoSplashAppCompatActivity() {
@Inject lateinit var l :L
@Inject lateinit var l: L
private lateinit var binding: ActivityLogsettingBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_logsetting)
binding = ActivityLogsettingBinding.inflate(layoutInflater)
setContentView(binding.root)
createViewsForSettings()
logsettings_reset.setOnClickListener {
binding.reset.setOnClickListener {
l.resetToDefaults()
createViewsForSettings()
}
ok.setOnClickListener { finish() }
binding.ok.setOnClickListener { finish() }
}
private fun createViewsForSettings() {
logsettings_placeholder.removeAllViews()
binding.placeholder.removeAllViews()
for (element in l.getLogElements()) {
val logViewHolder = LogViewHolder(element)
logsettings_placeholder.addView(logViewHolder.baseView)
binding.placeholder.addView(logViewHolder.baseView)
}
}
internal inner class LogViewHolder(element: L.LogElement) {
@Suppress("InflateParams")
var baseView = layoutInflater.inflate(R.layout.logsettings_item, null) as LinearLayout

View file

@ -1,135 +0,0 @@
package info.nightscout.androidaps.plugins.general.maintenance.activities
import android.content.Context
import android.content.Intent
import android.os.Bundle
import android.view.LayoutInflater
import android.view.MenuItem
import android.view.View
import android.view.ViewGroup
import android.widget.TextView
import androidx.fragment.app.FragmentActivity
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import dagger.android.support.DaggerAppCompatActivity
import info.nightscout.androidaps.R
import info.nightscout.androidaps.plugins.general.maintenance.PrefFileListProvider
import info.nightscout.androidaps.plugins.general.maintenance.PrefsFile
import info.nightscout.androidaps.plugins.general.maintenance.PrefsFileContract
import info.nightscout.androidaps.plugins.general.maintenance.formats.PrefsFormatsHandler
import info.nightscout.androidaps.plugins.general.maintenance.formats.PrefsMetadataKey
import info.nightscout.androidaps.plugins.general.maintenance.formats.PrefsStatus
import info.nightscout.androidaps.utils.locale.LocaleHelper
import info.nightscout.androidaps.utils.resources.ResourceHelper
import kotlinx.android.synthetic.main.maintenance_importlist_activity.*
import javax.inject.Inject
class PrefImportListActivity : DaggerAppCompatActivity() {
@Inject lateinit var resourceHelper: ResourceHelper
@Inject lateinit var prefFileListProvider: PrefFileListProvider
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setTheme(R.style.AppTheme)
setContentView(R.layout.maintenance_importlist_activity)
title = resourceHelper.gs(R.string.preferences_import_list_title)
supportActionBar?.setDisplayHomeAsUpEnabled(true)
supportActionBar?.setDisplayShowHomeEnabled(true)
supportActionBar?.setDisplayShowTitleEnabled(true)
importlist_recyclerview.layoutManager = LinearLayoutManager(this)
importlist_recyclerview.adapter = RecyclerViewAdapter(prefFileListProvider.listPreferenceFiles(loadMetadata = true))
}
inner class RecyclerViewAdapter internal constructor(private var prefFileList: List<PrefsFile>) : RecyclerView.Adapter<RecyclerViewAdapter.PrefFileViewHolder>() {
inner class PrefFileViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
var fileName: TextView = itemView.findViewById(R.id.filelist_name)
var fileDir: TextView = itemView.findViewById(R.id.filelist_dir)
var metaDateTime: TextView = itemView.findViewById(R.id.meta_date_time)
var metaDeviceName: TextView = itemView.findViewById(R.id.meta_device_name)
var metaAppVersion: TextView = itemView.findViewById(R.id.meta_app_version)
var metaVariantFormat: TextView = itemView.findViewById(R.id.meta_variant_format)
var metalineName: View = itemView.findViewById(R.id.metaline_name)
var metaDateTimeIcon: View = itemView.findViewById(R.id.meta_date_time_icon)
init {
itemView.isClickable = true
itemView.setOnClickListener {
val prefFile = fileName.tag as PrefsFile
val i = Intent()
i.putExtra(PrefsFileContract.OUTPUT_PARAM, prefFile)
setResult(FragmentActivity.RESULT_OK, i)
finish()
}
}
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): PrefFileViewHolder {
val v = LayoutInflater.from(parent.context).inflate(R.layout.maintenance_importlist_item, parent, false)
return PrefFileViewHolder(v)
}
override fun getItemCount(): Int {
return prefFileList.size
}
override fun onBindViewHolder(holder: PrefFileViewHolder, position: Int) {
val prefFile = prefFileList[position]
holder.fileName.text = prefFile.file.name
holder.fileName.tag = prefFile
holder.fileDir.text = resourceHelper.gs(R.string.in_directory, prefFile.file.parentFile.absolutePath)
val visible = if (prefFile.handler == PrefsFormatsHandler.CLASSIC) View.GONE else View.VISIBLE
holder.metalineName.visibility = visible
holder.metaDateTimeIcon.visibility = visible
holder.metaAppVersion.visibility = visible
if (prefFile.handler == PrefsFormatsHandler.CLASSIC) {
holder.metaVariantFormat.text = resourceHelper.gs(R.string.metadata_format_old)
holder.metaVariantFormat.setTextColor(resourceHelper.gc(R.color.metadataTextWarning))
holder.metaDateTime.text = " "
} else {
prefFile.metadata[PrefsMetadataKey.AAPS_FLAVOUR]?.let {
holder.metaVariantFormat.text = it.value
val color = if (it.status == PrefsStatus.OK) R.color.metadataOk else R.color.metadataTextWarning
holder.metaVariantFormat.setTextColor(resourceHelper.gc(color))
}
prefFile.metadata[PrefsMetadataKey.CREATED_AT]?.let {
holder.metaDateTime.text = prefFileListProvider.formatExportedAgo(it.value)
}
prefFile.metadata[PrefsMetadataKey.AAPS_VERSION]?.let {
holder.metaAppVersion.text = it.value
val color = if (it.status == PrefsStatus.OK) R.color.metadataOk else R.color.metadataTextWarning
holder.metaAppVersion.setTextColor(resourceHelper.gc(color))
}
prefFile.metadata[PrefsMetadataKey.DEVICE_NAME]?.let {
holder.metaDeviceName.text = it.value
}
}
}
}
override fun onOptionsItemSelected(item: MenuItem): Boolean {
if (item.itemId == android.R.id.home) {
finish()
return true
}
return false
}
public override fun attachBaseContext(newBase: Context) {
super.attachBaseContext(LocaleHelper.wrap(newBase))
}
}

View file

@ -85,6 +85,7 @@ class OpenHumansUploader @Inject constructor(
}
private val openHumansAPI = OpenHumansAPI(OPEN_HUMANS_URL, CLIENT_ID, CLIENT_SECRET, REDIRECT_URL)
@Suppress("PrivatePropertyName")
private val FILE_NAME_DATE_FORMAT = SimpleDateFormat("yyyyMMdd'T'HHmmss", Locale.US).apply { timeZone = TimeZone.getTimeZone("UTC") }
private var isSetup
@ -126,12 +127,12 @@ class OpenHumansUploader @Inject constructor(
private val appId: UUID
get() {
val id = sp.getStringOrNull("openhumans_appid", null)
if (id == null) {
return if (id == null) {
val generated = UUID.randomUUID()
sp.putString("openhumans_appid", generated.toString())
return generated
generated
} else {
return UUID.fromString(id)
UUID.fromString(id)
}
}
@ -140,7 +141,7 @@ class OpenHumansUploader @Inject constructor(
private val wakeLock = (context.getSystemService(Context.POWER_SERVICE) as PowerManager)
.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "AndroidAPS::OpenHumans")
val preferenceChangeDisposable = CompositeDisposable()
private val preferenceChangeDisposable = CompositeDisposable()
override fun onStart() {
super.onStart()
@ -453,7 +454,8 @@ class OpenHumansUploader @Inject constructor(
aapsLogger.error(LTag.OHUPLOADER, "Segmental upload exceptional", it)
}
fun uploadData(maxEntries: Long?): Completable = gatherData(maxEntries)
@Suppress("SameParameterValue")
private fun uploadData(maxEntries: Long?): Completable = gatherData(maxEntries)
.flatMap { data -> refreshAccessTokensIfNeeded().map { accessToken -> accessToken to data } }
.flatMap { uploadFile(it.first, it.second).andThen(Single.just(it.second)) }
.flatMapCompletable {
@ -616,14 +618,12 @@ class OpenHumansUploader @Inject constructor(
}
private fun setupNotificationChannel() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
val notificationManagerCompat = NotificationManagerCompat.from(context)
notificationManagerCompat.createNotificationChannel(NotificationChannel(
NOTIFICATION_CHANNEL,
resourceHelper.gs(R.string.open_humans),
NotificationManager.IMPORTANCE_DEFAULT
))
}
val notificationManagerCompat = NotificationManagerCompat.from(context)
notificationManagerCompat.createNotificationChannel(NotificationChannel(
NOTIFICATION_CHANNEL,
resourceHelper.gs(R.string.open_humans),
NotificationManager.IMPORTANCE_DEFAULT
))
}
private class UploadData(
@ -633,6 +633,7 @@ class OpenHumansUploader @Inject constructor(
val highestQueueId: Long?
)
@Suppress("PrivatePropertyName")
private val HEX_DIGITS = "0123456789ABCDEF".toCharArray()
private fun ByteArray.toHexString(): String {

View file

@ -30,32 +30,32 @@ class StatusLightHandler @Inject constructor(
/**
* applies the extended statusLight subview on the overview fragment
*/
fun updateStatusLights(careportal_canulaage: TextView?, careportal_insulinage: TextView?, careportal_reservoirlevel: TextView?, careportal_sensorage: TextView?, careportal_sensorbatterylevel: TextView?, careportal_pbage: TextView?, careportal_batterylevel: TextView?) {
fun updateStatusLights(careportal_cannula_age: TextView?, careportal_insulin_age: TextView?, careportal_reservoir_level: TextView?, careportal_sensor_age: TextView?, careportal_sensor_battery_level: TextView?, careportal_pb_age: TextView?, careportal_battery_level: TextView?) {
val pump = activePlugin.activePump
val bgSource = activePlugin.activeBgSource
handleAge(careportal_canulaage, CareportalEvent.SITECHANGE, R.string.key_statuslights_cage_warning, 48.0, R.string.key_statuslights_cage_critical, 72.0)
handleAge(careportal_insulinage, CareportalEvent.INSULINCHANGE, R.string.key_statuslights_iage_warning, 72.0, R.string.key_statuslights_iage_critical, 144.0)
handleAge(careportal_sensorage, CareportalEvent.SENSORCHANGE, R.string.key_statuslights_sage_warning, 216.0, R.string.key_statuslights_sage_critical, 240.0)
handleAge(careportal_cannula_age, CareportalEvent.SITECHANGE, R.string.key_statuslights_cage_warning, 48.0, R.string.key_statuslights_cage_critical, 72.0)
handleAge(careportal_insulin_age, CareportalEvent.INSULINCHANGE, R.string.key_statuslights_iage_warning, 72.0, R.string.key_statuslights_iage_critical, 144.0)
handleAge(careportal_sensor_age, CareportalEvent.SENSORCHANGE, R.string.key_statuslights_sage_warning, 216.0, R.string.key_statuslights_sage_critical, 240.0)
if (pump.pumpDescription.isBatteryReplaceable) {
handleAge(careportal_pbage, CareportalEvent.PUMPBATTERYCHANGE, R.string.key_statuslights_bage_warning, 216.0, R.string.key_statuslights_bage_critical, 240.0)
handleAge(careportal_pb_age, CareportalEvent.PUMPBATTERYCHANGE, R.string.key_statuslights_bage_warning, 216.0, R.string.key_statuslights_bage_critical, 240.0)
}
if (!config.NSCLIENT) {
if (pump.model() == PumpType.Insulet_Omnipod) {
handleOmnipodReservoirLevel(careportal_reservoirlevel, R.string.key_statuslights_res_critical, 10.0, R.string.key_statuslights_res_warning, 80.0, pump.reservoirLevel, "U")
handleOmnipodReservoirLevel(careportal_reservoir_level, R.string.key_statuslights_res_critical, 10.0, R.string.key_statuslights_res_warning, 80.0, pump.reservoirLevel, "U")
} else {
handleLevel(careportal_reservoirlevel, R.string.key_statuslights_res_critical, 10.0, R.string.key_statuslights_res_warning, 80.0, pump.reservoirLevel, "U")
handleLevel(careportal_reservoir_level, R.string.key_statuslights_res_critical, 10.0, R.string.key_statuslights_res_warning, 80.0, pump.reservoirLevel, "U")
}
if (bgSource.sensorBatteryLevel != -1)
handleLevel(careportal_sensorbatterylevel, R.string.key_statuslights_sbat_critical, 5.0, R.string.key_statuslights_sbat_warning, 20.0, bgSource.sensorBatteryLevel.toDouble(), "%")
handleLevel(careportal_sensor_battery_level, R.string.key_statuslights_sbat_critical, 5.0, R.string.key_statuslights_sbat_warning, 20.0, bgSource.sensorBatteryLevel.toDouble(), "%")
else
careportal_sensorbatterylevel?.text = ""
careportal_sensor_battery_level?.text = ""
}
if (!config.NSCLIENT) {
if (pump.model() == PumpType.Insulet_Omnipod && pump is OmnipodPumpPlugin) { // instanceof check is needed because at startup, pump can still be VirtualPumpPlugin and that will cause a crash because of the class cast below
handleOmnipodBatteryLevel(careportal_batterylevel, R.string.key_statuslights_bat_critical, 26.0, R.string.key_statuslights_bat_warning, 51.0, pump.batteryLevel.toDouble(), "%", (pump as OmnipodPumpPlugin).isUseRileyLinkBatteryLevel)
if (pump.model() == PumpType.Insulet_Omnipod && pump is OmnipodPumpPlugin) { // instance of check is needed because at startup, pump can still be VirtualPumpPlugin and that will cause a crash because of the class cast below
handleOmnipodBatteryLevel(careportal_battery_level, R.string.key_statuslights_bat_critical, 26.0, R.string.key_statuslights_bat_warning, 51.0, pump.batteryLevel.toDouble(), "%", pump.isUseRileyLinkBatteryLevel)
} else if (pump.model() != PumpType.AccuChekCombo) {
handleLevel(careportal_batterylevel, R.string.key_statuslights_bat_critical, 26.0, R.string.key_statuslights_bat_warning, 51.0, pump.batteryLevel.toDouble(), "%")
handleLevel(careportal_battery_level, R.string.key_statuslights_bat_critical, 26.0, R.string.key_statuslights_bat_warning, 51.0, pump.batteryLevel.toDouble(), "%")
}
}
}
@ -81,6 +81,7 @@ class StatusLightHandler @Inject constructor(
}
// Omnipod only reports reservoir level when it's 50 units or less, so we display "50+U" for any value > 50
@Suppress("SameParameterValue")
private fun handleOmnipodReservoirLevel(view: TextView?, criticalSetting: Int, criticalDefaultValue: Double, warnSetting: Int, warnDefaultValue: Double, level: Double, units: String) {
if (level > OmnipodConstants.MAX_RESERVOIR_READING) {
@Suppress("SetTextI18n")
@ -91,6 +92,7 @@ class StatusLightHandler @Inject constructor(
}
}
@Suppress("SameParameterValue")
private fun handleOmnipodBatteryLevel(view: TextView?, criticalSetting: Int, criticalDefaultValue: Double, warnSetting: Int, warnDefaultValue: Double, level: Double, units: String, useRileyLinkBatteryLevel: Boolean) {
if (useRileyLinkBatteryLevel) {
handleLevel(view, criticalSetting, criticalDefaultValue, warnSetting, warnDefaultValue, level, units)

View file

@ -17,7 +17,6 @@ import info.nightscout.androidaps.plugins.general.overview.events.EventQuickWiza
import info.nightscout.androidaps.utils.DateUtil
import info.nightscout.androidaps.utils.FabricPrivacy
import info.nightscout.androidaps.utils.extensions.plusAssign
import info.nightscout.androidaps.utils.resources.ResourceHelper
import info.nightscout.androidaps.utils.wizard.QuickWizard
import io.reactivex.android.schedulers.AndroidSchedulers
import io.reactivex.disposables.CompositeDisposable
@ -26,7 +25,6 @@ import javax.inject.Inject
class QuickWizardListActivity : NoSplashAppCompatActivity() {
@Inject lateinit var rxBus: RxBusWrapper
@Inject lateinit var resourceHelper: ResourceHelper
@Inject lateinit var fabricPrivacy: FabricPrivacy
@Inject lateinit var quickWizard: QuickWizard
@Inject lateinit var dateUtil: DateUtil

View file

@ -8,7 +8,6 @@ import android.content.Context
import android.content.Intent
import android.media.AudioManager
import android.media.RingtoneManager
import android.os.Build
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
@ -132,14 +131,12 @@ class NotificationStore @Inject constructor(
}
fun createNotificationChannel() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
usesChannels = true
val mNotificationManager = context.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
@SuppressLint("WrongConstant") val channel = NotificationChannel(CHANNEL_ID,
CHANNEL_ID,
NotificationManager.IMPORTANCE_HIGH)
mNotificationManager.createNotificationChannel(channel)
}
usesChannels = true
val mNotificationManager = context.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
@SuppressLint("WrongConstant") val channel = NotificationChannel(CHANNEL_ID,
CHANNEL_ID,
NotificationManager.IMPORTANCE_HIGH)
mNotificationManager.createNotificationChannel(channel)
}
@Synchronized
@ -162,16 +159,6 @@ class NotificationStore @Inject constructor(
return clone
}
/*
private fun unSnooze() {
if (sp.getBoolean(R.string.key_nsalarm_staledata, false)) {
val notification = Notification(Notification.NSALARM, resourceHelper.gs(R.string.nsalarm_staledata), Notification.URGENT)
sp.putLong(R.string.key_snoozedTo, System.currentTimeMillis())
add(notification)
aapsLogger.debug(LTag.NOTIFICATION, "Snoozed to current time and added back notification!")
}
}
*/
inner class NotificationRecyclerViewAdapter internal constructor(private val notificationsList: List<Notification>) : RecyclerView.Adapter<NotificationRecyclerViewAdapter.NotificationsViewHolder>() {
override fun onCreateViewHolder(viewGroup: ViewGroup, viewType: Int): NotificationsViewHolder {

View file

@ -3,6 +3,7 @@ package info.nightscout.androidaps.plugins.general.persistentNotification
import android.app.Notification
import android.app.Service
import android.content.Intent
import android.os.Binder
import android.os.IBinder
import dagger.android.DaggerService
import info.nightscout.androidaps.events.EventAppExit
@ -27,7 +28,13 @@ class DummyService : DaggerService() {
private val disposable = CompositeDisposable()
override fun onBind(intent: Intent?): IBinder? = null
inner class LocalBinder : Binder() {
fun getService(): DummyService = this@DummyService
}
private val binder = LocalBinder()
override fun onBind(intent: Intent): IBinder = binder
override fun onCreate() {
super.onCreate()
@ -44,7 +51,7 @@ class DummyService : DaggerService() {
.subscribe({
aapsLogger.debug(LTag.CORE, "EventAppExit received")
stopSelf()
}, fabricPrivacy::logException )
}, fabricPrivacy::logException)
)
}

View file

@ -0,0 +1,66 @@
package info.nightscout.androidaps.plugins.general.persistentNotification
import android.content.ComponentName
import android.content.Context
import android.content.Intent
import android.content.ServiceConnection
import android.os.Build
import android.os.IBinder
import androidx.annotation.RequiresApi
import info.nightscout.androidaps.interfaces.NotificationHolderInterface
import javax.inject.Inject
import javax.inject.Singleton
/*
This code replaces following
val alarm = Intent(context, DummyService::class.java)
alarm.putExtra("soundid", n.soundId)
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) context.startForegroundService(alarm) else context.startService(alarm)
it fails randomly with error
Context.startForegroundService() did not then call Service.startForeground(): ServiceRecord{e317f7e u0 info.nightscout.nsclient/info.nightscout.androidaps.services.DummyService}
*/
@RequiresApi(Build.VERSION_CODES.O)
@Singleton
class DummyServiceHelper @Inject constructor(
private val notificationHolder: NotificationHolderInterface
) {
fun startService(context: Context) {
val connection = object : ServiceConnection {
override fun onServiceConnected(name: ComponentName?, service: IBinder?) {
// The binder of the service that returns the instance that is created.
val binder: DummyService.LocalBinder = service as DummyService.LocalBinder
val dummyService: DummyService = binder.getService()
context.startForegroundService(Intent(context, DummyService::class.java))
// This is the key: Without waiting Android Framework to call this method
// inside Service.onCreate(), immediately call here to post the notification.
dummyService.startForeground(notificationHolder.notificationID, notificationHolder.notification)
// Release the connection to prevent leaks.
context.unbindService(this)
}
override fun onServiceDisconnected(name: ComponentName?) {
}
}
try {
context.bindService(Intent(context, DummyService::class.java), connection, Context.BIND_AUTO_CREATE)
} catch (ignored: RuntimeException) {
// This is probably a broadcast receiver context even though we are calling getApplicationContext().
// Just call startForegroundService instead since we cannot bind a service to a
// broadcast receiver context. The service also have to call startForeground in
// this case.
context.startForegroundService(Intent(context, DummyService::class.java))
}
}
fun stopService(context: Context) {
context.stopService(Intent(context, DummyService::class.java))
}
}

View file

@ -5,7 +5,6 @@ import android.app.NotificationManager
import android.app.PendingIntent
import android.content.Context
import android.content.Intent
import android.os.Build
import androidx.core.app.NotificationCompat
import androidx.core.app.RemoteInput
import androidx.core.app.TaskStackBuilder
@ -31,18 +30,20 @@ import io.reactivex.schedulers.Schedulers
import javax.inject.Inject
import javax.inject.Singleton
@Suppress("PrivatePropertyName")
@Singleton
class PersistentNotificationPlugin @Inject constructor(
injector: HasAndroidInjector,
aapsLogger: AAPSLogger,
resourceHelper: ResourceHelper,
private var profileFunction: ProfileFunction,
private var fabricPrivacy: FabricPrivacy,
private var activePlugins: ActivePluginProvider,
private var iobCobCalculatorPlugin: IobCobCalculatorPlugin,
private var rxBus: RxBusWrapper,
private var context: Context,
private var notificationHolder: NotificationHolder,
private val profileFunction: ProfileFunction,
private val fabricPrivacy: FabricPrivacy,
private val activePlugins: ActivePluginProvider,
private val iobCobCalculatorPlugin: IobCobCalculatorPlugin,
private val rxBus: RxBusWrapper,
private val context: Context,
private val notificationHolder: NotificationHolder,
private val dummyServiceHelper: DummyServiceHelper,
private val iconsProvider: IconsProvider,
private val databaseHelper: DatabaseHelperInterface
) : PluginBase(PluginDescription()
@ -106,25 +107,20 @@ class PersistentNotificationPlugin @Inject constructor(
}
private fun createNotificationChannel() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
val mNotificationManager = context.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
val channel = NotificationChannel(notificationHolder.channelID, notificationHolder.channelID as CharSequence, NotificationManager.IMPORTANCE_HIGH)
mNotificationManager.createNotificationChannel(channel)
}
val mNotificationManager = context.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
val channel = NotificationChannel(notificationHolder.channelID, notificationHolder.channelID as CharSequence, NotificationManager.IMPORTANCE_HIGH)
mNotificationManager.createNotificationChannel(channel)
}
override fun onStop() {
disposable.clear()
context.stopService(Intent(context, DummyService::class.java))
dummyServiceHelper.stopService(context)
super.onStop()
}
private fun triggerNotificationUpdate() {
updateNotification()
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O)
context.startForegroundService(Intent(context, DummyService::class.java))
else
context.startService(Intent(context, DummyService::class.java))
dummyServiceHelper.startService(context)
}
private fun updateNotification() {
@ -134,31 +130,31 @@ class PersistentNotificationPlugin @Inject constructor(
var line3: String? = null
var unreadConversationBuilder: NotificationCompat.CarExtender.UnreadConversation.Builder? = null
if (profileFunction.isProfileValid("Notification")) {
var line1_aa: String
var line1aa: String
val units = profileFunction.getUnits()
val lastBG = iobCobCalculatorPlugin.lastBg()
val glucoseStatus = GlucoseStatus(injector).glucoseStatusData
if (lastBG != null) {
line1_aa = lastBG.valueToUnitsToString(units)
line1 = line1_aa
line1aa = lastBG.valueToUnitsToString(units)
line1 = line1aa
if (glucoseStatus != null) {
line1 += (" Δ" + Profile.toSignedUnitsString(glucoseStatus.delta, glucoseStatus.delta * Constants.MGDL_TO_MMOLL, units)
+ " avgΔ" + Profile.toSignedUnitsString(glucoseStatus.avgdelta, glucoseStatus.avgdelta * Constants.MGDL_TO_MMOLL, units))
line1_aa += " " + lastBG.directionToSymbol(databaseHelper)
line1aa += " " + lastBG.directionToSymbol(databaseHelper)
} else {
line1 += " " +
resourceHelper.gs(R.string.old_data) +
" "
line1_aa += "$line1."
line1aa += "$line1."
}
} else {
line1_aa = resourceHelper.gs(R.string.missed_bg_readings)
line1 = line1_aa
line1aa = resourceHelper.gs(R.string.missed_bg_readings)
line1 = line1aa
}
val activeTemp = activePlugins.activeTreatments.getTempBasalFromHistory(System.currentTimeMillis())
if (activeTemp != null) {
line1 += " " + activeTemp.toStringShort()
line1_aa += " " + activeTemp.toStringShort() + "."
line1aa += " " + activeTemp.toStringShort() + "."
}
//IOB
activePlugins.activeTreatments.updateTotalIOBTreatments()
@ -166,11 +162,11 @@ class PersistentNotificationPlugin @Inject constructor(
val bolusIob = activePlugins.activeTreatments.lastCalculationTreatments.round()
val basalIob = activePlugins.activeTreatments.lastCalculationTempBasals.round()
line2 = resourceHelper.gs(R.string.treatments_iob_label_string) + " " + DecimalFormatter.to2Decimal(bolusIob.iob + basalIob.basaliob) + "U " + resourceHelper.gs(R.string.cob) + ": " + iobCobCalculatorPlugin.getCobInfo(false, "PersistentNotificationPlugin").generateCOBString()
val line2_aa = resourceHelper.gs(R.string.treatments_iob_label_string) + " " + DecimalFormatter.to2Decimal(bolusIob.iob + basalIob.basaliob) + "U. " + resourceHelper.gs(R.string.cob) + ": " + iobCobCalculatorPlugin.getCobInfo(false, "PersistentNotificationPlugin").generateCOBString() + "."
val line2aa = resourceHelper.gs(R.string.treatments_iob_label_string) + " " + DecimalFormatter.to2Decimal(bolusIob.iob + basalIob.basaliob) + "U. " + resourceHelper.gs(R.string.cob) + ": " + iobCobCalculatorPlugin.getCobInfo(false, "PersistentNotificationPlugin").generateCOBString() + "."
line3 = DecimalFormatter.to2Decimal(pump.baseBasalRate) + " U/h"
var line3_aa = DecimalFormatter.to2Decimal(pump.baseBasalRate) + " U/h."
var line3aa = DecimalFormatter.to2Decimal(pump.baseBasalRate) + " U/h."
line3 += " - " + profileFunction.getProfileName()
line3_aa += " - " + profileFunction.getProfileName() + "."
line3aa += " - " + profileFunction.getProfileName() + "."
/// For Android Auto
val msgReadIntent = Intent()
.addFlags(Intent.FLAG_INCLUDE_STOPPED_PACKAGES)
@ -194,12 +190,12 @@ class PersistentNotificationPlugin @Inject constructor(
// Build a RemoteInput for receiving voice input from devices
val remoteInput = RemoteInput.Builder(EXTRA_VOICE_REPLY).build()
// Create the UnreadConversation
unreadConversationBuilder = NotificationCompat.CarExtender.UnreadConversation.Builder(line1_aa + "\n" + line2_aa)
unreadConversationBuilder = NotificationCompat.CarExtender.UnreadConversation.Builder(line1aa + "\n" + line2aa)
.setLatestTimestamp(System.currentTimeMillis())
.setReadPendingIntent(msgReadPendingIntent)
.setReplyAction(msgReplyPendingIntent, remoteInput)
/// Add dot to produce a "more natural sounding result"
unreadConversationBuilder.addMessage(line3_aa)
unreadConversationBuilder.addMessage(line3aa)
/// End Android Auto
} else {
line1 = resourceHelper.gs(R.string.noprofileset)

View file

@ -21,17 +21,16 @@ import info.nightscout.androidaps.plugins.general.smsCommunicator.otp.OneTimePas
import info.nightscout.androidaps.utils.FabricPrivacy
import info.nightscout.androidaps.utils.ToastUtils
import info.nightscout.androidaps.utils.alertDialogs.OKDialog
import info.nightscout.androidaps.utils.resources.ResourceHelper
import kotlinx.android.synthetic.main.activity_smscommunicator_otp.*
import net.glxn.qrgen.android.QRCode
import javax.inject.Inject
class SmsCommunicatorOtpActivity : NoSplashAppCompatActivity() {
@Inject lateinit var fabricPrivacy: FabricPrivacy
@Inject lateinit var rxBus: RxBusWrapper
@Inject lateinit var smsCommunicatorPlugin: SmsCommunicatorPlugin
@Inject lateinit var otp: OneTimePassword
@Inject lateinit var resourceHelper: ResourceHelper
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)

View file

@ -182,19 +182,19 @@ class ActionStringHandler @Inject constructor(
return
}
val bgReading = iobCobCalculatorPlugin.actualBg()
if (bgReading == null && useBG) {
if (bgReading == null) {
sendError("No recent BG to base calculation on!")
return
}
val cobInfo = iobCobCalculatorPlugin.getCobInfo(false, "Wizard wear")
if (useCOB && (cobInfo.displayCob == null)) {
if (cobInfo.displayCob == null) {
sendError("Unknown COB! BG reading missing or recent app restart?")
return
}
val format = DecimalFormat("0.00")
val formatInt = DecimalFormat("0")
val bolusWizard = BolusWizard(injector).doCalc(profile, profileName, activePlugin.activeTreatments.tempTargetFromHistory,
carbsAfterConstraints, cobInfo.displayCob!!, bgReading!!.valueToUnits(profileFunction.getUnits()),
carbsAfterConstraints, cobInfo.displayCob, bgReading.valueToUnits(profileFunction.getUnits()),
0.0, percentage.toDouble(), useBG, useCOB, useBolusIOB, useBasalIOB, false, useTT, useTrend, false)
if (Math.abs(bolusWizard.insulinAfterConstraints - bolusWizard.calculatedTotalInsulin) >= 0.01) {
sendError("Insulin constraint violation!" +

View file

@ -8,8 +8,9 @@ import android.widget.AdapterView
import android.widget.ArrayAdapter
import dagger.android.support.DaggerFragment
import info.nightscout.androidaps.R
import info.nightscout.androidaps.plugins.bus.RxBusWrapper
import info.nightscout.androidaps.databinding.NsprofileFragmentBinding
import info.nightscout.androidaps.interfaces.ProfileFunction
import info.nightscout.androidaps.plugins.bus.RxBusWrapper
import info.nightscout.androidaps.plugins.profile.ns.events.EventNSProfileUpdateGUI
import info.nightscout.androidaps.plugins.treatments.TreatmentsPlugin
import info.nightscout.androidaps.utils.DateUtil
@ -20,9 +21,6 @@ import info.nightscout.androidaps.utils.extensions.plusAssign
import info.nightscout.androidaps.utils.resources.ResourceHelper
import io.reactivex.android.schedulers.AndroidSchedulers
import io.reactivex.disposables.CompositeDisposable
import kotlinx.android.synthetic.main.close.*
import kotlinx.android.synthetic.main.nsprofile_fragment.*
import kotlinx.android.synthetic.main.profileviewer_fragment.*
import javax.inject.Inject
class NSProfileFragment : DaggerFragment() {
@ -36,18 +34,25 @@ class NSProfileFragment : DaggerFragment() {
private var disposable: CompositeDisposable = CompositeDisposable()
private var _binding: NsprofileFragmentBinding? = null
// This property is only valid between onCreateView and
// onDestroyView.
private val binding get() = _binding!!
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?): View? {
return inflater.inflate(R.layout.nsprofile_fragment, container, false)
savedInstanceState: Bundle?): View {
_binding = NsprofileFragmentBinding.inflate(inflater, container, false)
return binding.root
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
close.visibility = View.GONE // not needed for fragment
binding.profileviewer.closeLayout.close.visibility = View.GONE // not needed for fragment
nsprofile_profileswitch.setOnClickListener {
val name = nsprofile_spinner.selectedItem?.toString() ?: ""
binding.profileswitch.setOnClickListener {
val name = binding.spinner.selectedItem?.toString() ?: ""
nsProfilePlugin.profile?.let { store ->
store.getSpecificProfile(name)?.let {
activity?.let { activity ->
@ -60,43 +65,46 @@ class NSProfileFragment : DaggerFragment() {
}
}
nsprofile_spinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
binding.spinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
override fun onNothingSelected(parent: AdapterView<*>?) {
profileview_invalidprofile.visibility = View.VISIBLE
profileview_noprofile.visibility = View.VISIBLE
profileview_units.text = ""
profileview_dia.text = ""
profileview_activeprofile.text = ""
profileview_ic.text = ""
profileview_isf.text = ""
profileview_basal.text = ""
profileview_basaltotal.text = ""
profileview_target.text = ""
nsprofile_profileswitch.visibility = View.GONE
if (_binding == null) return
binding.profileviewer.invalidprofile.visibility = View.VISIBLE
binding.profileviewer.noprofile.visibility = View.VISIBLE
binding.profileviewer.units.text = ""
binding.profileviewer.dia.text = ""
binding.profileviewer.activeprofile.text = ""
binding.profileviewer.ic.text = ""
binding.profileviewer.isf.text = ""
binding.profileviewer.basal.text = ""
binding.profileviewer.basaltotal.text = ""
binding.profileviewer.target.text = ""
binding.profileswitch.visibility = View.GONE
}
override fun onItemSelected(parent: AdapterView<*>?, view: View?, position: Int, id: Long) {
val name = nsprofile_spinner.getItemAtPosition(position).toString()
if (_binding == null) return
val name = binding.spinner.getItemAtPosition(position).toString()
nsprofile_profileswitch.visibility = View.GONE
binding.profileswitch.visibility = View.GONE
nsProfilePlugin.profile?.let { store ->
store.getSpecificProfile(name)?.let { profile ->
profileview_units.text = profile.units
profileview_dia.text = resourceHelper.gs(R.string.format_hours, profile.dia)
profileview_activeprofile.text = name
profileview_ic.text = profile.icList
profileview_isf.text = profile.isfList
profileview_basal.text = profile.basalList
profileview_basaltotal.text = String.format(resourceHelper.gs(R.string.profile_total), DecimalFormatter.to2Decimal(profile.baseBasalSum()))
profileview_target.text = profile.targetList
basal_graph.show(profile)
if (_binding == null) return
binding.profileviewer.units.text = profile.units
binding.profileviewer.dia.text = resourceHelper.gs(R.string.format_hours, profile.dia)
binding.profileviewer.activeprofile.text = name
binding.profileviewer.ic.text = profile.icList
binding.profileviewer.isf.text = profile.isfList
binding.profileviewer.basal.text = profile.basalList
binding.profileviewer.basaltotal.text = String.format(resourceHelper.gs(R.string.profile_total), DecimalFormatter.to2Decimal(profile.baseBasalSum()))
binding.profileviewer.target.text = profile.targetList
binding.profileviewer.basalGraph.show(profile)
if (profile.isValid("NSProfileFragment")) {
profileview_invalidprofile.visibility = View.GONE
nsprofile_profileswitch.visibility = View.VISIBLE
binding.profileviewer.invalidprofile.visibility = View.GONE
binding.profileswitch.visibility = View.VISIBLE
} else {
profileview_invalidprofile.visibility = View.VISIBLE
nsprofile_profileswitch.visibility = View.GONE
binding.profileviewer.invalidprofile.visibility = View.VISIBLE
binding.profileswitch.visibility = View.GONE
}
}
}
@ -120,21 +128,29 @@ class NSProfileFragment : DaggerFragment() {
disposable.clear()
}
@Synchronized
override fun onDestroyView() {
super.onDestroyView()
_binding = null
}
@Synchronized
fun updateGUI() {
if (profileview_noprofile == null) return
profileview_noprofile.visibility = View.VISIBLE
if (_binding == null) return
binding.profileviewer.noprofile.visibility = View.VISIBLE
nsProfilePlugin.profile?.let { profileStore ->
val profileList = profileStore.getProfileList()
val adapter = ArrayAdapter(context!!, R.layout.spinner_centered, profileList)
nsprofile_spinner.adapter = adapter
// set selected to actual profile
for (p in profileList.indices) {
if (profileList[p] == profileFunction.getProfileName())
nsprofile_spinner.setSelection(p)
context?.let { context ->
val profileList = profileStore.getProfileList()
val adapter = ArrayAdapter(context, R.layout.spinner_centered, profileList)
binding.spinner.adapter = adapter
// set selected to actual profile
for (p in profileList.indices) {
if (profileList[p] == profileFunction.getProfileName())
binding.spinner.setSelection(p)
}
binding.profileviewer.noprofile.visibility = View.GONE
}
profileview_noprofile.visibility = View.GONE
}
}
}

View file

@ -6,7 +6,6 @@ import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.ServiceConnection;
import android.os.Build;
import android.os.Handler;
import android.os.IBinder;
import android.os.Looper;
@ -57,7 +56,6 @@ import info.nightscout.androidaps.plugins.bus.RxBusWrapper;
import info.nightscout.androidaps.plugins.common.ManufacturerType;
import info.nightscout.androidaps.plugins.general.actions.defs.CustomAction;
import info.nightscout.androidaps.plugins.general.actions.defs.CustomActionType;
import info.nightscout.androidaps.queue.commands.CustomCommand;
import info.nightscout.androidaps.plugins.general.nsclient.NSUpload;
import info.nightscout.androidaps.plugins.general.nsclient.UploadQueue;
import info.nightscout.androidaps.plugins.general.overview.events.EventDismissNotification;
@ -135,6 +133,7 @@ import info.nightscout.androidaps.plugins.pump.insight.exceptions.app_layer_erro
import info.nightscout.androidaps.plugins.pump.insight.utils.ExceptionTranslator;
import info.nightscout.androidaps.plugins.pump.insight.utils.ParameterBlockUtil;
import info.nightscout.androidaps.plugins.treatments.TreatmentsPlugin;
import info.nightscout.androidaps.queue.commands.CustomCommand;
import info.nightscout.androidaps.utils.DateUtil;
import info.nightscout.androidaps.utils.TimeChangeType;
import info.nightscout.androidaps.utils.resources.ResourceHelper;
@ -294,12 +293,10 @@ public class LocalInsightPlugin extends PumpPluginBase implements PumpInterface,
}
private void createNotificationChannel() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
NotificationChannel channel = new NotificationChannel(ALERT_CHANNEL_ID, resourceHelper.gs(R.string.insight_alert_notification_channel), NotificationManager.IMPORTANCE_HIGH);
channel.setSound(null, null);
notificationManager.createNotificationChannel(channel);
}
NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
NotificationChannel channel = new NotificationChannel(ALERT_CHANNEL_ID, resourceHelper.gs(R.string.insight_alert_notification_channel), NotificationManager.IMPORTANCE_HIGH);
channel.setSound(null, null);
notificationManager.createNotificationChannel(channel);
}
@Override
@ -600,7 +597,7 @@ public class LocalInsightPlugin extends PumpPluginBase implements PumpInterface,
bolusMessage.setDuration(0);
bolusMessage.setExtendedAmount(0);
bolusMessage.setImmediateAmount(insulin);
bolusMessage.setVibration(sp.getBoolean(detailedBolusInfo.isSMB ? R.string.key_disable_vibration_auto : R.string.key_disable_vibration ,false));
bolusMessage.setVibration(sp.getBoolean(detailedBolusInfo.isSMB ? R.string.key_disable_vibration_auto : R.string.key_disable_vibration, false));
bolusID = connectionService.requestMessage(bolusMessage).await().getBolusId();
bolusCancelled = false;
}
@ -724,8 +721,8 @@ public class LocalInsightPlugin extends PumpPluginBase implements PumpInterface,
PumpEnactResult cancelTBRResult = cancelTempBasalOnly();
if (cancelTBRResult.success) {
PumpEnactResult ebResult = setExtendedBolusOnly((absoluteRate - getBaseBasalRate()) / 60D
* ((double) durationInMinutes), durationInMinutes,
sp.getBoolean(R.string.key_disable_vibration_auto,false));
* ((double) durationInMinutes), durationInMinutes,
sp.getBoolean(R.string.key_disable_vibration_auto, false));
if (ebResult.success) {
result.success = true;
result.enacted = true;
@ -803,7 +800,8 @@ public class LocalInsightPlugin extends PumpPluginBase implements PumpInterface,
@NonNull @Override
public PumpEnactResult setExtendedBolus(Double insulin, Integer durationInMinutes) {
PumpEnactResult result = cancelExtendedBolusOnly();
if (result.success) result = setExtendedBolusOnly(insulin, durationInMinutes, sp.getBoolean(R.string.key_disable_vibration,false));
if (result.success)
result = setExtendedBolusOnly(insulin, durationInMinutes, sp.getBoolean(R.string.key_disable_vibration, false));
try {
fetchStatus();
readHistory();

View file

@ -473,6 +473,7 @@ public class TreatmentsPlugin extends PluginBase implements TreatmentsInterface
for (long i = time - range(); i < time; i += T.mins(5).msecs()) {
Profile profile = profileFunction.getProfile(i);
if (profile == null) continue;
double basal = profile.getBasal(i);
TemporaryBasal runningTBR = getTempBasalFromHistory(i);
double running = basal;

View file

@ -158,7 +158,7 @@ class TreatmentsBolusFragment : DaggerFragment() {
}
calculation.paintFlags = calculation.paintFlags or Paint.UNDERLINE_TEXT_FLAG
remove.setOnClickListener {
val treatment = it.tag as Treatment
val treatment = it.tag as Treatment? ?: return@setOnClickListener
activity?.let { activity ->
val text = resourceHelper.gs(R.string.configbuilder_insulin) + ": " +
resourceHelper.gs(R.string.formatinsulinunits, treatment.insulin) + "\n" +

View file

@ -81,11 +81,13 @@ public class QueueThread extends Thread {
pump.stopConnecting();
pump.disconnect("watchdog");
SystemClock.sleep(1000);
BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
mBluetoothAdapter.disable();
SystemClock.sleep(1000);
mBluetoothAdapter.enable();
SystemClock.sleep(1000);
BluetoothAdapter bluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
if (bluetoothAdapter != null) {
bluetoothAdapter.disable();
SystemClock.sleep(1000);
bluetoothAdapter.enable();
SystemClock.sleep(1000);
}
//start over again once after watchdog barked
//Notification notification = new Notification(Notification.OLD_NSCLIENT, "Watchdog", Notification.URGENT);
//rxBus.send(new EventNewNotification(notification));

View file

@ -1,18 +1,18 @@
package info.nightscout.androidaps.receivers
import android.content.BroadcastReceiver
import android.content.Context
import android.content.Intent
import android.os.Build
import info.nightscout.androidaps.plugins.general.persistentNotification.DummyService
import dagger.android.DaggerBroadcastReceiver
import info.nightscout.androidaps.plugins.general.persistentNotification.DummyServiceHelper
import javax.inject.Inject
class AutoStartReceiver : DaggerBroadcastReceiver() {
@Inject lateinit var dummyServiceHelper: DummyServiceHelper
class AutoStartReceiver : BroadcastReceiver() {
override fun onReceive(context: Context, intent: Intent) {
if (intent.action == Intent.ACTION_BOOT_COMPLETED) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O)
context.startForegroundService(Intent(context, DummyService::class.java))
else
context.startService(Intent(context, DummyService::class.java))
}
super.onReceive(context, intent)
if (intent.action == Intent.ACTION_BOOT_COMPLETED)
dummyServiceHelper.startService(context)
}
}

View file

@ -1,3 +1,5 @@
@file:Suppress("PrivatePropertyName")
package info.nightscout.androidaps.services
import android.Manifest
@ -8,6 +10,7 @@ import android.content.Intent
import android.content.pm.PackageManager
import android.location.Location
import android.location.LocationManager
import android.os.Binder
import android.os.Bundle
import android.os.IBinder
import androidx.core.app.ActivityCompat
@ -44,9 +47,18 @@ class LocationService : DaggerService() {
private val LOCATION_INTERVAL_PASSIVE = T.mins(1).msecs() // this doesn't cost more power
companion object {
private const val LOCATION_DISTANCE = 10f
}
inner class LocalBinder : Binder() {
fun getService(): LocationService = this@LocationService
}
private val binder = LocalBinder()
override fun onBind(intent: Intent): IBinder = binder
inner class LocationListener internal constructor(val provider: String) : android.location.LocationListener {
init {
@ -148,8 +160,6 @@ class LocationService : DaggerService() {
disposable.clear()
}
override fun onBind(intent: Intent?): IBinder? = null
private fun initializeLocationManager() {
aapsLogger.debug(LTag.LOCATION, "initializeLocationManager - Provider: " + sp.getString(R.string.key_location, "NONE"))
if (locationManager == null) {

View file

@ -0,0 +1,62 @@
package info.nightscout.androidaps.services
import android.content.ComponentName
import android.content.Context
import android.content.Intent
import android.content.ServiceConnection
import android.os.IBinder
import info.nightscout.androidaps.interfaces.NotificationHolderInterface
import javax.inject.Inject
import javax.inject.Singleton
/*
This code replaces following
val intent = Intent(context, LocationService::class.java)
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) context.startForegroundService(intent) else context.startService(intent)
it fails randomly with error
Context.startForegroundService() did not then call Service.startForeground(): ServiceRecord{e317f7e u0 info.nightscout.nsclient/info.nightscout.androidaps.services.LocationService}
*/
@Singleton
class LocationServiceHelper @Inject constructor(
private val notificationHolder: NotificationHolderInterface
) {
fun startService(context: Context) {
val connection = object : ServiceConnection {
override fun onServiceConnected(name: ComponentName?, service: IBinder?) {
// The binder of the service that returns the instance that is created.
val binder = service as LocationService.LocalBinder
val locationService: LocationService = binder.getService()
context.startForegroundService(Intent(context, LocationService::class.java))
// This is the key: Without waiting Android Framework to call this method
// inside Service.onCreate(), immediately call here to post the notification.
locationService.startForeground(notificationHolder.notificationID, notificationHolder.notification)
// Release the connection to prevent leaks.
context.unbindService(this)
}
override fun onServiceDisconnected(name: ComponentName?) {
}
}
try {
context.bindService(Intent(context, LocationService::class.java), connection, Context.BIND_AUTO_CREATE)
} catch (ignored: RuntimeException) {
// This is probably a broadcast receiver context even though we are calling getApplicationContext().
// Just call startForegroundService instead since we cannot bind a service to a
// broadcast receiver context. The service also have to call startForeground in
// this case.
context.startForegroundService(Intent(context, LocationService::class.java))
}
}
fun stopService(context: Context) =
context.stopService(Intent(context, LocationService::class.java))
}

View file

@ -11,6 +11,7 @@ import info.nightscout.androidaps.dialogs.ProfileSwitchDialog
import info.nightscout.androidaps.events.EventPumpStatusChanged
import info.nightscout.androidaps.interfaces.ActivePluginProvider
import info.nightscout.androidaps.interfaces.CommandQueueProvider
import info.nightscout.androidaps.interfaces.ImportExportPrefsInterface
import info.nightscout.androidaps.interfaces.PluginType
import info.nightscout.androidaps.interfaces.ProfileFunction
import info.nightscout.androidaps.plugins.aps.loop.LoopPlugin
@ -18,7 +19,6 @@ import info.nightscout.androidaps.plugins.bus.RxBusWrapper
import info.nightscout.androidaps.plugins.configBuilder.ConfigBuilderPlugin
import info.nightscout.androidaps.plugins.constraints.objectives.ObjectivesFragment
import info.nightscout.androidaps.plugins.constraints.objectives.ObjectivesPlugin
import info.nightscout.androidaps.plugins.general.maintenance.ImportExportPrefs
import info.nightscout.androidaps.plugins.general.nsclient.NSClientPlugin
import info.nightscout.androidaps.plugins.general.nsclient.events.EventNSClientStatus
import info.nightscout.androidaps.plugins.general.nsclient.services.NSClientService
@ -55,7 +55,7 @@ class SWDefinition @Inject constructor(
private val loopPlugin: LoopPlugin,
private val nsClientPlugin: NSClientPlugin,
private val nsProfilePlugin: NSProfilePlugin,
private val importExportPrefs: ImportExportPrefs,
private val importExportPrefs: ImportExportPrefsInterface,
private val androidPermission: AndroidPermission,
private val cryptoUtil: CryptoUtil,
private val config: Config
@ -118,7 +118,7 @@ class SWDefinition @Inject constructor(
.add(SWButton(injector)
.text(R.string.askforpermission)
.visibility { androidPermission.permissionNotGranted(context, Manifest.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS) }
.action { androidPermission.askForPermission(activity, Manifest.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS, AndroidPermission.CASE_BATTERY) })
.action { androidPermission.askForPermission(activity, Manifest.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS) })
.visibility { androidPermission.permissionNotGranted(activity, Manifest.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS) }
.validator { !androidPermission.permissionNotGranted(activity, Manifest.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS) }
private val screenPermissionBt = SWScreen(injector, R.string.permission)
@ -129,7 +129,7 @@ class SWDefinition @Inject constructor(
.add(SWButton(injector)
.text(R.string.askforpermission)
.visibility { androidPermission.permissionNotGranted(activity, Manifest.permission.ACCESS_FINE_LOCATION) }
.action { androidPermission.askForPermission(activity, Manifest.permission.ACCESS_FINE_LOCATION, AndroidPermission.CASE_LOCATION) })
.action { androidPermission.askForPermission(activity, Manifest.permission.ACCESS_FINE_LOCATION) })
.visibility { androidPermission.permissionNotGranted(activity, Manifest.permission.ACCESS_FINE_LOCATION) }
.validator { !androidPermission.permissionNotGranted(activity, Manifest.permission.ACCESS_FINE_LOCATION) }
private val screenPermissionStore = SWScreen(injector, R.string.permission)
@ -140,7 +140,7 @@ class SWDefinition @Inject constructor(
.add(SWButton(injector)
.text(R.string.askforpermission)
.visibility { androidPermission.permissionNotGranted(activity, Manifest.permission.WRITE_EXTERNAL_STORAGE) }
.action { androidPermission.askForPermission(activity, Manifest.permission.WRITE_EXTERNAL_STORAGE, AndroidPermission.CASE_STORAGE) })
.action { androidPermission.askForPermission(activity, Manifest.permission.WRITE_EXTERNAL_STORAGE) })
.visibility { androidPermission.permissionNotGranted(activity, Manifest.permission.WRITE_EXTERNAL_STORAGE) }
.validator { !androidPermission.permissionNotGranted(activity, Manifest.permission.WRITE_EXTERNAL_STORAGE) }
private val screenImport = SWScreen(injector, R.string.nav_import)

View file

@ -1,11 +1,9 @@
package info.nightscout.androidaps.setupwizard
import android.content.Intent
import android.content.pm.PackageManager
import android.os.Bundle
import android.view.View
import android.widget.TextView
import androidx.core.app.ActivityCompat
import dagger.android.HasAndroidInjector
import info.nightscout.androidaps.MainActivity
import info.nightscout.androidaps.R
@ -14,19 +12,14 @@ import info.nightscout.androidaps.events.EventProfileNeedsUpdate
import info.nightscout.androidaps.events.EventProfileStoreChanged
import info.nightscout.androidaps.events.EventPumpStatusChanged
import info.nightscout.androidaps.plugins.bus.RxBusWrapper
import info.nightscout.androidaps.plugins.general.maintenance.ImportExportPrefs
import info.nightscout.androidaps.plugins.general.maintenance.PrefsFileContract
import info.nightscout.androidaps.plugins.general.nsclient.events.EventNSClientStatus
import info.nightscout.androidaps.plugins.profile.local.LocalProfilePlugin
import info.nightscout.androidaps.plugins.pump.common.events.EventRileyLinkDeviceStatusChange
import info.nightscout.androidaps.setupwizard.elements.SWItem
import info.nightscout.androidaps.setupwizard.events.EventSWUpdate
import info.nightscout.androidaps.utils.AndroidPermission
import info.nightscout.androidaps.utils.FabricPrivacy
import info.nightscout.androidaps.utils.alertDialogs.OKDialog.show
import info.nightscout.androidaps.utils.alertDialogs.OKDialog.showConfirmation
import info.nightscout.androidaps.utils.locale.LocaleHelper.update
import info.nightscout.androidaps.utils.resources.ResourceHelper
import info.nightscout.androidaps.utils.sharedPreferences.SP
import io.reactivex.android.schedulers.AndroidSchedulers
import io.reactivex.disposables.CompositeDisposable
@ -41,10 +34,8 @@ class SetupWizardActivity : NoSplashAppCompatActivity() {
@Inject lateinit var localProfilePlugin: LocalProfilePlugin
@Inject lateinit var swDefinition: SWDefinition
@Inject lateinit var rxBus: RxBusWrapper
@Inject lateinit var resourceHelper: ResourceHelper
@Inject lateinit var sp: SP
@Inject lateinit var fabricPrivacy: FabricPrivacy
@Inject lateinit var importExportPrefs: ImportExportPrefs
private val disposable = CompositeDisposable()
private lateinit var screens: List<SWScreen>
@ -52,12 +43,6 @@ class SetupWizardActivity : NoSplashAppCompatActivity() {
private val intentMessage = "WIZZARDPAGE"
val callForPrefFile = registerForActivityResult(PrefsFileContract()) {
it?.let {
importExportPrefs.importSharedPreferences(this, it)
}
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
update(applicationContext)
@ -132,7 +117,7 @@ class SetupWizardActivity : NoSplashAppCompatActivity() {
sw_scrollview?.smoothScrollTo(0, 0)
}
private fun updateButtons() {
override fun updateButtons() {
runOnUiThread {
val currentScreen = screens[currentWizardPage]
if (currentScreen.validator == null || currentScreen.validator!!.isValid || currentScreen.skippable) {
@ -207,25 +192,4 @@ class SetupWizardActivity : NoSplashAppCompatActivity() {
}
return max(currentWizardPage, 0)
}
override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<String>, grantResults: IntArray) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults)
if (permissions.isNotEmpty()) {
if (ActivityCompat.checkSelfPermission(this, permissions[0]) == PackageManager.PERMISSION_GRANTED) {
when (requestCode) {
AndroidPermission.CASE_STORAGE -> //show dialog after permission is granted
show(this, resourceHelper.gs(R.string.permission), resourceHelper.gs(R.string.alert_dialog_storage_permission_text))
AndroidPermission.CASE_LOCATION, AndroidPermission.CASE_SMS, AndroidPermission.CASE_BATTERY -> {
}
}
}
}
updateButtons()
}
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
if (requestCode == AndroidPermission.CASE_BATTERY) updateButtons()
}
}

View file

@ -10,11 +10,11 @@ import android.net.Uri
import android.os.Build
import android.os.PowerManager
import android.provider.Settings
import androidx.core.app.ActivityCompat
import androidx.core.content.ContextCompat
import androidx.fragment.app.FragmentActivity
import dagger.android.HasAndroidInjector
import info.nightscout.androidaps.R
import info.nightscout.androidaps.activities.DaggerAppCompatActivityWithResult
import info.nightscout.androidaps.interfaces.PluginType
import info.nightscout.androidaps.plugins.bus.RxBusWrapper
import info.nightscout.androidaps.plugins.general.overview.events.EventDismissNotification
@ -34,22 +34,13 @@ class AndroidPermission @Inject constructor(
val injector: HasAndroidInjector
) {
companion object {
const val CASE_STORAGE = 0x1
const val CASE_SMS = 0x2
const val CASE_LOCATION = 0x3
const val CASE_BATTERY = 0x4
const val CASE_PHONE_STATE = 0x5
const val CASE_SYSTEM_WINDOW = 0x6
}
private var permission_battery_optimization_failed = false
private var permissionBatteryOptimizationFailed = false
@SuppressLint("BatteryLife")
fun askForPermission(activity: FragmentActivity, permission: Array<String>, requestCode: Int) {
fun askForPermission(activity: FragmentActivity, permissions: Array<String>) {
var test = false
var testBattery = false
for (s in permission) {
for (s in permissions) {
test = test || ContextCompat.checkSelfPermission(activity, s) != PackageManager.PERMISSION_GRANTED
if (s == Manifest.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS) {
val powerManager = activity.getSystemService(Context.POWER_SERVICE) as PowerManager
@ -58,30 +49,26 @@ class AndroidPermission @Inject constructor(
}
}
if (test) {
ActivityCompat.requestPermissions(activity, permission, requestCode)
if (activity is DaggerAppCompatActivityWithResult)
activity.requestMultiplePermissions.launch(permissions)
}
if (testBattery) {
try {
val i = Intent()
i.action = Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS
i.data = Uri.parse("package:" + activity.packageName)
activity.startActivityForResult(i, CASE_BATTERY)
if (activity is DaggerAppCompatActivityWithResult)
activity.callForBatteryOptimization.launch(null)
} catch (e: ActivityNotFoundException) {
permission_battery_optimization_failed = true
permissionBatteryOptimizationFailed = true
show(activity, resourceHelper.gs(R.string.permission), resourceHelper.gs(R.string.alert_dialog_permission_battery_optimization_failed), Runnable { activity.recreate() })
}
}
}
fun askForPermission(activity: FragmentActivity, permission: String, requestCode: Int) {
val permissions = arrayOf(permission)
askForPermission(activity, permissions, requestCode)
}
fun askForPermission(activity: FragmentActivity, permission: String) = askForPermission(activity, arrayOf(permission))
fun permissionNotGranted(context: Context, permission: String): Boolean {
var selfCheck = ContextCompat.checkSelfPermission(context, permission) == PackageManager.PERMISSION_GRANTED
if (permission == Manifest.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS) {
if (!permission_battery_optimization_failed) {
if (!permissionBatteryOptimizationFailed) {
val powerManager = context.getSystemService(Context.POWER_SERVICE) as PowerManager
val packageName = context.packageName
selfCheck = selfCheck && powerManager.isIgnoringBatteryOptimizations(packageName)
@ -95,21 +82,19 @@ class AndroidPermission @Inject constructor(
if (smsCommunicatorPlugin.isEnabled(PluginType.GENERAL)) {
if (permissionNotGranted(activity, Manifest.permission.RECEIVE_SMS)) {
val notification = NotificationWithAction(injector, Notification.PERMISSION_SMS, resourceHelper.gs(R.string.smscommunicator_missingsmspermission), Notification.URGENT)
notification.action(R.string.request, Runnable {
notification.action(R.string.request) {
askForPermission(activity, arrayOf(Manifest.permission.RECEIVE_SMS,
Manifest.permission.SEND_SMS,
Manifest.permission.RECEIVE_MMS), CASE_SMS)
})
Manifest.permission.RECEIVE_MMS))
}
rxBus.send(EventNewNotification(notification))
} else rxBus.send(EventDismissNotification(Notification.PERMISSION_SMS))
// Following is a bug in Android 8
if (Build.VERSION.SDK_INT == Build.VERSION_CODES.O) {
if (permissionNotGranted(activity, Manifest.permission.READ_PHONE_STATE)) {
val notification = NotificationWithAction(injector, Notification.PERMISSION_PHONESTATE, resourceHelper.gs(R.string.smscommunicator_missingphonestatepermission), Notification.URGENT)
notification.action(R.string.request, Runnable { askForPermission(activity, arrayOf(Manifest.permission.READ_PHONE_STATE), CASE_PHONE_STATE) })
rxBus.send(EventNewNotification(notification))
} else rxBus.send(EventDismissNotification(Notification.PERMISSION_PHONESTATE))
}
if (permissionNotGranted(activity, Manifest.permission.READ_PHONE_STATE)) {
val notification = NotificationWithAction(injector, Notification.PERMISSION_PHONESTATE, resourceHelper.gs(R.string.smscommunicator_missingphonestatepermission), Notification.URGENT)
notification.action(R.string.request) { askForPermission(activity, arrayOf(Manifest.permission.READ_PHONE_STATE)) }
rxBus.send(EventNewNotification(notification))
} else rxBus.send(EventDismissNotification(Notification.PERMISSION_PHONESTATE))
}
}
@ -117,7 +102,7 @@ class AndroidPermission @Inject constructor(
fun notifyForBatteryOptimizationPermission(activity: FragmentActivity) {
if (permissionNotGranted(activity, Manifest.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS)) {
val notification = NotificationWithAction(injector, Notification.PERMISSION_BATTERY, String.format(resourceHelper.gs(R.string.needwhitelisting), resourceHelper.gs(R.string.app_name)), Notification.URGENT)
notification.action(R.string.request, Runnable { askForPermission(activity, arrayOf(Manifest.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS), CASE_BATTERY) })
notification.action(R.string.request) { askForPermission(activity, arrayOf(Manifest.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS)) }
rxBus.send(EventNewNotification(notification))
} else rxBus.send(EventDismissNotification(Notification.PERMISSION_BATTERY))
}
@ -125,10 +110,10 @@ class AndroidPermission @Inject constructor(
@Synchronized fun notifyForStoragePermission(activity: FragmentActivity) {
if (permissionNotGranted(activity, Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
val notification = NotificationWithAction(injector, Notification.PERMISSION_STORAGE, resourceHelper.gs(R.string.needstoragepermission), Notification.URGENT)
notification.action(R.string.request, Runnable {
notification.action(R.string.request) {
askForPermission(activity, arrayOf(Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.WRITE_EXTERNAL_STORAGE), CASE_STORAGE)
})
Manifest.permission.WRITE_EXTERNAL_STORAGE))
}
rxBus.send(EventNewNotification(notification))
} else rxBus.send(EventDismissNotification(Notification.PERMISSION_STORAGE))
}
@ -136,7 +121,7 @@ class AndroidPermission @Inject constructor(
@Synchronized fun notifyForLocationPermissions(activity: FragmentActivity) {
if (permissionNotGranted(activity, Manifest.permission.ACCESS_FINE_LOCATION)) {
val notification = NotificationWithAction(injector, Notification.PERMISSION_LOCATION, resourceHelper.gs(R.string.needlocationpermission), Notification.URGENT)
notification.action(R.string.request, Runnable { askForPermission(activity, arrayOf(Manifest.permission.ACCESS_FINE_LOCATION), CASE_LOCATION) })
notification.action(R.string.request) { askForPermission(activity, arrayOf(Manifest.permission.ACCESS_FINE_LOCATION)) }
rxBus.send(EventNewNotification(notification))
} else rxBus.send(EventDismissNotification(Notification.PERMISSION_LOCATION))
}
@ -146,7 +131,7 @@ class AndroidPermission @Inject constructor(
if (Build.VERSION.SDK_INT > Build.VERSION_CODES.P) {
if (!Settings.canDrawOverlays(activity)) {
val notification = NotificationWithAction(injector, Notification.PERMISSION_SYSTEM_WINDOW, resourceHelper.gs(R.string.needsystemwindowpermission), Notification.URGENT)
notification.action(R.string.request, Runnable {
notification.action(R.string.request) {
// Check if Android Q or higher
if (Build.VERSION.SDK_INT > Build.VERSION_CODES.P) {
// Show alert dialog to the user saying a separate permission is needed
@ -155,7 +140,7 @@ class AndroidPermission @Inject constructor(
Uri.parse("package:" + activity.packageName))
activity.startActivity(intent)
}
})
}
rxBus.send(EventNewNotification(notification))
} else rxBus.send(EventDismissNotification(Notification.PERMISSION_SYSTEM_WINDOW))
}

View file

@ -4,419 +4,351 @@
android:viewportWidth="128"
android:viewportHeight="128">
<path
android:pathData="M124.703,45.511c-1.189,-11.934 -8.458,-17.836 -19.136,-18.791c-27.785,-1.202 -55.39,-2.279 -84.289,0.703c-10.852,0.51 -19.086,7.207 -19.086,18.031c-0.033,5.986 -0.544,12.118 -0.556,17.598c-0.173,6.469 -0.009,13.074 0.614,19.864c-0.236,10.908 7.856,18.079 19.027,18.371c27.174,0.708 55.195,2.101 83.936,0.41c10.133,-0.597 18.342,-6.919 19.256,-18.545c0.491,-12.578 0.984,-25.22 0.234,-37.641Z"
android:fillColor="#1f1e1c"/>
<group>
<clip-path
android:pathData="M124.703,45.511c-1.189,-11.934 -8.458,-17.836 -19.136,-18.791c-27.785,-1.202 -55.39,-2.279 -84.289,0.703c-10.852,0.51 -19.086,7.207 -19.086,18.031c-0.033,5.986 -0.544,12.118 -0.556,17.598c-0.173,6.469 -0.009,13.074 0.614,19.864c-0.236,10.908 7.856,18.079 19.027,18.371c27.174,0.708 55.195,2.101 83.936,0.41c10.133,-0.597 18.342,-6.919 19.256,-18.545c0.491,-12.578 0.984,-25.22 0.234,-37.641Z"/>
<path
android:fillColor="#FF000000"
android:pathData="M112.873,28.353l-1.49,-0.352l-0,72.139l1.45,-0.397l0.04,-71.39Z"/>
</group>
android:pathData="M121.885,46.425L121.885,46.425c-1.121,-11.256 -7.977,-16.822 -18.048,-17.723c-26.206,-1.134 -52.242,-2.149 -79.498,0.663C14.103,29.846 6.337,36.163 6.337,46.371c-0.031,5.646 -0.513,11.429 -0.524,16.598C5.65,69.07 5.805,75.3 6.392,81.704C6.17,91.992 13.802,98.755 24.338,99.031c25.629,0.668 52.058,1.982 79.165,0.387c9.557,-0.563 17.299,-6.526 18.161,-17.491C122.127,70.064 122.592,58.14 121.885,46.425zM71.655,78.291c0,0.62 -0.504,1.123 -1.123,1.123H19.668c-0.62,0 -1.123,-0.504 -1.123,-1.123V60.823c0,-0.62 0.504,-1.122 1.123,-1.122h50.864c0.62,0 1.123,0.503 1.123,1.122V78.291zM52.938,51.37c-0.409,0 -0.742,-0.333 -0.742,-0.742v-7.414c0,-0.409 0.333,-0.742 0.742,-0.742h39.728c0.409,0 0.741,0.333 0.741,0.742v7.414c0,0.409 -0.332,0.742 -0.741,0.742H52.938zM97.468,77.139c0,3.379 -2.744,6.123 -6.122,6.123h-6.391c-3.379,0 -6.123,-2.744 -6.123,-6.123V65.442c0,-3.379 2.744,-6.123 6.123,-6.123h6.391c3.378,0 6.122,2.744 6.122,6.123V77.139zM110.727,97.49l-1.405,0.459V30.033l1.405,0.501V97.49z"
android:fillColor="#1F1E1C"/>
<path
android:pathData="M104.774,49.218c-0,-7.339 -5.958,-13.297 -13.297,-13.297l-67.927,0c-7.338,0 -13.296,5.958 -13.296,13.297l-0,31.707c-0,7.338 5.958,13.296 13.296,13.296l67.927,0c7.339,0 13.297,-5.958 13.297,-13.296l-0,-31.707Z"
android:fillColor="#a29a9a"/>
android:pathData="M52.084,43.752h4.284v6.338h-4.284z"
android:fillColor="#010101"/>
<path
android:fillColor="#FF000000"
android:pathData="M104.208,49.433c0,-7.235 -5.873,-13.108 -13.108,-13.108l-67.246,-0c-7.235,-0 -13.109,5.873 -13.109,13.108l0,31.26c0,7.234 5.874,13.108 13.109,13.108l67.246,-0c7.235,-0 13.108,-5.874 13.108,-13.108l0,-31.26Z"/>
android:pathData="M66.125,42.471h-8.685c-0.632,0 -1.145,0.513 -1.145,1.145v6.595c0,0.633 0.513,1.146 1.145,1.146h8.685V42.471z"
android:fillColor="#FFFFFF"/>
<path
android:pathData="M25.744,47.631c0.013,-0.064 0.002,-0.111 -0.031,-0.141c-0.034,-0.03 -0.101,-0.052 -0.203,-0.065c-0.044,-0.009 -0.067,-0.035 -0.067,-0.076c0,-0.009 0.002,-0.02 0.005,-0.031c0.003,-0.011 0.006,-0.025 0.01,-0.04c0.095,0.009 0.189,0.016 0.281,0.021c0.092,0.005 0.178,0.007 0.258,0.007c0.067,0 0.148,-0.002 0.243,-0.007c0.096,-0.005 0.186,-0.012 0.272,-0.021c0.006,0.031 0.01,0.055 0.01,0.071c-0,0.045 -0.023,0.068 -0.067,0.072c-0.102,0.012 -0.174,0.035 -0.215,0.066c-0.041,0.032 -0.068,0.08 -0.081,0.144l-0.472,2.452c-0.013,0.064 -0.002,0.11 0.033,0.139c0.035,0.028 0.107,0.05 0.215,0.066c0.041,0.01 0.062,0.034 0.062,0.072c-0,0.019 -0.003,0.044 -0.01,0.076c-0.095,-0.009 -0.192,-0.016 -0.291,-0.021c-0.098,-0.005 -0.188,-0.007 -0.267,-0.007c-0.067,-0 -0.147,0.002 -0.241,0.007c-0.094,0.005 -0.184,0.012 -0.27,0.021c-0.006,-0.032 -0.009,-0.057 -0.009,-0.076c-0,-0.038 0.019,-0.061 0.057,-0.067c0.102,-0.016 0.175,-0.039 0.22,-0.069c0.044,-0.03 0.073,-0.077 0.085,-0.141l0.473,-2.452Z"
android:fillColor="#fff"
android:fillType="nonZero"/>
android:pathData="M60.513,42.471h2.147v8.898h-2.147z"
android:fillColor="#010101"/>
<path
android:pathData="M28.22,48.967c0.019,-0.086 0.029,-0.158 0.029,-0.215c-0,-0.092 -0.045,-0.138 -0.134,-0.138c-0.047,-0 -0.106,0.026 -0.176,0.078c-0.07,0.053 -0.143,0.121 -0.22,0.205c-0.076,0.085 -0.152,0.179 -0.226,0.284c-0.075,0.105 -0.141,0.212 -0.198,0.32c-0.029,0.054 -0.057,0.114 -0.084,0.179c-0.027,0.065 -0.051,0.132 -0.071,0.2c-0.021,0.069 -0.037,0.136 -0.048,0.203c-0.011,0.067 -0.017,0.129 -0.017,0.186c0,0.045 0.005,0.088 0.014,0.129c-0.12,0.013 -0.246,0.037 -0.377,0.072c-0.025,-0.016 -0.038,-0.035 -0.038,-0.058c0,-0.006 0.002,-0.019 0.005,-0.04c0.003,-0.021 0.006,-0.038 0.01,-0.05c0.073,-0.369 0.13,-0.66 0.171,-0.873c0.042,-0.214 0.073,-0.375 0.093,-0.485c0.021,-0.109 0.034,-0.181 0.039,-0.214c0.004,-0.034 0.007,-0.054 0.007,-0.06c-0,-0.038 -0.013,-0.057 -0.038,-0.057c-0.013,-0 -0.032,0.005 -0.058,0.016l-0.157,0.067c-0.026,0.011 -0.045,0.017 -0.057,0.017c-0.016,-0 -0.03,-0.01 -0.041,-0.029c-0.011,-0.019 -0.02,-0.041 -0.026,-0.067c0.057,-0.035 0.125,-0.072 0.203,-0.112c0.078,-0.039 0.153,-0.076 0.226,-0.109c0.073,-0.034 0.137,-0.062 0.191,-0.084c0.054,-0.022 0.089,-0.033 0.105,-0.033c0.022,-0 0.041,0.005 0.057,0.016c0.016,0.011 0.024,0.03 0.024,0.055c0,0.01 -0.001,0.022 -0.002,0.036c-0.002,0.014 -0.004,0.029 -0.007,0.045l-0.172,0.831l0.019,-0c0.083,-0.14 0.169,-0.271 0.258,-0.392c0.089,-0.121 0.179,-0.225 0.269,-0.312c0.091,-0.088 0.182,-0.156 0.275,-0.205c0.092,-0.05 0.186,-0.074 0.281,-0.074c0.089,-0 0.16,0.022 0.212,0.066c0.053,0.045 0.079,0.118 0.079,0.22c0,0.038 -0.003,0.083 -0.009,0.134c-0.007,0.05 -0.015,0.101 -0.024,0.152l-0.244,1.145c-0.009,0.045 -0.014,0.075 -0.014,0.091c0,0.041 0.019,0.062 0.057,0.062c0.019,0 0.042,-0.006 0.067,-0.017c0.026,-0.011 0.05,-0.023 0.074,-0.038c0.024,-0.014 0.045,-0.027 0.065,-0.038c0.019,-0.011 0.035,-0.017 0.047,-0.017c0.032,0 0.054,0.032 0.067,0.096c-0.057,0.041 -0.116,0.08 -0.176,0.117c-0.061,0.036 -0.121,0.069 -0.179,0.097c-0.059,0.029 -0.114,0.052 -0.165,0.07c-0.051,0.017 -0.092,0.026 -0.124,0.026c-0.035,-0 -0.068,-0.007 -0.098,-0.022c-0.03,-0.014 -0.045,-0.048 -0.045,-0.102c-0,-0.01 0.001,-0.025 0.005,-0.045c0.003,-0.021 0.006,-0.039 0.009,-0.055l0.267,-1.274Z"
android:fillColor="#fff"
android:fillType="nonZero"/>
android:pathData="M63.967,42.471h2.147v8.898h-2.147z"
android:fillColor="#010101"/>
<path
android:pathData="M30.358,48.823c-0.035,-0.003 -0.057,-0.011 -0.067,-0.026c-0.009,-0.014 -0.016,-0.031 -0.019,-0.05c-0.016,-0.095 -0.052,-0.169 -0.11,-0.222c-0.057,-0.052 -0.135,-0.078 -0.234,-0.078c-0.101,-0 -0.189,0.024 -0.262,0.074c-0.073,0.049 -0.11,0.12 -0.11,0.212c0,0.063 0.028,0.128 0.084,0.193c0.055,0.065 0.121,0.131 0.198,0.198c0.057,0.051 0.118,0.103 0.181,0.158c0.064,0.054 0.121,0.109 0.172,0.164c0.051,0.056 0.093,0.114 0.126,0.174c0.034,0.061 0.05,0.123 0.05,0.186c0,0.093 -0.02,0.179 -0.062,0.258c-0.041,0.08 -0.097,0.149 -0.169,0.208c-0.072,0.059 -0.156,0.105 -0.253,0.14c-0.097,0.035 -0.199,0.053 -0.308,0.053c-0.111,-0 -0.219,-0.01 -0.324,-0.029c-0.105,-0.019 -0.204,-0.049 -0.296,-0.09c0.026,-0.096 0.045,-0.184 0.06,-0.265c0.014,-0.081 0.024,-0.173 0.031,-0.275l0.047,0c0.077,0 0.115,0.027 0.115,0.082c-0.006,0.133 0.025,0.237 0.093,0.31c0.068,0.073 0.163,0.109 0.284,0.109c0.124,0 0.226,-0.032 0.305,-0.097c0.08,-0.066 0.12,-0.151 0.12,-0.256c-0,-0.047 -0.012,-0.093 -0.036,-0.138c-0.024,-0.045 -0.055,-0.087 -0.093,-0.126c-0.038,-0.04 -0.081,-0.08 -0.129,-0.12c-0.048,-0.04 -0.097,-0.08 -0.148,-0.121c-0.095,-0.08 -0.182,-0.163 -0.26,-0.251c-0.078,-0.087 -0.117,-0.188 -0.117,-0.303c0,-0.086 0.02,-0.165 0.06,-0.239c0.039,-0.073 0.094,-0.135 0.162,-0.188c0.068,-0.052 0.148,-0.094 0.239,-0.124c0.09,-0.03 0.186,-0.045 0.288,-0.045c0.185,-0 0.358,0.043 0.52,0.128c-0.016,0.048 -0.029,0.109 -0.04,0.182c-0.011,0.073 -0.02,0.146 -0.026,0.219l-0.072,-0.005Z"
android:fillColor="#fff"
android:fillType="nonZero"/>
android:pathData="M66.125,51.37v-8.899l3.293,2.698l0,3.502L66.125,51.37L66.125,51.37z"
android:fillColor="#FFFFFF"/>
<path
android:pathData="M31.47,47.788c-0.061,0 -0.108,-0.018 -0.143,-0.055c-0.035,-0.036 -0.053,-0.085 -0.053,-0.145c0,-0.086 0.029,-0.163 0.088,-0.232c0.059,-0.068 0.13,-0.102 0.213,-0.102c0.063,-0 0.109,0.02 0.136,0.062c0.027,0.041 0.04,0.094 0.04,0.157c0,0.08 -0.027,0.152 -0.081,0.217c-0.054,0.065 -0.121,0.098 -0.2,0.098ZM31.226,50.016c-0.003,0.013 -0.006,0.03 -0.009,0.05c-0.003,0.021 -0.005,0.036 -0.005,0.046c0,0.038 0.019,0.057 0.057,0.057c0.023,0 0.046,-0.006 0.069,-0.017c0.024,-0.011 0.048,-0.023 0.072,-0.038c0.024,-0.014 0.045,-0.027 0.064,-0.038c0.02,-0.011 0.035,-0.017 0.048,-0.017c0.032,0 0.054,0.032 0.067,0.096c-0.054,0.041 -0.112,0.08 -0.174,0.117c-0.062,0.036 -0.122,0.069 -0.179,0.097c-0.057,0.029 -0.111,0.052 -0.162,0.07c-0.051,0.017 -0.093,0.026 -0.124,0.026c-0.035,-0 -0.069,-0.007 -0.101,-0.022c-0.031,-0.014 -0.047,-0.048 -0.047,-0.102c-0,-0.01 0.001,-0.026 0.004,-0.05c0.004,-0.024 0.007,-0.041 0.01,-0.05c0.07,-0.341 0.126,-0.612 0.167,-0.814c0.041,-0.202 0.072,-0.356 0.093,-0.463c0.021,-0.106 0.034,-0.177 0.041,-0.212c0.006,-0.035 0.009,-0.056 0.009,-0.062c0,-0.038 -0.014,-0.057 -0.043,-0.057c-0.013,-0 -0.032,0.005 -0.057,0.016c-0.026,0.011 -0.053,0.023 -0.081,0.034c-0.029,0.011 -0.055,0.022 -0.079,0.033c-0.024,0.011 -0.042,0.017 -0.055,0.017c-0.019,-0 -0.033,-0.01 -0.043,-0.029c-0.009,-0.019 -0.017,-0.041 -0.024,-0.067c0.058,-0.031 0.124,-0.067 0.201,-0.107c0.076,-0.04 0.15,-0.077 0.222,-0.112c0.071,-0.035 0.135,-0.064 0.191,-0.086c0.055,-0.022 0.093,-0.033 0.112,-0.033c0.054,-0 0.081,0.027 0.081,0.081c-0,0.022 -0.003,0.046 -0.01,0.071l-0.315,1.565Z"
android:fillColor="#fff"
android:fillType="nonZero"/>
android:pathData="M90.547,37.38H26.481c-6.921,0 -12.54,5.619 -12.54,12.541v29.905c0,6.921 5.619,12.54 12.54,12.54h64.066c6.922,0 12.541,-5.619 12.541,-12.54V49.921C103.089,43 97.469,37.38 90.547,37.38zM50.687,41.107h44.229v11.627H50.687V41.107zM71.655,78.291c0,0.62 -0.504,1.123 -1.123,1.123H19.668c-0.62,0 -1.123,-0.504 -1.123,-1.123V60.823c0,-0.62 0.504,-1.122 1.123,-1.122h50.864c0.62,0 1.123,0.503 1.123,1.122V78.291zM97.468,77.139c0,3.379 -2.744,6.123 -6.122,6.123h-6.391c-3.379,0 -6.123,-2.744 -6.123,-6.123V65.442c0,-3.379 2.744,-6.123 6.123,-6.123h6.391c3.378,0 6.122,2.744 6.122,6.123V77.139z"
android:fillColor="#A29A9A"/>
<path
android:pathData="M33.374,48.532c-0.039,-0.012 -0.083,-0.023 -0.134,-0.031c-0.051,-0.008 -0.099,-0.012 -0.143,-0.012c-0.137,0 -0.256,0.035 -0.358,0.105c-0.102,0.07 -0.187,0.166 -0.255,0.287c-0.069,0.121 -0.12,0.262 -0.153,0.424c-0.033,0.163 -0.05,0.336 -0.05,0.521c-0,0.117 0.016,0.202 0.048,0.255c0.031,0.052 0.079,0.079 0.143,0.079c0.057,-0 0.119,-0.03 0.186,-0.089c0.067,-0.059 0.134,-0.135 0.203,-0.229c0.068,-0.094 0.133,-0.199 0.195,-0.317c0.062,-0.118 0.117,-0.237 0.165,-0.358c0.048,-0.121 0.085,-0.237 0.112,-0.348c0.027,-0.112 0.041,-0.207 0.041,-0.287ZM31.87,51.085c0.045,0.096 0.113,0.176 0.206,0.241c0.092,0.065 0.192,0.098 0.3,0.098c0.134,-0 0.252,-0.055 0.353,-0.165c0.102,-0.109 0.175,-0.269 0.22,-0.479l0.234,-1.145l-0.019,-0c-0.134,0.28 -0.281,0.488 -0.442,0.625c-0.16,0.137 -0.314,0.205 -0.46,0.205c-0.048,-0 -0.096,-0.007 -0.143,-0.022c-0.048,-0.014 -0.089,-0.039 -0.124,-0.076c-0.035,-0.036 -0.064,-0.086 -0.086,-0.148c-0.023,-0.062 -0.034,-0.142 -0.034,-0.241c0,-0.257 0.039,-0.49 0.117,-0.699c0.078,-0.208 0.179,-0.385 0.303,-0.529c0.124,-0.145 0.262,-0.257 0.413,-0.334c0.151,-0.078 0.298,-0.117 0.441,-0.117c0.112,-0 0.214,0.004 0.308,0.014c0.094,0.009 0.204,0.027 0.332,0.052l-0.439,2.243c-0.035,0.181 -0.094,0.335 -0.177,0.46c-0.083,0.126 -0.175,0.23 -0.277,0.311c-0.101,0.081 -0.209,0.14 -0.322,0.176c-0.113,0.037 -0.217,0.055 -0.312,0.055c-0.239,0 -0.425,-0.032 -0.559,-0.095c0.023,-0.07 0.04,-0.131 0.053,-0.182c0.013,-0.051 0.024,-0.117 0.033,-0.2l0.081,-0.048Z"
android:fillColor="#fff"
android:fillType="nonZero"/>
android:pathData="M90.192,37.761H26.768c-6.824,0 -12.364,5.539 -12.364,12.363v29.483c0,6.823 5.54,12.363 12.364,12.363h63.424c6.824,0 12.363,-5.54 12.363,-12.363V50.124C102.555,43.3 97.016,37.761 90.192,37.761zM52.196,43.214c0,-0.409 0.333,-0.742 0.742,-0.742h39.728c0.409,0 0.741,0.333 0.741,0.742v7.414c0,0.409 -0.332,0.742 -0.741,0.742H52.938c-0.409,0 -0.742,-0.333 -0.742,-0.742V43.214zM71.655,78.291c0,0.62 -0.504,1.123 -1.123,1.123H19.668c-0.62,0 -1.123,-0.504 -1.123,-1.123V60.823c0,-0.62 0.504,-1.122 1.123,-1.122h50.864c0.62,0 1.123,0.503 1.123,1.122V78.291zM97.468,77.139c0,3.379 -2.744,6.123 -6.122,6.123h-6.391c-3.379,0 -6.123,-2.744 -6.123,-6.123V65.442c0,-3.379 2.744,-6.123 6.123,-6.123h6.391c3.378,0 6.122,2.744 6.122,6.123V77.139z"
android:fillColor="#010101"/>
<path
android:pathData="M34.609,47.449c0,-0.016 -0.002,-0.032 -0.007,-0.047c-0.005,-0.016 -0.018,-0.024 -0.04,-0.024c-0.01,-0 -0.027,0.002 -0.05,0.007c-0.024,0.005 -0.049,0.009 -0.074,0.014c-0.026,0.005 -0.05,0.009 -0.072,0.012c-0.022,0.003 -0.038,0.005 -0.048,0.005c-0.044,-0 -0.067,-0.033 -0.067,-0.1c0.144,-0.038 0.276,-0.077 0.399,-0.117c0.122,-0.04 0.244,-0.084 0.365,-0.131c0.038,0.025 0.057,0.055 0.057,0.09c0,0.013 -0.001,0.026 -0.005,0.041c-0.003,0.014 -0.006,0.026 -0.009,0.036l-0.406,2.047l0.015,-0c0.085,-0.14 0.171,-0.271 0.257,-0.392c0.086,-0.121 0.174,-0.225 0.263,-0.312c0.089,-0.088 0.179,-0.156 0.272,-0.205c0.092,-0.05 0.184,-0.074 0.276,-0.074c0.093,-0 0.167,0.022 0.222,0.066c0.056,0.045 0.084,0.118 0.084,0.22c-0,0.038 -0.003,0.083 -0.01,0.134c-0.006,0.05 -0.014,0.101 -0.024,0.152l-0.243,1.145c-0.003,0.013 -0.006,0.029 -0.009,0.048c-0.004,0.019 -0.005,0.033 -0.005,0.043c-0,0.041 0.019,0.062 0.057,0.062c0.019,0 0.041,-0.006 0.067,-0.017c0.025,-0.011 0.05,-0.023 0.074,-0.038c0.024,-0.014 0.045,-0.027 0.064,-0.038c0.019,-0.011 0.035,-0.017 0.048,-0.017c0.032,0 0.054,0.032 0.067,0.096c-0.058,0.041 -0.116,0.08 -0.177,0.117c-0.06,0.036 -0.12,0.069 -0.179,0.097c-0.059,0.029 -0.113,0.052 -0.162,0.07c-0.049,0.017 -0.09,0.026 -0.122,0.026c-0.035,-0 -0.068,-0.007 -0.1,-0.022c-0.032,-0.014 -0.048,-0.048 -0.048,-0.102c0,-0.01 0.002,-0.026 0.005,-0.05c0.003,-0.024 0.007,-0.041 0.01,-0.05l0.267,-1.274c0.019,-0.089 0.029,-0.161 0.029,-0.215c-0,-0.092 -0.045,-0.138 -0.134,-0.138c-0.045,-0 -0.1,0.023 -0.167,0.071c-0.067,0.048 -0.138,0.112 -0.212,0.193c-0.075,0.081 -0.151,0.176 -0.227,0.284c-0.076,0.108 -0.148,0.221 -0.215,0.339c-0.028,0.054 -0.056,0.114 -0.083,0.179c-0.027,0.065 -0.05,0.133 -0.069,0.203c-0.02,0.07 -0.035,0.138 -0.046,0.205c-0.011,0.067 -0.016,0.127 -0.016,0.181c-0,0.045 0.004,0.088 0.014,0.129c-0.121,0.013 -0.247,0.037 -0.377,0.072c-0.029,-0.016 -0.043,-0.035 -0.043,-0.058c-0,-0.012 0.002,-0.027 0.005,-0.045c0.003,-0.017 0.006,-0.033 0.009,-0.045l0.463,-2.386c0.019,-0.092 0.033,-0.184 0.043,-0.274c0.01,-0.091 0.014,-0.162 0.014,-0.213Z"
android:fillColor="#fff"
android:fillType="nonZero"/>
android:pathData="M28.551,48.425c0.012,-0.06 0.002,-0.105 -0.029,-0.133c-0.032,-0.028 -0.095,-0.049 -0.191,-0.061c-0.042,-0.008 -0.063,-0.033 -0.063,-0.072c0,-0.008 0.002,-0.019 0.005,-0.029c0.003,-0.01 0.006,-0.024 0.009,-0.038c0.09,0.008 0.178,0.015 0.265,0.02c0.087,0.005 0.168,0.007 0.243,0.007c0.063,0 0.14,-0.002 0.229,-0.007c0.091,-0.005 0.175,-0.011 0.257,-0.02c0.006,0.029 0.009,0.052 0.009,0.067c0,0.042 -0.022,0.064 -0.063,0.068c-0.096,0.011 -0.164,0.033 -0.203,0.062c-0.039,0.03 -0.064,0.075 -0.076,0.136l-0.445,2.313c-0.012,0.06 -0.002,0.104 0.031,0.131c0.033,0.026 0.101,0.047 0.203,0.062c0.039,0.009 0.058,0.032 0.058,0.068c0,0.018 -0.003,0.041 -0.009,0.072c-0.09,-0.008 -0.181,-0.015 -0.274,-0.02c-0.092,-0.005 -0.177,-0.007 -0.252,-0.007c-0.063,0 -0.139,0.002 -0.227,0.007c-0.089,0.005 -0.174,0.011 -0.255,0.02c-0.006,-0.03 -0.008,-0.054 -0.008,-0.072c0,-0.036 0.018,-0.058 0.054,-0.063c0.096,-0.015 0.165,-0.037 0.207,-0.065c0.042,-0.028 0.069,-0.073 0.08,-0.133L28.551,48.425L28.551,48.425z"
android:fillColor="#FFFFFF"/>
<path
android:pathData="M36.938,48.275c0.025,-0.121 0.038,-0.218 0.038,-0.291c0,-0.042 -0.005,-0.085 -0.014,-0.129c0.06,-0.01 0.124,-0.019 0.191,-0.029c0.066,-0.009 0.133,-0.024 0.2,-0.043c0.025,0.019 0.038,0.038 0.038,0.058c0,0.006 -0.001,0.019 -0.002,0.038c-0.002,0.019 -0.004,0.035 -0.007,0.047l-0.082,0.43l0.492,-0c-0.01,0.029 -0.019,0.064 -0.029,0.105c-0.009,0.041 -0.017,0.079 -0.024,0.114c-0.079,-0.012 -0.16,-0.022 -0.243,-0.028c-0.083,-0.007 -0.161,-0.011 -0.234,-0.015l-0.262,1.489c-0.01,0.048 -0.014,0.081 -0.014,0.1c-0,0.077 0.046,0.115 0.138,0.115c0.048,-0 0.091,-0.006 0.131,-0.017c0.04,-0.011 0.076,-0.024 0.108,-0.04c0.028,-0.013 0.053,-0.025 0.073,-0.036c0.021,-0.011 0.038,-0.017 0.051,-0.017c0.035,0 0.055,0.03 0.062,0.091c-0.099,0.076 -0.206,0.137 -0.322,0.181c-0.117,0.045 -0.226,0.067 -0.327,0.067c-0.115,-0 -0.196,-0.018 -0.244,-0.055c-0.047,-0.037 -0.071,-0.091 -0.071,-0.165c-0,-0.035 0.003,-0.068 0.009,-0.1l0.301,-1.627l-0.348,0c0.006,-0.054 0.016,-0.095 0.031,-0.122c0.014,-0.027 0.039,-0.04 0.074,-0.04l0.272,-0l0.014,-0.081Z"
android:fillColor="#fff"
android:fillType="nonZero"/>
android:pathData="M30.886,49.685c0.018,-0.081 0.027,-0.149 0.027,-0.203c0,-0.087 -0.042,-0.13 -0.126,-0.13c-0.044,0 -0.1,0.025 -0.166,0.074c-0.066,0.05 -0.135,0.114 -0.207,0.193c-0.072,0.08 -0.143,0.169 -0.213,0.268c-0.071,0.099 -0.133,0.2 -0.187,0.302c-0.027,0.051 -0.054,0.108 -0.079,0.169c-0.025,0.061 -0.048,0.124 -0.067,0.189c-0.02,0.065 -0.035,0.128 -0.045,0.191c-0.01,0.063 -0.016,0.122 -0.016,0.175c0,0.042 0.005,0.083 0.013,0.122c-0.113,0.012 -0.232,0.035 -0.356,0.068c-0.024,-0.015 -0.036,-0.033 -0.036,-0.055c0,-0.006 0.002,-0.018 0.005,-0.038s0.006,-0.036 0.009,-0.047c0.069,-0.348 0.123,-0.622 0.161,-0.823c0.04,-0.202 0.069,-0.354 0.088,-0.457c0.02,-0.103 0.032,-0.171 0.037,-0.202c0.004,-0.032 0.007,-0.051 0.007,-0.057c0,-0.036 -0.012,-0.054 -0.036,-0.054c-0.012,0 -0.03,0.005 -0.055,0.015l-0.148,0.063c-0.025,0.01 -0.042,0.016 -0.054,0.016c-0.015,0 -0.028,-0.009 -0.039,-0.027c-0.01,-0.018 -0.019,-0.039 -0.025,-0.063c0.054,-0.033 0.118,-0.068 0.191,-0.106c0.074,-0.037 0.144,-0.072 0.213,-0.103c0.069,-0.032 0.129,-0.058 0.18,-0.079s0.084,-0.031 0.099,-0.031c0.021,0 0.039,0.005 0.054,0.015c0.015,0.01 0.023,0.028 0.023,0.052c0,0.009 -0.001,0.021 -0.002,0.034c-0.002,0.013 -0.004,0.027 -0.007,0.042l-0.162,0.784h0.018c0.078,-0.132 0.159,-0.256 0.243,-0.37c0.084,-0.114 0.169,-0.212 0.254,-0.294c0.086,-0.083 0.172,-0.147 0.259,-0.193c0.087,-0.047 0.175,-0.07 0.265,-0.07c0.084,0 0.151,0.021 0.2,0.062c0.05,0.042 0.075,0.111 0.075,0.207c0,0.036 -0.003,0.078 -0.008,0.126c-0.007,0.047 -0.014,0.095 -0.023,0.143l-0.23,1.08c-0.008,0.042 -0.013,0.071 -0.013,0.086c0,0.039 0.018,0.058 0.054,0.058c0.018,0 0.04,-0.006 0.063,-0.016c0.025,-0.01 0.047,-0.022 0.07,-0.036c0.023,-0.013 0.042,-0.025 0.061,-0.036c0.018,-0.01 0.033,-0.016 0.044,-0.016c0.03,0 0.051,0.03 0.063,0.091c-0.054,0.039 -0.109,0.075 -0.166,0.11c-0.058,0.034 -0.114,0.065 -0.169,0.091c-0.056,0.027 -0.108,0.049 -0.156,0.066c-0.048,0.016 -0.087,0.025 -0.117,0.025c-0.033,0 -0.064,-0.007 -0.092,-0.021c-0.028,-0.013 -0.042,-0.045 -0.042,-0.096c0,-0.009 0.001,-0.024 0.005,-0.042c0.003,-0.02 0.006,-0.037 0.008,-0.052L30.886,49.685L30.886,49.685z"
android:fillColor="#FFFFFF"/>
<path
android:pathData="M19.38,44.017l-0.213,-1.272l-0.688,1.272l0.901,-0ZM17.885,45.119c-0.026,0.051 -0.039,0.093 -0.039,0.125c0,0.044 0.025,0.076 0.074,0.096c0.049,0.02 0.125,0.037 0.227,0.052c0.065,0.011 0.098,0.038 0.098,0.082c-0,0.018 -0.004,0.045 -0.011,0.081c-0.109,-0.01 -0.21,-0.019 -0.303,-0.024c-0.093,-0.006 -0.19,-0.008 -0.292,-0.008c-0.073,-0 -0.148,0.002 -0.226,0.005c-0.079,0.004 -0.165,0.013 -0.26,0.027c-0.003,-0.014 -0.007,-0.029 -0.011,-0.043c-0.003,-0.015 -0.005,-0.027 -0.005,-0.038c0,-0.048 0.031,-0.077 0.093,-0.088c0.189,-0.032 0.311,-0.102 0.365,-0.207l1.747,-3.214c0.021,-0.036 0.049,-0.055 0.081,-0.055c0.011,0 0.022,0.002 0.033,0.006c0.011,0.003 0.02,0.007 0.027,0.011l0.584,3.236c0.011,0.065 0.044,0.114 0.099,0.147c0.054,0.033 0.125,0.056 0.212,0.071c0.048,0.007 0.079,0.018 0.093,0.033c0.015,0.014 0.022,0.032 0.022,0.054c-0,0.018 -0.004,0.046 -0.011,0.082c-0.102,-0.007 -0.199,-0.014 -0.292,-0.019c-0.093,-0.006 -0.188,-0.008 -0.286,-0.008c-0.215,-0 -0.428,0.011 -0.639,0.032c-0.011,-0.025 -0.016,-0.052 -0.016,-0.081c-0,-0.048 0.034,-0.077 0.103,-0.088c0.048,-0.007 0.099,-0.023 0.153,-0.049c0.055,-0.025 0.082,-0.065 0.082,-0.12l0,-0.033c0,-0.014 -0.002,-0.031 -0.005,-0.049l-0.164,-0.911l-1.048,0l-0.485,0.895Z"
android:fillColor="#fff"
android:fillType="nonZero"/>
android:pathData="M32.902,49.549c-0.033,-0.003 -0.054,-0.01 -0.063,-0.025c-0.008,-0.013 -0.015,-0.029 -0.018,-0.047c-0.015,-0.09 -0.049,-0.159 -0.104,-0.209c-0.054,-0.049 -0.127,-0.074 -0.221,-0.074c-0.095,0 -0.178,0.023 -0.247,0.07c-0.069,0.046 -0.104,0.113 -0.104,0.2c0,0.059 0.026,0.121 0.079,0.182c0.052,0.061 0.114,0.124 0.187,0.187c0.054,0.048 0.111,0.097 0.171,0.149c0.06,0.051 0.114,0.103 0.162,0.155c0.048,0.053 0.088,0.108 0.119,0.164c0.032,0.058 0.047,0.116 0.047,0.175c0,0.088 -0.019,0.169 -0.058,0.243c-0.039,0.075 -0.091,0.141 -0.159,0.196c-0.068,0.056 -0.147,0.099 -0.239,0.132c-0.091,0.033 -0.188,0.05 -0.29,0.05c-0.105,0 -0.207,-0.009 -0.306,-0.027s-0.192,-0.046 -0.279,-0.085c0.025,-0.091 0.042,-0.174 0.057,-0.25c0.013,-0.076 0.023,-0.163 0.029,-0.259h0.044c0.073,0 0.108,0.025 0.108,0.077c-0.006,0.125 0.024,0.224 0.088,0.292c0.064,0.069 0.154,0.103 0.268,0.103c0.117,0 0.213,-0.03 0.288,-0.091c0.075,-0.062 0.113,-0.142 0.113,-0.241c0,-0.044 -0.011,-0.088 -0.034,-0.13c-0.023,-0.042 -0.052,-0.082 -0.088,-0.119c-0.036,-0.038 -0.076,-0.075 -0.122,-0.113c-0.045,-0.038 -0.091,-0.075 -0.14,-0.114c-0.09,-0.075 -0.172,-0.154 -0.245,-0.237c-0.074,-0.082 -0.11,-0.177 -0.11,-0.286c0,-0.081 0.019,-0.156 0.057,-0.225c0.037,-0.069 0.089,-0.127 0.153,-0.177c0.064,-0.049 0.14,-0.089 0.225,-0.117c0.085,-0.028 0.175,-0.042 0.272,-0.042c0.174,0 0.338,0.041 0.49,0.121c-0.015,0.045 -0.027,0.103 -0.038,0.172c-0.01,0.069 -0.019,0.138 -0.025,0.207L32.902,49.549L32.902,49.549z"
android:fillColor="#FFFFFF"/>
<path
android:pathData="M22.315,45.588c-0.287,0 -0.532,-0.038 -0.733,-0.114c-0.202,-0.077 -0.367,-0.181 -0.494,-0.314c-0.128,-0.133 -0.22,-0.288 -0.279,-0.464c-0.058,-0.176 -0.087,-0.366 -0.087,-0.57c0,-0.266 0.044,-0.53 0.131,-0.794c0.087,-0.264 0.218,-0.501 0.393,-0.712c0.175,-0.211 0.394,-0.382 0.657,-0.513c0.264,-0.131 0.574,-0.197 0.931,-0.197c0.182,0 0.357,0.015 0.526,0.044c0.17,0.029 0.332,0.069 0.489,0.12c-0.011,0.106 -0.017,0.209 -0.017,0.311c0,0.073 0.003,0.146 0.009,0.218c0.005,0.073 0.011,0.146 0.019,0.219c-0.026,0.018 -0.058,0.027 -0.099,0.027c-0.069,-0 -0.105,-0.027 -0.109,-0.082c-0.032,-0.24 -0.122,-0.407 -0.267,-0.502c-0.146,-0.095 -0.34,-0.142 -0.584,-0.142c-0.24,0 -0.455,0.052 -0.644,0.156c-0.189,0.103 -0.35,0.244 -0.483,0.423c-0.132,0.178 -0.233,0.386 -0.303,0.624c-0.069,0.239 -0.103,0.491 -0.103,0.756c-0,0.197 0.026,0.374 0.079,0.532c0.053,0.158 0.126,0.293 0.221,0.404c0.094,0.111 0.21,0.197 0.346,0.259c0.137,0.062 0.291,0.093 0.461,0.093c0.248,-0 0.443,-0.051 0.587,-0.153c0.144,-0.102 0.268,-0.265 0.374,-0.491c0.025,-0.058 0.069,-0.087 0.131,-0.087c0.022,-0 0.044,0.004 0.068,0.013c0.024,0.009 0.039,0.018 0.046,0.025c-0.054,0.116 -0.102,0.239 -0.144,0.368c-0.042,0.129 -0.085,0.274 -0.128,0.434c-0.08,0.015 -0.166,0.028 -0.257,0.041c-0.091,0.013 -0.182,0.025 -0.273,0.035c-0.091,0.011 -0.176,0.02 -0.256,0.025c-0.08,0.005 -0.149,0.008 -0.208,0.008Z"
android:fillColor="#fff"
android:fillType="nonZero"/>
android:pathData="M33.951,48.573c-0.058,0 -0.102,-0.017 -0.135,-0.052c-0.033,-0.034 -0.05,-0.08 -0.05,-0.137c0,-0.081 0.027,-0.154 0.083,-0.219c0.056,-0.064 0.123,-0.096 0.201,-0.096c0.059,0 0.103,0.019 0.128,0.058c0.025,0.039 0.038,0.089 0.038,0.148c0,0.075 -0.025,0.143 -0.076,0.205C34.089,48.542 34.026,48.573 33.951,48.573zM33.721,50.674c-0.003,0.012 -0.006,0.028 -0.008,0.047c-0.003,0.02 -0.005,0.034 -0.005,0.043c0,0.036 0.018,0.054 0.054,0.054c0.022,0 0.043,-0.006 0.065,-0.016c0.023,-0.01 0.045,-0.022 0.068,-0.036c0.023,-0.013 0.042,-0.025 0.06,-0.036c0.019,-0.01 0.033,-0.016 0.045,-0.016c0.03,0 0.051,0.03 0.063,0.091c-0.051,0.039 -0.106,0.075 -0.164,0.11c-0.058,0.034 -0.115,0.065 -0.169,0.091c-0.054,0.027 -0.105,0.049 -0.153,0.066c-0.048,0.016 -0.088,0.025 -0.117,0.025c-0.033,0 -0.065,-0.007 -0.095,-0.021c-0.029,-0.013 -0.044,-0.045 -0.044,-0.096c0,-0.009 0.001,-0.025 0.004,-0.047c0.004,-0.023 0.007,-0.039 0.009,-0.047c0.066,-0.322 0.119,-0.577 0.158,-0.768s0.068,-0.336 0.088,-0.437c0.02,-0.1 0.032,-0.167 0.039,-0.2c0.006,-0.033 0.008,-0.053 0.008,-0.058c0,-0.036 -0.013,-0.054 -0.041,-0.054c-0.012,0 -0.03,0.005 -0.054,0.015c-0.025,0.01 -0.05,0.022 -0.076,0.032c-0.027,0.01 -0.052,0.021 -0.075,0.031c-0.023,0.01 -0.04,0.016 -0.052,0.016c-0.018,0 -0.031,-0.009 -0.041,-0.027c-0.008,-0.018 -0.016,-0.039 -0.023,-0.063c0.055,-0.029 0.117,-0.063 0.19,-0.101c0.072,-0.038 0.141,-0.073 0.209,-0.106c0.067,-0.033 0.127,-0.06 0.18,-0.081c0.052,-0.021 0.088,-0.031 0.106,-0.031c0.051,0 0.076,0.025 0.076,0.076c0,0.021 -0.003,0.043 -0.009,0.067L33.721,50.674L33.721,50.674z"
android:fillColor="#FFFFFF"/>
<path
android:pathData="M25.66,45.588c-0.287,0 -0.532,-0.038 -0.733,-0.114c-0.202,-0.077 -0.367,-0.181 -0.494,-0.314c-0.128,-0.133 -0.22,-0.288 -0.279,-0.464c-0.058,-0.176 -0.087,-0.366 -0.087,-0.57c0,-0.266 0.044,-0.53 0.131,-0.794c0.087,-0.264 0.218,-0.501 0.393,-0.712c0.175,-0.211 0.394,-0.382 0.657,-0.513c0.264,-0.131 0.574,-0.197 0.931,-0.197c0.182,0 0.357,0.015 0.526,0.044c0.17,0.029 0.332,0.069 0.489,0.12c-0.011,0.106 -0.017,0.209 -0.017,0.311c0,0.073 0.003,0.146 0.009,0.218c0.005,0.073 0.011,0.146 0.019,0.219c-0.026,0.018 -0.059,0.027 -0.099,0.027c-0.069,-0 -0.105,-0.027 -0.109,-0.082c-0.032,-0.24 -0.122,-0.407 -0.267,-0.502c-0.146,-0.095 -0.34,-0.142 -0.584,-0.142c-0.24,0 -0.455,0.052 -0.644,0.156c-0.189,0.103 -0.35,0.244 -0.483,0.423c-0.133,0.178 -0.233,0.386 -0.303,0.624c-0.069,0.239 -0.103,0.491 -0.103,0.756c-0,0.197 0.026,0.374 0.079,0.532c0.053,0.158 0.126,0.293 0.221,0.404c0.094,0.111 0.21,0.197 0.346,0.259c0.137,0.062 0.29,0.093 0.461,0.093c0.248,-0 0.443,-0.051 0.587,-0.153c0.144,-0.102 0.268,-0.265 0.374,-0.491c0.025,-0.058 0.069,-0.087 0.131,-0.087c0.022,-0 0.044,0.004 0.068,0.013c0.024,0.009 0.039,0.018 0.046,0.025c-0.054,0.116 -0.102,0.239 -0.144,0.368c-0.042,0.129 -0.085,0.274 -0.128,0.434c-0.08,0.015 -0.166,0.028 -0.257,0.041c-0.091,0.013 -0.182,0.025 -0.273,0.035c-0.091,0.011 -0.176,0.02 -0.256,0.025c-0.08,0.005 -0.149,0.008 -0.208,0.008Z"
android:fillColor="#fff"
android:fillType="nonZero"/>
android:pathData="M35.747,49.274c-0.037,-0.011 -0.078,-0.022 -0.126,-0.029c-0.048,-0.008 -0.093,-0.011 -0.135,-0.011c-0.129,0 -0.241,0.033 -0.338,0.099s-0.176,0.157 -0.241,0.271c-0.065,0.114 -0.113,0.247 -0.144,0.4c-0.031,0.154 -0.047,0.317 -0.047,0.491c0,0.11 0.015,0.191 0.045,0.241c0.029,0.049 0.075,0.075 0.135,0.075c0.054,0 0.112,-0.028 0.175,-0.084c0.063,-0.056 0.126,-0.127 0.191,-0.216c0.064,-0.089 0.125,-0.188 0.184,-0.299c0.058,-0.111 0.11,-0.224 0.156,-0.338c0.045,-0.114 0.08,-0.224 0.106,-0.328C35.734,49.439 35.747,49.35 35.747,49.274L35.747,49.274zM34.328,51.682c0.042,0.091 0.107,0.166 0.194,0.227c0.087,0.061 0.181,0.092 0.283,0.092c0.126,0 0.238,-0.052 0.333,-0.156c0.096,-0.103 0.165,-0.254 0.207,-0.452l0.221,-1.08h-0.018c-0.126,0.264 -0.265,0.46 -0.417,0.589c-0.151,0.129 -0.296,0.193 -0.434,0.193c-0.045,0 -0.091,-0.007 -0.135,-0.021c-0.045,-0.013 -0.084,-0.037 -0.117,-0.072c-0.033,-0.034 -0.06,-0.081 -0.081,-0.14c-0.022,-0.058 -0.032,-0.134 -0.032,-0.227c0,-0.242 0.037,-0.462 0.11,-0.659c0.074,-0.196 0.169,-0.363 0.286,-0.499c0.117,-0.137 0.247,-0.242 0.39,-0.315c0.142,-0.074 0.281,-0.11 0.416,-0.11c0.106,0 0.202,0.004 0.29,0.013c0.089,0.008 0.192,0.025 0.313,0.049l-0.414,2.116c-0.033,0.171 -0.089,0.316 -0.167,0.434c-0.078,0.119 -0.165,0.217 -0.261,0.293c-0.095,0.076 -0.197,0.132 -0.304,0.166c-0.107,0.035 -0.205,0.052 -0.294,0.052c-0.225,0 -0.401,-0.03 -0.527,-0.09c0.022,-0.066 0.038,-0.124 0.05,-0.172s0.023,-0.11 0.031,-0.189L34.328,51.682L34.328,51.682z"
android:fillColor="#FFFFFF"/>
<path
android:pathData="M30.402,44.306c-0.032,0.182 -0.09,0.351 -0.172,0.507c-0.081,0.157 -0.185,0.292 -0.311,0.407c-0.125,0.114 -0.272,0.204 -0.439,0.27c-0.167,0.065 -0.356,0.098 -0.567,0.098c-0.208,0 -0.388,-0.033 -0.541,-0.101c-0.152,-0.067 -0.276,-0.158 -0.371,-0.273c-0.094,-0.114 -0.158,-0.25 -0.191,-0.406c-0.032,-0.157 -0.031,-0.326 0.006,-0.508l0.376,-1.948c0.015,-0.076 -0.006,-0.131 -0.062,-0.163c-0.057,-0.033 -0.125,-0.053 -0.205,-0.06c-0.055,-0.008 -0.082,-0.037 -0.082,-0.088c0,-0.025 0.006,-0.058 0.017,-0.098c0.218,0.022 0.418,0.033 0.6,0.033c0.076,-0 0.175,-0.003 0.297,-0.008c0.122,-0.006 0.232,-0.014 0.33,-0.025c0.004,0.018 0.007,0.035 0.008,0.049c0.002,0.015 0.003,0.027 0.003,0.038c0,0.022 -0.006,0.041 -0.019,0.058c-0.013,0.016 -0.034,0.026 -0.063,0.03c-0.094,0.014 -0.173,0.039 -0.237,0.073c-0.064,0.035 -0.103,0.087 -0.117,0.156l-0.361,1.861c-0.025,0.138 -0.031,0.272 -0.019,0.403c0.013,0.131 0.049,0.249 0.107,0.352c0.058,0.104 0.139,0.188 0.243,0.251c0.103,0.064 0.233,0.096 0.39,0.096c0.131,-0 0.257,-0.019 0.379,-0.057c0.122,-0.039 0.235,-0.1 0.338,-0.186c0.104,-0.085 0.194,-0.197 0.27,-0.336c0.077,-0.138 0.135,-0.309 0.175,-0.512l0.355,-1.861c0.014,-0.073 -0.004,-0.128 -0.055,-0.164c-0.051,-0.036 -0.123,-0.062 -0.218,-0.076c-0.044,-0.004 -0.066,-0.033 -0.066,-0.088c0,-0.011 0.001,-0.023 0.003,-0.038c0.002,-0.014 0.005,-0.031 0.008,-0.049c0.109,0.011 0.199,0.019 0.268,0.025c0.069,0.005 0.14,0.008 0.213,0.008c0.065,-0 0.137,-0.002 0.215,-0.006c0.078,-0.003 0.165,-0.011 0.259,-0.021c0.004,0.018 0.008,0.034 0.011,0.049c0.004,0.014 0.006,0.027 0.006,0.038c-0,0.047 -0.024,0.074 -0.071,0.082c-0.091,0.014 -0.166,0.04 -0.224,0.076c-0.058,0.036 -0.095,0.087 -0.109,0.153l-0.377,1.959Z"
android:fillColor="#fff"
android:fillType="nonZero"/>
android:pathData="M36.912,48.253c0,-0.015 -0.002,-0.03 -0.007,-0.044c-0.005,-0.015 -0.017,-0.023 -0.038,-0.023c-0.009,0 -0.025,0.002 -0.047,0.007c-0.023,0.005 -0.046,0.008 -0.07,0.013c-0.025,0.005 -0.047,0.008 -0.068,0.011c-0.021,0.003 -0.036,0.005 -0.045,0.005c-0.041,0 -0.063,-0.031 -0.063,-0.094c0.136,-0.036 0.26,-0.073 0.376,-0.11c0.115,-0.038 0.23,-0.079 0.344,-0.124c0.036,0.024 0.054,0.052 0.054,0.085c0,0.012 -0.001,0.025 -0.005,0.039c-0.003,0.013 -0.006,0.025 -0.008,0.034l-0.383,1.931h0.014c0.08,-0.132 0.161,-0.256 0.242,-0.37c0.081,-0.114 0.164,-0.212 0.248,-0.294c0.084,-0.083 0.169,-0.147 0.257,-0.193c0.087,-0.047 0.174,-0.07 0.26,-0.07c0.088,0 0.158,0.021 0.209,0.062c0.053,0.042 0.079,0.111 0.079,0.207c0,0.036 -0.003,0.078 -0.009,0.126c-0.006,0.047 -0.013,0.095 -0.023,0.143l-0.229,1.08c-0.003,0.012 -0.006,0.027 -0.008,0.045c-0.004,0.018 -0.005,0.031 -0.005,0.041c0,0.039 0.018,0.058 0.054,0.058c0.018,0 0.039,-0.006 0.063,-0.016c0.024,-0.01 0.047,-0.022 0.07,-0.036c0.023,-0.013 0.042,-0.025 0.06,-0.036c0.018,-0.01 0.033,-0.016 0.045,-0.016c0.03,0 0.051,0.03 0.063,0.091c-0.055,0.039 -0.109,0.075 -0.167,0.11c-0.057,0.034 -0.113,0.065 -0.169,0.091c-0.056,0.027 -0.107,0.049 -0.153,0.066c-0.046,0.016 -0.085,0.025 -0.115,0.025c-0.033,0 -0.064,-0.007 -0.094,-0.021c-0.03,-0.013 -0.045,-0.045 -0.045,-0.096c0,-0.009 0.002,-0.025 0.005,-0.047c0.003,-0.023 0.007,-0.039 0.009,-0.047l0.252,-1.202c0.018,-0.084 0.027,-0.152 0.027,-0.203c0,-0.087 -0.042,-0.13 -0.126,-0.13c-0.042,0 -0.094,0.022 -0.158,0.067c-0.063,0.045 -0.13,0.106 -0.2,0.182c-0.071,0.076 -0.142,0.166 -0.214,0.268c-0.072,0.102 -0.14,0.208 -0.203,0.32c-0.026,0.051 -0.053,0.108 -0.078,0.169c-0.025,0.061 -0.047,0.125 -0.065,0.191c-0.019,0.066 -0.033,0.13 -0.043,0.193c-0.01,0.063 -0.015,0.12 -0.015,0.171c0,0.042 0.004,0.083 0.013,0.122c-0.114,0.012 -0.233,0.035 -0.356,0.068c-0.027,-0.015 -0.041,-0.033 -0.041,-0.055c0,-0.011 0.002,-0.025 0.005,-0.042c0.003,-0.016 0.006,-0.031 0.008,-0.042l0.437,-2.25c0.018,-0.087 0.031,-0.174 0.041,-0.258C36.908,48.368 36.912,48.301 36.912,48.253L36.912,48.253z"
android:fillColor="#FFFFFF"/>
<path
android:pathData="M32.618,44.077c-0.015,0.116 -0.038,0.192 -0.071,0.229c-0.033,0.036 -0.082,0.054 -0.148,0.054l-1.08,0c0.015,-0.116 0.037,-0.192 0.068,-0.229c0.031,-0.036 0.081,-0.054 0.15,-0.054l1.081,-0Z"
android:fillColor="#fff"
android:fillType="nonZero"/>
android:pathData="M39.108,49.032c0.024,-0.114 0.036,-0.206 0.036,-0.274c0,-0.04 -0.005,-0.08 -0.013,-0.122c0.057,-0.009 0.117,-0.018 0.18,-0.027c0.062,-0.008 0.125,-0.023 0.189,-0.041c0.024,0.018 0.036,0.036 0.036,0.055c0,0.006 -0.001,0.018 -0.002,0.036c-0.002,0.018 -0.004,0.033 -0.007,0.044l-0.077,0.406h0.464c-0.009,0.027 -0.018,0.06 -0.027,0.099c-0.008,0.039 -0.016,0.075 -0.023,0.108c-0.075,-0.011 -0.151,-0.021 -0.229,-0.026c-0.078,-0.007 -0.152,-0.01 -0.221,-0.014l-0.247,1.404c-0.009,0.045 -0.013,0.076 -0.013,0.094c0,0.073 0.043,0.108 0.13,0.108c0.045,0 0.086,-0.006 0.124,-0.016c0.038,-0.01 0.072,-0.023 0.102,-0.038c0.026,-0.012 0.05,-0.024 0.069,-0.034c0.02,-0.01 0.036,-0.016 0.048,-0.016c0.033,0 0.052,0.028 0.058,0.086c-0.093,0.072 -0.194,0.129 -0.304,0.171c-0.11,0.042 -0.213,0.063 -0.308,0.063c-0.108,0 -0.185,-0.017 -0.23,-0.052c-0.044,-0.035 -0.067,-0.086 -0.067,-0.156c0,-0.033 0.003,-0.064 0.008,-0.094l0.284,-1.535H38.74c0.006,-0.051 0.015,-0.09 0.029,-0.115c0.013,-0.025 0.037,-0.038 0.07,-0.038h0.257L39.108,49.032L39.108,49.032z"
android:fillColor="#FFFFFF"/>
<path
android:pathData="M34.784,45.588c-0.287,0 -0.532,-0.038 -0.734,-0.114c-0.202,-0.077 -0.366,-0.181 -0.494,-0.314c-0.127,-0.133 -0.22,-0.288 -0.278,-0.464c-0.058,-0.176 -0.087,-0.366 -0.087,-0.57c-0,-0.266 0.043,-0.53 0.131,-0.794c0.087,-0.264 0.218,-0.501 0.393,-0.712c0.174,-0.211 0.393,-0.382 0.657,-0.513c0.264,-0.131 0.574,-0.197 0.93,-0.197c0.182,0 0.358,0.015 0.527,0.044c0.169,0.029 0.332,0.069 0.488,0.12c-0.01,0.106 -0.016,0.209 -0.016,0.311c0,0.073 0.003,0.146 0.008,0.218c0.006,0.073 0.012,0.146 0.019,0.219c-0.025,0.018 -0.058,0.027 -0.098,0.027c-0.069,-0 -0.105,-0.027 -0.109,-0.082c-0.033,-0.24 -0.122,-0.407 -0.267,-0.502c-0.146,-0.095 -0.341,-0.142 -0.584,-0.142c-0.24,0 -0.455,0.052 -0.644,0.156c-0.189,0.103 -0.35,0.244 -0.483,0.423c-0.133,0.178 -0.234,0.386 -0.303,0.624c-0.069,0.239 -0.104,0.491 -0.104,0.756c0,0.197 0.027,0.374 0.08,0.532c0.052,0.158 0.126,0.293 0.221,0.404c0.094,0.111 0.21,0.197 0.346,0.259c0.136,0.062 0.29,0.093 0.461,0.093c0.247,-0 0.443,-0.051 0.587,-0.153c0.143,-0.102 0.268,-0.265 0.373,-0.491c0.026,-0.058 0.07,-0.087 0.131,-0.087c0.022,-0 0.045,0.004 0.069,0.013c0.023,0.009 0.039,0.018 0.046,0.025c-0.055,0.116 -0.103,0.239 -0.145,0.368c-0.041,0.129 -0.084,0.274 -0.128,0.434c-0.08,0.015 -0.165,0.028 -0.256,0.041c-0.091,0.013 -0.182,0.025 -0.273,0.035c-0.091,0.011 -0.177,0.02 -0.257,0.025c-0.08,0.005 -0.149,0.008 -0.207,0.008Z"
android:fillColor="#fff"
android:fillType="nonZero"/>
android:pathData="M22.548,45.016l-0.201,-1.2l-0.649,1.2C21.699,45.016 22.548,45.016 22.548,45.016zM21.138,46.055c-0.025,0.048 -0.037,0.088 -0.037,0.118c0,0.041 0.024,0.072 0.07,0.091s0.118,0.035 0.214,0.049c0.061,0.01 0.092,0.036 0.092,0.077c0,0.017 -0.004,0.042 -0.01,0.076c-0.103,-0.009 -0.198,-0.018 -0.286,-0.023c-0.088,-0.006 -0.179,-0.008 -0.275,-0.008c-0.069,0 -0.14,0.002 -0.213,0.005c-0.075,0.004 -0.156,0.012 -0.245,0.025c-0.003,-0.013 -0.007,-0.027 -0.01,-0.041c-0.003,-0.014 -0.005,-0.025 -0.005,-0.036c0,-0.045 0.029,-0.073 0.088,-0.083c0.178,-0.03 0.293,-0.096 0.344,-0.195l1.648,-3.031c0.02,-0.034 0.046,-0.052 0.076,-0.052c0.01,0 0.021,0.002 0.031,0.006c0.01,0.003 0.019,0.007 0.025,0.01l0.551,3.052c0.01,0.061 0.041,0.108 0.093,0.139c0.051,0.031 0.118,0.053 0.2,0.067c0.045,0.007 0.075,0.017 0.088,0.031c0.014,0.013 0.021,0.03 0.021,0.051c0,0.017 -0.004,0.043 -0.01,0.077c-0.096,-0.007 -0.188,-0.013 -0.275,-0.018c-0.088,-0.006 -0.177,-0.008 -0.27,-0.008c-0.203,0 -0.404,0.01 -0.603,0.03c-0.01,-0.024 -0.015,-0.049 -0.015,-0.076c0,-0.045 0.032,-0.073 0.097,-0.083c0.045,-0.007 0.093,-0.022 0.144,-0.046c0.052,-0.024 0.077,-0.061 0.077,-0.113v-0.031c0,-0.013 -0.002,-0.029 -0.005,-0.046l-0.155,-0.859h-0.988L21.138,46.055L21.138,46.055z"
android:fillColor="#FFFFFF"/>
<path
android:pathData="M39.368,42.352c0.014,-0.072 0.002,-0.126 -0.038,-0.161c-0.04,-0.034 -0.117,-0.061 -0.23,-0.079c-0.051,-0.011 -0.076,-0.036 -0.076,-0.076c-0,-0.011 0.002,-0.025 0.005,-0.041c0.004,-0.016 0.008,-0.032 0.011,-0.046c0.109,0.007 0.218,0.014 0.325,0.021c0.107,0.008 0.205,0.011 0.292,0.011c0.076,0 0.169,-0.002 0.278,-0.008c0.109,-0.005 0.213,-0.014 0.311,-0.024c0.008,0.029 0.011,0.058 0.011,0.087c0,0.044 -0.023,0.067 -0.071,0.071c-0.109,0.018 -0.19,0.045 -0.243,0.082c-0.052,0.036 -0.086,0.091 -0.101,0.163l-0.534,2.8c-0.015,0.072 0.001,0.125 0.046,0.158c0.046,0.033 0.123,0.058 0.232,0.076c0.047,0.011 0.071,0.038 0.071,0.082c-0,0.022 -0.004,0.051 -0.011,0.087c-0.105,-0.01 -0.216,-0.019 -0.33,-0.024c-0.115,-0.006 -0.217,-0.008 -0.308,-0.008c-0.073,-0 -0.166,0.002 -0.279,0.008c-0.112,0.005 -0.218,0.014 -0.316,0.024c-0.007,-0.036 -0.011,-0.065 -0.011,-0.087c-0,-0.047 0.022,-0.074 0.065,-0.082c0.128,-0.022 0.216,-0.048 0.265,-0.079c0.049,-0.031 0.081,-0.083 0.096,-0.155l0.256,-1.337l-1.55,-0l-0.256,1.337c-0.015,0.072 -0,0.125 0.043,0.158c0.044,0.033 0.126,0.058 0.246,0.076c0.047,0.004 0.071,0.031 0.071,0.082c-0,0.022 -0.004,0.051 -0.011,0.087c-0.109,-0.01 -0.222,-0.019 -0.338,-0.024c-0.117,-0.006 -0.22,-0.008 -0.311,-0.008c-0.073,-0 -0.162,0.002 -0.268,0.008c-0.105,0.005 -0.205,0.014 -0.3,0.024c-0.011,-0.025 -0.016,-0.054 -0.016,-0.087c-0,-0.047 0.023,-0.073 0.071,-0.076c0.116,-0.018 0.199,-0.045 0.248,-0.079c0.049,-0.035 0.081,-0.089 0.096,-0.161l0.54,-2.8c0.014,-0.072 0.002,-0.128 -0.036,-0.166c-0.038,-0.038 -0.115,-0.066 -0.232,-0.085c-0.051,-0.003 -0.076,-0.029 -0.076,-0.076c-0,-0.026 0.005,-0.053 0.016,-0.082c0.106,0.011 0.21,0.019 0.314,0.025c0.104,0.005 0.201,0.008 0.292,0.008c0.073,-0 0.168,-0.003 0.287,-0.008c0.118,-0.006 0.226,-0.014 0.324,-0.025c0.011,0.029 0.017,0.056 0.017,0.082c-0,0.044 -0.026,0.069 -0.077,0.076c-0.116,0.019 -0.202,0.047 -0.256,0.085c-0.055,0.038 -0.089,0.094 -0.104,0.166l-0.246,1.25l1.55,-0l0.246,-1.25Z"
android:fillColor="#fff"
android:fillType="nonZero"/>
android:pathData="M25.317,46.498c-0.271,0 -0.502,-0.036 -0.691,-0.108c-0.191,-0.073 -0.346,-0.171 -0.466,-0.296c-0.121,-0.125 -0.207,-0.272 -0.263,-0.438c-0.055,-0.166 -0.082,-0.345 -0.082,-0.538c0,-0.251 0.042,-0.5 0.124,-0.749c0.082,-0.249 0.206,-0.473 0.371,-0.672c0.165,-0.199 0.372,-0.36 0.62,-0.484c0.249,-0.124 0.541,-0.186 0.878,-0.186c0.172,0 0.337,0.014 0.496,0.041c0.16,0.027 0.313,0.065 0.461,0.113c-0.01,0.1 -0.016,0.197 -0.016,0.293c0,0.069 0.003,0.138 0.008,0.206c0.005,0.069 0.01,0.138 0.018,0.207c-0.025,0.017 -0.055,0.025 -0.093,0.025c-0.065,0 -0.099,-0.025 -0.103,-0.077c-0.03,-0.226 -0.115,-0.384 -0.252,-0.473c-0.138,-0.09 -0.321,-0.134 -0.551,-0.134c-0.226,0 -0.429,0.049 -0.607,0.147c-0.178,0.097 -0.33,0.23 -0.456,0.399c-0.124,0.168 -0.22,0.364 -0.286,0.589c-0.065,0.225 -0.097,0.463 -0.097,0.713c0,0.186 0.025,0.353 0.075,0.502c0.05,0.149 0.119,0.276 0.208,0.381c0.089,0.105 0.198,0.186 0.326,0.244c0.129,0.058 0.274,0.088 0.435,0.088c0.234,0 0.418,-0.048 0.554,-0.144c0.136,-0.096 0.253,-0.25 0.353,-0.463c0.024,-0.055 0.065,-0.082 0.124,-0.082c0.021,0 0.042,0.004 0.064,0.012s0.037,0.017 0.043,0.024c-0.051,0.109 -0.096,0.225 -0.136,0.347c-0.04,0.122 -0.08,0.258 -0.121,0.409c-0.075,0.014 -0.157,0.026 -0.242,0.039c-0.086,0.012 -0.172,0.024 -0.257,0.033c-0.086,0.01 -0.166,0.019 -0.241,0.024C25.437,46.495 25.372,46.498 25.317,46.498L25.317,46.498z"
android:fillColor="#FFFFFF"/>
<path
android:pathData="M41.278,42.347c0.014,-0.073 -0.006,-0.126 -0.06,-0.158c-0.055,-0.033 -0.126,-0.055 -0.213,-0.066c-0.051,-0.011 -0.077,-0.042 -0.077,-0.093c0,-0.011 0.001,-0.023 0.003,-0.038c0.002,-0.014 0.005,-0.031 0.008,-0.049c0.109,0.011 0.22,0.019 0.333,0.025c0.113,0.005 0.218,0.008 0.317,0.008l1.031,-0c0.156,-0 0.266,-0.006 0.327,-0.017c0.062,-0.01 0.113,-0.016 0.153,-0.016c0.047,0 0.077,0.022 0.087,0.066c0.008,0.061 0.017,0.155 0.028,0.281c0.011,0.125 0.032,0.268 0.065,0.428c-0.014,0.007 -0.033,0.015 -0.054,0.025c-0.022,0.009 -0.042,0.013 -0.06,0.013c-0.048,0 -0.079,-0.022 -0.093,-0.065c-0.047,-0.186 -0.117,-0.317 -0.207,-0.393c-0.091,-0.077 -0.228,-0.115 -0.41,-0.115l-0.682,0l-0.273,1.424l0.748,0c0.08,0 0.138,-0.027 0.175,-0.081c0.036,-0.055 0.069,-0.13 0.098,-0.224c0.007,-0.018 0.017,-0.033 0.03,-0.044c0.012,-0.011 0.033,-0.016 0.062,-0.016c0.033,-0 0.068,0.007 0.104,0.022c-0.022,0.087 -0.041,0.166 -0.057,0.237c-0.016,0.071 -0.031,0.143 -0.044,0.216c-0.013,0.072 -0.023,0.149 -0.033,0.229c-0.009,0.08 -0.017,0.171 -0.024,0.273c-0.033,0.01 -0.066,0.016 -0.098,0.016c-0.033,-0 -0.056,-0.009 -0.069,-0.027c-0.012,-0.019 -0.017,-0.039 -0.013,-0.06c0.007,-0.084 -0,-0.16 -0.022,-0.23c-0.022,-0.069 -0.073,-0.103 -0.153,-0.103l-0.742,-0l-0.256,1.353c-0.011,0.058 -0.003,0.097 0.024,0.117c0.027,0.02 0.072,0.03 0.134,0.03l0.627,0c0.157,0 0.297,-0.04 0.421,-0.12c0.123,-0.08 0.252,-0.218 0.387,-0.414c0.015,-0.019 0.028,-0.032 0.041,-0.041c0.013,-0.009 0.03,-0.014 0.052,-0.014c0.022,0 0.043,0.005 0.065,0.016c0.022,0.011 0.042,0.026 0.06,0.044c-0.018,0.036 -0.036,0.075 -0.054,0.115c-0.018,0.032 -0.037,0.071 -0.055,0.114c-0.018,0.044 -0.036,0.088 -0.054,0.131c-0.03,0.073 -0.053,0.144 -0.071,0.213c-0.019,0.069 -0.037,0.118 -0.055,0.147c-0.018,0.029 -0.047,0.044 -0.087,0.044c-0.062,-0 -0.124,-0.005 -0.186,-0.014c-0.062,-0.009 -0.145,-0.013 -0.251,-0.013l-1.288,-0c-0.076,-0 -0.17,0.002 -0.281,0.008c-0.111,0.005 -0.215,0.014 -0.313,0.024c-0.004,-0.018 -0.007,-0.034 -0.009,-0.049c-0.001,-0.014 -0.002,-0.027 -0.002,-0.038c-0,-0.018 0.005,-0.036 0.016,-0.054c0.011,-0.019 0.031,-0.03 0.06,-0.033c0.113,-0.018 0.197,-0.046 0.251,-0.082c0.055,-0.036 0.087,-0.086 0.098,-0.147l0.541,-2.805Z"
android:fillColor="#fff"
android:fillType="nonZero"/>
android:pathData="M28.471,46.498c-0.271,0 -0.502,-0.036 -0.691,-0.108c-0.191,-0.073 -0.346,-0.171 -0.466,-0.296c-0.121,-0.125 -0.207,-0.272 -0.263,-0.438c-0.055,-0.166 -0.082,-0.345 -0.082,-0.538c0,-0.251 0.042,-0.5 0.124,-0.749c0.082,-0.249 0.206,-0.473 0.371,-0.672c0.165,-0.199 0.372,-0.36 0.62,-0.484c0.249,-0.124 0.541,-0.186 0.878,-0.186c0.172,0 0.337,0.014 0.496,0.041c0.16,0.027 0.313,0.065 0.461,0.113c-0.01,0.1 -0.016,0.197 -0.016,0.293c0,0.069 0.003,0.138 0.008,0.206c0.005,0.069 0.01,0.138 0.018,0.207c-0.025,0.017 -0.056,0.025 -0.093,0.025c-0.065,0 -0.099,-0.025 -0.103,-0.077c-0.03,-0.226 -0.115,-0.384 -0.252,-0.473c-0.138,-0.09 -0.321,-0.134 -0.551,-0.134c-0.226,0 -0.429,0.049 -0.607,0.147c-0.178,0.097 -0.33,0.23 -0.456,0.399c-0.125,0.168 -0.22,0.364 -0.286,0.589c-0.065,0.225 -0.097,0.463 -0.097,0.713c0,0.186 0.025,0.353 0.075,0.502s0.119,0.276 0.208,0.381c0.089,0.105 0.198,0.186 0.326,0.244c0.129,0.058 0.274,0.088 0.435,0.088c0.234,0 0.418,-0.048 0.554,-0.144c0.136,-0.096 0.253,-0.25 0.353,-0.463c0.024,-0.055 0.065,-0.082 0.124,-0.082c0.021,0 0.042,0.004 0.064,0.012c0.023,0.008 0.037,0.017 0.043,0.024c-0.051,0.109 -0.096,0.225 -0.136,0.347s-0.08,0.258 -0.121,0.409c-0.075,0.014 -0.157,0.026 -0.242,0.039c-0.086,0.012 -0.172,0.024 -0.257,0.033c-0.086,0.01 -0.166,0.019 -0.241,0.024C28.592,46.495 28.527,46.498 28.471,46.498L28.471,46.498z"
android:fillColor="#FFFFFF"/>
<path
android:pathData="M44.628,43.711l0.011,-0.076l1.342,-1.217c0.073,-0.062 0.109,-0.118 0.109,-0.169c0,-0.066 -0.065,-0.109 -0.196,-0.131c-0.051,-0.011 -0.076,-0.038 -0.076,-0.082c-0,-0.026 0.003,-0.057 0.011,-0.093c0.105,0.011 0.196,0.019 0.272,0.025c0.077,0.005 0.162,0.008 0.257,0.008c0.08,-0 0.158,-0.003 0.234,-0.008c0.077,-0.006 0.161,-0.014 0.251,-0.025c0.004,0.018 0.007,0.035 0.009,0.049c0.001,0.015 0.002,0.027 0.002,0.038c0,0.048 -0.023,0.077 -0.071,0.088c-0.083,0.018 -0.155,0.044 -0.215,0.079c-0.06,0.034 -0.116,0.075 -0.167,0.123l-1.342,1.222l1.021,1.642c0.032,0.051 0.077,0.096 0.133,0.134c0.057,0.038 0.125,0.065 0.205,0.079c0.029,0.007 0.047,0.017 0.054,0.027c0.008,0.011 0.011,0.024 0.011,0.039c0,0.025 -0.009,0.056 -0.027,0.092c-0.207,-0.021 -0.38,-0.032 -0.518,-0.032c-0.084,-0 -0.151,-0.025 -0.202,-0.074c-0.051,-0.049 -0.108,-0.121 -0.169,-0.215l-0.939,-1.523ZM44.301,42.347c0.007,-0.044 0.003,-0.079 -0.011,-0.107c-0.015,-0.027 -0.036,-0.049 -0.063,-0.065c-0.027,-0.016 -0.058,-0.028 -0.093,-0.035c-0.034,-0.008 -0.068,-0.013 -0.101,-0.017c-0.051,-0.007 -0.076,-0.036 -0.076,-0.087c-0,-0.011 0.002,-0.025 0.005,-0.041c0.004,-0.016 0.008,-0.034 0.011,-0.052c0.109,0.011 0.217,0.019 0.322,0.025c0.106,0.005 0.204,0.008 0.295,0.008c0.076,-0 0.172,-0.003 0.286,-0.008c0.115,-0.006 0.221,-0.014 0.32,-0.025c0.003,0.018 0.006,0.035 0.008,0.049c0.002,0.015 0.002,0.029 0.002,0.044c0,0.044 -0.025,0.071 -0.076,0.082c-0.095,0.014 -0.174,0.038 -0.237,0.071c-0.064,0.032 -0.103,0.085 -0.118,0.158l-0.54,2.805c-0.007,0.043 -0.005,0.079 0.006,0.106c0.011,0.027 0.03,0.05 0.057,0.068c0.027,0.018 0.059,0.032 0.095,0.041c0.037,0.009 0.075,0.016 0.115,0.019c0.044,0.008 0.065,0.035 0.065,0.082c0,0.011 -0,0.024 -0.002,0.038c-0.002,0.015 -0.005,0.031 -0.008,0.049c-0.11,-0.01 -0.218,-0.019 -0.325,-0.024c-0.107,-0.006 -0.207,-0.008 -0.298,-0.008c-0.076,-0 -0.171,0.002 -0.286,0.008c-0.115,0.005 -0.221,0.014 -0.319,0.024c-0.004,-0.018 -0.007,-0.034 -0.008,-0.049c-0.002,-0.014 -0.003,-0.027 -0.003,-0.038c-0,-0.047 0.022,-0.074 0.065,-0.082c0.099,-0.014 0.181,-0.039 0.249,-0.073c0.067,-0.035 0.108,-0.089 0.122,-0.161l0.541,-2.805Z"
android:fillColor="#fff"
android:fillType="nonZero"/>
android:pathData="M32.944,45.289c-0.03,0.172 -0.085,0.331 -0.162,0.478c-0.076,0.148 -0.174,0.275 -0.293,0.384c-0.118,0.108 -0.257,0.192 -0.414,0.255c-0.158,0.061 -0.336,0.092 -0.535,0.092c-0.196,0 -0.366,-0.031 -0.51,-0.095c-0.143,-0.063 -0.26,-0.149 -0.35,-0.257c-0.089,-0.108 -0.149,-0.236 -0.18,-0.383c-0.03,-0.148 -0.029,-0.307 0.006,-0.479l0.355,-1.837c0.014,-0.072 -0.006,-0.124 -0.058,-0.154c-0.054,-0.031 -0.118,-0.05 -0.193,-0.057c-0.052,-0.008 -0.077,-0.035 -0.077,-0.083c0,-0.024 0.006,-0.055 0.016,-0.092c0.206,0.021 0.394,0.031 0.566,0.031c0.072,0 0.165,-0.003 0.28,-0.008c0.115,-0.006 0.219,-0.013 0.311,-0.024c0.004,0.017 0.007,0.033 0.008,0.046c0.002,0.014 0.003,0.025 0.003,0.036c0,0.021 -0.006,0.039 -0.018,0.055c-0.012,0.015 -0.032,0.025 -0.059,0.028c-0.089,0.013 -0.163,0.037 -0.224,0.069c-0.06,0.033 -0.097,0.082 -0.11,0.147l-0.34,1.755c-0.024,0.13 -0.029,0.257 -0.018,0.38c0.012,0.124 0.046,0.235 0.101,0.332c0.055,0.098 0.131,0.177 0.229,0.237c0.097,0.06 0.22,0.091 0.368,0.091c0.124,0 0.242,-0.018 0.357,-0.054c0.115,-0.037 0.222,-0.094 0.319,-0.175c0.098,-0.08 0.183,-0.186 0.255,-0.317c0.073,-0.13 0.127,-0.291 0.165,-0.483l0.335,-1.755c0.013,-0.069 -0.004,-0.121 -0.052,-0.155c-0.048,-0.034 -0.116,-0.058 -0.206,-0.072c-0.042,-0.004 -0.062,-0.031 -0.062,-0.083c0,-0.01 0.001,-0.022 0.003,-0.036c0.002,-0.013 0.005,-0.029 0.008,-0.046c0.103,0.01 0.188,0.018 0.253,0.024c0.065,0.005 0.132,0.008 0.201,0.008c0.061,0 0.129,-0.002 0.203,-0.006c0.074,-0.003 0.156,-0.01 0.244,-0.02c0.004,0.017 0.008,0.032 0.01,0.046c0.004,0.013 0.006,0.025 0.006,0.036c0,0.044 -0.023,0.07 -0.067,0.077c-0.086,0.013 -0.157,0.038 -0.211,0.072s-0.09,0.082 -0.103,0.144C33.299,43.441 32.944,45.289 32.944,45.289z"
android:fillColor="#FFFFFF"/>
<path
android:pathData="M94.509,42.106c0,-0.434 -0.352,-0.787 -0.786,-0.787l-42.122,0c-0.434,0 -0.787,0.353 -0.787,0.787l0,7.861c0,0.434 0.353,0.787 0.787,0.787l42.122,-0c0.434,-0 0.786,-0.353 0.786,-0.787l0,-7.861Z"
android:fillColor="#7d7474"/>
android:pathData="M35.034,45.073c-0.014,0.109 -0.036,0.181 -0.067,0.216c-0.031,0.034 -0.077,0.051 -0.14,0.051h-1.019c0.014,-0.109 0.035,-0.181 0.064,-0.216c0.029,-0.034 0.076,-0.051 0.141,-0.051H35.034L35.034,45.073z"
android:fillColor="#FFFFFF"/>
<path
android:fillColor="#FF000000"
android:pathData="M50.62,42.583h4.465v7.397h-4.465z"/>
android:pathData="M37.077,46.498c-0.271,0 -0.502,-0.036 -0.692,-0.108c-0.191,-0.073 -0.345,-0.171 -0.466,-0.296c-0.12,-0.125 -0.207,-0.272 -0.262,-0.438c-0.055,-0.166 -0.082,-0.345 -0.082,-0.538c0,-0.251 0.041,-0.5 0.124,-0.749c0.082,-0.249 0.206,-0.473 0.371,-0.672c0.164,-0.199 0.371,-0.36 0.62,-0.484c0.249,-0.124 0.541,-0.186 0.877,-0.186c0.172,0 0.338,0.014 0.497,0.041s0.313,0.065 0.46,0.113c-0.009,0.1 -0.015,0.197 -0.015,0.293c0,0.069 0.003,0.138 0.008,0.206c0.006,0.069 0.011,0.138 0.018,0.207c-0.024,0.017 -0.055,0.025 -0.092,0.025c-0.065,0 -0.099,-0.025 -0.103,-0.077c-0.031,-0.226 -0.115,-0.384 -0.252,-0.473c-0.138,-0.09 -0.322,-0.134 -0.551,-0.134c-0.226,0 -0.429,0.049 -0.607,0.147c-0.178,0.097 -0.33,0.23 -0.456,0.399c-0.125,0.168 -0.221,0.364 -0.286,0.589c-0.065,0.225 -0.098,0.463 -0.098,0.713c0,0.186 0.025,0.353 0.075,0.502c0.049,0.149 0.119,0.276 0.208,0.381c0.089,0.105 0.198,0.186 0.326,0.244c0.128,0.058 0.274,0.088 0.435,0.088c0.233,0 0.418,-0.048 0.554,-0.144c0.135,-0.096 0.253,-0.25 0.352,-0.463c0.025,-0.055 0.066,-0.082 0.124,-0.082c0.021,0 0.042,0.004 0.065,0.012c0.022,0.008 0.037,0.017 0.043,0.024c-0.052,0.109 -0.097,0.225 -0.137,0.347c-0.039,0.122 -0.079,0.258 -0.121,0.409c-0.075,0.014 -0.156,0.026 -0.241,0.039c-0.086,0.012 -0.172,0.024 -0.257,0.033c-0.086,0.01 -0.167,0.019 -0.242,0.024C37.197,46.495 37.132,46.498 37.077,46.498L37.077,46.498z"
android:fillColor="#FFFFFF"/>
<path
android:pathData="M94.509,42.126c0,-0.445 -0.361,-0.807 -0.806,-0.807l-28.12,0l0,9.435l28.12,-0c0.445,-0 0.806,-0.362 0.806,-0.807l0,-7.821Z"
android:fillColor="#2a2727"/>
android:pathData="M41.4,43.446c0.013,-0.068 0.002,-0.119 -0.036,-0.152c-0.038,-0.032 -0.11,-0.058 -0.217,-0.075c-0.048,-0.01 -0.072,-0.034 -0.072,-0.072c0,-0.01 0.002,-0.024 0.005,-0.039c0.004,-0.015 0.008,-0.03 0.01,-0.043c0.103,0.007 0.206,0.013 0.307,0.02c0.101,0.008 0.193,0.01 0.275,0.01c0.072,0 0.159,-0.002 0.262,-0.008c0.103,-0.005 0.201,-0.013 0.293,-0.023c0.008,0.027 0.01,0.055 0.01,0.082c0,0.041 -0.022,0.063 -0.067,0.067c-0.103,0.017 -0.179,0.042 -0.229,0.077c-0.049,0.034 -0.081,0.086 -0.095,0.154l-0.504,2.641c-0.014,0.068 0.001,0.118 0.043,0.149c0.043,0.031 0.116,0.055 0.219,0.072c0.044,0.01 0.067,0.036 0.067,0.077c0,0.021 -0.004,0.048 -0.01,0.082c-0.099,-0.009 -0.204,-0.018 -0.311,-0.023c-0.108,-0.006 -0.205,-0.008 -0.29,-0.008c-0.069,0 -0.157,0.002 -0.263,0.008c-0.106,0.005 -0.206,0.013 -0.298,0.023c-0.007,-0.034 -0.01,-0.061 -0.01,-0.082c0,-0.044 0.021,-0.07 0.061,-0.077c0.121,-0.021 0.204,-0.045 0.25,-0.075s0.076,-0.078 0.091,-0.146l0.241,-1.261h-1.462l-0.241,1.261c-0.014,0.068 0,0.118 0.041,0.149c0.042,0.031 0.119,0.055 0.232,0.072c0.044,0.004 0.067,0.029 0.067,0.077c0,0.021 -0.004,0.048 -0.01,0.082c-0.103,-0.009 -0.209,-0.018 -0.319,-0.023c-0.11,-0.006 -0.207,-0.008 -0.293,-0.008c-0.069,0 -0.153,0.002 -0.253,0.008c-0.099,0.005 -0.193,0.013 -0.283,0.023c-0.01,-0.024 -0.015,-0.051 -0.015,-0.082c0,-0.044 0.022,-0.069 0.067,-0.072c0.109,-0.017 0.188,-0.042 0.234,-0.075c0.046,-0.033 0.076,-0.084 0.091,-0.152l0.509,-2.641c0.013,-0.068 0.002,-0.121 -0.034,-0.157c-0.036,-0.036 -0.108,-0.062 -0.219,-0.08c-0.048,-0.003 -0.072,-0.027 -0.072,-0.072c0,-0.025 0.005,-0.05 0.015,-0.077c0.1,0.01 0.198,0.018 0.296,0.024c0.098,0.005 0.19,0.008 0.275,0.008c0.069,0 0.158,-0.003 0.271,-0.008c0.111,-0.006 0.213,-0.013 0.306,-0.024c0.01,0.027 0.016,0.053 0.016,0.077c0,0.041 -0.025,0.065 -0.073,0.072c-0.109,0.018 -0.191,0.044 -0.241,0.08c-0.052,0.036 -0.084,0.089 -0.098,0.157l-0.232,1.179h1.462L41.4,43.446L41.4,43.446z"
android:fillColor="#FFFFFF"/>
<path
android:pathData="M65.583,41.319l-9.208,0c-0.67,0 -1.214,0.544 -1.214,1.214l-0,6.992c-0,0.671 0.544,1.215 1.214,1.215l9.208,-0l0,-9.421Z"
android:fillColor="#fff"/>
android:pathData="M43.202,43.441c0.013,-0.069 -0.006,-0.119 -0.057,-0.149c-0.052,-0.031 -0.119,-0.052 -0.201,-0.062c-0.048,-0.01 -0.073,-0.04 -0.073,-0.088c0,-0.01 0.001,-0.022 0.003,-0.036c0.002,-0.013 0.005,-0.029 0.008,-0.046c0.103,0.01 0.207,0.018 0.314,0.024c0.107,0.005 0.206,0.008 0.299,0.008h0.972c0.147,0 0.251,-0.006 0.308,-0.016c0.058,-0.009 0.107,-0.015 0.144,-0.015c0.044,0 0.073,0.021 0.082,0.062c0.008,0.058 0.016,0.146 0.026,0.265c0.01,0.118 0.03,0.253 0.061,0.404c-0.013,0.007 -0.031,0.014 -0.051,0.024c-0.021,0.008 -0.04,0.012 -0.057,0.012c-0.045,0 -0.075,-0.021 -0.088,-0.061c-0.044,-0.175 -0.11,-0.299 -0.195,-0.371c-0.086,-0.073 -0.215,-0.108 -0.387,-0.108H43.67l-0.257,1.343h0.705c0.075,0 0.13,-0.025 0.165,-0.076c0.034,-0.052 0.065,-0.123 0.092,-0.211c0.007,-0.017 0.016,-0.031 0.028,-0.041c0.011,-0.01 0.031,-0.015 0.058,-0.015c0.031,0 0.064,0.007 0.098,0.021c-0.021,0.082 -0.039,0.157 -0.054,0.224c-0.015,0.067 -0.029,0.135 -0.042,0.204c-0.012,0.068 -0.022,0.141 -0.031,0.216c-0.008,0.075 -0.016,0.161 -0.023,0.257c-0.031,0.009 -0.062,0.015 -0.092,0.015c-0.031,0 -0.053,-0.008 -0.065,-0.025c-0.011,-0.018 -0.016,-0.037 -0.012,-0.057c0.007,-0.079 0,-0.151 -0.021,-0.217c-0.021,-0.065 -0.069,-0.097 -0.144,-0.097h-0.7l-0.241,1.276c-0.01,0.055 -0.003,0.091 0.023,0.11c0.025,0.019 0.068,0.028 0.126,0.028h0.591c0.148,0 0.28,-0.038 0.397,-0.113c0.116,-0.075 0.238,-0.206 0.365,-0.39c0.014,-0.018 0.026,-0.03 0.039,-0.039c0.012,-0.008 0.028,-0.013 0.049,-0.013s0.041,0.005 0.061,0.015c0.021,0.01 0.04,0.025 0.057,0.041c-0.017,0.034 -0.034,0.071 -0.051,0.108c-0.017,0.03 -0.035,0.067 -0.052,0.108c-0.017,0.041 -0.034,0.083 -0.051,0.124c-0.028,0.069 -0.05,0.136 -0.067,0.201c-0.018,0.065 -0.035,0.111 -0.052,0.139c-0.017,0.027 -0.044,0.041 -0.082,0.041c-0.058,0 -0.117,-0.005 -0.175,-0.013c-0.058,-0.008 -0.137,-0.012 -0.237,-0.012h-1.215c-0.072,0 -0.16,0.002 -0.265,0.008c-0.105,0.005 -0.203,0.013 -0.295,0.023c-0.004,-0.017 -0.007,-0.032 -0.008,-0.046c-0.001,-0.013 -0.002,-0.025 -0.002,-0.036c0,-0.017 0.005,-0.034 0.015,-0.051c0.01,-0.018 0.029,-0.028 0.057,-0.031c0.107,-0.017 0.186,-0.043 0.237,-0.077c0.052,-0.034 0.082,-0.081 0.092,-0.139L43.202,43.441L43.202,43.441z"
android:fillColor="#FFFFFF"/>
<path
android:fillColor="#FF000000"
android:pathData="M59.633,41.319h2.276v9.434h-2.276z"/>
android:pathData="M46.361,44.727l0.01,-0.072l1.266,-1.148c0.069,-0.058 0.103,-0.111 0.103,-0.159c0,-0.062 -0.061,-0.103 -0.185,-0.124c-0.048,-0.01 -0.072,-0.036 -0.072,-0.077c0,-0.025 0.003,-0.054 0.01,-0.088c0.099,0.01 0.185,0.018 0.257,0.024c0.073,0.005 0.153,0.008 0.242,0.008c0.075,0 0.149,-0.003 0.221,-0.008c0.073,-0.006 0.152,-0.013 0.237,-0.024c0.004,0.017 0.007,0.033 0.008,0.046c0.001,0.014 0.002,0.025 0.002,0.036c0,0.045 -0.022,0.073 -0.067,0.083c-0.078,0.017 -0.146,0.042 -0.203,0.075c-0.057,0.032 -0.109,0.071 -0.158,0.116l-1.266,1.153l0.963,1.549c0.03,0.048 0.073,0.091 0.125,0.126c0.054,0.036 0.118,0.061 0.193,0.075c0.027,0.007 0.044,0.016 0.051,0.025c0.008,0.01 0.01,0.023 0.01,0.037c0,0.024 -0.008,0.053 -0.025,0.087c-0.195,-0.02 -0.358,-0.03 -0.489,-0.03c-0.079,0 -0.142,-0.024 -0.191,-0.07c-0.048,-0.046 -0.102,-0.114 -0.159,-0.203L46.361,44.727L46.361,44.727zM46.053,43.441c0.007,-0.041 0.003,-0.075 -0.01,-0.101c-0.014,-0.025 -0.034,-0.046 -0.059,-0.061c-0.025,-0.015 -0.055,-0.026 -0.088,-0.033c-0.032,-0.008 -0.064,-0.012 -0.095,-0.016c-0.048,-0.007 -0.072,-0.034 -0.072,-0.082c0,-0.01 0.002,-0.024 0.005,-0.039c0.004,-0.015 0.008,-0.032 0.01,-0.049c0.103,0.01 0.205,0.018 0.304,0.024c0.1,0.005 0.192,0.008 0.278,0.008c0.072,0 0.162,-0.003 0.27,-0.008c0.108,-0.006 0.208,-0.013 0.302,-0.024c0.003,0.017 0.006,0.033 0.008,0.046c0.002,0.014 0.002,0.027 0.002,0.041c0,0.042 -0.024,0.067 -0.072,0.077c-0.09,0.013 -0.164,0.036 -0.224,0.067c-0.06,0.03 -0.097,0.08 -0.111,0.149l-0.509,2.646c-0.007,0.041 -0.005,0.075 0.006,0.1c0.01,0.025 0.028,0.047 0.054,0.064s0.056,0.03 0.09,0.039c0.035,0.008 0.071,0.015 0.108,0.018c0.041,0.008 0.061,0.033 0.061,0.077c0,0.01 0,0.023 -0.002,0.036c-0.002,0.014 -0.005,0.029 -0.008,0.046c-0.104,-0.009 -0.206,-0.018 -0.307,-0.023c-0.101,-0.006 -0.195,-0.008 -0.281,-0.008c-0.072,0 -0.161,0.002 -0.27,0.008c-0.108,0.005 -0.208,0.013 -0.301,0.023c-0.004,-0.017 -0.007,-0.032 -0.008,-0.046c-0.002,-0.013 -0.003,-0.025 -0.003,-0.036c0,-0.044 0.021,-0.07 0.061,-0.077c0.093,-0.013 0.171,-0.037 0.235,-0.069c0.063,-0.033 0.102,-0.084 0.115,-0.152L46.053,43.441L46.053,43.441z"
android:fillColor="#FFFFFF"/>
<path
android:fillColor="#FF000000"
android:pathData="M63.295,41.319h2.276v9.434h-2.276z"/>
android:pathData="M44.998,82.892c0.738,0 1.338,0.6 1.338,1.338c0,0.738 -0.6,1.337 -1.338,1.337c-0.738,0 -1.338,-0.599 -1.338,-1.337C43.659,83.492 44.259,82.892 44.998,82.892zM44.998,83.098c0.624,0 1.132,0.507 1.132,1.133c0,0.624 -0.507,1.132 -1.132,1.132c-0.625,0 -1.133,-0.507 -1.133,-1.132C43.865,83.605 44.372,83.098 44.998,83.098z"
android:fillColor="#FFFFFF"/>
<path
android:pathData="M65.583,50.754l0,-9.435l3.481,3.335l0.01,3.239l-3.491,2.861Z"
android:fillColor="#fff"/>
<path
android:pathData="M100.303,64.994c0,-4.183 -3.396,-7.579 -7.578,-7.579l-7.653,0c-4.183,0 -7.579,3.396 -7.579,7.579l0,13.846c0,4.183 3.396,7.578 7.579,7.578l7.653,0c4.182,0 7.578,-3.395 7.578,-7.578l0,-13.846Z"
android:fillColor="#423f3f"/>
<path
android:fillColor="#FF000000"
android:pathData="M100.002,65.149c-0,-4.06 -3.296,-7.356 -7.356,-7.356l-7.395,0c-4.06,0 -7.356,3.296 -7.356,7.356l0,13.397c0,4.06 3.296,7.356 7.356,7.356l7.395,0c4.06,0 7.356,-3.296 7.356,-7.356l-0,-13.397Z"/>
<path
android:pathData="M99.329,65.48c-0,-3.744 -3.039,-6.783 -6.783,-6.783l-7.222,0c-3.744,0 -6.783,3.039 -6.783,6.783l-0,12.866c-0,3.744 3.039,6.783 6.783,6.783l7.222,0c3.744,0 6.783,-3.039 6.783,-6.783l-0,-12.866Z"
android:fillColor="#9d9292"/>
<path
android:fillColor="#FF000000"
android:pathData="M98.815,65.674c0,-3.583 -2.909,-6.492 -6.491,-6.492l-6.776,0c-3.583,0 -6.492,2.909 -6.492,6.492l0,12.402c0,3.583 2.909,6.492 6.492,6.492l6.776,-0c3.582,-0 6.491,-2.909 6.491,-6.492l0,-12.402Z"/>
<path
android:pathData="M88.957,62.103l2,2.463l-4,-0l2,-2.463Z"
android:fillColor="#fff"/>
<path
android:pathData="M89.135,82.366l-1.999,-2.464l3.999,0l-2,2.464Z"
android:fillColor="#fff"/>
<path
android:pathData="M96.144,70.804c0,-1.753 -1.423,-3.176 -3.175,-3.176l-8.148,0c-1.753,0 -3.175,1.423 -3.175,3.176l-0,3.202c-0,1.753 1.422,3.176 3.175,3.176l8.148,-0c1.752,-0 3.175,-1.423 3.175,-3.176l0,-3.202Z"
android:fillColor="#766d6d"/>
<path
android:fillColor="#FF000000"
android:pathData="M93.86,70.396c0,-1.074 -0.872,-1.946 -1.946,-1.946l-5.992,-0c-1.075,-0 -1.947,0.872 -1.947,1.946l0,3.893c0,1.074 0.872,1.946 1.947,1.946l5.992,0c1.074,0 1.946,-0.872 1.946,-1.946l0,-3.893Z"/>
<path
android:pathData="M88.975,72.191m-1.528,0a1.528,1.528 0,1 1,3.056 0a1.528,1.528 0,1 1,-3.056 0"
android:fillColor="#fff"/>
<path
android:pathData="M93.143,70.838c-0,-0.823 -0.668,-1.49 -1.49,-1.49l-5.409,-0c-0.823,-0 -1.49,0.667 -1.49,1.49l-0,2.98c-0,0.822 0.667,1.489 1.49,1.489l5.409,0c0.822,0 1.49,-0.667 1.49,-1.489l-0,-2.98Z"
android:pathData="M39.412,84.126m-0.206,0a0.206,0.206 0,1 1,0.412 0a0.206,0.206 0,1 1,-0.412 0"
android:strokeLineJoin="round"
android:strokeWidth="1.25"
android:fillColor="#00000000"
android:strokeColor="#fff"/>
android:fillColor="#FFFFFF"
android:strokeColor="#FFFFFF"
android:strokeLineCap="round"/>
<path
android:pathData="M43.182,84.176c0.783,-0 1.419,0.636 1.419,1.419c-0,0.783 -0.636,1.418 -1.419,1.418c-0.783,0 -1.419,-0.635 -1.419,-1.418c0,-0.783 0.636,-1.419 1.419,-1.419ZM43.182,84.394c0.662,0 1.2,0.538 1.2,1.201c0,0.662 -0.538,1.2 -1.2,1.2c-0.663,0 -1.201,-0.538 -1.201,-1.2c0,-0.663 0.538,-1.201 1.201,-1.201Z"
android:fillColor="#fff"/>
<path
android:pathData="M37.26,85.484m-0.218,0a0.218,0.218 0,1 1,0.436 0a0.218,0.218 0,1 1,-0.436 0"
android:pathData="M40.875,84.125m-0.206,0a0.206,0.206 0,1 1,0.412 0a0.206,0.206 0,1 1,-0.412 0"
android:strokeLineJoin="round"
android:strokeWidth="1.25"
android:fillColor="#fff"
android:strokeColor="#fff"/>
android:fillColor="#FFFFFF"
android:strokeColor="#FFFFFF"
android:strokeLineCap="round"/>
<path
android:pathData="M38.811,85.483m-0.218,0a0.218,0.218 0,1 1,0.436 0a0.218,0.218 0,1 1,-0.436 0"
android:pathData="M42.452,84.149m-0.206,0a0.206,0.206 0,1 1,0.412 0a0.206,0.206 0,1 1,-0.412 0"
android:strokeLineJoin="round"
android:strokeWidth="1.25"
android:fillColor="#fff"
android:strokeColor="#fff"/>
android:fillColor="#FFFFFF"
android:strokeColor="#FFFFFF"
android:strokeLineCap="round"/>
<path
android:pathData="M40.483,85.508m-0.218,0a0.218,0.218 0,1 1,0.436 0a0.218,0.218 0,1 1,-0.436 0"
android:pathData="M47.183,84.231m-0.206,0a0.206,0.206 0,1 1,0.412 0a0.206,0.206 0,1 1,-0.412 0"
android:strokeLineJoin="round"
android:strokeWidth="1.25"
android:fillColor="#fff"
android:strokeColor="#fff"/>
android:fillColor="#FFFFFF"
android:strokeColor="#FFFFFF"
android:strokeLineCap="round"/>
<path
android:pathData="M45.499,85.595m-0.218,0a0.218,0.218 0,1 1,0.436 0a0.218,0.218 0,1 1,-0.436 0"
android:pathData="M48.727,84.211m-0.206,0a0.206,0.206 0,1 1,0.412 0a0.206,0.206 0,1 1,-0.412 0"
android:strokeLineJoin="round"
android:strokeWidth="1.25"
android:fillColor="#fff"
android:strokeColor="#fff"/>
android:fillColor="#FFFFFF"
android:strokeColor="#FFFFFF"
android:strokeLineCap="round"/>
<path
android:pathData="M47.136,85.574m-0.218,0a0.218,0.218 0,1 1,0.436 0a0.218,0.218 0,1 1,-0.436 0"
android:pathData="M50.281,84.231m-0.206,0a0.206,0.206 0,1 1,0.412 0a0.206,0.206 0,1 1,-0.412 0"
android:strokeLineJoin="round"
android:strokeWidth="1.25"
android:fillColor="#fff"
android:strokeColor="#fff"/>
android:fillColor="#FFFFFF"
android:strokeColor="#FFFFFF"
android:strokeLineCap="round"/>
<path
android:pathData="M48.784,85.595m-0.218,0a0.218,0.218 0,1 1,0.436 0a0.218,0.218 0,1 1,-0.436 0"
android:strokeWidth="1.25"
android:fillColor="#fff"
android:strokeColor="#fff"/>
android:pathData="M44.38,84.066h1.236v0.289h-1.236z"
android:fillColor="#FFFFFF"/>
<path
android:pathData="M42.527,85.42h1.31v0.306h-1.31z"
android:fillColor="#fff"/>
android:pathData="M45.142,84.828v-1.236h-0.289v1.236H45.142z"
android:fillColor="#FFFFFF"/>
<path
android:pathData="M43.335,86.228l-0,-1.31l-0.306,0l-0,1.31l0.306,-0Z"
android:fillColor="#fff"/>
android:pathData="M47.301,86.381c0.056,-0.055 0.056,-0.144 0.001,-0.2l-0.98,-0.995c-0.055,-0.056 -0.144,-0.056 -0.2,-0.001l-0.202,0.198c-0.056,0.055 -0.056,0.144 -0.001,0.2l0.98,0.995c0.055,0.056 0.144,0.057 0.2,0.002L47.301,86.381z"
android:fillColor="#FFFFFF"/>
<path
android:pathData="M45.624,87.875c0.059,-0.058 0.059,-0.153 0.001,-0.212l-1.039,-1.055c-0.058,-0.059 -0.153,-0.059 -0.212,-0.001l-0.214,0.21c-0.059,0.058 -0.059,0.153 -0.001,0.212l1.039,1.055c0.058,0.059 0.153,0.06 0.212,0.002l0.214,-0.211Z"
android:fillColor="#fff"/>
android:pathData="M91.724,57.653h-7.218c-3.945,0 -7.148,3.203 -7.148,7.148V77.86c0,3.945 3.203,7.147 7.148,7.147h7.218c3.944,0 7.147,-3.202 7.147,-7.147V64.801C98.872,60.855 95.669,57.653 91.724,57.653zM97.468,77.139c0,3.379 -2.744,6.123 -6.122,6.123h-6.391c-3.379,0 -6.123,-2.744 -6.123,-6.123V65.442c0,-3.379 2.744,-6.123 6.123,-6.123h6.391c3.378,0 6.122,2.744 6.122,6.123V77.139z"
android:fillColor="#434040"/>
<path
android:pathData="M72.033,60.303c0,-0.69 -0.56,-1.25 -1.25,-1.25l-54.973,0c-0.69,0 -1.249,0.56 -1.249,1.25l-0,19.437c-0,0.69 0.559,1.25 1.249,1.25l54.973,-0c0.69,-0 1.25,-0.56 1.25,-1.25l0,-19.437Z"
android:fillColor="#484343"/>
android:pathData="M91.65,58.009h-6.975c-3.829,0 -6.938,3.109 -6.938,6.938v12.636c0,3.829 3.109,6.938 6.938,6.938h6.975c3.829,0 6.938,-3.109 6.938,-6.938V64.947C98.588,61.118 95.479,58.009 91.65,58.009zM97.468,77.139c0,3.379 -2.744,6.123 -6.122,6.123h-6.391c-3.379,0 -6.123,-2.744 -6.123,-6.123V65.442c0,-3.379 2.744,-6.123 6.123,-6.123h6.391c3.378,0 6.122,2.744 6.122,6.123V77.139z"
android:fillColor="#010101"/>
<path
android:fillColor="#FF000000"
android:pathData="M71.446,60.777c-0,-0.657 -0.534,-1.19 -1.191,-1.19l-53.929,-0c-0.657,-0 -1.191,0.533 -1.191,1.19l0,18.52c0,0.657 0.534,1.191 1.191,1.191l53.929,-0c0.657,-0 1.191,-0.534 1.191,-1.191l-0,-18.52Z"/>
android:pathData="M91.556,58.862h-6.811c-3.531,0 -6.397,2.866 -6.397,6.397v12.135c0,3.531 2.866,6.397 6.397,6.397h6.811c3.531,0 6.397,-2.866 6.397,-6.397V65.259C97.953,61.728 95.087,58.862 91.556,58.862zM97.468,77.139c0,3.379 -2.744,6.123 -6.122,6.123h-6.391c-3.379,0 -6.123,-2.744 -6.123,-6.123V65.442c0,-3.379 2.744,-6.123 6.123,-6.123h6.391c3.378,0 6.122,2.744 6.122,6.123V77.139z"
android:fillColor="#9D9292"/>
<path
android:pathData="M70.661,77.866c0,-0.176 -0.143,-0.319 -0.319,-0.319l-54.245,-0c-0.176,-0 -0.319,0.143 -0.319,0.319l-0,1.55c-0,0.176 0.143,0.32 0.319,0.32l54.245,-0c0.176,-0 0.319,-0.144 0.319,-0.32l0,-1.55Z"
android:fillColor="#fff"/>
android:pathData="M88.171,62.074l1.886,2.323h-3.773L88.171,62.074z"
android:fillColor="#FFFFFF"/>
<path
android:pathData="M70.224,78.163c-0,-0.118 -0.096,-0.214 -0.215,-0.214l-53.615,-0c-0.119,-0 -0.215,0.096 -0.215,0.214l0,1.039c0,0.118 0.096,0.214 0.215,0.214l53.615,0c0.119,0 0.215,-0.096 0.215,-0.214l-0,-1.039Z"
android:fillColor="#23211f"/>
android:pathData="M88.339,81.185l-1.885,-2.324h3.772L88.339,81.185z"
android:fillColor="#FFFFFF"/>
<path
android:pathData="M16.482,78.201h48.339v0.948h-48.339z"
android:fillColor="#f37e31"/>
android:pathData="M91.955,67.285H84.27c-1.653,0 -2.995,1.342 -2.995,2.995v3.02c0,1.653 1.341,2.995 2.995,2.995h7.685c1.652,0 2.995,-1.342 2.995,-2.995v-3.02C94.949,68.627 93.607,67.285 91.955,67.285zM92.795,73.567c0,1.013 -0.822,1.835 -1.835,1.835h-5.651c-1.014,0 -1.836,-0.822 -1.836,-1.835v-3.672c0,-1.013 0.822,-1.835 1.836,-1.835h5.651c1.013,0 1.835,0.822 1.835,1.835V73.567z"
android:fillColor="#776E6E"/>
<path
android:pathData="M64.494,78.188h5.445v0.96h-5.445z"
android:fillColor="#5c5454"/>
android:pathData="M88.188,71.589m-1.441,0a1.441,1.441 0,1 1,2.882 0a1.441,1.441 0,1 1,-2.882 0"
android:fillColor="#FFFFFF"/>
<path
android:pathData="M65.739,77.776l-0.907,0.912l0.282,0.284l0.907,-0.913l-0.282,-0.283Z"
android:fillColor="#a79999"/>
android:pathData="M90.713,74.654h-5.102c-0.845,0 -1.532,-0.687 -1.532,-1.531v-2.811c0,-0.845 0.687,-1.532 1.532,-1.532h5.102c0.845,0 1.532,0.687 1.532,1.532v2.811C92.245,73.968 91.558,74.654 90.713,74.654zM85.612,69.034c-0.705,0 -1.278,0.574 -1.278,1.279v2.811c0,0.704 0.574,1.278 1.278,1.278h5.102c0.705,0 1.279,-0.573 1.279,-1.278v-2.811c0,-0.705 -0.574,-1.279 -1.279,-1.279H85.612z"
android:fillColor="#FFFFFF"/>
<path
android:pathData="M65.114,78.393l0.907,0.913l-0.282,0.283l-0.907,-0.913l0.282,-0.283Z"
android:fillColor="#a79999"/>
android:pathData="M71.03,59.197H19.181c-0.651,0 -1.178,0.528 -1.178,1.179v18.332c0,0.651 0.527,1.179 1.178,1.179H71.03c0.651,0 1.179,-0.528 1.179,-1.179V60.376C72.209,59.726 71.68,59.197 71.03,59.197zM71.655,78.291c0,0.62 -0.504,1.123 -1.123,1.123H19.668c-0.62,0 -1.123,-0.504 -1.123,-1.123V60.823c0,-0.62 0.504,-1.122 1.123,-1.122h50.864c0.62,0 1.123,0.503 1.123,1.122V78.291z"
android:fillColor="#494444"/>
<path
android:pathData="M70.754,61.429l-1.892,1.074l0,-2.148l1.892,1.074Z"
android:fillColor="#6aae47"/>
android:pathData="M70.915,76.941c0,-0.166 -0.135,-0.301 -0.301,-0.301H19.452c-0.166,0 -0.301,0.135 -0.301,0.301v1.462c0,0.166 0.135,0.302 0.301,0.302h51.162c0.166,0 0.301,-0.136 0.301,-0.302V76.941z"
android:fillColor="#FFFFFF"/>
<path
android:pathData="M47.136,61.484c-0,-0.346 0.033,-0.625 0.099,-0.836c0.066,-0.212 0.164,-0.374 0.295,-0.489c0.13,-0.115 0.294,-0.172 0.492,-0.172c0.146,0 0.274,0.032 0.384,0.095c0.11,0.063 0.201,0.155 0.272,0.274c0.072,0.119 0.128,0.264 0.169,0.436c0.041,0.171 0.061,0.402 0.061,0.692c0,0.344 -0.033,0.621 -0.098,0.832c-0.066,0.211 -0.164,0.375 -0.294,0.49c-0.13,0.115 -0.295,0.173 -0.494,0.173c-0.262,-0 -0.468,-0.102 -0.617,-0.304c-0.179,-0.244 -0.269,-0.641 -0.269,-1.191ZM47.479,61.484c-0,0.481 0.052,0.801 0.156,0.96c0.105,0.159 0.234,0.239 0.387,0.239c0.153,-0 0.282,-0.08 0.387,-0.24c0.104,-0.16 0.156,-0.479 0.156,-0.959c0,-0.482 -0.052,-0.803 -0.156,-0.961c-0.105,-0.159 -0.235,-0.238 -0.391,-0.238c-0.153,-0 -0.275,0.07 -0.367,0.21c-0.115,0.178 -0.172,0.508 -0.172,0.989Z"
android:fillColor="#fff"
android:fillType="nonZero"/>
android:pathData="M70.502,77.221c0,-0.111 -0.091,-0.202 -0.203,-0.202H19.732c-0.112,0 -0.203,0.091 -0.203,0.202v0.98c0,0.111 0.091,0.202 0.203,0.202H70.3c0.112,0 0.203,-0.091 0.203,-0.202V77.221z"
android:fillColor="#23211F"/>
<path
android:pathData="M49.249,62.155l0.334,-0.048c0.038,0.204 0.103,0.351 0.195,0.441c0.092,0.09 0.205,0.135 0.337,0.135c0.157,-0 0.289,-0.059 0.397,-0.176c0.109,-0.117 0.163,-0.262 0.163,-0.436c-0,-0.165 -0.05,-0.301 -0.15,-0.408c-0.101,-0.107 -0.228,-0.161 -0.382,-0.161c-0.063,-0 -0.142,0.013 -0.236,0.04l0.037,-0.316c0.023,0.003 0.04,0.004 0.054,0.004c0.142,0 0.27,-0.04 0.384,-0.12c0.113,-0.08 0.17,-0.203 0.17,-0.369c0,-0.132 -0.041,-0.242 -0.124,-0.328c-0.083,-0.087 -0.19,-0.13 -0.321,-0.13c-0.129,-0 -0.237,0.044 -0.324,0.132c-0.086,0.088 -0.142,0.22 -0.167,0.396l-0.333,-0.064c0.04,-0.242 0.133,-0.428 0.278,-0.561c0.144,-0.133 0.324,-0.199 0.539,-0.199c0.148,0 0.285,0.035 0.41,0.103c0.125,0.069 0.22,0.162 0.286,0.281c0.066,0.118 0.099,0.244 0.099,0.378c0,0.126 -0.031,0.241 -0.094,0.345c-0.063,0.104 -0.157,0.187 -0.28,0.248c0.16,0.04 0.285,0.123 0.374,0.249c0.089,0.126 0.134,0.283 0.134,0.472c-0,0.256 -0.087,0.473 -0.26,0.651c-0.173,0.178 -0.392,0.267 -0.656,0.267c-0.239,-0 -0.437,-0.077 -0.594,-0.23c-0.158,-0.153 -0.248,-0.352 -0.27,-0.596Z"
android:fillColor="#fff"
android:fillType="nonZero"/>
android:pathData="M19.815,77.257h45.591v0.894h-45.591z"
android:fillColor="#F27E30"/>
<path
android:pathData="M52.365,62.097l0.325,-0.048c0.008,0.224 0.047,0.377 0.116,0.46c0.07,0.083 0.165,0.124 0.288,0.124c0.09,-0 0.168,-0.022 0.233,-0.067c0.066,-0.045 0.111,-0.105 0.136,-0.182c0.024,-0.076 0.037,-0.199 0.037,-0.367l-0,-2.018l0.359,0l0,1.997c0,0.245 -0.027,0.434 -0.082,0.569c-0.055,0.135 -0.142,0.237 -0.261,0.308c-0.12,0.07 -0.26,0.106 -0.42,0.106c-0.239,-0 -0.421,-0.074 -0.548,-0.222c-0.127,-0.148 -0.188,-0.368 -0.183,-0.66Z"
android:fillColor="#fff"
android:fillType="nonZero"/>
android:pathData="M65.098,77.245h5.136v0.905h-5.136z"
android:fillColor="#5D5555"/>
<path
android:pathData="M55.689,62.667c-0.124,0.113 -0.243,0.193 -0.357,0.24c-0.114,0.046 -0.237,0.07 -0.368,0.07c-0.216,-0 -0.382,-0.057 -0.498,-0.171c-0.117,-0.114 -0.175,-0.26 -0.175,-0.437c0,-0.104 0.022,-0.199 0.066,-0.285c0.044,-0.086 0.101,-0.154 0.173,-0.206c0.071,-0.052 0.151,-0.092 0.24,-0.118c0.065,-0.019 0.164,-0.037 0.296,-0.054c0.27,-0.035 0.468,-0.076 0.595,-0.124c0.001,-0.049 0.002,-0.081 0.002,-0.094c0,-0.147 -0.031,-0.25 -0.094,-0.31c-0.086,-0.081 -0.212,-0.122 -0.38,-0.122c-0.157,0 -0.273,0.03 -0.348,0.089c-0.075,0.06 -0.13,0.164 -0.166,0.315l-0.326,-0.048c0.029,-0.151 0.078,-0.272 0.146,-0.365c0.068,-0.092 0.166,-0.164 0.295,-0.214c0.128,-0.049 0.277,-0.074 0.447,-0.074c0.168,-0 0.304,0.021 0.409,0.063c0.105,0.043 0.183,0.097 0.232,0.161c0.05,0.065 0.084,0.147 0.104,0.245c0.011,0.061 0.017,0.172 0.017,0.332l-0,0.479c-0,0.335 0.007,0.546 0.021,0.635c0.014,0.089 0.042,0.173 0.084,0.255l-0.348,-0c-0.035,-0.075 -0.057,-0.162 -0.067,-0.262ZM55.661,61.864c-0.121,0.053 -0.303,0.098 -0.545,0.135c-0.137,0.022 -0.234,0.046 -0.291,0.072c-0.057,0.027 -0.101,0.066 -0.131,0.117c-0.031,0.052 -0.047,0.109 -0.047,0.171c0,0.096 0.034,0.176 0.101,0.24c0.068,0.064 0.166,0.096 0.296,0.096c0.128,-0 0.243,-0.03 0.343,-0.091c0.1,-0.061 0.173,-0.144 0.22,-0.249c0.036,-0.081 0.054,-0.201 0.054,-0.359l0,-0.132Z"
android:fillColor="#fff"
android:fillType="nonZero"/>
android:pathData="M66.272,76.856l-0.855,0.86l0.266,0.268l0.855,-0.861L66.272,76.856z"
android:fillColor="#A79998"/>
<path
android:pathData="M56.516,62.929l-0,-2.122l0.3,-0l0,0.301c0.145,-0.233 0.354,-0.349 0.627,-0.349c0.118,-0 0.227,0.023 0.327,0.068c0.099,0.046 0.174,0.107 0.223,0.181c0.05,0.075 0.084,0.164 0.104,0.266c0.012,0.067 0.019,0.183 0.019,0.35l-0,1.305l-0.334,-0l-0,-1.291c-0,-0.147 -0.013,-0.256 -0.039,-0.329c-0.026,-0.073 -0.072,-0.13 -0.138,-0.174c-0.066,-0.043 -0.144,-0.065 -0.233,-0.065c-0.142,0 -0.265,0.049 -0.368,0.146c-0.103,0.097 -0.155,0.282 -0.155,0.554l0,1.159l-0.333,-0Z"
android:fillColor="#fff"
android:fillType="nonZero"/>
android:pathData="M65.683,77.438l0.855,0.861l-0.266,0.267l-0.855,-0.861L65.683,77.438z"
android:fillColor="#A79998"/>
<path
android:pathData="M61.343,62.583l-0,0.346l-1.796,-0c-0.003,-0.087 0.01,-0.17 0.039,-0.25c0.045,-0.132 0.118,-0.262 0.219,-0.39c0.101,-0.128 0.246,-0.276 0.437,-0.443c0.295,-0.261 0.495,-0.468 0.599,-0.621c0.103,-0.152 0.155,-0.297 0.155,-0.432c0,-0.143 -0.047,-0.263 -0.142,-0.361c-0.094,-0.098 -0.217,-0.147 -0.369,-0.147c-0.161,-0 -0.29,0.052 -0.386,0.156c-0.096,0.104 -0.145,0.248 -0.146,0.431l-0.343,-0.038c0.023,-0.275 0.111,-0.485 0.265,-0.63c0.153,-0.145 0.359,-0.217 0.617,-0.217c0.261,0 0.467,0.078 0.619,0.234c0.152,0.156 0.228,0.349 0.228,0.58c0,0.117 -0.022,0.232 -0.067,0.345c-0.044,0.113 -0.118,0.233 -0.221,0.358c-0.103,0.125 -0.275,0.297 -0.514,0.515c-0.201,0.182 -0.329,0.305 -0.386,0.369c-0.057,0.065 -0.104,0.13 -0.141,0.195l1.333,0Z"
android:fillColor="#fff"
android:fillType="nonZero"/>
android:pathData="M71.002,61.438l-1.784,1.013v-2.026L71.002,61.438L71.002,61.438z"
android:fillColor="#6AAE46"/>
<path
android:pathData="M61.701,61.484c-0,-0.346 0.033,-0.625 0.099,-0.836c0.066,-0.212 0.164,-0.374 0.295,-0.489c0.13,-0.115 0.294,-0.172 0.492,-0.172c0.146,0 0.273,0.032 0.383,0.095c0.11,0.063 0.201,0.155 0.273,0.274c0.072,0.119 0.128,0.264 0.169,0.436c0.04,0.171 0.061,0.402 0.061,0.692c-0,0.344 -0.033,0.621 -0.098,0.832c-0.066,0.211 -0.164,0.375 -0.294,0.49c-0.131,0.115 -0.295,0.173 -0.494,0.173c-0.262,-0 -0.468,-0.102 -0.618,-0.304c-0.179,-0.244 -0.268,-0.641 -0.268,-1.191ZM62.044,61.484c-0,0.481 0.052,0.801 0.156,0.96c0.105,0.159 0.233,0.239 0.387,0.239c0.153,-0 0.282,-0.08 0.386,-0.24c0.105,-0.16 0.157,-0.479 0.157,-0.959c-0,-0.482 -0.052,-0.803 -0.157,-0.961c-0.104,-0.159 -0.234,-0.238 -0.39,-0.238c-0.153,-0 -0.276,0.07 -0.367,0.21c-0.115,0.178 -0.172,0.508 -0.172,0.989Z"
android:fillColor="#fff"
android:fillType="nonZero"/>
android:pathData="M48.727,61.49c0,-0.326 0.031,-0.589 0.093,-0.788c0.062,-0.2 0.155,-0.353 0.278,-0.461c0.123,-0.108 0.277,-0.162 0.464,-0.162c0.138,0 0.258,0.03 0.362,0.09c0.104,0.059 0.19,0.146 0.257,0.258c0.068,0.112 0.121,0.249 0.159,0.411c0.039,0.161 0.058,0.379 0.058,0.653c0,0.324 -0.031,0.586 -0.092,0.785c-0.062,0.199 -0.155,0.354 -0.277,0.462c-0.123,0.108 -0.278,0.163 -0.466,0.163c-0.247,0 -0.441,-0.096 -0.582,-0.287C48.812,62.383 48.727,62.009 48.727,61.49L48.727,61.49zM49.05,61.49c0,0.454 0.049,0.755 0.147,0.905c0.099,0.15 0.221,0.225 0.365,0.225s0.266,-0.075 0.365,-0.226c0.098,-0.151 0.147,-0.452 0.147,-0.904c0,-0.455 -0.049,-0.757 -0.147,-0.906c-0.099,-0.15 -0.222,-0.224 -0.369,-0.224c-0.144,0 -0.259,0.066 -0.346,0.198C49.104,60.725 49.05,61.037 49.05,61.49L49.05,61.49z"
android:fillColor="#FFFFFF"/>
<path
android:pathData="M65.566,62.583l-0,0.346l-1.797,-0c-0.002,-0.087 0.011,-0.17 0.039,-0.25c0.046,-0.132 0.119,-0.262 0.22,-0.39c0.101,-0.128 0.246,-0.276 0.437,-0.443c0.295,-0.261 0.495,-0.468 0.598,-0.621c0.104,-0.152 0.156,-0.297 0.156,-0.432c0,-0.143 -0.047,-0.263 -0.142,-0.361c-0.094,-0.098 -0.218,-0.147 -0.37,-0.147c-0.16,-0 -0.289,0.052 -0.385,0.156c-0.097,0.104 -0.145,0.248 -0.147,0.431l-0.343,-0.038c0.024,-0.275 0.112,-0.485 0.266,-0.63c0.153,-0.145 0.359,-0.217 0.617,-0.217c0.261,0 0.467,0.078 0.619,0.234c0.152,0.156 0.228,0.349 0.228,0.58c-0,0.117 -0.022,0.232 -0.067,0.345c-0.044,0.113 -0.118,0.233 -0.221,0.358c-0.103,0.125 -0.275,0.297 -0.515,0.515c-0.2,0.182 -0.328,0.305 -0.385,0.369c-0.057,0.065 -0.104,0.13 -0.141,0.195l1.333,0Z"
android:fillColor="#fff"
android:fillType="nonZero"/>
android:pathData="M50.72,62.123l0.315,-0.045c0.036,0.192 0.097,0.331 0.184,0.416c0.087,0.085 0.193,0.127 0.318,0.127c0.148,0 0.273,-0.056 0.374,-0.166c0.103,-0.11 0.154,-0.247 0.154,-0.411c0,-0.156 -0.047,-0.284 -0.141,-0.385c-0.095,-0.101 -0.215,-0.152 -0.36,-0.152c-0.059,0 -0.134,0.012 -0.223,0.038l0.035,-0.298c0.022,0.003 0.038,0.004 0.051,0.004c0.134,0 0.255,-0.038 0.362,-0.113c0.107,-0.075 0.16,-0.191 0.16,-0.348c0,-0.124 -0.039,-0.228 -0.117,-0.309c-0.078,-0.082 -0.179,-0.123 -0.303,-0.123c-0.122,0 -0.224,0.041 -0.306,0.124c-0.081,0.083 -0.134,0.207 -0.158,0.373l-0.314,-0.06c0.038,-0.228 0.125,-0.404 0.262,-0.529c0.136,-0.125 0.306,-0.188 0.508,-0.188c0.14,0 0.269,0.033 0.387,0.097c0.118,0.065 0.207,0.153 0.27,0.265c0.062,0.111 0.093,0.23 0.093,0.357c0,0.119 -0.029,0.227 -0.089,0.325c-0.059,0.098 -0.148,0.176 -0.264,0.234c0.151,0.038 0.269,0.116 0.353,0.235c0.084,0.119 0.126,0.267 0.126,0.445c0,0.241 -0.082,0.446 -0.245,0.614c-0.163,0.168 -0.37,0.252 -0.619,0.252c-0.225,0 -0.412,-0.073 -0.56,-0.217C50.825,62.541 50.74,62.353 50.72,62.123L50.72,62.123z"
android:fillColor="#FFFFFF"/>
<path
android:pathData="M65.923,61.484c0,-0.346 0.034,-0.625 0.1,-0.836c0.066,-0.212 0.164,-0.374 0.294,-0.489c0.131,-0.115 0.295,-0.172 0.493,-0.172c0.145,0 0.273,0.032 0.383,0.095c0.11,0.063 0.201,0.155 0.273,0.274c0.071,0.119 0.128,0.264 0.168,0.436c0.041,0.171 0.062,0.402 0.062,0.692c-0,0.344 -0.033,0.621 -0.099,0.832c-0.065,0.211 -0.163,0.375 -0.293,0.49c-0.131,0.115 -0.296,0.173 -0.494,0.173c-0.262,-0 -0.468,-0.102 -0.618,-0.304c-0.179,-0.244 -0.269,-0.641 -0.269,-1.191ZM66.266,61.484c0,0.481 0.053,0.801 0.157,0.96c0.104,0.159 0.233,0.239 0.387,0.239c0.153,-0 0.282,-0.08 0.386,-0.24c0.104,-0.16 0.157,-0.479 0.157,-0.959c-0,-0.482 -0.053,-0.803 -0.157,-0.961c-0.104,-0.159 -0.234,-0.238 -0.39,-0.238c-0.153,-0 -0.276,0.07 -0.367,0.21c-0.115,0.178 -0.173,0.508 -0.173,0.989Z"
android:fillColor="#fff"
android:fillType="nonZero"/>
android:pathData="M53.659,62.068l0.307,-0.045c0.008,0.211 0.044,0.356 0.109,0.434c0.066,0.078 0.156,0.117 0.272,0.117c0.085,0 0.158,-0.021 0.22,-0.063c0.062,-0.042 0.105,-0.099 0.128,-0.172c0.023,-0.072 0.035,-0.188 0.035,-0.346V60.09h0.339v1.883c0,0.231 -0.025,0.409 -0.077,0.537c-0.052,0.127 -0.134,0.224 -0.246,0.29c-0.113,0.066 -0.245,0.1 -0.396,0.1c-0.225,0 -0.397,-0.07 -0.517,-0.209C53.711,62.551 53.654,62.344 53.659,62.068L53.659,62.068z"
android:fillColor="#FFFFFF"/>
<path
android:pathData="M16.44,62.904l-0.364,0.001l-0,-2.19c-0.088,0.079 -0.203,0.158 -0.345,0.238c-0.142,0.079 -0.27,0.139 -0.384,0.179l0,-0.332c0.204,-0.092 0.382,-0.202 0.535,-0.331c0.152,-0.129 0.26,-0.254 0.323,-0.375l0.235,-0.001l0,2.811Z"
android:fillColor="#fff"
android:fillType="nonZero"/>
android:pathData="M56.794,62.606c-0.117,0.107 -0.229,0.182 -0.337,0.226c-0.108,0.043 -0.224,0.066 -0.347,0.066c-0.204,0 -0.36,-0.054 -0.47,-0.161c-0.11,-0.108 -0.165,-0.245 -0.165,-0.412c0,-0.098 0.021,-0.188 0.062,-0.269c0.042,-0.081 0.095,-0.145 0.163,-0.194c0.067,-0.049 0.142,-0.087 0.226,-0.111c0.061,-0.018 0.155,-0.035 0.279,-0.051c0.255,-0.033 0.441,-0.072 0.561,-0.117c0.001,-0.046 0.002,-0.076 0.002,-0.089c0,-0.139 -0.029,-0.236 -0.089,-0.292c-0.081,-0.076 -0.2,-0.115 -0.358,-0.115c-0.148,0 -0.257,0.028 -0.328,0.084c-0.071,0.057 -0.123,0.155 -0.157,0.297l-0.307,-0.045c0.027,-0.142 0.074,-0.257 0.138,-0.344c0.064,-0.087 0.157,-0.155 0.278,-0.202c0.121,-0.046 0.261,-0.07 0.422,-0.07c0.158,0 0.287,0.02 0.386,0.059c0.099,0.041 0.173,0.091 0.219,0.152c0.047,0.061 0.079,0.139 0.098,0.231c0.01,0.058 0.016,0.162 0.016,0.313v0.452c0,0.316 0.007,0.515 0.02,0.599c0.013,0.084 0.04,0.163 0.079,0.241h-0.328C56.824,62.782 56.803,62.7 56.794,62.606L56.794,62.606zM56.767,61.849c-0.114,0.05 -0.286,0.092 -0.514,0.127c-0.129,0.021 -0.221,0.043 -0.274,0.068c-0.054,0.025 -0.095,0.062 -0.124,0.11c-0.029,0.049 -0.044,0.103 -0.044,0.161c0,0.091 0.032,0.166 0.095,0.226c0.064,0.06 0.157,0.091 0.279,0.091c0.121,0 0.229,-0.028 0.324,-0.086s0.163,-0.136 0.207,-0.235c0.034,-0.076 0.051,-0.19 0.051,-0.339L56.767,61.849L56.767,61.849z"
android:fillColor="#FFFFFF"/>
<path
android:pathData="M17.373,61.52c-0,-0.331 0.036,-0.598 0.108,-0.8c0.072,-0.202 0.179,-0.358 0.322,-0.468c0.142,-0.11 0.321,-0.166 0.537,-0.166c0.159,-0.001 0.299,0.029 0.419,0.089c0.12,0.06 0.219,0.147 0.297,0.26c0.078,0.114 0.14,0.252 0.184,0.416c0.045,0.163 0.067,0.384 0.067,0.661c-0,0.329 -0.036,0.594 -0.107,0.796c-0.072,0.202 -0.179,0.358 -0.321,0.469c-0.142,0.111 -0.322,0.166 -0.539,0.167c-0.286,0.001 -0.511,-0.095 -0.674,-0.288c-0.195,-0.232 -0.293,-0.611 -0.293,-1.136ZM17.747,61.518c0,0.46 0.057,0.765 0.171,0.917c0.114,0.152 0.255,0.227 0.422,0.227c0.167,-0.001 0.308,-0.078 0.422,-0.231c0.114,-0.153 0.171,-0.459 0.171,-0.917c-0,-0.461 -0.057,-0.767 -0.171,-0.918c-0.114,-0.151 -0.256,-0.226 -0.426,-0.226c-0.167,0.001 -0.301,0.068 -0.401,0.202c-0.125,0.171 -0.188,0.487 -0.188,0.946Z"
android:fillColor="#fff"
android:fillType="nonZero"/>
android:pathData="M57.574,62.853v-2.001h0.283v0.284c0.137,-0.22 0.334,-0.329 0.591,-0.329c0.111,0 0.214,0.022 0.308,0.064c0.093,0.043 0.164,0.101 0.21,0.171c0.047,0.071 0.079,0.155 0.098,0.251c0.011,0.063 0.018,0.173 0.018,0.33v1.231h-0.315v-1.218c0,-0.139 -0.012,-0.241 -0.037,-0.31c-0.025,-0.069 -0.068,-0.123 -0.13,-0.164c-0.062,-0.041 -0.136,-0.061 -0.22,-0.061c-0.134,0 -0.25,0.046 -0.347,0.138c-0.097,0.091 -0.146,0.266 -0.146,0.523v1.093H57.574L57.574,62.853z"
android:fillColor="#FFFFFF"/>
<path
android:pathData="M19.88,61.254l-0,-0.391l0.414,-0.002l0,0.392l-0.414,0.001ZM19.88,62.891l-0,-0.392l0.414,-0.001l0,0.391l-0.414,0.002Z"
android:fillColor="#fff"
android:fillType="nonZero"/>
android:pathData="M62.126,62.527v0.326h-1.694c-0.003,-0.082 0.009,-0.16 0.037,-0.236c0.042,-0.125 0.111,-0.247 0.207,-0.368c0.095,-0.121 0.232,-0.26 0.412,-0.418c0.278,-0.246 0.467,-0.441 0.565,-0.586c0.097,-0.143 0.146,-0.28 0.146,-0.407c0,-0.135 -0.044,-0.248 -0.134,-0.34c-0.089,-0.092 -0.205,-0.139 -0.348,-0.139c-0.152,0 -0.274,0.049 -0.364,0.147c-0.091,0.098 -0.137,0.234 -0.138,0.407l-0.324,-0.036c0.022,-0.259 0.105,-0.457 0.25,-0.594c0.144,-0.137 0.339,-0.205 0.582,-0.205c0.246,0 0.44,0.074 0.584,0.221c0.143,0.147 0.215,0.329 0.215,0.547c0,0.11 -0.021,0.219 -0.063,0.325c-0.042,0.107 -0.111,0.22 -0.208,0.338c-0.097,0.118 -0.259,0.28 -0.485,0.486c-0.19,0.172 -0.31,0.288 -0.364,0.348c-0.054,0.061 -0.098,0.123 -0.133,0.184L62.126,62.527L62.126,62.527z"
android:fillColor="#FFFFFF"/>
<path
android:pathData="M22.742,62.549l0,0.331l-1.96,0.007c-0.003,-0.083 0.011,-0.162 0.042,-0.239c0.05,-0.126 0.13,-0.25 0.24,-0.373c0.11,-0.123 0.269,-0.264 0.477,-0.426c0.322,-0.25 0.54,-0.449 0.653,-0.595c0.113,-0.146 0.17,-0.284 0.17,-0.414c0,-0.136 -0.052,-0.251 -0.155,-0.344c-0.103,-0.093 -0.237,-0.14 -0.403,-0.139c-0.176,0.001 -0.316,0.051 -0.421,0.151c-0.105,0.099 -0.159,0.237 -0.16,0.413l-0.374,-0.035c0.025,-0.264 0.122,-0.465 0.289,-0.604c0.167,-0.139 0.392,-0.208 0.674,-0.21c0.284,-0.001 0.51,0.073 0.675,0.221c0.166,0.149 0.249,0.333 0.249,0.553c0,0.112 -0.024,0.222 -0.072,0.331c-0.049,0.108 -0.13,0.222 -0.242,0.342c-0.113,0.121 -0.3,0.286 -0.562,0.495c-0.218,0.174 -0.358,0.292 -0.421,0.354c-0.062,0.062 -0.113,0.124 -0.153,0.187l1.454,-0.006Z"
android:fillColor="#fff"
android:fillType="nonZero"/>
android:pathData="M62.464,61.49c0,-0.326 0.031,-0.589 0.093,-0.788c0.062,-0.2 0.155,-0.353 0.278,-0.461c0.123,-0.108 0.277,-0.162 0.464,-0.162c0.138,0 0.257,0.03 0.361,0.09c0.104,0.059 0.19,0.146 0.257,0.258s0.121,0.249 0.159,0.411c0.038,0.161 0.058,0.379 0.058,0.653c0,0.324 -0.031,0.586 -0.092,0.785c-0.062,0.199 -0.155,0.354 -0.277,0.462C63.642,62.846 63.487,62.9 63.3,62.9c-0.247,0 -0.441,-0.096 -0.583,-0.287C62.548,62.383 62.464,62.009 62.464,61.49L62.464,61.49zM62.787,61.49c0,0.454 0.049,0.755 0.147,0.905c0.099,0.15 0.22,0.225 0.365,0.225c0.144,0 0.266,-0.075 0.364,-0.226c0.099,-0.151 0.148,-0.452 0.148,-0.904c0,-0.455 -0.049,-0.757 -0.148,-0.906c-0.098,-0.15 -0.221,-0.224 -0.368,-0.224c-0.144,0 -0.26,0.066 -0.346,0.198C62.841,60.725 62.787,61.037 62.787,61.49L62.787,61.49z"
android:fillColor="#FFFFFF"/>
<path
android:pathData="M24.505,62.873l-0.365,0.001l0,-2.19c-0.087,0.08 -0.202,0.159 -0.345,0.238c-0.142,0.08 -0.27,0.14 -0.383,0.179l0,-0.332c0.204,-0.091 0.382,-0.201 0.534,-0.33c0.153,-0.129 0.261,-0.255 0.324,-0.376l0.235,-0.001l-0,2.811Z"
android:fillColor="#fff"
android:fillType="nonZero"/>
android:pathData="M66.109,62.527v0.326h-1.695c-0.002,-0.082 0.01,-0.16 0.037,-0.236c0.043,-0.125 0.112,-0.247 0.207,-0.368c0.095,-0.121 0.232,-0.26 0.412,-0.418c0.278,-0.246 0.467,-0.441 0.564,-0.586c0.098,-0.143 0.147,-0.28 0.147,-0.407c0,-0.135 -0.044,-0.248 -0.134,-0.34c-0.089,-0.092 -0.206,-0.139 -0.349,-0.139c-0.151,0 -0.273,0.049 -0.363,0.147c-0.091,0.098 -0.137,0.234 -0.139,0.407l-0.324,-0.036c0.023,-0.259 0.106,-0.457 0.251,-0.594c0.144,-0.137 0.339,-0.205 0.582,-0.205c0.246,0 0.44,0.074 0.584,0.221c0.143,0.147 0.215,0.329 0.215,0.547c0,0.11 -0.021,0.219 -0.063,0.325c-0.041,0.107 -0.111,0.22 -0.208,0.338c-0.097,0.118 -0.259,0.28 -0.486,0.486c-0.189,0.172 -0.309,0.288 -0.363,0.348c-0.054,0.061 -0.098,0.123 -0.133,0.184L66.109,62.527L66.109,62.527z"
android:fillColor="#FFFFFF"/>
<path
android:pathData="M43.306,61.012h0.317v0.854h-0.317z"
android:fillColor="#999d97"/>
android:pathData="M66.446,61.49c0,-0.326 0.032,-0.589 0.094,-0.788c0.062,-0.2 0.155,-0.353 0.277,-0.461c0.124,-0.108 0.278,-0.162 0.465,-0.162c0.137,0 0.257,0.03 0.361,0.09c0.104,0.059 0.19,0.146 0.257,0.258c0.067,0.112 0.121,0.249 0.158,0.411c0.039,0.161 0.058,0.379 0.058,0.653c0,0.324 -0.031,0.586 -0.093,0.785c-0.061,0.199 -0.154,0.354 -0.276,0.462c-0.124,0.108 -0.279,0.163 -0.466,0.163c-0.247,0 -0.441,-0.096 -0.583,-0.287C66.531,62.383 66.446,62.009 66.446,61.49L66.446,61.49zM66.769,61.49c0,0.454 0.05,0.755 0.148,0.905s0.22,0.225 0.365,0.225c0.144,0 0.266,-0.075 0.364,-0.226c0.098,-0.151 0.148,-0.452 0.148,-0.904c0,-0.455 -0.05,-0.757 -0.148,-0.906c-0.098,-0.15 -0.221,-0.224 -0.368,-0.224c-0.144,0 -0.26,0.066 -0.346,0.198C66.824,60.725 66.769,61.037 66.769,61.49L66.769,61.49z"
android:fillColor="#FFFFFF"/>
<path
android:pathData="M43.281,60.49l0,2.034l-3.593,0l-0,-2.034l3.593,-0ZM42.775,60.894l-2.519,0l-0,1.171l2.519,0l0,-1.171Z"
android:fillColor="#999d97"/>
android:pathData="M19.776,62.83l-0.343,0.001v-2.066c-0.083,0.075 -0.191,0.149 -0.325,0.224c-0.134,0.075 -0.255,0.131 -0.362,0.169v-0.313c0.192,-0.087 0.36,-0.191 0.505,-0.312c0.143,-0.122 0.245,-0.24 0.305,-0.354l0.222,-0.001V62.83z"
android:fillColor="#FFFFFF"/>
<path
android:pathData="M32.357,62.612h0.99v0.44h-0.99z"
android:fillColor="#fff"/>
android:pathData="M20.655,61.524c0,-0.312 0.034,-0.564 0.102,-0.755c0.068,-0.191 0.169,-0.338 0.304,-0.441c0.134,-0.104 0.303,-0.157 0.506,-0.157c0.15,-0.001 0.282,0.027 0.395,0.084s0.207,0.139 0.28,0.245c0.074,0.108 0.132,0.238 0.174,0.392c0.042,0.154 0.063,0.362 0.063,0.623c0,0.31 -0.034,0.56 -0.101,0.751c-0.068,0.191 -0.169,0.338 -0.303,0.442c-0.134,0.105 -0.304,0.157 -0.508,0.158c-0.27,0.001 -0.482,-0.09 -0.636,-0.272C20.748,62.377 20.656,62.019 20.655,61.524L20.655,61.524zM21.008,61.522c0,0.434 0.054,0.722 0.161,0.865c0.108,0.143 0.241,0.214 0.398,0.214c0.158,-0.001 0.29,-0.074 0.398,-0.218c0.108,-0.144 0.161,-0.433 0.161,-0.865c0,-0.435 -0.054,-0.723 -0.161,-0.866c-0.108,-0.142 -0.241,-0.213 -0.402,-0.213c-0.158,0.001 -0.284,0.064 -0.378,0.191C21.068,60.791 21.008,61.089 21.008,61.522z"
android:fillColor="#FFFFFF"/>
<path
android:pathData="M34.304,61.954l-1.262,-0.643l-0.183,0.343l1.262,0.644l0.183,-0.344Z"
android:fillColor="#fff"/>
android:pathData="M23.02,61.273v-0.369l0.39,-0.002v0.37L23.02,61.273zM23.02,62.817v-0.37l0.39,-0.001v0.369L23.02,62.817z"
android:fillColor="#FFFFFF"/>
<path
android:pathData="M32.852,61.654l-1.262,0.644l-0.183,-0.344l1.261,-0.643l0.184,0.343Z"
android:fillColor="#fff"/>
android:pathData="M25.719,62.495v0.312l-1.849,0.007c-0.003,-0.078 0.01,-0.153 0.04,-0.225c0.047,-0.119 0.123,-0.236 0.226,-0.352c0.104,-0.116 0.254,-0.249 0.45,-0.402c0.304,-0.236 0.509,-0.423 0.616,-0.561c0.107,-0.138 0.16,-0.268 0.16,-0.39c0,-0.128 -0.049,-0.237 -0.146,-0.324c-0.097,-0.088 -0.224,-0.132 -0.38,-0.131c-0.166,0.001 -0.298,0.048 -0.397,0.142c-0.099,0.093 -0.15,0.224 -0.151,0.39l-0.353,-0.033c0.024,-0.249 0.115,-0.439 0.273,-0.57c0.158,-0.131 0.37,-0.196 0.636,-0.198c0.268,-0.001 0.481,0.069 0.637,0.208c0.157,0.141 0.235,0.314 0.235,0.522c0,0.106 -0.023,0.209 -0.068,0.312c-0.046,0.102 -0.123,0.209 -0.228,0.323c-0.107,0.114 -0.283,0.27 -0.53,0.467c-0.206,0.164 -0.338,0.275 -0.397,0.334c-0.058,0.058 -0.107,0.117 -0.144,0.176C24.348,62.5 25.719,62.495 25.719,62.495z"
android:fillColor="#FFFFFF"/>
<path
android:pathData="M32.636,60.352h0.446v2.7h-0.446z"
android:fillColor="#fff"/>
android:pathData="M27.382,62.8l-0.344,0.001v-2.066c-0.082,0.075 -0.191,0.15 -0.325,0.224c-0.134,0.075 -0.255,0.132 -0.361,0.169v-0.313c0.192,-0.086 0.36,-0.19 0.504,-0.311c0.144,-0.122 0.246,-0.241 0.306,-0.355l0.222,-0.001C27.382,60.149 27.382,62.8 27.382,62.8z"
android:fillColor="#FFFFFF"/>
<path
android:pathData="M33.082,60.165c0,-0.062 -0.05,-0.112 -0.111,-0.112l-0.223,0c-0.062,0 -0.112,0.05 -0.112,0.112l-0,2.159c-0,0.062 0.05,0.112 0.112,0.112l0.223,-0c0.061,-0 0.111,-0.05 0.111,-0.112l0,-2.159Z"
android:fillColor="#fff"/>
android:pathData="M45.114,61.045h0.299v0.805h-0.299z"
android:fillColor="#999C97"/>
<path
android:pathData="M35.628,66.114l0.468,-0l-0,2.017c-0,0.351 -0.04,0.629 -0.121,0.836c-0.08,0.206 -0.225,0.374 -0.435,0.503c-0.209,0.13 -0.484,0.194 -0.825,0.194c-0.331,0 -0.601,-0.056 -0.812,-0.169c-0.21,-0.112 -0.36,-0.276 -0.45,-0.489c-0.09,-0.214 -0.135,-0.505 -0.135,-0.875l-0,-2.017l0.467,-0l0,2.014c0,0.304 0.029,0.527 0.086,0.671c0.057,0.143 0.155,0.254 0.294,0.332c0.138,0.078 0.308,0.117 0.509,0.117c0.344,-0 0.589,-0.077 0.735,-0.231c0.146,-0.154 0.219,-0.45 0.219,-0.889l0,-2.014Z"
android:fillColor="#fff"
android:fillType="nonZero"/>
android:pathData="M45.091,60.553v1.918h-3.389v-1.918H45.091zM44.614,60.934h-2.376v1.104h2.376V60.934z"
android:fillColor="#999C97"/>
<path
android:pathData="M36.493,69.664l1.024,-3.61l0.347,0l-1.021,3.61l-0.35,0Z"
android:fillColor="#fff"
android:fillType="nonZero"/>
android:pathData="M34.788,62.554h0.934v0.415h-0.934z"
android:fillColor="#FFFFFF"/>
<path
android:pathData="M38.189,69.605l0,-3.491l0.434,-0l0,1.252c0.203,-0.231 0.458,-0.347 0.766,-0.347c0.19,-0 0.355,0.037 0.494,0.111c0.14,0.073 0.24,0.175 0.3,0.306c0.06,0.13 0.091,0.319 0.091,0.566l-0,1.603l-0.434,-0l-0,-1.603c-0,-0.214 -0.047,-0.37 -0.141,-0.468c-0.094,-0.097 -0.227,-0.146 -0.399,-0.146c-0.128,-0 -0.249,0.033 -0.362,0.099c-0.114,0.066 -0.194,0.155 -0.243,0.268c-0.048,0.112 -0.072,0.268 -0.072,0.466l0,1.384l-0.434,-0Z"
android:fillColor="#fff"
android:fillType="nonZero"/>
android:pathData="M36.624,61.934l-1.19,-0.606l-0.173,0.324l1.19,0.607L36.624,61.934L36.624,61.934z"
android:fillColor="#FFFFFF"/>
<path
android:pathData="M42.035,69.605l-0,-3.255l1.093,-0c0.223,-0 0.401,0.033 0.536,0.099c0.134,0.065 0.24,0.167 0.316,0.304c0.076,0.137 0.114,0.28 0.114,0.429c0,0.14 -0.033,0.271 -0.101,0.393c-0.068,0.123 -0.17,0.222 -0.306,0.298c0.176,0.058 0.312,0.156 0.406,0.295c0.095,0.139 0.142,0.304 0.142,0.493c0,0.153 -0.028,0.294 -0.086,0.425c-0.058,0.131 -0.129,0.232 -0.214,0.303c-0.085,0.071 -0.191,0.125 -0.319,0.161c-0.128,0.037 -0.284,0.055 -0.47,0.055l-1.111,-0ZM42.42,67.717l0.631,0c0.171,0 0.293,-0.012 0.367,-0.037c0.098,-0.033 0.172,-0.087 0.222,-0.162c0.05,-0.076 0.075,-0.171 0.075,-0.285c-0,-0.108 -0.024,-0.203 -0.07,-0.285c-0.046,-0.082 -0.113,-0.138 -0.199,-0.169c-0.086,-0.03 -0.234,-0.045 -0.443,-0.045l-0.583,-0l0,0.983ZM42.42,69.221l0.726,-0c0.125,-0 0.212,-0.006 0.262,-0.016c0.089,-0.018 0.163,-0.047 0.223,-0.089c0.06,-0.041 0.109,-0.101 0.147,-0.181c0.039,-0.079 0.058,-0.17 0.058,-0.274c-0,-0.121 -0.028,-0.227 -0.084,-0.316c-0.055,-0.09 -0.132,-0.153 -0.231,-0.189c-0.099,-0.036 -0.241,-0.054 -0.427,-0.054l-0.674,-0l0,1.119Z"
android:fillColor="#fff"
android:fillType="nonZero"/>
android:pathData="M35.255,61.651l-1.19,0.607l-0.173,-0.324l1.189,-0.606L35.255,61.651L35.255,61.651z"
android:fillColor="#FFFFFF"/>
<path
android:pathData="M44.772,69.605l0,-3.255l1.293,-0c0.259,-0 0.457,0.029 0.592,0.087c0.135,0.059 0.243,0.162 0.324,0.31c0.081,0.148 0.121,0.312 0.121,0.491c0,0.231 -0.067,0.425 -0.2,0.584c-0.134,0.158 -0.341,0.259 -0.621,0.302c0.102,0.055 0.18,0.109 0.233,0.162c0.113,0.115 0.219,0.26 0.32,0.433l0.507,0.886l-0.485,-0l-0.386,-0.677c-0.113,-0.196 -0.205,-0.345 -0.278,-0.449c-0.073,-0.104 -0.138,-0.176 -0.196,-0.218c-0.058,-0.041 -0.116,-0.07 -0.176,-0.086c-0.044,-0.011 -0.115,-0.016 -0.215,-0.016l-0.447,0l-0,1.446l-0.386,-0ZM45.158,67.786l0.829,0c0.176,0 0.314,-0.02 0.414,-0.061c0.099,-0.04 0.175,-0.106 0.226,-0.195c0.052,-0.09 0.078,-0.187 0.078,-0.292c-0,-0.154 -0.05,-0.281 -0.15,-0.38c-0.1,-0.099 -0.258,-0.149 -0.475,-0.149l-0.922,0l-0,1.077Z"
android:fillColor="#fff"
android:fillType="nonZero"/>
android:pathData="M35.051,60.423h0.421v2.547h-0.421z"
android:fillColor="#FFFFFF"/>
<path
android:pathData="M47.522,68.226h1.099v0.402h-1.099z"
android:fillColor="#fff"
android:fillType="nonZero"/>
android:pathData="M35.472,60.246c0,-0.058 -0.047,-0.106 -0.105,-0.106h-0.21c-0.058,0 -0.106,0.047 -0.106,0.106v2.036c0,0.058 0.047,0.106 0.106,0.106h0.21c0.058,0 0.105,-0.047 0.105,-0.106V60.246z"
android:fillColor="#FFFFFF"/>
<path
android:pathData="M49.063,69.605l-0,-3.255l1.099,-0c0.194,-0 0.341,0.01 0.443,0.031c0.144,0.026 0.264,0.077 0.36,0.152c0.097,0.075 0.175,0.179 0.234,0.314c0.059,0.135 0.088,0.283 0.088,0.444c0,0.277 -0.078,0.511 -0.236,0.703c-0.158,0.192 -0.443,0.287 -0.855,0.287l-0.748,0l0,1.324l-0.385,-0ZM49.448,67.897l0.754,0c0.249,0 0.426,-0.051 0.531,-0.155c0.104,-0.104 0.157,-0.25 0.157,-0.438c-0,-0.136 -0.031,-0.252 -0.093,-0.349c-0.061,-0.097 -0.142,-0.161 -0.243,-0.192c-0.065,-0.02 -0.185,-0.029 -0.36,-0.029l-0.746,-0l0,1.163Z"
android:fillColor="#fff"
android:fillType="nonZero"/>
android:pathData="M37.873,65.857h0.441v1.902c0,0.331 -0.038,0.593 -0.114,0.788c-0.075,0.194 -0.212,0.353 -0.41,0.474c-0.197,0.123 -0.456,0.183 -0.778,0.183c-0.312,0 -0.567,-0.053 -0.766,-0.159c-0.198,-0.106 -0.34,-0.26 -0.424,-0.461c-0.085,-0.202 -0.127,-0.476 -0.127,-0.825v-1.902h0.44v1.9c0,0.287 0.027,0.497 0.081,0.633c0.054,0.135 0.146,0.24 0.277,0.313c0.13,0.074 0.29,0.11 0.48,0.11c0.324,0 0.556,-0.073 0.693,-0.218c0.138,-0.145 0.207,-0.424 0.207,-0.838L37.873,65.857L37.873,65.857z"
android:fillColor="#FFFFFF"/>
<path
android:pathData="M51.729,69.605l-0,-2.358l0.322,-0l-0,0.357c0.082,-0.167 0.158,-0.277 0.228,-0.331c0.069,-0.053 0.146,-0.08 0.229,-0.08c0.121,0 0.243,0.043 0.368,0.129l-0.123,0.371c-0.088,-0.058 -0.175,-0.087 -0.263,-0.087c-0.078,0 -0.148,0.027 -0.21,0.079c-0.063,0.053 -0.107,0.126 -0.134,0.219c-0.039,0.142 -0.059,0.298 -0.059,0.466l-0,1.235l-0.358,-0Z"
android:fillColor="#fff"
android:fillType="nonZero"/>
android:pathData="M38.689,69.205l0.966,-3.405h0.327l-0.963,3.405H38.689z"
android:fillColor="#FFFFFF"/>
<path
android:pathData="M52.955,68.426c0,-0.437 0.109,-0.76 0.327,-0.971c0.181,-0.174 0.402,-0.262 0.664,-0.262c0.29,0 0.527,0.107 0.711,0.319c0.185,0.212 0.277,0.506 0.277,0.88c-0,0.304 -0.041,0.543 -0.123,0.717c-0.081,0.173 -0.2,0.309 -0.355,0.405c-0.156,0.096 -0.326,0.144 -0.51,0.144c-0.296,0 -0.535,-0.106 -0.717,-0.317c-0.182,-0.212 -0.274,-0.517 -0.274,-0.915ZM53.323,68.426c0,0.302 0.059,0.528 0.177,0.678c0.118,0.15 0.267,0.225 0.446,0.225c0.177,0 0.325,-0.075 0.443,-0.226c0.118,-0.151 0.177,-0.381 0.177,-0.691c-0,-0.291 -0.059,-0.512 -0.178,-0.662c-0.119,-0.151 -0.266,-0.226 -0.442,-0.226c-0.179,0 -0.328,0.075 -0.446,0.225c-0.118,0.149 -0.177,0.375 -0.177,0.677Z"
android:fillColor="#fff"
android:fillType="nonZero"/>
android:pathData="M40.288,69.15v-3.293h0.409v1.181c0.191,-0.218 0.432,-0.327 0.722,-0.327c0.179,0 0.335,0.035 0.466,0.105c0.132,0.069 0.226,0.165 0.283,0.289c0.057,0.123 0.086,0.301 0.086,0.534v1.512h-0.409v-1.512c0,-0.202 -0.044,-0.349 -0.133,-0.441c-0.089,-0.091 -0.214,-0.138 -0.376,-0.138c-0.121,0 -0.235,0.031 -0.341,0.093c-0.108,0.062 -0.183,0.146 -0.229,0.253c-0.045,0.106 -0.068,0.253 -0.068,0.44v1.305H40.288L40.288,69.15z"
android:fillColor="#FFFFFF"/>
<path
android:pathData="M55.449,69.605l-0,-2.05l-0.319,0l0,-0.308l0.319,-0l-0,-0.229c-0,-0.234 0.045,-0.413 0.135,-0.537c0.09,-0.125 0.232,-0.187 0.427,-0.187c0.131,0 0.253,0.017 0.364,0.051l-0.056,0.338c-0.07,-0.014 -0.134,-0.02 -0.192,-0.02c-0.124,-0 -0.208,0.027 -0.253,0.082c-0.045,0.055 -0.068,0.171 -0.068,0.349l0,0.153l0.41,-0l0,0.308l-0.41,0l0,2.05l-0.357,-0ZM56.486,66.809l0,-0.459l0.358,-0l0,0.459l-0.358,0ZM56.486,69.605l0,-2.358l0.358,-0l0,2.358l-0.358,-0Z"
android:fillColor="#fff"
android:fillType="nonZero"/>
android:pathData="M43.916,69.15v-3.07h1.031c0.21,0 0.378,0.031 0.506,0.093c0.126,0.061 0.226,0.158 0.298,0.287c0.072,0.129 0.108,0.264 0.108,0.405c0,0.132 -0.031,0.256 -0.095,0.371c-0.064,0.116 -0.16,0.209 -0.289,0.281c0.166,0.055 0.294,0.147 0.383,0.278c0.09,0.131 0.134,0.287 0.134,0.465c0,0.144 -0.026,0.277 -0.081,0.401c-0.055,0.124 -0.122,0.219 -0.202,0.286c-0.08,0.067 -0.18,0.118 -0.301,0.152c-0.121,0.035 -0.268,0.052 -0.443,0.052H43.916L43.916,69.15zM44.279,67.369h0.595c0.161,0 0.276,-0.011 0.346,-0.035c0.092,-0.031 0.162,-0.082 0.209,-0.153c0.047,-0.072 0.071,-0.161 0.071,-0.269c0,-0.102 -0.023,-0.191 -0.066,-0.269c-0.043,-0.077 -0.107,-0.13 -0.188,-0.159c-0.081,-0.028 -0.221,-0.042 -0.418,-0.042h-0.55V67.369L44.279,67.369zM44.279,68.787h0.685c0.118,0 0.2,-0.006 0.247,-0.015c0.084,-0.017 0.154,-0.044 0.21,-0.084c0.057,-0.039 0.103,-0.095 0.139,-0.171c0.037,-0.075 0.055,-0.16 0.055,-0.258c0,-0.114 -0.026,-0.214 -0.079,-0.298c-0.052,-0.085 -0.124,-0.144 -0.218,-0.178s-0.227,-0.051 -0.403,-0.051h-0.636L44.279,68.787L44.279,68.787z"
android:fillColor="#FFFFFF"/>
<path
android:pathData="M57.381,66.35h0.358v3.255h-0.358z"
android:fillColor="#fff"
android:fillType="nonZero"/>
android:pathData="M46.497,69.15v-3.07h1.22c0.244,0 0.431,0.027 0.558,0.082c0.127,0.056 0.229,0.153 0.306,0.292c0.076,0.14 0.114,0.294 0.114,0.463c0,0.218 -0.063,0.401 -0.189,0.551c-0.126,0.149 -0.322,0.244 -0.586,0.285c0.096,0.052 0.17,0.103 0.22,0.153c0.107,0.108 0.207,0.245 0.302,0.408l0.478,0.836h-0.457l-0.364,-0.639c-0.107,-0.185 -0.193,-0.325 -0.262,-0.423c-0.069,-0.098 -0.13,-0.166 -0.185,-0.206c-0.055,-0.039 -0.109,-0.066 -0.166,-0.081c-0.041,-0.01 -0.108,-0.015 -0.203,-0.015h-0.422v1.364H46.497zM46.861,67.434h0.782c0.166,0 0.296,-0.019 0.39,-0.058c0.093,-0.038 0.165,-0.1 0.213,-0.184c0.049,-0.085 0.074,-0.176 0.074,-0.275c0,-0.145 -0.047,-0.265 -0.141,-0.358c-0.094,-0.093 -0.243,-0.141 -0.448,-0.141h-0.87V67.434L46.861,67.434z"
android:fillColor="#FFFFFF"/>
<path
android:pathData="M60.673,69.605l-0.357,-0l-0,-2.547c-0.087,0.092 -0.2,0.184 -0.339,0.275c-0.14,0.092 -0.266,0.161 -0.377,0.207l-0,-0.387c0.2,-0.105 0.375,-0.232 0.525,-0.381c0.149,-0.15 0.256,-0.295 0.318,-0.436l0.23,0l0,3.269Z"
android:fillColor="#fff"
android:fillType="nonZero"/>
android:pathData="M49.091,67.849h1.037v0.379h-1.037z"
android:fillColor="#FFFFFF"/>
<path
android:pathData="M18.919,66.916h0.698v2.397h-0.698z"
android:fillColor="#fff"/>
android:pathData="M50.544,69.15v-3.07h1.037c0.183,0 0.322,0.009 0.418,0.029c0.136,0.025 0.249,0.073 0.34,0.143c0.091,0.071 0.165,0.169 0.221,0.296c0.056,0.127 0.083,0.267 0.083,0.419c0,0.261 -0.074,0.482 -0.223,0.663c-0.149,0.181 -0.418,0.271 -0.806,0.271h-0.705v1.249L50.544,69.15L50.544,69.15zM50.907,67.539h0.711c0.235,0 0.402,-0.048 0.501,-0.146c0.098,-0.098 0.148,-0.236 0.148,-0.413c0,-0.128 -0.029,-0.238 -0.088,-0.329c-0.058,-0.091 -0.134,-0.152 -0.229,-0.181c-0.061,-0.019 -0.174,-0.027 -0.34,-0.027h-0.704L50.907,67.539L50.907,67.539z"
android:fillColor="#FFFFFF"/>
<path
android:pathData="M18.106,66.873h1.512v0.698h-1.512z"
android:fillColor="#fff"/>
android:pathData="M53.059,69.15v-2.224h0.304v0.337c0.077,-0.158 0.149,-0.261 0.215,-0.312c0.065,-0.05 0.138,-0.075 0.216,-0.075c0.114,0 0.229,0.041 0.347,0.122l-0.116,0.35c-0.083,-0.055 -0.165,-0.082 -0.248,-0.082c-0.074,0 -0.14,0.025 -0.198,0.075c-0.059,0.05 -0.101,0.119 -0.126,0.207c-0.037,0.134 -0.056,0.281 -0.056,0.44v1.165L53.059,69.15L53.059,69.15z"
android:fillColor="#FFFFFF"/>
<path
android:pathData="M18.118,65.492h0.698v1.731h-0.698z"
android:fillColor="#fff"/>
android:pathData="M54.215,68.038c0,-0.412 0.103,-0.717 0.308,-0.916c0.171,-0.164 0.379,-0.247 0.626,-0.247c0.274,0 0.497,0.101 0.671,0.301c0.174,0.2 0.261,0.477 0.261,0.83c0,0.287 -0.039,0.512 -0.116,0.676c-0.076,0.163 -0.189,0.291 -0.335,0.382c-0.147,0.091 -0.307,0.136 -0.481,0.136c-0.279,0 -0.505,-0.1 -0.676,-0.299C54.302,68.701 54.215,68.413 54.215,68.038L54.215,68.038zM54.562,68.038c0,0.285 0.056,0.498 0.167,0.639c0.111,0.141 0.252,0.212 0.421,0.212c0.167,0 0.307,-0.071 0.418,-0.213c0.111,-0.142 0.167,-0.359 0.167,-0.652c0,-0.274 -0.056,-0.483 -0.168,-0.624c-0.112,-0.142 -0.251,-0.213 -0.417,-0.213c-0.169,0 -0.309,0.071 -0.421,0.212C54.618,67.54 54.562,67.753 54.562,68.038L54.562,68.038z"
android:fillColor="#FFFFFF"/>
<path
android:pathData="M15.93,67.321h0.698v1.961h-0.698z"
android:fillColor="#fff"/>
android:pathData="M56.567,69.15v-1.933h-0.301v-0.29h0.301V66.71c0,-0.221 0.042,-0.39 0.127,-0.506c0.085,-0.118 0.219,-0.176 0.403,-0.176c0.124,0 0.239,0.016 0.343,0.048l-0.053,0.319c-0.066,-0.013 -0.126,-0.019 -0.181,-0.019c-0.117,0 -0.196,0.025 -0.239,0.077c-0.042,0.052 -0.064,0.161 -0.064,0.329v0.144h0.387v0.29h-0.387v1.933L56.567,69.15L56.567,69.15zM57.545,66.513V66.08h0.338v0.433H57.545zM57.545,69.15v-2.224h0.338v2.224H57.545z"
android:fillColor="#FFFFFF"/>
<path
android:pathData="M16.592,65.802h0.681v2.141h-0.681z"
android:fillColor="#fff"/>
android:pathData="M58.389,66.08h0.338v3.07h-0.338z"
android:fillColor="#FFFFFF"/>
<path
android:pathData="M16.592,65.492h1.861v0.62h-1.861z"
android:fillColor="#fff"/>
android:pathData="M61.494,69.15h-0.337v-2.402c-0.082,0.087 -0.189,0.174 -0.32,0.259c-0.132,0.087 -0.251,0.152 -0.356,0.195v-0.365c0.189,-0.099 0.354,-0.219 0.495,-0.359c0.141,-0.141 0.241,-0.278 0.3,-0.411h0.217L61.494,69.15L61.494,69.15z"
android:fillColor="#FFFFFF"/>
<path
android:pathData="M22.859,69.525l-0.539,0l0,-3.507c-0.129,0.127 -0.299,0.253 -0.509,0.38c-0.211,0.126 -0.4,0.221 -0.567,0.284l-0,-0.532c0.301,-0.145 0.564,-0.32 0.789,-0.526c0.226,-0.206 0.385,-0.406 0.479,-0.599l0.347,-0l-0,4.5Z"
android:fillColor="#fff"
android:fillType="nonZero"/>
android:pathData="M22.114,66.613h0.658v2.261h-0.658z"
android:fillColor="#FFFFFF"/>
<path
android:pathData="M24.539,68.899h0.613v0.627h-0.613z"
android:fillColor="#fff"
android:fillType="nonZero"/>
android:pathData="M21.347,66.573h1.426v0.658h-1.426z"
android:fillColor="#FFFFFF"/>
<path
android:pathData="M25.942,68.342l0.538,-0.073c0.062,0.312 0.167,0.536 0.316,0.674c0.148,0.137 0.329,0.206 0.542,0.206c0.254,0 0.467,-0.089 0.642,-0.269c0.174,-0.179 0.261,-0.401 0.261,-0.666c0,-0.253 -0.08,-0.462 -0.242,-0.626c-0.161,-0.164 -0.367,-0.246 -0.616,-0.246c-0.101,0 -0.228,0.021 -0.38,0.061l0.06,-0.483c0.036,0.004 0.065,0.006 0.087,0.006c0.229,0 0.436,-0.061 0.619,-0.183c0.183,-0.122 0.275,-0.311 0.275,-0.566c0,-0.201 -0.067,-0.369 -0.2,-0.501c-0.134,-0.132 -0.306,-0.199 -0.518,-0.199c-0.209,0 -0.383,0.068 -0.523,0.202c-0.14,0.135 -0.229,0.336 -0.269,0.605l-0.538,-0.097c0.065,-0.369 0.215,-0.655 0.448,-0.858c0.233,-0.203 0.524,-0.304 0.87,-0.304c0.24,-0 0.46,0.052 0.661,0.157c0.202,0.105 0.356,0.248 0.462,0.43c0.107,0.181 0.16,0.374 0.16,0.578c0,0.193 -0.051,0.37 -0.152,0.529c-0.102,0.159 -0.252,0.285 -0.452,0.379c0.259,0.061 0.461,0.188 0.604,0.38c0.144,0.193 0.216,0.434 0.216,0.723c-0,0.392 -0.14,0.723 -0.419,0.996c-0.279,0.272 -0.632,0.408 -1.059,0.408c-0.384,-0 -0.704,-0.117 -0.958,-0.352c-0.254,-0.234 -0.399,-0.538 -0.435,-0.911Z"
android:fillColor="#fff"
android:fillType="nonZero"/>
android:pathData="M21.358,65.27h0.658v1.633h-0.658z"
android:fillColor="#FFFFFF"/>
<path
android:pathData="M29.345,68.351l0.565,-0.049c0.042,0.282 0.139,0.493 0.292,0.635c0.152,0.141 0.336,0.212 0.551,0.212c0.26,0 0.479,-0.1 0.658,-0.299c0.18,-0.2 0.269,-0.465 0.269,-0.795c0,-0.314 -0.086,-0.562 -0.258,-0.743c-0.173,-0.182 -0.399,-0.272 -0.678,-0.272c-0.173,-0 -0.33,0.04 -0.469,0.12c-0.14,0.081 -0.249,0.185 -0.329,0.314l-0.505,-0.068l0.424,-2.302l2.18,0l0,0.526l-1.749,0l-0.236,1.205c0.263,-0.188 0.539,-0.282 0.828,-0.282c0.383,0 0.706,0.136 0.969,0.407c0.263,0.271 0.395,0.62 0.395,1.046c-0,0.405 -0.116,0.756 -0.347,1.051c-0.281,0.363 -0.665,0.545 -1.152,0.545c-0.398,-0 -0.724,-0.114 -0.976,-0.343c-0.252,-0.228 -0.396,-0.531 -0.432,-0.908Z"
android:fillColor="#fff"
android:fillType="nonZero"/>
android:pathData="M19.295,66.995h0.658v1.85h-0.658z"
android:fillColor="#FFFFFF"/>
<path
android:pathData="M15.893,72.909h2.95v0.614h-2.95z"
android:fillColor="#f37e31"/>
android:pathData="M19.919,65.563h0.642v2.019h-0.642z"
android:fillColor="#FFFFFF"/>
<path
android:pathData="M18.806,76.021h0.663v0.611h-0.663z"
android:fillColor="#f37e31"/>
android:pathData="M19.919,65.27h1.755v0.585h-1.755z"
android:fillColor="#FFFFFF"/>
<path
android:pathData="M18.212,73.523h0.631v3.111h-0.631z"
android:fillColor="#f37e31"/>
android:pathData="M25.83,69.074h-0.508v-3.308c-0.122,0.12 -0.282,0.239 -0.48,0.358c-0.199,0.119 -0.377,0.208 -0.535,0.268v-0.502c0.284,-0.137 0.532,-0.302 0.744,-0.496c0.213,-0.194 0.363,-0.383 0.452,-0.565h0.327V69.074z"
android:fillColor="#FFFFFF"/>
<path
android:pathData="M15.893,73.523h0.611v3.111h-0.611z"
android:fillColor="#f37e31"/>
android:pathData="M27.414,68.484h0.578v0.591h-0.578z"
android:fillColor="#FFFFFF"/>
<path
android:pathData="M23.778,76.344l0,0.517l-2.795,0c-0.004,-0.13 0.016,-0.254 0.06,-0.374c0.071,-0.197 0.185,-0.391 0.342,-0.582c0.157,-0.192 0.383,-0.413 0.68,-0.664c0.459,-0.391 0.77,-0.7 0.931,-0.928c0.162,-0.228 0.243,-0.444 0.243,-0.647c-0,-0.214 -0.074,-0.393 -0.221,-0.54c-0.147,-0.146 -0.339,-0.22 -0.575,-0.22c-0.251,0 -0.451,0.078 -0.601,0.234c-0.15,0.155 -0.226,0.37 -0.228,0.645l-0.533,-0.057c0.036,-0.412 0.174,-0.726 0.412,-0.943c0.239,-0.216 0.559,-0.324 0.961,-0.324c0.406,0 0.727,0.117 0.964,0.35c0.236,0.233 0.355,0.522 0.355,0.867c-0,0.175 -0.035,0.347 -0.104,0.517c-0.07,0.169 -0.184,0.347 -0.345,0.535c-0.161,0.187 -0.428,0.444 -0.801,0.771c-0.311,0.271 -0.511,0.455 -0.6,0.551c-0.088,0.097 -0.161,0.194 -0.219,0.292l2.074,-0Z"
android:fillColor="#fff"
android:fillType="nonZero"/>
android:pathData="M28.737,67.958l0.507,-0.069c0.058,0.294 0.158,0.506 0.298,0.636c0.14,0.129 0.31,0.194 0.511,0.194c0.24,0 0.44,-0.084 0.606,-0.254c0.164,-0.169 0.246,-0.378 0.246,-0.628c0,-0.239 -0.075,-0.436 -0.228,-0.59c-0.152,-0.155 -0.346,-0.232 -0.581,-0.232c-0.095,0 -0.215,0.02 -0.358,0.058l0.057,-0.456c0.034,0.004 0.061,0.006 0.082,0.006c0.216,0 0.411,-0.058 0.584,-0.173s0.259,-0.293 0.259,-0.534c0,-0.19 -0.063,-0.348 -0.189,-0.473c-0.126,-0.125 -0.289,-0.188 -0.489,-0.188c-0.197,0 -0.361,0.064 -0.493,0.191c-0.132,0.127 -0.216,0.317 -0.254,0.571l-0.507,-0.091c0.061,-0.348 0.203,-0.618 0.423,-0.809c0.22,-0.191 0.494,-0.287 0.821,-0.287c0.226,0 0.434,0.049 0.623,0.148c0.191,0.099 0.336,0.234 0.436,0.406c0.101,0.171 0.151,0.353 0.151,0.545c0,0.182 -0.048,0.349 -0.143,0.499c-0.096,0.15 -0.238,0.269 -0.426,0.357c0.244,0.058 0.435,0.177 0.57,0.358c0.136,0.182 0.204,0.409 0.204,0.682c0,0.37 -0.132,0.682 -0.395,0.939c-0.263,0.257 -0.596,0.385 -0.999,0.385c-0.362,0 -0.664,-0.11 -0.904,-0.332C28.908,68.597 28.771,68.31 28.737,67.958z"
android:fillColor="#FFFFFF"/>
<path
android:pathData="M24.627,76.248h0.591v0.613h-0.591z"
android:fillColor="#fff"
android:fillType="nonZero"/>
android:pathData="M31.947,67.967l0.533,-0.046c0.04,0.266 0.131,0.465 0.275,0.599c0.143,0.133 0.317,0.2 0.52,0.2c0.245,0 0.452,-0.094 0.621,-0.282c0.17,-0.189 0.254,-0.439 0.254,-0.75c0,-0.296 -0.081,-0.53 -0.243,-0.701c-0.163,-0.172 -0.376,-0.257 -0.639,-0.257c-0.163,0 -0.311,0.038 -0.442,0.113c-0.132,0.076 -0.235,0.174 -0.31,0.296l-0.476,-0.064l0.4,-2.171h2.056v0.496h-1.65l-0.223,1.137c0.248,-0.177 0.508,-0.266 0.781,-0.266c0.361,0 0.666,0.128 0.914,0.384c0.248,0.256 0.373,0.585 0.373,0.987c0,0.382 -0.109,0.713 -0.327,0.991c-0.265,0.342 -0.627,0.514 -1.087,0.514c-0.375,0 -0.683,-0.108 -0.921,-0.324C32.117,68.608 31.981,68.322 31.947,67.967L31.947,67.967z"
android:fillColor="#FFFFFF"/>
<path
android:pathData="M25.98,75.704l0.519,-0.072c0.06,0.305 0.161,0.525 0.304,0.66c0.144,0.134 0.318,0.201 0.524,0.201c0.244,0 0.451,-0.087 0.619,-0.263c0.168,-0.175 0.252,-0.392 0.252,-0.651c0,-0.247 -0.078,-0.451 -0.233,-0.612c-0.156,-0.16 -0.354,-0.24 -0.595,-0.24c-0.098,-0 -0.22,0.02 -0.366,0.06l0.058,-0.473c0.034,0.004 0.062,0.006 0.083,0.006c0.221,0 0.421,-0.06 0.598,-0.179c0.176,-0.12 0.265,-0.304 0.265,-0.553c-0,-0.197 -0.064,-0.361 -0.193,-0.49c-0.129,-0.13 -0.296,-0.195 -0.499,-0.195c-0.202,0 -0.371,0.066 -0.505,0.198c-0.135,0.131 -0.222,0.329 -0.26,0.592l-0.519,-0.096c0.063,-0.361 0.207,-0.64 0.432,-0.839c0.225,-0.198 0.505,-0.297 0.84,-0.297c0.231,0 0.443,0.051 0.638,0.154c0.194,0.103 0.342,0.243 0.445,0.42c0.103,0.177 0.155,0.366 0.155,0.565c-0,0.189 -0.049,0.362 -0.147,0.517c-0.099,0.155 -0.244,0.279 -0.436,0.371c0.25,0.059 0.444,0.183 0.583,0.372c0.138,0.188 0.207,0.424 0.207,0.707c0,0.382 -0.134,0.707 -0.403,0.973c-0.27,0.266 -0.61,0.399 -1.022,0.399c-0.371,-0 -0.679,-0.115 -0.925,-0.344c-0.245,-0.229 -0.385,-0.526 -0.419,-0.891Z"
android:fillColor="#fff"
android:fillType="nonZero"/>
android:pathData="M19.26,72.266h2.782v0.579h-2.782z"
android:fillColor="#F27E30"/>
<path
android:pathData="M29.263,75.713l0.545,-0.048c0.041,0.275 0.134,0.482 0.282,0.621c0.147,0.138 0.324,0.207 0.532,0.207c0.25,0 0.462,-0.097 0.635,-0.293c0.173,-0.195 0.259,-0.454 0.259,-0.777c0,-0.307 -0.083,-0.549 -0.249,-0.726c-0.167,-0.177 -0.384,-0.266 -0.654,-0.266c-0.167,-0 -0.318,0.039 -0.453,0.118c-0.134,0.079 -0.24,0.181 -0.317,0.306l-0.488,-0.065l0.41,-2.251l2.103,-0l0,0.514l-1.688,-0l-0.227,1.178c0.253,-0.184 0.52,-0.275 0.799,-0.275c0.369,-0 0.681,0.132 0.935,0.397c0.253,0.265 0.38,0.606 0.38,1.022c0,0.397 -0.111,0.74 -0.334,1.029c-0.272,0.354 -0.642,0.532 -1.111,0.532c-0.385,-0 -0.699,-0.112 -0.942,-0.335c-0.243,-0.223 -0.382,-0.519 -0.417,-0.888Z"
android:fillColor="#fff"
android:fillType="nonZero"/>
android:pathData="M22.007,75.201h0.625v0.576h-0.625z"
android:fillColor="#F27E30"/>
<path
android:pathData="M35.535,72.479l0.56,-0l0,2.532c0,0.44 -0.048,0.79 -0.144,1.049c-0.096,0.259 -0.27,0.47 -0.521,0.632c-0.251,0.163 -0.58,0.244 -0.988,0.244c-0.396,-0 -0.72,-0.071 -0.972,-0.212c-0.252,-0.142 -0.432,-0.347 -0.54,-0.615c-0.108,-0.268 -0.162,-0.634 -0.162,-1.098l0,-2.532l0.56,-0l0,2.529c0,0.38 0.034,0.661 0.103,0.841c0.068,0.181 0.185,0.32 0.352,0.417c0.166,0.098 0.369,0.147 0.61,0.147c0.411,-0 0.705,-0.097 0.88,-0.29c0.175,-0.194 0.262,-0.565 0.262,-1.115l0,-2.529Z"
android:fillColor="#fff"
android:fillType="nonZero"/>
android:pathData="M21.447,72.845h0.595v2.934h-0.595z"
android:fillColor="#F27E30"/>
<path
android:pathData="M56.616,76.861l-0.556,-0l0,-3.44c-0.134,0.124 -0.309,0.248 -0.526,0.372c-0.218,0.124 -0.413,0.217 -0.586,0.279l0,-0.522c0.311,-0.142 0.583,-0.314 0.816,-0.516c0.232,-0.202 0.397,-0.398 0.494,-0.588l0.358,0l0,4.415Z"
android:fillColor="#fff"
android:fillType="nonZero"/>
android:pathData="M19.26,72.845h0.576v2.934h-0.576z"
android:fillColor="#F27E30"/>
<path
android:pathData="M60.962,76.342l0,0.519l-2.993,-0c-0.004,-0.13 0.018,-0.255 0.065,-0.375c0.076,-0.198 0.198,-0.393 0.366,-0.585c0.168,-0.192 0.41,-0.414 0.727,-0.666c0.492,-0.392 0.825,-0.702 0.998,-0.931c0.173,-0.229 0.259,-0.445 0.259,-0.649c0,-0.214 -0.078,-0.395 -0.236,-0.542c-0.157,-0.147 -0.363,-0.22 -0.616,-0.22c-0.268,-0 -0.482,0.078 -0.643,0.234c-0.16,0.156 -0.241,0.372 -0.244,0.648l-0.571,-0.057c0.039,-0.414 0.186,-0.73 0.442,-0.946c0.255,-0.217 0.598,-0.326 1.028,-0.326c0.435,0 0.779,0.117 1.032,0.351c0.253,0.234 0.38,0.524 0.38,0.87c-0,0.176 -0.037,0.349 -0.111,0.519c-0.074,0.17 -0.198,0.348 -0.369,0.536c-0.172,0.188 -0.458,0.446 -0.858,0.774c-0.333,0.272 -0.547,0.457 -0.642,0.554c-0.095,0.096 -0.173,0.194 -0.235,0.292l2.221,-0Z"
android:fillColor="#fff"
android:fillType="nonZero"/>
android:pathData="M26.696,75.506v0.488H24.06c-0.004,-0.123 0.015,-0.24 0.057,-0.353c0.067,-0.186 0.174,-0.369 0.323,-0.549c0.148,-0.181 0.361,-0.39 0.641,-0.626c0.433,-0.369 0.726,-0.66 0.878,-0.875c0.153,-0.215 0.229,-0.419 0.229,-0.61c0,-0.202 -0.07,-0.371 -0.208,-0.509c-0.139,-0.138 -0.32,-0.207 -0.542,-0.207c-0.237,0 -0.425,0.074 -0.567,0.221c-0.141,0.146 -0.213,0.349 -0.215,0.608l-0.503,-0.054c0.034,-0.389 0.164,-0.685 0.389,-0.889c0.225,-0.204 0.527,-0.306 0.906,-0.306c0.383,0 0.686,0.11 0.909,0.33c0.223,0.22 0.335,0.492 0.335,0.818c0,0.165 -0.033,0.327 -0.098,0.488c-0.066,0.159 -0.174,0.327 -0.325,0.505c-0.152,0.176 -0.404,0.419 -0.755,0.727c-0.293,0.256 -0.482,0.429 -0.566,0.52c-0.083,0.091 -0.152,0.183 -0.207,0.275L26.696,75.506L26.696,75.506z"
android:fillColor="#FFFFFF"/>
<path
android:pathData="M61.867,74.291l0,-0.615l0.633,-0l0,0.615l-0.633,-0ZM61.867,76.861l0,-0.615l0.633,-0l0,0.615l-0.633,-0Z"
android:fillColor="#fff"
android:fillType="nonZero"/>
android:pathData="M27.497,75.415h0.557v0.578h-0.557z"
android:fillColor="#FFFFFF"/>
<path
android:pathData="M63.316,74.692c-0,-0.519 0.055,-0.938 0.165,-1.255c0.11,-0.317 0.274,-0.561 0.491,-0.733c0.217,-0.172 0.491,-0.258 0.82,-0.258c0.243,0 0.456,0.048 0.639,0.143c0.184,0.095 0.335,0.231 0.455,0.41c0.119,0.179 0.213,0.397 0.281,0.654c0.068,0.257 0.102,0.604 0.102,1.039c-0,0.516 -0.055,0.933 -0.164,1.25c-0.109,0.316 -0.272,0.561 -0.49,0.734c-0.217,0.173 -0.491,0.26 -0.823,0.26c-0.436,-0 -0.779,-0.152 -1.028,-0.456c-0.299,-0.366 -0.448,-0.962 -0.448,-1.788ZM63.887,74.692c0,0.722 0.087,1.203 0.261,1.441c0.174,0.239 0.389,0.359 0.644,0.359c0.255,-0 0.47,-0.12 0.644,-0.36c0.174,-0.24 0.261,-0.72 0.261,-1.44c0,-0.723 -0.087,-1.204 -0.261,-1.442c-0.174,-0.238 -0.391,-0.357 -0.65,-0.357c-0.255,-0 -0.459,0.105 -0.612,0.315c-0.191,0.268 -0.287,0.763 -0.287,1.484Z"
android:fillColor="#fff"
android:fillType="nonZero"/>
android:pathData="M28.773,74.902l0.49,-0.068c0.057,0.288 0.152,0.495 0.287,0.622c0.136,0.126 0.3,0.19 0.494,0.19c0.23,0 0.425,-0.082 0.584,-0.248c0.158,-0.165 0.238,-0.37 0.238,-0.614c0,-0.233 -0.074,-0.425 -0.22,-0.577c-0.147,-0.151 -0.334,-0.226 -0.561,-0.226c-0.092,0 -0.207,0.019 -0.345,0.057l0.055,-0.446c0.032,0.004 0.058,0.006 0.078,0.006c0.208,0 0.397,-0.057 0.564,-0.169c0.166,-0.113 0.25,-0.287 0.25,-0.522c0,-0.186 -0.06,-0.34 -0.182,-0.462c-0.122,-0.123 -0.279,-0.184 -0.471,-0.184c-0.191,0 -0.35,0.062 -0.476,0.187c-0.127,0.124 -0.209,0.31 -0.245,0.558l-0.489,-0.091c0.059,-0.34 0.195,-0.604 0.407,-0.791c0.212,-0.187 0.476,-0.28 0.792,-0.28c0.218,0 0.418,0.048 0.602,0.145c0.183,0.097 0.323,0.229 0.42,0.396c0.097,0.167 0.146,0.345 0.146,0.533c0,0.178 -0.046,0.341 -0.139,0.488c-0.093,0.146 -0.23,0.263 -0.411,0.35c0.236,0.056 0.419,0.173 0.55,0.351c0.13,0.177 0.195,0.4 0.195,0.667c0,0.36 -0.126,0.667 -0.38,0.918c-0.255,0.251 -0.575,0.376 -0.964,0.376c-0.35,0 -0.64,-0.108 -0.872,-0.324C28.937,75.526 28.805,75.246 28.773,74.902L28.773,74.902z"
android:fillColor="#FFFFFF"/>
<path
android:pathData="M68.616,76.861l-0,-1.053l-1.964,0l-0,-0.495l2.066,-2.849l0.454,0l-0,2.849l0.612,0l-0,0.495l-0.612,0l-0,1.053l-0.556,-0ZM68.616,75.313l-0,-1.982l-1.418,1.982l1.418,0Z"
android:fillColor="#fff"
android:fillType="nonZero"/>
android:pathData="M31.87,74.91l0.514,-0.045c0.039,0.259 0.126,0.455 0.266,0.586c0.139,0.13 0.306,0.195 0.502,0.195c0.236,0 0.436,-0.091 0.599,-0.276c0.163,-0.184 0.244,-0.428 0.244,-0.733c0,-0.29 -0.078,-0.518 -0.235,-0.685c-0.158,-0.167 -0.362,-0.251 -0.617,-0.251c-0.158,0 -0.3,0.037 -0.427,0.111c-0.126,0.075 -0.226,0.171 -0.299,0.289l-0.46,-0.061l0.387,-2.123h1.983v0.485h-1.592l-0.214,1.111c0.239,-0.174 0.49,-0.259 0.754,-0.259c0.348,0 0.642,0.125 0.882,0.374c0.239,0.25 0.358,0.572 0.358,0.964c0,0.374 -0.105,0.698 -0.315,0.971c-0.257,0.334 -0.606,0.502 -1.048,0.502c-0.363,0 -0.659,-0.106 -0.888,-0.316C32.034,75.538 31.903,75.258 31.87,74.91L31.87,74.91z"
android:fillColor="#FFFFFF"/>
<path
android:pathData="M50.221,74.7a1.692,1.702 0,1 0,3.384 0a1.692,1.702 0,1 0,-3.384 0z"
android:fillColor="#aaa2a2"/>
android:pathData="M37.785,71.86h0.528v2.388c0,0.415 -0.045,0.745 -0.136,0.989c-0.091,0.244 -0.255,0.443 -0.491,0.596c-0.237,0.154 -0.547,0.23 -0.932,0.23c-0.373,0 -0.679,-0.067 -0.917,-0.2c-0.238,-0.134 -0.407,-0.327 -0.509,-0.58s-0.153,-0.598 -0.153,-1.036V71.86h0.528v2.385c0,0.358 0.032,0.623 0.097,0.793c0.064,0.171 0.174,0.302 0.332,0.393c0.157,0.092 0.348,0.139 0.575,0.139c0.388,0 0.665,-0.091 0.83,-0.274c0.165,-0.183 0.247,-0.533 0.247,-1.052L37.785,71.86L37.785,71.86z"
android:fillColor="#FFFFFF"/>
<path
android:pathData="M57.668,75.993h-0.524v-3.244c-0.126,0.117 -0.291,0.234 -0.496,0.351c-0.206,0.117 -0.39,0.205 -0.553,0.263V72.87c0.293,-0.134 0.55,-0.296 0.77,-0.487c0.219,-0.191 0.374,-0.375 0.466,-0.555h0.338V75.993z"
android:fillColor="#FFFFFF"/>
<path
android:pathData="M61.767,75.504v0.49h-2.823c-0.004,-0.123 0.017,-0.241 0.061,-0.354c0.072,-0.187 0.187,-0.371 0.345,-0.552c0.158,-0.181 0.387,-0.39 0.686,-0.628c0.464,-0.37 0.778,-0.662 0.941,-0.878s0.244,-0.42 0.244,-0.612c0,-0.202 -0.074,-0.373 -0.223,-0.511c-0.148,-0.139 -0.342,-0.207 -0.581,-0.207c-0.253,0 -0.455,0.074 -0.606,0.221c-0.151,0.147 -0.227,0.351 -0.23,0.611l-0.539,-0.054c0.037,-0.39 0.175,-0.689 0.417,-0.892c0.241,-0.205 0.564,-0.307 0.97,-0.307c0.41,0 0.735,0.11 0.973,0.331c0.239,0.221 0.358,0.494 0.358,0.821c0,0.166 -0.035,0.329 -0.105,0.49c-0.07,0.16 -0.187,0.328 -0.348,0.506c-0.162,0.177 -0.432,0.421 -0.809,0.73c-0.314,0.257 -0.516,0.431 -0.606,0.523c-0.09,0.091 -0.163,0.183 -0.222,0.275L61.767,75.504L61.767,75.504z"
android:fillColor="#FFFFFF"/>
<path
android:pathData="M62.62,73.569v-0.58h0.597v0.58H62.62zM62.62,75.993v-0.58h0.597v0.58H62.62z"
android:fillColor="#FFFFFF"/>
<path
android:pathData="M63.987,73.947c0,-0.489 0.052,-0.885 0.156,-1.184c0.104,-0.299 0.258,-0.529 0.463,-0.691c0.205,-0.162 0.463,-0.243 0.773,-0.243c0.229,0 0.43,0.045 0.603,0.135c0.174,0.09 0.316,0.218 0.429,0.387c0.112,0.169 0.201,0.374 0.265,0.617c0.064,0.242 0.096,0.57 0.096,0.98c0,0.487 -0.052,0.88 -0.155,1.179c-0.103,0.298 -0.257,0.529 -0.462,0.692c-0.205,0.163 -0.463,0.245 -0.776,0.245c-0.411,0 -0.735,-0.143 -0.97,-0.43C64.128,75.289 63.987,74.727 63.987,73.947L63.987,73.947zM64.526,73.947c0,0.681 0.082,1.135 0.246,1.359c0.164,0.225 0.367,0.339 0.607,0.339s0.443,-0.113 0.607,-0.34c0.164,-0.226 0.246,-0.679 0.246,-1.358c0,-0.682 -0.082,-1.136 -0.246,-1.36c-0.164,-0.224 -0.369,-0.337 -0.613,-0.337c-0.241,0 -0.433,0.099 -0.577,0.297C64.616,72.801 64.526,73.267 64.526,73.947L64.526,73.947z"
android:fillColor="#FFFFFF"/>
<path
android:pathData="M68.986,75.993V75h-1.852v-0.467l1.949,-2.687h0.428v2.687h0.577V75H69.51v0.993H68.986L68.986,75.993zM68.986,74.533v-1.869l-1.337,1.869H68.986z"
android:fillColor="#FFFFFF"/>
<path
android:pathData="M51.636,73.955a1.596,1.605 0,1 0,3.192 0a1.596,1.605 0,1 0,-3.192 0z"
android:fillColor="#A9A2A2"/>
</vector>

View file

@ -47,7 +47,7 @@
android:padding="5dp" />
<LinearLayout
android:id="@+id/logsettings_placeholder"
android:id="@+id/placeholder"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical" />
@ -63,7 +63,7 @@
android:paddingBottom="8dp">
<Button
android:id="@+id/logsettings_reset"
android:id="@+id/reset"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:layout_marginEnd="8dp"

View file

@ -12,14 +12,6 @@
android:layout_height="wrap_content"
android:orientation="vertical">
<info.nightscout.androidaps.utils.ui.SingleClickButton
android:id="@+id/profilehelper_compareprofile"
style="?android:attr/buttonStyle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:drawableStart="@drawable/ic_compare_profiles"
android:text="@string/comapareprofile" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
@ -28,7 +20,7 @@
android:orientation="horizontal">
<TextView
android:id="@+id/profilehelper_menu1"
android:id="@+id/menu1"
android:layout_width="0dp"
android:layout_height="30dp"
android:layout_weight="1"
@ -38,7 +30,7 @@
android:text="1" />
<TextView
android:id="@+id/profilehelper_menu2"
android:id="@+id/menu2"
android:layout_width="0dp"
android:layout_height="30dp"
android:layout_weight="1"
@ -50,7 +42,7 @@
</LinearLayout>
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/profilehelper_profiletype_title"
android:id="@+id/profiletype_title"
style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox"
android:layout_width="match_parent"
android:layout_height="wrap_content"
@ -59,7 +51,7 @@
app:boxStrokeColor="@color/tabBgColorSelected">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/profilehelper_profiletype"
android:id="@+id/profiletype"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="10dp"
@ -72,7 +64,7 @@
</com.google.android.material.textfield.TextInputLayout>
<LinearLayout
android:id="@+id/profilehelper_default_profile"
android:id="@+id/default_profile"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
@ -87,82 +79,82 @@
android:gravity="center_vertical">
<TextView
android:id="@+id/profilehelper_age_label"
android:id="@+id/age_label"
android:layout_width="150dp"
android:layout_height="wrap_content"
android:layout_marginStart="10dp"
android:labelFor="@+id/profilehelper_age"
android:labelFor="@+id/age"
android:text="@string/age"
android:textAppearance="@style/TextAppearance.AppCompat.Medium" />
<info.nightscout.androidaps.utils.ui.NumberPicker
android:id="@+id/profilehelper_age"
android:id="@+id/age"
android:layout_width="130dp"
android:layout_height="40dp" />
</TableRow>
<TableRow
android:id="@+id/profilehelper_tdd_row"
android:id="@+id/tdd_row"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center_vertical">
<TextView
android:id="@+id/profilehelper_tdd_label"
android:id="@+id/tdd_label"
android:layout_width="150dp"
android:layout_height="wrap_content"
android:layout_marginStart="10dp"
android:labelFor="@+id/profilehelper_weight"
android:labelFor="@+id/weight"
android:text="@string/tdd_total"
android:textAppearance="@style/TextAppearance.AppCompat.Medium" />
<info.nightscout.androidaps.utils.ui.NumberPicker
android:id="@+id/profilehelper_tdd"
android:id="@+id/tdd"
android:layout_width="130dp"
android:layout_height="40dp" />
</TableRow>
<TableRow
android:id="@+id/profilehelper_weight_row"
android:id="@+id/weight_row"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center_vertical">
<TextView
android:id="@+id/profilehelper_weigth_label"
android:id="@+id/weigth_label"
android:layout_width="150dp"
android:layout_height="wrap_content"
android:layout_marginStart="10dp"
android:labelFor="@+id/profilehelper_weight"
android:labelFor="@+id/weight"
android:text="@string/weight_label"
android:textAppearance="@style/TextAppearance.AppCompat.Medium" />
<info.nightscout.androidaps.utils.ui.NumberPicker
android:id="@+id/profilehelper_weight"
android:id="@+id/weight"
android:layout_width="130dp"
android:layout_height="40dp" />
</TableRow>
<TableRow
android:id="@+id/profilehelper_basalpctfromtdd_row"
android:id="@+id/basalpctfromtdd_row"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center_vertical">
<TextView
android:id="@+id/profilehelper_basalpctfromtdd_label"
android:id="@+id/basalpctfromtdd_label"
android:layout_width="150dp"
android:layout_height="wrap_content"
android:layout_marginStart="10dp"
android:labelFor="@+id/profilehelper_basalpctfromtdd"
android:labelFor="@+id/basalpctfromtdd"
android:text="@string/basalpctfromtdd_label"
android:textAppearance="@style/TextAppearance.AppCompat.Medium" />
<info.nightscout.androidaps.utils.ui.NumberPicker
android:id="@+id/profilehelper_basalpctfromtdd"
android:id="@+id/basalpctfromtdd"
android:layout_width="130dp"
android:layout_height="40dp" />
@ -171,14 +163,14 @@
</TableLayout>
<TextView
android:id="@+id/profilehelper_tdds"
android:id="@+id/tdds"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="10dp"
android:textAppearance="@style/TextAppearance.AppCompat.Small" />
<info.nightscout.androidaps.utils.ui.SingleClickButton
android:id="@+id/profilehelper_copytolocalprofile"
android:id="@+id/copytolocalprofile"
style="?android:attr/buttonStyle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
@ -188,13 +180,13 @@
</LinearLayout>
<LinearLayout
android:id="@+id/profilehelper_current_profile"
android:id="@+id/current_profile"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
android:id="@+id/profilehelper_current_profile_text"
android:id="@+id/current_profile_text"
android:layout_width="150dp"
android:layout_height="wrap_content"
android:layout_marginStart="10dp"
@ -203,7 +195,7 @@
</LinearLayout>
<LinearLayout
android:id="@+id/profilehelper_available_profile"
android:id="@+id/available_profile"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
@ -217,7 +209,7 @@
app:boxStrokeColor="@color/white">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/profilehelper_available_profile_list"
android:id="@+id/available_profile_list"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="10dp"
@ -232,7 +224,7 @@
</LinearLayout>
<LinearLayout
android:id="@+id/profilehelper_profile_switch"
android:id="@+id/profile_switch"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
@ -246,7 +238,7 @@
app:boxStrokeColor="@color/white">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/profilehelper_profileswitch_list"
android:id="@+id/profileswitch_list"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="10dp"
@ -258,9 +250,16 @@
</com.google.android.material.textfield.TextInputLayout>
</LinearLayout>
<info.nightscout.androidaps.utils.ui.SingleClickButton
android:id="@+id/compareprofile"
style="?android:attr/buttonStyle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:drawableStart="@drawable/ic_compare_profiles"
android:text="@string/comapareprofile" />
</LinearLayout>
</ScrollView>

View file

@ -48,21 +48,21 @@
android:padding="5dp" />
<TextView
android:id="@+id/stats_tdds"
android:id="@+id/tdds"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="10dp"
android:textAppearance="@style/TextAppearance.AppCompat.Medium" />
<TextView
android:id="@+id/stats_tir"
android:id="@+id/tir"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="10dp"
android:textAppearance="@style/TextAppearance.AppCompat.Medium" />
<TextView
android:id="@+id/stats_activity"
android:id="@+id/activity"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="10dp"
@ -79,7 +79,7 @@
android:paddingBottom="8dp">
<Button
android:id="@+id/stats_reset"
android:id="@+id/reset"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:layout_marginEnd="8dp"

View file

@ -20,16 +20,16 @@
android:layout_height="match_parent">
<TextView
android:id="@+id/survey_id_label"
android:id="@+id/id_label"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="10dp"
android:labelFor="@+id/survey_id"
android:labelFor="@+id/id"
android:text="@string/id"
android:textAppearance="@style/TextAppearance.AppCompat.Medium" />
<TextView
android:id="@+id/survey_id"
android:id="@+id/id"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="10dp"
@ -43,16 +43,16 @@
android:layout_height="match_parent">
<TextView
android:id="@+id/survey_age_label"
android:id="@+id/age_label"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="10dp"
android:labelFor="@+id/survey_age"
android:labelFor="@+id/age"
android:text="@string/age"
android:textAppearance="@style/TextAppearance.AppCompat.Medium" />
<EditText
android:id="@+id/survey_age"
android:id="@+id/age"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="10dp"
@ -68,16 +68,16 @@
android:layout_height="match_parent">
<TextView
android:id="@+id/survey_weigth_label"
android:id="@+id/weigth_label"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="10dp"
android:labelFor="@+id/survey_weight"
android:labelFor="@+id/weight"
android:text="@string/weight_label"
android:textAppearance="@style/TextAppearance.AppCompat.Medium" />
<EditText
android:id="@+id/survey_weight"
android:id="@+id/weight"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="10dp"
@ -93,16 +93,16 @@
android:layout_height="match_parent">
<TextView
android:id="@+id/survey_TDD_label"
android:id="@+id/TDD_label"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="10dp"
android:labelFor="@+id/survey_weight"
android:labelFor="@+id/weight"
android:text="@string/tdd_total"
android:textAppearance="@style/TextAppearance.AppCompat.Medium" />
<EditText
android:id="@+id/survey_tdd"
android:id="@+id/tdd"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="10dp"
@ -128,7 +128,7 @@
android:textAppearance="@style/TextAppearance.AppCompat.Medium" />
<Spinner
android:id="@+id/survey_spinner"
android:id="@+id/spinner"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
@ -137,34 +137,34 @@
</LinearLayout>
<TextView
android:id="@+id/survey_tdds"
android:id="@+id/tdds"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="10dp"
android:textAppearance="@style/TextAppearance.AppCompat.Medium" />
<TextView
android:id="@+id/survey_tir"
android:id="@+id/tir"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="10dp"
android:textAppearance="@style/TextAppearance.AppCompat.Medium" />
<TextView
android:id="@+id/survey_activity"
android:id="@+id/activity"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="10dp"
android:textAppearance="@style/TextAppearance.AppCompat.Medium" />
<Button
android:id="@+id/survey_submit"
android:id="@+id/submit"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/submit" />
<Button
android:id="@+id/survey_profile"
android:id="@+id/profile"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/profile" />

View file

@ -17,7 +17,7 @@
<TextView
android:id="@+id/overview_eventdate"
android:id="@+id/eventdate"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
@ -25,7 +25,7 @@
android:text="2017/05/05" />
<TextView
android:id="@+id/overview_eventtime"
android:id="@+id/eventtime"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"

View file

@ -30,7 +30,7 @@
app:srcCompat="@drawable/ic_calibration" />
<TextView
android:id="@+id/actions_care_title"
android:id="@+id/title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
@ -51,7 +51,7 @@
android:padding="5dp" />
<LinearLayout
android:id="@+id/action_care_bg_layout"
android:id="@+id/bg_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
@ -68,12 +68,12 @@
android:textStyle="bold" />
<info.nightscout.androidaps.utils.ui.NumberPicker
android:id="@+id/overview_calibration_bg"
android:id="@+id/bg"
android:layout_width="130dp"
android:layout_height="40dp" />
<TextView
android:id="@+id/overview_calibration_units"
android:id="@+id/units"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
@ -86,7 +86,9 @@
</LinearLayout>
<include layout="@layout/okcancel" />
<include
android:id="@+id/okcancel"
layout="@layout/okcancel" />
</LinearLayout>

View file

@ -22,7 +22,7 @@
android:orientation="horizontal"
android:padding="5dp">
<ImageView
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:contentDescription="@string/carbs"
@ -55,20 +55,20 @@
android:padding="5dp">
<CheckBox
android:id="@+id/overview_carbs_activity_tt"
android:id="@+id/activity_tt"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_marginTop="5dp"
android:text="@string/start_activity_tt" />
<CheckBox
android:id="@+id/overview_carbs_eating_soon_tt"
android:id="@+id/eating_soon_tt"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:text="@string/start_eating_soon_tt" />
<CheckBox
android:id="@+id/overview_carbs_hypo_tt"
android:id="@+id/hypo_tt"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:text="@string/start_hypo_tt" />
@ -92,7 +92,7 @@
android:textStyle="bold" />
<info.nightscout.androidaps.utils.ui.MinutesNumberPicker
android:id="@+id/overview_carbs_time"
android:id="@+id/time"
android:layout_width="130dp"
android:layout_height="40dp" />
@ -126,7 +126,7 @@
android:textStyle="bold" />
<info.nightscout.androidaps.utils.ui.NumberPicker
android:id="@+id/overview_carbs_duration"
android:id="@+id/duration"
android:layout_width="130dp"
android:layout_height="40dp" />
@ -155,12 +155,12 @@
android:width="120dp"
android:paddingLeft="10dp"
android:paddingRight="10dp"
android:text="@string/overview_carbs_label"
android:text="@string/treatments_wizard_carbs_label"
android:textAppearance="@style/TextAppearance.AppCompat.Small"
android:textStyle="bold" />
<info.nightscout.androidaps.utils.ui.NumberPicker
android:id="@+id/overview_carbs_carbs"
android:id="@+id/carbs"
android:layout_width="130dp"
android:layout_height="40dp" />
@ -184,21 +184,21 @@
android:padding="5dp">
<Button
android:id="@+id/overview_carbs_plus1"
android:id="@+id/plus1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"
android:text="+5" />
<Button
android:id="@+id/overview_carbs_plus2"
android:id="@+id/plus2"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"
android:text="+10" />
<Button
android:id="@+id/overview_carbs_plus3"
android:id="@+id/plus3"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"
@ -206,11 +206,17 @@
</LinearLayout>
<include layout="@layout/notes" />
<include
android:id="@+id/notes_layout"
layout="@layout/notes" />
<include layout="@layout/datetime" />
<include
android:id="@+id/datetime"
layout="@layout/datetime" />
<include layout="@layout/okcancel" />
<include
android:id="@+id/okcancel"
layout="@layout/okcancel" />
</LinearLayout>

View file

@ -23,14 +23,14 @@
android:padding="5dp">
<ImageView
android:id="@+id/actions_care_icon"
android:id="@+id/icon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:contentDescription="@string/careportal_profileswitch"
app:srcCompat="@drawable/ic_actions_profileswitch" />
<TextView
android:id="@+id/actions_care_title"
android:id="@+id/title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
@ -50,7 +50,7 @@
android:padding="5dp" />
<RadioGroup
android:id="@+id/actions_care_bgsource"
android:id="@+id/bgsource"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
@ -58,21 +58,21 @@
android:orientation="horizontal">
<RadioButton
android:id="@+id/actions_care_meter"
android:id="@+id/meter"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:checked="false"
android:text="@string/careportal_newnstreatment_meter" />
<RadioButton
android:id="@+id/actions_care_sensor"
android:id="@+id/sensor"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:checked="true"
android:text="@string/careportal_newnstreatment_sensor" />
<RadioButton
android:id="@+id/actions_care_other"
android:id="@+id/other"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/careportal_newnstreatment_other" />
@ -80,7 +80,7 @@
</RadioGroup>
<LinearLayout
android:id="@+id/action_care_bg_layout"
android:id="@+id/bg_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
@ -96,12 +96,12 @@
android:textStyle="bold" />
<info.nightscout.androidaps.utils.ui.NumberPicker
android:id="@+id/actions_care_bg"
android:id="@+id/bg"
android:layout_width="130dp"
android:layout_height="40dp" />
<TextView
android:id="@+id/actions_care_bgunits"
android:id="@+id/bgunits"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
@ -115,7 +115,7 @@
</LinearLayout>
<LinearLayout
android:id="@+id/action_care_duration_layout"
android:id="@+id/duration_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
@ -131,7 +131,7 @@
android:textStyle="bold" />
<info.nightscout.androidaps.utils.ui.MinutesNumberPicker
android:id="@+id/actions_care_duration"
android:id="@+id/duration"
android:layout_width="130dp"
android:layout_height="40dp" />
@ -148,11 +148,17 @@
</LinearLayout>
<include layout="@layout/notes" />
<include
android:id="@+id/notes_layout"
layout="@layout/notes" />
<include layout="@layout/datetime" />
<include
android:id="@+id/datetime"
layout="@layout/datetime" />
<include layout="@layout/okcancel" />
<include
android:id="@+id/okcancel"
layout="@layout/okcancel" />
</LinearLayout>

View file

@ -63,7 +63,7 @@
android:textStyle="bold" />
<info.nightscout.androidaps.utils.ui.NumberPicker
android:id="@+id/actions_extendedbolus_insulin"
android:id="@+id/insulin"
android:layout_width="130dp"
android:layout_height="40dp" />
@ -96,7 +96,7 @@
android:textStyle="bold" />
<info.nightscout.androidaps.utils.ui.MinutesNumberPicker
android:id="@+id/actions_extendedbolus_duration"
android:id="@+id/duration"
android:layout_width="130dp"
android:layout_height="40dp" />
@ -114,7 +114,9 @@
</LinearLayout>
<include layout="@layout/okcancel" />
<include
android:id="@+id/okcancel"
layout="@layout/okcancel" />
</LinearLayout>

View file

@ -126,11 +126,17 @@
</LinearLayout>
<include layout="@layout/notes" />
<include
android:id="@+id/notes_layout"
layout="@layout/notes" />
<include layout="@layout/datetime" />
<include
android:id="@+id/datetime"
layout="@layout/datetime" />
<include layout="@layout/okcancel" />
<include
android:id="@+id/okcancel"
layout="@layout/okcancel" />
</LinearLayout>

View file

@ -51,18 +51,18 @@
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="5dp"
android:orientation="vertical">
android:orientation="vertical"
android:padding="5dp">
<CheckBox
android:id="@+id/overview_insulin_start_eating_soon_tt"
android:id="@+id/start_eating_soon_tt"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_marginTop="5dp"
android:text="@string/start_eating_soon_tt" />
<CheckBox
android:id="@+id/overview_insulin_record_only"
android:id="@+id/record_only"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:text="@string/do_not_bolus_record_only" />
@ -70,7 +70,7 @@
</LinearLayout>
<LinearLayout
android:id="@+id/overview_insulin_time_layout"
android:id="@+id/time_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
@ -86,7 +86,7 @@
android:textStyle="bold" />
<info.nightscout.androidaps.utils.ui.NumberPicker
android:id="@+id/overview_insulin_time"
android:id="@+id/time"
android:layout_width="130dp"
android:layout_height="40dp" />
@ -119,7 +119,7 @@
android:textStyle="bold" />
<info.nightscout.androidaps.utils.ui.NumberPicker
android:id="@+id/overview_insulin_amount"
android:id="@+id/amount"
android:layout_width="130dp"
android:layout_height="40dp" />
@ -139,25 +139,25 @@
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="5dp"
android:orientation="horizontal">
android:orientation="horizontal"
android:padding="5dp">
<Button
android:id="@+id/overview_insulin_plus05"
android:id="@+id/plus05"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"
android:text="+0.5" />
<Button
android:id="@+id/overview_insulin_plus10"
android:id="@+id/plus10"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"
android:text="+1.0" />
<Button
android:id="@+id/overview_insulin_plus20"
android:id="@+id/plus20"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"
@ -165,9 +165,13 @@
</LinearLayout>
<include layout="@layout/notes" />
<include
android:id="@+id/notes_layout"
layout="@layout/notes" />
<include layout="@layout/okcancel" />
<include
android:id="@+id/okcancel"
layout="@layout/okcancel" />
</LinearLayout>

View file

@ -64,7 +64,7 @@
android:textStyle="bold" />
<Spinner
android:id="@+id/overview_profileswitch_profile"
android:id="@+id/profile"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical" />
@ -72,7 +72,7 @@
</LinearLayout>
<LinearLayout
android:id="@+id/overview_profileswitch_reuselayout"
android:id="@+id/reuselayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
@ -90,10 +90,10 @@
android:textStyle="bold" />
<Button
android:id="@+id/overview_profileswitch_reusebutton"
android:id="@+id/reusebutton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/reuse" />
android:text="@string/reuse_profile_pct_hours" />
<TextView
android:layout_width="wrap_content"
@ -125,7 +125,7 @@
android:textStyle="bold" />
<info.nightscout.androidaps.utils.ui.MinutesNumberPicker
android:id="@+id/overview_profileswitch_duration"
android:id="@+id/duration"
android:layout_width="130dp"
android:layout_height="40dp" />
@ -159,7 +159,7 @@
android:textStyle="bold" />
<info.nightscout.androidaps.utils.ui.NumberPicker
android:id="@+id/overview_profileswitch_percentage"
android:id="@+id/percentage"
android:layout_width="130dp"
android:layout_height="40dp" />
@ -193,7 +193,7 @@
android:textStyle="bold" />
<info.nightscout.androidaps.utils.ui.NumberPicker
android:id="@+id/overview_profileswitch_timeshift"
android:id="@+id/timeshift"
android:layout_width="130dp"
android:layout_height="40dp" />
@ -210,11 +210,17 @@
</LinearLayout>
<include layout="@layout/notes" />
<include
android:id="@+id/notes_layout"
layout="@layout/notes" />
<include layout="@layout/datetime" />
<include
android:id="@+id/datetime"
layout="@layout/datetime" />
<include layout="@layout/okcancel" />
<include
android:id="@+id/okcancel"
layout="@layout/okcancel" />
</LinearLayout>

View file

@ -48,7 +48,7 @@
android:padding="5dp" />
<LinearLayout
android:id="@+id/actions_tempbasal_percent_layout"
android:id="@+id/percent_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
@ -64,7 +64,7 @@
android:textStyle="bold" />
<info.nightscout.androidaps.utils.ui.NumberPicker
android:id="@+id/actions_tempbasal_basalpercentinput"
android:id="@+id/basalpercentinput"
android:layout_width="130dp"
android:layout_height="40dp" />
@ -82,7 +82,7 @@
</LinearLayout>
<LinearLayout
android:id="@+id/actions_tempbasal_absolute_layout"
android:id="@+id/absolute_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
@ -98,7 +98,7 @@
android:textStyle="bold" />
<info.nightscout.androidaps.utils.ui.NumberPicker
android:id="@+id/actions_tempbasal_basalabsoluteinput"
android:id="@+id/basalabsoluteinput"
android:layout_width="130dp"
android:layout_height="40dp" />
@ -131,7 +131,7 @@
android:textStyle="bold" />
<info.nightscout.androidaps.utils.ui.MinutesNumberPicker
android:id="@+id/actions_tempbasal_duration"
android:id="@+id/duration"
android:layout_width="130dp"
android:layout_height="40dp" />
@ -148,7 +148,9 @@
</LinearLayout>
<include layout="@layout/okcancel" />
<include
android:id="@+id/okcancel"
layout="@layout/okcancel" />
</LinearLayout>

View file

@ -64,13 +64,13 @@
android:textStyle="bold" />
<info.nightscout.androidaps.utils.ui.NumberPicker
android:id="@+id/overview_temptarget_temptarget"
android:id="@+id/temptarget"
android:layout_width="130dp"
android:layout_height="40dp"
android:layout_gravity="center_vertical" />
<TextView
android:id="@+id/overview_temptarget_units"
android:id="@+id/units"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
@ -99,7 +99,7 @@
android:textStyle="bold" />
<info.nightscout.androidaps.utils.ui.MinutesNumberPicker
android:id="@+id/overview_temptarget_duration"
android:id="@+id/duration"
android:layout_width="130dp"
android:layout_height="40dp" />
@ -132,12 +132,12 @@
android:textStyle="bold" />
<Spinner
android:id="@+id/overview_temptarget_reason"
android:id="@+id/reason"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:paddingLeft="5dp"
android:paddingRight="5dp"
android:layout_gravity="center_vertical" />
android:paddingRight="5dp" />
</LinearLayout>
@ -149,67 +149,69 @@
android:orientation="horizontal">
<info.nightscout.androidaps.utils.ui.SingleClickButton
android:id="@+id/overview_temptarget_cancel"
android:id="@+id/target_cancel"
style="?android:attr/buttonStyle"
android:layout_width="0px"
android:layout_height="fill_parent"
android:layout_marginEnd="-4dp"
android:layout_weight="0.5"
android:paddingLeft="5dp"
android:paddingRight="5dp"
android:drawableTop="@drawable/ic_target_cancel"
android:paddingLeft="5dp"
android:paddingRight="5dp"
android:text="@string/cancel"
android:textAppearance="@style/TextAppearance.AppCompat.Medium"
android:textColor="@color/tempTargetConfirmation"
android:textAppearance="@style/TextAppearance.AppCompat.Medium"
android:textSize="11sp" />
<info.nightscout.androidaps.utils.ui.SingleClickButton
android:id="@+id/overview_temptarget_eating_soon"
android:id="@+id/eating_soon"
style="?android:attr/buttonStyle"
android:layout_width="0px"
android:layout_height="fill_parent"
android:layout_marginEnd="-4dp"
android:layout_weight="0.5"
android:paddingLeft="5dp"
android:paddingRight="5dp"
android:drawableTop="@drawable/ic_target_eatingsoon"
android:paddingLeft="5dp"
android:paddingRight="5dp"
android:text="@string/eatingsoon"
android:textColor="@color/carbs"
android:textAppearance="@style/TextAppearance.AppCompat.Medium"
android:textColor="@color/carbs"
android:textSize="11sp" />
<info.nightscout.androidaps.utils.ui.SingleClickButton
android:id="@+id/overview_temptarget_activity"
android:id="@+id/activity"
style="?android:attr/buttonStyle"
android:layout_width="0px"
android:layout_height="fill_parent"
android:layout_marginEnd="-4dp"
android:layout_weight="0.5"
android:drawableTop="@drawable/ic_target_activity"
android:paddingLeft="5dp"
android:paddingRight="5dp"
android:drawableTop="@drawable/ic_target_activity"
android:text="@string/activity"
android:textColor="@color/exercise"
android:textAppearance="@style/TextAppearance.AppCompat.Medium"
android:textColor="@color/exercise"
android:textSize="11sp" />
<info.nightscout.androidaps.utils.ui.SingleClickButton
android:id="@+id/overview_temptarget_hypo"
android:id="@+id/hypo"
style="?android:attr/buttonStyle"
android:layout_width="0px"
android:layout_height="fill_parent"
android:layout_weight="0.5"
android:drawableTop="@drawable/ic_target_hypo"
android:paddingLeft="5dp"
android:paddingRight="5dp"
android:drawableTop="@drawable/ic_target_hypo"
android:text="@string/hypo"
android:textColor="@color/low"
android:textAppearance="@style/TextAppearance.AppCompat.Medium"
android:textColor="@color/low"
android:textSize="11sp" />
</LinearLayout>
<include layout="@layout/okcancel" />
<include
android:id="@+id/okcancel"
layout="@layout/okcancel" />
</LinearLayout>

View file

@ -54,7 +54,7 @@
android:orientation="vertical">
<CheckBox
android:id="@+id/overview_treatment_record_only"
android:id="@+id/record_only"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_marginBottom="5dp"
@ -78,7 +78,7 @@
android:textStyle="bold" />
<info.nightscout.androidaps.utils.ui.NumberPicker
android:id="@+id/overview_treatment_insulin"
android:id="@+id/insulin"
android:layout_width="130dp"
android:layout_height="40dp" />
@ -106,12 +106,12 @@
android:layout_gravity="center_horizontal"
android:width="120dp"
android:padding="10dp"
android:text="@string/overview_carbs_label"
android:text="@string/treatments_wizard_carbs_label"
android:textAppearance="@style/TextAppearance.AppCompat.Small"
android:textStyle="bold" />
<info.nightscout.androidaps.utils.ui.NumberPicker
android:id="@+id/overview_treatment_carbs"
android:id="@+id/carbs"
android:layout_width="130dp"
android:layout_height="40dp" />
@ -128,7 +128,9 @@
</LinearLayout>
<include layout="@layout/okcancel" />
<include
android:id="@+id/okcancel"
layout="@layout/okcancel" />
</LinearLayout>

View file

@ -55,7 +55,7 @@
android:orientation="horizontal">
<CheckBox
android:id="@+id/treatments_wizard_bgcheckbox"
android:id="@+id/bgcheckbox"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:width="32dp"
@ -69,7 +69,7 @@
android:textAppearance="?android:attr/textAppearanceSmall" />
<CheckBox
android:id="@+id/treatments_wizard_ttcheckbox"
android:id="@+id/ttcheckbox"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:width="32dp"
@ -83,14 +83,14 @@
android:textAppearance="?android:attr/textAppearanceSmall" />
<TextView
android:id="@+id/treatments_wizard_bg"
android:id="@+id/bg"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:width="94dp"
android:textAppearance="?android:attr/textAppearanceSmall" />
<TextView
android:id="@+id/treatments_wizard_bginsulin"
android:id="@+id/bginsulin"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:width="50dp"
@ -105,7 +105,7 @@
android:orientation="horizontal">
<CheckBox
android:id="@+id/treatments_wizard_bgtrendcheckbox"
android:id="@+id/bgtrendcheckbox"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:width="32dp"
@ -119,14 +119,14 @@
android:textAppearance="?android:attr/textAppearanceSmall" />
<TextView
android:id="@+id/treatments_wizard_bgtrend"
android:id="@+id/bgtrend"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:width="94dp"
android:textAppearance="?android:attr/textAppearanceSmall" />
<TextView
android:id="@+id/treatments_wizard_bgtrendinsulin"
android:id="@+id/bgtrendinsulin"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:width="50dp"
@ -141,7 +141,7 @@
android:orientation="horizontal">
<CheckBox
android:id="@+id/treatments_wizard_cobcheckbox"
android:id="@+id/cobcheckbox"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:width="32dp"
@ -155,14 +155,14 @@
android:textAppearance="?android:attr/textAppearanceSmall" />
<TextView
android:id="@+id/treatments_wizard_cob"
android:id="@+id/cob"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:width="94dp"
android:textAppearance="?android:attr/textAppearanceSmall" />
<TextView
android:id="@+id/treatments_wizard_cobinsulin"
android:id="@+id/cobinsulin"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:width="50dp"
@ -177,7 +177,7 @@
android:orientation="horizontal">
<CheckBox
android:id="@+id/treatments_wizard_bolusiobcheckbox"
android:id="@+id/bolusiobcheckbox"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:width="32dp"
@ -197,7 +197,7 @@
android:textAppearance="?android:attr/textAppearanceSmall" />
<TextView
android:id="@+id/treatments_wizard_bolusiobinsulin"
android:id="@+id/bolusiobinsulin"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:width="50dp"
@ -212,7 +212,7 @@
android:orientation="horizontal">
<CheckBox
android:id="@+id/treatments_wizard_basaliobcheckbox"
android:id="@+id/basaliobcheckbox"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:width="32dp"
@ -232,7 +232,7 @@
android:textAppearance="?android:attr/textAppearanceSmall" />
<TextView
android:id="@+id/treatments_wizard_basaliobinsulin"
android:id="@+id/basaliobinsulin"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:width="50dp"
@ -247,7 +247,7 @@
android:orientation="horizontal">
<CheckBox
android:id="@+id/treatments_wizard_sbcheckbox"
android:id="@+id/sbcheckbox"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:width="32dp"
@ -261,14 +261,14 @@
android:textAppearance="?android:attr/textAppearanceSmall" />
<TextView
android:id="@+id/treatments_wizard_sb"
android:id="@+id/sb"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:width="94dp"
android:textAppearance="?android:attr/textAppearanceSmall" />
<TextView
android:id="@+id/treatments_wizard_sbinsulin"
android:id="@+id/sbinsulin"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:width="50dp"
@ -295,14 +295,14 @@
android:textAppearance="?android:attr/textAppearanceSmall" />
<TextView
android:id="@+id/treatments_wizard_carbs"
android:id="@+id/carbs"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:width="94dp"
android:textAppearance="?android:attr/textAppearanceSmall" />
<TextView
android:id="@+id/treatments_wizard_carbsinsulin"
android:id="@+id/carbsinsulin"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:width="50dp"
@ -335,7 +335,7 @@
android:textAppearance="?android:attr/textAppearanceSmall" />
<TextView
android:id="@+id/treatments_wizard_correctioninsulin"
android:id="@+id/correctioninsulin"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:width="50dp"
@ -362,7 +362,7 @@
android:textAppearance="?android:attr/textAppearanceSmall" />
<TextView
android:id="@+id/treatments_wizard_profile"
android:id="@+id/profile"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:width="94dp"
@ -395,7 +395,7 @@
android:textAppearance="?android:attr/textAppearanceSmall" />
<TextView
android:id="@+id/treatments_wizard_notes"
android:id="@+id/notes"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:width="94dp"
@ -435,7 +435,7 @@
android:textAppearance="?android:attr/textAppearanceSmall" />
<TextView
android:id="@+id/treatments_wizard_percent_used"
android:id="@+id/percent_used"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:width="50dp"
@ -470,7 +470,7 @@
android:textAppearance="?android:attr/textAppearanceSmall" />
<TextView
android:id="@+id/treatments_wizard_totalinsulin"
android:id="@+id/totalinsulin"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:width="50dp"

View file

@ -4,14 +4,14 @@
android:layout_height="match_parent">
<Spinner
android:id="@+id/nsprofile_spinner"
android:id="@+id/spinner"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginBottom="5dp" />
<Button
android:id="@+id/nsprofile_profileswitch"
android:id="@+id/profileswitch"
style="?android:attr/buttonStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
@ -20,6 +20,7 @@
android:textColor="@color/colorProfileSwitchButton" />
<include
android:id="@+id/profileviewer"
layout="@layout/profileviewer_fragment"
android:layout_width="match_parent"
android:layout_height="match_parent" />

View file

@ -58,7 +58,7 @@
android:layout_marginEnd="-4dp"
android:layout_weight="0.5"
android:drawableTop="@drawable/ic_cp_bolus_carbs"
android:text="@string/overview_carbs_label"
android:text="@string/treatments_wizard_carbs_label"
android:textColor="@color/colorCarbsButton"
android:textSize="10sp" />

View file

@ -10,7 +10,7 @@
android:orientation="vertical">
<TextView
android:id="@+id/profileview_invalidprofile"
android:id="@+id/invalidprofile"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_horizontal"
@ -21,7 +21,7 @@
android:visibility="gone" />
<TextView
android:id="@+id/profileview_noprofile"
android:id="@+id/noprofile"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_horizontal"
@ -48,20 +48,20 @@
<TextView
android:layout_width="5dp"
android:layout_height="wrap_content"
android:layout_weight="0"
android:gravity="center_horizontal"
android:layout_marginStart="2dp"
android:layout_marginEnd="2dp"
android:layout_weight="0"
android:gravity="center_horizontal"
android:text=":"
android:textSize="14sp" />
<TextView
android:id="@+id/profileview_activeprofile"
android:id="@+id/activeprofile"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="5dp"
android:layout_weight="1"
android:gravity="start"
android:layout_marginStart="5dp"
android:textColor="@android:color/white"
android:textSize="14sp" />
@ -78,7 +78,7 @@
android:visibility="gone" />
<LinearLayout
android:id="@+id/profileview_datelayout"
android:id="@+id/datelayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
@ -87,29 +87,29 @@
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginEnd="5dp"
android:layout_weight="2"
android:gravity="end"
android:layout_marginEnd="5dp"
android:text="@string/date"
android:textSize="14sp" />
<TextView
android:layout_width="5dp"
android:layout_height="wrap_content"
android:layout_weight="0"
android:gravity="center_horizontal"
android:layout_marginStart="2dp"
android:layout_marginEnd="2dp"
android:layout_weight="0"
android:gravity="center_horizontal"
android:text=":"
android:textSize="14sp" />
<TextView
android:id="@+id/profileview_date"
android:id="@+id/date"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="5dp"
android:layout_weight="1"
android:gravity="start"
android:layout_marginStart="5dp"
android:textColor="@android:color/white"
android:textSize="14sp" />
@ -132,29 +132,29 @@
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginEnd="5dp"
android:layout_weight="2"
android:gravity="end"
android:layout_marginEnd="5dp"
android:text="@string/units_label"
android:textSize="14sp" />
<TextView
android:layout_width="5dp"
android:layout_height="wrap_content"
android:layout_weight="0"
android:gravity="center_horizontal"
android:layout_marginStart="2dp"
android:layout_marginEnd="2dp"
android:layout_weight="0"
android:gravity="center_horizontal"
android:text=":"
android:textSize="14sp" />
<TextView
android:id="@+id/profileview_units"
android:id="@+id/units"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="5dp"
android:layout_weight="1"
android:gravity="start"
android:layout_marginStart="5dp"
android:textColor="@android:color/white"
android:textSize="14sp" />
@ -177,29 +177,29 @@
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginEnd="5dp"
android:layout_weight="2"
android:gravity="end"
android:layout_marginEnd="5dp"
android:text="@string/dia_label"
android:textSize="14sp" />
<TextView
android:layout_width="5dp"
android:layout_height="wrap_content"
android:layout_weight="0"
android:gravity="center_horizontal"
android:layout_marginStart="2dp"
android:layout_marginEnd="2dp"
android:layout_weight="0"
android:gravity="center_horizontal"
android:text=":"
android:textSize="14sp" />
<TextView
android:id="@+id/profileview_dia"
android:id="@+id/dia"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="5dp"
android:layout_weight="1"
android:gravity="start"
android:layout_marginStart="5dp"
android:textColor="@android:color/white"
android:textSize="14sp" />
@ -222,29 +222,29 @@
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginEnd="5dp"
android:layout_weight="2"
android:gravity="end"
android:layout_marginEnd="5dp"
android:text="@string/ic_label"
android:textSize="14sp" />
<TextView
android:layout_width="5dp"
android:layout_height="wrap_content"
android:layout_weight="0"
android:gravity="center_horizontal"
android:layout_marginStart="2dp"
android:layout_marginEnd="2dp"
android:layout_weight="0"
android:gravity="center_horizontal"
android:text=":"
android:textSize="14sp" />
<TextView
android:id="@+id/profileview_ic"
android:id="@+id/ic"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="5dp"
android:layout_weight="1"
android:gravity="start"
android:layout_marginStart="5dp"
android:textColor="@android:color/white"
android:textSize="14sp" />
@ -267,29 +267,29 @@
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginEnd="5dp"
android:layout_weight="2"
android:gravity="end"
android:layout_marginEnd="5dp"
android:text="@string/isf_label"
android:textSize="14sp" />
<TextView
android:layout_width="5dp"
android:layout_height="wrap_content"
android:layout_weight="0"
android:gravity="center_horizontal"
android:layout_marginStart="2dp"
android:layout_marginEnd="2dp"
android:layout_weight="0"
android:gravity="center_horizontal"
android:text=":"
android:textSize="14sp" />
<TextView
android:id="@+id/profileview_isf"
android:id="@+id/isf"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="5dp"
android:layout_weight="1"
android:gravity="start"
android:layout_marginStart="5dp"
android:textColor="@android:color/white"
android:textSize="14sp" />
@ -312,29 +312,29 @@
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginEnd="5dp"
android:layout_weight="2"
android:gravity="end"
android:layout_marginEnd="5dp"
android:text="@string/basal_label"
android:textSize="14sp" />
<TextView
android:layout_width="5dp"
android:layout_height="wrap_content"
android:layout_weight="0"
android:gravity="center_horizontal"
android:layout_marginStart="2dp"
android:layout_marginEnd="2dp"
android:layout_weight="0"
android:gravity="center_horizontal"
android:text=":"
android:textSize="14sp" />
<TextView
android:id="@+id/profileview_basal"
android:id="@+id/basal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="5dp"
android:layout_weight="1"
android:gravity="start"
android:layout_marginStart="5dp"
android:textColor="@android:color/white"
android:textSize="14sp" />
@ -348,29 +348,29 @@
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginEnd="5dp"
android:layout_weight="2"
android:gravity="end"
android:layout_marginEnd="5dp"
android:text=""
android:textSize="14sp" />
<TextView
android:layout_width="5dp"
android:layout_height="wrap_content"
android:layout_weight="0"
android:gravity="center_horizontal"
android:layout_marginStart="2dp"
android:layout_marginEnd="2dp"
android:layout_weight="0"
android:gravity="center_horizontal"
android:text=""
android:textSize="14sp" />
<TextView
android:id="@+id/profileview_basaltotal"
android:id="@+id/basaltotal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="17dp"
android:layout_weight="1"
android:gravity="start"
android:layout_marginStart="17dp"
android:textColor="@android:color/white"
android:textSize="14sp" />
@ -399,29 +399,29 @@
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginEnd="5dp"
android:layout_weight="2"
android:gravity="end"
android:layout_marginEnd="5dp"
android:text="@string/target_label"
android:textSize="14sp" />
<TextView
android:layout_width="5dp"
android:layout_height="wrap_content"
android:layout_weight="0"
android:gravity="center_horizontal"
android:layout_marginStart="2dp"
android:layout_marginEnd="2dp"
android:layout_weight="0"
android:gravity="center_horizontal"
android:text=":"
android:textSize="14sp" />
<TextView
android:id="@+id/profileview_target"
android:id="@+id/target"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="5dp"
android:layout_weight="1"
android:gravity="start"
android:layout_marginStart="5dp"
android:textColor="@android:color/white"
android:textSize="14sp" />
@ -437,14 +437,16 @@
android:background="@color/listdelimiter" />
<Button
android:id="@+id/profileview_reload"
android:id="@+id/reload"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:text="@string/reloadprofile"
android:visibility="gone" />
<include layout="@layout/close" />
<include
android:id="@+id/close_layout"
layout="@layout/close" />
</LinearLayout>

View file

@ -13,7 +13,6 @@
<string name="reset_db_confirm">Wil jy regtig die databasis herstel?</string>
<string name="nav_exit">Gaan uit</string>
<string name="ns_sync_use_absolute_title">Gebruik altyd absolute basale aardes</string>
<string name="alert_dialog_storage_permission_text">Herlaai jou foon of herlaai AndroidAPS met die stelsel instellings \nanders sal AndroidAPS nie geskiedenis hê nie! (Belangrik om te spoor en te verifieer dat die algoritmes korrek werk)!</string>
<string name="description_actions">\'n Paar knoppies vir vinnige algemene nutsfunskies</string>
<string name="description_config_builder">Gebruik vir die aktiewe plugins te konfigureer</string>
<string name="description_objectives">Onderrig program</string>
@ -383,7 +382,6 @@
<string name="activity_target">aktiwiteit doelwit</string>
<string name="hypo_duration">hipo duur</string>
<string name="hypo_target">hipo doelwit</string>
<string name="reuse">hergebruik</string>
<string name="wearcontrol_title">Kontroles van horlosie</string>
<string name="wearcontrol_summary">Stel tydeleike doelwitte en behandelings vanaf horlosie.</string>
<string name="food">Kos</string>
@ -474,7 +472,6 @@
<string name="enablesmbwithtemptarget_summary">Aktiveer SMB wanneer daar tydelike doelwitte aktief is (eetgou, oefen)</string>
<string name="enablesmbwithhightemptarget">Aktiveer SMB met hoë tydelike doelwitte</string>
<string name="overview_insulin_label">Insulien</string>
<string name="overview_carbs_label">Karbs</string>
<string name="overview_buttons_selection">Knoppies</string>
<string name="show_calibration_button_summary">Stuur \'n kalibrasie na xDrip+ of open G5 kalibrasie dialoog</string>
<string name="show_cgm_button_summary">Open xDrip +, terug knoppies keer terug na AAPS</string>
@ -638,7 +635,6 @@
<string name="nav_logsettings">Logboekinstellings</string>
<string name="resettodefaults">Herstel na verstek</string>
<string name="nsmalfunction">NSClient onklaar. Oorweeg om NS en NSClient te herlaai.</string>
<string name="versionavailable">Weergawe %1$s beskikbaar</string>
<string name="time_offset">Tyd verskil</string>
<string name="setupwizard_preferred_aps_mode">Verkose APS modus</string>
<string name="treatments_wizard_total_label">Totaal</string>
@ -786,8 +782,6 @@
<string name="copy_short">Kopieer</string>
<string name="addnew">Voeg nuwe by</string>
<string name="versionChecker">Weergawe Navolger</string>
<string name="signature_verifier">Handtekening verifieerder</string>
<string name="running_invalid_version">Die weergawe is ongeldig. Lus afgeskakel!</string>
<string name="old_version">ou weergawe</string>
<string name="very_old_version">baie ou weergawe</string>
<string name="twohours">2h</string>

View file

@ -53,16 +53,4 @@
<string name="notconnected">Няма връзка с Интернет!</string>
<string name="failedretrievetime">Не може да се вземе времето</string>
<string name="requirementnotmet">Задачите не са изпълнени</string>
<plurals name="objective_days">
<item quantity="one">%1$d дни</item>
<item quantity="other">%1$d дни</item>
</plurals>
<plurals name="objective_hours">
<item quantity="one">%1$d часа</item>
<item quantity="other">%1$d часа</item>
</plurals>
<plurals name="objective_minutes">
<item quantity="one">%1$d минута</item>
<item quantity="other">%1$d минути</item>
</plurals>
</resources>

View file

@ -14,7 +14,6 @@
<string name="reset_db_confirm">Сигурни ли сте че искате да изтриете всички данни?</string>
<string name="nav_exit">Изход</string>
<string name="ns_sync_use_absolute_title">Използване на абсолютни стойности за базал</string>
<string name="alert_dialog_storage_permission_text">Рестартирайте телефона или AndroidAPS от системните настройки или Android APS няма да записва проблемите (което е важно за работата на алгоритъма)!</string>
<string name="alert_dialog_permission_battery_optimization_failed">Вашият телефон не поддържа оптимизация на батерията - може да се появят проблеми!</string>
<string name="description_actions">Бутони за бърз достъп до основни функции</string>
<string name="description_config_builder">За конфигурация на активните плъгини</string>
@ -42,6 +41,7 @@
<string name="description_source_glimp">Получава данни за КЗ от Glimp.</string>
<string name="description_source_mm640g">Получават стойности на КЗ от 600SeriesAndroidUploader.</string>
<string name="description_source_ns_client">Изтегля стойности на КЗ от Nightscout</string>
<string name="description_source_xdrip">Получаване на данни за КЗ от xDrip+.</string>
<string name="description_treatments">Записва всички процедури, които са били направени</string>
<string name="description_wear">Наблюдавайте и контролирайте AndroidAPS, от вашия WearOS часовник.</string>
<string name="description_xdrip_status_line">Покажи информация за вашия APS на xDrip + циферблат на часовник.</string>
@ -118,6 +118,7 @@
<string name="changeyourinput">Променете данните!</string>
<string name="configbuilder_bgsource">Източник на данни за КЗ</string>
<string name="configbuilder_bgsource_description">От къде трябва да AndroidAPS да си взима данни?</string>
<string name="xdrip">xDrip+</string>
<string name="apsmode_title">APS режим</string>
<string name="closedloop">Затворен кръг</string>
<string name="openloop">Отворен кръг</string>
@ -166,7 +167,6 @@
<string name="old_master_password">Стара главна парола</string>
<string name="different_password_used">Този файл е експортиран и шифрован с различна главна парола. Използвайте старата главна парола за декриптиране на файла.</string>
<string name="master_password_will_be_replaced">Вашата главна парола ЩЕ БЪДЕ ПОДМЕНЕНА с друга от импортирания файл!</string>
<string name="preferences_import_list_title">Изберете файл</string>
<string name="check_preferences_before_import">Моля, проверете насстройките преди импортирането:</string>
<string name="check_preferences_cannot_import">Настройите не могат да бъдат импортирани!</string>
<string name="check_preferences_dangerous_import">Настройите не трябва да бъдат импортирани! (опасни)</string>
@ -174,39 +174,6 @@
<string name="check_preferences_details_title">Подробности за проблеми с импорта</string>
<string name="check_preferences_import_btn">Импорт</string>
<string name="check_preferences_import_anyway_btn">Импортирай все пак (ОПАСНО!)</string>
<string name="metadata_warning_different_flavour">Настройките са създадени с различен вариант на AAPS (%1$s) докато Вие сте с: %2$s.\n\nНякои настройки може да липсват или са невалидни!След импортиране, моля, проверете и актуализирайте своите настройки.</string>
<string name="metadata_warning_different_device">Настройките са създадени на друго устройство. Това е ОК, ако импортирате от по-стар/различен телефон, но се уверете, че тези настройки са правилни!</string>
<string name="metadata_warning_outdated_format">Използвате остарял формат от старите версии на AAPS, който не е защитен! Използвайте го само като крайна мярка, или експортирайте в JSON формат.</string>
<string name="metadata_warning_old_export">Импортираните настройки са стари %1$s дни! Може би имате по-актуални настройки или сте избрали грешен файл? Не забравяйте да експортирате настройки редовно!</string>
<string name="metadata_warning_date_format">Невалиден формат на датата!</string>
<string name="metadata_warning_different_version">Настройки от различна под-версия на приложението. Това е ОК, ако импортирате след надстройка, но проверете след вноса, ако настройки са все още правилни!</string>
<string name="metadata_urgent_different_version">Настройки от различна главна версия на приложението. Основните версии се различават значително и могат да имат несъвместими настройки! Уверете се, че след импорт, че преференциите са все още правилни!</string>
<string name="metadata_label_format">Формат на файла</string>
<string name="metadata_label_created_at">Създаден на</string>
<string name="metadata_label_aaps_version">Версия на AAPS</string>
<string name="metadata_label_aaps_flavour">вариант</string>
<string name="metadata_label_device_name">Име на пациента</string>
<string name="metadata_label_device_model">Модел на телефона:</string>
<string name="metadata_label_encryption">Криптиране</string>
<string name="metadata_format_old">Стар формат</string>
<string name="metadata_format_new">Нов формат</string>
<string name="metadata_format_debug">Нов формат (незащитен)</string>
<string name="metadata_format_other">Непознат формат</string>
<string name="prefdecrypt_settings_tampered">Файлът с настройки е преправян</string>
<string name="prefdecrypt_settings_secure">Файлът с настройки е сигурен</string>
<string name="prefdecrypt_settings_unencrypted">Използване на нешифровани настройки е рисково</string>
<string name="prefdecrypt_wrong_json">Грешка във формат JSON, липсва поле (формат, съдържание, метаданни или сигурност)</string>
<string name="prefdecrypt_wrong_password">Грешка при декриптиране, грешна парола</string>
<string name="prefdecrypt_issue_missing_file_hash">Контролна сума (hash) липсва, не може да се провери автентичността на настройките!</string>
<string name="prefdecrypt_issue_modified">Файлът е бил модифициран след експорт!</string>
<string name="prefdecrypt_issue_parsing">Грешка при декриптиране, възстановяването неуспешно!</string>
<string name="prefdecrypt_issue_wrong_pass">Грешка при декриптиране, грешна парола или файлът с настройки е модифициран! Възможно е импортираният файл да е експортиран с различна парола.</string>
<string name="prefdecrypt_issue_wrong_format">Липсва конфигурация на шифроване, форматът на настройките е невалиден!</string>
<string name="prefdecrypt_issue_wrong_algorithm">Неподдържан или непотвърден алгоритъм за криптиране!</string>
<string name="exported_ago" comment="at placeholder we add pluralized number of hours/minutes">от преди %1$s</string>
<string name="exported_at" comment="at placeholder we add export date">от %1$s</string>
<string name="exported_less_than_hour_ago">от преди по-малко от час</string>
<string name="in_directory" comment="placeholder is for exported file path">в директория: %1$s</string>
<string name="end_user_license_agreement">Лицензионно споразумение с краен потребител</string>
<string name="end_user_license_agreement_text">НЕ ТРЯБВА ДА СЕ ИЗПОЛЗВА ЗА ВЗЕМАНЕ НА МЕДИЦИНСКИ РЕШЕНИЯ. НЯМА ГАРАНЦИЯ ЗА ПРОГРАМАТА, ДО СТЕПЕНТА, ПОЗВОЛЕНА ОТ ПРИЛОЖИМОТО ПРАВО. ОСВЕН КОГАТО Е ПОСОЧЕНО ДРУГО В ПИСМЕН ВИД, ПРИТЕЖАТЕЛИТЕ НА АВТОРСКОТО ПРАВО И/ИЛИ ДРУГИ СТРАНИ ПРЕДОСТАВЯТ ПРОГРАМАТА \"КАКТО Е\", БЕЗ ГАРАНЦИИ ОТ ВСЯКАКЪВ ВИД, ИЗРАЗЕНИ ИЛИ ПОДРАЗБИРАЩИ СЕ, ВКЛЮЧИТЕЛНО, НО НЕ САМО, ПОДРАЗБИРАЩИ СЕ ГАРАНЦИИ ЗА ПРОДАВАЕМОСТ И ПРИГОДНОСТ ЗА КОНКРЕТНА ЦЕЛ. ЦЕЛИЯ РИСК ПО ОТНОШЕНИЕ НА КАЧЕСТВОТО И ЕФЕКТИВНОСТТА НА ПРОГРАМАТА Е САМО ВАШ. АКО ПРОГРАМАТА НЕ СРАБОТИ, ВИЕ ПОЕМАТЕ ВСИЧКИ НЕОБХОДИМИ РАЗХОДИ ЗА ОБСЛУЖВАНЕ, РЕМОНТ ИЛИ КОРЕКЦИЯ.</string>
<string name="end_user_license_agreement_i_understand">Разбирам и приемам</string>
@ -283,6 +250,8 @@
<string name="mealbolus">Хранене</string>
<string name="correctionbous">Корекция</string>
<string name="actions">Действия</string>
<string name="ns_upload_only">(ОПАСНО ЗА ДЕАКТИВИРАНЕ) Само качвай данни в NS</string>
<string name="ns_upload_only_summary">Само каване в NS (изключи синхронизиране). Може да спре данните за КЗ, освен ако не е избран локален източник като xDrip +. Не е ефективно за профила, освен ако не ползвате NS профил.\n!!! ВНИМАНИЕ !!! Деактивирането на тази опция може да причини проблеми и предозиране на инсулин, ако някой от Вашите компоненти (AAPS, NS, xDrip +) е неправилно конфигуриран. Внимателно гледайте, ако данните, показани от AAPS съответстват на състоянието на помпата!</string>
<string name="pumpNotInitialized">Помпата не е инициализирана!</string>
<string name="primefill">Пълнене на сет</string>
<string name="fillwarning">Моля, уверете се, че стойността съответсва на вашият сет! Този инсулин не се включва в IOB!</string>
@ -337,6 +306,7 @@
<string name="smscommunicator_shortname">SMS</string>
<string name="short_tabtitles">Използвай къси имена</string>
<string name="always_use_shortavg">Използвай краткоср. Δ вместо разлика от последната КЗ</string>
<string name="always_use_shortavg_summary">Полезно при данни за КЗ с много шум.</string>
<string name="profile">Профил</string>
<string name="openapsama_max_daily_safety_multiplier_summary">По подразбиране: 3 Това е основен параметър в сигурността на OpenAPS. Той ограничава максималният базал да бъде 3 пъти най-голямата стойност от дневните базали. Не би трябвало да има нужа от промяна, защото от опит сме проверили, че максимумите са “3x от най-високия дневен; 4x от текущия”.</string>
<string name="openapsama_current_basal_safety_multiplier_summary">По подразбиране: 4\nТова е другият основен параметър в сигурността на OpenAPS, и другата половина от \"3x от най-високия дневен; 4x от текущия\". Това означава, че независимо от макс базал настроен в помпата, стойността на базала не може да е по-висока от тази стойност умножена по стойността на базала за текущият час от денонощието. Това е с цел да предпази от прекалено високи стойности на максималния базал преди да разбират как работи алгоритъма. Повечето от Вас няма да имат нужда от смяна на тази стойност и могат да се справят с настойки на другите параметри.</string>
@ -350,6 +320,9 @@
<string name="smscommunicator_invalidphonennumber">Грешен тел номер за SMS</string>
<string name="overview_calibration">Калибрация</string>
<string name="xdripnotinstalled">xDrip+ не е инсталиран</string>
<string name="calibrationsent">Калибрацията е изпратена към xDrip+</string>
<string name="smscommunicator_calibrationsent">Калибрацията е изпратена. Получаването трябва да бъде разрешено в xDrip +.</string>
<string name="smscommunicator_calibrationfailed">xDrip+ не получава калибрации</string>
<string name="pumpsuspended">Помпата е спряна</string>
<string name="executing">Изпълнява</string>
<string name="virtualpump_settings">Настойки Виртуална Помпа</string>
@ -452,6 +425,8 @@
<string name="nav_about">За приложението</string>
<string name="smscommunicator_missingsmspermission">SMS команда забранена</string>
<string name="smscommunicator_missingphonestatepermission">Липсва разрешение до данни от телефона</string>
<string name="xdripstatus_settings">xDrip+ статус (часовник)</string>
<string name="xdripstatus">xDrip+ линия със статута (часовник)</string>
<string name="xdripstatus_shortname">xds</string>
<string name="wear_showbgi_title">Показвай BGI</string>
<string name="wear_showbgi_summary">Добави BGI към статуса</string>
@ -494,6 +469,7 @@
<string name="mdtp_cancel">Откажи</string>
<string name="notloadedplugins">Не всички профили са заредени!</string>
<string name="valuesnotstored">Стойностите не са запазени!</string>
<string name="ns_localbroadcasts">Активира предаване на данни към други приложения (като xDrip+). Не активирайте, ако имате повече от един AAPS или имате инсталиран NSClient!</string>
<string name="ns_localbroadcasts_title">Разреши локално предаване на данни</string>
<string name="careportal_newnstreatment_duration_min_label">Продължителност [мин.]</string>
<string name="openapssmb">OpenAPS SMB</string>
@ -519,7 +495,6 @@
<string name="activity_target">Целева КЗ при физ. активност</string>
<string name="hypo_duration">Продължителност на вр. цел при хипоглекимия</string>
<string name="hypo_target">Временна цел при хипоглекимия</string>
<string name="reuse">отново</string>
<string name="wearcontrol_title">Контролиране от часовник</string>
<string name="wearcontrol_summary">Задаване временни цели и въвеждане Лечения от часовник Android wear</string>
<string name="food">Храна</string>
@ -618,7 +593,6 @@
<string name="enablesmbwithhightemptarget">Разреши SMB с по-високи временни цели на КЗ</string>
<string name="enablesmbwithhightemptarget_summary">Активирайте SMB, когато има висока временна цел (опитайте с над 100 мг/дл или 5,5 ммол/л)</string>
<string name="overview_insulin_label">Инсулин</string>
<string name="overview_carbs_label">Въглехидрати</string>
<string name="overview_buttons_selection">Бутони</string>
<string name="show_calibration_button_summary">Изпраща калибрация към xDrip+ или отваря G5 диалог за калибрация</string>
<string name="show_cgm_button_summary">Отваря xDrip+, бутонът назад връща към AAPS</string>
@ -802,7 +776,6 @@
<string name="nav_logsettings">Настройки на логовете</string>
<string name="resettodefaults">Възстанови настройките по подразбиране</string>
<string name="nsmalfunction">Грешка в NSClient. Рестартирайте Nightscout и NSClient</string>
<string name="versionavailable">Има налично обновяване до версия %1$s </string>
<string name="time_offset">времево отместване</string>
<string name="setupwizard_preferred_aps_mode">Предпочитаният режим на APS</string>
<string name="treatments_wizard_total_label">Общо</string>
@ -959,8 +932,6 @@
<string name="copy_short">КОП</string>
<string name="addnew">Добави нов</string>
<string name="versionChecker">Проверка на версията</string>
<string name="signature_verifier">Проверка на подпис</string>
<string name="running_invalid_version">Използвате грешна версия. APS е изключен!</string>
<string name="old_version">стара версия</string>
<string name="very_old_version">много стара версия</string>
<string name="new_version_warning">Има нова версия от най-малко %1$d дни! Ще спре подаването на инсулин след %2$d дни, цикълът ще бъде изключен след %3$d дни</string>
@ -1164,6 +1135,7 @@
<string name="donate_your_data_to_science">Дарете данните си на науката.</string>
<string name="open_humans_short">OH</string>
<string name="you_have_been_signed_out_of_open_humans">Излязохте от \"Open Humans\".</string>
<string name="click_here_to_sign_in_again_if_this_wasnt_on_purpose">Натиснете тук за да влезете отново, ако това не е било нарочно.</string>
<string name="only_upload_if_connected_to_wifi">Качване, само при свързано WiFi</string>
<string name="only_upload_if_charging">Качване само при зареждане</string>
<string name="worker_state">Статус: %s</string>
@ -1175,6 +1147,7 @@
<string name="cta_dont_kill_my_app_info">Не убивай приложението?</string>
<string name="alarm">Аларма</string>
<string name="smscommunicator_report_pump_ureachable_summary">Изпращане на SMS, ако помпата е недостъпна</string>
<string name="smscommunicator_pump_ureachable">Докладвай недостъпна помпа</string>
<string name="advisoralarm">Алармата, когато е време за хранене.</string>
<string name="alarminxmin">Сларма след %1$d мин</string>
<string name="bolusadvisor">Съветник на болус</string>
@ -1183,4 +1156,6 @@
<string name="enablebolusadvisor_summary">Използвай напомняне за старт на хранене вместо съветника по време на висока гликемия (\"пре-болус\")</string>
<string name="time_to_eat">Време за ядене!\nИзпълнете болус съветника и направете изчисления отново.</string>
<string name="timetoeat">Време е за ядене</string>
<string name="fabric_upload_disabled">Качването на данни за проблеми е забранено!(Fabric)</string>
<string name="graph_menu_divider_header">Графика</string>
</resources>

View file

@ -53,22 +53,4 @@
<string name="notconnected">Chybí připojení k internetu</string>
<string name="failedretrievetime">Nepodařilo se načíst čas</string>
<string name="requirementnotmet">Požadavky cíle nejsou splněny</string>
<plurals name="objective_days">
<item quantity="one">%1$d den</item>
<item quantity="few">%1$d dnů</item>
<item quantity="many">%1$d dnů</item>
<item quantity="other">%1$d dnů</item>
</plurals>
<plurals name="objective_hours">
<item quantity="one">%1$d hodina</item>
<item quantity="few">%1$d hodin</item>
<item quantity="many">%1$d hodin</item>
<item quantity="other">%1$d hodin</item>
</plurals>
<plurals name="objective_minutes">
<item quantity="one">%1$d minuta</item>
<item quantity="few">%1$d minut</item>
<item quantity="many">%1$d minut</item>
<item quantity="other">%1$d minut</item>
</plurals>
</resources>

View file

@ -14,7 +14,6 @@
<string name="reset_db_confirm">Opravdu resetovat všechny databáze?</string>
<string name="nav_exit">Konec</string>
<string name="ns_sync_use_absolute_title">Vždy použít absolutní hodnoty bazálu</string>
<string name="alert_dialog_storage_permission_text">Prosím restartujte Váš telefon nebo restartujte AndroidAPS z nastavení systému\njinak nebudou zaznamenány ladící informace (důležité pro sledování a kontrolu, zda algoritmus pracuje správně)!</string>
<string name="alert_dialog_permission_battery_optimization_failed">Toto zařízení zřejmě neumožňuje vypnout optimalizaci baterie - může docházet k problémům s výkonem.</string>
<string name="description_actions">Tlačítka k běžně používaným úkonům</string>
<string name="description_config_builder">Nastavení konfigurace (povolování součástí systému)</string>
@ -168,7 +167,6 @@
<string name="old_master_password">Původní hlavní heslo</string>
<string name="different_password_used">Tento soubor byl exportován a zašifrován jiným hlavním heslem. Chcete-li dešifrovat soubor, zadejte staré hlavní heslo.</string>
<string name="master_password_will_be_replaced">V důsledku úspěšného importu bude aktuální hlavní heslo NAHRAZENO tímto starým hlavním heslem!</string>
<string name="preferences_import_list_title">Vyberte soubor, který chcete importovat</string>
<string name="check_preferences_before_import">Před importem zkontrolujte předvolby:</string>
<string name="check_preferences_cannot_import">Předvolby nelze importovat!</string>
<string name="check_preferences_dangerous_import">Předvolby by neměly být importovány!</string>
@ -176,39 +174,6 @@
<string name="check_preferences_details_title">Detaily problémů importu</string>
<string name="check_preferences_import_btn">Import</string>
<string name="check_preferences_import_anyway_btn">Přesto importovat (NEBEZPEČNÉ!)</string>
<string name="metadata_warning_different_flavour">Předvolby byly vytvořeny s jinou variantou AAPS (%1$s) a když máte: %2$s.\n\nNěkterá nastavení mohou chybět nebo mohou být neplatná - po importu zkontrolujte konfiguraci a aktualizujte předvolby.</string>
<string name="metadata_warning_different_device">Předvolby byly vytvořeny na jiném zařízení. Je to v pořádku, pokud importujete ze staršího/jiného telefonu, ale ujistěte se, že importované předvolby jsou správné!</string>
<string name="metadata_warning_outdated_format">Používáte zastaralý formát od starých verzí AAPS, který není zabezpečený! Použijte jej pouze jako poslední možnost, pokud nemáte exporty v aktuálním formátu JSON.</string>
<string name="metadata_warning_old_export">Importované předvolby jsou staré již %1$s dní! Možná máte aktualnější export nebo jste vybral špatný soubor? Nezapomeňte předvolby pravidelně exportovat!</string>
<string name="metadata_warning_date_format">Neplatný formát datumu!</string>
<string name="metadata_warning_different_version">Nastavení z odlišné nižší verze aplikace. Je to v pořádku, pokud importujete po aktualizaci, po importu však zkontrolujte, zda jsou nastavení stálé správná!</string>
<string name="metadata_urgent_different_version">Nastavení z odlišné hlavní verze aplikace. Hlavní verze se výrazně liší a nemusejí mít kompatibilní nastavení. Po importu zkontrolujte, zda jsou nastavení stálé správná!</string>
<string name="metadata_label_format">Formát souboru</string>
<string name="metadata_label_created_at">Vytvořeno</string>
<string name="metadata_label_aaps_version">Verze AAPS</string>
<string name="metadata_label_aaps_flavour">Varianta sestavení</string>
<string name="metadata_label_device_name">Jméno pacienta použité při exportu</string>
<string name="metadata_label_device_model">Model zaříení použitý při exportu</string>
<string name="metadata_label_encryption">Šifrování souboru</string>
<string name="metadata_format_old">Starý formát exportu</string>
<string name="metadata_format_new">Nový zašifrovaný formát</string>
<string name="metadata_format_debug">Nový formát pro ladění (nešifrovaný)</string>
<string name="metadata_format_other">Neznámý formát souboru</string>
<string name="prefdecrypt_settings_tampered">Soubor s nastavením poškozen</string>
<string name="prefdecrypt_settings_secure">Soubor nastavení je zabezpečen</string>
<string name="prefdecrypt_settings_unencrypted">Použití nezabezpečeného, nešifrovaného formátu nastavení</string>
<string name="prefdecrypt_wrong_json">Chyba formátu JSON, chybí povinné pole (formát, obsah, metadata nebo zabezpečení)</string>
<string name="prefdecrypt_wrong_password">Chyba dešifrování, dané heslo nemůže dešifrovat soubor</string>
<string name="prefdecrypt_issue_missing_file_hash">Chybí kontrolní součet souboru (hash), nelze ověřit pravost nastavení!</string>
<string name="prefdecrypt_issue_modified">Soubor byl po exportu změněn!</string>
<string name="prefdecrypt_issue_parsing">Chyba dešifrování, analýza předvoleb se nezdařila!</string>
<string name="prefdecrypt_issue_wrong_pass">Chyba dešifrování, zadané heslo je neplatné, nebo byl soubor nastavení změněn! Může se stát, že importovaný soubor byl exportován s jiným hlavním heslem.</string>
<string name="prefdecrypt_issue_wrong_format">Chybí konfigurace šifrování, formát nastavení je neplatný!</string>
<string name="prefdecrypt_issue_wrong_algorithm">Nepodporovaný nebo neurčený šifrovací algoritmus!</string>
<string name="exported_ago" comment="at placeholder we add pluralized number of hours/minutes">exportováno před %1$s</string>
<string name="exported_at" comment="at placeholder we add export date">exportováno v %1$s</string>
<string name="exported_less_than_hour_ago">exportováno před méně než hodinou</string>
<string name="in_directory" comment="placeholder is for exported file path">v adresáři: %1$s</string>
<string name="end_user_license_agreement">Licenční ujednání</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">ROZUMÍM A POTVRZUJI</string>
@ -530,7 +495,7 @@
<string name="activity_target">Cíl při aktivitě</string>
<string name="hypo_duration">Trvání dočasného cíle při hypoglykémii</string>
<string name="hypo_target">Cílová glykémie při hypoglykémii</string>
<string name="reuse">znovu použít</string>
<string name="reuse_profile_pct_hours">Znovu použít %1$d%% %2$dh</string>
<string name="wearcontrol_title">Řízení z hodinek Wear</string>
<string name="wearcontrol_summary">Nastavování dočasných cílů a vkládání ošetření na hodinkách Wear.</string>
<string name="food">Jídlo</string>
@ -629,7 +594,6 @@
<string name="enablesmbwithhightemptarget">Povolit SMB s vysokými dočasnými cíli</string>
<string name="enablesmbwithhightemptarget_summary">Povolit SMB, je-li aktivní vysoký cíl (cvičení, vyšší než 100 mg/dl nebo 5,5 mmol/l)</string>
<string name="overview_insulin_label">Inzulín</string>
<string name="overview_carbs_label">Sacharidy</string>
<string name="overview_buttons_selection">Tlačítka</string>
<string name="show_calibration_button_summary">Odeslání kalibrace do xDripu+, nebo otevření kalibračního dialogu na G5</string>
<string name="show_cgm_button_summary">Otevře xDrip+, tlačítko zpět vrátí do AndroidAPS</string>
@ -813,7 +777,6 @@
<string name="nav_logsettings">Nastavení logování</string>
<string name="resettodefaults">Obnovit výchozí</string>
<string name="nsmalfunction">Chyba NSClienta. Zvažte restart NS a NSClienta.</string>
<string name="versionavailable">Verze %1$s je k dispozici</string>
<string name="time_offset">Časový posun</string>
<string name="setupwizard_preferred_aps_mode">Preferovaný režim APS</string>
<string name="treatments_wizard_total_label">Výsledek</string>
@ -970,8 +933,6 @@
<string name="copy_short">KOPIE</string>
<string name="addnew">Přidat nový</string>
<string name="versionChecker">Kontrola verze</string>
<string name="signature_verifier">Ověření podpisu</string>
<string name="running_invalid_version">Zjistili jsme, že používáte neplatnou verzi, smyčka zakázána!</string>
<string name="old_version">stará verze</string>
<string name="very_old_version">velmi stará verze</string>
<string name="new_version_warning">Nová verze je dostupná minimálně %1$d dní! Přepnutí na ochranu před nízkou glykémií po %2$d dnech, vypnutí smyčky po %3$d dnech</string>

View file

@ -54,16 +54,4 @@ die Formel maxIOB = durchschnittlicher Essensbolus + 3 x höchste Basalrate</str
<string name="notconnected">Keine Verbindung zum Internet</string>
<string name="failedretrievetime">Abruf der Uhrzeit fehlgeschlagen</string>
<string name="requirementnotmet">Anforderungen des Zieles nicht erfüllt</string>
<plurals name="objective_days">
<item quantity="one">%1$d Tag</item>
<item quantity="other">%1$d Tage</item>
</plurals>
<plurals name="objective_hours">
<item quantity="one">%1$d Stunde</item>
<item quantity="other">%1$d Stunden</item>
</plurals>
<plurals name="objective_minutes">
<item quantity="one">%1$d Minute</item>
<item quantity="other">%1$d Minuten</item>
</plurals>
</resources>

View file

@ -14,7 +14,6 @@
<string name="reset_db_confirm">Möchtest du die Datenbank wirklich zurücksetzen?</string>
<string name="nav_exit">Schließen</string>
<string name="ns_sync_use_absolute_title">Verwende absolute statt prozentuale Basalwerte beim Upload zu NightScout.</string>
<string name="alert_dialog_storage_permission_text">Bitte starte dein Telefon neu oder starte AndroidAPS in den System-Einstellungen neu.\nAndernfalls wird AndroidAPS nichts protokollieren (wichtig zum Nachverfolgen und Verifizieren, dass der Algorithmus korrekt funktioniert)!</string>
<string name="alert_dialog_permission_battery_optimization_failed">Dieses Gerät scheint keine Deaktivierung der Energieoptimierung zu unterstützen - das könnte zu Leistungsproblemen führen.</string>
<string name="description_actions">Einige Schaltflächen, um auf häufig verwendete Funktionen zugreifen zu können.</string>
<string name="description_config_builder">Dient zum Konfigurieren der aktiven Plugins</string>
@ -168,7 +167,6 @@
<string name="old_master_password">Altes Master-Passwort</string>
<string name="different_password_used">Diese Datei wurde mit einem anderen Master-Passwort exportiert und verschlüsselt. Gib zum Entschlüsseln Dein altes Master-Passwort ein.</string>
<string name="master_password_will_be_replaced">Der erfolgreiche Import führt dazu, dass Dein aktuelles Master-Passwort durch das alte Master-Passwort ERSETZT wird!</string>
<string name="preferences_import_list_title">Wähle die zu importierende Datei</string>
<string name="check_preferences_before_import">Überprüfe die Einstellungen vor dem Import:</string>
<string name="check_preferences_cannot_import">Einstellungen können nicht importiert werden!</string>
<string name="check_preferences_dangerous_import">Einstellungen sollten nicht importiert werden!</string>
@ -176,39 +174,6 @@
<string name="check_preferences_details_title">Details zu den Import-Problemen</string>
<string name="check_preferences_import_btn">Importieren</string>
<string name="check_preferences_import_anyway_btn">Trotzdem importieren (GEFÄHRLICH!)</string>
<string name="metadata_warning_different_flavour">Einstellungen wurden mit einer anderen Variante von AAPS erstellt (%1$s). Du nutzt: %2$s.\n\nEinige Einstellungen können fehlen oder ungültig sein - überprüfe und aktualisiere Deine Einstellungen nach dem Import .</string>
<string name="metadata_warning_different_device">Einstellungen wurden auf einem anderen Gerät erstellt. Das ist OK, wenn Du von einem älteren/anderen Handy importierst. Stelle aber sicher, dass die importierten Einstellungen korrekt sind!</string>
<string name="metadata_warning_outdated_format">Du verwendest das veraltete Format einer alten AAPS-Version, das nicht sicher ist! Verwende dieses nur als letzte Möglichkeit, wenn Du keinen Export im aktuellen JSON-Format hast.</string>
<string name="metadata_warning_old_export">Die importierten Einstellungen sind bereits %1$s Tage alt! Hast Du aktuellere Einstellungen oder evtl. die falsche Datei gewählt? Denke daran, die Einstellungen regelmäßig zu exportieren.</string>
<string name="metadata_warning_date_format">Ungültiges Datums-/Zeitformat!</string>
<string name="metadata_warning_different_version">Einstellungen stammen aus einer Vorgängerversion (Nebenversion). Du kannst diese importieren, prüfe aber unbedingt nach dem Import, ob diese noch korrekt sind!</string>
<string name="metadata_urgent_different_version">Einstellungen stammen aus einer Vorgängerversion (Hauptversion). Hauptversionen unterscheiden sich deutlich und die Einstellungen können daher nicht kompatibel sein! Prüfe nach dem Import unbedingt, ob diese noch korrekt sind!</string>
<string name="metadata_label_format">Dateiformat</string>
<string name="metadata_label_created_at">Erstellt am</string>
<string name="metadata_label_aaps_version">AAPS-Version</string>
<string name="metadata_label_aaps_flavour">Build-Variante</string>
<string name="metadata_label_device_name">Patientenname des exportierenden Geräts</string>
<string name="metadata_label_device_model">Modell des exportierenden Geräts</string>
<string name="metadata_label_encryption">Dateiverschlüsselung</string>
<string name="metadata_format_old">Altes Exportformat</string>
<string name="metadata_format_new">Neues verschlüsseltes Format</string>
<string name="metadata_format_debug">Neues Debugformat (unverschlüsselt)</string>
<string name="metadata_format_other">Unbekanntes Export-Format</string>
<string name="prefdecrypt_settings_tampered">Konfigurationsdatei wurde manipuliert.</string>
<string name="prefdecrypt_settings_secure">Einstellungsdatei ist sicher.</string>
<string name="prefdecrypt_settings_unencrypted">Nicht sicheres, unverschlüsseltes Einstellungsformat verwenden</string>
<string name="prefdecrypt_wrong_json">Fehler im JSON-Format, fehlendes erforderliches Feld (Format, Inhalt, Metadaten oder Sicherheit)</string>
<string name="prefdecrypt_wrong_password">Entschlüsselungsfehler. Das angegebene Passwort kann die Datei nicht entschlüsseln.</string>
<string name="prefdecrypt_issue_missing_file_hash">Datei-Prüfsumme (hash) fehlt. Einstellungen können nicht auf Echtheit überprüft werden!</string>
<string name="prefdecrypt_issue_modified">Datei wurde nach dem Export verändert!</string>
<string name="prefdecrypt_issue_parsing">Entschlüsselungsfehler, Analyse der Einstellungen fehlgeschlagen!</string>
<string name="prefdecrypt_issue_wrong_pass">Entschlüsselungsfehler. Das angegebene Passwort ist ungültig oder die Einstellungsdatei wurde verändert! Evtl. wurde die importierte Datei mit einem anderen Master-Passwort exportiert.</string>
<string name="prefdecrypt_issue_wrong_format">Fehlende Verschlüsselungskonfiguration, Einstellungsformat ist ungültig!</string>
<string name="prefdecrypt_issue_wrong_algorithm">Nicht unterstützter oder nicht angegebener Verschlüsselungsalgorithmus!</string>
<string name="exported_ago" comment="at placeholder we add pluralized number of hours/minutes">Vor %1$s Tagen exportiert</string>
<string name="exported_at" comment="at placeholder we add export date">am %1$s exportiert</string>
<string name="exported_less_than_hour_ago">vor weniger als einer Stunde exportiert</string>
<string name="in_directory" comment="placeholder is for exported file path">in Verzeichnis: %1$s</string>
<string name="end_user_license_agreement">Endbenutzervereinbarung</string>
<string name="end_user_license_agreement_text">DAS PROGRAMM DARF NICHT FÜR MEDIZINISCHE ENTSCHEIDUNGEN BENUTZT WERDEN. ES GIBT IN DIESEM PROJEKT KEINE GEWÄHRLEISTUNG ODER GARANTIERTE UNTERSTÜTZUNG IN IRGENDEINER ART. WENN DU DICH ENTSCHEIDEST, ES ZU NUTZEN, HÄNGT DIE QUALITÄT UND LEISTUNGSFÄHIGKEIT DIESES PROJEKTES VON DIR SELBST AB. ES WIRD \"WIE BESEHEN\" ZUR VERFÜGUNG GESTELLT. SOLLTE SICH DAS PROGRAMM ALS FEHLERHAFT ERWEISEN, ÜBERNIMMST DU ALLE NOTWENDIGEN KRANKHEITSKOSTEN, SERVICELEISTUNGEN, REPARATUREN ODER KORREKTUREN.</string>
<string name="end_user_license_agreement_i_understand">Ich verstehe und stimme zu.</string>
@ -530,7 +495,7 @@
<string name="activity_target">Aktivitäts-Zielwert</string>
<string name="hypo_duration">Hypo-Dauer</string>
<string name="hypo_target">Hypo - Zielwert</string>
<string name="reuse">Erneut verwenden</string>
<string name="reuse_profile_pct_hours">Erneut verwenden %1$d%% %2$dh</string>
<string name="wearcontrol_title">Steuerung durch die Uhr</string>
<string name="wearcontrol_summary">Setze temporäre Ziele und Behandlungen mit der Uhr</string>
<string name="food">Essen</string>
@ -629,7 +594,6 @@
<string name="enablesmbwithhightemptarget">Aktiviere SMB bei temporären Zielen oberhalb des regulären Ziels</string>
<string name="enablesmbwithhightemptarget_summary">Aktiviere SMB bei hohen temporären Zielen (Sport, über 100 mg/dl bzw. 5,5 mmol/L)</string>
<string name="overview_insulin_label">Insulin</string>
<string name="overview_carbs_label">Kohlenhydrate</string>
<string name="overview_buttons_selection">Schaltflächen</string>
<string name="show_calibration_button_summary">Sendet eine Kalibierung an xDrip+ oder öffnet den G5 Kalibrierungs-Dialog.</string>
<string name="show_cgm_button_summary">Öffnet xDrip+, mit der Zurück-Schaltfläche gelangst du zurück zu AndroidAPS.</string>
@ -813,7 +777,6 @@
<string name="nav_logsettings">Log-Einstellungen</string>
<string name="resettodefaults">Auf Standardwerte zurücksetzen</string>
<string name="nsmalfunction">NSClient Störung. Ziehe einen Neustart von NS und NSClient in Betracht.</string>
<string name="versionavailable">Version %1$s ist verfügbar.</string>
<string name="time_offset">Zeitversatz</string>
<string name="setupwizard_preferred_aps_mode">Bevorzugter APS-Modus</string>
<string name="treatments_wizard_total_label">Gesamt</string>
@ -971,8 +934,6 @@ Unerwartetes Verhalten.</string>
<string name="copy_short">KOPIEREN</string>
<string name="addnew">Neu hinzufügen</string>
<string name="versionChecker">Versionsprüfer</string>
<string name="signature_verifier">Signaturprüfung</string>
<string name="running_invalid_version">Wir haben festgestellt, dass Du eine ungültige Version verwendest. Loop deaktiviert!</string>
<string name="old_version">Vorherige Version</string>
<string name="very_old_version">sehr alte Version</string>
<string name="new_version_warning">Neue Version seit mindestens %1$d Tagen verfügbar! Rückfall zur sensorunterstützten Pumpentherapie nach %2$d Tagen, Loop wird nach %3$d Tagen deaktiviert.</string>

View file

@ -49,16 +49,4 @@
<string name="notconnected">Δεν είστε συνδεδεμένοι στο internet</string>
<string name="failedretrievetime">Απέτυχε η ανάκτηση ώρας</string>
<string name="requirementnotmet">Αντικειμενικές προϋποθέσεις δεν πληρούνται</string>
<plurals name="objective_days">
<item quantity="one">%1$d ημέρα</item>
<item quantity="other">%1$d ημέρες</item>
</plurals>
<plurals name="objective_hours">
<item quantity="one">%1$d hour</item>
<item quantity="other">%1$d ώρες</item>
</plurals>
<plurals name="objective_minutes">
<item quantity="one">%1$d minute</item>
<item quantity="other">%1$d λεπτά</item>
</plurals>
</resources>

View file

@ -13,7 +13,6 @@
<string name="reset_db_confirm">Θέλετε πραγματικά να επαναφέρετε την βάση δεδομένων;</string>
<string name="nav_exit">Έξοδος</string>
<string name="ns_sync_use_absolute_title">Χρησιμοποιείτε πάντα απόλυτες τιμές βασικού</string>
<string name="alert_dialog_storage_permission_text">Παρακαλώ κάντε επανεκίνηση στο τηλέφώνο ή restart στο AndroidAPS από τις Ρυθμίσεις Συστήματος, \nαλλιώς το AndroidAPS δεν θα έχει καταγραφή (επαληθεύστε ότι οι αλγόριθμοι δουλεύουν σωστά)!</string>
<string name="alert_dialog_permission_battery_optimization_failed">Αυτή η συσκευή δεν φαίνεται να υποστηρίζει τη λίστα κατάτμησης βελτιστοποίησης μπαταρίας - ενδέχεται να αντιμετωπίσετε προβλήματα απόδοσης.</string>
<string name="description_actions">Ορισμένα πλήκτρα για γρήγορη πρόσβαση σε κοινά χαρακτηριστικά</string>
<string name="description_config_builder">Χρησιμοποιείται για ρύθμιση ενεργών συνδέσεων</string>
@ -385,7 +384,6 @@
<string name="activity_target">στόχος άσκησης</string>
<string name="hypo_duration">διάρκεια υπογλυκαιμίας</string>
<string name="hypo_target">στόχος υπογλυκαιμίας</string>
<string name="reuse">επαναχρησιμοποίηση</string>
<string name="wearcontrol_title">Έλεγχος από ρολόι</string>
<string name="wearcontrol_summary">Ρυθμίστε Στόχους-Προσ Ρυθμού και βάλτε Θεραπείες από το ρολόι.</string>
<string name="food">Γεύμα</string>
@ -476,7 +474,6 @@
<string name="enablesmbwithtemptarget_summary">Ενεργοποίηση του SMB όταν υπάρχει ενεργός προσωρινός στόχος (τρώω σύντομα, άσκηση)</string>
<string name="enablesmbwithhightemptarget">Ενεργοποίηση SMB με υψηλούς προσωρινούς στόχους</string>
<string name="overview_insulin_label">Ινσουλίνη</string>
<string name="overview_carbs_label">Υδατάνθρακες</string>
<string name="overview_buttons_selection">Πλήκτρα</string>
<string name="show_calibration_button_summary">Στέλνει καλιμπράρισμα στο xDrip + ή ανοίγει το παράθυρο διαλόγου καλιμπραρίσματος του G5</string>
<string name="show_cgm_button_summary">Ανοίγει το xDrip +, το πλήκτρο πίσω επιστρέφει στο AndroidAPS</string>
@ -641,7 +638,6 @@
<string name="nav_logsettings">Ρυθμίσεις Αρχείου Καταγραφής</string>
<string name="resettodefaults">Επαναφορά προεπιλογών</string>
<string name="nsmalfunction">Δυσλειτουργία NSClient. Εξετάστε την επανεκκίνηση του NS και του NSClient.</string>
<string name="versionavailable">Έκδοση %1$s διαθέσιμη</string>
<string name="time_offset">Χρονική μετατόπιση</string>
<string name="setupwizard_preferred_aps_mode">Προτιμώμενη λειτουργία APS</string>
<string name="treatments_wizard_total_label">Σύνολο</string>
@ -789,8 +785,6 @@
<string name="copy_short">Αντιγραφή</string>
<string name="addnew">Προσθήκη νέου</string>
<string name="versionChecker">Έλεγχος Έκδοσης</string>
<string name="signature_verifier">Έλεγχος υπογραφής</string>
<string name="running_invalid_version">Διαπιστώσαμε ότι εκτελείτε μη έγκυρη έκδοση. Κύκλωμα απενεργοποιήθηκε!</string>
<string name="old_version">παλιά έκδοση</string>
<string name="very_old_version">πολύ παλιά έκδοση</string>
<string name="twohours">ρες</string>

View file

@ -53,16 +53,4 @@
<string name="notconnected">Sin conexión a Internet</string>
<string name="failedretrievetime">Fallo tiempo de recuperación</string>
<string name="requirementnotmet">No se cumplen los requisitos de objetivo</string>
<plurals name="objective_days">
<item quantity="one">%1$d día</item>
<item quantity="other">%1$d días</item>
</plurals>
<plurals name="objective_hours">
<item quantity="one">%1$d hora</item>
<item quantity="other">%1$d horas</item>
</plurals>
<plurals name="objective_minutes">
<item quantity="one">%1$d minuto</item>
<item quantity="other">%1$d minutos</item>
</plurals>
</resources>

View file

@ -14,7 +14,6 @@
<string name="reset_db_confirm">¿Realmente quiere restablecer las bases de datos?</string>
<string name="nav_exit">Salir</string>
<string name="ns_sync_use_absolute_title">Usar siempre valores basales absolutos</string>
<string name="alert_dialog_storage_permission_text">Por favor reinicia el teléfono o AndroidAPS desde ajustes de sistema, sino AndroidAPS no guardará registros (importante para trazar y verificar que el algoritmo funcione correctamente)</string>
<string name="alert_dialog_permission_battery_optimization_failed">Este dispositivo no parece soportar la optimización de la batería por los ajustes - pueden ocurrir problemas de funcionamiento.</string>
<string name="description_actions">Algunos botones para acceder rápidamente a funciones comunes</string>
<string name="description_config_builder">Utilizado para configurar complementos activos</string>
@ -166,7 +165,6 @@
<string name="old_master_password">Contraseña Maestra antigua</string>
<string name="different_password_used">Este archivo se ha exportado y cifrado con una contraseña maestra diferente. Insertar contraseña maestra antigua para descifrar el archivo.</string>
<string name="master_password_will_be_replaced">Como resultado de la importación correcta, la contraseña maestra actual SE SUSTITUIRÁ por la contraseña maestra antigua!</string>
<string name="preferences_import_list_title">Seleccionar fichero para importar</string>
<string name="check_preferences_before_import">Por favor, compruebe las preferencias antes de importar:</string>
<string name="check_preferences_cannot_import">¡Las preferencias no se pueden importar!</string>
<string name="check_preferences_dangerous_import">¡Las preferencias no se deben importar!</string>
@ -174,39 +172,6 @@
<string name="check_preferences_details_title">Importar Detalles del problema</string>
<string name="check_preferences_import_btn">Importar</string>
<string name="check_preferences_import_anyway_btn">Importar de todos modos (¡PELIGROSO!)</string>
<string name="metadata_warning_different_flavour">Las preferencias se han creado con distinta versión de AAPS (%1$s), la versión instalada es: %2$s.\n\nAlgunos valores pueden faltar o no ser válidos después de importar, por favor, compruebe y actualice sus preferencias.</string>
<string name="metadata_warning_different_device">Las preferencias se han creado en un dispositivo distinto. Está bien si va a importar desde un teléfono más antiguo/diferente, pero ¡asegúrese de que las preferencias importadas son correctas!</string>
<string name="metadata_warning_outdated_format">¡Estás usando el obsoleto formato heredado de versiones antiguas de AAPS, que no es seguro! Únicamente utilizarlo como último recurso, si no tiene una exportación en formato JSON actual.</string>
<string name="metadata_warning_old_export">Las preferencias importadas ya tienen %1$s días! ¿Tal vez tengas preferencias más actualizadas o eligiste el archivo equivocado? ¡Recuerda exportar las preferencias regularmente!</string>
<string name="metadata_warning_date_format">¡Formato de fecha no válido!</string>
<string name="metadata_warning_different_version">Preferencias de una versión menor de la aplicación. Está bien si va a importar después de la actualización, pero ¡compruebe después de la importación si las preferencias siguen siendo correctas!</string>
<string name="metadata_urgent_different_version">Preferencias de la versión principal distinta de la aplicación. ¡Las versiones principales difieren significativamente y pueden tener preferencias incompatibles! ¡Asegúrese de que, después de importar, las preferencias siguen siendo correctas!</string>
<string name="metadata_label_format">Formato del archivo</string>
<string name="metadata_label_created_at">Creado el</string>
<string name="metadata_label_aaps_version">Versión de AAPS</string>
<string name="metadata_label_aaps_flavour">Construir Variante</string>
<string name="metadata_label_device_name">Exportar el nombre del paciente del dispositivo</string>
<string name="metadata_label_device_model">Exportar modelo de dispositivo</string>
<string name="metadata_label_encryption">Encriptación de archivos</string>
<string name="metadata_format_old">Formato de exportación antiguo</string>
<string name="metadata_format_new">Nuevo formato cifrado</string>
<string name="metadata_format_debug">Nuevo formato de depuración (sin cifrar)</string>
<string name="metadata_format_other">Formato de exportación desconocido</string>
<string name="prefdecrypt_settings_tampered">Archivo de configuración alterado</string>
<string name="prefdecrypt_settings_secure">El archivo de configuración es seguro</string>
<string name="prefdecrypt_settings_unencrypted">Uso no seguro, sin cifrar del formato de configuración</string>
<string name="prefdecrypt_wrong_json">Error de formato JSON, falta campo necesario (formato, contenido, metadatos o seguridad)</string>
<string name="prefdecrypt_wrong_password">Error de descifrado, la contraseña proporcionada no puede descifrar el archivo</string>
<string name="prefdecrypt_issue_missing_file_hash">Falta el archivo de la suma de comprobación (hash), ¡no se puede verificar la autenticidad de configuración!</string>
<string name="prefdecrypt_issue_modified">¡El archivo se ha modificado tras la exportación!</string>
<string name="prefdecrypt_issue_parsing">Error de descifrado, ¡el análisis de las preferencias ha fallado!</string>
<string name="prefdecrypt_issue_wrong_pass">Error de descifrado, ¡la contraseña proporcionada no es válida o se ha modificado el archivo de ajustes! Puede suceder que el archivo importado se haya exportado con una contraseña maestra distinta.</string>
<string name="prefdecrypt_issue_wrong_format">Falta la configuración de cifrado, ¡el formato configuración no es válido!</string>
<string name="prefdecrypt_issue_wrong_algorithm">¡Algoritmo de cifrado no soportado o no especificado!</string>
<string name="exported_ago" comment="at placeholder we add pluralized number of hours/minutes">exportado hace %1$s</string>
<string name="exported_at" comment="at placeholder we add export date">exportado en %1$s</string>
<string name="exported_less_than_hour_ago">exportado hace menos de una hora</string>
<string name="in_directory" comment="placeholder is for exported file path">en el directorio: %1$s</string>
<string name="end_user_license_agreement">Acuerdo de licencia de usuario final</string>
<string name="end_user_license_agreement_text">NO DEBE UTILIZARSE PARA TOMAR DECISIONES MÉDICAS. NO HAY NINGUNA GARANTÍA PARA EL PROGRAMA, EN LA MEDIDA PERMITIDA POR LA LEY APLICABLE. EXCEPTO CUANDO SE INDIQUE LO CONTRARIO POR ESCRITO, LOS TITULARES DE LOS DERECHOS DE AUTOR Y/O OTRAS PARTES PROPORCIONAN EL PROGRAMA \"TAL CUAL\" SIN GARANTÍA DE NINGÚN TIPO, YA SEA EXPRESA O IMPLÍCITA, INCLUIDAS, ENTRE OTRAS, LAS GARANTÍAS IMPLÍCITAS DE COMERCIABILIDAD Y ADECUACIÓN PARA UN PROPÓSITO EN PARTICULAR. TODO EL RIESGO EN CUANTO A LA CALIDAD Y EL RENDIMIENTO DEL PROGRAMA ES SUYA. SI EL PROGRAMA TUVIERA UN ERROR, USTED ASUME EL COSTE DE TODO SERVICIO, REPARACIÓN O CORRECCIÓN NECESARIOS.</string>
<string name="end_user_license_agreement_i_understand">ENTIENDO Y ACEPTO</string>
@ -515,7 +480,6 @@
<string name="activity_target">objetivo actividad</string>
<string name="hypo_duration">Duración Hipo</string>
<string name="hypo_target">Objetivo Hipo</string>
<string name="reuse">usar otra vez</string>
<string name="wearcontrol_title">Control desde reloj</string>
<string name="wearcontrol_summary">Editar y emitir objetivos temp. y tratamientos desde reloj.</string>
<string name="food">Comida</string>
@ -614,7 +578,6 @@
<string name="enablesmbwithhightemptarget">Habilitar SMB con Objetivo Temporal Alto</string>
<string name="enablesmbwithhightemptarget_summary">Habilitar SMB cuando hay un objetivo temporal alto activo (ejercicio, superior a 100 mg/dl o 5.5 mmol/l)</string>
<string name="overview_insulin_label">Insulina</string>
<string name="overview_carbs_label">Carbohidratos</string>
<string name="overview_buttons_selection">Botones</string>
<string name="show_calibration_button_summary">Envía una calibración a xDrip+ o abre el diálogo de calibración G5</string>
<string name="show_cgm_button_summary">Abre xDrip+, el botón atrás regresará a AAPS</string>
@ -798,7 +761,6 @@
<string name="nav_logsettings">Ajustes del registro</string>
<string name="resettodefaults">Restablecer valores predeterminados</string>
<string name="nsmalfunction">NSClient fallando. Considera reiniciar NS y NSClient.</string>
<string name="versionavailable">Versión %1$s disponible</string>
<string name="time_offset">Retardo</string>
<string name="setupwizard_preferred_aps_mode">Modo preferido de APS</string>
<string name="treatments_wizard_total_label">Total</string>
@ -955,8 +917,6 @@
<string name="copy_short">COPIA</string>
<string name="addnew">Añadir nuevo</string>
<string name="versionChecker">Verificador de versión</string>
<string name="signature_verifier">Verificador de firma</string>
<string name="running_invalid_version">Hemos detectado que está ejecutando una versión no válida. ¡Bucle desactivado!</string>
<string name="old_version">versión antigua</string>
<string name="very_old_version">versión muy antigua</string>
<string name="new_version_warning">Nueva versión desde al menos %1$d dias disponible! Respaldo a LGS después de %2$d días, se deshabilitará el lazo después de %3$d días</string>

View file

@ -53,16 +53,4 @@
<string name="notconnected">Non connecté à Internet</string>
<string name="failedretrievetime">Échec de la récupération de l\'heure</string>
<string name="requirementnotmet">Exigences de l\'objectif non atteintes</string>
<plurals name="objective_days">
<item quantity="one">%1$d jour</item>
<item quantity="other">%1$d jours</item>
</plurals>
<plurals name="objective_hours">
<item quantity="one">%1$d heure</item>
<item quantity="other">%1$d heures</item>
</plurals>
<plurals name="objective_minutes">
<item quantity="one">%1$d minute</item>
<item quantity="other">%1$d minutes</item>
</plurals>
</resources>

View file

@ -14,7 +14,6 @@
<string name="reset_db_confirm">Voulez-vous vraiment réinitialiser les bases de données ?</string>
<string name="nav_exit">Quitter</string>
<string name="ns_sync_use_absolute_title">Utiliser toujours les valeurs absolues du basal</string>
<string name="alert_dialog_storage_permission_text">Redémarrez votre smartphone ou redémarrez AndroidAPS depuis les paramètres système \nsinon AndroidAPS ne sera pas connecté aux journaux (il est important de suivre et vérifier que les algorithmes fonctionnent correctement)!</string>
<string name="alert_dialog_permission_battery_optimization_failed">Ce périphérique ne semble pas permettre l\'optimisation de la batterie par une liste blanche - vous pourriez rencontrer des problèmes de performance.</string>
<string name="description_actions">Quelques boutons pour accéder rapidement aux fonctions communes</string>
<string name="description_config_builder">Utilisé pour configurer les plugins actifs</string>
@ -168,7 +167,6 @@
<string name="old_master_password">Ancien mot de passe principal</string>
<string name="different_password_used">Ce fichier a été exporté et chiffré avec un mot de passe principal différent. Veuillez renseigner votre ancien mot de passe principal pour déchiffrer le fichier.</string>
<string name="master_password_will_be_replaced">Suite à l\'importation réussie, le mot de place principal actuel SERA REMPLACÉ par cet ancien mot de passe!</string>
<string name="preferences_import_list_title">Sélectionner le fichier à importer</string>
<string name="check_preferences_before_import">Vérifiez les préférences avant d\'importer :</string>
<string name="check_preferences_cannot_import">Les préférences ne peuvent pas être importées !</string>
<string name="check_preferences_dangerous_import">Les préférences ne doivent pas être importées !</string>
@ -176,39 +174,6 @@
<string name="check_preferences_details_title">Détails des problèmes d\'importation</string>
<string name="check_preferences_import_btn">Import</string>
<string name="check_preferences_import_anyway_btn">Importer quand même (DANGEREUX !)</string>
<string name="metadata_warning_different_flavour">Des préférences ont été créées avec des variantes différentes d\'AAPS (%1$s) quand vous avez : %2$s.\n\nCertains paramètres peuvent manquer ou ou ne pas être valides après l\'import, vérifiez et mettez à jour vos préférences.</string>
<string name="metadata_warning_different_device">Les préférences ont été créées sur un autre périphérique. C\'est OK si vous importez à partir d\'un téléphone ancien/différent, mais vérifiez les préférences importées sont correctes !</string>
<string name="metadata_warning_outdated_format">Vous utilisez le format obsolète des anciennes versions d\'APPS qui n\'est pas sécurisé ! Utilisez-le uniquement en dernier recours, si vous n\'avez pas d\'export au format JSON actuel.</string>
<string name="metadata_warning_old_export">Les préférences importées ont déjà %1$s jours ! Vous avez peut-être des préférences plus récentes ou vous avez sélectionné un mauvais fichier ? N\'oubliez pas d\'exporter vos préférences régulièrement !</string>
<string name="metadata_warning_date_format">Format de date invalide !</string>
<string name="metadata_warning_different_version">Préférences d\'une autre version mineure différente de l\'application. C\'est OK si vous importez après la mise à jour, mais vérifiez après l\'importation si les préférences sont toujours correctes !</string>
<string name="metadata_urgent_different_version">Préférences d\'une autre version majeure différente de l\'application. Les versions majeures diffèrent significativement et peuvent avoir des préférences incompatibles ! Vérifiez bien après l\'import que les préférences sont toujours correctes !</string>
<string name="metadata_label_format">Format de fichier</string>
<string name="metadata_label_created_at">Créé le</string>
<string name="metadata_label_aaps_version">Version d\'AAPS</string>
<string name="metadata_label_aaps_flavour">Variante de Build</string>
<string name="metadata_label_device_name">Export du nom du patient de l\'appareil</string>
<string name="metadata_label_device_model">Export du modèle de l\'appareil</string>
<string name="metadata_label_encryption">Cryptage du fichier</string>
<string name="metadata_format_old">Ancien format d\'export</string>
<string name="metadata_format_new">Nouveau format crypté</string>
<string name="metadata_format_debug">Nouveau format de débug (non crypté)</string>
<string name="metadata_format_other">Format d\'export inconnu</string>
<string name="prefdecrypt_settings_tampered">Fichier paramètres altérés</string>
<string name="prefdecrypt_settings_secure">Fichier paramètres sécurisé</string>
<string name="prefdecrypt_settings_unencrypted">Utilisation non sécurisée, fichier paramètres non crypté</string>
<string name="prefdecrypt_wrong_json">Erreur de format JSON, zone obligatoire manquante (format, contenu, métadonnées ou sécurité)</string>
<string name="prefdecrypt_wrong_password">Erreur de décryptage, le mot de passe indiqué ne permet pas le décryptage du fichier</string>
<string name="prefdecrypt_issue_missing_file_hash">Checksum du fichier manquant, vérification de l\'authenticité des pararamètres impossible !</string>
<string name="prefdecrypt_issue_modified">Le fichier a été modifié après l\'export !</string>
<string name="prefdecrypt_issue_parsing">Erreur de décryptage, échec de l\'import des préférences !</string>
<string name="prefdecrypt_issue_wrong_pass">Erreur de décryptage, le mot de passe fourni est invalide ou le fichier de paramètres à été modifié ! Cela peut arriver si le fichier a été exporté avec un mot de passe principal différent.</string>
<string name="prefdecrypt_issue_wrong_format">Configuration du cryptage manquant, format des paramètres invalide !</string>
<string name="prefdecrypt_issue_wrong_algorithm">Algorithme de cryptage non pris en charge ou non spécifié !</string>
<string name="exported_ago" comment="at placeholder we add pluralized number of hours/minutes">exporté il y a %1$s</string>
<string name="exported_at" comment="at placeholder we add export date">exporté à %1$s</string>
<string name="exported_less_than_hour_ago">exporté il y a moins d\'une heure</string>
<string name="in_directory" comment="placeholder is for exported file path">dans le dossier : %1$s</string>
<string name="end_user_license_agreement">Contrat de Licence pour Utilisateur Final</string>
<string name="end_user_license_agreement_text">NE DOIT PAS ÊTRE UTILISÉ POUR PRENDRE DES DÉCISIONS MÉDICALES. IL N\'Y A AUCUNE GARANTIE POUR LE PROGRAMME, DANS LA LIMITE PERMISE PAR LA LOI APPLICABLE. SAUF S\'IL EST INDIQUÉ LE CONTRAIRE PAR ÉCRIT. LES TITULAIRES DU DROIT D\'AUTEUR ET / OU D\'AUTRES PARTIES FOURNISSENT LE PROGRAMME «EN L\'ÉTAT» SANS GARANTIE D\'AUCUNE SORTE, EXPLICITE OU IMPLICITE, Y COMPRIS MAIS NON SEULEMENT AUX GARANTIES IMPLICITES DE QUALITÉ MARCHANDE ET D\'ADÉQUATION À UN USAGE PARTICULIER
L\'ENSEMBLE DES RISQUES LIÉS À LA QUALITÉ ET À LA PERFORMANCE DU PROGRAMME SONT DE VOTRE RESPONSABILITÉ. SI LE PROGRAMME EST DÉFECTUEUX, VOUS ASSUMEZ LE COÛT DE TOUS LES SERVICES, RÉPARATIONS OU CORRECTIONS NÉCESSAIRES.</string>
@ -531,7 +496,7 @@ L\'ENSEMBLE DES RISQUES LIÉS À LA QUALITÉ ET À LA PERFORMANCE DU PROGRAMME S
<string name="activity_target">Cible Glycémie pour l\'activité</string>
<string name="hypo_duration">durée hypo [min]</string>
<string name="hypo_target">Cible Glycémie pendant lhypo</string>
<string name="reuse">réutiliser</string>
<string name="reuse_profile_pct_hours">Réutiliser %1$d%% %2$dh</string>
<string name="wearcontrol_title">Commandes depuis la montre</string>
<string name="wearcontrol_summary">Définir les Cibles Temp et entrer les Traitements depuis la montre</string>
<string name="food">Aliments</string>
@ -630,7 +595,6 @@ L\'ENSEMBLE DES RISQUES LIÉS À LA QUALITÉ ET À LA PERFORMANCE DU PROGRAMME S
<string name="enablesmbwithhightemptarget">Activer SMB avec cibles temp. hautes</string>
<string name="enablesmbwithhightemptarget_summary">Activer les SMB quand il y a une cible temp haute active (exercise, au dessus de 100 mg/dl ou 5.5 mmol/l)</string>
<string name="overview_insulin_label">Insuline</string>
<string name="overview_carbs_label">Glucides</string>
<string name="overview_buttons_selection">Boutons</string>
<string name="show_calibration_button_summary">Envoie un étalonnage à xDrip+ ou ouvre la boîte de dialogue de calibration du G5</string>
<string name="show_cgm_button_summary">Ouvre xDrip+, le bouton de retour renverra vers AAPS</string>
@ -814,7 +778,6 @@ L\'ENSEMBLE DES RISQUES LIÉS À LA QUALITÉ ET À LA PERFORMANCE DU PROGRAMME S
<string name="nav_logsettings">Paramètres journal</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="versionavailable">Version %1$s disponible</string>
<string name="time_offset">Décalage horaire</string>
<string name="setupwizard_preferred_aps_mode">Mode APS préféré</string>
<string name="treatments_wizard_total_label">Total</string>
@ -971,8 +934,6 @@ L\'ENSEMBLE DES RISQUES LIÉS À LA QUALITÉ ET À LA PERFORMANCE DU PROGRAMME S
<string name="copy_short">COPIE</string>
<string name="addnew">Ajouter un nouveau</string>
<string name="versionChecker">Vérificateur de version</string>
<string name="signature_verifier">Vérificateur de signature</string>
<string name="running_invalid_version">Nous avons détecté que vous utilisez une version invalide. Boucle désactivée !</string>
<string name="old_version">ancienne version</string>
<string name="very_old_version">très ancienne version</string>
<string name="new_version_warning">Nouvelle version disponible depuis %1$d jours ! Retour à Arrêt Glycémie Basse (AGB) dans %2$d jours, la boucle sera désactivée dans %3$d jours</string>

View file

@ -4,15 +4,274 @@
<!-- <string name="he_lang" translatable="false">Hebrew</string> -->
<!-- <string name="ga_lang" translatable="false">Irish</string> -->
<!-- <string name="ja_lang" translatable="false">Japanese</string> -->
<string name="nav_preferences_plugin">%1$s Sainroghanna</string>
<string name="nav_preferences">Sainroghanna</string>
<string name="reset_db_confirm">An bhfuil tú cinnte gur mian leat an bhunachair sonraí a athshocrú?</string>
<string name="nav_exit">Scoir</string>
<string name="alert_dialog_storage_permission_text">Le do thoil atosaigh do ghuthán nó atosaigh AndroidAPS ó Socruithe an Chórais \nmura dhéanann tú é seo, ní bheidh logáil ag na appana AndroidAPS (tá sé tábhachtach na halgartaim a rianú agus a fhíorú go bhfuil siad ag obair i gceart)!</string>
<string name="description_source_mm640g">Luachanna BG a fháil ón 600SeriesAndroidUploader.</string>
<string name="description_source_ns_client">Sonraí a íoslódáil ó Nightscout</string>
<string name="description_source_xdrip">Luachanna BG a fháil ó xDrip+.</string>
<string name="treatments_insulin_label_string">Inslin:</string>
<string name="treatments_carbs_label_string">Carbí:</string>
<string name="treatments_iob_label_string">IOB:</string>
<string name="sms_iob">IOB:</string>
<string name="treatments_iobtotal_label_string">Lomlán IOB:</string>
<string name="tempbasals_realduration_label_string">Fad:</string>
<string name="tempbasals_netratio_label_string">Cóimheas:</string>
<string name="tempbasals_netinsulin_label_string">Ins:</string>
<string name="tempbasals_iob_label_string">IOB:</string>
<string name="tempbasals_iobtotal_label_string">Lomlán IOB:</string>
<string name="treatments_wizard_bg_label">BG</string>
<string name="treatments_wizard_tt_label">TT</string>
<string name="treatments_wizard_carbs_label">Carbí</string>
<string name="treatments_wizard_correction_label">Cear</string>
<string name="treatments_wizard_bolusiob_label">Bólas IOB</string>
<string name="openapsma_run">Reáchtáil anois</string>
<string name="openapsma_lastrun_label">Reáchtáil deiridh</string>
<string name="openapsma_glucosestatus_label">Glúcóis stádas</string>
<string name="openapsma_profile_label">Próifíl</string>
<string name="result">Toradh</string>
<string name="result_insulin_carbs">Toradh: %1$s %2$s</string>
<string name="glucose">Glúcóis</string>
<string name="delta">Deilte</string>
<string name="sms_delta">Deilte:</string>
<string name="treatments">Cóireálacha</string>
<string name="configbuilder_pump">Caidéil</string>
<string name="configbuilder_treatments">Cóireálacha</string>
<string name="configbuilder_profile">Próifíl</string>
<string name="configbuilder_aps">APS</string>
<string name="configbuilder_general">Ginearálta</string>
<string name="constraints">Srianta</string>
<string name="loop">Lúb</string>
<string name="configbuilder_loop">Lúb</string>
<string name="loop_aps_label">APS</string>
<string name="overview_calculator_label">Áireamhán</string>
<string name="sms_bolus">Bólas:</string>
<string name="basal">Bunaidh</string>
<string name="sms_basal">Bunaidh:</string>
<string name="configbuilder_bgsource">Foinse BG</string>
<string name="xdrip">xDrip+</string>
<string name="apsmode_title">APS mód</string>
<string name="closedloop">Lúb dúnta</string>
<string name="openloop">Lúb oscailte</string>
<string name="disabledloop">Lúb díchumasaithe</string>
<string name="disableloop">Díchumasaigh lúb</string>
<string name="enableloop">Cumasaigh lúb</string>
<string name="loopdisabled">LÚB DÍCHUMASAITHE LE SRIANTA</string>
<string name="treatments_wizard_basaliob_label">Bunaidh IOB</string>
<string name="careportal_newnstreatment_other">Eile</string>
<string name="careportal_newnstreatment_sensor">Braiteoir</string>
<string name="careportal_newnstreatment_duration_label">Fad</string>
<string name="careportal_newnstreatment_notes_label">Nótaí</string>
<string name="careportal_newnstreatment_profile_label">Próifíl</string>
<string name="careportal_newnstreatment_glucosetype">Glúcóis cineál</string>
<string name="exported">Easpórtáil Socruithe</string>
<string name="export_to">Socruithe Easpórtáil chun</string>
<string name="nav_export">Socruithe Easpórtáil</string>
<string name="nav_import">Socruithe Iompórtáil</string>
<string name="check_preferences_import_btn">Iompórtáil</string>
<string name="save">Sábháil</string>
<string name="reloadprofile">Athlódáil próifíl</string>
<string name="bolusstopped">Bólas stopadh</string>
<string name="bolusstopping">Ag stopadh bólas</string>
<string name="smscommunicator_loophasbeendisabled">Is lúb díchumasaithe</string>
<string name="smscommunicator_loophasbeenenabled">Is lúb cumasaithe</string>
<string name="smscommunicator_loopisdisabled">Is lúb díchumasaithe</string>
<string name="smscommunicator_loopisenabled">Is lúb cumasaithe</string>
<string name="smscommunicator_tempbasalcancelfailed">Cealú TBR teip</string>
<string name="overview_editquickwizard_carbs">Carbí:</string>
<string name="overview_editquickwizard_valid">Bailí:</string>
<string name="overview_editquickwizardlistactivity_add">Cuir</string>
<string name="overview_quickwizard_item_edit_button">In eagar</string>
<string name="correctionbous">Cear</string>
<string name="actions">Gníomhartha</string>
<string name="button1">Cnaipe 1</string>
<string name="button2">Cnaipe 2</string>
<string name="button3">Cnaipe 3</string>
<string name="units_colon">Aonaid:</string>
<string name="units">Aonaid</string>
<string name="dia">DIA</string>
<string name="basal_rate">Bunaidh ráta:</string>
<string name="sms_actualbg">BG:</string>
<string name="sms_lastbg">GF deiridh:</string>
<string name="mdi">MDI</string>
<string name="MM640g">MM640g</string>
<string name="sms_minago">%1$dnóim ó shin</string>
<string name="localprofile">Próifíl áitiúil</string>
<string name="openapsama">OpenAPS AMA</string>
<string name="activity">Gníomhaíocht</string>
<string name="actions_shortname">GNÍ</string>
<string name="loop_shortname">LÚB</string>
<string name="oaps_shortname">OAPS</string>
<string name="overview_shortname">BAILE</string>
<string name="wear_shortname">WEAR</string>
<string name="smscommunicator_shortname">SMS</string>
<string name="profile">Próifíl</string>
<string name="overview_calibration">Calabrú</string>
<string name="pumpsuspended">Caidéil ar fionraí</string>
<string name="executing">Feidhmiú</string>
<string name="nsclientinternal_url">URL:</string>
<string name="restart">Atosaigh</string>
<string name="deliver_now">Seachadadh anois</string>
<string name="status">Stádas:</string>
<string name="patientage">Othar cineál</string>
<string name="child">Páiste</string>
<string name="teenage">Déagóirí</string>
<string name="adult">Duine fásta</string>
<string name="patient_name">Ainm cineál</string>
<string name="Glimp">Glimp</string>
<string name="loopsuspended">Lúb ar fionraí</string>
<string name="loopsuspendedfor">Ar fionraí (%1$d nóim)</string>
<string name="suspendloop">Fionraí lúb</string>
<string name="suspendloopfor1h">Fionraí lúb do 1 u</string>
<string name="suspendloopfor2h">Fionraí lúb do 2 u</string>
<string name="suspendloopfor3h">Fionraí lúb do 3 u</string>
<string name="suspendloopfor10h">Fionraí lúb do 10 u</string>
<string name="suspendloopforXmin">Fionraí lúb do %1$d nóim</string>
<string name="disconnectpump">Dhícheangal Caidéil</string>
<string name="disconnectpumpfor15m">Dhícheangal Caidéil do 15 nóim</string>
<string name="disconnectpumpfor30m">Dhícheangal Caidéil do 30 nóim</string>
<string name="disconnectpumpfor1h">Dhícheangal Caidéil do 1 u</string>
<string name="disconnectpumpfor2h">Dhícheangal Caidéil do 2 u</string>
<string name="disconnectpumpfor3h">Dhícheangal Caidéil do 3 u</string>
<string name="duration15m">15 nóim</string>
<string name="duration30m">30 nóim</string>
<string name="duration1h">1 uair</string>
<string name="duration2h">2 uair</string>
<string name="duration3h">3 uair</string>
<string name="duration10h">10 uair</string>
<string name="resume">Atosú</string>
<string name="smscommunicator_loopsuspended">Lúb ar fionraí</string>
<string name="smscommunicator_loopresumed">Lúb atógáil</string>
<string name="treatments_wizard_cob_label">COB</string>
<string name="ultrafastactinginsulincomment">Fiasp</string>
<string name="insulin_shortname">INS</string>
<string name="iob">IOB</string>
<string name="cob">COB</string>
<string name="basal_shortname">BUN</string>
<string name="activity_shortname">GNÍ</string>
<string name="nav_about">Faoi</string>
<string name="xdripstatus_shortname">xds</string>
<string name="careportal_sensor_label">Braiteoir</string>
<string name="careportal_insulin_label">Inslin</string>
<string name="careportal_pb_label">Caidéil ceallraí</string>
<string name="careportal_age_label">aois:</string>
<string name="ns_alarmoptions">Aláraim roghanna</string>
<string name="pump">Caidéil</string>
<string name="openaps">OpenAPS</string>
<string name="openaps_short">OAPS</string>
<string name="basal_short">BUN</string>
<string name="mdtp_ok">Ceart go leor</string>
<string name="mdtp_cancel">Cuir ar ceal</string>
<string name="careportal_newnstreatment_duration_min_label">Fad [min]</string>
<string name="openapssmb">OpenAPS SMB</string>
<string name="rapid_acting_oref">Rapid-Acting Oref</string>
<string name="lyumjev">Lyumjev</string>
<string name="careportal_newnstreatment_percentage_label">Céatadán</string>
<string name="activity_duration">Gníomhaíocht fad</string>
<string name="activity_target">Gníomhaíocht sprioc</string>
<string name="food">Bia</string>
<string name="shortgramm">g</string>
<string name="shortkilojoul">kJ</string>
<string name="loopenabled">Lúb cumasaithe</string>
<string name="apsselected">APS roghnaithe</string>
<string name="combo_programming_bolus">Cláir Caidéil bólas</string>
<string name="combo_refresh">Athnuachan</string>
<string name="combo_pump_state_label">Stáit</string>
<string name="combo_pump_activity_label">Gníomhaíocht</string>
<string name="combo_no_pump_connection">Níl nasc le haghaidh %1$d nóim</string>
<string name="combo_tbr_remaining">%1$d%% (%2$d nóim fágtha)</string>
<string name="combo_pump_state_initializing">Tosaithe</string>
<string name="combo_pump_state_suspended_due_to_error">Ar fionraí ag earráid</string>
<string name="combo_pump_state_suspended_by_user">Ar fionraí ag úsáideoir</string>
<string name="combo_pump_state_running">Ag reáchtáil</string>
<string name="combo_pump_action_cancelling_tbr">Cealú BRS</string>
<string name="combo_pump_action_setting_tbr">Socrú BRS (%1$d%% / %2$d nóim)</string>
<string name="combo_pump_action_bolusing">Ag bólas (%1$.1f A)</string>
<string name="combo_pump_action_refreshing">Athnuaigh</string>
<string name="combo_pump_connected_now">Anois</string>
<string name="combo_activity_reading_pump_history">Léigh stair caidéil</string>
<string name="combo_activity_setting_basal_profile">Socrú próifíl bunaidh</string>
<string name="combo_pump_cartridge_low_warrning">Is leibhéal cartús íseal</string>
<string name="combo_pump_battery_low_warrning">Is ceallraí Caidéil íseal</string>
<string name="combo_reservoir_low">Íseal</string>
<string name="combo_reservoir_empty">Folamh</string>
<string name="combo_reservoir_normal">Gnáth</string>
<string name="combo_notification_check_time_date">Is nuashonrú gá clog Caidéil</string>
<string name="overview_insulin_label">Inslin</string>
<string name="overview_buttons_selection">Cnaipi</string>
<string name="overview_cgm">CGM</string>
<string name="temptargetshort">TT</string>
<string name="category">Catagóir</string>
<string name="overview_show_activity">Gníomhaíocht</string>
<string name="overview_show_basals">Bunaidhi</string>
<string name="combo_actvity_reading_basal_profile">Léigh próifíl bunaidh</string>
<string name="combo_activity_checking_pump_state">Athnuaigh caidéil stáit</string>
<string name="combo_activity_checking_for_history_changes">Ag féachaint d\'athruithe stair</string>
<string name="food_short">Bia</string>
<string name="pump_stopped">Caidéil stopadh</string>
<string name="pump_started">Caidéil tosú</string>
<string name="pump_paused">Caidéil ar sos</string>
<string name="time">Am</string>
<string name="next_button">Ar Aghaidh</string>
<string name="previous_button">Roimhe seo</string>
<string name="cgm">CGM</string>
<string name="ns_wifionly">Úsáid WiFi nasc amháin</string>
<string name="ns_wifi_ssids">WiFi SSID</string>
<string name="wear_general_settings">Socruithe Ginearálta</string>
<string name="exit">Scoir</string>
<string name="poctech">Poctech</string>
<string name="treatments_wizard_total_label">Lomlán</string>
<string name="insight_local">Accu-Chek Insight</string>
<string name="insight_delivered">%1$.2f A / %2$.2f A seachadta</string>
<string name="insight_alert_formatter">%1$s: %2$s</string>
<string name="mute_alert">Balbh</string>
<string name="serial_number">Sraithuimhir</string>
<string name="insight_status">Stádas</string>
<string name="tdd_bolus">TDD Bólas</string>
<string name="tdd_basal">TDD Bunaidh</string>
<string name="tdd_total">TDD Lomlán</string>
<string name="started">Thosaigh</string>
<string name="refresh">Athnuachan</string>
<string name="short_status_tdd">TDD: %1$.2f</string>
<string name="short_status_battery">Ceal.: %1$d%%</string>
<string name="resumeloop">Lúb Atosú</string>
<string name="iobcompared">IOB %1$s %2$.1f</string>
<string name="and">Agus</string>
<string name="or"></string>
<string name="profile_total">== ∑ %1$s A</string>
<string name="tomato">Tomato (MiaoMiao)</string>
<string name="tomato_short">Tomato</string>
<string name="tidepool">Tidepool</string>
<string name="tidepool_shortname">TDP</string>
<string name="never">Riamh</string>
<string name="action">Gníomh:</string>
<string name="iob_u">IOB [U]:</string>
<string name="glucose_u">Glúcóis [%1$s]:</string>
<string name="add_short">CUIR</string>
<string name="addnew">Cuir nua</string>
<string name="twohours">2u</string>
<string name="dexcom_app_patched">Dexcom App (patched)</string>
<string name="dexcom_short">DXCM</string>
<string name="alarm_message">Aláram: %1$s</string>
<string name="alarm_short">Aláram:</string>
<string name="wifissidcompared">WiFi SSID %1$s %2$s</string>
<string name="name_short">Ainm:</string>
<string name="locationis">%1$s %2$s</string>
<string name="triggercoblabel">COB</string>
<string name="cobcompared">COB %1$s %2$.0f</string>
<string name="format_bg_isf">%1$s ISF: %2$.1f</string>
<string name="format_carbs_ic">%1$.0fg IC: %2$.1f</string>
<string name="format_cob_ic">%1$.1fg IC: %2$.1f</string>
<string name="format_percent">%1$d%%</string>
<string name="unit_minute_short">nóim</string>
<string name="profile_name">Ainm Próifíle:</string>
<string name="unitsnosemicolon">Aonaid</string>
<string name="dia_short">DIA</string>
<string name="ic_short">IC</string>
<string name="isf_short">ISF</string>
<string name="age">Aois:</string>
<string name="randombg_short">BG</string>
<!-- SMS Communicator & OTP Authenticator -->
<string name="alarm">Aláram</string>
</resources>

View file

@ -54,16 +54,4 @@
<string name="notconnected">Non connesso a internet</string>
<string name="failedretrievetime">Impossibile recuperare l\'ora</string>
<string name="requirementnotmet">Requisiti obiettivo non soddisfatti</string>
<plurals name="objective_days">
<item quantity="one">%1$d giorno</item>
<item quantity="other">%1$d giorni</item>
</plurals>
<plurals name="objective_hours">
<item quantity="one">%1$d ora</item>
<item quantity="other">%1$d ore</item>
</plurals>
<plurals name="objective_minutes">
<item quantity="one">%1$d minuto</item>
<item quantity="other">%1$d minuti</item>
</plurals>
</resources>

View file

@ -14,7 +14,6 @@
<string name="reset_db_confirm">Vuoi davvero resettare i database?</string>
<string name="nav_exit">Esci</string>
<string name="ns_sync_use_absolute_title">Usa sempre valori basali assoluti</string>
<string name="alert_dialog_storage_permission_text">Per favore riavvia il tuo telefono oppure fai ripartire AndroidAPS dalle impostazioni di sistema \naltrimenti Android APS non farà il log (è importante monitorare e verificare che gli algoritmi stiano funzionando correttamente)!</string>
<string name="alert_dialog_permission_battery_optimization_failed">Questo dispositivo non sembra supportare la whitelist dell\'ottimizzazione batteria: potrebbero verificarsi problemi di prestazioni.</string>
<string name="description_actions">Alcuni tasti per accedere rapidamente alle funzioni comuni</string>
<string name="description_config_builder">Usato per configurare i plugin attivi</string>
@ -168,7 +167,6 @@
<string name="old_master_password">Password Master precedente</string>
<string name="different_password_used">Questo file è stato esportato e crittografato con una password master differente. Fornire la password master precedente per decrittare il file.</string>
<string name="master_password_will_be_replaced">Come risultato dell\'importazione riuscita, la password master corrente VERRÀ SOSTITUITA con la password master precedente contenuta nel file importato!</string>
<string name="preferences_import_list_title">Seleziona il file da importare</string>
<string name="check_preferences_before_import">Controlla le preferenze prima dell\'importazione:</string>
<string name="check_preferences_cannot_import">Le preferenze non possono essere importate!</string>
<string name="check_preferences_dangerous_import">Le preferenze non dovrebbero essere importate!</string>
@ -176,39 +174,6 @@
<string name="check_preferences_details_title">Dettagli dei problemi di importazione</string>
<string name="check_preferences_import_btn">Importa</string>
<string name="check_preferences_import_anyway_btn">Importa comunque (PERICOLOSO!)</string>
<string name="metadata_warning_different_flavour">Le preferenze sono state create con una differente versione di AAPS (%1$s) mentre invece tu hai: %2$s.\n\nAlcune impostazioni potrebbero mancare o non essere valide - dopo l\'importazione controlla e aggiornare le tue preferenze.</string>
<string name="metadata_warning_different_device">Le preferenze sono state create su un dispositivo diverso. Va bene importarle da un vecchio/diverso telefono, ma assicurati che le preferenze importate siano corrette!</string>
<string name="metadata_warning_outdated_format">Stai usando il formato precedente (obsoleto) delle vecchie versioni di APPS, che non è sicuro! Usalo solo come ultima risorsa, se non hai un\'esportazione nel corrente formato JSON.</string>
<string name="metadata_warning_old_export">Le preferenze importate hanno già %1$s giorni! Forse hai preferenze più aggiornate. Hai scelto il file sbagliato? Ricorda di esportare le preferenze regolarmente!</string>
<string name="metadata_warning_date_format">Formato data-ora non valido!</string>
<string name="metadata_warning_different_version">Le preferenze arrivano da una differente versione secondaria dell\'applicazione (minor). Va bene se le stai importando dopo l\'aggiornamento, ma controlla che, dopo l\'importazione, le preferenze siano ancora corrette!</string>
<string name="metadata_urgent_different_version">Le preferenze arrivano da una differente versione principale dell\'applicazione (major). Le versioni principali differiscono in modo significativo e potrebbero avere preferenze incompatibili! Assicurati che, dopo l\'importazione, le preferenze siano ancora corrette!</string>
<string name="metadata_label_format">Formato file</string>
<string name="metadata_label_created_at">Creato:</string>
<string name="metadata_label_aaps_version">Versione AAPS</string>
<string name="metadata_label_aaps_flavour">Variante build</string>
<string name="metadata_label_device_name">Nome paziente del dispositivo esportatore</string>
<string name="metadata_label_device_model">Modello dispositivo esportatore</string>
<string name="metadata_label_encryption">Crittografia file</string>
<string name="metadata_format_old">Vecchio formato esportazione</string>
<string name="metadata_format_new">Nuovo formato crittografato</string>
<string name="metadata_format_debug">Nuovo formato di debug (non crittografato)</string>
<string name="metadata_format_other">Formato esportazione sconosciuto</string>
<string name="prefdecrypt_settings_tampered">File delle impostazioni manomesso</string>
<string name="prefdecrypt_settings_secure">Il file delle impostazioni è sicuro</string>
<string name="prefdecrypt_settings_unencrypted">Uso non sicuro, formato impostazioni non crittografato</string>
<string name="prefdecrypt_wrong_json">Errore formato JSON, campo obbligatorio mancante (formato, contenuto, metadati o sicurezza)</string>
<string name="prefdecrypt_wrong_password">Errore decrittazione, la password data non può decrittare il file</string>
<string name="prefdecrypt_issue_missing_file_hash">File checksum (hash) mancante, impossibile verificare l\'autenticità delle impostazioni!</string>
<string name="prefdecrypt_issue_modified">Il file è stato modificato dopo l\'esportazione!</string>
<string name="prefdecrypt_issue_parsing">Errore decrittazione, analisi preferenze fallita!</string>
<string name="prefdecrypt_issue_wrong_pass">Errore decrittazione, la password fornita è errata o il file delle impostazioni è stato modificato! È possibile che il file importato sia stato esportato con una diversa password master.</string>
<string name="prefdecrypt_issue_wrong_format">Configurazione crittografia mancante, il formato delle impostazioni non è valido!</string>
<string name="prefdecrypt_issue_wrong_algorithm">Algoritmo di crittografia non supportato o non specificato!</string>
<string name="exported_ago" comment="at placeholder we add pluralized number of hours/minutes">esportato %1$s fa</string>
<string name="exported_at" comment="at placeholder we add export date">esportato il %1$s</string>
<string name="exported_less_than_hour_ago">esportato meno di un\'ora fa</string>
<string name="in_directory" comment="placeholder is for exported file path">nella directory: %1$s</string>
<string name="end_user_license_agreement">Contratto di licenza per l\'utente</string>
<string name="end_user_license_agreement_text">NON DEVE ESSERE USATO PER PRENDERE DECISIONI MEDICHE. NON ESISTE ALCUNA GARANZIA PER IL PROGRAMMA, NELLA MISURA CONSENTITA DALLA LEGGE APPLICABILE. TRANNE QUANDO DIVERSAMENTE INDICATO PER ISCRITTO, I DETENTORI DEL COPYRIGHT E/O ALTRE PARTI FORNISCONO IL PROGRAMMA \"COSÌ COM\'È\" SENZA GARANZIA DI ALCUN TIPO, ESPLICITA O IMPLICITA, INCLUSE, MA NON LIMITATAMENTE A, GARANZIE IMPLICITE DI COMMERCIABILITÀ E IDONEITÀ PER UN SCOPO PARTICOLARE. L\'INTERO RISCHIO RIGUARDO LA QUALITÀ E LE PRESTAZIONI DEL PROGRAMMA È TUO. SE IL PROGRAMMA DOVESSE RISULTARE DIFETTOSO, TI ASSUMI IL COSTO DI TUTTE LE NECESSARIE MANUTENZIONI, RIPARAZIONI O CORREZIONI.</string>
<string name="end_user_license_agreement_i_understand">COMPRENDO E ACCETTO</string>
@ -285,6 +250,8 @@
<string name="mealbolus">Pasto</string>
<string name="correctionbous">Corr</string>
<string name="actions">Azioni</string>
<string name="ns_upload_only">Solo upload su NS (PERICOLOSO DISABILITARE)</string>
<string name="ns_upload_only_summary">Solo upload su NS (no sincronizzazione). Non ha effetto su SGV a meno che non sia selezionata una fonte locale come xDrip+. Non ha effetto sui profili mentre vengono usati i profili NS.\n!!! ATTENZIONE !!! Disabilitare questa opzione potrebbe causare malfunzionamenti e sovra-dosaggio di insulina se uno dei tuoi strumenti (AAPS, NS, xDrip+) è configurato in modo errato. Guarda attentamente se i dati visualizzati da AAPS corrispondono allo stato del micro!</string>
<string name="pumpNotInitialized">Micro non inizializzato!</string>
<string name="primefill">Carica/Riempi</string>
<string name="fillwarning">Assicurati che la quantità corrisponda alla specifica del tuo set di infusione!</string>
@ -459,6 +426,7 @@
<string name="smscommunicator_missingsmspermission">Autorizzazione SMS mancante</string>
<string name="smscommunicator_missingphonestatepermission">Autorizzazione stato telefono mancante</string>
<string name="xdripstatus_settings">Stato xDrip+ (smartwatch)</string>
<string name="xdripstatus">Statusline xDrip+ (smartwatch)</string>
<string name="xdripstatus_shortname">xds</string>
<string name="wear_showbgi_title">Mostra BGI</string>
<string name="wear_showbgi_summary">Aggiungi BGI alla statusline</string>
@ -501,7 +469,8 @@
<string name="mdtp_cancel">Annulla</string>
<string name="notloadedplugins">Non tutti i profili caricati!</string>
<string name="valuesnotstored">Valori non memorizzati!</string>
<string name="ns_localbroadcasts_title">Abilita le trasmissioni locali.</string>
<string name="ns_localbroadcasts">Abilita trasmissioni ad altre app (come xDrip+). Non abilitare se hai installato più di un\'istanza di AAPS o NSClient!</string>
<string name="ns_localbroadcasts_title">Abilita trasmissioni locali</string>
<string name="careportal_newnstreatment_duration_min_label">Durata [min]</string>
<string name="openapssmb">OpenAPS SMB</string>
<string name="enableuam">Abilita UAM</string>
@ -526,7 +495,7 @@
<string name="activity_target">target \"attività fisica\"</string>
<string name="hypo_duration">target \"ipoglicemia\" - durata</string>
<string name="hypo_target">target \"ipoglicemia\"</string>
<string name="reuse">riuso</string>
<string name="reuse_profile_pct_hours">Riusa %1$d%% %2$dh</string>
<string name="wearcontrol_title">Controlli da smartwatch</string>
<string name="wearcontrol_summary">Imposta Temp-Target e inserisci trattamenti dallo smartwatch.</string>
<string name="food">Cibo</string>
@ -625,7 +594,6 @@
<string name="enablesmbwithhightemptarget">Abilita SMB con target temporanei \"alti\"</string>
<string name="enablesmbwithhightemptarget_summary">Abilita SMB quando è attivo un target temporaneo \"alto\" (attività fisica, sopra 100 mg/dl o 5.5 mmol/l)</string>
<string name="overview_insulin_label">Insulina</string>
<string name="overview_carbs_label">CHO</string>
<string name="overview_buttons_selection">Tasti</string>
<string name="show_calibration_button_summary">Invia una calibrazione a xDrip+ o apre la finestra di calibrazione del G5</string>
<string name="show_cgm_button_summary">Apre xDrip+, il tasto indietro torna ad AAPS</string>
@ -809,7 +777,6 @@
<string name="nav_logsettings">Impostazioni Log</string>
<string name="resettodefaults">Ripristina valori predefiniti</string>
<string name="nsmalfunction">Malfunzionamento NSClient. Considera il riavvio di NS e NSClient.</string>
<string name="versionavailable">Versione %1$s disponibile</string>
<string name="time_offset">Offset</string>
<string name="setupwizard_preferred_aps_mode">Modalità APS preferita</string>
<string name="treatments_wizard_total_label">Totale</string>
@ -966,8 +933,6 @@
<string name="copy_short">COPIA</string>
<string name="addnew">Aggiungi nuovo</string>
<string name="versionChecker">Controllo versione</string>
<string name="signature_verifier">Verificatore firma</string>
<string name="running_invalid_version">Abbiamo rilevato che stai eseguendo una versione non valida. Loop disabilitato!</string>
<string name="old_version">versione datata</string>
<string name="very_old_version">versione molto datata</string>
<string name="new_version_warning">Nuova versione disponibile da almeno %1$d giorni! Ritorno a LGS dopo %2$d giorni, disattivazione del loop dopo %3$d giorni</string>

View file

@ -3,7 +3,7 @@
<string name="dia_whatmeansdia">מה נכון לגבי משך פעילות אינסולין (DIA)?</string>
<string name="dia_label_exam">משך פעילות האינסולין (DIA)</string>
<string name="dia_profile">יש לקבוע ערך DIA בפרופיל.</string>
<string name="dia_minimumis5h">ערך המינימום המותר הוא 5 שעות.</string>
<string name="dia_minimumis5h">הערך המינימלי הוא 5 שעות.</string>
<string name="dia_hint1">https://androidaps.readthedocs.io/en/latest/EN/Configuration/Config-Builder.html?#insulin</string>
<string name="dia_meaningisequaltodiapump">אם ערך ה- DIA אותו קבעתם במשאבה לפני המעבר ל- AndroidAPS עבד היטב, אפשר להמשיך להשתמש באותו ערך עם הלולאה.</string>
<string name="dia_valuemustbedetermined">עליכם לקבוע לעצמכם את ערך ה- DIA הרצוי.</string>
@ -41,7 +41,7 @@
<string name="noisycgm_label">נתוני הסנסור אינם יציבים.</string>
<string name="noisycgm_whattodo">מה לעשות אם נתוני הסנסור לא יציבים?</string>
<string name="noisycgm_nothing">אין צורך לעשות כלום - AndroidAPS יטפל בכך.</string>
<string name="noisycgm_pause">הפסיקו את הלולאה כדי למנוע מינון איסולין גבוה מדי \\ נמוך מדי.</string>
<string name="noisycgm_pause">הפסיקו את הלולאה כדי למנוע מינון איסולין גבוה מדי\\נמוך מדי.</string>
<string name="noisycgm_replacesensor">יש להחליף סנסור שבאופן קבוע מספק נתוני רועשים ו/או לא מדויקים.</string>
<string name="noisycgm_checksmoothing">יש לוודא שיישום הסנסור מספק נתונים איכותיים ו- \"חלקים\".</string>
<string name="noisycgm_hint1">https://androidaps.readthedocs.io/en/latest/EN/Usage/Smoothing-Blood-Glucose-Data-in-xDrip.html#smoothing-blood-glucose-data</string>

View file

@ -53,22 +53,4 @@
<string name="notconnected">אין חיבור לאינטרנט</string>
<string name="failedretrievetime">אחזור השעה נכשל</string>
<string name="requirementnotmet">דרישות המשימה לא נענו</string>
<plurals name="objective_days">
<item quantity="one">%1$d יום</item>
<item quantity="two">%1$d ימים</item>
<item quantity="many">%1$d ימים</item>
<item quantity="other">%1$d ימים</item>
</plurals>
<plurals name="objective_hours">
<item quantity="one">%1$d שעה</item>
<item quantity="two">%1$d שעות</item>
<item quantity="many">%1$d שעות</item>
<item quantity="other">%1$d שעות</item>
</plurals>
<plurals name="objective_minutes">
<item quantity="one">%1$d דקה</item>
<item quantity="two">%1$d דקות</item>
<item quantity="many">%1$d דקות</item>
<item quantity="other">%1$d דקות</item>
</plurals>
</resources>

View file

@ -14,7 +14,6 @@
<string name="reset_db_confirm">אתם בטוחים שאתם רוצים לאפס את מסדי הנתונים?</string>
<string name="nav_exit">יציאה</string>
<string name="ns_sync_use_absolute_title">השתמש תמיד בערכים בזאלים מוחלטים</string>
<string name="alert_dialog_storage_permission_text">נא לאתחל את הסמרטפון שלכם או הפעילו מחדש את אפלקציית AndroidAPS בהגדרות המערכת \nאחרת AndroidAPS לא יוכל לבצע רישום (חשוב לעקוב ולוודא כי האלגוריתמים פועלים כראוי)!</string>
<string name="alert_dialog_permission_battery_optimization_failed">נראה שמכשיר זה אינו תומך ברשימת היתרים למיטוב הסוללה - ייתכן שתיתקל בבעיות ביצועים.</string>
<string name="description_actions">לחצנים לגישה מהירה לפונקציות שימושיות</string>
<string name="description_config_builder">משמש לקביעת תצורה של תוספים פעילים</string>
@ -42,6 +41,7 @@
<string name="description_source_glimp">קבלת ערכי סוכר בדם מ-Glimp.</string>
<string name="description_source_mm640g">קבלת ערכי סוכר בדם מ-600SeriesAndroidUploader.</string>
<string name="description_source_ns_client">הורדת ערכי סוכר בדם מ-Nightscout</string>
<string name="description_source_xdrip">קבלת ערכי סוכר מ-xDrip.</string>
<string name="description_treatments">שמירת כל הטיפולים שנעשו</string>
<string name="description_wear">ניטור ושליטה ב-AndroidAPS באמצעות שעון WearOS.</string>
<string name="description_xdrip_status_line">הצג מידע אודות הלולאה במסך Xdrip בשעון החכם.</string>
@ -118,6 +118,7 @@
<string name="changeyourinput">שנה קלט!</string>
<string name="configbuilder_bgsource">מקור ערכי הסוכר</string>
<string name="configbuilder_bgsource_description">מהו מקור הנתונים של AndroidAPS?</string>
<string name="xdrip">xDrip+</string>
<string name="apsmode_title">מצב APS</string>
<string name="closedloop">לולאה סגורה</string>
<string name="openloop">לולאה פתוחה</string>
@ -166,7 +167,6 @@
<string name="old_master_password">סיסמה ראשית ישנה</string>
<string name="different_password_used">קובץ זה יוצא והוצפן באמצעות סיסמה ראשית שונה. אנא ספקו סיסמה ראשית זו כדי לפענח את הקובץ.</string>
<string name="master_password_will_be_replaced">בעקבות ייבוא ההגדרות הסיסמה הראשית הקיימת תוחלף עם הסיסמה הראשית המיובאת!</string>
<string name="preferences_import_list_title">בחרו קובץ לייבוא</string>
<string name="check_preferences_before_import">בדקו את ההעדפות לפני ביצוע הייבוא:</string>
<string name="check_preferences_cannot_import">ההעדפות לא ניתנות לייבוא!</string>
<string name="check_preferences_dangerous_import">אין לייבא העדפות אלה!</string>
@ -174,39 +174,6 @@
<string name="check_preferences_details_title">פרטי בעיות ייבוא</string>
<string name="check_preferences_import_btn">ייבוא</string>
<string name="check_preferences_import_anyway_btn">ייבא בכל מקרה (מסוכן!)</string>
<string name="metadata_warning_different_flavour">ההעדפות נוצרו בגרסה אחרת של AAPS (%1$s) בעוד לך יש גירסה %2$s. \n\n חלק מההגדרות עלולות להיות חסרות או בלתי תקינות - לאחר הייבוא נא לבדוק ולעדכן את ההעדפות.</string>
<string name="metadata_warning_different_device">ההעדפות נוצרו במכשיר אחר. זה בסדר אם ייבאתם אותן ממכשיר ישן או שונה, אך וודאו שההעדפות שהובאו נכונות!</string>
<string name="metadata_warning_outdated_format">אתם משתמשים פורמט מיושן מגרסאות ישנות של AAPS, שאינו מאובטח! השתמשו בו רק כמוצא אחרון, אם אין לכם קובץ הגדרות בפורמט העדכני, של JSON.</string>
<string name="metadata_warning_old_export">ההעדפות המיובאות הן כבר בנות %1$s ימים! אולי יש לכם עדפות עדכניות יותר או שבחרתם קובץ לא נכון? זכרו לייצא את ההעדפות באופן סדיר!</string>
<string name="metadata_warning_date_format">פורמט תאריך ושעה לא חוקי!</string>
<string name="metadata_warning_different_version">ההעדפות נוצרו בגרסה משנית ישנה של AAPS. זה בסדר אם ייבאתם אותן לאחר שדרוג גרסה, אך וודאו שההעדפות שהובאו נכונות!</string>
<string name="metadata_urgent_different_version">ההעדפות נוצרו בגרסה ראשית אחרת של AAPS. גרסאות ראשיות הן שונות מאוד והגדרותיהן עלולות להיות לא תואמות אחת לשניה. נא לוודא שההעדפות שהובאו נכונות!</string>
<string name="metadata_label_format">פורמט הקובץ</string>
<string name="metadata_label_created_at">נוצר ב-</string>
<string name="metadata_label_aaps_version">גרסת AAPS</string>
<string name="metadata_label_aaps_flavour">גרסת בנייה</string>
<string name="metadata_label_device_name">ייצא את שם מכשיר המטופל</string>
<string name="metadata_label_device_model">מייצא את דגם המכשיר</string>
<string name="metadata_label_encryption">· הצפנת קבצים</string>
<string name="metadata_format_old">פורמט ייצוא ישן</string>
<string name="metadata_format_new">פורמט הצפנה חדש</string>
<string name="metadata_format_debug">פורמט דיבאג חדש (בלתי מוצפן)</string>
<string name="metadata_format_other">פורמט ייצוא לא ידוע</string>
<string name="prefdecrypt_settings_tampered">קובץ ההגדרות פגום</string>
<string name="prefdecrypt_settings_secure">קובץ ההגדרות מאובטח</string>
<string name="prefdecrypt_settings_unencrypted">משתמש בפורמט הגדרות בלתי מאובטח ובלתי מוצפן</string>
<string name="prefdecrypt_wrong_json">שגיאה בפורמט JSON, חסר שדה חובה (פורמט, תוכן, מטא דאטה, בטיחות)</string>
<string name="prefdecrypt_wrong_password">שגיאת פענוח, הסיסמה שהתקבלה לא מפענחת את הקובץ</string>
<string name="prefdecrypt_issue_missing_file_hash">בקרת קבצים (hash) חסרה, לא ניתן לאמת את אותנטיות ההגדרות!</string>
<string name="prefdecrypt_issue_modified">הקובץ שונה לאחר הייצוא!</string>
<string name="prefdecrypt_issue_parsing">שגיאת פענוח, נתוח ההעדפות נכשל!</string>
<string name="prefdecrypt_issue_wrong_pass">שגיאת פענוח, הסיסמה שסופקה אינה חוקית או שקובץ ההגדרות שונה! יתכן שהקובץ המיובא יוצא עם סיסמה ראשית אחרת.</string>
<string name="prefdecrypt_issue_wrong_format">תצורת הצפנה חסרה, פורמט ההגדרות אינו חוקי!</string>
<string name="prefdecrypt_issue_wrong_algorithm">לא צוין או לא נתמך אלגוריתם ההצפנה!</string>
<string name="exported_ago" comment="at placeholder we add pluralized number of hours/minutes">יוצא לפני %1$s</string>
<string name="exported_at" comment="at placeholder we add export date">יוצא ב %1$s</string>
<string name="exported_less_than_hour_ago">יוצא לפני פחות משעה</string>
<string name="in_directory" comment="placeholder is for exported file path">בספרייה: %1$s</string>
<string name="end_user_license_agreement">הסכם רישיון למשתמש</string>
<string name="end_user_license_agreement_text">לא מיועד לשימוש למטרת קבלת החלטות רפואיות. בעלי הזכויות מספקים את התוכנית כפי שהיא - \"AS IS\", ללא אחריות מכל סוג שהוא. כל סיכון הנובע מאיכות ו\או ביצועי התוכנה הוא באחריותך בלבד. במידה ותימצא תקלה בתוכנית, אתם תשאו בכל עלויות שיגרמו לך בשל התקלה.</string>
<string name="end_user_license_agreement_i_understand">אני מבין ומסכים</string>
@ -283,6 +250,8 @@
<string name="mealbolus">ארוחה</string>
<string name="correctionbous">תיקון</string>
<string name="actions">פעולות</string>
<string name="ns_upload_only">(מסוכן להשבית) העלאה בלבד לנייטסקאוט</string>
<string name="ns_upload_only_summary">העלאה בלבד של נתונים לנייטסקאוט. לא מתאים לשימוש אלא אם מקור נתוני הסוכר הוא מקומי כדוגמת xDrip. לא מתאים לשימוש בפרופילים מקוונים מנייטסקאוט.\n!!! אזהרה !!! ביטול אפשרות זו עלולה לגרום לתקלות ולמינון יתר של אינסולין אם אחד או יותר מרכיבי המערכת (AAPS, xDrip, נייטסקאוט) אינו מוגדר כהלכה. וודאו היטב שהנתונים המוצגים ב-AAPS תואמים את מצב המשאבה!</string>
<string name="pumpNotInitialized">משאבה לא הופעלה!</string>
<string name="primefill">תיחול\\מילוי</string>
<string name="fillwarning">נא ודאו שהכמות מתאימה למפרט ערכת העירוי שלכם!</string>
@ -337,6 +306,7 @@
<string name="smscommunicator_shortname">SMS</string>
<string name="short_tabtitles">קצר את כותרות הלשוניות</string>
<string name="always_use_shortavg">התבסס על הפרש ממוצע קצר במקום הפרש פשוט\\רגיל</string>
<string name="always_use_shortavg_summary">לשימוש כאשר נתונים ממקור לא מפוקח כמו xDrip אינם יציבים.</string>
<string name="profile">פרופיל</string>
<string name="openapsama_max_daily_safety_multiplier_summary">ערך ברירת מחדל: 3 מנגנון הגנה עיקרי של OpenAPS. מגביל את המינון הבזאלי לעד פי 3 מהמינון הבזאלי הגבוה ביותר שהוגדר. ברוב המקרים אין צורך לשנות ערך זה, אך יש לזכור שזו המשמעות של “3x max daily; 4x current” בדיון על מנגנוני הגנה.</string>
<string name="openapsama_current_basal_safety_multiplier_summary">ערך ברירת מחדל: 4 זהו החצי השני של מנגנון הגנה עיקרי של OpenAPS, והחצי השני של \"3x max daily; 4x current\" במנגנוני ההגנה. המשמעות היא שהמינון הבזאלי, ללא קשר למקסימום שנקבע במשאבה, אינו יכול להיות גבוה יותר ממספר זה כפול הקצב הבזאלי הנוכחי. מיועד למנוע כניסה לתחומים מסוכנים ע\"י קביעת קצב בזאלי גבוה לפני הבנה של פעולת האלגוריתם. שוב: ברירת המחדל היא x4, רוב המשתמשים לעולם אינם צריכים לשנות ערך זה ואם הם מרגישים שמנגנון הגנה זה מפריע להם, הפתרון הוא בשינוי של הגדרות אחרות.</string>
@ -350,6 +320,9 @@
<string name="smscommunicator_invalidphonennumber">מספר טלפון ל SMS לא תקין</string>
<string name="overview_calibration">כיול</string>
<string name="xdripnotinstalled">xDrip+ אינו מותקן</string>
<string name="calibrationsent">כיול נשלח ל-xDrip+</string>
<string name="smscommunicator_calibrationsent">הכיול נשלח. יש לאשר את קבלת כיולים ב-xDrip+.</string>
<string name="smscommunicator_calibrationfailed">xDrip אינו מקבל כיולים</string>
<string name="pumpsuspended">משאבה מושהית</string>
<string name="executing">מבצע</string>
<string name="virtualpump_settings">הגדרות משאבה וירטואלית</string>
@ -452,6 +425,8 @@
<string name="nav_about">אודות</string>
<string name="smscommunicator_missingsmspermission">הרשאות SMS חסרות</string>
<string name="smscommunicator_missingphonestatepermission">הרשאת סטטוס הטלפון חסרה</string>
<string name="xdripstatus_settings">מצב xDrip (שעון)</string>
<string name="xdripstatus">שורת מצב xDrip (שעון)</string>
<string name="xdripstatus_shortname">xDS</string>
<string name="wear_showbgi_title">הצג השפעת רמת הסוכר</string>
<string name="wear_showbgi_summary">הוסף השפעת הסוכר לשורת הסטטוס</string>
@ -494,6 +469,7 @@
<string name="mdtp_cancel">ביטול</string>
<string name="notloadedplugins">לא כל הפרופילים נטענו!</string>
<string name="valuesnotstored">הערכים לא נשמרו</string>
<string name="ns_localbroadcasts">אפשר הפצה לאפליקציות אחרות (כגון xDrip). אין להפעיל אם מותקן לכם יותר ממופע אחד של AAPS או NSClient!</string>
<string name="ns_localbroadcasts_title">אפשר שידורים מקומיים.</string>
<string name="careportal_newnstreatment_duration_min_label">משך [min]</string>
<string name="openapssmb">OpenAPS SMB</string>
@ -519,7 +495,7 @@
<string name="activity_target">ערך מטרת פעילות</string>
<string name="hypo_duration">משך היפו</string>
<string name="hypo_target">ערך מטרת היפו</string>
<string name="reuse">שימוש חוזר</string>
<string name="reuse_profile_pct_hours">שימוש מחדש %1$d%% %2$d שעות</string>
<string name="wearcontrol_title">שליטה מהשעון</string>
<string name="wearcontrol_summary">הגדירו ערכי מטרה זמניים וציינו טיפולים מהשעון.</string>
<string name="food">מזון</string>
@ -618,7 +594,6 @@
<string name="enablesmbwithhightemptarget">הפעלת SMB עם ערכי מטרה גבוהים</string>
<string name="enablesmbwithhightemptarget_summary">הפעלת SMB כאשר יש ערך מטרה זמני גבוה פעיל (פעילות, מעל 100 mg/dl או 5.5 mmol/l)</string>
<string name="overview_insulin_label">אינסולין</string>
<string name="overview_carbs_label">פחמימות</string>
<string name="overview_buttons_selection">מקשים</string>
<string name="show_calibration_button_summary">שולח כיול ל- xDrip או פותח את חלון הכיול של G5</string>
<string name="show_cgm_button_summary">פותח xDrip, לחצני אחורה חוזר ל-AAPS</string>
@ -802,7 +777,6 @@
<string name="nav_logsettings">הגדרות יומן רישום</string>
<string name="resettodefaults">אפס לברירת המחדל</string>
<string name="nsmalfunction">תקלה ב-NSClient. שקלו להפעיל את Nightscout ו-NSClient מחדש.</string>
<string name="versionavailable">גרסה %1$s זמינה</string>
<string name="time_offset">היסט זמן</string>
<string name="setupwizard_preferred_aps_mode">מצב APS מועדף</string>
<string name="treatments_wizard_total_label">סה\"כ</string>
@ -959,8 +933,6 @@
<string name="copy_short">העתקה</string>
<string name="addnew">הוסף חדש</string>
<string name="versionChecker">בודק גרסה</string>
<string name="signature_verifier">מאמת חתימה</string>
<string name="running_invalid_version">זיהינו שאתם משתמשים בגרסה לא תקפה. הלולאה מושבתת!</string>
<string name="old_version">גרסה ישנה</string>
<string name="very_old_version">גרסה ישנה מאוד</string>
<string name="new_version_warning">גרסה חדשה זמינה כבר %1$d ימים! הגבלה להשהיה עקב סוכר נמוך תחל אחרי %2$d ימים, הלולאה תושבת אחרי %3$d ימים</string>
@ -1164,6 +1136,7 @@
<string name="donate_your_data_to_science">תרמו את נתוניכם למדע</string>
<string name="open_humans_short">OH</string>
<string name="you_have_been_signed_out_of_open_humans">התנתקתם מ-Open Humans</string>
<string name="click_here_to_sign_in_again_if_this_wasnt_on_purpose">לחצו כאן כדי להתחבר מחדש אם זה לא היה בכוונה.</string>
<string name="only_upload_if_connected_to_wifi">אפשר העלאה רק אם מחובר ל-WiFi</string>
<string name="only_upload_if_charging">אפשר העלאה רק בזמן טעינת הסוללה</string>
<string name="worker_state">מצב עובד: %s</string>
@ -1185,4 +1158,5 @@
<string name="time_to_eat">זמן לאכול!\nהפעילו את אשף הבולוסים וחשבו בולוס חדש.</string>
<string name="timetoeat">זמן לאכול</string>
<string name="fabric_upload_disabled">העלאת רשומות קריסה מושבתת!</string>
<string name="graph_menu_divider_header">גרף</string>
</resources>

View file

@ -49,13 +49,4 @@
<string name="notconnected">인터넷에 연결되지 않음</string>
<string name="failedretrievetime">시간을 가져오지 못했습니다</string>
<string name="requirementnotmet">목표 요구 사항이 충족되지 않음</string>
<plurals name="objective_days">
<item quantity="other">%1$d 일</item>
</plurals>
<plurals name="objective_hours">
<item quantity="other">%1$d 시간</item>
</plurals>
<plurals name="objective_minutes">
<item quantity="other">%1$d 분</item>
</plurals>
</resources>

View file

@ -13,7 +13,6 @@
<string name="reset_db_confirm">데이터 베이스를 정말 초기화하시겠습니까?</string>
<string name="nav_exit">종료</string>
<string name="ns_sync_use_absolute_title">Basal 절대값 사용하기</string>
<string name="alert_dialog_storage_permission_text">폰을 재부팅하거나 AndroidAPS를 재시작하세요 \n그렇지 않으면 로그 기록이 되지 않습니다.(알고리즘이 정상적인 작동하는지 확인하기 위해 로그가 필요합니다.)!</string>
<string name="alert_dialog_permission_battery_optimization_failed">이 장치는 배터리 최적화 화이트리스트를 지원하지 않습니다 - 성능 문제가 발생할 수 있습니다.</string>
<string name="description_actions">일반 기능을 빠르게 실행시킬 버튼</string>
<string name="description_config_builder">활성화된 플러그인을 구성하는 데 사용됩니다.</string>
@ -404,7 +403,6 @@
<string name="activity_target">활동 목표</string>
<string name="hypo_duration">저혈당 기간</string>
<string name="hypo_target">저혈당 목표</string>
<string name="reuse">재사용</string>
<string name="wearcontrol_title">워치로 제어하기</string>
<string name="wearcontrol_summary">임시목표와 관리입력을 워치로 설정합니다.</string>
<string name="food">음식</string>
@ -495,7 +493,6 @@
<string name="enablesmbwithtemptarget_summary">활성화된 임시 목표(식사직전, 운동)가 있으면 SMB를 사용합니다.</string>
<string name="enablesmbwithhightemptarget">높은 임시 목표에서 SMB 사용하기</string>
<string name="overview_insulin_label">인슐린</string>
<string name="overview_carbs_label">탄수화물</string>
<string name="overview_buttons_selection">버튼</string>
<string name="show_calibration_button_summary">xDrip+에 보정값을 전송하거나 G5 보정창을 엽니다.</string>
<string name="show_cgm_button_summary">xDrip+를 열고, 뒤로 버튼을 누르면 AAPS로 돌아갑니다.</string>
@ -661,7 +658,6 @@
<string name="nav_logsettings">로그 설정</string>
<string name="resettodefaults">기본값으로 초기화</string>
<string name="nsmalfunction">NSClient가 정상적으로 작동하지 않습니다. Nightscout와 NSClient를 재시작 해보세요.</string>
<string name="versionavailable">%1$s 버전이 사용 가능합니다.</string>
<string name="time_offset">시간 이동</string>
<string name="setupwizard_preferred_aps_mode">선호하는 APS 모드</string>
<string name="treatments_wizard_total_label">합계</string>
@ -811,8 +807,6 @@
<string name="copy_short">복사</string>
<string name="addnew">새로 추가</string>
<string name="versionChecker">버전 검사기</string>
<string name="signature_verifier">서명 확인</string>
<string name="running_invalid_version">유효하지 않은 버전을 이용 중입니다. Loop가 비활성화 되었습니다!</string>
<string name="old_version">오래된 버전</string>
<string name="very_old_version">아주 오래된 버전</string>
<string name="new_version_warning">최소 %1$d일 새버전이 가능합니다! %2$d일 후엔 LGS(저혈당주입중지)으로 복귀되며, %3$d일이후엔 Loop가 비활성화 될 것입니다</string>

View file

@ -54,22 +54,4 @@
<string name="notconnected">Neprisijungta prie interneto</string>
<string name="failedretrievetime">Nepavyko nuskaityti laiko</string>
<string name="requirementnotmet">Tikslo reikalavimai neįvykdyti</string>
<plurals name="objective_days">
<item quantity="one">%1$d d.</item>
<item quantity="few">%1$d d.</item>
<item quantity="many">%1$d d.</item>
<item quantity="other">%1$d d.</item>
</plurals>
<plurals name="objective_hours">
<item quantity="one">%1$d val.</item>
<item quantity="few">%1$d val.</item>
<item quantity="many">%1$d val.</item>
<item quantity="other">%1$d val.</item>
</plurals>
<plurals name="objective_minutes">
<item quantity="one">%1$d min.</item>
<item quantity="few">%1$d min.</item>
<item quantity="many">%1$d min.</item>
<item quantity="other">%1$d min.</item>
</plurals>
</resources>

View file

@ -14,7 +14,6 @@
<string name="reset_db_confirm">Ar tikrai norite iš naujo nustatyti duomenų bazę?</string>
<string name="nav_exit">Išeiti</string>
<string name="ns_sync_use_absolute_title">Visada naudoti bazės absoliučias vertes</string>
<string name="alert_dialog_storage_permission_text">Prašome iš naujo paleisti telefoną arba sistemos nustatymuose iš naujo paleisti AndroidAPS \nkitaip AndroidAPS negalės registruoti prisijungimų (svarbu stebėti ir tikrinti ar algoritmai veikia tinkamai)!</string>
<string name="alert_dialog_permission_battery_optimization_failed">Šis įrenginys nepalaiko baterijos optimizavimo išimčių - galite patirti veikimo nesklandumų.</string>
<string name="description_actions">Mygtukai greitesniam pagrindinių funkcijų paleidimui</string>
<string name="description_config_builder">Naudojama aktyvių įskiepių konfigūravimui</string>
@ -166,7 +165,6 @@
<string name="old_master_password">Senasis pagrindinis slaptažodis</string>
<string name="different_password_used">Šis failas buvo eksportuotas ir užšifruotas su kitokiu pagrindiniu slaptažodžiu. Įveskite senąjį pagrindinį slaptažodį dešifruoti failui.</string>
<string name="master_password_will_be_replaced">Sėkmingas importavimas reiškia, kad dabartinis pagrindinis slaptažodis BUS PAKEISTAS senuoju pagrindiniu slaptažodžiu!</string>
<string name="preferences_import_list_title">Pasirinkite failą importavimui</string>
<string name="check_preferences_before_import">Prašom patikrinti nustatymus prieš importuojant:</string>
<string name="check_preferences_cannot_import">Nustatymai negali būti importuoti!</string>
<string name="check_preferences_dangerous_import">Nustatymai neturėtų būti importuoti!</string>
@ -174,39 +172,6 @@
<string name="check_preferences_details_title">Importo sutrikimų detalės</string>
<string name="check_preferences_import_btn">Importas</string>
<string name="check_preferences_import_anyway_btn">Importuoti vistiek (PAVOJINGA!)</string>
<string name="metadata_warning_different_flavour">Nustatymai sukurti naudojant skirtingą AAPS versiją (%1$s), jūsų turima: %2$s.\n\nKai kurių nustatymų gali trūkti arba jie gali būti neteisingi - po importavimo patikrinkite ir atnaujinkite nustatymus.</string>
<string name="metadata_warning_different_device">Nustatymai buvo sukurti naudojant kitą prietaisą. Viskas gerai, jei importuojante iš senesnio/kito telefono, tačiau įsitikinkite, kad visi importuoti nustatymai yra teisingi!</string>
<string name="metadata_warning_outdated_format">Jūs naudojate pasenusį formatą iš senos AAPS versijos, kuris nėra saugus! Naudokite tik kraštutiniu atveju, jei neturite nustatymų failo dabartiniu, JSON formatu.</string>
<string name="metadata_warning_old_export">Importuoti nustatymai yra %1$s d. senumo! Patikrinkite, gal pasirinkote neteisingą failą ir turite naujesnius? Nepamirškite reguliariai eksportuoti nustatymų!</string>
<string name="metadata_warning_date_format">Neteisingas datos ir laiko formatas!</string>
<string name="metadata_warning_different_version">Parametrai iš kitos palaikomosios programos versijos. Jei importuojate po atnaujinimo, tai yra normalu, bet po importavimo patikrinkite, ar visos nuostatos vis dar teisingos!</string>
<string name="metadata_urgent_different_version">Parametrai iš kitos pagrindinės programos versijos. Pagrindinės versijos labai skiriasi ir gali turėti nesuderinamų parametrų! Po importavimo įsitikinkite, kad parametrai vis dar teisingi!</string>
<string name="metadata_label_format">Failo formatas</string>
<string name="metadata_label_created_at">Sukurta</string>
<string name="metadata_label_aaps_version">AAPS versija</string>
<string name="metadata_label_aaps_flavour">Versijos variantas</string>
<string name="metadata_label_device_name">Eksportuojamas paciento vardas</string>
<string name="metadata_label_device_model">Eksportuojamas prietaiso modelis</string>
<string name="metadata_label_encryption">Failo šifravimas</string>
<string name="metadata_format_old">Senas eksporto formatas</string>
<string name="metadata_format_new">Naujas šifruotas formatas</string>
<string name="metadata_format_debug">Naujas derinimo formatas (nešifruotas)</string>
<string name="metadata_format_other">Nežinomas eksporto formatas</string>
<string name="prefdecrypt_settings_tampered">Nustatymų failas sugadintas</string>
<string name="prefdecrypt_settings_secure">Nustatymų failas yra saugus</string>
<string name="prefdecrypt_settings_unencrypted">Naudojamas nesaugus, nešifruotas nustatymų formatas</string>
<string name="prefdecrypt_wrong_json">JSON formato klaida, neužpildyti reikalingi laukai (formatas, turinys, metaduomenys arba saugumas)</string>
<string name="prefdecrypt_wrong_password">Iššifravimo klaida, netinkamas slaptažodis</string>
<string name="prefdecrypt_issue_missing_file_hash">Trūksta failo kontrolinės žymės, neįmanoma patikrinti autentiškumo!</string>
<string name="prefdecrypt_issue_modified">Failas pakeistas po eksportavimo!</string>
<string name="prefdecrypt_issue_parsing">Iššifravimo klaida, nustatymų analizė neįvyko!</string>
<string name="prefdecrypt_issue_wrong_pass">Iššifravimas klaida, slaptažodis yra neteisingas arba nustatymų failas buvo pakeistas! Taip nutinka, jei importuotas failas buvo eksportuotas su kitu slaptažodžiu.</string>
<string name="prefdecrypt_issue_wrong_format">Trūksta šifravimo sąrankos parametrų, nustatymų formatas yra neteisingas!</string>
<string name="prefdecrypt_issue_wrong_algorithm">Nepalaikomas arba nepatikslintas šifravimo algoritmas!</string>
<string name="exported_ago" comment="at placeholder we add pluralized number of hours/minutes">eksportuota prieš %1$s</string>
<string name="exported_at" comment="at placeholder we add export date">eksportuota %1$s</string>
<string name="exported_less_than_hour_ago">eksportuota mažiau nei prieš valandą</string>
<string name="in_directory" comment="placeholder is for exported file path">kataloge: %1$s</string>
<string name="end_user_license_agreement">Licencinė sutartis su vartotoju</string>
<string name="end_user_license_agreement_text">PROGRAMA NEGALI BŪTI NAUDOJAMA GYDYMO SPRENDIMAMS PRIIMTI. PAGAL GALIOJANČIUS ĮSTATYMUS PROGRAMA NESUTEIKIA JOKIŲ GARANTIJŲ VARTOTOJUI. JEI RAŠTU NENURODYTA KITAIP, PROGRAMOS AUTORINIŲ TEISIŲ TURĖTOJAS IR/AR KITOS ŠALYS PATEIKIA PROGRAMĄ \"KAIP YRA\" BE JOKIŲ GARANTIJŲ, TIEK AKIVAIZDŽIŲ, TIEK NUMANOMŲ, ĮSKAITANT, BET NEAPSIRIBOJANT GALIMYBĘ NAUDOTI PROGRAMĄ KOMERCINIAMS AR KITOKIEMS DALINIAMS TIKSLAMS. RIZIKĄ, KYLANČIĄ NAUDOJANT PROGRAMĄ PRISIIMA PATS VARTOTOJAS. JEI PROGRAMA VEIKIA NETINKAMAI, IŠLAIDOS, SUSIJUSIOS SU PROGRAMOS SERVISU, TAISYMU AR KOREGAVIMU, TENKA VARTOTOJUI.</string>
<string name="end_user_license_agreement_i_understand">SUPRATAU IR SUTINKU</string>
@ -515,7 +480,6 @@
<string name="activity_target">\"Aktyvumas\" tikslas</string>
<string name="hypo_duration">\"Hipo\" trukmė</string>
<string name="hypo_target">\"Hipo\" tikslas</string>
<string name="reuse">naudoti pakartotinai</string>
<string name="wearcontrol_title">Laikrodžio valdikliai</string>
<string name="wearcontrol_summary">Nustatyti Laikinus Tikslus ir įvesti terapinius įrašus iš laikrodžio.</string>
<string name="food">Maistas</string>
@ -614,7 +578,6 @@
<string name="enablesmbwithhightemptarget">Įjungti SMB su intensyviais laikinais tikslais</string>
<string name="enablesmbwithhightemptarget_summary">Įjungti SMB, kai yra aktyvus aukštas tikslas (aktyvumas, daugiau nei 100 mg/dl arba 5,5 mmol/l)</string>
<string name="overview_insulin_label">Insulinas</string>
<string name="overview_carbs_label">AV</string>
<string name="overview_buttons_selection">Mygtukai</string>
<string name="show_calibration_button_summary">Siunčia kalibravimą į xDrip+ arba atidaro G5 kalibravimo dialogą</string>
<string name="show_cgm_button_summary">Atidaro xDrip+, o mygtukas ATGAL gražina į AAPS</string>
@ -798,7 +761,6 @@
<string name="nav_logsettings">Įrašų nustatymai</string>
<string name="resettodefaults">Atkurti numatytuosius</string>
<string name="nsmalfunction">NSClient sutrikimas. Reikėtų paleisti iš naujo NS ir NSClient.</string>
<string name="versionavailable">Versiją %1$s jau galima naudoti</string>
<string name="time_offset">Laiko poslinkis</string>
<string name="setupwizard_preferred_aps_mode">Pageidaujamas DKS režimas</string>
<string name="treatments_wizard_total_label">Viso</string>
@ -955,8 +917,6 @@
<string name="copy_short">KOPIJUOTI</string>
<string name="addnew">Pridėti naują</string>
<string name="versionChecker">Versijos tikrintuvas</string>
<string name="signature_verifier">Parašo tikrinimas</string>
<string name="running_invalid_version">Nustatyta, kad naudojate neteisingą versiją. Ciklas išjungtas!</string>
<string name="old_version">sena versija</string>
<string name="very_old_version">labai sena versija</string>
<string name="new_version_warning">Nauja versija pasiekiama mažiausiai %1$d d.! Po %2$d grįšite prie stabdymo prie žemo, po %3$d ciklas bus išjungtas</string>

Some files were not shown because too many files have changed in this diff Show more