diff options
6 files changed, 63 insertions, 2 deletions
diff --git a/src/components/application_manager/include/application_manager/application.h b/src/components/application_manager/include/application_manager/application.h index aa607449a2..01e3bf6b56 100644 --- a/src/components/application_manager/include/application_manager/application.h +++ b/src/components/application_manager/include/application_manager/application.h @@ -191,6 +191,7 @@ class DynamicApplicationData { virtual const smart_objects::SmartObject* menu_icon() const = 0; virtual const smart_objects::SmartObject* day_color_scheme() const = 0; virtual const smart_objects::SmartObject* night_color_scheme() const = 0; + virtual const std::string& display_layout() const = 0; virtual void load_global_properties(const smart_objects::SmartObject& so) = 0; virtual void set_help_prompt( @@ -226,6 +227,8 @@ class DynamicApplicationData { const smart_objects::SmartObject& color_scheme) = 0; virtual void set_night_color_scheme( const smart_objects::SmartObject& color_scheme) = 0; + + virtual void set_display_layout(const std::string& layout) = 0; /** * @brief Checks if application is media, voice communication or navigation * @return true if application is media, voice communication or navigation, diff --git a/src/components/application_manager/include/application_manager/application_data_impl.h b/src/components/application_manager/include/application_manager/application_data_impl.h index 6d47ba4736..dc9be4e1d8 100644 --- a/src/components/application_manager/include/application_manager/application_data_impl.h +++ b/src/components/application_manager/include/application_manager/application_data_impl.h @@ -98,6 +98,7 @@ class DynamicApplicationDataImpl : public virtual Application { const smart_objects::SmartObject* menu_icon() const; const smart_objects::SmartObject* day_color_scheme() const; const smart_objects::SmartObject* night_color_scheme() const; + const std::string& display_layout() const; void load_global_properties(const smart_objects::SmartObject& properties_so); void set_help_prompt(const smart_objects::SmartObject& help_prompt); @@ -114,6 +115,7 @@ class DynamicApplicationDataImpl : public virtual Application { void set_menu_icon(const smart_objects::SmartObject& menu_icon); void set_day_color_scheme(const smart_objects::SmartObject& color_scheme); void set_night_color_scheme(const smart_objects::SmartObject& color_scheme); + void set_display_layout(const std::string& layout); /* * @brief Adds a command to the in application menu */ @@ -270,6 +272,7 @@ class DynamicApplicationDataImpl : public virtual Application { smart_objects::SmartObject* tbt_show_command_; smart_objects::SmartObject* day_color_scheme_; smart_objects::SmartObject* night_color_scheme_; + std::string display_layout_; CommandsMap commands_; mutable sync_primitives::Lock commands_lock_; diff --git a/src/components/application_manager/include/application_manager/smart_object_keys.h b/src/components/application_manager/include/application_manager/smart_object_keys.h index 8bcd69f896..4e12516280 100644 --- a/src/components/application_manager/include/application_manager/smart_object_keys.h +++ b/src/components/application_manager/include/application_manager/smart_object_keys.h @@ -186,6 +186,7 @@ extern const char* background_color; extern const char* red; extern const char* green; extern const char* blue; +extern const char* display_layout; // PutFile extern const char* sync_file_name; diff --git a/src/components/application_manager/src/application_data_impl.cc b/src/components/application_manager/src/application_data_impl.cc index a5c39455ba..5e31995b7d 100644 --- a/src/components/application_manager/src/application_data_impl.cc +++ b/src/components/application_manager/src/application_data_impl.cc @@ -175,6 +175,7 @@ DynamicApplicationDataImpl::DynamicApplicationDataImpl() , tbt_show_command_(NULL) , day_color_scheme_(NULL) , night_color_scheme_(NULL) + , display_layout_("") , commands_() , commands_lock_(true) , sub_menu_() @@ -312,6 +313,10 @@ DynamicApplicationDataImpl::night_color_scheme() const { return night_color_scheme_; } +const std::string& DynamicApplicationDataImpl::display_layout() const { + return display_layout_; +} + void DynamicApplicationDataImpl::load_global_properties( const smart_objects::SmartObject& properties_so) { SetGlobalProperties(properties_so.getElement(strings::vr_help_title), @@ -445,6 +450,10 @@ void DynamicApplicationDataImpl::set_night_color_scheme( night_color_scheme_ = new smart_objects::SmartObject(color_scheme); } +void DynamicApplicationDataImpl::set_display_layout(const std::string& layout) { + display_layout_ = layout; +} + void DynamicApplicationDataImpl::SetGlobalProperties( const smart_objects::SmartObject& param, void (DynamicApplicationData::*callback)( diff --git a/src/components/application_manager/src/commands/mobile/set_display_layout_request.cc b/src/components/application_manager/src/commands/mobile/set_display_layout_request.cc index 993e094647..e80912f2d9 100644 --- a/src/components/application_manager/src/commands/mobile/set_display_layout_request.cc +++ b/src/components/application_manager/src/commands/mobile/set_display_layout_request.cc @@ -60,12 +60,56 @@ void SetDisplayLayoutRequest::Run() { const smart_objects::SmartObject& msg_params = (*message_)[strings::msg_params]; + std::string old_layout = app->display_layout(); + std::string new_layout = ""; + bool allow_color_change = true; + + if (msg_params.keyExists(strings::display_layout)) { + new_layout = msg_params[strings::display_layout].asString(); + } + + if(new_layout != old_layout && !new_layout.empty()) { // Template switched, allow any color change + LOG4CXX_DEBUG(logger_, "SetDisplayLayoutRequest New Layout: " << new_layout); + app->set_display_layout(new_layout); + } else { + LOG4CXX_DEBUG(logger_, "SetDisplayLayoutRequest No Layout Change"); + // Template layout is the same as previous layout + // Reject message if colors are set + if ((msg_params.keyExists(strings::day_color_scheme) && app->day_color_scheme() != NULL)) { + if(!(msg_params[strings::day_color_scheme] == *(app->day_color_scheme())) ) { + //Color scheme param exists and has been previously set, do not allow color change + LOG4CXX_DEBUG(logger_, "Reject Day Color Scheme Change"); + allow_color_change = false; + } + + } + + if ((msg_params.keyExists(strings::night_color_scheme) && app->night_color_scheme() != NULL)) { + if(!(msg_params[strings::night_color_scheme] == *(app->night_color_scheme())) ) { + //Color scheme param exists and has been previously set, do not allow color change + LOG4CXX_DEBUG(logger_, "Reject Night Color Scheme Change"); + allow_color_change = false; + } + } + } + if (msg_params.keyExists(strings::day_color_scheme)) { - app->set_day_color_scheme(msg_params[strings::day_color_scheme]); + if(allow_color_change) { + LOG4CXX_DEBUG(logger_, "Allow Day Color Scheme Change"); + app->set_day_color_scheme(msg_params[strings::day_color_scheme]); + } } if (msg_params.keyExists(strings::night_color_scheme)) { - app->set_night_color_scheme(msg_params[strings::night_color_scheme]); + if(allow_color_change) { + LOG4CXX_DEBUG(logger_, "Allow Night Color Scheme Change"); + app->set_night_color_scheme(msg_params[strings::night_color_scheme]); + } + } + + if (!allow_color_change) { + SendResponse(false, mobile_apis::Result::REJECTED); + return; } (*message_)[strings::msg_params][strings::app_id] = app->app_id(); diff --git a/src/components/application_manager/src/smart_object_keys.cc b/src/components/application_manager/src/smart_object_keys.cc index 88ec5986f4..788f8d28fc 100644 --- a/src/components/application_manager/src/smart_object_keys.cc +++ b/src/components/application_manager/src/smart_object_keys.cc @@ -150,6 +150,7 @@ const char* background_color = "backgroundColor"; const char* red = "red"; const char* green = "green"; const char* blue = "blue"; +const char* display_layout = "displayLayout"; // PutFile const char* sync_file_name = "syncFileName"; |