From 87a1963cee747b72cab56634221008a6d844018d Mon Sep 17 00:00:00 2001 From: Jacob Keeler Date: Thu, 12 Jul 2018 11:14:34 -0400 Subject: Send Driver Distraction notification immediately upon registration --- .../application_manager/application_manager_impl.h | 10 ++------- .../mobile/register_app_interface_request.cc | 1 + .../mobile/register_app_interface_request_test.cc | 2 ++ .../src/application_manager_impl.cc | 24 +++++++++++++++------- .../application_manager/application_manager.h | 8 ++++++++ .../application_manager/mock_application_manager.h | 2 ++ 6 files changed, 32 insertions(+), 15 deletions(-) (limited to 'src/components') 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 c7ba78c60e..bc579d0137 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 @@ -188,6 +188,8 @@ class ApplicationManagerImpl void SendHMIStatusNotification( const utils::SharedPtr app) OVERRIDE; + void SendDriverDistractionState(ApplicationSharedPtr application); + ApplicationSharedPtr application( const std::string& device_id, const std::string& policy_app_id) const OVERRIDE; @@ -1348,14 +1350,6 @@ class ApplicationManagerImpl */ void DisallowStreaming(uint32_t app_id); - /** - * @brief Checks if driver distraction state is valid, creates message - * and puts it to postponed message. - * @param application contains registered application. - */ - void PutDriverDistractionMessageToPostponed( - ApplicationSharedPtr application) const; - /** * @brief Types of directories used by Application Manager */ diff --git a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/register_app_interface_request.cc b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/register_app_interface_request.cc index 20302be585..4706f9742f 100644 --- a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/register_app_interface_request.cc +++ b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/register_app_interface_request.cc @@ -411,6 +411,7 @@ void RegisterAppInterfaceRequest::Run() { smart_objects::SmartObjectSPtr so = GetLockScreenIconUrlNotification(connection_key(), application); rpc_service_.ManageMobileCommand(so, SOURCE_SDL); + application_manager_.SendDriverDistractionState(application); } smart_objects::SmartObjectSPtr diff --git a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/mobile/register_app_interface_request_test.cc b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/mobile/register_app_interface_request_test.cc index 8b21ceff17..a44a4a452a 100644 --- a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/mobile/register_app_interface_request_test.cc +++ b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/mobile/register_app_interface_request_test.cc @@ -295,6 +295,7 @@ TEST_F(RegisterAppInterfaceRequestTest, Run_MinimalData_SUCCESS) { EXPECT_CALL(mock_rpc_service_, ManageMobileCommand(_, am::commands::Command::SOURCE_SDL)) .Times(2); + EXPECT_CALL(app_mngr_, SendDriverDistractionState(_)); command_->Run(); } @@ -408,6 +409,7 @@ TEST_F(RegisterAppInterfaceRequestTest, EXPECT_CALL(mock_rpc_service_, ManageMobileCommand(_, am::commands::Command::SOURCE_SDL)) .Times(2); + EXPECT_CALL(app_mngr_, SendDriverDistractionState(_)); command_->Run(); } diff --git a/src/components/application_manager/src/application_manager_impl.cc b/src/components/application_manager/src/application_manager_impl.cc index ad9886969b..f3cb8fd7fd 100644 --- a/src/components/application_manager/src/application_manager_impl.cc +++ b/src/components/application_manager/src/application_manager_impl.cc @@ -147,8 +147,7 @@ ApplicationManagerImpl::ApplicationManagerImpl( , apps_to_register_list_lock_ptr_(std::make_shared()) , audio_pass_thru_active_(false) , audio_pass_thru_app_id_(0) - , driver_distraction_state_( - hmi_apis::Common_DriverDistractionState::INVALID_ENUM) + , driver_distraction_state_(hmi_apis::Common_DriverDistractionState::DD_OFF) , is_vr_session_strated_(false) , hmi_cooperating_(false) , is_all_apps_allowed_(true) @@ -636,8 +635,6 @@ ApplicationSharedPtr ApplicationManagerImpl::RegisterApplication( application->set_app_icon_path(full_icon_path); } - PutDriverDistractionMessageToPostponed(application); - // Stops timer of saving data to resumption in order to // doesn't erase data from resumption storage. // Timer will be started after hmi level resumption. @@ -3515,8 +3512,8 @@ void ApplicationManagerImpl::OnPTUFinished(const bool ptu_result) { plugin_manager_->ForEachPlugin(on_app_policy_updated); } -void ApplicationManagerImpl::PutDriverDistractionMessageToPostponed( - ApplicationSharedPtr application) const { +void ApplicationManagerImpl::SendDriverDistractionState( + ApplicationSharedPtr application) { LOG4CXX_AUTO_TRACE(logger_); if (hmi_apis::Common_DriverDistractionState::INVALID_ENUM == driver_distraction_state()) { @@ -3534,7 +3531,20 @@ void ApplicationManagerImpl::PutDriverDistractionMessageToPostponed( driver_distraction_state(); (*on_driver_distraction)[strings::params][strings::connection_key] = application->app_id(); - application->PushMobileMessage(on_driver_distraction); + + const std::string function_id = MessageHelper::StringifiedFunctionID( + static_cast( + (*on_driver_distraction)[strings::params][strings::function_id] + .asUInt())); + const RPCParams params; + const mobile_apis::Result::eType check_result = + CheckPolicyPermissions(application, function_id, params); + if (mobile_api::Result::SUCCESS == check_result) { + rpc_service_->ManageMobileCommand(on_driver_distraction, + commands::Command::SOURCE_SDL); + } else { + application->PushMobileMessage(on_driver_distraction); + } } protocol_handler::MajorProtocolVersion diff --git a/src/components/include/application_manager/application_manager.h b/src/components/include/application_manager/application_manager.h index 39fc3c7ae6..f514168c53 100644 --- a/src/components/include/application_manager/application_manager.h +++ b/src/components/include/application_manager/application_manager.h @@ -262,6 +262,14 @@ class ApplicationManager { virtual void SendHMIStatusNotification( const utils::SharedPtr app) = 0; + /** + * @brief Checks if driver distraction state is valid, creates message + * which is sent to the application if allowed, otherwise it is added + * to a list of postponed messages. + * @param application contains registered application. + */ + virtual void SendDriverDistractionState(ApplicationSharedPtr application) = 0; + /** * DEPRECATED * @brief Checks if Application is subscribed for way points 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 0bb759fc1f..79f601d75d 100644 --- a/src/components/include/test/application_manager/mock_application_manager.h +++ b/src/components/include/test/application_manager/mock_application_manager.h @@ -122,6 +122,8 @@ class MockApplicationManager : public application_manager::ApplicationManager { MOCK_METHOD1( SendHMIStatusNotification, void(const utils::SharedPtr app)); + MOCK_METHOD1(SendDriverDistractionState, + void(application_manager::ApplicationSharedPtr app)); MOCK_METHOD1(RemoveHMIFakeParameters, void(application_manager::commands::MessageSharedPtr& message)); MOCK_CONST_METHOD1( -- cgit v1.2.1