Loading services/audiopolicy/managerdefault/AudioPolicyManager.cpp +9 −22 Original line number Diff line number Diff line Loading @@ -122,16 +122,17 @@ status_t AudioPolicyManager::setDeviceConnectionState(audio_devices_t device, } } status_t AudioPolicyManager::broadcastDeviceConnectionState(const sp<DeviceDescriptor> &device, void AudioPolicyManager::broadcastDeviceConnectionState(const sp<DeviceDescriptor> &device, media::DeviceConnectedState state) { audio_port_v7 devicePort; device->toAudioPort(&devicePort); status_t status = mpClientInterface->setDeviceConnectedState(&devicePort, state); ALOGE_IF(status != OK, "Error %d while setting connected state %d for device %s", status, static_cast<int>(state), device->getDeviceTypeAddr().toString(false).c_str()); return status; if (status_t status = mpClientInterface->setDeviceConnectedState(&devicePort, state); status != OK) { ALOGE("Error %d while setting connected state %d for device %s", status, static_cast<int>(state), device->getDeviceTypeAddr().toString(false).c_str()); } } status_t AudioPolicyManager::setDeviceConnectionStateInt( Loading Loading @@ -212,14 +213,7 @@ status_t AudioPolicyManager::setDeviceConnectionStateInt(const sp<DeviceDescript // Before checking outputs, broadcast connect event to allow HAL to retrieve dynamic // parameters on newly connected devices (instead of opening the outputs...) if (broadcastDeviceConnectionState( device, media::DeviceConnectedState::CONNECTED) != NO_ERROR) { mAvailableOutputDevices.remove(device); mHwModules.cleanUpForDevice(device); ALOGE("%s() device %s format %x connection failed", __func__, device->toString().c_str(), device->getEncodedFormat()); return INVALID_OPERATION; } broadcastDeviceConnectionState(device, media::DeviceConnectedState::CONNECTED); if (checkOutputsForDevice(device, state, outputs) != NO_ERROR) { mAvailableOutputDevices.remove(device); Loading Loading @@ -404,14 +398,7 @@ status_t AudioPolicyManager::setDeviceConnectionStateInt(const sp<DeviceDescript // Before checking intputs, broadcast connect event to allow HAL to retrieve dynamic // parameters on newly connected devices (instead of opening the inputs...) if (broadcastDeviceConnectionState( device, media::DeviceConnectedState::CONNECTED) != NO_ERROR) { mAvailableInputDevices.remove(device); mHwModules.cleanUpForDevice(device); ALOGE("%s() device %s format %x connection failed", __func__, device->toString().c_str(), device->getEncodedFormat()); return INVALID_OPERATION; } broadcastDeviceConnectionState(device, media::DeviceConnectedState::CONNECTED); // Propagate device availability to Engine setEngineDeviceConnectionState(device, state); Loading services/audiopolicy/managerdefault/AudioPolicyManager.h +2 −2 Original line number Diff line number Diff line Loading @@ -1077,7 +1077,7 @@ private: // It can give a chance to HAL implementer to retrieve dynamic capabilities associated // to this device for example. // TODO avoid opening stream to retrieve capabilities of a profile. status_t broadcastDeviceConnectionState(const sp<DeviceDescriptor> &device, void broadcastDeviceConnectionState(const sp<DeviceDescriptor> &device, media::DeviceConnectedState state); // updates device caching and output for streams that can influence the Loading services/audiopolicy/tests/audiopolicymanager_tests.cpp +0 −48 Original line number Diff line number Diff line Loading @@ -2650,29 +2650,8 @@ class AudioPolicyManagerTestClientOpenFails : public AudioPolicyManagerTestClien void setSimulateFailure(bool simulateFailure) { mSimulateFailure = simulateFailure; } void setSimulateBroadcastDeviceStatus(audio_devices_t device, status_t status) { if (status != NO_ERROR) { // simulate device connect status mSimulateBroadcastDeviceStatus[device] = status; } else { // remove device connection fixed status mSimulateBroadcastDeviceStatus.erase(device); } } status_t setDeviceConnectedState(const struct audio_port_v7* port, media::DeviceConnectedState state) override { if (mSimulateBroadcastDeviceStatus.find(port->ext.device.type) != mSimulateBroadcastDeviceStatus.end()) { // If a simulated status exists, return a status value return mSimulateBroadcastDeviceStatus[port->ext.device.type]; } return AudioPolicyManagerTestClient::setDeviceConnectedState(port, state); } private: bool mSimulateFailure = false; std::map<audio_devices_t, status_t> mSimulateBroadcastDeviceStatus; }; } // namespace Loading @@ -2693,9 +2672,6 @@ class AudioPolicyManagerTestDeviceConnectionFailed : void setSimulateOpenFailure(bool simulateFailure) { mFullClient->setSimulateFailure(simulateFailure); } void setSimulateBroadcastDeviceStatus(audio_devices_t device, status_t status) { mFullClient->setSimulateBroadcastDeviceStatus(device, status); } static const std::string sBluetoothConfig; private: Loading Loading @@ -2739,30 +2715,6 @@ TEST_P(AudioPolicyManagerTestDeviceConnectionFailed, SetDeviceConnectedStateHasA } } TEST_P(AudioPolicyManagerTestDeviceConnectionFailed, BroadcastDeviceFailure) { const audio_devices_t type = std::get<0>(GetParam()); const std::string name = std::get<1>(GetParam()); const std::string address = std::get<2>(GetParam()); const audio_format_t format = std::get<3>(GetParam()); // simulate broadcastDeviceConnectionState return failure setSimulateBroadcastDeviceStatus(type, INVALID_OPERATION); ASSERT_EQ(INVALID_OPERATION, mManager->setDeviceConnectionState( type, AUDIO_POLICY_DEVICE_STATE_AVAILABLE, address.c_str(), name.c_str(), format)); // if broadcast is fail, device should not be added to available devices list if (audio_is_output_device(type)) { auto availableDevices = mManager->getAvailableOutputDevices(); EXPECT_FALSE(availableDevices.containsDeviceWithType(type)); } else if (audio_is_input_device(type)) { auto availableDevices = mManager->getAvailableInputDevices(); EXPECT_FALSE(availableDevices.containsDeviceWithType(type)); } setSimulateBroadcastDeviceStatus(type, NO_ERROR); } INSTANTIATE_TEST_CASE_P( DeviceConnectionFailure, AudioPolicyManagerTestDeviceConnectionFailed, Loading Loading
services/audiopolicy/managerdefault/AudioPolicyManager.cpp +9 −22 Original line number Diff line number Diff line Loading @@ -122,16 +122,17 @@ status_t AudioPolicyManager::setDeviceConnectionState(audio_devices_t device, } } status_t AudioPolicyManager::broadcastDeviceConnectionState(const sp<DeviceDescriptor> &device, void AudioPolicyManager::broadcastDeviceConnectionState(const sp<DeviceDescriptor> &device, media::DeviceConnectedState state) { audio_port_v7 devicePort; device->toAudioPort(&devicePort); status_t status = mpClientInterface->setDeviceConnectedState(&devicePort, state); ALOGE_IF(status != OK, "Error %d while setting connected state %d for device %s", status, static_cast<int>(state), device->getDeviceTypeAddr().toString(false).c_str()); return status; if (status_t status = mpClientInterface->setDeviceConnectedState(&devicePort, state); status != OK) { ALOGE("Error %d while setting connected state %d for device %s", status, static_cast<int>(state), device->getDeviceTypeAddr().toString(false).c_str()); } } status_t AudioPolicyManager::setDeviceConnectionStateInt( Loading Loading @@ -212,14 +213,7 @@ status_t AudioPolicyManager::setDeviceConnectionStateInt(const sp<DeviceDescript // Before checking outputs, broadcast connect event to allow HAL to retrieve dynamic // parameters on newly connected devices (instead of opening the outputs...) if (broadcastDeviceConnectionState( device, media::DeviceConnectedState::CONNECTED) != NO_ERROR) { mAvailableOutputDevices.remove(device); mHwModules.cleanUpForDevice(device); ALOGE("%s() device %s format %x connection failed", __func__, device->toString().c_str(), device->getEncodedFormat()); return INVALID_OPERATION; } broadcastDeviceConnectionState(device, media::DeviceConnectedState::CONNECTED); if (checkOutputsForDevice(device, state, outputs) != NO_ERROR) { mAvailableOutputDevices.remove(device); Loading Loading @@ -404,14 +398,7 @@ status_t AudioPolicyManager::setDeviceConnectionStateInt(const sp<DeviceDescript // Before checking intputs, broadcast connect event to allow HAL to retrieve dynamic // parameters on newly connected devices (instead of opening the inputs...) if (broadcastDeviceConnectionState( device, media::DeviceConnectedState::CONNECTED) != NO_ERROR) { mAvailableInputDevices.remove(device); mHwModules.cleanUpForDevice(device); ALOGE("%s() device %s format %x connection failed", __func__, device->toString().c_str(), device->getEncodedFormat()); return INVALID_OPERATION; } broadcastDeviceConnectionState(device, media::DeviceConnectedState::CONNECTED); // Propagate device availability to Engine setEngineDeviceConnectionState(device, state); Loading
services/audiopolicy/managerdefault/AudioPolicyManager.h +2 −2 Original line number Diff line number Diff line Loading @@ -1077,7 +1077,7 @@ private: // It can give a chance to HAL implementer to retrieve dynamic capabilities associated // to this device for example. // TODO avoid opening stream to retrieve capabilities of a profile. status_t broadcastDeviceConnectionState(const sp<DeviceDescriptor> &device, void broadcastDeviceConnectionState(const sp<DeviceDescriptor> &device, media::DeviceConnectedState state); // updates device caching and output for streams that can influence the Loading
services/audiopolicy/tests/audiopolicymanager_tests.cpp +0 −48 Original line number Diff line number Diff line Loading @@ -2650,29 +2650,8 @@ class AudioPolicyManagerTestClientOpenFails : public AudioPolicyManagerTestClien void setSimulateFailure(bool simulateFailure) { mSimulateFailure = simulateFailure; } void setSimulateBroadcastDeviceStatus(audio_devices_t device, status_t status) { if (status != NO_ERROR) { // simulate device connect status mSimulateBroadcastDeviceStatus[device] = status; } else { // remove device connection fixed status mSimulateBroadcastDeviceStatus.erase(device); } } status_t setDeviceConnectedState(const struct audio_port_v7* port, media::DeviceConnectedState state) override { if (mSimulateBroadcastDeviceStatus.find(port->ext.device.type) != mSimulateBroadcastDeviceStatus.end()) { // If a simulated status exists, return a status value return mSimulateBroadcastDeviceStatus[port->ext.device.type]; } return AudioPolicyManagerTestClient::setDeviceConnectedState(port, state); } private: bool mSimulateFailure = false; std::map<audio_devices_t, status_t> mSimulateBroadcastDeviceStatus; }; } // namespace Loading @@ -2693,9 +2672,6 @@ class AudioPolicyManagerTestDeviceConnectionFailed : void setSimulateOpenFailure(bool simulateFailure) { mFullClient->setSimulateFailure(simulateFailure); } void setSimulateBroadcastDeviceStatus(audio_devices_t device, status_t status) { mFullClient->setSimulateBroadcastDeviceStatus(device, status); } static const std::string sBluetoothConfig; private: Loading Loading @@ -2739,30 +2715,6 @@ TEST_P(AudioPolicyManagerTestDeviceConnectionFailed, SetDeviceConnectedStateHasA } } TEST_P(AudioPolicyManagerTestDeviceConnectionFailed, BroadcastDeviceFailure) { const audio_devices_t type = std::get<0>(GetParam()); const std::string name = std::get<1>(GetParam()); const std::string address = std::get<2>(GetParam()); const audio_format_t format = std::get<3>(GetParam()); // simulate broadcastDeviceConnectionState return failure setSimulateBroadcastDeviceStatus(type, INVALID_OPERATION); ASSERT_EQ(INVALID_OPERATION, mManager->setDeviceConnectionState( type, AUDIO_POLICY_DEVICE_STATE_AVAILABLE, address.c_str(), name.c_str(), format)); // if broadcast is fail, device should not be added to available devices list if (audio_is_output_device(type)) { auto availableDevices = mManager->getAvailableOutputDevices(); EXPECT_FALSE(availableDevices.containsDeviceWithType(type)); } else if (audio_is_input_device(type)) { auto availableDevices = mManager->getAvailableInputDevices(); EXPECT_FALSE(availableDevices.containsDeviceWithType(type)); } setSimulateBroadcastDeviceStatus(type, NO_ERROR); } INSTANTIATE_TEST_CASE_P( DeviceConnectionFailure, AudioPolicyManagerTestDeviceConnectionFailed, Loading