diff --git a/.idea/dictionaries/project_dictionary.xml b/.idea/dictionaries/project_dictionary.xml
index 49af19275e..d167564b60 100644
--- a/.idea/dictionaries/project_dictionary.xml
+++ b/.idea/dictionaries/project_dictionary.xml
@@ -5,6 +5,7 @@
abcdef
acked
actionstring
+ aidex
allowednumbers
androidaps
autosens
@@ -105,4 +106,4 @@
ypsopump
-
\ No newline at end of file
+
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 668d69029d..a5a5ddb79c 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -34,6 +34,10 @@
+
+
+
+
+
+
diff --git a/app/src/main/java/info/nightscout/androidaps/activities/HistoryBrowseActivity.kt b/app/src/main/java/info/nightscout/androidaps/activities/HistoryBrowseActivity.kt
index 52a5c486ea..ab12179b23 100644
--- a/app/src/main/java/info/nightscout/androidaps/activities/HistoryBrowseActivity.kt
+++ b/app/src/main/java/info/nightscout/androidaps/activities/HistoryBrowseActivity.kt
@@ -1,7 +1,6 @@
package info.nightscout.androidaps.activities
import android.annotation.SuppressLint
-import android.app.DatePickerDialog
import android.content.Context
import android.os.Bundle
import android.util.DisplayMetrics
@@ -9,6 +8,7 @@ import android.view.ViewGroup
import android.widget.LinearLayout
import android.widget.RelativeLayout
import android.widget.TextView
+import com.google.android.material.datepicker.MaterialDatePicker
import com.jjoe64.graphview.GraphView
import dagger.android.HasAndroidInjector
import info.nightscout.androidaps.R
@@ -148,33 +148,19 @@ class HistoryBrowseActivity : NoSplashAppCompatActivity() {
true
}
- // create an OnDateSetListener
- val dateSetListener = DatePickerDialog.OnDateSetListener { _, year, monthOfYear, dayOfMonth ->
- Calendar.getInstance().also { calendar ->
- calendar.timeInMillis = overviewData.fromTime
- calendar[Calendar.YEAR] = year
- calendar[Calendar.MONTH] = monthOfYear
- calendar[Calendar.DAY_OF_MONTH] = dayOfMonth
- calendar[Calendar.MILLISECOND] = 0
- calendar[Calendar.SECOND] = 0
- calendar[Calendar.MINUTE] = 0
- calendar[Calendar.HOUR_OF_DAY] = 0
- setTime(calendar.timeInMillis)
- binding.date.text = dateUtil.dateAndTimeString(overviewData.fromTime)
- }
- loadAll("onClickDate")
- }
-
binding.date.setOnClickListener {
- val cal = Calendar.getInstance()
- cal.timeInMillis = overviewData.fromTime
- DatePickerDialog(
- this, R.style.MaterialPickerTheme,
- dateSetListener,
- cal.get(Calendar.YEAR),
- cal.get(Calendar.MONTH),
- cal.get(Calendar.DAY_OF_MONTH)
- ).show()
+ MaterialDatePicker.Builder.datePicker()
+ .setSelection(dateUtil.timeStampToUtcDateMilis(overviewData.fromTime))
+ .setTheme(R.style.DatePicker)
+ .build()
+ .apply {
+ addOnPositiveButtonClickListener { selection ->
+ setTime(dateUtil.mergeUtcDateToTimestamp(overviewData.fromTime, selection))
+ binding.date.text = dateUtil.dateAndTimeString(overviewData.fromTime)
+ loadAll("onClickDate")
+ }
+ }
+ .show(supportFragmentManager, "history_date_picker")
}
val dm = DisplayMetrics()
@@ -184,9 +170,8 @@ class HistoryBrowseActivity : NoSplashAppCompatActivity() {
else
windowManager.defaultDisplay.getMetrics(dm)
-
axisWidth = if (dm.densityDpi <= 120) 3 else if (dm.densityDpi <= 160) 10 else if (dm.densityDpi <= 320) 35 else if (dm.densityDpi <= 420) 50 else if (dm.densityDpi <= 560) 70 else 80
- binding.bgGraph.gridLabelRenderer?.gridColor = rh.gac(this, R.attr.graphgrid)
+ binding.bgGraph.gridLabelRenderer?.gridColor = rh.gac(this, R.attr.graphGrid)
binding.bgGraph.gridLabelRenderer?.reloadStyles()
binding.bgGraph.gridLabelRenderer?.labelVerticalWidth = axisWidth
@@ -259,12 +244,12 @@ class HistoryBrowseActivity : NoSplashAppCompatActivity() {
val graph = GraphView(this)
graph.layoutParams = LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, rh.dpToPx(100)).also { it.setMargins(0, rh.dpToPx(15), 0, rh.dpToPx(10)) }
- graph.gridLabelRenderer?.gridColor = rh.gac(R.attr.graphgrid)
+ graph.gridLabelRenderer?.gridColor = rh.gac(R.attr.graphGrid)
graph.gridLabelRenderer?.reloadStyles()
graph.gridLabelRenderer?.isHorizontalLabelsVisible = false
graph.gridLabelRenderer?.labelVerticalWidth = axisWidth
graph.gridLabelRenderer?.numVerticalLabels = 3
- graph.viewport.backgroundColor = rh.gac(this, R.attr.viewPortbackgroundColor)
+ graph.viewport.backgroundColor = rh.gac(this, R.attr.viewPortBackgroundColor)
relativeLayout.addView(graph)
val label = TextView(this)
@@ -421,4 +406,4 @@ class HistoryBrowseActivity : NoSplashAppCompatActivity() {
binding.progressBar.progress = percent
binding.progressBar.visibility = (percent != 100).toVisibilityKeepSpace()
}
-}
\ No newline at end of file
+}
diff --git a/app/src/main/java/info/nightscout/androidaps/activities/MyPreferenceFragment.kt b/app/src/main/java/info/nightscout/androidaps/activities/MyPreferenceFragment.kt
index 57b39e4622..f4a679a9b0 100644
--- a/app/src/main/java/info/nightscout/androidaps/activities/MyPreferenceFragment.kt
+++ b/app/src/main/java/info/nightscout/androidaps/activities/MyPreferenceFragment.kt
@@ -87,6 +87,7 @@ class MyPreferenceFragment : PreferenceFragmentCompat(), OnSharedPreferenceChang
@Inject lateinit var poctechPlugin: PoctechPlugin
@Inject lateinit var tomatoPlugin: TomatoPlugin
@Inject lateinit var glunovoPlugin: GlunovoPlugin
+ @Inject lateinit var aidexPlugin: AidexPlugin
@Inject lateinit var smsCommunicatorPlugin: SmsCommunicatorPlugin
@Inject lateinit var statusLinePlugin: StatusLinePlugin
@Inject lateinit var tidepoolPlugin: TidepoolPlugin
@@ -163,6 +164,7 @@ class MyPreferenceFragment : PreferenceFragmentCompat(), OnSharedPreferenceChang
addPreferencesFromResourceIfEnabled(tomatoPlugin, rootKey)
addPreferencesFromResourceIfEnabled(glunovoPlugin, rootKey)
addPreferencesFromResourceIfEnabled(poctechPlugin, rootKey)
+ addPreferencesFromResourceIfEnabled(aidexPlugin, rootKey)
addPreferencesFromResourceIfEnabled(glimpPlugin, rootKey)
addPreferencesFromResourceIfEnabled(loopPlugin, rootKey, config.APS)
addPreferencesFromResourceIfEnabled(openAPSAMAPlugin, rootKey, config.APS)
@@ -447,4 +449,4 @@ class MyPreferenceFragment : PreferenceFragmentCompat(), OnSharedPreferenceChang
this.filter = filter
preferenceManager?.preferenceScreen?.let { updateFilterVisibility(filter, it) }
}
-}
\ No newline at end of file
+}
diff --git a/app/src/main/java/info/nightscout/androidaps/activities/ProfileHelperActivity.kt b/app/src/main/java/info/nightscout/androidaps/activities/ProfileHelperActivity.kt
index 03c3362d9a..81563f0944 100644
--- a/app/src/main/java/info/nightscout/androidaps/activities/ProfileHelperActivity.kt
+++ b/app/src/main/java/info/nightscout/androidaps/activities/ProfileHelperActivity.kt
@@ -241,10 +241,10 @@ class ProfileHelperActivity : NoSplashAppCompatActivity() {
}
ToastUtils.showToastInUiThread(this, R.string.invalidinput)
}
- binding.age.editText?.id?.let { binding.ageLabel.labelFor = it }
- binding.tdd.editText?.id?.let { binding.tddLabel.labelFor = it }
- binding.weight.editText?.id?.let { binding.weightLabel.labelFor = it }
- binding.basalPctFromTdd.editText?.id?.let { binding.basalPctFromTddLabel.labelFor = it }
+ binding.ageLabel.labelFor = binding.age.editTextId
+ binding.tddLabel.labelFor = binding.tdd.editTextId
+ binding.weightLabel.labelFor = binding.weight.editTextId
+ binding.basalPctFromTddLabel.labelFor = binding.basalPctFromTdd.editTextId
switchTab(0, typeSelected[0], false)
}
@@ -316,7 +316,7 @@ class ProfileHelperActivity : NoSplashAppCompatActivity() {
}
private fun setBackgroundColorOnSelected(tab: Int) {
- binding.menu1.setBackgroundColor(rh.gac(this, if (tab == 1) R.attr.defaultbackground else R.attr.helperProfileColor))
- binding.menu2.setBackgroundColor(rh.gac(this, if (tab == 0) R.attr.defaultbackground else R.attr.examinedProfileColor))
+ binding.menu1.setBackgroundColor(rh.gac(this, if (tab == 1) R.attr.defaultBackground else R.attr.helperProfileColor))
+ binding.menu2.setBackgroundColor(rh.gac(this, if (tab == 0) R.attr.defaultBackground else R.attr.examinedProfileColor))
}
}
diff --git a/app/src/main/java/info/nightscout/androidaps/activities/fragments/TreatmentsBolusCarbsFragment.kt b/app/src/main/java/info/nightscout/androidaps/activities/fragments/TreatmentsBolusCarbsFragment.kt
index e70e7a9cbe..a4fa56a699 100644
--- a/app/src/main/java/info/nightscout/androidaps/activities/fragments/TreatmentsBolusCarbsFragment.kt
+++ b/app/src/main/java/info/nightscout/androidaps/activities/fragments/TreatmentsBolusCarbsFragment.kt
@@ -269,8 +269,6 @@ class TreatmentsBolusCarbsFragment : DaggerFragment() {
}
holder.binding.calculation.tag = ml
- val nextTimestamp = if (mealLinks.size != position + 1) timestamp(mealLinks[position + 1]) else 0L
- holder.binding.delimiter.visibility = dateUtil.isSameDayGroup(timestamp(ml), nextTimestamp).toVisibility()
}
override fun getItemCount() = mealLinks.size
diff --git a/app/src/main/java/info/nightscout/androidaps/activities/fragments/TreatmentsCareportalFragment.kt b/app/src/main/java/info/nightscout/androidaps/activities/fragments/TreatmentsCareportalFragment.kt
index 37713a7e30..820b5d3b93 100644
--- a/app/src/main/java/info/nightscout/androidaps/activities/fragments/TreatmentsCareportalFragment.kt
+++ b/app/src/main/java/info/nightscout/androidaps/activities/fragments/TreatmentsCareportalFragment.kt
@@ -173,8 +173,6 @@ class TreatmentsCareportalFragment : DaggerFragment() {
actionHelper.updateSelection(position, therapyEvent, holder.binding.cbRemove.isChecked)
}
holder.binding.cbRemove.isChecked = actionHelper.isSelected(position)
- val nextTimestamp = if (therapyList.size != position + 1) therapyList[position + 1].timestamp else 0L
- holder.binding.delimiter.visibility = dateUtil.isSameDayGroup(therapyEvent.timestamp, nextTimestamp).toVisibility()
}
override fun getItemCount() = therapyList.size
diff --git a/app/src/main/java/info/nightscout/androidaps/activities/fragments/TreatmentsExtendedBolusesFragment.kt b/app/src/main/java/info/nightscout/androidaps/activities/fragments/TreatmentsExtendedBolusesFragment.kt
index b7ffd407c8..e21bd897ae 100644
--- a/app/src/main/java/info/nightscout/androidaps/activities/fragments/TreatmentsExtendedBolusesFragment.kt
+++ b/app/src/main/java/info/nightscout/androidaps/activities/fragments/TreatmentsExtendedBolusesFragment.kt
@@ -163,8 +163,6 @@ class TreatmentsExtendedBolusesFragment : DaggerFragment() {
}
holder.binding.cbRemove.isChecked = actionHelper.isSelected(position)
}
- val nextTimestamp = if (extendedBolusList.size != position + 1) extendedBolusList[position + 1].timestamp else 0L
- holder.binding.delimiter.visibility = dateUtil.isSameDayGroup(extendedBolus.timestamp, nextTimestamp).toVisibility()
}
override fun getItemCount() = extendedBolusList.size
diff --git a/app/src/main/java/info/nightscout/androidaps/activities/fragments/TreatmentsProfileSwitchFragment.kt b/app/src/main/java/info/nightscout/androidaps/activities/fragments/TreatmentsProfileSwitchFragment.kt
index 92f9d5f38b..49e8c4ca52 100644
--- a/app/src/main/java/info/nightscout/androidaps/activities/fragments/TreatmentsProfileSwitchFragment.kt
+++ b/app/src/main/java/info/nightscout/androidaps/activities/fragments/TreatmentsProfileSwitchFragment.kt
@@ -214,8 +214,6 @@ class TreatmentsProfileSwitchFragment : DaggerFragment() {
}
holder.binding.clone.visibility = (profileSwitch is ProfileSealed.PS).toVisibility()
holder.binding.spacer.visibility = (profileSwitch is ProfileSealed.PS).toVisibility()
- val nextTimestamp = if (profileSwitchList.size != position + 1) profileSwitchList[position + 1].timestamp else 0L
- holder.binding.delimiter.visibility = dateUtil.isSameDayGroup(profileSwitch.timestamp, nextTimestamp).toVisibility()
}
override fun getItemCount() = profileSwitchList.size
diff --git a/app/src/main/java/info/nightscout/androidaps/activities/fragments/TreatmentsTempTargetFragment.kt b/app/src/main/java/info/nightscout/androidaps/activities/fragments/TreatmentsTempTargetFragment.kt
index 028ae4f99a..137d6cf94c 100644
--- a/app/src/main/java/info/nightscout/androidaps/activities/fragments/TreatmentsTempTargetFragment.kt
+++ b/app/src/main/java/info/nightscout/androidaps/activities/fragments/TreatmentsTempTargetFragment.kt
@@ -192,8 +192,6 @@ class TreatmentsTempTargetFragment : DaggerFragment() {
else -> holder.binding.reasonColon.currentTextColor
}
)
- val nextTimestamp = if (tempTargetList.size != position + 1) tempTargetList[position + 1].timestamp else 0L
- holder.binding.delimiter.visibility = dateUtil.isSameDayGroup(tempTarget.timestamp, nextTimestamp).toVisibility()
}
override fun getItemCount() = tempTargetList.size
diff --git a/app/src/main/java/info/nightscout/androidaps/activities/fragments/TreatmentsTemporaryBasalsFragment.kt b/app/src/main/java/info/nightscout/androidaps/activities/fragments/TreatmentsTemporaryBasalsFragment.kt
index da76998092..1f585ecd0a 100644
--- a/app/src/main/java/info/nightscout/androidaps/activities/fragments/TreatmentsTemporaryBasalsFragment.kt
+++ b/app/src/main/java/info/nightscout/androidaps/activities/fragments/TreatmentsTemporaryBasalsFragment.kt
@@ -204,8 +204,6 @@ class TreatmentsTemporaryBasalsFragment : DaggerFragment() {
}
holder.binding.cbRemove.isChecked = actionHelper.isSelected(position)
}
- val nextTimestamp = if (tempBasalList.size != position + 1) tempBasalList[position + 1].timestamp else 0L
- holder.binding.delimiter.visibility = dateUtil.isSameDayGroup(tempBasal.timestamp, nextTimestamp).toVisibility()
}
override fun getItemCount() = tempBasalList.size
diff --git a/app/src/main/java/info/nightscout/androidaps/activities/fragments/TreatmentsUserEntryFragment.kt b/app/src/main/java/info/nightscout/androidaps/activities/fragments/TreatmentsUserEntryFragment.kt
index 0303f5bf7c..bd442ce723 100644
--- a/app/src/main/java/info/nightscout/androidaps/activities/fragments/TreatmentsUserEntryFragment.kt
+++ b/app/src/main/java/info/nightscout/androidaps/activities/fragments/TreatmentsUserEntryFragment.kt
@@ -134,8 +134,6 @@ class TreatmentsUserEntryFragment : DaggerFragment() {
holder.binding.iconSource.setImageResource(userEntryPresentationHelper.iconId(current.source))
holder.binding.values.text = userEntryPresentationHelper.listToPresentationString(current.values)
holder.binding.values.visibility = (holder.binding.values.text != "").toVisibility()
- val nextTimestamp = if (entries.size != position + 1) entries[position + 1].timestamp else 0L
- holder.binding.delimiter.visibility = dateUtil.isSameDayGroup(current.timestamp, nextTimestamp).toVisibility()
}
inner class UserEntryViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
diff --git a/app/src/main/java/info/nightscout/androidaps/di/PluginsModule.kt b/app/src/main/java/info/nightscout/androidaps/di/PluginsModule.kt
index 127643b855..33259f2d18 100644
--- a/app/src/main/java/info/nightscout/androidaps/di/PluginsModule.kt
+++ b/app/src/main/java/info/nightscout/androidaps/di/PluginsModule.kt
@@ -358,6 +358,12 @@ abstract class PluginsModule {
@IntKey(460)
abstract fun bindTomatoPlugin(plugin: TomatoPlugin): PluginBase
+ @Binds
+ @AllConfigs
+ @IntoMap
+ @IntKey(465)
+ abstract fun bindAidexPlugin(plugin: AidexPlugin): PluginBase
+
@Binds
@AllConfigs
@IntoMap
diff --git a/app/src/main/java/info/nightscout/androidaps/di/WorkersModule.kt b/app/src/main/java/info/nightscout/androidaps/di/WorkersModule.kt
index 92c84687b7..78991d111f 100644
--- a/app/src/main/java/info/nightscout/androidaps/di/WorkersModule.kt
+++ b/app/src/main/java/info/nightscout/androidaps/di/WorkersModule.kt
@@ -32,4 +32,5 @@ abstract class WorkersModule {
@ContributesAndroidInjector abstract fun contributesNSClientMbgWorker(): NSClientMbgWorker
@ContributesAndroidInjector abstract fun contributesFoodWorker(): FoodPlugin.FoodWorker
@ContributesAndroidInjector abstract fun contributesCsvExportWorker(): ImportExportPrefsImpl.CsvExportWorker
+ @ContributesAndroidInjector abstract fun contributesAidexWorker(): AidexPlugin.AidexWorker
}
\ No newline at end of file
diff --git a/app/src/main/java/info/nightscout/androidaps/dialogs/CalibrationDialog.kt b/app/src/main/java/info/nightscout/androidaps/dialogs/CalibrationDialog.kt
index bd5daaf965..303df14f60 100644
--- a/app/src/main/java/info/nightscout/androidaps/dialogs/CalibrationDialog.kt
+++ b/app/src/main/java/info/nightscout/androidaps/dialogs/CalibrationDialog.kt
@@ -64,7 +64,7 @@ class CalibrationDialog : DialogFragmentWithDate() {
binding.bg.setParams(savedInstanceState?.getDouble("bg")
?: bg, 36.0, 500.0, 1.0, DecimalFormat("0"), false, binding.okcancel.ok)
binding.units.text = if (units == GlucoseUnit.MMOL) rh.gs(R.string.mmol) else rh.gs(R.string.mgdl)
- binding.bg.editText?.id?.let { binding.bgLabel.labelFor = it }
+ binding.bgLabel.labelFor = binding.bg.editTextId
}
override fun onDestroyView() {
diff --git a/app/src/main/java/info/nightscout/androidaps/dialogs/CarbsDialog.kt b/app/src/main/java/info/nightscout/androidaps/dialogs/CarbsDialog.kt
index 59921a1611..cdf688b4c3 100644
--- a/app/src/main/java/info/nightscout/androidaps/dialogs/CarbsDialog.kt
+++ b/app/src/main/java/info/nightscout/androidaps/dialogs/CarbsDialog.kt
@@ -199,9 +199,9 @@ class CarbsDialog : DialogFragmentWithDate() {
binding.hypoTt.isChecked = false
binding.activityTt.isChecked = false
}
- binding.duration.editText?.id?.let { binding.durationLabel.labelFor = it }
- binding.time.editText?.id?.let { binding.timeLabel.labelFor = it }
- binding.carbs.editText?.id?.let { binding.carbsLabel.labelFor = it }
+ binding.durationLabel.labelFor = binding.duration.editTextId
+ binding.timeLabel.labelFor = binding.time.editTextId
+ binding.carbsLabel.labelFor = binding.carbs.editTextId
}
override fun onDestroyView() {
diff --git a/app/src/main/java/info/nightscout/androidaps/dialogs/CareDialog.kt b/app/src/main/java/info/nightscout/androidaps/dialogs/CareDialog.kt
index 03cb215a7f..994613c38f 100644
--- a/app/src/main/java/info/nightscout/androidaps/dialogs/CareDialog.kt
+++ b/app/src/main/java/info/nightscout/androidaps/dialogs/CareDialog.kt
@@ -165,8 +165,8 @@ class CareDialog : DialogFragmentWithDate() {
?: 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 || options == EventType.EXERCISE)
binding.notesLayout.root.visibility = View.VISIBLE // independent to preferences
- binding.bg.editText?.id?.let { binding.bgLabel.labelFor = it }
- binding.duration.editText?.id?.let { binding.durationLabel.labelFor = it }
+ binding.bgLabel.labelFor = binding.bg.editTextId
+ binding.durationLabel.labelFor = binding.duration.editTextId
}
override fun onDestroyView() {
diff --git a/app/src/main/java/info/nightscout/androidaps/dialogs/ExtendedBolusDialog.kt b/app/src/main/java/info/nightscout/androidaps/dialogs/ExtendedBolusDialog.kt
index 56e7856de9..e4f45c4e1e 100644
--- a/app/src/main/java/info/nightscout/androidaps/dialogs/ExtendedBolusDialog.kt
+++ b/app/src/main/java/info/nightscout/androidaps/dialogs/ExtendedBolusDialog.kt
@@ -75,8 +75,8 @@ class ExtendedBolusDialog : DialogFragmentWithDate() {
val extendedMaxDuration = pumpDescription.extendedBolusMaxDuration
binding.duration.setParams(savedInstanceState?.getDouble("duration")
?: extendedDurationStep, extendedDurationStep, extendedMaxDuration, extendedDurationStep, DecimalFormat("0"), false, binding.okcancel.ok)
- binding.insulin.editText?.id?.let { binding.insulinLabel.labelFor = it }
- binding.duration.editText?.id?.let { binding.durationLabel.labelFor = it }
+ binding.insulinLabel.labelFor = binding.insulin.editTextId
+ binding.durationLabel.labelFor = binding.duration.editTextId
}
override fun onDestroyView() {
diff --git a/app/src/main/java/info/nightscout/androidaps/dialogs/FillDialog.kt b/app/src/main/java/info/nightscout/androidaps/dialogs/FillDialog.kt
index 3d6e2850fd..c52ca8436b 100644
--- a/app/src/main/java/info/nightscout/androidaps/dialogs/FillDialog.kt
+++ b/app/src/main/java/info/nightscout/androidaps/dialogs/FillDialog.kt
@@ -99,7 +99,7 @@ class FillDialog : DialogFragmentWithDate() {
} else {
binding.fillPresetButton3.visibility = View.GONE
}
- binding.fillInsulinamount.editText?.id?.let { binding.fillLabel.labelFor = it }
+ binding.fillLabel.labelFor = binding.fillInsulinamount.editTextId
}
override fun onDestroyView() {
diff --git a/app/src/main/java/info/nightscout/androidaps/dialogs/InsulinDialog.kt b/app/src/main/java/info/nightscout/androidaps/dialogs/InsulinDialog.kt
index 53e5474dd1..5739902be0 100644
--- a/app/src/main/java/info/nightscout/androidaps/dialogs/InsulinDialog.kt
+++ b/app/src/main/java/info/nightscout/androidaps/dialogs/InsulinDialog.kt
@@ -150,8 +150,8 @@ class InsulinDialog : DialogFragmentWithDate() {
binding.recordOnly.setOnCheckedChangeListener { _, isChecked: Boolean ->
binding.timeLayout.visibility = isChecked.toVisibility()
}
- binding.amount.editText?.id?.let { binding.insulinLabel.labelFor = it }
- binding.time.editText?.id?.let { binding.timeLabel.labelFor = it }
+ binding.insulinLabel.labelFor = binding.amount.editTextId
+ binding.timeLabel.labelFor = binding.time.editTextId
}
override fun onDestroyView() {
diff --git a/app/src/main/java/info/nightscout/androidaps/dialogs/ProfileSwitchDialog.kt b/app/src/main/java/info/nightscout/androidaps/dialogs/ProfileSwitchDialog.kt
index c5e3059087..d7c7ecb809 100644
--- a/app/src/main/java/info/nightscout/androidaps/dialogs/ProfileSwitchDialog.kt
+++ b/app/src/main/java/info/nightscout/androidaps/dialogs/ProfileSwitchDialog.kt
@@ -152,9 +152,9 @@ class ProfileSwitchDialog : DialogFragmentWithDate() {
}
}
binding.ttLayout.visibility = View.GONE
- binding.duration.editText?.id?.let { binding.durationLabel.labelFor = it }
- binding.percentage.editText?.id?.let { binding.percentageLabel.labelFor = it }
- binding.timeshift.editText?.id?.let { binding.timeshiftLabel.labelFor = it }
+ binding.durationLabel.labelFor = binding.duration.editTextId
+ binding.percentageLabel.labelFor = binding.percentage.editTextId
+ binding.timeshiftLabel.labelFor = binding.timeshift.editTextId
}
override fun onDestroyView() {
diff --git a/app/src/main/java/info/nightscout/androidaps/dialogs/TempBasalDialog.kt b/app/src/main/java/info/nightscout/androidaps/dialogs/TempBasalDialog.kt
index 438ed77193..62bd73862d 100644
--- a/app/src/main/java/info/nightscout/androidaps/dialogs/TempBasalDialog.kt
+++ b/app/src/main/java/info/nightscout/androidaps/dialogs/TempBasalDialog.kt
@@ -89,9 +89,9 @@ class TempBasalDialog : DialogFragmentWithDate() {
binding.percentLayout.visibility = View.GONE
binding.absoluteLayout.visibility = View.VISIBLE
}
- binding.basalPercentInput.editText?.id?.let { binding.basalPercentLabel.labelFor = it }
- binding.basalAbsoluteInput.editText?.id?.let { binding.basalAbsoluteLabel.labelFor = it }
- binding.duration.editText?.id?.let { binding.durationLabel.labelFor = it }
+ binding.basalPercentLabel.labelFor = binding.basalPercentInput.editTextId
+ binding.basalAbsoluteLabel.labelFor = binding.basalAbsoluteInput.editTextId
+ binding.durationLabel.labelFor = binding.duration.editTextId
}
override fun onDestroyView() {
diff --git a/app/src/main/java/info/nightscout/androidaps/dialogs/TempTargetDialog.kt b/app/src/main/java/info/nightscout/androidaps/dialogs/TempTargetDialog.kt
index dba15262a5..a1885c2d4e 100644
--- a/app/src/main/java/info/nightscout/androidaps/dialogs/TempTargetDialog.kt
+++ b/app/src/main/java/info/nightscout/androidaps/dialogs/TempTargetDialog.kt
@@ -123,8 +123,8 @@ class TempTargetDialog : DialogFragmentWithDate() {
longClick(it)
return@setOnLongClickListener true
}
- binding.duration.editText?.id?.let { binding.durationLabel.labelFor = it }
- binding.temptarget.editText?.id?.let { binding.temptargetLabel.labelFor = it }
+ binding.durationLabel.labelFor = binding.duration.editTextId
+ binding.temptargetLabel.labelFor = binding.temptarget.editTextId
}
}
diff --git a/app/src/main/java/info/nightscout/androidaps/dialogs/TreatmentDialog.kt b/app/src/main/java/info/nightscout/androidaps/dialogs/TreatmentDialog.kt
index 5ca98c146b..ff3dbfb30f 100644
--- a/app/src/main/java/info/nightscout/androidaps/dialogs/TreatmentDialog.kt
+++ b/app/src/main/java/info/nightscout/androidaps/dialogs/TreatmentDialog.kt
@@ -108,8 +108,8 @@ class TreatmentDialog : DialogFragmentWithDate() {
binding.insulin.setParams(savedInstanceState?.getDouble("insulin")
?: 0.0, 0.0, maxInsulin, pumpDescription.bolusStep, DecimalFormatter.pumpSupportedBolusFormat(activePlugin.activePump), false, binding.okcancel.ok, textWatcher)
binding.recordOnlyLayout.visibility = View.GONE
- binding.insulin.editText?.id?.let { binding.insulinLabel.labelFor = it }
- binding.carbs.editText?.id?.let { binding.carbsLabel.labelFor = it }
+ binding.insulinLabel.labelFor = binding.insulin.editTextId
+ binding.carbsLabel.labelFor = binding.carbs.editTextId
}
override fun onDestroyView() {
diff --git a/app/src/main/java/info/nightscout/androidaps/dialogs/WizardDialog.kt b/app/src/main/java/info/nightscout/androidaps/dialogs/WizardDialog.kt
index 13fc6cc0b8..841344fae3 100644
--- a/app/src/main/java/info/nightscout/androidaps/dialogs/WizardDialog.kt
+++ b/app/src/main/java/info/nightscout/androidaps/dialogs/WizardDialog.kt
@@ -248,10 +248,10 @@ class WizardDialog : DaggerDialogFragment() {
}
private fun setA11yLabels() {
- binding.bgInput.editText?.id?.let { binding.bgInputLabel.labelFor = it }
- binding.carbsInput.editText?.id?.let { binding.carbsInputLabel.labelFor = it }
- binding.correctionInput.editText?.id?.let { binding.correctionInputLabel.labelFor = it }
- binding.carbTimeInput.editText?.id?.let { binding.carbTimeInputLabel.labelFor = it }
+ binding.bgInputLabel.labelFor = binding.bgInput.editTextId
+ binding.carbsInputLabel.labelFor = binding.carbsInput.editTextId
+ binding.correctionInputLabel.labelFor = binding.correctionInput.editTextId
+ binding.carbTimeInputLabel.labelFor = binding.carbTimeInput.editTextId
}
override fun onDestroyView() {
diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/configBuilder/ProfileFunctionImplementation.kt b/app/src/main/java/info/nightscout/androidaps/plugins/configBuilder/ProfileFunctionImplementation.kt
index 63e03478dc..89b1da7047 100644
--- a/app/src/main/java/info/nightscout/androidaps/plugins/configBuilder/ProfileFunctionImplementation.kt
+++ b/app/src/main/java/info/nightscout/androidaps/plugins/configBuilder/ProfileFunctionImplementation.kt
@@ -130,7 +130,6 @@ class ProfileFunctionImplementation @Inject constructor(
}
}
-
return null
}
@@ -205,4 +204,4 @@ class ProfileFunctionImplementation @Inject constructor(
} else returnValue = false
return returnValue
}
-}
\ No newline at end of file
+}
diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/constraints/objectives/ObjectivesFragment.kt b/app/src/main/java/info/nightscout/androidaps/plugins/constraints/objectives/ObjectivesFragment.kt
index 5b412076b5..84cd7eebba 100644
--- a/app/src/main/java/info/nightscout/androidaps/plugins/constraints/objectives/ObjectivesFragment.kt
+++ b/app/src/main/java/info/nightscout/androidaps/plugins/constraints/objectives/ObjectivesFragment.kt
@@ -1,6 +1,6 @@
package info.nightscout.androidaps.plugins.constraints.objectives
-import android.graphics.Color
+import android.annotation.SuppressLint
import android.os.Bundle
import android.os.Handler
import android.os.HandlerThread
@@ -153,6 +153,7 @@ class ObjectivesFragment : DaggerFragment() {
return ViewHolder(LayoutInflater.from(parent.context).inflate(R.layout.objectives_item, parent, false))
}
+ @SuppressLint("SetTextI18n")
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
val objective = objectivesPlugin.objectives[position]
holder.binding.title.text = rh.gs(R.string.nth_objective, position + 1)
@@ -167,7 +168,7 @@ class ObjectivesFragment : DaggerFragment() {
} else
holder.binding.gate.visibility = View.GONE
if (!objective.isStarted) {
- holder.binding.gate.setTextColor(-0x1)
+ holder.binding.gate.setTextColor(rh.gac(context, R.attr.defaultTextColor))
holder.binding.verify.visibility = View.GONE
holder.binding.progress.visibility = View.GONE
holder.binding.accomplished.visibility = View.GONE
@@ -178,7 +179,7 @@ class ObjectivesFragment : DaggerFragment() {
else
holder.binding.start.visibility = View.GONE
} else if (objective.isAccomplished) {
- holder.binding.gate.setTextColor(-0xb350b0)
+ holder.binding.gate.setTextColor(rh.gac(context, R.attr.isAccomplishedColor))
holder.binding.verify.visibility = View.GONE
holder.binding.progress.visibility = View.GONE
holder.binding.start.visibility = View.GONE
@@ -186,7 +187,7 @@ class ObjectivesFragment : DaggerFragment() {
holder.binding.unfinish.visibility = View.VISIBLE
holder.binding.unstart.visibility = View.GONE
} else if (objective.isStarted) {
- holder.binding.gate.setTextColor(-0x1)
+ holder.binding.gate.setTextColor(rh.gac(context,R.attr.defaultTextColor))
holder.binding.verify.visibility = View.VISIBLE
holder.binding.verify.isEnabled = objective.isCompleted || binding.fake.isChecked
holder.binding.start.visibility = View.GONE
@@ -200,7 +201,7 @@ class ObjectivesFragment : DaggerFragment() {
// name
val name = TextView(holder.binding.progress.context)
name.text = "${rh.gs(task.task)}:"
- name.setTextColor(-0x1)
+ name.setTextColor(rh.gac(context,R.attr.defaultTextColor) )
holder.binding.progress.addView(name, LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT)
// hint
task.hints.forEach { h ->
@@ -209,9 +210,9 @@ class ObjectivesFragment : DaggerFragment() {
}
// state
val state = TextView(holder.binding.progress.context)
- state.setTextColor(-0x1)
+ state.setTextColor(rh.gac(context,R.attr.defaultTextColor))
val basicHTML = "%2\$s"
- val formattedHTML = String.format(basicHTML, if (task.isCompleted()) "#4CAF50" else "#FF9800", task.progress)
+ val formattedHTML = String.format(basicHTML, if (task.isCompleted()) rh.gac(context, R.attr.isCompletedColor) else rh.gac(context, R.attr.isNotCompletedColor), task.progress)
state.text = HtmlHelper.fromHtml(formattedHTML)
state.gravity = Gravity.END
holder.binding.progress.addView(state, LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT)
@@ -228,7 +229,7 @@ class ObjectivesFragment : DaggerFragment() {
}
// horizontal line
val separator = View(holder.binding.progress.context)
- separator.setBackgroundColor(Color.DKGRAY)
+ separator.setBackgroundColor(rh.gac(context, R.attr.separatorColor))
holder.binding.progress.addView(separator, LinearLayout.LayoutParams.MATCH_PARENT, 2)
}
}
diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/constraints/objectives/objectives/Objective.kt b/app/src/main/java/info/nightscout/androidaps/plugins/constraints/objectives/objectives/Objective.kt
index 0da7daa37c..9faa974d1f 100644
--- a/app/src/main/java/info/nightscout/androidaps/plugins/constraints/objectives/objectives/Objective.kt
+++ b/app/src/main/java/info/nightscout/androidaps/plugins/constraints/objectives/objectives/Objective.kt
@@ -176,7 +176,7 @@ abstract class Objective(injector: HasAndroidInjector, spName: String, @StringRe
textView.setText(hint)
textView.autoLinkMask = Linkify.WEB_URLS
textView.linksClickable = true
- textView.setLinkTextColor(Color.YELLOW)
+ textView.setLinkTextColor(rh.gac(context, R.attr.colorSecondary))
Linkify.addLinks(textView, Linkify.WEB_URLS)
return textView
}
diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/constraints/versionChecker/VersionCheckerPlugin.kt b/app/src/main/java/info/nightscout/androidaps/plugins/constraints/versionChecker/VersionCheckerPlugin.kt
index a45ae8dd50..8347a45715 100644
--- a/app/src/main/java/info/nightscout/androidaps/plugins/constraints/versionChecker/VersionCheckerPlugin.kt
+++ b/app/src/main/java/info/nightscout/androidaps/plugins/constraints/versionChecker/VersionCheckerPlugin.kt
@@ -80,7 +80,6 @@ class VersionCheckerPlugin @Inject constructor(
return
}
-
if (isOldVersion(gracePeriod.warning.daysToMillis()) && shouldWarnAgain()) {
// store last notification time
sp.putLong(R.string.key_last_versionchecker_plugin_warning, now)
diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/general/nsclient/data/NSDeviceStatus.kt b/app/src/main/java/info/nightscout/androidaps/plugins/general/nsclient/data/NSDeviceStatus.kt
index b7435e3916..0b1ecc3105 100644
--- a/app/src/main/java/info/nightscout/androidaps/plugins/general/nsclient/data/NSDeviceStatus.kt
+++ b/app/src/main/java/info/nightscout/androidaps/plugins/general/nsclient/data/NSDeviceStatus.kt
@@ -4,8 +4,6 @@ import android.text.Spanned
import dagger.android.HasAndroidInjector
import info.nightscout.androidaps.R
import info.nightscout.androidaps.interfaces.Config
-import info.nightscout.shared.logging.AAPSLogger
-import info.nightscout.shared.logging.LTag
import info.nightscout.androidaps.plugins.aps.loop.APSResult
import info.nightscout.androidaps.plugins.configBuilder.RunningConfiguration
import info.nightscout.androidaps.utils.DateUtil
@@ -14,6 +12,8 @@ import info.nightscout.androidaps.utils.JsonHelper
import info.nightscout.androidaps.utils.Round
import info.nightscout.androidaps.utils.T
import info.nightscout.androidaps.utils.resources.ResourceHelper
+import info.nightscout.shared.logging.AAPSLogger
+import info.nightscout.shared.logging.LTag
import info.nightscout.shared.sharedPreferences.SP
import org.json.JSONArray
import org.json.JSONException
@@ -88,7 +88,7 @@ class NSDeviceStatus @Inject constructor(
fun handleNewData(deviceStatuses: JSONArray) {
aapsLogger.debug(LTag.NSCLIENT, "Got NS deviceStatus: \$deviceStatuses")
try {
- for (i in deviceStatuses.length() -1 downTo 0) {
+ for (i in deviceStatuses.length() - 1 downTo 0) {
val devicestatusJson = deviceStatuses.getJSONObject(i)
if (devicestatusJson != null) {
setData(devicestatusJson)
@@ -157,7 +157,7 @@ class NSDeviceStatus @Inject constructor(
//String[] ALL_STATUS_FIELDS = {"reservoir", "battery", "clock", "status", "device"};
val string = StringBuilder()
- .append("")
+ .append("")
.append(rh.gs(R.string.pump))
.append(": ")
@@ -165,13 +165,13 @@ class NSDeviceStatus @Inject constructor(
val level = when {
pumpData.clock + nsSettingsStatus.extendedPumpSettings("urgentClock") * 60 * 1000L < dateUtil.now() -> Levels.URGENT
pumpData.reservoir < nsSettingsStatus.extendedPumpSettings("urgentRes") -> Levels.URGENT
- pumpData.isPercent && pumpData.percent < nsSettingsStatus.extendedPumpSettings("urgentBattP") -> Levels.URGENT
+ pumpData.isPercent && pumpData.percent < nsSettingsStatus.extendedPumpSettings("urgentBattP") -> Levels.URGENT
!pumpData.isPercent && pumpData.voltage < nsSettingsStatus.extendedPumpSettings("urgentBattV") -> Levels.URGENT
pumpData.clock + nsSettingsStatus.extendedPumpSettings("warnClock") * 60 * 1000L < dateUtil.now() -> Levels.WARN
pumpData.reservoir < nsSettingsStatus.extendedPumpSettings("warnRes") -> Levels.WARN
- pumpData.isPercent && pumpData.percent < nsSettingsStatus.extendedPumpSettings("warnBattP") -> Levels.WARN
- !pumpData.isPercent && pumpData.voltage < nsSettingsStatus.extendedPumpSettings("warnBattV") -> Levels.WARN
- else -> Levels.INFO
+ pumpData.isPercent && pumpData.percent < nsSettingsStatus.extendedPumpSettings("warnBattP") -> Levels.WARN
+ !pumpData.isPercent && pumpData.voltage < nsSettingsStatus.extendedPumpSettings("warnBattV") -> Levels.WARN
+ else -> Levels.INFO
}
string.append("")
val fields = nsSettingsStatus.pumpExtendedSettingsFields()
@@ -248,7 +248,7 @@ class NSDeviceStatus @Inject constructor(
val openApsStatus: Spanned
get() {
val string = StringBuilder()
- .append("")
+ .append("")
.append(rh.gs(R.string.openaps_short))
.append(": ")
@@ -256,7 +256,7 @@ class NSDeviceStatus @Inject constructor(
val level = when {
deviceStatusData.openAPSData.clockSuggested + T.mins(sp.getLong(R.string.key_nsalarm_urgent_staledatavalue, 31)).msecs() < dateUtil.now() -> Levels.URGENT
deviceStatusData.openAPSData.clockSuggested + T.mins(sp.getLong(R.string.key_nsalarm_staledatavalue, 16)).msecs() < dateUtil.now() -> Levels.WARN
- else -> Levels.INFO
+ else -> Levels.INFO
}
string.append("")
if (deviceStatusData.openAPSData.clockSuggested != 0L) string.append(dateUtil.minAgo(rh, deviceStatusData.openAPSData.clockSuggested)).append(" ")
@@ -268,8 +268,10 @@ class NSDeviceStatus @Inject constructor(
get() {
val string = StringBuilder()
try {
- if (deviceStatusData.openAPSData.enacted != null && deviceStatusData.openAPSData.clockEnacted != deviceStatusData.openAPSData.clockSuggested) string.append("").append(dateUtil.minAgo(rh, deviceStatusData.openAPSData.clockEnacted)).append(" ").append(deviceStatusData.openAPSData.enacted!!.getString("reason")).append("
")
- if (deviceStatusData.openAPSData.suggested != null) string.append("").append(dateUtil.minAgo(rh, deviceStatusData.openAPSData.clockSuggested)).append(" ").append(deviceStatusData.openAPSData.suggested!!.getString("reason")).append("
")
+ if (deviceStatusData.openAPSData.enacted != null && deviceStatusData.openAPSData.clockEnacted != deviceStatusData.openAPSData.clockSuggested) string.append("")
+ .append(dateUtil.minAgo(rh, deviceStatusData.openAPSData.clockEnacted)).append(" ").append(deviceStatusData.openAPSData.enacted!!.getString("reason")).append("
")
+ if (deviceStatusData.openAPSData.suggested != null) string.append("").append(dateUtil.minAgo(rh, deviceStatusData.openAPSData.clockSuggested)).append(" ")
+ .append(deviceStatusData.openAPSData.suggested!!.getString("reason")).append("
")
return fromHtml(string.toString())
} catch (e: JSONException) {
aapsLogger.error("Unhandled exception", e)
@@ -321,7 +323,7 @@ class NSDeviceStatus @Inject constructor(
val uploaderStatusSpanned: Spanned
get() {
val string = StringBuilder()
- string.append("")
+ string.append("")
string.append(rh.gs(R.string.uploader_short))
string.append(": ")
val iterator: Iterator<*> = deviceStatusData.uploaderMap.entries.iterator()
diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/general/overview/OverviewData.kt b/app/src/main/java/info/nightscout/androidaps/plugins/general/overview/OverviewData.kt
index c16b6e6273..deb355c24d 100644
--- a/app/src/main/java/info/nightscout/androidaps/plugins/general/overview/OverviewData.kt
+++ b/app/src/main/java/info/nightscout/androidaps/plugins/general/overview/OverviewData.kt
@@ -183,7 +183,7 @@ class OverviewData @Inject constructor(
} ?: R.drawable.ic_cp_basal_no_tbr
fun temporaryBasalColor(context: Context?, iobCobCalculator: IobCobCalculator): Int = iobCobCalculator.getTempBasalIncludingConvertedExtended(dateUtil.now())?.let { rh.gac(context , R.attr.basal) }
- ?: rh.gac(context, R.attr.textAppearancemediumColor)
+ ?: rh.gac(context, R.attr.defaultTextColor)
/*
* EXTENDED BOLUS
diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/general/overview/OverviewFragment.kt b/app/src/main/java/info/nightscout/androidaps/plugins/general/overview/OverviewFragment.kt
index 21a8ee9f95..cbcbcc07e9 100644
--- a/app/src/main/java/info/nightscout/androidaps/plugins/general/overview/OverviewFragment.kt
+++ b/app/src/main/java/info/nightscout/androidaps/plugins/general/overview/OverviewFragment.kt
@@ -165,12 +165,12 @@ class OverviewFragment : DaggerFragment(), View.OnClickListener, OnLongClickList
val landscape = screenHeight < screenWidth
skinProvider.activeSkin().preProcessLandscapeOverviewLayout(dm, binding, landscape, rh.gb(R.bool.isTablet), smallHeight)
- binding.nsclientLayout.visibility = config.NSCLIENT.toVisibility()
+ binding.nsclientCard.visibility = config.NSCLIENT.toVisibility()
binding.notifications.setHasFixedSize(false)
binding.notifications.layoutManager = LinearLayoutManager(view.context)
axisWidth = if (dm.densityDpi <= 120) 3 else if (dm.densityDpi <= 160) 10 else if (dm.densityDpi <= 320) 35 else if (dm.densityDpi <= 420) 50 else if (dm.densityDpi <= 560) 70 else 80
- binding.graphsLayout.bgGraph.gridLabelRenderer?.gridColor = rh.gac(context, R.attr.graphgrid)
+ binding.graphsLayout.bgGraph.gridLabelRenderer?.gridColor = rh.gac(context, R.attr.graphGrid)
binding.graphsLayout.bgGraph.gridLabelRenderer?.reloadStyles()
binding.graphsLayout.bgGraph.gridLabelRenderer?.labelVerticalWidth = axisWidth
binding.graphsLayout.bgGraph.layoutParams?.height = rh.dpToPx(skinProvider.activeSkin().mainGraphHeight)
@@ -179,7 +179,6 @@ class OverviewFragment : DaggerFragment(), View.OnClickListener, OnLongClickList
carbAnimation?.setEnterFadeDuration(1200)
carbAnimation?.setExitFadeDuration(1200)
-
binding.graphsLayout.bgGraph.setOnLongClickListener {
overviewData.rangeToDisplay += 6
overviewData.rangeToDisplay = if (overviewData.rangeToDisplay > 24) 6 else overviewData.rangeToDisplay
@@ -549,16 +548,16 @@ class OverviewFragment : DaggerFragment(), View.OnClickListener, OnLongClickList
binding.buttonsLayout.cgmButton.setCompoundDrawablesWithIntrinsicBounds(null, rh.gd(R.drawable.ic_byoda), null, null)
for (drawable in binding.buttonsLayout.cgmButton.compoundDrawables) {
drawable?.mutate()
- drawable?.colorFilter = PorterDuffColorFilter(rh.gac(context, R.attr.cgmdexColor), PorterDuff.Mode.SRC_IN)
+ drawable?.colorFilter = PorterDuffColorFilter(rh.gac(context, R.attr.cgmDexColor), PorterDuff.Mode.SRC_IN)
}
- binding.buttonsLayout.cgmButton.setTextColor(rh.gac(context, R.attr.cgmdexColor))
+ binding.buttonsLayout.cgmButton.setTextColor(rh.gac(context, R.attr.cgmDexColor))
} else if (xDripIsBgSource) {
binding.buttonsLayout.cgmButton.setCompoundDrawablesWithIntrinsicBounds(null, rh.gd(R.drawable.ic_xdrip), null, null)
for (drawable in binding.buttonsLayout.cgmButton.compoundDrawables) {
drawable?.mutate()
- drawable?.colorFilter = PorterDuffColorFilter(rh.gac(context, R.attr.cgmxdripColor), PorterDuff.Mode.SRC_IN)
+ drawable?.colorFilter = PorterDuffColorFilter(rh.gac(context, R.attr.cgmXdripColor), PorterDuff.Mode.SRC_IN)
}
- binding.buttonsLayout.cgmButton.setTextColor(rh.gac(context, R.attr.cgmxdripColor))
+ binding.buttonsLayout.cgmButton.setTextColor(rh.gac(context, R.attr.cgmXdripColor))
}
binding.buttonsLayout.cgmButton.visibility = (sp.getBoolean(R.string.key_show_cgm_button, false) && (xDripIsBgSource || dexcomIsSource)).toVisibility()
@@ -714,12 +713,12 @@ class OverviewFragment : DaggerFragment(), View.OnClickListener, OnLongClickList
val graph = GraphView(context)
graph.layoutParams =
LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, rh.dpToPx(skinProvider.activeSkin().secondaryGraphHeight)).also { it.setMargins(0, rh.dpToPx(15), 0, rh.dpToPx(10)) }
- graph.gridLabelRenderer?.gridColor = rh.gac(context, R.attr.graphgrid)
+ graph.gridLabelRenderer?.gridColor = rh.gac(context, R.attr.graphGrid)
graph.gridLabelRenderer?.reloadStyles()
graph.gridLabelRenderer?.isHorizontalLabelsVisible = false
graph.gridLabelRenderer?.labelVerticalWidth = axisWidth
graph.gridLabelRenderer?.numVerticalLabels = 3
- graph.viewport.backgroundColor = rh.gac(context, R.attr.viewPortbackgroundColor)
+ graph.viewport.backgroundColor = rh.gac(context, R.attr.viewPortBackgroundColor)
relativeLayout.addView(graph)
val label = TextView(context)
@@ -753,6 +752,7 @@ class OverviewFragment : DaggerFragment(), View.OnClickListener, OnLongClickList
@SuppressLint("SetTextI18n")
fun updateBg() {
+ _binding ?: return
val units = profileFunction.getUnits()
binding.infoLayout.bg.text = overviewData.lastBg?.valueToUnitsString(units)
?: rh.gs(R.string.notavailable)
@@ -802,6 +802,7 @@ class OverviewFragment : DaggerFragment(), View.OnClickListener, OnLongClickList
}
fun updateProfile() {
+ _binding ?: return
val profileBackgroundColor =
profileFunction.getProfile()?.let {
if (it is ProfileSealed.EPS) {
@@ -834,6 +835,7 @@ class OverviewFragment : DaggerFragment(), View.OnClickListener, OnLongClickList
}
private fun updateTemporaryBasal() {
+ _binding ?: return
binding.infoLayout.baseBasal.text = overviewData.temporaryBasalText(iobCobCalculator)
binding.infoLayout.baseBasal.setTextColor(overviewData.temporaryBasalColor(context, iobCobCalculator))
binding.infoLayout.baseBasalIcon.setImageResource(overviewData.temporaryBasalIcon(iobCobCalculator))
@@ -843,6 +845,7 @@ class OverviewFragment : DaggerFragment(), View.OnClickListener, OnLongClickList
}
private fun updateExtendedBolus() {
+ _binding ?: return
val pump = activePlugin.activePump
binding.infoLayout.extendedBolus.text = overviewData.extendedBolusText(iobCobCalculator)
binding.infoLayout.extendedLayout.setOnClickListener {
@@ -852,6 +855,7 @@ class OverviewFragment : DaggerFragment(), View.OnClickListener, OnLongClickList
}
fun updateTime() {
+ _binding ?: return
binding.infoLayout.time.text = dateUtil.timeString(dateUtil.now())
// Status lights
val pump = activePlugin.activePump
@@ -883,6 +887,7 @@ class OverviewFragment : DaggerFragment(), View.OnClickListener, OnLongClickList
}
fun updateIobCob() {
+ _binding ?: return
binding.infoLayout.iob.text = overviewData.iobText(iobCobCalculator)
binding.infoLayout.iobLayout.setOnClickListener {
activity?.let { OKDialog.show(it, rh.gs(R.string.iob), overviewData.iobDialogText(iobCobCalculator)) }
@@ -910,6 +915,7 @@ class OverviewFragment : DaggerFragment(), View.OnClickListener, OnLongClickList
@SuppressLint("SetTextI18n")
fun updateTemporaryTarget() {
+ _binding ?: return
val units = profileFunction.getUnits()
val tempTarget = overviewData.temporaryTarget
if (tempTarget != null) {
@@ -936,6 +942,7 @@ class OverviewFragment : DaggerFragment(), View.OnClickListener, OnLongClickList
}
private fun updateGraph() {
+ _binding ?: return
val pump = activePlugin.activePump
val graphData = GraphData(injector, binding.graphsLayout.bgGraph, overviewData)
val menuChartSettings = overviewMenus.setting
@@ -1016,11 +1023,13 @@ class OverviewFragment : DaggerFragment(), View.OnClickListener, OnLongClickList
}
private fun updateCalcProgress() {
+ _binding ?: return
binding.progressBar.progress = overviewData.calcProgressPct
binding.progressBar.visibility = (overviewData.calcProgressPct != 100).toVisibility()
}
private fun updateSensitivity() {
+ _binding ?: return
if (sp.getBoolean(R.string.key_openapsama_useautosens, false) && constraintChecker.isAutosensModeEnabled().value()) {
binding.infoLayout.sensitivityIcon.setImageResource(R.drawable.ic_swap_vert_black_48dp_green)
} else {
@@ -1034,12 +1043,14 @@ class OverviewFragment : DaggerFragment(), View.OnClickListener, OnLongClickList
}
private fun updatePumpStatus() {
+ _binding ?: return
val status = overviewData.pumpStatus
binding.pumpStatus.text = status
binding.pumpStatusLayout.visibility = (status != "").toVisibility()
}
private fun updateNotification() {
+ _binding ?: return
binding.notifications.let { notificationStore.updateNotifications(it) }
}
}
diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/general/overview/OverviewMenus.kt b/app/src/main/java/info/nightscout/androidaps/plugins/general/overview/OverviewMenus.kt
index e0f2ace989..b055d92501 100644
--- a/app/src/main/java/info/nightscout/androidaps/plugins/general/overview/OverviewMenus.kt
+++ b/app/src/main/java/info/nightscout/androidaps/plugins/general/overview/OverviewMenus.kt
@@ -8,7 +8,6 @@ import android.view.Menu
import android.view.View
import android.widget.ImageButton
import androidx.annotation.AttrRes
-import androidx.annotation.ColorRes
import androidx.annotation.StringRes
import androidx.appcompat.widget.PopupMenu
import com.google.gson.Gson
@@ -34,18 +33,18 @@ class OverviewMenus @Inject constructor(
private val loop: Loop,
private val config: Config
) {
- enum class CharType(@StringRes val nameId: Int, @AttrRes val attrId: Int, val primary: Boolean, val secondary: Boolean, @StringRes val shortnameId: Int) {
- PRE(R.string.overview_show_predictions, R.attr.predictionColor, primary = true, secondary = false, shortnameId = R.string.prediction_shortname),
- TREAT(R.string.overview_show_treatments, R.attr.predictionColor, primary = true, secondary = false, shortnameId = R.string.treatments_shortname),
- BAS(R.string.overview_show_basals, R.attr.basal, primary = true, secondary = false,shortnameId = R.string.basal_shortname),
- ABS(R.string.overview_show_absinsulin, R.attr.iobColor, primary = false, secondary = true,shortnameId = R.string.abs_insulin_shortname),
- IOB(R.string.overview_show_iob, R.attr.iobColor, primary = false, secondary = true,shortnameId = R.string.iob),
- COB(R.string.overview_show_cob, R.attr.cobColor, primary = false, secondary = true,shortnameId = R.string.cob),
- DEV(R.string.overview_show_deviations, R.attr.bgiColor, primary = false, secondary = true,shortnameId = R.string.deviation_shortname),
- BGI(R.string.overview_show_bgi, R.attr.bgiColor, primary = false, secondary = true,shortnameId = R.string.bgi_shortname),
- SEN(R.string.overview_show_sensitivity, R.attr.ratioColor, primary = false, secondary = true,shortnameId = R.string.sensitivity_shortname),
- ACT(R.string.overview_show_activity, R.attr.activityColor, primary = true, secondary = false,shortnameId = R.string.activity_shortname),
- DEVSLOPE(R.string.overview_show_deviationslope, R.attr.devslopeposColor, primary = false, secondary = true,shortnameId = R.string.devslope_shortname)
+ enum class CharType(@StringRes val nameId: Int, @AttrRes val attrId: Int, @AttrRes val attrTextId: Int, val primary: Boolean, val secondary: Boolean, @StringRes val shortnameId: Int) {
+ PRE(R.string.overview_show_predictions, R.attr.predictionColor, R.attr.menuTextColor, primary = true, secondary = false, shortnameId = R.string.prediction_shortname),
+ TREAT(R.string.overview_show_treatments, R.attr.predictionColor, R.attr.menuTextColor, primary = true, secondary = false, shortnameId = R.string.treatments_shortname),
+ BAS(R.string.overview_show_basals, R.attr.basal, R.attr.menuTextColor, primary = true, secondary = false,shortnameId = R.string.basal_shortname),
+ ABS(R.string.overview_show_absinsulin, R.attr.iobColor, R.attr.menuTextColor, primary = false, secondary = true,shortnameId = R.string.abs_insulin_shortname),
+ IOB(R.string.overview_show_iob, R.attr.iobColor, R.attr.menuTextColor, primary = false, secondary = true,shortnameId = R.string.iob),
+ COB(R.string.overview_show_cob, R.attr.cobColor, R.attr.menuTextColor, primary = false, secondary = true,shortnameId = R.string.cob),
+ DEV(R.string.overview_show_deviations, R.attr.bgiColor, R.attr.menuTextColor, primary = false, secondary = true,shortnameId = R.string.deviation_shortname),
+ BGI(R.string.overview_show_bgi, R.attr.bgiColor, R.attr.menuTextColor, primary = false, secondary = true,shortnameId = R.string.bgi_shortname),
+ SEN(R.string.overview_show_sensitivity, R.attr.ratioColor, R.attr.menuTextColorInverse, primary = false, secondary = true,shortnameId = R.string.sensitivity_shortname),
+ ACT(R.string.overview_show_activity, R.attr.activityColor, R.attr.menuTextColor, primary = true, secondary = false,shortnameId = R.string.activity_shortname),
+ DEVSLOPE(R.string.overview_show_deviationslope, R.attr.devSlopePosColor, R.attr.menuTextColor, primary = false, secondary = true, shortnameId = R.string.devslope_shortname)
}
companion object {
@@ -122,8 +121,8 @@ class OverviewMenus @Inject constructor(
if (insert) {
val item = popup.menu.add(Menu.NONE, m.ordinal + 100 * (g + 1), Menu.NONE, rh.gs(m.nameId))
val title = item.title
- val s = SpannableString(title)
- s.setSpan(ForegroundColorSpan(rh.gc(R.color.black)), 0, s.length, 0)
+ val s = SpannableString(" " + title + " ")
+ s.setSpan(ForegroundColorSpan(rh.gac(context, m.attrTextId)), 0, s.length, 0)
s.setSpan(BackgroundColorSpan(rh.gac(context, m.attrId)), 0, s.length, 0)
item.title = s
item.isCheckable = true
diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/general/overview/activities/QuickWizardListActivity.kt b/app/src/main/java/info/nightscout/androidaps/plugins/general/overview/activities/QuickWizardListActivity.kt
index 128f6c6613..5c1ffc8c27 100644
--- a/app/src/main/java/info/nightscout/androidaps/plugins/general/overview/activities/QuickWizardListActivity.kt
+++ b/app/src/main/java/info/nightscout/androidaps/plugins/general/overview/activities/QuickWizardListActivity.kt
@@ -76,6 +76,10 @@ class QuickWizardListActivity : DaggerAppCompatActivityWithResult(), OnStartDrag
else -> R.drawable.ic_smartphone
}
)
+ holder.binding.device.contentDescription = when (quickWizard[position].device()) {
+ QuickWizardEntry.DEVICE_WATCH -> rh.gs(R.string.a11y_only_on_watch)
+ else -> rh.gs(R.string.a11y_only_on_phone)
+ }
}
holder.binding.root.setOnClickListener {
if (actionHelper.isNoAction) {
diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/general/overview/dialogs/EditQuickWizardDialog.kt b/app/src/main/java/info/nightscout/androidaps/plugins/general/overview/dialogs/EditQuickWizardDialog.kt
index af5593e3ca..9341f74dc7 100644
--- a/app/src/main/java/info/nightscout/androidaps/plugins/general/overview/dialogs/EditQuickWizardDialog.kt
+++ b/app/src/main/java/info/nightscout/androidaps/plugins/general/overview/dialogs/EditQuickWizardDialog.kt
@@ -1,6 +1,5 @@
package info.nightscout.androidaps.plugins.general.overview.dialogs
-import android.app.TimePickerDialog
import android.os.Bundle
import android.text.format.DateFormat
import android.view.LayoutInflater
@@ -8,6 +7,8 @@ import android.view.View
import android.view.ViewGroup
import android.view.Window
import android.view.WindowManager
+import com.google.android.material.timepicker.MaterialTimePicker
+import com.google.android.material.timepicker.TimeFormat
import dagger.android.support.DaggerDialogFragment
import info.nightscout.androidaps.R
import info.nightscout.androidaps.databinding.OverviewEditquickwizardDialogBinding
@@ -24,6 +25,7 @@ import info.nightscout.androidaps.utils.wizard.QuickWizard
import info.nightscout.androidaps.utils.wizard.QuickWizardEntry
import info.nightscout.shared.sharedPreferences.SP
import org.json.JSONException
+import java.util.*
import javax.inject.Inject
class EditQuickWizardDialog : DaggerDialogFragment(), View.OnClickListener {
@@ -40,8 +42,7 @@ class EditQuickWizardDialog : DaggerDialogFragment(), View.OnClickListener {
private var _binding: OverviewEditquickwizardDialogBinding? = null
- // This property is only valid between onCreateView and
- // onDestroyView.
+ // This property is only valid between onCreateView and onDestroyView.
private val binding get() = _binding!!
override fun onCreateView(
@@ -96,41 +97,35 @@ class EditQuickWizardDialog : DaggerDialogFragment(), View.OnClickListener {
}
binding.okcancel.cancel.setOnClickListener { dismiss() }
- // create an OnTimeSetListener
- val fromTimeSetListener = TimePickerDialog.OnTimeSetListener { _, hour, minute ->
- fromSeconds = (T.hours(hour.toLong()).secs() + T.mins(minute.toLong()).secs()).toInt()
- binding.from.text = dateUtil.timeString(dateUtil.secondsOfTheDayToMilliseconds(fromSeconds))
+ binding.from.setOnClickListener {
+ val clockFormat = if (DateFormat.is24HourFormat(context)) TimeFormat.CLOCK_24H else TimeFormat.CLOCK_12H
+ val timePicker = MaterialTimePicker.Builder()
+ .setTimeFormat(clockFormat)
+ .setHour(T.secs(fromSeconds.toLong()).hours().toInt())
+ .setMinute(T.secs((fromSeconds % 3600).toLong()).mins().toInt())
+ .build()
+ timePicker.addOnPositiveButtonClickListener {
+ fromSeconds = (T.hours(timePicker.hour.toLong()).secs() + T.mins(timePicker.minute.toLong()).secs()).toInt()
+ binding.from.text = dateUtil.timeString(dateUtil.secondsOfTheDayToMilliseconds(fromSeconds))
+ }
+ timePicker.show(parentFragmentManager, "event_time_time_picker")
}
- binding.from.setOnClickListener {
- context?.let {
- TimePickerDialog(
- it, R.style.MaterialPickerTheme,
- fromTimeSetListener,
- T.secs(fromSeconds.toLong()).hours().toInt(),
- T.secs((fromSeconds % 3600).toLong()).mins().toInt(),
- DateFormat.is24HourFormat(context)
- ).show()
- }
- }
fromSeconds = entry.validFrom()
binding.from.text = dateUtil.timeString(dateUtil.secondsOfTheDayToMilliseconds(fromSeconds))
- val toTimeSetListener = TimePickerDialog.OnTimeSetListener { _, hour, minute ->
- toSeconds = (T.hours(hour.toLong()).secs() + T.mins(minute.toLong()).secs()).toInt()
- binding.to.text = dateUtil.timeString(dateUtil.secondsOfTheDayToMilliseconds(toSeconds))
- }
-
binding.to.setOnClickListener {
- context?.let {
- TimePickerDialog(
- it, R.style.MaterialPickerTheme,
- toTimeSetListener,
- T.secs(toSeconds.toLong()).hours().toInt(),
- T.secs((toSeconds % 3600).toLong()).mins().toInt(),
- DateFormat.is24HourFormat(context)
- ).show()
+ val clockFormat = if (DateFormat.is24HourFormat(context)) TimeFormat.CLOCK_24H else TimeFormat.CLOCK_12H
+ val timePicker = MaterialTimePicker.Builder()
+ .setTimeFormat(clockFormat)
+ .setHour(T.secs(toSeconds.toLong()).hours().toInt())
+ .setMinute(T.secs((toSeconds % 3600).toLong()).mins().toInt())
+ .build()
+ timePicker.addOnPositiveButtonClickListener {
+ toSeconds = (T.hours(timePicker.hour.toLong()).secs() + T.mins(timePicker.minute.toLong()).secs()).toInt()
+ binding.to.text = dateUtil.timeString(dateUtil.secondsOfTheDayToMilliseconds(toSeconds))
}
+ timePicker.show(parentFragmentManager, "event_time_time_picker")
}
fun usePercentage(custom: Boolean) {
diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/general/overview/graphData/GraphData.kt b/app/src/main/java/info/nightscout/androidaps/plugins/general/overview/graphData/GraphData.kt
index b63425970b..9b21d70219 100644
--- a/app/src/main/java/info/nightscout/androidaps/plugins/general/overview/graphData/GraphData.kt
+++ b/app/src/main/java/info/nightscout/androidaps/plugins/general/overview/graphData/GraphData.kt
@@ -1,6 +1,5 @@
package info.nightscout.androidaps.plugins.general.overview.graphData
-import android.graphics.Color
import android.graphics.DashPathEffect
import android.graphics.Paint
import com.jjoe64.graphview.GraphView
@@ -66,7 +65,7 @@ class GraphData(
addSeries(AreaGraphSeries(inRangeAreaDataPoints).also {
it.color = 0
it.isDrawBackground = true
- it.backgroundColor = rh.gac(graph.context,R.attr.inrangeBackground)
+ it.backgroundColor = rh.gac(graph.context,R.attr.inRangeBackground)
})
}
@@ -201,7 +200,7 @@ class GraphData(
paint.style = Paint.Style.STROKE
paint.strokeWidth = 2f
paint.pathEffect = DashPathEffect(floatArrayOf(10f, 20f), 0f)
- paint.color = Color.WHITE
+ paint.color = rh.gac(graph.context, R.attr.dotLineColor)
})
})
}
diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/general/overview/graphExtensions/BolusDataPoint.kt b/app/src/main/java/info/nightscout/androidaps/plugins/general/overview/graphExtensions/BolusDataPoint.kt
index b9bbb79809..c354ad9fbb 100644
--- a/app/src/main/java/info/nightscout/androidaps/plugins/general/overview/graphExtensions/BolusDataPoint.kt
+++ b/app/src/main/java/info/nightscout/androidaps/plugins/general/overview/graphExtensions/BolusDataPoint.kt
@@ -34,8 +34,7 @@ class BolusDataPoint @Inject constructor(
else if (data.isValid) rh.gac(context, R.attr.bolusDataPointColor)
else rh.gac(context, R.attr.alarmColor)
-
override fun setY(y: Double) {
yValue = y
}
-}
\ No newline at end of file
+}
diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/general/tidepool/comm/Session.kt b/app/src/main/java/info/nightscout/androidaps/plugins/general/tidepool/comm/Session.kt
index 7067ddd073..5fb6b34605 100644
--- a/app/src/main/java/info/nightscout/androidaps/plugins/general/tidepool/comm/Session.kt
+++ b/app/src/main/java/info/nightscout/androidaps/plugins/general/tidepool/comm/Session.kt
@@ -16,7 +16,6 @@ class Session(val authHeader: String?,
@Volatile
internal var iterations: Int = 0
-
fun populateHeaders(headers: Headers) {
if (this.token == null) {
this.token = headers.get(sessionTokenHeader)
@@ -39,4 +38,4 @@ class Session(val authHeader: String?,
datasetReply = obj
}
}
-}
\ No newline at end of file
+}
diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/general/tidepool/elements/ProfileElement.kt b/app/src/main/java/info/nightscout/androidaps/plugins/general/tidepool/elements/ProfileElement.kt
index c4f47e5aa3..12c7b55fd7 100644
--- a/app/src/main/java/info/nightscout/androidaps/plugins/general/tidepool/elements/ProfileElement.kt
+++ b/app/src/main/java/info/nightscout/androidaps/plugins/general/tidepool/elements/ProfileElement.kt
@@ -95,5 +95,3 @@ class ProfileElement(ps: EffectiveProfileSwitch, serialNumber: String, dateUtil:
internal var amount: Double
)
}
-
-
diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/general/tidepool/messages/DatasetReplyMessage.kt b/app/src/main/java/info/nightscout/androidaps/plugins/general/tidepool/messages/DatasetReplyMessage.kt
index f19070624b..9db4595c16 100644
--- a/app/src/main/java/info/nightscout/androidaps/plugins/general/tidepool/messages/DatasetReplyMessage.kt
+++ b/app/src/main/java/info/nightscout/androidaps/plugins/general/tidepool/messages/DatasetReplyMessage.kt
@@ -1,6 +1,5 @@
package info.nightscout.androidaps.plugins.general.tidepool.messages
-
class DatasetReplyMessage {
internal var data: Data? = null
diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/profile/local/LocalProfileFragment.kt b/app/src/main/java/info/nightscout/androidaps/plugins/profile/local/LocalProfileFragment.kt
index 21cef09f87..63312f8df9 100644
--- a/app/src/main/java/info/nightscout/androidaps/plugins/profile/local/LocalProfileFragment.kt
+++ b/app/src/main/java/info/nightscout/androidaps/plugins/profile/local/LocalProfileFragment.kt
@@ -115,9 +115,7 @@ class LocalProfileFragment : DaggerFragment() {
override fun onTabUnselected(tab: TabLayout.Tab) {}
override fun onTabReselected(tab: TabLayout.Tab) {}
})
-
- binding.dia.editText?.id?.let { binding.diaLabel.labelFor = it }
-
+ binding.diaLabel.labelFor = binding.dia.editTextId
binding.unlock.setOnClickListener { queryProtection() }
}
diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/pump/virtual/VirtualPumpFragment.kt b/app/src/main/java/info/nightscout/androidaps/plugins/pump/virtual/VirtualPumpFragment.kt
index ea85e983b5..d36c5225ea 100644
--- a/app/src/main/java/info/nightscout/androidaps/plugins/pump/virtual/VirtualPumpFragment.kt
+++ b/app/src/main/java/info/nightscout/androidaps/plugins/pump/virtual/VirtualPumpFragment.kt
@@ -47,10 +47,8 @@ class VirtualPumpFragment : DaggerFragment() {
// onDestroyView.
private val binding get() = _binding!!
- override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View {
- _binding = VirtualpumpFragmentBinding.inflate(inflater, container, false)
- return binding.root
- }
+ override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View =
+ VirtualpumpFragmentBinding.inflate(inflater, container, false).also { _binding = it }.root
@Synchronized
override fun onResume() {
diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/source/AidexPlugin.kt b/app/src/main/java/info/nightscout/androidaps/plugins/source/AidexPlugin.kt
new file mode 100644
index 0000000000..d4cb82ce83
--- /dev/null
+++ b/app/src/main/java/info/nightscout/androidaps/plugins/source/AidexPlugin.kt
@@ -0,0 +1,111 @@
+package info.nightscout.androidaps.plugins.source
+
+import android.content.Context
+import androidx.work.Worker
+import androidx.work.WorkerParameters
+import androidx.work.workDataOf
+import dagger.android.HasAndroidInjector
+import info.nightscout.androidaps.Constants
+import info.nightscout.androidaps.R
+import info.nightscout.androidaps.database.AppRepository
+import info.nightscout.androidaps.database.entities.GlucoseValue
+import info.nightscout.androidaps.database.transactions.CgmSourceTransaction
+import info.nightscout.androidaps.interfaces.BgSource
+import info.nightscout.androidaps.interfaces.PluginBase
+import info.nightscout.androidaps.interfaces.PluginDescription
+import info.nightscout.androidaps.interfaces.PluginType
+import info.nightscout.shared.logging.AAPSLogger
+import info.nightscout.shared.logging.LTag
+import info.nightscout.androidaps.receivers.DataWorker
+import info.nightscout.androidaps.services.Intents
+import info.nightscout.androidaps.utils.resources.ResourceHelper
+import javax.inject.Inject
+import javax.inject.Singleton
+import kotlin.math.log
+
+@Singleton
+class AidexPlugin @Inject constructor(
+ injector: HasAndroidInjector,
+ rh: ResourceHelper,
+ aapsLogger: AAPSLogger
+) : PluginBase(PluginDescription()
+ .mainType(PluginType.BGSOURCE)
+ .fragmentClass(BGSourceFragment::class.java.name)
+ .pluginIcon((R.drawable.ic_blooddrop_48))
+ .pluginName(R.string.aidex)
+ .shortName(R.string.aidex_short)
+ .description(R.string.description_source_aidex),
+ aapsLogger, rh, injector
+), BgSource {
+
+ private var advancedFiltering = false
+
+ /**
+ * Aidex App doesn't have upload to NS
+ */
+ override fun shouldUploadToNs(glucoseValue: GlucoseValue): Boolean = true
+
+ override fun advancedFilteringSupported(): Boolean {
+ return advancedFiltering
+ }
+
+ // cannot be inner class because of needed injection
+ class AidexWorker(
+ context: Context,
+ params: WorkerParameters
+ ) : Worker(context, params) {
+
+ @Inject lateinit var aapsLogger: AAPSLogger
+ @Inject lateinit var aidexPlugin: AidexPlugin
+ @Inject lateinit var repository: AppRepository
+ @Inject lateinit var dataWorker: DataWorker
+
+ init {
+ (context.applicationContext as HasAndroidInjector).androidInjector().inject(this)
+ }
+
+ override fun doWork(): Result {
+ var ret = Result.success()
+
+ if (!aidexPlugin.isEnabled()) return Result.success(workDataOf("Result" to "Plugin not enabled"))
+ val bundle = dataWorker.pickupBundle(inputData.getLong(DataWorker.STORE_KEY, -1))
+ ?: return Result.failure(workDataOf("Error" to "missing input data"))
+
+ aapsLogger.debug(LTag.BGSOURCE, "Received Aidex data: $bundle")
+
+ if (bundle.containsKey(Intents.AIDEX_TRANSMITTER_SN)) aapsLogger.debug(LTag.BGSOURCE, "transmitterSerialNumber: " + bundle.getString(Intents.AIDEX_TRANSMITTER_SN))
+ if (bundle.containsKey(Intents.AIDEX_SENSOR_ID)) aapsLogger.debug(LTag.BGSOURCE, "sensorId: " + bundle.getString(Intents.AIDEX_SENSOR_ID))
+
+ val glucoseValues = mutableListOf()
+
+ val timestamp = bundle.getLong(Intents.AIDEX_TIMESTAMP, 0)
+ val bgType = bundle.getString(Intents.AIDEX_BG_TYPE, "mg/dl")
+ val bgValue = bundle.getDouble(Intents.AIDEX_BG_VALUE, 0.0)
+
+ val bgValueTarget = if (bgType.equals("mg/dl")) bgValue else bgValue * Constants.MMOLL_TO_MGDL
+
+ aapsLogger.debug(LTag.BGSOURCE, "Received Aidex broadcast [time=$timestamp, bgType=$bgType, value=$bgValue, targetValue=$bgValueTarget")
+
+ glucoseValues += CgmSourceTransaction.TransactionGlucoseValue(
+ timestamp = timestamp,
+ value = bgValueTarget,
+ raw = null,
+ noise = null,
+ trendArrow = GlucoseValue.TrendArrow.fromString(bundle.getString(Intents.AIDEX_BG_SLOPE_NAME)),
+ sourceSensor = GlucoseValue.SourceSensor.AIDEX
+ )
+ repository.runTransactionForResult(CgmSourceTransaction(glucoseValues, emptyList(), null))
+ .doOnError {
+ aapsLogger.error(LTag.DATABASE, "Error while saving values from Aidex", it)
+ ret = Result.failure(workDataOf("Error" to it.toString()))
+ }
+ .blockingGet()
+ .also { savedValues ->
+ savedValues.all().forEach {
+ aapsLogger.debug(LTag.DATABASE, "Inserted bg $it")
+ }
+ }
+ return ret
+ }
+ }
+}
diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/source/BGSourceFragment.kt b/app/src/main/java/info/nightscout/androidaps/plugins/source/BGSourceFragment.kt
index 264a999eb8..ad6e0f867d 100644
--- a/app/src/main/java/info/nightscout/androidaps/plugins/source/BGSourceFragment.kt
+++ b/app/src/main/java/info/nightscout/androidaps/plugins/source/BGSourceFragment.kt
@@ -197,6 +197,7 @@ class BGSourceFragment : DaggerFragment() {
R.string.tomato -> Sources.Tomato
R.string.glunovo -> Sources.Glunovo
R.string.xdrip -> Sources.Xdrip
+ R.string.aidex -> Sources.Aidex
else -> Sources.Unknown
}
uel.log(
diff --git a/app/src/main/java/info/nightscout/androidaps/receivers/DataReceiver.kt b/app/src/main/java/info/nightscout/androidaps/receivers/DataReceiver.kt
index 6be6a5ad2e..6bde38ee9a 100644
--- a/app/src/main/java/info/nightscout/androidaps/receivers/DataReceiver.kt
+++ b/app/src/main/java/info/nightscout/androidaps/receivers/DataReceiver.kt
@@ -28,7 +28,6 @@ open class DataReceiver : DaggerBroadcastReceiver() {
val bundle = intent.extras ?: return
aapsLogger.debug(LTag.DATABASE, "onReceive ${intent.action} ${BundleLogger.log(bundle)}")
-
when (intent.action) {
Intents.ACTION_NEW_BG_ESTIMATE ->
OneTimeWorkRequest.Builder(XdripPlugin.XdripWorker::class.java)
@@ -67,8 +66,11 @@ open class DataReceiver : DaggerBroadcastReceiver() {
Intents.DEXCOM_BG ->
OneTimeWorkRequest.Builder(DexcomPlugin.DexcomWorker::class.java)
.setInputData(dataWorker.storeInputData(bundle, intent)).build()
+ Intents.AIDEX_NEW_BG_ESTIMATE ->
+ OneTimeWorkRequest.Builder(AidexPlugin.AidexWorker::class.java)
+ .setInputData(dataWorker.storeInputData(bundle, intent)).build()
else -> null
}?.let { request -> dataWorker.enqueue(request) }
}
-}
\ No newline at end of file
+}
diff --git a/app/src/main/java/info/nightscout/androidaps/services/Intents.kt b/app/src/main/java/info/nightscout/androidaps/services/Intents.kt
index bf3a8d3695..925c74eff8 100644
--- a/app/src/main/java/info/nightscout/androidaps/services/Intents.kt
+++ b/app/src/main/java/info/nightscout/androidaps/services/Intents.kt
@@ -31,6 +31,15 @@ interface Intents {
const val POCTECH_BG = "com.china.poctech.data"
const val TOMATO_BG = "com.fanqies.tomatofn.BgEstimate"
+ // Aidex -> AAPS
+ var AIDEX_NEW_BG_ESTIMATE = "com.microtechmd.cgms.aidex.action.BgEstimate"
+ var AIDEX_BG_TYPE = "com.microtechmd.cgms.aidex.BgType"
+ var AIDEX_BG_VALUE = "com.microtechmd.cgms.aidex.BgValue"
+ var AIDEX_BG_SLOPE_NAME = "com.microtechmd.cgms.aidex.BgSlopeName"
+ var AIDEX_TIMESTAMP = "com.microtechmd.cgms.aidex.Time" // epoch in ms
+ var AIDEX_TRANSMITTER_SN = "com.microtechmd.cgms.aidex.TransmitterSerialNumber"
+ var AIDEX_SENSOR_ID = "com.microtechmd.cgms.aidex.SensorId"
+
// Broadcast status
const val AAPS_BROADCAST = "info.nightscout.androidaps.status"
}
diff --git a/app/src/main/java/info/nightscout/androidaps/skins/SkinLowRes.kt b/app/src/main/java/info/nightscout/androidaps/skins/SkinLowRes.kt
index 45ba680275..03206a0d46 100644
--- a/app/src/main/java/info/nightscout/androidaps/skins/SkinLowRes.kt
+++ b/app/src/main/java/info/nightscout/androidaps/skins/SkinLowRes.kt
@@ -2,6 +2,8 @@ package info.nightscout.androidaps.skins
import android.util.DisplayMetrics
import android.view.View.GONE
+import android.view.ViewGroup
+import androidx.core.view.marginStart
import info.nightscout.androidaps.interfaces.Config
import info.nightscout.androidaps.R
import info.nightscout.androidaps.databinding.ActionsFragmentBinding
@@ -38,6 +40,38 @@ class SkinLowRes @Inject constructor(private val config: Config) : SkinInterface
override fun preProcessLandscapeOverviewLayout(dm: DisplayMetrics, binding: OverviewFragmentBinding, isLandscape: Boolean, isTablet: Boolean, isSmallHeight: Boolean) {
if (!config.NSCLIENT && isLandscape) moveButtonsLayout(binding.root)
+
+ binding.apply {
+ infoCard.elevation = 0F
+ infoCard.radius = 0F
+ val paramInfo = (infoCard.layoutParams as ViewGroup.MarginLayoutParams).apply {
+ setMargins(0,0,0,0)
+ }
+ infoCard.layoutParams = paramInfo
+
+ statusCard.elevation = 0F
+ statusCard.radius = 0F
+ statusCard.strokeWidth = 1
+ val paramStatus = (statusCard.layoutParams as ViewGroup.MarginLayoutParams).apply {
+ setMargins(0,0,0,0)
+ }
+ statusCard.layoutParams = paramStatus
+
+ nsclientCard.elevation = 0F
+ nsclientCard.radius = 0F
+ val paramNsClient = (nsclientCard.layoutParams as ViewGroup.MarginLayoutParams).apply {
+ setMargins(0,0,0,0)
+ }
+ nsclientCard.layoutParams = paramNsClient
+
+ graphCard.elevation = 0F
+ graphCard.radius = 0F
+ val paramGraph = (graphCard.layoutParams as ViewGroup.MarginLayoutParams).apply {
+ setMargins(0,0,0,0)
+ }
+ graphCard.layoutParams = paramGraph
+ }
+
}
}
diff --git a/app/src/main/java/info/nightscout/androidaps/utils/alertDialogs/PrefImportSummaryDialog.kt b/app/src/main/java/info/nightscout/androidaps/utils/alertDialogs/PrefImportSummaryDialog.kt
index 46756397d5..60edb6b6ad 100644
--- a/app/src/main/java/info/nightscout/androidaps/utils/alertDialogs/PrefImportSummaryDialog.kt
+++ b/app/src/main/java/info/nightscout/androidaps/utils/alertDialogs/PrefImportSummaryDialog.kt
@@ -16,6 +16,7 @@ import androidx.annotation.DrawableRes
import androidx.annotation.StringRes
import androidx.annotation.StyleRes
import androidx.appcompat.view.ContextThemeWrapper
+import com.google.android.material.dialog.MaterialAlertDialogBuilder
import info.nightscout.androidaps.R
import info.nightscout.androidaps.extensions.runOnUiThread
import info.nightscout.androidaps.plugins.general.maintenance.formats.Prefs
@@ -49,7 +50,6 @@ object PrefImportSummaryDialog {
var idx = 0
val details = LinkedList()
-
for ((metaKey, metaEntry) in prefs.metadata) {
val rowLayout = LayoutInflater.from(themedCtx).inflate(R.layout.import_summary_item, null)
val label = (rowLayout.findViewById(R.id.summary_text) as TextView)
@@ -92,7 +92,7 @@ object PrefImportSummaryDialog {
webView.setBackgroundColor(Color.TRANSPARENT)
webView.setLayerType(WebView.LAYER_TYPE_SOFTWARE, null)
- AlertDialogHelper.Builder(context, R.style.DialogTheme)
+ MaterialAlertDialogBuilder(context, R.style.DialogTheme)
.setCustomTitle(
AlertDialogHelper.buildCustomTitle(
context,
@@ -109,11 +109,10 @@ object PrefImportSummaryDialog {
}
}
- val builder = AlertDialogHelper.Builder(context, theme)
+ val builder = MaterialAlertDialogBuilder(context, theme)
.setMessage(context.getString(messageRes))
.setCustomTitle(AlertDialogHelper.buildCustomTitle(context, context.getString(R.string.nav_import), headerIcon, theme))
.setView(innerLayout)
-
.setNegativeButton(android.R.string.cancel) { dialog: DialogInterface, _: Int ->
dialog.dismiss()
SystemClock.sleep(100)
@@ -137,4 +136,4 @@ object PrefImportSummaryDialog {
dialog.setCanceledOnTouchOutside(false)
}
-}
\ No newline at end of file
+}
diff --git a/app/src/main/java/info/nightscout/androidaps/utils/alertDialogs/TwoMessagesAlertDialog.kt b/app/src/main/java/info/nightscout/androidaps/utils/alertDialogs/TwoMessagesAlertDialog.kt
index 0bfd1f72f9..d4f2787538 100644
--- a/app/src/main/java/info/nightscout/androidaps/utils/alertDialogs/TwoMessagesAlertDialog.kt
+++ b/app/src/main/java/info/nightscout/androidaps/utils/alertDialogs/TwoMessagesAlertDialog.kt
@@ -8,6 +8,7 @@ import android.view.LayoutInflater
import android.view.View
import android.widget.TextView
import androidx.annotation.DrawableRes
+import com.google.android.material.dialog.MaterialAlertDialogBuilder
import info.nightscout.androidaps.R
import info.nightscout.androidaps.extensions.runOnUiThread
@@ -19,7 +20,7 @@ object TwoMessagesAlertDialog {
val secondMessageLayout = LayoutInflater.from(context).inflate(R.layout.dialog_alert_two_messages, null)
(secondMessageLayout.findViewById(R.id.password_prompt_title) as TextView).text = secondMessage
- AlertDialogHelper.Builder(context, R.style.DialogTheme)
+ MaterialAlertDialogBuilder(context, R.style.DialogTheme)
.setMessage(message)
.setCustomTitle(
AlertDialogHelper.buildCustomTitle(
@@ -32,7 +33,6 @@ object TwoMessagesAlertDialog {
dialog.dismiss()
SystemClock.sleep(100)
if (ok != null) runOnUiThread { ok() }
-
}
.setNegativeButton(android.R.string.cancel) { dialog: DialogInterface, _: Int ->
dialog.dismiss()
@@ -43,4 +43,4 @@ object TwoMessagesAlertDialog {
.setCanceledOnTouchOutside(false)
}
-}
\ No newline at end of file
+}
diff --git a/app/src/main/java/info/nightscout/androidaps/widget/Widget.kt b/app/src/main/java/info/nightscout/androidaps/widget/Widget.kt
index 53b93ff5bc..e123a4cc0e 100644
--- a/app/src/main/java/info/nightscout/androidaps/widget/Widget.kt
+++ b/app/src/main/java/info/nightscout/androidaps/widget/Widget.kt
@@ -105,17 +105,17 @@ class Widget : AppWidgetProvider() {
views.setTextViewText(R.id.bg, overviewData.lastBg?.valueToUnitsString(units) ?: rh.gs(R.string.notavailable))
views.setTextColor(
R.id.bg, when {
- overviewData.isLow -> rh.gc(R.color.low)
- overviewData.isHigh -> rh.gc(R.color.high)
- else -> rh.gc(R.color.inrange)
+ overviewData.isLow -> rh.gc(R.color.widget_low)
+ overviewData.isHigh -> rh.gc(R.color.widget_high)
+ else -> rh.gc(R.color.widget_inrange)
}
)
views.setImageViewResource(R.id.arrow, trendCalculator.getTrendArrow(overviewData.lastBg).directionToIcon())
views.setInt(
R.id.arrow, "setColorFilter", when {
- overviewData.isLow -> rh.gc(R.color.low)
- overviewData.isHigh -> rh.gc(R.color.high)
- else -> rh.gc(R.color.inrange)
+ overviewData.isLow -> rh.gc(R.color.widget_low)
+ overviewData.isHigh -> rh.gc(R.color.widget_high)
+ else -> rh.gc(R.color.widget_inrange)
}
)
@@ -140,7 +140,7 @@ class Widget : AppWidgetProvider() {
private fun updateTemporaryBasal(views: RemoteViews) {
views.setTextViewText(R.id.base_basal, overviewData.temporaryBasalText(iobCobCalculator))
- views.setTextColor(R.id.base_basal, iobCobCalculator.getTempBasalIncludingConvertedExtended(dateUtil.now())?.let { rh.gc(R.color.basal) }
+ views.setTextColor(R.id.base_basal, iobCobCalculator.getTempBasalIncludingConvertedExtended(dateUtil.now())?.let { rh.gc(R.color.widget_basal) }
?: rh.gc(R.color.white))
views.setImageViewResource(R.id.base_basal_icon, overviewData.temporaryBasalIcon(iobCobCalculator))
}
@@ -176,7 +176,7 @@ class Widget : AppWidgetProvider() {
// this is crashing, use background as text for now
//views.setTextColor(R.id.temp_target, rh.gc(R.color.ribbonTextWarning))
//views.setInt(R.id.temp_target, "setBackgroundColor", rh.gc(R.color.ribbonWarning))
- views.setTextColor(R.id.temp_target, rh.gc(R.color.ribbonWarning))
+ views.setTextColor(R.id.temp_target, rh.gc(R.color.widget_ribbonWarning))
views.setTextViewText(R.id.temp_target, Profile.toTargetRangeString(tempTarget.lowTarget, tempTarget.highTarget, GlucoseUnit.MGDL, units) + " " + dateUtil.untilString(tempTarget.end, rh))
} else {
// If the target is not the same as set in the profile then oref has overridden it
@@ -189,12 +189,12 @@ class Widget : AppWidgetProvider() {
// this is crashing, use background as text for now
//views.setTextColor(R.id.temp_target, rh.gc(R.color.ribbonTextWarning))
//views.setInt(R.id.temp_target, "setBackgroundResource", rh.gc(R.color.tempTargetBackground))
- views.setTextColor(R.id.temp_target, rh.gc(R.color.ribbonWarning))
+ views.setTextColor(R.id.temp_target, rh.gc(R.color.widget_ribbonWarning))
} else {
// this is crashing, use background as text for now
//views.setTextColor(R.id.temp_target, rh.gc(R.color.ribbonTextDefault))
//views.setInt(R.id.temp_target, "setBackgroundColor", rh.gc(R.color.ribbonDefault))
- views.setTextColor(R.id.temp_target, rh.gc(R.color.ribbonTextDefault))
+ views.setTextColor(R.id.temp_target, rh.gc(R.color.widget_ribbonTextDefault))
views.setTextViewText(R.id.temp_target, Profile.toTargetRangeString(profile.getTargetLowMgdl(), profile.getTargetHighMgdl(), GlucoseUnit.MGDL, units))
}
}
@@ -206,14 +206,14 @@ class Widget : AppWidgetProvider() {
profileFunction.getProfile()?.let {
if (it is ProfileSealed.EPS) {
if (it.value.originalPercentage != 100 || it.value.originalTimeshift != 0L || it.value.originalDuration != 0L)
- rh.gc(R.color.ribbonWarning)
- else rh.gc(R.color.ribbonTextDefault)
+ rh.gc(R.color.widget_ribbonWarning)
+ else rh.gc(R.color.widget_ribbonTextDefault)
} else if (it is ProfileSealed.PS) {
- rh.gc(R.color.ribbonTextDefault)
+ rh.gc(R.color.widget_ribbonTextDefault)
} else {
- rh.gc(R.color.ribbonTextDefault)
+ rh.gc(R.color.widget_ribbonTextDefault)
}
- } ?: rh.gc(R.color.ribbonCritical)
+ } ?: rh.gc(R.color.widget_ribbonCritical)
views.setTextViewText(R.id.active_profile, profileFunction.getProfileNameWithRemainingTime())
// this is crashing, use background as text for now
diff --git a/app/src/main/java/info/nightscout/androidaps/workflow/PrepareBasalDataWorker.kt b/app/src/main/java/info/nightscout/androidaps/workflow/PrepareBasalDataWorker.kt
index 8d47b1a675..3310638636 100644
--- a/app/src/main/java/info/nightscout/androidaps/workflow/PrepareBasalDataWorker.kt
+++ b/app/src/main/java/info/nightscout/androidaps/workflow/PrepareBasalDataWorker.kt
@@ -30,9 +30,10 @@ class PrepareBasalDataWorker(
@Inject lateinit var profileFunction: ProfileFunction
@Inject lateinit var rh: ResourceHelper
@Inject lateinit var rxBus: RxBus
-
+ var ctx: Context
init {
(context.applicationContext as HasAndroidInjector).androidInjector().inject(this)
+ ctx = rh.getThemedCtx(context)
}
class PrepareBasalData(
@@ -116,12 +117,12 @@ class PrepareBasalDataWorker(
// create series
data.overviewData.baseBasalGraphSeries = LineGraphSeries(Array(baseBasalArray.size) { i -> baseBasalArray[i] }).also {
it.isDrawBackground = true
- it.backgroundColor = rh.gc(R.color.basebasal)
+ it.backgroundColor = rh.gac(ctx, R.attr.baseBasalColor )
it.thickness = 0
}
data.overviewData.tempBasalGraphSeries = LineGraphSeries(Array(tempBasalArray.size) { i -> tempBasalArray[i] }).also {
it.isDrawBackground = true
- it.backgroundColor = rh.gc(R.color.tempbasal)
+ it.backgroundColor = rh.gac(ctx, R.attr.tempBasalColor )
it.thickness = 0
}
data.overviewData.basalLineGraphSeries = LineGraphSeries(Array(basalLineArray.size) { i -> basalLineArray[i] }).also {
@@ -129,14 +130,14 @@ class PrepareBasalDataWorker(
paint.style = Paint.Style.STROKE
paint.strokeWidth = rh.getDisplayMetrics().scaledDensity * 2
paint.pathEffect = DashPathEffect(floatArrayOf(2f, 4f), 0f)
- paint.color = rh.gc(R.color.basal)
+ paint.color = rh.gac(ctx, R.attr.basal )
})
}
data.overviewData.absoluteBasalGraphSeries = LineGraphSeries(Array(absoluteBasalLineArray.size) { i -> absoluteBasalLineArray[i] }).also {
it.setCustomPaint(Paint().also { absolutePaint ->
absolutePaint.style = Paint.Style.STROKE
absolutePaint.strokeWidth = rh.getDisplayMetrics().scaledDensity * 2
- absolutePaint.color = rh.gc(R.color.basal)
+ absolutePaint.color =rh.gac(ctx, R.attr.basal )
})
}
rxBus.send(EventIobCalculationProgress(CalculationWorkflow.ProgressData.PREPARE_BASAL_DATA, 100, null))
diff --git a/app/src/main/java/info/nightscout/androidaps/workflow/PrepareIobAutosensGraphDataWorker.kt b/app/src/main/java/info/nightscout/androidaps/workflow/PrepareIobAutosensGraphDataWorker.kt
index 606258106c..35046e295b 100644
--- a/app/src/main/java/info/nightscout/androidaps/workflow/PrepareIobAutosensGraphDataWorker.kt
+++ b/app/src/main/java/info/nightscout/androidaps/workflow/PrepareIobAutosensGraphDataWorker.kt
@@ -51,9 +51,10 @@ class PrepareIobAutosensGraphDataWorker(
@Inject lateinit var aapsLogger: AAPSLogger
@Inject lateinit var repository: AppRepository
@Inject lateinit var rxBus: RxBus
-
+ var ctx: Context
init {
(context.applicationContext as HasAndroidInjector).androidInjector().inject(this)
+ ctx = rh.getThemedCtx(context)
}
class PrepareIobAutosensData(
@@ -64,7 +65,6 @@ class PrepareIobAutosensGraphDataWorker(
override fun doWork(): Result {
val data = dataWorker.pickupObject(inputData.getLong(DataWorker.STORE_KEY, -1)) as PrepareIobAutosensData?
?: return Result.failure(workDataOf("Error" to "missing input data"))
-
rxBus.send(EventIobCalculationProgress(CalculationWorkflow.ProgressData.PREPARE_IOB_AUTOSENS_DATA, 0, null))
val iobArray: MutableList = ArrayList()
val absIobArray: MutableList = ArrayList()
@@ -158,15 +158,15 @@ class PrepareIobAutosensGraphDataWorker(
// DEVIATIONS
if (autosensData != null) {
- var color = rh.gc(R.color.deviationblack) // "="
+ var color = rh.gac( ctx, R.attr.deviationBlackColor) // "="
if (autosensData.type == "" || autosensData.type == "non-meal") {
- if (autosensData.pastSensitivity == "C") color = rh.gc(R.color.deviationgrey)
- if (autosensData.pastSensitivity == "+") color = rh.gc(R.color.deviationgreen)
- if (autosensData.pastSensitivity == "-") color = rh.gc(R.color.deviationred)
+ if (autosensData.pastSensitivity == "C") color = rh.gac( ctx, R.attr.deviationGreyColor)
+ if (autosensData.pastSensitivity == "+") color = rh.gac( ctx, R.attr.deviationGreenColor)
+ if (autosensData.pastSensitivity == "-") color = rh.gac( ctx, R.attr.deviationRedColor)
} else if (autosensData.type == "uam") {
- color = rh.gc(R.color.uam)
+ color = rh.gac( ctx, R.attr.uamColor)
} else if (autosensData.type == "csf") {
- color = rh.gc(R.color.deviationgrey)
+ color = rh.gac( ctx, R.attr.deviationGreyColor)
}
devArray.add(OverviewPlugin.DeviationDataPoint(time.toDouble(), autosensData.deviation, color, data.overviewData.devScale))
data.overviewData.maxDevValueFound = maxOf(data.overviewData.maxDevValueFound, abs(autosensData.deviation), abs(bgi))
@@ -192,14 +192,14 @@ class PrepareIobAutosensGraphDataWorker(
// IOB
data.overviewData.iobSeries = FixedLineGraphSeries(Array(iobArray.size) { i -> iobArray[i] }).also {
it.isDrawBackground = true
- it.backgroundColor = -0x7f000001 and rh.gc(R.color.iob) //50%
- it.color = rh.gc(R.color.iob)
+ it.backgroundColor = -0x7f000001 and rh.gac( ctx, R.attr.iobColor) //50%
+ it.color = rh.gac( ctx, R.attr.iobColor)
it.thickness = 3
}
data.overviewData.absIobSeries = FixedLineGraphSeries(Array(absIobArray.size) { i -> absIobArray[i] }).also {
it.isDrawBackground = true
- it.backgroundColor = -0x7f000001 and rh.gc(R.color.iob) //50%
- it.color = rh.gc(R.color.iob)
+ it.backgroundColor = -0x7f000001 and rh.gac( ctx, R.attr.iobColor) //50%
+ it.color = rh.gac( ctx, R.attr.iobColor)
it.thickness = 3
}
@@ -210,7 +210,7 @@ class PrepareIobAutosensGraphDataWorker(
val iobPrediction: MutableList = ArrayList()
val iobPredictionArray = data.iobCobCalculator.calculateIobArrayForSMB(lastAutosensResult, SMBDefaults.exercise_mode, SMBDefaults.half_basal_exercise_target, isTempTarget)
for (i in iobPredictionArray) {
- iobPrediction.add(i.setColor(rh.gc(R.color.iobPredAS)))
+ iobPrediction.add(i.setColor(rh.gac( ctx, R.attr.iobPredASColor)))
data.overviewData.maxIobValueFound = max(data.overviewData.maxIobValueFound, abs(i.iob))
}
data.overviewData.iobPredictions1Series = PointsWithLabelGraphSeries(Array(iobPrediction.size) { i -> iobPrediction[i] })
@@ -222,8 +222,8 @@ class PrepareIobAutosensGraphDataWorker(
// COB
data.overviewData.cobSeries = FixedLineGraphSeries(Array(cobArray.size) { i -> cobArray[i] }).also {
it.isDrawBackground = true
- it.backgroundColor = -0x7f000001 and rh.gc(R.color.cob) //50%
- it.color = rh.gc(R.color.cob)
+ it.backgroundColor = -0x7f000001 and rh.gac( ctx, R.attr.cobColor) //50%
+ it.color = rh.gac( ctx, R.attr.cobColor)
it.thickness = 3
}
data.overviewData.cobMinFailOverSeries = PointsWithLabelGraphSeries(Array(minFailOverActiveList.size) { i -> minFailOverActiveList[i] })
@@ -231,7 +231,7 @@ class PrepareIobAutosensGraphDataWorker(
// ACTIVITY
data.overviewData.activitySeries = FixedLineGraphSeries(Array(actArrayHist.size) { i -> actArrayHist[i] }).also {
it.isDrawBackground = false
- it.color = rh.gc(R.color.activity)
+ it.color = rh.gac( ctx, R.attr.activityColor)
it.thickness = 3
}
data.overviewData.activityPredictionSeries = FixedLineGraphSeries(Array(actArrayPrediction.size) { i -> actArrayPrediction[i] }).also {
@@ -239,14 +239,14 @@ class PrepareIobAutosensGraphDataWorker(
paint.style = Paint.Style.STROKE
paint.strokeWidth = 3f
paint.pathEffect = DashPathEffect(floatArrayOf(4f, 4f), 0f)
- paint.color = rh.gc(R.color.activity)
+ paint.color = rh.gac( ctx, R.attr.activityColor)
})
}
// BGI
data.overviewData.minusBgiSeries = FixedLineGraphSeries(Array(bgiArrayHist.size) { i -> bgiArrayHist[i] }).also {
it.isDrawBackground = false
- it.color = rh.gc(R.color.bgi)
+ it.color = rh.gac( ctx, R.attr.bgiColor)
it.thickness = 3
}
data.overviewData.minusBgiHistSeries = FixedLineGraphSeries(Array(bgiArrayPrediction.size) { i -> bgiArrayPrediction[i] }).also {
@@ -254,7 +254,7 @@ class PrepareIobAutosensGraphDataWorker(
paint.style = Paint.Style.STROKE
paint.strokeWidth = 3f
paint.pathEffect = DashPathEffect(floatArrayOf(4f, 4f), 0f)
- paint.color = rh.gc(R.color.bgi)
+ paint.color = rh.gac( ctx, R.attr.bgiColor)
})
}
@@ -265,17 +265,17 @@ class PrepareIobAutosensGraphDataWorker(
// RATIO
data.overviewData.ratioSeries = LineGraphSeries(Array(ratioArray.size) { i -> ratioArray[i] }).also {
- it.color = rh.gc(R.color.ratio)
+ it.color = rh.gac( ctx, R.attr.ratioColor)
it.thickness = 3
}
// DEV SLOPE
data.overviewData.dsMaxSeries = LineGraphSeries(Array(dsMaxArray.size) { i -> dsMaxArray[i] }).also {
- it.color = rh.gc(R.color.devslopepos)
+ it.color = rh.gac( ctx, R.attr.devSlopePosColor)
it.thickness = 3
}
data.overviewData.dsMinSeries = LineGraphSeries(Array(dsMinArray.size) { i -> dsMinArray[i] }).also {
- it.color = rh.gc(R.color.devslopeneg)
+ it.color = rh.gac( ctx, R.attr.devSlopeNegColor)
it.thickness = 3
}
rxBus.send(EventIobCalculationProgress(CalculationWorkflow.ProgressData.PREPARE_IOB_AUTOSENS_DATA, 100, null))
diff --git a/app/src/main/java/info/nightscout/androidaps/workflow/PrepareTemporaryTargetDataWorker.kt b/app/src/main/java/info/nightscout/androidaps/workflow/PrepareTemporaryTargetDataWorker.kt
index 4f960fd187..49bedb98e2 100644
--- a/app/src/main/java/info/nightscout/androidaps/workflow/PrepareTemporaryTargetDataWorker.kt
+++ b/app/src/main/java/info/nightscout/androidaps/workflow/PrepareTemporaryTargetDataWorker.kt
@@ -1,6 +1,7 @@
package info.nightscout.androidaps.workflow
import android.content.Context
+import androidx.core.content.ContextCompat
import androidx.work.Worker
import androidx.work.WorkerParameters
import androidx.work.workDataOf
@@ -33,9 +34,10 @@ class PrepareTemporaryTargetDataWorker(
@Inject lateinit var repository: AppRepository
@Inject lateinit var loop: Loop
@Inject lateinit var rxBus: RxBus
-
+ var ctx: Context
init {
(context.applicationContext as HasAndroidInjector).androidInjector().inject(this)
+ ctx = rh.getThemedCtx(context)
}
class PrepareTemporaryTargetData(
@@ -76,7 +78,7 @@ class PrepareTemporaryTargetDataWorker(
// create series
data.overviewData.temporaryTargetSeries = LineGraphSeries(Array(targetsSeriesArray.size) { i -> targetsSeriesArray[i] }).also {
it.isDrawBackground = false
- it.color = rh.gc(R.color.tempTargetBackground)
+ it.color = rh.gac(ctx, R.attr.tempTargetBackgroundColor )
it.thickness = 2
}
rxBus.send(EventIobCalculationProgress(CalculationWorkflow.ProgressData.PREPARE_TEMPORARY_TARGET_DATA, 100, null))
diff --git a/app/src/main/res/drawable/ic_byoda.xml b/app/src/main/res/drawable/ic_byoda.xml
index da63bef0df..8a3de6c453 100644
--- a/app/src/main/res/drawable/ic_byoda.xml
+++ b/app/src/main/res/drawable/ic_byoda.xml
@@ -5,5 +5,5 @@
android:viewportHeight="24">
+ android:fillColor="@color/byodaGray"/>
diff --git a/app/src/main/res/drawable/ic_cp_basal_no_tbr.xml b/app/src/main/res/drawable/ic_cp_basal_no_tbr.xml
index 840a639f9c..e9385125b6 100644
--- a/app/src/main/res/drawable/ic_cp_basal_no_tbr.xml
+++ b/app/src/main/res/drawable/ic_cp_basal_no_tbr.xml
@@ -5,5 +5,5 @@
android:viewportHeight="24">
+ android:fillColor="?attr/basalNoTbrColor"/>
diff --git a/app/src/main/res/drawable/ic_cp_basal_start.xml b/app/src/main/res/drawable/ic_cp_basal_start.xml
index 1b7781daed..22ba9382ec 100644
--- a/app/src/main/res/drawable/ic_cp_basal_start.xml
+++ b/app/src/main/res/drawable/ic_cp_basal_start.xml
@@ -5,5 +5,5 @@
android:viewportHeight="24">
+ android:fillColor="?attr/basalStartColor"/>
diff --git a/app/src/main/res/drawable/ic_cp_basal_tbr_high.xml b/app/src/main/res/drawable/ic_cp_basal_tbr_high.xml
index 1b7781daed..dba9f794d9 100644
--- a/app/src/main/res/drawable/ic_cp_basal_tbr_high.xml
+++ b/app/src/main/res/drawable/ic_cp_basal_tbr_high.xml
@@ -5,5 +5,5 @@
android:viewportHeight="24">
+ android:fillColor="?attr/basalHighColor"/>
diff --git a/app/src/main/res/drawable/ic_cp_basal_tbr_low.xml b/app/src/main/res/drawable/ic_cp_basal_tbr_low.xml
index 9f3d94563f..bcac9407aa 100644
--- a/app/src/main/res/drawable/ic_cp_basal_tbr_low.xml
+++ b/app/src/main/res/drawable/ic_cp_basal_tbr_low.xml
@@ -5,5 +5,5 @@
android:viewportHeight="24">
+ android:fillColor="?attr/basalLowColor"/>
diff --git a/app/src/main/res/drawable/ic_swap_vert_black_48dp_green.xml b/app/src/main/res/drawable/ic_swap_vert_black_48dp_green.xml
index f78eaede2c..e5dc16a43e 100644
--- a/app/src/main/res/drawable/ic_swap_vert_black_48dp_green.xml
+++ b/app/src/main/res/drawable/ic_swap_vert_black_48dp_green.xml
@@ -1,4 +1,4 @@
-
diff --git a/app/src/main/res/drawable/ic_target_manual.xml b/app/src/main/res/drawable/ic_target_manual.xml
index fc41c52757..086076077e 100644
--- a/app/src/main/res/drawable/ic_target_manual.xml
+++ b/app/src/main/res/drawable/ic_target_manual.xml
@@ -8,7 +8,7 @@
android:fillColor="@color/tempTargetConfirmation"/>
+ android:fillColor="@color/inRange"/>
diff --git a/app/src/main/res/drawable/ic_temptarget_flat.xml b/app/src/main/res/drawable/ic_temptarget_flat.xml
index bf1a2492a1..dff5ff88e4 100644
--- a/app/src/main/res/drawable/ic_temptarget_flat.xml
+++ b/app/src/main/res/drawable/ic_temptarget_flat.xml
@@ -5,7 +5,7 @@
android:viewportHeight="24">
+ android:fillColor="@color/inRange"/>
diff --git a/app/src/main/res/drawable/ic_temptarget_low.xml b/app/src/main/res/drawable/ic_temptarget_low.xml
index a161fd12f4..b91b1dac51 100644
--- a/app/src/main/res/drawable/ic_temptarget_low.xml
+++ b/app/src/main/res/drawable/ic_temptarget_low.xml
@@ -5,7 +5,7 @@
android:viewportHeight="24">
+ android:fillColor="@color/inRange"/>
diff --git a/app/src/main/res/drawable/ic_trash_outline.xml b/app/src/main/res/drawable/ic_trash_outline.xml
index a411c394e0..296cdd090a 100644
--- a/app/src/main/res/drawable/ic_trash_outline.xml
+++ b/app/src/main/res/drawable/ic_trash_outline.xml
@@ -3,5 +3,5 @@
android:width="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
-
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/ic_x_swap_vert.xml b/app/src/main/res/drawable/ic_x_swap_vert.xml
index f5182fe7b4..3d6735ae12 100644
--- a/app/src/main/res/drawable/ic_x_swap_vert.xml
+++ b/app/src/main/res/drawable/ic_x_swap_vert.xml
@@ -4,7 +4,8 @@
android:viewportHeight="24"
android:viewportWidth="24"
xmlns:android="http://schemas.android.com/apk/res/android">
-
-
-
+
+
+
diff --git a/app/src/main/res/layout/actions_fragment.xml b/app/src/main/res/layout/actions_fragment.xml
index d7b04c933f..aff0d78e1b 100644
--- a/app/src/main/res/layout/actions_fragment.xml
+++ b/app/src/main/res/layout/actions_fragment.xml
@@ -1,9 +1,9 @@
-
-
+ android:layout_marginStart="4dp"
+ android:layout_marginEnd="4dp"
+ android:layout_marginTop="4dp"
+ app:cardCornerRadius="4dp"
+ app:contentPadding="2dp"
+ app:cardElevation="4dp"
+ app:cardUseCompatPadding="false"
+ android:layout_gravity="center">
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ android:layout_marginStart="4dp"
+ android:layout_marginEnd="4dp"
+ android:layout_marginTop="4dp"
+ app:cardCornerRadius="4dp"
+ app:contentPadding="2dp"
+ app:cardElevation="4dp"
+ app:cardUseCompatPadding="false"
+ android:layout_gravity="center">
-
+ android:layout_marginTop="10dp" />
-
+
-
-
-
-
-
-
-
-
-
-
-
+ android:layout_marginStart="4dp"
+ android:layout_marginEnd="4dp"
+ android:layout_marginTop="4dp"
+ app:cardCornerRadius="4dp"
+ app:contentPadding="2dp"
+ app:cardElevation="4dp"
+ app:cardUseCompatPadding="false"
+ android:layout_gravity="center">
-
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ android:layout_marginStart="4dp"
+ android:layout_marginEnd="4dp"
+ android:layout_marginTop="4dp"
+ android:layout_marginBottom="4dp"
+ app:cardCornerRadius="4dp"
+ app:contentPadding="2dp"
+ app:cardElevation="4dp"
+ app:cardUseCompatPadding="false"
+ android:layout_gravity="center">
-
-
-
+ android:paddingStart="15dp"
+ android:paddingEnd="15dp"
+ android:text="@string/tools" />
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+ android:layout_marginTop="10dp"
+ android:padding="10dip"
+ app:columnCount="2">
-
+
-
+
+
+
+
+
-
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_historybrowse.xml b/app/src/main/res/layout/activity_historybrowse.xml
index f3792b7e91..f904a06eb4 100644
--- a/app/src/main/res/layout/activity_historybrowse.xml
+++ b/app/src/main/res/layout/activity_historybrowse.xml
@@ -59,7 +59,7 @@
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_weight="1"
- android:text="24" />
+ tools:text="24" />
@@ -111,5 +111,4 @@
-
diff --git a/app/src/main/res/layout/activity_logsetting.xml b/app/src/main/res/layout/activity_logsetting.xml
index cb1573ecf8..4236005fd8 100644
--- a/app/src/main/res/layout/activity_logsetting.xml
+++ b/app/src/main/res/layout/activity_logsetting.xml
@@ -31,8 +31,8 @@
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:layout_gravity="center"
- android:layout_marginLeft="10dp"
- android:layout_marginRight="10dp"
+ android:layout_marginStart="10dp"
+ android:layout_marginEnd="10dp"
android:text="@string/nav_logsettings"
android:textAlignment="center"
android:textAppearance="?android:attr/textAppearanceLarge" />
diff --git a/app/src/main/res/layout/activity_profilehelper.xml b/app/src/main/res/layout/activity_profilehelper.xml
index 73353f3d1c..b9e2aaf3b5 100644
--- a/app/src/main/res/layout/activity_profilehelper.xml
+++ b/app/src/main/res/layout/activity_profilehelper.xml
@@ -15,7 +15,7 @@
@@ -25,10 +25,9 @@
android:layout_height="30dp"
android:layout_weight="1"
android:gravity="center"
- android:paddingLeft="5dp"
- android:paddingRight="5dp"
- android:text="1"
- tools:ignore="HardcodedText" />
+ android:paddingStart="5dp"
+ android:paddingEnd="5dp"
+ android:text="Profile 1" />
+ android:paddingStart="5dp"
+ android:paddingEnd="5dp"
+ android:text="Profile 2" />
@@ -178,7 +176,7 @@
@@ -64,8 +65,8 @@
android:layout_gravity="bottom|center_horizontal"
android:background="@color/black_alpha_40"
android:orientation="horizontal"
- android:paddingLeft="16dp"
- android:paddingRight="16dp">
+ android:paddingStart="16dp"
+ android:paddingEnd="16dp">
@@ -72,6 +73,7 @@
android:layout_width="140sp"
android:layout_height="wrap_content"
android:hint="@string/smscommunicator_code_verify_hint"
+ android:importantForAutofill="no"
android:inputType="number"
android:maxLength="12"
android:textAlignment="center"
@@ -97,12 +99,12 @@
diff --git a/app/src/main/res/layout/activity_stats.xml b/app/src/main/res/layout/activity_stats.xml
index 524ae095f8..e34d749e7b 100644
--- a/app/src/main/res/layout/activity_stats.xml
+++ b/app/src/main/res/layout/activity_stats.xml
@@ -5,7 +5,7 @@
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
- tools:context=".activities.SurveyActivity">
+ tools:context=".activities.StatsActivity">
@@ -47,56 +47,100 @@
android:orientation="horizontal"
android:padding="5dp" />
-
+ android:layout_gravity="center"
+ android:layout_marginStart="4dp"
+ android:layout_marginEnd="4dp"
+ app:cardCornerRadius="4dp"
+ app:cardElevation="4dp"
+ app:cardUseCompatPadding="false"
+ app:contentPadding="2dp">
-
-
-
-
-
-
-
+ android:layout_marginStart="10dp"
+ android:orientation="vertical" />
-
+
+
+
+
+ android:layout_marginStart="10dp"
+ android:orientation="vertical" />
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/activity_survey.xml b/app/src/main/res/layout/activity_survey.xml
index 835cf769af..ae711855bf 100644
--- a/app/src/main/res/layout/activity_survey.xml
+++ b/app/src/main/res/layout/activity_survey.xml
@@ -177,7 +177,6 @@
android:textAlignment="center"
android:textAppearance="@style/TextAppearance.AppCompat.Medium" />
-
diff --git a/app/src/main/res/layout/bgsource_item.xml b/app/src/main/res/layout/bgsource_item.xml
index 03929f1f05..261b3c0475 100644
--- a/app/src/main/res/layout/bgsource_item.xml
+++ b/app/src/main/res/layout/bgsource_item.xml
@@ -1,13 +1,18 @@
-
+ android:layout_marginStart="4dp"
+ app:cardCornerRadius="4dp"
+ app:contentPadding="2dp"
+ app:cardElevation="4dp"
+ android:layout_gravity="center">
-
+
diff --git a/app/src/main/res/layout/careportal_stats_fragment.xml b/app/src/main/res/layout/careportal_stats_fragment.xml
index e5d724cc09..cccb4541d7 100644
--- a/app/src/main/res/layout/careportal_stats_fragment.xml
+++ b/app/src/main/res/layout/careportal_stats_fragment.xml
@@ -36,8 +36,8 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center_vertical"
- android:paddingLeft="2dp"
- android:paddingRight="2dp"
+ android:paddingStart="2dp"
+ android:paddingEnd="2dp"
android:textSize="14sp" />
@@ -108,11 +108,10 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center_vertical"
- android:paddingLeft="2dp"
- android:paddingRight="2dp"
+ android:paddingStart="2dp"
+ android:paddingEnd="2dp"
android:textSize="14sp" />
-
@@ -182,8 +181,8 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center_vertical"
- android:paddingLeft="2dp"
- android:paddingRight="2dp"
+ android:paddingStart="2dp"
+ android:paddingEnd="2dp"
android:textSize="14sp" />
@@ -255,8 +254,8 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center_vertical"
- android:paddingLeft="2dp"
- android:paddingRight="2dp"
+ android:paddingStart="2dp"
+ android:paddingEnd="2dp"
android:textSize="14sp" />
+ android:importantForAccessibility="no"
+ app:srcCompat="@drawable/ic_visibility"
+ app:tint="?android:attr/colorAccent" />
+
-
\ No newline at end of file
+
+
diff --git a/app/src/main/res/layout/configbuilder_single_plugin.xml b/app/src/main/res/layout/configbuilder_single_plugin.xml
index d48ef40a5f..397c755aba 100644
--- a/app/src/main/res/layout/configbuilder_single_plugin.xml
+++ b/app/src/main/res/layout/configbuilder_single_plugin.xml
@@ -38,7 +38,8 @@
android:layout_width="36dp"
android:layout_height="36dp"
android:layout_gravity="center_vertical"
- android:layout_marginEnd="8dp" />
+ android:layout_marginEnd="8dp"
+ android:importantForAccessibility="no" />
@@ -70,6 +72,7 @@
android:layout_height="wrap_content"
android:textSize="12sp"
tools:text="A super exquisite plugin description" />
+
@@ -80,6 +83,7 @@
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginEnd="16dp"
+ android:contentDescription="@string/a11y_open_settings"
android:background="?attr/selectableItemBackgroundBorderless"
app:srcCompat="@drawable/ic_settings" />
@@ -88,4 +92,5 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:saveEnabled="false" />
-
\ No newline at end of file
+
+
diff --git a/app/src/main/res/layout/dialog_calibration.xml b/app/src/main/res/layout/dialog_calibration.xml
index e52e675e3c..dc4fc27176 100644
--- a/app/src/main/res/layout/dialog_calibration.xml
+++ b/app/src/main/res/layout/dialog_calibration.xml
@@ -31,8 +31,8 @@
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:layout_gravity="center"
- android:layout_marginLeft="10dp"
- android:layout_marginRight="10dp"
+ android:layout_marginStart="10dp"
+ android:layout_marginEnd="10dp"
android:text="@string/overview_calibration"
android:textAlignment="center"
android:textAppearance="?android:attr/textAppearanceLarge" />
diff --git a/app/src/main/res/layout/dialog_carbs.xml b/app/src/main/res/layout/dialog_carbs.xml
index eb9bc9c37b..2e44aa81c3 100644
--- a/app/src/main/res/layout/dialog_carbs.xml
+++ b/app/src/main/res/layout/dialog_carbs.xml
@@ -30,8 +30,8 @@
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:layout_gravity="center"
- android:layout_marginLeft="10dp"
- android:layout_marginRight="10dp"
+ android:layout_marginStart="10dp"
+ android:layout_marginEnd="10dp"
android:text="@string/carbs"
android:textAlignment="center"
android:textAppearance="?android:attr/textAppearanceLarge" />
@@ -75,6 +75,7 @@
@@ -241,7 +242,6 @@
android:text="+20"
tools:ignore="HardcodedText" />
-
+
diff --git a/app/src/main/res/layout/dialog_extendedbolus.xml b/app/src/main/res/layout/dialog_extendedbolus.xml
index b26d2cfc9a..fdea04ea7a 100644
--- a/app/src/main/res/layout/dialog_extendedbolus.xml
+++ b/app/src/main/res/layout/dialog_extendedbolus.xml
@@ -29,8 +29,8 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
- android:layout_marginLeft="10dp"
- android:layout_marginRight="10dp"
+ android:layout_marginStart="10dp"
+ android:layout_marginEnd="10dp"
android:text="@string/virtualpump_extendedbolus_label"
android:textAlignment="center"
android:textAppearance="?android:attr/textAppearanceLarge" />
@@ -73,8 +73,8 @@
android:layout_gravity="center_vertical"
android:gravity="start"
android:minWidth="45dp"
- android:paddingLeft="5dp"
- android:paddingRight="5dp"
+ android:paddingStart="5dp"
+ android:paddingEnd="5dp"
android:text="@string/insulin_unit_shortname"
android:textAppearance="?android:attr/textAppearanceSmall" />
@@ -108,18 +108,17 @@
android:layout_gravity="center_vertical"
android:gravity="start"
android:minWidth="45dp"
- android:paddingLeft="5dp"
- android:paddingRight="5dp"
+ android:paddingStart="5dp"
+ android:paddingEnd="5dp"
android:text="@string/unit_minute_short"
android:textAppearance="?android:attr/textAppearanceSmall" />
-
-
\ No newline at end of file
+
diff --git a/app/src/main/res/layout/dialog_fill.xml b/app/src/main/res/layout/dialog_fill.xml
index 38f675407d..01bd3dd1c2 100644
--- a/app/src/main/res/layout/dialog_fill.xml
+++ b/app/src/main/res/layout/dialog_fill.xml
@@ -30,8 +30,8 @@
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:layout_gravity="center"
- android:layout_marginLeft="10dp"
- android:layout_marginRight="10dp"
+ android:layout_marginStart="10dp"
+ android:layout_marginEnd="10dp"
android:text="@string/primefill"
android:textAlignment="center"
android:textAppearance="?android:attr/textAppearanceLarge" />
@@ -86,8 +86,8 @@
android:layout_width="wrap_content"
android:layout_height="40dp"
android:layout_gravity="end"
- android:paddingLeft="5dp"
- android:paddingRight="5dp"
+ android:paddingStart="5dp"
+ android:paddingEnd="5dp"
app:customContentDescription="@string/overview_insulin_label" />
@@ -145,29 +145,28 @@
android:padding="5dp">
+ tools:text="+0.5" />
+ tools:text="+1.0" />
+ tools:text="+2.0" />
diff --git a/app/src/main/res/layout/dialog_loop.xml b/app/src/main/res/layout/dialog_loop.xml
index 13738c5c3e..a3d43fc95a 100644
--- a/app/src/main/res/layout/dialog_loop.xml
+++ b/app/src/main/res/layout/dialog_loop.xml
@@ -31,8 +31,8 @@
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:layout_gravity="center"
- android:layout_marginLeft="10dp"
- android:layout_marginRight="10dp"
+ android:layout_marginStart="10dp"
+ android:layout_marginEnd="10dp"
android:text="@string/loop"
android:textAlignment="center"
android:textAppearance="?android:attr/textAppearanceLarge" />
@@ -46,7 +46,6 @@
android:orientation="horizontal"
android:padding="5dp" />
-
@@ -72,82 +71,74 @@
+ android:text="@string/disableloop" />
@@ -172,26 +163,23 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
- android:layout_marginLeft="10dp"
- android:layout_marginRight="10dp"
+ android:layout_marginStart="10dp"
+ android:layout_marginEnd="10dp"
android:text="@string/suspendloop"
android:textAppearance="?android:attr/textAppearanceLarge" />
-
+ android:text="@string/duration1h" />
-
+ android:text="@string/duration2h" />
-
+ android:text="@string/duration3h" />
+ android:text="@string/duration10h" />
@@ -282,25 +260,23 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
- android:layout_marginLeft="10dp"
- android:layout_marginRight="10dp"
+ android:layout_marginStart="10dp"
+ android:layout_marginEnd="10dp"
android:text="@string/disconnectpump"
android:textAppearance="?android:attr/textAppearanceLarge" />
+ android:text="@string/duration15m" />
+ android:text="@string/duration30m" />
+ android:text="@string/duration1h" />
+ android:text="@string/duration2h" />
+ android:text="@string/duration3h" />
@@ -396,7 +362,7 @@
android:id="@+id/cancel"
style="@style/OkCancelButton.Text"
android:layout_width="fill_parent"
- android:layout_height="wrap_content"
+ android:layout_height="0dp"
android:layout_marginEnd="8dp"
android:layout_weight="1"
android:text="@string/cancel"
@@ -404,4 +370,5 @@
android:textAlignment="textEnd" />
-
\ No newline at end of file
+
+
diff --git a/app/src/main/res/layout/dialog_profileswitch.xml b/app/src/main/res/layout/dialog_profileswitch.xml
index f8b51f33b4..8531857cbb 100644
--- a/app/src/main/res/layout/dialog_profileswitch.xml
+++ b/app/src/main/res/layout/dialog_profileswitch.xml
@@ -30,8 +30,8 @@
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:layout_gravity="center"
- android:layout_marginLeft="10dp"
- android:layout_marginRight="10dp"
+ android:layout_marginStart="10dp"
+ android:layout_marginEnd="10dp"
android:text="@string/careportal_profileswitch"
android:textAlignment="center"
android:textAppearance="?android:attr/textAppearanceLarge" />
@@ -61,7 +61,6 @@
-
@@ -129,8 +128,8 @@
android:layout_height="wrap_content"
android:layout_gravity="center"
android:width="120dp"
- android:paddingLeft="10dp"
- android:paddingRight="10dp"
+ android:paddingStart="10dp"
+ android:paddingEnd="10dp"
android:text="@string/careportal_newnstreatment_percentage_label"
android:textAppearance="@style/TextAppearance.AppCompat.Small"
android:textStyle="bold" />
@@ -151,7 +150,8 @@
android:paddingStart="5dp"
android:paddingEnd="5dp"
android:text="%"
- android:textAppearance="?android:attr/textAppearanceSmall" />
+ android:textAppearance="?android:attr/textAppearanceSmall"
+ tools:ignore="HardcodedText" />
@@ -166,8 +166,8 @@
android:layout_height="wrap_content"
android:layout_gravity="center"
android:width="120dp"
- android:paddingLeft="10dp"
- android:paddingRight="10dp"
+ android:paddingStart="10dp"
+ android:paddingEnd="10dp"
android:text="@string/careportal_newnstreatment_timeshift_label"
android:textAppearance="@style/TextAppearance.AppCompat.Small"
android:textStyle="bold" />
@@ -202,15 +202,15 @@
android:layout_height="wrap_content"
android:layout_gravity="center"
android:width="120dp"
- android:paddingLeft="10dp"
- android:paddingRight="10dp"
+ android:paddingStart="10dp"
+ android:paddingEnd="10dp"
android:text="@string/careportal_temporarytarget"
android:textAppearance="@style/TextAppearance.AppCompat.Small"
android:textStyle="bold" />
-
diff --git a/app/src/main/res/layout/dialog_tempbasal.xml b/app/src/main/res/layout/dialog_tempbasal.xml
index f43b8cc0fc..94a4d347d4 100644
--- a/app/src/main/res/layout/dialog_tempbasal.xml
+++ b/app/src/main/res/layout/dialog_tempbasal.xml
@@ -30,8 +30,8 @@
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:layout_gravity="center"
- android:layout_marginLeft="10dp"
- android:layout_marginRight="10dp"
+ android:layout_marginStart="10dp"
+ android:layout_marginEnd="10dp"
android:text="@string/tempbasal_label"
android:textAlignment="center"
android:textAppearance="?android:attr/textAppearanceLarge" />
@@ -77,7 +77,8 @@
android:paddingStart="5dp"
android:paddingEnd="5dp"
android:text="%"
- android:textAppearance="?android:attr/textAppearanceSmall" />
+ android:textAppearance="?android:attr/textAppearanceSmall"
+ tools:ignore="HardcodedText" />
diff --git a/app/src/main/res/layout/dialog_temptarget.xml b/app/src/main/res/layout/dialog_temptarget.xml
index 581b196fb7..dcfae7cff1 100644
--- a/app/src/main/res/layout/dialog_temptarget.xml
+++ b/app/src/main/res/layout/dialog_temptarget.xml
@@ -30,8 +30,8 @@
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:layout_gravity="center"
- android:layout_marginLeft="10dp"
- android:layout_marginRight="10dp"
+ android:layout_marginStart="10dp"
+ android:layout_marginEnd="10dp"
android:text="@string/careportal_temporarytarget"
android:textAlignment="center"
android:textAppearance="?android:attr/textAppearanceLarge" />
@@ -140,62 +140,54 @@
+ android:textColor="?attr/tempTargetConfirmation" />
+ android:textColor="?attr/carbsColor" />
+ android:textColor="?attr/exerciseColor" />
+ android:textColor="?attr/lowColor" />
diff --git a/app/src/main/res/layout/dialog_treatment.xml b/app/src/main/res/layout/dialog_treatment.xml
index 7708232cb0..e44fc1c6ef 100644
--- a/app/src/main/res/layout/dialog_treatment.xml
+++ b/app/src/main/res/layout/dialog_treatment.xml
@@ -30,8 +30,8 @@
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:layout_gravity="center"
- android:layout_marginLeft="10dp"
- android:layout_marginRight="10dp"
+ android:layout_marginStart="10dp"
+ android:layout_marginEnd="10dp"
android:text="@string/overview_treatment_label"
android:textAlignment="center"
android:textAppearance="?android:attr/textAppearanceLarge" />
diff --git a/app/src/main/res/layout/dialog_wizard.xml b/app/src/main/res/layout/dialog_wizard.xml
index 69f9ae3459..08fa04d594 100644
--- a/app/src/main/res/layout/dialog_wizard.xml
+++ b/app/src/main/res/layout/dialog_wizard.xml
@@ -30,8 +30,8 @@
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:layout_gravity="center"
- android:layout_marginLeft="10dp"
- android:layout_marginRight="10dp"
+ android:layout_marginStart="10dp"
+ android:layout_marginEnd="10dp"
android:text="@string/boluswizard"
android:textAlignment="center"
android:textAppearance="?android:attr/textAppearanceLarge" />
@@ -48,8 +48,8 @@
+ android:paddingStart="0dp"
+ android:paddingEnd="5dp">
+ android:textStyle="bold"
+ tools:ignore="HardcodedText" />
@@ -191,8 +192,8 @@
android:id="@+id/total"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
- android:paddingLeft="10dp"
- android:paddingRight="10dp"
+ android:paddingStart="10dp"
+ android:paddingEnd="10dp"
android:text="2.35U 28g"
android:textAppearance="?android:attr/textAppearanceLarge"
tools:ignore="HardcodedText" />
@@ -202,8 +203,8 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="10dp"
- android:paddingLeft="10dp"
- android:paddingRight="10dp"
+ android:paddingStart="10dp"
+ android:paddingEnd="10dp"
android:text="50%"
android:textAppearance="?android:attr/textAppearanceLarge"
android:textColor="?attr/bolusColor"
@@ -347,7 +348,7 @@
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:checked="false"
- android:contentDescription="set carb timer alarm"
+ android:contentDescription="@string/a11y_set_carb_timer"
android:drawableEnd="@drawable/ic_access_alarm_24dp"
android:layoutDirection="rtl"
android:padding="2dp" />
@@ -384,7 +385,8 @@
android:layout_marginEnd="5dp"
android:layout_weight="0.5"
android:hint="@string/profile"
- android:paddingStart="7dp">
+ android:paddingStart="7dp"
+ android:paddingEnd="0dp">
-
diff --git a/app/src/main/res/layout/food_fragment.xml b/app/src/main/res/layout/food_fragment.xml
index 5f0b63fa7d..a64274ad54 100644
--- a/app/src/main/res/layout/food_fragment.xml
+++ b/app/src/main/res/layout/food_fragment.xml
@@ -8,7 +8,7 @@
-
-
+ android:layout_marginStart="4dp"
+ android:layout_marginEnd="4dp"
+ android:layout_marginTop="4dp"
+ app:strokeWidth="1dp"
+ app:cardCornerRadius="4dp"
+ app:contentPadding="2dp"
+ app:cardElevation="4dp"
+ app:cardUseCompatPadding="true"
+ android:layout_gravity="center">
+ android:paddingStart="3dp"
+ android:paddingEnd="3dp">
+ android:layout_marginStart="5dp">
-
-
+
diff --git a/app/src/main/res/layout/import_summary_details.xml b/app/src/main/res/layout/import_summary_details.xml
index 8c9c0bd7f2..41d3d9db4a 100644
--- a/app/src/main/res/layout/import_summary_details.xml
+++ b/app/src/main/res/layout/import_summary_details.xml
@@ -3,8 +3,8 @@
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
- android:paddingLeft="8dp"
- android:paddingRight="8dp">
+ android:paddingStart="8dp"
+ android:paddingEnd="8dp">
diff --git a/app/src/main/res/layout/localprofile_fragment.xml b/app/src/main/res/layout/localprofile_fragment.xml
index ec8234f334..f1bd26f410 100644
--- a/app/src/main/res/layout/localprofile_fragment.xml
+++ b/app/src/main/res/layout/localprofile_fragment.xml
@@ -296,11 +296,11 @@
android:layout_width="wrap_content"
android:layout_height="0dp"
android:layout_gravity="center_horizontal"
- android:layout_marginLeft="10dp"
- android:layout_marginRight="10dp"
+ android:layout_marginStart="10dp"
+ android:layout_marginEnd="10dp"
android:layout_weight="1"
- android:paddingLeft="10dp"
- android:paddingRight="10dp"
+ android:paddingStart="10dp"
+ android:paddingEnd="10dp"
android:text="@string/activate_profile"
app:icon="@drawable/ic_local_activate"
app:iconTint="@color/ic_local_activate" />
@@ -317,11 +317,11 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
- android:layout_marginLeft="5dp"
- android:layout_marginRight="5dp"
+ android:layout_marginStart="5dp"
+ android:layout_marginEnd="5dp"
android:layout_weight="1"
- android:paddingLeft="1dp"
- android:paddingRight="1dp"
+ android:paddingStart="1dp"
+ android:paddingEnd="1dp"
android:text="@string/reset"
app:icon="@drawable/ic_local_reset"
app:iconTint="@color/ic_local_reset" />
@@ -332,11 +332,11 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
- android:layout_marginLeft="5dp"
- android:layout_marginRight="5dp"
+ android:layout_marginStart="5dp"
+ android:layout_marginEnd="5dp"
android:layout_weight="1"
- android:paddingLeft="1dp"
- android:paddingRight="1dp"
+ android:paddingStart="1dp"
+ android:paddingEnd="1dp"
android:text="@string/save"
app:icon="@drawable/ic_local_save"
app:iconTint="@color/ic_local_save" />
@@ -347,5 +347,3 @@
-
-
diff --git a/app/src/main/res/layout/logsettings_item.xml b/app/src/main/res/layout/logsettings_item.xml
index 0c4634ac90..5a64ac9b08 100644
--- a/app/src/main/res/layout/logsettings_item.xml
+++ b/app/src/main/res/layout/logsettings_item.xml
@@ -13,11 +13,10 @@
android:textSize="12sp"
tools:text="TYPE" />
-
-
\ No newline at end of file
+
diff --git a/app/src/main/res/layout/loop_fragment.xml b/app/src/main/res/layout/loop_fragment.xml
index 98525ce294..bdd975b74e 100644
--- a/app/src/main/res/layout/loop_fragment.xml
+++ b/app/src/main/res/layout/loop_fragment.xml
@@ -56,9 +56,9 @@
@@ -102,9 +102,9 @@
@@ -147,9 +147,9 @@
@@ -192,9 +192,9 @@
@@ -237,9 +237,9 @@
@@ -282,9 +282,9 @@
@@ -327,9 +327,9 @@
@@ -372,9 +372,9 @@
@@ -417,9 +417,9 @@
@@ -462,9 +462,9 @@
@@ -507,9 +507,9 @@
diff --git a/app/src/main/res/layout/maintenance_fragment.xml b/app/src/main/res/layout/maintenance_fragment.xml
index ff9ae43fd4..e059bf928c 100644
--- a/app/src/main/res/layout/maintenance_fragment.xml
+++ b/app/src/main/res/layout/maintenance_fragment.xml
@@ -24,9 +24,9 @@
style="@style/GrayButton"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
- android:layout_marginLeft="10dp"
+ android:layout_marginStart="10dp"
android:layout_marginTop="3dp"
- android:layout_marginRight="10dp"
+ android:layout_marginEnd="10dp"
android:layout_marginBottom="3dp"
android:layout_weight="0.5"
android:text="@string/nav_logsettings"
@@ -37,9 +37,9 @@
style="@style/GrayButton"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
- android:layout_marginLeft="10dp"
+ android:layout_marginStart="10dp"
android:layout_marginTop="3dp"
- android:layout_marginRight="10dp"
+ android:layout_marginEnd="10dp"
android:layout_marginBottom="3dp"
android:layout_weight="0.5"
android:text="@string/send_all_logs"
@@ -50,9 +50,9 @@
style="@style/GrayButton"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
- android:layout_marginLeft="10dp"
+ android:layout_marginStart="10dp"
android:layout_marginTop="3dp"
- android:layout_marginRight="10dp"
+ android:layout_marginEnd="10dp"
android:layout_marginBottom="3dp"
android:layout_weight="0.5"
android:text="@string/delete_logs"
@@ -63,9 +63,9 @@
style="@style/GrayButton"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
- android:layout_marginLeft="10dp"
+ android:layout_marginStart="10dp"
android:layout_marginTop="3dp"
- android:layout_marginRight="10dp"
+ android:layout_marginEnd="10dp"
android:layout_marginBottom="3dp"
android:layout_weight="0.5"
android:text="@string/nav_export"
@@ -76,23 +76,22 @@
style="@style/GrayButton"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
- android:layout_marginLeft="10dp"
+ android:layout_marginStart="10dp"
android:layout_marginTop="3dp"
- android:layout_marginRight="10dp"
+ android:layout_marginEnd="10dp"
android:layout_marginBottom="3dp"
android:layout_weight="0.5"
android:text="@string/nav_import"
android:textColor="?attr/treatmentButton" />
-
@@ -23,7 +23,7 @@
android:id="@+id/url"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
- android:layout_marginLeft="5dp"
+ android:layout_marginStart="5dp"
android:autoLink="web"
tools:ignore="RtlHardcoded" />
@@ -32,8 +32,8 @@
@@ -48,8 +48,8 @@
android:id="@+id/autoscroll"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
- android:layout_marginLeft="20dp"
- android:layout_marginRight="10dp"
+ android:layout_marginStart="20dp"
+ android:layout_marginEnd="10dp"
android:text="@string/nsclientinternal_autoscroll"
tools:ignore="RtlHardcoded" />
@@ -58,14 +58,14 @@
@@ -90,17 +90,17 @@
android:id="@+id/queue"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
- android:layout_marginLeft="5dp"
- android:layout_marginRight="5dp" />
+ android:layout_marginStart="5dp"
+ android:layout_marginEnd="5dp" />
@@ -150,8 +150,8 @@
android:id="@+id/log_scrollview"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
- android:layout_marginLeft="5dp"
- android:layout_marginRight="5dp">
+ android:layout_marginStart="5dp"
+ android:layout_marginEnd="5dp">
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/layout/objectives_exam_fragment.xml b/app/src/main/res/layout/objectives_exam_fragment.xml
index 77ef669e3f..7d014bb248 100644
--- a/app/src/main/res/layout/objectives_exam_fragment.xml
+++ b/app/src/main/res/layout/objectives_exam_fragment.xml
@@ -28,7 +28,6 @@
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:layout_marginBottom="10dp"
- android:background="?attr/objectivesBackgroundColor"
android:orientation="vertical"
app:layout_constraintTop_toBottomOf="@+id/exam_options"
tools:layout_editor_absoluteX="3dp" />
@@ -51,7 +50,7 @@
android:text="@string/reset" />
@@ -77,10 +76,10 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
- android:text="Question"
android:textAppearance="@style/TextAppearance.AppCompat.Medium"
app:layout_constraintStart_toStartOf="parent"
- app:layout_constraintTop_toBottomOf="@id/exam_name" />
+ app:layout_constraintTop_toBottomOf="@id/exam_name"
+ tools:text="Question" />
+ app:layout_constraintTop_toTopOf="parent"
+ tools:text="Name" />
+ app:layout_constraintTop_toBottomOf="@+id/exam_hints"
+ tools:text="Disabled until:" />
diff --git a/app/src/main/res/layout/objectives_fragment.xml b/app/src/main/res/layout/objectives_fragment.xml
index fa2e8c2150..37363a8491 100644
--- a/app/src/main/res/layout/objectives_fragment.xml
+++ b/app/src/main/res/layout/objectives_fragment.xml
@@ -10,8 +10,8 @@
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:orientation="horizontal"
- android:paddingLeft="16dp"
- android:paddingRight="16dp"
+ android:paddingStart="16dp"
+ android:paddingEnd="16dp"
android:paddingTop="16dp"
android:visibility="gone">
@@ -19,7 +19,7 @@
android:id="@+id/fake"
android:layout_width="0dp"
android:layout_height="wrap_content"
- android:layout_marginRight="16dp"
+ android:layout_marginEnd="16dp"
android:layout_weight="1"
android:text="Enable fake time and progress" />
diff --git a/app/src/main/res/layout/objectives_item.xml b/app/src/main/res/layout/objectives_item.xml
index b0906b8f02..9083300a3c 100644
--- a/app/src/main/res/layout/objectives_item.xml
+++ b/app/src/main/res/layout/objectives_item.xml
@@ -1,18 +1,20 @@
-
+ app:contentPadding="16dp"
+ android:layout_gravity="center">
+ tools:text="Request code: XXXXX" />
+ android:inputType="text"
+ tools:hint="XXXXXXXXXX"
+ android:importantForAutofill="no" />
-
+
diff --git a/app/src/main/res/layout/openapsama_fragment.xml b/app/src/main/res/layout/openapsama_fragment.xml
index 099997d324..8420607244 100644
--- a/app/src/main/res/layout/openapsama_fragment.xml
+++ b/app/src/main/res/layout/openapsama_fragment.xml
@@ -63,9 +63,9 @@
@@ -88,9 +88,9 @@
@@ -133,9 +133,9 @@
@@ -178,9 +178,9 @@
@@ -223,9 +223,9 @@
@@ -268,9 +268,9 @@
@@ -313,9 +313,9 @@
@@ -358,9 +358,9 @@
@@ -403,9 +403,9 @@
@@ -428,18 +428,18 @@
@@ -482,9 +482,9 @@
@@ -527,9 +527,9 @@
@@ -572,9 +572,9 @@
diff --git a/app/src/main/res/layout/overview_buttons_layout.xml b/app/src/main/res/layout/overview_buttons_layout.xml
index d4142c46b1..363ecb5074 100644
--- a/app/src/main/res/layout/overview_buttons_layout.xml
+++ b/app/src/main/res/layout/overview_buttons_layout.xml
@@ -1,7 +1,7 @@
-
+ android:visibility="gone" />
+ android:singleLine="true"
+ android:ellipsize="end"
+ app:iconPadding="-4dp"
+ android:textColor="?attr/icBolusColor" />
+ android:singleLine="true"
+ android:ellipsize="end"
+ app:iconPadding="-4dp"
+ android:textColor="?attr/icBolusCarbsColor" />
+ android:singleLine="true"
+ android:ellipsize="end"
+ app:iconPadding="-4dp"
+ android:textColor="?attr/icCalculatorColor"/>
+ android:visibility="gone" />
+ android:visibility="gone" />
+ app:iconPadding="-4dp"
+ android:textColor="?attr/icQuickWizardColor" />
diff --git a/app/src/main/res/layout/overview_editquickwizard_dialog.xml b/app/src/main/res/layout/overview_editquickwizard_dialog.xml
index 89a45b5915..19e9140002 100644
--- a/app/src/main/res/layout/overview_editquickwizard_dialog.xml
+++ b/app/src/main/res/layout/overview_editquickwizard_dialog.xml
@@ -28,8 +28,8 @@
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:layout_gravity="center"
- android:layout_marginLeft="10dp"
- android:layout_marginRight="10dp"
+ android:layout_marginStart="10dp"
+ android:layout_marginEnd="10dp"
android:text="@string/quickwizardsettings"
android:textAlignment="center"
android:textAppearance="?android:attr/textAppearanceLarge" />
@@ -85,15 +85,16 @@
android:layout_gravity="center"
android:gravity="center_horizontal|center_vertical"
android:padding="10dp"
- android:text="08:20pm"
- android:textAppearance="@style/TextAppearance.AppCompat.Medium" />
+ android:textAppearance="@style/TextAppearance.AppCompat.Medium"
+ tools:text="08:20pm" />
+ android:textAppearance="@style/TextAppearance.AppCompat.Medium"
+ tools:ignore="HardcodedText" />
+ android:textAppearance="@style/TextAppearance.AppCompat.Medium"
+ tools:text="08:20pm" />
@@ -123,17 +124,17 @@
+ android:text="@string/device_all" />
+ android:text="@string/device_phone" />
+ android:text="@string/device_watch" />
@@ -245,7 +246,6 @@
-
+ android:maxLength="3"/>
-
-
+
+
+
+
+
+
+
+
+ android:layout_marginStart="4dp"
+ android:layout_marginEnd="4dp"
+ android:layout_marginTop="4dp"
+ app:cardCornerRadius="4dp"
+ app:contentPadding="2dp"
+ app:cardElevation="2dp"
+ app:cardUseCompatPadding="false"
+ android:layout_gravity="center">
-
+
-
+
-
-
-
-
-
-
-
-
+ android:layout_marginStart="4dp"
+ android:layout_marginEnd="4dp"
+ android:layout_marginTop="4dp"
+ app:cardCornerRadius="4dp"
+ app:contentPadding="2dp"
+ app:cardElevation="2dp"
+ app:cardUseCompatPadding="false"
+ android:layout_gravity="center">
-
+
+
+
+
+
+
+ app:alignContent="stretch"
+ app:alignItems="stretch"
+ app:flexDirection="row"
+ app:flexWrap="wrap"
+ app:justifyContent="center">
-
+
-
+
-
+
-
+
+
+
+
+
+
+
+
+
-
+
-
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/overview_graphs_layout.xml b/app/src/main/res/layout/overview_graphs_layout.xml
index dd35dc7684..70bcfa678e 100644
--- a/app/src/main/res/layout/overview_graphs_layout.xml
+++ b/app/src/main/res/layout/overview_graphs_layout.xml
@@ -1,7 +1,6 @@
diff --git a/app/src/main/res/layout/overview_info_layout.xml b/app/src/main/res/layout/overview_info_layout.xml
index c8e73887b7..b787e50049 100644
--- a/app/src/main/res/layout/overview_info_layout.xml
+++ b/app/src/main/res/layout/overview_info_layout.xml
@@ -42,7 +42,6 @@
app:layout_constraintTop_toTopOf="@+id/bg"
tools:ignore="HardcodedText" />
-
-
\ No newline at end of file
+
diff --git a/app/src/main/res/layout/overview_notification_item.xml b/app/src/main/res/layout/overview_notification_item.xml
index aba885b816..8f04a749d1 100644
--- a/app/src/main/res/layout/overview_notification_item.xml
+++ b/app/src/main/res/layout/overview_notification_item.xml
@@ -1,14 +1,17 @@
-
+ app:cardCornerRadius="4dp"
+ app:contentPadding="2dp"
+ android:layout_gravity="center"
+ app:cardBackgroundColor="?attr/notificationUrgent">
-
+
diff --git a/app/src/main/res/layout/overview_quickwizardlist_item.xml b/app/src/main/res/layout/overview_quickwizardlist_item.xml
index 2496e6e0bc..25301a3bb6 100644
--- a/app/src/main/res/layout/overview_quickwizardlist_item.xml
+++ b/app/src/main/res/layout/overview_quickwizardlist_item.xml
@@ -1,15 +1,18 @@
-
+ android:layout_marginStart="4dp"
+ app:cardCornerRadius="4dp"
+ app:contentPadding="2dp"
+ app:cardElevation="4dp"
+ app:cardUseCompatPadding="true"
+ android:layout_gravity="center">
+ app:srcCompat="@drawable/ic_quick_wizard" />
+ android:contentDescription="@string/a11y_only_on_phone"
+ app:srcCompat="@drawable/ic_smartphone" />
+ app:srcCompat="@drawable/ic_reorder_gray_24dp" />
-
-
+
diff --git a/app/src/main/res/layout/overview_statuslights_layout.xml b/app/src/main/res/layout/overview_statuslights_layout.xml
index ab2402c373..546409aa7e 100644
--- a/app/src/main/res/layout/overview_statuslights_layout.xml
+++ b/app/src/main/res/layout/overview_statuslights_layout.xml
@@ -7,17 +7,18 @@
android:layout_height="wrap_content"
android:layout_marginTop="3dp"
android:layout_marginBottom="3dp"
- android:background="?attr/colorControlHighlight"
android:orientation="horizontal"
android:paddingTop="4dp"
- android:paddingBottom="4dp">
+ android:paddingBottom="4dp"
+ android:baselineAligned="false">
+ android:gravity="center_horizontal"
+ tools:ignore="UseCompoundDrawables">
@@ -74,7 +76,8 @@
android:layout_height="fill_parent"
android:layout_weight="1"
android:focusable="true"
- android:gravity="center_horizontal">
+ android:gravity="center_horizontal"
+ tools:ignore="UseCompoundDrawables">
diff --git a/app/src/main/res/layout/timelistedit_element.xml b/app/src/main/res/layout/timelistedit_element.xml
index 4ff1634cb0..7de7d779fc 100644
--- a/app/src/main/res/layout/timelistedit_element.xml
+++ b/app/src/main/res/layout/timelistedit_element.xml
@@ -12,7 +12,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
- android:layout_marginRight="10dp"
+ android:layout_marginEnd="10dp"
android:minWidth="80dp" />
+ android:layout_marginEnd="5dp" />
@@ -46,7 +46,7 @@
android:layout_width="35dp"
android:layout_height="35dp"
android:layout_gravity="center_vertical"
- android:layout_marginLeft="15dp"
+ android:layout_marginStart="15dp"
android:contentDescription="@string/remove_label"
app:srcCompat="@drawable/ic_remove" />
diff --git a/app/src/main/res/layout/timelistedit_element_vertical.xml b/app/src/main/res/layout/timelistedit_element_vertical.xml
index fbe0bce438..5cbe81213e 100644
--- a/app/src/main/res/layout/timelistedit_element_vertical.xml
+++ b/app/src/main/res/layout/timelistedit_element_vertical.xml
@@ -12,7 +12,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
- android:layout_marginRight="10dp"
+ android:layout_marginEnd="10dp"
android:minWidth="80dp" />
+ android:layout_marginEnd="5dp" />
@@ -46,7 +46,7 @@
android:layout_width="35dp"
android:layout_height="35dp"
android:layout_gravity="center_vertical"
- android:layout_marginLeft="15dp"
+ android:layout_marginStart="15dp"
android:contentDescription="@string/remove_label"
app:srcCompat="@drawable/ic_remove" />
diff --git a/app/src/main/res/layout/treatments_bolus_carbs_item.xml b/app/src/main/res/layout/treatments_bolus_carbs_item.xml
index 5c3c7502b6..d21c778f3e 100644
--- a/app/src/main/res/layout/treatments_bolus_carbs_item.xml
+++ b/app/src/main/res/layout/treatments_bolus_carbs_item.xml
@@ -1,11 +1,17 @@
-
+ android:layout_marginStart="4dp"
+ android:layout_marginBottom="4dp"
+ app:cardCornerRadius="4dp"
+ app:contentPadding="2dp"
+ android:layout_gravity="center">
-
-
-
+
diff --git a/app/src/main/res/layout/treatments_careportal_item.xml b/app/src/main/res/layout/treatments_careportal_item.xml
index bb4fff2681..6431d6eee5 100644
--- a/app/src/main/res/layout/treatments_careportal_item.xml
+++ b/app/src/main/res/layout/treatments_careportal_item.xml
@@ -1,11 +1,17 @@
-
+ android:layout_marginStart="4dp"
+ android:layout_marginBottom="4dp"
+ app:cardCornerRadius="4dp"
+ app:contentPadding="2dp"
+ android:layout_gravity="center">
-
-
-
+
diff --git a/app/src/main/res/layout/treatments_extendedbolus_item.xml b/app/src/main/res/layout/treatments_extendedbolus_item.xml
index 587a3e6410..18621d3e9d 100644
--- a/app/src/main/res/layout/treatments_extendedbolus_item.xml
+++ b/app/src/main/res/layout/treatments_extendedbolus_item.xml
@@ -1,11 +1,17 @@
-
+ android:layout_marginStart="4dp"
+ android:layout_marginBottom="4dp"
+ app:cardCornerRadius="4dp"
+ app:contentPadding="2dp"
+ android:layout_gravity="center">
-
-
-
+
diff --git a/app/src/main/res/layout/treatments_profileswitch_item.xml b/app/src/main/res/layout/treatments_profileswitch_item.xml
index ee4331c46a..407af40983 100644
--- a/app/src/main/res/layout/treatments_profileswitch_item.xml
+++ b/app/src/main/res/layout/treatments_profileswitch_item.xml
@@ -1,11 +1,17 @@
-
+ android:layout_marginStart="4dp"
+ android:layout_marginBottom="4dp"
+ app:cardCornerRadius="4dp"
+ app:contentPadding="2dp"
+ android:layout_gravity="center">
-
-
-
+
diff --git a/app/src/main/res/layout/treatments_tempbasals_item.xml b/app/src/main/res/layout/treatments_tempbasals_item.xml
index 94840ce53a..6f20e98720 100644
--- a/app/src/main/res/layout/treatments_tempbasals_item.xml
+++ b/app/src/main/res/layout/treatments_tempbasals_item.xml
@@ -1,11 +1,17 @@
-
+ android:layout_marginStart="4dp"
+ android:layout_marginBottom="4dp"
+ app:cardCornerRadius="4dp"
+ app:contentPadding="2dp"
+ android:layout_gravity="center">
@@ -182,16 +188,6 @@
-
-
-
+
diff --git a/app/src/main/res/layout/treatments_temptarget_item.xml b/app/src/main/res/layout/treatments_temptarget_item.xml
index b6a5ce8e0c..8124661300 100644
--- a/app/src/main/res/layout/treatments_temptarget_item.xml
+++ b/app/src/main/res/layout/treatments_temptarget_item.xml
@@ -1,11 +1,17 @@
-
+ android:layout_marginStart="4dp"
+ android:layout_marginBottom="4dp"
+ app:cardCornerRadius="4dp"
+ app:contentPadding="2dp"
+ android:layout_gravity="center">
-
-
-
+
diff --git a/app/src/main/res/layout/treatments_user_entry_item.xml b/app/src/main/res/layout/treatments_user_entry_item.xml
index 04110b1e3d..e2e2f6fe76 100644
--- a/app/src/main/res/layout/treatments_user_entry_item.xml
+++ b/app/src/main/res/layout/treatments_user_entry_item.xml
@@ -1,102 +1,101 @@
-
+ android:layout_gravity="center"
+ android:layout_marginStart="4dp"
+ android:layout_marginBottom="4dp"
+ app:cardCornerRadius="4dp"
+ app:contentPadding="2dp">
-
+ android:orientation="vertical">
-
+
-
+
-
+
-
+
-
+
-
+
-
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/virtualpump_fragment.xml b/app/src/main/res/layout/virtualpump_fragment.xml
index 082f4abeae..ab29406d59 100644
--- a/app/src/main/res/layout/virtualpump_fragment.xml
+++ b/app/src/main/res/layout/virtualpump_fragment.xml
@@ -33,7 +33,7 @@
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="end"
- android:paddingRight="5dp"
+ android:paddingEnd="5dp"
android:text="@string/basebasalrate_label"
android:textSize="14sp" />
@@ -53,7 +53,7 @@
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="start"
- android:paddingLeft="5dp"
+ android:paddingStart="5dp"
android:textSize="14sp" />
@@ -62,8 +62,8 @@
android:layout_width="fill_parent"
android:layout_height="2dip"
android:layout_marginBottom="5dp"
- android:layout_marginLeft="20dp"
- android:layout_marginRight="20dp"
+ android:layout_marginStart="20dp"
+ android:layout_marginEnd="20dp"
android:layout_marginTop="5dp"
android:background="?android:attr/dividerHorizontal" />
@@ -78,7 +78,7 @@
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="end"
- android:paddingRight="5dp"
+ android:paddingEnd="5dp"
android:text="@string/tempbasal_label"
android:textSize="14sp" />
@@ -98,7 +98,7 @@
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="start"
- android:paddingLeft="5dp"
+ android:paddingStart="5dp"
android:textSize="14sp" />
@@ -107,8 +107,8 @@
android:layout_width="fill_parent"
android:layout_height="2dip"
android:layout_marginBottom="5dp"
- android:layout_marginLeft="20dp"
- android:layout_marginRight="20dp"
+ android:layout_marginStart="20dp"
+ android:layout_marginEnd="20dp"
android:layout_marginTop="5dp"
android:background="?android:attr/dividerHorizontal" />
@@ -123,7 +123,7 @@
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="end"
- android:paddingRight="5dp"
+ android:paddingEnd="5dp"
android:text="@string/virtualpump_extendedbolus_label"
android:textSize="14sp" />
@@ -143,7 +143,7 @@
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="start"
- android:paddingLeft="5dp"
+ android:paddingStart="5dp"
android:textSize="14sp" />
@@ -152,8 +152,8 @@
android:layout_width="fill_parent"
android:layout_height="2dip"
android:layout_marginBottom="5dp"
- android:layout_marginLeft="20dp"
- android:layout_marginRight="20dp"
+ android:layout_marginStart="20dp"
+ android:layout_marginEnd="20dp"
android:layout_marginTop="5dp"
android:background="?android:attr/dividerHorizontal" />
@@ -168,7 +168,7 @@
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="end"
- android:paddingRight="5dp"
+ android:paddingEnd="5dp"
android:text="@string/battery_label"
android:textSize="14sp" />
@@ -188,7 +188,7 @@
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="start"
- android:paddingLeft="5dp"
+ android:paddingStart="5dp"
android:textSize="14sp" />
@@ -198,8 +198,8 @@
android:layout_width="fill_parent"
android:layout_height="2dip"
android:layout_marginBottom="5dp"
- android:layout_marginLeft="20dp"
- android:layout_marginRight="20dp"
+ android:layout_marginStart="20dp"
+ android:layout_marginEnd="20dp"
android:layout_marginTop="5dp"
android:background="?android:attr/dividerHorizontal" />
@@ -214,7 +214,7 @@
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="end"
- android:paddingRight="5dp"
+ android:paddingEnd="5dp"
android:text="@string/reservoir_label"
android:textSize="14sp" />
@@ -234,7 +234,7 @@
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="start"
- android:paddingLeft="5dp"
+ android:paddingStart="5dp"
android:textSize="14sp" />
@@ -244,8 +244,8 @@
android:layout_width="fill_parent"
android:layout_height="2dip"
android:layout_marginBottom="5dp"
- android:layout_marginLeft="20dp"
- android:layout_marginRight="20dp"
+ android:layout_marginStart="20dp"
+ android:layout_marginEnd="20dp"
android:layout_marginTop="5dp"
android:background="?android:attr/dividerHorizontal" />
@@ -260,7 +260,7 @@
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="end"
- android:paddingRight="5dp"
+ android:paddingEnd="5dp"
android:text="@string/serialnumber"
android:textSize="14sp" />
@@ -280,7 +280,7 @@
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="start"
- android:paddingLeft="5dp"
+ android:paddingStart="5dp"
android:textSize="14sp" />
@@ -290,8 +290,8 @@
android:layout_width="fill_parent"
android:layout_height="2dip"
android:layout_marginBottom="5dp"
- android:layout_marginLeft="20dp"
- android:layout_marginRight="20dp"
+ android:layout_marginStart="20dp"
+ android:layout_marginEnd="20dp"
android:layout_marginTop="5dp"
android:background="?android:attr/dividerHorizontal" />
@@ -306,7 +306,7 @@
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="end"
- android:paddingRight="5dp"
+ android:paddingEnd="5dp"
android:text="@string/virtualpump_type"
android:textSize="14sp" />
@@ -326,7 +326,7 @@
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="start"
- android:paddingLeft="5dp"
+ android:paddingStart="5dp"
android:textSize="14sp" />
@@ -336,8 +336,8 @@
android:layout_width="fill_parent"
android:layout_height="2dip"
android:layout_marginBottom="5dp"
- android:layout_marginLeft="20dp"
- android:layout_marginRight="20dp"
+ android:layout_marginStart="20dp"
+ android:layout_marginEnd="20dp"
android:layout_marginTop="5dp"
android:background="?android:attr/dividerHorizontal" />
@@ -352,7 +352,7 @@
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="end"
- android:paddingRight="5dp"
+ android:paddingEnd="5dp"
android:text="@string/virtualpump_definition"
android:textSize="14sp" />
@@ -372,7 +372,7 @@
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="start"
- android:paddingLeft="5dp"
+ android:paddingStart="5dp"
android:textSize="14sp" />
diff --git a/app/src/main/res/layout/wear_fragment.xml b/app/src/main/res/layout/wear_fragment.xml
index 8b271deb9c..059c85125e 100644
--- a/app/src/main/res/layout/wear_fragment.xml
+++ b/app/src/main/res/layout/wear_fragment.xml
@@ -23,25 +23,27 @@
+ android:text="@string/resend_all_data"
+ android:textColor="?attr/treatmentButton" />
+ android:text="@string/open_settings_on_wear"
+ android:textColor="?attr/treatmentButton" />
diff --git a/app/src/main/res/values-cs-rCZ/strings.xml b/app/src/main/res/values-cs-rCZ/strings.xml
index 986c09cefa..c1ddca6af6 100644
--- a/app/src/main/res/values-cs-rCZ/strings.xml
+++ b/app/src/main/res/values-cs-rCZ/strings.xml
@@ -815,6 +815,7 @@
Na každém sledovacím telefonu nainstalujte Authentikátor, který podporuje tokeny TOTP RFC 6238. Nejoblíbenější bezplatné aplikace jsou:\n • Authy\n • Google Authenticator\n • LastPass Authenticator\n • FreeOTP Authenticator
Obnovením autentikátoru uděláte všechny již poskytnuté autentikátory neplatné. Budete je muset znovu nastavit!
Predikce
+ Ošetření
Odchylka sklonu
Autorizace selhala
Absolutní inzulin
@@ -995,6 +996,7 @@
Dočasné cíle
Sacharidy a bolusy
Opravdu chcete odstranit %1$d položku(y)
+ Žádné záznamy nejsou k dispozici
Skrýt smyčku
Zobrazit smyčku
Vybráno: %1$d
diff --git a/app/src/main/res/values-es-rES/strings.xml b/app/src/main/res/values-es-rES/strings.xml
index 39d7dfc7a4..5168e374f2 100644
--- a/app/src/main/res/values-es-rES/strings.xml
+++ b/app/src/main/res/values-es-rES/strings.xml
@@ -450,7 +450,7 @@
ACTIVAR PERFIL
INVÁLIDO
Porcentaje
- Cambio de tiempo
+ Tiempo del cambio
Objetivo temporal por defecto
Duración OT Comiendo Pronto
Objetivo Comiendo Pronto
@@ -815,6 +815,7 @@
En cada teléfono seguidor, instale la aplicación Authenticator que admita tokens RFC 6238 TOTP. Las aplicaciones gratuitas populares son:\n • Authy\n • Google Authenticator\n • LastPass Authenticator\n • FreeOTP Authenticator
Al resetear el autenticador haces que todos los autenticadores ya provistos no sean válidos. ¡Necesitarás configurarlos de nuevo!
Predicciones
+ Tratamientos
Pendiente de desviación
Ha fallado la autorización
Insulina en total
@@ -995,6 +996,7 @@
Objetivos temporales
Carbohidratos y bolos
¿Estás seguro de que quieres eliminar %1$d elementos?
+ No hay registros disponibles
Ocultar lazo
Mostrar lazo
%1$d selecionado
diff --git a/app/src/main/res/values-fr-rFR/strings.xml b/app/src/main/res/values-fr-rFR/strings.xml
index 84ca1479ce..7b255bbf49 100644
--- a/app/src/main/res/values-fr-rFR/strings.xml
+++ b/app/src/main/res/values-fr-rFR/strings.xml
@@ -435,6 +435,8 @@ L\'ENSEMBLE DES RISQUES LIÉS À LA QUALITÉ ET À LA PERFORMANCE DU PROGRAMME S
Activer les transmissions locales
OpenAPS SMB
SI dynamique
+ Facteur d\'ajustement SI dynamique %%
+ Facteur d\'ajustement pour SI dynamique. Définissez plus de 100 %% pour des corrections plus agressives et moins de 100 %% pour des corrections moins agressives.
Activer RNS
Activer SMB
Utiliser les Super Micro Bolus au lieu des débits de base temporaires pour une action rapide
@@ -814,6 +816,7 @@ L\'ENSEMBLE DES RISQUES LIÉS À LA QUALITÉ ET À LA PERFORMANCE DU PROGRAMME S
Sur chaque téléphone suiveur, installez une appli. Authentificateur qui prend en charge les jetons RFC 6238 TOTP. Les applications libres populaires sont:\n • Authy\n • Google Authenticator\n • LastPass Authenticator\n • FreeOTP Authenticator
En réinitialisant l\'Authentificateur, vous invalidez tous les authentificateurs déjà initialisés. Vous devrez les reconfigurer !
Prédictions
+ Traitements
Pente de déviations
Echec de l\'authentification
Insuline absolue
@@ -993,6 +996,7 @@ L\'ENSEMBLE DES RISQUES LIÉS À LA QUALITÉ ET À LA PERFORMANCE DU PROGRAMME S
Cibles Temp
Glucides et bolus
Êtes-vous sûr de vouloir supprimer %1$d entrée(s)
+ Aucun enregistrement disponible
Masquer la boucle
Afficher les entrées boucle
%1$d sélectionnée(s)
@@ -1004,4 +1008,5 @@ L\'ENSEMBLE DES RISQUES LIÉS À LA QUALITÉ ET À LA PERFORMANCE DU PROGRAMME S
Afficher les entrées de la boucle
Masquer les entrées de la boucle
Widget AndroidAPS
+ Configurer l’opacité
diff --git a/app/src/main/res/values-hr-rHR/strings.xml b/app/src/main/res/values-hr-rHR/strings.xml
index 718d414505..c5d4d153ba 100644
--- a/app/src/main/res/values-hr-rHR/strings.xml
+++ b/app/src/main/res/values-hr-rHR/strings.xml
@@ -4,4 +4,6 @@
+
+
diff --git a/app/src/main/res/values-iw-rIL/strings.xml b/app/src/main/res/values-iw-rIL/strings.xml
index e40f21e6af..51bdcd1cce 100644
--- a/app/src/main/res/values-iw-rIL/strings.xml
+++ b/app/src/main/res/values-iw-rIL/strings.xml
@@ -434,6 +434,8 @@
אפשר שידורים מקומיים.
OpenAPS SMB
רגישות דינאמית
+ כיוונון פקטור הרגישות הדינאמית %%
+ כיוונון פקטור הרגישות הדינאמית. קבעו יותר מ-100% לקבלת תיקונים אגרסיביים יותר ופחות מ-100% לקבלת תיקונים עדינים יותר.
הפעלת UAM
אפשר SMB
השתמש בסופר מיקרו בולוסים במקום בבזאלי זמני לפעילות מהירה יותר
@@ -811,6 +813,7 @@
בכל אחד מהטלפונים העוקבים, התקינו יישום מאמת התומך באסימוני RFC 6238 TOTP. יישומים פופולריים בחינם הם:\n • Authy\n • Google Authenticator\n • LastPass Authenticator\n • FreeOTP Authenticator
אתחול המאמת גורם למאמתים שסופקו לכם להפסיק להיות חוקיים ויהיה צורך להגדירם שוב!
חיזוי
+ טיפולים
שיפוע הסטייה
ההרשאה נכשלה
אינסולין מוחלט
@@ -964,9 +967,17 @@
ערכי מטרה זמניים
פחמ\' ובולוס
האם אתם בטוחים שברצונכם להסיר %1$d פריטים?
+ אין רישומים זמינים
החבא לולאה
הצג לולאה
%1$d נבחרו
מיין
+ דו-שיח בוטל
+ מתחת
+ בטווח
+ מעל
+ הצג רשומות לולאה
+ החבא רשומות לולאה
ווידג\'ט AndroidAPS
+ הגדרת אטימות
diff --git a/app/src/main/res/values-nl-rNL/strings.xml b/app/src/main/res/values-nl-rNL/strings.xml
index bf7ef56ff0..42457d3418 100644
--- a/app/src/main/res/values-nl-rNL/strings.xml
+++ b/app/src/main/res/values-nl-rNL/strings.xml
@@ -815,6 +815,7 @@
Installeer de Authenticator-app op elke volger telefoon die RFC 6238 TOTP tokens ondersteunt. Populaire gratis apps zijn:\n • Authy\n • Google Authenticator\n • LastPass Authenticator\n • FreeOTP Authenticator
Door de Authentificator te resetten, maak je alle Authentificatie-instellingen van reeds verbonden telefoons ongeldig! Je zult ze opnieuw moeten instellen!
Voorspellingen
+ Behandelingen
Richtingscoëfficiënt afwijking
Autorisatie mislukt
Absolute insuline
@@ -995,6 +996,7 @@
Tijdelijke streefdoelen
Koolhydraten en bolus
Weet je zeker dat je %1$d items wilt verwijderen
+ Geen records beschikbaar
Verberg loop
Toon loop
%1$d geselecteerd
@@ -1006,4 +1008,5 @@
Toon loop records
Verberg loop records
AndroidAPS widget
+ Configureer transparantie
diff --git a/app/src/main/res/values-ru-rRU/strings.xml b/app/src/main/res/values-ru-rRU/strings.xml
index 5b6ef2440f..3edbacc44f 100644
--- a/app/src/main/res/values-ru-rRU/strings.xml
+++ b/app/src/main/res/values-ru-rRU/strings.xml
@@ -246,6 +246,7 @@
Смарт-часы Wear
повторить отправку всех данных
Открыть настройки на Wear
+ Базальная скорость
значение базала ниже минимума. профиль не создан!
гликемия:
прошлый СК:
@@ -433,6 +434,8 @@
Активировать локальную передачу
Супер микро болюс OpenAPS
Динамический ISF
+ Коэффициент регулировки динамического диапазона чувствительности ISF %%
+ Коэффициент корректировки динамического диапазона чувствительности ISF. Установите более 100% для более агрессивных доз коррекции и менее 100% для менее агрессивной коррекции.
Включить непредвиденный прием пищи UAM
Включить супер микро болюс SMB
Для ускорения действия используйте супер микро болюсы SMB вместо временного базала
@@ -812,6 +815,7 @@
В каждом отслеживающем телефоне установите приложение Authenticator, поддерживающее маркеры TOTP RFC 6238. Популярные бесплатные приложения: \n Authy\n Google Authenticator\n LastPass Authenticator\n FreeOTP Authenticator
После сброса аутентификатора вы делаете все созданные идентификаторы недействительными. Вам нужно будет снова создать их!
Прогнозирование
+ Терапия
Линия отклонения
Ошибка авторизации
Абсолютный инсулин
@@ -881,6 +885,7 @@
Принимать события APS автономно
Принимать события APS введенные через NS или клиент NS автономно
Получать временную базальную скорость TBR и пролонгированный болюс EB
+ Принять TBR и EB введеные с другого устройства
Принимать инсулин
Принимать инсулин, введенный через NS или NSClient (не подается, только рассчитывается как активный IOB)
Принимать углеводы
@@ -903,6 +908,7 @@
Ошибки
Замедлить выгрузку
Состояние данных ГК
+ Удалить значения ГК
время, отработанное катетером помпы
время отработанное разовой помпой
Разовая помпа
@@ -934,7 +940,17 @@
инсулин
уровень глюкозы в крови (ГК)
устаревшие данные
+ установить напоминание
+ добавить новый профиль
+ клонировать текущий профиль
+ удалить текущий профиль
+ добавить новый в список
+ Выберите темную, светлую или системную тему
+ Цветовая схема приложения
+ Тёмная тема
+ Светлая тема
+ Использовать тему устройства
Неизвестная конфигурация врем цели: %1$s
Отменить врем цели?
@@ -944,6 +960,33 @@
Макс ГК вне диапазона!
ВремЦель:\nМин: %1$s\nМакс.: %2$s\nДлительность: %3$s
ВремЦель:\nЦель: %1$s\nДлительность: %2$s
+ ВремЦель:\Причина: %1$s\nЦель.: %2$s\nДлительность: %3$s
+ Мастер: %1$s\nИнсулин: %2$.2fЕд\nУгл: %3$dg
+ Мастер:\nИнсулин: %1$.2fЕд\nУгл: %2$dg
+ Показать запись на устройстве:
+ Выбранный мастер быстрого доступа больше недоступен, обновите плитку
+ Нет данных ГК для основы расчета!
+ Активный профиль не установлен!
+ Неизвестный COB! Отсутствуют данные ГК или приложения недавно перезапущено?
+ Нарушено ограничение по углеводам!
+ Кальк (IC: %2$.1f, ISF: %2$.1f) из:\"
+ Углеводов: %1$.2fгУ
+ Акт Инс COB: %1$.0fг %2$.2fед
+ ГК: %1$.2f
+ Базал IOB: %1$.2fед
+ Болюсный IOB: %1$.2fед
+ Суперболюсный: %1$.2fед
+ тренд 15\': %1$.2f
+ Процент: %1$.2fU x %2$d%% = %3$.2f
+ Нарушено ограничение по инсулину!\nНевозможно подать %1$.2fед
+ ВремЦ: %1$s
+ %1$s до %2$s
+ Нет доступных помп!
+ Неизвестная команда:
+ Процент
+ По умолчанию приложения
+ Показать недействительные / удаленные записи
+ Скрыть недействительные / удаленные записи
Выберите профиль для изменения
Обновить из Nightscout
Удалить выбранные элементы
@@ -952,10 +995,17 @@
Временные цели
Углеводы и болюс
Вы уверены, что хотите удалить %1$d элементов
+ Нет доступных записей
Скрыть цикл
Показать цикл
%1$d выбрано
+ Сортировать
+ Диалог отменен
Ниже целевых
В целевом диапазоне
Выше целевых
+ Показать записи цикла
+ Скрыть записи цикла
+ Виджет androidAPS
+ Настроить прозрачность
diff --git a/app/src/main/res/values-sk-rSK/strings.xml b/app/src/main/res/values-sk-rSK/strings.xml
index e8b3c62005..dc39c79db2 100644
--- a/app/src/main/res/values-sk-rSK/strings.xml
+++ b/app/src/main/res/values-sk-rSK/strings.xml
@@ -815,6 +815,7 @@
Na každom sledovacom telefóne nainštalujte Autentifikátor, ktorý podporuje tokeny TOTP RFC 6238. Najobľúbenejšie bezplatné aplikácie sú:\n • Authy\n • Google Authenticator\n • LastPass Authenticator\n • FreeOTP Authenticator
Resetovaním autentifikátora budú všetky už poskytnuté autentifikátory neplatné. Budete ich musieť znovu nastaviť!
Predikcie
+ Ošetrenia
Odchýlka sklonu
Autorizácia zlyhala
Celkový inzulín
@@ -995,6 +996,7 @@
Dočasné ciele
Sacharidy a bolusy
Naozaj chcete odstrániť %1$d položku(y)
+ Nie sú k dispozícii žiadne záznamy
Skryť uzavretý okruh
Zobraziť uzavretý okruh
Vybrané: %1$d
diff --git a/app/src/main/res/values-tr-rTR/strings.xml b/app/src/main/res/values-tr-rTR/strings.xml
index 89b49185c1..31784497f1 100644
--- a/app/src/main/res/values-tr-rTR/strings.xml
+++ b/app/src/main/res/values-tr-rTR/strings.xml
@@ -816,6 +816,7 @@ Aktif Karbonhidratın ne kadar hızlı sindirildiğine ve KŞ\'nin beklenenden d
Her takipçi telefonunda, RFC 6238 TOTP belirteçlerini destekleyen Kimlik Doğrulayıcı uygulamasını yükleyin. Popüler ücretsiz uygulamalar şunlardır:\n • Authy\n • Google Authenticator\n • LastPass Authenticator\n • FreeOTP Authenticator
Doğrulayıcıyı (Authenticator) sıfırlayarak, önceden sağlanmış tüm doğrulayıcıları geçersiz kılarsınız. Onları tekrar kurmanız gerekecek!
Tahminler
+ Tedaviler
Sapma eğimi
Yetkilendirme başarısız oldu
Mutlak insülin
@@ -996,6 +997,7 @@ Aktif Karbonhidratın ne kadar hızlı sindirildiğine ve KŞ\'nin beklenenden d
Geçici Hedefler
Karbonhidrat ve bolus
%1$d öğeyi kaldırmak istediğinizden emin misiniz
+ Kayıt mevcut değil
Döngüyü gizle
Döngüyü göster
%1$d seçildi
diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml
index 5bc6a9788f..cd84a0f5ee 100644
--- a/app/src/main/res/values-zh-rCN/strings.xml
+++ b/app/src/main/res/values-zh-rCN/strings.xml
@@ -815,6 +815,7 @@
在其他遥控手机上安装支持RFC 6238 TOTP令牌协议的应用程序。常用的免费应用有:\n • Authy\n • Google Authenticator\n • LastPass Authenticator\n • FreeOTP Authenticator
通过重置验证码核心密钥,可以使所有已设置的OTP随机验证码生成配置无效,您需要在遥控手机上重新设置!
预测
+ 治疗
斜度偏差
授权失败
胰岛素绝对值
@@ -995,6 +996,7 @@
临时目标
碳水与大剂量
你确定要删除 %1$d 吗?
+ 当前暂无记录
隐藏闭环
显示闭环
已选中 %1$d
@@ -1006,4 +1008,5 @@
显示闭环记录
隐藏闭环记录
AndroidAPS小部件
+ 配置透明度
diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml
index c64cb175a7..b4c15f6ed8 100644
--- a/app/src/main/res/values/dimens.xml
+++ b/app/src/main/res/values/dimens.xml
@@ -1,6 +1,5 @@
-
+ GlucoRx Aidex
+ Aidex
+ Receive BG values from GlucoRx Aidex CGMS.
+
diff --git a/app/src/main/res/values/themes.xml b/app/src/main/res/values/themes.xml
index 74f76fe8cf..00fc05980d 100644
--- a/app/src/main/res/values/themes.xml
+++ b/app/src/main/res/values/themes.xml
@@ -13,12 +13,10 @@
-
\ No newline at end of file
+
diff --git a/app/src/main/res/xml/pref_general.xml b/app/src/main/res/xml/pref_general.xml
index abede4e252..2b30903a26 100644
--- a/app/src/main/res/xml/pref_general.xml
+++ b/app/src/main/res/xml/pref_general.xml
@@ -101,14 +101,13 @@
android:key="@string/key_skin"
android:title="@string/skin" />
-
+ android:title="@string/app_color_scheme" />
diff --git a/app/src/main/res/xml/pref_openapssmb.xml b/app/src/main/res/xml/pref_openapssmb.xml
index 945161d9af..ebe3e0ec92 100644
--- a/app/src/main/res/xml/pref_openapssmb.xml
+++ b/app/src/main/res/xml/pref_openapssmb.xml
@@ -113,14 +113,12 @@
validate:minNumber="15"
validate:testType="numericRange" />
-
-
-
-
-
-
-
-
-
\ No newline at end of file
+
diff --git a/app/src/main/res/xml/pref_safety.xml b/app/src/main/res/xml/pref_safety.xml
index 6113be6c13..641ddf6aee 100644
--- a/app/src/main/res/xml/pref_safety.xml
+++ b/app/src/main/res/xml/pref_safety.xml
@@ -25,7 +25,6 @@
validate:floatminNumber="0.1"
validate:testType="floatNumericRange" />
-
-
\ No newline at end of file
+
diff --git a/app/src/test/java/info/nightscout/androidaps/queue/CommandQueueImplementationTest.kt b/app/src/test/java/info/nightscout/androidaps/queue/CommandQueueImplementationTest.kt
index c16f8a52bb..e8c554d30c 100644
--- a/app/src/test/java/info/nightscout/androidaps/queue/CommandQueueImplementationTest.kt
+++ b/app/src/test/java/info/nightscout/androidaps/queue/CommandQueueImplementationTest.kt
@@ -300,7 +300,6 @@ class CommandQueueImplementationTest : TestBaseWithProfile() {
Assert.assertFalse(commandQueue.isCustomCommandRunning(CustomCommand2::class.java))
Assert.assertFalse(commandQueue.isCustomCommandRunning(CustomCommand3::class.java))
-
Assert.assertEquals(1, commandQueue.size())
}
@@ -505,4 +504,4 @@ class CommandQueueImplementationTest : TestBaseWithProfile() {
override val statusDescription: String
get() = "CUSTOM COMMAND 3"
}
-}
\ No newline at end of file
+}
diff --git a/automation/src/main/java/info/nightscout/androidaps/plugins/general/automation/actions/ActionCarePortalEvent.kt b/automation/src/main/java/info/nightscout/androidaps/plugins/general/automation/actions/ActionCarePortalEvent.kt
index ba7385cc9b..d5f9e18caa 100644
--- a/automation/src/main/java/info/nightscout/androidaps/plugins/general/automation/actions/ActionCarePortalEvent.kt
+++ b/automation/src/main/java/info/nightscout/androidaps/plugins/general/automation/actions/ActionCarePortalEvent.kt
@@ -38,7 +38,6 @@ class ActionCarePortalEvent(injector: HasAndroidInjector) : Action(injector) {
@Inject lateinit var glucoseStatusProvider: GlucoseStatusProvider
@Inject lateinit var uel: UserEntryLogger
-
private val disposable = CompositeDisposable()
var note = InputString()
@@ -118,4 +117,4 @@ class ActionCarePortalEvent(injector: HasAndroidInjector) : Action(injector) {
}
override fun isValid(): Boolean = true
-}
\ No newline at end of file
+}
diff --git a/automation/src/main/java/info/nightscout/androidaps/plugins/general/automation/elements/InputDateTime.kt b/automation/src/main/java/info/nightscout/androidaps/plugins/general/automation/elements/InputDateTime.kt
index 57d6d63620..d63cf0452c 100644
--- a/automation/src/main/java/info/nightscout/androidaps/plugins/general/automation/elements/InputDateTime.kt
+++ b/automation/src/main/java/info/nightscout/androidaps/plugins/general/automation/elements/InputDateTime.kt
@@ -1,12 +1,17 @@
package info.nightscout.androidaps.plugins.general.automation.elements
-import android.app.DatePickerDialog
-import android.app.TimePickerDialog
+import android.content.Context
import android.graphics.Typeface
import android.text.format.DateFormat
+import android.view.ContextThemeWrapper
import android.view.ViewGroup
import android.widget.LinearLayout
import android.widget.TextView
+import androidx.appcompat.app.AppCompatActivity
+import androidx.fragment.app.FragmentManager
+import com.google.android.material.datepicker.MaterialDatePicker
+import com.google.android.material.timepicker.MaterialTimePicker
+import com.google.android.material.timepicker.TimeFormat
import info.nightscout.androidaps.automation.R
import info.nightscout.androidaps.utils.DateUtil
import info.nightscout.androidaps.utils.resources.ResourceHelper
@@ -32,24 +37,18 @@ class InputDateTime(private val rh: ResourceHelper, private val dateUtil: DateUt
text = dateUtil.dateString(value)
setPadding(px, px, px, px)
setOnClickListener {
- root.context?.let {
- val cal = Calendar.getInstance()
- cal.timeInMillis = value
- DatePickerDialog(
- it, R.style.MaterialPickerTheme,
- { _, year, monthOfYear, dayOfMonth ->
- value = Calendar.getInstance().apply {
- timeInMillis = value
- set(Calendar.YEAR, year)
- set(Calendar.MONTH, monthOfYear)
- set(Calendar.DAY_OF_MONTH, dayOfMonth)
- }.timeInMillis
- text = dateUtil.dateString(value)
- },
- cal.get(Calendar.YEAR),
- cal.get(Calendar.MONTH),
- cal.get(Calendar.DAY_OF_MONTH)
- ).show()
+ getFragmentManager(root.context)?.let { fm ->
+ MaterialDatePicker.Builder.datePicker()
+ .setTheme(R.style.DatePicker)
+ .setSelection(dateUtil.timeStampToUtcDateMilis(value))
+ .build()
+ .apply {
+ addOnPositiveButtonClickListener { selection ->
+ value = dateUtil.mergeUtcDateToTimestamp(value, selection)
+ text = dateUtil.dateString(value)
+ }
+ }
+ .show(fm, "input_date_picker")
}
}
})
@@ -58,28 +57,32 @@ class InputDateTime(private val rh: ResourceHelper, private val dateUtil: DateUt
text = dateUtil.timeString(value)
setPadding(px, px, px, px)
setOnClickListener {
- root.context?.let {
- val cal = Calendar.getInstance()
- cal.timeInMillis = value
- TimePickerDialog(
- it, R.style.MaterialPickerTheme,
- { _, hour, minute ->
- value = Calendar.getInstance().apply {
- timeInMillis = value
- set(Calendar.HOUR_OF_DAY, hour)
- set(Calendar.MINUTE, minute)
- set(Calendar.SECOND, 0) // randomize seconds to prevent creating record of the same time, if user choose time manually
- }.timeInMillis
- text = dateUtil.timeString(value)
- },
- cal.get(Calendar.HOUR_OF_DAY),
- cal.get(Calendar.MINUTE),
- DateFormat.is24HourFormat(it)
- ).show()
+ getFragmentManager(root.context)?.let { fm ->
+ val cal = Calendar.getInstance().apply { timeInMillis = value }
+ val clockFormat = if (DateFormat.is24HourFormat(context)) TimeFormat.CLOCK_24H else TimeFormat.CLOCK_12H
+ val timePicker = MaterialTimePicker.Builder()
+ .setTheme(R.style.TimePicker)
+ .setTimeFormat(clockFormat)
+ .setHour(cal.get(Calendar.HOUR_OF_DAY))
+ .setMinute(cal.get(Calendar.MINUTE))
+ .build()
+ timePicker.addOnPositiveButtonClickListener {
+ value = dateUtil.mergeHourMinuteToTimestamp(value, timePicker.hour, timePicker.minute)
+ text = dateUtil.timeString(value)
+ }
+ timePicker.show(fm, "input_time_picker")
}
}
}
)
})
}
-}
\ No newline at end of file
+
+ private fun getFragmentManager(context: Context?): FragmentManager? {
+ return when (context) {
+ is AppCompatActivity -> context.supportFragmentManager
+ is ContextThemeWrapper -> getFragmentManager(context.baseContext)
+ else -> null
+ }
+ }
+}
diff --git a/automation/src/main/java/info/nightscout/androidaps/plugins/general/automation/elements/InputTime.kt b/automation/src/main/java/info/nightscout/androidaps/plugins/general/automation/elements/InputTime.kt
index 16a249b790..5ea6c66ff0 100644
--- a/automation/src/main/java/info/nightscout/androidaps/plugins/general/automation/elements/InputTime.kt
+++ b/automation/src/main/java/info/nightscout/androidaps/plugins/general/automation/elements/InputTime.kt
@@ -1,12 +1,16 @@
package info.nightscout.androidaps.plugins.general.automation.elements
-import android.app.TimePickerDialog
+import android.content.Context
import android.graphics.Typeface
import android.text.format.DateFormat
-import android.view.Gravity
+import android.view.ContextThemeWrapper
import android.view.ViewGroup
import android.widget.LinearLayout
import android.widget.TextView
+import androidx.appcompat.app.AppCompatActivity
+import androidx.fragment.app.FragmentManager
+import com.google.android.material.timepicker.MaterialTimePicker
+import com.google.android.material.timepicker.TimeFormat
import info.nightscout.androidaps.automation.R
import info.nightscout.androidaps.interfaces.Profile
import info.nightscout.androidaps.utils.DateUtil
@@ -34,19 +38,19 @@ class InputTime(private val rh: ResourceHelper, private val dateUtil: DateUtil)
val px = rh.dpToPx(10)
setPadding(px, px, px, px)
setOnClickListener {
- root.context?.let {
- val cal = Calendar.getInstance()
- cal.timeInMillis = toMills(value)
- TimePickerDialog(
- it, R.style.MaterialPickerTheme,
- { _, hour, minute ->
- value = 60 * hour + minute
- text = dateUtil.timeString(toMills(value))
- },
- cal.get(Calendar.HOUR_OF_DAY),
- cal.get(Calendar.MINUTE),
- DateFormat.is24HourFormat(it)
- ).show()
+ getFragmentManager(root.context)?.let { fm ->
+ val cal = Calendar.getInstance().apply { timeInMillis = toMills(value) }
+ val clockFormat = if (DateFormat.is24HourFormat(context)) TimeFormat.CLOCK_24H else TimeFormat.CLOCK_12H
+ val timePicker = MaterialTimePicker.Builder()
+ .setTimeFormat(clockFormat)
+ .setHour(cal.get(Calendar.HOUR_OF_DAY))
+ .setMinute(cal.get(Calendar.MINUTE))
+ .build()
+ timePicker.addOnPositiveButtonClickListener {
+ value = 60 * timePicker.hour + timePicker.minute
+ text = dateUtil.timeString(toMills(value))
+ }
+ timePicker.show(fm, "input_time_picker")
}
}
})
@@ -56,4 +60,12 @@ class InputTime(private val rh: ResourceHelper, private val dateUtil: DateUtil)
private fun toMills(minutesSinceMidnight: Int): Long = MidnightTime.calcPlusMinutes(minutesSinceMidnight)
private fun getMinSinceMidnight(time: Long): Int = Profile.secondsFromMidnight(time) / 60
-}
\ No newline at end of file
+
+ private fun getFragmentManager(context: Context?): FragmentManager? {
+ return when (context) {
+ is AppCompatActivity -> context.supportFragmentManager
+ is ContextThemeWrapper -> getFragmentManager(context.baseContext)
+ else -> null
+ }
+ }
+}
diff --git a/automation/src/main/java/info/nightscout/androidaps/plugins/general/automation/elements/InputTimeRange.kt b/automation/src/main/java/info/nightscout/androidaps/plugins/general/automation/elements/InputTimeRange.kt
index 8c8db5b738..a417c1891b 100644
--- a/automation/src/main/java/info/nightscout/androidaps/plugins/general/automation/elements/InputTimeRange.kt
+++ b/automation/src/main/java/info/nightscout/androidaps/plugins/general/automation/elements/InputTimeRange.kt
@@ -1,12 +1,17 @@
package info.nightscout.androidaps.plugins.general.automation.elements
-import android.app.TimePickerDialog
+import android.content.Context
import android.graphics.Typeface
import android.text.format.DateFormat
+import android.view.ContextThemeWrapper
import android.view.Gravity
import android.view.ViewGroup
import android.widget.LinearLayout
import android.widget.TextView
+import androidx.appcompat.app.AppCompatActivity
+import androidx.fragment.app.FragmentManager
+import com.google.android.material.timepicker.MaterialTimePicker
+import com.google.android.material.timepicker.TimeFormat
import info.nightscout.androidaps.automation.R
import info.nightscout.androidaps.interfaces.Profile
import info.nightscout.androidaps.utils.DateUtil
@@ -38,19 +43,19 @@ class InputTimeRange(private val rh: ResourceHelper, private val dateUtil: DateU
text = dateUtil.timeString(toMills(start))
setPadding(px, px, px, px)
setOnClickListener {
- root.context?.let {
- val cal = Calendar.getInstance()
- cal.timeInMillis = toMills(start)
- TimePickerDialog(
- it, R.style.MaterialPickerTheme,
- { _, hour, minute ->
- start = 60 * hour + minute
- text = dateUtil.timeString(toMills(start))
- },
- cal.get(Calendar.HOUR_OF_DAY),
- cal.get(Calendar.MINUTE),
- DateFormat.is24HourFormat(it)
- ).show()
+ getFragmentManager(root.context)?.let { fm ->
+ val cal = Calendar.getInstance().apply { timeInMillis = toMills(start) }
+ val clockFormat = if (DateFormat.is24HourFormat(context)) TimeFormat.CLOCK_24H else TimeFormat.CLOCK_12H
+ val timePicker = MaterialTimePicker.Builder()
+ .setTimeFormat(clockFormat)
+ .setHour(cal.get(Calendar.HOUR_OF_DAY))
+ .setMinute(cal.get(Calendar.MINUTE))
+ .build()
+ timePicker.addOnPositiveButtonClickListener {
+ start = 60 * timePicker.hour + timePicker.minute
+ text = dateUtil.timeString(toMills(start))
+ }
+ timePicker.show(fm, "input_time_range_start_picker")
}
}
})
@@ -59,19 +64,19 @@ class InputTimeRange(private val rh: ResourceHelper, private val dateUtil: DateU
text = rh.gs(R.string.and) + " " + dateUtil.timeString(toMills(end))
setPadding(px, px, px, px)
setOnClickListener {
- root.context?.let {
- val cal = Calendar.getInstance()
- cal.timeInMillis = toMills(end)
- TimePickerDialog(
- it, R.style.MaterialPickerTheme,
- { _, hour, minute ->
- end = 60 * hour + minute
- text = dateUtil.timeString(toMills(end))
- },
- cal.get(Calendar.HOUR_OF_DAY),
- cal.get(Calendar.MINUTE),
- DateFormat.is24HourFormat(it)
- ).show()
+ getFragmentManager(root.context)?.let { fm ->
+ val cal = Calendar.getInstance().apply { timeInMillis = toMills(end) }
+ val clockFormat = if (DateFormat.is24HourFormat(context)) TimeFormat.CLOCK_24H else TimeFormat.CLOCK_12H
+ val timePicker = MaterialTimePicker.Builder()
+ .setTimeFormat(clockFormat)
+ .setHour(cal.get(Calendar.HOUR_OF_DAY))
+ .setMinute(cal.get(Calendar.MINUTE))
+ .build()
+ timePicker.addOnPositiveButtonClickListener {
+ end = 60 * timePicker.hour + timePicker.minute
+ text = dateUtil.timeString(toMills(end))
+ }
+ timePicker.show(fm, "input_time_range_end_picker")
}
}
})
@@ -81,4 +86,12 @@ class InputTimeRange(private val rh: ResourceHelper, private val dateUtil: DateU
private fun toMills(minutesSinceMidnight: Int): Long = MidnightTime.calcPlusMinutes(minutesSinceMidnight)
private fun getMinSinceMidnight(time: Long): Int = Profile.secondsFromMidnight(time) / 60
-}
\ No newline at end of file
+
+ private fun getFragmentManager(context: Context?): FragmentManager? {
+ return when (context) {
+ is AppCompatActivity -> context.supportFragmentManager
+ is ContextThemeWrapper -> getFragmentManager(context.baseContext)
+ else -> null
+ }
+ }
+}
diff --git a/automation/src/main/res/layout/automation_action_item.xml b/automation/src/main/res/layout/automation_action_item.xml
index a63d9437a0..187abda4a9 100644
--- a/automation/src/main/res/layout/automation_action_item.xml
+++ b/automation/src/main/res/layout/automation_action_item.xml
@@ -2,13 +2,14 @@
+ android:orientation="horizontal"
+ tools:ignore="UseCompoundDrawables">
-
\ No newline at end of file
+
diff --git a/automation/src/main/res/layout/automation_dialog_action.xml b/automation/src/main/res/layout/automation_dialog_action.xml
index 4033009e15..ba6a516e70 100644
--- a/automation/src/main/res/layout/automation_dialog_action.xml
+++ b/automation/src/main/res/layout/automation_dialog_action.xml
@@ -6,7 +6,7 @@
android:layout_width="match_parent"
android:layout_height="match_parent"
android:focusableInTouchMode="true"
- tools:context=".plugins.general.automation.dialogs.EditActionDialog">
+ tools:context="info.nightscout.androidaps.plugins.general.automation.dialogs.EditActionDialog">
@@ -56,4 +56,4 @@
-
\ No newline at end of file
+
diff --git a/automation/src/main/res/layout/automation_dialog_choose_action.xml b/automation/src/main/res/layout/automation_dialog_choose_action.xml
index 8bbb4f5010..ac3997cf97 100644
--- a/automation/src/main/res/layout/automation_dialog_choose_action.xml
+++ b/automation/src/main/res/layout/automation_dialog_choose_action.xml
@@ -2,12 +2,10 @@
+ tools:context="info.nightscout.androidaps.plugins.general.automation.dialogs.EditEventDialog">
@@ -56,4 +54,4 @@
-
\ No newline at end of file
+
diff --git a/automation/src/main/res/layout/automation_dialog_choose_operation.xml b/automation/src/main/res/layout/automation_dialog_choose_operation.xml
index ad78796e59..f19c77f2fd 100644
--- a/automation/src/main/res/layout/automation_dialog_choose_operation.xml
+++ b/automation/src/main/res/layout/automation_dialog_choose_operation.xml
@@ -30,8 +30,8 @@
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:layout_gravity="center"
- android:layout_marginLeft="10dp"
- android:layout_marginRight="10dp"
+ android:layout_marginStart="10dp"
+ android:layout_marginEnd="10dp"
android:text="@string/please_choose_a_operation_type"
android:textAlignment="center"
android:textAppearance="?android:attr/textAppearanceLarge" />
diff --git a/automation/src/main/res/layout/automation_dialog_choose_trigger.xml b/automation/src/main/res/layout/automation_dialog_choose_trigger.xml
index 99eadab1bd..c4c139c607 100644
--- a/automation/src/main/res/layout/automation_dialog_choose_trigger.xml
+++ b/automation/src/main/res/layout/automation_dialog_choose_trigger.xml
@@ -6,7 +6,7 @@
android:layout_width="match_parent"
android:layout_height="match_parent"
android:focusableInTouchMode="true"
- tools:context=".plugins.general.automation.dialogs.EditEventDialog">
+ tools:context="info.nightscout.androidaps.plugins.general.automation.dialogs.EditEventDialog">
@@ -48,4 +48,4 @@
-
\ No newline at end of file
+
diff --git a/automation/src/main/res/layout/automation_dialog_edit_trigger.xml b/automation/src/main/res/layout/automation_dialog_edit_trigger.xml
index dc10ff98b9..97c8d7eebe 100644
--- a/automation/src/main/res/layout/automation_dialog_edit_trigger.xml
+++ b/automation/src/main/res/layout/automation_dialog_edit_trigger.xml
@@ -30,8 +30,8 @@
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:layout_gravity="center"
- android:layout_marginLeft="10dp"
- android:layout_marginRight="10dp"
+ android:layout_marginStart="10dp"
+ android:layout_marginEnd="10dp"
android:text="@string/triggers"
android:textAlignment="center"
android:textAppearance="?android:attr/textAppearanceLarge" />
diff --git a/automation/src/main/res/layout/automation_dialog_event.xml b/automation/src/main/res/layout/automation_dialog_event.xml
index ebbed9ad65..a94169dd49 100644
--- a/automation/src/main/res/layout/automation_dialog_event.xml
+++ b/automation/src/main/res/layout/automation_dialog_event.xml
@@ -26,11 +26,11 @@
app:srcCompat="@drawable/ic_action_orange_48dp" />
@@ -93,6 +94,7 @@
android:layout_width="24dp"
android:layout_height="24dp"
android:layout_centerVertical="true"
+ android:importantForAccessibility="no"
app:srcCompat="@drawable/ic_trigger_green_48dp" />
+ android:text="@string/edit_short"
+ tools:ignore="RelativeOverlap" />
@@ -156,6 +159,7 @@
android:layout_width="24dp"
android:layout_height="24dp"
android:layout_centerVertical="true"
+ android:importantForAccessibility="no"
app:srcCompat="@drawable/ic_action_orange_48dp" />
+ android:text="@string/add_short"
+ tools:ignore="RelativeOverlap" />
@@ -195,4 +200,4 @@
-
\ No newline at end of file
+
diff --git a/automation/src/main/res/values-ru-rRU/strings.xml b/automation/src/main/res/values-ru-rRU/strings.xml
index a1d0b8c967..2caaa73c95 100644
--- a/automation/src/main/res/values-ru-rRU/strings.xml
+++ b/automation/src/main/res/values-ru-rRU/strings.xml
@@ -113,4 +113,11 @@
Автоматизированное событие
Повторный заказ
Действия пользователя
+ Удалить автоматизацию
+ Сортировать автоматизацию
+ Удалить выбранные элементы
+ %1$d выбрано
+ Вы уверены, что хотите удалить %1$d элемент
+ Сортировать
+ Автоматизация системы
diff --git a/automation/src/test/java/info/nightscout/androidaps/plugins/general/automation/TestBase.kt b/automation/src/test/java/info/nightscout/androidaps/plugins/general/automation/TestBase.kt
index b65690a315..5e27ece0c8 100644
--- a/automation/src/test/java/info/nightscout/androidaps/plugins/general/automation/TestBase.kt
+++ b/automation/src/test/java/info/nightscout/androidaps/plugins/general/automation/TestBase.kt
@@ -41,7 +41,6 @@ open class TestBase {
return uninitialized()
}
-
fun eqObject(expected: T): T {
Mockito.eq(expected)
return uninitialized()
@@ -49,4 +48,4 @@ open class TestBase {
@Suppress("Unchecked_Cast")
fun uninitialized(): T = null as T
-}
\ No newline at end of file
+}
diff --git a/build.gradle b/build.gradle
index 4258956182..a6f867adc6 100644
--- a/build.gradle
+++ b/build.gradle
@@ -2,7 +2,7 @@
buildscript {
ext {
- kotlin_version = '1.6.20'
+ kotlin_version = '1.6.21'
core_version = '1.7.0'
rxjava_version = '3.1.4'
rxandroid_version = '3.0.0'
@@ -42,7 +42,7 @@ buildscript {
maven { url "https://plugins.gradle.org/m2/" } // jacoco 0.2
}
dependencies {
- classpath 'com.android.tools.build:gradle:7.1.2'
+ classpath 'com.android.tools.build:gradle:7.1.3'
classpath 'com.google.gms:google-services:4.3.10'
classpath 'com.google.firebase:firebase-crashlytics-gradle:2.8.1'
@@ -57,10 +57,10 @@ buildscript {
}
plugins {
- id "io.gitlab.arturbosch.detekt" version "1.19.0"
+ id "io.gitlab.arturbosch.detekt" version "1.20.0"
id "org.jlleitschuh.gradle.ktlint" version "10.2.1"
id 'org.barfuin.gradle.jacocolog' version '2.0.0'
- id 'org.jetbrains.kotlin.android' version '1.6.20' apply false
+ id 'org.jetbrains.kotlin.android' version '1.6.21' apply false
}
allprojects {
@@ -73,13 +73,17 @@ allprojects {
tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).all {
kotlinOptions {
freeCompilerArgs = [
- // Ignore warning for @ExperimentalCoroutinesApi
- "-Xuse-experimental=kotlinx.coroutines.ExperimentalCoroutinesApi",
+ '-opt-in=kotlin.RequiresOptIn',
'-Xjvm-default=all' //Support @JvmDefault
]
jvmTarget = "11"
}
}
+ gradle.projectsEvaluated {
+ tasks.withType(JavaCompile) {
+ options.compilerArgs << "-Xlint:unchecked" << "-Xlint:deprecation"
+ }
+ }
}
apply from: 'gradle/jacoco_project.gradle'
diff --git a/combo/src/main/java/info/nightscout/androidaps/plugins/pump/combo/ComboFragment.java b/combo/src/main/java/info/nightscout/androidaps/plugins/pump/combo/ComboFragment.java
deleted file mode 100644
index b0fc0d809c..0000000000
--- a/combo/src/main/java/info/nightscout/androidaps/plugins/pump/combo/ComboFragment.java
+++ /dev/null
@@ -1,299 +0,0 @@
-package info.nightscout.androidaps.plugins.pump.combo;
-
-
-import android.graphics.Color;
-import android.graphics.Typeface;
-import android.os.Bundle;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.ViewGroup;
-import android.widget.Button;
-import android.widget.LinearLayout;
-import android.widget.TextView;
-
-import androidx.annotation.NonNull;
-import androidx.fragment.app.FragmentActivity;
-
-import javax.inject.Inject;
-
-import dagger.android.support.DaggerFragment;
-import info.nightscout.androidaps.combo.R;
-import info.nightscout.androidaps.interfaces.CommandQueue;
-import info.nightscout.androidaps.plugins.bus.RxBus;
-import info.nightscout.androidaps.plugins.pump.combo.data.ComboErrorUtil;
-import info.nightscout.androidaps.plugins.pump.combo.events.EventComboPumpUpdateGUI;
-import info.nightscout.androidaps.plugins.pump.combo.ruffyscripter.PumpState;
-import info.nightscout.androidaps.plugins.pump.combo.ruffyscripter.history.Bolus;
-import info.nightscout.androidaps.queue.Callback;
-import info.nightscout.androidaps.queue.events.EventQueueChanged;
-import info.nightscout.androidaps.utils.DateUtil;
-import info.nightscout.androidaps.utils.FabricPrivacy;
-import info.nightscout.androidaps.utils.resources.ResourceHelper;
-import info.nightscout.androidaps.utils.rx.AapsSchedulers;
-import io.reactivex.rxjava3.disposables.CompositeDisposable;
-
-public class ComboFragment extends DaggerFragment {
- @Inject ComboPlugin comboPlugin;
- @Inject CommandQueue commandQueue;
- @Inject ResourceHelper rh;
- @Inject RxBus rxBus;
- @Inject DateUtil dateUtil;
- @Inject FabricPrivacy fabricPrivacy;
- @Inject AapsSchedulers aapsSchedulers;
- @Inject ComboErrorUtil errorUtil;
-
- private final CompositeDisposable disposable = new CompositeDisposable();
-
- private TextView stateView;
- private TextView activityView;
- private TextView batteryView;
- private TextView reservoirView;
- private TextView lastConnectionView;
- private TextView lastBolusView;
- private TextView baseBasalRate;
- private TextView tempBasalText;
- private Button refreshButton;
- private TextView bolusCount;
- private TextView tbrCount;
-
- private View errorCountDelimiter;
- private LinearLayout errorCountLayout;
- private TextView errorCountLabel;
- private TextView errorCountDots;
- private TextView errorCountValue;
-
- @Override
- public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container,
- Bundle savedInstanceState) {
- View view = inflater.inflate(R.layout.combopump_fragment, container, false);
-
- stateView = view.findViewById(R.id.combo_state);
- activityView = view.findViewById(R.id.combo_activity);
- batteryView = view.findViewById(R.id.combo_pumpstate_battery);
- reservoirView = view.findViewById(R.id.combo_insulinstate);
- lastBolusView = view.findViewById(R.id.combo_last_bolus);
- lastConnectionView = view.findViewById(R.id.combo_lastconnection);
- baseBasalRate = view.findViewById(R.id.combo_base_basal_rate);
- tempBasalText = view.findViewById(R.id.combo_temp_basal);
- bolusCount = view.findViewById(R.id.combo_bolus_count);
- tbrCount = view.findViewById(R.id.combo_tbr_count);
-
- errorCountDelimiter = view.findViewById(R.id.combo_connection_error_delimiter);
- errorCountLayout = view.findViewById(R.id.combo_connection_error_layout);
- errorCountLabel = view.findViewById(R.id.combo_connection_error_label);
- errorCountDots = view.findViewById(R.id.combo_connection_error_dots);
- errorCountValue = view.findViewById(R.id.combo_connection_error_value);
-
- refreshButton = view.findViewById(R.id.combo_refresh_button);
- refreshButton.setOnClickListener(v -> {
- refreshButton.setEnabled(false);
- commandQueue.readStatus(rh.gs(R.string.user_request), new Callback() {
- @Override
- public void run() {
- runOnUiThread(() -> refreshButton.setEnabled(true));
- }
- });
- });
-
- return view;
- }
-
- @Override
- public synchronized void onResume() {
- super.onResume();
- disposable.add(rxBus
- .toObservable(EventComboPumpUpdateGUI.class)
- .observeOn(aapsSchedulers.getMain())
- .subscribe(event -> updateGui(), fabricPrivacy::logException)
- );
- disposable.add(rxBus
- .toObservable(EventQueueChanged.class)
- .observeOn(aapsSchedulers.getMain())
- .subscribe(event -> updateGui(), fabricPrivacy::logException)
- );
- updateGui();
- }
-
- @Override
- public synchronized void onPause() {
- super.onPause();
- disposable.clear();
- }
-
- private void runOnUiThread(Runnable action) {
- FragmentActivity activity = getActivity();
- if (activity != null) {
- activity.runOnUiThread(action);
- }
- }
-
- public void updateGui() {
-
- // state
- stateView.setText(comboPlugin.getStateSummary());
- PumpState ps = comboPlugin.getPump().state;
- if (ps.insulinState == PumpState.EMPTY || ps.batteryState == PumpState.EMPTY
- || ps.activeAlert != null && ps.activeAlert.errorCode != null) {
- stateView.setTextColor(rh.gac(getContext(), R.attr.warningColor));
- stateView.setTypeface(null, Typeface.BOLD);
- } else if (comboPlugin.getPump().state.suspended
- || ps.activeAlert != null && ps.activeAlert.warningCode != null) {
- stateView.setTextColor(rh.gac(getContext(), R.attr.omniYellowColor));
- stateView.setTypeface(null, Typeface.BOLD);
- } else {
- stateView.setTextColor(rh.gac(getContext(), R.attr.defaultTextColor));
- stateView.setTypeface(null, Typeface.NORMAL);
- }
-
- // activity
- String activity = comboPlugin.getPump().activity;
- if (activity != null) {
- activityView.setTextColor(rh.gac(getContext(), R.attr.defaultTextColor));
- activityView.setTextSize(14);
- activityView.setText(activity);
- } else if (commandQueue.size() > 0) {
- activityView.setTextColor(rh.gac(getContext(), R.attr.defaultTextColor));
- activityView.setTextSize(14);
- activityView.setText("");
- } else if (comboPlugin.isInitialized()) {
- activityView.setTextColor(rh.gac(getContext(), R.attr.defaultTextColor));
- activityView.setTextSize(20);
- activityView.setText("{fa-bed}");
- } else {
- activityView.setTextColor(rh.gac(getContext(), R.attr.warningColor));
- activityView.setTextSize(14);
- activityView.setText(rh.gs(R.string.pump_unreachable));
- }
-
- if (comboPlugin.isInitialized()) {
- // battery
- batteryView.setTextSize(20);
- if (ps.batteryState == PumpState.EMPTY) {
- batteryView.setText("{fa-battery-empty}");
- batteryView.setTextColor(rh.gac(getContext(), R.attr.warningColor));
- } else if (ps.batteryState == PumpState.LOW) {
- batteryView.setText("{fa-battery-quarter}");
- batteryView.setTextColor(rh.gac(getContext(), R.attr.omniYellowColor));
- } else {
- batteryView.setText("{fa-battery-full}");
- batteryView.setTextColor(Color.WHITE);
- }
-
- // reservoir
- int reservoirLevel = comboPlugin.getPump().reservoirLevel;
- if (reservoirLevel != -1) {
- reservoirView.setText(reservoirLevel + " " + rh.gs(R.string.insulin_unit_shortname));
- } else if (ps.insulinState == PumpState.LOW) {
- reservoirView.setText(rh.gs(R.string.combo_reservoir_low));
- } else if (ps.insulinState == PumpState.EMPTY) {
- reservoirView.setText(rh.gs(R.string.combo_reservoir_empty));
- } else {
- reservoirView.setText(rh.gs(R.string.combo_reservoir_normal));
- }
-
- if (ps.insulinState == PumpState.UNKNOWN) {
- reservoirView.setTextColor(rh.gac(getContext(), R.attr.defaultTextColor));
- reservoirView.setTypeface(null, Typeface.NORMAL);
- } else if (ps.insulinState == PumpState.LOW) {
- reservoirView.setTextColor(rh.gac(getContext(), R.attr.omniYellowColor));
- reservoirView.setTypeface(null, Typeface.BOLD);
- } else if (ps.insulinState == PumpState.EMPTY) {
- reservoirView.setTextColor(rh.gac(getContext(), R.attr.warningColor));
- reservoirView.setTypeface(null, Typeface.BOLD);
- } else {
- reservoirView.setTextColor(rh.gac(getContext(), R.attr.defaultTextColor));
- reservoirView.setTypeface(null, Typeface.NORMAL);
- }
-
- // last connection
- String minAgo = dateUtil.minAgo(rh, comboPlugin.getPump().lastSuccessfulCmdTime);
- long min = (System.currentTimeMillis() - comboPlugin.getPump().lastSuccessfulCmdTime) / 1000 / 60;
- if (comboPlugin.getPump().lastSuccessfulCmdTime + 60 * 1000 > System.currentTimeMillis()) {
- lastConnectionView.setText(R.string.combo_pump_connected_now);
- lastConnectionView.setTextColor(rh.gac(getContext(), R.attr.defaultTextColor));
- } else if (comboPlugin.getPump().lastSuccessfulCmdTime + 30 * 60 * 1000 < System.currentTimeMillis()) {
- lastConnectionView.setText(rh.gs(R.string.combo_no_pump_connection, min));
- lastConnectionView.setTextColor(rh.gac(getContext(), R.attr.warningColor));
- } else {
- lastConnectionView.setText(minAgo);
- lastConnectionView.setTextColor(rh.gac(getContext(), R.attr.defaultTextColor));
- }
-
- // last bolus
- Bolus bolus = comboPlugin.getPump().lastBolus;
- if (bolus != null) {
- long agoMsc = System.currentTimeMillis() - bolus.timestamp;
- double bolusMinAgo = agoMsc / 60d / 1000d;
- String unit = rh.gs(R.string.insulin_unit_shortname);
- String ago;
- if ((agoMsc < 60 * 1000)) {
- ago = rh.gs(R.string.combo_pump_connected_now);
- } else if (bolusMinAgo < 60) {
- ago = dateUtil.minAgo(rh, bolus.timestamp);
- } else {
- ago = dateUtil.hourAgo(bolus.timestamp, rh);
- }
- lastBolusView.setText(rh.gs(R.string.combo_last_bolus, bolus.amount, unit, ago));
- } else {
- lastBolusView.setText("");
- }
-
- // base basal rate
- baseBasalRate.setText(rh.gs(R.string.pump_basebasalrate, comboPlugin.getBaseBasalRate()));
-
- // TBR
- String tbrStr = "";
- if (ps.tbrPercent != -1 && ps.tbrPercent != 100) {
- long minSinceRead = (System.currentTimeMillis() - comboPlugin.getPump().state.timestamp) / 1000 / 60;
- long remaining = ps.tbrRemainingDuration - minSinceRead;
- if (remaining >= 0) {
- tbrStr = rh.gs(R.string.combo_tbr_remaining, ps.tbrPercent, remaining);
- }
- }
- tempBasalText.setText(tbrStr);
-
- // stats
- bolusCount.setText(String.valueOf(comboPlugin.getBolusesDelivered()));
- tbrCount.setText(String.valueOf(comboPlugin.getTbrsSet()));
-
- updateErrorDisplay(false);
- } else {
- updateErrorDisplay(true);
- }
- }
-
- private void updateErrorDisplay(boolean forceHide) {
- int errorCount = -1;
-
- if (!forceHide) {
- ComboErrorUtil.DisplayType displayType = errorUtil.getDisplayType();
-
- if (displayType== ComboErrorUtil.DisplayType.ON_ERROR || displayType== ComboErrorUtil.DisplayType.ALWAYS) {
- int errorCountInternal = errorUtil.getErrorCount();
-
- if (errorCountInternal>0) {
- errorCount = errorCountInternal;
- } else if (displayType== ComboErrorUtil.DisplayType.ALWAYS) {
- errorCount = 0;
- }
- }
- }
-
- if (errorCount >=0) {
- errorCountDelimiter.setVisibility(View.VISIBLE);
- errorCountLayout.setVisibility(View.VISIBLE);
- errorCountLabel.setVisibility(View.VISIBLE);
- errorCountDots.setVisibility(View.VISIBLE);
- errorCountValue.setVisibility(View.VISIBLE);
- errorCountValue.setText(errorCount==0 ?
- "-" :
- ""+errorCount);
- } else {
- errorCountDelimiter.setVisibility(View.GONE);
- errorCountLayout.setVisibility(View.GONE);
- errorCountLabel.setVisibility(View.GONE);
- errorCountDots.setVisibility(View.GONE);
- errorCountValue.setVisibility(View.GONE);
- }
- }
-}
diff --git a/combo/src/main/java/info/nightscout/androidaps/plugins/pump/combo/ComboFragment.kt b/combo/src/main/java/info/nightscout/androidaps/plugins/pump/combo/ComboFragment.kt
new file mode 100644
index 0000000000..91b6a34aa0
--- /dev/null
+++ b/combo/src/main/java/info/nightscout/androidaps/plugins/pump/combo/ComboFragment.kt
@@ -0,0 +1,254 @@
+package info.nightscout.androidaps.plugins.pump.combo
+
+import android.annotation.SuppressLint
+import android.graphics.Color
+import android.graphics.Typeface
+import android.os.Bundle
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import dagger.android.support.DaggerFragment
+import info.nightscout.androidaps.combo.R
+import info.nightscout.androidaps.combo.databinding.CombopumpFragmentBinding
+import info.nightscout.androidaps.extensions.runOnUiThread
+import info.nightscout.androidaps.interfaces.CommandQueue
+import info.nightscout.androidaps.plugins.bus.RxBus
+import info.nightscout.androidaps.plugins.pump.combo.data.ComboErrorUtil
+import info.nightscout.androidaps.plugins.pump.combo.data.ComboErrorUtil.DisplayType
+import info.nightscout.androidaps.plugins.pump.combo.events.EventComboPumpUpdateGUI
+import info.nightscout.androidaps.plugins.pump.combo.ruffyscripter.PumpState
+import info.nightscout.androidaps.queue.Callback
+import info.nightscout.androidaps.queue.events.EventQueueChanged
+import info.nightscout.androidaps.utils.DateUtil
+import info.nightscout.androidaps.utils.FabricPrivacy
+import info.nightscout.androidaps.utils.resources.ResourceHelper
+import info.nightscout.androidaps.utils.rx.AapsSchedulers
+import io.reactivex.rxjava3.disposables.CompositeDisposable
+import io.reactivex.rxjava3.kotlin.plusAssign
+import javax.inject.Inject
+
+class ComboFragment : DaggerFragment() {
+
+ @Inject lateinit var comboPlugin: ComboPlugin
+ @Inject lateinit var commandQueue: CommandQueue
+ @Inject lateinit var rh: ResourceHelper
+ @Inject lateinit var rxBus: RxBus
+ @Inject lateinit var dateUtil: DateUtil
+ @Inject lateinit var fabricPrivacy: FabricPrivacy
+ @Inject lateinit var aapsSchedulers: AapsSchedulers
+ @Inject lateinit var errorUtil: ComboErrorUtil
+
+ private val disposable = CompositeDisposable()
+
+ private var _binding: CombopumpFragmentBinding? = 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 =
+ CombopumpFragmentBinding.inflate(inflater, container, false).also { _binding = it }.root
+
+ @Synchronized override fun onResume() {
+ super.onResume()
+ disposable += rxBus
+ .toObservable(EventComboPumpUpdateGUI::class.java)
+ .observeOn(aapsSchedulers.main)
+ .subscribe({ updateGui() }, fabricPrivacy::logException)
+ disposable += rxBus
+ .toObservable(EventQueueChanged::class.java)
+ .observeOn(aapsSchedulers.main)
+ .subscribe({ updateGui() }, fabricPrivacy::logException)
+ binding.comboRefreshButton.setOnClickListener {
+ binding.comboRefreshButton.isEnabled = false
+ commandQueue.readStatus(rh.gs(R.string.user_request), object : Callback() {
+ override fun run() {
+ runOnUiThread { binding.comboRefreshButton.isEnabled = true }
+ }
+ })
+ }
+ updateGui()
+ }
+
+ @Synchronized override fun onPause() {
+ super.onPause()
+ disposable.clear()
+ }
+
+ @SuppressLint("SetTextI18n")
+ fun updateGui() {
+ _binding ?: return
+ // state
+ binding.comboState.text = comboPlugin.stateSummary
+ val ps = comboPlugin.pump.state
+ if (ps.insulinState == PumpState.EMPTY || ps.batteryState == PumpState.EMPTY || ps.activeAlert != null && ps.activeAlert.errorCode != null) {
+ binding.comboState.setTextColor(rh.gac(context, R.attr.warningColor))
+ binding.comboState.setTypeface(null, Typeface.BOLD)
+ } else if (comboPlugin.pump.state.suspended
+ || ps.activeAlert != null && ps.activeAlert.warningCode != null
+ ) {
+ binding.comboState.setTextColor(rh.gac(context, R.attr.omniYellowColor))
+ binding.comboState.setTypeface(null, Typeface.BOLD)
+ } else {
+ binding.comboState.setTextColor(rh.gac(context, R.attr.defaultTextColor))
+ binding.comboState.setTypeface(null, Typeface.NORMAL)
+ }
+
+ // activity
+ val activity = comboPlugin.pump.activity
+ when {
+ activity != null -> {
+ binding.comboActivity.setTextColor(rh.gac(context, R.attr.defaultTextColor))
+ binding.comboActivity.textSize = 14f
+ binding.comboActivity.text = activity
+ }
+
+ commandQueue.size() > 0 -> {
+ binding.comboActivity.setTextColor(rh.gac(context, R.attr.defaultTextColor))
+ binding.comboActivity.textSize = 14f
+ binding.comboActivity.text = ""
+ }
+
+ comboPlugin.isInitialized() -> {
+ binding.comboActivity.setTextColor(rh.gac(context, R.attr.defaultTextColor))
+ binding.comboActivity.textSize = 20f
+ binding.comboActivity.text = "{fa-bed}"
+ }
+
+ else -> {
+ binding.comboActivity.setTextColor(rh.gac(context, R.attr.warningColor))
+ binding.comboActivity.textSize = 14f
+ binding.comboActivity.text = rh.gs(R.string.pump_unreachable)
+ }
+ }
+ if (comboPlugin.isInitialized()) {
+ // battery
+ binding.comboPumpstateBattery.textSize = 20f
+ when (ps.batteryState) {
+ PumpState.EMPTY -> {
+ binding.comboPumpstateBattery.text = "{fa-battery-empty}"
+ binding.comboPumpstateBattery.setTextColor(rh.gac(context, R.attr.warningColor))
+ }
+
+ PumpState.LOW -> {
+ binding.comboPumpstateBattery.text = "{fa-battery-quarter}"
+ binding.comboPumpstateBattery.setTextColor(rh.gac(context, R.attr.omniYellowColor))
+ }
+
+ else -> {
+ binding.comboPumpstateBattery.text = "{fa-battery-full}"
+ binding.comboPumpstateBattery.setTextColor(Color.WHITE)
+ }
+ }
+
+ // reservoir
+ val reservoirLevel = comboPlugin.pump.reservoirLevel
+ when {
+ reservoirLevel != -1 -> binding.comboInsulinstate.text = reservoirLevel.toString() + " " + rh.gs(R.string.insulin_unit_shortname)
+ ps.insulinState == PumpState.LOW -> binding.comboInsulinstate.text = rh.gs(R.string.combo_reservoir_low)
+ ps.insulinState == PumpState.EMPTY -> binding.comboInsulinstate.text = rh.gs(R.string.combo_reservoir_empty)
+ else -> binding.comboInsulinstate.text = rh.gs(R.string.combo_reservoir_normal)
+ }
+ when (ps.insulinState) {
+ PumpState.UNKNOWN -> {
+ binding.comboInsulinstate.setTextColor(rh.gac(context, R.attr.defaultTextColor))
+ binding.comboInsulinstate.setTypeface(null, Typeface.NORMAL)
+ }
+ PumpState.LOW -> {
+ binding.comboInsulinstate.setTextColor(rh.gac(context, R.attr.omniYellowColor))
+ binding.comboInsulinstate.setTypeface(null, Typeface.BOLD)
+ }
+ PumpState.EMPTY -> {
+ binding.comboInsulinstate.setTextColor(rh.gac(context, R.attr.warningColor))
+ binding.comboInsulinstate.setTypeface(null, Typeface.BOLD)
+ }
+ else -> {
+ binding.comboInsulinstate.setTextColor(rh.gac(context, R.attr.defaultTextColor))
+ binding.comboInsulinstate.setTypeface(null, Typeface.NORMAL)
+ }
+ }
+
+ // last connection
+ val minAgo = dateUtil.minAgo(rh, comboPlugin.pump.lastSuccessfulCmdTime)
+ val min = (System.currentTimeMillis() - comboPlugin.pump.lastSuccessfulCmdTime) / 1000 / 60
+ when {
+ comboPlugin.pump.lastSuccessfulCmdTime + 60 * 1000 > System.currentTimeMillis() -> {
+ binding.comboLastconnection.setText(R.string.combo_pump_connected_now)
+ binding.comboLastconnection.setTextColor(rh.gac(context, R.attr.defaultTextColor))
+ }
+ comboPlugin.pump.lastSuccessfulCmdTime + 30 * 60 * 1000 < System.currentTimeMillis() -> {
+ binding.comboLastconnection.text = rh.gs(R.string.combo_no_pump_connection, min)
+ binding.comboLastconnection.setTextColor(rh.gac(context, R.attr.warningColor))
+ }
+ else -> {
+ binding.comboLastconnection.text = minAgo
+ binding.comboLastconnection.setTextColor(rh.gac(context, R.attr.defaultTextColor))
+ }
+ }
+
+ // last bolus
+ val bolus = comboPlugin.pump.lastBolus
+ if (bolus != null) {
+ val agoMsc = System.currentTimeMillis() - bolus.timestamp
+ val bolusMinAgo = agoMsc / 60.0 / 1000.0
+ val unit = rh.gs(R.string.insulin_unit_shortname)
+ val ago: String = when {
+ agoMsc < 60 * 1000 -> rh.gs(R.string.combo_pump_connected_now)
+ bolusMinAgo < 60 -> dateUtil.minAgo(rh, bolus.timestamp)
+
+ else -> dateUtil.hourAgo(bolus.timestamp, rh)
+ }
+ binding.comboLastBolus.text = rh.gs(R.string.combo_last_bolus, bolus.amount, unit, ago)
+ } else {
+ binding.comboLastBolus.text = ""
+ }
+
+ // base basal rate
+ binding.comboBaseBasalRate.text = rh.gs(R.string.pump_basebasalrate, comboPlugin.baseBasalRate)
+
+ // TBR
+ var tbrStr = ""
+ if (ps.tbrPercent != -1 && ps.tbrPercent != 100) {
+ val minSinceRead = (System.currentTimeMillis() - comboPlugin.pump.state.timestamp) / 1000 / 60
+ val remaining = ps.tbrRemainingDuration - minSinceRead
+ if (remaining >= 0) {
+ tbrStr = rh.gs(R.string.combo_tbr_remaining, ps.tbrPercent, remaining)
+ }
+ }
+ binding.comboTempBasal.text = tbrStr
+
+ // stats
+ binding.comboBolusCount.text = comboPlugin.bolusesDelivered.toString()
+ binding.comboTbrCount.text = comboPlugin.tbrsSet.toString()
+ binding.serialNumber.text = comboPlugin.serialNumber()
+ updateErrorDisplay(false)
+ } else {
+ updateErrorDisplay(true)
+ }
+ }
+
+ private fun updateErrorDisplay(forceHide: Boolean) {
+ var errorCount = -1
+ if (!forceHide) {
+ val displayType = errorUtil.displayType
+ if (displayType === DisplayType.ON_ERROR || displayType === DisplayType.ALWAYS) {
+ val errorCountInternal = errorUtil.errorCount
+ if (errorCountInternal > 0) {
+ errorCount = errorCountInternal
+ } else if (displayType === DisplayType.ALWAYS) {
+ errorCount = 0
+ }
+ }
+ }
+ if (errorCount >= 0) {
+ binding.comboConnectionErrorValue.visibility = View.VISIBLE
+ binding.comboConnectionErrorLayout.visibility = View.VISIBLE
+ binding.comboConnectionErrorValue.visibility = View.VISIBLE
+ binding.comboConnectionErrorValue.text = if (errorCount == 0) "-" else "" + errorCount
+ } else {
+ binding.comboConnectionErrorValue.visibility = View.GONE
+ binding.comboConnectionErrorLayout.visibility = View.GONE
+ binding.comboConnectionErrorValue.visibility = View.GONE
+ }
+ }
+}
\ No newline at end of file
diff --git a/combo/src/main/res/layout/combopump_fragment.xml b/combo/src/main/res/layout/combopump_fragment.xml
index 8225bb48e7..3225c78e76 100644
--- a/combo/src/main/res/layout/combopump_fragment.xml
+++ b/combo/src/main/res/layout/combopump_fragment.xml
@@ -30,7 +30,7 @@
android:layout_height="wrap_content"
android:layout_weight="1.5"
android:gravity="end"
- android:paddingRight="5dp"
+ android:paddingEnd="5dp"
android:text="@string/combo_pump_state_label"
android:textSize="14sp" />
@@ -50,7 +50,7 @@
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="start"
- android:paddingLeft="5dp"
+ android:paddingStart="5dp"
android:textSize="14sp" />
@@ -59,8 +59,8 @@
android:layout_width="fill_parent"
android:layout_height="2dip"
android:layout_marginBottom="5dp"
- android:layout_marginLeft="20dp"
- android:layout_marginRight="20dp"
+ android:layout_marginStart="20dp"
+ android:layout_marginEnd="20dp"
android:layout_marginTop="5dp"
android:background="?android:attr/dividerHorizontal" />
@@ -75,7 +75,7 @@
android:layout_height="wrap_content"
android:layout_weight="1.5"
android:gravity="end"
- android:paddingRight="5dp"
+ android:paddingEnd="5dp"
android:text="@string/combo_pump_activity_label"
android:textSize="14sp" />
@@ -95,7 +95,7 @@
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="start"
- android:paddingLeft="5dp"
+ android:paddingStart="5dp"
android:textSize="14sp" />
@@ -104,12 +104,11 @@
android:layout_width="fill_parent"
android:layout_height="2dip"
android:layout_marginBottom="5dp"
- android:layout_marginLeft="20dp"
- android:layout_marginRight="20dp"
+ android:layout_marginStart="20dp"
+ android:layout_marginEnd="20dp"
android:layout_marginTop="5dp"
android:background="?android:attr/dividerHorizontal" />
-
@@ -141,7 +140,7 @@
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="start"
- android:paddingLeft="5dp"
+ android:paddingStart="5dp"
android:text=""
android:textSize="14sp" />
@@ -151,8 +150,8 @@
android:layout_width="fill_parent"
android:layout_height="2dip"
android:layout_marginBottom="5dp"
- android:layout_marginLeft="20dp"
- android:layout_marginRight="20dp"
+ android:layout_marginStart="20dp"
+ android:layout_marginEnd="20dp"
android:layout_marginTop="5dp"
android:background="?android:attr/dividerHorizontal" />
@@ -167,7 +166,7 @@
android:layout_height="wrap_content"
android:layout_weight="1.5"
android:gravity="end"
- android:paddingRight="5dp"
+ android:paddingEnd="5dp"
android:text="@string/reservoir_label"
android:textSize="14sp" />
@@ -187,7 +186,7 @@
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="start"
- android:paddingLeft="5dp"
+ android:paddingStart="5dp"
android:textSize="14sp" />
@@ -196,8 +195,8 @@
android:layout_width="fill_parent"
android:layout_height="2dip"
android:layout_marginBottom="5dp"
- android:layout_marginLeft="20dp"
- android:layout_marginRight="20dp"
+ android:layout_marginStart="20dp"
+ android:layout_marginEnd="20dp"
android:layout_marginTop="5dp"
android:background="?android:attr/dividerHorizontal" />
@@ -212,7 +211,7 @@
android:layout_height="wrap_content"
android:layout_weight="1.5"
android:gravity="end"
- android:paddingRight="5dp"
+ android:paddingEnd="5dp"
android:text="@string/lastconnection_label"
android:textSize="14sp" />
@@ -232,7 +231,7 @@
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="start"
- android:paddingLeft="5dp"
+ android:paddingStart="5dp"
android:textSize="14sp" />
@@ -241,8 +240,8 @@
android:layout_width="fill_parent"
android:layout_height="2dip"
android:layout_marginBottom="5dp"
- android:layout_marginLeft="20dp"
- android:layout_marginRight="20dp"
+ android:layout_marginStart="20dp"
+ android:layout_marginEnd="20dp"
android:layout_marginTop="5dp"
android:background="?android:attr/dividerHorizontal" />
@@ -257,7 +256,7 @@
android:layout_height="wrap_content"
android:layout_weight="1.5"
android:gravity="end"
- android:paddingRight="5dp"
+ android:paddingEnd="5dp"
android:text="@string/lastbolus_label"
android:textSize="14sp" />
@@ -277,7 +276,7 @@
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="start"
- android:paddingLeft="5dp"
+ android:paddingStart="5dp"
android:textSize="14sp" />
@@ -286,8 +285,8 @@
android:layout_width="fill_parent"
android:layout_height="2dip"
android:layout_marginBottom="5dp"
- android:layout_marginLeft="20dp"
- android:layout_marginRight="20dp"
+ android:layout_marginStart="20dp"
+ android:layout_marginEnd="20dp"
android:layout_marginTop="5dp"
android:background="?android:attr/dividerHorizontal" />
@@ -302,7 +301,7 @@
android:layout_height="wrap_content"
android:layout_weight="1.5"
android:gravity="end"
- android:paddingRight="5dp"
+ android:paddingEnd="5dp"
android:text="@string/basebasalrate_label"
android:textSize="14sp" />
@@ -322,7 +321,7 @@
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="start"
- android:paddingLeft="5dp"
+ android:paddingStart="5dp"
android:textSize="14sp" />
@@ -331,8 +330,8 @@
android:layout_width="fill_parent"
android:layout_height="2dip"
android:layout_marginBottom="5dp"
- android:layout_marginLeft="20dp"
- android:layout_marginRight="20dp"
+ android:layout_marginStart="20dp"
+ android:layout_marginEnd="20dp"
android:layout_marginTop="5dp"
android:background="?android:attr/dividerHorizontal" />
@@ -347,7 +346,7 @@
android:layout_height="wrap_content"
android:layout_weight="1.5"
android:gravity="end"
- android:paddingRight="5dp"
+ android:paddingEnd="5dp"
android:text="@string/tempbasal_label"
android:textSize="14sp" />
@@ -367,7 +366,7 @@
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="start"
- android:paddingLeft="5dp"
+ android:paddingStart="5dp"
android:textSize="14sp" />
@@ -376,8 +375,8 @@
android:layout_width="fill_parent"
android:layout_height="2dip"
android:layout_marginBottom="5dp"
- android:layout_marginLeft="20dp"
- android:layout_marginRight="20dp"
+ android:layout_marginStart="20dp"
+ android:layout_marginEnd="20dp"
android:layout_marginTop="5dp"
android:background="?android:attr/dividerHorizontal" />
@@ -392,7 +391,7 @@
android:layout_height="wrap_content"
android:layout_weight="1.5"
android:gravity="end"
- android:paddingRight="5dp"
+ android:paddingEnd="5dp"
android:text="@string/combo_bolus_count"
android:textSize="14sp" />
@@ -412,7 +411,7 @@
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="start"
- android:paddingLeft="5dp"
+ android:paddingStart="5dp"
android:textSize="14sp" />
@@ -421,8 +420,8 @@
android:layout_width="fill_parent"
android:layout_height="2dip"
android:layout_marginBottom="5dp"
- android:layout_marginLeft="20dp"
- android:layout_marginRight="20dp"
+ android:layout_marginStart="20dp"
+ android:layout_marginEnd="20dp"
android:layout_marginTop="5dp"
android:background="?android:attr/dividerHorizontal" />
@@ -437,7 +436,7 @@
android:layout_height="wrap_content"
android:layout_weight="1.5"
android:gravity="end"
- android:paddingRight="5dp"
+ android:paddingEnd="5dp"
android:text="@string/combo_tbr_count"
android:textSize="14sp" />
@@ -457,7 +456,7 @@
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="start"
- android:paddingLeft="5dp"
+ android:paddingStart="5dp"
android:textSize="14sp" />
@@ -467,8 +466,8 @@
android:layout_width="fill_parent"
android:layout_height="2dip"
android:layout_marginBottom="5dp"
- android:layout_marginLeft="20dp"
- android:layout_marginRight="20dp"
+ android:layout_marginStart="20dp"
+ android:layout_marginEnd="20dp"
android:layout_marginTop="5dp"
android:background="?android:attr/dividerHorizontal" />
@@ -479,17 +478,15 @@
android:orientation="horizontal">
@@ -514,8 +511,53 @@
android:layout_width="fill_parent"
android:layout_height="2dip"
android:layout_marginBottom="5dp"
- android:layout_marginLeft="20dp"
- android:layout_marginRight="20dp"
+ android:layout_marginStart="20dp"
+ android:layout_marginEnd="20dp"
+ android:layout_marginTop="5dp"
+ android:background="?android:attr/dividerHorizontal" />
+
+
+
+
+
+
+
+
+
+
+
+
@@ -534,7 +576,7 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
- android:paddingRight="4dp"
+ android:paddingEnd="4dp"
android:orientation="vertical">
diff --git a/core/src/main/java/info/nightscout/androidaps/activities/NoSplashAppCompatActivity.kt b/core/src/main/java/info/nightscout/androidaps/activities/NoSplashAppCompatActivity.kt
index 430c562448..eb93cbbc3c 100644
--- a/core/src/main/java/info/nightscout/androidaps/activities/NoSplashAppCompatActivity.kt
+++ b/core/src/main/java/info/nightscout/androidaps/activities/NoSplashAppCompatActivity.kt
@@ -8,7 +8,6 @@ import info.nightscout.androidaps.utils.locale.LocaleHelper
import io.reactivex.rxjava3.disposables.CompositeDisposable
import javax.inject.Inject
-
open class NoSplashAppCompatActivity : DaggerAppCompatActivityWithResult() {
@Inject lateinit var rxBus: RxBus
diff --git a/core/src/main/java/info/nightscout/androidaps/data/IobTotal.kt b/core/src/main/java/info/nightscout/androidaps/data/IobTotal.kt
index 629eabe3b8..74bd1713b3 100644
--- a/core/src/main/java/info/nightscout/androidaps/data/IobTotal.kt
+++ b/core/src/main/java/info/nightscout/androidaps/data/IobTotal.kt
@@ -118,7 +118,6 @@ class IobTotal(val time: Long) : DataPointWithLabelInterface {
return color
}
-
fun setColor(color: Int): IobTotal {
this.color = color
return this
@@ -141,4 +140,4 @@ class IobTotal(val time: Long) : DataPointWithLabelInterface {
return result
}
}
-}
\ No newline at end of file
+}
diff --git a/core/src/main/java/info/nightscout/androidaps/dialogs/DialogFragmentWithDate.kt b/core/src/main/java/info/nightscout/androidaps/dialogs/DialogFragmentWithDate.kt
index 95fb06ff08..a7bff8e52b 100644
--- a/core/src/main/java/info/nightscout/androidaps/dialogs/DialogFragmentWithDate.kt
+++ b/core/src/main/java/info/nightscout/androidaps/dialogs/DialogFragmentWithDate.kt
@@ -1,7 +1,5 @@
package info.nightscout.androidaps.dialogs
-import android.app.DatePickerDialog
-import android.app.TimePickerDialog
import android.os.Bundle
import android.text.format.DateFormat
import android.view.View
@@ -11,12 +9,15 @@ import android.view.WindowManager
import android.widget.Button
import android.widget.TextView
import androidx.fragment.app.FragmentManager
+import com.google.android.material.datepicker.MaterialDatePicker
+import com.google.android.material.timepicker.MaterialTimePicker
+import com.google.android.material.timepicker.TimeFormat
import dagger.android.support.DaggerDialogFragment
import info.nightscout.androidaps.core.R
+import info.nightscout.androidaps.extensions.toVisibility
+import info.nightscout.androidaps.utils.DateUtil
import info.nightscout.shared.logging.AAPSLogger
import info.nightscout.shared.logging.LTag
-import info.nightscout.androidaps.utils.DateUtil
-import info.nightscout.androidaps.extensions.toVisibility
import info.nightscout.shared.sharedPreferences.SP
import java.util.*
import java.util.concurrent.atomic.AtomicBoolean
@@ -29,6 +30,7 @@ abstract class DialogFragmentWithDate : DaggerDialogFragment() {
@Inject lateinit var dateUtil: DateUtil
fun interface OnValueChangedListener {
+
fun onValueChanged(value: Long)
}
@@ -44,11 +46,6 @@ abstract class DialogFragmentWithDate : DaggerDialogFragment() {
//one shot guards
private var okClicked: AtomicBoolean = AtomicBoolean(false)
- companion object {
-
- private var seconds: Int = (Math.random() * 59.0).toInt()
- }
-
override fun onStart() {
super.onStart()
dialog?.window?.setLayout(
@@ -78,69 +75,46 @@ abstract class DialogFragmentWithDate : DaggerDialogFragment() {
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
- eventDateView = view.findViewById(R.id.eventdate) as TextView?
- eventTimeView = view.findViewById(R.id.eventtime) as TextView?
-
eventTimeOriginal = savedInstanceState?.getLong("eventTimeOriginal") ?: dateUtil.nowWithoutMilliseconds()
eventTime = savedInstanceState?.getLong("eventTime") ?: eventTimeOriginal
+ eventDateView = view.findViewById(R.id.eventdate) as TextView?
eventDateView?.text = dateUtil.dateString(eventTime)
- eventTimeView?.text = dateUtil.timeString(eventTime)
+ eventDateView?.setOnClickListener {
+ val selection = dateUtil.timeStampToUtcDateMilis(eventTime)
+ MaterialDatePicker.Builder.datePicker()
+ .setTheme(R.style.DatePicker)
+ .setSelection(selection)
+ .build()
+ .apply {
+ addOnPositiveButtonClickListener { selection ->
+ eventTime = dateUtil.mergeUtcDateToTimestamp(eventTime, selection)
+ eventDateView?.text = dateUtil.dateString(eventTime)
+ callValueChangedListener()
- // create an OnDateSetListener
- val dateSetListener =
- DatePickerDialog.OnDateSetListener { _, year, monthOfYear, dayOfMonth ->
- val cal = Calendar.getInstance()
- cal.timeInMillis = eventTime
- cal.set(Calendar.YEAR, year)
- cal.set(Calendar.MONTH, monthOfYear)
- cal.set(Calendar.DAY_OF_MONTH, dayOfMonth)
- eventTime = cal.timeInMillis
- eventDateView?.text = dateUtil.dateString(eventTime)
+ }
+ }
+ .show(parentFragmentManager, "event_time_date_picker")
+ }
+
+ eventTimeView = view.findViewById(R.id.eventtime) as TextView?
+ eventTimeView?.text = dateUtil.timeString(eventTime)
+ eventTimeView?.setOnClickListener {
+ val clockFormat = if (DateFormat.is24HourFormat(context)) TimeFormat.CLOCK_24H else TimeFormat.CLOCK_12H
+ val cal = Calendar.getInstance().apply { timeInMillis = eventTime }
+ val timePicker = MaterialTimePicker.Builder()
+ .setTimeFormat(clockFormat)
+ .setHour(cal.get(Calendar.HOUR_OF_DAY))
+ .setMinute(cal.get(Calendar.MINUTE))
+ .setTheme(R.style.TimePicker)
+ .build()
+ timePicker.addOnPositiveButtonClickListener {
+ // Randomize seconds to prevent creating record of the same time, if user choose time manually
+ eventTime = dateUtil.mergeHourMinuteToTimestamp(eventTime, timePicker.hour, timePicker.minute, true)
+ eventTimeView?.text = dateUtil.timeString(eventTime)
callValueChangedListener()
}
-
- eventDateView?.setOnClickListener {
- context?.let {
- val cal = Calendar.getInstance()
- cal.timeInMillis = eventTime
- DatePickerDialog(
- it, R.style.MaterialPickerTheme,
- dateSetListener,
- cal.get(Calendar.YEAR),
- cal.get(Calendar.MONTH),
- cal.get(Calendar.DAY_OF_MONTH)
- ).show()
- }
- }
-
- // create an OnTimeSetListener
- val timeSetListener = TimePickerDialog.OnTimeSetListener { _, hour, minute ->
- val cal = Calendar.getInstance()
- cal.timeInMillis = eventTime
- cal.set(Calendar.HOUR_OF_DAY, hour)
- cal.set(Calendar.MINUTE, minute)
- cal.set(
- Calendar.SECOND,
- seconds++
- ) // randomize seconds to prevent creating record of the same time, if user choose time manually
- eventTime = cal.timeInMillis
- eventTimeView?.text = dateUtil.timeString(eventTime)
- callValueChangedListener()
- }
-
- eventTimeView?.setOnClickListener {
- context?.let {
- val cal = Calendar.getInstance()
- cal.timeInMillis = eventTime
- TimePickerDialog(
- it, R.style.MaterialPickerTheme,
- timeSetListener,
- cal.get(Calendar.HOUR_OF_DAY),
- cal.get(Calendar.MINUTE),
- DateFormat.is24HourFormat(context)
- ).show()
- }
+ timePicker.show(parentFragmentManager, "event_time_time_picker")
}
(view.findViewById(R.id.notes_layout) as View?)?.visibility =
@@ -189,4 +163,4 @@ abstract class DialogFragmentWithDate : DaggerDialogFragment() {
}
abstract fun submit(): Boolean
-}
\ No newline at end of file
+}
diff --git a/core/src/main/java/info/nightscout/androidaps/extensions/Concurrency.kt b/core/src/main/java/info/nightscout/androidaps/extensions/Concurrency.kt
index e0ecdf7f37..e1da1919a5 100644
--- a/core/src/main/java/info/nightscout/androidaps/extensions/Concurrency.kt
+++ b/core/src/main/java/info/nightscout/androidaps/extensions/Concurrency.kt
@@ -1,6 +1,5 @@
package info.nightscout.androidaps.extensions
-
@Suppress("PLATFORM_CLASS_MAPPED_TO_KOTLIN", "NOTHING_TO_INLINE")
inline fun Any.wait() = (this as Object).wait()
diff --git a/core/src/main/java/info/nightscout/androidaps/extensions/EffectiveProfileSwitchExtension.kt b/core/src/main/java/info/nightscout/androidaps/extensions/EffectiveProfileSwitchExtension.kt
index 009f143aca..1384908c4d 100644
--- a/core/src/main/java/info/nightscout/androidaps/extensions/EffectiveProfileSwitchExtension.kt
+++ b/core/src/main/java/info/nightscout/androidaps/extensions/EffectiveProfileSwitchExtension.kt
@@ -49,7 +49,6 @@ fun effectiveProfileSwitchFromJson(jsonObject: JSONObject, dateUtil: DateUtil):
val pureProfile = pureProfileFromJson(JSONObject(profileJson), dateUtil) ?: return null
val profileSealed = ProfileSealed.Pure(pureProfile)
-
return EffectiveProfileSwitch(
timestamp = timestamp,
basalBlocks = profileSealed.basalBlocks,
@@ -77,4 +76,4 @@ fun EffectiveProfileSwitch.GlucoseUnit.Companion.fromConstant(units: GlucoseUnit
if (units == GlucoseUnit.MGDL) EffectiveProfileSwitch.GlucoseUnit.MGDL
else EffectiveProfileSwitch.GlucoseUnit.MMOL
-fun JSONObject.isEffectiveProfileSwitch() = has("originalProfileName")
\ No newline at end of file
+fun JSONObject.isEffectiveProfileSwitch() = has("originalProfileName")
diff --git a/core/src/main/java/info/nightscout/androidaps/extensions/JSONObjectExt.kt b/core/src/main/java/info/nightscout/androidaps/extensions/JSONObjectExt.kt
index 31ad6b567c..f4c9d40271 100644
--- a/core/src/main/java/info/nightscout/androidaps/extensions/JSONObjectExt.kt
+++ b/core/src/main/java/info/nightscout/androidaps/extensions/JSONObjectExt.kt
@@ -44,5 +44,3 @@ fun JSONObject.storeBoolean(@StringRes key: Int, sp: SP, rh: ResourceHelper): JS
if (has(rh.gs(key))) sp.putString(key, getBoolean(rh.gs(key)).toString())
return this
}
-
-
diff --git a/core/src/main/java/info/nightscout/androidaps/extensions/OfflineEventExtension.kt b/core/src/main/java/info/nightscout/androidaps/extensions/OfflineEventExtension.kt
index 152a3fcb1d..f55acc3675 100644
--- a/core/src/main/java/info/nightscout/androidaps/extensions/OfflineEventExtension.kt
+++ b/core/src/main/java/info/nightscout/androidaps/extensions/OfflineEventExtension.kt
@@ -49,7 +49,6 @@ fun offlineEventFromJson(jsonObject: JSONObject): OfflineEvent? {
val reason = OfflineEvent.Reason.fromString(JsonHelper.safeGetString(jsonObject, "reason", OfflineEvent.Reason.OTHER.name))
-
return OfflineEvent(
timestamp = timestamp,
duration = durationInMilliseconds ?: T.mins(duration).msecs(),
@@ -62,5 +61,3 @@ fun offlineEventFromJson(jsonObject: JSONObject): OfflineEvent? {
it.interfaceIDs.pumpSerial = pumpSerial
}
}
-
-
diff --git a/core/src/main/java/info/nightscout/androidaps/extensions/ProfileSwitchExtension.kt b/core/src/main/java/info/nightscout/androidaps/extensions/ProfileSwitchExtension.kt
index c612748869..c620493c58 100644
--- a/core/src/main/java/info/nightscout/androidaps/extensions/ProfileSwitchExtension.kt
+++ b/core/src/main/java/info/nightscout/androidaps/extensions/ProfileSwitchExtension.kt
@@ -84,7 +84,6 @@ fun profileSwitchFromJson(jsonObject: JSONObject, dateUtil: DateUtil, activePlug
} else pureProfileFromJson(JSONObject(profileJson), dateUtil) ?: return null
val profileSealed = ProfileSealed.Pure(pureProfile)
-
return ProfileSwitch(
timestamp = timestamp,
basalBlocks = profileSealed.basalBlocks,
@@ -155,5 +154,3 @@ fun ProfileSwitch.getCustomizedName(): String {
fun ProfileSwitch.GlucoseUnit.Companion.fromConstant(units: GlucoseUnit): ProfileSwitch.GlucoseUnit =
if (units == GlucoseUnit.MGDL) ProfileSwitch.GlucoseUnit.MGDL
else ProfileSwitch.GlucoseUnit.MMOL
-
-
diff --git a/core/src/main/java/info/nightscout/androidaps/extensions/TherapyEventExtension.kt b/core/src/main/java/info/nightscout/androidaps/extensions/TherapyEventExtension.kt
index c18ef9a31f..15cc907285 100644
--- a/core/src/main/java/info/nightscout/androidaps/extensions/TherapyEventExtension.kt
+++ b/core/src/main/java/info/nightscout/androidaps/extensions/TherapyEventExtension.kt
@@ -123,5 +123,3 @@ fun List.isTherapyEventEvent5minBack(time: Long): Boolean {
}
return false
}
-
-
diff --git a/core/src/main/java/info/nightscout/androidaps/extensions/UserEntryExt.kt b/core/src/main/java/info/nightscout/androidaps/extensions/UserEntryExt.kt
index f38e9f384d..2e5c75787f 100644
--- a/core/src/main/java/info/nightscout/androidaps/extensions/UserEntryExt.kt
+++ b/core/src/main/java/info/nightscout/androidaps/extensions/UserEntryExt.kt
@@ -12,8 +12,8 @@ fun ColorGroup.colorId(): Int {
ColorGroup.Loop -> R.color.loopClosed
ColorGroup.Careportal -> R.color.high
ColorGroup.Pump -> R.color.iob
- ColorGroup.Aaps -> R.color.defaulttext
- else -> R.color.defaulttext
+ ColorGroup.Aaps -> R.color.defaultText
+ else -> R.color.defaultText
}
}
diff --git a/core/src/main/java/info/nightscout/androidaps/utils/DateUtil.kt b/core/src/main/java/info/nightscout/androidaps/utils/DateUtil.kt
index 6b6f79f493..a4b072057b 100644
--- a/core/src/main/java/info/nightscout/androidaps/utils/DateUtil.kt
+++ b/core/src/main/java/info/nightscout/androidaps/utils/DateUtil.kt
@@ -386,12 +386,40 @@ class DateUtil @Inject constructor(private val context: Context) {
.firstOrNull() ?: ZoneId.of("UTC")
)
+ fun timeStampToUtcDateMilis(timestamp: Long): Long {
+ val current = Calendar.getInstance().apply { timeInMillis = timestamp }
+ return Calendar.getInstance().apply {
+ set(Calendar.YEAR, current.get(Calendar.YEAR))
+ set(Calendar.MONTH, current.get(Calendar.MONTH))
+ set(Calendar.DAY_OF_MONTH, current.get(Calendar.DAY_OF_MONTH))
+ }.timeInMillis
+ }
+
+ fun mergeUtcDateToTimestamp(timestamp: Long, dateUtcMilis: Long): Long {
+ val selected = Calendar.getInstance().apply { timeInMillis = dateUtcMilis }
+ return Calendar.getInstance().apply {
+ timeInMillis = timestamp
+ set(Calendar.YEAR, selected.get(Calendar.YEAR))
+ set(Calendar.MONTH, selected.get(Calendar.MONTH))
+ set(Calendar.DAY_OF_MONTH, selected.get(Calendar.DAY_OF_MONTH))
+ }.timeInMillis
+ }
+
+ fun mergeHourMinuteToTimestamp(timestamp: Long, hour: Int, minute: Int, randomSecond: Boolean = false): Long {
+ return Calendar.getInstance().apply {
+ timeInMillis = timestamp
+ set(Calendar.HOUR_OF_DAY, hour)
+ set(Calendar.MINUTE, minute)
+ if (randomSecond) set(Calendar.SECOND, seconds++)
+ }.timeInMillis
+ }
+
companion object {
private val timeStrings = LongSparseArray()
-
+ private var seconds: Int = (Math.random() * 59.0).toInt()
// singletons to avoid repeated allocation
private var dfs: DecimalFormatSymbols? = null
private var df: DecimalFormat? = null
}
-}
\ No newline at end of file
+}
diff --git a/core/src/main/java/info/nightscout/androidaps/utils/Translator.kt b/core/src/main/java/info/nightscout/androidaps/utils/Translator.kt
index d680f5e3f3..c386e0703c 100644
--- a/core/src/main/java/info/nightscout/androidaps/utils/Translator.kt
+++ b/core/src/main/java/info/nightscout/androidaps/utils/Translator.kt
@@ -255,6 +255,7 @@ class Translator @Inject internal constructor(
Sources.MM640g -> TODO()
Sources.NSClientSource -> TODO()
Sources.PocTech -> TODO()
+ Sources.Aidex -> TODO()
Sources.Tomato -> TODO()
Sources.Xdrip -> TODO()
Sources.LocalProfile -> TODO()
@@ -293,4 +294,4 @@ class Translator @Inject internal constructor(
else -> source.name
}
-}
\ No newline at end of file
+}
diff --git a/core/src/main/java/info/nightscout/androidaps/utils/WarnColors.kt b/core/src/main/java/info/nightscout/androidaps/utils/WarnColors.kt
index 477b092343..bde450ec77 100644
--- a/core/src/main/java/info/nightscout/androidaps/utils/WarnColors.kt
+++ b/core/src/main/java/info/nightscout/androidaps/utils/WarnColors.kt
@@ -11,7 +11,6 @@ import javax.inject.Singleton
@Singleton
class WarnColors @Inject constructor(val rh: ResourceHelper) {
-
fun setColor(view: TextView?, value: Double, warnLevel: Double, urgentLevel: Double) =
view?.setTextColor( rh.gac( view.context ,when {
value >= urgentLevel -> R.attr.urgentColor
@@ -32,4 +31,4 @@ class WarnColors @Inject constructor(val rh: ResourceHelper) {
therapyEvent.isOlderThan(warnThreshold) -> R.attr.highColor
else -> R.attr.defaultTextColor
}))
-}
\ No newline at end of file
+}
diff --git a/core/src/main/java/info/nightscout/androidaps/utils/alertDialogs/OKDialog.kt b/core/src/main/java/info/nightscout/androidaps/utils/alertDialogs/OKDialog.kt
index 0de43096e0..53b25b4a67 100644
--- a/core/src/main/java/info/nightscout/androidaps/utils/alertDialogs/OKDialog.kt
+++ b/core/src/main/java/info/nightscout/androidaps/utils/alertDialogs/OKDialog.kt
@@ -6,6 +6,7 @@ import android.content.DialogInterface
import android.os.SystemClock
import android.text.Spanned
import androidx.fragment.app.FragmentActivity
+import com.google.android.material.dialog.MaterialAlertDialogBuilder
import info.nightscout.androidaps.core.R
import info.nightscout.androidaps.extensions.runOnUiThread
@@ -17,7 +18,7 @@ object OKDialog {
var notEmptyTitle = title
if (notEmptyTitle.isEmpty()) notEmptyTitle = context.getString(R.string.message)
- AlertDialogHelper.Builder(context, R.style.DialogTheme)
+ MaterialAlertDialogBuilder(context, R.style.DialogTheme)
.setCustomTitle(AlertDialogHelper.buildCustomTitle(context, notEmptyTitle))
.setMessage(message)
.setPositiveButton(context.getString(R.string.ok)) { dialog: DialogInterface, _: Int ->
@@ -39,7 +40,7 @@ object OKDialog {
var notEmptyTitle = title
if (notEmptyTitle.isEmpty()) notEmptyTitle = activity.getString(R.string.message)
- AlertDialogHelper.Builder(activity, R.style.DialogTheme)
+ MaterialAlertDialogBuilder(activity, R.style.DialogTheme)
.setCustomTitle(AlertDialogHelper.buildCustomTitle(activity, notEmptyTitle))
.setMessage(message)
.setPositiveButton(activity.getString(R.string.ok)) { dialog: DialogInterface, _: Int ->
@@ -66,7 +67,7 @@ object OKDialog {
@SuppressLint("InflateParams")
fun showConfirmation(activity: FragmentActivity, title: String, message: Spanned, ok: Runnable?, cancel: Runnable? = null) {
var okClicked = false
- AlertDialogHelper.Builder(activity, R.style.DialogTheme)
+ MaterialAlertDialogBuilder(activity, R.style.DialogTheme)
.setMessage(message)
.setCustomTitle(AlertDialogHelper.buildCustomTitle(activity, title))
.setPositiveButton(android.R.string.ok) { dialog: DialogInterface, _: Int ->
@@ -94,7 +95,7 @@ object OKDialog {
@SuppressLint("InflateParams")
fun showConfirmation(activity: FragmentActivity, title: String, message: String, ok: Runnable?, cancel: Runnable? = null) {
var okClicked = false
- AlertDialogHelper.Builder(activity, R.style.DialogTheme)
+ MaterialAlertDialogBuilder(activity, R.style.DialogTheme)
.setMessage(message)
.setCustomTitle(AlertDialogHelper.buildCustomTitle(activity, title))
.setPositiveButton(android.R.string.ok) { dialog: DialogInterface, _: Int ->
@@ -126,7 +127,7 @@ object OKDialog {
@SuppressLint("InflateParams")
fun showConfirmation(context: Context, title: String, message: Spanned, ok: Runnable?, cancel: Runnable? = null) {
var okClicked = false
- AlertDialogHelper.Builder(context, R.style.DialogTheme)
+ MaterialAlertDialogBuilder(context, R.style.DialogTheme)
.setMessage(message)
.setCustomTitle(AlertDialogHelper.buildCustomTitle(context, title))
.setPositiveButton(android.R.string.ok) { dialog: DialogInterface, _: Int ->
@@ -158,7 +159,7 @@ object OKDialog {
@SuppressLint("InflateParams")
fun showConfirmation(context: Context, title: String, message: String, ok: Runnable?, cancel: Runnable? = null) {
var okClicked = false
- AlertDialogHelper.Builder(context, R.style.DialogTheme)
+ MaterialAlertDialogBuilder(context, R.style.DialogTheme)
.setMessage(message)
.setCustomTitle(AlertDialogHelper.buildCustomTitle(context, title))
.setPositiveButton(android.R.string.ok) { dialog: DialogInterface, _: Int ->
@@ -186,7 +187,7 @@ object OKDialog {
@SuppressLint("InflateParams")
fun showConfirmation(context: Context, title: String, message: String, ok: DialogInterface.OnClickListener?, cancel: DialogInterface.OnClickListener? = null) {
var okClicked = false
- AlertDialogHelper.Builder(context, R.style.DialogTheme)
+ MaterialAlertDialogBuilder(context, R.style.DialogTheme)
.setMessage(message)
.setCustomTitle(AlertDialogHelper.buildCustomTitle(context, title))
.setPositiveButton(android.R.string.ok) { dialog: DialogInterface, which: Int ->
@@ -214,7 +215,7 @@ object OKDialog {
@SuppressLint("InflateParams")
fun showYesNoCancel(context: Context, title: String, message: String, yes: Runnable?, no: Runnable? = null) {
var okClicked = false
- AlertDialogHelper.Builder(context, R.style.DialogTheme)
+ MaterialAlertDialogBuilder(context, R.style.DialogTheme)
.setMessage(message)
.setCustomTitle(AlertDialogHelper.buildCustomTitle(context, title))
.setPositiveButton(R.string.yes) { dialog: DialogInterface, _: Int ->
@@ -242,4 +243,4 @@ object OKDialog {
.setCanceledOnTouchOutside(false)
}
-}
\ No newline at end of file
+}
diff --git a/core/src/main/java/info/nightscout/androidaps/utils/alertDialogs/WarningDialog.kt b/core/src/main/java/info/nightscout/androidaps/utils/alertDialogs/WarningDialog.kt
index 38f3314667..1c72451ee3 100644
--- a/core/src/main/java/info/nightscout/androidaps/utils/alertDialogs/WarningDialog.kt
+++ b/core/src/main/java/info/nightscout/androidaps/utils/alertDialogs/WarningDialog.kt
@@ -5,6 +5,7 @@ import android.content.Context
import android.content.DialogInterface
import android.os.SystemClock
import androidx.annotation.StringRes
+import com.google.android.material.dialog.MaterialAlertDialogBuilder
import info.nightscout.androidaps.core.R
import info.nightscout.androidaps.extensions.runOnUiThread
@@ -15,7 +16,7 @@ object WarningDialog {
@SuppressLint("InflateParams")
fun showWarning(context: Context, title: String, message: String, @StringRes positiveButton: Int = -1, ok: (() -> Unit)? = null, cancel: (() -> Unit)? = null) {
var okClicked = false
- val builder = AlertDialogHelper.Builder(context, R.style.AppThemeWarningDialog)
+ val builder = MaterialAlertDialogBuilder(context, R.style.AppThemeWarningDialog)
.setMessage(message)
.setCustomTitle(AlertDialogHelper.buildCustomTitle(context, title, R.drawable.ic_header_warning, R.style.AppThemeWarningDialog))
.setNegativeButton(R.string.dismiss) { dialog: DialogInterface, _: Int ->
@@ -52,4 +53,4 @@ object WarningDialog {
dialog.setCanceledOnTouchOutside(true)
}
-}
\ No newline at end of file
+}
diff --git a/core/src/main/java/info/nightscout/androidaps/utils/protection/PasswordCheck.kt b/core/src/main/java/info/nightscout/androidaps/utils/protection/PasswordCheck.kt
index a395cdc111..9d03d04cbc 100644
--- a/core/src/main/java/info/nightscout/androidaps/utils/protection/PasswordCheck.kt
+++ b/core/src/main/java/info/nightscout/androidaps/utils/protection/PasswordCheck.kt
@@ -11,6 +11,7 @@ import android.view.inputmethod.InputMethodManager
import android.widget.EditText
import android.widget.TextView
import androidx.annotation.StringRes
+import com.google.android.material.dialog.MaterialAlertDialogBuilder
import info.nightscout.androidaps.core.R
import info.nightscout.androidaps.interfaces.ActivePlugin
import info.nightscout.androidaps.plugins.general.maintenance.PrefFileListProvider
@@ -44,7 +45,7 @@ class PasswordCheck @Inject constructor(
return
}
val promptsView = LayoutInflater.from(context).inflate(R.layout.passwordprompt, null)
- val alertDialogBuilder = AlertDialogHelper.Builder(context, R.style.DialogTheme)
+ val alertDialogBuilder = MaterialAlertDialogBuilder(context, R.style.DialogTheme)
alertDialogBuilder.setView(promptsView)
val userInput = promptsView.findViewById(R.id.password_prompt_pass) as EditText
@@ -101,7 +102,7 @@ class PasswordCheck @Inject constructor(
@SuppressLint("InflateParams")
fun setPassword(context: Context, @StringRes labelId: Int, @StringRes preference: Int, ok: ((String) -> Unit)? = null, cancel: (() -> Unit)? = null, clear: (() -> Unit)? = null, pinInput: Boolean = false) {
val promptsView = LayoutInflater.from(context).inflate(R.layout.passwordprompt, null)
- val alertDialogBuilder = AlertDialogHelper.Builder(context, R.style.DialogTheme)
+ val alertDialogBuilder = MaterialAlertDialogBuilder(context, R.style.DialogTheme)
alertDialogBuilder.setView(promptsView)
val userInput = promptsView.findViewById(R.id.password_prompt_pass) as EditText
@@ -165,7 +166,7 @@ class PasswordCheck @Inject constructor(
@StringRes passwordWarning: Int?, ok: ((String) -> Unit)?, cancel: (() -> Unit)? = null) {
val promptsView = LayoutInflater.from(context).inflate(R.layout.passwordprompt, null)
- val alertDialogBuilder = AlertDialogHelper.Builder(context, R.style.DialogTheme)
+ val alertDialogBuilder = MaterialAlertDialogBuilder(context, R.style.DialogTheme)
alertDialogBuilder.setView(promptsView)
passwordExplanation?.let { alertDialogBuilder.setMessage(it) }
diff --git a/core/src/main/java/info/nightscout/androidaps/utils/resources/ResourceHelper.kt b/core/src/main/java/info/nightscout/androidaps/utils/resources/ResourceHelper.kt
index 375243e597..2c259946fa 100644
--- a/core/src/main/java/info/nightscout/androidaps/utils/resources/ResourceHelper.kt
+++ b/core/src/main/java/info/nightscout/androidaps/utils/resources/ResourceHelper.kt
@@ -33,4 +33,8 @@ interface ResourceHelper {
* Get Attribute Color based on theme style for specified context
*/
@ColorInt fun gac(context: Context?, @AttrRes attributeId: Int): Int
+ /**
+ * Get themed context -->> context dependend on light or darkmode
+ */
+ fun getThemedCtx(context: Context): Context
}
diff --git a/core/src/main/java/info/nightscout/androidaps/utils/resources/ResourceHelperImplementation.kt b/core/src/main/java/info/nightscout/androidaps/utils/resources/ResourceHelperImplementation.kt
index d7e6d59402..75db45e99d 100644
--- a/core/src/main/java/info/nightscout/androidaps/utils/resources/ResourceHelperImplementation.kt
+++ b/core/src/main/java/info/nightscout/androidaps/utils/resources/ResourceHelperImplementation.kt
@@ -4,11 +4,13 @@ import android.annotation.SuppressLint
import android.content.Context
import android.content.res.AssetFileDescriptor
import android.content.res.Configuration
+import android.content.res.Resources
import android.graphics.Bitmap
import android.graphics.BitmapFactory
import android.graphics.drawable.Drawable
import android.util.DisplayMetrics
import androidx.annotation.*
+import androidx.appcompat.app.AppCompatDelegate
import androidx.appcompat.view.ContextThemeWrapper
import androidx.core.content.ContextCompat
import info.nightscout.androidaps.core.R
@@ -86,8 +88,21 @@ class ResourceHelperImplementation @Inject constructor(private val context: Cont
override fun shortTextMode(): Boolean = !gb(R.bool.isTablet)
override fun gac(context: Context?, attributeId: Int): Int =
- (context ?: ContextThemeWrapper(this.context, R.style.AppTheme)).getThemeColor(attributeId)
+ ( ContextThemeWrapper( context ?: this.context, R.style.AppTheme)).getThemeColor(attributeId)
override fun gac(attributeId: Int): Int =
ContextThemeWrapper(this.context, R.style.AppTheme).getThemeColor(attributeId)
+
+ override fun getThemedCtx(context: Context): Context {
+ val res: Resources = context.resources
+ val configuration = Configuration(res.configuration)
+ val filter = res.configuration.uiMode and Configuration.UI_MODE_NIGHT_MASK.inv()
+
+ configuration.uiMode = when (AppCompatDelegate.getDefaultNightMode()) {
+ AppCompatDelegate.MODE_NIGHT_NO -> Configuration.UI_MODE_NIGHT_NO or filter
+ AppCompatDelegate.MODE_NIGHT_YES -> Configuration.UI_MODE_NIGHT_YES or filter
+ else -> res.configuration.uiMode
+ }
+ return context.createConfigurationContext(configuration)
+ }
}
diff --git a/core/src/main/java/info/nightscout/androidaps/utils/ui/MinutesNumberPicker.kt b/core/src/main/java/info/nightscout/androidaps/utils/ui/MinutesNumberPicker.kt
index fa809b5480..aa2575d996 100644
--- a/core/src/main/java/info/nightscout/androidaps/utils/ui/MinutesNumberPicker.kt
+++ b/core/src/main/java/info/nightscout/androidaps/utils/ui/MinutesNumberPicker.kt
@@ -13,18 +13,18 @@ class MinutesNumberPicker constructor(context: Context, attrs: AttributeSet? = n
}
override fun updateEditText() {
- if (currentValue == 0.0 && !allowZero) editText?.setText("")
+ if (currentValue == 0.0 && !allowZero) binding.editText.setText("")
else {
- if (focused) editText?.setText(DecimalFormat("0").format(currentValue))
+ if (focused) binding.editText.setText(DecimalFormat("0").format(currentValue))
else {
val hours = (currentValue / 60).toInt()
val minutes = (currentValue - hours * 60).toInt()
val formatted =
if (hours != 0) String.format(context.getString(R.string.format_hour_minute), hours, minutes)
else DecimalFormat("0").format(currentValue)
- editText?.setText(formatted)
+ binding.editText.setText(formatted)
}
}
}
-}
\ No newline at end of file
+}
diff --git a/core/src/main/java/info/nightscout/androidaps/utils/ui/NumberPicker.kt b/core/src/main/java/info/nightscout/androidaps/utils/ui/NumberPicker.kt
index f69da340a6..b4cecb63f1 100644
--- a/core/src/main/java/info/nightscout/androidaps/utils/ui/NumberPicker.kt
+++ b/core/src/main/java/info/nightscout/androidaps/utils/ui/NumberPicker.kt
@@ -19,10 +19,10 @@ import android.view.accessibility.AccessibilityEvent
import android.view.accessibility.AccessibilityManager
import android.view.inputmethod.InputMethodManager
import android.widget.Button
-import android.widget.EditText
-import android.widget.ImageButton
import android.widget.LinearLayout
import info.nightscout.androidaps.core.R
+import info.nightscout.androidaps.core.databinding.NumberPickerLayoutBinding
+import info.nightscout.androidaps.extensions.toVisibility
import info.nightscout.androidaps.utils.ToastUtils
import info.nightscout.shared.SafeParse
import java.text.NumberFormat
@@ -39,9 +39,6 @@ open class NumberPicker(context: Context, attrs: AttributeSet? = null) : LinearL
fun onValueChanged(value: Double)
}
- var editText: EditText? = null
- private var minusButton: ImageButton? = null
- private var plusButton: ImageButton? = null
var currentValue = 0.0
var minValue = 0.0
var maxValue = 1.0
@@ -54,6 +51,7 @@ open class NumberPicker(context: Context, attrs: AttributeSet? = null) : LinearL
private var mUpdater: ScheduledExecutorService? = null
private var mOnValueChangedListener: OnValueChangedListener? = null
private var mCustomContentDescription: String? = null
+ protected lateinit var binding: NumberPickerViewAdapter
private var mHandler: Handler = Handler(Looper.getMainLooper(), Handler.Callback { msg: Message ->
when (msg.what) {
@@ -90,6 +88,8 @@ open class NumberPicker(context: Context, attrs: AttributeSet? = null) : LinearL
}
}
+ val editTextId get() = binding.editText.id
+
var customContentDescription: String?
get() = mCustomContentDescription
set(value) {
@@ -98,36 +98,36 @@ open class NumberPicker(context: Context, attrs: AttributeSet? = null) : LinearL
}
protected open fun inflate(context: Context) {
- LayoutInflater.from(context).inflate(R.layout.number_picker_layout, this, true)
+ val inflater = LayoutInflater.from(context)
+ val bindLayout = NumberPickerLayoutBinding.inflate(inflater, this, true)
+ binding = NumberPickerViewAdapter.getBinding(bindLayout)
}
protected fun initialize(context: Context) {
// set layout view
inflate(context)
- // init ui components
- minusButton = findViewById(R.id.decrement)
- minusButton?.id = generateViewId()
- plusButton = findViewById(R.id.increment)
- plusButton?.id = generateViewId()
- editText = findViewById(R.id.display)
- editText?.id = generateViewId()
- minusButton?.setOnTouchListener(this)
- minusButton?.setOnKeyListener(this)
- minusButton?.setOnClickListener(this)
- plusButton?.setOnTouchListener(this)
- plusButton?.setOnKeyListener(this)
- plusButton?.setOnClickListener(this)
+ binding.minusButton.id = generateViewId()
+ binding.plusButton.id = generateViewId()
+ binding.editText.id = generateViewId()
+ binding.minusButton.setOnTouchListener(this)
+ binding.minusButton.setOnKeyListener(this)
+ binding.minusButton.setOnClickListener(this)
+ binding.plusButton.setOnTouchListener(this)
+ binding.plusButton.setOnKeyListener(this)
+ binding.plusButton.setOnClickListener(this)
setTextWatcher(object : TextWatcher {
override fun beforeTextChanged(s: CharSequence, start: Int, count: Int, after: Int) {}
override fun onTextChanged(s: CharSequence, start: Int, before: Int, count: Int) {}
override fun afterTextChanged(s: Editable) {
- if (focused) currentValue = SafeParse.stringToDouble(editText?.text.toString())
+ if (focused) currentValue = SafeParse.stringToDouble(binding.editText.text.toString())
callValueChangedListener()
- okButton?.visibility = if (currentValue > maxValue || currentValue < minValue) INVISIBLE else VISIBLE
+ val inValid = currentValue > maxValue || currentValue < minValue
+ okButton?.visibility = inValid.not().toVisibility()
+ binding.textInputLayout.error = if (inValid) "invalid" else null
}
})
- editText?.setOnFocusChangeListener { _: View?, hasFocus: Boolean ->
+ binding.editText.setOnFocusChangeListener { _: View?, hasFocus: Boolean ->
focused = hasFocus
if (!focused) value // check min/max
updateEditText()
@@ -137,8 +137,8 @@ open class NumberPicker(context: Context, attrs: AttributeSet? = null) : LinearL
fun updateA11yDescription() {
val description = if (mCustomContentDescription != null) mCustomContentDescription else ""
- minusButton?.contentDescription = context.getString(R.string.a11y_min_button_description, description, formatter?.format(this.step))
- plusButton?.contentDescription = context.getString(R.string.a11y_plus_button_description, description, formatter?.format(this.step))
+ binding.minusButton.contentDescription = context.getString(R.string.a11y_min_button_description, description, formatter?.format(this.step))
+ binding.plusButton.contentDescription = context.getString(R.string.a11y_plus_button_description, description, formatter?.format(this.step))
}
fun announceValue() {
@@ -158,7 +158,7 @@ open class NumberPicker(context: Context, attrs: AttributeSet? = null) : LinearL
}
override fun setTag(tag: Any) {
- editText?.tag = tag
+ binding.editText.tag = tag
}
fun setOnValueChangedListener(onValueChangedListener: OnValueChangedListener?) {
@@ -167,10 +167,10 @@ open class NumberPicker(context: Context, attrs: AttributeSet? = null) : LinearL
fun setTextWatcher(textWatcher: TextWatcher) {
watcher = textWatcher
- editText?.addTextChangedListener(textWatcher)
- editText?.onFocusChangeListener = OnFocusChangeListener { _: View?, hasFocus: Boolean ->
+ binding.editText.addTextChangedListener(textWatcher)
+ binding.editText.onFocusChangeListener = OnFocusChangeListener { _: View?, hasFocus: Boolean ->
if (!hasFocus) {
- currentValue = SafeParse.stringToDouble(editText?.text.toString())
+ currentValue = SafeParse.stringToDouble(binding.editText.text.toString())
if (currentValue > maxValue) {
currentValue = maxValue
ToastUtils.showToastInUiThread(context, context.getString(R.string.youareonallowedlimit))
@@ -189,11 +189,11 @@ open class NumberPicker(context: Context, attrs: AttributeSet? = null) : LinearL
fun setParams(initValue: Double, minValue: Double, maxValue: Double, step: Double, formatter: NumberFormat?, allowZero: Boolean, okButton: Button?, textWatcher: TextWatcher?) {
if (watcher != null) {
- editText?.removeTextChangedListener(watcher)
+ binding.editText.removeTextChangedListener(watcher)
}
setParams(initValue, minValue, maxValue, step, formatter, allowZero, okButton)
watcher = textWatcher
- if (textWatcher != null) editText?.addTextChangedListener(textWatcher)
+ if (textWatcher != null) binding.editText.addTextChangedListener(textWatcher)
}
fun setParams(initValue: Double, minValue: Double, maxValue: Double, step: Double, formatter: NumberFormat?, allowZero: Boolean, okButton: Button?) {
@@ -205,11 +205,11 @@ open class NumberPicker(context: Context, attrs: AttributeSet? = null) : LinearL
this.allowZero = allowZero
callValueChangedListener()
this.okButton = okButton
- editText?.keyListener = DigitsKeyListenerWithComma.getInstance(minValue < 0, step != round(step))
- if (watcher != null) editText?.removeTextChangedListener(watcher)
+ binding.editText.keyListener = DigitsKeyListenerWithComma.getInstance(minValue < 0, step != round(step))
+ if (watcher != null) binding.editText.removeTextChangedListener(watcher)
updateA11yDescription()
updateEditText()
- if (watcher != null) editText?.addTextChangedListener(watcher)
+ if (watcher != null) binding.editText.addTextChangedListener(watcher)
}
var value: Double
@@ -225,7 +225,7 @@ open class NumberPicker(context: Context, attrs: AttributeSet? = null) : LinearL
return currentValue
}
set(value) {
- if (watcher != null) editText?.removeTextChangedListener(watcher)
+ if (watcher != null) binding.editText.removeTextChangedListener(watcher)
currentValue = value
if (currentValue > maxValue) {
currentValue = maxValue
@@ -237,11 +237,11 @@ open class NumberPicker(context: Context, attrs: AttributeSet? = null) : LinearL
}
callValueChangedListener()
updateEditText()
- if (watcher != null) editText?.addTextChangedListener(watcher)
+ if (watcher != null) binding.editText.addTextChangedListener(watcher)
}
val text: String
- get() = editText?.text.toString()
+ get() = binding.editText.text.toString()
private fun inc(multiplier: Int) {
currentValue += step * multiplier
@@ -266,7 +266,7 @@ open class NumberPicker(context: Context, attrs: AttributeSet? = null) : LinearL
}
protected open fun updateEditText() {
- if (currentValue == 0.0 && !allowZero) editText?.setText("") else editText?.setText(formatter?.format(currentValue))
+ if (currentValue == 0.0 && !allowZero) binding.editText.setText("") else binding.editText.setText(formatter?.format(currentValue))
}
private fun callValueChangedListener() {
@@ -294,9 +294,9 @@ open class NumberPicker(context: Context, attrs: AttributeSet? = null) : LinearL
override fun onClick(v: View) {
if (mUpdater == null) {
val imm = context.getSystemService(Service.INPUT_METHOD_SERVICE) as InputMethodManager
- imm.hideSoftInputFromWindow(editText?.windowToken, 0)
- editText?.clearFocus()
- if (v === plusButton) {
+ imm.hideSoftInputFromWindow(binding.editText.windowToken, 0)
+ binding.editText.clearFocus()
+ if (v === binding.plusButton) {
inc(1)
} else {
dec(1)
@@ -312,7 +312,7 @@ open class NumberPicker(context: Context, attrs: AttributeSet? = null) : LinearL
if (isKeyOfInterest && isReleased) {
stopUpdating()
} else if (isKeyOfInterest && isPressed) {
- startUpdating(v === plusButton)
+ startUpdating(v === binding.plusButton)
}
return false
}
@@ -323,7 +323,7 @@ open class NumberPicker(context: Context, attrs: AttributeSet? = null) : LinearL
if (isReleased) {
stopUpdating()
} else if (isPressed) {
- startUpdating(v === plusButton)
+ startUpdating(v === binding.plusButton)
}
return false
}
@@ -339,7 +339,8 @@ open class NumberPicker(context: Context, attrs: AttributeSet? = null) : LinearL
context.theme.obtainStyledAttributes(
attrs,
R.styleable.NumberPicker,
- 0, 0).apply {
+ 0, 0
+ ).apply {
try {
mCustomContentDescription = getString(R.styleable.NumberPicker_customContentDescription)
diff --git a/app/src/main/java/info/nightscout/androidaps/utils/ui/NumberPickerVertical.kt b/core/src/main/java/info/nightscout/androidaps/utils/ui/NumberPickerVertical.kt
similarity index 51%
rename from app/src/main/java/info/nightscout/androidaps/utils/ui/NumberPickerVertical.kt
rename to core/src/main/java/info/nightscout/androidaps/utils/ui/NumberPickerVertical.kt
index 4f26a9b3b1..ec94040cdb 100644
--- a/app/src/main/java/info/nightscout/androidaps/utils/ui/NumberPickerVertical.kt
+++ b/core/src/main/java/info/nightscout/androidaps/utils/ui/NumberPickerVertical.kt
@@ -3,11 +3,13 @@ package info.nightscout.androidaps.utils.ui
import android.content.Context
import android.util.AttributeSet
import android.view.LayoutInflater
-import info.nightscout.androidaps.R
+import info.nightscout.androidaps.core.databinding.NumberPickerLayoutVerticalBinding
class NumberPickerVertical(context: Context, attrs: AttributeSet? = null) : NumberPicker(context, attrs) {
override fun inflate(context: Context) {
- LayoutInflater.from(context).inflate(R.layout.number_picker_layout_vertical, this, true)
+ val inflater = LayoutInflater.from(context)
+ val bindLayout = NumberPickerLayoutVerticalBinding.inflate(inflater, this, true)
+ binding = NumberPickerViewAdapter(null, bindLayout)
}
-}
\ No newline at end of file
+}
diff --git a/core/src/main/java/info/nightscout/androidaps/utils/ui/NumberPickerViewAdapter.kt b/core/src/main/java/info/nightscout/androidaps/utils/ui/NumberPickerViewAdapter.kt
new file mode 100644
index 0000000000..43ab2e2f72
--- /dev/null
+++ b/core/src/main/java/info/nightscout/androidaps/utils/ui/NumberPickerViewAdapter.kt
@@ -0,0 +1,36 @@
+package info.nightscout.androidaps.utils.ui
+
+import info.nightscout.androidaps.core.databinding.NumberPickerLayoutBinding
+import info.nightscout.androidaps.core.databinding.NumberPickerLayoutVerticalBinding
+
+/**
+ * NumberPickerViewAdapter binds both NumberPickerLayoutBinding and NumberPickerLayoutVerticalBinding shared attributes to one common view adapter.
+ * Requires at least one of the ViewBinding as a parameter. Recommended to use the factory object to create the binding.
+ */
+class NumberPickerViewAdapter(
+ val nH: NumberPickerLayoutBinding?,
+ val nV: NumberPickerLayoutVerticalBinding?,
+) {
+
+ init {
+ if (nH == null && nV == null) {
+ throw IllegalArgumentException("Require at least on Binding parameter")
+ }
+ }
+
+ val editText = nH?.display ?: nV?.display ?: throw IllegalArgumentException("Missing require View Binding parameter display")
+ val minusButton = nH?.decrement ?: nV?.decrement ?: throw IllegalArgumentException("require at least on Binding parameter decrement")
+ val plusButton = nH?.increment ?: nV?.increment ?: throw IllegalArgumentException("require at least on Binding parameter increment")
+ var textInputLayout = nH?.textInputLayout ?: nV?.textInputLayout ?: throw IllegalArgumentException("require at least on Binding parameter textInputLayout")
+
+ companion object {
+
+ fun getBinding(bindLayout: NumberPickerLayoutBinding): NumberPickerViewAdapter {
+ return NumberPickerViewAdapter(bindLayout, null)
+ }
+
+ fun getBinding(bindLayout: NumberPickerLayoutVerticalBinding): NumberPickerViewAdapter {
+ return NumberPickerViewAdapter(null, bindLayout)
+ }
+ }
+}
diff --git a/core/src/main/java/info/nightscout/androidaps/utils/ui/SingleClickButton.kt b/core/src/main/java/info/nightscout/androidaps/utils/ui/SingleClickButton.kt
index 2caae9b808..ef336c2a52 100644
--- a/core/src/main/java/info/nightscout/androidaps/utils/ui/SingleClickButton.kt
+++ b/core/src/main/java/info/nightscout/androidaps/utils/ui/SingleClickButton.kt
@@ -2,12 +2,11 @@ package info.nightscout.androidaps.utils.ui
import android.content.Context
import android.util.AttributeSet
-import androidx.appcompat.R
-import androidx.appcompat.widget.AppCompatButton
+import info.nightscout.androidaps.core.R
import info.nightscout.shared.logging.StacktraceLoggerWrapper
import org.slf4j.Logger
-class SingleClickButton @JvmOverloads constructor(context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = R.attr.buttonStyle) : AppCompatButton(context, attrs, defStyleAttr) {
+class SingleClickButton @JvmOverloads constructor(context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = R.style.Widget_MaterialComponents_Button) : com.google.android.material.button.MaterialButton(context, attrs, defStyleAttr) {
override fun performClick(): Boolean = guardClick { super.performClick() }
override fun callOnClick(): Boolean = guardClick { super.callOnClick() }
diff --git a/core/src/main/java/info/nightscout/androidaps/utils/userEntry/UserEntryMapper.kt b/core/src/main/java/info/nightscout/androidaps/utils/userEntry/UserEntryMapper.kt
index fb667823e4..9f2333fbd9 100644
--- a/core/src/main/java/info/nightscout/androidaps/utils/userEntry/UserEntryMapper.kt
+++ b/core/src/main/java/info/nightscout/androidaps/utils/userEntry/UserEntryMapper.kt
@@ -109,6 +109,7 @@ class UserEntryMapper {
Actions (UserEntry.Sources.Actions),
Automation (UserEntry.Sources.Automation),
BG (UserEntry.Sources.BG),
+ Aidex (UserEntry.Sources.Aidex),
Dexcom (UserEntry.Sources.Dexcom),
Eversense (UserEntry.Sources.Eversense),
Glimp (UserEntry.Sources.Glimp),
@@ -150,4 +151,4 @@ class UserEntryMapper {
Unknown(UserEntry.Sources.Unknown)
;
}
-}
\ No newline at end of file
+}
diff --git a/core/src/main/java/info/nightscout/androidaps/utils/userEntry/UserEntryPresentationHelper.kt b/core/src/main/java/info/nightscout/androidaps/utils/userEntry/UserEntryPresentationHelper.kt
index f21deec9d1..9f2daa57b4 100644
--- a/core/src/main/java/info/nightscout/androidaps/utils/userEntry/UserEntryPresentationHelper.kt
+++ b/core/src/main/java/info/nightscout/androidaps/utils/userEntry/UserEntryPresentationHelper.kt
@@ -36,8 +36,8 @@ class UserEntryPresentationHelper @Inject constructor(
ColorGroup.Loop -> R.color.loopClosed
ColorGroup.Careportal -> R.color.high
ColorGroup.Pump -> R.color.loopDisconnected
- ColorGroup.Aaps -> R.color.defaulttext
- else -> R.color.defaulttext
+ ColorGroup.Aaps -> R.color.defaultText
+ else -> R.color.defaultText
}
fun iconId(source: Sources): Int = when (source) {
@@ -63,6 +63,7 @@ class UserEntryPresentationHelper @Inject constructor(
Sources.Actions -> R.drawable.ic_action
Sources.Automation -> R.drawable.ic_automation
Sources.BG -> R.drawable.ic_generic_cgm
+ Sources.Aidex -> R.drawable.ic_blooddrop_48
Sources.Dexcom -> R.drawable.ic_dexcom_g6
Sources.Eversense -> R.drawable.ic_eversense
Sources.Glimp -> R.drawable.ic_glimp
@@ -226,4 +227,4 @@ class UserEntryPresentationHelper @Inject constructor(
private fun String.addWithSeparator(add: Any) =
this + (if (this.isBlank()) "" else " / ") + add.toString()
-}
\ No newline at end of file
+}
diff --git a/core/src/main/res/color/mtrl_btn_bg_color_selector_grey.xml b/core/src/main/res/color/mtrl_btn_bg_color_selector_grey.xml
new file mode 100644
index 0000000000..031b4a9285
--- /dev/null
+++ b/core/src/main/res/color/mtrl_btn_bg_color_selector_grey.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/core/src/main/res/drawable-hdpi/background_darkgray.xml b/core/src/main/res/drawable-hdpi/background_darkgray.xml
deleted file mode 100644
index 4d5138556b..0000000000
--- a/core/src/main/res/drawable-hdpi/background_darkgray.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/core/src/main/res/drawable-hdpi/background_input_border.xml b/core/src/main/res/drawable-hdpi/background_input_border.xml
new file mode 100644
index 0000000000..fb775c3f6f
--- /dev/null
+++ b/core/src/main/res/drawable-hdpi/background_input_border.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
diff --git a/core/src/main/res/drawable-hdpi/background_total.xml b/core/src/main/res/drawable-hdpi/background_total.xml
deleted file mode 100644
index e37fbd2035..0000000000
--- a/core/src/main/res/drawable-hdpi/background_total.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
-
-
-
-
\ No newline at end of file
diff --git a/core/src/main/res/drawable-hdpi/border_gray.xml b/core/src/main/res/drawable-hdpi/border_gray.xml
deleted file mode 100644
index a67f54bf90..0000000000
--- a/core/src/main/res/drawable-hdpi/border_gray.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-
-
- -
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/core/src/main/res/drawable/ic_cp_pump_canula.xml b/core/src/main/res/drawable/ic_cp_pump_canula.xml
index 7e8bce4d17..b37a3c6903 100644
--- a/core/src/main/res/drawable/ic_cp_pump_canula.xml
+++ b/core/src/main/res/drawable/ic_cp_pump_canula.xml
@@ -5,5 +5,5 @@
android:viewportHeight="24">
+ android:fillColor="?attr/pumpCannulaColor"/>
diff --git a/core/src/main/res/drawable/ic_cp_stats.xml b/core/src/main/res/drawable/ic_cp_stats.xml
index 81b3952eb4..a95eef3884 100644
--- a/core/src/main/res/drawable/ic_cp_stats.xml
+++ b/core/src/main/res/drawable/ic_cp_stats.xml
@@ -7,24 +7,24 @@
android:pathData="M5.719,19.125L5.719,11.828"
android:strokeWidth="2.2677"
android:fillColor="#00000000"
- android:strokeColor="#FEAF05"
+ android:strokeColor="?attr/statsColor"
android:strokeLineCap="round"/>
diff --git a/core/src/main/res/drawable/ic_temptarget_high.xml b/core/src/main/res/drawable/ic_temptarget_high.xml
index ae0e9799ca..8f0cbfc254 100644
--- a/core/src/main/res/drawable/ic_temptarget_high.xml
+++ b/core/src/main/res/drawable/ic_temptarget_high.xml
@@ -5,7 +5,7 @@
android:viewportHeight="24">
+ android:fillColor="?attr/tempTargetBgInRange"/>
diff --git a/core/src/main/res/layout/activity_tdd_stats.xml b/core/src/main/res/layout/activity_tdd_stats.xml
index b405ab8a5b..e73f296e22 100644
--- a/core/src/main/res/layout/activity_tdd_stats.xml
+++ b/core/src/main/res/layout/activity_tdd_stats.xml
@@ -146,7 +146,6 @@
-
-
\ No newline at end of file
+
diff --git a/core/src/main/res/layout/datetime.xml b/core/src/main/res/layout/datetime.xml
index bd9415d21d..507595174d 100644
--- a/core/src/main/res/layout/datetime.xml
+++ b/core/src/main/res/layout/datetime.xml
@@ -1,8 +1,10 @@
+ android:orientation="horizontal"
+ android:paddingTop="2dp">
@@ -21,15 +23,22 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
+ android:layout_marginEnd="20dp"
+ android:background="@drawable/background_input_border"
+ android:clickable="true"
+ android:foreground="?attr/selectableItemBackgroundBorderless"
android:padding="10dp"
- android:text="2017/05/05" />
+ tools:text="2017/05/05" />
+ tools:text="08:20pm" />
diff --git a/core/src/main/res/layout/dialog_alert_custom_title.xml b/core/src/main/res/layout/dialog_alert_custom_title.xml
index 624b970c12..0c0641954d 100644
--- a/core/src/main/res/layout/dialog_alert_custom_title.xml
+++ b/core/src/main/res/layout/dialog_alert_custom_title.xml
@@ -18,6 +18,7 @@
android:id="@+id/alertdialog_icon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
+ android:importantForAccessibility="no"
app:tint="?dialogTitleIconTint" />
-
\ No newline at end of file
+
diff --git a/core/src/main/res/layout/dialog_bolusprogress.xml b/core/src/main/res/layout/dialog_bolusprogress.xml
index a0da8dbf80..b2fefbbecd 100644
--- a/core/src/main/res/layout/dialog_bolusprogress.xml
+++ b/core/src/main/res/layout/dialog_bolusprogress.xml
@@ -25,11 +25,12 @@
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:layout_gravity="center"
- android:layout_marginLeft="10dp"
- android:layout_marginRight="10dp"
+ android:layout_marginStart="10dp"
+ android:layout_marginEnd="10dp"
android:layout_toEndOf="@id/header_icon"
android:textAlignment="center"
- android:textAppearance="?android:attr/textAppearanceLarge" />
+ android:textAppearance="?android:attr/textAppearanceLarge"
+ tools:text="Going to deliver: 4.00 U" />
@@ -45,8 +46,9 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
- android:paddingLeft="10dp"
- android:paddingRight="10dp" />
+ android:paddingStart="10dp"
+ android:paddingEnd="10dp"
+ tools:text="Delivering 1.9U"/>
+ android:minHeight="3dp"
+ tools:progress="50"/>
@@ -44,8 +44,8 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
- android:paddingLeft="10dp"
- android:paddingRight="10dp"
+ android:paddingStart="10dp"
+ android:paddingEnd="10dp"
android:textAppearance="@style/TextAppearance.AppCompat.Small" />
diff --git a/core/src/main/res/layout/dialog_profileviewer.xml b/core/src/main/res/layout/dialog_profileviewer.xml
index 63205636d9..791a5cdee3 100644
--- a/core/src/main/res/layout/dialog_profileviewer.xml
+++ b/core/src/main/res/layout/dialog_profileviewer.xml
@@ -33,8 +33,8 @@
android:layout_centerInParent="true"
android:layout_centerHorizontal="true"
android:layout_gravity="center"
- android:layout_marginLeft="10dp"
- android:layout_marginRight="10dp"
+ android:layout_marginStart="10dp"
+ android:layout_marginEnd="10dp"
android:layout_toEndOf="@id/header_icon"
android:textAlignment="center"
android:textAppearance="?android:attr/textAppearanceLarge" />
@@ -110,9 +110,9 @@
@@ -155,9 +155,9 @@
@@ -200,9 +200,9 @@
@@ -251,9 +251,9 @@
@@ -302,9 +302,9 @@
@@ -388,9 +388,9 @@
diff --git a/core/src/main/res/layout/maintenance_import_list_item.xml b/core/src/main/res/layout/maintenance_import_list_item.xml
index 50859ad4c5..d7e8cd1f18 100644
--- a/core/src/main/res/layout/maintenance_import_list_item.xml
+++ b/core/src/main/res/layout/maintenance_import_list_item.xml
@@ -1,5 +1,6 @@
-
@@ -28,7 +27,8 @@
android:layout_width="match_parent"
android:layout_height="match_parent"
android:baselineAligned="true"
- android:orientation="horizontal">
+ android:orientation="horizontal"
+ tools:ignore="UseCompoundDrawables">
@@ -47,6 +48,7 @@
android:layout_weight="1"
android:ellipsize="none"
android:maxLines="2"
+ android:paddingStart="0dp"
android:paddingEnd="10dp"
android:scrollHorizontally="false"
android:text="File name here"
@@ -54,7 +56,6 @@
android:textColor="?attr/importListFileNameColor"
tools:ignore="HardcodedText" />
-
-
+ android:orientation="horizontal"
+ tools:ignore="UseCompoundDrawables">
@@ -111,17 +112,14 @@
android:textColor="?attr/importListAdditionalInfoColor"
tools:ignore="HardcodedText" />
-
-
-
diff --git a/core/src/main/res/layout/number_picker_layout.xml b/core/src/main/res/layout/number_picker_layout.xml
index 0ebb24a3ba..8d57b2f6e2 100644
--- a/core/src/main/res/layout/number_picker_layout.xml
+++ b/core/src/main/res/layout/number_picker_layout.xml
@@ -1,34 +1,60 @@
-
+ tools:context="info.nightscout.androidaps.utils.ui.NumberPicker">
+
+
+
+
+
+
-
-
+ android:layout_width="40dp"
+ android:layout_height="0dp"
+ android:layout_marginStart="-2dp"
+ android:layout_marginTop="-4dp"
+ android:layout_marginBottom="-3.7dp"
+ android:contentDescription="@string/a11y_min_button_description"
+ android:src="@drawable/ic_minus"
+ app:layout_constraintBottom_toBottomOf="parent"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintTop_toTopOf="parent" />
+ android:layout_width="40dp"
+ android:layout_height="0dp"
+ android:layout_marginTop="-4dp"
+ android:layout_marginEnd="-2dp"
+ android:layout_marginBottom="-3.7dp"
+ android:contentDescription="@string/a11y_plus_button_description"
+ android:src="@drawable/ic_plus"
+ app:layout_constraintBottom_toBottomOf="parent"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintTop_toTopOf="parent" />
-
+
diff --git a/core/src/main/res/layout/number_picker_layout_vertical.xml b/core/src/main/res/layout/number_picker_layout_vertical.xml
new file mode 100644
index 0000000000..adcc762d28
--- /dev/null
+++ b/core/src/main/res/layout/number_picker_layout_vertical.xml
@@ -0,0 +1,61 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/core/src/main/res/layout/passwordprompt.xml b/core/src/main/res/layout/passwordprompt.xml
index ea4209edc3..05c300a702 100644
--- a/core/src/main/res/layout/passwordprompt.xml
+++ b/core/src/main/res/layout/passwordprompt.xml
@@ -21,9 +21,11 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/password_hint"
+ android:importantForAutofill="no"
android:inputType="textPassword">
+
-
\ No newline at end of file
+
diff --git a/core/src/main/res/layout/toast.xml b/core/src/main/res/layout/toast.xml
index 32175b4065..8b79189760 100644
--- a/core/src/main/res/layout/toast.xml
+++ b/core/src/main/res/layout/toast.xml
@@ -11,7 +11,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
- android:layout_marginLeft="6dp"
+ android:layout_marginStart="6dp"
android:layout_marginTop="6dp"
android:layout_marginBottom="6dp"
app:srcCompat="@drawable/ic_toast_check"
@@ -22,12 +22,13 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
- android:layout_marginLeft="6dp"
+ android:layout_marginStart="6dp"
android:layout_marginTop="4dp"
- android:layout_marginRight="18dp"
+ android:layout_marginEnd="18dp"
android:layout_marginBottom="4dp"
- android:text="Toast goes here..."
android:textColor="?attr/toastBaseTextColor"
android:textSize="18sp"
- tools:ignore="HardcodedText,RtlHardcoded" />
-
\ No newline at end of file
+ tools:ignore="RtlHardcoded"
+ tools:text="Toast goes here..." />
+
+
diff --git a/core/src/main/res/values-hr-rHR/strings.xml b/core/src/main/res/values-hr-rHR/strings.xml
index 7512676d61..9e5015b7af 100644
--- a/core/src/main/res/values-hr-rHR/strings.xml
+++ b/core/src/main/res/values-hr-rHR/strings.xml
@@ -13,7 +13,6 @@
-
diff --git a/core/src/main/res/values-iw-rIL/strings.xml b/core/src/main/res/values-iw-rIL/strings.xml
index 5f6345760b..4389e729a8 100644
--- a/core/src/main/res/values-iw-rIL/strings.xml
+++ b/core/src/main/res/values-iw-rIL/strings.xml
@@ -455,6 +455,14 @@
בולוס OK
המשאבה צומדה
לחצן ריענון Insight
+ %1$.0f%%
+ בזאלי
+ בזאלי %
+ %1$d נבחרו
+ מיין
+ פריטים שהוסרו
+ מיין פריטים
+ הסר פריטים נבחרים
- %1$d יום
- %1$d ימים
diff --git a/core/src/main/res/values-night/colors.xml b/core/src/main/res/values-night/colors.xml
index dabe05793a..23f2ee9a9a 100644
--- a/core/src/main/res/values-night/colors.xml
+++ b/core/src/main/res/values-night/colors.xml
@@ -5,7 +5,6 @@
#96CAF2
#000000
#40bbaa
- #ffffff
#808080
#d8d8d8
#212121
@@ -24,8 +23,8 @@
#1c171c
#FFFFFF
- #000000
- #B3FFFFFF
+ #000000
+ #B3FFFFFF
#262626
@@ -61,9 +60,9 @@
#FF000000
#C803A9F4
#FFFF5555
- #BBBBBB
+ #BBBBBB
-
+
@color/buttonBackground
@@ -71,7 +70,6 @@
#505050
#00ffff
-
#939393
#00C03E
@@ -80,7 +78,7 @@
#FF1313
- #00FF00
+ #00FF00
#FF0000
#FFFF00
#1e88e5
@@ -93,6 +91,7 @@
#E83258
#00FFFF
#00FFFF
+ #008585
#5a595b
#D000FF00
@@ -163,15 +162,14 @@
#FFFFFF
#d3f166
#00EEEE
- #FFFFFF00
- #FFFF00FF
+ #FFFFFF00
+ #FFFF00FF
#FFFF00
- #FF666666
#FF0000
#7484E2
- #2800FF00
- #C83F51B5
- #757575
+ #4000FF00
+ #C83F51B5
+ #757575
#ff1a1a
#77dd77
#66FC0000
@@ -184,8 +182,6 @@
#ffffbb33
#ffff4444
- #779ECB
-
#f4d700
#67dfe8
#67dfe8
@@ -197,21 +193,25 @@
#FFDD7792
#ca77dd
+ #779ECB
#FF5722
+ #67e86a
+ #4CAF50
+ #FF9800
#de7550
#25912e
- #c8666666
- #7200FF00
- #72FF0000
- #72000000
+ #c8666666
+ #7200FF00
+ #72FF0000
+ #72000000
#000000
#FEAF05
#CF8BFE
- #67dfe8
+ #67dfe8
#67dfe8
#36FF00
#FEAF05
@@ -219,23 +219,24 @@
#FEAF05
#67DFE8
#6AE86D
+ #FEAF05
- #323232
- #424242
+ #323232
+ #424242
#3C3C3C
#666666
- #999999
+ #999999
#8c8c8c
#72000000
#c8666666
- #B2B2B2
- #4dB1B1B1
+ #B2B2B2
+ #4dB1B1B1
#33969696
#EBEBEA
- #000000
- #B3FFFFFF
+ #000000
+ #B3FFFFFF
#FFFF00
diff --git a/core/src/main/res/values-night/styles.xml b/core/src/main/res/values-night/styles.xml
index bd4e0d8a15..87e5b2cdd8 100644
--- a/core/src/main/res/values-night/styles.xml
+++ b/core/src/main/res/values-night/styles.xml
@@ -4,25 +4,32 @@
+
+
+
+
+
+
48dp
14sp
@@ -281,45 +305,12 @@
- @null
- @drawable/material_button_background
- @dimen/material_button_min_width
- - @dimen/material_button_text_padding_horizontal
- - @dimen/material_button_text_padding_horizontal
+ - @dimen/material_button_text_padding_horizontal
+ - @dimen/material_button_text_padding_horizontal
- @color/okButtonText
- true
-
-
-
-
-
-
-
@@ -328,8 +319,7 @@
5dp
+
+
+
+
+
+
48dp
14sp
@@ -302,41 +319,12 @@
- @null
- @drawable/material_button_background
- @dimen/material_button_min_width
- - @dimen/material_button_text_padding_horizontal
- - @dimen/material_button_text_padding_horizontal
+ - @dimen/material_button_text_padding_horizontal
+ - @dimen/material_button_text_padding_horizontal
- @color/okButtonText
- true
-
-
-
-
-
-
@@ -345,8 +333,7 @@
5dp