[BUG] audio: Misalignement of Native/Java AudioAttributes

Native audio attributes are initialized with a default source,
whereas JAVA AudioAttributes are initialized with an INVALID source.
It leads to equality failure, thus preventing to identify the
right strategy / volume group.
This CL fixes this misalignement by using the builder constructor
from AudioAttributes, thus cleaning the input source.

Test: AudioVolumeGroupTest
Bug: 238058094
Bug: 248287204
Merged-In: I0aa6f19bb0f448e853adcc0dacece4d69c665602
Change-Id: I0aa6f19bb0f448e853adcc0dacece4d69c665602
(cherry picked from commit 47e3b6bf552e7d82c58999ad0a68f2d82219646e)
This commit is contained in:
François Gaffie 2022-03-25 16:19:25 +01:00 committed by Mikhail Naganov
parent 7591dd408d
commit dab2157081

View File

@ -86,8 +86,8 @@ static jint convertAudioProductStrategiesFromNative(
// Audio Attributes Group array
int attrGroupIndex = 0;
std::map<int /**attributesGroupIndex*/, std::vector<AudioAttributes> > groups;
for (const auto &attr : strategy.getAudioAttributes()) {
std::map<int /**attributesGroupIndex*/, std::vector<VolumeGroupAttributes> > groups;
for (const auto &attr : strategy.getVolumeGroupAttributes()) {
int groupId = attr.getGroupId();
int streamType = attr.getStreamType();
const auto &iter = std::find_if(begin(groups), end(groups),
@ -108,17 +108,17 @@ static jint convertAudioProductStrategiesFromNative(
jAudioAttributesGroups = env->NewObjectArray(numAttributesGroups, gAudioAttributesGroupClass, NULL);
for (const auto &iter : groups) {
std::vector<AudioAttributes> audioAttributesGroups = iter.second;
jint numAttributes = audioAttributesGroups.size();
jint jGroupId = audioAttributesGroups.front().getGroupId();
jint jLegacyStreamType = audioAttributesGroups.front().getStreamType();
std::vector<VolumeGroupAttributes> volumeGroupAttributes = iter.second;
jint numAttributes = volumeGroupAttributes.size();
jint jGroupId = volumeGroupAttributes.front().getGroupId();
jint jLegacyStreamType = volumeGroupAttributes.front().getStreamType();
jStatus = JNIAudioAttributeHelper::getJavaArray(env, &jAudioAttributes, numAttributes);
if (jStatus != (jint)AUDIO_JAVA_SUCCESS) {
goto exit;
}
for (size_t j = 0; j < static_cast<size_t>(numAttributes); j++) {
auto attributes = audioAttributesGroups[j].getAttributes();
auto attributes = volumeGroupAttributes[j].getAttributes();
jStatus = JNIAudioAttributeHelper::nativeToJava(env, &jAudioAttribute, attributes);
if (jStatus != AUDIO_JAVA_SUCCESS) {