Fix NAN temp on system bar HVAC controls

Fixing bug where the AdjustableTemperatureView displayed "NaN" when no
temperature was available (namely when booting) to instead display "--"
(which was the previous behavior).

Also matched previous temperature view behavior to display a string when
the min or max temperature has been set.

Bug: 168744829
Test: manual - built on flame_car
Test: atest AdjustableTemperatureViewTest
Change-Id: I048cf09fb31b61905c922b7e531f497bee2586d9
This commit is contained in:
Julia Kawano
2020-09-19 00:53:07 +00:00
parent b782c8119d
commit e0c05248ed
3 changed files with 64 additions and 3 deletions

View File

@@ -22,6 +22,8 @@
<string name="hvac_min_text">Min</string>
<!-- String to represent largest setting of an HVAC system [CHAR LIMIT=10]-->
<string name="hvac_max_text">Max</string>
<!-- String to display when no HVAC temperature is available -->
<string name="hvac_null_temp_text" translatable="false">--</string>
<!-- Text for voice recognition toast. [CHAR LIMIT=60] -->
<string name="voice_recognition_toast">Voice recognition now handled by connected Bluetooth device</string>
<!-- Name of Guest Profile. [CHAR LIMIT=35] -->

View File

@@ -40,6 +40,9 @@ public class AdjustableTemperatureView extends LinearLayout implements Temperatu
private float mMinTempC;
private float mMaxTempC;
private String mTempFormat;
private String mNullTempText;
private String mMinTempText;
private String mMaxTempText;
private boolean mDisplayInFahrenheit = false;
private HvacController mHvacController;
@@ -59,6 +62,9 @@ public class AdjustableTemperatureView extends LinearLayout implements Temperatu
mTempFormat = getResources().getString(R.string.hvac_temperature_format);
mMinTempC = getResources().getFloat(R.dimen.hvac_min_value_celsius);
mMaxTempC = getResources().getFloat(R.dimen.hvac_max_value_celsius);
mNullTempText = getResources().getString(R.string.hvac_null_temp_text);
mMinTempText = getResources().getString(R.string.hvac_min_text);
mMaxTempText = getResources().getString(R.string.hvac_max_text);
initializeButtons();
}
@@ -69,12 +75,23 @@ public class AdjustableTemperatureView extends LinearLayout implements Temperatu
@Override
public void setTemp(float tempC) {
if (tempC > mMaxTempC || tempC < mMinTempC) {
return;
}
if (mTempTextView == null) {
mTempTextView = findViewById(R.id.hvac_temperature_text);
}
if (Float.isNaN(tempC)) {
mTempTextView.setText(mNullTempText);
return;
}
if (tempC <= mMinTempC) {
mTempTextView.setText(mMinTempText);
mCurrentTempC = mMinTempC;
return;
}
if (tempC >= mMaxTempC) {
mTempTextView.setText(mMaxTempText);
mCurrentTempC = mMaxTempC;
return;
}
mTempTextView.setText(String.format(mTempFormat,
mDisplayInFahrenheit ? convertToFahrenheit(tempC) : tempC));
mCurrentTempC = tempC;

View File

@@ -97,6 +97,48 @@ public class AdjustableTemperatureViewTest extends SysuiTestCase {
assertEquals(tempText.getText(), String.format(mFormat, TEMP_CELSIUS));
}
@Test
public void setTemp_tempNaN_setsTextToNaNText() {
when(mCarPropertyManager.isPropertyAvailable(eq(HVAC_TEMPERATURE_SET),
anyInt())).thenReturn(true);
when(mCarPropertyManager.getFloatProperty(eq(HVAC_TEMPERATURE_SET), anyInt())).thenReturn(
Float.NaN);
mHvacController.addTemperatureViewToController(mAdjustableTemperatureView);
TextView tempText = mAdjustableTemperatureView.findViewById(R.id.hvac_temperature_text);
assertEquals(tempText.getText(),
getContext().getResources().getString(R.string.hvac_null_temp_text));
}
@Test
public void setTemp_tempBelowMin_setsTextToMinTempText() {
when(mCarPropertyManager.isPropertyAvailable(eq(HVAC_TEMPERATURE_SET),
anyInt())).thenReturn(true);
when(mCarPropertyManager.getFloatProperty(eq(HVAC_TEMPERATURE_SET), anyInt())).thenReturn(
getContext().getResources().getFloat(R.dimen.hvac_min_value_celsius));
mHvacController.addTemperatureViewToController(mAdjustableTemperatureView);
TextView tempText = mAdjustableTemperatureView.findViewById(R.id.hvac_temperature_text);
assertEquals(tempText.getText(),
getContext().getResources().getString(R.string.hvac_min_text));
}
@Test
public void setTemp_tempAboveMax_setsTextToMaxTempText() {
when(mCarPropertyManager.isPropertyAvailable(eq(HVAC_TEMPERATURE_SET),
anyInt())).thenReturn(true);
when(mCarPropertyManager.getFloatProperty(eq(HVAC_TEMPERATURE_SET), anyInt())).thenReturn(
getContext().getResources().getFloat(R.dimen.hvac_max_value_celsius));
mHvacController.addTemperatureViewToController(mAdjustableTemperatureView);
TextView tempText = mAdjustableTemperatureView.findViewById(R.id.hvac_temperature_text);
assertEquals(tempText.getText(),
getContext().getResources().getString(R.string.hvac_max_text));
}
@Test
public void setTemperatureToFahrenheit_callsViewSetDisplayInFahrenheit() {
when(mCarPropertyManager.isPropertyAvailable(eq(HVAC_TEMPERATURE_SET),