Loading src/com/android/server/telecom/CallAudioManager.java +10 −0 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; Loading @@ -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<>(); Loading @@ -85,6 +88,7 @@ public class CallAudioManager extends CallsManagerListenerBase { mPlayerFactory = playerFactory; mRinger = ringer; mRingbackPlayer = ringbackPlayer; mBluetoothStateReceiver = bluetoothStateReceiver; mDtmfLocalTonePlayer = dtmfLocalTonePlayer; mPlayerFactory.setCallAudioManager(this); Loading Loading @@ -148,6 +152,9 @@ public class CallAudioManager extends CallsManagerListenerBase { } updateForegroundCall(); mCalls.add(call); if (mCalls.size() == 1) { mBluetoothStateReceiver.setIsInCall(true); } onCallEnteringState(call, call.getState()); } Loading @@ -166,6 +173,9 @@ public class CallAudioManager extends CallsManagerListenerBase { updateForegroundCall(); mCalls.remove(call); if (mCalls.size() == 0) { mBluetoothStateReceiver.setIsInCall(false); } onCallLeavingState(call, call.getState()); } Loading src/com/android/server/telecom/CallsManager.java +4 −1 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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; Loading Loading @@ -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()); Loading src/com/android/server/telecom/TelecomSystem.java +6 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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); Loading Loading @@ -271,6 +276,7 @@ public class TelecomSystem { emergencyCallHelper, toneGeneratorFactory, clockProxy, bluetoothStateReceiver, inCallControllerFactory); mIncomingCallNotifier = incomingCallNotifier; Loading src/com/android/server/telecom/bluetooth/BluetoothDeviceManager.java +18 −46 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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) { Loading Loading @@ -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()); } } } } src/com/android/server/telecom/bluetooth/BluetoothRouteManager.java +0 −44 Original line number Diff line number Diff line Loading @@ -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. Loading Loading @@ -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 Loading
src/com/android/server/telecom/CallAudioManager.java +10 −0 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; Loading @@ -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<>(); Loading @@ -85,6 +88,7 @@ public class CallAudioManager extends CallsManagerListenerBase { mPlayerFactory = playerFactory; mRinger = ringer; mRingbackPlayer = ringbackPlayer; mBluetoothStateReceiver = bluetoothStateReceiver; mDtmfLocalTonePlayer = dtmfLocalTonePlayer; mPlayerFactory.setCallAudioManager(this); Loading Loading @@ -148,6 +152,9 @@ public class CallAudioManager extends CallsManagerListenerBase { } updateForegroundCall(); mCalls.add(call); if (mCalls.size() == 1) { mBluetoothStateReceiver.setIsInCall(true); } onCallEnteringState(call, call.getState()); } Loading @@ -166,6 +173,9 @@ public class CallAudioManager extends CallsManagerListenerBase { updateForegroundCall(); mCalls.remove(call); if (mCalls.size() == 0) { mBluetoothStateReceiver.setIsInCall(false); } onCallLeavingState(call, call.getState()); } Loading
src/com/android/server/telecom/CallsManager.java +4 −1 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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; Loading Loading @@ -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()); Loading
src/com/android/server/telecom/TelecomSystem.java +6 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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); Loading Loading @@ -271,6 +276,7 @@ public class TelecomSystem { emergencyCallHelper, toneGeneratorFactory, clockProxy, bluetoothStateReceiver, inCallControllerFactory); mIncomingCallNotifier = incomingCallNotifier; Loading
src/com/android/server/telecom/bluetooth/BluetoothDeviceManager.java +18 −46 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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) { Loading Loading @@ -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()); } } } }
src/com/android/server/telecom/bluetooth/BluetoothRouteManager.java +0 −44 Original line number Diff line number Diff line Loading @@ -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. Loading Loading @@ -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