diff --git a/media/java/android/media/audiopolicy/AudioMixingRule.java b/media/java/android/media/audiopolicy/AudioMixingRule.java index 08655ca6ad6b0..9c0b825fbfa30 100644 --- a/media/java/android/media/audiopolicy/AudioMixingRule.java +++ b/media/java/android/media/audiopolicy/AudioMixingRule.java @@ -704,8 +704,12 @@ public class AudioMixingRule { * Combines all of the matching and exclusion rules that have been set and return a new * {@link AudioMixingRule} object. * @return a new {@link AudioMixingRule} object + * @throws IllegalArgumentException if the rule is empty. */ public AudioMixingRule build() { + if (mCriteria.isEmpty()) { + throw new IllegalArgumentException("Cannot build AudioMixingRule with no rules."); + } return new AudioMixingRule( mTargetMixType == AudioMix.MIX_TYPE_INVALID ? AudioMix.MIX_TYPE_PLAYERS : mTargetMixType, diff --git a/media/tests/AudioPolicyTest/src/com/android/audiopolicytest/AudioMixingRuleUnitTests.java b/media/tests/AudioPolicyTest/src/com/android/audiopolicytest/AudioMixingRuleUnitTests.java index a83e7d3a6ef1a..3cbfd50ff859e 100644 --- a/media/tests/AudioPolicyTest/src/com/android/audiopolicytest/AudioMixingRuleUnitTests.java +++ b/media/tests/AudioPolicyTest/src/com/android/audiopolicytest/AudioMixingRuleUnitTests.java @@ -212,6 +212,12 @@ public class AudioMixingRuleUnitTests { containsInAnyOrder(isAudioMixSessionCriterion(TEST_SESSION_ID))); } + @Test + public void audioMixingRuleWithNoRulesFails() { + assertThrows(IllegalArgumentException.class, + () -> new AudioMixingRule.Builder().build()); + } + private static Matcher isAudioMixUidCriterion(int uid, boolean exclude) { return new CustomTypeSafeMatcher("uid mix criterion") {