Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 5bf536cf authored by Jean-Michel Trivi's avatar Jean-Michel Trivi Committed by Android (Google) Code Review
Browse files

Merge "Fix dynamic audio policy rules"

parents f43ec7e5 32696d49
Loading
Loading
Loading
Loading
+21 −22
Original line number Diff line number Diff line
@@ -146,6 +146,7 @@ public class AudioMixingRule {
    }

    private static boolean isValidSystemApiRule(int rule) {
        // API rules only expose the RULE_MATCH_* rules
        switch (rule) {
            case RULE_MATCH_ATTRIBUTE_USAGE:
            case RULE_MATCH_ATTRIBUTE_CAPTURE_PRESET:
@@ -155,8 +156,8 @@ public class AudioMixingRule {
                return false;
        }
    }

    private static boolean isValidAttributesSystemApiRule(int rule) {
        // API rules only expose the RULE_MATCH_* rules
        switch (rule) {
            case RULE_MATCH_ATTRIBUTE_USAGE:
            case RULE_MATCH_ATTRIBUTE_CAPTURE_PRESET:
@@ -167,13 +168,11 @@ public class AudioMixingRule {
    }

    private static boolean isValidRule(int rule) {
        switch(rule) {
        final int match_rule = rule & ~RULE_EXCLUSION_MASK;
        switch (match_rule) {
            case RULE_MATCH_ATTRIBUTE_USAGE:
            case RULE_EXCLUDE_ATTRIBUTE_USAGE:
            case RULE_MATCH_ATTRIBUTE_CAPTURE_PRESET:
            case RULE_EXCLUDE_ATTRIBUTE_CAPTURE_PRESET:
            case RULE_MATCH_UID:
            case RULE_EXCLUDE_UID:
                return true;
            default:
                return false;
@@ -327,24 +326,10 @@ public class AudioMixingRule {
        private Builder checkAddRuleObjInternal(int rule, Object property)
                throws IllegalArgumentException {
            if (property == null) {
                throw new IllegalArgumentException("Illegal null Object argument");
                throw new IllegalArgumentException("Illegal null argument for mixing rule");
            }
            if (!isValidRule(rule)) {
                throw new IllegalArgumentException("Illegal rule value " + rule);
            } else {
                // as rules are added to the Builder, we verify they are consistent with the type
                // of mix being built. When adding the first rule, the mix type is MIX_TYPE_INVALID.
                if (mTargetMixType == AudioMix.MIX_TYPE_INVALID) {
                    if (isPlayerRule(rule)) {
                        mTargetMixType = AudioMix.MIX_TYPE_PLAYERS;
                    } else {
                        mTargetMixType = AudioMix.MIX_TYPE_RECORDERS;
                    }
                } else if (((mTargetMixType == AudioMix.MIX_TYPE_PLAYERS) && !isPlayerRule(rule))
                        || ((mTargetMixType == AudioMix.MIX_TYPE_RECORDERS) && isPlayerRule(rule)))
                {
                    throw new IllegalArgumentException("Incompatible rule for mix");
                }
            }
            final int match_rule = rule & ~RULE_EXCLUSION_MASK;
            if (isAudioAttributeRule(match_rule)) {
@@ -379,6 +364,19 @@ public class AudioMixingRule {
         */
        private Builder addRuleInternal(AudioAttributes attrToMatch, Integer intProp, int rule)
                throws IllegalArgumentException {
            // as rules are added to the Builder, we verify they are consistent with the type
            // of mix being built. When adding the first rule, the mix type is MIX_TYPE_INVALID.
            if (mTargetMixType == AudioMix.MIX_TYPE_INVALID) {
                if (isPlayerRule(rule)) {
                    mTargetMixType = AudioMix.MIX_TYPE_PLAYERS;
                } else {
                    mTargetMixType = AudioMix.MIX_TYPE_RECORDERS;
                }
            } else if (((mTargetMixType == AudioMix.MIX_TYPE_PLAYERS) && !isPlayerRule(rule))
                    || ((mTargetMixType == AudioMix.MIX_TYPE_RECORDERS) && isPlayerRule(rule)))
            {
                throw new IllegalArgumentException("Incompatible rule for mix");
            }
            synchronized (mCriteria) {
                Iterator<AttributeMatchCriterion> crIterator = mCriteria.iterator();
                final int match_rule = rule & ~RULE_EXCLUSION_MASK;
@@ -430,6 +428,7 @@ public class AudioMixingRule {
                    }
                }
                // rule didn't exist, add it
                // FIXME doesn't work with RULE_MATCH_UID yet
                mCriteria.add(new AttributeMatchCriterion(attrToMatch, rule));
            }
            return this;