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

Commit 3952b78c authored by Grace Jia's avatar Grace Jia Committed by Android (Google) Code Review
Browse files

Merge "Revert "Fix audio switch of speaker -> BT LE or speaker -> HA issue."" into main

parents 36876c42 335297f4
Loading
Loading
Loading
Loading
+23 −27
Original line number Diff line number Diff line
@@ -27,6 +27,7 @@ import android.bluetooth.BluetoothStatusCodes;
import android.content.Context;
import android.media.AudioManager;
import android.media.AudioDeviceInfo;
import android.media.audio.common.AudioDevice;
import android.os.Bundle;
import android.telecom.Log;
import android.util.ArraySet;
@@ -40,13 +41,13 @@ import com.android.server.telecom.flags.FeatureFlags;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.concurrent.Executor;
import java.util.LinkedHashMap;
import java.util.LinkedHashSet;
import java.util.LinkedList;
import java.util.List;
import java.util.Objects;
import java.util.Set;
import java.util.concurrent.Executor;

public class BluetoothDeviceManager {

@@ -458,8 +459,8 @@ public class BluetoothDeviceManager {
            disconnectSco();
        } else {
            disconnectSco();
            clearLeAudioOrSpeakerCommunicationDevice();
            clearHearingAidOrSpeakerCommunicationDevice();
            clearLeAudioCommunicationDevice();
            clearHearingAidCommunicationDevice();
        }
    }

@@ -479,9 +480,13 @@ public class BluetoothDeviceManager {
        return mHearingAidSetAsCommunicationDevice;
    }

    public void clearLeAudioOrSpeakerCommunicationDevice() {
    public void clearLeAudioCommunicationDevice() {
        Log.i(this, "clearLeAudioCommunicationDevice: mLeAudioSetAsCommunicationDevice = " +
                mLeAudioSetAsCommunicationDevice + " device = " + mLeAudioDevice);
        if (!mLeAudioSetAsCommunicationDevice) {
            return;
        }
        mLeAudioSetAsCommunicationDevice = false;
        if (mLeAudioDevice != null) {
            mBluetoothRouteManager.onAudioLost(mLeAudioDevice);
            mLeAudioDevice = null;
@@ -493,22 +498,20 @@ public class BluetoothDeviceManager {
        }

        AudioDeviceInfo audioDeviceInfo = mAudioManager.getCommunicationDevice();
        if (audioDeviceInfo != null) {
            if (audioDeviceInfo.getType() == AudioDeviceInfo.TYPE_BLE_HEADSET) {
                Log.i(this, "clearLeAudioCommunicationDevice: clearing le audio");
        if (audioDeviceInfo != null && audioDeviceInfo.getType()
                == AudioDeviceInfo.TYPE_BLE_HEADSET) {
            mBluetoothRouteManager.onAudioLost(audioDeviceInfo.getAddress());
            mAudioManager.clearCommunicationDevice();
            } else if (audioDeviceInfo.getType() == AudioDeviceInfo.TYPE_BUILTIN_SPEAKER) {
                Log.i(this, "clearLeAudioCommunicationDevice: clearing speaker");
                mAudioManager.clearCommunicationDevice();
        }
    }
        mLeAudioSetAsCommunicationDevice = false;
    }

    public void clearHearingAidOrSpeakerCommunicationDevice() {
    public void clearHearingAidCommunicationDevice() {
        Log.i(this, "clearHearingAidCommunicationDevice: mHearingAidSetAsCommunicationDevice = "
                + mHearingAidSetAsCommunicationDevice);
        if (!mHearingAidSetAsCommunicationDevice) {
            return;
        }
        mHearingAidSetAsCommunicationDevice = false;
        if (mHearingAidDevice != null) {
            mBluetoothRouteManager.onAudioLost(mHearingAidDevice);
            mHearingAidDevice = null;
@@ -520,17 +523,10 @@ public class BluetoothDeviceManager {
        }

        AudioDeviceInfo audioDeviceInfo = mAudioManager.getCommunicationDevice();
        if (audioDeviceInfo != null) {
            if (audioDeviceInfo.getType() == AudioDeviceInfo.TYPE_HEARING_AID) {
                Log.i(this, "clearHearingAidCommunicationDevice: clearing hearing aid");
                mBluetoothRouteManager.onAudioLost(audioDeviceInfo.getAddress());
        if (audioDeviceInfo != null && audioDeviceInfo.getType()
                == AudioDeviceInfo.TYPE_HEARING_AID) {
            mAudioManager.clearCommunicationDevice();
            } else if (audioDeviceInfo.getType() == AudioDeviceInfo.TYPE_BUILTIN_SPEAKER) {
                Log.i(this, "clearHearingAidCommunicationDevice: clearing speaker");
                mAudioManager.clearCommunicationDevice();
            }
        }
        mHearingAidSetAsCommunicationDevice = false;
    }

    public boolean setLeAudioCommunicationDevice() {
@@ -567,7 +563,7 @@ public class BluetoothDeviceManager {
        }

        // clear hearing aid communication device if set
        clearHearingAidOrSpeakerCommunicationDevice();
        clearHearingAidCommunicationDevice();

        // Turn BLE_OUT_HEADSET ON.
        boolean result = mAudioManager.setCommunicationDevice(bleHeadset);
@@ -616,7 +612,7 @@ public class BluetoothDeviceManager {
        }

        // clear LE audio communication device if set
        clearLeAudioOrSpeakerCommunicationDevice();
        clearLeAudioCommunicationDevice();

        // Turn hearing aid ON.
        boolean result = mAudioManager.setCommunicationDevice(hearingAid);
+2 −2
Original line number Diff line number Diff line
@@ -640,7 +640,7 @@ public class BluetoothRouteManager extends StateMachine {
                    mCommunicationDeviceTracker.clearCommunicationDevice(
                            AudioDeviceInfo.TYPE_BLE_HEADSET);
                } else {
                    mDeviceManager.clearLeAudioOrSpeakerCommunicationDevice();
                    mDeviceManager.clearLeAudioCommunicationDevice();
                }
            }
        } else if (deviceType == BluetoothDeviceManager.DEVICE_TYPE_HEARING_AID) {
@@ -650,7 +650,7 @@ public class BluetoothRouteManager extends StateMachine {
                    mCommunicationDeviceTracker.clearCommunicationDevice(
                            AudioDeviceInfo.TYPE_HEARING_AID);
                } else {
                    mDeviceManager.clearHearingAidOrSpeakerCommunicationDevice();
                    mDeviceManager.clearHearingAidCommunicationDevice();
                }
            }
        } else if (deviceType == BluetoothDeviceManager.DEVICE_TYPE_HEADSET) {
+2 −4
Original line number Diff line number Diff line
@@ -425,7 +425,6 @@ public class BluetoothDeviceManagerTest extends TelecomTestCase {
        List<AudioDeviceInfo> devices = new ArrayList<>();
        devices.add(mockAudioDeviceInfo);

        when(mockAudioManager.getCommunicationDevice()).thenReturn(mSpeakerInfo);
        when(mockAudioManager.getAvailableCommunicationDevices())
                .thenReturn(devices);
        when(mockAudioManager.setCommunicationDevice(eq(mockAudioDeviceInfo)))
@@ -461,7 +460,6 @@ public class BluetoothDeviceManagerTest extends TelecomTestCase {
        List<AudioDeviceInfo> devices = new ArrayList<>();
        devices.add(mockAudioDeviceInfo);

        when(mockAudioManager.getCommunicationDevice()).thenReturn(mSpeakerInfo);
        when(mockAudioManager.getAvailableCommunicationDevices())
                        .thenReturn(devices);
        when(mockAudioManager.setCommunicationDevice(mockAudioDeviceInfo))
@@ -781,10 +779,10 @@ public class BluetoothDeviceManagerTest extends TelecomTestCase {
            assertFalse(mCommunicationDeviceTracker.isAudioDeviceSetForType(device_type));
        } else {
            if (device_type == AudioDeviceInfo.TYPE_BLE_HEADSET) {
                mBluetoothDeviceManager.clearLeAudioOrSpeakerCommunicationDevice();
                mBluetoothDeviceManager.clearLeAudioCommunicationDevice();
                assertFalse(mBluetoothDeviceManager.isLeAudioCommunicationDevice());
            } else {
                mBluetoothDeviceManager.clearHearingAidOrSpeakerCommunicationDevice();
                mBluetoothDeviceManager.clearHearingAidCommunicationDevice();
                assertFalse(mBluetoothDeviceManager.isHearingAidSetAsCommunicationDevice());
            }
        }