Loading flags/telecom_callaudioroutestatemachine_flags.aconfig +14 −0 Original line number Diff line number Diff line Loading @@ -7,6 +7,13 @@ flag { bug: "292599751" } flag { name: "use_refactored_audio_route_switching" namespace: "telecom" description: "Refactored audio routing" bug: "306395598" } flag { name: "ensure_audio_mode_updates_on_foreground_call_change" namespace: "telecom" Loading @@ -27,3 +34,10 @@ flag { description: "Fix audio route transition issue on call disconnection when bt audio connected." bug: "306113816" } flag { name: "call_audio_communication_device_refactor" namespace: "telecom" description: "Refactor call audio set/clear communication device and include unsupported routes." bug: "308968392" } No newline at end of file src/com/android/server/telecom/CallAudioCommunicationDeviceTracker.java +10 −6 Original line number Diff line number Diff line Loading @@ -63,6 +63,10 @@ public class CallAudioCommunicationDeviceTracker { return mAudioDeviceType == audioDeviceType; } public int getCurrentLocallyRequestedCommunicationDevice() { return mAudioDeviceType; } @VisibleForTesting public void setTestCommunicationDevice(int audioDeviceType) { mAudioDeviceType = audioDeviceType; Loading Loading @@ -177,12 +181,6 @@ public class CallAudioCommunicationDeviceTracker { return; } if (isBtDevice && mBtAudioDevice != null) { // Signal that BT audio was lost for device. mBluetoothRouteManager.onAudioLost(mBtAudioDevice); mBtAudioDevice = null; } if (mAudioManager == null) { Log.i(this, "clearCommunicationDevice: mAudioManager is null"); return; Loading @@ -191,6 +189,12 @@ public class CallAudioCommunicationDeviceTracker { // Clear device and reset locally saved device type. mAudioManager.clearCommunicationDevice(); mAudioDeviceType = sAUDIO_DEVICE_TYPE_INVALID; if (isBtDevice && mBtAudioDevice != null) { // Signal that BT audio was lost for device. mBluetoothRouteManager.onAudioLost(mBtAudioDevice); mBtAudioDevice = null; } } private boolean isUsbHeadsetType(int audioDeviceType, int sourceType) { Loading src/com/android/server/telecom/CallAudioManager.java +23 −24 Original line number Diff line number Diff line Loading @@ -23,7 +23,6 @@ import android.media.ToneGenerator; import android.os.UserHandle; import android.telecom.CallAudioState; import android.telecom.Log; import android.telecom.PhoneAccount; import android.telecom.VideoProfile; import android.util.SparseArray; Loading Loading @@ -55,7 +54,7 @@ public class CallAudioManager extends CallsManagerListenerBase { private final Set<Call> mCalls; private final SparseArray<LinkedHashSet<Call>> mCallStateToCalls; private final CallAudioRouteStateMachine mCallAudioRouteStateMachine; private final CallAudioRouteAdapter mCallAudioRouteAdapter; private final CallAudioModeStateMachine mCallAudioModeStateMachine; private final BluetoothStateReceiver mBluetoothStateReceiver; private final CallsManager mCallsManager; Loading @@ -71,7 +70,7 @@ public class CallAudioManager extends CallsManagerListenerBase { private boolean mIsDisconnectedTonePlaying = false; private InCallTonePlayer mHoldTonePlayer; public CallAudioManager(CallAudioRouteStateMachine callAudioRouteStateMachine, public CallAudioManager(CallAudioRouteAdapter callAudioRouteAdapter, CallsManager callsManager, CallAudioModeStateMachine callAudioModeStateMachine, InCallTonePlayer.Factory playerFactory, Loading @@ -97,7 +96,7 @@ public class CallAudioManager extends CallsManagerListenerBase { put(CallState.AUDIO_PROCESSING, mAudioProcessingCalls); }}; mCallAudioRouteStateMachine = callAudioRouteStateMachine; mCallAudioRouteAdapter = callAudioRouteAdapter; mCallAudioModeStateMachine = callAudioModeStateMachine; mCallsManager = callsManager; mPlayerFactory = playerFactory; Loading @@ -109,7 +108,7 @@ public class CallAudioManager extends CallsManagerListenerBase { mPlayerFactory.setCallAudioManager(this); mCallAudioModeStateMachine.setCallAudioManager(this); mCallAudioRouteStateMachine.setCallAudioManager(this); mCallAudioRouteAdapter.setCallAudioManager(this); } @Override Loading Loading @@ -226,7 +225,7 @@ public class CallAudioManager extends CallsManagerListenerBase { // When pulling a video call, automatically enable the speakerphone. Log.d(LOG_TAG, "Switching to speaker because external video call %s was pulled." + call.getId()); mCallAudioRouteStateMachine.sendMessageWithSessionInfo( mCallAudioRouteAdapter.sendMessageWithSessionInfo( CallAudioRouteStateMachine.SWITCH_SPEAKER); } } Loading Loading @@ -378,7 +377,7 @@ public class CallAudioManager extends CallsManagerListenerBase { @Override public void onConnectionServiceChanged(Call call, ConnectionServiceWrapper oldCs, ConnectionServiceWrapper newCs) { mCallAudioRouteStateMachine.sendMessageWithSessionInfo( mCallAudioRouteAdapter.sendMessageWithSessionInfo( CallAudioRouteStateMachine.UPDATE_SYSTEM_AUDIO_ROUTE); } Loading @@ -396,13 +395,13 @@ public class CallAudioManager extends CallsManagerListenerBase { Log.d(LOG_TAG, "Switching to speaker because call %s transitioned video state from %s" + " to %s", call.getId(), VideoProfile.videoStateToString(previousVideoState), VideoProfile.videoStateToString(newVideoState)); mCallAudioRouteStateMachine.sendMessageWithSessionInfo( mCallAudioRouteAdapter.sendMessageWithSessionInfo( CallAudioRouteStateMachine.SWITCH_SPEAKER); } } public CallAudioState getCallAudioState() { return mCallAudioRouteStateMachine.getCurrentCallAudioState(); return mCallAudioRouteAdapter.getCurrentCallAudioState(); } public Call getPossiblyHeldForegroundCall() { Loading @@ -423,7 +422,7 @@ public class CallAudioManager extends CallsManagerListenerBase { Log.v(this, "ignoring toggleMute for emergency call"); return; } mCallAudioRouteStateMachine.sendMessageWithSessionInfo( mCallAudioRouteAdapter.sendMessageWithSessionInfo( CallAudioRouteStateMachine.TOGGLE_MUTE); } Loading @@ -443,7 +442,7 @@ public class CallAudioManager extends CallsManagerListenerBase { Log.v(this, "ignoring mute for emergency call"); } mCallAudioRouteStateMachine.sendMessageWithSessionInfo(shouldMute mCallAudioRouteAdapter.sendMessageWithSessionInfo(shouldMute ? CallAudioRouteStateMachine.MUTE_ON : CallAudioRouteStateMachine.MUTE_OFF); } Loading @@ -459,23 +458,23 @@ public class CallAudioManager extends CallsManagerListenerBase { Log.v(this, "setAudioRoute, route: %s", CallAudioState.audioRouteToString(route)); switch (route) { case CallAudioState.ROUTE_BLUETOOTH: mCallAudioRouteStateMachine.sendMessageWithSessionInfo( mCallAudioRouteAdapter.sendMessageWithSessionInfo( CallAudioRouteStateMachine.USER_SWITCH_BLUETOOTH, 0, bluetoothAddress); return; case CallAudioState.ROUTE_SPEAKER: mCallAudioRouteStateMachine.sendMessageWithSessionInfo( mCallAudioRouteAdapter.sendMessageWithSessionInfo( CallAudioRouteStateMachine.USER_SWITCH_SPEAKER); return; case CallAudioState.ROUTE_WIRED_HEADSET: mCallAudioRouteStateMachine.sendMessageWithSessionInfo( mCallAudioRouteAdapter.sendMessageWithSessionInfo( CallAudioRouteStateMachine.USER_SWITCH_HEADSET); return; case CallAudioState.ROUTE_EARPIECE: mCallAudioRouteStateMachine.sendMessageWithSessionInfo( mCallAudioRouteAdapter.sendMessageWithSessionInfo( CallAudioRouteStateMachine.USER_SWITCH_EARPIECE); return; case CallAudioState.ROUTE_WIRED_OR_EARPIECE: mCallAudioRouteStateMachine.sendMessageWithSessionInfo( mCallAudioRouteAdapter.sendMessageWithSessionInfo( CallAudioRouteStateMachine.USER_SWITCH_BASELINE_ROUTE, CallAudioRouteStateMachine.NO_INCLUDE_BLUETOOTH_IN_BASELINE); return; Loading @@ -490,7 +489,7 @@ public class CallAudioManager extends CallsManagerListenerBase { */ void switchBaseline() { Log.i(this, "switchBaseline"); mCallAudioRouteStateMachine.sendMessageWithSessionInfo( mCallAudioRouteAdapter.sendMessageWithSessionInfo( CallAudioRouteStateMachine.USER_SWITCH_BASELINE_ROUTE, CallAudioRouteStateMachine.INCLUDE_BLUETOOTH_IN_BASELINE); } Loading Loading @@ -534,7 +533,7 @@ public class CallAudioManager extends CallsManagerListenerBase { synchronized (mCallsManager.getLock()) { Call localForegroundCall = mForegroundCall; boolean result = mRinger.startRinging(localForegroundCall, mCallAudioRouteStateMachine.isHfpDeviceAvailable()); mCallAudioRouteAdapter.isHfpDeviceAvailable()); if (result) { localForegroundCall.setStartRingTime(); } Loading Loading @@ -567,7 +566,7 @@ public class CallAudioManager extends CallsManagerListenerBase { @VisibleForTesting public void setCallAudioRouteFocusState(int focusState) { mCallAudioRouteStateMachine.sendMessageWithSessionInfo( mCallAudioRouteAdapter.sendMessageWithSessionInfo( CallAudioRouteStateMachine.SWITCH_FOCUS, focusState); } Loading @@ -577,8 +576,8 @@ public class CallAudioManager extends CallsManagerListenerBase { } @VisibleForTesting public CallAudioRouteStateMachine getCallAudioRouteStateMachine() { return mCallAudioRouteStateMachine; public CallAudioRouteAdapter getCallAudioRouteAdapter() { return mCallAudioRouteAdapter; } @VisibleForTesting Loading Loading @@ -615,9 +614,9 @@ public class CallAudioManager extends CallsManagerListenerBase { mCallAudioModeStateMachine.dump(pw); pw.decreaseIndent(); pw.println("CallAudioRouteStateMachine:"); pw.println("mCallAudioRouteAdapter:"); pw.increaseIndent(); mCallAudioRouteStateMachine.dump(pw); mCallAudioRouteAdapter.dump(pw); pw.decreaseIndent(); pw.println("BluetoothDeviceManager:"); Loading Loading @@ -813,7 +812,7 @@ public class CallAudioManager extends CallsManagerListenerBase { mHoldingCalls.stream().map(c -> c.getId()).collect(Collectors.joining(",")) ); if (mForegroundCall != oldForegroundCall) { mCallAudioRouteStateMachine.sendMessageWithSessionInfo( mCallAudioRouteAdapter.sendMessageWithSessionInfo( CallAudioRouteStateMachine.UPDATE_SYSTEM_AUDIO_ROUTE); if (mForegroundCall != null Loading src/com/android/server/telecom/CallAudioModeStateMachine.java +18 −6 Original line number Diff line number Diff line Loading @@ -41,8 +41,10 @@ public class CallAudioModeStateMachine extends StateMachine { private LocalLog mLocalLog = new LocalLog(20); public static class Factory { public CallAudioModeStateMachine create(SystemStateHelper systemStateHelper, AudioManager am, FeatureFlags featureFlags) { return new CallAudioModeStateMachine(systemStateHelper, am, featureFlags); AudioManager am, FeatureFlags featureFlags, CallAudioCommunicationDeviceTracker callAudioCommunicationDeviceTracker) { return new CallAudioModeStateMachine(systemStateHelper, am, featureFlags, callAudioCommunicationDeviceTracker); } } Loading Loading @@ -277,6 +279,11 @@ public class CallAudioModeStateMachine extends StateMachine { Log.i(LOG_TAG, "Audio focus entering UNFOCUSED state"); mLocalLog.log("Enter UNFOCUSED"); if (mIsInitialized) { // Clear any communication device that was requested previously. if (mFeatureFlags.callAudioCommunicationDeviceRefactor()) { mCommunicationDeviceTracker.clearCommunicationDevice(mCommunicationDeviceTracker .getCurrentLocallyRequestedCommunicationDevice()); } if (mFeatureFlags.setAudioModeBeforeAbandonFocus()) { mAudioManager.setMode(AudioManager.MODE_NORMAL); mCallAudioManager.setCallAudioRouteFocusState( Loading Loading @@ -727,12 +734,12 @@ public class CallAudioModeStateMachine extends StateMachine { mAudioManager.setMode(AudioManager.MODE_COMMUNICATION_REDIRECT); mMostRecentMode = AudioManager.MODE_NORMAL; mCallAudioManager.setCallAudioRouteFocusState(CallAudioRouteStateMachine.ACTIVE_FOCUS); mCallAudioManager.getCallAudioRouteStateMachine().sendMessageWithSessionInfo( mCallAudioManager.getCallAudioRouteAdapter().sendMessageWithSessionInfo( CallAudioRouteStateMachine.STREAMING_FORCE_ENABLED); } private void preExit() { mCallAudioManager.getCallAudioRouteStateMachine().sendMessageWithSessionInfo( mCallAudioManager.getCallAudioRouteAdapter().sendMessageWithSessionInfo( CallAudioRouteStateMachine.STREAMING_FORCE_DISABLED); } Loading Loading @@ -878,17 +885,20 @@ public class CallAudioModeStateMachine extends StateMachine { private final SystemStateHelper mSystemStateHelper; private CallAudioManager mCallAudioManager; private FeatureFlags mFeatureFlags; private CallAudioCommunicationDeviceTracker mCommunicationDeviceTracker; private int mMostRecentMode; private boolean mIsInitialized = false; public CallAudioModeStateMachine(SystemStateHelper systemStateHelper, AudioManager audioManager, FeatureFlags featureFlags) { AudioManager audioManager, FeatureFlags featureFlags, CallAudioCommunicationDeviceTracker callAudioCommunicationDeviceTracker) { super(CallAudioModeStateMachine.class.getSimpleName()); mAudioManager = audioManager; mSystemStateHelper = systemStateHelper; mMostRecentMode = AudioManager.MODE_NORMAL; mFeatureFlags = featureFlags; mCommunicationDeviceTracker = callAudioCommunicationDeviceTracker; createStates(); } Loading @@ -897,12 +907,14 @@ public class CallAudioModeStateMachine extends StateMachine { * Used for testing */ public CallAudioModeStateMachine(SystemStateHelper systemStateHelper, AudioManager audioManager, Looper looper, FeatureFlags featureFlags) { AudioManager audioManager, Looper looper, FeatureFlags featureFlags, CallAudioCommunicationDeviceTracker communicationDeviceTracker) { super(CallAudioModeStateMachine.class.getSimpleName(), looper); mAudioManager = audioManager; mSystemStateHelper = systemStateHelper; mMostRecentMode = AudioManager.MODE_NORMAL; mFeatureFlags = featureFlags; mCommunicationDeviceTracker = communicationDeviceTracker; createStates(); } Loading src/com/android/server/telecom/CallAudioRouteAdapter.java 0 → 100644 +19 −0 Original line number Diff line number Diff line package com.android.server.telecom; import android.os.Handler; import android.telecom.CallAudioState; import com.android.internal.util.IndentingPrintWriter; public interface CallAudioRouteAdapter { void initialize(); void sendMessageWithSessionInfo(int message); void sendMessageWithSessionInfo(int message, int arg); void sendMessageWithSessionInfo(int message, int arg, String data); void sendMessage(int message, Runnable r); void setCallAudioManager(CallAudioManager callAudioManager); CallAudioState getCurrentCallAudioState(); boolean isHfpDeviceAvailable(); Handler getAdapterHandler(); void dump(IndentingPrintWriter pw); } Loading
flags/telecom_callaudioroutestatemachine_flags.aconfig +14 −0 Original line number Diff line number Diff line Loading @@ -7,6 +7,13 @@ flag { bug: "292599751" } flag { name: "use_refactored_audio_route_switching" namespace: "telecom" description: "Refactored audio routing" bug: "306395598" } flag { name: "ensure_audio_mode_updates_on_foreground_call_change" namespace: "telecom" Loading @@ -27,3 +34,10 @@ flag { description: "Fix audio route transition issue on call disconnection when bt audio connected." bug: "306113816" } flag { name: "call_audio_communication_device_refactor" namespace: "telecom" description: "Refactor call audio set/clear communication device and include unsupported routes." bug: "308968392" } No newline at end of file
src/com/android/server/telecom/CallAudioCommunicationDeviceTracker.java +10 −6 Original line number Diff line number Diff line Loading @@ -63,6 +63,10 @@ public class CallAudioCommunicationDeviceTracker { return mAudioDeviceType == audioDeviceType; } public int getCurrentLocallyRequestedCommunicationDevice() { return mAudioDeviceType; } @VisibleForTesting public void setTestCommunicationDevice(int audioDeviceType) { mAudioDeviceType = audioDeviceType; Loading Loading @@ -177,12 +181,6 @@ public class CallAudioCommunicationDeviceTracker { return; } if (isBtDevice && mBtAudioDevice != null) { // Signal that BT audio was lost for device. mBluetoothRouteManager.onAudioLost(mBtAudioDevice); mBtAudioDevice = null; } if (mAudioManager == null) { Log.i(this, "clearCommunicationDevice: mAudioManager is null"); return; Loading @@ -191,6 +189,12 @@ public class CallAudioCommunicationDeviceTracker { // Clear device and reset locally saved device type. mAudioManager.clearCommunicationDevice(); mAudioDeviceType = sAUDIO_DEVICE_TYPE_INVALID; if (isBtDevice && mBtAudioDevice != null) { // Signal that BT audio was lost for device. mBluetoothRouteManager.onAudioLost(mBtAudioDevice); mBtAudioDevice = null; } } private boolean isUsbHeadsetType(int audioDeviceType, int sourceType) { Loading
src/com/android/server/telecom/CallAudioManager.java +23 −24 Original line number Diff line number Diff line Loading @@ -23,7 +23,6 @@ import android.media.ToneGenerator; import android.os.UserHandle; import android.telecom.CallAudioState; import android.telecom.Log; import android.telecom.PhoneAccount; import android.telecom.VideoProfile; import android.util.SparseArray; Loading Loading @@ -55,7 +54,7 @@ public class CallAudioManager extends CallsManagerListenerBase { private final Set<Call> mCalls; private final SparseArray<LinkedHashSet<Call>> mCallStateToCalls; private final CallAudioRouteStateMachine mCallAudioRouteStateMachine; private final CallAudioRouteAdapter mCallAudioRouteAdapter; private final CallAudioModeStateMachine mCallAudioModeStateMachine; private final BluetoothStateReceiver mBluetoothStateReceiver; private final CallsManager mCallsManager; Loading @@ -71,7 +70,7 @@ public class CallAudioManager extends CallsManagerListenerBase { private boolean mIsDisconnectedTonePlaying = false; private InCallTonePlayer mHoldTonePlayer; public CallAudioManager(CallAudioRouteStateMachine callAudioRouteStateMachine, public CallAudioManager(CallAudioRouteAdapter callAudioRouteAdapter, CallsManager callsManager, CallAudioModeStateMachine callAudioModeStateMachine, InCallTonePlayer.Factory playerFactory, Loading @@ -97,7 +96,7 @@ public class CallAudioManager extends CallsManagerListenerBase { put(CallState.AUDIO_PROCESSING, mAudioProcessingCalls); }}; mCallAudioRouteStateMachine = callAudioRouteStateMachine; mCallAudioRouteAdapter = callAudioRouteAdapter; mCallAudioModeStateMachine = callAudioModeStateMachine; mCallsManager = callsManager; mPlayerFactory = playerFactory; Loading @@ -109,7 +108,7 @@ public class CallAudioManager extends CallsManagerListenerBase { mPlayerFactory.setCallAudioManager(this); mCallAudioModeStateMachine.setCallAudioManager(this); mCallAudioRouteStateMachine.setCallAudioManager(this); mCallAudioRouteAdapter.setCallAudioManager(this); } @Override Loading Loading @@ -226,7 +225,7 @@ public class CallAudioManager extends CallsManagerListenerBase { // When pulling a video call, automatically enable the speakerphone. Log.d(LOG_TAG, "Switching to speaker because external video call %s was pulled." + call.getId()); mCallAudioRouteStateMachine.sendMessageWithSessionInfo( mCallAudioRouteAdapter.sendMessageWithSessionInfo( CallAudioRouteStateMachine.SWITCH_SPEAKER); } } Loading Loading @@ -378,7 +377,7 @@ public class CallAudioManager extends CallsManagerListenerBase { @Override public void onConnectionServiceChanged(Call call, ConnectionServiceWrapper oldCs, ConnectionServiceWrapper newCs) { mCallAudioRouteStateMachine.sendMessageWithSessionInfo( mCallAudioRouteAdapter.sendMessageWithSessionInfo( CallAudioRouteStateMachine.UPDATE_SYSTEM_AUDIO_ROUTE); } Loading @@ -396,13 +395,13 @@ public class CallAudioManager extends CallsManagerListenerBase { Log.d(LOG_TAG, "Switching to speaker because call %s transitioned video state from %s" + " to %s", call.getId(), VideoProfile.videoStateToString(previousVideoState), VideoProfile.videoStateToString(newVideoState)); mCallAudioRouteStateMachine.sendMessageWithSessionInfo( mCallAudioRouteAdapter.sendMessageWithSessionInfo( CallAudioRouteStateMachine.SWITCH_SPEAKER); } } public CallAudioState getCallAudioState() { return mCallAudioRouteStateMachine.getCurrentCallAudioState(); return mCallAudioRouteAdapter.getCurrentCallAudioState(); } public Call getPossiblyHeldForegroundCall() { Loading @@ -423,7 +422,7 @@ public class CallAudioManager extends CallsManagerListenerBase { Log.v(this, "ignoring toggleMute for emergency call"); return; } mCallAudioRouteStateMachine.sendMessageWithSessionInfo( mCallAudioRouteAdapter.sendMessageWithSessionInfo( CallAudioRouteStateMachine.TOGGLE_MUTE); } Loading @@ -443,7 +442,7 @@ public class CallAudioManager extends CallsManagerListenerBase { Log.v(this, "ignoring mute for emergency call"); } mCallAudioRouteStateMachine.sendMessageWithSessionInfo(shouldMute mCallAudioRouteAdapter.sendMessageWithSessionInfo(shouldMute ? CallAudioRouteStateMachine.MUTE_ON : CallAudioRouteStateMachine.MUTE_OFF); } Loading @@ -459,23 +458,23 @@ public class CallAudioManager extends CallsManagerListenerBase { Log.v(this, "setAudioRoute, route: %s", CallAudioState.audioRouteToString(route)); switch (route) { case CallAudioState.ROUTE_BLUETOOTH: mCallAudioRouteStateMachine.sendMessageWithSessionInfo( mCallAudioRouteAdapter.sendMessageWithSessionInfo( CallAudioRouteStateMachine.USER_SWITCH_BLUETOOTH, 0, bluetoothAddress); return; case CallAudioState.ROUTE_SPEAKER: mCallAudioRouteStateMachine.sendMessageWithSessionInfo( mCallAudioRouteAdapter.sendMessageWithSessionInfo( CallAudioRouteStateMachine.USER_SWITCH_SPEAKER); return; case CallAudioState.ROUTE_WIRED_HEADSET: mCallAudioRouteStateMachine.sendMessageWithSessionInfo( mCallAudioRouteAdapter.sendMessageWithSessionInfo( CallAudioRouteStateMachine.USER_SWITCH_HEADSET); return; case CallAudioState.ROUTE_EARPIECE: mCallAudioRouteStateMachine.sendMessageWithSessionInfo( mCallAudioRouteAdapter.sendMessageWithSessionInfo( CallAudioRouteStateMachine.USER_SWITCH_EARPIECE); return; case CallAudioState.ROUTE_WIRED_OR_EARPIECE: mCallAudioRouteStateMachine.sendMessageWithSessionInfo( mCallAudioRouteAdapter.sendMessageWithSessionInfo( CallAudioRouteStateMachine.USER_SWITCH_BASELINE_ROUTE, CallAudioRouteStateMachine.NO_INCLUDE_BLUETOOTH_IN_BASELINE); return; Loading @@ -490,7 +489,7 @@ public class CallAudioManager extends CallsManagerListenerBase { */ void switchBaseline() { Log.i(this, "switchBaseline"); mCallAudioRouteStateMachine.sendMessageWithSessionInfo( mCallAudioRouteAdapter.sendMessageWithSessionInfo( CallAudioRouteStateMachine.USER_SWITCH_BASELINE_ROUTE, CallAudioRouteStateMachine.INCLUDE_BLUETOOTH_IN_BASELINE); } Loading Loading @@ -534,7 +533,7 @@ public class CallAudioManager extends CallsManagerListenerBase { synchronized (mCallsManager.getLock()) { Call localForegroundCall = mForegroundCall; boolean result = mRinger.startRinging(localForegroundCall, mCallAudioRouteStateMachine.isHfpDeviceAvailable()); mCallAudioRouteAdapter.isHfpDeviceAvailable()); if (result) { localForegroundCall.setStartRingTime(); } Loading Loading @@ -567,7 +566,7 @@ public class CallAudioManager extends CallsManagerListenerBase { @VisibleForTesting public void setCallAudioRouteFocusState(int focusState) { mCallAudioRouteStateMachine.sendMessageWithSessionInfo( mCallAudioRouteAdapter.sendMessageWithSessionInfo( CallAudioRouteStateMachine.SWITCH_FOCUS, focusState); } Loading @@ -577,8 +576,8 @@ public class CallAudioManager extends CallsManagerListenerBase { } @VisibleForTesting public CallAudioRouteStateMachine getCallAudioRouteStateMachine() { return mCallAudioRouteStateMachine; public CallAudioRouteAdapter getCallAudioRouteAdapter() { return mCallAudioRouteAdapter; } @VisibleForTesting Loading Loading @@ -615,9 +614,9 @@ public class CallAudioManager extends CallsManagerListenerBase { mCallAudioModeStateMachine.dump(pw); pw.decreaseIndent(); pw.println("CallAudioRouteStateMachine:"); pw.println("mCallAudioRouteAdapter:"); pw.increaseIndent(); mCallAudioRouteStateMachine.dump(pw); mCallAudioRouteAdapter.dump(pw); pw.decreaseIndent(); pw.println("BluetoothDeviceManager:"); Loading Loading @@ -813,7 +812,7 @@ public class CallAudioManager extends CallsManagerListenerBase { mHoldingCalls.stream().map(c -> c.getId()).collect(Collectors.joining(",")) ); if (mForegroundCall != oldForegroundCall) { mCallAudioRouteStateMachine.sendMessageWithSessionInfo( mCallAudioRouteAdapter.sendMessageWithSessionInfo( CallAudioRouteStateMachine.UPDATE_SYSTEM_AUDIO_ROUTE); if (mForegroundCall != null Loading
src/com/android/server/telecom/CallAudioModeStateMachine.java +18 −6 Original line number Diff line number Diff line Loading @@ -41,8 +41,10 @@ public class CallAudioModeStateMachine extends StateMachine { private LocalLog mLocalLog = new LocalLog(20); public static class Factory { public CallAudioModeStateMachine create(SystemStateHelper systemStateHelper, AudioManager am, FeatureFlags featureFlags) { return new CallAudioModeStateMachine(systemStateHelper, am, featureFlags); AudioManager am, FeatureFlags featureFlags, CallAudioCommunicationDeviceTracker callAudioCommunicationDeviceTracker) { return new CallAudioModeStateMachine(systemStateHelper, am, featureFlags, callAudioCommunicationDeviceTracker); } } Loading Loading @@ -277,6 +279,11 @@ public class CallAudioModeStateMachine extends StateMachine { Log.i(LOG_TAG, "Audio focus entering UNFOCUSED state"); mLocalLog.log("Enter UNFOCUSED"); if (mIsInitialized) { // Clear any communication device that was requested previously. if (mFeatureFlags.callAudioCommunicationDeviceRefactor()) { mCommunicationDeviceTracker.clearCommunicationDevice(mCommunicationDeviceTracker .getCurrentLocallyRequestedCommunicationDevice()); } if (mFeatureFlags.setAudioModeBeforeAbandonFocus()) { mAudioManager.setMode(AudioManager.MODE_NORMAL); mCallAudioManager.setCallAudioRouteFocusState( Loading Loading @@ -727,12 +734,12 @@ public class CallAudioModeStateMachine extends StateMachine { mAudioManager.setMode(AudioManager.MODE_COMMUNICATION_REDIRECT); mMostRecentMode = AudioManager.MODE_NORMAL; mCallAudioManager.setCallAudioRouteFocusState(CallAudioRouteStateMachine.ACTIVE_FOCUS); mCallAudioManager.getCallAudioRouteStateMachine().sendMessageWithSessionInfo( mCallAudioManager.getCallAudioRouteAdapter().sendMessageWithSessionInfo( CallAudioRouteStateMachine.STREAMING_FORCE_ENABLED); } private void preExit() { mCallAudioManager.getCallAudioRouteStateMachine().sendMessageWithSessionInfo( mCallAudioManager.getCallAudioRouteAdapter().sendMessageWithSessionInfo( CallAudioRouteStateMachine.STREAMING_FORCE_DISABLED); } Loading Loading @@ -878,17 +885,20 @@ public class CallAudioModeStateMachine extends StateMachine { private final SystemStateHelper mSystemStateHelper; private CallAudioManager mCallAudioManager; private FeatureFlags mFeatureFlags; private CallAudioCommunicationDeviceTracker mCommunicationDeviceTracker; private int mMostRecentMode; private boolean mIsInitialized = false; public CallAudioModeStateMachine(SystemStateHelper systemStateHelper, AudioManager audioManager, FeatureFlags featureFlags) { AudioManager audioManager, FeatureFlags featureFlags, CallAudioCommunicationDeviceTracker callAudioCommunicationDeviceTracker) { super(CallAudioModeStateMachine.class.getSimpleName()); mAudioManager = audioManager; mSystemStateHelper = systemStateHelper; mMostRecentMode = AudioManager.MODE_NORMAL; mFeatureFlags = featureFlags; mCommunicationDeviceTracker = callAudioCommunicationDeviceTracker; createStates(); } Loading @@ -897,12 +907,14 @@ public class CallAudioModeStateMachine extends StateMachine { * Used for testing */ public CallAudioModeStateMachine(SystemStateHelper systemStateHelper, AudioManager audioManager, Looper looper, FeatureFlags featureFlags) { AudioManager audioManager, Looper looper, FeatureFlags featureFlags, CallAudioCommunicationDeviceTracker communicationDeviceTracker) { super(CallAudioModeStateMachine.class.getSimpleName(), looper); mAudioManager = audioManager; mSystemStateHelper = systemStateHelper; mMostRecentMode = AudioManager.MODE_NORMAL; mFeatureFlags = featureFlags; mCommunicationDeviceTracker = communicationDeviceTracker; createStates(); } Loading
src/com/android/server/telecom/CallAudioRouteAdapter.java 0 → 100644 +19 −0 Original line number Diff line number Diff line package com.android.server.telecom; import android.os.Handler; import android.telecom.CallAudioState; import com.android.internal.util.IndentingPrintWriter; public interface CallAudioRouteAdapter { void initialize(); void sendMessageWithSessionInfo(int message); void sendMessageWithSessionInfo(int message, int arg); void sendMessageWithSessionInfo(int message, int arg, String data); void sendMessage(int message, Runnable r); void setCallAudioManager(CallAudioManager callAudioManager); CallAudioState getCurrentCallAudioState(); boolean isHfpDeviceAvailable(); Handler getAdapterHandler(); void dump(IndentingPrintWriter pw); }