From 7bd5ec2de849aa5c0d05a4000612794fbffb0245 Mon Sep 17 00:00:00 2001 From: Jan Sebechlebsky Date: Fri, 5 May 2023 16:02:57 +0200 Subject: [PATCH] Fix AudioProductStrategy.equals implementation ... and add missing .hashCode overrides. Bug: 281036492 Test: atest AudioProductStrategyTest Change-Id: I09d23368b13052592fc8d27dd1ff985d3e508c6a --- .../audiopolicy/AudioProductStrategy.java | 14 ++++++++++- .../AudioProductStrategyTest.java | 25 +++++++++++++++++++ 2 files changed, 38 insertions(+), 1 deletion(-) diff --git a/media/java/android/media/audiopolicy/AudioProductStrategy.java b/media/java/android/media/audiopolicy/AudioProductStrategy.java index 0289aa3b203d0..3394dd05ef8ca 100644 --- a/media/java/android/media/audiopolicy/AudioProductStrategy.java +++ b/media/java/android/media/audiopolicy/AudioProductStrategy.java @@ -203,10 +203,16 @@ public final class AudioProductStrategy implements Parcelable { AudioProductStrategy thatStrategy = (AudioProductStrategy) o; - return mName == thatStrategy.mName && mId == thatStrategy.mId + return mId == thatStrategy.mId + && Objects.equals(mName, thatStrategy.mName) && Arrays.equals(mAudioAttributesGroups, thatStrategy.mAudioAttributesGroups); } + @Override + public int hashCode() { + return Objects.hash(mId, mName, Arrays.hashCode(mAudioAttributesGroups)); + } + /** * @param name of the product strategy * @param id of the product strategy @@ -460,6 +466,12 @@ public final class AudioProductStrategy implements Parcelable { && Arrays.equals(mAudioAttributes, thatAag.mAudioAttributes); } + @Override + public int hashCode() { + return Objects.hash(mVolumeGroupId, mLegacyStreamType, + Arrays.hashCode(mAudioAttributes)); + } + public int getStreamType() { return mLegacyStreamType; } diff --git a/media/tests/AudioPolicyTest/src/com/android/audiopolicytest/AudioProductStrategyTest.java b/media/tests/AudioPolicyTest/src/com/android/audiopolicytest/AudioProductStrategyTest.java index b66545a6558e5..266faae489dd2 100644 --- a/media/tests/AudioPolicyTest/src/com/android/audiopolicytest/AudioProductStrategyTest.java +++ b/media/tests/AudioPolicyTest/src/com/android/audiopolicytest/AudioProductStrategyTest.java @@ -29,11 +29,14 @@ import android.media.AudioManager; import android.media.AudioSystem; import android.media.audiopolicy.AudioProductStrategy; import android.media.audiopolicy.AudioVolumeGroup; +import android.os.Parcel; import android.platform.test.annotations.Presubmit; import android.util.Log; import androidx.test.ext.junit.runners.AndroidJUnit4; +import com.google.common.testing.EqualsTester; + import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; @@ -231,4 +234,26 @@ public class AudioProductStrategyTest { } } } + + @Test + public void testEquals() { + final EqualsTester equalsTester = new EqualsTester(); + + AudioProductStrategy.getAudioProductStrategies().forEach( + strategy -> equalsTester.addEqualityGroup(strategy, + writeToAndFromParcel(strategy))); + + equalsTester.testEquals(); + } + + private static AudioProductStrategy writeToAndFromParcel( + AudioProductStrategy audioProductStrategy) { + Parcel parcel = Parcel.obtain(); + audioProductStrategy.writeToParcel(parcel, /*flags=*/0); + parcel.setDataPosition(0); + AudioProductStrategy unmarshalledAudioProductStrategy = + AudioProductStrategy.CREATOR.createFromParcel(parcel); + parcel.recycle(); + return unmarshalledAudioProductStrategy; + } }