From e0c05248ed85fd0813b2694b2993719fa728bb4c Mon Sep 17 00:00:00 2001 From: Julia Kawano Date: Sat, 19 Sep 2020 00:53:07 +0000 Subject: [PATCH] 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 --- packages/CarSystemUI/res/values/strings.xml | 2 + .../car/hvac/AdjustableTemperatureView.java | 23 ++++++++-- .../hvac/AdjustableTemperatureViewTest.java | 42 +++++++++++++++++++ 3 files changed, 64 insertions(+), 3 deletions(-) diff --git a/packages/CarSystemUI/res/values/strings.xml b/packages/CarSystemUI/res/values/strings.xml index fbdb5167fadee..06ae7cfd6d1bb 100644 --- a/packages/CarSystemUI/res/values/strings.xml +++ b/packages/CarSystemUI/res/values/strings.xml @@ -22,6 +22,8 @@ Min Max + + -- Voice recognition now handled by connected Bluetooth device diff --git a/packages/CarSystemUI/src/com/android/systemui/car/hvac/AdjustableTemperatureView.java b/packages/CarSystemUI/src/com/android/systemui/car/hvac/AdjustableTemperatureView.java index 85d4ceb81eeb0..af2a1d36bbd72 100644 --- a/packages/CarSystemUI/src/com/android/systemui/car/hvac/AdjustableTemperatureView.java +++ b/packages/CarSystemUI/src/com/android/systemui/car/hvac/AdjustableTemperatureView.java @@ -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; diff --git a/packages/CarSystemUI/tests/src/com/android/systemui/car/hvac/AdjustableTemperatureViewTest.java b/packages/CarSystemUI/tests/src/com/android/systemui/car/hvac/AdjustableTemperatureViewTest.java index a3a55aae5f189..fe071d54fb107 100644 --- a/packages/CarSystemUI/tests/src/com/android/systemui/car/hvac/AdjustableTemperatureViewTest.java +++ b/packages/CarSystemUI/tests/src/com/android/systemui/car/hvac/AdjustableTemperatureViewTest.java @@ -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),