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

Commit 96fbf175 authored by jiabin's avatar jiabin Committed by JJ Lee
Browse files

Fix USB power regression when connecting USB headset during phone/voip call.

When a bi-direction USB device plugged in, first connect the output device and then the input device. The policy will prefer the paired input and output device. Connecting USB output device first can make the USB input device be used for phone/voip call once it is available.

Also cache if the USB device support jack detect to avoid opening mixer when the jack detect is not supported.

Bug: 282094846
Test: make
Test: repo steps in the bug
Change-Id: I7cc10b63c887493da284c8fad4384ee68bfd9337
parent 277bbab1
Loading
Loading
Loading
Loading
+10 −2
Original line number Diff line number Diff line
@@ -59,6 +59,8 @@ public final class UsbAlsaDevice {
    private String mDeviceName = "";
    private String mDeviceDescription = "";

    private boolean mHasJackDetect = true;

    public UsbAlsaDevice(IAudioService audioService, int card, int device, String deviceAddress,
            boolean hasOutput, boolean hasInput,
            boolean isInputHeadset, boolean isOutputHeadset, boolean isDock) {
@@ -168,8 +170,14 @@ public final class UsbAlsaDevice {
        if (mJackDetector != null) {
            return;
        }
        if (!mHasJackDetect) {
            return;
        }
        // If no jack detect capabilities exist, mJackDetector will be null.
        mJackDetector = UsbAlsaJackDetector.startJackDetect(this);
        if (mJackDetector == null) {
            mHasJackDetect = false;
        }
    }

    /** Stops a jack-detection thread. */
@@ -182,8 +190,8 @@ public final class UsbAlsaDevice {

    /** Start using this device as the selected USB Audio Device. */
    public synchronized void start() {
        startInput();
        startOutput();
        startInput();
    }

    /** Start using this device as the selected USB input device. */
@@ -208,8 +216,8 @@ public final class UsbAlsaDevice {

    /** Stop using this device as the selected USB Audio Device. */
    public synchronized void stop() {
        stopInput();
        stopOutput();
        stopInput();
    }

    /** Stop using this device as the selected USB input device. */