Merge changes from topic 'audio-primary-hal-vts-fix' into oc-dev

* changes:
  Audio HAL: A speech volume outside of [0,1] is an error
  Audio HAL VTS: Some methods are not optional
diff --git a/audio/2.0/default/PrimaryDevice.cpp b/audio/2.0/default/PrimaryDevice.cpp
index 4e8f30f..746d873 100644
--- a/audio/2.0/default/PrimaryDevice.cpp
+++ b/audio/2.0/default/PrimaryDevice.cpp
@@ -17,6 +17,7 @@
 #define LOG_TAG "PrimaryDeviceHAL"
 
 #include "PrimaryDevice.h"
+#include "Util.h"
 
 namespace android {
 namespace hardware {
@@ -126,6 +127,10 @@
 
 // Methods from ::android::hardware::audio::V2_0::IPrimaryDevice follow.
 Return<Result> PrimaryDevice::setVoiceVolume(float volume) {
+    if (!isGainNormalized(volume)) {
+        ALOGW("Can not set a voice volume (%f) outside [0,1]", volume);
+        return Result::INVALID_ARGUMENTS;
+    }
     return mDevice->analyzeStatus(
         "set_voice_volume",
         mDevice->device()->set_voice_volume(mDevice->device(), volume));
diff --git a/audio/2.0/vts/functional/AudioPrimaryHidlHalTest.cpp b/audio/2.0/vts/functional/AudioPrimaryHidlHalTest.cpp
index 83a1db0..27f7aa8 100644
--- a/audio/2.0/vts/functional/AudioPrimaryHidlHalTest.cpp
+++ b/audio/2.0/vts/functional/AudioPrimaryHidlHalTest.cpp
@@ -1038,16 +1038,12 @@
     for (float value :
          (float[]){-INFINITY, -1.0, 1.0 + std::numeric_limits<float>::epsilon(),
                    2.0, INFINITY, NAN}) {
-        SCOPED_TRACE("value=" + to_string(value));
-        // FIXME: NAN should never be accepted
-        // FIXME: Missing api doc. What should the impl do if the volume is
-        // outside [0,1] ?
-        ASSERT_RESULT(Result::INVALID_ARGUMENTS, setGain(value));
+        EXPECT_RESULT(Result::INVALID_ARGUMENTS, setGain(value)) << "value="
+                                                                 << value;
     }
     // Do not consider -0.0 as an invalid value as it is == with 0.0
     for (float value : {-0.0, 0.0, 0.01, 0.5, 0.09, 1.0 /* Restore volume*/}) {
-        SCOPED_TRACE("value=" + to_string(value));
-        ASSERT_OK(setGain(value));
+        EXPECT_OK(setGain(value)) << "value=" << value;
     }
 }
 
@@ -1076,7 +1072,7 @@
     ASSERT_OK(stream->prepareForReading(
         frameSize, framesCount,
         [&res](auto r, auto&, auto&, auto&, auto&) { res = r; }));
-    EXPECT_RESULT(invalidArgsOrNotSupported, res);
+    EXPECT_RESULT(Result::INVALID_ARGUMENTS, res);
 }
 
 TEST_P(InputStreamTest, PrepareForReadingWithZeroBuffer) {
@@ -1144,7 +1140,7 @@
     ASSERT_OK(stream->prepareForWriting(
         frameSize, framesCount,
         [&res](auto r, auto&, auto&, auto&, auto&) { res = r; }));
-    EXPECT_RESULT(invalidArgsOrNotSupported, res);
+    EXPECT_RESULT(Result::INVALID_ARGUMENTS, res);
 }
 
 TEST_P(OutputStreamTest, PrepareForWriteWithZeroBuffer) {