From 76908e6f7a387d294d0cc85d131f801b46035a7e Mon Sep 17 00:00:00 2001 From: JackLivio Date: Thu, 23 Aug 2018 20:19:28 -0400 Subject: Add version Logic for play_pause and ok --- .../mobile/on_button_event_notification.cc | 12 +++++-- .../mobile/on_button_press_notification.cc | 13 +++++-- .../mobile/register_app_interface_response.cc | 40 +++++++++++++++++++--- .../commands/mobile/subscribe_button_request.cc | 18 ++++++++-- .../commands/mobile/unsubscribe_button_request.cc | 18 ++++++++-- 5 files changed, 89 insertions(+), 12 deletions(-) (limited to 'src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile') diff --git a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/on_button_event_notification.cc b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/on_button_event_notification.cc index 40debbcd4d..aeb53a115e 100644 --- a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/on_button_event_notification.cc +++ b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/on_button_event_notification.cc @@ -161,8 +161,16 @@ void OnButtonEventNotification::SendButtonEvent(ApplicationConstSharedPtr app) { (*on_btn_event)[strings::params][strings::function_id] = static_cast(mobile_apis::FunctionID::eType::OnButtonEventID); - (*on_btn_event)[strings::msg_params][strings::button_name] = - (*message_)[strings::msg_params][hmi_response::button_name]; + mobile_apis::ButtonName::eType btn_id = + static_cast( + (*message_)[strings::msg_params][hmi_response::button_name].asInt()); + + if (btn_id == mobile_apis::ButtonName::PLAY_PAUSE && + app->msg_version() <= utils::version_4_5) { + btn_id = mobile_apis::ButtonName::OK; + } + + (*on_btn_event)[strings::msg_params][strings::button_name] = btn_id; (*on_btn_event)[strings::msg_params][strings::button_event_mode] = (*message_)[strings::msg_params][hmi_response::button_mode]; diff --git a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/on_button_press_notification.cc b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/on_button_press_notification.cc index faf6ffe38b..56a87da305 100644 --- a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/on_button_press_notification.cc +++ b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/on_button_press_notification.cc @@ -35,6 +35,7 @@ #include "application_manager/application_impl.h" #include "interfaces/MOBILE_API.h" +#include "utils/semantic_version.h" namespace sdl_rpc_plugin { using namespace application_manager; @@ -168,8 +169,16 @@ void OnButtonPressNotification::SendButtonPress(ApplicationConstSharedPtr app) { (*on_btn_press)[strings::params][strings::function_id] = static_cast(mobile_apis::FunctionID::eType::OnButtonPressID); - (*on_btn_press)[strings::msg_params][strings::button_name] = - (*message_)[strings::msg_params][hmi_response::button_name]; + mobile_apis::ButtonName::eType btn_id = + static_cast( + (*message_)[strings::msg_params][hmi_response::button_name].asInt()); + + if (btn_id == mobile_apis::ButtonName::PLAY_PAUSE && + app->msg_version() <= utils::version_4_5) { + btn_id = mobile_apis::ButtonName::OK; + } + + (*on_btn_press)[strings::msg_params][strings::button_name] = btn_id; (*on_btn_press)[strings::msg_params][strings::button_press_mode] = (*message_)[strings::msg_params][hmi_response::button_mode]; diff --git a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/register_app_interface_response.cc b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/register_app_interface_response.cc index 73b38823d8..31eb738357 100644 --- a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/register_app_interface_response.cc +++ b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/register_app_interface_response.cc @@ -60,6 +60,40 @@ void RegisterAppInterfaceResponse::Run() { } } + application_manager::ApplicationSharedPtr app = + application_manager_.application(connection_key()); + + if (app && app->msg_version() <= utils::version_4_5 && + app->is_media_application() && + (*message_)[strings::msg_params].keyExists( + hmi_response::button_capabilities)) { + const smart_objects::SmartObject& button_caps = + (*message_)[strings::msg_params][hmi_response::button_capabilities]; + auto it = button_caps.asArray()->begin(); + auto ok_btn_it = it; + bool ok_btn_exists = false; + bool play_pause_btn_exists = false; + for (; it != button_caps.asArray()->end(); ++it) { + smart_objects::SmartObject& so = *it; + int64_t current_id = so[strings::name].asInt(); + if (current_id == -1) { + continue; + } + const mobile_apis::ButtonName::eType current_button = + static_cast(current_id); + if (current_button == mobile_apis::ButtonName::PLAY_PAUSE) { + play_pause_btn_exists = true; + so[strings::name] = mobile_apis::ButtonName::OK; + } else if (current_button == mobile_apis::ButtonName::OK) { + ok_btn_exists = true; + ok_btn_it = it; + } + } + if (ok_btn_exists && play_pause_btn_exists) { + button_caps.asArray()->erase(ok_btn_it); + } + } + SendResponse(success, result_code, last_message); if (mobile_apis::Result::SUCCESS != result_code) { @@ -68,16 +102,14 @@ void RegisterAppInterfaceResponse::Run() { // Add registered application to the policy db right after response sent to // mobile to be able to check all other API according to app permissions - application_manager::ApplicationSharedPtr application = - application_manager_.application(connection_key()); - if (!application) { + if (!app) { LOG4CXX_ERROR(logger_, "Application with connection key " << connection_key() << " is not registered."); return; } - SetHeartBeatTimeout(connection_key(), application->policy_app_id()); + SetHeartBeatTimeout(connection_key(), app->policy_app_id()); } void RegisterAppInterfaceResponse::SetHeartBeatTimeout( diff --git a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/subscribe_button_request.cc b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/subscribe_button_request.cc index 5afa0302b7..85cb26321b 100644 --- a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/subscribe_button_request.cc +++ b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/subscribe_button_request.cc @@ -32,6 +32,7 @@ */ #include "sdl_rpc_plugin/commands/mobile/subscribe_button_request.h" +#include "utils/semantic_version.h" namespace sdl_rpc_plugin { using namespace application_manager; @@ -65,7 +66,7 @@ void SubscribeButtonRequest::Run() { return; } - const mobile_apis::ButtonName::eType btn_id = + mobile_apis::ButtonName::eType btn_id = static_cast( (*message_)[str::msg_params][str::button_name].asInt()); @@ -76,7 +77,20 @@ void SubscribeButtonRequest::Run() { return; } - if (!CheckHMICapabilities(btn_id)) { + if (app->msg_version() <= utils::version_4_5 && + btn_id == mobile_apis::ButtonName::OK && app->is_media_application()) { + bool ok_supported = CheckHMICapabilities(mobile_apis::ButtonName::OK); + bool play_pause_supported = + CheckHMICapabilities(mobile_apis::ButtonName::PLAY_PAUSE); + if (play_pause_supported) { + LOG4CXX_DEBUG(logger_, "Converting Legacy OK button to PLAY_PAUSE"); + btn_id = mobile_apis::ButtonName::PLAY_PAUSE; + (*message_)[str::msg_params][str::button_name] = btn_id; + } else if (!ok_supported) { + LOG4CXX_ERROR(logger_, "OK button isn't allowed by HMI capabilities"); + SendResponse(false, mobile_apis::Result::UNSUPPORTED_RESOURCE); + } + } else if (!CheckHMICapabilities(btn_id)) { LOG4CXX_ERROR(logger_, "Subscribe on button " << btn_id << " isn't allowed by HMI capabilities"); diff --git a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/unsubscribe_button_request.cc b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/unsubscribe_button_request.cc index 6537f0e7b2..ccfaef54cb 100644 --- a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/unsubscribe_button_request.cc +++ b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/unsubscribe_button_request.cc @@ -34,6 +34,7 @@ #include "sdl_rpc_plugin/commands/mobile/unsubscribe_button_request.h" #include "application_manager/application_impl.h" +#include "utils/semantic_version.h" namespace sdl_rpc_plugin { using namespace application_manager; @@ -67,11 +68,24 @@ void UnsubscribeButtonRequest::Run() { return; } - const mobile_apis::ButtonName::eType btn_id = + mobile_apis::ButtonName::eType btn_id = static_cast( (*message_)[str::msg_params][str::button_name].asInt()); - if (!CheckHMICapabilities(btn_id)) { + if (app->msg_version() <= utils::version_4_5 && + btn_id == mobile_apis::ButtonName::OK && app->is_media_application()) { + bool ok_supported = CheckHMICapabilities(mobile_apis::ButtonName::OK); + bool play_pause_supported = + CheckHMICapabilities(mobile_apis::ButtonName::PLAY_PAUSE); + if (play_pause_supported) { + LOG4CXX_DEBUG(logger_, "Converting Legacy OK button to PLAY_PAUSE"); + btn_id = mobile_apis::ButtonName::PLAY_PAUSE; + (*message_)[str::msg_params][str::button_name] = btn_id; + } else if (!ok_supported) { + LOG4CXX_ERROR(logger_, "OK button isn't allowed by HMI capabilities"); + SendResponse(false, mobile_apis::Result::UNSUPPORTED_RESOURCE); + } + } else if (!CheckHMICapabilities(btn_id)) { LOG4CXX_ERROR(logger_, "Button " << btn_id << " isn't allowed by HMI capabilities"); SendResponse(false, mobile_apis::Result::UNSUPPORTED_RESOURCE); -- cgit v1.2.1