summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJacob Keeler <jacob.keeler@livioradio.com>2022-04-13 10:31:56 -0400
committerGitHub <noreply@github.com>2022-04-13 10:31:56 -0400
commit65947fd1eb30a392948d67003df0fe803c070c6b (patch)
treebb3a88b2b132421f8c0c157c592e617af99b55fd
parent68f082169e0a40fccd9eb0db3c83911c28870f07 (diff)
parent6b423eb0a2b01600d399cad18f789a7dfbcc83af (diff)
downloadsdl_core-65947fd1eb30a392948d67003df0fe803c070c6b.tar.gz
Merge pull request #3872 from smartdevicelink/release/8.1.08.1.0
Release 8.1.0
-rw-r--r--.github/workflows/sdl_core_github_ci.yml4
-rw-r--r--.github/workflows/sdl_core_github_ci_coverity.yml4
-rwxr-xr-xsrc/appMain/hmi_capabilities.json5
-rw-r--r--src/appMain/life_cycle_impl.cc2
-rw-r--r--src/appMain/smartDeviceLink.ini2
-rw-r--r--src/components/application_manager/include/application_manager/app_launch/app_launch_ctrl.h6
-rw-r--r--src/components/application_manager/include/application_manager/app_launch/app_launch_ctrl_impl.h2
-rw-r--r--src/components/application_manager/include/application_manager/app_launch/device_apps_launcher.h2
-rw-r--r--src/components/application_manager/include/application_manager/application.h55
-rw-r--r--src/components/application_manager/include/application_manager/application_data_impl.h63
-rw-r--r--src/components/application_manager/include/application_manager/application_impl.h4
-rw-r--r--src/components/application_manager/include/application_manager/application_manager_impl.h2
-rw-r--r--src/components/application_manager/include/application_manager/event_engine/event_dispatcher.h9
-rw-r--r--src/components/application_manager/include/application_manager/event_engine/event_dispatcher_impl.h27
-rw-r--r--src/components/application_manager/include/application_manager/hmi_capabilities_impl.h6
-rw-r--r--src/components/application_manager/include/application_manager/policies/policy_handler.h7
-rw-r--r--src/components/application_manager/include/application_manager/request_controller_impl.h1
-rw-r--r--src/components/application_manager/include/application_manager/resumption/resumption_data.h2
-rw-r--r--src/components/application_manager/include/application_manager/rpc_protection_manager_impl.h2
-rw-r--r--src/components/application_manager/rpc_plugins/rc_rpc_plugin/include/rc_rpc_plugin/commands/hmi/rc_set_global_properties_request.h2
-rw-r--r--src/components/application_manager/rpc_plugins/rc_rpc_plugin/src/commands/hmi/rc_set_global_properties_request.cc8
-rw-r--r--src/components/application_manager/rpc_plugins/rc_rpc_plugin/src/commands/rc_command_request.cc2
-rw-r--r--src/components/application_manager/rpc_plugins/rc_rpc_plugin/test/commands/button_press_request_test.cc10
-rw-r--r--src/components/application_manager/rpc_plugins/rc_rpc_plugin/test/commands/get_interior_vehicle_data_request_test.cc7
-rw-r--r--src/components/application_manager/rpc_plugins/rc_rpc_plugin/test/commands/rc_get_interior_vehicle_data_consent_test.cc2
-rw-r--r--src/components/application_manager/rpc_plugins/rc_rpc_plugin/test/commands/set_interior_vehicle_data_request_test.cc2
-rw-r--r--src/components/application_manager/rpc_plugins/sdl_rpc_plugin/include/sdl_rpc_plugin/commands/hmi/ui_set_display_layout_request.h76
-rw-r--r--src/components/application_manager/rpc_plugins/sdl_rpc_plugin/include/sdl_rpc_plugin/commands/hmi/ui_set_display_layout_response.h78
-rw-r--r--src/components/application_manager/rpc_plugins/sdl_rpc_plugin/include/sdl_rpc_plugin/commands/mobile/register_app_interface_request.h2
-rw-r--r--src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/hmi/on_driver_distraction_notification.cc3
-rw-r--r--src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/hmi/on_system_request_notification.cc15
-rw-r--r--src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/hmi/on_tts_language_change_notification.cc16
-rw-r--r--src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/hmi/on_ui_language_change_notification.cc15
-rw-r--r--src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/hmi/on_vr_language_change_notification.cc22
-rw-r--r--src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/hmi/sdl_activate_app_request.cc78
-rw-r--r--src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/hmi/ui_get_capabilities_response.cc2
-rw-r--r--src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/hmi/ui_set_display_layout_request.cc63
-rw-r--r--src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/hmi/ui_set_display_layout_response.cc68
-rw-r--r--src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/create_interaction_choice_set_request.cc13
-rw-r--r--src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/delete_interaction_choice_set_request.cc1
-rw-r--r--src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/perform_audio_pass_thru_request.cc41
-rw-r--r--src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/perform_interaction_request.cc65
-rw-r--r--src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/register_app_interface_request.cc23
-rw-r--r--src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/register_app_interface_response.cc2
-rw-r--r--src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/set_display_layout_request.cc50
-rw-r--r--src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/show_constant_tbt_response.cc2
-rw-r--r--src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/system_request.cc82
-rw-r--r--src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/update_turn_list_response.cc2
-rw-r--r--src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/hmi_command_factory.cc7
-rw-r--r--src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/hmi/dummy_hmi_commands_test.cc4
-rw-r--r--src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/hmi/hmi_notifications_test.cc10
-rw-r--r--src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/hmi/sdl_activate_app_request_test.cc48
-rw-r--r--src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/hmi/simple_requests_to_hmi_test.cc2
-rw-r--r--src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/hmi/simple_response_from_hmi_test.cc3
-rw-r--r--src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/mobile/create_interaction_choice_set_test.cc4
-rw-r--r--src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/mobile/perform_audio_pass_thru_test.cc2
-rw-r--r--src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/mobile/perform_interaction_test.cc65
-rw-r--r--src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/mobile/register_app_interface_request_test.cc4
-rw-r--r--src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/mobile/set_display_layout_test.cc80
-rw-r--r--src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/mobile/set_global_properties_test.cc336
-rw-r--r--src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/mobile/simple_response_commands_test.cc1
-rw-r--r--src/components/application_manager/rpc_plugins/vehicle_info_plugin/src/commands/mobile/subscribe_vehicle_data_request.cc15
-rw-r--r--src/components/application_manager/rpc_plugins/vehicle_info_plugin/src/commands/mobile/unsubscribe_vehicle_data_request.cc3
-rw-r--r--src/components/application_manager/rpc_plugins/vehicle_info_plugin/src/vehicle_info_pending_resumption_handler.cc6
-rw-r--r--src/components/application_manager/src/app_launch/app_launch_ctrl_impl.cc9
-rw-r--r--src/components/application_manager/src/app_launch/device_apps_launcher.cc18
-rw-r--r--src/components/application_manager/src/application_data_impl.cc270
-rw-r--r--src/components/application_manager/src/application_impl.cc57
-rw-r--r--src/components/application_manager/src/application_manager_impl.cc57
-rw-r--r--src/components/application_manager/src/commands/command_impl.cc11
-rw-r--r--src/components/application_manager/src/event_engine/event_dispatcher_impl.cc63
-rw-r--r--src/components/application_manager/src/hmi_capabilities_impl.cc53
-rw-r--r--src/components/application_manager/src/hmi_interfaces_impl.cc1
-rw-r--r--src/components/application_manager/src/message_helper/message_helper.cc31
-rw-r--r--src/components/application_manager/src/mobile_message_handler.cc10
-rw-r--r--src/components/application_manager/src/policies/policy_handler.cc50
-rw-r--r--src/components/application_manager/src/request_controller_impl.cc10
-rw-r--r--src/components/application_manager/src/request_timeout_handler_impl.cc3
-rw-r--r--src/components/application_manager/src/resumption/resumption_data.cc4
-rw-r--r--src/components/application_manager/src/rpc_protection_manager_impl.cc18
-rw-r--r--src/components/application_manager/src/rpc_service_impl.cc2
-rw-r--r--src/components/application_manager/src/state_controller_impl.cc17
-rw-r--r--src/components/application_manager/test/application_manager_impl_test.cc69
-rw-r--r--src/components/application_manager/test/help_prompt_manager_test.cc76
-rw-r--r--src/components/application_manager/test/hmi_capabilities_sc1.json5
-rw-r--r--src/components/application_manager/test/hmi_capabilities_sc2.json5
-rw-r--r--src/components/application_manager/test/hmi_capabilities_test.cc57
-rw-r--r--src/components/application_manager/test/include/application_manager/mock_application.h30
-rw-r--r--src/components/application_manager/test/include/application_manager/mock_hmi_capabilities.h5
-rw-r--r--src/components/application_manager/test/include/application_manager/resumption_data_test.h30
-rw-r--r--src/components/application_manager/test/message_helper/message_helper_test.cc92
-rw-r--r--src/components/application_manager/test/policy_handler_test.cc54
-rw-r--r--src/components/application_manager/test/resumption/resumption_data_test.cc63
-rw-r--r--src/components/application_manager/test/sdl_pt_update.json7
-rw-r--r--src/components/config_profile/src/profile.cc4
-rw-r--r--src/components/connection_handler/src/connection_handler_impl.cc9
-rw-r--r--src/components/connection_handler/test/connection_handler_impl_test.cc92
-rw-r--r--src/components/include/application_manager/application_manager.h3
-rw-r--r--src/components/include/application_manager/hmi_capabilities.h13
-rw-r--r--src/components/include/application_manager/policies/policy_handler_interface.h5
-rw-r--r--src/components/include/test/application_manager/mock_application_manager.h3
-rw-r--r--src/components/include/test/application_manager/policies/mock_policy_handler_interface.h4
-rw-r--r--src/components/interfaces/CMakeLists.txt24
-rw-r--r--src/components/interfaces/HMI_API.xml39
-rw-r--r--src/components/media_manager/include/media_manager/media_manager_impl.h2
-rw-r--r--src/components/media_manager/src/media_manager_impl.cc81
-rw-r--r--src/components/policy/policy_external/CMakeLists.txt2
-rw-r--r--src/components/policy/policy_external/include/policy/policy_manager_impl.h5
-rw-r--r--src/components/policy/policy_external/include/policy/policy_table/types.h1
-rw-r--r--src/components/policy/policy_external/include/policy/policy_table_interface_ext.xml2
-rw-r--r--src/components/policy/policy_external/include/policy/sql_pt_queries.h1
-rw-r--r--src/components/policy/policy_external/src/access_remote_impl.cc3
-rw-r--r--src/components/policy/policy_external/src/cache_manager.cc42
-rw-r--r--src/components/policy/policy_external/src/policy_manager_impl.cc6
-rw-r--r--src/components/policy/policy_external/src/policy_table/types.cc13
-rw-r--r--src/components/policy/policy_external/src/sql_pt_ext_queries.cc6
-rw-r--r--src/components/policy/policy_external/src/sql_pt_ext_representation.cc67
-rw-r--r--src/components/policy/policy_external/src/sql_pt_queries.cc16
-rw-r--r--src/components/policy/policy_external/src/sql_pt_representation.cc82
-rw-r--r--src/components/policy/policy_external/test/sql_pt_ext_representation_storage_test.cc8
-rw-r--r--src/components/policy/policy_external/test/sql_pt_ext_representation_test.cc48
-rw-r--r--src/components/policy/policy_external/test/sql_pt_representation_storage_test.cc4
-rw-r--r--src/components/policy/policy_external/test/sql_pt_representation_test.cc90
-rw-r--r--src/components/policy/policy_regular/CMakeLists.txt2
-rw-r--r--src/components/policy/policy_regular/include/policy/cache_manager.h2
-rw-r--r--src/components/policy/policy_regular/include/policy/policy_manager_impl.h5
-rw-r--r--src/components/policy/policy_regular/include/policy/policy_table/types.h2
-rw-r--r--src/components/policy/policy_regular/include/policy/sql_pt_queries.h1
-rw-r--r--src/components/policy/policy_regular/src/access_remote_impl.cc4
-rw-r--r--src/components/policy/policy_regular/src/cache_manager.cc48
-rw-r--r--src/components/policy/policy_regular/src/policy_manager_impl.cc3
-rw-r--r--src/components/policy/policy_regular/src/policy_table/types.cc19
-rw-r--r--src/components/policy/policy_regular/src/sql_pt_queries.cc16
-rw-r--r--src/components/policy/policy_regular/src/sql_pt_representation.cc84
-rw-r--r--src/components/policy/policy_regular/src/status.cc1
-rw-r--r--src/components/policy/policy_regular/test/sql_pt_representation_storage_test.cc4
-rw-r--r--src/components/policy/policy_regular/test/sql_pt_representation_test.cc90
-rw-r--r--src/components/protocol_handler/src/handshake_handler.cc2
-rw-r--r--src/components/resumption/src/last_state_impl.cc1
-rw-r--r--src/components/security_manager/src/security_manager_impl.cc3
-rw-r--r--src/components/security_manager/src/ssl_context_impl.cc1
-rw-r--r--src/components/security_manager/test/ssl_certificate_handshake_test.cc2
-rw-r--r--src/components/transport_manager/include/transport_manager/cloud/websocket_client_connection.h7
-rw-r--r--src/components/transport_manager/include/transport_manager/transport_adapter/threaded_socket_connection.h4
-rw-r--r--src/components/transport_manager/include/transport_manager/websocket_server/websocket_session.h2
-rw-r--r--src/components/transport_manager/src/bluetooth/bluetooth_device_scanner.cc44
-rw-r--r--src/components/transport_manager/src/cloud/websocket_client_connection.cc113
-rw-r--r--src/components/transport_manager/src/transport_adapter/threaded_socket_connection.cc67
-rw-r--r--src/components/transport_manager/src/transport_adapter/transport_adapter_impl.cc3
-rw-r--r--src/components/transport_manager/src/websocket_server/websocket_session.cc2
-rw-r--r--src/components/transport_manager/test/websocket_connection_test.cc4
-rw-r--r--src/components/utils/include/utils/helpers.h9
-rw-r--r--src/components/utils/test/policy.sql1
-rw-r--r--src/components/utils/test/test_generator/CMakeLists.txt2
-rw-r--r--tools/cmake/helpers/generators.cmake6
-rwxr-xr-xtools/infrastructure/collect_coverage.sh2
156 files changed, 2156 insertions, 1799 deletions
diff --git a/.github/workflows/sdl_core_github_ci.yml b/.github/workflows/sdl_core_github_ci.yml
index 14ff51c2fe..47e13f9673 100644
--- a/.github/workflows/sdl_core_github_ci.yml
+++ b/.github/workflows/sdl_core_github_ci.yml
@@ -9,7 +9,7 @@ jobs:
run: git -C ${{ github.workspace }} submodule update --init --recursive
# Install Dependencies
- name: Apt Get Dependencies
- run: sudo apt-get update && sudo apt-get install libssl-dev libbluetooth3 libbluetooth-dev libudev-dev cmake html2text lcov git cmake automake1.11 build-essential libavahi-client-dev sqlite3 libsqlite3-dev libgtest-dev bluez-tools libpulse-dev libusb-1.0.0-dev cppcheck python3-pip python3-setuptools && sudo apt-get install -f clang-format-8
+ run: sudo apt-get update && sudo apt-get install libssl-dev libbluetooth3 libbluetooth-dev libudev-dev cmake html2text lcov git cmake automake1.11 build-essential libavahi-client-dev sqlite3 libsqlite3-dev libgtest-dev bluez-tools libpulse-dev libusb-1.0.0-dev cppcheck python3-pip python3-setuptools python3-wheel && sudo apt-get install -f clang-format-8
- name: Setup CMAKE
uses: jwlawson/actions-setup-cmake@v1.8
with:
@@ -36,7 +36,7 @@ jobs:
- name: Configure
run: cmake ../sdl_core -DBUILD_TESTS=ON -DLOGGER_NAME=BOOST
- name: Build
- run: make install-3rd_party && make -j `nproc` install
+ run: make install-3rd_party && make install_python_dependencies && make -j `nproc` install
- name: Set Library Path
run: echo "LD_LIBRARY_PATH=$THIRD_PARTY_INSTALL_PREFIX/lib:." >> $GITHUB_ENV
# run tests
diff --git a/.github/workflows/sdl_core_github_ci_coverity.yml b/.github/workflows/sdl_core_github_ci_coverity.yml
index c60482d30f..124691080a 100644
--- a/.github/workflows/sdl_core_github_ci_coverity.yml
+++ b/.github/workflows/sdl_core_github_ci_coverity.yml
@@ -21,7 +21,7 @@ jobs:
run: git -C ${{ github.workspace }} submodule update --init --recursive
# Install Dependencies
- name: Apt Get Dependencies
- run: sudo apt-get update && sudo apt-get install libssl-dev libbluetooth3 libbluetooth-dev libudev-dev cmake html2text lcov git cmake automake1.11 build-essential libavahi-client-dev sqlite3 libsqlite3-dev libgtest-dev bluez-tools libpulse-dev libusb-1.0.0-dev cppcheck python3-pip python3-setuptools && sudo apt-get install -f clang-format-6.0
+ run: sudo apt-get update && sudo apt-get install libssl-dev libbluetooth3 libbluetooth-dev libudev-dev cmake html2text lcov git cmake automake1.11 build-essential libavahi-client-dev sqlite3 libsqlite3-dev libgtest-dev bluez-tools libpulse-dev libusb-1.0.0-dev cppcheck python3-pip python3-setuptools python3-wheel && sudo apt-get install -f clang-format-8
- name: Setup CMAKE
uses: jwlawson/actions-setup-cmake@v1.8
with:
@@ -51,7 +51,7 @@ jobs:
- name: unzip
run: tar zxvf coverity_tool.tgz
- name: Build
- run: make install-3rd_party && ./cov-analysis-linux64-2020.09/bin/cov-build --dir cov-int make -j `nproc` install
+ run: make install-3rd_party && make install_python_dependencies && ./cov-analysis-linux64-*/bin/cov-build --dir cov-int make -j `nproc` install
- name: Set Library Path
run: echo "LD_LIBRARY_PATH=$THIRD_PARTY_INSTALL_PREFIX/lib:." >> $GITHUB_ENV
- name: Compress Coverity
diff --git a/src/appMain/hmi_capabilities.json b/src/appMain/hmi_capabilities.json
index e5ee4f00b6..a0df3d9731 100755
--- a/src/appMain/hmi_capabilities.json
+++ b/src/appMain/hmi_capabilities.json
@@ -322,6 +322,11 @@
"audioType": "PCM"
},
"hmiZoneCapabilities": "FRONT",
+ "hmiCapabilities":{
+ "navigation":true,
+ "phoneCall":true,
+ "videoStreaming":true
+ },
"softButtonCapabilities": [{
"shortPressAvailable": true,
"longPressAvailable": true,
diff --git a/src/appMain/life_cycle_impl.cc b/src/appMain/life_cycle_impl.cc
index 8b67877ac8..762f506814 100644
--- a/src/appMain/life_cycle_impl.cc
+++ b/src/appMain/life_cycle_impl.cc
@@ -237,12 +237,14 @@ void sig_handler(int sig) {
SDL_LOG_DEBUG("SIGTERM signal has been caught");
break;
case SIGSEGV:
+ std::cerr << "SIGSEGV caught" << std::endl;
SDL_LOG_DEBUG("SIGSEGV signal has been caught");
SDL_FLUSH_LOGGER();
// exit need to prevent endless sending SIGSEGV
// http://stackoverflow.com/questions/2663456/how-to-write-a-signal-handler-to-catch-sigsegv
abort();
default:
+ std::cerr << "Unexpected signal " << sig << " caught" << std::endl;
SDL_LOG_DEBUG("Unexpected signal has been caught");
exit(EXIT_FAILURE);
}
diff --git a/src/appMain/smartDeviceLink.ini b/src/appMain/smartDeviceLink.ini
index 56822db0ef..15bba13b86 100644
--- a/src/appMain/smartDeviceLink.ini
+++ b/src/appMain/smartDeviceLink.ini
@@ -237,7 +237,7 @@ CloudAppRetryTimeout = 1000
CloudAppMaxRetryAttempts = 5
[ProtocolHandler]
-; SDL supported protocol version
+; SDL supported protocol version. Minimum value is 2
MaxSupportedProtocolVersion = 5
; Packet with payload bigger than next value will be marked as a malformed
; for protocol v3 or higher
diff --git a/src/components/application_manager/include/application_manager/app_launch/app_launch_ctrl.h b/src/components/application_manager/include/application_manager/app_launch/app_launch_ctrl.h
index 2dd64a2941..ca1952197a 100644
--- a/src/components/application_manager/include/application_manager/app_launch/app_launch_ctrl.h
+++ b/src/components/application_manager/include/application_manager/app_launch/app_launch_ctrl.h
@@ -66,6 +66,12 @@ class AppLaunchCtrl {
* @brief OnMasterReset clear database of saved applications
*/
virtual void OnMasterReset() = 0;
+
+ /**
+ * @brief Stop - allows to stop app launcher.
+ */
+ virtual void Stop() = 0;
+
virtual ~AppLaunchCtrl() {}
};
diff --git a/src/components/application_manager/include/application_manager/app_launch/app_launch_ctrl_impl.h b/src/components/application_manager/include/application_manager/app_launch/app_launch_ctrl_impl.h
index 986f4ad4ff..32cbc46245 100644
--- a/src/components/application_manager/include/application_manager/app_launch/app_launch_ctrl_impl.h
+++ b/src/components/application_manager/include/application_manager/app_launch/app_launch_ctrl_impl.h
@@ -69,6 +69,7 @@ class AppLaunchCtrlImpl : public AppLaunchCtrl {
void OnAppRegistered(const application_manager::Application& app) OVERRIDE;
void OnDeviceConnected(const std::string& device_mac) OVERRIDE;
void OnMasterReset() OVERRIDE;
+ void Stop() OVERRIDE;
private:
const AppLaunchSettings& settings_;
@@ -77,6 +78,7 @@ class AppLaunchCtrlImpl : public AppLaunchCtrl {
AppsLauncher apps_launcher_;
DeviceAppsLauncher device_apps_launcher_;
+ sync_primitives::Lock device_apps_launcher_lock_;
DISALLOW_COPY_AND_ASSIGN(AppLaunchCtrlImpl);
};
diff --git a/src/components/application_manager/include/application_manager/app_launch/device_apps_launcher.h b/src/components/application_manager/include/application_manager/app_launch/device_apps_launcher.h
index f27e4569fc..2ffec0e065 100644
--- a/src/components/application_manager/include/application_manager/app_launch/device_apps_launcher.h
+++ b/src/components/application_manager/include/application_manager/app_launch/device_apps_launcher.h
@@ -35,6 +35,7 @@ class DeviceAppsLauncherImpl {
};
bool StopLaunchingAppsOnDevice(const std::string& device_mac);
+ void StopLaunchingAppsOnAllDevices();
private:
sync_primitives::Lock launchers_lock_;
@@ -60,6 +61,7 @@ class DeviceAppsLauncher {
const std::string& device_mac,
const std::vector<ApplicationDataPtr>& applications_to_launch);
bool StopLaunchingAppsOnDevice(const std::string& device_mac);
+ void StopLaunchingAppsOnAllDevices();
const AppLaunchSettings& settings() const;
diff --git a/src/components/application_manager/include/application_manager/application.h b/src/components/application_manager/include/application_manager/application.h
index 86b26f24ef..e018c28c54 100644
--- a/src/components/application_manager/include/application_manager/application.h
+++ b/src/components/application_manager/include/application_manager/application.h
@@ -113,14 +113,15 @@ class InitialApplicationData {
public:
virtual ~InitialApplicationData() {}
- virtual const smart_objects::SmartObject* app_types() const = 0;
- virtual const smart_objects::SmartObject* vr_synonyms() const = 0;
+ virtual const smart_objects::SmartObjectSPtr app_types() const = 0;
+ virtual const smart_objects::SmartObjectSPtr vr_synonyms() const = 0;
virtual const std::string& mac_address() const = 0;
virtual const std::string& bundle_id() const = 0;
virtual void set_bundle_id(const std::string& bundle_id) = 0;
virtual std::string policy_app_id() const = 0;
- virtual const smart_objects::SmartObject* tts_name() const = 0;
- virtual const smart_objects::SmartObject* ngn_media_screen_name() const = 0;
+ virtual const smart_objects::SmartObjectSPtr tts_name() const = 0;
+ virtual const smart_objects::SmartObjectSPtr ngn_media_screen_name()
+ const = 0;
virtual const mobile_api::Language::eType& language() const = 0;
virtual const mobile_api::Language::eType& ui_language() const = 0;
virtual const utils::SemanticVersion& msg_version() const = 0;
@@ -195,18 +196,18 @@ typedef std::vector<smart_objects::SmartObjectSPtr> MobileMessageQueue;
class DynamicApplicationData {
public:
virtual ~DynamicApplicationData() {}
- virtual const smart_objects::SmartObject* help_prompt() const = 0;
- virtual const smart_objects::SmartObject* timeout_prompt() const = 0;
- virtual const smart_objects::SmartObject* vr_help_title() const = 0;
- virtual const smart_objects::SmartObject* vr_help() const = 0;
+ virtual const smart_objects::SmartObjectSPtr help_prompt() const = 0;
+ virtual const smart_objects::SmartObjectSPtr timeout_prompt() const = 0;
+ virtual const smart_objects::SmartObjectSPtr vr_help_title() const = 0;
+ virtual const smart_objects::SmartObjectSPtr vr_help() const = 0;
virtual const mobile_api::TBTState::eType& tbt_state() const = 0;
- virtual const smart_objects::SmartObject* show_command() const = 0;
- virtual const smart_objects::SmartObject* tbt_show_command() const = 0;
+ virtual const smart_objects::SmartObjectSPtr show_command() const = 0;
+ virtual const smart_objects::SmartObjectSPtr tbt_show_command() const = 0;
virtual DataAccessor<ButtonSubscriptions> SubscribedButtons() const = 0;
- virtual const smart_objects::SmartObject* keyboard_props() const = 0;
- virtual const smart_objects::SmartObject* menu_title() const = 0;
- virtual const smart_objects::SmartObject* menu_icon() const = 0;
- virtual const smart_objects::SmartObject* menu_layout() const = 0;
+ virtual const smart_objects::SmartObjectSPtr keyboard_props() const = 0;
+ virtual const smart_objects::SmartObjectSPtr menu_title() const = 0;
+ virtual const smart_objects::SmartObjectSPtr menu_icon() const = 0;
+ virtual const smart_objects::SmartObjectSPtr menu_layout() const = 0;
virtual smart_objects::SmartObject day_color_scheme() const = 0;
virtual smart_objects::SmartObject night_color_scheme() const = 0;
virtual std::string display_layout() const = 0;
@@ -520,6 +521,25 @@ class DynamicApplicationData {
* @return TRUE if perform interaction active, otherwise FALSE
*/
virtual bool is_reset_global_properties_active() const = 0;
+
+ /**
+ * @brief Set allowed mode for specified choice_set_id.
+ * @param choice_set_id Choice set id.
+ * @param is_allowed TRUE if the choice set has to be allowed to perform,
+ * otherwise FALSE.
+ * Allow mode means that the choice_set is not fully processed or not fully
+ * deleted (in both cases request is being processed on HMI side, and HMI
+ * hasn't sent response with result yet)
+ */
+ virtual void set_choice_set_allow_mode(const uint32_t choice_set_id,
+ const bool is_allowed) = 0;
+
+ /**
+ * @brief Check if choice set allowed.
+ * @param choice_set_id Choice set id.
+ * @return TRUE if the choice set is allowed to perform, otherwise FALSE.
+ */
+ virtual bool is_choice_set_allowed(const uint32_t choice_set_id) const = 0;
};
class Application : public virtual InitialApplicationData,
@@ -539,8 +559,10 @@ class Application : public virtual InitialApplicationData,
* @brief Returns message belonging to the application
* that is currently executed (i.e. on HMI).
* @return smart_objects::SmartObject * Active message
+ * @deprecated will always return NULL
*/
- virtual const smart_objects::SmartObject* active_message() const = 0;
+ DEPRECATED virtual const smart_objects::SmartObject* active_message()
+ const = 0;
/**
* @brief returns current hash value
@@ -596,7 +618,8 @@ class Application : public virtual InitialApplicationData,
*/
virtual void set_app_data_resumption_allowance(const bool allowed) = 0;
- virtual void CloseActiveMessage() = 0;
+ // Deprecated, has no effect
+ DEPRECATED virtual void CloseActiveMessage() = 0;
virtual bool IsFullscreen() const = 0;
virtual void ChangeSupportingAppHMIType() = 0;
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 086e71b48b..b24fb96a2d 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
@@ -50,11 +50,11 @@ class InitialApplicationDataImpl : public virtual Application {
InitialApplicationDataImpl();
~InitialApplicationDataImpl();
- const smart_objects::SmartObject* app_types() const;
- const smart_objects::SmartObject* vr_synonyms() const;
+ const smart_objects::SmartObjectSPtr app_types() const;
+ const smart_objects::SmartObjectSPtr vr_synonyms() const;
virtual std::string policy_app_id() const;
- const smart_objects::SmartObject* tts_name() const;
- const smart_objects::SmartObject* ngn_media_screen_name() const;
+ const smart_objects::SmartObjectSPtr tts_name() const;
+ const smart_objects::SmartObjectSPtr ngn_media_screen_name() const;
const mobile_api::Language::eType& language() const;
const mobile_api::Language::eType& ui_language() const;
const utils::SemanticVersion& msg_version() const;
@@ -73,11 +73,11 @@ class InitialApplicationDataImpl : public virtual Application {
mobile_api::LayoutMode::eType perform_interaction_layout() const OVERRIDE;
protected:
- smart_objects::SmartObject* app_types_;
- smart_objects::SmartObject* vr_synonyms_;
+ smart_objects::SmartObjectSPtr app_types_;
+ smart_objects::SmartObjectSPtr vr_synonyms_;
std::string mobile_app_id_;
- smart_objects::SmartObject* tts_name_;
- smart_objects::SmartObject* ngn_media_screen_name_;
+ smart_objects::SmartObjectSPtr tts_name_;
+ smart_objects::SmartObjectSPtr ngn_media_screen_name_;
mobile_api::Language::eType language_;
mobile_api::Language::eType ui_language_;
mobile_apis::LayoutMode::eType perform_interaction_layout_;
@@ -92,17 +92,17 @@ class DynamicApplicationDataImpl : public virtual Application {
typedef std::map<WindowID, smart_objects::SmartObject> AppWindowsTemplates;
DynamicApplicationDataImpl();
~DynamicApplicationDataImpl();
- const smart_objects::SmartObject* help_prompt() const;
- const smart_objects::SmartObject* timeout_prompt() const;
- const smart_objects::SmartObject* vr_help_title() const;
- const smart_objects::SmartObject* vr_help() const;
+ const smart_objects::SmartObjectSPtr help_prompt() const;
+ const smart_objects::SmartObjectSPtr timeout_prompt() const;
+ const smart_objects::SmartObjectSPtr vr_help_title() const;
+ const smart_objects::SmartObjectSPtr vr_help() const;
const mobile_api::TBTState::eType& tbt_state() const;
- const smart_objects::SmartObject* show_command() const;
- const smart_objects::SmartObject* tbt_show_command() const;
- const smart_objects::SmartObject* keyboard_props() const;
- const smart_objects::SmartObject* menu_title() const;
- const smart_objects::SmartObject* menu_icon() const;
- const smart_objects::SmartObject* menu_layout() const;
+ const smart_objects::SmartObjectSPtr show_command() const;
+ const smart_objects::SmartObjectSPtr tbt_show_command() const;
+ const smart_objects::SmartObjectSPtr keyboard_props() const;
+ const smart_objects::SmartObjectSPtr menu_title() const;
+ const smart_objects::SmartObjectSPtr menu_icon() const;
+ const smart_objects::SmartObjectSPtr menu_layout() const;
smart_objects::SmartObject day_color_scheme() const OVERRIDE;
smart_objects::SmartObject night_color_scheme() const OVERRIDE;
@@ -315,18 +315,23 @@ class DynamicApplicationDataImpl : public virtual Application {
*/
inline bool is_reset_global_properties_active() const;
+ void set_choice_set_allow_mode(const uint32_t choice_set_id,
+ const bool is_allowed);
+
+ bool is_choice_set_allowed(const uint32_t choice_set_id) const;
+
protected:
- smart_objects::SmartObject* help_prompt_;
- smart_objects::SmartObject* timeout_prompt_;
- smart_objects::SmartObject* vr_help_title_;
- smart_objects::SmartObject* vr_help_;
+ smart_objects::SmartObjectSPtr help_prompt_;
+ smart_objects::SmartObjectSPtr timeout_prompt_;
+ smart_objects::SmartObjectSPtr vr_help_title_;
+ smart_objects::SmartObjectSPtr vr_help_;
mobile_api::TBTState::eType tbt_state_;
- smart_objects::SmartObject* show_command_;
- smart_objects::SmartObject* keyboard_props_;
- smart_objects::SmartObject* menu_title_;
- smart_objects::SmartObject* menu_icon_;
- smart_objects::SmartObject* menu_layout_;
- smart_objects::SmartObject* tbt_show_command_;
+ smart_objects::SmartObjectSPtr show_command_;
+ smart_objects::SmartObjectSPtr keyboard_props_;
+ smart_objects::SmartObjectSPtr menu_title_;
+ smart_objects::SmartObjectSPtr menu_icon_;
+ smart_objects::SmartObjectSPtr menu_layout_;
+ smart_objects::SmartObjectSPtr tbt_show_command_;
smart_objects::SmartObjectSPtr display_capabilities_;
AppWindowsTemplates window_templates_;
@@ -346,6 +351,8 @@ class DynamicApplicationDataImpl : public virtual Application {
uint32_t is_perform_interaction_active_;
bool is_reset_global_properties_active_;
int32_t perform_interaction_mode_;
+ mutable sync_primitives::Lock allowed_choice_sets_lock_;
+ std::set<uint32_t> allowed_choice_sets_;
DisplayCapabilitiesBuilder display_capabilities_builder_;
private:
diff --git a/src/components/application_manager/include/application_manager/application_impl.h b/src/components/application_manager/include/application_manager/application_impl.h
index 21e45b4515..49f44acacb 100644
--- a/src/components/application_manager/include/application_manager/application_impl.h
+++ b/src/components/application_manager/include/application_manager/application_impl.h
@@ -577,8 +577,8 @@ class ApplicationImpl : public virtual Application,
bool audio_streaming_allowed_;
bool video_streaming_suspended_;
bool audio_streaming_suspended_;
- sync_primitives::Lock video_streaming_suspended_lock_;
- sync_primitives::Lock audio_streaming_suspended_lock_;
+ bool video_streaming_stopped_;
+ bool audio_streaming_stopped_;
sync_primitives::Lock streaming_stop_lock_;
bool is_app_allowed_;
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 c59456a022..d72508bd63 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
@@ -187,6 +187,8 @@ class ApplicationManagerImpl
uint32_t hmi_app_id) const OVERRIDE;
ApplicationSharedPtr application_by_policy_id(
const std::string& policy_app_id) const OVERRIDE;
+ ApplicationSharedPtr pending_application_by_hmi_app(
+ uint32_t hmi_app_id) const OVERRIDE;
ApplicationSharedPtr pending_application_by_policy_id(
const std::string& policy_app_id) const OVERRIDE;
ApplicationSharedPtr reregister_application_by_policy_id(
diff --git a/src/components/application_manager/include/application_manager/event_engine/event_dispatcher.h b/src/components/application_manager/include/application_manager/event_engine/event_dispatcher.h
index b232875f43..0656372f47 100644
--- a/src/components/application_manager/include/application_manager/event_engine/event_dispatcher.h
+++ b/src/components/application_manager/include/application_manager/event_engine/event_dispatcher.h
@@ -64,15 +64,6 @@ class EventDispatcher {
/*
* @brief Unsubscribes the observer from specific event
*
- * @param event_id The event ID to subscribe for
- * @param hmi_correlation_id The event HMI correlation ID
- */
- virtual void remove_observer(const Event::EventID& event_id,
- const int32_t hmi_correlation_id) = 0;
-
- /*
- * @brief Unsubscribes the observer from specific event
- *
* @param event_id The event ID to unsubscribe from
* @param observer The observer to be unsubscribed
*/
diff --git a/src/components/application_manager/include/application_manager/event_engine/event_dispatcher_impl.h b/src/components/application_manager/include/application_manager/event_engine/event_dispatcher_impl.h
index ffe659a07c..b4cfead5fa 100644
--- a/src/components/application_manager/include/application_manager/event_engine/event_dispatcher_impl.h
+++ b/src/components/application_manager/include/application_manager/event_engine/event_dispatcher_impl.h
@@ -68,12 +68,6 @@ class EventDispatcherImpl : public EventDispatcher {
EventObserverMap get_observers() const {
return observers_event_;
}
- MobileEventObserverMap get_mobile_observers() const {
- return mobile_observers_event_;
- }
- ObserverVector get_observers_list() const {
- return observers_;
- }
#endif // BUILD_TESTS
/*
@@ -83,9 +77,6 @@ class EventDispatcherImpl : public EventDispatcher {
*/
void raise_event(const Event& event) OVERRIDE;
- void remove_observer(const Event::EventID& event_id,
- const int32_t hmi_correlation_id) OVERRIDE;
-
/*
* @brief Subscribe the observer to event
*
@@ -149,32 +140,14 @@ class EventDispatcherImpl : public EventDispatcher {
void remove_mobile_observer(EventObserver& observer) OVERRIDE;
private:
- /*
- * @brief removes observer
- * when occurs unsubscribe from event
- * @param observer to be removed
- */
- void remove_observer_from_vector(EventObserver& observer);
-
- /*
- * @brief removes observer
- * when occurs unsubscribe from event
- * @param observer to be removed
- */
- void remove_mobile_observer_from_vector(EventObserver& observer);
-
DISALLOW_COPY_AND_ASSIGN(EventDispatcherImpl);
private:
// Members section
- sync_primitives::Lock state_lock_;
- sync_primitives::Lock mobile_state_lock_;
sync_primitives::RecursiveLock observer_lock_;
sync_primitives::RecursiveLock mobile_observer_lock_;
EventObserverMap observers_event_;
MobileEventObserverMap mobile_observers_event_;
- ObserverVector observers_;
- ObserverVector mobile_observers_;
};
} // namespace event_engine
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 9a22b2a4aa..ee424aecc4 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
@@ -135,6 +135,11 @@ class HMICapabilitiesImpl : public HMICapabilities {
void set_hmi_zone_capabilities(
const smart_objects::SmartObject& hmi_zone_capabilities) OVERRIDE;
+ const smart_objects::SmartObjectSPtr ui_hmi_capabilities() const OVERRIDE;
+
+ void set_ui_hmi_capabilities(
+ const smart_objects::SmartObject& ui_hmi_capabilities) OVERRIDE;
+
const smart_objects::SmartObjectSPtr soft_button_capabilities()
const OVERRIDE;
@@ -463,6 +468,7 @@ class HMICapabilitiesImpl : public HMICapabilities {
smart_objects::SmartObjectSPtr display_capabilities_;
smart_objects::SmartObjectSPtr system_display_capabilities_;
smart_objects::SmartObjectSPtr hmi_zone_capabilities_;
+ smart_objects::SmartObjectSPtr ui_hmi_capabilities_;
smart_objects::SmartObjectSPtr soft_buttons_capabilities_;
smart_objects::SmartObjectSPtr button_capabilities_;
smart_objects::SmartObjectSPtr preset_bank_capabilities_;
diff --git a/src/components/application_manager/include/application_manager/policies/policy_handler.h b/src/components/application_manager/include/application_manager/policies/policy_handler.h
index 662e255871..655cf70336 100644
--- a/src/components/application_manager/include/application_manager/policies/policy_handler.h
+++ b/src/components/application_manager/include/application_manager/policies/policy_handler.h
@@ -430,6 +430,9 @@ class PolicyHandler : public PolicyHandlerInterface,
const std::string url = std::string(),
const std::string snapshot_path = std::string()) OVERRIDE;
#endif // EXTERNAL_PROPRIETARY_MODE
+#ifndef PROPRIETARY_MODE
+ void UpdateLastPTUApp(const uint32_t app_id) OVERRIDE;
+#endif // PROPRIETARY_MODE
uint32_t GetAppIdForSending() const OVERRIDE;
@@ -721,6 +724,8 @@ class PolicyHandler : public PolicyHandlerInterface,
void StopRetrySequence() OVERRIDE;
+ bool IsPTUSystemRequestAllowed(const uint32_t app_id) OVERRIDE;
+
/**
* @brief OnDeviceSwitching Notifies policy manager on device switch event so
* policy permissions should be processed accordingly
@@ -932,10 +937,10 @@ class PolicyHandler : public PolicyHandlerInterface,
std::shared_ptr<PolicyManager> atomic_policy_manager_;
std::shared_ptr<PolicyEventObserver> event_observer_;
uint32_t last_activated_app_id_;
+ uint32_t last_ptu_app_id_;
#ifndef EXTERNAL_PROPRIETARY_MODE
// PTU retry information
- uint32_t last_ptu_app_id_;
std::string retry_update_url_;
std::string policy_snapshot_path_;
#endif // EXTERNAL_PROPRIETARY_MODE
diff --git a/src/components/application_manager/include/application_manager/request_controller_impl.h b/src/components/application_manager/include/application_manager/request_controller_impl.h
index 41d2419ba6..1813eab2dc 100644
--- a/src/components/application_manager/include/application_manager/request_controller_impl.h
+++ b/src/components/application_manager/include/application_manager/request_controller_impl.h
@@ -234,6 +234,7 @@ class RequestControllerImpl : public RequestController, threads::AsyncRunner {
* @brief Set of HMI notifications with timeout.
*/
std::list<RequestPtr> notification_list_;
+ sync_primitives::Lock notification_list_lock_;
/**
* @brief Map keeping track of how many duplicate messages were sent for a
diff --git a/src/components/application_manager/include/application_manager/resumption/resumption_data.h b/src/components/application_manager/include/application_manager/resumption/resumption_data.h
index 69fc5437de..ee9972b98c 100644
--- a/src/components/application_manager/include/application_manager/resumption/resumption_data.h
+++ b/src/components/application_manager/include/application_manager/resumption/resumption_data.h
@@ -269,7 +269,7 @@ class ResumptionData {
* @return smartObject from pointer
*/
smart_objects::SmartObject PointerToSmartObj(
- const smart_objects::SmartObject* ptr) const;
+ const smart_objects::SmartObjectSPtr ptr) const;
/**
* @brief creates smart object containing window info
diff --git a/src/components/application_manager/include/application_manager/rpc_protection_manager_impl.h b/src/components/application_manager/include/application_manager/rpc_protection_manager_impl.h
index b971ace480..f5e96e4420 100644
--- a/src/components/application_manager/include/application_manager/rpc_protection_manager_impl.h
+++ b/src/components/application_manager/include/application_manager/rpc_protection_manager_impl.h
@@ -106,7 +106,7 @@ class RPCProtectionManagerImpl : public RPCProtectionManager {
policy::PolicyHandlerInterface& policy_handler_;
AppEncryptedRpcMap encrypted_rpcs_;
- sync_primitives::Lock encrypted_rpcs_lock_;
+ mutable sync_primitives::RecursiveLock encrypted_rpcs_lock_;
std::set<AppIdCorrIdPair> encryption_needed_cache_;
sync_primitives::Lock message_needed_encryption_lock_;
diff --git a/src/components/application_manager/rpc_plugins/rc_rpc_plugin/include/rc_rpc_plugin/commands/hmi/rc_set_global_properties_request.h b/src/components/application_manager/rpc_plugins/rc_rpc_plugin/include/rc_rpc_plugin/commands/hmi/rc_set_global_properties_request.h
index 64b11c3d7b..680d642a98 100644
--- a/src/components/application_manager/rpc_plugins/rc_rpc_plugin/include/rc_rpc_plugin/commands/hmi/rc_set_global_properties_request.h
+++ b/src/components/application_manager/rpc_plugins/rc_rpc_plugin/include/rc_rpc_plugin/commands/hmi/rc_set_global_properties_request.h
@@ -58,6 +58,8 @@ class RCSetGlobalPropertiesRequest : public app_mngr::commands::RequestToHMI {
*/
void Run() OVERRIDE;
+ void OnTimeOut() OVERRIDE;
+
~RCSetGlobalPropertiesRequest();
};
} // namespace commands
diff --git a/src/components/application_manager/rpc_plugins/rc_rpc_plugin/src/commands/hmi/rc_set_global_properties_request.cc b/src/components/application_manager/rpc_plugins/rc_rpc_plugin/src/commands/hmi/rc_set_global_properties_request.cc
index f0ff1afbb3..0a4b72ff64 100644
--- a/src/components/application_manager/rpc_plugins/rc_rpc_plugin/src/commands/hmi/rc_set_global_properties_request.cc
+++ b/src/components/application_manager/rpc_plugins/rc_rpc_plugin/src/commands/hmi/rc_set_global_properties_request.cc
@@ -31,6 +31,7 @@
*/
#include "rc_rpc_plugin/commands/hmi/rc_set_global_properties_request.h"
+#include "application_manager/resumption/resume_ctrl.h"
namespace rc_rpc_plugin {
namespace app_mngr = application_manager;
@@ -53,6 +54,13 @@ void RCSetGlobalPropertiesRequest::Run() {
SendRequest();
}
+void RCSetGlobalPropertiesRequest::OnTimeOut() {
+ auto& resume_ctrl = application_manager_.resume_controller();
+ resume_ctrl.HandleOnTimeOut(
+ correlation_id(),
+ static_cast<hmi_apis::FunctionID::eType>(function_id()));
+}
+
RCSetGlobalPropertiesRequest::~RCSetGlobalPropertiesRequest() {}
} // namespace commands
diff --git a/src/components/application_manager/rpc_plugins/rc_rpc_plugin/src/commands/rc_command_request.cc b/src/components/application_manager/rpc_plugins/rc_rpc_plugin/src/commands/rc_command_request.cc
index 376723b964..eef3b23d72 100644
--- a/src/components/application_manager/rpc_plugins/rc_rpc_plugin/src/commands/rc_command_request.cc
+++ b/src/components/application_manager/rpc_plugins/rc_rpc_plugin/src/commands/rc_command_request.cc
@@ -146,7 +146,7 @@ void RCCommandRequest::Run() {
if (!policy_handler_.CheckHMIType(
app->policy_app_id(),
mobile_apis::AppHMIType::eType::REMOTE_CONTROL,
- app->app_types())) {
+ app->app_types().get())) {
SDL_LOG_WARN("Application has no remote control functions");
SendResponse(false, mobile_apis::Result::DISALLOWED, "");
return;
diff --git a/src/components/application_manager/rpc_plugins/rc_rpc_plugin/test/commands/button_press_request_test.cc b/src/components/application_manager/rpc_plugins/rc_rpc_plugin/test/commands/button_press_request_test.cc
index f4ef39f488..17d4f05be7 100644
--- a/src/components/application_manager/rpc_plugins/rc_rpc_plugin/test/commands/button_press_request_test.cc
+++ b/src/components/application_manager/rpc_plugins/rc_rpc_plugin/test/commands/button_press_request_test.cc
@@ -97,10 +97,12 @@ class ButtonPressRequestTest
ON_CALL(mock_hmi_capabilities_, rc_capability())
.WillByDefault(Return(rc_capabilities_));
ON_CALL(*mock_app_, policy_app_id()).WillByDefault(Return(kPolicyAppId));
- ON_CALL(mock_policy_handler_,
- CheckHMIType(kPolicyAppId,
- mobile_apis::AppHMIType::eType::REMOTE_CONTROL,
- nullptr))
+ ON_CALL(*mock_app_, app_types())
+ .WillByDefault(Return(std::shared_ptr<smart_objects::SmartObject>()));
+ ON_CALL(
+ mock_policy_handler_,
+ CheckHMIType(
+ kPolicyAppId, mobile_apis::AppHMIType::eType::REMOTE_CONTROL, _))
.WillByDefault(Return(true));
ON_CALL(mock_allocation_manager_, is_rc_enabled())
.WillByDefault(Return(true));
diff --git a/src/components/application_manager/rpc_plugins/rc_rpc_plugin/test/commands/get_interior_vehicle_data_request_test.cc b/src/components/application_manager/rpc_plugins/rc_rpc_plugin/test/commands/get_interior_vehicle_data_request_test.cc
index 5fa474c631..b4f9d177ea 100644
--- a/src/components/application_manager/rpc_plugins/rc_rpc_plugin/test/commands/get_interior_vehicle_data_request_test.cc
+++ b/src/components/application_manager/rpc_plugins/rc_rpc_plugin/test/commands/get_interior_vehicle_data_request_test.cc
@@ -104,6 +104,10 @@ class GetInteriorVehicleDataRequestTest
smart_objects::SmartType::SmartType_Array)) {
ON_CALL(*mock_app_, app_id()).WillByDefault(Return(kAppId));
ON_CALL(*mock_app2_, app_id()).WillByDefault(Return(kAppId2));
+ ON_CALL(*mock_app_, app_types())
+ .WillByDefault(Return(std::shared_ptr<smart_objects::SmartObject>()));
+ ON_CALL(*mock_app2_, app_types())
+ .WillByDefault(Return(std::shared_ptr<smart_objects::SmartObject>()));
ON_CALL(*mock_app_, is_remote_control_supported())
.WillByDefault(Return(true));
ON_CALL(*mock_app2_, is_remote_control_supported())
@@ -158,8 +162,7 @@ class GetInteriorVehicleDataRequestTest
ON_CALL(mock_hmi_capabilities_, rc_capability())
.WillByDefault(Return(rc_capabilities_));
ON_CALL(mock_policy_handler_,
- CheckHMIType(
- _, mobile_apis::AppHMIType::eType::REMOTE_CONTROL, nullptr))
+ CheckHMIType(_, mobile_apis::AppHMIType::eType::REMOTE_CONTROL, _))
.WillByDefault(Return(true));
ON_CALL(mock_policy_handler_, CheckModule(_, _))
.WillByDefault(Return(true));
diff --git a/src/components/application_manager/rpc_plugins/rc_rpc_plugin/test/commands/rc_get_interior_vehicle_data_consent_test.cc b/src/components/application_manager/rpc_plugins/rc_rpc_plugin/test/commands/rc_get_interior_vehicle_data_consent_test.cc
index 82d1b128f0..07ab202620 100644
--- a/src/components/application_manager/rpc_plugins/rc_rpc_plugin/test/commands/rc_get_interior_vehicle_data_consent_test.cc
+++ b/src/components/application_manager/rpc_plugins/rc_rpc_plugin/test/commands/rc_get_interior_vehicle_data_consent_test.cc
@@ -131,6 +131,8 @@ class RCGetInteriorVehicleDataConsentTest
smart_objects::SmartObject control_caps((smart_objects::SmartType_Array));
(*rc_capabilities_)[strings::kradioControlCapabilities] = control_caps;
ON_CALL(*mock_app_, app_id()).WillByDefault(Return(kAppId));
+ ON_CALL(*mock_app_, app_types())
+ .WillByDefault(Return(std::shared_ptr<smart_objects::SmartObject>()));
ON_CALL(app_mngr_, hmi_interfaces())
.WillByDefault(ReturnRef(mock_hmi_interfaces_));
ON_CALL(
diff --git a/src/components/application_manager/rpc_plugins/rc_rpc_plugin/test/commands/set_interior_vehicle_data_request_test.cc b/src/components/application_manager/rpc_plugins/rc_rpc_plugin/test/commands/set_interior_vehicle_data_request_test.cc
index fe190a796f..3e6c271ed3 100644
--- a/src/components/application_manager/rpc_plugins/rc_rpc_plugin/test/commands/set_interior_vehicle_data_request_test.cc
+++ b/src/components/application_manager/rpc_plugins/rc_rpc_plugin/test/commands/set_interior_vehicle_data_request_test.cc
@@ -98,6 +98,8 @@ class SetInteriorVehicleDataRequestTest
ON_CALL(mock_allocation_manager_, AcquireResource(_, _, _))
.WillByDefault(Return(AcquireResult::ALLOWED));
ON_CALL(*mock_app_, app_id()).WillByDefault(Return(kAppId));
+ ON_CALL(*mock_app_, app_types())
+ .WillByDefault(Return(std::shared_ptr<smart_objects::SmartObject>()));
ON_CALL(mock_policy_handler_,
CheckHMIType(kPolicyAppId,
mobile_apis::AppHMIType::eType::REMOTE_CONTROL,
diff --git a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/include/sdl_rpc_plugin/commands/hmi/ui_set_display_layout_request.h b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/include/sdl_rpc_plugin/commands/hmi/ui_set_display_layout_request.h
deleted file mode 100644
index 446b77b997..0000000000
--- a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/include/sdl_rpc_plugin/commands/hmi/ui_set_display_layout_request.h
+++ /dev/null
@@ -1,76 +0,0 @@
-/* Copyright (c) 2018, Ford Motor Company
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *
- * Redistributions of source code must retain the above copyright notice, this
- * list of conditions and the following disclaimer.
- *
- * Redistributions in binary form must reproduce the above copyright notice,
- * this list of conditions and the following
- * disclaimer in the documentation and/or other materials provided with the
- * distribution.
- *
- * Neither the name of the Ford Motor Company nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef SRC_COMPONENTS_APPLICATION_MANAGER_RPC_PLUGINS_SDL_RPC_PLUGIN_INCLUDE_SDL_RPC_PLUGIN_COMMANDS_HMI_UI_SET_DISPLAY_LAYOUT_REQUEST_H_
-#define SRC_COMPONENTS_APPLICATION_MANAGER_RPC_PLUGINS_SDL_RPC_PLUGIN_INCLUDE_SDL_RPC_PLUGIN_COMMANDS_HMI_UI_SET_DISPLAY_LAYOUT_REQUEST_H_
-
-#include "application_manager/commands/request_to_hmi.h"
-
-namespace sdl_rpc_plugin {
-namespace app_mngr = application_manager;
-
-namespace commands {
-
-/**
- * @brief UiSetDisplayLayoutRequest command class
- **/
-class UiSetDisplayLayoutRequest : public app_mngr::commands::RequestToHMI {
- public:
- /**
- * @brief UiSetDisplayLayoutRequest class constructor
- *
- * @param message Incoming SmartObject message
- **/
- UiSetDisplayLayoutRequest(const app_mngr::commands::MessageSharedPtr& message,
- app_mngr::ApplicationManager& application_manager,
- app_mngr::rpc_service::RPCService& rpc_service,
- app_mngr::HMICapabilities& hmi_capabilities,
- policy::PolicyHandlerInterface& policy_handle);
-
- /**
- * @brief UiSetDisplayLayoutRequest class destructor
- **/
- virtual ~UiSetDisplayLayoutRequest();
-
- /**
- * @brief Execute command
- **/
- virtual void Run();
-
- private:
- DISALLOW_COPY_AND_ASSIGN(UiSetDisplayLayoutRequest);
-};
-
-} // namespace commands
-
-} // namespace sdl_rpc_plugin
-
-#endif // SRC_COMPONENTS_APPLICATION_MANAGER_RPC_PLUGINS_SDL_RPC_PLUGIN_INCLUDE_SDL_RPC_PLUGIN_COMMANDS_HMI_UI_SET_DISPLAY_LAYOUT_REQUEST_H_
diff --git a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/include/sdl_rpc_plugin/commands/hmi/ui_set_display_layout_response.h b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/include/sdl_rpc_plugin/commands/hmi/ui_set_display_layout_response.h
deleted file mode 100644
index ade6aa1c13..0000000000
--- a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/include/sdl_rpc_plugin/commands/hmi/ui_set_display_layout_response.h
+++ /dev/null
@@ -1,78 +0,0 @@
-/*
- * Copyright (c) 2018, Ford Motor Company
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *
- * Redistributions of source code must retain the above copyright notice, this
- * list of conditions and the following disclaimer.
- *
- * Redistributions in binary form must reproduce the above copyright notice,
- * this list of conditions and the following
- * disclaimer in the documentation and/or other materials provided with the
- * distribution.
- *
- * Neither the name of the Ford Motor Company nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef SRC_COMPONENTS_APPLICATION_MANAGER_RPC_PLUGINS_SDL_RPC_PLUGIN_INCLUDE_SDL_RPC_PLUGIN_COMMANDS_HMI_UI_SET_DISPLAY_LAYOUT_RESPONSE_H_
-#define SRC_COMPONENTS_APPLICATION_MANAGER_RPC_PLUGINS_SDL_RPC_PLUGIN_INCLUDE_SDL_RPC_PLUGIN_COMMANDS_HMI_UI_SET_DISPLAY_LAYOUT_RESPONSE_H_
-
-#include "application_manager/commands/response_from_hmi.h"
-
-namespace sdl_rpc_plugin {
-namespace app_mngr = application_manager;
-
-namespace commands {
-
-/**
- * @brief UiSetDisplayLayoutResponse command class
- **/
-class UiSetDisplayLayoutResponse : public app_mngr::commands::ResponseFromHMI {
- public:
- /**
- * @brief UiSetDisplayLayoutResponse class constructor
- *
- * @param message Incoming SmartObject message
- **/
- UiSetDisplayLayoutResponse(
- const app_mngr::commands::MessageSharedPtr& message,
- app_mngr::ApplicationManager& application_manager,
- app_mngr::rpc_service::RPCService& rpc_service,
- app_mngr::HMICapabilities& hmi_capabilities,
- policy::PolicyHandlerInterface& policy_handle);
-
- /**
- * @brief UiSetDisplayLayoutResponse class destructor
- **/
- virtual ~UiSetDisplayLayoutResponse();
-
- /**
- * @brief Execute command
- **/
- virtual void Run();
-
- private:
- DISALLOW_COPY_AND_ASSIGN(UiSetDisplayLayoutResponse);
-};
-
-} // namespace commands
-
-} // namespace sdl_rpc_plugin
-
-#endif // SRC_COMPONENTS_APPLICATION_MANAGER_RPC_PLUGINS_SDL_RPC_PLUGIN_INCLUDE_SDL_RPC_PLUGIN_COMMANDS_HMI_UI_SET_DISPLAY_LAYOUT_RESPONSE_H_
diff --git a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/include/sdl_rpc_plugin/commands/mobile/register_app_interface_request.h b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/include/sdl_rpc_plugin/commands/mobile/register_app_interface_request.h
index d54f061228..351c108573 100644
--- a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/include/sdl_rpc_plugin/commands/mobile/register_app_interface_request.h
+++ b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/include/sdl_rpc_plugin/commands/mobile/register_app_interface_request.h
@@ -301,7 +301,7 @@ class RegisterAppInterfaceRequest
* @brief CheckLanguage check if language in RAI matches hmi_capabilities
* Setup result_code variable in case of does not match
*/
- void CheckLanguage();
+ void CheckLanguage(application_manager::ApplicationSharedPtr application);
std::string response_info_;
bool are_tts_chunks_invalid_;
diff --git a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/hmi/on_driver_distraction_notification.cc b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/hmi/on_driver_distraction_notification.cc
index 167176aa0f..2b41791d43 100644
--- a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/hmi/on_driver_distraction_notification.cc
+++ b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/hmi/on_driver_distraction_notification.cc
@@ -161,8 +161,7 @@ void OnDriverDistractionNotification::Run() {
const auto lock_screen_dismissal =
application_manager_.GetPolicyHandler().LockScreenDismissalEnabledState();
- if (lock_screen_dismissal &&
- hmi_apis::Common_DriverDistractionState::DD_ON == state) {
+ if (lock_screen_dismissal) {
(*on_driver_distraction)
[strings::msg_params]
[mobile_notification::lock_screen_dismissal_enabled] =
diff --git a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/hmi/on_system_request_notification.cc b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/hmi/on_system_request_notification.cc
index b75081e30f..a81ebee5eb 100644
--- a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/hmi/on_system_request_notification.cc
+++ b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/hmi/on_system_request_notification.cc
@@ -83,11 +83,17 @@ void OnSystemRequestNotification::Run() {
if (msg_params.keyExists(strings::url)) {
// For backward-compatibility, the URL is cached for retries if provided
// by HMI
- policy_handler_.CacheRetryInfo(msg_params.keyExists(strings::app_id)
- ? msg_params[strings::app_id].asUInt()
- : 0,
+ uint32_t app_id;
+ if (msg_params.keyExists(strings::app_id)) {
+ app_id = msg_params[strings::app_id].asUInt();
+ } else {
+ app_id = policy_handler_.ChoosePTUApplication(
+ policy::PTUIterationType::DefaultIteration);
+ }
+ policy_handler_.CacheRetryInfo(app_id,
msg_params[strings::url].asString(),
msg_params[strings::file_name].asString());
+ msg_params[strings::app_id] = app_id;
} else {
// Clear cached retry info
policy_handler_.CacheRetryInfo(
@@ -153,6 +159,9 @@ void OnSystemRequestNotification::Run() {
if (helpers::Compare<RequestType, helpers::EQ, helpers::ONE>(
request_type, RequestType::RT_PROPRIETARY, RequestType::RT_HTTP)) {
policy_handler_.OnSystemRequestReceived();
+#ifndef PROPRIETARY_MODE
+ policy_handler_.UpdateLastPTUApp(app->app_id());
+#endif // PROPRIETARY_MODE
}
SendNotificationToMobile(message_);
}
diff --git a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/hmi/on_tts_language_change_notification.cc b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/hmi/on_tts_language_change_notification.cc
index d693c00ac3..51df69d0bc 100644
--- a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/hmi/on_tts_language_change_notification.cc
+++ b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/hmi/on_tts_language_change_notification.cc
@@ -88,20 +88,14 @@ void OnTTSLanguageChangeNotification::Run() {
(*message_)[strings::params][strings::function_id] =
static_cast<int32_t>(mobile_apis::FunctionID::OnLanguageChangeID);
- const auto applications = application_manager_.applications().GetData();
- for (const auto& app : applications) {
- if (!app->IsRegistered()) {
- SDL_LOG_DEBUG("Skipping app "
- << app->app_id()
- << " which has not finished the registration process");
- continue;
- }
+ auto apps = ApplicationSet(application_manager_.applications().GetData());
+ auto message_language =
+ (*message_)[strings::msg_params][strings::language].asInt();
+ for (auto app : apps) {
(*message_)[strings::params][strings::connection_key] = app->app_id();
SendNotificationToMobile(message_);
-
- if (static_cast<int>(app->language()) !=
- (*message_)[strings::msg_params][strings::language].asInt()) {
+ if (app->language() != message_language) {
rpc_service_.ManageMobileCommand(
MessageHelper::GetOnAppInterfaceUnregisteredNotificationToMobile(
app->app_id(),
diff --git a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/hmi/on_ui_language_change_notification.cc b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/hmi/on_ui_language_change_notification.cc
index 7f6ffaa4eb..8da7da28e7 100644
--- a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/hmi/on_ui_language_change_notification.cc
+++ b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/hmi/on_ui_language_change_notification.cc
@@ -80,19 +80,14 @@ void OnUILanguageChangeNotification::Run() {
(*message_)[strings::params][strings::function_id] =
static_cast<int32_t>(mobile_apis::FunctionID::OnLanguageChangeID);
- const ApplicationSet& accessor =
- application_manager_.applications().GetData();
+ auto apps = ApplicationSet(application_manager_.applications().GetData());
- ApplicationSetConstIt it = accessor.begin();
- for (; accessor.end() != it;) {
- ApplicationSharedPtr app = *it;
- ++it;
+ auto message_language =
+ (*message_)[strings::msg_params][strings::hmi_display_language].asInt();
+ for (auto app : apps) {
(*message_)[strings::params][strings::connection_key] = app->app_id();
SendNotificationToMobile(message_);
-
- if (app->ui_language() !=
- (*message_)[strings::msg_params][strings::hmi_display_language]
- .asInt()) {
+ if (app->ui_language() != message_language) {
rpc_service_.ManageMobileCommand(
MessageHelper::GetOnAppInterfaceUnregisteredNotificationToMobile(
app->app_id(),
diff --git a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/hmi/on_vr_language_change_notification.cc b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/hmi/on_vr_language_change_notification.cc
index 23c1ec1b80..9cb4653548 100644
--- a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/hmi/on_vr_language_change_notification.cc
+++ b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/hmi/on_vr_language_change_notification.cc
@@ -78,26 +78,14 @@ void OnVRLanguageChangeNotification::Run() {
(*message_)[strings::params][strings::function_id] =
static_cast<int32_t>(mobile_apis::FunctionID::OnLanguageChangeID);
- const auto applications = application_manager_.applications().GetData();
- for (auto app : applications) {
- if (!app->IsRegistered()) {
- SDL_LOG_DEBUG("Skipping app "
- << app->app_id()
- << " which has not finished the registration process");
- continue;
- }
+ auto apps = ApplicationSet(application_manager_.applications().GetData());
+ auto message_language =
+ (*message_)[strings::msg_params][strings::language].asInt();
+ for (auto app : apps) {
(*message_)[strings::params][strings::connection_key] = app->app_id();
SendNotificationToMobile(message_);
-
- if (static_cast<int32_t>(app->language()) !=
- (*message_)[strings::msg_params][strings::language].asInt()) {
- application_manager_.state_controller().SetRegularState(
- app,
- mobile_apis::PredefinedWindows::DEFAULT_WINDOW,
- mobile_apis::HMILevel::HMI_NONE,
- false);
-
+ if (app->language() != message_language) {
rpc_service_.ManageMobileCommand(
MessageHelper::GetOnAppInterfaceUnregisteredNotificationToMobile(
app->app_id(),
diff --git a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/hmi/sdl_activate_app_request.cc b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/hmi/sdl_activate_app_request.cc
index e25ee93400..50152e0924 100644
--- a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/hmi/sdl_activate_app_request.cc
+++ b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/hmi/sdl_activate_app_request.cc
@@ -136,10 +136,27 @@ void SDLActivateAppRequest::Run() {
static_cast<eType>(function_id()),
hmi_apis::Common_Result::REJECTED,
"HMIDeactivate is active");
- return;
- }
-
- if (app->app_id() > 0 || app->IsRegistered()) {
+ } else if (!app->IsRegistered()) {
+ if (app->is_cloud_app()) {
+ SDL_LOG_DEBUG("Starting cloud application.");
+ const ApplicationManagerSettings& settings =
+ application_manager_.get_settings();
+ uint32_t total_retry_timeout = (settings.cloud_app_retry_timeout() *
+ settings.cloud_app_max_retry_attempts());
+ application_manager_.UpdateRequestTimeout(
+ 0, correlation_id(), default_timeout_ + total_retry_timeout);
+ subscribe_on_event(BasicCommunication_OnAppRegistered);
+ application_manager_.connection_handler().ConnectToDevice(app->device());
+ } else {
+ SDL_LOG_ERROR(
+ "Can't find registered app with the specified app id: " << app_id());
+ SendErrorResponse(correlation_id(),
+ SDL_ActivateApp,
+ hmi_apis::Common_Result::APPLICATION_NOT_REGISTERED,
+ "Application is not registered");
+ }
+ } else {
+ const uint32_t application_id = app_id();
auto main_state =
app->CurrentHmiState(mobile_apis::PredefinedWindows::DEFAULT_WINDOW);
if (mobile_apis::HMILevel::INVALID_ENUM == main_state->hmi_level()) {
@@ -148,40 +165,12 @@ void SDLActivateAppRequest::Run() {
"yet, postpone activation");
auto& postponed_activation_ctrl = application_manager_.state_controller()
.GetPostponedActivationController();
- postponed_activation_ctrl.AddAppToActivate(app->app_id(),
+ postponed_activation_ctrl.AddAppToActivate(application_id,
correlation_id());
return;
}
- }
-
- const uint32_t application_id = app_id();
- if (app->IsRegistered()) {
- SDL_LOG_DEBUG("Application is registered. Activating.");
policy_handler_.OnActivateApp(application_id, correlation_id());
- return;
- }
-
- if (app->is_cloud_app()) {
- SDL_LOG_DEBUG("Starting cloud application.");
- const ApplicationManagerSettings& settings =
- application_manager_.get_settings();
- uint32_t total_retry_timeout = (settings.cloud_app_retry_timeout() *
- settings.cloud_app_max_retry_attempts());
- application_manager_.UpdateRequestTimeout(
- 0, correlation_id(), default_timeout_ + total_retry_timeout);
- subscribe_on_event(BasicCommunication_OnAppRegistered);
- application_manager_.connection_handler().ConnectToDevice(app->device());
- return;
}
-
- connection_handler::DeviceHandle device_handle = app->device();
- SDL_LOG_ERROR(
- "Can't find regular foreground app with the same connection id: "
- << device_handle);
- SendErrorResponse(correlation_id(),
- SDL_ActivateApp,
- hmi_apis::Common_Result::NO_APPS_REGISTERED,
- "");
}
#else // EXTERNAL_PROPRIETARY_MODE
@@ -225,7 +214,8 @@ void SDLActivateAppRequest::Run() {
return;
}
- if (app_to_activate->app_id() > 0 || app_to_activate->IsRegistered()) {
+ if (app_to_activate->IsRegistered()) {
+ SDL_LOG_DEBUG("Application is registered. Activating.");
auto main_state = app_to_activate->CurrentHmiState(
mobile_apis::PredefinedWindows::DEFAULT_WINDOW);
if (mobile_apis::HMILevel::INVALID_ENUM == main_state->hmi_level()) {
@@ -234,19 +224,13 @@ void SDLActivateAppRequest::Run() {
"yet, postpone activation");
auto& postponed_activation_ctrl = application_manager_.state_controller()
.GetPostponedActivationController();
- postponed_activation_ctrl.AddAppToActivate(app_to_activate->app_id(),
+ postponed_activation_ctrl.AddAppToActivate(application_id,
correlation_id());
return;
}
- }
-
- if (app_to_activate->IsRegistered()) {
- SDL_LOG_DEBUG("Application is registered. Activating.");
policy_handler_.OnActivateApp(application_id, correlation_id());
return;
- }
-
- if (app_to_activate->is_cloud_app()) {
+ } else if (app_to_activate->is_cloud_app()) {
SDL_LOG_DEBUG("Starting cloud application.");
const ApplicationManagerSettings& settings =
application_manager_.get_settings();
@@ -313,7 +297,13 @@ void SDLActivateAppRequest::on_event(const event_engine::Event& event) {
if (event.id() != BasicCommunication_OnAppRegistered) {
return;
}
- unsubscribe_from_event(BasicCommunication_OnAppRegistered);
+
+ ApplicationSharedPtr pending_app =
+ application_manager_.pending_application_by_hmi_app(app_id());
+ if (pending_app) {
+ SDL_LOG_ERROR("Application is still pending connection: " << app_id());
+ return;
+ }
// Have to use HMI app id from event, since HMI app id from original request
// message will be changed after app, initially requested for launch via
@@ -328,6 +318,8 @@ void SDLActivateAppRequest::on_event(const event_engine::Event& event) {
return;
}
+ unsubscribe_from_event(BasicCommunication_OnAppRegistered);
+
auto main_state =
app->CurrentHmiState(mobile_apis::PredefinedWindows::DEFAULT_WINDOW);
if (mobile_apis::HMILevel::INVALID_ENUM == main_state->hmi_level()) {
diff --git a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/hmi/ui_get_capabilities_response.cc b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/hmi/ui_get_capabilities_response.cc
index 128f41e01f..73e00f0f09 100644
--- a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/hmi/ui_get_capabilities_response.cc
+++ b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/hmi/ui_get_capabilities_response.cc
@@ -104,6 +104,8 @@ void UIGetCapabilitiesResponse::Run() {
}
if (msg_params.keyExists(strings::hmi_capabilities)) {
+ hmi_capabilities_.set_ui_hmi_capabilities(
+ msg_params[strings::hmi_capabilities]);
if (msg_params[strings::hmi_capabilities].keyExists(strings::navigation)) {
sections_to_update.push_back(strings::navigation);
hmi_capabilities_.set_navigation_supported(
diff --git a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/hmi/ui_set_display_layout_request.cc b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/hmi/ui_set_display_layout_request.cc
deleted file mode 100644
index df0f2a9f98..0000000000
--- a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/hmi/ui_set_display_layout_request.cc
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * Copyright (c) 2018, Ford Motor Company
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *
- * Redistributions of source code must retain the above copyright notice, this
- * list of conditions and the following disclaimer.
- *
- * Redistributions in binary form must reproduce the above copyright notice,
- * this list of conditions and the following
- * disclaimer in the documentation and/or other materials provided with the
- * distribution.
- *
- * Neither the name of the Ford Motor Company nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "sdl_rpc_plugin/commands/hmi/ui_set_display_layout_request.h"
-
-namespace sdl_rpc_plugin {
-using namespace application_manager;
-
-namespace commands {
-
-SDL_CREATE_LOG_VARIABLE("Commands")
-
-UiSetDisplayLayoutRequest::UiSetDisplayLayoutRequest(
- const application_manager::commands::MessageSharedPtr& message,
- ApplicationManager& application_manager,
- rpc_service::RPCService& rpc_service,
- HMICapabilities& hmi_capabilities,
- policy::PolicyHandlerInterface& policy_handle)
- : RequestToHMI(message,
- application_manager,
- rpc_service,
- hmi_capabilities,
- policy_handle) {}
-
-UiSetDisplayLayoutRequest::~UiSetDisplayLayoutRequest() {}
-
-void UiSetDisplayLayoutRequest::Run() {
- SDL_LOG_AUTO_TRACE();
- SendRequest();
-}
-
-} // namespace commands
-
-} // namespace sdl_rpc_plugin
diff --git a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/hmi/ui_set_display_layout_response.cc b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/hmi/ui_set_display_layout_response.cc
deleted file mode 100644
index 35fe55ec4d..0000000000
--- a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/hmi/ui_set_display_layout_response.cc
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * Copyright (c) 2018, Ford Motor Company
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *
- * Redistributions of source code must retain the above copyright notice, this
- * list of conditions and the following disclaimer.
- *
- * Redistributions in binary form must reproduce the above copyright notice,
- * this list of conditions and the following
- * disclaimer in the documentation and/or other materials provided with the
- * distribution.
- *
- * Neither the name of the Ford Motor Company nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "sdl_rpc_plugin/commands/hmi/ui_set_display_layout_response.h"
-#include "application_manager/event_engine/event.h"
-#include "interfaces/HMI_API.h"
-
-namespace sdl_rpc_plugin {
-using namespace application_manager;
-
-namespace commands {
-
-SDL_CREATE_LOG_VARIABLE("Commands")
-
-UiSetDisplayLayoutResponse::UiSetDisplayLayoutResponse(
- const application_manager::commands::MessageSharedPtr& message,
- ApplicationManager& application_manager,
- rpc_service::RPCService& rpc_service,
- HMICapabilities& hmi_capabilities,
- policy::PolicyHandlerInterface& policy_handle)
- : ResponseFromHMI(message,
- application_manager,
- rpc_service,
- hmi_capabilities,
- policy_handle) {}
-
-UiSetDisplayLayoutResponse::~UiSetDisplayLayoutResponse() {}
-
-void UiSetDisplayLayoutResponse::Run() {
- SDL_LOG_AUTO_TRACE();
-
- event_engine::Event event(hmi_apis::FunctionID::UI_SetDisplayLayout);
- event.set_smart_object(*message_);
- event.raise(application_manager_.event_dispatcher());
-}
-
-} // namespace commands
-
-} // namespace sdl_rpc_plugin
diff --git a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/create_interaction_choice_set_request.cc b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/create_interaction_choice_set_request.cc
index 98e26e1aa9..70f462c05d 100644
--- a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/create_interaction_choice_set_request.cc
+++ b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/create_interaction_choice_set_request.cc
@@ -156,6 +156,11 @@ void CreateInteractionChoiceSetRequest::Run() {
// we have VR commands
SendVRAddCommandRequests(app);
} else {
+ if (MessageHelper::ChoiceSetVRCommandsStatus::NONE == vr_status) {
+ // Because on_event will not be called for this choice, we set is allowed
+ // right after added.
+ app->set_choice_set_allow_mode(choice_set_id_, true);
+ }
// we have none, just return with success
SendResponse(true, Result::SUCCESS);
}
@@ -462,6 +467,14 @@ void CreateInteractionChoiceSetRequest::DeleteChoices() {
void CreateInteractionChoiceSetRequest::OnAllHMIResponsesReceived() {
SDL_LOG_AUTO_TRACE();
+ ApplicationSharedPtr application =
+ application_manager_.application(connection_key());
+ if (!error_from_hmi_) {
+ application->set_choice_set_allow_mode(choice_set_id_, true);
+ SDL_LOG_DEBUG("Choice set with id " << choice_set_id_
+ << " is allowed to perform.");
+ }
+
if (!error_from_hmi_ && should_send_warnings_) {
SendResponse(true, mobile_apis::Result::WARNINGS, kInvalidImageWarningInfo);
} else if (!error_from_hmi_) {
diff --git a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/delete_interaction_choice_set_request.cc b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/delete_interaction_choice_set_request.cc
index eac43bb22b..dccf2e9fdd 100644
--- a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/delete_interaction_choice_set_request.cc
+++ b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/delete_interaction_choice_set_request.cc
@@ -173,6 +173,7 @@ void DeleteInteractionChoiceSetRequest::SendVrDeleteCommand(
return;
}
+ app->set_choice_set_allow_mode(choice_set_id, false);
smart_objects::SmartObject msg_params =
smart_objects::SmartObject(smart_objects::SmartType_Map);
msg_params[strings::app_id] = app->app_id();
diff --git a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/perform_audio_pass_thru_request.cc b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/perform_audio_pass_thru_request.cc
index a690c0bc9b..dc46bd7f7c 100644
--- a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/perform_audio_pass_thru_request.cc
+++ b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/perform_audio_pass_thru_request.cc
@@ -175,6 +175,7 @@ void PerformAudioPassThruRequest::on_event(const event_engine::Event& event) {
hmi_apis::Common_Result::WRONG_LANGUAGE,
hmi_apis::Common_Result::RETRY,
hmi_apis::Common_Result::SAVED,
+ hmi_apis::Common_Result::TRUNCATED_DATA,
hmi_apis::Common_Result::UNSUPPORTED_RESOURCE);
if (is_tts_speak_success_unsuported) {
@@ -198,7 +199,7 @@ void PerformAudioPassThruRequest::on_event(const event_engine::Event& event) {
return;
}
- const ResponseParams response_params = PrepareResponseParameters();
+ ResponseParams response_params = PrepareResponseParameters();
SendResponse(
response_params.success,
@@ -220,7 +221,9 @@ PerformAudioPassThruRequest::PrepareResponseParameters() {
response_params_.success =
PrepareResultForMobileResponse(ui_perform_info, tts_perform_info);
- if (ui_perform_info.is_ok && tts_perform_info.is_unsupported_resource &&
+
+ if ((ui_perform_info.result_code == hmi_apis::Common_Result::SUCCESS) &&
+ ui_perform_info.is_ok && tts_perform_info.is_unsupported_resource &&
HmiInterfaces::STATE_AVAILABLE == tts_perform_info.interface_state) {
response_params_.result_code = mobile_apis::Result::WARNINGS;
response_params_.info = app_mngr::commands::MergeInfos(
@@ -231,12 +234,13 @@ PerformAudioPassThruRequest::PrepareResponseParameters() {
if (IsResultCodeUnsupported(ui_perform_info, tts_perform_info)) {
response_params_.result_code = mobile_apis::Result::UNSUPPORTED_RESOURCE;
- } else {
- AudioPassThruResults results = PrepareAudioPassThruResultCodeForResponse(
- ui_perform_info, tts_perform_info);
- response_params_.success = results.second;
- response_params_.result_code = results.first;
}
+
+ AudioPassThruResults results = PrepareAudioPassThruResultCodeForResponse(
+ ui_perform_info, tts_perform_info);
+ response_params_.success = results.second;
+ response_params_.result_code = results.first;
+
response_params_.info = app_mngr::commands::MergeInfos(
ui_perform_info, ui_info_, tts_perform_info, tts_info_);
@@ -407,23 +411,19 @@ PerformAudioPassThruRequest::PrepareAudioPassThruResultCodeForResponse(
const hmi_apis::Common_Result::eType tts_result = tts_response.result_code;
bool result = false;
- if ((ui_result == hmi_apis::Common_Result::SUCCESS) &&
- (tts_result == hmi_apis::Common_Result::SUCCESS)) {
- result = true;
- }
-
- if ((ui_result == hmi_apis::Common_Result::SUCCESS) &&
- (tts_result == hmi_apis::Common_Result::INVALID_ENUM)) {
+ if ((application_manager::commands::IsHMIResultSuccess(ui_result) ||
+ (ui_result == hmi_apis::Common_Result::UNSUPPORTED_RESOURCE)) &&
+ (application_manager::commands::IsHMIResultSuccess(tts_result) ||
+ (tts_result == hmi_apis::Common_Result::UNSUPPORTED_RESOURCE) ||
+ (tts_result == hmi_apis::Common_Result::INVALID_ENUM))) {
result = true;
}
if ((ui_result == hmi_apis::Common_Result::SUCCESS) &&
- (tts_result != hmi_apis::Common_Result::SUCCESS) &&
- (tts_result != hmi_apis::Common_Result::INVALID_ENUM)) {
- common_result = hmi_apis::Common_Result::WARNINGS;
- result = true;
- } else if (ui_response.is_ok &&
- tts_result == hmi_apis::Common_Result::WARNINGS) {
+ (((tts_result != hmi_apis::Common_Result::SUCCESS) &&
+ (tts_result != hmi_apis::Common_Result::INVALID_ENUM)) ||
+ (ui_response.is_ok &&
+ tts_result == hmi_apis::Common_Result::WARNINGS))) {
common_result = hmi_apis::Common_Result::WARNINGS;
result = true;
} else if (ui_result == hmi_apis::Common_Result::INVALID_ENUM) {
@@ -431,6 +431,7 @@ PerformAudioPassThruRequest::PrepareAudioPassThruResultCodeForResponse(
} else {
common_result = ui_result;
}
+
result_code = MessageHelper::HMIToMobileResult(common_result);
return std::make_pair(result_code, result);
}
diff --git a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/perform_interaction_request.cc b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/perform_interaction_request.cc
index bf0f05ba32..a11f123337 100644
--- a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/perform_interaction_request.cc
+++ b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/perform_interaction_request.cc
@@ -173,6 +173,27 @@ void PerformInteractionRequest::Run() {
return;
}
+ auto choice_sets_are_disallowed_to_perform =
+ [](ApplicationSharedPtr app,
+ const smart_objects::SmartObject& choice_set_id_list) {
+ auto choice_set_id_array = choice_set_id_list.asArray();
+
+ return std::any_of(
+ choice_set_id_array->begin(),
+ choice_set_id_array->end(),
+ [app](smart_objects::SmartObject& choice_set_id) {
+ return !app->is_choice_set_allowed(choice_set_id.asInt());
+ });
+ };
+
+ if (choice_sets_are_disallowed_to_perform(
+ app, msg_params[strings::interaction_choice_set_id_list])) {
+ const std::string message = "One of choice sets is not available yet";
+ SDL_LOG_WARN(message);
+ SendResponse(false, mobile_apis::Result::REJECTED, message.c_str());
+ return;
+ }
+
if (msg_params.keyExists(strings::vr_help)) {
if (mobile_apis::Result::INVALID_DATA ==
MessageHelper::VerifyImageVrHelpItems(
@@ -225,6 +246,8 @@ void PerformInteractionRequest::Run() {
// increment amount of active requests
++pi_requests_count_;
+ SDL_LOG_DEBUG("Send PerformInteraction requests");
+
StartAwaitForInterface(HmiInterfaces::HMI_INTERFACE_VR);
StartAwaitForInterface(HmiInterfaces::HMI_INTERFACE_UI);
@@ -348,16 +371,10 @@ bool PerformInteractionRequest::ProcessVRResponse(
SDL_LOG_DEBUG("Update timeout for UI");
application_manager_.UpdateRequestTimeout(
-
connection_key(), correlation_id(), default_timeout_);
return false;
}
- if (IsInterfaceAwaited(HmiInterfaces::HMI_INTERFACE_UI) &&
- InteractionMode::MANUAL_ONLY != interaction_mode_) {
- SendClosePopupRequestToHMI();
- }
-
const SmartObject& hmi_msg_params = message[strings::msg_params];
if (hmi_msg_params.keyExists(strings::choice_id)) {
const int choice_id = hmi_msg_params[strings::choice_id].asInt();
@@ -371,6 +388,26 @@ bool PerformInteractionRequest::ProcessVRResponse(
vr_choice_id_received_ = choice_id;
}
+ const bool is_vr_result_successful = CommandImpl::IsHMIResultSuccess(
+ vr_result_code_, HmiInterfaces::HMI_INTERFACE_VR);
+
+ if (IsInterfaceAwaited(HmiInterfaces::HMI_INTERFACE_UI) &&
+ is_vr_result_successful) {
+ switch (interaction_mode_) {
+ case mobile_apis::InteractionMode::BOTH:
+ // Close UI popup only if choice ID was included in VR
+ if (vr_choice_id_received_ != INVALID_CHOICE_ID) {
+ SendClosePopupRequestToHMI();
+ }
+ break;
+ case mobile_apis::InteractionMode::VR_ONLY:
+ SendClosePopupRequestToHMI();
+ break;
+ default:
+ break;
+ }
+ }
+
if (mobile_apis::InteractionMode::BOTH == interaction_mode_ ||
mobile_apis::InteractionMode::MANUAL_ONLY == interaction_mode_) {
SDL_LOG_DEBUG("Update timeout for UI");
@@ -378,17 +415,6 @@ bool PerformInteractionRequest::ProcessVRResponse(
connection_key(), correlation_id(), default_timeout_);
}
- const bool is_vr_result_success = Compare<Common_Result::eType, EQ, ONE>(
- vr_result_code_, Common_Result::SUCCESS, Common_Result::WARNINGS);
-
- if (is_vr_result_success &&
- InteractionMode::MANUAL_ONLY == interaction_mode_) {
- SDL_LOG_DEBUG("VR response is successfull in MANUAL_ONLY mode "
- << "Wait for UI response");
- // in case MANUAL_ONLY mode VR.PI SUCCESS just return
- return false;
- }
-
return false;
}
@@ -880,7 +906,10 @@ bool PerformInteractionRequest::IsWhiteSpaceExist() {
void PerformInteractionRequest::TerminatePerformInteraction() {
SDL_LOG_AUTO_TRACE();
- SendClosePopupRequestToHMI();
+ if (IsInterfaceAwaited(HmiInterfaces::HMI_INTERFACE_UI)) {
+ SendClosePopupRequestToHMI();
+ }
+
DisablePerformInteraction();
}
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 9a9aa0c533..519d70e1d8 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
@@ -274,6 +274,11 @@ bool RegisterAppInterfaceRequest::ApplicationDataShouldBeResumed(
const uint32_t key = connection_key();
ApplicationSharedPtr application = application_manager_.application(key);
+ if (!application) {
+ SDL_LOG_DEBUG("Application not found, no resumption required");
+ return false;
+ }
+
const bool hash_id_present = msg_params.keyExists(strings::hash_id);
const std::string hash_id = msg_params[strings::hash_id].asString();
const bool resumption = hash_id_present && !hash_id.empty();
@@ -348,9 +353,8 @@ policy::StatusNotifier RegisterAppInterfaceRequest::AddApplicationDataToPolicy(
application->mac_address(), application->policy_app_id(), hmi_types);
}
-void RegisterAppInterfaceRequest::CheckLanguage() {
- ApplicationSharedPtr application =
- application_manager_.application(connection_key());
+void RegisterAppInterfaceRequest::CheckLanguage(
+ ApplicationSharedPtr application) {
DCHECK_OR_RETURN_VOID(application);
const auto& msg_params = (*message_)[strings::msg_params];
if (msg_params[strings::language_desired].asInt() !=
@@ -430,6 +434,9 @@ void FinishSendingResponseToMobile(const smart_objects::SmartObject& msg_params,
policy::StatusNotifier notify_upd_manager) {
resumption::ResumeCtrl& resume_ctrl = app_manager.resume_controller();
auto application = app_manager.application(connection_key);
+ if (!application) {
+ return;
+ }
policy::PolicyHandlerInterface& policy_handler =
app_manager.GetPolicyHandler();
@@ -440,8 +447,6 @@ void FinishSendingResponseToMobile(const smart_objects::SmartObject& msg_params,
&(msg_params[strings::app_hmi_type]));
}
- application->MarkRegistered();
-
// Default HMI level should be set before any permissions validation, since
// it relies on HMI level.
app_manager.OnApplicationRegistered(application);
@@ -733,7 +738,8 @@ void RegisterAppInterfaceRequest::Run() {
return;
}
- CheckLanguage();
+ CheckLanguage(application);
+
SendRegisterAppInterfaceResponseToMobile(
ApplicationType::kNewApplication, status_notifier, add_info);
}
@@ -875,6 +881,11 @@ void RegisterAppInterfaceRequest::SendRegisterAppInterfaceResponseToMobile(
const uint32_t key = connection_key();
ApplicationSharedPtr application = application_manager_.application(key);
+
+ if (!application) {
+ return;
+ }
+
utils::SemanticVersion negotiated_version = application->msg_version();
response_params[strings::sync_msg_version][strings::major_version] =
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 0c74105e56..6e751a9b91 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
@@ -96,7 +96,7 @@ void RegisterAppInterfaceResponse::Run() {
}
SendResponse(success, result_code, last_message);
- if (success) {
+ if (app && success) {
app->set_is_ready(true);
}
event_engine::MobileEvent event(
diff --git a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/set_display_layout_request.cc b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/set_display_layout_request.cc
index ba0a20b459..98f2a2a247 100644
--- a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/set_display_layout_request.cc
+++ b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/set_display_layout_request.cc
@@ -53,7 +53,9 @@ SetDisplayLayoutRequest::SetDisplayLayoutRequest(
application_manager,
rpc_service,
hmi_capabilities,
- policy_handler) {}
+ policy_handler) {
+ subscribe_on_event(hmi_apis::FunctionID::UI_Show);
+}
SetDisplayLayoutRequest::~SetDisplayLayoutRequest() {}
@@ -73,8 +75,14 @@ void SetDisplayLayoutRequest::Run() {
std::string old_layout = app->display_layout();
std::string new_layout = "";
+ smart_objects::SmartObject show_msg_params(smart_objects::SmartType_Map);
+ show_msg_params[hmi_request::show_strings] =
+ smart_objects::SmartObject(smart_objects::SmartType_Array);
+
if (msg_params.keyExists(strings::display_layout)) {
new_layout = msg_params[strings::display_layout].asString();
+ show_msg_params[strings::template_configuration][strings::template_layout] =
+ new_layout;
}
if (new_layout != old_layout && !new_layout.empty()) {
@@ -109,18 +117,22 @@ void SetDisplayLayoutRequest::Run() {
if (msg_params.keyExists(strings::day_color_scheme)) {
SDL_LOG_DEBUG("Allow Day Color Scheme Change");
app->set_day_color_scheme(msg_params[strings::day_color_scheme]);
+ show_msg_params[strings::template_configuration]
+ [strings::day_color_scheme] =
+ msg_params[strings::day_color_scheme];
}
if (msg_params.keyExists(strings::night_color_scheme)) {
SDL_LOG_DEBUG("Allow Night Color Scheme Change");
app->set_night_color_scheme(msg_params[strings::night_color_scheme]);
+ show_msg_params[strings::template_configuration]
+ [strings::night_color_scheme] =
+ msg_params[strings::night_color_scheme];
}
- (*message_)[strings::msg_params][strings::app_id] = app->app_id();
+ show_msg_params[strings::app_id] = app->app_id();
StartAwaitForInterface(HmiInterfaces::HMI_INTERFACE_UI);
- SendHMIRequest(hmi_apis::FunctionID::UI_SetDisplayLayout,
- &((*message_)[strings::msg_params]),
- true);
+ SendHMIRequest(hmi_apis::FunctionID::UI_Show, &show_msg_params, true);
}
void SetDisplayLayoutRequest::on_event(const event_engine::Event& event) {
@@ -136,8 +148,8 @@ void SetDisplayLayoutRequest::on_event(const event_engine::Event& event) {
const smart_objects::SmartObject& message = event.smart_object();
switch (event.id()) {
- case hmi_apis::FunctionID::UI_SetDisplayLayout: {
- SDL_LOG_INFO("Received UI_SetDisplayLayout event");
+ case hmi_apis::FunctionID::UI_Show: {
+ SDL_LOG_INFO("Received UI_Show event (in set display layout)");
EndAwaitForInterface(HmiInterfaces::HMI_INTERFACE_UI);
hmi_apis::Common_Result::eType result_code =
static_cast<hmi_apis::Common_Result::eType>(
@@ -150,20 +162,16 @@ void SetDisplayLayoutRequest::on_event(const event_engine::Event& event) {
if (response_success) {
HMICapabilities& hmi_capabilities = hmi_capabilities_;
- // In case templates_available is empty copy from hmi capabilities
- if (msg_params.keyExists(hmi_response::display_capabilities)) {
- if (0 == msg_params[hmi_response::display_capabilities]
- [hmi_response::templates_available]
- .length()) {
- auto display_capabilities = hmi_capabilities.display_capabilities();
- if (display_capabilities) {
- msg_params[hmi_response::display_capabilities]
- [hmi_response::templates_available] =
- display_capabilities->getElement(
- hmi_response::templates_available);
- }
- }
- }
+ // Add HMI capabilities to response
+ msg_params[hmi_response::display_capabilities] =
+ *hmi_capabilities.display_capabilities();
+ msg_params[hmi_response::button_capabilities] =
+ *hmi_capabilities.button_capabilities();
+ msg_params[hmi_response::soft_button_capabilities] =
+ *hmi_capabilities.soft_button_capabilities();
+ msg_params[hmi_response::preset_bank_capabilities] =
+ *hmi_capabilities.preset_bank_capabilities();
+
const Version& app_version = app->version();
if (app_version.max_supported_api_version >= APIVersion::kAPIV6) {
// In case of successful response warn user that this RPC is
diff --git a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/show_constant_tbt_response.cc b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/show_constant_tbt_response.cc
index a2362a74bc..7d546079e8 100644
--- a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/show_constant_tbt_response.cc
+++ b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/show_constant_tbt_response.cc
@@ -60,8 +60,6 @@ ShowConstantTBTResponse::~ShowConstantTBTResponse() {}
void ShowConstantTBTResponse::Run() {
SDL_LOG_AUTO_TRACE();
- application_manager_.UnsubscribeAppFromSoftButtons(message_);
-
rpc_service_.SendMessageToMobile(message_);
}
diff --git a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/system_request.cc b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/system_request.cc
index 10be518409..1ddb41704f 100644
--- a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/system_request.cc
+++ b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/system_request.cc
@@ -75,34 +75,37 @@ const unsigned int kLanguageArraySizeMax = 100U;
typedef std::set<std::string> SynonymsSet;
typedef std::map<std::string, SynonymsSet> SynonymsMap;
-bool ValidateSynonymsAtLanguage(const smart_objects::SmartObject& language,
- const std::string& language_name,
- SynonymsMap& synonyms_map) {
+enum class ValidateSynonymsResult { OK, NOT_EXIST, INVALID };
+
+ValidateSynonymsResult ValidateSynonymsAtLanguage(
+ const smart_objects::SmartObject& language,
+ const std::string& language_name,
+ SynonymsMap& synonyms_map) {
if (!language[language_name].keyExists(json::vrSynonyms)) {
SDL_LOG_WARN(kQueryAppsValidationFailedPrefix
<< "'languages.vrSynonyms' doesn't exist");
- return false;
+ return ValidateSynonymsResult::NOT_EXIST;
}
const smart_objects::SmartArray* synonyms_array =
language[language_name][json::vrSynonyms].asArray();
if (!synonyms_array) {
SDL_LOG_WARN(kQueryAppsValidationFailedPrefix
<< "vrSynonyms is not array.");
- return false;
+ return ValidateSynonymsResult::INVALID;
}
const size_t synonyms_array_size = synonyms_array->size();
if (synonyms_array_size < kVrArraySizeMin) {
SDL_LOG_WARN(kQueryAppsValidationFailedPrefix
<< "vrSynomyms array has [" << synonyms_array_size
<< "] size < allowed min size [" << kVrArraySizeMin << "]");
- return false;
+ return ValidateSynonymsResult::INVALID;
}
if (synonyms_array_size > kVrArraySizeMax) {
SDL_LOG_WARN(kQueryAppsValidationFailedPrefix
<< "vrSynomyms array size [" << synonyms_array_size
<< "] exceeds maximum allowed size [" << kVrArraySizeMax
<< "]");
- return false;
+ return ValidateSynonymsResult::INVALID;
}
for (std::size_t idx = 0; idx < synonyms_array_size; ++idx) {
@@ -113,14 +116,14 @@ bool ValidateSynonymsAtLanguage(const smart_objects::SmartObject& language,
<< "vrSYnomym item [" << idx << "] exceeds max length ["
<< vrSynonym.length() << "]>[" << kVrSynonymLengthMax
<< "]");
- return false;
+ return ValidateSynonymsResult::INVALID;
}
if (vrSynonym.length() < kVrSynonymLengthMin) {
SDL_LOG_WARN(kQueryAppsValidationFailedPrefix
<< "vrSYnomym item [" << idx << "] length ["
<< vrSynonym.length() << "] is less then min length ["
<< kVrSynonymLengthMin << "] allowed.");
- return false;
+ return ValidateSynonymsResult::INVALID;
}
// Verify duplicates
SynonymsMap::iterator synonyms_map_iter = synonyms_map.find(language_name);
@@ -129,11 +132,11 @@ bool ValidateSynonymsAtLanguage(const smart_objects::SmartObject& language,
SDL_LOG_WARN(kQueryAppsValidationFailedPrefix
<< "vrSYnomym item already defined [" << vrSynonym.c_str()
<< "] for language [" << language_name << "]");
- return false;
+ return ValidateSynonymsResult::INVALID;
}
}
}
- return true;
+ return ValidateSynonymsResult::OK;
}
bool CheckMandatoryParametersPresent(
@@ -278,6 +281,7 @@ class QueryAppsDataValidator {
}
bool ValidateAppIdAndAppName(const smart_objects::SmartObject& app_data) {
+ SDL_LOG_AUTO_TRACE();
// Verify appid length
const std::string app_id(app_data[json::appId].asString());
if (app_id.length() > kAppIdLengthMax) {
@@ -315,6 +319,7 @@ class QueryAppsDataValidator {
bool ValidateLanguages(const smart_objects::SmartObject& languages,
SynonymsMap& synonyms_map) const {
+ SDL_LOG_AUTO_TRACE();
bool default_language_found = false;
const size_t languages_array_size = languages.length();
if (languages_array_size > kLanguageArraySizeMax) {
@@ -351,32 +356,37 @@ class QueryAppsDataValidator {
if (synonyms_map.find(language_name) == synonyms_map.end()) {
synonyms_map[language_name] = SynonymsSet();
}
- // ttsName verification
- if (!language[language_name].keyExists(json::ttsName)) {
- SDL_LOG_WARN(kQueryAppsValidationFailedPrefix
- << "'languages.ttsName' doesn't exist");
- return false;
- }
- const smart_objects::SmartObject& ttsNameObject =
- language[language_name][json::ttsName];
- // ttsName is string
- if (smart_objects::SmartType_String == ttsNameObject.getType()) {
- const std::string ttsName =
- language[language_name][json::ttsName].asString();
- if (ttsName.length() > kTtsNameLengthMax) {
+
+ const bool ttsNameExist =
+ language[language_name].keyExists(json::ttsName);
+
+ if (ttsNameExist) {
+ const smart_objects::SmartObject& ttsNameObject =
+ language[language_name][json::ttsName];
+ // ttsName is string
+ if (smart_objects::SmartType_String == ttsNameObject.getType()) {
+ const std::string ttsName =
+ language[language_name][json::ttsName].asString();
+ if (ttsName.length() > kTtsNameLengthMax) {
+ SDL_LOG_WARN(kQueryAppsValidationFailedPrefix
+ << "ttsName string exceeds max length ["
+ << ttsName.length() << "]>[" << kTtsNameLengthMax
+ << "]");
+ return false;
+ }
+ } else {
SDL_LOG_WARN(kQueryAppsValidationFailedPrefix
- << "ttsName string exceeds max length ["
- << ttsName.length() << "]>[" << kTtsNameLengthMax
- << "]");
+ << "ttsName is not the string type.");
return false;
}
} else {
- SDL_LOG_WARN(kQueryAppsValidationFailedPrefix
- << "ttsName is not the string type.");
- return false;
+ SDL_LOG_WARN("ttsName does not exist.");
}
- if (!ValidateSynonymsAtLanguage(language, language_name, synonyms_map)) {
+ const auto result =
+ ValidateSynonymsAtLanguage(language, language_name, synonyms_map);
+
+ if (result == ValidateSynonymsResult::INVALID) {
return false;
}
}
@@ -570,6 +580,16 @@ void SystemRequest::Run() {
SDL_LOG_DEBUG("Binary data ok.");
+ if (mobile_apis::RequestType::PROPRIETARY == request_type ||
+ mobile_apis::RequestType::HTTP == request_type) {
+ auto app_id = application->app_id();
+ if (!policy_handler_.IsPTUSystemRequestAllowed(app_id)) {
+ SDL_LOG_DEBUG("Rejected PTU SystemRequest from app " << app_id);
+ SendResponse(false, mobile_apis::Result::REJECTED);
+ return;
+ }
+ }
+
if (mobile_apis::RequestType::ICON_URL == request_type) {
application_manager_.SetIconFileFromSystemRequest(file_name);
SendResponse(true, mobile_apis::Result::SUCCESS);
diff --git a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/update_turn_list_response.cc b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/update_turn_list_response.cc
index bf2658128d..bedf91b45c 100644
--- a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/update_turn_list_response.cc
+++ b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/update_turn_list_response.cc
@@ -59,8 +59,6 @@ UpdateTurnListResponse::~UpdateTurnListResponse() {}
void UpdateTurnListResponse::Run() {
SDL_LOG_AUTO_TRACE();
- application_manager_.UnsubscribeAppFromSoftButtons(message_);
-
rpc_service_.SendMessageToMobile(message_);
}
diff --git a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/hmi_command_factory.cc b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/hmi_command_factory.cc
index c66e0b6950..f60a475e3e 100644
--- a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/hmi_command_factory.cc
+++ b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/hmi_command_factory.cc
@@ -248,8 +248,6 @@
#include "sdl_rpc_plugin/commands/hmi/ui_cancel_interaction_response.h"
#include "sdl_rpc_plugin/commands/hmi/ui_send_haptic_data_request.h"
#include "sdl_rpc_plugin/commands/hmi/ui_send_haptic_data_response.h"
-#include "sdl_rpc_plugin/commands/hmi/ui_set_display_layout_request.h"
-#include "sdl_rpc_plugin/commands/hmi/ui_set_display_layout_response.h"
#include "sdl_rpc_plugin/commands/hmi/ui_show_app_menu_request.h"
#include "sdl_rpc_plugin/commands/hmi/ui_show_app_menu_response.h"
@@ -834,11 +832,6 @@ CommandCreator& HMICommandFactory::get_creator_factory(
case hmi_apis::FunctionID::BasicCommunication_OnResumeAudioSource: {
return factory.GetCreator<commands::OnResumeAudioSourceNotification>();
}
- case hmi_apis::FunctionID::UI_SetDisplayLayout: {
- return hmi_apis::messageType::request == message_type
- ? factory.GetCreator<commands::UiSetDisplayLayoutRequest>()
- : factory.GetCreator<commands::UiSetDisplayLayoutResponse>();
- }
case hmi_apis::FunctionID::BasicCommunication_OnSDLClose: {
return factory.GetCreator<commands::OnSDLCloseNotification>();
}
diff --git a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/hmi/dummy_hmi_commands_test.cc b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/hmi/dummy_hmi_commands_test.cc
index 2a0eda2b10..9b7246b794 100644
--- a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/hmi/dummy_hmi_commands_test.cc
+++ b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/hmi/dummy_hmi_commands_test.cc
@@ -195,8 +195,6 @@
#include "hmi/ui_scrollable_message_response.h"
#include "hmi/ui_set_app_icon_request.h"
#include "hmi/ui_set_app_icon_response.h"
-#include "hmi/ui_set_display_layout_request.h"
-#include "hmi/ui_set_display_layout_response.h"
#include "hmi/ui_set_global_properties_request.h"
#include "hmi/ui_set_global_properties_response.h"
#include "hmi/ui_set_media_clock_timer_request.h"
@@ -466,8 +464,6 @@ typedef Types<commands::hmi::OnButtonEventNotification,
commands::OnSystemRequestNotification,
commands::OnPutFileNotification,
commands::OnResumeAudioSourceNotification,
- commands::UiSetDisplayLayoutResponse,
- commands::UiSetDisplayLayoutRequest,
commands::OnSDLCloseNotification,
commands::OnSDLPersistenceCompleteNotification,
commands::OnFileRemovedNotification,
diff --git a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/hmi/hmi_notifications_test.cc b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/hmi/hmi_notifications_test.cc
index 53b1fdfc67..b4d34e180e 100644
--- a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/hmi/hmi_notifications_test.cc
+++ b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/hmi/hmi_notifications_test.cc
@@ -1368,7 +1368,6 @@ TEST_F(HMICommandsNotificationsTest,
EXPECT_CALL(mock_hmi_capabilities_, set_active_vr_language(_));
EXPECT_CALL(mock_rpc_service_,
ManageMobileCommand(_, Command::CommandSource::SOURCE_SDL));
- EXPECT_CALL(*app_ptr_, IsRegistered()).WillOnce(Return(true));
EXPECT_CALL(*app_ptr_, app_id()).WillOnce(Return(kAppId_));
EXPECT_CALL(*app_ptr_, language()).WillRepeatedly(ReturnRef(kLang));
@@ -1413,15 +1412,8 @@ TEST_F(HMICommandsNotificationsTest,
EXPECT_CALL(mock_hmi_capabilities_, set_active_vr_language(_));
EXPECT_CALL(mock_rpc_service_,
ManageMobileCommand(_, Command::CommandSource::SOURCE_SDL));
- EXPECT_CALL(*app_ptr_, IsRegistered()).WillOnce(Return(true));
EXPECT_CALL(*app_ptr_, app_id()).WillRepeatedly(Return(kAppId_));
EXPECT_CALL(*app_ptr_, language()).WillRepeatedly(ReturnRef(kLang));
- EXPECT_CALL(app_mngr_, state_controller())
- .WillOnce(ReturnRef(mock_state_controller_));
- EXPECT_CALL(
- mock_state_controller_,
- SetRegularState(
- app_, kDefaultWindowId, mobile_apis::HMILevel::HMI_NONE, false));
EXPECT_CALL(mock_message_helper_,
GetOnAppInterfaceUnregisteredNotificationToMobile(
kAppId_,
@@ -1699,7 +1691,6 @@ TEST_F(HMICommandsNotificationsTest,
EXPECT_CALL(mock_hmi_capabilities_, set_active_tts_language(_));
EXPECT_CALL(mock_rpc_service_,
ManageMobileCommand(_, Command::CommandSource::SOURCE_SDL));
- EXPECT_CALL(*app_ptr_, IsRegistered()).WillOnce(Return(true));
EXPECT_CALL(*app_ptr_, app_id()).WillOnce(Return(kAppId_));
EXPECT_CALL(*app_ptr_, language()).WillRepeatedly(ReturnRef(kLang));
@@ -1745,7 +1736,6 @@ TEST_F(HMICommandsNotificationsTest,
EXPECT_CALL(mock_hmi_capabilities_, set_active_tts_language(_));
EXPECT_CALL(mock_rpc_service_,
ManageMobileCommand(_, Command::CommandSource::SOURCE_SDL));
- EXPECT_CALL(*app_ptr_, IsRegistered()).WillOnce(Return(true));
EXPECT_CALL(*app_ptr_, app_id()).WillRepeatedly(Return(kAppId_));
EXPECT_CALL(*app_ptr_, language()).WillRepeatedly(ReturnRef(kLang));
EXPECT_CALL(mock_message_helper_,
diff --git a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/hmi/sdl_activate_app_request_test.cc b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/hmi/sdl_activate_app_request_test.cc
index b110d4bf9e..162e421904 100644
--- a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/hmi/sdl_activate_app_request_test.cc
+++ b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/hmi/sdl_activate_app_request_test.cc
@@ -157,7 +157,6 @@ TEST_F(SDLActivateAppRequestTest, Run_ActivateApp_SUCCESS) {
CurrentHmiState(mobile_apis::PredefinedWindows::DEFAULT_WINDOW))
.WillOnce(Return(state));
- EXPECT_CALL(*mock_app, app_id()).WillOnce(Return(kAppID));
EXPECT_CALL(*mock_app, IsRegistered()).WillOnce(Return(true));
EXPECT_CALL(mock_policy_handler_, OnActivateApp(kAppID, kCorrelationID));
@@ -205,8 +204,8 @@ TEST_F(SDLActivateAppRequestTest, FindAppToRegister_SUCCESS) {
IsStateActive(am::HmiState::StateID::STATE_ID_DEACTIVATE_HMI))
.WillOnce(Return(false));
- ON_CALL(*mock_app, IsRegistered()).WillByDefault(Return(false));
- ON_CALL(*mock_app, is_cloud_app()).WillByDefault(Return(false));
+ EXPECT_CALL(*mock_app, IsRegistered()).WillOnce(Return(false));
+ EXPECT_CALL(*mock_app, is_cloud_app()).WillOnce(Return(false));
ON_CALL(*mock_app, device()).WillByDefault(Return(kHandle));
MockAppPtr mock_app_first(CreateMockApp());
@@ -267,8 +266,8 @@ TEST_F(SDLActivateAppRequestTest, DevicesAppsEmpty_SUCCESS) {
IsStateActive(am::HmiState::StateID::STATE_ID_DEACTIVATE_HMI))
.WillOnce(Return(false));
- ON_CALL(*mock_app, IsRegistered()).WillByDefault(Return(false));
- ON_CALL(*mock_app, is_cloud_app()).WillByDefault(Return(false));
+ EXPECT_CALL(*mock_app, IsRegistered()).WillOnce(Return(false));
+ EXPECT_CALL(*mock_app, is_cloud_app()).WillOnce(Return(false));
ON_CALL(*mock_app, device()).WillByDefault(Return(kHandle));
DataAccessor<ApplicationSet> accessor(app_list_, lock_);
@@ -330,11 +329,10 @@ TEST_F(SDLActivateAppRequestTest, FirstAppNotActiveNONE_SUCCESS) {
EXPECT_CALL(mock_state_controller_,
IsStateActive(am::HmiState::StateID::STATE_ID_DEACTIVATE_HMI))
.WillOnce(Return(false));
-
- ON_CALL(*mock_app, IsRegistered()).WillByDefault(Return(true));
-
+ EXPECT_CALL(*mock_app, IsRegistered()).WillOnce(Return(true));
am::HmiStatePtr state = std::make_shared<am::HmiState>(mock_app, app_mngr_);
state->set_hmi_level(mobile_apis::HMILevel::HMI_NONE);
+
EXPECT_CALL(*mock_app,
CurrentHmiState(mobile_apis::PredefinedWindows::DEFAULT_WINDOW))
.WillOnce(Return(state));
@@ -361,9 +359,8 @@ TEST_F(SDLActivateAppRequestTest, FirstAppIsForeground_SUCCESS) {
ON_CALL(app_mngr_, application(kAppID)).WillByDefault(Return(mock_app));
EXPECT_CALL(*mock_app, device()).WillOnce(Return(kHandle));
- ON_CALL(*mock_app, IsRegistered()).WillByDefault(Return(false));
- ON_CALL(*mock_app, is_cloud_app()).WillByDefault(Return(false));
-
+ EXPECT_CALL(*mock_app, IsRegistered()).WillOnce(Return(false));
+ EXPECT_CALL(*mock_app, is_cloud_app()).WillOnce(Return(false));
EXPECT_CALL(app_mngr_, state_controller())
.WillOnce(ReturnRef(mock_state_controller_));
EXPECT_CALL(mock_state_controller_,
@@ -434,7 +431,6 @@ TEST_F(SDLActivateAppRequestTest, FirstAppNotRegistered_SUCCESS) {
EXPECT_CALL(mock_state_controller_,
IsStateActive(am::HmiState::StateID::STATE_ID_DEACTIVATE_HMI))
.WillOnce(Return(false));
-
DataAccessor<ApplicationSet> accessor(app_list_, lock_);
EXPECT_CALL(app_mngr_, applications()).WillRepeatedly(Return(accessor));
@@ -466,8 +462,8 @@ TEST_F(SDLActivateAppRequestTest, WaitingCloudApplication_ConnectDevice) {
MockAppPtr mock_app(CreateMockApp());
EXPECT_CALL(*mock_app, device()).WillOnce(Return(kHandle));
- ON_CALL(*mock_app, IsRegistered()).WillByDefault(Return(false));
- ON_CALL(*mock_app, is_cloud_app()).WillByDefault(Return(true));
+ EXPECT_CALL(*mock_app, IsRegistered()).WillOnce(Return(false));
+ EXPECT_CALL(*mock_app, is_cloud_app()).WillOnce(Return(true));
#ifndef EXTERNAL_PROPRIETARY_MODE
EXPECT_CALL(app_mngr_, application(kAppID))
@@ -546,6 +542,28 @@ TEST_F(SDLActivateAppRequestTest, OnEvent_InvalidAppId_UNSUCCESS) {
MockAppPtr invalid_mock_app;
EXPECT_CALL(app_mngr_, application_by_hmi_app(_))
.WillOnce(Return(invalid_mock_app));
+ EXPECT_CALL(app_mngr_, pending_application_by_hmi_app(_))
+ .WillOnce(Return(ApplicationSharedPtr()));
+
+ command->on_event(event);
+}
+
+TEST_F(SDLActivateAppRequestTest, OnEvent_PendingApp_UNSUCCESS) {
+ MessageSharedPtr event_msg = CreateMessage();
+ (*event_msg)[strings::msg_params][strings::application][strings::app_id] =
+ kAppID;
+
+ std::shared_ptr<SDLActivateAppRequest> command(
+ CreateCommand<SDLActivateAppRequest>());
+
+ Event event(hmi_apis::FunctionID::BasicCommunication_OnAppRegistered);
+ event.set_smart_object(*event_msg);
+
+ MockAppPtr mock_app(CreateMockApp());
+ EXPECT_CALL(app_mngr_, pending_application_by_hmi_app(_))
+ .WillOnce(Return(mock_app));
+ EXPECT_CALL(app_mngr_, application_by_hmi_app(_)).Times(0);
+ EXPECT_CALL(mock_policy_handler_, OnActivateApp(_, _)).Times(0);
command->on_event(event);
}
@@ -565,6 +583,8 @@ TEST_F(SDLActivateAppRequestTest, OnEvent_SUCCESS) {
MockAppPtr mock_app(CreateMockApp());
EXPECT_CALL(app_mngr_, application_by_hmi_app(_)).WillOnce(Return(mock_app));
+ EXPECT_CALL(app_mngr_, pending_application_by_hmi_app(_))
+ .WillOnce(Return(ApplicationSharedPtr()));
auto hmi_state = std::make_shared<am::HmiState>(mock_app, app_mngr_);
hmi_state->set_hmi_level(mobile_apis::HMILevel::HMI_NONE);
diff --git a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/hmi/simple_requests_to_hmi_test.cc b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/hmi/simple_requests_to_hmi_test.cc
index 482ca93f3e..109ab5611d 100644
--- a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/hmi/simple_requests_to_hmi_test.cc
+++ b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/hmi/simple_requests_to_hmi_test.cc
@@ -80,7 +80,6 @@
#include "sdl_rpc_plugin/commands/hmi/ui_scrollable_message_request.h"
#include "sdl_rpc_plugin/commands/hmi/ui_send_haptic_data_request.h"
#include "sdl_rpc_plugin/commands/hmi/ui_set_app_icon_request.h"
-#include "sdl_rpc_plugin/commands/hmi/ui_set_display_layout_request.h"
#include "sdl_rpc_plugin/commands/hmi/ui_set_global_properties_request.h"
#include "sdl_rpc_plugin/commands/hmi/ui_set_media_clock_timer_request.h"
#include "sdl_rpc_plugin/commands/hmi/ui_show_request.h"
@@ -198,7 +197,6 @@ typedef Types<sdl_rpc_plugin::commands::hmi::DialNumberRequest,
typedef Types<sdl_rpc_plugin::commands::UIScrollableMessageRequest,
sdl_rpc_plugin::commands::VRGetCapabilitiesRequest,
sdl_rpc_plugin::commands::UISetAppIconRequest,
- sdl_rpc_plugin::commands::UiSetDisplayLayoutRequest,
sdl_rpc_plugin::commands::VRGetSupportedLanguagesRequest,
sdl_rpc_plugin::commands::VRGetLanguageRequest,
sdl_rpc_plugin::commands::VRPerformInteractionRequest,
diff --git a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/hmi/simple_response_from_hmi_test.cc b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/hmi/simple_response_from_hmi_test.cc
index c406d38f3d..ba8a59b853 100644
--- a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/hmi/simple_response_from_hmi_test.cc
+++ b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/hmi/simple_response_from_hmi_test.cc
@@ -74,7 +74,6 @@
#include "hmi/ui_scrollable_message_response.h"
#include "hmi/ui_send_haptic_data_response.h"
#include "hmi/ui_set_app_icon_response.h"
-#include "hmi/ui_set_display_layout_response.h"
#include "hmi/ui_set_global_properties_response.h"
#include "hmi/ui_set_media_clock_timer_response.h"
#include "hmi/ui_show_response.h"
@@ -201,8 +200,6 @@ typedef Types<
hmi_apis::FunctionID::Navigation_UpdateTurnList>,
CommandData<sdl_rpc_plugin::commands::UISetAppIconResponse,
hmi_apis::FunctionID::UI_SetAppIcon>,
- CommandData<sdl_rpc_plugin::commands::UiSetDisplayLayoutResponse,
- hmi_apis::FunctionID::UI_SetDisplayLayout>,
CommandData<sdl_rpc_plugin::commands::UISetGlobalPropertiesResponse,
hmi_apis::FunctionID::UI_SetGlobalProperties>,
CommandData<sdl_rpc_plugin::commands::UISetGlobalPropertiesResponse,
diff --git a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/mobile/create_interaction_choice_set_test.cc b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/mobile/create_interaction_choice_set_test.cc
index 3f8ac0028b..951a206dff 100644
--- a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/mobile/create_interaction_choice_set_test.cc
+++ b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/mobile/create_interaction_choice_set_test.cc
@@ -836,8 +836,8 @@ TEST_F(CreateInteractionChoiceSetRequestTest,
smart_objects::SmartObject choice_set_id(smart_objects::SmartType_Null);
- EXPECT_CALL(app_mngr_, application(kConnectionKey))
- .WillOnce(Return(mock_app_));
+ ON_CALL(app_mngr_, application(kConnectionKey))
+ .WillByDefault(Return(mock_app_));
ON_CALL(mock_message_helper_, CheckChoiceSetVRCommands(_))
.WillByDefault(Return(am::MessageHelper::ChoiceSetVRCommandsStatus::ALL));
diff --git a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/mobile/perform_audio_pass_thru_test.cc b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/mobile/perform_audio_pass_thru_test.cc
index b23e8eefeb..739041523b 100644
--- a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/mobile/perform_audio_pass_thru_test.cc
+++ b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/mobile/perform_audio_pass_thru_test.cc
@@ -261,7 +261,7 @@ TEST_F(PerformAudioPassThruRequestTest,
EXPECT_EQ((*response_to_mobile)[am::strings::msg_params][am::strings::success]
.asBool(),
- false);
+ true);
EXPECT_EQ(
(*response_to_mobile)[am::strings::msg_params][am::strings::result_code]
.asInt(),
diff --git a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/mobile/perform_interaction_test.cc b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/mobile/perform_interaction_test.cc
index 196c83d144..aa6d02b81c 100644
--- a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/mobile/perform_interaction_test.cc
+++ b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/mobile/perform_interaction_test.cc
@@ -467,9 +467,8 @@ TEST_F(
command->StartAwaitForInterfaces();
- MessageSharedPtr response_msg_vr =
- CreateHMIResponseMessage(hmi_apis::Common_Result::UNSUPPORTED_RESOURCE,
- "VR is not supported by system");
+ MessageSharedPtr response_msg_vr = CreateHMIResponseMessage(
+ hmi_apis::Common_Result::WRONG_LANGUAGE, "VR error message");
am::event_engine::Event event_vr(hmi_apis::FunctionID::VR_PerformInteraction);
event_vr.set_smart_object(*response_msg_vr);
@@ -484,23 +483,13 @@ TEST_F(
ManageMobileCommand(_, am::commands::Command::CommandSource::SOURCE_SDL))
.WillOnce(DoAll(SaveArg<0>(&response_to_mobile), Return(true)));
- MessageSharedPtr request_to_hmi;
- EXPECT_CALL(mock_rpc_service_,
- ManageHMICommand(
- _, am::commands::Command::CommandSource::SOURCE_SDL_TO_HMI))
- .WillOnce(DoAll(SaveArg<0>(&request_to_hmi), Return(true)));
-
command->on_event(event_vr);
command->on_event(event_ui);
- HMIRequestExpectations(request_to_hmi,
- hmi_apis::FunctionID::UI_ClosePopUp,
- "UI.PerformInteraction");
-
ResultCommandExpectations(response_to_mobile,
true,
- hmi_apis::Common_Result::UNSUPPORTED_RESOURCE,
- "VR is not supported by system");
+ hmi_apis::Common_Result::WRONG_LANGUAGE,
+ "VR error message");
}
TEST_F(
@@ -618,8 +607,8 @@ TEST_F(
command->StartAwaitForInterfaces();
- MessageSharedPtr response_msg_vr =
- CreateHMIResponseMessage(hmi_apis::Common_Result::SUCCESS, "");
+ MessageSharedPtr response_msg_vr = CreateHMIResponseMessageWithChoiceID(
+ hmi_apis::Common_Result::SUCCESS, "", kVrChoiceID);
am::event_engine::Event event_vr(hmi_apis::FunctionID::VR_PerformInteraction);
event_vr.set_smart_object(*response_msg_vr);
@@ -684,25 +673,47 @@ TEST_F(
ManageMobileCommand(_, am::commands::Command::CommandSource::SOURCE_SDL))
.WillOnce(DoAll(SaveArg<0>(&response_to_mobile), Return(true)));
- MessageSharedPtr request_to_hmi;
- EXPECT_CALL(mock_rpc_service_,
- ManageHMICommand(
- _, am::commands::Command::CommandSource::SOURCE_SDL_TO_HMI))
- .WillOnce(DoAll(SaveArg<0>(&request_to_hmi), Return(true)));
-
command->on_event(event_vr);
command->on_event(event_ui);
- HMIRequestExpectations(request_to_hmi,
- hmi_apis::FunctionID::UI_ClosePopUp,
- "UI.PerformInteraction");
-
ResultCommandExpectations(response_to_mobile,
true,
hmi_apis::Common_Result::UNSUPPORTED_RESOURCE,
"UI warning message, VR error message");
}
+TEST_F(PerformInteractionRequestTest,
+ ChoiceSetIsNotAllowed_UnsuccessWithREJECT) {
+ MessageSharedPtr msg_from_mobile =
+ CreateMessage(smart_objects::SmartType_Map);
+ const uint32_t kDissalowedChoiceSetId = 11u;
+
+ (*msg_from_mobile)[strings::msg_params]
+ [strings::interaction_choice_set_id_list][0] =
+ kDissalowedChoiceSetId;
+ (*msg_from_mobile)[strings::msg_params][strings::interaction_choice_set_id] =
+ kDissalowedChoiceSetId;
+ smart_objects::SmartObject choice_set_id =
+ (*msg_from_mobile)[am::strings::msg_params]
+ [am::strings::interaction_choice_set_id];
+
+ ON_CALL(app_mngr_, application(_)).WillByDefault(Return(mock_app_));
+ EXPECT_CALL(*mock_app_, FindChoiceSet(kDissalowedChoiceSetId))
+ .WillOnce(Return(choice_set_id));
+ EXPECT_CALL(*mock_app_, is_choice_set_allowed(kDissalowedChoiceSetId))
+ .WillOnce(Return(false));
+ EXPECT_CALL(
+ mock_rpc_service_,
+ ManageMobileCommand(MobileResultCodeIs(mobile_apis::Result::REJECTED), _))
+ .WillOnce(Return(true));
+
+ auto command =
+ CreateCommand<PerformInteractionRequestTestClass>(msg_from_mobile);
+
+ command->Init();
+ command->Run();
+}
+
} // namespace perform_interaction_request
} // namespace mobile_commands_test
} // namespace commands_test
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 0624c873fa..0e2fafe82b 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
@@ -168,6 +168,10 @@ class RegisterAppInterfaceRequestTest
ON_CALL(*mock_app, is_cloud_app()).WillByDefault(Return(false));
ON_CALL(*mock_app, hybrid_app_preference())
.WillByDefault(ReturnRef(kHybridAppPreference));
+ ON_CALL(*mock_app, vr_synonyms())
+ .WillByDefault(Return(std::shared_ptr<smart_objects::SmartObject>()));
+ ON_CALL(*mock_app, tts_name())
+ .WillByDefault(Return(std::shared_ptr<smart_objects::SmartObject>()));
ON_CALL(*mock_app, policy_app_id()).WillByDefault(Return(kAppId1));
ON_CALL(*mock_app, msg_version())
.WillByDefault(ReturnRef(mock_semantic_version));
diff --git a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/mobile/set_display_layout_test.cc b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/mobile/set_display_layout_test.cc
index cc3b5925ce..2f5f36b612 100644
--- a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/mobile/set_display_layout_test.cc
+++ b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/mobile/set_display_layout_test.cc
@@ -104,6 +104,61 @@ class SetDisplayLayoutRequestTest
return msg;
}
+
+ void CreateResponseCapabilities() {
+ using namespace smart_objects;
+ // Display capabilities
+ SmartObjectSPtr display_capabilities =
+ std::make_shared<SmartObject>(SmartType_Map);
+ SmartObject text_fields(SmartType_Array);
+ text_fields[0] = SmartObject(SmartType_Map);
+ text_fields[0][am::hmi_response::button_name] = am::strings::main_field_1;
+ text_fields[0][am::strings::character_set] = "UTF-8";
+ text_fields[0]["rows"] = 1;
+ text_fields[0]["width"] = 500;
+ (*display_capabilities)[am::hmi_response::display_type] = "SDL_GENERIC";
+ (*display_capabilities)[am::hmi_response::text_fields] = text_fields;
+ (*display_capabilities)[am::hmi_response::media_clock_formats] =
+ SmartObject(SmartType_Array);
+ (*display_capabilities)[am::hmi_response::graphic_supported] = true;
+
+ // Button capabilities
+ SmartObjectSPtr button_capabilities =
+ std::make_shared<SmartObject>(SmartType_Array);
+ SmartObject button_capability(SmartType_Map);
+ button_capability[strings::button_name] = "OK";
+ button_capability["shortPressAvailable"] = true;
+ button_capability["longPressAvailable"] = true;
+ button_capability["upDownAvailable"] = true;
+ (*button_capabilities)[0] = button_capability;
+
+ // Soft Button capabilities
+ SmartObjectSPtr soft_button_capabilities =
+ std::make_shared<SmartObject>(SmartType_Array);
+ SmartObject soft_button_capability(SmartType_Map);
+ soft_button_capability[am::hmi_response::image_supported] = true;
+ soft_button_capability["longPressAvailable"] = true;
+ soft_button_capability["shortPressAvailable"] = true;
+ soft_button_capability["upDownAvailable"] = true;
+ soft_button_capability["imageSupported"] = false;
+ (*soft_button_capabilities) = soft_button_capability;
+
+ // Preset Bank capabilities
+ SmartObjectSPtr preset_bank_capabilities =
+ std::make_shared<SmartObject>(SmartType_Map);
+ (*preset_bank_capabilities)[am::hmi_response::on_screen_presets_available] =
+ false;
+
+ EXPECT_CALL(mock_hmi_capabilities_, display_capabilities())
+ .WillOnce(Return(display_capabilities));
+ EXPECT_CALL(mock_hmi_capabilities_, button_capabilities())
+ .WillOnce(Return(button_capabilities));
+ EXPECT_CALL(mock_hmi_capabilities_, soft_button_capabilities())
+ .WillOnce(Return(soft_button_capabilities));
+ EXPECT_CALL(mock_hmi_capabilities_, preset_bank_capabilities())
+ .WillOnce(Return(preset_bank_capabilities));
+ }
+
typedef TypeIf<kMocksAreNice,
NiceMock<application_manager_test::MockHMICapabilities>,
application_manager_test::MockHMICapabilities>::Result
@@ -147,7 +202,7 @@ TEST_F(SetDisplayLayoutRequestTest,
(*msg)[am::strings::msg_params][am::strings::info] =
"UI is not supported by system";
- Event event(hmi_apis::FunctionID::UI_SetDisplayLayout);
+ Event event(hmi_apis::FunctionID::UI_Show);
event.set_smart_object(*msg);
ON_CALL(mock_hmi_interfaces_,
@@ -195,9 +250,8 @@ TEST_F(SetDisplayLayoutRequestTest, Run_SUCCESS) {
EXPECT_CALL(app_mngr_, GetNextHMICorrelationID())
.WillOnce(Return(kCorrelationKey));
- EXPECT_CALL(
- mock_hmi_interfaces_,
- GetInterfaceFromFunction(hmi_apis::FunctionID::UI_SetDisplayLayout))
+ EXPECT_CALL(mock_hmi_interfaces_,
+ GetInterfaceFromFunction(hmi_apis::FunctionID::UI_Show))
.WillRepeatedly(Return(am::HmiInterfaces::HMI_INTERFACE_UI));
EXPECT_CALL(mock_hmi_interfaces_,
GetInterfaceState(am::HmiInterfaces::HMI_INTERFACE_UI))
@@ -226,7 +280,7 @@ TEST_F(SetDisplayLayoutRequestTest, OnEvent_InvalidEventId_UNSUCCESS) {
}
TEST_F(SetDisplayLayoutRequestTest, OnEvent_AppVersion_v6_WARNING) {
- am::event_engine::Event event(hmi_apis::FunctionID::UI_SetDisplayLayout);
+ am::event_engine::Event event(hmi_apis::FunctionID::UI_Show);
MessageSharedPtr msg = CreateMessage();
(*msg)[am::strings::params][am::hmi_response::code] =
@@ -235,12 +289,7 @@ TEST_F(SetDisplayLayoutRequestTest, OnEvent_AppVersion_v6_WARNING) {
(*msg)[am::strings::params][am::strings::connection_key] = kConnectionKey;
event.set_smart_object(*msg);
- MessageSharedPtr dispaly_capabilities_msg = CreateMessage();
- (*dispaly_capabilities_msg)[am::hmi_response::templates_available] =
- "templates_available";
-
- EXPECT_CALL(mock_hmi_capabilities_, display_capabilities())
- .WillOnce(Return(dispaly_capabilities_msg));
+ CreateResponseCapabilities();
EXPECT_CALL(
mock_rpc_service_,
ManageMobileCommand(MobileResultCodeIs(mobile_result::WARNINGS),
@@ -260,7 +309,7 @@ TEST_F(SetDisplayLayoutRequestTest, OnEvent_AppVersion_v6_WARNING) {
}
TEST_F(SetDisplayLayoutRequestTest, OnEvent_AppVersion_v5_SUCCESS) {
- am::event_engine::Event event(hmi_apis::FunctionID::UI_SetDisplayLayout);
+ am::event_engine::Event event(hmi_apis::FunctionID::UI_Show);
MessageSharedPtr msg = CreateMessage();
(*msg)[am::strings::params][am::hmi_response::code] =
@@ -269,12 +318,7 @@ TEST_F(SetDisplayLayoutRequestTest, OnEvent_AppVersion_v5_SUCCESS) {
(*msg)[am::strings::params][am::strings::connection_key] = kConnectionKey;
event.set_smart_object(*msg);
- MessageSharedPtr dispaly_capabilities_msg = CreateMessage();
- (*dispaly_capabilities_msg)[am::hmi_response::templates_available] =
- "templates_available";
-
- EXPECT_CALL(mock_hmi_capabilities_, display_capabilities())
- .WillOnce(Return(dispaly_capabilities_msg));
+ CreateResponseCapabilities();
EXPECT_CALL(
mock_rpc_service_,
ManageMobileCommand(MobileResultCodeIs(mobile_result::SUCCESS),
diff --git a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/mobile/set_global_properties_test.cc b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/mobile/set_global_properties_test.cc
index 4272005fba..de7548cc28 100644
--- a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/mobile/set_global_properties_test.cc
+++ b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/mobile/set_global_properties_test.cc
@@ -123,13 +123,14 @@ class SetGlobalPropertiesRequestTest
}
void VRArraySetupHelper(MessageSharedPtr msg,
- SmartObject& vr_help_title,
- SmartObject& vr_help_array) {
- (*msg)[am::strings::msg_params][am::strings::vr_help_title] = vr_help_title;
- vr_help_array[0] = SmartObject(smart_objects::SmartType_Map);
- vr_help_array[0][am::strings::text] = kText;
- vr_help_array[0][am::strings::position] = kPosition;
- (*msg)[am::strings::msg_params][am::strings::vr_help] = vr_help_array;
+ smart_objects::SmartObjectSPtr vr_help_title,
+ smart_objects::SmartObjectSPtr vr_help_array) {
+ (*msg)[am::strings::msg_params][am::strings::vr_help_title] =
+ *vr_help_title;
+ (*vr_help_array)[0] = SmartObject(smart_objects::SmartType_Map);
+ (*vr_help_array)[0][am::strings::text] = kText;
+ (*vr_help_array)[0][am::strings::position] = kPosition;
+ (*msg)[am::strings::msg_params][am::strings::vr_help] = *vr_help_array;
EXPECT_CALL(app_mngr_, application(kConnectionKey))
.WillOnce(Return(mock_app_));
}
@@ -137,18 +138,20 @@ class SetGlobalPropertiesRequestTest
void OnEventUISetupHelper(
MessageSharedPtr msg,
std::shared_ptr<SetGlobalPropertiesRequest> command) {
- SmartObject vr_help_title("yes");
- SmartObject vr_help_array(smart_objects::SmartType_Array);
+ smart_objects::SmartObjectSPtr vr_help_title =
+ std::make_shared<SmartObject>("yes");
+ smart_objects::SmartObjectSPtr vr_help_array =
+ std::make_shared<SmartObject>(smart_objects::SmartType_Array);
VRArraySetupHelper(msg, vr_help_title, vr_help_array);
EXPECT_CALL(mock_message_helper_,
- VerifyImageVrHelpItems(vr_help_array, _, _))
+ VerifyImageVrHelpItems(*vr_help_array, _, _))
.WillOnce((Return(mobile_apis::Result::SUCCESS)));
EXPECT_CALL(app_mngr_,
RemoveAppFromTTSGlobalPropertiesList(kConnectionKey));
- EXPECT_CALL(*mock_app_, set_vr_help_title(vr_help_title));
- EXPECT_CALL(*mock_app_, set_vr_help(vr_help_array));
- EXPECT_CALL(*mock_app_, vr_help_title()).WillOnce(Return(&vr_help_title));
- EXPECT_CALL(*mock_app_, vr_help()).WillOnce(Return(&vr_help_array));
+ EXPECT_CALL(*mock_app_, set_vr_help_title(*vr_help_title));
+ EXPECT_CALL(*mock_app_, set_vr_help(*vr_help_array));
+ EXPECT_CALL(*mock_app_, vr_help_title()).WillOnce(Return(vr_help_title));
+ EXPECT_CALL(*mock_app_, vr_help()).WillOnce(Return(vr_help_array));
EXPECT_CALL(*mock_app_, set_menu_title(_)).Times(0);
EXPECT_CALL(*mock_app_, set_menu_icon(_)).Times(0);
EXPECT_CALL(*mock_app_, set_keyboard_props(_)).Times(0);
@@ -165,27 +168,29 @@ class SetGlobalPropertiesRequestTest
void OnEventTTSSetupHelper(
MessageSharedPtr msg,
std::shared_ptr<SetGlobalPropertiesRequest> command) {
- SmartObject help_prompt(smart_objects::SmartType_Array);
- help_prompt[0][am::strings::text] = "Help_Prompt_One";
- (*msg)[am::strings::msg_params][am::strings::help_prompt] = help_prompt;
- SmartObject timeout_prompt(smart_objects::SmartType_Array);
- timeout_prompt[0][am::strings::text] = "Timeout_Prompt_One";
+ smart_objects::SmartObjectSPtr help_prompt =
+ std::make_shared<SmartObject>(smart_objects::SmartType_Array);
+ (*help_prompt)[0][am::strings::text] = "Help_Prompt_One";
+ (*msg)[am::strings::msg_params][am::strings::help_prompt] = *help_prompt;
+ smart_objects::SmartObjectSPtr timeout_prompt =
+ std::make_shared<SmartObject>(smart_objects::SmartType_Array);
+ (*timeout_prompt)[0][am::strings::text] = "Timeout_Prompt_One";
(*msg)[am::strings::msg_params][am::strings::timeout_prompt] =
- timeout_prompt;
+ *timeout_prompt;
EXPECT_CALL(app_mngr_, application(kConnectionKey))
.WillOnce(Return(mock_app_));
EXPECT_CALL(mock_message_helper_, VerifyImageVrHelpItems(_, _, _)).Times(0);
- EXPECT_CALL(mock_message_helper_, VerifyTtsFiles(help_prompt, _, _))
+ EXPECT_CALL(mock_message_helper_, VerifyTtsFiles(*help_prompt, _, _))
.WillOnce(Return(mobile_apis::Result::SUCCESS));
- EXPECT_CALL(mock_message_helper_, VerifyTtsFiles(timeout_prompt, _, _))
+ EXPECT_CALL(mock_message_helper_, VerifyTtsFiles(*timeout_prompt, _, _))
.WillOnce(Return(mobile_apis::Result::SUCCESS));
EXPECT_CALL(app_mngr_,
RemoveAppFromTTSGlobalPropertiesList(kConnectionKey));
- EXPECT_CALL(*mock_app_, set_help_prompt(help_prompt));
- EXPECT_CALL(*mock_app_, help_prompt()).WillOnce(Return(&help_prompt));
- EXPECT_CALL(*mock_app_, set_timeout_prompt(timeout_prompt));
- EXPECT_CALL(*mock_app_, timeout_prompt()).WillOnce(Return(&timeout_prompt));
+ EXPECT_CALL(*mock_app_, set_help_prompt(*help_prompt));
+ EXPECT_CALL(*mock_app_, help_prompt()).WillOnce(Return(help_prompt));
+ EXPECT_CALL(*mock_app_, set_timeout_prompt(*timeout_prompt));
+ EXPECT_CALL(*mock_app_, timeout_prompt()).WillOnce(Return(timeout_prompt));
EXPECT_CALL(*mock_app_, app_id()).WillOnce(Return(kAppId));
EXPECT_CALL(*mock_app_, help_prompt_manager())
@@ -437,12 +442,14 @@ TEST_F(SetGlobalPropertiesRequestTest,
CreateCommand<SetGlobalPropertiesRequest>(msg_vr);
EXPECT_CALL(app_mngr_, RemoveAppFromTTSGlobalPropertiesList(kConnectionKey));
- const smart_objects::SmartObject* vr_help_title =
- &((*msg_vr)[am::strings::msg_params][am::strings::vr_help_title]);
- const smart_objects::SmartObject* vr_help =
- &((*msg_vr)[am::strings::msg_params][am::strings::vr_help]);
- const smart_objects::SmartObject* vr_help_prompt =
- &((*msg_vr)[am::strings::msg_params][am::strings::help_prompt]);
+ const smart_objects::SmartObjectSPtr vr_help_title =
+ std::make_shared<SmartObject>(
+ (*msg_vr)[am::strings::msg_params][am::strings::vr_help_title]);
+ const smart_objects::SmartObjectSPtr vr_help = std::make_shared<SmartObject>(
+ (*msg_vr)[am::strings::msg_params][am::strings::vr_help]);
+ const smart_objects::SmartObjectSPtr vr_help_prompt =
+ std::make_shared<SmartObject>(
+ (*msg_vr)[am::strings::msg_params][am::strings::help_prompt]);
ON_CALL(*mock_app_, vr_help_title()).WillByDefault(Return(vr_help_title));
ON_CALL(*mock_app_, vr_help()).WillByDefault(Return(vr_help));
ON_CALL(*mock_app_, help_prompt()).WillByDefault(Return(vr_help_prompt));
@@ -606,31 +613,37 @@ TEST_F(SetGlobalPropertiesRequestTest, Run_VRNoMenuAndKeyboard_SUCCESS) {
TEST_F(SetGlobalPropertiesRequestTest, Run_VRWithMenuAndKeyboard_SUCCESS) {
MessageSharedPtr msg = CreateMsgParams();
- SmartObject vr_help_title("yes");
- SmartObject vr_help_array(smart_objects::SmartType_Array);
+ smart_objects::SmartObjectSPtr vr_help_title =
+ std::make_shared<SmartObject>("yes");
+ smart_objects::SmartObjectSPtr vr_help_array =
+ std::make_shared<SmartObject>(smart_objects::SmartType_Array);
VRArraySetupHelper(msg, vr_help_title, vr_help_array);
- (*msg)[am::strings::msg_params][am::strings::vr_help] = vr_help_array;
+ (*msg)[am::strings::msg_params][am::strings::vr_help] = *vr_help_array;
SmartObject menu_title("Menu_Title");
(*msg)[am::strings::msg_params][am::hmi_request::menu_title] = menu_title;
SmartObject menu_icon(smart_objects::SmartType_Map);
menu_icon[am::strings::value] = "1";
(*msg)[am::strings::msg_params][am::hmi_request::menu_icon] = menu_icon;
- SmartObject keyboard_properties(smart_objects::SmartType_Map);
+ smart_objects::SmartObjectSPtr keyboard_properties =
+ std::make_shared<SmartObject>(smart_objects::SmartType_Map);
(*msg)[am::strings::msg_params][am::hmi_request::keyboard_properties] =
- keyboard_properties;
+ *keyboard_properties;
EXPECT_CALL(mock_message_helper_, VerifyImage(menu_icon, _, _))
.WillOnce((Return(mobile_apis::Result::SUCCESS)));
- EXPECT_CALL(mock_message_helper_, VerifyImageVrHelpItems(vr_help_array, _, _))
+ EXPECT_CALL(mock_message_helper_,
+ VerifyImageVrHelpItems(*vr_help_array, _, _))
.WillOnce((Return(mobile_apis::Result::SUCCESS)));
EXPECT_CALL(app_mngr_, RemoveAppFromTTSGlobalPropertiesList(kConnectionKey));
- EXPECT_CALL(*mock_app_, set_vr_help_title(vr_help_title));
- EXPECT_CALL(*mock_app_, set_vr_help(vr_help_array));
- EXPECT_CALL(*mock_app_, vr_help_title()).WillOnce(Return(&vr_help_title));
- EXPECT_CALL(*mock_app_, vr_help()).WillOnce(Return(&vr_help_array));
+ EXPECT_CALL(*mock_app_, set_vr_help_title(*vr_help_title));
+ EXPECT_CALL(*mock_app_, set_vr_help(*vr_help_array));
+ EXPECT_CALL(*mock_app_, vr_help_title()).WillOnce(Return(vr_help_title));
+ EXPECT_CALL(*mock_app_, vr_help()).WillOnce(Return(vr_help_array));
EXPECT_CALL(*mock_app_, set_menu_title(menu_title));
EXPECT_CALL(*mock_app_, set_menu_icon(menu_icon));
- EXPECT_CALL(*mock_app_, set_keyboard_props(keyboard_properties));
+ EXPECT_CALL(*mock_app_, set_keyboard_props(*keyboard_properties));
+ EXPECT_CALL(*mock_app_, keyboard_props())
+ .WillOnce(Return(keyboard_properties));
EXPECT_CALL(*mock_app_, app_id()).WillOnce(Return(kAppId));
EXPECT_CALL(
@@ -656,31 +669,37 @@ TEST_F(SetGlobalPropertiesRequestTest, Run_VRWithMenuAndKeyboard_SUCCESS) {
TEST_F(SetGlobalPropertiesRequestTest,
Run_VRWithMenuAndKeyboard_Menu_WARNINGS) {
MessageSharedPtr msg = CreateMsgParams();
- SmartObject vr_help_title("yes");
- SmartObject vr_help_array(smart_objects::SmartType_Array);
+ smart_objects::SmartObjectSPtr vr_help_title =
+ std::make_shared<SmartObject>("yes");
+ smart_objects::SmartObjectSPtr vr_help_array =
+ std::make_shared<SmartObject>(smart_objects::SmartType_Array);
VRArraySetupHelper(msg, vr_help_title, vr_help_array);
- (*msg)[am::strings::msg_params][am::strings::vr_help] = vr_help_array;
+ (*msg)[am::strings::msg_params][am::strings::vr_help] = *vr_help_array;
SmartObject menu_title("Menu_Title");
(*msg)[am::strings::msg_params][am::hmi_request::menu_title] = menu_title;
SmartObject menu_icon(smart_objects::SmartType_Map);
menu_icon[am::strings::value] = "1";
(*msg)[am::strings::msg_params][am::hmi_request::menu_icon] = menu_icon;
- SmartObject keyboard_properties(smart_objects::SmartType_Map);
+ smart_objects::SmartObjectSPtr keyboard_properties =
+ std::make_shared<SmartObject>(smart_objects::SmartType_Map);
(*msg)[am::strings::msg_params][am::hmi_request::keyboard_properties] =
- keyboard_properties;
+ *keyboard_properties;
EXPECT_CALL(mock_message_helper_, VerifyImage(menu_icon, _, _))
.WillOnce((Return(mobile_apis::Result::WARNINGS)));
- EXPECT_CALL(mock_message_helper_, VerifyImageVrHelpItems(vr_help_array, _, _))
+ EXPECT_CALL(mock_message_helper_,
+ VerifyImageVrHelpItems(*vr_help_array, _, _))
.WillOnce((Return(mobile_apis::Result::SUCCESS)));
EXPECT_CALL(app_mngr_, RemoveAppFromTTSGlobalPropertiesList(kConnectionKey));
- EXPECT_CALL(*mock_app_, set_vr_help_title(vr_help_title));
- EXPECT_CALL(*mock_app_, set_vr_help(vr_help_array));
- EXPECT_CALL(*mock_app_, vr_help_title()).WillOnce(Return(&vr_help_title));
- EXPECT_CALL(*mock_app_, vr_help()).WillOnce(Return(&vr_help_array));
+ EXPECT_CALL(*mock_app_, set_vr_help_title(*vr_help_title));
+ EXPECT_CALL(*mock_app_, set_vr_help(*vr_help_array));
+ EXPECT_CALL(*mock_app_, vr_help_title()).WillOnce(Return(vr_help_title));
+ EXPECT_CALL(*mock_app_, vr_help()).WillOnce(Return(vr_help_array));
EXPECT_CALL(*mock_app_, set_menu_title(menu_title));
EXPECT_CALL(*mock_app_, set_menu_icon(menu_icon));
- EXPECT_CALL(*mock_app_, set_keyboard_props(keyboard_properties));
+ EXPECT_CALL(*mock_app_, set_keyboard_props(*keyboard_properties));
+ EXPECT_CALL(*mock_app_, keyboard_props())
+ .WillOnce(Return(keyboard_properties));
EXPECT_CALL(*mock_app_, app_id()).WillOnce(Return(kAppId));
EXPECT_CALL(*mock_app_, help_prompt_manager())
.WillOnce(ReturnRef(*mock_help_prompt_manager_.get()));
@@ -704,31 +723,37 @@ TEST_F(SetGlobalPropertiesRequestTest,
TEST_F(SetGlobalPropertiesRequestTest, Run_VRWithMenuAndKeyboard_VR_WARNINGS) {
MessageSharedPtr msg = CreateMsgParams();
- SmartObject vr_help_title("yes");
- SmartObject vr_help_array(smart_objects::SmartType_Array);
+ smart_objects::SmartObjectSPtr vr_help_title =
+ std::make_shared<SmartObject>("yes");
+ smart_objects::SmartObjectSPtr vr_help_array =
+ std::make_shared<SmartObject>(smart_objects::SmartType_Array);
VRArraySetupHelper(msg, vr_help_title, vr_help_array);
- (*msg)[am::strings::msg_params][am::strings::vr_help] = vr_help_array;
+ (*msg)[am::strings::msg_params][am::strings::vr_help] = *vr_help_array;
SmartObject menu_title("Menu_Title");
(*msg)[am::strings::msg_params][am::hmi_request::menu_title] = menu_title;
SmartObject menu_icon(smart_objects::SmartType_Map);
menu_icon[am::strings::value] = "1";
(*msg)[am::strings::msg_params][am::hmi_request::menu_icon] = menu_icon;
- SmartObject keyboard_properties(smart_objects::SmartType_Map);
+ smart_objects::SmartObjectSPtr keyboard_properties =
+ std::make_shared<SmartObject>(smart_objects::SmartType_Map);
(*msg)[am::strings::msg_params][am::hmi_request::keyboard_properties] =
- keyboard_properties;
+ *keyboard_properties;
EXPECT_CALL(mock_message_helper_, VerifyImage(menu_icon, _, _))
.WillOnce((Return(mobile_apis::Result::SUCCESS)));
- EXPECT_CALL(mock_message_helper_, VerifyImageVrHelpItems(vr_help_array, _, _))
+ EXPECT_CALL(mock_message_helper_,
+ VerifyImageVrHelpItems(*vr_help_array, _, _))
.WillOnce((Return(mobile_apis::Result::WARNINGS)));
EXPECT_CALL(app_mngr_, RemoveAppFromTTSGlobalPropertiesList(kConnectionKey));
- EXPECT_CALL(*mock_app_, set_vr_help_title(vr_help_title));
- EXPECT_CALL(*mock_app_, set_vr_help(vr_help_array));
- EXPECT_CALL(*mock_app_, vr_help_title()).WillOnce(Return(&vr_help_title));
- EXPECT_CALL(*mock_app_, vr_help()).WillOnce(Return(&vr_help_array));
+ EXPECT_CALL(*mock_app_, set_vr_help_title(*vr_help_title));
+ EXPECT_CALL(*mock_app_, set_vr_help(*vr_help_array));
+ EXPECT_CALL(*mock_app_, vr_help_title()).WillOnce(Return(vr_help_title));
+ EXPECT_CALL(*mock_app_, vr_help()).WillOnce(Return(vr_help_array));
EXPECT_CALL(*mock_app_, set_menu_title(menu_title));
EXPECT_CALL(*mock_app_, set_menu_icon(menu_icon));
- EXPECT_CALL(*mock_app_, set_keyboard_props(keyboard_properties));
+ EXPECT_CALL(*mock_app_, set_keyboard_props(*keyboard_properties));
+ EXPECT_CALL(*mock_app_, keyboard_props())
+ .WillOnce(Return(keyboard_properties));
EXPECT_CALL(*mock_app_, app_id()).WillOnce(Return(kAppId));
EXPECT_CALL(*mock_app_, help_prompt_manager())
.WillOnce(ReturnRef(*mock_help_prompt_manager_.get()));
@@ -772,25 +797,28 @@ TEST_F(SetGlobalPropertiesRequestTest, Run_VRBrokenMenuIcon_Canceled) {
TEST_F(SetGlobalPropertiesRequestTest, Run_VRBrokenVRHelp_Canceled) {
MessageSharedPtr msg = CreateMsgParams();
- SmartObject vr_help_title("yes");
+ smart_objects::SmartObjectSPtr vr_help_title =
+ std::make_shared<SmartObject>("yes");
SmartObject menu_icon(smart_objects::SmartType_Map);
menu_icon[am::strings::value] = "1";
(*msg)[am::strings::msg_params][am::hmi_request::menu_icon] = menu_icon;
- SmartObject vr_help_array(smart_objects::SmartType_Array);
+ smart_objects::SmartObjectSPtr vr_help_array =
+ std::make_shared<SmartObject>(smart_objects::SmartType_Array);
VRArraySetupHelper(msg, vr_help_title, vr_help_array);
SmartObject menu_title("Menu_Title");
(*msg)[am::strings::msg_params][am::hmi_request::menu_title] = menu_title;
EXPECT_CALL(mock_message_helper_, VerifyImage(menu_icon, _, _))
.WillOnce((Return(mobile_apis::Result::SUCCESS)));
- EXPECT_CALL(mock_message_helper_, VerifyImageVrHelpItems(vr_help_array, _, _))
+ EXPECT_CALL(mock_message_helper_,
+ VerifyImageVrHelpItems(*vr_help_array, _, _))
.WillOnce((Return(mobile_apis::Result::ABORTED)));
EmptyExpectationsSetupHelper();
- EXPECT_CALL(*mock_app_, vr_help_title()).WillOnce(Return(&vr_help_title));
- EXPECT_CALL(*mock_app_, vr_help()).WillOnce(Return(&vr_help_array));
- EXPECT_CALL(*mock_app_, set_vr_help_title(vr_help_title));
- EXPECT_CALL(*mock_app_, set_vr_help(vr_help_array));
+ EXPECT_CALL(*mock_app_, vr_help_title()).WillOnce(Return(vr_help_title));
+ EXPECT_CALL(*mock_app_, vr_help()).WillOnce(Return(vr_help_array));
+ EXPECT_CALL(*mock_app_, set_vr_help_title(*vr_help_title));
+ EXPECT_CALL(*mock_app_, set_vr_help(*vr_help_array));
EXPECT_CALL(*mock_app_, set_menu_title(menu_title));
EXPECT_CALL(*mock_app_, set_menu_icon(menu_icon));
EXPECT_CALL(*mock_app_, app_id()).WillOnce(Return(kAppId));
@@ -809,16 +837,19 @@ TEST_F(SetGlobalPropertiesRequestTest, Run_VRIncorrectSyntax_Canceled) {
MessageSharedPtr msg = CreateMsgParams();
(*msg)[am::strings::params][am::strings::connection_key] = kConnectionKey;
(*msg)[am::strings::msg_params][am::strings::app_id] = kAppId;
- SmartObject vr_help_title("wrong syntax string\\n");
+ smart_objects::SmartObjectSPtr vr_help_title =
+ std::make_shared<SmartObject>("wrong syntax string\\n");
SmartObject menu_icon(smart_objects::SmartType_Map);
menu_icon[am::strings::value] = "1";
(*msg)[am::strings::msg_params][am::hmi_request::menu_icon] = menu_icon;
- SmartObject vr_help_array(smart_objects::SmartType_Array);
+ smart_objects::SmartObjectSPtr vr_help_array =
+ std::make_shared<SmartObject>(smart_objects::SmartType_Array);
VRArraySetupHelper(msg, vr_help_title, vr_help_array);
EXPECT_CALL(mock_message_helper_, VerifyImage(menu_icon, _, _))
.WillOnce((Return(mobile_apis::Result::SUCCESS)));
- EXPECT_CALL(mock_message_helper_, VerifyImageVrHelpItems(vr_help_array, _, _))
+ EXPECT_CALL(mock_message_helper_,
+ VerifyImageVrHelpItems(*vr_help_array, _, _))
.WillOnce((Return(mobile_apis::Result::SUCCESS)));
EXPECT_CALL(app_mngr_, RemoveAppFromTTSGlobalPropertiesList(_)).Times(0);
EmptyExpectationsSetupHelper();
@@ -869,15 +900,18 @@ TEST_F(SetGlobalPropertiesRequestTest, Run_VRMissingArray_Canceled) {
TEST_F(SetGlobalPropertiesRequestTest, Run_VRWrongOrder_Canceled) {
MessageSharedPtr msg = CreateMsgParams();
- SmartObject vr_help_title("yes");
- SmartObject vr_help_array(smart_objects::SmartType_Array);
+ smart_objects::SmartObjectSPtr vr_help_title =
+ std::make_shared<SmartObject>("yes");
+ smart_objects::SmartObjectSPtr vr_help_array =
+ std::make_shared<SmartObject>(smart_objects::SmartType_Array);
VRArraySetupHelper(msg, vr_help_title, vr_help_array);
- vr_help_array[1] = SmartObject(smart_objects::SmartType_Map);
- vr_help_array[1][am::strings::text] = "two";
- vr_help_array[1][am::strings::position] = 3u;
- (*msg)[am::strings::msg_params][am::strings::vr_help] = vr_help_array;
+ (*vr_help_array)[1] = SmartObject(smart_objects::SmartType_Map);
+ (*vr_help_array)[1][am::strings::text] = "two";
+ (*vr_help_array)[1][am::strings::position] = 3u;
+ (*msg)[am::strings::msg_params][am::strings::vr_help] = *vr_help_array;
- EXPECT_CALL(mock_message_helper_, VerifyImageVrHelpItems(vr_help_array, _, _))
+ EXPECT_CALL(mock_message_helper_,
+ VerifyImageVrHelpItems(*vr_help_array, _, _))
.WillOnce((Return(mobile_apis::Result::SUCCESS)));
EXPECT_CALL(app_mngr_, RemoveAppFromTTSGlobalPropertiesList(kConnectionKey));
EmptyExpectationsSetupHelper();
@@ -890,9 +924,10 @@ TEST_F(SetGlobalPropertiesRequestTest, Run_VRWrongOrder_Canceled) {
TEST_F(SetGlobalPropertiesRequestTest, Run_NoVR_SUCCESS) {
MessageSharedPtr msg = CreateMsgParams();
- SmartObject keyboard_properties(smart_objects::SmartType_Map);
+ smart_objects::SmartObjectSPtr keyboard_properties =
+ std::make_shared<SmartObject>(smart_objects::SmartType_Map);
(*msg)[am::strings::msg_params][am::hmi_request::keyboard_properties] =
- keyboard_properties;
+ *keyboard_properties;
SmartObject menu_title("Menu_Title");
(*msg)[am::strings::msg_params][am::hmi_request::menu_title] = menu_title;
@@ -902,7 +937,9 @@ TEST_F(SetGlobalPropertiesRequestTest, Run_NoVR_SUCCESS) {
EXPECT_CALL(app_mngr_, RemoveAppFromTTSGlobalPropertiesList(kConnectionKey));
EXPECT_CALL(*mock_app_, set_menu_title(menu_title));
EXPECT_CALL(*mock_app_, set_menu_icon(_)).Times(0);
- EXPECT_CALL(*mock_app_, set_keyboard_props(keyboard_properties));
+ EXPECT_CALL(*mock_app_, set_keyboard_props(*keyboard_properties));
+ EXPECT_CALL(*mock_app_, keyboard_props())
+ .WillOnce(Return(keyboard_properties));
EXPECT_CALL(*mock_app_, app_id()).WillOnce(Return(kAppId));
EXPECT_CALL(
@@ -921,15 +958,19 @@ TEST_F(SetGlobalPropertiesRequestTest, Run_NoVR_SUCCESS) {
TEST_F(SetGlobalPropertiesRequestTest, Run_VRCouldNotGenerate_INVALID_DATA) {
MessageSharedPtr msg = CreateMsgParams();
- SmartObject keyboard_properties(smart_objects::SmartType_Map);
+ smart_objects::SmartObjectSPtr keyboard_properties =
+ std::make_shared<SmartObject>(smart_objects::SmartType_Map);
(*msg)[am::strings::msg_params][am::hmi_request::keyboard_properties] =
- keyboard_properties;
+ *keyboard_properties;
SmartObject menu_title("Menu_Title");
(*msg)[am::strings::msg_params][am::hmi_request::menu_title] = menu_title;
EXPECT_CALL(app_mngr_, application(kConnectionKey))
.WillOnce(Return(mock_app_));
EXPECT_CALL(app_mngr_, RemoveAppFromTTSGlobalPropertiesList(kConnectionKey));
+ EXPECT_CALL(*mock_app_, set_keyboard_props(*keyboard_properties));
+ EXPECT_CALL(*mock_app_, keyboard_props())
+ .WillOnce(Return(std::shared_ptr<SmartObject>()));
EXPECT_CALL(*mock_app_, set_menu_title(menu_title));
std::shared_ptr<SetGlobalPropertiesRequest> command(
@@ -951,6 +992,8 @@ TEST_F(SetGlobalPropertiesRequestTest, Run_NoVRNoDataNoDefault_Canceled) {
EXPECT_CALL(*mock_app_, set_menu_title(_)).Times(0);
EXPECT_CALL(*mock_app_, set_menu_icon(_)).Times(0);
EXPECT_CALL(*mock_app_, set_keyboard_props(_));
+ EXPECT_CALL(*mock_app_, keyboard_props())
+ .WillOnce(Return(std::shared_ptr<SmartObject>()));
EXPECT_CALL(*mock_app_, app_id());
EXPECT_CALL(
@@ -980,6 +1023,8 @@ TEST_F(SetGlobalPropertiesRequestTest, Run_NoVRNoDataDefaultCreated_SUCCESS) {
EXPECT_CALL(*mock_app_, set_menu_title(_)).Times(0);
EXPECT_CALL(*mock_app_, set_menu_icon(_)).Times(0);
EXPECT_CALL(*mock_app_, set_keyboard_props(keyboard_properties));
+ EXPECT_CALL(*mock_app_, keyboard_props())
+ .WillOnce(Return(std::shared_ptr<SmartObject>()));
EXPECT_CALL(*mock_app_, app_id()).WillOnce(Return(kAppId));
EXPECT_CALL(
mock_hmi_interfaces_,
@@ -1014,6 +1059,8 @@ TEST_F(SetGlobalPropertiesRequestTest, Run_NoVRNoDataFromSynonyms_SUCCESS) {
EXPECT_CALL(*mock_app_, set_menu_title(_)).Times(0);
EXPECT_CALL(*mock_app_, set_menu_icon(_)).Times(0);
EXPECT_CALL(*mock_app_, set_keyboard_props(keyboard_properties));
+ EXPECT_CALL(*mock_app_, keyboard_props())
+ .WillOnce(Return(std::shared_ptr<SmartObject>()));
EXPECT_CALL(*mock_app_, app_id()).WillOnce(Return(kAppId));
EXPECT_CALL(
mock_hmi_interfaces_,
@@ -1030,25 +1077,28 @@ TEST_F(SetGlobalPropertiesRequestTest, Run_NoVRNoDataFromSynonyms_SUCCESS) {
TEST_F(SetGlobalPropertiesRequestTest, Run_TTSHelpAndTimeout_SUCCESS) {
MessageSharedPtr msg = CreateMsgParams();
- SmartObject help_prompt(smart_objects::SmartType_Array);
- help_prompt[0][am::strings::text] = "Help_Prompt_One";
- (*msg)[am::strings::msg_params][am::strings::help_prompt] = help_prompt;
- SmartObject timeout_prompt(smart_objects::SmartType_Array);
- timeout_prompt[0][am::strings::text] = "Timeout_Prompt_One";
- (*msg)[am::strings::msg_params][am::strings::timeout_prompt] = timeout_prompt;
+ smart_objects::SmartObjectSPtr help_prompt =
+ std::make_shared<SmartObject>(smart_objects::SmartType_Array);
+ (*help_prompt)[0][am::strings::text] = "Help_Prompt_One";
+ (*msg)[am::strings::msg_params][am::strings::help_prompt] = *help_prompt;
+ smart_objects::SmartObjectSPtr timeout_prompt =
+ std::make_shared<SmartObject>(smart_objects::SmartType_Array);
+ (*timeout_prompt)[0][am::strings::text] = "Timeout_Prompt_One";
+ (*msg)[am::strings::msg_params][am::strings::timeout_prompt] =
+ *timeout_prompt;
EXPECT_CALL(app_mngr_, application(kConnectionKey))
.WillOnce(Return(mock_app_));
EXPECT_CALL(mock_message_helper_, VerifyImageVrHelpItems(_, _, _)).Times(0);
- EXPECT_CALL(mock_message_helper_, VerifyTtsFiles(help_prompt, _, _))
+ EXPECT_CALL(mock_message_helper_, VerifyTtsFiles(*help_prompt, _, _))
.WillOnce(Return(mobile_apis::Result::SUCCESS));
- EXPECT_CALL(mock_message_helper_, VerifyTtsFiles(timeout_prompt, _, _))
+ EXPECT_CALL(mock_message_helper_, VerifyTtsFiles(*timeout_prompt, _, _))
.WillOnce(Return(mobile_apis::Result::SUCCESS));
EXPECT_CALL(app_mngr_, RemoveAppFromTTSGlobalPropertiesList(kConnectionKey));
- EXPECT_CALL(*mock_app_, set_help_prompt(help_prompt));
- EXPECT_CALL(*mock_app_, help_prompt()).WillOnce(Return(&help_prompt));
- EXPECT_CALL(*mock_app_, set_timeout_prompt(timeout_prompt));
- EXPECT_CALL(*mock_app_, timeout_prompt()).WillOnce(Return(&timeout_prompt));
+ EXPECT_CALL(*mock_app_, set_help_prompt(*help_prompt));
+ EXPECT_CALL(*mock_app_, help_prompt()).WillOnce(Return(help_prompt));
+ EXPECT_CALL(*mock_app_, set_timeout_prompt(*timeout_prompt));
+ EXPECT_CALL(*mock_app_, timeout_prompt()).WillOnce(Return(timeout_prompt));
EXPECT_CALL(*mock_app_, app_id()).WillOnce(Return(kAppId));
EXPECT_CALL(
@@ -1072,18 +1122,19 @@ TEST_F(SetGlobalPropertiesRequestTest, Run_TTSHelpAndTimeout_SUCCESS) {
TEST_F(SetGlobalPropertiesRequestTest, Run_TTSOnlyHelp_SUCCESS) {
MessageSharedPtr msg = CreateMsgParams();
- SmartObject help_prompt(smart_objects::SmartType_Array);
- help_prompt[0][am::strings::text] = "Help_Prompt_One";
- (*msg)[am::strings::msg_params][am::strings::help_prompt] = help_prompt;
+ smart_objects::SmartObjectSPtr help_prompt =
+ std::make_shared<SmartObject>(smart_objects::SmartType_Array);
+ (*help_prompt)[0][am::strings::text] = "Help_Prompt_One";
+ (*msg)[am::strings::msg_params][am::strings::help_prompt] = *help_prompt;
EXPECT_CALL(app_mngr_, application(kConnectionKey))
.WillOnce(Return(mock_app_));
EXPECT_CALL(mock_message_helper_, VerifyImageVrHelpItems(_, _, _)).Times(0);
- EXPECT_CALL(mock_message_helper_, VerifyTtsFiles(help_prompt, _, _))
+ EXPECT_CALL(mock_message_helper_, VerifyTtsFiles(*help_prompt, _, _))
.WillOnce(Return(mobile_apis::Result::SUCCESS));
EXPECT_CALL(app_mngr_, RemoveAppFromTTSGlobalPropertiesList(kConnectionKey));
- EXPECT_CALL(*mock_app_, set_help_prompt(help_prompt));
- EXPECT_CALL(*mock_app_, help_prompt()).WillOnce(Return(&help_prompt));
+ EXPECT_CALL(*mock_app_, set_help_prompt(*help_prompt));
+ EXPECT_CALL(*mock_app_, help_prompt()).WillOnce(Return(help_prompt));
EXPECT_CALL(*mock_app_, set_timeout_prompt(_)).Times(0);
EXPECT_CALL(*mock_app_, timeout_prompt()).Times(0);
EXPECT_CALL(*mock_app_, app_id()).WillOnce(Return(kAppId));
@@ -1106,20 +1157,22 @@ TEST_F(SetGlobalPropertiesRequestTest, Run_TTSOnlyHelp_SUCCESS) {
TEST_F(SetGlobalPropertiesRequestTest, Run_TTSOnlyTimeout_SUCCESS) {
MessageSharedPtr msg = CreateMsgParams();
- SmartObject timeout_prompt(smart_objects::SmartType_Array);
- timeout_prompt[0][am::strings::text] = "Timeout_Prompt_One";
- (*msg)[am::strings::msg_params][am::strings::timeout_prompt] = timeout_prompt;
+ smart_objects::SmartObjectSPtr timeout_prompt =
+ std::make_shared<SmartObject>(smart_objects::SmartType_Array);
+ (*timeout_prompt)[0][am::strings::text] = "Timeout_Prompt_One";
+ (*msg)[am::strings::msg_params][am::strings::timeout_prompt] =
+ *timeout_prompt;
EXPECT_CALL(app_mngr_, application(kConnectionKey))
.WillOnce(Return(mock_app_));
EXPECT_CALL(mock_message_helper_, VerifyImageVrHelpItems(_, _, _)).Times(0);
- EXPECT_CALL(mock_message_helper_, VerifyTtsFiles(timeout_prompt, _, _))
+ EXPECT_CALL(mock_message_helper_, VerifyTtsFiles(*timeout_prompt, _, _))
.WillOnce(Return(mobile_apis::Result::SUCCESS));
EXPECT_CALL(app_mngr_, RemoveAppFromTTSGlobalPropertiesList(kConnectionKey));
EXPECT_CALL(*mock_app_, set_help_prompt(_)).Times(0);
EXPECT_CALL(*mock_app_, help_prompt()).Times(0);
- EXPECT_CALL(*mock_app_, set_timeout_prompt(timeout_prompt));
- EXPECT_CALL(*mock_app_, timeout_prompt()).WillOnce(Return(&timeout_prompt));
+ EXPECT_CALL(*mock_app_, set_timeout_prompt(*timeout_prompt));
+ EXPECT_CALL(*mock_app_, timeout_prompt()).WillOnce(Return(timeout_prompt));
EXPECT_CALL(*mock_app_, app_id()).WillOnce(Return(kAppId));
EXPECT_CALL(
mock_hmi_interfaces_,
@@ -1335,11 +1388,12 @@ TEST_F(SetGlobalPropertiesRequestTest,
ON_CALL(app_mngr_, application(kConnectionKey))
.WillByDefault(Return(mock_app_));
- auto saved_keyboard_props = SmartObject(smart_objects::SmartType_Map);
- saved_keyboard_props[am::hmi_request::keyboard_layout] =
+ auto saved_keyboard_props =
+ std::make_shared<SmartObject>(smart_objects::SmartType_Map);
+ (*saved_keyboard_props)[am::hmi_request::keyboard_layout] =
hmi_apis::Common_KeyboardLayout::QWERTZ;
EXPECT_CALL(*mock_app_, keyboard_props())
- .WillOnce(Return(&saved_keyboard_props));
+ .WillOnce(Return(saved_keyboard_props));
const int num_allowed_keys = 0;
auto display_capabilities = GetCapabilitiesForConfigurableKeyboard(
@@ -1371,6 +1425,9 @@ TEST_F(SetGlobalPropertiesRequestTest,
std::shared_ptr<SetGlobalPropertiesRequest> command(
CreateCommand<SetGlobalPropertiesRequest>(msg));
+ EXPECT_CALL(*mock_app_, keyboard_props())
+ .WillOnce(Return(std::shared_ptr<SmartObject>()));
+
ExpectInvalidData();
command->Run();
@@ -1421,6 +1478,8 @@ TEST_F(SetGlobalPropertiesRequestTest,
CreateCommand<SetGlobalPropertiesRequest>(msg));
EXPECT_CALL(*mock_app_, set_keyboard_props(keyboard_properties));
+ EXPECT_CALL(*mock_app_, keyboard_props())
+ .WillOnce(Return(std::shared_ptr<SmartObject>()));
command->Run();
}
@@ -1433,11 +1492,12 @@ TEST_F(
ON_CALL(app_mngr_, application(kConnectionKey))
.WillByDefault(Return(mock_app_));
- auto saved_keyboard_props = SmartObject(smart_objects::SmartType_Map);
- saved_keyboard_props[am::hmi_request::keyboard_layout] =
+ auto saved_keyboard_props =
+ std::make_shared<SmartObject>(smart_objects::SmartType_Map);
+ (*saved_keyboard_props)[am::hmi_request::keyboard_layout] =
hmi_apis::Common_KeyboardLayout::QWERTZ;
EXPECT_CALL(*mock_app_, keyboard_props())
- .WillRepeatedly(Return(&saved_keyboard_props));
+ .WillRepeatedly(Return(saved_keyboard_props));
const int num_allowed_keys = 3;
auto display_capabilities = GetCapabilitiesForConfigurableKeyboard(
@@ -1472,6 +1532,8 @@ TEST_F(
.WillByDefault(Return(mock_app_));
ON_CALL(*mock_app_, display_capabilities())
.WillByDefault(Return(display_capabilities));
+ ON_CALL(*mock_app_, keyboard_props())
+ .WillByDefault(Return(std::shared_ptr<SmartObject>()));
std::shared_ptr<SetGlobalPropertiesRequest> command(
CreateCommand<SetGlobalPropertiesRequest>(msg));
@@ -1494,6 +1556,8 @@ TEST_F(SetGlobalPropertiesRequestTest,
CreateCommand<SetGlobalPropertiesRequest>(msg));
EXPECT_CALL(*mock_app_, set_keyboard_props(keyboard_properties));
+ EXPECT_CALL(*mock_app_, keyboard_props())
+ .WillOnce(Return(std::shared_ptr<SmartObject>()));
command->Run();
}
@@ -1504,11 +1568,12 @@ TEST_F(SetGlobalPropertiesRequestTest,
ON_CALL(app_mngr_, application(kConnectionKey))
.WillByDefault(Return(mock_app_));
- auto saved_keyboard_props = SmartObject(smart_objects::SmartType_Map);
- saved_keyboard_props[am::hmi_response::language] =
+ auto saved_keyboard_props =
+ std::make_shared<SmartObject>(smart_objects::SmartType_Map);
+ (*saved_keyboard_props)[am::hmi_response::language] =
hmi_apis::Common_Language::EN_GB;
EXPECT_CALL(*mock_app_, keyboard_props())
- .WillRepeatedly(Return(&saved_keyboard_props));
+ .WillRepeatedly(Return(saved_keyboard_props));
std::shared_ptr<SetGlobalPropertiesRequest> command(
CreateCommand<SetGlobalPropertiesRequest>(msg));
@@ -1534,6 +1599,8 @@ TEST_F(SetGlobalPropertiesRequestTest,
CreateCommand<SetGlobalPropertiesRequest>(msg));
EXPECT_CALL(*mock_app_, set_keyboard_props(keyboard_properties));
+ EXPECT_CALL(*mock_app_, keyboard_props())
+ .WillOnce(Return(std::shared_ptr<SmartObject>()));
command->Run();
}
@@ -1545,11 +1612,12 @@ TEST_F(
ON_CALL(app_mngr_, application(kConnectionKey))
.WillByDefault(Return(mock_app_));
- auto saved_keyboard_props = SmartObject(smart_objects::SmartType_Map);
- saved_keyboard_props[am::hmi_request::mask_input_characters] =
+ auto saved_keyboard_props =
+ std::make_shared<SmartObject>(smart_objects::SmartType_Map);
+ (*saved_keyboard_props)[am::hmi_request::mask_input_characters] =
hmi_apis::Common_KeyboardInputMask::USER_CHOICE_INPUT_KEY_MASK;
EXPECT_CALL(*mock_app_, keyboard_props())
- .WillRepeatedly(Return(&saved_keyboard_props));
+ .WillRepeatedly(Return(saved_keyboard_props));
std::shared_ptr<SetGlobalPropertiesRequest> command(
CreateCommand<SetGlobalPropertiesRequest>(msg));
@@ -1569,14 +1637,16 @@ TEST_F(SetGlobalPropertiesRequestTest,
ON_CALL(app_mngr_, application(kConnectionKey))
.WillByDefault(Return(mock_app_));
- auto saved_keyboard_props = SmartObject(smart_objects::SmartType_Map);
+ auto saved_keyboard_props =
+ std::make_shared<SmartObject>(smart_objects::SmartType_Map);
SmartObject autocomplete_list(smart_objects::SmartType_Array);
autocomplete_list[0] = "first";
autocomplete_list[1] = "second";
- saved_keyboard_props[am::hmi_request::auto_complete_list] = autocomplete_list;
+ (*saved_keyboard_props)[am::hmi_request::auto_complete_list] =
+ autocomplete_list;
EXPECT_CALL(*mock_app_, keyboard_props())
- .WillRepeatedly(Return(&saved_keyboard_props));
+ .WillRepeatedly(Return(saved_keyboard_props));
std::shared_ptr<SetGlobalPropertiesRequest> command(
CreateCommand<SetGlobalPropertiesRequest>(msg));
@@ -1607,10 +1677,11 @@ TEST_F(
SmartObject old_list(smart_objects::SmartType_Array);
old_list[0] = "old_value";
old_list[1] = "another_old_value";
- auto saved_keyboard_props = SmartObject(smart_objects::SmartType_Map);
- saved_keyboard_props[am::hmi_request::auto_complete_list] = old_list;
+ auto saved_keyboard_props =
+ std::make_shared<SmartObject>(smart_objects::SmartType_Map);
+ (*saved_keyboard_props)[am::hmi_request::auto_complete_list] = old_list;
EXPECT_CALL(*mock_app_, keyboard_props())
- .WillRepeatedly(Return(&saved_keyboard_props));
+ .WillRepeatedly(Return(saved_keyboard_props));
std::shared_ptr<SetGlobalPropertiesRequest> command(
CreateCommand<SetGlobalPropertiesRequest>(msg));
@@ -1635,10 +1706,11 @@ TEST_F(
SmartObject old_list(smart_objects::SmartType_Array);
old_list[0] = "old_value";
old_list[1] = "another_old_value";
- auto saved_keyboard_props = SmartObject(smart_objects::SmartType_Map);
- saved_keyboard_props[am::hmi_request::auto_complete_list] = old_list;
+ auto saved_keyboard_props =
+ std::make_shared<SmartObject>(smart_objects::SmartType_Map);
+ (*saved_keyboard_props)[am::hmi_request::auto_complete_list] = old_list;
EXPECT_CALL(*mock_app_, keyboard_props())
- .WillRepeatedly(Return(&saved_keyboard_props));
+ .WillRepeatedly(Return(saved_keyboard_props));
std::shared_ptr<SetGlobalPropertiesRequest> command(
CreateCommand<SetGlobalPropertiesRequest>(msg));
diff --git a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/mobile/simple_response_commands_test.cc b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/mobile/simple_response_commands_test.cc
index d091fdc8c5..a6bdf2a874 100644
--- a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/mobile/simple_response_commands_test.cc
+++ b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/mobile/simple_response_commands_test.cc
@@ -149,7 +149,6 @@ TYPED_TEST(MobileResponseWithUnsubscribeCommandsTest,
std::shared_ptr<typename TestFixture::UnsubscribeCommand> command =
this->template CreateCommand<typename TestFixture::UnsubscribeCommand>();
- EXPECT_CALL(this->app_mngr_, UnsubscribeAppFromSoftButtons(_));
EXPECT_CALL(this->mock_rpc_service_, SendMessageToMobile(NotNull(), _));
command->Init();
diff --git a/src/components/application_manager/rpc_plugins/vehicle_info_plugin/src/commands/mobile/subscribe_vehicle_data_request.cc b/src/components/application_manager/rpc_plugins/vehicle_info_plugin/src/commands/mobile/subscribe_vehicle_data_request.cc
index db3922e1a2..da79342681 100644
--- a/src/components/application_manager/rpc_plugins/vehicle_info_plugin/src/commands/mobile/subscribe_vehicle_data_request.cc
+++ b/src/components/application_manager/rpc_plugins/vehicle_info_plugin/src/commands/mobile/subscribe_vehicle_data_request.cc
@@ -226,9 +226,12 @@ bool SubscribeVehicleDataRequest::SubscribePendingVehicleData(
} else {
auto res_code =
static_cast<hmi_apis::Common_VehicleDataResultCode::eType>(
- msg_params[*vi_name][strings::result_code].asInt());
+ msg_params[ConvertRequestToResponseName(*vi_name)]
+ [strings::result_code]
+ .asInt());
if (skiped_result_codes.find(res_code) != skiped_result_codes.end()) {
- msg_params[*vi_name][strings::result_code] = res_code;
+ msg_params[ConvertRequestToResponseName(*vi_name)]
+ [strings::result_code] = res_code;
vi_name = vi_waiting_for_subscribe_.erase(vi_name);
} else {
++vi_name;
@@ -325,11 +328,13 @@ void SubscribeVehicleDataRequest::CheckVISubscriptions(
}
SDL_LOG_DEBUG("App with connection key "
<< connection_key()
- << " have been subscribed for VehicleDataType: "
+ << " has been subscribed for VehicleDataType: "
<< key_name);
vi_already_subscribed_by_another_apps_.insert(key_name);
- out_response_params[key_name][strings::data_type] = vd_type;
- out_response_params[key_name][strings::result_code] =
+ const std::string converted_name =
+ ConvertRequestToResponseName(key_name);
+ out_response_params[converted_name][strings::data_type] = vd_type;
+ out_response_params[converted_name][strings::result_code] =
mobile_apis::VehicleDataResultCode::VDRC_SUCCESS;
++subscribed_items;
};
diff --git a/src/components/application_manager/rpc_plugins/vehicle_info_plugin/src/commands/mobile/unsubscribe_vehicle_data_request.cc b/src/components/application_manager/rpc_plugins/vehicle_info_plugin/src/commands/mobile/unsubscribe_vehicle_data_request.cc
index e04e529a67..e6d0ff5d4c 100644
--- a/src/components/application_manager/rpc_plugins/vehicle_info_plugin/src/commands/mobile/unsubscribe_vehicle_data_request.cc
+++ b/src/components/application_manager/rpc_plugins/vehicle_info_plugin/src/commands/mobile/unsubscribe_vehicle_data_request.cc
@@ -98,7 +98,8 @@ void UnsubscribeVehicleDataRequest::Run() {
"VehicleDataType: "
<< key_name);
vi_still_subscribed_by_another_apps_.insert(key_name);
- response_params_[key_name][strings::result_code] =
+ const std::string converted_name = ConvertRequestToResponseName(key_name);
+ response_params_[converted_name][strings::result_code] =
mobile_apis::VehicleDataResultCode::VDRC_SUCCESS;
};
diff --git a/src/components/application_manager/rpc_plugins/vehicle_info_plugin/src/vehicle_info_pending_resumption_handler.cc b/src/components/application_manager/rpc_plugins/vehicle_info_plugin/src/vehicle_info_pending_resumption_handler.cc
index c9affa5760..34f5401bff 100644
--- a/src/components/application_manager/rpc_plugins/vehicle_info_plugin/src/vehicle_info_pending_resumption_handler.cc
+++ b/src/components/application_manager/rpc_plugins/vehicle_info_plugin/src/vehicle_info_pending_resumption_handler.cc
@@ -223,6 +223,12 @@ void VehicleInfoPendingResumptionHandler::HandleOnEvent(
custom_vehicle_data_manager_.CreateMobileMessageParams(converted_msg_params);
response_message[strings::msg_params] = converted_msg_params;
+ if (converted_msg_params.keyExists(strings::cluster_modes)) {
+ response_message[strings::msg_params][strings::cluster_mode_status] =
+ response_message[strings::msg_params][strings::cluster_modes];
+ response_message[strings::msg_params].erase(strings::cluster_modes);
+ }
+
const auto vs_count_in_response =
response_message[application_manager::strings::msg_params].length();
diff --git a/src/components/application_manager/src/app_launch/app_launch_ctrl_impl.cc b/src/components/application_manager/src/app_launch/app_launch_ctrl_impl.cc
index 4dafe9a8e6..05231b66b1 100644
--- a/src/components/application_manager/src/app_launch/app_launch_ctrl_impl.cc
+++ b/src/components/application_manager/src/app_launch/app_launch_ctrl_impl.cc
@@ -83,6 +83,7 @@ bool HmiLevelSorter(const std::pair<int32_t, ApplicationDataPtr>& lval,
void AppLaunchCtrlImpl::OnDeviceConnected(const std::string& device_mac) {
SDL_LOG_AUTO_TRACE();
+
std::vector<ApplicationDataPtr> apps_on_device =
app_launch_data_.GetApplicationDataByDevice(device_mac);
std::vector<std::pair<int32_t, ApplicationDataPtr> > apps_hmi_levels;
@@ -102,6 +103,7 @@ void AppLaunchCtrlImpl::OnDeviceConnected(const std::string& device_mac) {
std::back_inserter(apps_on_device),
GetAppFromHmiLevelPair);
if (apps_on_device.size() > 0) {
+ sync_primitives::AutoLock lock(device_apps_launcher_lock_);
device_apps_launcher_.LaunchAppsOnDevice(device_mac, apps_on_device);
} else {
SDL_LOG_DEBUG("No apps in saved for device " << device_mac);
@@ -112,4 +114,11 @@ void AppLaunchCtrlImpl::OnMasterReset() {
SDL_LOG_AUTO_TRACE();
app_launch_data_.Clear();
}
+
+void AppLaunchCtrlImpl::Stop() {
+ SDL_LOG_AUTO_TRACE();
+ sync_primitives::AutoLock lock(device_apps_launcher_lock_);
+ device_apps_launcher_.StopLaunchingAppsOnAllDevices();
+}
+
} // namespace app_launch
diff --git a/src/components/application_manager/src/app_launch/device_apps_launcher.cc b/src/components/application_manager/src/app_launch/device_apps_launcher.cc
index 5f36e41efb..1bf2bbf46d 100644
--- a/src/components/application_manager/src/app_launch/device_apps_launcher.cc
+++ b/src/components/application_manager/src/app_launch/device_apps_launcher.cc
@@ -157,6 +157,20 @@ bool DeviceAppsLauncherImpl::StopLaunchingAppsOnDevice(
return true;
}
+void DeviceAppsLauncherImpl::StopLaunchingAppsOnAllDevices() {
+ SDL_LOG_AUTO_TRACE();
+ sync_primitives::AutoLock lock(launchers_lock_);
+
+ std::for_each(works_launchers_.begin(),
+ works_launchers_.end(),
+ [this](LauncherPtr launcher) {
+ launcher->Clear();
+ free_launchers_.push_back(launcher);
+ });
+
+ works_launchers_.clear();
+}
+
bool DeviceAppsLauncher::LaunchAppsOnDevice(
const std::string& device_mac,
const std::vector<ApplicationDataPtr>& applications_to_launch) {
@@ -176,6 +190,10 @@ bool DeviceAppsLauncher::StopLaunchingAppsOnDevice(
return impl_->StopLaunchingAppsOnDevice(device_mac);
}
+void DeviceAppsLauncher::StopLaunchingAppsOnAllDevices() {
+ impl_->StopLaunchingAppsOnAllDevices();
+}
+
const AppLaunchSettings& DeviceAppsLauncher::settings() const {
return settings_;
}
diff --git a/src/components/application_manager/src/application_data_impl.cc b/src/components/application_manager/src/application_data_impl.cc
index 1d6ea8afe8..4d2ec30719 100644
--- a/src/components/application_manager/src/application_data_impl.cc
+++ b/src/components/application_manager/src/application_data_impl.cc
@@ -67,34 +67,14 @@ InitialApplicationDataImpl::InitialApplicationDataImpl()
, language_(mobile_api::Language::INVALID_ENUM)
, ui_language_(mobile_api::Language::INVALID_ENUM) {}
-InitialApplicationDataImpl::~InitialApplicationDataImpl() {
- if (app_types_) {
- delete app_types_;
- app_types_ = NULL;
- }
-
- if (vr_synonyms_) {
- delete vr_synonyms_;
- vr_synonyms_ = NULL;
- }
-
- if (tts_name_) {
- delete tts_name_;
- tts_name_ = NULL;
- }
+InitialApplicationDataImpl::~InitialApplicationDataImpl() {}
- if (ngn_media_screen_name_) {
- delete ngn_media_screen_name_;
- ngn_media_screen_name_ = NULL;
- }
-}
-
-const smart_objects::SmartObject* InitialApplicationDataImpl::app_types()
+const smart_objects::SmartObjectSPtr InitialApplicationDataImpl::app_types()
const {
return app_types_;
}
-const smart_objects::SmartObject* InitialApplicationDataImpl::vr_synonyms()
+const smart_objects::SmartObjectSPtr InitialApplicationDataImpl::vr_synonyms()
const {
return vr_synonyms_;
}
@@ -103,11 +83,12 @@ std::string InitialApplicationDataImpl::policy_app_id() const {
return mobile_app_id_;
}
-const smart_objects::SmartObject* InitialApplicationDataImpl::tts_name() const {
+const smart_objects::SmartObjectSPtr InitialApplicationDataImpl::tts_name()
+ const {
return tts_name_;
}
-const smart_objects::SmartObject*
+const smart_objects::SmartObjectSPtr
InitialApplicationDataImpl::ngn_media_screen_name() const {
return ngn_media_screen_name_;
}
@@ -128,19 +109,12 @@ const utils::SemanticVersion& InitialApplicationDataImpl::msg_version() const {
void InitialApplicationDataImpl::set_app_types(
const smart_objects::SmartObject& app_types) {
- if (app_types_) {
- delete app_types_;
- }
-
- app_types_ = new smart_objects::SmartObject(app_types);
+ app_types_.reset(new smart_objects::SmartObject(app_types));
}
void InitialApplicationDataImpl::set_vr_synonyms(
const smart_objects::SmartObject& vr_synonyms) {
- if (vr_synonyms_) {
- delete vr_synonyms_;
- }
- vr_synonyms_ = new smart_objects::SmartObject(vr_synonyms);
+ vr_synonyms_.reset(new smart_objects::SmartObject(vr_synonyms));
}
void InitialApplicationDataImpl::set_mobile_app_id(
@@ -150,20 +124,12 @@ void InitialApplicationDataImpl::set_mobile_app_id(
void InitialApplicationDataImpl::set_tts_name(
const smart_objects::SmartObject& tts_name) {
- if (tts_name_) {
- delete tts_name_;
- }
-
- tts_name_ = new smart_objects::SmartObject(tts_name);
+ tts_name_.reset(new smart_objects::SmartObject(tts_name));
}
void InitialApplicationDataImpl::set_ngn_media_screen_name(
const smart_objects::SmartObject& ngn_name) {
- if (ngn_media_screen_name_) {
- delete ngn_media_screen_name_;
- }
-
- ngn_media_screen_name_ = new smart_objects::SmartObject(ngn_name);
+ ngn_media_screen_name_.reset(new smart_objects::SmartObject(ngn_name));
}
void InitialApplicationDataImpl::set_language(
@@ -192,17 +158,7 @@ InitialApplicationDataImpl::perform_interaction_layout() const {
}
DynamicApplicationDataImpl::DynamicApplicationDataImpl()
- : help_prompt_(nullptr)
- , timeout_prompt_(nullptr)
- , vr_help_title_(nullptr)
- , vr_help_(nullptr)
- , tbt_state_(mobile_api::TBTState::INVALID_ENUM)
- , show_command_(nullptr)
- , keyboard_props_(nullptr)
- , menu_title_(nullptr)
- , menu_icon_(nullptr)
- , menu_layout_(nullptr)
- , tbt_show_command_(nullptr)
+ : tbt_state_(mobile_api::TBTState::INVALID_ENUM)
, commands_()
, commands_lock_ptr_(std::make_shared<sync_primitives::RecursiveLock>())
, sub_menu_()
@@ -222,51 +178,6 @@ DynamicApplicationDataImpl::DynamicApplicationDataImpl()
, display_capabilities_builder_(*this) {}
DynamicApplicationDataImpl::~DynamicApplicationDataImpl() {
- if (help_prompt_) {
- delete help_prompt_;
- help_prompt_ = NULL;
- }
-
- if (timeout_prompt_) {
- delete timeout_prompt_;
- timeout_prompt_ = NULL;
- }
-
- if (vr_help_title_) {
- delete vr_help_title_;
- vr_help_title_ = NULL;
- }
-
- if (vr_help_) {
- delete vr_help_;
- vr_help_ = NULL;
- }
-
- if (show_command_) {
- delete show_command_;
- show_command_ = NULL;
- }
-
- if (keyboard_props_) {
- delete keyboard_props_;
- keyboard_props_ = NULL;
- }
-
- if (menu_title_) {
- delete menu_title_;
- menu_title_ = NULL;
- }
-
- if (menu_icon_) {
- delete menu_icon_;
- menu_icon_ = NULL;
- }
-
- if (tbt_show_command_) {
- delete tbt_show_command_;
- tbt_show_command_ = NULL;
- }
-
for (CommandsMap::iterator command_it = commands_.begin();
commands_.end() != command_it;
++command_it) {
@@ -301,22 +212,23 @@ DynamicApplicationDataImpl::~DynamicApplicationDataImpl() {
window_params_map_.clear();
}
-const smart_objects::SmartObject* DynamicApplicationDataImpl::help_prompt()
+const smart_objects::SmartObjectSPtr DynamicApplicationDataImpl::help_prompt()
const {
return help_prompt_;
}
-const smart_objects::SmartObject* DynamicApplicationDataImpl::timeout_prompt()
- const {
+const smart_objects::SmartObjectSPtr
+DynamicApplicationDataImpl::timeout_prompt() const {
return timeout_prompt_;
}
-const smart_objects::SmartObject* DynamicApplicationDataImpl::vr_help_title()
+const smart_objects::SmartObjectSPtr DynamicApplicationDataImpl::vr_help_title()
const {
return vr_help_title_;
}
-const smart_objects::SmartObject* DynamicApplicationDataImpl::vr_help() const {
+const smart_objects::SmartObjectSPtr DynamicApplicationDataImpl::vr_help()
+ const {
return vr_help_;
}
@@ -325,32 +237,32 @@ const mobile_api::TBTState::eType& DynamicApplicationDataImpl::tbt_state()
return tbt_state_;
}
-const smart_objects::SmartObject* DynamicApplicationDataImpl::show_command()
+const smart_objects::SmartObjectSPtr DynamicApplicationDataImpl::show_command()
const {
return show_command_;
}
-const smart_objects::SmartObject* DynamicApplicationDataImpl::tbt_show_command()
- const {
+const smart_objects::SmartObjectSPtr
+DynamicApplicationDataImpl::tbt_show_command() const {
return tbt_show_command_;
}
-const smart_objects::SmartObject* DynamicApplicationDataImpl::keyboard_props()
- const {
+const smart_objects::SmartObjectSPtr
+DynamicApplicationDataImpl::keyboard_props() const {
return keyboard_props_;
}
-const smart_objects::SmartObject* DynamicApplicationDataImpl::menu_title()
+const smart_objects::SmartObjectSPtr DynamicApplicationDataImpl::menu_title()
const {
return menu_title_;
}
-const smart_objects::SmartObject* DynamicApplicationDataImpl::menu_icon()
+const smart_objects::SmartObjectSPtr DynamicApplicationDataImpl::menu_icon()
const {
return menu_icon_;
}
-const smart_objects::SmartObject* DynamicApplicationDataImpl::menu_layout()
+const smart_objects::SmartObjectSPtr DynamicApplicationDataImpl::menu_layout()
const {
return menu_layout_;
}
@@ -479,48 +391,30 @@ void DynamicApplicationDataImpl::load_global_properties(
void DynamicApplicationDataImpl::set_help_prompt(
const smart_objects::SmartObject& help_prompt) {
- if (help_prompt_) {
- delete help_prompt_;
- }
- help_prompt_ = new smart_objects::SmartObject(help_prompt);
+ help_prompt_.reset(new smart_objects::SmartObject(help_prompt));
}
void DynamicApplicationDataImpl::set_timeout_prompt(
const smart_objects::SmartObject& timeout_prompt) {
- if (timeout_prompt_) {
- delete timeout_prompt_;
- }
- timeout_prompt_ = new smart_objects::SmartObject(timeout_prompt);
+ timeout_prompt_.reset(new smart_objects::SmartObject(timeout_prompt));
}
void DynamicApplicationDataImpl::set_vr_help_title(
const smart_objects::SmartObject& vr_help_title) {
- if (vr_help_title_) {
- delete vr_help_title_;
- }
- vr_help_title_ = new smart_objects::SmartObject(vr_help_title);
+ vr_help_title_.reset(new smart_objects::SmartObject(vr_help_title));
}
void DynamicApplicationDataImpl::reset_vr_help_title() {
- if (vr_help_title_) {
- delete vr_help_title_;
- vr_help_title_ = NULL;
- }
+ vr_help_title_.reset();
}
void DynamicApplicationDataImpl::set_vr_help(
const smart_objects::SmartObject& vr_help) {
- if (vr_help_) {
- delete vr_help_;
- }
- vr_help_ = new smart_objects::SmartObject(vr_help);
+ vr_help_.reset(new smart_objects::SmartObject(vr_help));
}
void DynamicApplicationDataImpl::reset_vr_help() {
- if (vr_help_) {
- delete vr_help_;
- }
- vr_help_ = NULL;
+ vr_help_.reset();
}
void DynamicApplicationDataImpl::set_tbt_state(
@@ -530,50 +424,32 @@ void DynamicApplicationDataImpl::set_tbt_state(
void DynamicApplicationDataImpl::set_show_command(
const smart_objects::SmartObject& show_command) {
- if (show_command_) {
- delete show_command_;
- }
- show_command_ = new smart_objects::SmartObject(show_command);
+ show_command_.reset(new smart_objects::SmartObject(show_command));
}
void DynamicApplicationDataImpl::set_tbt_show_command(
const smart_objects::SmartObject& tbt_show) {
- if (tbt_show_command_) {
- delete tbt_show_command_;
- }
- tbt_show_command_ = new smart_objects::SmartObject(tbt_show);
+ tbt_show_command_.reset(new smart_objects::SmartObject(tbt_show));
}
void DynamicApplicationDataImpl::set_keyboard_props(
const smart_objects::SmartObject& keyboard_props) {
- if (keyboard_props_) {
- delete keyboard_props_;
- }
- keyboard_props_ = new smart_objects::SmartObject(keyboard_props);
+ keyboard_props_.reset(new smart_objects::SmartObject(keyboard_props));
}
void DynamicApplicationDataImpl::set_menu_title(
const smart_objects::SmartObject& menu_title) {
- if (menu_title_) {
- delete menu_title_;
- }
- menu_title_ = new smart_objects::SmartObject(menu_title);
+ menu_title_.reset(new smart_objects::SmartObject(menu_title));
}
void DynamicApplicationDataImpl::set_menu_icon(
const smart_objects::SmartObject& menu_icon) {
- if (menu_icon_) {
- delete menu_icon_;
- }
- menu_icon_ = new smart_objects::SmartObject(menu_icon);
+ menu_icon_.reset(new smart_objects::SmartObject(menu_icon));
}
void DynamicApplicationDataImpl::set_menu_layout(
const smart_objects::SmartObject& menu_layout) {
- if (menu_layout_) {
- delete menu_layout_;
- }
- menu_layout_ = new smart_objects::SmartObject(menu_layout);
+ menu_layout_.reset(new smart_objects::SmartObject(menu_layout));
}
void DynamicApplicationDataImpl::set_day_color_scheme(
@@ -610,8 +486,7 @@ void DynamicApplicationDataImpl::set_display_capabilities(
(*display_capabilities_)[0][strings::window_capabilities];
}
- display_capabilities_.reset(
- new smart_objects::SmartObject(display_capabilities));
+ smart_objects::SmartObject merged_capabilities = display_capabilities;
auto get_window_index = [&tmp_window_capabilities](const WindowID window_id) {
const auto tmp_window_capabilities_arr = tmp_window_capabilities.asArray();
@@ -647,8 +522,11 @@ void DynamicApplicationDataImpl::set_display_capabilities(
}
}
- (*display_capabilities_)[0][strings::window_capabilities] =
+ merged_capabilities[0][strings::window_capabilities] =
tmp_window_capabilities;
+
+ display_capabilities_.reset(
+ new smart_objects::SmartObject(merged_capabilities));
}
void DynamicApplicationDataImpl::remove_window_capability(
@@ -924,20 +802,40 @@ void DynamicApplicationDataImpl::RemoveWindowInfo(const WindowID window_id) {
void DynamicApplicationDataImpl::AddChoiceSet(
uint32_t choice_set_id, const smart_objects::SmartObject& choice_set) {
- sync_primitives::AutoLock lock(choice_set_map_lock_ptr_);
- ChoiceSetMap::const_iterator it = choice_set_map_.find(choice_set_id);
- if (choice_set_map_.end() == it) {
- choice_set_map_[choice_set_id] = new smart_objects::SmartObject(choice_set);
+ bool is_choice_set_added = false;
+ {
+ sync_primitives::AutoLock lock(choice_set_map_lock_ptr_);
+ ChoiceSetMap::const_iterator it = choice_set_map_.find(choice_set_id);
+ if (choice_set_map_.end() == it) {
+ choice_set_map_[choice_set_id] =
+ new smart_objects::SmartObject(choice_set);
+ is_choice_set_added = true;
+ }
+ }
+ if (is_choice_set_added) {
+ set_choice_set_allow_mode(choice_set_id, true);
}
}
void DynamicApplicationDataImpl::RemoveChoiceSet(uint32_t choice_set_id) {
- sync_primitives::AutoLock lock(choice_set_map_lock_ptr_);
- ChoiceSetMap::iterator it = choice_set_map_.find(choice_set_id);
+ {
+ sync_primitives::AutoLock choice_set_map_lock(choice_set_map_lock_ptr_);
+ ChoiceSetMap::iterator it = choice_set_map_.find(choice_set_id);
- if (choice_set_map_.end() != it) {
- delete it->second;
- choice_set_map_.erase(choice_set_id);
+ if (choice_set_map_.end() != it) {
+ delete it->second;
+ choice_set_map_.erase(choice_set_id);
+ }
+ }
+ {
+ sync_primitives::AutoLock allowed_choice_sets_lock(
+ allowed_choice_sets_lock_);
+ auto choice_id_it = allowed_choice_sets_.find(choice_set_id);
+ if (allowed_choice_sets_.end() == choice_id_it) {
+ SDL_LOG_WARN("Choice set with id " << choice_set_id << " is not found");
+ return;
+ }
+ allowed_choice_sets_.erase(choice_id_it);
}
}
@@ -984,6 +882,32 @@ void DynamicApplicationDataImpl::set_reset_global_properties_active(
is_reset_global_properties_active_ = active;
}
+void DynamicApplicationDataImpl::set_choice_set_allow_mode(
+ const uint32_t choice_set_id, const bool is_allowed) {
+ SDL_LOG_DEBUG("Choice setID: "
+ << choice_set_id
+ << (is_allowed ? " is allowed" : " disallowed"));
+ sync_primitives::AutoLock lock(allowed_choice_sets_lock_);
+ if (is_allowed) {
+ allowed_choice_sets_.insert(choice_set_id);
+ } else {
+ allowed_choice_sets_.erase(choice_set_id);
+ }
+}
+
+bool DynamicApplicationDataImpl::is_choice_set_allowed(
+ const uint32_t choice_set_id) const {
+ SDL_LOG_DEBUG("Choice setID: " << choice_set_id);
+ sync_primitives::AutoLock lock(allowed_choice_sets_lock_);
+ const auto it = allowed_choice_sets_.find(choice_set_id);
+ if (allowed_choice_sets_.end() == it) {
+ SDL_LOG_ERROR("Choice set with id " << choice_set_id
+ << " is not allowed to perform now");
+ return false;
+ }
+ return true;
+}
+
void DynamicApplicationDataImpl::set_perform_interaction_mode(int32_t mode) {
perform_interaction_mode_ = mode;
}
diff --git a/src/components/application_manager/src/application_impl.cc b/src/components/application_manager/src/application_impl.cc
index 42afd93459..e4a5304a1b 100644
--- a/src/components/application_manager/src/application_impl.cc
+++ b/src/components/application_manager/src/application_impl.cc
@@ -113,6 +113,8 @@ ApplicationImpl::ApplicationImpl(
, audio_streaming_allowed_(false)
, video_streaming_suspended_(true)
, audio_streaming_suspended_(true)
+ , video_streaming_stopped_(false)
+ , audio_streaming_stopped_(false)
, is_app_allowed_(true)
, is_app_data_resumption_allowed_(false)
, has_been_activated_(false)
@@ -560,6 +562,7 @@ void ApplicationImpl::StartStreaming(
if (ServiceType::kMobileNav == service_type) {
SDL_LOG_TRACE("ServiceType = Video");
+ video_streaming_stopped_ = false;
if (!video_streaming_approved()) {
SDL_LOG_TRACE("Video streaming not approved");
MessageHelper::SendNaviStartStream(app_id(), application_manager_);
@@ -567,6 +570,7 @@ void ApplicationImpl::StartStreaming(
}
} else if (ServiceType::kAudio == service_type) {
SDL_LOG_TRACE("ServiceType = Audio");
+ audio_streaming_stopped_ = false;
if (!audio_streaming_approved()) {
SDL_LOG_TRACE("Audio streaming not approved");
MessageHelper::SendAudioStartStream(app_id(), application_manager_);
@@ -580,7 +584,6 @@ void ApplicationImpl::StopStreamingForce(
using namespace protocol_handler;
SDL_LOG_AUTO_TRACE();
- // see the comment in StopStreaming()
sync_primitives::AutoLock lock(streaming_stop_lock_);
SuspendStreaming(service_type);
@@ -597,10 +600,6 @@ void ApplicationImpl::StopStreaming(
using namespace protocol_handler;
SDL_LOG_AUTO_TRACE();
- // since WakeUpStreaming() is called from another thread, it is possible that
- // the stream will be restarted after we call SuspendStreaming() and before
- // we call StopXxxStreaming(). To avoid such timing issue, make sure that
- // we run SuspendStreaming() and StopXxxStreaming() atomically.
sync_primitives::AutoLock lock(streaming_stop_lock_);
SuspendStreaming(service_type);
@@ -615,6 +614,7 @@ void ApplicationImpl::StopStreaming(
void ApplicationImpl::StopNaviStreaming() {
SDL_LOG_AUTO_TRACE();
+ video_streaming_stopped_ = true;
video_stream_suspend_timer_.Stop();
MessageHelper::SendNaviStopStream(app_id(), application_manager_);
set_video_streaming_approved(false);
@@ -623,6 +623,7 @@ void ApplicationImpl::StopNaviStreaming() {
void ApplicationImpl::StopAudioStreaming() {
SDL_LOG_AUTO_TRACE();
+ audio_streaming_stopped_ = true;
audio_stream_suspend_timer_.Stop();
MessageHelper::SendAudioStopStream(app_id(), application_manager_);
set_audio_streaming_approved(false);
@@ -637,12 +638,10 @@ void ApplicationImpl::SuspendStreaming(
if (ServiceType::kMobileNav == service_type) {
video_stream_suspend_timer_.Stop();
application_manager_.OnAppStreaming(app_id(), service_type, false);
- sync_primitives::AutoLock lock(video_streaming_suspended_lock_);
video_streaming_suspended_ = true;
} else if (ServiceType::kAudio == service_type) {
audio_stream_suspend_timer_.Stop();
application_manager_.OnAppStreaming(app_id(), service_type, false);
- sync_primitives::AutoLock lock(audio_streaming_suspended_lock_);
audio_streaming_suspended_ = true;
}
application_manager_.ProcessOnDataStreamingNotification(
@@ -654,32 +653,37 @@ void ApplicationImpl::WakeUpStreaming(
using namespace protocol_handler;
SDL_LOG_AUTO_TRACE();
- // See the comment in StopStreaming(). Also, please make sure that we acquire
- // streaming_stop_lock_ then xxx_streaming_suspended_lock_ in this order!
sync_primitives::AutoLock lock(streaming_stop_lock_);
if (ServiceType::kMobileNav == service_type) {
- { // reduce the range of video_streaming_suspended_lock_
- sync_primitives::AutoLock auto_lock(video_streaming_suspended_lock_);
- if (video_streaming_suspended_) {
- application_manager_.OnAppStreaming(app_id(), service_type, true);
- application_manager_.ProcessOnDataStreamingNotification(
- service_type, app_id(), true);
- video_streaming_suspended_ = false;
- }
+ if (video_streaming_stopped_) {
+ SDL_LOG_WARN(
+ "Video streaming is stopped, received data packet will be dropped");
+ return;
+ }
+ if (video_streaming_suspended_) {
+ SDL_LOG_DEBUG("Video streaming is resuming after suspension");
+ application_manager_.OnAppStreaming(app_id(), service_type, true);
+ application_manager_.ProcessOnDataStreamingNotification(
+ service_type, app_id(), true);
+ video_streaming_suspended_ = false;
}
+
video_stream_suspend_timer_.Start(
timer_len == 0 ? video_stream_suspend_timeout_ : timer_len,
timer::kPeriodic);
} else if (ServiceType::kAudio == service_type) {
- { // reduce the range of audio_streaming_suspended_lock_
- sync_primitives::AutoLock auto_lock(audio_streaming_suspended_lock_);
- if (audio_streaming_suspended_) {
- application_manager_.OnAppStreaming(app_id(), service_type, true);
- application_manager_.ProcessOnDataStreamingNotification(
- service_type, app_id(), true);
- audio_streaming_suspended_ = false;
- }
+ if (audio_streaming_stopped_) {
+ SDL_LOG_WARN(
+ "Audio streaming is stopped, received data packet will be dropped");
+ return;
+ }
+ if (audio_streaming_suspended_) {
+ SDL_LOG_DEBUG("Audio streaming is resuming after suspension");
+ application_manager_.OnAppStreaming(app_id(), service_type, true);
+ application_manager_.ProcessOnDataStreamingNotification(
+ service_type, app_id(), true);
+ audio_streaming_suspended_ = false;
}
audio_stream_suspend_timer_.Start(
timer_len == 0 ? audio_stream_suspend_timeout_ : timer_len,
@@ -1165,7 +1169,8 @@ void ApplicationImpl::SubscribeToSoftButtons(
return;
}
- WindowSoftButtons new_window_soft_buttons = *subscribed_window_buttons;
+ WindowSoftButtons new_window_soft_buttons;
+ new_window_soft_buttons.first = window_id;
new_window_soft_buttons.second.insert(window_softbuttons.second.begin(),
window_softbuttons.second.end());
command_soft_buttons.erase(subscribed_window_buttons);
diff --git a/src/components/application_manager/src/application_manager_impl.cc b/src/components/application_manager/src/application_manager_impl.cc
index 7a5d5fc0dc..ec37e3b51f 100644
--- a/src/components/application_manager/src/application_manager_impl.cc
+++ b/src/components/application_manager/src/application_manager_impl.cc
@@ -301,6 +301,13 @@ ApplicationSharedPtr ApplicationManagerImpl::application_by_policy_id(
return FindApp(accessor, finder);
}
+ApplicationSharedPtr ApplicationManagerImpl::pending_application_by_hmi_app(
+ uint32_t hmi_app_id) const {
+ HmiAppIdPredicate finder(hmi_app_id);
+ DataAccessor<AppsWaitRegistrationSet> accessor = pending_applications();
+ return FindPendingApp(accessor, finder);
+}
+
ApplicationSharedPtr ApplicationManagerImpl::pending_application_by_policy_id(
const std::string& policy_app_id) const {
PolicyAppIdPredicate finder(policy_app_id);
@@ -1849,8 +1856,9 @@ bool ApplicationManagerImpl::CheckResumptionRequiredTransportAvailable(
const std::string secondary_transport_type =
GetTransportTypeProfileString(application->secondary_device());
- const smart_objects::SmartObject* app_types_array = application->app_types();
- if (app_types_array == NULL || app_types_array->length() == 0) {
+ const smart_objects::SmartObjectSPtr app_types_array =
+ application->app_types();
+ if (!app_types_array || app_types_array->length() == 0) {
// This app does not have any AppHMIType. In this case, check "EMPTY_APP"
// entry
std::map<std::string, std::vector<std::string> >::const_iterator it =
@@ -1956,9 +1964,13 @@ bool ApplicationManagerImpl::StartNaviService(
/* Fix: For NaviApp1 Switch to NaviApp2, App1's Endcallback() arrives
later than App2's Startcallback(). Cause streaming issue on HMI.
*/
- auto accessor = applications();
- for (auto app : accessor.GetData()) {
- if (!app || (!app->is_navi() && !app->mobile_projection_enabled())) {
+
+ const ApplicationSet apps = applications().GetData();
+ for (auto app : apps) {
+ if (!app) {
+ SDL_LOG_ERROR("NULL pointer for application");
+ continue;
+ } else if (!app->is_navi() && !app->mobile_projection_enabled()) {
SDL_LOG_DEBUG("Continue, Not Navi App Id: " << app->app_id());
continue;
}
@@ -2650,6 +2662,11 @@ bool ApplicationManagerImpl::Init(
bool ApplicationManagerImpl::Stop() {
SDL_LOG_AUTO_TRACE();
InitiateStopping();
+
+ if (app_launch_ctrl_) {
+ app_launch_ctrl_->Stop();
+ }
+
application_list_update_timer_.Stop();
try {
if (unregister_reason_ ==
@@ -3169,12 +3186,6 @@ void ApplicationManagerImpl::SendOnSDLClose() {
(*msg)[strings::params][strings::protocol_version] =
commands::CommandImpl::protocol_version_;
- if (!msg) {
- SDL_LOG_WARN("Null-pointer message received.");
- NOTREACHED();
- return;
- }
-
// SmartObject |message| has no way to declare priority for now
std::shared_ptr<Message> message_to_send(
new Message(protocol_handler::MessagePriority::kDefault));
@@ -3344,7 +3355,7 @@ void ApplicationManagerImpl::UnregisterApplication(
while (applications_.end() != it_app) {
if (app_id == (*it_app)->app_id()) {
app_to_remove = *it_app;
- applications_.erase(it_app++);
+ applications_.erase(it_app);
break;
} else {
++it_app;
@@ -4483,7 +4494,7 @@ void ApplicationManagerImpl::OnUpdateHMIAppType(
std::vector<std::string> hmi_types_from_policy;
smart_objects::SmartObject transform_app_hmi_types(
smart_objects::SmartType_Array);
- bool flag_diffirence_app_hmi_type;
+ bool flag_difference_app_hmi_type;
DataAccessor<ApplicationSet> accessor(applications());
for (ApplicationSetIt it = accessor.GetData().begin();
it != accessor.GetData().end();
@@ -4506,19 +4517,18 @@ void ApplicationManagerImpl::OnUpdateHMIAppType(
}
ApplicationConstSharedPtr app = *it;
- const smart_objects::SmartObject* save_application_hmi_type =
+ const smart_objects::SmartObjectSPtr save_application_hmi_type =
app->app_types();
- if (save_application_hmi_type == NULL ||
- ((*save_application_hmi_type).length() !=
- transform_app_hmi_types.length())) {
- flag_diffirence_app_hmi_type = true;
+ if (!save_application_hmi_type || (save_application_hmi_type->length() !=
+ transform_app_hmi_types.length())) {
+ flag_difference_app_hmi_type = true;
} else {
- flag_diffirence_app_hmi_type = !(CompareAppHMIType(
+ flag_difference_app_hmi_type = !(CompareAppHMIType(
transform_app_hmi_types, *save_application_hmi_type));
}
- if (flag_diffirence_app_hmi_type) {
+ if (flag_difference_app_hmi_type) {
ApplicationSharedPtr app = *it;
app->set_app_types(transform_app_hmi_types);
@@ -4653,9 +4663,7 @@ void ApplicationManagerImpl::SendDriverDistractionState(
const auto lock_screen_dismissal =
policy_handler_->LockScreenDismissalEnabledState();
- if (lock_screen_dismissal &&
- hmi_apis::Common_DriverDistractionState::DD_ON ==
- driver_distraction_state()) {
+ if (lock_screen_dismissal) {
bool dismissal_enabled = *lock_screen_dismissal;
if (dismissal_enabled) {
const auto language = EnumToString(application->ui_language());
@@ -4770,6 +4778,9 @@ void ApplicationManagerImpl::AddAppToRegisteredAppList(
SDL_LOG_AUTO_TRACE();
DCHECK_OR_RETURN_VOID(application);
sync_primitives::AutoLock lock(applications_list_lock_ptr_);
+
+ // Add application to registered app list and set appropriate mark.
+ application->MarkRegistered();
applications_.insert(application);
SDL_LOG_DEBUG("App with app_id: "
<< application->app_id()
diff --git a/src/components/application_manager/src/commands/command_impl.cc b/src/components/application_manager/src/commands/command_impl.cc
index 8eb7171274..34c2a6d6bc 100644
--- a/src/components/application_manager/src/commands/command_impl.cc
+++ b/src/components/application_manager/src/commands/command_impl.cc
@@ -47,12 +47,15 @@ struct InfoAppender {
explicit InfoAppender(std::string& info) : info_(info) {}
void operator()(const RPCParams::value_type& parameter) {
+ std::string param_name = parameter == strings::cluster_mode_status
+ ? strings::cluster_modes
+ : parameter;
if (info_.empty()) {
- info_ = "\'" + parameter + "\'";
+ info_ = "\'" + param_name + "\'";
return;
}
- info_ = info_ + ", \'" + parameter + "\'";
+ info_ = info_ + ", \'" + param_name + "\'";
}
private:
@@ -282,9 +285,11 @@ struct DisallowedParamsInserter {
? mobile_apis::VehicleDataType::VEHICLEDATA_OEM_CUSTOM_DATA
: vehicle_data->second;
+ std::string param_name =
+ param == strings::cluster_mode_status ? strings::cluster_modes : param;
(*disallowed_param)[strings::data_type] = vehicle_data_type;
(*disallowed_param)[strings::result_code] = code_;
- response_[strings::msg_params][param.c_str()] = *disallowed_param;
+ response_[strings::msg_params][param_name.c_str()] = *disallowed_param;
return true;
}
diff --git a/src/components/application_manager/src/event_engine/event_dispatcher_impl.cc b/src/components/application_manager/src/event_engine/event_dispatcher_impl.cc
index 0d7dc9cfe0..441e3831f8 100644
--- a/src/components/application_manager/src/event_engine/event_dispatcher_impl.cc
+++ b/src/components/application_manager/src/event_engine/event_dispatcher_impl.cc
@@ -45,9 +45,9 @@ EventDispatcherImpl::~EventDispatcherImpl() {}
void EventDispatcherImpl::raise_event(const Event& event) {
ObserverVector observers;
- AutoLock observer_lock(observer_lock_);
+
{
- AutoLock state_lock(state_lock_);
+ AutoLock observer_lock(observer_lock_);
// check if event is notification
if (hmi_apis::messageType::notification == event.smart_object_type()) {
@@ -65,7 +65,6 @@ void EventDispatcherImpl::raise_event(const Event& event) {
while (!observers.empty()) {
EventObserver* temp = *observers.begin();
observers.erase(observers.begin());
- AutoUnlock unlock_observer(observer_lock);
if (temp->IncrementReferenceCount()) {
temp->HandleOnEvent(event);
@@ -77,7 +76,7 @@ void EventDispatcherImpl::raise_event(const Event& event) {
void EventDispatcherImpl::add_observer(const Event::EventID& event_id,
int32_t hmi_correlation_id,
EventObserver& observer) {
- AutoLock auto_lock(state_lock_);
+ AutoLock auto_lock(observer_lock_);
observers_event_[event_id][hmi_correlation_id].push_back(&observer);
}
@@ -93,18 +92,8 @@ struct IdCheckFunctor {
};
void EventDispatcherImpl::remove_observer(const Event::EventID& event_id,
- const int32_t hmi_correlation_id) {
- AutoLock auto_lock(state_lock_);
- auto& observers = observers_event_[event_id][hmi_correlation_id];
- for (auto observer : observers) {
- remove_observer_from_vector(*observer);
- }
-}
-
-void EventDispatcherImpl::remove_observer(const Event::EventID& event_id,
EventObserver& observer) {
- remove_observer_from_vector(observer);
- AutoLock auto_lock(state_lock_);
+ AutoLock auto_lock(observer_lock_);
ObserversMap::iterator it = observers_event_[event_id].begin();
for (; observers_event_[event_id].end() != it; ++it) {
@@ -118,7 +107,8 @@ void EventDispatcherImpl::remove_observer(const Event::EventID& event_id,
}
void EventDispatcherImpl::remove_observer(EventObserver& observer) {
- remove_observer_from_vector(observer);
+ AutoLock auto_lock(observer_lock_);
+
EventObserverMap::iterator event_map = observers_event_.begin();
for (; observers_event_.end() != event_map; ++event_map) {
@@ -126,41 +116,32 @@ void EventDispatcherImpl::remove_observer(EventObserver& observer) {
}
}
-void EventDispatcherImpl::remove_observer_from_vector(EventObserver& observer) {
- AutoLock auto_lock(observer_lock_);
-
- observers_.erase(
- std::remove_if(
- observers_.begin(), observers_.end(), IdCheckFunctor(observer.id())),
- observers_.end());
-}
-
// Mobile Events
void EventDispatcherImpl::raise_mobile_event(const MobileEvent& event) {
- AutoLock observer_lock(mobile_observer_lock_);
+ ObserverVector mobile_observers;
+
{
- AutoLock state_lock(mobile_state_lock_);
+ AutoLock observer_lock(mobile_observer_lock_);
// check if event is notification
if (mobile_apis::messageType::notification == event.smart_object_type()) {
const uint32_t notification_correlation_id = 0;
- mobile_observers_ =
+ mobile_observers =
mobile_observers_event_[event.id()][notification_correlation_id];
}
if (mobile_apis::messageType::response == event.smart_object_type()) {
- mobile_observers_ =
+ mobile_observers =
mobile_observers_event_[event.id()]
[event.smart_object_correlation_id()];
}
}
// Call observers
- while (!mobile_observers_.empty()) {
- EventObserver* temp = *mobile_observers_.begin();
- mobile_observers_.erase(mobile_observers_.begin());
- AutoUnlock unlock_observer(observer_lock);
+ while (!mobile_observers.empty()) {
+ EventObserver* temp = *mobile_observers.begin();
+ mobile_observers.erase(mobile_observers.begin());
if (temp->IncrementReferenceCount()) {
temp->HandleOnEvent(event);
@@ -173,14 +154,13 @@ void EventDispatcherImpl::add_mobile_observer(
const MobileEvent::MobileEventID& event_id,
int32_t mobile_correlation_id,
EventObserver& observer) {
- AutoLock auto_lock(mobile_state_lock_);
+ AutoLock auto_lock(mobile_observer_lock_);
mobile_observers_event_[event_id][mobile_correlation_id].push_back(&observer);
}
void EventDispatcherImpl::remove_mobile_observer(
const MobileEvent::MobileEventID& event_id, EventObserver& observer) {
- remove_mobile_observer_from_vector(observer);
- AutoLock auto_lock(mobile_state_lock_);
+ AutoLock auto_lock(mobile_observer_lock_);
ObserversMap::iterator it = mobile_observers_event_[event_id].begin();
for (; mobile_observers_event_[event_id].end() != it; ++it) {
@@ -194,7 +174,6 @@ void EventDispatcherImpl::remove_mobile_observer(
}
void EventDispatcherImpl::remove_mobile_observer(EventObserver& observer) {
- remove_mobile_observer_from_vector(observer);
MobileEventObserverMap::iterator event_map = mobile_observers_event_.begin();
for (; mobile_observers_event_.end() != event_map; ++event_map) {
@@ -202,15 +181,5 @@ void EventDispatcherImpl::remove_mobile_observer(EventObserver& observer) {
}
}
-void EventDispatcherImpl::remove_mobile_observer_from_vector(
- EventObserver& observer) {
- AutoLock auto_lock(mobile_observer_lock_);
-
- mobile_observers_.erase(
- std::remove_if(
- observers_.begin(), observers_.end(), IdCheckFunctor(observer.id())),
- observers_.end());
-}
-
} // namespace event_engine
} // namespace application_manager
diff --git a/src/components/application_manager/src/hmi_capabilities_impl.cc b/src/components/application_manager/src/hmi_capabilities_impl.cc
index a8001eba91..6052382bb1 100644
--- a/src/components/application_manager/src/hmi_capabilities_impl.cc
+++ b/src/components/application_manager/src/hmi_capabilities_impl.cc
@@ -97,6 +97,7 @@ HMICapabilitiesImpl::HMICapabilitiesImpl(ApplicationManager& app_mngr)
, vr_supported_languages_(NULL)
, display_capabilities_(NULL)
, hmi_zone_capabilities_(NULL)
+ , ui_hmi_capabilities_(NULL)
, soft_buttons_capabilities_(NULL)
, button_capabilities_(NULL)
, preset_bank_capabilities_(NULL)
@@ -281,6 +282,14 @@ void HMICapabilitiesImpl::set_hmi_zone_capabilities(
hmi_zone_capabilities_.swap(new_value);
}
+void HMICapabilitiesImpl::set_ui_hmi_capabilities(
+ const smart_objects::SmartObject& ui_hmi_capabilities) {
+ auto new_value =
+ std::make_shared<smart_objects::SmartObject>(ui_hmi_capabilities);
+ sync_primitives::AutoWriteLock lock(hmi_capabilities_lock_);
+ ui_hmi_capabilities_.swap(new_value);
+}
+
void HMICapabilitiesImpl::set_soft_button_capabilities(
const smart_objects::SmartObject& soft_button_capabilities) {
auto new_value =
@@ -323,6 +332,7 @@ void HMICapabilitiesImpl::set_audio_pass_thru_capabilities(
void HMICapabilitiesImpl::set_pcm_stream_capabilities(
const smart_objects::SmartObject& pcm_stream_capabilities) {
+ SDL_LOG_AUTO_TRACE();
auto new_value =
std::make_shared<smart_objects::SmartObject>(pcm_stream_capabilities);
sync_primitives::AutoWriteLock lock(hmi_capabilities_lock_);
@@ -491,6 +501,12 @@ HMICapabilitiesImpl::hmi_zone_capabilities() const {
return hmi_zone_capabilities_;
}
+const smart_objects::SmartObjectSPtr HMICapabilitiesImpl::ui_hmi_capabilities()
+ const {
+ sync_primitives::AutoReadLock lock(hmi_capabilities_lock_);
+ return ui_hmi_capabilities_;
+}
+
const smart_objects::SmartObjectSPtr
HMICapabilitiesImpl::soft_button_capabilities() const {
sync_primitives::AutoReadLock lock(hmi_capabilities_lock_);
@@ -523,6 +539,7 @@ HMICapabilitiesImpl::audio_pass_thru_capabilities() const {
const smart_objects::SmartObjectSPtr
HMICapabilitiesImpl::pcm_stream_capabilities() const {
+ SDL_LOG_AUTO_TRACE();
sync_primitives::AutoReadLock lock(hmi_capabilities_lock_);
return pcm_stream_capabilities_;
}
@@ -1017,6 +1034,33 @@ bool HMICapabilitiesImpl::LoadCapabilitiesFromFile() {
set_soft_button_capabilities(soft_button_capabilities_so);
}
+ auto ui_hmi_capabilities_node =
+ json_ui_getter.GetCachedJsonMember(strings::hmi_capabilities);
+
+ if (!ui_hmi_capabilities_node.isNull()) {
+ smart_objects::SmartObject ui_hmi_capabilities_so;
+ formatters::CFormatterJsonBase::jsonValueToObj(ui_hmi_capabilities_node,
+ ui_hmi_capabilities_so);
+ set_ui_hmi_capabilities(ui_hmi_capabilities_so);
+
+ if (JsonIsMemberSafe(ui_hmi_capabilities_node, strings::navigation)) {
+ Json::Value navigation =
+ ui_hmi_capabilities_node.get(strings::navigation, "");
+ set_navigation_supported(navigation.asBool());
+ }
+ if (JsonIsMemberSafe(ui_hmi_capabilities_node, strings::phone_call)) {
+ Json::Value phoneCall =
+ ui_hmi_capabilities_node.get(strings::phone_call, "");
+ set_phone_call_supported(phoneCall.asBool());
+ }
+ if (JsonIsMemberSafe(ui_hmi_capabilities_node,
+ strings::video_streaming)) {
+ Json::Value video_streaming =
+ ui_hmi_capabilities_node.get(strings::video_streaming, "");
+ set_video_streaming_supported(video_streaming.asBool());
+ }
+ }
+
auto ui_system_capabilities_node =
json_ui_getter.GetJsonMember(strings::system_capabilities,
hmi_apis::FunctionID::UI_GetCapabilities,
@@ -1030,9 +1074,6 @@ bool HMICapabilitiesImpl::LoadCapabilitiesFromFile() {
formatters::CFormatterJsonBase::jsonValueToObj(
navigation_capability, navigation_capability_so);
set_navigation_capability(navigation_capability_so);
- if (!navigation_capability_so.empty()) {
- set_navigation_supported(true);
- }
}
if (JsonIsMemberSafe(ui_system_capabilities_node,
strings::phone_capability)) {
@@ -1042,9 +1083,6 @@ bool HMICapabilitiesImpl::LoadCapabilitiesFromFile() {
formatters::CFormatterJsonBase::jsonValueToObj(phone_capability,
phone_capability_so);
set_phone_capability(phone_capability_so);
- if (!phone_capability_so.empty()) {
- set_phone_call_supported(true);
- }
}
if (JsonIsMemberSafe(ui_system_capabilities_node,
strings::video_streaming_capability)) {
@@ -1090,9 +1128,6 @@ bool HMICapabilitiesImpl::LoadCapabilitiesFromFile() {
vs_capability_so[strings::supported_formats] = converted_array;
}
set_video_streaming_capability(vs_capability_so);
- if (!vs_capability_so.empty()) {
- set_video_streaming_supported(true);
- }
}
if (JsonIsMemberSafe(ui_system_capabilities_node,
diff --git a/src/components/application_manager/src/hmi_interfaces_impl.cc b/src/components/application_manager/src/hmi_interfaces_impl.cc
index 205585959b..eb44ff4cd6 100644
--- a/src/components/application_manager/src/hmi_interfaces_impl.cc
+++ b/src/components/application_manager/src/hmi_interfaces_impl.cc
@@ -157,7 +157,6 @@ generate_function_to_interface_convert_map() {
convert_map[UI_GetLanguage] = HmiInterfaces::HMI_INTERFACE_UI;
convert_map[UI_OnDriverDistraction] = HmiInterfaces::HMI_INTERFACE_UI;
convert_map[UI_SetAppIcon] = HmiInterfaces::HMI_INTERFACE_UI;
- convert_map[UI_SetDisplayLayout] = HmiInterfaces::HMI_INTERFACE_UI;
convert_map[UI_OnKeyboardInput] = HmiInterfaces::HMI_INTERFACE_UI;
convert_map[UI_OnTouchEvent] = HmiInterfaces::HMI_INTERFACE_UI;
convert_map[UI_Slider] = HmiInterfaces::HMI_INTERFACE_UI;
diff --git a/src/components/application_manager/src/message_helper/message_helper.cc b/src/components/application_manager/src/message_helper/message_helper.cc
index bbe6189bc9..2e60bb2c66 100644
--- a/src/components/application_manager/src/message_helper/message_helper.cc
+++ b/src/components/application_manager/src/message_helper/message_helper.cc
@@ -801,8 +801,8 @@ void MessageHelper::SendResetPropertiesRequest(ApplicationSharedPtr application,
{
SmartObject msg_params = SmartObject(smart_objects::SmartType_Map);
- msg_params[strings::help_prompt] = application->help_prompt();
- msg_params[strings::timeout_prompt] = application->timeout_prompt();
+ msg_params[strings::help_prompt] = *(application->help_prompt());
+ msg_params[strings::timeout_prompt] = *(application->timeout_prompt());
msg_params[strings::app_id] = application->app_id();
SmartObjectSPtr message = CreateMessageForHMI(
@@ -1059,10 +1059,6 @@ smart_objects::SmartObjectSPtr MessageHelper::CreateSetAppIcon(
std::make_shared<smart_objects::SmartObject>(
smart_objects::SmartType_Map);
- if (!set_icon) {
- return NULL;
- }
-
smart_objects::SmartObject& object = *set_icon;
object[strings::sync_file_name][strings::value] = path_to_icon;
// TODO(PV): need to store actual image type
@@ -1419,11 +1415,9 @@ smart_objects::SmartObjectSPtr MessageHelper::CreateAppVrHelp(
smart_objects::SmartObjectSPtr result =
std::make_shared<smart_objects::SmartObject>(
smart_objects::SmartType_Map);
- if (!result) {
- return NULL;
- }
+
smart_objects::SmartObject& vr_help = *result;
- const smart_objects::SmartObject* vr_help_title = app->vr_help_title();
+ const smart_objects::SmartObjectSPtr vr_help_title = app->vr_help_title();
if (vr_help_title) {
vr_help[strings::vr_help_title] = vr_help_title->asString();
}
@@ -1652,7 +1646,7 @@ void MessageHelper::SendUIChangeRegistrationRequestToHMI(
CreateChangeRegistration(hmi_apis::FunctionID::UI_ChangeRegistration,
app->ui_language(),
app->app_id(),
- app->app_types(),
+ app->app_types().get(),
app_mngr);
if (ui_command) {
@@ -1829,8 +1823,8 @@ bool MessageHelper::CreateHMIApplicationStruct(
return false;
}
- const smart_objects::SmartObject* app_types = app->app_types();
- const smart_objects::SmartObject* ngn_media_screen_name =
+ const smart_objects::SmartObjectSPtr app_types = app->app_types();
+ const smart_objects::SmartObjectSPtr ngn_media_screen_name =
app->ngn_media_screen_name();
const smart_objects::SmartObject day_color_scheme = app->day_color_scheme();
const smart_objects::SmartObject night_color_scheme =
@@ -1848,7 +1842,7 @@ bool MessageHelper::CreateHMIApplicationStruct(
if (file_system::FileExists(app->app_icon_path())) {
message[strings::icon] = icon_path;
}
- if (app->app_id() > 0 || app->IsRegistered()) {
+ if (app->IsRegistered()) {
message[strings::hmi_display_language_desired] = app->ui_language();
message[strings::is_media_application] = app->is_media_application();
} else {
@@ -2266,9 +2260,6 @@ void MessageHelper::SendGetUserFriendlyMessageResponse(
smart_objects::SmartObjectSPtr message =
std::make_shared<smart_objects::SmartObject>(
smart_objects::SmartType_Map);
- if (!message) {
- return;
- }
(*message)[strings::params][strings::function_id] =
hmi_apis::FunctionID::SDL_GetUserFriendlyMessage;
@@ -3050,9 +3041,6 @@ void MessageHelper::SendGetStatusUpdateResponse(const std::string& status,
smart_objects::SmartObjectSPtr message =
std::make_shared<smart_objects::SmartObject>(
smart_objects::SmartType_Map);
- if (!message) {
- return;
- }
(*message)[strings::params][strings::function_id] =
hmi_apis::FunctionID::SDL_GetStatusUpdate;
@@ -3090,9 +3078,6 @@ void MessageHelper::SendOnStatusUpdate(const std::string& status,
smart_objects::SmartObjectSPtr message =
std::make_shared<smart_objects::SmartObject>(
smart_objects::SmartType_Map);
- if (!message) {
- return;
- }
(*message)[strings::params][strings::function_id] =
hmi_apis::FunctionID::SDL_OnStatusUpdate;
diff --git a/src/components/application_manager/src/mobile_message_handler.cc b/src/components/application_manager/src/mobile_message_handler.cc
index a9c0a362be..6cbe5ec25a 100644
--- a/src/components/application_manager/src/mobile_message_handler.cc
+++ b/src/components/application_manager/src/mobile_message_handler.cc
@@ -135,15 +135,15 @@ application_manager::Message*
MobileMessageHandler::HandleIncomingMessageProtocolV1(
const ::protocol_handler::RawMessagePtr message) {
SDL_LOG_AUTO_TRACE();
- application_manager::Message* outgoing_message =
- new application_manager::Message(
- protocol_handler::MessagePriority::FromServiceType(
- message->service_type()));
+
if (!message) {
NOTREACHED();
- delete outgoing_message;
return NULL;
}
+ application_manager::Message* outgoing_message =
+ new application_manager::Message(
+ protocol_handler::MessagePriority::FromServiceType(
+ message->service_type()));
outgoing_message->set_connection_key(message->connection_key());
outgoing_message->set_protocol_version(
diff --git a/src/components/application_manager/src/policies/policy_handler.cc b/src/components/application_manager/src/policies/policy_handler.cc
index c8c2a25a6d..20f61032a9 100644
--- a/src/components/application_manager/src/policies/policy_handler.cc
+++ b/src/components/application_manager/src/policies/policy_handler.cc
@@ -300,14 +300,11 @@ PolicyHandler::PolicyHandler(const PolicySettings& settings,
ApplicationManager& application_manager)
: AsyncRunner("PolicyHandler async runner thread")
, last_activated_app_id_(0)
-#ifndef EXTERNAL_PROPRIETARY_MODE
, last_ptu_app_id_(0)
-#endif // EXTERNAL_PROPRIETARY_MODE
, statistic_manager_impl_(std::make_shared<StatisticManagerImpl>(this))
, settings_(settings)
, application_manager_(application_manager)
- , last_registered_policy_app_id_(std::string()) {
-}
+ , last_registered_policy_app_id_(std::string()) {}
PolicyHandler::~PolicyHandler() {}
@@ -423,13 +420,31 @@ void PolicyHandler::StopRetrySequence() {
SDL_LOG_AUTO_TRACE();
const auto policy_manager = LoadPolicyManager();
POLICY_LIB_CHECK_VOID(policy_manager);
-#ifndef EXTERNAL_PROPRIETARY_MODE
// Clear cached PTU app
last_ptu_app_id_ = 0;
-#endif // EXTERNAL_PROPRIETARY_MODE
policy_manager->StopRetrySequence();
}
+bool PolicyHandler::IsPTUSystemRequestAllowed(const uint32_t app_id) {
+ SDL_LOG_AUTO_TRACE();
+ const auto policy_manager = LoadPolicyManager();
+ POLICY_LIB_CHECK_OR_RETURN(policy_manager, false);
+
+ if (policy_manager->GetPolicyTableStatus() != "UPDATING") {
+ SDL_LOG_DEBUG("PTU received while not UPDATING");
+ return false;
+ }
+
+ if (app_id != last_ptu_app_id_) {
+ SDL_LOG_DEBUG(
+ "PTU received from unexpected application, request was sent to "
+ << last_ptu_app_id_);
+ return false;
+ }
+
+ return true;
+}
+
bool PolicyHandler::ResetPolicyTable() {
SDL_LOG_TRACE("Reset policy table.");
const auto policy_manager = LoadPolicyManager();
@@ -478,6 +493,13 @@ void PolicyHandler::CacheRetryInfo(const uint32_t app_id,
}
#endif // EXTERNAL_PROPRIETARY_MODE
+#ifndef PROPRIETARY_MODE
+void PolicyHandler::UpdateLastPTUApp(const uint32_t app_id) {
+ SDL_LOG_DEBUG("UpdateLastPTUApp to " << app_id);
+ last_ptu_app_id_ = app_id;
+}
+#endif // PROPRIETARY_MODE
+
uint32_t PolicyHandler::GetAppIdForSending() const {
SDL_LOG_AUTO_TRACE();
@@ -720,7 +742,7 @@ void PolicyHandler::OnAppPermissionConsentInternal(
policy_manager->SetUserConsentForApp(out_permissions);
#endif
}
- } else if (!app_to_device_link_.empty()) {
+ } else {
const ApplicationSet& accessor =
application_manager_.applications().GetData();
for (const auto& app : accessor) {
@@ -759,10 +781,6 @@ void PolicyHandler::OnAppPermissionConsentInternal(
policy_manager->SetUserConsentForApp(out_permissions);
#endif
}
- } else {
- SDL_LOG_WARN(
- "There are no applications previously stored for "
- "setting common permissions.");
}
#ifdef EXTERNAL_PROPRIETARY_MODE
if (!policy_manager->SetExternalConsentStatus(external_consent_status)) {
@@ -1290,10 +1308,8 @@ bool PolicyHandler::ReceiveMessageFromSDK(const std::string& file,
policy_manager->CleanupUnpairedDevices();
SetDaysAfterEpoch();
policy_manager->OnPTUFinished(load_pt_result);
-#ifndef EXTERNAL_PROPRIETARY_MODE
// Clean up retry information
last_ptu_app_id_ = 0;
-#endif // EXTERNAL_PROPRIETARY_MODE
uint32_t correlation_id = application_manager_.GetNextHMICorrelationID();
event_observer_->subscribe_on_event(
@@ -2873,6 +2889,10 @@ void PolicyHandler::UpdateHMILevel(ApplicationSharedPtr app,
bool PolicyHandler::CheckModule(const PTString& app_id,
const PTString& module) {
+ if (!PolicyEnabled()) {
+ SDL_LOG_DEBUG("Policy table is disabled");
+ return true;
+ }
const auto policy_manager = LoadPolicyManager();
POLICY_LIB_CHECK_OR_RETURN(policy_manager, false);
return policy_manager->CheckModule(app_id, module);
@@ -2943,6 +2963,10 @@ bool PolicyHandler::CheckHMIType(const std::string& application_id,
mobile_apis::AppHMIType::eType hmi,
const smart_objects::SmartObject* app_types) {
SDL_LOG_AUTO_TRACE();
+ if (!PolicyEnabled()) {
+ SDL_LOG_DEBUG("Policy table is disabled");
+ return true;
+ }
const auto policy_manager = LoadPolicyManager();
POLICY_LIB_CHECK_OR_RETURN(policy_manager, false);
std::vector<int> policy_hmi_types;
diff --git a/src/components/application_manager/src/request_controller_impl.cc b/src/components/application_manager/src/request_controller_impl.cc
index 76d4a70330..79458566dc 100644
--- a/src/components/application_manager/src/request_controller_impl.cc
+++ b/src/components/application_manager/src/request_controller_impl.cc
@@ -236,16 +236,18 @@ void RequestControllerImpl::AddNotification(const RequestPtr ptr) {
"Impossible to add notification due to Low Voltage is active");
return;
}
+ AutoLock auto_lock(notification_list_lock_);
notification_list_.push_back(ptr);
}
void RequestControllerImpl::RemoveNotification(
const commands::Command* notification) {
SDL_LOG_AUTO_TRACE();
- std::list<RequestPtr>::iterator it = notification_list_.begin();
+ AutoLock auto_lock(notification_list_lock_);
+ auto it = notification_list_.begin();
for (; notification_list_.end() != it;) {
if (it->get() == notification) {
- notification_list_.erase(it++);
+ it = notification_list_.erase(it);
SDL_LOG_DEBUG("Notification removed");
return;
} else {
@@ -335,8 +337,6 @@ void RequestControllerImpl::TerminateRequest(const uint32_t correlation_id,
return;
}
if (force_terminate || request->request()->AllowedToTerminate()) {
- event_dispatcher_.remove_observer(
- static_cast<hmi_apis::FunctionID::eType>(function_id), correlation_id);
waiting_for_response_.RemoveRequest(request);
if (RequestInfo::HMIRequest == request->request_type()) {
request_timeout_handler_.RemoveRequest(request->requestId());
@@ -374,7 +374,7 @@ void RequestControllerImpl::TerminateWaitingForExecutionAppRequests(
while (mobile_request_list_.end() != request_it) {
RequestPtr request = (*request_it);
if ((request.use_count() != 0) && (request->connection_key() == app_id)) {
- mobile_request_list_.erase(request_it++);
+ request_it = mobile_request_list_.erase(request_it);
} else {
++request_it;
}
diff --git a/src/components/application_manager/src/request_timeout_handler_impl.cc b/src/components/application_manager/src/request_timeout_handler_impl.cc
index 1ac72393a0..b8e0e67746 100644
--- a/src/components/application_manager/src/request_timeout_handler_impl.cc
+++ b/src/components/application_manager/src/request_timeout_handler_impl.cc
@@ -49,6 +49,7 @@ RequestTimeoutHandlerImpl::RequestTimeoutHandlerImpl(
void RequestTimeoutHandlerImpl::AddRequest(const uint32_t hmi_correlation_id,
const Request& request) {
+ sync_primitives::AutoLock lock(requests_lock_);
requests_.insert(std::make_pair(hmi_correlation_id, request));
}
@@ -101,6 +102,8 @@ void RequestTimeoutHandlerImpl::HandleOnEvent(
}
const auto hmi_corr_id =
message[strings::msg_params][strings::request_id].asUInt();
+
+ sync_primitives::AutoLock lock(requests_lock_);
auto it = requests_.find(hmi_corr_id);
if (it != requests_.end()) {
const auto& request = it->second;
diff --git a/src/components/application_manager/src/resumption/resumption_data.cc b/src/components/application_manager/src/resumption/resumption_data.cc
index c72231d334..50b95dba42 100644
--- a/src/components/application_manager/src/resumption/resumption_data.cc
+++ b/src/components/application_manager/src/resumption/resumption_data.cc
@@ -250,10 +250,10 @@ smart_objects::SmartObject ResumptionData::CreateWindowInfoSO(
}
smart_objects::SmartObject ResumptionData::PointerToSmartObj(
- const smart_objects::SmartObject* ptr) const {
+ const smart_objects::SmartObjectSPtr ptr) const {
SDL_LOG_AUTO_TRACE();
smart_objects::SmartObject temp;
- if (ptr != NULL) {
+ if (ptr) {
temp = *ptr;
}
return temp;
diff --git a/src/components/application_manager/src/rpc_protection_manager_impl.cc b/src/components/application_manager/src/rpc_protection_manager_impl.cc
index 64b732ddb2..62e296e786 100644
--- a/src/components/application_manager/src/rpc_protection_manager_impl.cc
+++ b/src/components/application_manager/src/rpc_protection_manager_impl.cc
@@ -89,7 +89,7 @@ bool RPCProtectionManagerImpl::CheckPolicyEncryptionFlag(
bool RPCProtectionManagerImpl::IsEncryptionRequiredByPolicy(
const std::string& policy_app_id, const std::string& function_name) const {
SDL_LOG_AUTO_TRACE();
-
+ sync_primitives::AutoLock lock(encrypted_rpcs_lock_);
auto it = encrypted_rpcs_.find(policy_app_id);
if (encrypted_rpcs_.end() == it) {
@@ -160,23 +160,25 @@ void RPCProtectionManagerImpl::OnPTUFinished(const bool ptu_result) {
void RPCProtectionManagerImpl::SaveEncryptedRPC() {
SDL_LOG_AUTO_TRACE();
-
+ sync_primitives::AutoLock lock(encrypted_rpcs_lock_);
const auto policy_encryption_flag_getter =
policy_handler_.PolicyEncryptionFlagGetter();
- const auto policy_policy_app_ids =
- policy_encryption_flag_getter->GetApplicationPolicyIDs();
+ if (policy_encryption_flag_getter) {
+ const auto policy_policy_app_ids =
+ policy_encryption_flag_getter->GetApplicationPolicyIDs();
- for (const auto& app : policy_policy_app_ids) {
- SDL_LOG_DEBUG("Processing app name: " << app);
+ for (const auto& app : policy_policy_app_ids) {
+ SDL_LOG_DEBUG("Processing app name: " << app);
- encrypted_rpcs_[app] = GetEncryptedRPCsForApp(app);
+ encrypted_rpcs_[app] = GetEncryptedRPCsForApp(app);
+ }
}
}
void RPCProtectionManagerImpl::OnPTInited() {
SDL_LOG_AUTO_TRACE();
-
+ sync_primitives::AutoLock lock(encrypted_rpcs_lock_);
encrypted_rpcs_.clear();
SaveEncryptedRPC();
diff --git a/src/components/application_manager/src/rpc_service_impl.cc b/src/components/application_manager/src/rpc_service_impl.cc
index 36dcb335c1..a5e55dcd0e 100644
--- a/src/components/application_manager/src/rpc_service_impl.cc
+++ b/src/components/application_manager/src/rpc_service_impl.cc
@@ -228,8 +228,8 @@ bool RPCServiceImpl::ManageMobileCommand(
return true;
}
if (message_type == mobile_apis::messageType::notification) {
- request_ctrl_.AddNotification(command);
if (command->Init() && command->CheckPermissions()) {
+ request_ctrl_.AddNotification(command);
command->Run();
if (command->CleanUp()) {
request_ctrl_.RemoveNotification(command.get());
diff --git a/src/components/application_manager/src/state_controller_impl.cc b/src/components/application_manager/src/state_controller_impl.cc
index b8dbb69f50..28146a1adc 100644
--- a/src/components/application_manager/src/state_controller_impl.cc
+++ b/src/components/application_manager/src/state_controller_impl.cc
@@ -78,7 +78,9 @@ void StateControllerImpl::SetRegularState(ApplicationSharedPtr app,
DCHECK_OR_RETURN_VOID(state);
DCHECK_OR_RETURN_VOID(HmiState::STATE_ID_REGULAR == state->state_id());
- SDL_LOG_DEBUG("Set window #" << window_id << " regular state " << *state);
+ SDL_LOG_DEBUG("Set window #" << window_id << " regular state " << *state
+ << " hmi_state_change "
+ << request_hmi_state_change);
if (state->hmi_level() == mobile_apis::HMILevel::INVALID_ENUM ||
state->audio_streaming_state() ==
@@ -113,11 +115,12 @@ void StateControllerImpl::SetRegularState(ApplicationSharedPtr app,
const int64_t result = RequestHMIStateChange(app, hmi_level, true);
if (-1 != result) {
const uint32_t corr_id = static_cast<uint32_t>(result);
+
subscribe_on_event(
- hmi_apis::Common_HMILevel::NONE == hmi_level
- ? hmi_apis::FunctionID::BasicCommunication_CloseApplication
- : hmi_apis::FunctionID::BasicCommunication_ActivateApp,
- corr_id);
+ hmi_apis::FunctionID::BasicCommunication_CloseApplication, corr_id);
+ subscribe_on_event(hmi_apis::FunctionID::BasicCommunication_ActivateApp,
+ corr_id);
+
waiting_for_response_[app->app_id()] = resolved_state;
app_mngr_.set_application_id(corr_id, app->hmi_app_id());
return;
@@ -782,6 +785,10 @@ void StateControllerImpl::HandleOnEvent(const event_engine::Event& event) {
case FunctionID::BasicCommunication_ActivateApp:
case FunctionID::BasicCommunication_CloseApplication: {
OnHMIResponse(message);
+ unsubscribe_from_event(
+ hmi_apis::FunctionID::BasicCommunication_CloseApplication);
+ unsubscribe_from_event(
+ hmi_apis::FunctionID::BasicCommunication_ActivateApp);
break;
}
case FunctionID::BasicCommunication_OnAppActivated: {
diff --git a/src/components/application_manager/test/application_manager_impl_test.cc b/src/components/application_manager/test/application_manager_impl_test.cc
index 48ba75275b..539bc39eb2 100644
--- a/src/components/application_manager/test/application_manager_impl_test.cc
+++ b/src/components/application_manager/test/application_manager_impl_test.cc
@@ -29,8 +29,11 @@
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
+#include "application_manager/application_manager_impl.h"
+
#include <bson_object.h>
#include <stdint.h>
+
#include <memory>
#include <set>
#include <string>
@@ -38,7 +41,6 @@
#include "application_manager/application.h"
#include "application_manager/application_impl.h"
-#include "application_manager/application_manager_impl.h"
#include "application_manager/hmi_state.h"
#include "application_manager/mock_app_service_manager.h"
#include "application_manager/mock_application.h"
@@ -51,6 +53,7 @@
#include "application_manager/resumption/resume_ctrl_impl.h"
#include "application_manager/test/include/application_manager/mock_message_helper.h"
#include "connection_handler/mock_connection_handler.h"
+#include "encryption/hashing.h"
#include "gtest/gtest.h"
#include "hmi_message_handler/mock_hmi_message_handler.h"
#include "media_manager/mock_media_manager.h"
@@ -65,8 +68,6 @@
#include "utils/file_system.h"
#include "utils/lock.h"
-#include "encryption/hashing.h"
-
namespace test {
namespace components {
namespace application_manager_test {
@@ -324,7 +325,7 @@ class ApplicationManagerImplTest : public ::testing::Test {
}
bool CheckResumptionRequiredTransportAvailableTest(
- smart_objects::SmartObject* app_types_array,
+ smart_objects::SmartObjectSPtr app_types_array,
connection_handler::DeviceHandle primary_device_handle,
std::string primary_transport_device_string,
connection_handler::DeviceHandle secondary_device_handle,
@@ -1402,7 +1403,7 @@ static std::map<std::string, std::vector<std::string> > CreateTransportMap() {
}
bool ApplicationManagerImplTest::CheckResumptionRequiredTransportAvailableTest(
- smart_objects::SmartObject* app_types_array,
+ smart_objects::SmartObjectSPtr app_types_array,
connection_handler::DeviceHandle primary_device_handle,
std::string primary_transport_device_string,
connection_handler::DeviceHandle secondary_device_handle,
@@ -1446,8 +1447,9 @@ TEST_F(ApplicationManagerImplTest,
CheckResumptionRequiredTransportAvailableTest_PrimaryOnly_Success) {
using namespace ns_smart_device_link::ns_smart_objects;
- smart_objects::SmartObject app_types_array(SmartType_Array);
- app_types_array[0] = mobile_apis::AppHMIType::eType::DEFAULT;
+ smart_objects::SmartObjectSPtr app_types_array =
+ std::make_shared<smart_objects::SmartObject>(SmartType_Array);
+ (*app_types_array)[0] = mobile_apis::AppHMIType::eType::DEFAULT;
const connection_handler::DeviceHandle primary_device_handle = 1;
const connection_handler::DeviceHandle secondary_device_handle = 0;
@@ -1462,7 +1464,7 @@ TEST_F(ApplicationManagerImplTest,
// - We have SPP_BLUETOOTH for primary transport.
// -> Conclusion: the app has required transport.
bool result = CheckResumptionRequiredTransportAvailableTest(
- &app_types_array,
+ app_types_array,
primary_device_handle,
primary_transport_device_string,
secondary_device_handle,
@@ -1474,8 +1476,9 @@ TEST_F(ApplicationManagerImplTest,
CheckResumptionRequiredTransportAvailableTest_PrimaryOnly_NotListed) {
using namespace ns_smart_device_link::ns_smart_objects;
- smart_objects::SmartObject app_types_array(SmartType_Array);
- app_types_array[0] = mobile_apis::AppHMIType::eType::SOCIAL;
+ smart_objects::SmartObjectSPtr app_types_array =
+ std::make_shared<smart_objects::SmartObject>(SmartType_Array);
+ (*app_types_array)[0] = mobile_apis::AppHMIType::eType::SOCIAL;
const connection_handler::DeviceHandle primary_device_handle = 1;
const connection_handler::DeviceHandle secondary_device_handle = 0;
@@ -1487,7 +1490,7 @@ TEST_F(ApplicationManagerImplTest,
// - We do not have an entry in .ini file for SOCIAL apps.
// -> In this case, resumption is always enabled for backward compatibility.
bool result = CheckResumptionRequiredTransportAvailableTest(
- &app_types_array,
+ app_types_array,
primary_device_handle,
primary_transport_device_string,
secondary_device_handle,
@@ -1499,8 +1502,9 @@ TEST_F(ApplicationManagerImplTest,
CheckResumptionRequiredTransportAvailableTest_PrimaryOnly_Disabled) {
using namespace ns_smart_device_link::ns_smart_objects;
- smart_objects::SmartObject app_types_array(SmartType_Array);
- app_types_array[0] = mobile_apis::AppHMIType::eType::TESTING;
+ smart_objects::SmartObjectSPtr app_types_array =
+ std::make_shared<smart_objects::SmartObject>(SmartType_Array);
+ (*app_types_array)[0] = mobile_apis::AppHMIType::eType::TESTING;
const connection_handler::DeviceHandle primary_device_handle = 1;
const connection_handler::DeviceHandle secondary_device_handle = 0;
@@ -1512,7 +1516,7 @@ TEST_F(ApplicationManagerImplTest,
// - We do not have any transports allowed for TESTING apps.
// -> In this case, resumption is always disabled.
bool result = CheckResumptionRequiredTransportAvailableTest(
- &app_types_array,
+ app_types_array,
primary_device_handle,
primary_transport_device_string,
secondary_device_handle,
@@ -1524,7 +1528,8 @@ TEST_F(ApplicationManagerImplTest,
CheckResumptionRequiredTransportAvailableTest_PrimaryOnly_NoAppTypes) {
using namespace ns_smart_device_link::ns_smart_objects;
- smart_objects::SmartObject app_types_array(SmartType_Array);
+ smart_objects::SmartObjectSPtr app_types_array =
+ std::make_shared<smart_objects::SmartObject>(SmartType_Array);
// we don't specify any app type
const connection_handler::DeviceHandle primary_device_handle = 1;
@@ -1537,7 +1542,7 @@ TEST_F(ApplicationManagerImplTest,
// - .ini file specifies TCP_WIFI for EMPTY_APP entry.
// -> The app does not have required transport.
bool result = CheckResumptionRequiredTransportAvailableTest(
- &app_types_array,
+ app_types_array,
primary_device_handle,
primary_transport_device_string,
secondary_device_handle,
@@ -1571,8 +1576,9 @@ TEST_F(ApplicationManagerImplTest,
CheckResumptionRequiredTransportAvailableTest_TwoTransports_Success) {
using namespace ns_smart_device_link::ns_smart_objects;
- smart_objects::SmartObject app_types_array(SmartType_Array);
- app_types_array[0] = mobile_apis::AppHMIType::eType::MEDIA;
+ smart_objects::SmartObjectSPtr app_types_array =
+ std::make_shared<smart_objects::SmartObject>(SmartType_Array);
+ (*app_types_array)[0] = mobile_apis::AppHMIType::eType::MEDIA;
const connection_handler::DeviceHandle primary_device_handle = 1;
const connection_handler::DeviceHandle secondary_device_handle = 2;
@@ -1587,7 +1593,7 @@ TEST_F(ApplicationManagerImplTest,
// - We have TCP_WIFI for secondary transport.
// -> Conclusion: the app has required transport.
bool result = CheckResumptionRequiredTransportAvailableTest(
- &app_types_array,
+ app_types_array,
primary_device_handle,
primary_transport_device_string,
secondary_device_handle,
@@ -1599,8 +1605,9 @@ TEST_F(ApplicationManagerImplTest,
CheckResumptionRequiredTransportAvailableTest_TwoTransports_Failure) {
using namespace ns_smart_device_link::ns_smart_objects;
- smart_objects::SmartObject app_types_array(SmartType_Array);
- app_types_array[0] = mobile_apis::AppHMIType::eType::NAVIGATION;
+ smart_objects::SmartObjectSPtr app_types_array =
+ std::make_shared<smart_objects::SmartObject>(SmartType_Array);
+ (*app_types_array)[0] = mobile_apis::AppHMIType::eType::NAVIGATION;
const connection_handler::DeviceHandle primary_device_handle = 1;
const connection_handler::DeviceHandle secondary_device_handle = 2;
@@ -1615,7 +1622,7 @@ TEST_F(ApplicationManagerImplTest,
// - We have IAP_USB for primary and TCP_WIFI for secondary transport.
// -> Conclusion: the app does not have required transport.
bool result = CheckResumptionRequiredTransportAvailableTest(
- &app_types_array,
+ app_types_array,
primary_device_handle,
primary_transport_device_string,
secondary_device_handle,
@@ -1627,9 +1634,10 @@ TEST_F(ApplicationManagerImplTest,
CheckResumptionRequiredTransportAvailableTest_MultipleAppTypes_Failure) {
using namespace ns_smart_device_link::ns_smart_objects;
- smart_objects::SmartObject app_types_array(SmartType_Array);
- app_types_array[0] = mobile_apis::AppHMIType::eType::MEDIA;
- app_types_array[1] = mobile_apis::AppHMIType::eType::NAVIGATION;
+ smart_objects::SmartObjectSPtr app_types_array =
+ std::make_shared<smart_objects::SmartObject>(SmartType_Array);
+ (*app_types_array)[0] = mobile_apis::AppHMIType::eType::MEDIA;
+ (*app_types_array)[1] = mobile_apis::AppHMIType::eType::NAVIGATION;
const connection_handler::DeviceHandle primary_device_handle = 1;
const connection_handler::DeviceHandle secondary_device_handle = 2;
@@ -1645,7 +1653,7 @@ TEST_F(ApplicationManagerImplTest,
// - We have IAP_USB for primary and TCP_WIFI is secondary
// -> Conclusion: the app does NOT have required transport.
bool result = CheckResumptionRequiredTransportAvailableTest(
- &app_types_array,
+ app_types_array,
primary_device_handle,
primary_transport_device_string,
secondary_device_handle,
@@ -1657,9 +1665,10 @@ TEST_F(ApplicationManagerImplTest,
CheckResumptionRequiredTransportAvailableTest_MultipleAppTypes_Empty) {
using namespace ns_smart_device_link::ns_smart_objects;
- smart_objects::SmartObject app_types_array(SmartType_Array);
- app_types_array[0] = mobile_apis::AppHMIType::eType::NAVIGATION;
- app_types_array[1] = mobile_apis::AppHMIType::eType::SYSTEM;
+ smart_objects::SmartObjectSPtr app_types_array =
+ std::make_shared<smart_objects::SmartObject>(SmartType_Array);
+ (*app_types_array)[0] = mobile_apis::AppHMIType::eType::NAVIGATION;
+ (*app_types_array)[1] = mobile_apis::AppHMIType::eType::SYSTEM;
const connection_handler::DeviceHandle primary_device_handle = 1;
const connection_handler::DeviceHandle secondary_device_handle = 2;
@@ -1675,7 +1684,7 @@ TEST_F(ApplicationManagerImplTest,
// - We have SPP_BLUETOOTH for primary and TCP_WIFI is secondary
// -> Conclusion: the app does NOT have required transport.
bool result = CheckResumptionRequiredTransportAvailableTest(
- &app_types_array,
+ app_types_array,
primary_device_handle,
primary_transport_device_string,
secondary_device_handle,
diff --git a/src/components/application_manager/test/help_prompt_manager_test.cc b/src/components/application_manager/test/help_prompt_manager_test.cc
index d9fb0b82d9..5cb4204cbf 100644
--- a/src/components/application_manager/test/help_prompt_manager_test.cc
+++ b/src/components/application_manager/test/help_prompt_manager_test.cc
@@ -121,8 +121,8 @@ class HelpPromptManagerTest : public ::testing::Test {
void TearDown() OVERRIDE;
MessageSharedPtr CreateMsgParams();
void VRArraySetupHelper(MessageSharedPtr msg,
- SmartObject& vr_help_title,
- SmartObject& vr_help_array);
+ smart_objects::SmartObjectSPtr vr_help_title,
+ smart_objects::SmartObjectSPtr vr_help_array);
void CreateBasicParamsVRRequest(MessageSharedPtr msg);
void CreateApplication(MockHelpPromptManager& mock_help_prompt_manager);
HmiStatePtr CreateTestHmiState();
@@ -203,14 +203,15 @@ MessageSharedPtr HelpPromptManagerTest::CreateMsgParams() {
return msg;
}
-void HelpPromptManagerTest::VRArraySetupHelper(MessageSharedPtr msg,
- SmartObject& vr_help_title,
- SmartObject& vr_help_array) {
- (*msg)[am::strings::msg_params][am::strings::vr_help_title] = vr_help_title;
- vr_help_array[0] = SmartObject(smart_objects::SmartType_Map);
- vr_help_array[0][am::strings::text] = kText;
- vr_help_array[0][am::strings::position] = kPosition;
- (*msg)[am::strings::msg_params][am::strings::vr_help] = vr_help_array;
+void HelpPromptManagerTest::VRArraySetupHelper(
+ MessageSharedPtr msg,
+ smart_objects::SmartObjectSPtr vr_help_title,
+ smart_objects::SmartObjectSPtr vr_help_array) {
+ (*msg)[am::strings::msg_params][am::strings::vr_help_title] = *vr_help_title;
+ (*vr_help_array)[0] = SmartObject(smart_objects::SmartType_Map);
+ (*vr_help_array)[0][am::strings::text] = kText;
+ (*vr_help_array)[0][am::strings::position] = kPosition;
+ (*msg)[am::strings::msg_params][am::strings::vr_help] = *vr_help_array;
}
void HelpPromptManagerTest::CreateBasicParamsVRRequest(MessageSharedPtr msg) {
@@ -284,17 +285,20 @@ TEST_F(HelpPromptManagerTest, RemoveCommand_OnVrCommandDeleted) {
TEST_F(HelpPromptManagerTest,
Request_OnSetGlobalPropertiesReceived_TTS_SUCCESS) {
MessageSharedPtr msg = CreateMsgParams();
- SmartObject help_prompt(smart_objects::SmartType_Array);
- help_prompt[0][am::strings::text] = "Help_Prompt_One";
- (*msg)[am::strings::msg_params][am::strings::help_prompt] = help_prompt;
- SmartObject timeout_prompt(smart_objects::SmartType_Array);
- timeout_prompt[0][am::strings::text] = "Timeout_Prompt_One";
- (*msg)[am::strings::msg_params][am::strings::timeout_prompt] = timeout_prompt;
+ smart_objects::SmartObjectSPtr help_prompt =
+ std::make_shared<SmartObject>(smart_objects::SmartType_Array);
+ (*help_prompt)[0][am::strings::text] = "Help_Prompt_One";
+ (*msg)[am::strings::msg_params][am::strings::help_prompt] = *help_prompt;
+ smart_objects::SmartObjectSPtr timeout_prompt =
+ std::make_shared<SmartObject>(smart_objects::SmartType_Array);
+ (*timeout_prompt)[0][am::strings::text] = "Timeout_Prompt_One";
+ (*msg)[am::strings::msg_params][am::strings::timeout_prompt] =
+ *timeout_prompt;
EXPECT_CALL(mock_message_helper_, VerifyImageVrHelpItems(_, _, _)).Times(0);
- EXPECT_CALL(mock_message_helper_, VerifyTtsFiles(help_prompt, _, _))
+ EXPECT_CALL(mock_message_helper_, VerifyTtsFiles(*help_prompt, _, _))
.WillOnce(Return(mobile_apis::Result::SUCCESS));
- EXPECT_CALL(mock_message_helper_, VerifyTtsFiles(timeout_prompt, _, _))
+ EXPECT_CALL(mock_message_helper_, VerifyTtsFiles(*timeout_prompt, _, _))
.WillOnce(Return(mobile_apis::Result::SUCCESS));
EXPECT_CALL(app_mngr_, application(kConnectionKey))
@@ -302,10 +306,10 @@ TEST_F(HelpPromptManagerTest,
EXPECT_CALL(app_mngr_, RemoveAppFromTTSGlobalPropertiesList(kConnectionKey));
EXPECT_CALL(*mock_app_, app_id()).WillOnce(Return(kAppId));
- EXPECT_CALL(*mock_app_, set_help_prompt(help_prompt));
- EXPECT_CALL(*mock_app_, help_prompt()).WillOnce(Return(&help_prompt));
- EXPECT_CALL(*mock_app_, set_timeout_prompt(timeout_prompt));
- EXPECT_CALL(*mock_app_, timeout_prompt()).WillOnce(Return(&timeout_prompt));
+ EXPECT_CALL(*mock_app_, set_help_prompt(*help_prompt));
+ EXPECT_CALL(*mock_app_, help_prompt()).WillOnce(Return(help_prompt));
+ EXPECT_CALL(*mock_app_, set_timeout_prompt(*timeout_prompt));
+ EXPECT_CALL(*mock_app_, timeout_prompt()).WillOnce(Return(timeout_prompt));
EXPECT_CALL(
mock_hmi_interfaces_,
GetInterfaceFromFunction(hmi_apis::FunctionID::TTS_SetGlobalProperties))
@@ -325,34 +329,40 @@ TEST_F(HelpPromptManagerTest,
TEST_F(HelpPromptManagerTest,
Request_OnSetGlobalPropertiesReceived_UI_SUCCESS) {
MessageSharedPtr msg = CreateMsgParams();
- SmartObject vr_help_title("yes");
- SmartObject vr_help_array(smart_objects::SmartType_Array);
+ smart_objects::SmartObjectSPtr vr_help_title =
+ std::make_shared<SmartObject>("yes");
+ smart_objects::SmartObjectSPtr vr_help_array =
+ std::make_shared<SmartObject>(smart_objects::SmartType_Array);
VRArraySetupHelper(msg, vr_help_title, vr_help_array);
- (*msg)[am::strings::msg_params][am::strings::vr_help] = vr_help_array;
+ (*msg)[am::strings::msg_params][am::strings::vr_help] = *vr_help_array;
SmartObject menu_title("Menu_Title");
(*msg)[am::strings::msg_params][am::hmi_request::menu_title] = menu_title;
SmartObject menu_icon(smart_objects::SmartType_Map);
menu_icon[am::strings::value] = "1";
(*msg)[am::strings::msg_params][am::hmi_request::menu_icon] = menu_icon;
- SmartObject keyboard_properties(smart_objects::SmartType_Map);
+ smart_objects::SmartObjectSPtr keyboard_properties =
+ std::make_shared<SmartObject>(smart_objects::SmartType_Map);
(*msg)[am::strings::msg_params][am::hmi_request::keyboard_properties] =
- keyboard_properties;
+ *keyboard_properties;
EXPECT_CALL(mock_message_helper_, VerifyImage(menu_icon, _, _))
.WillOnce((Return(mobile_apis::Result::SUCCESS)));
- EXPECT_CALL(mock_message_helper_, VerifyImageVrHelpItems(vr_help_array, _, _))
+ EXPECT_CALL(mock_message_helper_,
+ VerifyImageVrHelpItems(*vr_help_array, _, _))
.WillOnce((Return(mobile_apis::Result::SUCCESS)));
EXPECT_CALL(app_mngr_, RemoveAppFromTTSGlobalPropertiesList(kConnectionKey));
EXPECT_CALL(app_mngr_, application(kConnectionKey))
.WillRepeatedly(Return(mock_app_));
- EXPECT_CALL(*mock_app_, set_vr_help_title(vr_help_title));
- EXPECT_CALL(*mock_app_, set_vr_help(vr_help_array));
- EXPECT_CALL(*mock_app_, vr_help_title()).WillOnce(Return(&vr_help_title));
- EXPECT_CALL(*mock_app_, vr_help()).WillOnce(Return(&vr_help_array));
+ EXPECT_CALL(*mock_app_, set_vr_help_title(*vr_help_title));
+ EXPECT_CALL(*mock_app_, set_vr_help(*vr_help_array));
+ EXPECT_CALL(*mock_app_, vr_help_title()).WillOnce(Return(vr_help_title));
+ EXPECT_CALL(*mock_app_, vr_help()).WillOnce(Return(vr_help_array));
EXPECT_CALL(*mock_app_, set_menu_title(menu_title));
EXPECT_CALL(*mock_app_, set_menu_icon(menu_icon));
- EXPECT_CALL(*mock_app_, set_keyboard_props(keyboard_properties));
+ EXPECT_CALL(*mock_app_, set_keyboard_props(*keyboard_properties));
+ EXPECT_CALL(*mock_app_, keyboard_props())
+ .WillOnce(Return(keyboard_properties));
EXPECT_CALL(*mock_app_, app_id()).WillOnce(Return(kAppId));
EXPECT_CALL(
mock_hmi_interfaces_,
diff --git a/src/components/application_manager/test/hmi_capabilities_sc1.json b/src/components/application_manager/test/hmi_capabilities_sc1.json
index 3731f8eb78..4f17f031f0 100644
--- a/src/components/application_manager/test/hmi_capabilities_sc1.json
+++ b/src/components/application_manager/test/hmi_capabilities_sc1.json
@@ -1,5 +1,10 @@
{
"UI": {
+ "hmiCapabilities":{
+ "navigation":false,
+ "phoneCall":true,
+ "videoStreaming":false
+ },
"systemCapabilities": {
"phoneCapability": {
"dialNumberEnabled": true
diff --git a/src/components/application_manager/test/hmi_capabilities_sc2.json b/src/components/application_manager/test/hmi_capabilities_sc2.json
index 318fcf7a3e..0105a63ff6 100644
--- a/src/components/application_manager/test/hmi_capabilities_sc2.json
+++ b/src/components/application_manager/test/hmi_capabilities_sc2.json
@@ -1,5 +1,10 @@
{
"UI": {
+ "hmiCapabilities":{
+ "navigation":true,
+ "phoneCall":false,
+ "videoStreaming":false
+ },
"language": "EN_US",
"languages": [
"EN_US",
diff --git a/src/components/application_manager/test/hmi_capabilities_test.cc b/src/components/application_manager/test/hmi_capabilities_test.cc
index 2127f46b69..2ebcb386d4 100644
--- a/src/components/application_manager/test/hmi_capabilities_test.cc
+++ b/src/components/application_manager/test/hmi_capabilities_test.cc
@@ -504,6 +504,15 @@ TEST_F(HMICapabilitiesTest,
TEST_F(
HMICapabilitiesTest,
LoadCapabilitiesFromFile_CheckNavigationCapabilities_SuccessLoadAndConvert) {
+ const std::string content_to_save =
+ "{\"UI\": {\"hmiCapabilities\": {\"navigation\":true}}}";
+
+ CreateFile(kHmiCapabilitiesCacheFile);
+
+ const std::vector<uint8_t> binary_data_to_save(content_to_save.begin(),
+ content_to_save.end());
+ file_system::Write(kHmiCapabilitiesCacheFile, binary_data_to_save);
+
hmi_capabilities_->Init(last_state_wrapper_);
const auto navigation_capability_so =
*(hmi_capabilities_->navigation_capability());
@@ -524,13 +533,42 @@ TEST_F(HMICapabilitiesTest,
EXPECT_TRUE(phone_capability_so.keyExists("dialNumberEnabled"));
EXPECT_TRUE(phone_capability_so["dialNumberEnabled"].asBool());
+}
+
+TEST_F(HMICapabilitiesTest,
+ LoadCapabilitiesFromFile_CheckHMICapabilities_SuccessLoadAndConvert) {
+ const std::string content_to_save =
+ "{\"UI\": {\"hmiCapabilities\": "
+ "{\"navigation\":true,\"phoneCall\":true,\"videoStreaming\":true}}}";
+
+ CreateFile(kHmiCapabilitiesCacheFile);
+
+ const std::vector<uint8_t> binary_data_to_save(content_to_save.begin(),
+ content_to_save.end());
+ file_system::Write(kHmiCapabilitiesCacheFile, binary_data_to_save);
+ hmi_capabilities_->Init(last_state_wrapper_);
+
+ const auto ui_hmi_capability_so = *(hmi_capabilities_->ui_hmi_capabilities());
+ EXPECT_TRUE(ui_hmi_capability_so.keyExists("navigation"));
+ EXPECT_TRUE(ui_hmi_capability_so.keyExists("phoneCall"));
+ EXPECT_TRUE(ui_hmi_capability_so.keyExists("videoStreaming"));
EXPECT_TRUE(hmi_capabilities_->phone_call_supported());
+ EXPECT_TRUE(hmi_capabilities_->navigation_supported());
+ EXPECT_TRUE(hmi_capabilities_->video_streaming_supported());
}
TEST_F(
HMICapabilitiesTest,
LoadCapabilitiesFromFile_CheckVideoStreamingCapability_SuccessLoadAndConvert) {
+ const std::string content_to_save =
+ "{\"UI\": {\"hmiCapabilities\": {\"videoStreaming\":true}}}";
+
+ CreateFile(kHmiCapabilitiesCacheFile);
+
+ const std::vector<uint8_t> binary_data_to_save(content_to_save.begin(),
+ content_to_save.end());
+ file_system::Write(kHmiCapabilitiesCacheFile, binary_data_to_save);
hmi_capabilities_->Init(last_state_wrapper_);
const auto vs_capability_so =
*(hmi_capabilities_->video_streaming_capability());
@@ -836,7 +874,15 @@ TEST_F(HMICapabilitiesTest,
const std::string hmi_capabilities_file = "hmi_capabilities_sc1.json";
ON_CALL(mock_application_manager_settings_, hmi_capabilities_file_name())
.WillByDefault(ReturnRef(hmi_capabilities_file));
+ const std::string content_to_save =
+ "{\"UI\": {\"hmiCapabilities\": "
+ "{\"navigation\":false,\"phoneCall\":true,\"videoStreaming\":false}}}";
+
+ CreateFile(kHmiCapabilitiesCacheFile);
+ const std::vector<uint8_t> binary_data_to_save(content_to_save.begin(),
+ content_to_save.end());
+ file_system::Write(kHmiCapabilitiesCacheFile, binary_data_to_save);
hmi_capabilities_->Init(last_state_wrapper_);
// Check system capabilities; only phone capability is available
@@ -857,6 +903,15 @@ TEST_F(HMICapabilitiesTest,
const std::string hmi_capabilities_file = "hmi_capabilities_sc2.json";
ON_CALL(mock_application_manager_settings_, hmi_capabilities_file_name())
.WillByDefault(ReturnRef(hmi_capabilities_file));
+ const std::string content_to_save =
+ "{\"UI\": {\"hmiCapabilities\": "
+ "{\"navigation\":true,\"phoneCall\":false,\"videoStreaming\":false}}}";
+
+ CreateFile(kHmiCapabilitiesCacheFile);
+
+ const std::vector<uint8_t> binary_data_to_save(content_to_save.begin(),
+ content_to_save.end());
+ file_system::Write(kHmiCapabilitiesCacheFile, binary_data_to_save);
hmi_capabilities_->Init(last_state_wrapper_);
@@ -1219,7 +1274,7 @@ TEST_F(HMICapabilitiesTest,
"\"EN-US\",\"languages\":[],\"displayCapabilities\" : "
"{},\"audioPassThruCapabilities\":[],\"pcmStreamCapabilities\" : "
"{},\"hmiZoneCapabilities\": \"\",\"softButtonCapabilities\" : "
- "[],\"systemCapabilities\" : {}}}";
+ "[],\"systemCapabilities\" : {},\"hmiCapabilities\" : {}}}";
const std::vector<uint8_t> binary_data_to_save(
predefined_ui_capabilities.begin(), predefined_ui_capabilities.end());
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 ac2a534929..e94ffa5961 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
@@ -217,12 +217,12 @@ class MockApplication : public ::application_manager::Application {
MOCK_CONST_METHOD0(IsVideoApplication, bool());
MOCK_METHOD0(LoadPersistentFiles, void());
// InitialApplicationData methods
- MOCK_CONST_METHOD0(app_types, const smart_objects::SmartObject*());
- MOCK_CONST_METHOD0(vr_synonyms, const smart_objects::SmartObject*());
+ MOCK_CONST_METHOD0(app_types, const smart_objects::SmartObjectSPtr());
+ MOCK_CONST_METHOD0(vr_synonyms, const smart_objects::SmartObjectSPtr());
MOCK_CONST_METHOD0(policy_app_id, std::string());
- MOCK_CONST_METHOD0(tts_name, const smart_objects::SmartObject*());
+ MOCK_CONST_METHOD0(tts_name, const smart_objects::SmartObjectSPtr());
MOCK_CONST_METHOD0(ngn_media_screen_name,
- const smart_objects::SmartObject*());
+ const smart_objects::SmartObjectSPtr());
MOCK_CONST_METHOD0(language, const mobile_apis::Language::eType&());
MOCK_CONST_METHOD0(ui_language, const mobile_apis::Language::eType&());
MOCK_CONST_METHOD0(msg_version, const utils::SemanticVersion&());
@@ -240,20 +240,20 @@ class MockApplication : public ::application_manager::Application {
void(const mobile_apis::Language::eType& ui_language));
MOCK_METHOD1(set_msg_version, void(const utils::SemanticVersion& version));
// DynamicApplicationData methods
- MOCK_CONST_METHOD0(help_prompt, const smart_objects::SmartObject*());
- MOCK_CONST_METHOD0(timeout_prompt, const smart_objects::SmartObject*());
- MOCK_CONST_METHOD0(vr_help_title, const smart_objects::SmartObject*());
- MOCK_CONST_METHOD0(vr_help, const smart_objects::SmartObject*());
+ MOCK_CONST_METHOD0(help_prompt, const smart_objects::SmartObjectSPtr());
+ MOCK_CONST_METHOD0(timeout_prompt, const smart_objects::SmartObjectSPtr());
+ MOCK_CONST_METHOD0(vr_help_title, const smart_objects::SmartObjectSPtr());
+ MOCK_CONST_METHOD0(vr_help, const smart_objects::SmartObjectSPtr());
MOCK_CONST_METHOD0(tbt_state, const mobile_apis::TBTState::eType&());
- MOCK_CONST_METHOD0(show_command, const smart_objects::SmartObject*());
- MOCK_CONST_METHOD0(tbt_show_command, const smart_objects::SmartObject*());
+ MOCK_CONST_METHOD0(show_command, const smart_objects::SmartObjectSPtr());
+ MOCK_CONST_METHOD0(tbt_show_command, const smart_objects::SmartObjectSPtr());
MOCK_CONST_METHOD0(
SubscribedButtons,
DataAccessor< ::application_manager::ButtonSubscriptions>());
- MOCK_CONST_METHOD0(keyboard_props, const smart_objects::SmartObject*());
- MOCK_CONST_METHOD0(menu_title, const smart_objects::SmartObject*());
- MOCK_CONST_METHOD0(menu_icon, const smart_objects::SmartObject*());
- MOCK_CONST_METHOD0(menu_layout, const smart_objects::SmartObject*());
+ MOCK_CONST_METHOD0(keyboard_props, const smart_objects::SmartObjectSPtr());
+ MOCK_CONST_METHOD0(menu_title, const smart_objects::SmartObjectSPtr());
+ MOCK_CONST_METHOD0(menu_icon, const smart_objects::SmartObjectSPtr());
+ MOCK_CONST_METHOD0(menu_layout, const smart_objects::SmartObjectSPtr());
MOCK_CONST_METHOD0(day_color_scheme, smart_objects::SmartObject());
MOCK_CONST_METHOD0(night_color_scheme, smart_objects::SmartObject());
MOCK_CONST_METHOD0(display_layout, std::string());
@@ -361,6 +361,8 @@ class MockApplication : public ::application_manager::Application {
mobile_apis::LayoutMode::eType());
MOCK_METHOD1(set_reset_global_properties_active, void(bool active));
MOCK_CONST_METHOD0(is_reset_global_properties_active, bool());
+ MOCK_METHOD2(set_choice_set_allow_mode, void(std::uint32_t, bool));
+ MOCK_CONST_METHOD1(is_choice_set_allowed, bool(std::uint32_t));
MOCK_CONST_METHOD0(app_id, uint32_t());
MOCK_CONST_METHOD0(mac_address, const std::string&());
MOCK_CONST_METHOD0(bundle_id, const std::string&());
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 f0da952d18..3a0bdc0741 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
@@ -114,6 +114,11 @@ class MockHMICapabilities : public ::application_manager::HMICapabilities {
MOCK_METHOD1(set_hmi_zone_capabilities,
void(const smart_objects::SmartObject& hmi_zone_capabilities));
+ MOCK_CONST_METHOD0(ui_hmi_capabilities,
+ const smart_objects::SmartObjectSPtr());
+ MOCK_METHOD1(set_ui_hmi_capabilities,
+ void(const smart_objects::SmartObject& ui_hmi_capabilities));
+
MOCK_CONST_METHOD0(soft_button_capabilities,
const smart_objects::SmartObjectSPtr());
MOCK_METHOD1(
diff --git a/src/components/application_manager/test/include/application_manager/resumption_data_test.h b/src/components/application_manager/test/include/application_manager/resumption_data_test.h
index 0596b4e500..bea920e44e 100644
--- a/src/components/application_manager/test/include/application_manager/resumption_data_test.h
+++ b/src/components/application_manager/test/include/application_manager/resumption_data_test.h
@@ -63,15 +63,7 @@ using namespace mobile_apis;
class ResumptionDataTest : public ::testing::Test {
protected:
ResumptionDataTest()
- : help_prompt_(NULL)
- , timeout_prompt_(NULL)
- , vr_help_(NULL)
- , vr_help_title_(NULL)
- , vr_synonyms_(NULL)
- , keyboard_props_(NULL)
- , menu_title_(NULL)
- , menu_icon_(NULL)
- , kCountOfCommands_(5u)
+ : kCountOfCommands_(5u)
, kCountOfChoice_(2u)
, kCountOfChoiceSets_(4u)
, kCountOfSubmenues_(3u)
@@ -106,14 +98,15 @@ class ResumptionDataTest : public ::testing::Test {
bool is_audio_;
const connection_handler::DeviceHandle device_handle_ = 10;
- sm::SmartObject* help_prompt_;
- sm::SmartObject* timeout_prompt_;
- sm::SmartObject* vr_help_;
- sm::SmartObject* vr_help_title_;
- sm::SmartObject* vr_synonyms_;
- sm::SmartObject* keyboard_props_;
- sm::SmartObject* menu_title_;
- sm::SmartObject* menu_icon_;
+ sm::SmartObjectSPtr help_prompt_;
+ sm::SmartObjectSPtr timeout_prompt_;
+ sm::SmartObjectSPtr vr_help_;
+ sm::SmartObjectSPtr vr_help_title_;
+ sm::SmartObjectSPtr vr_synonyms_;
+ sm::SmartObjectSPtr keyboard_props_;
+ sm::SmartObjectSPtr menu_title_;
+ sm::SmartObjectSPtr menu_icon_;
+ sm::SmartObjectSPtr menu_layout_;
void SetCommands();
void SetSubmenues();
@@ -121,7 +114,7 @@ class ResumptionDataTest : public ::testing::Test {
void SetAppFiles();
void SetGlobalProporties();
void SetKeyboardProperties();
- void SetMenuTitleAndIcon();
+ void SetMenuParams();
void SetHelpAndTimeoutPrompt();
void SetVRHelpTitle();
void SetSubscriptions();
@@ -137,6 +130,7 @@ class ResumptionDataTest : public ::testing::Test {
void CheckKeyboardProperties(sm::SmartObject& res_list);
void CheckMenuTitle(sm::SmartObject& res_list);
void CheckMenuIcon(sm::SmartObject& res_list);
+ void CheckMenuLayout(sm::SmartObject& res_list);
void CheckHelpPrompt(sm::SmartObject& res_list);
void CheckTimeoutPrompt(sm::SmartObject& res_list);
void CheckVRHelp(
diff --git a/src/components/application_manager/test/message_helper/message_helper_test.cc b/src/components/application_manager/test/message_helper/message_helper_test.cc
index 4b36647a11..2dd6b511d4 100644
--- a/src/components/application_manager/test/message_helper/message_helper_test.cc
+++ b/src/components/application_manager/test/message_helper/message_helper_test.cc
@@ -156,10 +156,32 @@ TEST(MessageHelperTestCreate, CreateSetAppIcon_SendPathImagetype_Equal) {
TEST(MessageHelperTestCreate,
CreateGlobalPropertiesRequestsToHMI_SmartObject_EmptyList) {
MockApplicationSharedPtr appSharedMock = std::make_shared<MockApplication>();
- EXPECT_CALL(*appSharedMock, vr_help_title()).Times(AtLeast(1));
- EXPECT_CALL(*appSharedMock, vr_help()).Times(AtLeast(1));
- EXPECT_CALL(*appSharedMock, help_prompt()).Times(AtLeast(1));
- EXPECT_CALL(*appSharedMock, timeout_prompt()).Times(AtLeast(1));
+ smart_objects::SmartObjectSPtr emptyObject =
+ std::shared_ptr<smart_objects::SmartObject>();
+ EXPECT_CALL(*appSharedMock, vr_help_title())
+ .Times(AtLeast(1))
+ .WillOnce(Return(emptyObject));
+ EXPECT_CALL(*appSharedMock, vr_help())
+ .Times(AtLeast(1))
+ .WillOnce(Return(emptyObject));
+ EXPECT_CALL(*appSharedMock, help_prompt())
+ .Times(AtLeast(1))
+ .WillOnce(Return(emptyObject));
+ EXPECT_CALL(*appSharedMock, timeout_prompt())
+ .Times(AtLeast(1))
+ .WillOnce(Return(emptyObject));
+ EXPECT_CALL(*appSharedMock, menu_title())
+ .Times(AtLeast(1))
+ .WillOnce(Return(emptyObject));
+ EXPECT_CALL(*appSharedMock, menu_icon())
+ .Times(AtLeast(1))
+ .WillOnce(Return(emptyObject));
+ EXPECT_CALL(*appSharedMock, menu_layout())
+ .Times(AtLeast(1))
+ .WillOnce(Return(emptyObject));
+ EXPECT_CALL(*appSharedMock, keyboard_props())
+ .Times(AtLeast(1))
+ .WillOnce(Return(emptyObject));
std::shared_ptr<MockHelpPromptManager> mock_help_prompt_manager =
std::make_shared<MockHelpPromptManager>();
@@ -185,16 +207,23 @@ TEST(MessageHelperTestCreate,
TEST(MessageHelperTestCreate,
CreateGlobalPropertiesRequestsToHMI_SmartObject_NotEmpty) {
MockApplicationSharedPtr appSharedMock = std::make_shared<MockApplication>();
- smart_objects::SmartObjectSPtr objPtr =
- std::make_shared<smart_objects::SmartObject>();
- (*objPtr)[0][strings::vr_help_title] = "111";
- (*objPtr)[1][strings::vr_help] = "222";
- (*objPtr)[2][strings::keyboard_properties] = "333";
- (*objPtr)[3][strings::menu_title] = "444";
- (*objPtr)[4][strings::menu_icon] = "555";
- (*objPtr)[5][strings::help_prompt] = "666";
- (*objPtr)[6][strings::timeout_prompt] = "777";
+ smart_objects::SmartObjectSPtr vrHelpTitle =
+ std::make_shared<smart_objects::SmartObject>("111");
+ smart_objects::SmartObjectSPtr vrHelp =
+ std::make_shared<smart_objects::SmartObject>("222");
+ smart_objects::SmartObjectSPtr keyboardProperties =
+ std::make_shared<smart_objects::SmartObject>("333");
+ smart_objects::SmartObjectSPtr menuTitle =
+ std::make_shared<smart_objects::SmartObject>("444");
+ smart_objects::SmartObjectSPtr menuIcon =
+ std::make_shared<smart_objects::SmartObject>("555");
+ smart_objects::SmartObjectSPtr helpPrompt =
+ std::make_shared<smart_objects::SmartObject>("666");
+ smart_objects::SmartObjectSPtr timeoutPrompt =
+ std::make_shared<smart_objects::SmartObject>("777");
+ smart_objects::SmartObjectSPtr menuLayout =
+ std::make_shared<smart_objects::SmartObject>("888");
smart_objects::SmartObject user_loc =
smart_objects::SmartObject(smart_objects::SmartType_Map);
@@ -202,25 +231,28 @@ TEST(MessageHelperTestCreate,
EXPECT_CALL(*appSharedMock, vr_help_title())
.Times(AtLeast(3))
- .WillRepeatedly(Return(&(*objPtr)[0]));
+ .WillRepeatedly(Return(vrHelpTitle));
EXPECT_CALL(*appSharedMock, vr_help())
.Times(AtLeast(2))
- .WillRepeatedly(Return(&(*objPtr)[1]));
+ .WillRepeatedly(Return(vrHelp));
EXPECT_CALL(*appSharedMock, help_prompt())
.Times(AtLeast(3))
- .WillRepeatedly(Return(&(*objPtr)[5]));
+ .WillRepeatedly(Return(helpPrompt));
EXPECT_CALL(*appSharedMock, timeout_prompt())
.Times(AtLeast(2))
- .WillRepeatedly(Return(&(*objPtr)[6]));
+ .WillRepeatedly(Return(timeoutPrompt));
EXPECT_CALL(*appSharedMock, keyboard_props())
.Times(AtLeast(2))
- .WillRepeatedly(Return(&(*objPtr)[2]));
+ .WillRepeatedly(Return(keyboardProperties));
EXPECT_CALL(*appSharedMock, menu_title())
.Times(AtLeast(2))
- .WillRepeatedly(Return(&(*objPtr)[3]));
+ .WillRepeatedly(Return(menuTitle));
EXPECT_CALL(*appSharedMock, menu_icon())
.Times(AtLeast(2))
- .WillRepeatedly(Return(&(*objPtr)[4]));
+ .WillRepeatedly(Return(menuIcon));
+ EXPECT_CALL(*appSharedMock, menu_layout())
+ .Times(AtLeast(2))
+ .WillRepeatedly(Return(menuLayout));
EXPECT_CALL(*appSharedMock, app_id()).WillRepeatedly(Return(0));
EXPECT_CALL(*appSharedMock, get_user_location())
.WillRepeatedly(ReturnRef(user_loc));
@@ -242,14 +274,16 @@ TEST(MessageHelperTestCreate,
smart_objects::SmartObject& first = *ptr[0];
smart_objects::SmartObject& second = *ptr[1];
- EXPECT_EQ((*objPtr)[0], first[strings::msg_params][strings::vr_help_title]);
- EXPECT_EQ((*objPtr)[1], first[strings::msg_params][strings::vr_help]);
- EXPECT_EQ((*objPtr)[2],
+ EXPECT_EQ(*vrHelpTitle, first[strings::msg_params][strings::vr_help_title]);
+ EXPECT_EQ(*vrHelp, first[strings::msg_params][strings::vr_help]);
+ EXPECT_EQ(*keyboardProperties,
first[strings::msg_params][strings::keyboard_properties]);
- EXPECT_EQ((*objPtr)[3], first[strings::msg_params][strings::menu_title]);
- EXPECT_EQ((*objPtr)[4], first[strings::msg_params][strings::menu_icon]);
- EXPECT_EQ((*objPtr)[5], second[strings::msg_params][strings::help_prompt]);
- EXPECT_EQ((*objPtr)[6], second[strings::msg_params][strings::timeout_prompt]);
+ EXPECT_EQ(*menuTitle, first[strings::msg_params][strings::menu_title]);
+ EXPECT_EQ(*menuIcon, first[strings::msg_params][strings::menu_icon]);
+ EXPECT_EQ(*helpPrompt, second[strings::msg_params][strings::help_prompt]);
+ EXPECT_EQ(*timeoutPrompt,
+ second[strings::msg_params][strings::timeout_prompt]);
+ EXPECT_EQ(*menuLayout, first[strings::msg_params][strings::menu_layout]);
}
TEST(MessageHelperTestCreate, CreateShowRequestToHMI_SendSmartObject_Equal) {
@@ -258,11 +292,9 @@ TEST(MessageHelperTestCreate, CreateShowRequestToHMI_SendSmartObject_Equal) {
smart_objects::SmartObjectSPtr smartObjectPtr =
std::make_shared<smart_objects::SmartObject>();
- const smart_objects::SmartObject& object = *smartObjectPtr;
-
EXPECT_CALL(*appSharedMock, show_command())
.Times(AtLeast(2))
- .WillRepeatedly(Return(&object));
+ .WillRepeatedly(Return(smartObjectPtr));
smart_objects::SmartObjectList ptr =
MessageHelper::CreateShowRequestToHMI(appSharedMock, 0u);
diff --git a/src/components/application_manager/test/policy_handler_test.cc b/src/components/application_manager/test/policy_handler_test.cc
index 353f3f05b7..50f2153616 100644
--- a/src/components/application_manager/test/policy_handler_test.cc
+++ b/src/components/application_manager/test/policy_handler_test.cc
@@ -127,7 +127,7 @@ class PolicyHandlerTest : public ::testing::Test {
, kGroupNameAllowed_("name_allowed")
, kGroupNameDisallowed_("name_disallowed")
, kCallsCount_(1u)
- , kTimeout_(1000u)
+ , kTimeout_(2000u)
, mock_message_helper_(*MockMessageHelper::message_helper_mock()) {
Mock::VerifyAndClearExpectations(&mock_message_helper_);
}
@@ -195,13 +195,15 @@ class PolicyHandlerTest : public ::testing::Test {
.WillByDefault(ReturnRef(mock_session_observer));
mock_app_ = std::make_shared<application_manager_test::MockApplication>();
+ ON_CALL(*mock_app_, IsRegistered()).WillByDefault(Return(true));
}
virtual void TearDown() OVERRIDE {
- Mock::VerifyAndClearExpectations(&mock_message_helper_);
+ EXPECT_TRUE(policy_handler_.UnloadPolicyLibrary());
ON_CALL(
mock_event_dispatcher_,
remove_observer(_, testing::Matcher<event_engine::EventObserver&>(_)));
+ Mock::VerifyAndClearExpectations(&mock_message_helper_);
}
void ChangePolicyManagerToMock() {
@@ -2268,34 +2270,26 @@ TEST_F(PolicyHandlerTest,
EXPECT_CALL(*mock_app_, policy_app_id()).WillOnce(Return(kPolicyAppId_));
EXPECT_CALL(*mock_app_, device()).WillOnce(Return(device));
- auto waiter_first = TestAsyncWaiter::createInstance();
-#ifdef EXTERNAL_PROPRIETARY_MODE
- EXPECT_CALL(*mock_policy_manager_, SetUserConsentForApp(_, _))
- .WillOnce(NotifyTestAsyncWaiter(waiter_first));
-#else
- EXPECT_CALL(*mock_policy_manager_, SetUserConsentForApp(_))
- .WillOnce(NotifyTestAsyncWaiter(waiter_first));
-#endif
ExternalConsentStatusItem item(1u, 1u, kStatusOn);
ExternalConsentStatus external_consent_status;
external_consent_status.insert(item);
+ auto waiter = TestAsyncWaiter::createInstance();
#ifdef EXTERNAL_PROPRIETARY_MODE
- auto waiter_second = TestAsyncWaiter::createInstance();
-
EXPECT_CALL(*mock_policy_manager_,
SetExternalConsentStatus(external_consent_status))
- .WillOnce(Return(true));
+ .WillOnce(DoAll(NotifyTestAsyncWaiter(waiter), Return(true)));
+
policy_handler_.OnAppPermissionConsent(
kConnectionKey_, permissions, external_consent_status);
#else
- policy_handler_.OnAppPermissionConsent(kConnectionKey_, permissions);
+ EXPECT_CALL(*mock_policy_manager_, SetUserConsentForApp(_))
+ .WillOnce(NotifyTestAsyncWaiter(waiter));
+ policy_handler_.OnAppPermissionConsent(kConnectionKey_, permissions);
#endif
- EXPECT_TRUE(waiter_first->WaitFor(kCallsCount_, kTimeout_));
-#ifdef EXTERNAL_PROPRIETARY_MODE
- EXPECT_TRUE(waiter_second->WaitFor(kCallsCount_, kTimeout_));
-#endif
+
+ EXPECT_TRUE(waiter->WaitFor(kCallsCount_, kTimeout_));
}
TEST_F(PolicyHandlerTest,
@@ -2401,6 +2395,7 @@ TEST_F(PolicyHandlerTest,
EXPECT_CALL(*mock_app_, device()).WillRepeatedly(Return(1u));
EXPECT_CALL(*mock_app_, policy_app_id())
.WillRepeatedly(Return(kPolicyAppId_));
+ EXPECT_CALL(*mock_app_, mac_address()).WillRepeatedly(ReturnRef(kMacAddr_));
EXPECT_CALL(
mock_session_observer,
@@ -2418,22 +2413,21 @@ TEST_F(PolicyHandlerTest,
ExternalConsentStatusItem item = {1u, 1u, kStatusOn};
ExternalConsentStatus external_consent_status;
external_consent_status.insert(item);
-#ifdef EXTERNAL_PROPRIETARY_MODE
- auto waiter = TestAsyncWaiter::createInstance();
+ auto waiter = TestAsyncWaiter::createInstance();
+#ifdef EXTERNAL_PROPRIETARY_MODE
EXPECT_CALL(*mock_policy_manager_,
SetExternalConsentStatus(external_consent_status))
.WillOnce(DoAll(NotifyTestAsyncWaiter(waiter), Return(true)));
policy_handler_.OnAppPermissionConsent(
invalid_connection_key, permissions, external_consent_status);
#else
+ EXPECT_CALL(*mock_policy_manager_, SetUserConsentForApp(_))
+ .WillOnce(NotifyTestAsyncWaiter(waiter));
policy_handler_.OnAppPermissionConsent(invalid_connection_key, permissions);
#endif
- Mock::VerifyAndClearExpectations(mock_app_.get());
-#ifdef EXTERNAL_PROPRIETARY_MODE
EXPECT_TRUE(waiter->WaitFor(kCallsCount_, kTimeout_));
-#endif
}
TEST_F(PolicyHandlerTest,
@@ -2463,6 +2457,7 @@ TEST_F(PolicyHandlerTest,
EXPECT_CALL(*mock_app_, device()).WillRepeatedly(Return(1u));
EXPECT_CALL(*mock_app_, policy_app_id())
.WillRepeatedly(Return(kPolicyAppId_));
+ EXPECT_CALL(*mock_app_, mac_address()).WillRepeatedly(ReturnRef(kMacAddr_));
EXPECT_CALL(
mock_session_observer,
@@ -2480,24 +2475,25 @@ TEST_F(PolicyHandlerTest,
ExternalConsentStatusItem item = {1u, 1u, kStatusOn};
ExternalConsentStatus external_consent_status;
external_consent_status.insert(item);
-#ifdef EXTERNAL_PROPRIETARY_MODE
- auto waiter = TestAsyncWaiter::createInstance();
+ auto waiter = TestAsyncWaiter::createInstance();
+#ifdef EXTERNAL_PROPRIETARY_MODE
ON_CALL(*mock_policy_manager_, IsNeedToUpdateExternalConsentStatus(_))
.WillByDefault(Return(false));
EXPECT_CALL(*mock_policy_manager_,
SetExternalConsentStatus(external_consent_status))
.WillOnce(Return(true));
+ EXPECT_CALL(*mock_policy_manager_, SetUserConsentForApp(_, _))
+ .WillOnce(NotifyTestAsyncWaiter(waiter));
policy_handler_.OnAppPermissionConsent(
invalid_connection_key, permissions, external_consent_status);
#else
+ EXPECT_CALL(*mock_policy_manager_, SetUserConsentForApp(_))
+ .WillOnce(NotifyTestAsyncWaiter(waiter));
policy_handler_.OnAppPermissionConsent(invalid_connection_key, permissions);
#endif
- Mock::VerifyAndClearExpectations(mock_app_.get());
-#ifdef EXTERNAL_PROPRIETARY_MODE
- EXPECT_FALSE(waiter->WaitFor(kCallsCount_, kTimeout_));
-#endif
+ EXPECT_TRUE(waiter->WaitFor(kCallsCount_, kTimeout_));
}
ACTION_P(SetEndpoint, endpoint) {
diff --git a/src/components/application_manager/test/resumption/resumption_data_test.cc b/src/components/application_manager/test/resumption/resumption_data_test.cc
index a416cbbad5..cb5a4d9a56 100644
--- a/src/components/application_manager/test/resumption/resumption_data_test.cc
+++ b/src/components/application_manager/test/resumption/resumption_data_test.cc
@@ -30,19 +30,19 @@
* POSSIBILITY OF SUCH DAMAGE.
*/
+#include "application_manager/resumption_data_test.h"
+
#include <algorithm>
#include <string>
-#include "gtest/gtest.h"
#include "application_manager/application.h"
#include "application_manager/message_helper.h"
#include "application_manager/mock_resumption_data.h"
#include "application_manager/usage_statistics.h"
+#include "gtest/gtest.h"
#include "utils/custom_string.h"
#include "utils/data_accessor.h"
-#include "application_manager/resumption_data_test.h"
-
namespace test {
namespace components {
namespace resumption_test {
@@ -53,15 +53,6 @@ using ::testing::ReturnPointee;
using ::testing::ReturnRef;
ResumptionDataTest::~ResumptionDataTest() {
- delete help_prompt_;
- delete timeout_prompt_;
- delete vr_help_;
- delete vr_help_title_;
- delete vr_synonyms_;
- delete keyboard_props_;
- delete menu_title_;
- delete menu_icon_;
-
for (am::CommandsMap::iterator it = test_commands_map.begin();
test_commands_map.end() != it;
++it) {
@@ -266,6 +257,7 @@ void ResumptionDataTest::CheckGlobalProporties(sm::SmartObject& res_list) {
CheckKeyboardProperties(res_list[am::strings::keyboard_properties]);
CheckMenuTitle(res_list[am::strings::menu_title]);
CheckMenuIcon(res_list[am::strings::menu_icon]);
+ CheckMenuLayout(res_list[am::strings::menu_layout]);
}
void ResumptionDataTest::CheckKeyboardProperties(sm::SmartObject& res_list) {
@@ -317,6 +309,12 @@ void ResumptionDataTest::CheckMenuIcon(sm::SmartObject& res_list) {
static_cast<ImageType::eType>(res_list[am::strings::image_type].asInt()));
}
+void ResumptionDataTest::CheckMenuLayout(sm::SmartObject& res_list) {
+ MenuLayout::eType value = static_cast<MenuLayout::eType>(
+ (*menu_layout_)[am::strings::menu_layout].asInt());
+ EXPECT_EQ(value, res_list[am::strings::menu_layout].asInt());
+}
+
void ResumptionDataTest::CheckHelpPrompt(sm::SmartObject& res_list) {
for (uint i = 0; i < tts_chunks_count; ++i) {
std::string promt = (*help_prompt_)[i][am::strings::help_prompt].asString();
@@ -420,17 +418,15 @@ void ResumptionDataTest::PrepareData() {
ON_CALL(*app_mock, sub_menu_map()).WillByDefault(Return(sub_menu_m));
ON_CALL(*app_mock, choice_set_map()).WillByDefault(Return(choice_set_m));
- ON_CALL(*app_mock, help_prompt()).WillByDefault(ReturnPointee(&help_prompt_));
- ON_CALL(*app_mock, timeout_prompt())
- .WillByDefault(ReturnPointee(&timeout_prompt_));
- ON_CALL(*app_mock, vr_help()).WillByDefault(ReturnPointee(&vr_help_));
- ON_CALL(*app_mock, vr_help_title())
- .WillByDefault(ReturnPointee(&vr_help_title_));
+ ON_CALL(*app_mock, help_prompt()).WillByDefault(Return(help_prompt_));
+ ON_CALL(*app_mock, timeout_prompt()).WillByDefault(Return(timeout_prompt_));
+ ON_CALL(*app_mock, vr_help()).WillByDefault(Return(vr_help_));
+ ON_CALL(*app_mock, vr_help_title()).WillByDefault(Return(vr_help_title_));
- ON_CALL(*app_mock, keyboard_props())
- .WillByDefault(ReturnPointee(&keyboard_props_));
- ON_CALL(*app_mock, menu_title()).WillByDefault(ReturnPointee(&menu_title_));
- ON_CALL(*app_mock, menu_icon()).WillByDefault(ReturnPointee(&menu_icon_));
+ ON_CALL(*app_mock, keyboard_props()).WillByDefault(Return(keyboard_props_));
+ ON_CALL(*app_mock, menu_title()).WillByDefault(Return(menu_title_));
+ ON_CALL(*app_mock, menu_icon()).WillByDefault(Return(menu_icon_));
+ ON_CALL(*app_mock, menu_layout()).WillByDefault(Return(menu_layout_));
ON_CALL(*app_mock, SubscribedButtons()).WillByDefault(Return(btn_sub));
@@ -456,12 +452,12 @@ void ResumptionDataTest::SetDefaultWindowIds() {
void ResumptionDataTest::SetGlobalProporties() {
SetKeyboardProperties();
- SetMenuTitleAndIcon();
+ SetMenuParams();
SetHelpAndTimeoutPrompt();
SetVRHelpTitle();
}
-void ResumptionDataTest::SetMenuTitleAndIcon() {
+void ResumptionDataTest::SetMenuParams() {
custom_str::CustomString icon_name("test icon");
sm::SmartObject sm_icon;
sm_icon[am::strings::value] = "test icon";
@@ -470,8 +466,13 @@ void ResumptionDataTest::SetMenuTitleAndIcon() {
sm::SmartObject sm_title;
sm_title = "test title";
- menu_title_ = new sm::SmartObject(sm_title);
- menu_icon_ = new sm::SmartObject(sm_icon);
+
+ sm::SmartObject sm_layout;
+ sm_layout = MenuLayout::LIST;
+
+ menu_title_ = std::make_shared<sm::SmartObject>(sm_title);
+ menu_icon_ = std::make_shared<sm::SmartObject>(sm_icon);
+ menu_layout_ = std::make_shared<sm::SmartObject>(sm_layout);
}
void ResumptionDataTest::SetHelpAndTimeoutPrompt() {
@@ -484,7 +485,7 @@ void ResumptionDataTest::SetHelpAndTimeoutPrompt() {
help_prompt[i][am::strings::text] = "help prompt name" + std::string(numb);
help_prompt[i][am::strings::type] = SpeechCapabilities::PRE_RECORDED;
}
- help_prompt_ = new sm::SmartObject(help_prompt);
+ help_prompt_ = std::make_shared<sm::SmartObject>(help_prompt);
for (uint i = 0; i < tts_chunks_count; ++i) {
char numb[12];
std::snprintf(numb, 12, "%d", i);
@@ -492,7 +493,7 @@ void ResumptionDataTest::SetHelpAndTimeoutPrompt() {
timeout_prompt[i][am::strings::type] = SpeechCapabilities::SC_TEXT;
}
- timeout_prompt_ = new sm::SmartObject(timeout_prompt);
+ timeout_prompt_ = std::make_shared<sm::SmartObject>(timeout_prompt);
}
void ResumptionDataTest::SetVRHelpTitle() {
@@ -507,8 +508,8 @@ void ResumptionDataTest::SetVRHelpTitle() {
vr_help[i][am::strings::position] = i;
}
- vr_help_ = new sm::SmartObject(vr_help);
- vr_help_title_ = new sm::SmartObject(vr_help_title);
+ vr_help_ = std::make_shared<sm::SmartObject>(vr_help);
+ vr_help_title_ = std::make_shared<sm::SmartObject>(vr_help_title);
}
void ResumptionDataTest::SetCommands() {
@@ -618,7 +619,7 @@ void ResumptionDataTest::SetKeyboardProperties() {
keyboard[am::strings::auto_complete_text] = "complete";
keyboard[am::strings::limited_character_list][0] = "y";
keyboard[am::strings::limited_character_list][1] = "n";
- keyboard_props_ = new sm::SmartObject(keyboard);
+ keyboard_props_ = std::make_shared<sm::SmartObject>(keyboard);
}
void ResumptionDataTest::SetSubscriptions() {
diff --git a/src/components/application_manager/test/sdl_pt_update.json b/src/components/application_manager/test/sdl_pt_update.json
index bb69933497..e3c9c15861 100644
--- a/src/components/application_manager/test/sdl_pt_update.json
+++ b/src/components/application_manager/test/sdl_pt_update.json
@@ -16,7 +16,6 @@
"Emergency-1"
],
"keep_context" : true,
- "memory_kb" : 1000,
"nicknames" : [ "SyncProxyTester" ],
"priority" : "EMERGENCY",
"steal_focus" : true,
@@ -32,7 +31,6 @@
"default_hmi" : "NONE",
"groups" : [ "Base-4" ],
"keep_context" : false,
- "memory_kb" : 1000,
"priority" : "NONE",
"steal_focus" : false,
"watchdog_timer_ms" : 20000
@@ -40,7 +38,6 @@
"device" : {
"default_hmi" : "NONE",
"groups" : [ "Base-4" ],
- "memory_kb" : 1000,
"watchdog_timer_ms" : 20000,
"keep_context" : false,
"priority" : "NONE",
@@ -50,7 +47,6 @@
"default_hmi" : "NONE",
"groups" : [ "pre_Base-1" ],
"keep_context" : false,
- "memory_kb" : 1000,
"priority" : "NONE",
"steal_focus" : false,
"watchdog_timer_ms" : 20000
@@ -1607,9 +1603,6 @@
}
},
"module_config" : {
- "device_certificates" : {
- "HUU40DAS7F970UEI17A73JH32L41K32JH4L1K234H3K4" : "aldhfkahfgkafrblgjr"
- },
"endpoints" : {
"0x07" : {
"default" : [ "http://x.x.x.x:3000/api/1/policies" ]
diff --git a/src/components/config_profile/src/profile.cc b/src/components/config_profile/src/profile.cc
index f318ec98f5..38be86c72f 100644
--- a/src/components/config_profile/src/profile.cc
+++ b/src/components/config_profile/src/profile.cc
@@ -2298,8 +2298,8 @@ void Profile::UpdateValues() {
kProtocolHandlerSection,
kMaxSupportedProtocolVersionKey);
- if (max_supported_protocol_version_ < 1) {
- max_supported_protocol_version_ = 1;
+ if (max_supported_protocol_version_ < 2) {
+ max_supported_protocol_version_ = 2;
} else if (max_supported_protocol_version_ >
kDefaultMaxSupportedProtocolVersion) {
max_supported_protocol_version_ = kDefaultMaxSupportedProtocolVersion;
diff --git a/src/components/connection_handler/src/connection_handler_impl.cc b/src/components/connection_handler/src/connection_handler_impl.cc
index c2c70ccae8..e00eaa33e0 100644
--- a/src/components/connection_handler/src/connection_handler_impl.cc
+++ b/src/components/connection_handler/src/connection_handler_impl.cc
@@ -1487,8 +1487,13 @@ void ConnectionHandlerImpl::AddCloudAppDevice(
const transport_manager::transport_adapter::CloudAppProperties&
cloud_properties) {
cloud_app_id_map_lock_.Acquire();
- cloud_app_id_map_[policy_app_id] =
- std::make_pair(cloud_properties.endpoint, 0);
+ auto it = cloud_app_id_map_.find(policy_app_id);
+ if (cloud_app_id_map_.end() == it ||
+ cloud_properties.endpoint != it->second.first) {
+ // Init map entry if does not exist or if endpoint changed
+ cloud_app_id_map_[policy_app_id] =
+ std::make_pair(cloud_properties.endpoint, 0);
+ }
cloud_app_id_map_lock_.Release();
transport_manager_.AddCloudDevice(cloud_properties);
}
diff --git a/src/components/connection_handler/test/connection_handler_impl_test.cc b/src/components/connection_handler/test/connection_handler_impl_test.cc
index 79b237253c..5c9f9a7bd3 100644
--- a/src/components/connection_handler/test/connection_handler_impl_test.cc
+++ b/src/components/connection_handler/test/connection_handler_impl_test.cc
@@ -2463,6 +2463,98 @@ TEST_F(ConnectionHandlerTest, CloseSession_LastSession_ConnectionOpened) {
EXPECT_EQ(0u, connection->session_map().size());
EXPECT_EQ(1u, connection_list.size());
}
+
+TEST_F(ConnectionHandlerTest, AddCloudAppDevice_GetCloudAppID_Success) {
+ const transport_manager::transport_adapter::CloudAppProperties properties{
+ "ws://192.168.1.100:9876", "", true, "iAmAAuthToken!", "WS", "CLOUD"};
+ std::string policyID = "iAmAPolicyID-12345";
+ EXPECT_CALL(mock_transport_manager_, AddCloudDevice(_));
+ connection_handler_->AddCloudAppDevice(policyID, properties);
+
+ const std::string result = connection_handler_->GetCloudAppID(0);
+ EXPECT_EQ(result, policyID);
+}
+
+TEST_F(ConnectionHandlerTest, AddCloudAppDevice_OnConnectPending_Success) {
+ std::string endpoint = "ws://192.168.1.100:9876";
+ const transport_manager::transport_adapter::CloudAppProperties properties{
+ endpoint, "", true, "iAmAAuthToken!", "WS", "CLOUD"};
+ std::string policyID = "iAmAPolicyID-12345";
+ const transport_manager::DeviceInfo device_info(1, endpoint, endpoint, "WS");
+
+ connection_handler_->OnDeviceAdded(device_info);
+
+ EXPECT_CALL(mock_transport_manager_, AddCloudDevice(_));
+ connection_handler_->AddCloudAppDevice(policyID, properties);
+
+ connection_handler_test::MockConnectionHandlerObserver
+ mock_connection_handler_observer;
+ connection_handler_->set_connection_handler_observer(
+ &mock_connection_handler_observer);
+ EXPECT_CALL(mock_connection_handler_observer,
+ CreatePendingApplication(1, device_info, _));
+ connection_handler_->OnConnectionPending(device_info, 1);
+
+ const std::string result = connection_handler_->GetCloudAppID(1);
+ EXPECT_EQ(result, policyID);
+}
+
+TEST_F(ConnectionHandlerTest, AddCloudAppDevice_Repeated_Success) {
+ std::string endpoint = "ws://192.168.1.100:9876";
+ const transport_manager::transport_adapter::CloudAppProperties properties{
+ endpoint, "", true, "iAmAAuthToken!", "WS", "CLOUD"};
+ std::string policyID = "iAmAPolicyID-12345";
+ const transport_manager::DeviceInfo device_info(1, endpoint, endpoint, "WS");
+
+ connection_handler_->OnDeviceAdded(device_info);
+
+ EXPECT_CALL(mock_transport_manager_, AddCloudDevice(_)).Times(2);
+ connection_handler_->AddCloudAppDevice(policyID, properties);
+
+ connection_handler_test::MockConnectionHandlerObserver
+ mock_connection_handler_observer;
+ connection_handler_->set_connection_handler_observer(
+ &mock_connection_handler_observer);
+ EXPECT_CALL(mock_connection_handler_observer,
+ CreatePendingApplication(1, device_info, _));
+ connection_handler_->OnConnectionPending(device_info, 1);
+
+ // Call AddCloudAppDevice and verify policy id is still recoverable
+ connection_handler_->AddCloudAppDevice(policyID, properties);
+ const std::string result = connection_handler_->GetCloudAppID(1);
+ EXPECT_EQ(result, policyID);
+}
+
+TEST_F(ConnectionHandlerTest, AddCloudAppDevice_NewEndpoint_Success) {
+ std::string endpoint = "ws://192.168.1.100:9876";
+ const transport_manager::transport_adapter::CloudAppProperties properties{
+ endpoint, "", true, "iAmAAuthToken!", "WS", "CLOUD"};
+ std::string policyID = "iAmAPolicyID-12345";
+ const transport_manager::DeviceInfo device_info(1, endpoint, endpoint, "WS");
+
+ connection_handler_->OnDeviceAdded(device_info);
+
+ EXPECT_CALL(mock_transport_manager_, AddCloudDevice(_)).Times(2);
+ connection_handler_->AddCloudAppDevice(policyID, properties);
+
+ connection_handler_test::MockConnectionHandlerObserver
+ mock_connection_handler_observer;
+ connection_handler_->set_connection_handler_observer(
+ &mock_connection_handler_observer);
+ EXPECT_CALL(mock_connection_handler_observer,
+ CreatePendingApplication(1, device_info, _));
+ connection_handler_->OnConnectionPending(device_info, 1);
+
+ // Call AddCloudAppDevice with new endpoint and verify connection id re-init
+ // to 0
+ std::string endpoint2 = "ws://192.168.1.111:9888";
+ const transport_manager::transport_adapter::CloudAppProperties properties2{
+ endpoint2, "", true, "iAmAAuthToken2!", "WS", "CLOUD"};
+ connection_handler_->AddCloudAppDevice(policyID, properties2);
+ const std::string result = connection_handler_->GetCloudAppID(0);
+ EXPECT_EQ(result, policyID);
+}
+
} // namespace connection_handler_test
} // namespace components
} // namespace test
diff --git a/src/components/include/application_manager/application_manager.h b/src/components/include/application_manager/application_manager.h
index 5fd9be2a66..a0092b93df 100644
--- a/src/components/include/application_manager/application_manager.h
+++ b/src/components/include/application_manager/application_manager.h
@@ -216,6 +216,9 @@ class ApplicationManager {
virtual ApplicationSharedPtr application_by_policy_id(
const std::string& policy_app_id) const = 0;
+ virtual ApplicationSharedPtr pending_application_by_hmi_app(
+ uint32_t hmi_app_id) const = 0;
+
virtual ApplicationSharedPtr pending_application_by_policy_id(
const std::string& policy_app_id) const = 0;
diff --git a/src/components/include/application_manager/hmi_capabilities.h b/src/components/include/application_manager/hmi_capabilities.h
index 93cb09737d..16bc1b8a2c 100644
--- a/src/components/include/application_manager/hmi_capabilities.h
+++ b/src/components/include/application_manager/hmi_capabilities.h
@@ -253,6 +253,19 @@ class HMICapabilities {
const smart_objects::SmartObject& hmi_zone_capabilities) = 0;
/**
+ * @brief Retrieves information about the HMI capabilities
+ * @return Currently supported UI HMI capabilities
+ */
+ virtual const smart_objects::SmartObjectSPtr ui_hmi_capabilities() const = 0;
+
+ /**
+ * @brief Sets supported HMI capabilities
+ * @param ui_hmi_capabilities supported HMI capabilities
+ */
+ virtual void set_ui_hmi_capabilities(
+ const smart_objects::SmartObject& ui_hmi_capabilities) = 0;
+
+ /**
* @brief Retrieves information about the SoftButton's capabilities
* @return Currently supported SoftButton's capabilities
*/
diff --git a/src/components/include/application_manager/policies/policy_handler_interface.h b/src/components/include/application_manager/policies/policy_handler_interface.h
index d79c059b34..40a3fecfba 100644
--- a/src/components/include/application_manager/policies/policy_handler_interface.h
+++ b/src/components/include/application_manager/policies/policy_handler_interface.h
@@ -407,6 +407,9 @@ class PolicyHandlerInterface : public VehicleDataItemProvider {
const std::string url = std::string(),
const std::string snapshot_path = std::string()) = 0;
#endif // EXTERNAL_PROPRIETARY_MODE
+#ifndef PROPRIETARY_MODE
+ virtual void UpdateLastPTUApp(const uint32_t app_id) = 0;
+#endif // PROPRIETARY_MODE
/**
* @brief Retrieve potential application id to be used for snapshot sending
@@ -426,6 +429,8 @@ class PolicyHandlerInterface : public VehicleDataItemProvider {
virtual void OnPTInited() = 0;
+ virtual bool IsPTUSystemRequestAllowed(const uint32_t app_id) = 0;
+
/**
* @brief Force stops retry sequence timer and resets retry sequence
*/
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 ef0f20ac65..dfc9cbab5a 100644
--- a/src/components/include/test/application_manager/mock_application_manager.h
+++ b/src/components/include/test/application_manager/mock_application_manager.h
@@ -113,6 +113,9 @@ class MockApplicationManager : public application_manager::ApplicationManager {
MOCK_CONST_METHOD1(application_by_policy_id,
application_manager::ApplicationSharedPtr(
const std::string& policy_app_id));
+ MOCK_CONST_METHOD1(
+ pending_application_by_hmi_app,
+ application_manager::ApplicationSharedPtr(uint32_t hmi_app_id));
MOCK_CONST_METHOD1(pending_application_by_policy_id,
application_manager::ApplicationSharedPtr(
const std::string& policy_app_id));
diff --git a/src/components/include/test/application_manager/policies/mock_policy_handler_interface.h b/src/components/include/test/application_manager/policies/mock_policy_handler_interface.h
index ca5d25ed4c..5f752e1a81 100644
--- a/src/components/include/test/application_manager/policies/mock_policy_handler_interface.h
+++ b/src/components/include/test/application_manager/policies/mock_policy_handler_interface.h
@@ -201,6 +201,9 @@ class MockPolicyHandlerInterface : public policy::PolicyHandlerInterface {
const std::string url,
const std::string snapshot_path));
#endif
+#ifndef PROPRIETARY_MODE
+ MOCK_METHOD1(UpdateLastPTUApp, void(const uint32_t app_id));
+#endif
MOCK_CONST_METHOD0(GetAppIdForSending, uint32_t());
MOCK_METHOD1(
GetAppName,
@@ -210,6 +213,7 @@ class MockPolicyHandlerInterface : public policy::PolicyHandlerInterface {
MOCK_METHOD1(OnCertificateUpdated, void(const std::string& certificate_data));
MOCK_METHOD1(OnPTUFinished, void(const bool ptu_result));
MOCK_METHOD0(OnPTInited, void());
+ MOCK_METHOD1(IsPTUSystemRequestAllowed, bool(const uint32_t app_id));
MOCK_METHOD0(StopRetrySequence, void());
MOCK_METHOD1(OnCertificateDecrypted, void(bool is_succeeded));
MOCK_METHOD0(CanUpdate, bool());
diff --git a/src/components/interfaces/CMakeLists.txt b/src/components/interfaces/CMakeLists.txt
index 7f1a65277d..5a87e69add 100644
--- a/src/components/interfaces/CMakeLists.txt
+++ b/src/components/interfaces/CMakeLists.txt
@@ -29,14 +29,7 @@
# POSSIBILITY OF SUCH DAMAGE.
# Copy RPC spec submodule files to interfaces directory
-if(EXISTS ${CMAKE_SOURCE_DIR}/tools/rpc_spec/)
- execute_process(COMMAND ${CMAKE_COMMAND} -E copy_if_different
- ${CMAKE_SOURCE_DIR}/tools/rpc_spec/MOBILE_API.xml
- ${CMAKE_CURRENT_SOURCE_DIR}/MOBILE_API.xml)
- execute_process(COMMAND ${CMAKE_COMMAND} -E copy_if_different
- ${CMAKE_SOURCE_DIR}/tools/rpc_spec/MOBILE_API.xsd
- ${CMAKE_CURRENT_SOURCE_DIR}/MOBILE_API.xsd)
-else ()
+if(NOT EXISTS ${CMAKE_SOURCE_DIR}/tools/rpc_spec/)
message( FATAL_ERROR "Missing the RPC Spec submodule" )
message( FATAL_ERROR "Please run `git submodule update --init` in the SDL Core source directory" )
endif ()
@@ -52,9 +45,20 @@ include_directories (
${CMAKE_BINARY_DIR}
)
-execute_process(COMMAND /usr/bin/env python3 -m pip install --upgrade --user pip setuptools wheel)
set(GENERATOR_REQUIREMENTS "${CMAKE_SOURCE_DIR}/tools/InterfaceGenerator/requirements.txt")
-execute_process(COMMAND /usr/bin/env python3 -m pip install --user --requirement ${GENERATOR_REQUIREMENTS})
+file(STRINGS ${GENERATOR_REQUIREMENTS} REQUIREMENTS_LIST)
+execute_process(COMMAND /usr/bin/env python3 -m pip list --user OUTPUT_VARIABLE PYTHON_PACKAGES_LIST)
+
+foreach(REQUIREMENT_PACKAGE IN LISTS REQUIREMENTS_LIST)
+ string(FIND "${PYTHON_PACKAGES_LIST}" "${REQUIREMENT_PACKAGE}" PACKAGE_FOUND)
+ if (PACKAGE_FOUND EQUAL -1)
+ message(WARNING "${REQUIREMENT_PACKAGE} not found!")
+ endif()
+endforeach()
+
+add_custom_target(install_python_dependencies
+ COMMAND /usr/bin/env python3 -m pip install --user --requirement ${GENERATOR_REQUIREMENTS}
+)
generate_interface("v4_protocol_v1_2_no_extra.xml" "ns_smart_device_link_rpc::V1" "sdlrpcv1")
add_library(v4_protocol_v1_2_no_extra ${CMAKE_CURRENT_BINARY_DIR}/v4_protocol_v1_2_no_extra_schema.cc)
diff --git a/src/components/interfaces/HMI_API.xml b/src/components/interfaces/HMI_API.xml
index a5fa36a9a0..1d958d3138 100644
--- a/src/components/interfaces/HMI_API.xml
+++ b/src/components/interfaces/HMI_API.xml
@@ -1178,10 +1178,10 @@
<description>No GPS at all</description>
</element>
<element name="2D" internal_name="Dimension_2D">
- <description>Longitude and lattitude</description>
+ <description>Longitude and latitude</description>
</element>
<element name="3D" internal_name="Dimension_3D">
- <description>Longitude and lattitude and altitude</description>
+ <description>Longitude and latitude and altitude</description>
</element>
</enum>
@@ -4914,10 +4914,6 @@
</description>
</param>
- <param name="FileName" type="String" maxlength="255" mandatory="true">
- <description>File reference name.</description>
- </param>
-
<param name="syncFileName" type="String" maxlength="255" mandatory="true">
<description>File reference name.</description>
</param>
@@ -5431,37 +5427,6 @@
</param>
</function>
- <function name="SetDisplayLayout" messagetype="request">
- <description>This RPC is deprecated. Use Show RPC to change layout.</description>
- <param name="displayLayout" type="String" maxlength="500" mandatory="true">
- <description>
- Predefined or dynamically created screen layout.
- Currently only predefined screen layouts are defined.
- </description>
- </param>
- <param name="appID" type="Integer" mandatory="true">
- <description>ID of application related to this RPC.</description>
- </param>
- <param name="dayColorScheme" type="Common.TemplateColorScheme" mandatory="false"></param>
- <param name="nightColorScheme" type="Common.TemplateColorScheme" mandatory="false"></param>
- </function>
-
- <function name="SetDisplayLayout" messagetype="response">
- <description>This RPC is deprecated. Use Show RPC to change layout.</description>
- <param name="displayCapabilities" type="Common.DisplayCapabilities" mandatory="false">
- <description>See DisplayCapabilities</description>
- </param>
- <param name="buttonCapabilities" type="Common.ButtonCapabilities" minsize="1" maxsize="100" array="true" mandatory="false">
- <description>See ButtonCapabilities</description >
- </param>
- <param name="softButtonCapabilities" type="Common.SoftButtonCapabilities" minsize="1" maxsize="100" array="true" mandatory="false">
- <description>If returned, the platform supports on-screen SoftButtons; see SoftButtonCapabilities.</description >
- </param>
- <param name="presetBankCapabilities" type="Common.PresetBankCapabilities" mandatory="false">
- <description>If returned, the platform supports custom on-screen Presets; see PresetBankCapabilities.</description >
- </param>
- </function>
-
<function name="Show" messagetype="request">
<param name="showStrings" type="Common.TextFieldStruct" mandatory="true" array="true" minsize="0" maxsize="8">
<description>Array of lines of show text fields. See TextFieldStruct. If some field is not set, the corresponding text should stay unchanged. If field's text is empty "", the field must be cleared.
diff --git a/src/components/media_manager/include/media_manager/media_manager_impl.h b/src/components/media_manager/include/media_manager/media_manager_impl.h
index faa51feec9..2e4e46ed88 100644
--- a/src/components/media_manager/include/media_manager/media_manager_impl.h
+++ b/src/components/media_manager/include/media_manager/media_manager_impl.h
@@ -111,8 +111,6 @@ class MediaManagerImpl : public MediaManager,
std::map<protocol_handler::ServiceType, MediaAdapterImplPtr> streamer_;
std::map<protocol_handler::ServiceType, MediaListenerPtr> streamer_listener_;
- uint32_t bits_per_sample_;
- uint32_t sampling_rate_;
uint64_t stream_data_size_;
std::chrono::time_point<std::chrono::system_clock>
socket_audio_stream_start_time_;
diff --git a/src/components/media_manager/src/media_manager_impl.cc b/src/components/media_manager/src/media_manager_impl.cc
index 8a73101b47..c71012b1c9 100644
--- a/src/components/media_manager/src/media_manager_impl.cc
+++ b/src/components/media_manager/src/media_manager_impl.cc
@@ -66,8 +66,6 @@ MediaManagerImpl::MediaManagerImpl(
, protocol_handler_(NULL)
, a2dp_player_(NULL)
, from_mic_recorder_(NULL)
- , bits_per_sample_(16)
- , sampling_rate_(16000)
, stream_data_size_(0ull)
, application_manager_(application_manager) {
Init();
@@ -165,23 +163,6 @@ void MediaManagerImpl::Init() {
streamer_[ServiceType::kAudio]->AddListener(
streamer_listener_[ServiceType::kAudio]);
}
-
- if (application_manager_.hmi_capabilities().pcm_stream_capabilities()) {
- const auto pcm_caps =
- application_manager_.hmi_capabilities().pcm_stream_capabilities();
-
- if (pcm_caps->keyExists(application_manager::strings::bits_per_sample)) {
- bits_per_sample_ =
- pcm_caps->getElement(application_manager::strings::bits_per_sample)
- .asUInt();
- }
-
- if (pcm_caps->keyExists(application_manager::strings::sampling_rate)) {
- sampling_rate_ =
- pcm_caps->getElement(application_manager::strings::sampling_rate)
- .asUInt();
- }
- }
}
void MediaManagerImpl::StartMicrophoneRecording(
@@ -317,6 +298,11 @@ void MediaManagerImpl::OnMessageReceived(
socket_audio_stream_start_time_)
.count();
uint32_t ms_stream_remaining = ms_for_all_data - ms_since_stream_start;
+ SDL_LOG_DEBUG("stream_data_size_: "
+ << stream_data_size_
+ << " ms_for_all_data: " << ms_for_all_data
+ << " ms_since_stream_start: " << ms_since_stream_start
+ << " ms_stream_remaining: " << ms_stream_remaining);
app->WakeUpStreaming(service_type, ms_stream_remaining);
} else {
@@ -341,8 +327,63 @@ const MediaManagerSettings& MediaManagerImpl::settings() const {
}
uint32_t MediaManagerImpl::DataSizeToMilliseconds(uint64_t data_size) const {
+ uint32_t bits_per_sample = 16;
+ uint32_t sampling_rate = 16000;
+
+ if (application_manager_.hmi_capabilities().pcm_stream_capabilities()) {
+ const auto pcm_caps =
+ application_manager_.hmi_capabilities().pcm_stream_capabilities();
+
+ if (pcm_caps->keyExists(application_manager::strings::bits_per_sample)) {
+ auto type = static_cast<hmi_apis::Common_BitsPerSample::eType>(
+ pcm_caps->getElement(application_manager::strings::bits_per_sample)
+ .asUInt());
+ switch (type) {
+ case hmi_apis::Common_BitsPerSample::RATE_8_BIT: {
+ bits_per_sample = 8;
+ break;
+ }
+ case hmi_apis::Common_BitsPerSample::RATE_16_BIT: {
+ bits_per_sample = 16;
+ break;
+ }
+ default:
+ break;
+ }
+ }
+
+ if (pcm_caps->keyExists(application_manager::strings::sampling_rate)) {
+ auto type = static_cast<hmi_apis::Common_SamplingRate::eType>(
+ pcm_caps->getElement(application_manager::strings::sampling_rate)
+ .asUInt());
+ switch (type) {
+ case hmi_apis::Common_SamplingRate::RATE_8KHZ: {
+ sampling_rate = 8000;
+ break;
+ }
+ case hmi_apis::Common_SamplingRate::RATE_16KHZ: {
+ sampling_rate = 16000;
+ break;
+ }
+ case hmi_apis::Common_SamplingRate::RATE_22KHZ: {
+ sampling_rate = 22000;
+ break;
+ }
+ case hmi_apis::Common_SamplingRate::RATE_44KHZ: {
+ sampling_rate = 44000;
+ break;
+ }
+ default:
+ break;
+ }
+ }
+ }
+
+ SDL_LOG_DEBUG("Params of pcm_stream_capabilities: bits_per_sample: "
+ << bits_per_sample << " sampling_rate: " << sampling_rate);
+
constexpr uint16_t latency_compensation = 500;
- return 1000 * data_size / (sampling_rate_ * bits_per_sample_ / 8) +
+ return 1000 * data_size / (sampling_rate * bits_per_sample / 8) +
latency_compensation;
}
diff --git a/src/components/policy/policy_external/CMakeLists.txt b/src/components/policy/policy_external/CMakeLists.txt
index 0e3735093f..8b0572ba72 100644
--- a/src/components/policy/policy_external/CMakeLists.txt
+++ b/src/components/policy/policy_external/CMakeLists.txt
@@ -76,7 +76,7 @@ set(GENERATED_MOBILE_POLICY_TYPES
${GENERATED_MOBILE_POLICY_TYPES_CPP})
generate_policy_types("${GENERATED_MOBILE_POLICY_TYPES}"
- "${COMPONENTS_DIR}/interfaces/MOBILE_API.xml"
+ "${CMAKE_SOURCE_DIR}/tools/rpc_spec/MOBILE_API.xml"
"rpc::policy_table_interface_base"
"mobile-policy-types")
diff --git a/src/components/policy/policy_external/include/policy/policy_manager_impl.h b/src/components/policy/policy_external/include/policy/policy_manager_impl.h
index 2be8183bfa..7822cc26f6 100644
--- a/src/components/policy/policy_external/include/policy/policy_manager_impl.h
+++ b/src/components/policy/policy_external/include/policy/policy_manager_impl.h
@@ -1266,6 +1266,11 @@ class PolicyManagerImpl : public PolicyManager {
sync_primitives::Lock apps_registration_lock_;
/**
+ * @brief lock guard for protecting policy table snapshot
+ */
+ sync_primitives::Lock policy_table_lock_;
+
+ /**
* @brief lock guard for protecting application permissions access
*/
sync_primitives::Lock app_permissions_diff_lock_;
diff --git a/src/components/policy/policy_external/include/policy/policy_table/types.h b/src/components/policy/policy_external/include/policy/policy_table/types.h
index 25439f835b..98f86d6ea1 100644
--- a/src/components/policy/policy_external/include/policy/policy_table/types.h
+++ b/src/components/policy/policy_external/include/policy/policy_table/types.h
@@ -226,7 +226,6 @@ struct ApplicationParams : PolicyBase {
Optional<AppHMITypes> AppHMIType;
Optional<RequestTypes> RequestType;
Optional<RequestSubTypes> RequestSubType;
- Optional<Integer<uint16_t, 0, 65225> > memory_kb;
Optional<Integer<uint32_t, 0, UINT_MAX> > heart_beat_timeout_ms;
mutable Optional<ModuleTypes> moduleType;
Optional<String<0, 65535> > certificate;
diff --git a/src/components/policy/policy_external/include/policy/policy_table_interface_ext.xml b/src/components/policy/policy_external/include/policy/policy_table_interface_ext.xml
index a3b91abbc5..b8ea5cf22f 100644
--- a/src/components/policy/policy_external/include/policy/policy_table_interface_ext.xml
+++ b/src/components/policy/policy_external/include/policy/policy_table_interface_ext.xml
@@ -101,7 +101,6 @@
<param name="default_hmi" type="HmiLevel" />
<param name="keep_context" type="Boolean" />
<param name="steal_focus" type="Boolean" />
- <param name="memory_kb" type="Integer" minvalue="1" maxvalue="65225" mandatory="false"/>
<param name="watchdog_timer_ms" type="Integer" minvalue="1"
maxvalue="65225" mandatory="false"/>
<param name="certificate" type="String" minlength="0" maxlength="65535"
@@ -164,7 +163,6 @@
maxsize="10" minvalue="1" maxvalue="1000" />
<struct name="ModuleConfig">
- <param name="device_certificates" type="String" minlength="1" maxlength="100" mandatory="false" map="true" minsize="1" maxsize="255" />
<param name="preloaded_pt" type="Boolean" mandatory="false" />
<param name="full_app_id_supported" type="Boolean" mandatory="false" />
<param name="exchange_after_x_ignition_cycles" type="Integer"
diff --git a/src/components/policy/policy_external/include/policy/sql_pt_queries.h b/src/components/policy/policy_external/include/policy/sql_pt_queries.h
index aba08dcca1..18c4468703 100644
--- a/src/components/policy/policy_external/include/policy/sql_pt_queries.h
+++ b/src/components/policy/policy_external/include/policy/sql_pt_queries.h
@@ -99,6 +99,7 @@ extern const std::string kInsertDeviceData;
extern const std::string kInsertAppLevel;
extern const std::string kDeleteSecondsBetweenRetries;
extern const std::string kDeleteEndpoint;
+extern const std::string kDeleteEndpointProperties;
extern const std::string kDeleteAppLevel;
extern const std::string kDeleteMessageString;
extern const std::string kDeleteFunctionalGroup;
diff --git a/src/components/policy/policy_external/src/access_remote_impl.cc b/src/components/policy/policy_external/src/access_remote_impl.cc
index 037f4551f1..4effb991c8 100644
--- a/src/components/policy/policy_external/src/access_remote_impl.cc
+++ b/src/components/policy/policy_external/src/access_remote_impl.cc
@@ -98,6 +98,7 @@ bool AccessRemoteImpl::CheckModuleType(const PTString& app_id,
return false;
}
+ sync_primitives::AutoLock auto_lock(cache_->cache_lock_);
const policy_table::ApplicationParams& app =
cache_->pt_->policy_table.app_policies_section.apps[app_id];
if (!app.moduleType.is_initialized()) {
@@ -168,6 +169,7 @@ void AccessRemoteImpl::SetDefaultHmiTypes(const ApplicationOnDevice& who,
const policy_table::AppHMITypes& AccessRemoteImpl::HmiTypes(
const ApplicationOnDevice& who) {
SDL_LOG_AUTO_TRACE();
+ sync_primitives::AutoLock auto_lock(cache_->cache_lock_);
if (cache_->IsDefaultPolicy(who.app_id)) {
return hmi_types_[who];
} else {
@@ -240,6 +242,7 @@ void AccessRemoteImpl::GetGroupsIds(const std::string& device_id,
bool AccessRemoteImpl::GetModuleTypes(const std::string& application_id,
std::vector<std::string>* modules) {
DCHECK(modules);
+ sync_primitives::AutoLock auto_lock(cache_->cache_lock_);
policy_table::ApplicationPolicies& apps =
cache_->pt_->policy_table.app_policies_section.apps;
policy_table::ApplicationPolicies::iterator i = apps.find(application_id);
diff --git a/src/components/policy/policy_external/src/cache_manager.cc b/src/components/policy/policy_external/src/cache_manager.cc
index 07f2df1991..b6ea6e6e79 100644
--- a/src/components/policy/policy_external/src/cache_manager.cc
+++ b/src/components/policy/policy_external/src/cache_manager.cc
@@ -685,6 +685,7 @@ void CacheManager::ProcessUpdate(
const std::string& app_id = initial_policy_iter->first;
bool update_request_types = true;
+ sync_primitives::AutoLock auto_lock(cache_lock_);
ApplicationParams& params =
pt_->policy_table.app_policies_section.apps[app_id];
if (kPreDataConsentId == app_id) {
@@ -1454,15 +1455,19 @@ CacheManager::GetRemovedVehicleDataItems() const {
}
Json::Value CacheManager::GetPolicyTableData() const {
+ SDL_LOG_AUTO_TRACE();
+ sync_primitives::AutoLock auto_lock(cache_lock_);
return pt_->policy_table.ToJsonValue();
}
void CacheManager::GetEnabledCloudApps(
std::vector<std::string>& enabled_apps) const {
+ SDL_LOG_AUTO_TRACE();
#if !defined(CLOUD_APP_WEBSOCKET_TRANSPORT_SUPPORT)
enabled_apps.clear();
return;
#else
+ sync_primitives::AutoLock auto_lock(cache_lock_);
const policy_table::ApplicationPolicies& policies =
pt_->policy_table.app_policies_section.apps;
for (policy_table::ApplicationPolicies::const_iterator it = policies.begin();
@@ -1478,6 +1483,8 @@ void CacheManager::GetEnabledCloudApps(
bool CacheManager::GetAppProperties(const std::string& policy_app_id,
AppProperties& out_app_properties) const {
+ SDL_LOG_AUTO_TRACE();
+ sync_primitives::AutoLock auto_lock(cache_lock_);
const policy_table::ApplicationPolicies& policies =
pt_->policy_table.app_policies_section.apps;
policy_table::ApplicationPolicies::const_iterator policy_iter =
@@ -1509,10 +1516,12 @@ bool CacheManager::GetAppProperties(const std::string& policy_app_id,
}
std::vector<std::string> CacheManager::GetEnabledLocalApps() const {
+ SDL_LOG_AUTO_TRACE();
#if !defined(WEBSOCKET_SERVER_TRANSPORT_SUPPORT)
return std::vector<std::string>();
#else
std::vector<std::string> enabled_apps;
+ sync_primitives::AutoLock auto_lock(cache_lock_);
const policy_table::ApplicationPolicies& app_policies =
pt_->policy_table.app_policies_section.apps;
for (const auto& app_policies_item : app_policies) {
@@ -1551,6 +1560,8 @@ void CacheManager::InitCloudApp(const std::string& policy_app_id) {
void CacheManager::SetCloudAppEnabled(const std::string& policy_app_id,
const bool enabled) {
+ SDL_LOG_AUTO_TRACE();
+ sync_primitives::AutoLock auto_lock(cache_lock_);
policy_table::ApplicationPolicies& policies =
pt_->policy_table.app_policies_section.apps;
policy_table::ApplicationPolicies::iterator policy_iter =
@@ -1562,6 +1573,8 @@ void CacheManager::SetCloudAppEnabled(const std::string& policy_app_id,
void CacheManager::SetAppAuthToken(const std::string& policy_app_id,
const std::string& auth_token) {
+ SDL_LOG_AUTO_TRACE();
+ sync_primitives::AutoLock auto_lock(cache_lock_);
policy_table::ApplicationPolicies& policies =
pt_->policy_table.app_policies_section.apps;
policy_table::ApplicationPolicies::iterator policy_iter =
@@ -1573,6 +1586,8 @@ void CacheManager::SetAppAuthToken(const std::string& policy_app_id,
void CacheManager::SetAppCloudTransportType(
const std::string& policy_app_id, const std::string& cloud_transport_type) {
+ SDL_LOG_AUTO_TRACE();
+ sync_primitives::AutoLock auto_lock(cache_lock_);
policy_table::ApplicationPolicies& policies =
pt_->policy_table.app_policies_section.apps;
policy_table::ApplicationPolicies::iterator policy_iter =
@@ -1584,6 +1599,8 @@ void CacheManager::SetAppCloudTransportType(
void CacheManager::SetAppEndpoint(const std::string& policy_app_id,
const std::string& endpoint) {
+ SDL_LOG_AUTO_TRACE();
+ sync_primitives::AutoLock auto_lock(cache_lock_);
policy_table::ApplicationPolicies& policies =
pt_->policy_table.app_policies_section.apps;
policy_table::ApplicationPolicies::iterator policy_iter =
@@ -1595,6 +1612,8 @@ void CacheManager::SetAppEndpoint(const std::string& policy_app_id,
void CacheManager::SetAppNicknames(const std::string& policy_app_id,
const StringArray& nicknames) {
+ SDL_LOG_AUTO_TRACE();
+ sync_primitives::AutoLock auto_lock(cache_lock_);
policy_table::ApplicationPolicies& policies =
pt_->policy_table.app_policies_section.apps;
policy_table::ApplicationPolicies::iterator policy_iter =
@@ -1607,6 +1626,8 @@ void CacheManager::SetAppNicknames(const std::string& policy_app_id,
void CacheManager::SetHybridAppPreference(
const std::string& policy_app_id,
const std::string& hybrid_app_preference) {
+ SDL_LOG_AUTO_TRACE();
+ sync_primitives::AutoLock auto_lock(cache_lock_);
policy_table::HybridAppPreference value;
bool valid = EnumFromJsonString(hybrid_app_preference, &value);
policy_table::ApplicationPolicies& policies =
@@ -1622,6 +1643,7 @@ void CacheManager::GetAppServiceParameters(
const std::string& policy_app_id,
policy_table::AppServiceParameters* app_service_parameters) const {
SDL_LOG_AUTO_TRACE();
+ sync_primitives::AutoLock auto_lock(cache_lock_);
const policy_table::ApplicationPolicies& policies =
pt_->policy_table.app_policies_section.apps;
policy_table::ApplicationPolicies::const_iterator policy_iter =
@@ -1636,6 +1658,8 @@ void CacheManager::GetAppServiceParameters(
bool CacheManager::UnknownRPCPassthroughAllowed(
const std::string& policy_app_id) const {
+ SDL_LOG_AUTO_TRACE();
+ sync_primitives::AutoLock auto_lock(cache_lock_);
const policy_table::ApplicationPolicies& policies =
pt_->policy_table.app_policies_section.apps;
policy_table::ApplicationPolicies::const_iterator policy_iter =
@@ -1695,8 +1719,13 @@ std::vector<UserFriendlyMessage> CacheManager::GetUserFriendlyMsg(
std::vector<std::string>::const_iterator it_end = msg_codes.end();
sync_primitives::AutoLock auto_lock(cache_lock_);
for (; it != it_end; ++it) {
- policy_table::MessageLanguages msg_languages =
- (*pt_->policy_table.consumer_friendly_messages->messages)[*it];
+ auto messages = pt_->policy_table.consumer_friendly_messages->messages;
+ auto messages_it = messages->find(*it);
+ if (messages->end() == messages_it) {
+ SDL_LOG_ERROR("No entry found for message code: " << *it);
+ continue;
+ }
+ policy_table::MessageLanguages msg_languages = messages_it->second;
// If message has no records with required language, fallback language
// should be used instead.
@@ -1742,6 +1771,7 @@ std::vector<UserFriendlyMessage> CacheManager::GetUserFriendlyMsg(
void CacheManager::GetUpdateUrls(const uint32_t service_type,
EndpointUrls& out_end_points) const {
+ SDL_LOG_AUTO_TRACE();
auto find_hexademical =
[service_type](policy_table::ServiceEndpoints::value_type end_point) {
uint32_t decimal;
@@ -1749,6 +1779,7 @@ void CacheManager::GetUpdateUrls(const uint32_t service_type,
return end_point.first.compare(0, 2, "0x") == 0 &&
decimal == service_type;
};
+ sync_primitives::AutoLock auto_lock(cache_lock_);
auto& end_points = pt_->policy_table.module_config.endpoints;
const auto end_point =
std::find_if(end_points.begin(), end_points.end(), find_hexademical);
@@ -1786,8 +1817,10 @@ void CacheManager::GetUpdateUrls(const std::string& service_type,
}
std::string CacheManager::GetIconUrl(const std::string& policy_app_id) const {
+ SDL_LOG_AUTO_TRACE();
CACHE_MANAGER_CHECK(std::string());
std::string url;
+ sync_primitives::AutoLock auto_lock(cache_lock_);
const policy_table::ApplicationPolicies& policies =
pt_->policy_table.app_policies_section.apps;
policy_table::ApplicationPolicies::const_iterator policy_iter =
@@ -2125,7 +2158,6 @@ std::shared_ptr<policy_table::Table> CacheManager::GenerateSnapshot() {
snapshot_ = std::make_shared<policy_table::Table>();
sync_primitives::AutoLock auto_lock(cache_lock_);
snapshot_->policy_table = pt_->policy_table;
-
if (pt_->policy_table.vehicle_data.is_initialized()) {
snapshot_->policy_table.vehicle_data =
rpc::Optional<policy_table::VehicleData>();
@@ -2133,7 +2165,6 @@ std::shared_ptr<policy_table::Table> CacheManager::GenerateSnapshot() {
snapshot_->policy_table.vehicle_data->schema_version =
pt_->policy_table.vehicle_data->schema_version;
}
-
snapshot_->SetPolicyTableType(policy_table::PT_SNAPSHOT);
CheckSnapshotInitialization();
@@ -2279,6 +2310,7 @@ int CacheManager::CountUnconsentedGroups(const std::string& policy_app_id,
void CacheManager::SetPreloadedPtFlag(const bool is_preloaded) {
SDL_LOG_AUTO_TRACE();
+ sync_primitives::AutoLock auto_lock(cache_lock_);
*pt_->policy_table.module_config.preloaded_pt = is_preloaded;
Backup();
}
@@ -2675,7 +2707,7 @@ bool CacheManager::Init(const std::string& file_name,
result &= snapshot->is_valid();
SDL_LOG_DEBUG("Check if snapshot valid: " << std::boolalpha << result);
-
+ sync_primitives::AutoLock auto_lock(cache_lock_);
if (!UnwrapAppPolicies(pt_->policy_table.app_policies_section.apps)) {
SDL_LOG_ERROR("Cannot unwrap application policies");
}
diff --git a/src/components/policy/policy_external/src/policy_manager_impl.cc b/src/components/policy/policy_external/src/policy_manager_impl.cc
index 75920be58c..60ab5a389e 100644
--- a/src/components/policy/policy_external/src/policy_manager_impl.cc
+++ b/src/components/policy/policy_external/src/policy_manager_impl.cc
@@ -215,6 +215,8 @@ PolicyManagerImpl::PolicyManagerImpl()
, applications_pending_ptu_count_(0)
, ignition_check(true)
, retry_sequence_url_(0, 0, "")
+ , send_on_update_sent_out_(false)
+ , trigger_ptu_(false)
, ptu_requested_(false)
, is_ptu_in_progress_(false) {}
@@ -484,7 +486,9 @@ PolicyManager::PtProcessingResult PolicyManagerImpl::LoadPT(
}
cache_->SaveUpdateRequired(false);
+
sync_primitives::AutoLock lock(apps_registration_lock_);
+ sync_primitives::AutoLock policy_lock(policy_table_lock_);
// Get current DB data, since it could be updated during awaiting of PTU
auto policy_table_snapshot = cache_->GenerateSnapshot();
@@ -702,6 +706,7 @@ void PolicyManagerImpl::GetUpdateUrls(const uint32_t service_type,
void PolicyManagerImpl::RequestPTUpdate() {
SDL_LOG_AUTO_TRACE();
+ sync_primitives::AutoLock policy_lock(policy_table_lock_);
std::shared_ptr<policy_table::Table> policy_table_snapshot =
cache_->GenerateSnapshot();
if (!policy_table_snapshot) {
@@ -1770,6 +1775,7 @@ void PolicyManagerImpl::SendPermissionsToApp(
Permissions notification_data;
// Need to get rid of this call
+ sync_primitives::AutoLock policy_lock(policy_table_lock_);
std::shared_ptr<policy_table::Table> policy_table_snapshot =
cache_->GenerateSnapshot();
diff --git a/src/components/policy/policy_external/src/policy_table/types.cc b/src/components/policy/policy_external/src/policy_table/types.cc
index 9e056752a8..c382016169 100644
--- a/src/components/policy/policy_external/src/policy_table/types.cc
+++ b/src/components/policy/policy_external/src/policy_table/types.cc
@@ -2,7 +2,6 @@
#include <algorithm>
#include <regex>
-
#include "rpc_base/rpc_base_json_inl.h"
namespace rpc {
@@ -347,7 +346,6 @@ ApplicationParams::ApplicationParams(const Json::Value* value__)
, AppHMIType(impl::ValueMember(value__, "AppHMIType"))
, RequestType(impl::ValueMember(value__, "RequestType"))
, RequestSubType(impl::ValueMember(value__, "RequestSubType"))
- , memory_kb(impl::ValueMember(value__, "memory_kb"), 0)
, heart_beat_timeout_ms(impl::ValueMember(value__, "heart_beat_timeout_ms"))
, moduleType(impl::ValueMember(value__, "moduleType"))
, certificate(impl::ValueMember(value__, "certificate"))
@@ -368,7 +366,6 @@ Json::Value ApplicationParams::ToJsonValue() const {
impl::WriteJsonField("AppHMIType", AppHMIType, &result__);
impl::WriteJsonField("RequestType", RequestType, &result__);
impl::WriteJsonField("RequestSubType", RequestSubType, &result__);
- impl::WriteJsonField("memory_kb", memory_kb, &result__);
impl::WriteJsonField(
"heart_beat_timeout_ms", heart_beat_timeout_ms, &result__);
impl::WriteJsonField("moduleType", moduleType, &result__);
@@ -400,9 +397,6 @@ bool ApplicationParams::is_valid() const {
if (!AppHMIType.is_valid()) {
return false;
}
- if (!memory_kb.is_valid()) {
- return false;
- }
if (!heart_beat_timeout_ms.is_valid()) {
return false;
}
@@ -462,9 +456,6 @@ bool ApplicationParams::struct_empty() const {
if (RequestSubType.is_initialized()) {
return false;
}
- if (memory_kb.is_initialized()) {
- return false;
- }
if (heart_beat_timeout_ms.is_initialized()) {
return false;
}
@@ -539,9 +530,6 @@ void ApplicationParams::ReportErrors(rpc::ValidationReport* report__) const {
if (!steal_focus.is_valid()) {
steal_focus.ReportErrors(&report__->ReportSubobject("steal_focus"));
}
- if (!memory_kb.is_valid()) {
- memory_kb.ReportErrors(&report__->ReportSubobject("memory_kb"));
- }
if (!heart_beat_timeout_ms.is_valid()) {
heart_beat_timeout_ms.ReportErrors(
&report__->ReportSubobject("heart_beat_timeout_ms"));
@@ -590,7 +578,6 @@ void ApplicationParams::SetPolicyTableType(PolicyTableType pt_type) {
AppHMIType.SetPolicyTableType(pt_type);
RequestType.SetPolicyTableType(pt_type);
RequestSubType.SetPolicyTableType(pt_type);
- memory_kb.SetPolicyTableType(pt_type);
heart_beat_timeout_ms.SetPolicyTableType(pt_type);
moduleType.SetPolicyTableType(pt_type);
certificate.SetPolicyTableType(pt_type);
diff --git a/src/components/policy/policy_external/src/sql_pt_ext_queries.cc b/src/components/policy/policy_external/src/sql_pt_ext_queries.cc
index 26d2124d07..1e7e169fe7 100644
--- a/src/components/policy/policy_external/src/sql_pt_ext_queries.cc
+++ b/src/components/policy/policy_external/src/sql_pt_ext_queries.cc
@@ -213,13 +213,13 @@ const std::string kUpdateGroupPermissions =
const std::string kInsertApplication =
"INSERT OR IGNORE INTO `application`(`id`, `keep_context`, `steal_focus`, "
- " `default_hmi`, `priority_value`, `is_revoked`, `memory_kb`, "
+ " `default_hmi`, `priority_value`, `is_revoked`, "
" `heart_beat_timeout_ms`, `certificate`, `hybrid_app_preference_value`, "
" `endpoint`, `enabled`, `auth_token`, "
" `cloud_transport_type`, `icon_url`, `allow_unknown_rpc_passthrough`, "
"`encryption_required`) "
"VALUES "
- "(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
+ "(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
const std::string kCollectFriendlyMsg = "SELECT * FROM `message`";
@@ -246,7 +246,7 @@ const std::string kSelectPreconsentedGroupsId =
const std::string kSelectAppPolicies =
"SELECT `id`, `priority_value`, `default_hmi`, `keep_context`, "
- " `steal_focus`, `memory_kb`, `heart_beat_timeout_ms`, `certificate`, "
+ " `steal_focus`, `heart_beat_timeout_ms`, `certificate`, "
" `hybrid_app_preference_value`, `endpoint`, `enabled`, `auth_token`, "
" `cloud_transport_type`, `icon_url`, `allow_unknown_rpc_passthrough`, "
"`encryption_required`"
diff --git a/src/components/policy/policy_external/src/sql_pt_ext_representation.cc b/src/components/policy/policy_external/src/sql_pt_ext_representation.cc
index fc35551808..b98f14f1c8 100644
--- a/src/components/policy/policy_external/src/sql_pt_ext_representation.cc
+++ b/src/components/policy/policy_external/src/sql_pt_ext_representation.cc
@@ -774,36 +774,34 @@ bool SQLPTExtRepresentation::SaveSpecificAppPolicy(
app_query.Bind(
4, std::string(policy_table::EnumToJsonString(app.second.priority)));
app_query.Bind(5, app.second.is_null());
- app_query.Bind(6, *app.second.memory_kb);
- app_query.Bind(7, static_cast<int64_t>(*app.second.heart_beat_timeout_ms));
+ app_query.Bind(6, static_cast<int64_t>(*app.second.heart_beat_timeout_ms));
app.second.certificate.is_initialized()
- ? app_query.Bind(8, *app.second.certificate)
- : app_query.Bind(8);
+ ? app_query.Bind(7, *app.second.certificate)
+ : app_query.Bind(7);
app.second.hybrid_app_preference.is_initialized()
- ? app_query.Bind(9,
+ ? app_query.Bind(8,
std::string(policy_table::EnumToJsonString(
*app.second.hybrid_app_preference)))
- : app_query.Bind(9);
- app.second.endpoint.is_initialized()
- ? app_query.Bind(10, *app.second.endpoint)
- : app_query.Bind(10);
- app.second.enabled.is_initialized() ? app_query.Bind(11, *app.second.enabled)
- : app_query.Bind(11);
+ : app_query.Bind(8);
+ app.second.endpoint.is_initialized() ? app_query.Bind(9, *app.second.endpoint)
+ : app_query.Bind(9);
+ app.second.enabled.is_initialized() ? app_query.Bind(10, *app.second.enabled)
+ : app_query.Bind(10);
app.second.auth_token.is_initialized()
- ? app_query.Bind(12, *app.second.auth_token)
- : app_query.Bind(12);
+ ? app_query.Bind(11, *app.second.auth_token)
+ : app_query.Bind(11);
app.second.cloud_transport_type.is_initialized()
- ? app_query.Bind(13, *app.second.cloud_transport_type)
- : app_query.Bind(13);
+ ? app_query.Bind(12, *app.second.cloud_transport_type)
+ : app_query.Bind(12);
app.second.icon_url.is_initialized()
- ? app_query.Bind(14, *app.second.icon_url)
- : app_query.Bind(14);
+ ? app_query.Bind(13, *app.second.icon_url)
+ : app_query.Bind(13);
app.second.allow_unknown_rpc_passthrough.is_initialized()
- ? app_query.Bind(15, *app.second.allow_unknown_rpc_passthrough)
- : app_query.Bind(15);
+ ? app_query.Bind(14, *app.second.allow_unknown_rpc_passthrough)
+ : app_query.Bind(14);
app.second.encryption_required.is_initialized()
- ? app_query.Bind(16, *app.second.encryption_required)
- : app_query.Bind(16);
+ ? app_query.Bind(15, *app.second.encryption_required)
+ : app_query.Bind(15);
if (!app_query.Exec() || !app_query.Reset()) {
SDL_LOG_WARN("Incorrect insert into application.");
@@ -927,28 +925,27 @@ bool SQLPTExtRepresentation::GatherApplicationPoliciesSection(
params.default_hmi = hmi;
params.keep_context = query.GetBoolean(3);
params.steal_focus = query.GetBoolean(4);
- *params.memory_kb = query.GetInteger(5);
- *params.heart_beat_timeout_ms = query.GetUInteger(6);
- if (!query.IsNull(7)) {
- *params.certificate = query.GetString(7);
+ *params.heart_beat_timeout_ms = query.GetUInteger(5);
+ if (!query.IsNull(6)) {
+ *params.certificate = query.GetString(6);
}
// Read cloud app properties
policy_table::HybridAppPreference hap;
- bool valid = policy_table::EnumFromJsonString(query.GetString(8), &hap);
+ bool valid = policy_table::EnumFromJsonString(query.GetString(7), &hap);
if (valid) {
*params.hybrid_app_preference = hap;
}
- *params.endpoint = query.GetString(9);
- if (!query.IsNull(10)) {
- *params.enabled = query.GetBoolean(10);
+ *params.endpoint = query.GetString(8);
+ if (!query.IsNull(9)) {
+ *params.enabled = query.GetBoolean(9);
}
- *params.auth_token = query.GetString(11);
- *params.cloud_transport_type = query.GetString(12);
- *params.icon_url = query.GetString(13);
- *params.allow_unknown_rpc_passthrough = query.GetBoolean(14);
- if (!query.IsNull(15)) {
- *params.encryption_required = query.GetBoolean(15);
+ *params.auth_token = query.GetString(10);
+ *params.cloud_transport_type = query.GetString(11);
+ *params.icon_url = query.GetString(12);
+ *params.allow_unknown_rpc_passthrough = query.GetBoolean(13);
+ if (!query.IsNull(14)) {
+ *params.encryption_required = query.GetBoolean(14);
}
const auto& gather_app_id = ((*policies).apps[app_id].is_string())
? (*policies).apps[app_id].get_string()
diff --git a/src/components/policy/policy_external/src/sql_pt_queries.cc b/src/components/policy/policy_external/src/sql_pt_queries.cc
index c5fc3a9e92..8414c2feda 100644
--- a/src/components/policy/policy_external/src/sql_pt_queries.cc
+++ b/src/components/policy/policy_external/src/sql_pt_queries.cc
@@ -162,7 +162,6 @@ const std::string kCreateSchema =
" `is_revoked` BOOLEAN, "
" `is_default` BOOLEAN, "
" `is_predata` BOOLEAN, "
- " `memory_kb` INTEGER NOT NULL, "
" `heart_beat_timeout_ms` INTEGER NOT NULL, "
" `certificate` VARCHAR(65535), "
" `hybrid_app_preference_value` VARCHAR(255), "
@@ -821,12 +820,12 @@ const std::string kInsertRpcWithParameter =
const std::string kInsertApplication =
"INSERT OR IGNORE INTO `application` (`id`, `priority_value`, "
- "`is_revoked`, `memory_kb`, `heart_beat_timeout_ms`, `certificate`, "
+ "`is_revoked`, `heart_beat_timeout_ms`, `certificate`, "
"`hybrid_app_preference_value`, `endpoint`, `enabled`, `auth_token`, "
"`cloud_transport_type`, `icon_url`, `allow_unknown_rpc_passthrough`, "
"`encryption_required`) "
"VALUES "
- "(?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
+ "(?,?,?,?,?,?,?,?,?,?,?,?,?)";
const std::string kInsertAppGroup =
"INSERT INTO `app_group` (`application_id`, `functional_group_id`)"
@@ -919,6 +918,9 @@ const std::string kDeleteSecondsBetweenRetries =
const std::string kDeleteEndpoint = "DELETE FROM `endpoint`";
+const std::string kDeleteEndpointProperties =
+ "DELETE FROM `endpoint_properties`";
+
const std::string kDeleteAppLevel = "DELETE FROM `app_level`";
const std::string kDeleteMessageString = "DELETE FROM `message`";
@@ -972,7 +974,7 @@ const std::string kSelectUserMsgsVersion =
"SELECT DISTINCT `number` FROM `version`";
const std::string kSelectAppPolicies =
- "SELECT `id`, `priority_value`, `memory_kb`, "
+ "SELECT `id`, `priority_value`, "
" `heart_beat_timeout_ms`, `certificate`, `hybrid_app_preference_value`, "
" `endpoint`, `enabled`, `auth_token`, `cloud_transport_type`, `icon_url`, "
" `allow_unknown_rpc_passthrough`, `encryption_required` "
@@ -1103,15 +1105,15 @@ const std::string kDeleteAppGroupByApplicationId =
const std::string kInsertApplicationFull =
"INSERT OR IGNORE INTO `application` (`id`, `keep_context`, `steal_focus`, "
" `default_hmi`, `priority_value`, `is_revoked`, `is_default`, "
- " `is_predata`, `memory_kb`, `heart_beat_timeout_ms`, "
+ " `is_predata`, `heart_beat_timeout_ms`, "
" `certificate`, `hybrid_app_preference_value`, `endpoint`, `enabled`, "
" `auth_token`, `cloud_transport_type`, `icon_url`, "
"`allow_unknown_rpc_passthrough`, `encryption_required`) "
- " VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
+ " VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
const std::string kSelectApplicationFull =
"SELECT `keep_context`, `steal_focus`, `default_hmi`, `priority_value`, "
- " `is_revoked`, `is_default`, `is_predata`, `memory_kb`,"
+ " `is_revoked`, `is_default`, `is_predata`, "
" `heart_beat_timeout_ms`, `certificate`, `hybrid_app_preference_value`, "
" `endpoint`, `enabled`, `auth_token`, `cloud_transport_type`, "
"`icon_url`, "
diff --git a/src/components/policy/policy_external/src/sql_pt_representation.cc b/src/components/policy/policy_external/src/sql_pt_representation.cc
index 3309893db0..0436e82bbb 100644
--- a/src/components/policy/policy_external/src/sql_pt_representation.cc
+++ b/src/components/policy/policy_external/src/sql_pt_representation.cc
@@ -766,33 +766,32 @@ bool SQLPTRepresentation::GatherApplicationPoliciesSection(
policy_table::EnumFromJsonString(query.GetString(1), &priority);
params.priority = priority;
- *params.memory_kb = query.GetInteger(2);
- *params.heart_beat_timeout_ms = query.GetUInteger(3);
+ *params.heart_beat_timeout_ms = query.GetUInteger(2);
- if (!query.IsNull(4)) {
- *params.certificate = query.GetString(4);
+ if (!query.IsNull(3)) {
+ *params.certificate = query.GetString(3);
}
// Read cloud app properties
policy_table::HybridAppPreference hap;
- bool valid = policy_table::EnumFromJsonString(query.GetString(5), &hap);
+ bool valid = policy_table::EnumFromJsonString(query.GetString(4), &hap);
if (valid) {
*params.hybrid_app_preference = hap;
}
- *params.endpoint = query.GetString(6);
- if (!query.IsNull(7)) {
- *params.enabled = query.GetBoolean(7);
+ *params.endpoint = query.GetString(5);
+ if (!query.IsNull(6)) {
+ *params.enabled = query.GetBoolean(6);
}
- *params.auth_token = query.GetString(8);
- *params.cloud_transport_type = query.GetString(9);
- *params.icon_url = query.GetString(10);
- *params.allow_unknown_rpc_passthrough = query.GetBoolean(11);
+ *params.auth_token = query.GetString(7);
+ *params.cloud_transport_type = query.GetString(8);
+ *params.icon_url = query.GetString(9);
+ *params.allow_unknown_rpc_passthrough = query.GetBoolean(10);
const auto& gather_app_id = ((*policies).apps[app_id].is_string())
? (*policies).apps[app_id].get_string()
: app_id;
- if (!query.IsNull(12)) {
- *params.encryption_required = query.GetBoolean(12);
+ if (!query.IsNull(11)) {
+ *params.encryption_required = query.GetBoolean(11);
}
// Data should be gathered from db by "default" key if application has
// default policies
@@ -1122,36 +1121,35 @@ bool SQLPTRepresentation::SaveSpecificAppPolicy(
app_query.Bind(
1, std::string(policy_table::EnumToJsonString(app.second.priority)));
app_query.Bind(2, app.second.is_null());
- app_query.Bind(3, *app.second.memory_kb);
- app_query.Bind(4, static_cast<int64_t>(*app.second.heart_beat_timeout_ms));
+ app_query.Bind(3, static_cast<int64_t>(*app.second.heart_beat_timeout_ms));
app.second.certificate.is_initialized()
- ? app_query.Bind(5, *app.second.certificate)
- : app_query.Bind(5);
+ ? app_query.Bind(4, *app.second.certificate)
+ : app_query.Bind(4);
app.second.hybrid_app_preference.is_initialized()
- ? app_query.Bind(6,
+ ? app_query.Bind(5,
std::string(policy_table::EnumToJsonString(
*app.second.hybrid_app_preference)))
- : app_query.Bind(6);
- app.second.endpoint.is_initialized() ? app_query.Bind(7, *app.second.endpoint)
- : app_query.Bind(7);
- app.second.enabled.is_initialized() ? app_query.Bind(8, *app.second.enabled)
- : app_query.Bind(8);
+ : app_query.Bind(5);
+ app.second.endpoint.is_initialized() ? app_query.Bind(6, *app.second.endpoint)
+ : app_query.Bind(6);
+ app.second.enabled.is_initialized() ? app_query.Bind(7, *app.second.enabled)
+ : app_query.Bind(7);
app.second.auth_token.is_initialized()
- ? app_query.Bind(9, *app.second.auth_token)
- : app_query.Bind(9);
+ ? app_query.Bind(8, *app.second.auth_token)
+ : app_query.Bind(8);
app.second.cloud_transport_type.is_initialized()
- ? app_query.Bind(10, *app.second.cloud_transport_type)
- : app_query.Bind(10);
+ ? app_query.Bind(9, *app.second.cloud_transport_type)
+ : app_query.Bind(9);
app.second.icon_url.is_initialized()
- ? app_query.Bind(11, *app.second.icon_url)
- : app_query.Bind(11);
+ ? app_query.Bind(10, *app.second.icon_url)
+ : app_query.Bind(10);
app.second.allow_unknown_rpc_passthrough.is_initialized()
- ? app_query.Bind(12, *app.second.allow_unknown_rpc_passthrough)
- : app_query.Bind(12);
+ ? app_query.Bind(11, *app.second.allow_unknown_rpc_passthrough)
+ : app_query.Bind(11);
app.second.encryption_required.is_initialized()
- ? app_query.Bind(13, *app.second.encryption_required)
- : app_query.Bind(13);
+ ? app_query.Bind(12, *app.second.encryption_required)
+ : app_query.Bind(12);
if (!app_query.Exec() || !app_query.Reset()) {
SDL_LOG_WARN("Incorrect insert into application.");
@@ -1577,6 +1575,18 @@ bool SQLPTRepresentation::SaveServiceEndpoints(
bool SQLPTRepresentation::SaveServiceEndpointProperties(
const policy_table::ServiceEndpointProperties& endpoint_properties) {
utils::dbms::SQLQuery query(db());
+
+ if (endpoint_properties.is_initialized() && endpoint_properties.empty()) {
+ bool delete_query_exec_result =
+ query.Exec(sql_pt::kDeleteEndpointProperties);
+
+ if (!delete_query_exec_result) {
+ SDL_LOG_WARN("Failed to delete endpoint properties from DB.");
+ return false;
+ }
+ return true;
+ }
+
if (!query.Prepare(sql_pt::kInsertEndpointVersion)) {
SDL_LOG_WARN(
"Incorrect insert of endpoint property to endpoint_properties.");
@@ -1613,9 +1623,7 @@ bool SQLPTRepresentation::SaveConsumerFriendlyMessages(
utils::dbms::SQLQuery query(db());
bool delete_query_exec_result = true;
- if (!messages.messages->empty()) {
- delete_query_exec_result = query.Exec(sql_pt::kDeleteMessageString);
- }
+ delete_query_exec_result = query.Exec(sql_pt::kDeleteMessageString);
if (!delete_query_exec_result) {
SDL_LOG_WARN("Failed to delete messages from DB.");
diff --git a/src/components/policy/policy_external/test/sql_pt_ext_representation_storage_test.cc b/src/components/policy/policy_external/test/sql_pt_ext_representation_storage_test.cc
index 09df17beb2..3bbdc05378 100644
--- a/src/components/policy/policy_external/test/sql_pt_ext_representation_storage_test.cc
+++ b/src/components/policy/policy_external/test/sql_pt_ext_representation_storage_test.cc
@@ -98,9 +98,9 @@ TEST_F(
// Act
const std::string value_12345 = "12345";
const std::string query_insert_12345 =
- "INSERT INTO `application` (`id`, `memory_kb`,"
+ "INSERT INTO `application` (`id`, "
" `heart_beat_timeout_ms`, `keep_context`) VALUES ('" +
- value_12345 + "', 5, 10, 1)";
+ value_12345 + "', 10, 1)";
// Assert
ASSERT_TRUE(query_wrapper_->Exec(query_insert_12345));
@@ -110,9 +110,9 @@ TEST_F(
// Act
const std::string value_123 = "123";
const std::string query_insert_123 =
- "INSERT INTO `application` (`id`, `memory_kb`,"
+ "INSERT INTO `application` (`id`, "
" `heart_beat_timeout_ms`, `keep_context`) VALUES ('" +
- value_123 + "', 10, 7, 0)";
+ value_123 + "', 7, 0)";
// Assert
ASSERT_TRUE(query_wrapper_->Exec(query_insert_123));
diff --git a/src/components/policy/policy_external/test/sql_pt_ext_representation_test.cc b/src/components/policy/policy_external/test/sql_pt_ext_representation_test.cc
index 58f526d7d3..c677392ef9 100644
--- a/src/components/policy/policy_external/test/sql_pt_ext_representation_test.cc
+++ b/src/components/policy/policy_external/test/sql_pt_ext_representation_test.cc
@@ -456,8 +456,8 @@ TEST_F(
ASSERT_TRUE(query_wrapper_->Exec(query_delete));
// Act
const std::string query_insert_12345 =
- "INSERT INTO `application` (`id`, `memory_kb`,"
- " `heart_beat_timeout_ms`, `keep_context`) VALUES ('12345', 5, 10, 1)";
+ "INSERT INTO `application` (`id`, "
+ " `heart_beat_timeout_ms`, `keep_context`) VALUES ('12345', 10, 1)";
// Assert
ASSERT_TRUE(query_wrapper_->Exec(query_insert_12345));
@@ -465,8 +465,8 @@ TEST_F(
EXPECT_TRUE(reps_->CanAppKeepContext("12345"));
// Act
const std::string query_insert_123 =
- "INSERT INTO `application` (`id`, `memory_kb`,"
- " `heart_beat_timeout_ms`, `keep_context`) VALUES ('123', 10, 7, 0)";
+ "INSERT INTO `application` (`id`, "
+ " `heart_beat_timeout_ms`, `keep_context`) VALUES ('123', 7, 0)";
// Assert
ASSERT_TRUE(query_wrapper_->Exec(query_insert_123));
@@ -481,8 +481,8 @@ TEST_F(SQLPTExtRepresentationTest,
ASSERT_TRUE(query_wrapper_->Exec(query_delete));
// Act
const std::string query_insert_12345 =
- "INSERT INTO `application` (`id`, `memory_kb`,"
- " `heart_beat_timeout_ms`, `steal_focus`) VALUES ('12345', 5, 10, 1)";
+ "INSERT INTO `application` (`id`, "
+ " `heart_beat_timeout_ms`, `steal_focus`) VALUES ('12345', 10, 1)";
// Assert
ASSERT_TRUE(query_wrapper_->Exec(query_insert_12345));
@@ -490,8 +490,8 @@ TEST_F(SQLPTExtRepresentationTest,
EXPECT_FALSE(reps_->CanAppStealFocus("0"));
// Act
const std::string query_insert_123 =
- "INSERT INTO `application` (`id`, `memory_kb`,"
- " `heart_beat_timeout_ms`, `steal_focus`) VALUES ('123', 10, 7, 0)";
+ "INSERT INTO `application` (`id`, "
+ " `heart_beat_timeout_ms`, `steal_focus`) VALUES ('123', 7, 0)";
// Assert
ASSERT_TRUE(query_wrapper_->Exec(query_insert_123));
@@ -506,8 +506,8 @@ TEST_F(SQLPTExtRepresentationTest,
ASSERT_TRUE(query_wrapper_->Exec(query_delete));
// Act
const std::string query_insert_12345 =
- "INSERT INTO `application` (`id`, `memory_kb`,"
- " `heart_beat_timeout_ms`, `default_hmi`) VALUES ('12345', 5, 10, "
+ "INSERT INTO `application` (`id`, "
+ " `heart_beat_timeout_ms`, `default_hmi`) VALUES ('12345', 10, "
"'NONE')";
std::string result;
// Assert
@@ -515,8 +515,8 @@ TEST_F(SQLPTExtRepresentationTest,
EXPECT_TRUE(reps_->GetDefaultHMI("12345", &result));
EXPECT_EQ("NONE", result);
const std::string query_insert_123 =
- "INSERT INTO `application` (`id`, `memory_kb`,"
- " `heart_beat_timeout_ms`, `default_hmi`) VALUES ('123', 5, 10, "
+ "INSERT INTO `application` (`id`, "
+ " `heart_beat_timeout_ms`, `default_hmi`) VALUES ('123', 10, "
"'LIMITED')";
// Assert
@@ -898,9 +898,9 @@ TEST_F(
ASSERT_TRUE(query_wrapper_->Exec(query_insert_functional_group));
const std::string query_insert_application =
- "INSERT INTO `application` (`id`, `memory_kb`,"
+ "INSERT INTO `application` (`id`, "
" `heart_beat_timeout_ms`, `is_predata`, `keep_context`) VALUES ('1234', "
- "5, 10, 1, 0)";
+ "10, 1, 0)";
// Assert
ASSERT_TRUE(query_wrapper_->Exec(query_insert_application));
@@ -967,9 +967,9 @@ TEST_F(
ASSERT_TRUE(query_wrapper_->Exec(query_insert_preconsented_group));
const std::string query_insert_application =
- "INSERT INTO `application` (`id`, `memory_kb`,"
+ "INSERT INTO `application` (`id`, "
" `heart_beat_timeout_ms`, `is_predata`, `keep_context`) VALUES ('1234', "
- "5, 10, 0, 0)";
+ "10, 0, 0)";
// Assert
ASSERT_TRUE(query_wrapper_->Exec(query_insert_application));
FunctionalIdType group_types;
@@ -1417,9 +1417,9 @@ TEST_F(
"INSERT OR IGNORE INTO `application`(`id`, `keep_context`, "
"`steal_focus`, "
" `default_hmi`, `priority_value`, `is_revoked`, `is_default`, "
- "`is_predata`, `memory_kb`, "
+ "`is_predata`, "
" `heart_beat_timeout_ms`) VALUES( '12345', 0, 0, 'NONE', 'NONE', 0, 0, "
- "0, 64, 10) ";
+ "0, 10) ";
ASSERT_TRUE(query_wrapper_->Exec(query_insert_app));
GroupsAliasNameCollection allowed_groups;
@@ -1447,9 +1447,9 @@ TEST_F(SQLPTExtRepresentationTest,
"INSERT OR IGNORE INTO `application`(`id`, `keep_context`, "
"`steal_focus`, "
" `default_hmi`, `priority_value`, `is_revoked`, `is_default`, "
- "`is_predata`, `memory_kb`, "
+ "`is_predata`, "
" `heart_beat_timeout_ms`) VALUES( '12345', 0, 0, 'NONE', 'NONE', 0, 0, "
- "0, 64, 10) ";
+ "0, 10) ";
ASSERT_TRUE(query_wrapper_->Exec(query_insert_app));
GroupsAliasNameCollection allowed_groups;
@@ -1479,9 +1479,9 @@ TEST_F(
"INSERT OR IGNORE INTO `application`(`id`, `keep_context`, "
"`steal_focus`, "
" `default_hmi`, `priority_value`, `is_revoked`, `is_default`, "
- "`is_predata`, `memory_kb`, "
+ "`is_predata`, "
" `heart_beat_timeout_ms`) VALUES( '12345', 0, 0, 'NONE', 'NONE', 0, 0, "
- "0, 64, 10) ";
+ "0, 10) ";
ASSERT_TRUE(query_wrapper_->Exec(query_insert_app));
GroupsAliasNameCollection allowed_groups;
@@ -1506,9 +1506,9 @@ TEST_F(SQLPTExtRepresentationTest,
"INSERT OR IGNORE INTO `application`(`id`, `keep_context`, "
"`steal_focus`, "
" `default_hmi`, `priority_value`, `is_revoked`, `is_default`, "
- "`is_predata`, `memory_kb`, "
+ "`is_predata`, "
" `heart_beat_timeout_ms`) VALUES( '12345', 0, 0, 'NONE', 'NONE', 0, 0, "
- "1, 64, 10) ";
+ "1, 10) ";
ASSERT_TRUE(query_wrapper_->Exec(query_insert_app));
// Check
EXPECT_TRUE(reps_->IsPredataPolicy("12345"));
diff --git a/src/components/policy/policy_external/test/sql_pt_representation_storage_test.cc b/src/components/policy/policy_external/test/sql_pt_representation_storage_test.cc
index 7214ecba81..f9d36eb013 100644
--- a/src/components/policy/policy_external/test/sql_pt_representation_storage_test.cc
+++ b/src/components/policy/policy_external/test/sql_pt_representation_storage_test.cc
@@ -90,10 +90,10 @@ TEST_F(
const std::string gps = "gps";
const std::string speed = "speed";
const std::string query =
- "INSERT OR REPLACE INTO `application` (`id`, `memory_kb`,"
+ "INSERT OR REPLACE INTO `application` (`id`,"
" `heart_beat_timeout_ms`) VALUES ('" +
value_12345 +
- "', 5, 10); "
+ "', 10); "
"INSERT OR REPLACE INTO functional_group (`id`, `name`)"
" VALUES (1, 'Base-4'); "
"INSERT OR REPLACE INTO `app_group` (`application_id`,"
diff --git a/src/components/policy/policy_external/test/sql_pt_representation_test.cc b/src/components/policy/policy_external/test/sql_pt_representation_test.cc
index 548b6f3666..9047949860 100644
--- a/src/components/policy/policy_external/test/sql_pt_representation_test.cc
+++ b/src/components/policy/policy_external/test/sql_pt_representation_test.cc
@@ -149,7 +149,6 @@ class SQLPTRepresentationTest : public SQLPTRepresentation,
uint16_t apps_size,
policy_table::Priority prio,
const std::string& section,
- uint16_t memory_kb,
uint32_t heart_beat_timeout_ms,
policy_table::Strings& groups) const {
if (section != "device") {
@@ -163,7 +162,6 @@ class SQLPTRepresentationTest : public SQLPTRepresentation,
EXPECT_EQ(0u, (*(apps_iter->second.nicknames)).size());
EXPECT_EQ(prio, (apps_iter->second).priority);
EXPECT_EQ(0u, (*(apps_iter->second.AppHMIType)).size());
- EXPECT_EQ(memory_kb, (*(apps_iter->second.memory_kb)));
EXPECT_EQ(heart_beat_timeout_ms,
(*(apps_iter->second.heart_beat_timeout_ms)));
} else {
@@ -461,8 +459,8 @@ TEST_F(
CheckPermissionsAllowed_SetValuesInAppGroupRpcFunctionalGroup_GetEqualParamsInCheckPermissionResult) {
// Arrange
const std::string query =
- "INSERT OR REPLACE INTO `application` (`id`, `memory_kb`,"
- " `heart_beat_timeout_ms`) VALUES ('12345', 5, 10); "
+ "INSERT OR REPLACE INTO `application` (`id`, "
+ " `heart_beat_timeout_ms`) VALUES ('12345', 10); "
"INSERT OR REPLACE INTO functional_group (`id`, `name`)"
" VALUES (1, 'Base-4'); "
"INSERT OR REPLACE INTO `app_group` (`application_id`,"
@@ -493,8 +491,8 @@ TEST_F(
CheckPermissionsAllowedWithoutParameters_SetLimitedPermissions_ExpectEmptyListOfAllowedParams) {
// Arrange
const std::string query =
- "INSERT OR REPLACE INTO `application` (`id`, `memory_kb`,"
- " `heart_beat_timeout_ms`) VALUES ('12345', 5, 10); "
+ "INSERT OR REPLACE INTO `application` (`id`, "
+ " `heart_beat_timeout_ms`) VALUES ('12345', 10); "
"INSERT OR REPLACE INTO functional_group (`id`, `name`)"
" VALUES (1, 'Base-4'); "
"INSERT OR REPLACE INTO `app_group` (`application_id`,"
@@ -961,40 +959,40 @@ TEST_F(SQLPTRepresentationTest,
"INSERT OR IGNORE INTO `application`(`id`, `keep_context`, "
"`steal_focus`, "
" `default_hmi`, `priority_value`, `is_revoked`, `is_default`, "
- "`is_predata`, `memory_kb`, "
+ "`is_predata`, "
" `heart_beat_timeout_ms`) VALUES( 'default', 0, 0, 'NONE', 'NONE', 0, "
"0, "
- "0, 64, 10) ";
+ "0, 10) ";
ASSERT_TRUE(query_wrapper_->Exec(query_insert_app_default));
const std::string query_insert_app_pre_DataConsent =
"INSERT OR IGNORE INTO `application`(`id`, `keep_context`, "
"`steal_focus`, "
" `default_hmi`, `priority_value`, `is_revoked`, `is_default`, "
- "`is_predata`, `memory_kb`, "
+ "`is_predata`, "
" `heart_beat_timeout_ms`) VALUES( 'pre_DataConsent', 0, 0, 'NONE', "
"'NONE', 0, 0, "
- "0, 64, 10) ";
+ "0, 10) ";
ASSERT_TRUE(query_wrapper_->Exec(query_insert_app_pre_DataConsent));
const std::string query_insert_app_device =
"INSERT OR IGNORE INTO `application`(`id`, `keep_context`, "
"`steal_focus`, "
" `default_hmi`, `priority_value`, `is_revoked`, `is_default`, "
- "`is_predata`, `memory_kb`, "
+ "`is_predata`, "
" `heart_beat_timeout_ms`) VALUES( 'device', 0, 0, 'NONE', "
"'COMMUNICATION', 0, 0, "
- "0, 64, 10) ";
+ "0, 10) ";
ASSERT_TRUE(query_wrapper_->Exec(query_insert_app_device));
const std::string query_insert_app_12345 =
"INSERT OR IGNORE INTO `application`(`id`, `keep_context`, "
"`steal_focus`, "
" `default_hmi`, `priority_value`, `is_revoked`, `is_default`, "
- "`is_predata`, `memory_kb`, "
+ "`is_predata`, "
" `heart_beat_timeout_ms`) VALUES( '12345', 0, 0, 'NONE', 'EMERGENCY', "
"0, 0, "
- "0, 64, 10) ";
+ "0, 10) ";
ASSERT_TRUE(query_wrapper_->Exec(query_insert_app_12345));
std::string priority;
@@ -1051,40 +1049,40 @@ TEST_F(SQLPTRepresentationTest,
"INSERT OR IGNORE INTO `application`(`id`, `keep_context`, "
"`steal_focus`, "
" `default_hmi`, `priority_value`, `is_revoked`, `is_default`, "
- "`is_predata`, `memory_kb`, "
+ "`is_predata`, "
" `heart_beat_timeout_ms`) VALUES( 'default', 0, 0, 'NONE', 'NONE', 0, "
"0, "
- "0, 64, 10) ";
+ "0, 10) ";
ASSERT_TRUE(query_wrapper_->Exec(query_insert_app_default));
const std::string query_insert_app_pre_DataConsent =
"INSERT OR IGNORE INTO `application`(`id`, `keep_context`, "
"`steal_focus`, "
" `default_hmi`, `priority_value`, `is_revoked`, `is_default`, "
- "`is_predata`, `memory_kb`, "
+ "`is_predata`, "
" `heart_beat_timeout_ms`) VALUES( 'pre_DataConsent', 0, 0, 'NONE', "
"'NONE', 0, 0, "
- "0, 64, 10) ";
+ "0, 10) ";
ASSERT_TRUE(query_wrapper_->Exec(query_insert_app_pre_DataConsent));
const std::string query_insert_app_device =
"INSERT OR IGNORE INTO `application`(`id`, `keep_context`, "
"`steal_focus`, "
" `default_hmi`, `priority_value`, `is_revoked`, `is_default`, "
- "`is_predata`, `memory_kb`, "
+ "`is_predata`, "
" `heart_beat_timeout_ms`) VALUES( 'device', 0, 0, 'NONE', "
"'COMMUNICATION', 0, 0, "
- "0, 64, 10) ";
+ "0, 10) ";
ASSERT_TRUE(query_wrapper_->Exec(query_insert_app_device));
const std::string query_insert_app_12345 =
"INSERT OR IGNORE INTO `application`(`id`, `keep_context`, "
"`steal_focus`, "
" `default_hmi`, `priority_value`, `is_revoked`, `is_default`, "
- "`is_predata`, `memory_kb`, "
+ "`is_predata`, "
" `heart_beat_timeout_ms`) VALUES( '12345', 0, 0, 'NONE', 'EMERGENCY', "
"0, 0, "
- "0, 64, 10) ";
+ "0, 10) ";
ASSERT_TRUE(query_wrapper_->Exec(query_insert_app_12345));
const std::string query_insert =
@@ -1241,29 +1239,29 @@ TEST_F(SQLPTRepresentationTest,
"INSERT OR IGNORE INTO `application`(`id`, `keep_context`, "
"`steal_focus`, "
" `default_hmi`, `priority_value`, `is_revoked`, `is_default`, "
- "`is_predata`, `memory_kb`, "
+ "`is_predata`, "
" `heart_beat_timeout_ms`) VALUES( 'default', 0, 0, 'NONE', 'NONE', 0, "
"0, "
- "0, 64, 10) ";
+ "0, 10) ";
ASSERT_TRUE(query_wrapper_->Exec(query_insert_app_default));
const std::string query_insert_app_device =
"INSERT OR IGNORE INTO `application`(`id`, `keep_context`, "
"`steal_focus`, "
" `default_hmi`, `priority_value`, `is_revoked`, `is_default`, "
- "`is_predata`, `memory_kb`, "
+ "`is_predata`, "
" `heart_beat_timeout_ms`) VALUES( 'device', 0, 0, 'NONE', "
- "'COMMUNICATION', 0, 0, 0, 64, 10) ";
+ "'COMMUNICATION', 0, 0, 0, 10) ";
ASSERT_TRUE(query_wrapper_->Exec(query_insert_app_device));
const std::string query_insert_app_12345 =
"INSERT OR IGNORE INTO `application`(`id`, `keep_context`, "
"`steal_focus`, "
" `default_hmi`, `priority_value`, `is_revoked`, `is_default`, "
- "`is_predata`, `memory_kb`, "
+ "`is_predata`, "
" `heart_beat_timeout_ms`) VALUES( '12345', 0, 0, 'NONE', 'EMERGENCY', "
"0, 0, "
- "0, 64, 10) ";
+ "0, 10) ";
ASSERT_TRUE(query_wrapper_->Exec(query_insert_app_12345));
// Checks
EXPECT_TRUE(reps->IsApplicationRepresented("default"));
@@ -1279,20 +1277,20 @@ TEST_F(SQLPTRepresentationTest,
"INSERT OR IGNORE INTO `application`(`id`, `keep_context`, "
"`steal_focus`, "
" `default_hmi`, `priority_value`, `is_revoked`, `is_default`, "
- "`is_predata`, `memory_kb`, "
+ "`is_predata`, "
" `heart_beat_timeout_ms`) VALUES( '7777', 0, 0, 'NONE', 'NONE', 1, "
"0, "
- "0, 64, 10) ";
+ "0, 10) ";
ASSERT_TRUE(query_wrapper_->Exec(query_insert_app_7777));
const std::string query_insert_app_12345 =
"INSERT OR IGNORE INTO `application`(`id`, `keep_context`, "
"`steal_focus`, "
" `default_hmi`, `priority_value`, `is_revoked`, `is_default`, "
- "`is_predata`, `memory_kb`, "
+ "`is_predata`, "
" `heart_beat_timeout_ms`) VALUES( '12345', 0, 0, 'NONE', 'EMERGENCY', "
"0, 0, "
- "0, 64, 10) ";
+ "0, 10) ";
ASSERT_TRUE(query_wrapper_->Exec(query_insert_app_12345));
// Checks
EXPECT_TRUE(reps->IsApplicationRevoked("7777"));
@@ -1306,19 +1304,19 @@ TEST_F(SQLPTRepresentationTest,
"INSERT OR IGNORE INTO `application`(`id`, `keep_context`, "
"`steal_focus`, "
" `default_hmi`, `priority_value`, `is_revoked`, `is_default`, "
- "`is_predata`, `memory_kb`, "
+ "`is_predata`, "
" `heart_beat_timeout_ms`) VALUES( 'default', 0, 0, 'NONE', 'NONE', 0, "
"1, "
- "0, 64, 10) ";
+ "0, 10) ";
ASSERT_TRUE(query_wrapper_->Exec(query_insert_app_default));
const std::string query_insert_app_123 =
"INSERT OR IGNORE INTO `application`(`id`, `keep_context`, "
"`steal_focus`, "
" `default_hmi`, `priority_value`, `is_revoked`, `is_default`, "
- "`is_predata`, `memory_kb`, "
+ "`is_predata`, "
" `heart_beat_timeout_ms`) VALUES( '123', 1, 0, 'FULL', "
- "'COMMUNICATION', 1, 1, 0, 64, 10) ";
+ "'COMMUNICATION', 1, 1, 0, 10) ";
ASSERT_TRUE(query_wrapper_->Exec(query_insert_app_123));
EXPECT_FALSE(reps->IsApplicationRepresented("7777"));
EXPECT_FALSE(reps->IsApplicationRepresented("9999"));
@@ -1348,10 +1346,10 @@ TEST_F(SQLPTRepresentationTest,
"INSERT OR IGNORE INTO `application`(`id`, `keep_context`, "
"`steal_focus`, "
" `default_hmi`, `priority_value`, `is_revoked`, `is_default`, "
- "`is_predata`, `memory_kb`, "
+ "`is_predata`, "
" `heart_beat_timeout_ms`) VALUES( '12345', 0, 0, 'NONE', 'NONE', 0, "
"0, "
- "1, 64, 10) ";
+ "1, 10) ";
ASSERT_TRUE(query_wrapper_->Exec(query_insert_app));
// Check
EXPECT_FALSE(reps->IsDefaultPolicy("12345"));
@@ -1363,8 +1361,8 @@ TEST_F(SQLPTRepresentationTest,
const std::string query_insert_app =
"INSERT OR IGNORE INTO `application`(`id`, `keep_context`, "
"`steal_focus`, `default_hmi`, `priority_value`, `is_revoked`, "
- "`is_default`, `is_predata`, `memory_kb`, `heart_beat_timeout_ms`) "
- "VALUES( '1234567', 0, 0, 'NONE', 'NONE', 0, 1, 0, 64, 10) ";
+ "`is_default`, `is_predata`, `heart_beat_timeout_ms`) "
+ "VALUES( '1234567', 0, 0, 'NONE', 'NONE', 0, 1, 0, 10) ";
ASSERT_TRUE(query_wrapper_->Exec(query_insert_app));
// Check
@@ -1404,17 +1402,17 @@ TEST_F(SQLPTRepresentationTest,
"INSERT OR IGNORE INTO `application`(`id`, `keep_context`, "
"`steal_focus`, "
" `default_hmi`, `priority_value`, `is_revoked`, `is_default`, "
- "`is_predata`, `memory_kb`, "
+ "`is_predata`, "
" `heart_beat_timeout_ms`) VALUES( 'default', 0, 0, 'NONE', 'NONE', 0, "
"0, "
- "0, 64, 10) ";
+ "0, 10) ";
ASSERT_TRUE(query_wrapper_->Exec(query_insert_app_default));
const std::string query_insert_app_1234567 =
"INSERT OR IGNORE INTO `application`(`id`, `keep_context`, "
"`steal_focus`, `default_hmi`, `priority_value`, `is_revoked`, "
- "`is_default`, `is_predata`, `memory_kb`, `heart_beat_timeout_ms`) "
- "VALUES( '1234567', 0, 0, 'NONE', 'NONE', 0, 0, 1, 64, 10) ";
+ "`is_default`, `is_predata`, `heart_beat_timeout_ms`) "
+ "VALUES( '1234567', 0, 0, 'NONE', 'NONE', 0, 0, 1, 10) ";
ASSERT_TRUE(query_wrapper_->Exec(query_insert_app_1234567));
EXPECT_FALSE(reps->IsDefaultPolicy("1234567"));
// Act
@@ -1448,8 +1446,8 @@ TEST_F(SQLPTRepresentationTest,
const std::string query_insert_app =
"INSERT OR IGNORE INTO `application`(`id`, `keep_context`, "
"`steal_focus`, `default_hmi`, `priority_value`, `is_revoked`, "
- "`is_default`, `is_predata`, `memory_kb`, `heart_beat_timeout_ms`) "
- "VALUES( '1234567', 0, 0, 'NONE', 'NONE', 0, 0, 1, 64, 10) ";
+ "`is_default`, `is_predata`, `heart_beat_timeout_ms`) "
+ "VALUES( '1234567', 0, 0, 'NONE', 'NONE', 0, 0, 1, 10) ";
ASSERT_TRUE(query_wrapper_->Exec(query_insert_app));
const std::string query_select =
"SELECT `is_default` FROM `application`WHERE`id`= '1234567' ";
diff --git a/src/components/policy/policy_regular/CMakeLists.txt b/src/components/policy/policy_regular/CMakeLists.txt
index 39c520a0e3..cc87e2c630 100644
--- a/src/components/policy/policy_regular/CMakeLists.txt
+++ b/src/components/policy/policy_regular/CMakeLists.txt
@@ -61,7 +61,7 @@ set(GENERATED_MOBILE_POLICY_TYPES
${GENERATED_MOBILE_POLICY_TYPES_CPP})
generate_policy_types("${GENERATED_MOBILE_POLICY_TYPES}"
- "${COMPONENTS_DIR}/interfaces/MOBILE_API.xml"
+ "${CMAKE_SOURCE_DIR}/tools/rpc_spec/MOBILE_API.xml"
"rpc::policy_table_interface_base"
"mobile-policy-types")
diff --git a/src/components/policy/policy_regular/include/policy/cache_manager.h b/src/components/policy/policy_regular/include/policy/cache_manager.h
index 473caef145..2f19da13b5 100644
--- a/src/components/policy/policy_regular/include/policy/cache_manager.h
+++ b/src/components/policy/policy_regular/include/policy/cache_manager.h
@@ -988,8 +988,8 @@ class CacheManager : public CacheManagerInterface {
BackgroundBackuper* backuper_;
const PolicySettings* settings_;
-#ifdef BUILD_TESTS
friend class AccessRemoteImpl;
+#ifdef BUILD_TESTS
FRIEND_TEST(AccessRemoteImplTest, CheckModuleType);
FRIEND_TEST(AccessRemoteImplTest, EnableDisable);
FRIEND_TEST(AccessRemoteImplTest, GetGroups);
diff --git a/src/components/policy/policy_regular/include/policy/policy_manager_impl.h b/src/components/policy/policy_regular/include/policy/policy_manager_impl.h
index 0d1a61ec89..16ab9417bb 100644
--- a/src/components/policy/policy_regular/include/policy/policy_manager_impl.h
+++ b/src/components/policy/policy_regular/include/policy/policy_manager_impl.h
@@ -1103,6 +1103,11 @@ class PolicyManagerImpl : public PolicyManager {
sync_primitives::Lock apps_registration_lock_;
/**
+ * @brief lock guard for protecting policy table snapshot
+ */
+ sync_primitives::Lock policy_table_lock_;
+
+ /**
* @brief lock guard for protecting application permissions access
*/
sync_primitives::Lock app_permissions_diff_lock_;
diff --git a/src/components/policy/policy_regular/include/policy/policy_table/types.h b/src/components/policy/policy_regular/include/policy/policy_table/types.h
index 7eeb41f064..664987b70f 100644
--- a/src/components/policy/policy_regular/include/policy/policy_table/types.h
+++ b/src/components/policy/policy_regular/include/policy/policy_table/types.h
@@ -193,7 +193,6 @@ struct ApplicationParams : PolicyBase {
Optional<AppHMITypes> AppHMIType;
Optional<RequestTypes> RequestType;
Optional<RequestSubTypes> RequestSubType;
- Optional<Integer<uint16_t, 0, 65225> > memory_kb;
Optional<Integer<uint32_t, 0, UINT_MAX> > heart_beat_timeout_ms;
Optional<String<0, 65535> > certificate;
mutable Optional<ModuleTypes> moduleType;
@@ -312,7 +311,6 @@ struct EndpointProperty : CompositeType {
struct ModuleConfig : CompositeType {
public:
- Optional<Map<String<0, 100>, 0, 255> > device_certificates;
Optional<Boolean> preloaded_pt;
Optional<Boolean> full_app_id_supported;
Integer<uint8_t, 0, 255> exchange_after_x_ignition_cycles;
diff --git a/src/components/policy/policy_regular/include/policy/sql_pt_queries.h b/src/components/policy/policy_regular/include/policy/sql_pt_queries.h
index fd7f879abf..492db56204 100644
--- a/src/components/policy/policy_regular/include/policy/sql_pt_queries.h
+++ b/src/components/policy/policy_regular/include/policy/sql_pt_queries.h
@@ -99,6 +99,7 @@ extern const std::string kInsertDeviceData;
extern const std::string kInsertAppLevel;
extern const std::string kDeleteSecondsBetweenRetries;
extern const std::string kDeleteEndpoint;
+extern const std::string kDeleteEndpointProperties;
extern const std::string kDeleteAppLevel;
extern const std::string kDeleteMessageString;
extern const std::string kDeleteFunctionalGroup;
diff --git a/src/components/policy/policy_regular/src/access_remote_impl.cc b/src/components/policy/policy_regular/src/access_remote_impl.cc
index 439fbcc8d2..04bf9479ef 100644
--- a/src/components/policy/policy_regular/src/access_remote_impl.cc
+++ b/src/components/policy/policy_regular/src/access_remote_impl.cc
@@ -97,7 +97,7 @@ bool AccessRemoteImpl::CheckModuleType(const PTString& app_id,
if (!cache_->IsApplicationRepresented(app_id)) {
return false;
}
-
+ sync_primitives::AutoLock auto_lock(cache_->cache_lock_);
const policy_table::ApplicationParams& app =
cache_->pt()->policy_table.app_policies_section.apps[app_id];
if (!app.moduleType.is_initialized()) {
@@ -168,6 +168,7 @@ void AccessRemoteImpl::SetDefaultHmiTypes(const ApplicationOnDevice& who,
const policy_table::AppHMITypes& AccessRemoteImpl::HmiTypes(
const ApplicationOnDevice& who) {
SDL_LOG_AUTO_TRACE();
+ sync_primitives::AutoLock auto_lock(cache_->cache_lock_);
if (cache_->IsDefaultPolicy(who.app_id)) {
return hmi_types_[who];
} else {
@@ -226,6 +227,7 @@ void AccessRemoteImpl::GetGroupsIds(const std::string& device_id,
bool AccessRemoteImpl::GetModuleTypes(const std::string& application_id,
std::vector<std::string>* modules) {
DCHECK(modules);
+ sync_primitives::AutoLock auto_lock(cache_->cache_lock_);
policy_table::ApplicationPolicies& apps =
cache_->pt()->policy_table.app_policies_section.apps;
policy_table::ApplicationPolicies::iterator i = apps.find(application_id);
diff --git a/src/components/policy/policy_regular/src/cache_manager.cc b/src/components/policy/policy_regular/src/cache_manager.cc
index cf4164d133..f22cd9eec0 100644
--- a/src/components/policy/policy_regular/src/cache_manager.cc
+++ b/src/components/policy/policy_regular/src/cache_manager.cc
@@ -220,7 +220,6 @@ void CacheManager::GetAllAppGroups(const std::string& app_id,
SDL_LOG_INFO("Devices doesn't have groups");
return;
}
-
sync_primitives::AutoLock auto_lock(cache_lock_);
policy_table::ApplicationPolicies::const_iterator app_params_iter =
pt_->policy_table.app_policies_section.apps.find(app_id);
@@ -439,7 +438,6 @@ bool CacheManager::GetDeviceGroupsFromPolicies(
bool CacheManager::AddDevice(const std::string& device_id,
const std::string& connection_type) {
SDL_LOG_AUTO_TRACE();
-
sync_primitives::AutoLock auto_lock(cache_lock_);
CACHE_MANAGER_CHECK(false);
policy_table::DeviceParams& params =
@@ -465,7 +463,6 @@ bool CacheManager::SetDeviceData(const std::string& device_id,
const uint32_t number_of_ports,
const std::string& connection_type) {
SDL_LOG_AUTO_TRACE();
-
sync_primitives::AutoLock auto_lock(cache_lock_);
CACHE_MANAGER_CHECK(false);
Backup();
@@ -742,6 +739,7 @@ CacheManager::GetRemovedVehicleDataItems() const {
}
Json::Value CacheManager::GetPolicyTableData() const {
+ sync_primitives::AutoLock auto_lock(cache_lock_);
return pt_->policy_table.ToJsonValue();
}
@@ -751,6 +749,7 @@ void CacheManager::GetEnabledCloudApps(
enabled_apps.clear();
return;
#else
+ sync_primitives::AutoLock auto_lock(cache_lock_);
const policy_table::ApplicationPolicies& policies =
pt_->policy_table.app_policies_section.apps;
for (policy_table::ApplicationPolicies::const_iterator it = policies.begin();
@@ -769,6 +768,7 @@ std::vector<std::string> CacheManager::GetEnabledLocalApps() const {
return std::vector<std::string>();
#else
std::vector<std::string> enabled_apps;
+ sync_primitives::AutoLock auto_lock(cache_lock_);
const policy_table::ApplicationPolicies& app_policies =
pt_->policy_table.app_policies_section.apps;
for (const auto& app_policies_item : app_policies) {
@@ -788,6 +788,7 @@ std::vector<std::string> CacheManager::GetEnabledLocalApps() const {
bool CacheManager::GetAppProperties(const std::string& policy_app_id,
AppProperties& out_app_properties) const {
+ sync_primitives::AutoLock auto_lock(cache_lock_);
const policy_table::ApplicationPolicies& policies =
pt_->policy_table.app_policies_section.apps;
policy_table::ApplicationPolicies::const_iterator policy_iter =
@@ -841,6 +842,7 @@ void CacheManager::InitCloudApp(const std::string& policy_app_id) {
void CacheManager::SetCloudAppEnabled(const std::string& policy_app_id,
const bool enabled) {
+ sync_primitives::AutoLock auto_lock(cache_lock_);
policy_table::ApplicationPolicies& policies =
pt_->policy_table.app_policies_section.apps;
policy_table::ApplicationPolicies::iterator policy_iter =
@@ -852,6 +854,7 @@ void CacheManager::SetCloudAppEnabled(const std::string& policy_app_id,
void CacheManager::SetAppAuthToken(const std::string& policy_app_id,
const std::string& auth_token) {
+ sync_primitives::AutoLock auto_lock(cache_lock_);
policy_table::ApplicationPolicies& policies =
pt_->policy_table.app_policies_section.apps;
policy_table::ApplicationPolicies::iterator policy_iter =
@@ -863,6 +866,7 @@ void CacheManager::SetAppAuthToken(const std::string& policy_app_id,
void CacheManager::SetAppCloudTransportType(
const std::string& policy_app_id, const std::string& cloud_transport_type) {
+ sync_primitives::AutoLock auto_lock(cache_lock_);
policy_table::ApplicationPolicies& policies =
pt_->policy_table.app_policies_section.apps;
policy_table::ApplicationPolicies::iterator policy_iter =
@@ -874,6 +878,7 @@ void CacheManager::SetAppCloudTransportType(
void CacheManager::SetAppEndpoint(const std::string& policy_app_id,
const std::string& endpoint) {
+ sync_primitives::AutoLock auto_lock(cache_lock_);
policy_table::ApplicationPolicies& policies =
pt_->policy_table.app_policies_section.apps;
policy_table::ApplicationPolicies::iterator policy_iter =
@@ -885,6 +890,7 @@ void CacheManager::SetAppEndpoint(const std::string& policy_app_id,
void CacheManager::SetAppNicknames(const std::string& policy_app_id,
const StringArray& nicknames) {
+ sync_primitives::AutoLock auto_lock(cache_lock_);
policy_table::ApplicationPolicies& policies =
pt_->policy_table.app_policies_section.apps;
policy_table::ApplicationPolicies::iterator policy_iter =
@@ -897,6 +903,7 @@ void CacheManager::SetAppNicknames(const std::string& policy_app_id,
void CacheManager::SetHybridAppPreference(
const std::string& policy_app_id,
const std::string& hybrid_app_preference) {
+ sync_primitives::AutoLock auto_lock(cache_lock_);
policy_table::HybridAppPreference value;
bool valid = EnumFromJsonString(hybrid_app_preference, &value);
policy_table::ApplicationPolicies& policies =
@@ -912,6 +919,7 @@ void CacheManager::GetAppServiceParameters(
const std::string& policy_app_id,
policy_table::AppServiceParameters* app_service_parameters) const {
SDL_LOG_AUTO_TRACE();
+ sync_primitives::AutoLock auto_lock(cache_lock_);
const policy_table::ApplicationPolicies& policies =
pt_->policy_table.app_policies_section.apps;
policy_table::ApplicationPolicies::const_iterator policy_iter =
@@ -926,6 +934,7 @@ void CacheManager::GetAppServiceParameters(
bool CacheManager::UnknownRPCPassthroughAllowed(
const std::string& policy_app_id) const {
+ sync_primitives::AutoLock auto_lock(cache_lock_);
const policy_table::ApplicationPolicies& policies =
pt_->policy_table.app_policies_section.apps;
policy_table::ApplicationPolicies::const_iterator policy_iter =
@@ -987,8 +996,13 @@ std::vector<UserFriendlyMessage> CacheManager::GetUserFriendlyMsg(
std::vector<std::string>::const_iterator it_end = msg_codes.end();
sync_primitives::AutoLock auto_lock(cache_lock_);
for (; it != it_end; ++it) {
- policy_table::MessageLanguages msg_languages =
- (*pt_->policy_table.consumer_friendly_messages->messages)[*it];
+ auto messages = pt_->policy_table.consumer_friendly_messages->messages;
+ auto messages_it = messages->find(*it);
+ if (messages->end() == messages_it) {
+ SDL_LOG_ERROR("No entry found for message code: " << *it);
+ continue;
+ }
+ policy_table::MessageLanguages msg_languages = messages_it->second;
policy_table::MessageString message_string;
@@ -1042,6 +1056,7 @@ void CacheManager::GetUpdateUrls(const uint32_t service_type,
return end_point.first.compare(0, 2, "0x") == 0 &&
decimal == service_type;
};
+ sync_primitives::AutoLock auto_lock(cache_lock_);
auto& end_points = pt_->policy_table.module_config.endpoints;
const auto end_point =
std::find_if(end_points.begin(), end_points.end(), find_hexademical);
@@ -1081,6 +1096,7 @@ void CacheManager::GetUpdateUrls(const std::string& service_type,
std::string CacheManager::GetIconUrl(const std::string& policy_app_id) const {
CACHE_MANAGER_CHECK(std::string());
std::string url;
+ sync_primitives::AutoLock auto_lock(cache_lock_);
const policy_table::ApplicationPolicies& policies =
pt_->policy_table.app_policies_section.apps;
policy_table::ApplicationPolicies::const_iterator policy_iter =
@@ -1294,9 +1310,9 @@ void CacheManager::PersistData() {
if (pt_.use_count() != 0) {
// Comma expression is used to hold the lock only during the constructor
// call
+
policy_table::Table copy_pt(
(sync_primitives::AutoLock(cache_lock_), *pt_));
-
backup_->Save(copy_pt);
backup_->SaveUpdateRequired(update_required);
@@ -1457,7 +1473,6 @@ bool CacheManager::GetFunctionalGroupings(
sync_primitives::AutoLock auto_lock(cache_lock_);
const policy_table::FunctionalGroupings& f_groupings =
pt_->policy_table.functional_groupings;
-
groups.insert(f_groupings.begin(), f_groupings.end());
return true;
}
@@ -1473,6 +1488,7 @@ int CacheManager::CountUnconsentedGroups(const std::string& policy_app_id,
void CacheManager::SetPreloadedPtFlag(const bool is_preloaded) {
SDL_LOG_AUTO_TRACE();
+ sync_primitives::AutoLock auto_lock(cache_lock_);
*(pt_->policy_table.module_config.preloaded_pt) = is_preloaded;
Backup();
}
@@ -1567,7 +1583,7 @@ void CacheManager::Increment(usage_statistics::GlobalCounterId type) {
void CacheManager::Increment(const std::string& app_id,
usage_statistics::AppCounterId type) {
CACHE_MANAGER_CHECK_VOID();
- sync_primitives::AutoLock lock(cache_lock_);
+ sync_primitives::AutoLock auto_lock(cache_lock_);
switch (type) {
case usage_statistics::USER_SELECTIONS:
++(*pt_->policy_table.usage_and_error_counts->app_level)[app_id]
@@ -1616,7 +1632,7 @@ void CacheManager::Set(const std::string& app_id,
usage_statistics::AppInfoId type,
const std::string& value) {
CACHE_MANAGER_CHECK_VOID();
- sync_primitives::AutoLock lock(cache_lock_);
+ sync_primitives::AutoLock auto_lock(cache_lock_);
switch (type) {
case usage_statistics::LANGUAGE_GUI:
(*pt_->policy_table.usage_and_error_counts->app_level)[app_id]
@@ -1637,7 +1653,7 @@ void CacheManager::Add(const std::string& app_id,
usage_statistics::AppStopwatchId type,
int seconds) {
CACHE_MANAGER_CHECK_VOID();
- sync_primitives::AutoLock lock(cache_lock_);
+ sync_primitives::AutoLock auto_lock(cache_lock_);
const int minutes = ConvertSecondsToMinute(seconds);
switch (type) {
case usage_statistics::SECONDS_HMI_FULL:
@@ -1759,6 +1775,7 @@ bool CacheManager::IsPredataPolicy(const std::string& app_id) const {
bool CacheManager::SetUnpairedDevice(const std::string& device_id,
bool unpaired) {
+ SDL_LOG_AUTO_TRACE();
sync_primitives::AutoLock auto_lock(cache_lock_);
const bool result = pt_->policy_table.device_data->end() !=
pt_->policy_table.device_data->find(device_id);
@@ -1786,6 +1803,7 @@ bool CacheManager::SetVINValue(const std::string& value) {
}
bool CacheManager::IsApplicationRepresented(const std::string& app_id) const {
+ SDL_LOG_AUTO_TRACE();
CACHE_MANAGER_CHECK(false);
if (kDeviceId == app_id) {
return true;
@@ -1836,7 +1854,7 @@ bool CacheManager::Init(const std::string& file_name,
SDL_LOG_DEBUG("Validation report: " << rpc::PrettyFormat(report));
return result;
}
-
+ sync_primitives::AutoLock auto_lock(cache_lock_);
if (!UnwrapAppPolicies(pt_->policy_table.app_policies_section.apps)) {
SDL_LOG_ERROR("Cannot unwrap application policies");
}
@@ -1857,7 +1875,7 @@ void CacheManager::FillDeviceSpecificData() {}
bool CacheManager::LoadFromBackup() {
SDL_LOG_AUTO_TRACE();
- sync_primitives::AutoLock lock(cache_lock_);
+ sync_primitives::AutoLock auto_lock(cache_lock_);
pt_ = backup_->GenerateSnapshot();
update_required = backup_->UpdateRequired();
SDL_LOG_DEBUG("Update required flag from backup: " << std::boolalpha
@@ -1911,7 +1929,7 @@ bool CacheManager::LoadFromFile(const std::string& file_name,
}
SDL_LOG_TRACE("Start create PT");
- sync_primitives::AutoLock locker(cache_lock_);
+ sync_primitives::AutoLock auto_lock(cache_lock_);
table = policy_table::Table(&value);
@@ -1938,6 +1956,7 @@ bool CacheManager::ResetPT(const std::string& file_name) {
}
bool CacheManager::AppExists(const std::string& app_id) const {
+ SDL_LOG_AUTO_TRACE();
CACHE_MANAGER_CHECK(false);
sync_primitives::AutoLock auto_lock(cache_lock_);
policy_table::ApplicationPolicies::iterator policy_iter =
@@ -2053,6 +2072,7 @@ void CacheManager::GetAppRequestSubTypes(
}
std::string CacheManager::GetCertificate() const {
+ SDL_LOG_AUTO_TRACE();
CACHE_MANAGER_CHECK(std::string(""));
sync_primitives::AutoLock auto_lock(cache_lock_);
if (pt_->policy_table.module_config.certificate.is_initialized()) {
@@ -2069,7 +2089,7 @@ bool CacheManager::MergePreloadPT(const std::string& file_name) {
return false;
}
- sync_primitives::AutoLock lock(cache_lock_);
+ sync_primitives::AutoLock auto_lock(cache_lock_);
policy_table::PolicyTable& current = pt_->policy_table;
policy_table::PolicyTable& new_table = table.policy_table;
const std::string date_current = *current.module_config.preloaded_date;
diff --git a/src/components/policy/policy_regular/src/policy_manager_impl.cc b/src/components/policy/policy_regular/src/policy_manager_impl.cc
index 3a41cfa08b..ccc3454708 100644
--- a/src/components/policy/policy_regular/src/policy_manager_impl.cc
+++ b/src/components/policy/policy_regular/src/policy_manager_impl.cc
@@ -337,6 +337,7 @@ PolicyManager::PtProcessingResult PolicyManagerImpl::LoadPT(
cache_->SaveUpdateRequired(false);
sync_primitives::AutoLock lock(apps_registration_lock_);
+ sync_primitives::AutoLock policy_lock(policy_table_lock_);
// Get current DB data, since it could be updated during awaiting of PTU
auto policy_table_snapshot = cache_->GenerateSnapshot();
@@ -516,6 +517,7 @@ void PolicyManagerImpl::SendPermissionsToApp(
Permissions notification_data;
// Need to get rid of this call
+ sync_primitives::AutoLock policy_lock(policy_table_lock_);
auto policy_table_snapshot = cache_->GenerateSnapshot();
PrepareNotificationData(
@@ -585,6 +587,7 @@ bool PolicyManagerImpl::RequestPTUpdate(const PTUIterationType iteration_type) {
SDL_LOG_AUTO_TRACE();
BinaryMessage update;
if (PTUIterationType::DefaultIteration == iteration_type) {
+ sync_primitives::AutoLock policy_lock(policy_table_lock_);
std::shared_ptr<policy_table::Table> policy_table_snapshot =
cache_->GenerateSnapshot();
if (!policy_table_snapshot) {
diff --git a/src/components/policy/policy_regular/src/policy_table/types.cc b/src/components/policy/policy_regular/src/policy_table/types.cc
index 8b937f3142..6b1ba15cfd 100644
--- a/src/components/policy/policy_regular/src/policy_table/types.cc
+++ b/src/components/policy/policy_regular/src/policy_table/types.cc
@@ -272,7 +272,6 @@ ApplicationParams::ApplicationParams(const Json::Value* value__)
, AppHMIType(impl::ValueMember(value__, "AppHMIType"))
, RequestType(impl::ValueMember(value__, "RequestType"))
, RequestSubType(impl::ValueMember(value__, "RequestSubType"))
- , memory_kb(impl::ValueMember(value__, "memory_kb"), 0)
, heart_beat_timeout_ms(impl::ValueMember(value__, "heart_beat_timeout_ms"))
, certificate(impl::ValueMember(value__, "certificate"))
, moduleType(impl::ValueMember(value__, "moduleType"))
@@ -294,7 +293,6 @@ Json::Value ApplicationParams::ToJsonValue() const {
impl::WriteJsonField("AppHMIType", AppHMIType, &result__);
impl::WriteJsonField("RequestType", RequestType, &result__);
impl::WriteJsonField("RequestSubType", RequestSubType, &result__);
- impl::WriteJsonField("memory_kb", memory_kb, &result__);
impl::WriteJsonField(
"heart_beat_timeout_ms", heart_beat_timeout_ms, &result__);
impl::WriteJsonField("certificate", certificate, &result__);
@@ -331,9 +329,6 @@ bool ApplicationParams::is_valid() const {
if (!AppHMIType.is_valid()) {
return false;
}
- if (!memory_kb.is_valid()) {
- return false;
- }
if (!heart_beat_timeout_ms.is_valid()) {
return false;
}
@@ -396,9 +391,6 @@ bool ApplicationParams::struct_empty() const {
if (RequestSubType.is_initialized()) {
return false;
}
- if (memory_kb.is_initialized()) {
- return false;
- }
if (heart_beat_timeout_ms.is_initialized()) {
return false;
}
@@ -460,9 +452,6 @@ void ApplicationParams::ReportErrors(rpc::ValidationReport* report__) const {
if (!priority.is_valid()) {
priority.ReportErrors(&report__->ReportSubobject("priority"));
}
- if (!memory_kb.is_valid()) {
- memory_kb.ReportErrors(&report__->ReportSubobject("memory_kb"));
- }
if (!heart_beat_timeout_ms.is_valid()) {
heart_beat_timeout_ms.ReportErrors(
&report__->ReportSubobject("heart_beat_timeout_ms"));
@@ -512,7 +501,6 @@ void ApplicationParams::SetPolicyTableType(PolicyTableType pt_type) {
AppHMIType.SetPolicyTableType(pt_type);
RequestType.SetPolicyTableType(pt_type);
RequestSubType.SetPolicyTableType(pt_type);
- memory_kb.SetPolicyTableType(pt_type);
heart_beat_timeout_ms.SetPolicyTableType(pt_type);
certificate.SetPolicyTableType(pt_type);
moduleType.SetPolicyTableType(pt_type);
@@ -741,7 +729,6 @@ ModuleConfig::~ModuleConfig() {}
ModuleConfig::ModuleConfig(const Json::Value* value__)
: CompositeType(InitHelper(value__, &Json::Value::isObject))
- , device_certificates(impl::ValueMember(value__, "device_certificates"))
, preloaded_pt(impl::ValueMember(value__, "preloaded_pt"))
, full_app_id_supported(impl::ValueMember(value__, "full_app_id_supported"))
, exchange_after_x_ignition_cycles(
@@ -768,8 +755,6 @@ ModuleConfig::ModuleConfig(const Json::Value* value__)
impl::ValueMember(value__, "lock_screen_dismissal_enabled")) {}
void ModuleConfig::SafeCopyFrom(const ModuleConfig& from) {
- // device_certificates = from.device_certificates; // According to the
- // requirements this is optional.
exchange_after_x_ignition_cycles = from.exchange_after_x_ignition_cycles;
exchange_after_x_kilometers = from.exchange_after_x_kilometers;
exchange_after_x_days = from.exchange_after_x_days;
@@ -944,10 +929,6 @@ void ModuleConfig::ReportErrors(rpc::ValidationReport* report__) const {
if (struct_empty()) {
rpc::CompositeType::ReportErrors(report__);
}
- if (!device_certificates.is_valid()) {
- device_certificates.ReportErrors(
- &report__->ReportSubobject("device_certificates"));
- }
if (!preloaded_pt.is_valid()) {
preloaded_pt.ReportErrors(&report__->ReportSubobject("preloaded_pt"));
}
diff --git a/src/components/policy/policy_regular/src/sql_pt_queries.cc b/src/components/policy/policy_regular/src/sql_pt_queries.cc
index a58867966c..c86e934823 100644
--- a/src/components/policy/policy_regular/src/sql_pt_queries.cc
+++ b/src/components/policy/policy_regular/src/sql_pt_queries.cc
@@ -152,7 +152,6 @@ const std::string kCreateSchema =
" `is_revoked` BOOLEAN, "
" `is_default` BOOLEAN, "
" `is_predata` BOOLEAN, "
- " `memory_kb` INTEGER NOT NULL, "
" `heart_beat_timeout_ms` INTEGER NOT NULL, "
" `certificate` VARCHAR(65535), "
" `hybrid_app_preference_value` VARCHAR(255), "
@@ -778,12 +777,12 @@ const std::string kInsertRpcWithParameter =
const std::string kInsertApplication =
"INSERT OR IGNORE INTO `application` (`id`, `priority_value`, "
- "`is_revoked`, `memory_kb`, `heart_beat_timeout_ms`, `certificate`, "
+ "`is_revoked`, `heart_beat_timeout_ms`, `certificate`, "
"`hybrid_app_preference_value`, `endpoint`, `enabled`, `auth_token`, "
"`cloud_transport_type`, `icon_url`, `allow_unknown_rpc_passthrough` "
",`encryption_required`) "
"VALUES "
- "(?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
+ "(?,?,?,?,?,?,?,?,?,?,?,?,?)";
const std::string kInsertAppGroup =
"INSERT INTO `app_group` (`application_id`, `functional_group_id`)"
@@ -869,6 +868,9 @@ const std::string kDeleteSecondsBetweenRetries =
const std::string kDeleteEndpoint = "DELETE FROM `endpoint`";
+const std::string kDeleteEndpointProperties =
+ "DELETE FROM `endpoint_properties`";
+
const std::string kDeleteAppLevel = "DELETE FROM `app_level`";
const std::string kDeleteMessageString = "DELETE FROM `message`";
@@ -916,7 +918,7 @@ const std::string kSelectUserMsgsVersion =
"SELECT DISTINCT `number` FROM `version`";
const std::string kSelectAppPolicies =
- "SELECT `id`, `priority_value`, `memory_kb`, "
+ "SELECT `id`, `priority_value`, "
" `heart_beat_timeout_ms`, `certificate`, `hybrid_app_preference_value`, "
" `endpoint`, `enabled`, `auth_token`, `cloud_transport_type`, `icon_url`, "
" `allow_unknown_rpc_passthrough`, `encryption_required`"
@@ -1047,16 +1049,16 @@ const std::string kDeleteAppGroupByApplicationId =
const std::string kInsertApplicationFull =
"INSERT OR IGNORE INTO `application` (`id`, `keep_context`, `steal_focus`, "
" `default_hmi`, `priority_value`, `is_revoked`, `is_default`, "
- " `is_predata`, `memory_kb`, `heart_beat_timeout_ms`, "
+ " `is_predata`, `heart_beat_timeout_ms`, "
" `certificate`, `hybrid_app_preference_value`, `endpoint`, `enabled`, "
" `auth_token`, `cloud_transport_type`, `icon_url`, "
"`allow_unknown_rpc_passthrough`, `encryption_required`)"
- " VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
+ " VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
const std::string kSelectApplicationFull =
"SELECT `keep_context`, `steal_focus`, `default_hmi`, "
"`priority_value`, "
- " `is_revoked`, `is_default`, `is_predata`, `memory_kb`,"
+ " `is_revoked`, `is_default`, `is_predata`, "
" `heart_beat_timeout_ms`, `certificate`, `hybrid_app_preference_value`, "
" `endpoint`, `enabled`, `auth_token`, `cloud_transport_type`, "
"`icon_url`, "
diff --git a/src/components/policy/policy_regular/src/sql_pt_representation.cc b/src/components/policy/policy_regular/src/sql_pt_representation.cc
index 1f24ca9472..f6ee8772fc 100644
--- a/src/components/policy/policy_regular/src/sql_pt_representation.cc
+++ b/src/components/policy/policy_regular/src/sql_pt_representation.cc
@@ -772,30 +772,28 @@ bool SQLPTRepresentation::GatherApplicationPoliciesSection(
policy_table::EnumFromJsonString(query.GetString(1), &priority);
params.priority = priority;
- *params.memory_kb = query.GetInteger(2);
-
- *params.heart_beat_timeout_ms = query.GetUInteger(3);
- if (!query.IsNull(4)) {
- *params.certificate = query.GetString(4);
+ *params.heart_beat_timeout_ms = query.GetUInteger(2);
+ if (!query.IsNull(3)) {
+ *params.certificate = query.GetString(3);
}
// Read cloud app properties
policy_table::HybridAppPreference hap;
- bool valid = policy_table::EnumFromJsonString(query.GetString(5), &hap);
+ bool valid = policy_table::EnumFromJsonString(query.GetString(4), &hap);
if (valid) {
*params.hybrid_app_preference = hap;
}
- *params.endpoint = query.GetString(6);
- if (!query.IsNull(7)) {
- *params.enabled = query.GetBoolean(7);
+ *params.endpoint = query.GetString(5);
+ if (!query.IsNull(6)) {
+ *params.enabled = query.GetBoolean(6);
}
- *params.auth_token = query.GetString(8);
- *params.cloud_transport_type = query.GetString(9);
- *params.icon_url = query.GetString(10);
- *params.allow_unknown_rpc_passthrough = query.GetBoolean(11);
+ *params.auth_token = query.GetString(7);
+ *params.cloud_transport_type = query.GetString(8);
+ *params.icon_url = query.GetString(9);
+ *params.allow_unknown_rpc_passthrough = query.GetBoolean(10);
- if (!query.IsNull(12)) {
- *params.encryption_required = query.GetBoolean(12);
+ if (!query.IsNull(11)) {
+ *params.encryption_required = query.GetBoolean(11);
}
const auto& gather_app_id = ((*policies).apps[app_id].is_string())
@@ -1116,36 +1114,35 @@ bool SQLPTRepresentation::SaveSpecificAppPolicy(
app_query.Bind(
1, std::string(policy_table::EnumToJsonString(app.second.priority)));
app_query.Bind(2, app.second.is_null());
- app_query.Bind(3, *app.second.memory_kb);
- app_query.Bind(4, static_cast<int64_t>(*app.second.heart_beat_timeout_ms));
+ app_query.Bind(3, static_cast<int64_t>(*app.second.heart_beat_timeout_ms));
app.second.certificate.is_initialized()
- ? app_query.Bind(5, *app.second.certificate)
- : app_query.Bind(5);
+ ? app_query.Bind(4, *app.second.certificate)
+ : app_query.Bind(4);
app.second.hybrid_app_preference.is_initialized()
- ? app_query.Bind(6,
+ ? app_query.Bind(5,
std::string(policy_table::EnumToJsonString(
*app.second.hybrid_app_preference)))
- : app_query.Bind(6);
- app.second.endpoint.is_initialized() ? app_query.Bind(7, *app.second.endpoint)
- : app_query.Bind(7);
- app.second.enabled.is_initialized() ? app_query.Bind(8, *app.second.enabled)
- : app_query.Bind(8);
+ : app_query.Bind(5);
+ app.second.endpoint.is_initialized() ? app_query.Bind(6, *app.second.endpoint)
+ : app_query.Bind(6);
+ app.second.enabled.is_initialized() ? app_query.Bind(7, *app.second.enabled)
+ : app_query.Bind(7);
app.second.auth_token.is_initialized()
- ? app_query.Bind(9, *app.second.auth_token)
- : app_query.Bind(9);
+ ? app_query.Bind(8, *app.second.auth_token)
+ : app_query.Bind(8);
app.second.cloud_transport_type.is_initialized()
- ? app_query.Bind(10, *app.second.cloud_transport_type)
- : app_query.Bind(10);
+ ? app_query.Bind(9, *app.second.cloud_transport_type)
+ : app_query.Bind(9);
app.second.icon_url.is_initialized()
- ? app_query.Bind(11, *app.second.icon_url)
- : app_query.Bind(11);
+ ? app_query.Bind(10, *app.second.icon_url)
+ : app_query.Bind(10);
app.second.allow_unknown_rpc_passthrough.is_initialized()
- ? app_query.Bind(12, *app.second.allow_unknown_rpc_passthrough)
- : app_query.Bind(12);
+ ? app_query.Bind(11, *app.second.allow_unknown_rpc_passthrough)
+ : app_query.Bind(11);
app.second.encryption_required.is_initialized()
- ? app_query.Bind(13, *app.second.encryption_required)
- : app_query.Bind(13);
+ ? app_query.Bind(12, *app.second.encryption_required)
+ : app_query.Bind(12);
if (!app_query.Exec() || !app_query.Reset()) {
SDL_LOG_WARN("Incorrect insert into application.");
@@ -1542,6 +1539,18 @@ bool SQLPTRepresentation::SaveServiceEndpoints(
bool SQLPTRepresentation::SaveServiceEndpointProperties(
const policy_table::ServiceEndpointProperties& endpoint_properties) {
utils::dbms::SQLQuery query(db());
+
+ if (endpoint_properties.is_initialized() && endpoint_properties.empty()) {
+ bool delete_query_exec_result =
+ query.Exec(sql_pt::kDeleteEndpointProperties);
+
+ if (!delete_query_exec_result) {
+ SDL_LOG_WARN("Failed to delete endpoint properties from DB.");
+ return false;
+ }
+ return true;
+ }
+
if (!query.Prepare(sql_pt::kInsertEndpointVersion)) {
SDL_LOG_WARN(
"Incorrect insert of endpoint property to endpoint_properties.");
@@ -1578,9 +1587,7 @@ bool SQLPTRepresentation::SaveConsumerFriendlyMessages(
utils::dbms::SQLQuery query(db());
bool delete_query_exec_result = true;
- if (!messages.messages->empty()) {
- delete_query_exec_result = query.Exec(sql_pt::kDeleteMessageString);
- }
+ delete_query_exec_result = query.Exec(sql_pt::kDeleteMessageString);
if (!delete_query_exec_result) {
SDL_LOG_WARN("Failed to delete messages from DB.");
@@ -2669,6 +2676,7 @@ policy_table::VehicleDataItem SQLPTRepresentation::PopulateVDIFromQuery(
bool SQLPTRepresentation::InsertVehicleDataItem(
const policy_table::VehicleDataItem& vehicle_data_item) {
+ SDL_LOG_AUTO_TRACE();
utils::dbms::SQLQuery query(db());
if (!vehicle_data_item.is_initialized() || !vehicle_data_item.is_valid()) {
diff --git a/src/components/policy/policy_regular/src/status.cc b/src/components/policy/policy_regular/src/status.cc
index c870658622..f213c1f2a8 100644
--- a/src/components/policy/policy_regular/src/status.cc
+++ b/src/components/policy/policy_regular/src/status.cc
@@ -64,6 +64,7 @@ void policy::UpdateNeededStatus::ProcessEvent(
manager->SetNextStatus(std::make_shared<UpToDateStatus>());
manager->SetPostponedStatus(std::make_shared<UpdateNeededStatus>());
break;
+ case kOnValidUpdateReceived:
case kOnResetPolicyTableNoUpdate:
manager->SetNextStatus(std::make_shared<UpToDateStatus>());
break;
diff --git a/src/components/policy/policy_regular/test/sql_pt_representation_storage_test.cc b/src/components/policy/policy_regular/test/sql_pt_representation_storage_test.cc
index f719edf391..3277706dfc 100644
--- a/src/components/policy/policy_regular/test/sql_pt_representation_storage_test.cc
+++ b/src/components/policy/policy_regular/test/sql_pt_representation_storage_test.cc
@@ -102,10 +102,10 @@ TEST_F(
// Arrange
const std::string value_12345 = "12345";
const std::string query =
- "INSERT OR REPLACE INTO `application` (`id`, `memory_kb`,"
+ "INSERT OR REPLACE INTO `application` (`id`,"
" `heart_beat_timeout_ms`) VALUES ('" +
value_12345 +
- "', 5, 10); "
+ "', 10); "
"INSERT OR REPLACE INTO functional_group (`id`, `name`)"
" VALUES (1, 'Base-4'); "
"INSERT OR REPLACE INTO `app_group` (`application_id`,"
diff --git a/src/components/policy/policy_regular/test/sql_pt_representation_test.cc b/src/components/policy/policy_regular/test/sql_pt_representation_test.cc
index fb64dfe7d0..d0044c7b75 100644
--- a/src/components/policy/policy_regular/test/sql_pt_representation_test.cc
+++ b/src/components/policy/policy_regular/test/sql_pt_representation_test.cc
@@ -192,7 +192,6 @@ class SQLPTRepresentationTest : protected SQLPTRepresentation,
uint16_t apps_size,
policy_table::Priority prio,
const std::string& section,
- uint16_t memory_kb,
uint32_t heart_beat_timeout_ms,
policy_table::Strings& groups) const {
if (section != "device") {
@@ -206,7 +205,6 @@ class SQLPTRepresentationTest : protected SQLPTRepresentation,
EXPECT_EQ(0u, (*(apps_iter->second.nicknames)).size());
EXPECT_EQ(prio, apps_iter->second.priority);
EXPECT_EQ(0u, (*(apps_iter->second.AppHMIType)).size());
- EXPECT_EQ(memory_kb, (*(apps_iter->second.memory_kb)));
EXPECT_EQ(heart_beat_timeout_ms,
(*(apps_iter->second.heart_beat_timeout_ms)));
} else {
@@ -532,8 +530,8 @@ TEST_F(
CheckPermissionsAllowed_SetValuesInAppGroupRpcFunctionalGroup_GetEqualParamsInCheckPermissionResult) {
// Arrange
const std::string query =
- "INSERT OR REPLACE INTO `application` (`id`, `memory_kb`,"
- " `heart_beat_timeout_ms`) VALUES ('12345', 5, 10); "
+ "INSERT OR REPLACE INTO `application` (`id`,"
+ " `heart_beat_timeout_ms`) VALUES ('12345', 10); "
"INSERT OR REPLACE INTO functional_group (`id`, `name`)"
" VALUES (1, 'Base-4'); "
"INSERT OR REPLACE INTO `app_group` (`application_id`,"
@@ -563,8 +561,8 @@ TEST_F(
CheckPermissionsAllowedWithoutParameters_SetLimitedPermissions_ExpectEmptyListOfAllowedParams) {
// Arrange
const std::string query =
- "INSERT OR REPLACE INTO `application` (`id`, `memory_kb`,"
- " `heart_beat_timeout_ms`) VALUES ('12345', 5, 10); "
+ "INSERT OR REPLACE INTO `application` (`id`, "
+ " `heart_beat_timeout_ms`) VALUES ('12345', 10); "
"INSERT OR REPLACE INTO functional_group (`id`, `name`)"
" VALUES (1, 'Base-4'); "
"INSERT OR REPLACE INTO `app_group` (`application_id`,"
@@ -1050,10 +1048,10 @@ TEST_F(SQLPTRepresentationTest,
"INSERT OR IGNORE INTO `application`(`id`, `keep_context`, "
"`steal_focus`, "
" `default_hmi`, `priority_value`, `is_revoked`, `is_default`, "
- "`is_predata`, `memory_kb`, "
+ "`is_predata`, "
" `heart_beat_timeout_ms`) VALUES( 'default', 0, 0, 'NONE', 'NONE', 0, "
"0, "
- "0, 64, 10) ";
+ "0, 10) ";
// Assert
ASSERT_TRUE(query_wrapper_->Exec(query_insert_app_default));
@@ -1062,10 +1060,10 @@ TEST_F(SQLPTRepresentationTest,
"INSERT OR IGNORE INTO `application`(`id`, `keep_context`, "
"`steal_focus`, "
" `default_hmi`, `priority_value`, `is_revoked`, `is_default`, "
- "`is_predata`, `memory_kb`, "
+ "`is_predata`, "
" `heart_beat_timeout_ms`) VALUES( 'pre_DataConsent', 0, 0, 'NONE', "
"'NONE', 0, 0, "
- "0, 64, 10) ";
+ "0, 10) ";
// Assert
ASSERT_TRUE(query_wrapper_->Exec(query_insert_app_predataconsent));
@@ -1074,10 +1072,10 @@ TEST_F(SQLPTRepresentationTest,
"INSERT OR IGNORE INTO `application`(`id`, `keep_context`, "
"`steal_focus`, "
" `default_hmi`, `priority_value`, `is_revoked`, `is_default`, "
- "`is_predata`, `memory_kb`, "
+ "`is_predata`, "
" `heart_beat_timeout_ms`) VALUES( 'device', 0, 0, 'NONE', "
"'COMMUNICATION', 0, 0, "
- "0, 64, 10) ";
+ "0, 10) ";
// Assert
ASSERT_TRUE(query_wrapper_->Exec(query_insert_app_device));
@@ -1086,10 +1084,10 @@ TEST_F(SQLPTRepresentationTest,
"INSERT OR IGNORE INTO `application`(`id`, `keep_context`, "
"`steal_focus`, "
" `default_hmi`, `priority_value`, `is_revoked`, `is_default`, "
- "`is_predata`, `memory_kb`, "
+ "`is_predata`, "
" `heart_beat_timeout_ms`) VALUES( '12345', 0, 0, 'NONE', 'EMERGENCY', "
"0, 0, "
- "0, 64, 10) ";
+ "0, 10) ";
// Assert
ASSERT_TRUE(query_wrapper_->Exec(query_insert_app_12345));
@@ -1146,10 +1144,10 @@ TEST_F(SQLPTRepresentationTest,
"INSERT OR IGNORE INTO `application`(`id`, `keep_context`, "
"`steal_focus`, "
" `default_hmi`, `priority_value`, `is_revoked`, `is_default`, "
- "`is_predata`, `memory_kb`, "
+ "`is_predata`, "
" `heart_beat_timeout_ms`) VALUES( 'default', 0, 0, 'NONE', 'NONE', 0, "
"0, "
- "0, 64, 10) ";
+ "0, 10) ";
// Assert
ASSERT_TRUE(query_wrapper_->Exec(query_insert_app_default));
@@ -1158,10 +1156,10 @@ TEST_F(SQLPTRepresentationTest,
"INSERT OR IGNORE INTO `application`(`id`, `keep_context`, "
"`steal_focus`, "
" `default_hmi`, `priority_value`, `is_revoked`, `is_default`, "
- "`is_predata`, `memory_kb`, "
+ "`is_predata`, "
" `heart_beat_timeout_ms`) VALUES( 'pre_DataConsent', 0, 0, 'NONE', "
"'NONE', 0, 0, "
- "0, 64, 10) ";
+ "0, 10) ";
// Assert
ASSERT_TRUE(query_wrapper_->Exec(query_insert_app_predataconsent));
@@ -1170,10 +1168,10 @@ TEST_F(SQLPTRepresentationTest,
"INSERT OR IGNORE INTO `application`(`id`, `keep_context`, "
"`steal_focus`, "
" `default_hmi`, `priority_value`, `is_revoked`, `is_default`, "
- "`is_predata`, `memory_kb`, "
+ "`is_predata`, "
" `heart_beat_timeout_ms`) VALUES( 'device', 0, 0, 'NONE', "
"'COMMUNICATION', 0, 0, "
- "0, 64, 10) ";
+ "0, 10) ";
// Assert
ASSERT_TRUE(query_wrapper_->Exec(query_insert_app_device));
@@ -1182,10 +1180,10 @@ TEST_F(SQLPTRepresentationTest,
"INSERT OR IGNORE INTO `application`(`id`, `keep_context`, "
"`steal_focus`, "
" `default_hmi`, `priority_value`, `is_revoked`, `is_default`, "
- "`is_predata`, `memory_kb`, "
+ "`is_predata`, "
" `heart_beat_timeout_ms`) VALUES( '12345', 0, 0, 'NONE', 'EMERGENCY', "
"0, 0, "
- "0, 64, 10) ";
+ "0, 10) ";
// Assert
ASSERT_TRUE(query_wrapper_->Exec(query_insert_app_12345));
@@ -1361,10 +1359,10 @@ TEST_F(SQLPTRepresentationTest,
"INSERT OR IGNORE INTO `application`(`id`, `keep_context`, "
"`steal_focus`, "
" `default_hmi`, `priority_value`, `is_revoked`, `is_default`, "
- "`is_predata`, `memory_kb`, "
+ "`is_predata`, "
" `heart_beat_timeout_ms`) VALUES( 'default', 0, 0, 'NONE', 'NONE', 0, "
"0, "
- "0, 64, 10) ";
+ "0, 10) ";
// Assert
ASSERT_TRUE(query_wrapper_->Exec(query_insert_app_default));
@@ -1373,9 +1371,9 @@ TEST_F(SQLPTRepresentationTest,
"INSERT OR IGNORE INTO `application`(`id`, `keep_context`, "
"`steal_focus`, "
" `default_hmi`, `priority_value`, `is_revoked`, `is_default`, "
- "`is_predata`, `memory_kb`, "
+ "`is_predata`, "
" `heart_beat_timeout_ms`) VALUES( 'device', 0, 0, 'NONE', "
- "'COMMUNICATION', 0, 0, 0, 64, 10) ";
+ "'COMMUNICATION', 0, 0, 0, 10) ";
// Assert
ASSERT_TRUE(query_wrapper_->Exec(query_insert_app_device));
@@ -1384,10 +1382,10 @@ TEST_F(SQLPTRepresentationTest,
"INSERT OR IGNORE INTO `application`(`id`, `keep_context`, "
"`steal_focus`, "
" `default_hmi`, `priority_value`, `is_revoked`, `is_default`, "
- "`is_predata`, `memory_kb`, "
+ "`is_predata`, "
" `heart_beat_timeout_ms`) VALUES( '12345', 0, 0, 'NONE', 'EMERGENCY', "
"0, 0, "
- "0, 64, 10) ";
+ "0, 10) ";
// Assert
ASSERT_TRUE(query_wrapper_->Exec(query_insert_app_12345));
@@ -1406,10 +1404,10 @@ TEST_F(SQLPTRepresentationTest,
"INSERT OR IGNORE INTO `application`(`id`, `keep_context`, "
"`steal_focus`, "
" `default_hmi`, `priority_value`, `is_revoked`, `is_default`, "
- "`is_predata`, `memory_kb`, "
+ "`is_predata`, "
" `heart_beat_timeout_ms`) VALUES( '7777', 0, 0, 'NONE', 'NONE', 1, "
"0, "
- "0, 64, 10) ";
+ "0, 10) ";
// Assert
ASSERT_TRUE(query_wrapper_->Exec(query_insert_app_7777));
@@ -1418,10 +1416,10 @@ TEST_F(SQLPTRepresentationTest,
"INSERT OR IGNORE INTO `application`(`id`, `keep_context`, "
"`steal_focus`, "
" `default_hmi`, `priority_value`, `is_revoked`, `is_default`, "
- "`is_predata`, `memory_kb`, "
+ "`is_predata`, "
" `heart_beat_timeout_ms`) VALUES( '12345', 0, 0, 'NONE', 'EMERGENCY', "
"0, 0, "
- "0, 64, 10) ";
+ "0, 10) ";
// Assert
ASSERT_TRUE(query_wrapper_->Exec(query_insert_app_12345));
@@ -1438,10 +1436,10 @@ TEST_F(SQLPTRepresentationTest,
"INSERT OR IGNORE INTO `application`(`id`, `keep_context`, "
"`steal_focus`, "
" `default_hmi`, `priority_value`, `is_revoked`, `is_default`, "
- "`is_predata`, `memory_kb`, "
+ "`is_predata`, "
" `heart_beat_timeout_ms`) VALUES( 'default', 0, 0, 'NONE', 'NONE', 0, "
"1, "
- "0, 64, 10) ";
+ "0, 10) ";
// Assert
ASSERT_TRUE(query_wrapper_->Exec(query_insert_app_default));
@@ -1450,9 +1448,9 @@ TEST_F(SQLPTRepresentationTest,
"INSERT OR IGNORE INTO `application`(`id`, `keep_context`, "
"`steal_focus`, "
" `default_hmi`, `priority_value`, `is_revoked`, `is_default`, "
- "`is_predata`, `memory_kb`, "
+ "`is_predata`, "
" `heart_beat_timeout_ms`) VALUES( '123', 1, 0, 'FULL', "
- "'COMMUNICATION', 1, 1, 0, 64, 10) ";
+ "'COMMUNICATION', 1, 1, 0, 10) ";
// Assert
ASSERT_TRUE(query_wrapper_->Exec(query_insert_app_123));
@@ -1487,10 +1485,10 @@ TEST_F(SQLPTRepresentationTest,
"INSERT OR IGNORE INTO `application`(`id`, `keep_context`, "
"`steal_focus`, "
" `default_hmi`, `priority_value`, `is_revoked`, `is_default`, "
- "`is_predata`, `memory_kb`, "
+ "`is_predata`, "
" `heart_beat_timeout_ms`) VALUES( '12345', 0, 0, 'NONE', 'NONE', 0, "
"0, "
- "1, 64, 10) ";
+ "1, 10) ";
// Assert
ASSERT_TRUE(query_wrapper_->Exec(query_insert_app));
@@ -1505,8 +1503,8 @@ TEST_F(SQLPTRepresentationTest,
const std::string query_insert_app =
"INSERT OR IGNORE INTO `application`(`id`, `keep_context`, "
"`steal_focus`, `default_hmi`, `priority_value`, `is_revoked`, "
- "`is_default`, `is_predata`, `memory_kb`, `heart_beat_timeout_ms`) "
- "VALUES( '1234567', 0, 0, 'NONE', 'NONE', 0, 1, 0, 64, 10) ";
+ "`is_default`, `is_predata`, `heart_beat_timeout_ms`) "
+ "VALUES( '1234567', 0, 0, 'NONE', 'NONE', 0, 1, 0, 10) ";
// Assert
ASSERT_TRUE(query_wrapper_->Exec(query_insert_app));
@@ -1547,10 +1545,10 @@ TEST_F(SQLPTRepresentationTest,
"INSERT INTO `application`(`id`, `keep_context`, "
"`steal_focus`, "
" `default_hmi`, `priority_value`, `is_revoked`, `is_default`, "
- "`is_predata`, `memory_kb`, "
+ "`is_predata`, "
" `heart_beat_timeout_ms`) "
"VALUES( '" +
- kDefaultId + "', 0, 0, 'NONE', 'NONE', 0, 0, 0, 64, 10) ";
+ kDefaultId + "', 0, 0, 'NONE', 'NONE', 0, 0, 0, 10) ";
// Assert
ASSERT_TRUE(query_wrapper_->Exec(query_insert_default_app));
@@ -1574,9 +1572,9 @@ TEST_F(SQLPTRepresentationTest,
const std::string query_insert_new_app =
"INSERT INTO `application`(`id`, `keep_context`, "
"`steal_focus`, `default_hmi`, `priority_value`, `is_revoked`, "
- "`is_default`, `is_predata`, `memory_kb`, `heart_beat_timeout_ms`) "
+ "`is_default`, `is_predata`, `heart_beat_timeout_ms`) "
"VALUES('" +
- kAppId + "', 0, 0, 'NONE', 'NONE', 0, 0, 1, 64, 10)";
+ kAppId + "', 0, 0, 'NONE', 'NONE', 0, 0, 1, 10)";
// Assert
ASSERT_TRUE(query_wrapper_->Exec(query_insert_new_app));
@@ -1631,8 +1629,8 @@ TEST_F(SQLPTRepresentationTest,
const std::string query_insert_app =
"INSERT OR IGNORE INTO `application`(`id`, `keep_context`, "
"`steal_focus`, `default_hmi`, `priority_value`, `is_revoked`, "
- "`is_default`, `is_predata`, `memory_kb`, `heart_beat_timeout_ms`) "
- "VALUES( '1234567', 0, 0, 'NONE', 'NONE', 0, 0, 1, 64, 10) ";
+ "`is_default`, `is_predata`, `heart_beat_timeout_ms`) "
+ "VALUES( '1234567', 0, 0, 'NONE', 'NONE', 0, 0, 1, 10) ";
// Assert
ASSERT_TRUE(query_wrapper_->Exec(query_insert_app));
diff --git a/src/components/protocol_handler/src/handshake_handler.cc b/src/components/protocol_handler/src/handshake_handler.cc
index 87369c0793..6f86738ebe 100644
--- a/src/components/protocol_handler/src/handshake_handler.cc
+++ b/src/components/protocol_handler/src/handshake_handler.cc
@@ -154,7 +154,7 @@ bool HandshakeHandler::OnHandshakeDone(
case security_manager::SSLContext::Handshake_Result_Fail:
return "";
default:
- return "";
+ return "Unknown handshake result";
}
};
diff --git a/src/components/resumption/src/last_state_impl.cc b/src/components/resumption/src/last_state_impl.cc
index 9920a1499b..45fcdb2e8e 100644
--- a/src/components/resumption/src/last_state_impl.cc
+++ b/src/components/resumption/src/last_state_impl.cc
@@ -49,7 +49,6 @@ LastStateImpl::LastStateImpl(const std::string& app_storage_folder,
LastStateImpl::~LastStateImpl() {
SDL_LOG_AUTO_TRACE();
- SaveToFileSystem();
}
void LastStateImpl::SaveToFileSystem() {
diff --git a/src/components/security_manager/src/security_manager_impl.cc b/src/components/security_manager/src/security_manager_impl.cc
index 75cc104d95..59f6da22be 100644
--- a/src/components/security_manager/src/security_manager_impl.cc
+++ b/src/components/security_manager/src/security_manager_impl.cc
@@ -607,10 +607,11 @@ bool SecurityManagerImpl::ProcessInternalError(
Json::Value root;
utils::JsonReader reader;
- if (!reader.parse(str, &root)) {
+ if (!reader.parse(str, &root) || !root.isObject()) {
SDL_LOG_DEBUG("Json parsing fails.");
return false;
}
+
uint8_t id = root[kErrId].asInt();
SDL_LOG_DEBUG("Received InternalError id " << std::to_string(id) << ", text: "
<< root[kErrText].asString());
diff --git a/src/components/security_manager/src/ssl_context_impl.cc b/src/components/security_manager/src/ssl_context_impl.cc
index 1c8b009097..78e4d1d463 100644
--- a/src/components/security_manager/src/ssl_context_impl.cc
+++ b/src/components/security_manager/src/ssl_context_impl.cc
@@ -628,6 +628,7 @@ CryptoManagerImpl::SSLContextImpl::openssl_error_convert_to_internal(
case X509_V_ERR_SUBJECT_ISSUER_MISMATCH:
case X509_V_ERR_CERT_SIGNATURE_FAILURE:
case X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT:
+ case X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT_LOCALLY:
case X509_V_ERR_DEPTH_ZERO_SELF_SIGNED_CERT:
return Handshake_Result_CertNotSigned;
default:
diff --git a/src/components/security_manager/test/ssl_certificate_handshake_test.cc b/src/components/security_manager/test/ssl_certificate_handshake_test.cc
index 9c21fba0bb..4d09e03883 100644
--- a/src/components/security_manager/test/ssl_certificate_handshake_test.cc
+++ b/src/components/security_manager/test/ssl_certificate_handshake_test.cc
@@ -450,7 +450,7 @@ TEST_P(SSLHandshakeTest, CAVerification_ClientSide_NoCACertificate) {
<< client_manager_->LastError();
GTEST_TRACE(HandshakeProcedure_ClientSideFail(
- security_manager::SSLContext::Handshake_Result_Fail));
+ security_manager::SSLContext::Handshake_Result_CertNotSigned));
ASSERT_TRUE(InitClientManagers(GetParam().client_protocol,
client_certificate,
diff --git a/src/components/transport_manager/include/transport_manager/cloud/websocket_client_connection.h b/src/components/transport_manager/include/transport_manager/cloud/websocket_client_connection.h
index 0465effa94..afc040f749 100644
--- a/src/components/transport_manager/include/transport_manager/cloud/websocket_client_connection.h
+++ b/src/components/transport_manager/include/transport_manager/cloud/websocket_client_connection.h
@@ -144,16 +144,19 @@ class WebsocketClientConnection
void OnRead(boost::system::error_code ec, std::size_t bytes_transferred);
private:
+ void ResetWebsocketStream(std::string cloud_transport_type);
+
TransportAdapterController* controller_;
boost::asio::io_context ioc_;
tcp::resolver resolver_;
boost::beast::flat_buffer buffer_;
std::string host_;
std::string text_;
- WS ws_;
+ std::shared_ptr<WS> ws_;
#ifdef ENABLE_SECURITY
+ const char* wss_ciphers_;
ssl::context ctx_;
- WSS wss_;
+ std::shared_ptr<WSS> wss_;
#endif // ENABLE_SECURITY
std::atomic_bool shutdown_;
diff --git a/src/components/transport_manager/include/transport_manager/transport_adapter/threaded_socket_connection.h b/src/components/transport_manager/include/transport_manager/transport_adapter/threaded_socket_connection.h
index 7c4e07fa59..9241d9e1db 100644
--- a/src/components/transport_manager/include/transport_manager/transport_adapter/threaded_socket_connection.h
+++ b/src/components/transport_manager/include/transport_manager/transport_adapter/threaded_socket_connection.h
@@ -189,7 +189,9 @@ class ThreadedSocketConnection : public Connection {
int write_fd_;
void threadMain();
void Transmit();
- void Finalize();
+ void FinalizeExpectedDisconnect();
+ void FinalizeUnexpectedDisconnect();
+ void NotifyAboutAbortedMessages();
TransportAdapter::Error Notify() const;
bool Receive();
bool Send();
diff --git a/src/components/transport_manager/include/transport_manager/websocket_server/websocket_session.h b/src/components/transport_manager/include/transport_manager/websocket_server/websocket_session.h
index 009d2fe07c..afdacfc4ec 100644
--- a/src/components/transport_manager/include/transport_manager/websocket_server/websocket_session.h
+++ b/src/components/transport_manager/include/transport_manager/websocket_server/websocket_session.h
@@ -38,6 +38,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#include "protocol/raw_message.h"
#include "transport_manager/transport_adapter/transport_adapter.h"
+#include "utils/lock.h"
#include "utils/logger.h"
#ifdef ENABLE_SECURITY
@@ -103,6 +104,7 @@ class WebSocketSession
DataSendDoneCallback data_send_done_;
DataSendFailedCallback data_send_failed_;
OnIOErrorCallback on_io_error_;
+ mutable sync_primitives::Lock read_write_operations_lock_;
};
} // namespace transport_adapter
diff --git a/src/components/transport_manager/src/bluetooth/bluetooth_device_scanner.cc b/src/components/transport_manager/src/bluetooth/bluetooth_device_scanner.cc
index ce0c2900b7..11c6c0c79f 100644
--- a/src/components/transport_manager/src/bluetooth/bluetooth_device_scanner.cc
+++ b/src/components/transport_manager/src/bluetooth/bluetooth_device_scanner.cc
@@ -206,10 +206,19 @@ void BluetoothDeviceScanner::DoInquiry() {
SDL_LOG_INFO("Check rfcomm channel on " << paired_devices_.size()
<< " paired devices.");
- paired_devices_with_sdl_.clear();
CheckSDLServiceOnDevices(
paired_devices_, device_handle, &paired_devices_with_sdl_);
- UpdateTotalDeviceList();
+ const bool new_connect =
+ paired_devices_with_sdl_.end() !=
+ std::find_if(paired_devices_with_sdl_.begin(),
+ paired_devices_with_sdl_.end(),
+ [](DeviceSptr devicePtr) {
+ return devicePtr->connection_status() !=
+ ConnectionStatus::CONNECTED;
+ });
+ if (new_connect) {
+ UpdateTotalDeviceList();
+ }
controller_->FindNewApplicationsRequest();
@@ -249,13 +258,30 @@ void BluetoothDeviceScanner::CheckSDLServiceOnDevices(
deviceName[name_len - 1] = '\0';
}
- auto bluetooth_device = std::make_shared<BluetoothDevice>(
- bd_address, deviceName, sdl_rfcomm_channels[i]);
- if (bluetooth_device) {
- SDL_LOG_INFO("Bluetooth device created successfully");
- discovered_devices->push_back(bluetooth_device);
- } else {
- SDL_LOG_WARN("Can't create bluetooth device " << deviceName);
+ auto it_device =
+ std::find_if(discovered_devices->begin(),
+ discovered_devices->end(),
+ [bd_address](DeviceSptr device) {
+ return device->unique_device_id() ==
+ BluetoothDevice::GetUniqueDeviceId(bd_address);
+ });
+
+ const bool is_new_device = (it_device == discovered_devices->end());
+ const bool is_new_rfcomm_channel =
+ !is_new_device && (*it_device)->GetApplicationList().size() !=
+ sdl_rfcomm_channels[i].size();
+ if (is_new_device || is_new_rfcomm_channel) {
+ if (!is_new_device) {
+ discovered_devices->erase(it_device);
+ }
+ auto bluetooth_device = std::make_shared<BluetoothDevice>(
+ bd_address, deviceName, sdl_rfcomm_channels[i]);
+ if (bluetooth_device) {
+ SDL_LOG_INFO("Bluetooth device created successfully");
+ discovered_devices->push_back(bluetooth_device);
+ } else {
+ SDL_LOG_WARN("Can't create bluetooth device " << deviceName);
+ }
}
}
SDL_LOG_TRACE("exit");
diff --git a/src/components/transport_manager/src/cloud/websocket_client_connection.cc b/src/components/transport_manager/src/cloud/websocket_client_connection.cc
index a84723d2a1..c1274699f7 100644
--- a/src/components/transport_manager/src/cloud/websocket_client_connection.cc
+++ b/src/components/transport_manager/src/cloud/websocket_client_connection.cc
@@ -48,17 +48,26 @@ WebsocketClientConnection::WebsocketClientConnection(
TransportAdapterController* controller)
: controller_(controller)
, resolver_(ioc_)
- , ws_(ioc_)
+ , ws_(std::make_shared<WS>(ioc_))
#ifdef ENABLE_SECURITY
- , ctx_(ssl::context::sslv23_client)
- , wss_(ioc_, ctx_)
+ , ctx_(ssl::context::tlsv12_client)
+ , wss_(std::make_shared<WSS>(ioc_, ctx_))
#endif // ENABLE_SECURITY
, shutdown_(false)
, thread_delegate_(new LoopThreadDelegate(&message_queue_, this))
- , write_thread_(threads::CreateThread("WS Async Send", thread_delegate_))
+ , write_thread_(
+ threads::CreateThread("Client WS Async Send", thread_delegate_))
, device_uid_(device_uid)
, app_handle_(app_handle)
, io_pool_(1) {
+#ifdef ENABLE_SECURITY
+ wss_ciphers_ =
+ "ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-"
+ "CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-"
+ "SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-"
+ "AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256";
+ SSL_CTX_set_cipher_list(ctx_.native_handle(), wss_ciphers_);
+#endif
}
WebsocketClientConnection::~WebsocketClientConnection() {
@@ -75,7 +84,7 @@ void WebsocketClientConnection::AddCertificateAuthority(
return;
}
- wss_.next_layer().set_verify_mode(ssl::verify_peer);
+ wss_->next_layer().set_verify_mode(ssl::verify_peer);
}
#endif // ENABLE_SECURITY
@@ -108,12 +117,12 @@ TransportAdapter::Error WebsocketClientConnection::Start() {
// Make Connection to host IP Address over TCP
if (cloud_properties.cloud_transport_type == "WS") {
- boost::asio::connect(ws_.next_layer(), results.begin(), results.end(), ec);
+ boost::asio::connect(ws_->next_layer(), results.begin(), results.end(), ec);
}
#ifdef ENABLE_SECURITY
else if (cloud_properties.cloud_transport_type == "WSS") {
boost::asio::connect(
- wss_.next_layer().next_layer(), results.begin(), results.end(), ec);
+ wss_->next_layer().next_layer(), results.begin(), results.end(), ec);
}
#endif // ENABLE_SECURITY
@@ -133,19 +142,19 @@ TransportAdapter::Error WebsocketClientConnection::Start() {
SDL_LOG_ERROR("Failed to add certificate authority: "
<< cloud_properties.certificate);
SDL_LOG_ERROR(str_err);
- Shutdown();
+ ResetWebsocketStream(cloud_properties.cloud_transport_type);
return TransportAdapter::FAIL;
}
// Perform SSL Handshake
- wss_.next_layer().handshake(ssl::stream_base::client, ec);
+ wss_->next_layer().handshake(ssl::stream_base::client, ec);
if (ec) {
std::string str_err = "ErrorMessage: " + ec.message();
SDL_LOG_ERROR("Could not complete SSL Handshake failed with host/port: "
<< host << ":" << port);
SDL_LOG_ERROR(str_err);
- Shutdown();
+ ResetWebsocketStream(cloud_properties.cloud_transport_type);
return TransportAdapter::FAIL;
}
}
@@ -153,11 +162,11 @@ TransportAdapter::Error WebsocketClientConnection::Start() {
// Perform websocket handshake
if (cloud_properties.cloud_transport_type == "WS") {
- ws_.handshake(host, cloud_device->GetTarget(), ec);
+ ws_->handshake(host, cloud_device->GetTarget(), ec);
}
#ifdef ENABLE_SECURITY
else if (cloud_properties.cloud_transport_type == "WSS") {
- wss_.handshake(host, cloud_device->GetTarget(), ec);
+ wss_->handshake(host, cloud_device->GetTarget(), ec);
}
#endif // ENABLE_SECURITY
if (ec) {
@@ -165,16 +174,17 @@ TransportAdapter::Error WebsocketClientConnection::Start() {
SDL_LOG_ERROR("Could not complete handshake with host/port: " << host << ":"
<< port);
SDL_LOG_ERROR(str_err);
+ ResetWebsocketStream(cloud_properties.cloud_transport_type);
return TransportAdapter::FAIL;
}
// Set the binary message write option
if (cloud_properties.cloud_transport_type == "WS") {
- ws_.binary(true);
+ ws_->binary(true);
}
#ifdef ENABLE_SECURITY
else if (cloud_properties.cloud_transport_type == "WSS") {
- wss_.binary(true);
+ wss_->binary(true);
}
#endif // ENABLE_SECURITY
write_thread_->Start(threads::ThreadOptions());
@@ -182,20 +192,20 @@ TransportAdapter::Error WebsocketClientConnection::Start() {
// Start async read
if (cloud_properties.cloud_transport_type == "WS") {
- ws_.async_read(buffer_,
- std::bind(&WebsocketClientConnection::OnRead,
- this,
- std::placeholders::_1,
- std::placeholders::_2));
- }
-#ifdef ENABLE_SECURITY
- else if (cloud_properties.cloud_transport_type == "WSS") {
- wss_.async_read(buffer_,
+ ws_->async_read(buffer_,
std::bind(&WebsocketClientConnection::OnRead,
this,
std::placeholders::_1,
std::placeholders::_2));
}
+#ifdef ENABLE_SECURITY
+ else if (cloud_properties.cloud_transport_type == "WSS") {
+ wss_->async_read(buffer_,
+ std::bind(&WebsocketClientConnection::OnRead,
+ this,
+ std::placeholders::_1,
+ std::placeholders::_2));
+ }
#endif // ENABLE_SECURITY
boost::asio::post(io_pool_, [&]() { ioc_.run(); });
@@ -217,20 +227,20 @@ void WebsocketClientConnection::Recv(boost::system::error_code ec) {
return;
}
if (cloud_properties.cloud_transport_type == "WS") {
- ws_.async_read(buffer_,
- std::bind(&WebsocketClientConnection::OnRead,
- this,
- std::placeholders::_1,
- std::placeholders::_2));
- }
-#ifdef ENABLE_SECURITY
- else if (cloud_properties.cloud_transport_type == "WSS") {
- wss_.async_read(buffer_,
+ ws_->async_read(buffer_,
std::bind(&WebsocketClientConnection::OnRead,
this,
std::placeholders::_1,
std::placeholders::_2));
}
+#ifdef ENABLE_SECURITY
+ else if (cloud_properties.cloud_transport_type == "WSS") {
+ wss_->async_read(buffer_,
+ std::bind(&WebsocketClientConnection::OnRead,
+ this,
+ std::placeholders::_1,
+ std::placeholders::_2));
+ }
#endif // ENABLE_SECURITY
}
@@ -240,7 +250,15 @@ void WebsocketClientConnection::OnRead(boost::system::error_code ec,
if (ec) {
std::string str_err = "ErrorMessage: " + ec.message();
SDL_LOG_ERROR(str_err);
- boost::beast::get_lowest_layer(ws_).close();
+ if (cloud_properties.cloud_transport_type == "WS") {
+ boost::beast::get_lowest_layer(*ws_).close();
+ }
+#ifdef ENABLE_SECURITY
+ else if (cloud_properties.cloud_transport_type == "WSS") {
+ boost::beast::get_lowest_layer(*wss_).close();
+ }
+#endif // ENABLE_SECURITY
+
ioc_.stop();
Shutdown();
return;
@@ -279,7 +297,10 @@ void WebsocketClientConnection::Shutdown() {
if (thread_delegate_) {
thread_delegate_->SetShutdown();
- write_thread_->Stop(threads::Thread::kThreadSoftStop);
+
+ if (write_thread_->IsRunning()) {
+ write_thread_->Stop(threads::Thread::kThreadSoftStop);
+ }
delete thread_delegate_;
thread_delegate_ = NULL;
threads::DeleteThread(write_thread_);
@@ -291,6 +312,22 @@ void WebsocketClientConnection::Shutdown() {
controller_->DisconnectDone(device_uid_, app_handle_);
}
+void WebsocketClientConnection::ResetWebsocketStream(
+ std::string cloud_transport_type) {
+ if (cloud_transport_type == "WS") {
+ ws_.reset();
+ ws_ = std::make_shared<WS>(ioc_);
+ }
+#ifdef ENABLE_SECURITY
+ else if (cloud_transport_type == "WSS") {
+ ctx_ = ssl::context(ssl::context::tlsv12_client);
+ SSL_CTX_set_cipher_list(ctx_.native_handle(), wss_ciphers_);
+ wss_.reset();
+ wss_ = std::make_shared<WSS>(ioc_, ctx_);
+ }
+#endif // ENABLE_SECURITY
+}
+
WebsocketClientConnection::LoopThreadDelegate::LoopThreadDelegate(
MessageQueue<Message, AsyncQueue>* message_queue,
WebsocketClientConnection* handler)
@@ -315,15 +352,19 @@ void WebsocketClientConnection::LoopThreadDelegate::DrainQueue() {
while (!message_queue_.empty()) {
Message message_ptr;
message_queue_.pop(message_ptr);
+ if (!message_ptr) {
+ SDL_LOG_ERROR("Invalid message in message queue");
+ continue;
+ }
if (!shutdown_) {
boost::system::error_code ec;
if (handler_.cloud_properties.cloud_transport_type == "WS") {
- handler_.ws_.write(
+ handler_.ws_->write(
boost::asio::buffer(message_ptr->data(), message_ptr->data_size()));
}
#ifdef ENABLE_SECURITY
else if (handler_.cloud_properties.cloud_transport_type == "WSS") {
- handler_.wss_.write(
+ handler_.wss_->write(
boost::asio::buffer(message_ptr->data(), message_ptr->data_size()));
}
#endif // ENABLE_SECURITY
diff --git a/src/components/transport_manager/src/transport_adapter/threaded_socket_connection.cc b/src/components/transport_manager/src/transport_adapter/threaded_socket_connection.cc
index 61562d88c0..03e0869180 100644
--- a/src/components/transport_manager/src/transport_adapter/threaded_socket_connection.cc
+++ b/src/components/transport_manager/src/transport_adapter/threaded_socket_connection.cc
@@ -81,7 +81,8 @@ ThreadedSocketConnection::~ThreadedSocketConnection() {
}
void ThreadedSocketConnection::StopAndJoinThread() {
- Disconnect();
+ SDL_LOG_AUTO_TRACE();
+ terminate_flag_ = true;
if (thread_) {
thread_->Stop(threads::Thread::kThreadSoftStop);
delete thread_->GetDelegate();
@@ -92,8 +93,10 @@ void ThreadedSocketConnection::StopAndJoinThread() {
void ThreadedSocketConnection::Abort() {
SDL_LOG_AUTO_TRACE();
- unexpected_disconnect_ = true;
- terminate_flag_ = true;
+ if (!terminate_flag_) {
+ unexpected_disconnect_ = true;
+ terminate_flag_ = true;
+ }
}
TransportAdapter::Error ThreadedSocketConnection::Start() {
@@ -123,18 +126,33 @@ TransportAdapter::Error ThreadedSocketConnection::Start() {
return TransportAdapter::OK;
}
-void ThreadedSocketConnection::Finalize() {
- SDL_LOG_AUTO_TRACE();
- if (unexpected_disconnect_) {
- SDL_LOG_DEBUG("unexpected_disconnect");
- controller_->ConnectionAborted(
- device_handle(), application_handle(), CommunicationError());
- } else {
- SDL_LOG_DEBUG("not unexpected_disconnect");
- controller_->ConnectionFinished(device_handle(), application_handle());
+void ThreadedSocketConnection::NotifyAboutAbortedMessages() {
+ sync_primitives::AutoLock auto_lock(frames_to_send_mutex_);
+ while (!frames_to_send_.empty()) {
+ SDL_LOG_INFO("removing message");
+ ::protocol_handler::RawMessagePtr message = frames_to_send_.front();
+ frames_to_send_.pop();
+ controller_->DataSendFailed(
+ device_handle(), application_handle(), message, DataSendError());
}
+}
+
+void ThreadedSocketConnection::FinalizeUnexpectedDisconnect() {
+ SDL_LOG_DEBUG("Finalizing unexpected disconnect");
+ controller_->ConnectionAborted(
+ device_handle(), application_handle(), CommunicationError());
+
+ ShutdownAndCloseSocket();
+ NotifyAboutAbortedMessages();
+}
+
+void ThreadedSocketConnection::FinalizeExpectedDisconnect() {
+ SDL_LOG_DEBUG("Finalizing expected disconnect");
+ controller_->ConnectionFinished(device_handle(), application_handle());
ShutdownAndCloseSocket();
+ NotifyAboutAbortedMessages();
+ controller_->DisconnectDone(device_handle(), application_handle());
}
TransportAdapter::Error ThreadedSocketConnection::Notify() const {
@@ -164,9 +182,14 @@ TransportAdapter::Error ThreadedSocketConnection::SendData(
TransportAdapter::Error ThreadedSocketConnection::Disconnect() {
SDL_LOG_AUTO_TRACE();
- terminate_flag_ = true;
- ShutdownAndCloseSocket();
- return Notify();
+
+ if (!unexpected_disconnect_) {
+ terminate_flag_ = true;
+ FinalizeExpectedDisconnect();
+ return TransportAdapter::OK;
+ }
+
+ return TransportAdapter::FAIL;
}
void ThreadedSocketConnection::Terminate() {
@@ -189,16 +212,12 @@ void ThreadedSocketConnection::threadMain() {
while (!terminate_flag_) {
Transmit();
}
- SDL_LOG_DEBUG("Connection is to finalize");
- Finalize();
- sync_primitives::AutoLock auto_lock(frames_to_send_mutex_);
- while (!frames_to_send_.empty()) {
- SDL_LOG_INFO("removing message");
- ::protocol_handler::RawMessagePtr message = frames_to_send_.front();
- frames_to_send_.pop();
- controller_->DataSendFailed(
- device_handle(), application_handle(), message, DataSendError());
+
+ if (unexpected_disconnect_) {
+ FinalizeUnexpectedDisconnect();
}
+
+ SDL_LOG_ERROR("Socket connection thread is closed");
}
bool ThreadedSocketConnection::IsFramesToSendQueueEmpty() const {
diff --git a/src/components/transport_manager/src/transport_adapter/transport_adapter_impl.cc b/src/components/transport_manager/src/transport_adapter/transport_adapter_impl.cc
index 447aa6c8ff..c6412fe141 100644
--- a/src/components/transport_manager/src/transport_adapter/transport_adapter_impl.cc
+++ b/src/components/transport_manager/src/transport_adapter/transport_adapter_impl.cc
@@ -273,7 +273,8 @@ TransportAdapter::Error TransportAdapterImpl::ConnectDevice(
retry_timer_pool_.push(std::make_pair(retry_timer, device_handle));
retry_timer->Start(get_settings().cloud_app_retry_timeout(),
timer::kSingleShot);
- } else if (OK == err) {
+ } else if (OK == err &&
+ ConnectionStatus::CONNECTED != device->connection_status()) {
ConnectionStatusUpdated(device, ConnectionStatus::CONNECTED);
}
SDL_LOG_TRACE("exit with error: " << err);
diff --git a/src/components/transport_manager/src/websocket_server/websocket_session.cc b/src/components/transport_manager/src/websocket_server/websocket_session.cc
index 020da580f9..c95cdd2c46 100644
--- a/src/components/transport_manager/src/websocket_server/websocket_session.cc
+++ b/src/components/transport_manager/src/websocket_server/websocket_session.cc
@@ -89,6 +89,7 @@ void WebSocketSession<ExecutorType>::AsyncAccept() {
template <typename ExecutorType>
void WebSocketSession<ExecutorType>::AsyncRead(boost::system::error_code ec) {
SDL_LOG_AUTO_TRACE();
+ sync_primitives::AutoLock lock(read_write_operations_lock_);
if (ec) {
auto str_err = "ErrorMessage: " + ec.message();
SDL_LOG_ERROR(str_err);
@@ -106,6 +107,7 @@ void WebSocketSession<ExecutorType>::AsyncRead(boost::system::error_code ec) {
template <typename ExecutorType>
void WebSocketSession<ExecutorType>::WriteDown(Message message) {
+ sync_primitives::AutoLock lock(read_write_operations_lock_);
boost::system::error_code ec;
ws_.write(boost::asio::buffer(message->data(), message->data_size()), ec);
diff --git a/src/components/transport_manager/test/websocket_connection_test.cc b/src/components/transport_manager/test/websocket_connection_test.cc
index 306bdc4784..1c65fd3f14 100644
--- a/src/components/transport_manager/test/websocket_connection_test.cc
+++ b/src/components/transport_manager/test/websocket_connection_test.cc
@@ -141,6 +141,10 @@ TEST_F(WebsocketNotSecureSessionConnectionTest, SUCCESS_SendData) {
auto error = websocket_connection_->SendData(message);
ASSERT_EQ(TransportAdapter::Error::OK, error);
+
+ auto disconnect_error = websocket_connection_->Disconnect();
+
+ ASSERT_EQ(TransportAdapter::Error::OK, disconnect_error);
}
TEST_F(WebsocketNotSecureSessionConnectionTest, UNSUCCESS_SendData_BAD_STATE) {
diff --git a/src/components/utils/include/utils/helpers.h b/src/components/utils/include/utils/helpers.h
index 1ef336dadd..34b3583dae 100644
--- a/src/components/utils/include/utils/helpers.h
+++ b/src/components/utils/include/utils/helpers.h
@@ -126,6 +126,15 @@ bool Compare(T what, T to, T to1, T to2, T to3, T to4, T to5) {
Compare<T, CompareType, CmpStrategy>(what, to4, to5));
}
+template <typename T,
+ bool (*CompareType)(T, T),
+ bool (*CmpStrategy)(bool, bool)>
+bool Compare(T what, T to, T to1, T to2, T to3, T to4, T to5, T to6) {
+ return CmpStrategy(
+ Compare<T, CompareType, CmpStrategy>(what, to, to1, to2, to3),
+ Compare<T, CompareType, CmpStrategy>(what, to4, to5, to6));
+}
+
template <typename Container>
bool in_range(const Container& container,
const typename Container::value_type& value) {
diff --git a/src/components/utils/test/policy.sql b/src/components/utils/test/policy.sql
index ed627b5fdc..7eaf572b71 100644
--- a/src/components/utils/test/policy.sql
+++ b/src/components/utils/test/policy.sql
@@ -117,7 +117,6 @@ BEGIN TRANSACTION;
`is_revoked` BOOLEAN,
`is_default` BOOLEAN,
`is_predata` BOOLEAN,
- `memory_kb` INTEGER NOT NULL,
`heart_beat_timeout_ms` INTEGER NOT NULL,
`certificate` VARCHAR(45),
CONSTRAINT `fk_application_hmi_level1`
diff --git a/src/components/utils/test/test_generator/CMakeLists.txt b/src/components/utils/test/test_generator/CMakeLists.txt
index cd4243930a..4667a9b5f7 100644
--- a/src/components/utils/test/test_generator/CMakeLists.txt
+++ b/src/components/utils/test/test_generator/CMakeLists.txt
@@ -39,7 +39,7 @@ include_directories (
${GMOCK_INCLUDE_DIRECTORY}
)
-set(XML_NAME ${CMAKE_SOURCE_DIR}/src/components/interfaces/MOBILE_API.xml)
+set(XML_NAME ${CMAKE_SOURCE_DIR}/tools/rpc_spec/MOBILE_API.xml)
add_custom_target(generate_version
COMMAND ${INTEFRACE_GENERATOR_CMD} "--source-xml" "${XML_NAME}" "--namespace" "mobile_apis"
"--output-dir" "${CMAKE_CURRENT_BINARY_DIR}" "--parser-type" "sdlrpcv2" "-y"
diff --git a/tools/cmake/helpers/generators.cmake b/tools/cmake/helpers/generators.cmake
index 1a5a4b8fa1..ae315ab1c6 100644
--- a/tools/cmake/helpers/generators.cmake
+++ b/tools/cmake/helpers/generators.cmake
@@ -63,7 +63,11 @@ macro(generate_interface ARG_XML_NAME ARG_NAMESPACE PARSER_TYPE)
)
set(CPP_FILE "${CMAKE_CURRENT_BINARY_DIR}/${FILE_NAME}_schema.cc")
- set(FULL_XML_NAME "${CMAKE_CURRENT_SOURCE_DIR}/${ARG_XML_NAME}")
+ if("${ARG_XML_NAME}" STREQUAL "MOBILE_API.xml")
+ set(FULL_XML_NAME "${CMAKE_SOURCE_DIR}/tools/rpc_spec/${ARG_XML_NAME}")
+ else()
+ set(FULL_XML_NAME "${CMAKE_CURRENT_SOURCE_DIR}/${ARG_XML_NAME}")
+endif()
add_custom_command(
OUTPUT ${HPP_FILE} ${CPP_FILE}
diff --git a/tools/infrastructure/collect_coverage.sh b/tools/infrastructure/collect_coverage.sh
index 47559e6c47..498eee7f65 100755
--- a/tools/infrastructure/collect_coverage.sh
+++ b/tools/infrastructure/collect_coverage.sh
@@ -17,7 +17,7 @@ rm -rf $COVERAGE_DIR
rm -rf $REPORTS_DIR -
mkdir $COVERAGE_DIR
-lcov --quiet --capture --directory . --output-file $COVERAGE_DIR/full_report.info
+lcov --quiet --capture --directory $BUILD_DIR --output-file $COVERAGE_DIR/full_report.info
lcov --quiet --remove $COVERAGE_DIR/full_report.info '/usr/*' '*/test/*' '*/src/3rd*' '*/build/src/*' --output-file $COVERAGE_DIR/coverage.info
mkdir $REPORTS_DIR