diff options
Diffstat (limited to 'src/components/application_manager/src/resumption/resumption_data_processor_impl.cc')
-rw-r--r-- | src/components/application_manager/src/resumption/resumption_data_processor_impl.cc | 82 |
1 files changed, 54 insertions, 28 deletions
diff --git a/src/components/application_manager/src/resumption/resumption_data_processor_impl.cc b/src/components/application_manager/src/resumption/resumption_data_processor_impl.cc index dffb1ea094..b8462a533a 100644 --- a/src/components/application_manager/src/resumption/resumption_data_processor_impl.cc +++ b/src/components/application_manager/src/resumption/resumption_data_processor_impl.cc @@ -162,6 +162,11 @@ void ResumptionDataProcessorImpl::ProcessResumptionStatus( CheckVehicleDataResponse(found_request.message, response, status); } + if (hmi_apis::FunctionID::Buttons_SubscribeButton == + found_request.request_id.function_id) { + ProcessSubscribeButtonResponse(app_id, found_request.message, response); + } + if (hmi_apis::FunctionID::UI_CreateWindow == found_request.request_id.function_id) { CheckCreateWindowResponse(found_request.message, response); @@ -307,6 +312,14 @@ void ResumptionDataProcessorImpl::ProcessResponseFromHMI( void ResumptionDataProcessorImpl::FinalizeResumption( const ResumeCtrl::ResumptionCallBack& callback, const uint32_t app_id) { + auto app = application_manager_.application(app_id); + if (!app) { + SDL_LOG_ERROR("App " << app_id + << " is not registered, erasing resumption data"); + EraseAppResumptionData(app_id); + return; + } + if (IsResumptionSuccessful(app_id)) { SDL_LOG_DEBUG("Resumption for app " << app_id << " successful"); callback(mobile_apis::Result::SUCCESS, "Data resumption successful"); @@ -314,7 +327,7 @@ void ResumptionDataProcessorImpl::FinalizeResumption( } else { SDL_LOG_ERROR("Resumption for app " << app_id << " failed"); callback(mobile_apis::Result::RESUME_FAILED, "Data resumption failed"); - RevertRestoredData(application_manager_.application(app_id)); + RevertRestoredData(app); application_manager_.state_controller().DropPostponedWindows(app_id); } EraseAppResumptionData(app_id); @@ -334,7 +347,8 @@ void ResumptionDataProcessorImpl::HandleOnTimeOut( ProcessResponseFromHMI(*error_response, function_id, corr_id); } -void ResumptionDataProcessorImpl::on_event(const event_engine::Event& event) { +void ResumptionDataProcessorImpl::HandleOnEvent( + const event_engine::Event& event) { SDL_LOG_AUTO_TRACE(); SDL_LOG_DEBUG( "Handling response message from HMI " @@ -849,6 +863,7 @@ void ResumptionDataProcessorImpl::AddButtonsSubscriptions( const smart_objects::SmartObject& subscriptions = saved_app[strings::application_subscriptions]; + ButtonSubscriptions button_subscriptions; if (subscriptions.keyExists(strings::application_buttons)) { const smart_objects::SmartObject& subscriptions_buttons = subscriptions[strings::application_buttons]; @@ -856,29 +871,18 @@ void ResumptionDataProcessorImpl::AddButtonsSubscriptions( for (size_t i = 0; i < subscriptions_buttons.length(); ++i) { btn = static_cast<mobile_apis::ButtonName::eType>( (subscriptions_buttons[i]).asInt()); - application->SubscribeToButton(btn); + if (mobile_apis::ButtonName::CUSTOM_BUTTON != btn) { + button_subscriptions.insert(btn); + } } - ButtonSubscriptions button_subscriptions = - GetButtonSubscriptionsToResume(application); - ProcessMessagesToHMI( - MessageHelper::CreateOnButtonSubscriptionNotificationsForApp( - application, application_manager_, button_subscriptions)); - } -} - -ButtonSubscriptions ResumptionDataProcessorImpl::GetButtonSubscriptionsToResume( - ApplicationSharedPtr application) const { - ButtonSubscriptions button_subscriptions = - application->SubscribedButtons().GetData(); - auto it = button_subscriptions.find(mobile_apis::ButtonName::CUSTOM_BUTTON); - - if (it != button_subscriptions.end()) { - button_subscriptions.erase(it); + MessageHelper::CreateButtonSubscriptionsHandlingRequestsList( + application, + button_subscriptions, + hmi_apis::FunctionID::Buttons_SubscribeButton, + application_manager_)); } - - return button_subscriptions; } void ResumptionDataProcessorImpl::AddPluginsSubscriptions( @@ -908,11 +912,13 @@ void ResumptionDataProcessorImpl::DeleteButtonsSubscriptions( if (hmi_apis::Common_ButtonName::CUSTOM_BUTTON == hmi_btn) { continue; } - auto notification = MessageHelper::CreateOnButtonSubscriptionNotification( - application->hmi_app_id(), hmi_btn, false); - // is_subscribed = false - ProcessMessageToHMI(notification, false); - application->UnsubscribeFromButton(btn); + smart_objects::SmartObjectSPtr unsubscribe_request = + MessageHelper::CreateButtonSubscriptionHandlingRequestToHmi( + application->app_id(), + hmi_btn, + hmi_apis::FunctionID::Buttons_UnsubscribeButton, + application_manager_); + ProcessMessageToHMI(unsubscribe_request, false); } } @@ -975,7 +981,7 @@ void ResumptionDataProcessorImpl::DeletePluginsSubscriptions( smart_objects::SmartObject(smart_objects::SmartType_Map); module_data_so[index][message_params::kModuleType] = module.first; module_data_so[index][message_params::kModuleId] = module.second; - index++; + ++index; } } @@ -999,7 +1005,7 @@ bool IsResponseSuccessful(const smart_objects::SmartObject& response) { response[strings::params][application_manager::hmi_response::code] .asInt()); - return commands::CommandRequestImpl::IsHMIResultSuccess(result_code) || + return commands::IsHMIResultSuccess(result_code) || hmi_apis::Common_Result::UNSUPPORTED_RESOURCE == result_code; } @@ -1038,6 +1044,26 @@ void ResumptionDataProcessorImpl::CheckVehicleDataResponse( } } +void ResumptionDataProcessorImpl::ProcessSubscribeButtonResponse( + const uint32_t app_id, + const smart_objects::SmartObject& request, + const smart_objects::SmartObject& response) { + SDL_LOG_AUTO_TRACE(); + if (!IsResponseSuccessful(response)) { + return; + } + + ApplicationSharedPtr app = application_manager_.application(app_id); + if (!app) { + SDL_LOG_ERROR("NULL pointer."); + return; + } + const mobile_apis::ButtonName::eType btn_id = + static_cast<mobile_apis::ButtonName::eType>( + request[strings::msg_params][strings::button_name].asInt()); + app->SubscribeToButton(btn_id); +} + void ResumptionDataProcessorImpl::CheckModuleDataSubscription( const ns_smart_device_link::ns_smart_objects::SmartObject& request, const ns_smart_device_link::ns_smart_objects::SmartObject& response, |