Improve screenreader accesibility
This commit is contained in:
parent
7ea3aeba72
commit
e1e7b4a7a8
16 changed files with 244 additions and 116 deletions
|
@ -102,4 +102,11 @@ class BgQualityCheckPlugin @Inject constructor(
|
||||||
State.RECALCULATED -> R.drawable.ic_baseline_warning_24_yellow
|
State.RECALCULATED -> R.drawable.ic_baseline_warning_24_yellow
|
||||||
State.DOUBLED -> R.drawable.ic_baseline_warning_24_red
|
State.DOUBLED -> R.drawable.ic_baseline_warning_24_red
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun stateDescription(): String =
|
||||||
|
when (state) {
|
||||||
|
State.RECALCULATED -> rh.gs(R.string.a11_bg_quality_recalculated)
|
||||||
|
State.DOUBLED -> rh.gs(R.string.a11_bg_quality_doubles)
|
||||||
|
else -> ""
|
||||||
|
}
|
||||||
}
|
}
|
|
@ -128,14 +128,29 @@ class OverviewData @Inject constructor(
|
||||||
|
|
||||||
var lastBg: GlucoseValue? = null
|
var lastBg: GlucoseValue? = null
|
||||||
|
|
||||||
val lastBgColor: Int
|
val isLow: Boolean
|
||||||
get() = lastBg?.let { lastBg ->
|
get() = lastBg?.let { lastBg ->
|
||||||
when {
|
lastBg.valueToUnits(profileFunction.getUnits()) < defaultValueHelper.determineLowLine()
|
||||||
lastBg.valueToUnits(profileFunction.getUnits()) < defaultValueHelper.determineLowLine() -> rh.gc(R.color.low)
|
} ?: false
|
||||||
lastBg.valueToUnits(profileFunction.getUnits()) > defaultValueHelper.determineHighLine() -> rh.gc(R.color.high)
|
|
||||||
else -> rh.gc(R.color.inrange)
|
val isHigh: Boolean
|
||||||
}
|
get() = lastBg?.let { lastBg ->
|
||||||
} ?: rh.gc(R.color.inrange)
|
lastBg.valueToUnits(profileFunction.getUnits()) > defaultValueHelper.determineHighLine()
|
||||||
|
} ?: false
|
||||||
|
|
||||||
|
val lastBgColor: Int
|
||||||
|
get() = when {
|
||||||
|
isLow -> rh.gc(R.color.low)
|
||||||
|
isHigh -> rh.gc(R.color.high)
|
||||||
|
else -> rh.gc(R.color.inrange)
|
||||||
|
}
|
||||||
|
|
||||||
|
val lastBgDescription: String
|
||||||
|
get() = when {
|
||||||
|
isLow -> rh.gs(R.string.a11y_low)
|
||||||
|
isHigh -> rh.gs(R.string.a11y_high)
|
||||||
|
else -> rh.gs(R.string.a11y_inrange)
|
||||||
|
}
|
||||||
|
|
||||||
val isActualBg: Boolean
|
val isActualBg: Boolean
|
||||||
get() =
|
get() =
|
||||||
|
|
|
@ -8,6 +8,7 @@ import android.content.Intent
|
||||||
import android.graphics.Color
|
import android.graphics.Color
|
||||||
import android.graphics.Paint
|
import android.graphics.Paint
|
||||||
import android.graphics.drawable.AnimationDrawable
|
import android.graphics.drawable.AnimationDrawable
|
||||||
|
import android.os.Build
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.os.Handler
|
import android.os.Handler
|
||||||
import android.os.HandlerThread
|
import android.os.HandlerThread
|
||||||
|
@ -597,24 +598,36 @@ class OverviewFragment : DaggerFragment(), View.OnClickListener, OnLongClickList
|
||||||
|
|
||||||
// aps mode
|
// aps mode
|
||||||
val closedLoopEnabled = constraintChecker.isClosedLoopAllowed()
|
val closedLoopEnabled = constraintChecker.isClosedLoopAllowed()
|
||||||
|
|
||||||
|
fun apsModeSetA11yLabel(stringRes: Int) {
|
||||||
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
|
||||||
|
binding.infoLayout.apsMode.stateDescription = rh.gs(stringRes)
|
||||||
|
} else {
|
||||||
|
binding.infoLayout.apsMode.contentDescription = rh.gs(R.string.apsmode_title) + " " + rh.gs(stringRes)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (config.APS && pump.pumpDescription.isTempBasalCapable) {
|
if (config.APS && pump.pumpDescription.isTempBasalCapable) {
|
||||||
binding.infoLayout.apsMode.visibility = View.VISIBLE
|
binding.infoLayout.apsMode.visibility = View.VISIBLE
|
||||||
binding.infoLayout.timeLayout.visibility = View.GONE
|
binding.infoLayout.timeLayout.visibility = View.GONE
|
||||||
when {
|
when {
|
||||||
(loop as PluginBase).isEnabled() && loop.isSuperBolus -> {
|
(loop as PluginBase).isEnabled() && loop.isSuperBolus -> {
|
||||||
binding.infoLayout.apsMode.setImageResource(R.drawable.ic_loop_superbolus)
|
binding.infoLayout.apsMode.setImageResource(R.drawable.ic_loop_superbolus)
|
||||||
|
apsModeSetA11yLabel(R.string.superbolus)
|
||||||
binding.infoLayout.apsModeText.text = dateUtil.age(loop.minutesToEndOfSuspend() * 60000L, true, rh)
|
binding.infoLayout.apsModeText.text = dateUtil.age(loop.minutesToEndOfSuspend() * 60000L, true, rh)
|
||||||
binding.infoLayout.apsModeText.visibility = View.VISIBLE
|
binding.infoLayout.apsModeText.visibility = View.VISIBLE
|
||||||
}
|
}
|
||||||
|
|
||||||
loop.isDisconnected -> {
|
loop.isDisconnected -> {
|
||||||
binding.infoLayout.apsMode.setImageResource(R.drawable.ic_loop_disconnected)
|
binding.infoLayout.apsMode.setImageResource(R.drawable.ic_loop_disconnected)
|
||||||
|
apsModeSetA11yLabel(R.string.disconnected)
|
||||||
binding.infoLayout.apsModeText.text = dateUtil.age(loop.minutesToEndOfSuspend() * 60000L, true, rh)
|
binding.infoLayout.apsModeText.text = dateUtil.age(loop.minutesToEndOfSuspend() * 60000L, true, rh)
|
||||||
binding.infoLayout.apsModeText.visibility = View.VISIBLE
|
binding.infoLayout.apsModeText.visibility = View.VISIBLE
|
||||||
}
|
}
|
||||||
|
|
||||||
(loop as PluginBase).isEnabled() && loop.isSuspended -> {
|
(loop as PluginBase).isEnabled() && loop.isSuspended -> {
|
||||||
binding.infoLayout.apsMode.setImageResource(R.drawable.ic_loop_paused)
|
binding.infoLayout.apsMode.setImageResource(R.drawable.ic_loop_paused)
|
||||||
|
apsModeSetA11yLabel(R.string.suspendloop_label)
|
||||||
binding.infoLayout.apsModeText.text = dateUtil.age(loop.minutesToEndOfSuspend() * 60000L, true, rh)
|
binding.infoLayout.apsModeText.text = dateUtil.age(loop.minutesToEndOfSuspend() * 60000L, true, rh)
|
||||||
binding.infoLayout.apsModeText.visibility = View.VISIBLE
|
binding.infoLayout.apsModeText.visibility = View.VISIBLE
|
||||||
}
|
}
|
||||||
|
@ -624,8 +637,10 @@ class OverviewFragment : DaggerFragment(), View.OnClickListener, OnLongClickList
|
||||||
if (pump.model() == PumpType.OMNIPOD_EROS || pump.model() == PumpType.OMNIPOD_DASH) {
|
if (pump.model() == PumpType.OMNIPOD_EROS || pump.model() == PumpType.OMNIPOD_DASH) {
|
||||||
// For Omnipod, indicate the pump as disconnected when it's suspended.
|
// For Omnipod, indicate the pump as disconnected when it's suspended.
|
||||||
// The only way to 'reconnect' it, is through the Omnipod tab
|
// The only way to 'reconnect' it, is through the Omnipod tab
|
||||||
|
apsModeSetA11yLabel(R.string.disconnected)
|
||||||
R.drawable.ic_loop_disconnected
|
R.drawable.ic_loop_disconnected
|
||||||
} else {
|
} else {
|
||||||
|
apsModeSetA11yLabel(R.string.pump_paused)
|
||||||
R.drawable.ic_loop_paused
|
R.drawable.ic_loop_paused
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
@ -634,21 +649,25 @@ class OverviewFragment : DaggerFragment(), View.OnClickListener, OnLongClickList
|
||||||
|
|
||||||
(loop as PluginBase).isEnabled() && closedLoopEnabled.value() && loop.isLGS -> {
|
(loop as PluginBase).isEnabled() && closedLoopEnabled.value() && loop.isLGS -> {
|
||||||
binding.infoLayout.apsMode.setImageResource(R.drawable.ic_loop_lgs)
|
binding.infoLayout.apsMode.setImageResource(R.drawable.ic_loop_lgs)
|
||||||
|
apsModeSetA11yLabel(R.string.uel_lgs_loop_mode)
|
||||||
binding.infoLayout.apsModeText.visibility = View.GONE
|
binding.infoLayout.apsModeText.visibility = View.GONE
|
||||||
}
|
}
|
||||||
|
|
||||||
(loop as PluginBase).isEnabled() && closedLoopEnabled.value() -> {
|
(loop as PluginBase).isEnabled() && closedLoopEnabled.value() -> {
|
||||||
binding.infoLayout.apsMode.setImageResource(R.drawable.ic_loop_closed)
|
binding.infoLayout.apsMode.setImageResource(R.drawable.ic_loop_closed)
|
||||||
|
apsModeSetA11yLabel(R.string.closedloop)
|
||||||
binding.infoLayout.apsModeText.visibility = View.GONE
|
binding.infoLayout.apsModeText.visibility = View.GONE
|
||||||
}
|
}
|
||||||
|
|
||||||
(loop as PluginBase).isEnabled() && !closedLoopEnabled.value() -> {
|
(loop as PluginBase).isEnabled() && !closedLoopEnabled.value() -> {
|
||||||
binding.infoLayout.apsMode.setImageResource(R.drawable.ic_loop_open)
|
binding.infoLayout.apsMode.setImageResource(R.drawable.ic_loop_open)
|
||||||
|
apsModeSetA11yLabel(R.string.openloop)
|
||||||
binding.infoLayout.apsModeText.visibility = View.GONE
|
binding.infoLayout.apsModeText.visibility = View.GONE
|
||||||
}
|
}
|
||||||
|
|
||||||
else -> {
|
else -> {
|
||||||
binding.infoLayout.apsMode.setImageResource(R.drawable.ic_loop_disabled)
|
binding.infoLayout.apsMode.setImageResource(R.drawable.ic_loop_disabled)
|
||||||
|
apsModeSetA11yLabel(R.string.disabledloop)
|
||||||
binding.infoLayout.apsModeText.visibility = View.GONE
|
binding.infoLayout.apsModeText.visibility = View.GONE
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -732,6 +751,7 @@ class OverviewFragment : DaggerFragment(), View.OnClickListener, OnLongClickList
|
||||||
binding.infoLayout.bg.setTextColor(overviewData.lastBgColor)
|
binding.infoLayout.bg.setTextColor(overviewData.lastBgColor)
|
||||||
binding.infoLayout.arrow.setImageResource(trendCalculator.getTrendArrow(overviewData.lastBg).directionToIcon())
|
binding.infoLayout.arrow.setImageResource(trendCalculator.getTrendArrow(overviewData.lastBg).directionToIcon())
|
||||||
binding.infoLayout.arrow.setColorFilter(overviewData.lastBgColor)
|
binding.infoLayout.arrow.setColorFilter(overviewData.lastBgColor)
|
||||||
|
binding.infoLayout.arrow.contentDescription = trendCalculator.getTrendDescription(overviewData.lastBg) + " " + overviewData.lastBgDescription
|
||||||
|
|
||||||
val glucoseStatus = glucoseStatusProvider.glucoseStatusData
|
val glucoseStatus = glucoseStatusProvider.glucoseStatusData
|
||||||
if (glucoseStatus != null) {
|
if (glucoseStatus != null) {
|
||||||
|
@ -752,12 +772,14 @@ class OverviewFragment : DaggerFragment(), View.OnClickListener, OnLongClickList
|
||||||
if (!overviewData.isActualBg) binding.infoLayout.bg.paintFlags or Paint.STRIKE_THRU_TEXT_FLAG
|
if (!overviewData.isActualBg) binding.infoLayout.bg.paintFlags or Paint.STRIKE_THRU_TEXT_FLAG
|
||||||
else binding.infoLayout.bg.paintFlags and Paint.STRIKE_THRU_TEXT_FLAG.inv()
|
else binding.infoLayout.bg.paintFlags and Paint.STRIKE_THRU_TEXT_FLAG.inv()
|
||||||
binding.infoLayout.timeAgo.text = dateUtil.minAgo(rh, overviewData.lastBg?.timestamp)
|
binding.infoLayout.timeAgo.text = dateUtil.minAgo(rh, overviewData.lastBg?.timestamp)
|
||||||
|
binding.infoLayout.timeAgo.contentDescription = dateUtil.minAgoLong(rh, overviewData.lastBg?.timestamp)
|
||||||
binding.infoLayout.timeAgoShort.text = "(" + dateUtil.minAgoShort(overviewData.lastBg?.timestamp) + ")"
|
binding.infoLayout.timeAgoShort.text = "(" + dateUtil.minAgoShort(overviewData.lastBg?.timestamp) + ")"
|
||||||
|
|
||||||
val qualityIcon = bgQualityCheckPlugin.icon()
|
val qualityIcon = bgQualityCheckPlugin.icon()
|
||||||
if (qualityIcon != 0) {
|
if (qualityIcon != 0) {
|
||||||
binding.infoLayout.bgQuality.visibility = View.VISIBLE
|
binding.infoLayout.bgQuality.visibility = View.VISIBLE
|
||||||
binding.infoLayout.bgQuality.setImageResource(qualityIcon)
|
binding.infoLayout.bgQuality.setImageResource(qualityIcon)
|
||||||
|
binding.infoLayout.bgQuality.contentDescription = rh.gs(R.string.a11y_bg_quality) + " " + bgQualityCheckPlugin.stateDescription()
|
||||||
binding.infoLayout.bgQuality.setOnClickListener {
|
binding.infoLayout.bgQuality.setOnClickListener {
|
||||||
context?.let { context -> OKDialog.show(context, rh.gs(R.string.data_status), bgQualityCheckPlugin.message) }
|
context?.let { context -> OKDialog.show(context, rh.gs(R.string.data_status), bgQualityCheckPlugin.message) }
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,20 +1,37 @@
|
||||||
package info.nightscout.androidaps.utils
|
package info.nightscout.androidaps.utils
|
||||||
|
|
||||||
|
import info.nightscout.androidaps.R
|
||||||
import info.nightscout.androidaps.database.AppRepository
|
import info.nightscout.androidaps.database.AppRepository
|
||||||
import info.nightscout.androidaps.database.entities.GlucoseValue
|
import info.nightscout.androidaps.database.entities.GlucoseValue
|
||||||
|
import info.nightscout.androidaps.database.entities.GlucoseValue.TrendArrow.*
|
||||||
|
import info.nightscout.androidaps.utils.resources.ResourceHelper
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
import javax.inject.Singleton
|
import javax.inject.Singleton
|
||||||
|
|
||||||
@Singleton
|
@Singleton
|
||||||
class TrendCalculator @Inject constructor(
|
class TrendCalculator @Inject constructor(
|
||||||
private val repository: AppRepository
|
private val repository: AppRepository,
|
||||||
|
private val rh: ResourceHelper
|
||||||
) {
|
) {
|
||||||
|
|
||||||
fun getTrendArrow(glucoseValue: GlucoseValue?): GlucoseValue.TrendArrow =
|
fun getTrendArrow(glucoseValue: GlucoseValue?): GlucoseValue.TrendArrow =
|
||||||
when {
|
when {
|
||||||
glucoseValue?.trendArrow == null -> GlucoseValue.TrendArrow.NONE
|
glucoseValue?.trendArrow == null -> NONE
|
||||||
glucoseValue.trendArrow != GlucoseValue.TrendArrow.NONE -> glucoseValue.trendArrow
|
glucoseValue.trendArrow != NONE -> glucoseValue.trendArrow
|
||||||
else -> calculateDirection(glucoseValue)
|
else -> calculateDirection(glucoseValue)
|
||||||
|
}
|
||||||
|
|
||||||
|
fun getTrendDescription(glucoseValue: GlucoseValue?): String =
|
||||||
|
when (getTrendArrow(glucoseValue)) {
|
||||||
|
DOUBLE_DOWN -> rh.gs(R.string.a11y_arrow_double_down)
|
||||||
|
SINGLE_DOWN -> rh.gs(R.string.a11y_arrow_single_down)
|
||||||
|
FORTY_FIVE_DOWN -> rh.gs(R.string.a11y_arrow_forty_five_down)
|
||||||
|
FLAT -> rh.gs(R.string.a11y_arrow_flat)
|
||||||
|
FORTY_FIVE_UP -> rh.gs(R.string.a11y_arrow_forty_five_up)
|
||||||
|
SINGLE_UP -> rh.gs(R.string.a11y_arrow_single_up)
|
||||||
|
DOUBLE_UP -> rh.gs(R.string.a11y_arrow_double_up)
|
||||||
|
NONE -> rh.gs(R.string.a11y_arrow_none)
|
||||||
|
else -> rh.gs(R.string.a11y_arrow_unknown)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun calculateDirection(glucoseValue: GlucoseValue): GlucoseValue.TrendArrow {
|
private fun calculateDirection(glucoseValue: GlucoseValue): GlucoseValue.TrendArrow {
|
||||||
|
@ -23,7 +40,7 @@ class TrendCalculator @Inject constructor(
|
||||||
val readings = repository.compatGetBgReadingsDataFromTime(toTime - T.mins(10).msecs(), toTime, false).blockingGet()
|
val readings = repository.compatGetBgReadingsDataFromTime(toTime - T.mins(10).msecs(), toTime, false).blockingGet()
|
||||||
|
|
||||||
if (readings.size < 2)
|
if (readings.size < 2)
|
||||||
return GlucoseValue.TrendArrow.NONE
|
return NONE
|
||||||
val current = readings[0]
|
val current = readings[0]
|
||||||
val previous = readings[1]
|
val previous = readings[1]
|
||||||
|
|
||||||
|
@ -35,14 +52,14 @@ class TrendCalculator @Inject constructor(
|
||||||
val slopeByMinute = slope * 60000
|
val slopeByMinute = slope * 60000
|
||||||
|
|
||||||
return when {
|
return when {
|
||||||
slopeByMinute <= -3.5 -> GlucoseValue.TrendArrow.DOUBLE_DOWN
|
slopeByMinute <= -3.5 -> DOUBLE_DOWN
|
||||||
slopeByMinute <= -2 -> GlucoseValue.TrendArrow.SINGLE_DOWN
|
slopeByMinute <= -2 -> SINGLE_DOWN
|
||||||
slopeByMinute <= -1 -> GlucoseValue.TrendArrow.FORTY_FIVE_DOWN
|
slopeByMinute <= -1 -> FORTY_FIVE_DOWN
|
||||||
slopeByMinute <= 1 -> GlucoseValue.TrendArrow.FLAT
|
slopeByMinute <= 1 -> FLAT
|
||||||
slopeByMinute <= 2 -> GlucoseValue.TrendArrow.FORTY_FIVE_UP
|
slopeByMinute <= 2 -> FORTY_FIVE_UP
|
||||||
slopeByMinute <= 3.5 -> GlucoseValue.TrendArrow.SINGLE_UP
|
slopeByMinute <= 3.5 -> SINGLE_UP
|
||||||
slopeByMinute <= 40 -> GlucoseValue.TrendArrow.DOUBLE_UP
|
slopeByMinute <= 40 -> DOUBLE_UP
|
||||||
else -> GlucoseValue.TrendArrow.NONE
|
else -> NONE
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -112,6 +112,7 @@ public class TimeListEdit {
|
||||||
float factor = layout.getContext().getResources().getDisplayMetrics().density;
|
float factor = layout.getContext().getResources().getDisplayMetrics().density;
|
||||||
finalAdd = new ImageView(context);
|
finalAdd = new ImageView(context);
|
||||||
finalAdd.setImageResource(R.drawable.ic_add);
|
finalAdd.setImageResource(R.drawable.ic_add);
|
||||||
|
finalAdd.setContentDescription(layout.getContext().getResources().getString(R.string.addnew));
|
||||||
LinearLayout.LayoutParams illp = new LinearLayout.LayoutParams((int) (35d * factor), (int) (35 * factor));
|
LinearLayout.LayoutParams illp = new LinearLayout.LayoutParams((int) (35d * factor), (int) (35 * factor));
|
||||||
illp.setMargins(0, 25, 0, 25); // llp.setMargins(left, top, right, bottom);
|
illp.setMargins(0, 25, 0, 25); // llp.setMargins(left, top, right, bottom);
|
||||||
illp.gravity = Gravity.CENTER;
|
illp.gravity = Gravity.CENTER;
|
||||||
|
|
|
@ -126,6 +126,7 @@
|
||||||
android:layout_weight="0.5"
|
android:layout_weight="0.5"
|
||||||
android:drawableTop="@drawable/ic_quick_wizard"
|
android:drawableTop="@drawable/ic_quick_wizard"
|
||||||
android:text="@string/quickwizard"
|
android:text="@string/quickwizard"
|
||||||
|
android:hint="@string/quickwizard"
|
||||||
android:textColor="@color/colorQuickWizardButton"
|
android:textColor="@color/colorQuickWizardButton"
|
||||||
android:textSize="10sp"
|
android:textSize="10sp"
|
||||||
tools:ignore="SmallSp" />
|
tools:ignore="SmallSp" />
|
||||||
|
|
|
@ -39,6 +39,7 @@
|
||||||
android:gravity="center_vertical|center_horizontal"
|
android:gravity="center_vertical|center_horizontal"
|
||||||
android:paddingTop="6dp"
|
android:paddingTop="6dp"
|
||||||
android:paddingBottom="6dp"
|
android:paddingBottom="6dp"
|
||||||
|
android:hint="active profile"
|
||||||
android:text="Profile"
|
android:text="Profile"
|
||||||
android:textAppearance="?android:attr/textAppearanceSmall"
|
android:textAppearance="?android:attr/textAppearanceSmall"
|
||||||
tools:ignore="HardcodedText" />
|
tools:ignore="HardcodedText" />
|
||||||
|
@ -52,6 +53,7 @@
|
||||||
android:gravity="center_vertical|center_horizontal"
|
android:gravity="center_vertical|center_horizontal"
|
||||||
android:paddingTop="6dp"
|
android:paddingTop="6dp"
|
||||||
android:paddingBottom="6dp"
|
android:paddingBottom="6dp"
|
||||||
|
android:hint="temp target"
|
||||||
android:text="@string/notavailable"
|
android:text="@string/notavailable"
|
||||||
android:textAppearance="?android:attr/textAppearanceSmall"
|
android:textAppearance="?android:attr/textAppearanceSmall"
|
||||||
android:textColor="@color/mdtp_white"
|
android:textColor="@color/mdtp_white"
|
||||||
|
|
|
@ -14,7 +14,8 @@
|
||||||
<com.jjoe64.graphview.GraphView
|
<com.jjoe64.graphview.GraphView
|
||||||
android:id="@+id/bg_graph"
|
android:id="@+id/bg_graph"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="200dp" />
|
android:layout_height="200dp"
|
||||||
|
android:contentDescription="@string/a11y_graph"/>
|
||||||
|
|
||||||
<ImageButton
|
<ImageButton
|
||||||
android:id="@+id/chart_menu_button"
|
android:id="@+id/chart_menu_button"
|
||||||
|
|
|
@ -25,7 +25,7 @@
|
||||||
app:layout_constraintTop_toTopOf="parent"
|
app:layout_constraintTop_toTopOf="parent"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:contentDescription="Blood glucose quality icon"
|
android:contentDescription="@string/a11y_bg_quality"
|
||||||
tools:ignore="HardcodedText" />
|
tools:ignore="HardcodedText" />
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
|
@ -52,7 +52,8 @@
|
||||||
app:layout_constraintEnd_toStartOf="@+id/deltas_layout"
|
app:layout_constraintEnd_toStartOf="@+id/deltas_layout"
|
||||||
app:layout_constraintStart_toEndOf="@+id/delta_large"
|
app:layout_constraintStart_toEndOf="@+id/delta_large"
|
||||||
app:layout_constraintTop_toTopOf="parent"
|
app:layout_constraintTop_toTopOf="parent"
|
||||||
tools:ignore="UseCompoundDrawables">
|
tools:ignore="UseCompoundDrawables"
|
||||||
|
android:screenReaderFocusable="true">
|
||||||
|
|
||||||
<ImageView
|
<ImageView
|
||||||
android:id="@+id/arrow"
|
android:id="@+id/arrow"
|
||||||
|
@ -87,7 +88,8 @@
|
||||||
<TableRow
|
<TableRow
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:orientation="horizontal">
|
android:orientation="horizontal"
|
||||||
|
android:focusable="true">
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
|
@ -95,6 +97,7 @@
|
||||||
android:layout_gravity="end"
|
android:layout_gravity="end"
|
||||||
android:textAlignment="textEnd"
|
android:textAlignment="textEnd"
|
||||||
android:text="Δ: "
|
android:text="Δ: "
|
||||||
|
android:contentDescription="last delta"
|
||||||
android:textAppearance="@style/TextAppearance.AppCompat.Small"
|
android:textAppearance="@style/TextAppearance.AppCompat.Small"
|
||||||
tools:ignore="HardcodedText" />
|
tools:ignore="HardcodedText" />
|
||||||
|
|
||||||
|
@ -113,7 +116,8 @@
|
||||||
<TableRow
|
<TableRow
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:orientation="horizontal">
|
android:orientation="horizontal"
|
||||||
|
android:focusable="true">
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
|
@ -121,6 +125,7 @@
|
||||||
android:layout_gravity="end"
|
android:layout_gravity="end"
|
||||||
android:textAlignment="textEnd"
|
android:textAlignment="textEnd"
|
||||||
android:text="15m Δ: "
|
android:text="15m Δ: "
|
||||||
|
android:contentDescription="15 minutes delta"
|
||||||
android:textAppearance="@style/TextAppearance.AppCompat.Small"
|
android:textAppearance="@style/TextAppearance.AppCompat.Small"
|
||||||
tools:ignore="HardcodedText" />
|
tools:ignore="HardcodedText" />
|
||||||
|
|
||||||
|
@ -139,7 +144,8 @@
|
||||||
<TableRow
|
<TableRow
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:orientation="horizontal">
|
android:orientation="horizontal"
|
||||||
|
android:focusable="true">
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
|
@ -147,6 +153,7 @@
|
||||||
android:layout_gravity="end"
|
android:layout_gravity="end"
|
||||||
android:textAlignment="textEnd"
|
android:textAlignment="textEnd"
|
||||||
android:text="40m Δ: "
|
android:text="40m Δ: "
|
||||||
|
android:contentDescription="40 minutes delta"
|
||||||
android:textAppearance="@style/TextAppearance.AppCompat.Small"
|
android:textAppearance="@style/TextAppearance.AppCompat.Small"
|
||||||
tools:ignore="HardcodedText" />
|
tools:ignore="HardcodedText" />
|
||||||
|
|
||||||
|
@ -185,7 +192,7 @@
|
||||||
android:layout_marginBottom="-4dp"
|
android:layout_marginBottom="-4dp"
|
||||||
android:visibility="gone"
|
android:visibility="gone"
|
||||||
app:srcCompat="@drawable/ic_loop_closed"
|
app:srcCompat="@drawable/ic_loop_closed"
|
||||||
android:contentDescription="@string/closedloop" />
|
android:contentDescription="@string/apsmode_title" />
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/aps_mode_text"
|
android:id="@+id/aps_mode_text"
|
||||||
|
@ -282,7 +289,8 @@
|
||||||
app:layout_constraintEnd_toStartOf="@+id/basal_layout"
|
app:layout_constraintEnd_toStartOf="@+id/basal_layout"
|
||||||
app:layout_constraintStart_toEndOf="@+id/iob_layout"
|
app:layout_constraintStart_toEndOf="@+id/iob_layout"
|
||||||
app:layout_constraintTop_toTopOf="@+id/iob_layout"
|
app:layout_constraintTop_toTopOf="@+id/iob_layout"
|
||||||
tools:ignore="UseCompoundDrawables">
|
tools:ignore="UseCompoundDrawables"
|
||||||
|
android:focusable="true">
|
||||||
|
|
||||||
<ImageView
|
<ImageView
|
||||||
android:id="@+id/carbs_icon"
|
android:id="@+id/carbs_icon"
|
||||||
|
@ -377,7 +385,8 @@
|
||||||
app:layout_constraintEnd_toEndOf="parent"
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
app:layout_constraintStart_toEndOf="@+id/extended_layout"
|
app:layout_constraintStart_toEndOf="@+id/extended_layout"
|
||||||
app:layout_constraintTop_toTopOf="@+id/iob_layout"
|
app:layout_constraintTop_toTopOf="@+id/iob_layout"
|
||||||
tools:ignore="UseCompoundDrawables">
|
tools:ignore="UseCompoundDrawables"
|
||||||
|
android:focusable="true">
|
||||||
|
|
||||||
<ImageView
|
<ImageView
|
||||||
android:id="@+id/sensitivity_icon"
|
android:id="@+id/sensitivity_icon"
|
||||||
|
@ -385,7 +394,7 @@
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_gravity="center_horizontal"
|
android:layout_gravity="center_horizontal"
|
||||||
app:srcCompat="@drawable/ic_swap_vert_black_48dp_green"
|
app:srcCompat="@drawable/ic_swap_vert_black_48dp_green"
|
||||||
android:contentDescription="@string/autosenslabel" />
|
android:contentDescription="@string/a11y_autosenslabel" />
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/sensitivity"
|
android:id="@+id/sensitivity"
|
||||||
|
|
|
@ -11,101 +11,125 @@
|
||||||
android:paddingTop="4dp"
|
android:paddingTop="4dp"
|
||||||
android:paddingBottom="4dp">
|
android:paddingBottom="4dp">
|
||||||
|
|
||||||
<ImageView
|
<LinearLayout
|
||||||
android:id="@+id/cannula_or_patch"
|
android:layout_width="wrap_content"
|
||||||
android:layout_width="40dp"
|
android:layout_height="wrap_content"
|
||||||
android:layout_height="match_parent"
|
|
||||||
android:layout_weight="1"
|
android:layout_weight="1"
|
||||||
android:scaleX = "2"
|
android:focusable="true">
|
||||||
android:scaleY = "2"
|
|
||||||
android:gravity="center_vertical"
|
|
||||||
android:scaleType="centerInside"
|
|
||||||
app:srcCompat="@drawable/ic_cp_age_cannula"
|
|
||||||
android:contentDescription="@string/statuslights_cannula_age" />
|
|
||||||
|
|
||||||
<TextView
|
<ImageView
|
||||||
android:id="@+id/cannula_age"
|
android:id="@+id/cannula_or_patch"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="fill_parent"
|
||||||
|
android:contentDescription="@string/statuslights_cannula_age"
|
||||||
|
android:scaleType="centerInside"
|
||||||
|
android:scaleX="2"
|
||||||
|
android:scaleY="2"
|
||||||
|
app:srcCompat="@drawable/ic_cp_age_cannula" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/cannula_age"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:paddingStart="1dp"
|
||||||
|
android:paddingEnd="2dp"
|
||||||
|
android:textSize="14sp" />
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="fill_parent"
|
||||||
android:gravity="center_vertical"
|
|
||||||
android:paddingStart="1dp"
|
|
||||||
android:paddingEnd="2dp"
|
|
||||||
android:textSize="14sp" />
|
|
||||||
|
|
||||||
<ImageView
|
|
||||||
android:layout_width="40dp"
|
|
||||||
android:layout_height="match_parent"
|
|
||||||
android:layout_weight="1"
|
android:layout_weight="1"
|
||||||
android:gravity="center_vertical"
|
android:focusable="true">
|
||||||
android:scaleType="centerInside"
|
|
||||||
android:scaleX="1.6"
|
|
||||||
android:scaleY="1.6"
|
|
||||||
app:srcCompat="@drawable/ic_cp_age_insulin"
|
|
||||||
android:contentDescription="@string/insulin_label" />
|
|
||||||
|
|
||||||
<TextView
|
<ImageView
|
||||||
android:id="@+id/insulin_age"
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="fill_parent"
|
||||||
|
android:contentDescription="@string/a11y_insulin_label"
|
||||||
|
android:gravity="center_vertical"
|
||||||
|
android:scaleType="centerInside"
|
||||||
|
android:scaleX="1.8"
|
||||||
|
android:scaleY="1.8"
|
||||||
|
app:srcCompat="@drawable/ic_cp_age_insulin" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/insulin_age"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="fill_parent"
|
||||||
|
android:gravity="center_vertical"
|
||||||
|
android:paddingStart="1dp"
|
||||||
|
android:paddingEnd="2dp"
|
||||||
|
android:textSize="14sp" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/reservoir_level"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:gravity="center_vertical"
|
||||||
|
android:textSize="14sp" />
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="fill_parent"
|
||||||
android:gravity="center_vertical"
|
|
||||||
android:paddingStart="1dp"
|
|
||||||
android:paddingEnd="2dp"
|
|
||||||
android:textSize="14sp" />
|
|
||||||
|
|
||||||
<TextView
|
|
||||||
android:id="@+id/reservoir_level"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:gravity="center_vertical"
|
|
||||||
android:textSize="14sp" />
|
|
||||||
|
|
||||||
<ImageView
|
|
||||||
android:layout_width="40dp"
|
|
||||||
android:layout_height="match_parent"
|
|
||||||
android:layout_weight="1"
|
android:layout_weight="1"
|
||||||
android:gravity="center_vertical"
|
android:focusable="true">
|
||||||
android:scaleType="centerInside"
|
|
||||||
android:scaleX="2"
|
|
||||||
android:scaleY="2"
|
|
||||||
app:srcCompat="@drawable/ic_cp_age_sensor"
|
|
||||||
android:contentDescription="@string/careportal_sensor_label" />
|
|
||||||
|
|
||||||
<TextView
|
<ImageView
|
||||||
android:id="@+id/sensor_age"
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="fill_parent"
|
||||||
|
android:contentDescription="@string/careportal_sensor_label"
|
||||||
|
android:gravity="center_vertical"
|
||||||
|
android:scaleType="centerInside"
|
||||||
|
android:scaleX="2"
|
||||||
|
android:scaleY="2"
|
||||||
|
app:srcCompat="@drawable/ic_cp_age_sensor" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/sensor_age"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:gravity="center_vertical"
|
||||||
|
android:paddingStart="1dp"
|
||||||
|
android:paddingEnd="2dp"
|
||||||
|
android:textSize="14sp" />
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="fill_parent"
|
||||||
android:gravity="center_vertical"
|
|
||||||
android:paddingStart="1dp"
|
|
||||||
android:paddingEnd="2dp"
|
|
||||||
android:textSize="14sp" />
|
|
||||||
|
|
||||||
<ImageView
|
|
||||||
android:layout_width="40dp"
|
|
||||||
android:layout_height="match_parent"
|
|
||||||
android:layout_weight="1"
|
android:layout_weight="1"
|
||||||
android:gravity="center_vertical"
|
android:focusable="true">
|
||||||
android:scaleType="centerInside"
|
|
||||||
android:scaleX="2"
|
|
||||||
android:scaleY="2"
|
|
||||||
app:srcCompat="@drawable/ic_cp_age_battery"
|
|
||||||
android:contentDescription="@string/battery_label" />
|
|
||||||
|
|
||||||
<TextView
|
<ImageView
|
||||||
android:id="@+id/pb_age"
|
android:layout_width="wrap_content"
|
||||||
android:layout_width="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:contentDescription="@string/battery_label"
|
||||||
android:gravity="center_vertical"
|
android:scaleType="centerInside"
|
||||||
android:paddingStart="1dp"
|
android:scaleX="2"
|
||||||
android:paddingEnd="1dp"
|
android:scaleY="2"
|
||||||
android:textSize="14sp" />
|
app:srcCompat="@drawable/ic_cp_age_battery" />
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/battery_level"
|
android:id="@+id/pb_age"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="fill_parent"
|
||||||
android:gravity="center_vertical"
|
android:gravity="center_vertical"
|
||||||
android:paddingStart="1dp"
|
android:paddingStart="1dp"
|
||||||
android:paddingEnd="2dp"
|
android:paddingEnd="1dp"
|
||||||
android:textSize="14sp" />
|
android:textSize="14sp" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/battery_level"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="fill_parent"
|
||||||
|
android:gravity="center_vertical"
|
||||||
|
android:paddingStart="1dp"
|
||||||
|
android:paddingEnd="2dp"
|
||||||
|
android:textSize="14sp" />
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
|
@ -38,6 +38,7 @@
|
||||||
android:layout_height="35dp"
|
android:layout_height="35dp"
|
||||||
android:layout_gravity="center_vertical"
|
android:layout_gravity="center_vertical"
|
||||||
android:layout_marginLeft="15dp"
|
android:layout_marginLeft="15dp"
|
||||||
|
android:contentDescription="@string/addnew_above"
|
||||||
app:srcCompat="@drawable/ic_add" />
|
app:srcCompat="@drawable/ic_add" />
|
||||||
|
|
||||||
<ImageView
|
<ImageView
|
||||||
|
@ -46,5 +47,6 @@
|
||||||
android:layout_height="35dp"
|
android:layout_height="35dp"
|
||||||
android:layout_gravity="center_vertical"
|
android:layout_gravity="center_vertical"
|
||||||
android:layout_marginLeft="15dp"
|
android:layout_marginLeft="15dp"
|
||||||
|
android:contentDescription="@string/remove_label"
|
||||||
app:srcCompat="@drawable/ic_remove" />
|
app:srcCompat="@drawable/ic_remove" />
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
|
@ -38,6 +38,7 @@
|
||||||
android:layout_height="35dp"
|
android:layout_height="35dp"
|
||||||
android:layout_gravity="center_vertical"
|
android:layout_gravity="center_vertical"
|
||||||
android:layout_marginLeft="15dp"
|
android:layout_marginLeft="15dp"
|
||||||
|
android:contentDescription="@string/addnew_above"
|
||||||
app:srcCompat="@drawable/ic_add" />
|
app:srcCompat="@drawable/ic_add" />
|
||||||
|
|
||||||
<ImageView
|
<ImageView
|
||||||
|
@ -46,5 +47,6 @@
|
||||||
android:layout_height="35dp"
|
android:layout_height="35dp"
|
||||||
android:layout_gravity="center_vertical"
|
android:layout_gravity="center_vertical"
|
||||||
android:layout_marginLeft="15dp"
|
android:layout_marginLeft="15dp"
|
||||||
|
android:contentDescription="@string/remove_label"
|
||||||
app:srcCompat="@drawable/ic_remove" />
|
app:srcCompat="@drawable/ic_remove" />
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
|
@ -169,7 +169,6 @@
|
||||||
<string name="configbuilder_bgsource_description">Where should AndroidAPS gain it\'s data from?</string>
|
<string name="configbuilder_bgsource_description">Where should AndroidAPS gain it\'s data from?</string>
|
||||||
<string name="xdrip">xDrip+</string>
|
<string name="xdrip">xDrip+</string>
|
||||||
<string name="apsmode_title">APS Mode</string>
|
<string name="apsmode_title">APS Mode</string>
|
||||||
|
|
||||||
<string name="closedloop">Closed Loop</string>
|
<string name="closedloop">Closed Loop</string>
|
||||||
<string name="openloop">Open Loop</string>
|
<string name="openloop">Open Loop</string>
|
||||||
<string name="lowglucosesuspend">Low Glucose Suspend</string>
|
<string name="lowglucosesuspend">Low Glucose Suspend</string>
|
||||||
|
@ -1163,5 +1162,22 @@
|
||||||
<string name="a11_correction_percentage">correct outcome with %</string>
|
<string name="a11_correction_percentage">correct outcome with %</string>
|
||||||
<string name="a11_correction_units">correct outcome with units</string>
|
<string name="a11_correction_units">correct outcome with units</string>
|
||||||
<string name="not_available_full">Not available</string>
|
<string name="not_available_full">Not available</string>
|
||||||
|
<string name="a11y_high">heigh</string>
|
||||||
|
<string name="a11y_inrange">in range</string>
|
||||||
|
<string name="a11y_low">low</string>
|
||||||
|
<string name="a11y_arrow_double_down">down fast</string>
|
||||||
|
<string name="a11y_arrow_single_down">down</string>
|
||||||
|
<string name="a11y_arrow_forty_five_down">down trending</string>
|
||||||
|
<string name="a11y_arrow_flat">flat</string>
|
||||||
|
<string name="a11y_arrow_forty_five_up">up trending</string>
|
||||||
|
<string name="a11y_arrow_single_up">up</string>
|
||||||
|
<string name="a11y_arrow_double_up">up fast</string>
|
||||||
|
<string name="a11y_arrow_none">none</string>
|
||||||
|
<string name="a11y_arrow_unknown">unknown</string>
|
||||||
|
<string name="a11y_graph">graph</string>
|
||||||
|
<string name="a11y_bg_quality">Blood glucose quality</string>
|
||||||
|
<string name="a11_bg_quality_recalculated">recalculated</string>
|
||||||
|
<string name="a11_bg_quality_doubles">double entries</string>
|
||||||
|
<string name="a11y_insulin_label">insulin</string>
|
||||||
|
|
||||||
</resources>
|
</resources>
|
||||||
|
|
|
@ -83,6 +83,7 @@
|
||||||
<string name="wifissidcompared">WiFi SSID %1$s %2$s</string>
|
<string name="wifissidcompared">WiFi SSID %1$s %2$s</string>
|
||||||
<string name="autosenscompared">Autosens %1$s %2$s %%</string>
|
<string name="autosenscompared">Autosens %1$s %2$s %%</string>
|
||||||
<string name="autosenslabel">Autosens %</string>
|
<string name="autosenslabel">Autosens %</string>
|
||||||
|
<string name="a11y_autosenslabel">Auto sens</string>
|
||||||
<string name="deltacompared">%3$s %1$s %2$s</string>
|
<string name="deltacompared">%3$s %1$s %2$s</string>
|
||||||
<string name="deltalabel">BG difference</string>
|
<string name="deltalabel">BG difference</string>
|
||||||
<string name="deltalabel_u">BG difference [%1$s]</string>
|
<string name="deltalabel_u">BG difference [%1$s]</string>
|
||||||
|
|
|
@ -156,6 +156,12 @@ class DateUtil @Inject constructor(private val context: Context) {
|
||||||
return (if (mins > 0) "+" else "") + mins
|
return (if (mins > 0) "+" else "") + mins
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun minAgoLong(rh: ResourceHelper, time: Long?): String {
|
||||||
|
if (time == null) return ""
|
||||||
|
val mins = ((now() - time) / 1000 / 60).toInt()
|
||||||
|
return rh.gs(R.string.minago_long, mins)
|
||||||
|
}
|
||||||
|
|
||||||
fun hourAgo(time: Long, rh: ResourceHelper): String {
|
fun hourAgo(time: Long, rh: ResourceHelper): String {
|
||||||
val hours = (now() - time) / 1000.0 / 60 / 60
|
val hours = (now() - time) / 1000.0 / 60 / 60
|
||||||
return rh.gs(R.string.hoursago, hours)
|
return rh.gs(R.string.hoursago, hours)
|
||||||
|
|
|
@ -173,6 +173,7 @@
|
||||||
<string name="notes_label">Notes</string>
|
<string name="notes_label">Notes</string>
|
||||||
<string name="remove_button">Remove</string>
|
<string name="remove_button">Remove</string>
|
||||||
<string name="addnew">Add new</string>
|
<string name="addnew">Add new</string>
|
||||||
|
<string name="addnew_above">Add new above</string>
|
||||||
<string name="wrong_pump_data">Data is coming from different pump. Change pump driver to reset pump state.</string>
|
<string name="wrong_pump_data">Data is coming from different pump. Change pump driver to reset pump state.</string>
|
||||||
|
|
||||||
<!-- Constraints-->
|
<!-- Constraints-->
|
||||||
|
@ -199,6 +200,7 @@
|
||||||
|
|
||||||
<!-- DateUtil-->
|
<!-- DateUtil-->
|
||||||
<string name="minago">%1$d m ago</string>
|
<string name="minago">%1$d m ago</string>
|
||||||
|
<string name="minago_long">%1$d minutes ago</string>
|
||||||
<string name="hoursago">%1$.1f h ago</string>
|
<string name="hoursago">%1$.1f h ago</string>
|
||||||
<string name="shorthour">h</string>
|
<string name="shorthour">h</string>
|
||||||
<string name="days">days</string>
|
<string name="days">days</string>
|
||||||
|
|
Loading…
Reference in a new issue