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

Commit 2c8b9bae authored by Eric Laurent's avatar Eric Laurent
Browse files

AudioDeviceBroker: fix communication route update

Fix missing call to onUpdateCommunicationRoute() when the audio mode
is changing from RINGTONE to IN_COMMUNICATION/IN_CALL but the mode owner
remains the same.

Also:
- Rename getPreferredDeviceForComm() to getPreferredCommunicationDevice()
- Add some logging.

Bug: 181108983
Test: manual audio call routing tests
Change-Id: I29827d1c5a4cb0598a60e2cb3eccb9a52b210797
parent 060b1b49
Loading
Loading
Loading
Loading
+12 −9
Original line number Diff line number Diff line
@@ -424,7 +424,7 @@ import java.util.concurrent.atomic.AtomicBoolean;
     * @return true if speakerphone is active, false otherwise.
     */
    /*package*/ boolean isSpeakerphoneOn() {
        AudioDeviceAttributes device = getPreferredDeviceForComm();
        AudioDeviceAttributes device = getPreferredCommunicationDevice();
        if (device == null) {
            return false;
        }
@@ -595,7 +595,7 @@ import java.util.concurrent.atomic.AtomicBoolean;
     * @return true if Bluetooth SCO is active , false otherwise.
     */
    /*package*/ boolean isBluetoothScoOn() {
        AudioDeviceAttributes device = getPreferredDeviceForComm();
        AudioDeviceAttributes device = getPreferredCommunicationDevice();
        if (device == null) {
            return false;
        }
@@ -1021,9 +1021,11 @@ import java.util.concurrent.atomic.AtomicBoolean;

        pw.println("\n" + prefix + "mPreferredCommunicationDevice: "
                +  mPreferredCommunicationDevice);

        pw.println(prefix + "Selected Communication Device: "
                +  ((getCommunicationDevice() == null) ? "None"
                        : new AudioDeviceAttributes(getCommunicationDevice())));

        pw.println(prefix + "mCommunicationStrategyId: "
                +  mCommunicationStrategyId);

@@ -1213,14 +1215,12 @@ import java.util.concurrent.atomic.AtomicBoolean;
                case MSG_I_SET_MODE_OWNER_PID:
                    synchronized (mSetModeLock) {
                        synchronized (mDeviceStateLock) {
                            if (mModeOwnerPid != msg.arg1) {
                            mModeOwnerPid = msg.arg1;
                            if (msg.arg2 != AudioSystem.MODE_RINGTONE) {
                                onUpdateCommunicationRoute("setNewModeOwner");
                            }
                        }
                    }
                    }
                    break;
                case MSG_L_COMMUNICATION_ROUTE_CLIENT_DIED:
                    synchronized (mSetModeLock) {
@@ -1676,7 +1676,7 @@ import java.util.concurrent.atomic.AtomicBoolean;
     * @return selected forced usage for communication.
     */
    @GuardedBy("mDeviceStateLock")
    @Nullable private AudioDeviceAttributes getPreferredDeviceForComm() {
    @Nullable private AudioDeviceAttributes getPreferredCommunicationDevice() {
        boolean btSCoOn = mBluetoothScoOn && mBtHelper.isBluetoothScoOn();
        if (btSCoOn) {
            // Use the SCO device known to BtHelper so that it matches exactly
@@ -1704,11 +1704,14 @@ import java.util.concurrent.atomic.AtomicBoolean;
    // @GuardedBy("mSetModeLock")
    @GuardedBy("mDeviceStateLock")
    private void onUpdateCommunicationRoute(String eventSource) {
        mPreferredCommunicationDevice = getPreferredDeviceForComm();
        mPreferredCommunicationDevice = getPreferredCommunicationDevice();
        if (AudioService.DEBUG_COMM_RTE) {
            Log.v(TAG, "onUpdateCommunicationRoute, mPreferredCommunicationDevice: "
                    + mPreferredCommunicationDevice + " eventSource: " + eventSource);
        }
        AudioService.sDeviceLogger.log((new AudioEventLogger.StringEvent(
                "onUpdateCommunicationRoute, mPreferredCommunicationDevice: "
                + mPreferredCommunicationDevice + " eventSource: " + eventSource)));

        if (mPreferredCommunicationDevice == null
                || !AudioSystem.DEVICE_OUT_ALL_SCO_SET.contains(
+5 −0
Original line number Diff line number Diff line
@@ -662,6 +662,11 @@ public class AudioDeviceInventory {

    /*package*/ int removePreferredDevicesForStrategySync(int strategy) {
        final long identity = Binder.clearCallingIdentity();

        AudioService.sDeviceLogger.log((new AudioEventLogger.StringEvent(
                "removePreferredDevicesForStrategySync, strategy: "
                + strategy)).printLog(TAG));

        final int status = mAudioSystem.removeDevicesRoleForStrategy(
                strategy, AudioSystem.DEVICE_ROLE_PREFERRED);
        Binder.restoreCallingIdentity(identity);