Loading services/core/java/com/android/server/audio/AudioDeviceBroker.java +24 −34 Original line number Diff line number Diff line Loading @@ -82,6 +82,11 @@ import java.util.concurrent.atomic.AtomicBoolean; /** ID for Communication strategy retrieved form audio policy manager */ private int mCommunicationStrategyId = -1; /** ID for Accessibility strategy retrieved form audio policy manager */ private int mAccessibilityStrategyId = -1; /** Active communication device reported by audio policy manager */ private AudioDeviceInfo mActiveCommunicationDevice; /** Last preferred device set for communication strategy */ Loading Loading @@ -141,22 +146,28 @@ import java.util.concurrent.atomic.AtomicBoolean; init(); } private void initCommunicationStrategyId() { private void initRoutingStrategyIds() { List<AudioProductStrategy> strategies = AudioProductStrategy.getAudioProductStrategies(); mCommunicationStrategyId = -1; mAccessibilityStrategyId = -1; for (AudioProductStrategy strategy : strategies) { if (strategy.getAudioAttributesForLegacyStreamType(AudioSystem.STREAM_VOICE_CALL) != null) { if (mCommunicationStrategyId == -1 && strategy.getAudioAttributesForLegacyStreamType( AudioSystem.STREAM_VOICE_CALL) != null) { mCommunicationStrategyId = strategy.getId(); return; } if (mAccessibilityStrategyId == -1 && strategy.getAudioAttributesForLegacyStreamType( AudioSystem.STREAM_ACCESSIBILITY) != null) { mAccessibilityStrategyId = strategy.getId(); } } mCommunicationStrategyId = -1; } private void init() { setupMessaging(mContext); initCommunicationStrategyId(); initRoutingStrategyIds(); mPreferredCommunicationDevice = null; updateActiveCommunicationDevice(); Loading Loading @@ -813,19 +824,10 @@ import java.util.concurrent.atomic.AtomicBoolean; return mDeviceInventory.setPreferredDevicesForStrategySync(strategy, devices); } /*package*/ void postSetPreferredDevicesForStrategy(int strategy, @NonNull List<AudioDeviceAttributes> devices) { sendILMsgNoDelay(MSG_IL_SET_PREF_DEVICES_FOR_STRATEGY, SENDMSG_REPLACE, strategy, devices); } /*package*/ int removePreferredDevicesForStrategySync(int strategy) { return mDeviceInventory.removePreferredDevicesForStrategySync(strategy); } /*package*/ void postRemovePreferredDevicesForStrategy(int strategy) { sendIMsgNoDelay(MSG_I_REMOVE_PREF_DEVICES_FOR_STRATEGY, SENDMSG_REPLACE, strategy); } /*package*/ void registerStrategyPreferredDevicesDispatcher( @NonNull IStrategyPreferredDevicesDispatcher dispatcher) { mDeviceInventory.registerStrategyPreferredDevicesDispatcher(dispatcher); Loading Loading @@ -1157,6 +1159,9 @@ import java.util.concurrent.atomic.AtomicBoolean; pw.println(prefix + "mCommunicationStrategyId: " + mCommunicationStrategyId); pw.println(prefix + "mAccessibilityStrategyId: " + mAccessibilityStrategyId); pw.println("\n" + prefix + "mModeOwnerPid: " + mModeOwnerPid); mBtHelper.dump(pw, prefix); Loading Loading @@ -1252,7 +1257,7 @@ import java.util.concurrent.atomic.AtomicBoolean; case MSG_RESTORE_DEVICES: synchronized (mSetModeLock) { synchronized (mDeviceStateLock) { initCommunicationStrategyId(); initRoutingStrategyIds(); updateActiveCommunicationDevice(); mDeviceInventory.onRestoreDevices(); mBtHelper.onAudioServerDiedRestoreA2dp(); Loading Loading @@ -1440,22 +1445,6 @@ import java.util.concurrent.atomic.AtomicBoolean; final int strategy = msg.arg1; mDeviceInventory.onSaveRemovePreferredDevices(strategy); } break; case MSG_IL_SET_PREF_DEVICES_FOR_STRATEGY: { final int strategy = msg.arg1; final List<AudioDeviceAttributes> devices = (List<AudioDeviceAttributes>) msg.obj; setPreferredDevicesForStrategySync(strategy, devices); if (strategy == mCommunicationStrategyId) { onUpdatePhoneStrategyDevice(devices.isEmpty() ? null : devices.get(0)); } } break; case MSG_I_REMOVE_PREF_DEVICES_FOR_STRATEGY: { final int strategy = msg.arg1; removePreferredDevicesForStrategySync(strategy); if (strategy == mCommunicationStrategyId) { onUpdatePhoneStrategyDevice(null); } } break; case MSG_CHECK_MUTE_MUSIC: checkMessagesMuteMusic(0); break; Loading Loading @@ -1533,8 +1522,6 @@ import java.util.concurrent.atomic.AtomicBoolean; private static final int MSG_I_SAVE_CLEAR_PREF_DEVICES_FOR_CAPTURE_PRESET = 38; private static final int MSG_L_UPDATE_COMMUNICATION_ROUTE = 39; private static final int MSG_IL_SET_PREF_DEVICES_FOR_STRATEGY = 40; private static final int MSG_I_REMOVE_PREF_DEVICES_FOR_STRATEGY = 41; private static final int MSG_L_SET_COMMUNICATION_ROUTE_FOR_CLIENT = 42; private static final int MSG_L_UPDATE_COMMUNICATION_ROUTE_CLIENT = 43; private static final int MSG_I_SCO_AUDIO_STATE_CHANGED = 44; Loading Loading @@ -1836,9 +1823,12 @@ import java.util.concurrent.atomic.AtomicBoolean; } if (preferredCommunicationDevice == null) { removePreferredDevicesForStrategySync(mCommunicationStrategyId); removePreferredDevicesForStrategySync(mAccessibilityStrategyId); } else { setPreferredDevicesForStrategySync( mCommunicationStrategyId, Arrays.asList(preferredCommunicationDevice)); setPreferredDevicesForStrategySync( mAccessibilityStrategyId, Arrays.asList(preferredCommunicationDevice)); } onUpdatePhoneStrategyDevice(preferredCommunicationDevice); } Loading Loading
services/core/java/com/android/server/audio/AudioDeviceBroker.java +24 −34 Original line number Diff line number Diff line Loading @@ -82,6 +82,11 @@ import java.util.concurrent.atomic.AtomicBoolean; /** ID for Communication strategy retrieved form audio policy manager */ private int mCommunicationStrategyId = -1; /** ID for Accessibility strategy retrieved form audio policy manager */ private int mAccessibilityStrategyId = -1; /** Active communication device reported by audio policy manager */ private AudioDeviceInfo mActiveCommunicationDevice; /** Last preferred device set for communication strategy */ Loading Loading @@ -141,22 +146,28 @@ import java.util.concurrent.atomic.AtomicBoolean; init(); } private void initCommunicationStrategyId() { private void initRoutingStrategyIds() { List<AudioProductStrategy> strategies = AudioProductStrategy.getAudioProductStrategies(); mCommunicationStrategyId = -1; mAccessibilityStrategyId = -1; for (AudioProductStrategy strategy : strategies) { if (strategy.getAudioAttributesForLegacyStreamType(AudioSystem.STREAM_VOICE_CALL) != null) { if (mCommunicationStrategyId == -1 && strategy.getAudioAttributesForLegacyStreamType( AudioSystem.STREAM_VOICE_CALL) != null) { mCommunicationStrategyId = strategy.getId(); return; } if (mAccessibilityStrategyId == -1 && strategy.getAudioAttributesForLegacyStreamType( AudioSystem.STREAM_ACCESSIBILITY) != null) { mAccessibilityStrategyId = strategy.getId(); } } mCommunicationStrategyId = -1; } private void init() { setupMessaging(mContext); initCommunicationStrategyId(); initRoutingStrategyIds(); mPreferredCommunicationDevice = null; updateActiveCommunicationDevice(); Loading Loading @@ -813,19 +824,10 @@ import java.util.concurrent.atomic.AtomicBoolean; return mDeviceInventory.setPreferredDevicesForStrategySync(strategy, devices); } /*package*/ void postSetPreferredDevicesForStrategy(int strategy, @NonNull List<AudioDeviceAttributes> devices) { sendILMsgNoDelay(MSG_IL_SET_PREF_DEVICES_FOR_STRATEGY, SENDMSG_REPLACE, strategy, devices); } /*package*/ int removePreferredDevicesForStrategySync(int strategy) { return mDeviceInventory.removePreferredDevicesForStrategySync(strategy); } /*package*/ void postRemovePreferredDevicesForStrategy(int strategy) { sendIMsgNoDelay(MSG_I_REMOVE_PREF_DEVICES_FOR_STRATEGY, SENDMSG_REPLACE, strategy); } /*package*/ void registerStrategyPreferredDevicesDispatcher( @NonNull IStrategyPreferredDevicesDispatcher dispatcher) { mDeviceInventory.registerStrategyPreferredDevicesDispatcher(dispatcher); Loading Loading @@ -1157,6 +1159,9 @@ import java.util.concurrent.atomic.AtomicBoolean; pw.println(prefix + "mCommunicationStrategyId: " + mCommunicationStrategyId); pw.println(prefix + "mAccessibilityStrategyId: " + mAccessibilityStrategyId); pw.println("\n" + prefix + "mModeOwnerPid: " + mModeOwnerPid); mBtHelper.dump(pw, prefix); Loading Loading @@ -1252,7 +1257,7 @@ import java.util.concurrent.atomic.AtomicBoolean; case MSG_RESTORE_DEVICES: synchronized (mSetModeLock) { synchronized (mDeviceStateLock) { initCommunicationStrategyId(); initRoutingStrategyIds(); updateActiveCommunicationDevice(); mDeviceInventory.onRestoreDevices(); mBtHelper.onAudioServerDiedRestoreA2dp(); Loading Loading @@ -1440,22 +1445,6 @@ import java.util.concurrent.atomic.AtomicBoolean; final int strategy = msg.arg1; mDeviceInventory.onSaveRemovePreferredDevices(strategy); } break; case MSG_IL_SET_PREF_DEVICES_FOR_STRATEGY: { final int strategy = msg.arg1; final List<AudioDeviceAttributes> devices = (List<AudioDeviceAttributes>) msg.obj; setPreferredDevicesForStrategySync(strategy, devices); if (strategy == mCommunicationStrategyId) { onUpdatePhoneStrategyDevice(devices.isEmpty() ? null : devices.get(0)); } } break; case MSG_I_REMOVE_PREF_DEVICES_FOR_STRATEGY: { final int strategy = msg.arg1; removePreferredDevicesForStrategySync(strategy); if (strategy == mCommunicationStrategyId) { onUpdatePhoneStrategyDevice(null); } } break; case MSG_CHECK_MUTE_MUSIC: checkMessagesMuteMusic(0); break; Loading Loading @@ -1533,8 +1522,6 @@ import java.util.concurrent.atomic.AtomicBoolean; private static final int MSG_I_SAVE_CLEAR_PREF_DEVICES_FOR_CAPTURE_PRESET = 38; private static final int MSG_L_UPDATE_COMMUNICATION_ROUTE = 39; private static final int MSG_IL_SET_PREF_DEVICES_FOR_STRATEGY = 40; private static final int MSG_I_REMOVE_PREF_DEVICES_FOR_STRATEGY = 41; private static final int MSG_L_SET_COMMUNICATION_ROUTE_FOR_CLIENT = 42; private static final int MSG_L_UPDATE_COMMUNICATION_ROUTE_CLIENT = 43; private static final int MSG_I_SCO_AUDIO_STATE_CHANGED = 44; Loading Loading @@ -1836,9 +1823,12 @@ import java.util.concurrent.atomic.AtomicBoolean; } if (preferredCommunicationDevice == null) { removePreferredDevicesForStrategySync(mCommunicationStrategyId); removePreferredDevicesForStrategySync(mAccessibilityStrategyId); } else { setPreferredDevicesForStrategySync( mCommunicationStrategyId, Arrays.asList(preferredCommunicationDevice)); setPreferredDevicesForStrategySync( mAccessibilityStrategyId, Arrays.asList(preferredCommunicationDevice)); } onUpdatePhoneStrategyDevice(preferredCommunicationDevice); } Loading