summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormked-luxoft <mked@luxoft.com>2019-08-15 15:53:49 +0300
committerAndriy Byzhynar (GitHub) <AByzhynar@luxoft.com>2019-08-20 21:17:13 +0300
commit1ff190e79fb2a5eaa530ffa824a1a5a59a432ab9 (patch)
treeba1c0c34f3f0b109352b96f79451e682075031f0
parentc4cc7348bc95bb4c010ddb0f071dafd36476e893 (diff)
downloadsdl_core-1ff190e79fb2a5eaa530ffa824a1a5a59a432ab9.tar.gz
Add accumulating window capabilities
Accumulating window capabilities is needed so SDL can send mobile a full list of window capabilities in response to GetSystemCapabilities. At the same time, a new function display_capabilities(window_id) is introduced, so SDL can send window capabilities of only affected window to mobile.
-rw-r--r--src/components/application_manager/include/application_manager/application.h15
-rw-r--r--src/components/application_manager/include/application_manager/application_data_impl.h3
-rw-r--r--src/components/application_manager/include/application_manager/hmi_capabilities_impl.h4
-rw-r--r--src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/delete_window_request.cc1
-rw-r--r--src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/get_system_capability_request.cc2
-rw-r--r--src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/on_system_capability_updated_notification.cc9
-rw-r--r--src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/hmi/on_bc_system_capability_updated_notification_test.cc8
-rw-r--r--src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/mobile/get_system_capability_request_test.cc6
-rw-r--r--src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/mobile/on_system_capability_updated_notification_test.cc20
-rw-r--r--src/components/application_manager/src/application_data_impl.cc110
-rw-r--r--src/components/application_manager/src/hmi_capabilities_impl.cc11
-rw-r--r--src/components/application_manager/test/include/application_manager/mock_application.h5
-rw-r--r--src/components/application_manager/test/include/application_manager/mock_hmi_capabilities.h2
-rw-r--r--src/components/include/application_manager/hmi_capabilities.h2
14 files changed, 173 insertions, 25 deletions
diff --git a/src/components/application_manager/include/application_manager/application.h b/src/components/application_manager/include/application_manager/application.h
index c9e5a3d497..15c01072ed 100644
--- a/src/components/application_manager/include/application_manager/application.h
+++ b/src/components/application_manager/include/application_manager/application.h
@@ -207,6 +207,15 @@ class DynamicApplicationData {
*/
virtual smart_objects::SmartObjectSPtr display_capabilities() const = 0;
+ /**
+ * @brief Specific display capabilities of application
+ * @param window id - id of an affected widget
+ * @return display capabilities of application or NULL-initialized pointer if
+ * not specified
+ */
+ virtual smart_objects::SmartObjectSPtr display_capabilities(
+ const WindowID window_id) const = 0;
+
virtual void load_global_properties(const smart_objects::SmartObject& so) = 0;
virtual void set_help_prompt(
const smart_objects::SmartObject& help_prompt) = 0;
@@ -251,6 +260,12 @@ class DynamicApplicationData {
const smart_objects::SmartObject& display_capabilities) = 0;
/**
+ * @brief deletes stored window capability for given window id
+ * @param window id of capability to remove
+ */
+ virtual void remove_window_capability(const WindowID window_id) = 0;
+
+ /**
* @brief Sets layout for application's specific window
* @param window_id window id for which layout should be set
* @param layout - layout to be set
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 74857eddb2..dd093c9890 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
@@ -107,6 +107,8 @@ class DynamicApplicationDataImpl : public virtual Application {
smart_objects::SmartObject night_color_scheme() const OVERRIDE;
std::string display_layout() const OVERRIDE;
smart_objects::SmartObjectSPtr display_capabilities() const OVERRIDE;
+ smart_objects::SmartObjectSPtr display_capabilities(
+ const WindowID window_id) const OVERRIDE;
void set_window_layout(const WindowID window_id,
const std::string& layout) OVERRIDE;
@@ -144,6 +146,7 @@ class DynamicApplicationDataImpl : public virtual Application {
void set_display_layout(const std::string& layout);
void set_display_capabilities(
const smart_objects::SmartObject& display_capabilities) OVERRIDE;
+ void remove_window_capability(const WindowID window_id) OVERRIDE;
/*
* @brief Adds a command to the in application menu
*/
diff --git a/src/components/application_manager/include/application_manager/hmi_capabilities_impl.h b/src/components/application_manager/include/application_manager/hmi_capabilities_impl.h
index d18932bac5..c75306345b 100644
--- a/src/components/application_manager/include/application_manager/hmi_capabilities_impl.h
+++ b/src/components/application_manager/include/application_manager/hmi_capabilities_impl.h
@@ -233,7 +233,7 @@ class HMICapabilitiesImpl : public HMICapabilities {
* @brief Retrieves information about the display capability
* @return Currently supported display capability
*/
- const smart_objects::SmartObject* system_display_capabilities()
+ const smart_objects::SmartObjectSPtr system_display_capabilities()
const OVERRIDE;
/*
@@ -598,7 +598,7 @@ class HMICapabilitiesImpl : public HMICapabilities {
* display_capabilities_ is not removed.
*/
smart_objects::SmartObject* display_capabilities_;
- smart_objects::SmartObject* system_display_capabilities_;
+ smart_objects::SmartObjectSPtr system_display_capabilities_;
smart_objects::SmartObject* hmi_zone_capabilities_;
smart_objects::SmartObject* soft_buttons_capabilities_;
smart_objects::SmartObject* button_capabilities_;
diff --git a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/delete_window_request.cc b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/delete_window_request.cc
index 9a943bb9e3..7f253e25fd 100644
--- a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/delete_window_request.cc
+++ b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/delete_window_request.cc
@@ -81,6 +81,7 @@ void DeleteWindowRequest::DeleteWindow(
(*message_)[strings::msg_params][strings::window_id].asInt();
app->RemoveWindowInfo(window_id);
app->RemoveHMIState(window_id, HmiState::StateID::STATE_ID_REGULAR);
+ app->remove_window_capability(window_id);
}
void DeleteWindowRequest::Run() {
diff --git a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/get_system_capability_request.cc b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/get_system_capability_request.cc
index d8b50e20d0..dfc48ce2d5 100644
--- a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/get_system_capability_request.cc
+++ b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/get_system_capability_request.cc
@@ -155,7 +155,7 @@ void GetSystemCapabilityRequest::Run() {
case mobile_apis::SystemCapabilityType::DISPLAYS: {
auto capabilities = hmi_capabilities.system_display_capabilities();
if (app->display_capabilities()) {
- capabilities = app->display_capabilities().get();
+ capabilities = app->display_capabilities();
}
if (!capabilities) {
diff --git a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/on_system_capability_updated_notification.cc b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/on_system_capability_updated_notification.cc
index 26d6fea164..8c2c6d1aff 100644
--- a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/on_system_capability_updated_notification.cc
+++ b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/on_system_capability_updated_notification.cc
@@ -215,12 +215,17 @@ void OnSystemCapabilityUpdatedNotification::Run() {
<< " is resuming. Providing cached capabilities");
auto display_caps =
app->display_capabilities_builder().display_capabilities();
- capabilities = display_caps.get();
+ capabilities = display_caps;
} else if (app->display_capabilities()) {
LOG4CXX_DEBUG(logger_,
"Application " << app->app_id()
<< " has specific display capabilities");
- capabilities = app->display_capabilities().get();
+ const WindowID window_id =
+ msg_params[strings::system_capability]
+ [strings::display_capabilities][0]
+ [strings::window_capabilities][0][strings::window_id]
+ .asInt();
+ capabilities = app->display_capabilities(window_id);
}
if (!capabilities) {
diff --git a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/hmi/on_bc_system_capability_updated_notification_test.cc b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/hmi/on_bc_system_capability_updated_notification_test.cc
index 29f4d02436..cb8894749f 100644
--- a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/hmi/on_bc_system_capability_updated_notification_test.cc
+++ b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/hmi/on_bc_system_capability_updated_notification_test.cc
@@ -81,15 +81,17 @@ TEST_F(OnBCSystemCapabilityUpdatedNotificationTest,
[am::strings::system_capability_type] =
mobile_apis::SystemCapabilityType::DISPLAYS;
- smart_objects::SmartObject system_display_capabilities;
+ smart_objects::SmartObjectSPtr system_display_capabilities =
+ std::make_shared<smart_objects::SmartObject>(
+ smart_objects::SmartType_Null);
EXPECT_CALL(mock_hmi_capabilities_, system_display_capabilities())
.Times(2)
- .WillRepeatedly(Return(&system_display_capabilities));
+ .WillRepeatedly(Return(system_display_capabilities));
EXPECT_CALL(
mock_rpc_service_,
- SendMessageToHMI(CheckDisplayCapabilities(system_display_capabilities)));
+ SendMessageToHMI(CheckDisplayCapabilities(*system_display_capabilities)));
ASSERT_TRUE(command_->Init());
command_->Run();
diff --git a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/mobile/get_system_capability_request_test.cc b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/mobile/get_system_capability_request_test.cc
index 90797bb1d5..74c61410e8 100644
--- a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/mobile/get_system_capability_request_test.cc
+++ b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/mobile/get_system_capability_request_test.cc
@@ -85,6 +85,9 @@ TEST_F(
ON_CALL(*mock_app_, display_capabilities())
.WillByDefault(Return(system_display_capabilities));
+ ON_CALL(mock_hmi_capabilities_, system_display_capabilities())
+ .WillByDefault(Return(system_display_capabilities));
+
EXPECT_CALL(
mock_rpc_service_,
ManageMobileCommand(MobileResultCodeIs(mobile_apis::Result::SUCCESS),
@@ -102,6 +105,9 @@ TEST_F(
EXPECT_CALL(*mock_app_, display_capabilities()).WillOnce(Return(nullptr));
+ ON_CALL(mock_hmi_capabilities_, system_display_capabilities())
+ .WillByDefault(Return(nullptr));
+
EXPECT_CALL(mock_rpc_service_,
ManageMobileCommand(
MobileResultCodeIs(mobile_apis::Result::DATA_NOT_AVAILABLE),
diff --git a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/mobile/on_system_capability_updated_notification_test.cc b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/mobile/on_system_capability_updated_notification_test.cc
index a7324f14c9..349ada66a2 100644
--- a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/mobile/on_system_capability_updated_notification_test.cc
+++ b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/mobile/on_system_capability_updated_notification_test.cc
@@ -58,7 +58,7 @@ const uint32_t kAppId = 2u;
} // namespace
MATCHER_P(CheckDisplayCapabilities, display_capabilities, "") {
- return display_capabilities ==
+ return *display_capabilities ==
(*arg)[strings::msg_params][strings::system_capability]
[strings::display_capabilities];
}
@@ -86,10 +86,12 @@ TEST_F(
[am::strings::system_capability_type] =
mobile_apis::SystemCapabilityType::DISPLAYS;
- smart_objects::SmartObject system_display_capabilities;
+ smart_objects::SmartObjectSPtr system_display_capabilities =
+ std::make_shared<smart_objects::SmartObject>(
+ smart_objects::SmartType_Null);
ON_CALL(mock_hmi_capabilities_, system_display_capabilities())
- .WillByDefault(Return(&system_display_capabilities));
+ .WillByDefault(Return(system_display_capabilities));
sdl_rpc_plugin::SDLRPCPlugin sdl_rpc_plugin;
@@ -132,10 +134,12 @@ TEST_F(
[am::strings::system_capability_type] =
mobile_apis::SystemCapabilityType::DISPLAYS;
- smart_objects::SmartObject system_display_capabilities;
+ smart_objects::SmartObjectSPtr system_display_capabilities =
+ std::make_shared<smart_objects::SmartObject>(
+ smart_objects::SmartType_Null);
ON_CALL(mock_hmi_capabilities_, system_display_capabilities())
- .WillByDefault(Return(&system_display_capabilities));
+ .WillByDefault(Return(system_display_capabilities));
sdl_rpc_plugin::SDLRPCPlugin sdl_rpc_plugin;
@@ -172,10 +176,12 @@ TEST_F(
[am::strings::system_capability_type] =
mobile_apis::SystemCapabilityType::DISPLAYS;
- smart_objects::SmartObject system_display_capabilities;
+ smart_objects::SmartObjectSPtr system_display_capabilities =
+ std::make_shared<smart_objects::SmartObject>(
+ smart_objects::SmartType_Null);
ON_CALL(mock_hmi_capabilities_, system_display_capabilities())
- .WillByDefault(Return(&system_display_capabilities));
+ .WillByDefault(Return(system_display_capabilities));
sdl_rpc_plugin::SDLRPCPlugin sdl_rpc_plugin;
diff --git a/src/components/application_manager/src/application_data_impl.cc b/src/components/application_manager/src/application_data_impl.cc
index c19998f6c0..f6b87d3a7e 100644
--- a/src/components/application_manager/src/application_data_impl.cc
+++ b/src/components/application_manager/src/application_data_impl.cc
@@ -359,6 +359,44 @@ DynamicApplicationDataImpl::display_capabilities() const {
return display_capabilities_;
}
+smart_objects::SmartObjectSPtr DynamicApplicationDataImpl::display_capabilities(
+ const WindowID window_id) const {
+ LOG4CXX_AUTO_TRACE(logger_);
+
+ auto result_display_caps = std::make_shared<smart_objects::SmartObject>(
+ smart_objects::SmartType_Array);
+ const auto window_caps =
+ (*display_capabilities_)[0][strings::window_capabilities].asArray();
+ if (!window_caps) {
+ LOG4CXX_WARN(logger_, "Current window capabilities are empty");
+ // SDL still needs to retreive display capabilities
+ return display_capabilities_;
+ }
+ auto find_res =
+ std::find_if(window_caps->begin(),
+ window_caps->end(),
+ [&window_id](const smart_objects::SmartObject& element) {
+ if (window_id == element[strings::window_id].asInt()) {
+ return true;
+ }
+
+ return false;
+ });
+
+ DCHECK(find_res != window_caps->end());
+ const auto disp_caps_keys = (*display_capabilities_)[0].enumerate();
+ for (const auto& key : disp_caps_keys) {
+ if (strings::window_capabilities == key) {
+ continue;
+ }
+ (*result_display_caps)[0][key] = (*display_capabilities_)[0][key];
+ }
+
+ (*result_display_caps)[0][strings::window_capabilities][0] = *find_res;
+
+ return result_display_caps;
+}
+
void DynamicApplicationDataImpl::load_global_properties(
const smart_objects::SmartObject& properties_so) {
SetGlobalProperties(properties_so.getElement(strings::vr_help_title),
@@ -498,8 +536,80 @@ void DynamicApplicationDataImpl::set_display_layout(const std::string& layout) {
void DynamicApplicationDataImpl::set_display_capabilities(
const smart_objects::SmartObject& display_capabilities) {
+ LOG4CXX_AUTO_TRACE(logger_);
+ const auto& incoming_window_capabilities =
+ display_capabilities[0][strings::window_capabilities];
+
+ smart_objects::SmartObject tmp_window_capabilities;
+ if (display_capabilities_) {
+ tmp_window_capabilities =
+ (*display_capabilities_)[0][strings::window_capabilities];
+ }
+
display_capabilities_.reset(
new smart_objects::SmartObject(display_capabilities));
+
+ auto has_window_id = [&tmp_window_capabilities](const WindowID window_id) {
+ const auto tmp_window_capabilities_arr = tmp_window_capabilities.asArray();
+ if (!tmp_window_capabilities_arr) {
+ return false;
+ }
+
+ const auto find_res = std::find_if(
+ tmp_window_capabilities_arr->begin(),
+ tmp_window_capabilities_arr->end(),
+ [&window_id](const smart_objects::SmartObject& element) {
+ LOG4CXX_DEBUG(logger_,
+ "Searching for "
+ << window_id << " with element window id "
+ << element[strings::window_id].asInt());
+ if ((!element.keyExists(strings::window_id)) && 0 == window_id) {
+ return true;
+ }
+ const auto current_window_id = element[strings::window_id].asInt();
+ if (window_id == current_window_id) {
+ return true;
+ }
+ return false;
+ });
+
+ return find_res != tmp_window_capabilities_arr->end();
+ };
+ for (uint32_t i = 0; i < incoming_window_capabilities.length(); ++i) {
+ const auto window_id =
+ incoming_window_capabilities[i][strings::window_id].asInt();
+ if (!has_window_id(window_id)) {
+ tmp_window_capabilities[tmp_window_capabilities.length()] =
+ incoming_window_capabilities[i];
+ }
+ }
+
+ (*display_capabilities_)[0][strings::window_capabilities] =
+ tmp_window_capabilities;
+}
+
+void DynamicApplicationDataImpl::remove_window_capability(
+ const WindowID window_id) {
+ LOG4CXX_AUTO_TRACE(logger_);
+
+ auto window_capabilities =
+ (*display_capabilities_)[0][strings::window_capabilities].asArray();
+ DCHECK_OR_RETURN_VOID(window_capabilities);
+
+ for (auto it = window_capabilities->begin(); it != window_capabilities->end();
+ ++it) {
+ const auto cur_window_id = (*it).keyExists(strings::window_id)
+ ? (*it)[strings::window_id].asInt()
+ : 0;
+ if (window_id == cur_window_id) {
+ window_capabilities->erase(it);
+ return;
+ }
+ }
+
+ LOG4CXX_WARN(
+ logger_,
+ "No window id " << window_id << " found in display capabilities");
}
void DynamicApplicationDataImpl::set_window_layout(const WindowID window_id,
diff --git a/src/components/application_manager/src/hmi_capabilities_impl.cc b/src/components/application_manager/src/hmi_capabilities_impl.cc
index 1356502b34..6b209ade0c 100644
--- a/src/components/application_manager/src/hmi_capabilities_impl.cc
+++ b/src/components/application_manager/src/hmi_capabilities_impl.cc
@@ -436,7 +436,6 @@ HMICapabilitiesImpl::HMICapabilitiesImpl(ApplicationManager& app_mngr)
, tts_supported_languages_(NULL)
, vr_supported_languages_(NULL)
, display_capabilities_(NULL)
- , system_display_capabilities_(NULL)
, hmi_zone_capabilities_(NULL)
, soft_buttons_capabilities_(NULL)
, button_capabilities_(NULL)
@@ -473,7 +472,6 @@ HMICapabilitiesImpl::~HMICapabilitiesImpl() {
delete tts_supported_languages_;
delete vr_supported_languages_;
delete display_capabilities_;
- delete system_display_capabilities_;
delete hmi_zone_capabilities_;
delete soft_buttons_capabilities_;
delete button_capabilities_;
@@ -620,11 +618,8 @@ void HMICapabilitiesImpl::set_display_capabilities(
void HMICapabilitiesImpl::set_system_display_capabilities(
const smart_objects::SmartObject& display_capabilities) {
- if (system_display_capabilities_) {
- delete system_display_capabilities_;
- }
- system_display_capabilities_ =
- new smart_objects::SmartObject(display_capabilities);
+ system_display_capabilities_.reset(
+ new smart_objects::SmartObject(display_capabilities));
}
void HMICapabilitiesImpl::set_hmi_zone_capabilities(
@@ -817,7 +812,7 @@ const smart_objects::SmartObject* HMICapabilitiesImpl::display_capabilities()
return display_capabilities_;
}
-const smart_objects::SmartObject*
+const smart_objects::SmartObjectSPtr
HMICapabilitiesImpl::system_display_capabilities() const {
return system_display_capabilities_;
}
diff --git a/src/components/application_manager/test/include/application_manager/mock_application.h b/src/components/application_manager/test/include/application_manager/mock_application.h
index d90edbe2a1..e0f00f7b3a 100644
--- a/src/components/application_manager/test/include/application_manager/mock_application.h
+++ b/src/components/application_manager/test/include/application_manager/mock_application.h
@@ -249,6 +249,9 @@ class MockApplication : public ::application_manager::Application {
MOCK_CONST_METHOD0(night_color_scheme, smart_objects::SmartObject());
MOCK_CONST_METHOD0(display_layout, std::string());
MOCK_CONST_METHOD0(display_capabilities, smart_objects::SmartObjectSPtr());
+ MOCK_CONST_METHOD1(display_capabilities,
+ smart_objects::SmartObjectSPtr(
+ const application_manager::WindowID window_id));
MOCK_METHOD2(set_window_layout,
void(const application_manager::WindowID window_id,
@@ -418,6 +421,8 @@ class MockApplication : public ::application_manager::Application {
application_manager::DisplayCapabilitiesBuilder&());
MOCK_METHOD1(GetSoftButtonWindowID,
application_manager::WindowID(const uint32_t button_id));
+ MOCK_METHOD1(remove_window_capability,
+ void(const application_manager::WindowID window_id));
};
} // namespace application_manager_test
diff --git a/src/components/application_manager/test/include/application_manager/mock_hmi_capabilities.h b/src/components/application_manager/test/include/application_manager/mock_hmi_capabilities.h
index 854a72be20..6ca987c1b2 100644
--- a/src/components/application_manager/test/include/application_manager/mock_hmi_capabilities.h
+++ b/src/components/application_manager/test/include/application_manager/mock_hmi_capabilities.h
@@ -104,7 +104,7 @@ class MockHMICapabilities : public ::application_manager::HMICapabilities {
void(const smart_objects::SmartObject& display_capabilities));
MOCK_CONST_METHOD0(system_display_capabilities,
- const smart_objects::SmartObject*());
+ const smart_objects::SmartObjectSPtr());
MOCK_METHOD1(set_system_display_capabilities,
void(const smart_objects::SmartObject& display_capabilities));
diff --git a/src/components/include/application_manager/hmi_capabilities.h b/src/components/include/application_manager/hmi_capabilities.h
index 1bd463381d..a30625347d 100644
--- a/src/components/include/application_manager/hmi_capabilities.h
+++ b/src/components/include/application_manager/hmi_capabilities.h
@@ -233,7 +233,7 @@ class HMICapabilities {
* @brief Retrieves information about the display capability
* @return Currently supported display capability
*/
- virtual const smart_objects::SmartObject* system_display_capabilities()
+ virtual const smart_objects::SmartObjectSPtr system_display_capabilities()
const = 0;
/*