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

Commit 5b65df1b authored by Jean-Michel Trivi's avatar Jean-Michel Trivi
Browse files

AudioService: fix muteAwaitConnection device check

Add logs for muteAwaitConnection API calls.
Fix cancel operation by testing device equality with
AudioDeviceAttributes.equalTypeAddress instead of equals as the
device passed by the caller may have just been qualified by
type and address, and may not contain the actual profiles and
descriptors of a connected device.

Bug: 229806548
Test: atest com.google.android.gts.audioservice.AudioServiceHostTest#testMuteAwaitConnection
Change-Id: Id216e6d88859425f9fa49e45843f51ca83ae9b63
parent 8b7783d4
Loading
Loading
Loading
Loading
+3 −1
Original line number Diff line number Diff line
@@ -9123,6 +9123,8 @@ public class AudioService extends IAudioService.Stub
        if (timeOutMs <= 0 || usages.length == 0) {
            throw new IllegalArgumentException("Invalid timeOutMs/usagesToMute");
        }
        Log.i(TAG, "muteAwaitConnection dev:" + device + " timeOutMs:" + timeOutMs
                + " usages:" + usages);

        if (mDeviceBroker.isDeviceConnected(device)) {
            // not throwing an exception as there could be a race between a connection (server-side,
@@ -9166,7 +9168,7 @@ public class AudioService extends IAudioService.Stub
                Log.i(TAG, "cancelMuteAwaitConnection ignored, no expected device");
                return;
            }
            if (!device.equals(mMutingExpectedDevice)) {
            if (!device.equalTypeAddress(mMutingExpectedDevice)) {
                Log.e(TAG, "cancelMuteAwaitConnection ignored, got " + device
                        + "] but expected device is" + mMutingExpectedDevice);
                throw new IllegalStateException("cancelMuteAwaitConnection for wrong device");
+3 −0
Original line number Diff line number Diff line
@@ -1158,6 +1158,8 @@ public final class PlaybackActivityMonitor
    //==========================================================================================
    void muteAwaitConnection(@NonNull int[] usagesToMute,
            @NonNull AudioDeviceAttributes dev, long timeOutMs) {
        sEventLogger.loglogi(
                "muteAwaitConnection() dev:" + dev + " timeOutMs:" + timeOutMs, TAG);
        synchronized (mPlayerLock) {
            mutePlayersExpectingDevice(usagesToMute);
            // schedule timeout (remove previously scheduled first)
@@ -1169,6 +1171,7 @@ public final class PlaybackActivityMonitor
    }

    void cancelMuteAwaitConnection() {
        sEventLogger.loglogi("cancelMuteAwaitConnection()", TAG);
        synchronized (mPlayerLock) {
            // cancel scheduled timeout, ignore device, only one expected device at a time
            mEventHandler.removeMessages(MSG_L_TIMEOUT_MUTE_AWAIT_CONNECTION);