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

Commit f686a34d authored by Jean-Michel Trivi's avatar Jean-Michel Trivi Committed by android-build-merger
Browse files

Merge "AudioService: don't send BECOMING_NOISY when dyn policy affects media" into pi-dev

am: 4e532f59

Change-Id: Ieec0a22628dd9b55104e6d80e457f6d80f5f095f
parents 40b3dc22 4e532f59
Loading
Loading
Loading
Loading
+5 −0
Original line number Original line Diff line number Diff line
@@ -161,6 +161,11 @@ public class AudioMix {
        return mDeviceAddress;
        return mDeviceAddress;
    }
    }


    /** @hide */
    public boolean isAffectingUsage(int usage) {
        return mRule.isAffectingUsage(usage);
    }

    /** @hide */
    /** @hide */
    @Override
    @Override
    public boolean equals(Object o) {
    public boolean equals(Object o) {
+11 −0
Original line number Original line Diff line number Diff line
@@ -135,6 +135,17 @@ public class AudioMixingRule {
        }
        }
    }
    }


    boolean isAffectingUsage(int usage) {
        for (AudioMixMatchCriterion criterion : mCriteria) {
            if ((criterion.mRule & RULE_MATCH_ATTRIBUTE_USAGE) != 0
                    && criterion.mAttr != null
                    && criterion.mAttr.getUsage() == usage) {
                return true;
            }
        }
        return false;
    }

    private static boolean areCriteriaEquivalent(ArrayList<AudioMixMatchCriterion> cr1,
    private static boolean areCriteriaEquivalent(ArrayList<AudioMixMatchCriterion> cr1,
            ArrayList<AudioMixMatchCriterion> cr2) {
            ArrayList<AudioMixMatchCriterion> cr2) {
        if (cr1 == null || cr2 == null) return false;
        if (cr1 == null || cr2 == null) return false;
+31 −1
Original line number Original line Diff line number Diff line
@@ -144,6 +144,7 @@ import java.io.IOException;
import java.io.PrintWriter;
import java.io.PrintWriter;
import java.lang.reflect.Field;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Iterator;
import java.util.List;
import java.util.List;
@@ -5683,7 +5684,9 @@ public class AudioService extends IAudioService.Stub
            }
            }
            // ignore condition on device being actually used for music when in communication
            // ignore condition on device being actually used for music when in communication
            // because music routing is altered in this case.
            // because music routing is altered in this case.
            if (((device == musicDevice) || isInCommunication()) && (device == devices)) {
            // also checks whether media routing if affected by a dynamic policy
            if (((device == musicDevice) || isInCommunication()) && (device == devices)
                    && !hasMediaDynamicPolicy()) {
                mAudioHandler.removeMessages(MSG_BROADCAST_AUDIO_BECOMING_NOISY);
                mAudioHandler.removeMessages(MSG_BROADCAST_AUDIO_BECOMING_NOISY);
                sendMsg(mAudioHandler,
                sendMsg(mAudioHandler,
                        MSG_BROADCAST_AUDIO_BECOMING_NOISY,
                        MSG_BROADCAST_AUDIO_BECOMING_NOISY,
@@ -5709,6 +5712,24 @@ public class AudioService extends IAudioService.Stub
        return delay;
        return delay;
    }
    }


    /**
     * @return true if there is currently a registered dynamic mixing policy that affects media
     */
    private boolean hasMediaDynamicPolicy() {
        synchronized (mAudioPolicies) {
            if (mAudioPolicies.isEmpty()) {
                return false;
            }
            final Collection<AudioPolicyProxy> appColl = mAudioPolicies.values();
            for (AudioPolicyProxy app : appColl) {
                if (app.hasMixAffectingUsage(AudioAttributes.USAGE_MEDIA)) {
                    return true;
                }
            }
            return false;
        }
    }

    private void updateAudioRoutes(int device, int state)
    private void updateAudioRoutes(int device, int state)
    {
    {
        int connType = 0;
        int connType = 0;
@@ -7407,6 +7428,15 @@ public class AudioService extends IAudioService.Stub
            Binder.restoreCallingIdentity(identity);
            Binder.restoreCallingIdentity(identity);
        }
        }


        boolean hasMixAffectingUsage(int usage) {
            for (AudioMix mix : mMixes) {
                if (mix.isAffectingUsage(usage)) {
                    return true;
                }
            }
            return false;
        }

        void addMixes(@NonNull ArrayList<AudioMix> mixes) {
        void addMixes(@NonNull ArrayList<AudioMix> mixes) {
            // TODO optimize to not have to unregister the mixes already in place
            // TODO optimize to not have to unregister the mixes already in place
            synchronized (mMixes) {
            synchronized (mMixes) {