summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYurii Postolov <32772773+Ypostolov@users.noreply.github.com>2020-01-13 18:17:56 +0200
committerCollin <iCollin@users.noreply.github.com>2020-01-13 11:17:56 -0500
commitac0b4119c0ef4618b899d67814803972f863b850 (patch)
treee8d7e0459092a216e6436c0a97af9e6a321443ad
parent8752616b531c96f985c41870e9bd0f05737831ca (diff)
downloadsdl_core-ac0b4119c0ef4618b899d67814803972f863b850.tar.gz
fix_sdl_sends_query_apps_to_the_app_#995 (#2335)
-rw-r--r--src/components/application_manager/include/application_manager/application_manager_impl.h6
-rw-r--r--src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/system_request.cc3
-rw-r--r--src/components/application_manager/src/application_manager_impl.cc20
-rw-r--r--src/components/include/application_manager/application_manager.h2
-rw-r--r--src/components/include/test/application_manager/mock_application_manager.h2
5 files changed, 22 insertions, 11 deletions
diff --git a/src/components/application_manager/include/application_manager/application_manager_impl.h b/src/components/application_manager/include/application_manager/application_manager_impl.h
index 25e28515d4..438b62c797 100644
--- a/src/components/application_manager/include/application_manager/application_manager_impl.h
+++ b/src/components/application_manager/include/application_manager/application_manager_impl.h
@@ -651,6 +651,9 @@ class ApplicationManagerImpl
const uint32_t corr_id,
const int32_t function_id) OVERRIDE;
+ void OnQueryAppsRequest(
+ const connection_handler::DeviceHandle device) OVERRIDE;
+
// Overriden ConnectionHandlerObserver method
void OnDeviceListUpdated(
const connection_handler::DeviceMap& device_list) OVERRIDE;
@@ -1487,11 +1490,12 @@ class ApplicationManagerImpl
* will send TTS global properties to HMI after timeout
*/
std::map<uint32_t, date_time::TimeDuration> tts_global_properties_app_list_;
-
+ std::set<connection_handler::DeviceHandle> query_apps_devices_;
bool audio_pass_thru_active_;
uint32_t audio_pass_thru_app_id_;
sync_primitives::Lock audio_pass_thru_lock_;
sync_primitives::Lock tts_global_properties_app_list_lock_;
+ mutable sync_primitives::Lock query_apps_devices_lock_;
hmi_apis::Common_DriverDistractionState::eType driver_distraction_state_;
bool is_vr_session_strated_;
bool hmi_cooperating_;
diff --git a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/system_request.cc b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/system_request.cc
index 9be5a270f5..030db82881 100644
--- a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/system_request.cc
+++ b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/system_request.cc
@@ -612,7 +612,7 @@ void SystemRequest::Run() {
return;
} else if (mobile_apis::RequestType::QUERY_APPS == request_type) {
using namespace ns_smart_device_link::ns_json_handler::formatters;
-
+ application_manager_.OnQueryAppsRequest(application->device());
smart_objects::SmartObject sm_object;
Json::Reader reader;
std::string json(binary_data.begin(), binary_data.end());
@@ -623,6 +623,7 @@ void SystemRequest::Run() {
}
CFormatterJsonBase::jsonValueToObj(root, sm_object);
+
if (!ValidateQueryAppData(sm_object)) {
SendResponse(false, mobile_apis::Result::GENERIC_ERROR);
return;
diff --git a/src/components/application_manager/src/application_manager_impl.cc b/src/components/application_manager/src/application_manager_impl.cc
index 6187a6daba..d51d4c9d06 100644
--- a/src/components/application_manager/src/application_manager_impl.cc
+++ b/src/components/application_manager/src/application_manager_impl.cc
@@ -1443,15 +1443,8 @@ ApplicationManagerImpl::AppsWaitingForRegistration() const {
bool ApplicationManagerImpl::IsAppsQueriedFrom(
const connection_handler::DeviceHandle handle) const {
- sync_primitives::AutoLock lock(apps_to_register_list_lock_ptr_);
- AppsWaitRegistrationSet::iterator it = apps_to_register_.begin();
- AppsWaitRegistrationSet::const_iterator it_end = apps_to_register_.end();
- for (; it != it_end; ++it) {
- if (handle == (*it)->device()) {
- return true;
- }
- }
- return false;
+ sync_primitives::AutoLock lock(query_apps_devices_lock_);
+ return query_apps_devices_.find(handle) != query_apps_devices_.end();
}
StateController& ApplicationManagerImpl::state_controller() {
@@ -1543,6 +1536,13 @@ void ApplicationManagerImpl::OnFindNewApplicationsRequest() {
GetPolicyHandler().OnAppsSearchStarted();
}
+void ApplicationManagerImpl::OnQueryAppsRequest(
+ const connection_handler::DeviceHandle device) {
+ LOG4CXX_AUTO_TRACE(logger_);
+ sync_primitives::AutoLock lock(query_apps_devices_lock_);
+ query_apps_devices_.insert(device);
+}
+
void ApplicationManagerImpl::SendUpdateAppList() {
LOG4CXX_AUTO_TRACE(logger_);
@@ -1567,6 +1567,8 @@ void ApplicationManagerImpl::SendUpdateAppList() {
void ApplicationManagerImpl::RemoveDevice(
const connection_handler::DeviceHandle& device_handle) {
LOG4CXX_DEBUG(logger_, "device_handle " << device_handle);
+ sync_primitives::AutoLock lock(query_apps_devices_lock_);
+ query_apps_devices_.erase(device_handle);
}
void ApplicationManagerImpl::OnDeviceSwitchingStart(
diff --git a/src/components/include/application_manager/application_manager.h b/src/components/include/application_manager/application_manager.h
index 9343d7d973..e96101e7f1 100644
--- a/src/components/include/application_manager/application_manager.h
+++ b/src/components/include/application_manager/application_manager.h
@@ -170,6 +170,8 @@ class ApplicationManager {
virtual ApplicationSharedPtr application(uint32_t app_id) const = 0;
virtual ApplicationSharedPtr active_application() const = 0;
+ virtual void OnQueryAppsRequest(
+ const connection_handler::DeviceHandle device) = 0;
virtual ApplicationSharedPtr get_full_or_limited_application() const = 0;
diff --git a/src/components/include/test/application_manager/mock_application_manager.h b/src/components/include/test/application_manager/mock_application_manager.h
index 60ad7196a8..2e0269cefd 100644
--- a/src/components/include/test/application_manager/mock_application_manager.h
+++ b/src/components/include/test/application_manager/mock_application_manager.h
@@ -241,6 +241,8 @@ class MockApplicationManager : public application_manager::ApplicationManager {
void(const uint32_t connection_key,
const uint32_t corr_id,
const int32_t function_id));
+ MOCK_METHOD1(OnQueryAppsRequest,
+ void(const connection_handler::DeviceHandle));
MOCK_METHOD4(UnregisterApplication,
void(const uint32_t&, mobile_apis::Result::eType, bool, bool));
MOCK_METHOD3(updateRequestTimeout,