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

Commit 9f691bae authored by Hall Liu's avatar Hall Liu Committed by Gerrit Code Review
Browse files

Merge "Don't follow BT audio changes outside of calls"

parents 87a9f2ac c7d406a1
Loading
Loading
Loading
Loading
+10 −0
Original line number Diff line number Diff line
@@ -26,6 +26,7 @@ import android.util.SparseArray;

import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.util.IndentingPrintWriter;
import com.android.server.telecom.bluetooth.BluetoothStateReceiver;

import java.util.Collection;
import java.util.HashSet;
@@ -48,6 +49,7 @@ public class CallAudioManager extends CallsManagerListenerBase {

    private final CallAudioRouteStateMachine mCallAudioRouteStateMachine;
    private final CallAudioModeStateMachine mCallAudioModeStateMachine;
    private final BluetoothStateReceiver mBluetoothStateReceiver;
    private final CallsManager mCallsManager;
    private final InCallTonePlayer.Factory mPlayerFactory;
    private final Ringer mRinger;
@@ -65,6 +67,7 @@ public class CallAudioManager extends CallsManagerListenerBase {
            InCallTonePlayer.Factory playerFactory,
            Ringer ringer,
            RingbackPlayer ringbackPlayer,
            BluetoothStateReceiver bluetoothStateReceiver,
            DtmfLocalTonePlayer dtmfLocalTonePlayer) {
        mActiveDialingOrConnectingCalls = new LinkedHashSet<>();
        mRingingCalls = new LinkedHashSet<>();
@@ -85,6 +88,7 @@ public class CallAudioManager extends CallsManagerListenerBase {
        mPlayerFactory = playerFactory;
        mRinger = ringer;
        mRingbackPlayer = ringbackPlayer;
        mBluetoothStateReceiver = bluetoothStateReceiver;
        mDtmfLocalTonePlayer = dtmfLocalTonePlayer;

        mPlayerFactory.setCallAudioManager(this);
@@ -148,6 +152,9 @@ public class CallAudioManager extends CallsManagerListenerBase {
        }
        updateForegroundCall();
        mCalls.add(call);
        if (mCalls.size() == 1) {
            mBluetoothStateReceiver.setIsInCall(true);
        }

        onCallEnteringState(call, call.getState());
    }
@@ -166,6 +173,9 @@ public class CallAudioManager extends CallsManagerListenerBase {

        updateForegroundCall();
        mCalls.remove(call);
        if (mCalls.size() == 0) {
            mBluetoothStateReceiver.setIsInCall(false);
        }

        onCallLeavingState(call, call.getState());
    }
+4 −1
Original line number Diff line number Diff line
@@ -57,6 +57,7 @@ import com.android.internal.telephony.PhoneConstants;
import com.android.internal.telephony.TelephonyProperties;
import com.android.internal.util.IndentingPrintWriter;
import com.android.server.telecom.bluetooth.BluetoothRouteManager;
import com.android.server.telecom.bluetooth.BluetoothStateReceiver;
import com.android.server.telecom.callfiltering.AsyncBlockCheckFilter;
import com.android.server.telecom.callfiltering.BlockCheckerAdapter;
import com.android.server.telecom.callfiltering.CallFilterResultCallback;
@@ -337,6 +338,7 @@ public class CallsManager extends Call.ListenerBase
            EmergencyCallHelper emergencyCallHelper,
            InCallTonePlayer.ToneGeneratorFactory toneGeneratorFactory,
            ClockProxy clockProxy,
            BluetoothStateReceiver bluetoothStateReceiver,
            InCallControllerFactory inCallControllerFactory) {
        mContext = context;
        mLock = lock;
@@ -392,7 +394,8 @@ public class CallsManager extends Call.ListenerBase
        mCallAudioManager = new CallAudioManager(callAudioRouteStateMachine,
                this,new CallAudioModeStateMachine((AudioManager)
                        mContext.getSystemService(Context.AUDIO_SERVICE)),
                playerFactory, mRinger, new RingbackPlayer(playerFactory), mDtmfLocalTonePlayer);
                playerFactory, mRinger, new RingbackPlayer(playerFactory),
                bluetoothStateReceiver, mDtmfLocalTonePlayer);

        mConnectionSvrFocusMgr = connectionServiceFocusManagerFactory.create(
                mRequester, Looper.getMainLooper());
+6 −0
Original line number Diff line number Diff line
@@ -19,6 +19,7 @@ package com.android.server.telecom;
import com.android.internal.annotations.VisibleForTesting;
import com.android.server.telecom.bluetooth.BluetoothDeviceManager;
import com.android.server.telecom.bluetooth.BluetoothRouteManager;
import com.android.server.telecom.bluetooth.BluetoothStateReceiver;
import com.android.server.telecom.components.UserCallIntentProcessor;
import com.android.server.telecom.components.UserCallIntentProcessorFactory;
import com.android.server.telecom.ui.IncomingCallNotifier;
@@ -229,6 +230,10 @@ public class TelecomSystem {
                new BluetoothAdapterProxy(), mLock);
        BluetoothRouteManager bluetoothRouteManager = new BluetoothRouteManager(mContext, mLock,
                bluetoothDeviceManager, new Timeouts.Adapter());
        BluetoothStateReceiver bluetoothStateReceiver = new BluetoothStateReceiver(
                bluetoothDeviceManager, bluetoothRouteManager);
        mContext.registerReceiver(bluetoothStateReceiver, BluetoothStateReceiver.INTENT_FILTER);

        WiredHeadsetManager wiredHeadsetManager = new WiredHeadsetManager(mContext);
        SystemStateProvider systemStateProvider = new SystemStateProvider(mContext);

@@ -271,6 +276,7 @@ public class TelecomSystem {
                emergencyCallHelper,
                toneGeneratorFactory,
                clockProxy,
                bluetoothStateReceiver,
                inCallControllerFactory);

        mIncomingCallNotifier = incomingCallNotifier;
+18 −46
Original line number Diff line number Diff line
@@ -80,49 +80,6 @@ public class BluetoothDeviceManager {
                }
           };

    private final BroadcastReceiver mReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            Log.startSession("BM.oR");
            try {
                String action = intent.getAction();

                if (action.equals(BluetoothHeadset.ACTION_CONNECTION_STATE_CHANGED)) {
                    int bluetoothHeadsetState = intent.getIntExtra(BluetoothHeadset.EXTRA_STATE,
                            BluetoothHeadset.STATE_DISCONNECTED);
                    BluetoothDevice device =
                            intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);

                    if (device == null) {
                        Log.w(BluetoothDeviceManager.this, "Got null device from broadcast. " +
                                "Ignoring.");
                        return;
                    }

                    Log.i(BluetoothDeviceManager.this, "Device %s changed state to %d",
                            device.getAddress(), bluetoothHeadsetState);

                    synchronized (mLock) {
                        if (bluetoothHeadsetState == BluetoothHeadset.STATE_CONNECTED) {
                            if (!mConnectedDevicesByAddress.containsKey(device.getAddress())) {
                                mConnectedDevicesByAddress.put(device.getAddress(), device);
                                mBluetoothRouteManager.onDeviceAdded(device.getAddress());
                            }
                        } else if (bluetoothHeadsetState == BluetoothHeadset.STATE_DISCONNECTED
                                || bluetoothHeadsetState == BluetoothHeadset.STATE_DISCONNECTING) {
                            if (mConnectedDevicesByAddress.containsKey(device.getAddress())) {
                                mConnectedDevicesByAddress.remove(device.getAddress());
                                mBluetoothRouteManager.onDeviceLost(device.getAddress());
                            }
                        }
                    }
                }
            } finally {
                Log.endSession();
            }
        }
    };

    private final LinkedHashMap<String, BluetoothDevice> mConnectedDevicesByAddress =
            new LinkedHashMap<>();
    private final TelecomSystem.SyncRoot mLock;
@@ -138,9 +95,6 @@ public class BluetoothDeviceManager {
            bluetoothAdapter.getProfileProxy(context, mBluetoothProfileServiceListener,
                    BluetoothProfile.HEADSET);
        }
        IntentFilter intentFilter =
                new IntentFilter(BluetoothHeadset.ACTION_CONNECTION_STATE_CHANGED);
        context.registerReceiver(mReceiver, intentFilter);
    }

    public void setBluetoothRouteManager(BluetoothRouteManager brm) {
@@ -174,4 +128,22 @@ public class BluetoothDeviceManager {
    public void setHeadsetServiceForTesting(BluetoothHeadsetProxy bluetoothHeadset) {
        mBluetoothHeadsetService = bluetoothHeadset;
    }

    void onDeviceConnected(BluetoothDevice device) {
        synchronized (mLock) {
            if (!mConnectedDevicesByAddress.containsKey(device.getAddress())) {
                mConnectedDevicesByAddress.put(device.getAddress(), device);
                mBluetoothRouteManager.onDeviceAdded(device.getAddress());
            }
        }
    }

    void onDeviceDisconnected(BluetoothDevice device) {
        synchronized (mLock) {
            if (mConnectedDevicesByAddress.containsKey(device.getAddress())) {
                mConnectedDevicesByAddress.remove(device.getAddress());
                mBluetoothRouteManager.onDeviceLost(device.getAddress());
            }
        }
    }
}
+0 −44
Original line number Diff line number Diff line
@@ -80,47 +80,6 @@ public class BluetoothRouteManager extends StateMachine {
        void onBluetoothAudioDisconnected();
    }

    // Broadcast receiver to receive audio state change broadcasts from the BT stack
    private final BroadcastReceiver mReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            Log.startSession("BRM.oR");
            try {
                String action = intent.getAction();

                if (action.equals(BluetoothHeadset.ACTION_AUDIO_STATE_CHANGED)) {
                    int bluetoothHeadsetAudioState =
                            intent.getIntExtra(BluetoothHeadset.EXTRA_STATE,
                                    BluetoothHeadset.STATE_AUDIO_DISCONNECTED);
                    BluetoothDevice device =
                            intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
                    if (device == null) {
                        Log.w(BluetoothRouteManager.this, "Got null device from broadcast. " +
                                "Ignoring.");
                        return;
                    }

                    Log.i(BluetoothRouteManager.this, "Device %s transitioned to audio state %d",
                            device.getAddress(), bluetoothHeadsetAudioState);
                    Session session = Log.createSubsession();
                    SomeArgs args = SomeArgs.obtain();
                    args.arg1 = session;
                    args.arg2 = device.getAddress();
                    switch (bluetoothHeadsetAudioState) {
                        case BluetoothHeadset.STATE_AUDIO_CONNECTED:
                            sendMessage(HFP_IS_ON, args);
                            break;
                        case BluetoothHeadset.STATE_AUDIO_DISCONNECTED:
                            sendMessage(HFP_LOST, args);
                            break;
                    }
                }
            } finally {
                Log.endSession();
            }
        }
    };

    /**
     * Constants representing messages sent to the state machine.
     * Messages are expected to be sent with {@link SomeArgs} as the obj.
@@ -511,9 +470,6 @@ public class BluetoothRouteManager extends StateMachine {
        mDeviceManager.setBluetoothRouteManager(this);
        mTimeoutsAdapter = timeoutsAdapter;

        IntentFilter intentFilter = new IntentFilter(BluetoothHeadset.ACTION_AUDIO_STATE_CHANGED);
        context.registerReceiver(mReceiver, intentFilter);

        mAudioOffState = new AudioOffState();
        addState(mAudioOffState);
        setInitialState(mAudioOffState);
Loading