diff options
author | AGaliuzov <AGaliuzov@luxoft.com> | 2016-05-28 16:02:19 +0300 |
---|---|---|
committer | Levchenko <slevchenko@SLevchenko-lws-unq> | 2016-08-03 17:54:53 +0300 |
commit | 2b41357ed319cdc0606b23ef09643be24bf486bc (patch) | |
tree | 34af66c5c3c66c69ae1ab078d34b31bb3592c28f | |
parent | a84b8ffa40d7ce29069716da0df9438e8360890e (diff) | |
download | sdl_core-2b41357ed319cdc0606b23ef09643be24bf486bc.tar.gz |
AppLaunch TM and CH implementation
Applaunch functionality in TransportMaanger and ConnectionHAndler implementation
Related issue : APPLINK-24892
13 files changed, 136 insertions, 1 deletions
diff --git a/src/components/connection_handler/include/connection_handler/connection_handler.h b/src/components/connection_handler/include/connection_handler/connection_handler.h index cb22b87bbb..c108758046 100644 --- a/src/components/connection_handler/include/connection_handler/connection_handler.h +++ b/src/components/connection_handler/include/connection_handler/connection_handler.h @@ -68,6 +68,16 @@ class ConnectionHandler { virtual void ConnectToDevice( connection_handler::DeviceHandle device_handle) = 0; + /** + * @brief RunAppOnDevice allows to run specific application on the certain device. + * + * @param device_handle device identifier to run application on. + * + * @param app_id application id also known as bundle id on some devices to run. + */ + virtual void RunAppOnDevice(const std::string& device_handle, + const std::string& bundle_id) const = 0; + virtual void ConnectToAllDevices() = 0; /** diff --git a/src/components/connection_handler/include/connection_handler/connection_handler_impl.h b/src/components/connection_handler/include/connection_handler/connection_handler_impl.h index d061e55491..3a35049b9b 100644 --- a/src/components/connection_handler/include/connection_handler/connection_handler_impl.h +++ b/src/components/connection_handler/include/connection_handler/connection_handler_impl.h @@ -102,6 +102,16 @@ class ConnectionHandlerImpl */ void ConnectToDevice(connection_handler::DeviceHandle device_handle) OVERRIDE; + /** + * @brief RunAppOnDevice allows to run specific application on the certain device. + * + * @param device_handle device identifier to run application on. + * + * @param app_id application id also known as bundle id on some devices to run. + */ + void RunAppOnDevice(const std::string& device_mac, + const std::string& bundle_id) const OVERRIDE; + void ConnectToAllDevices() OVERRIDE; void StartTransportManager() OVERRIDE; diff --git a/src/components/connection_handler/src/connection_handler_impl.cc b/src/components/connection_handler/src/connection_handler_impl.cc index d8c05e6e6e..96c55ad100 100644 --- a/src/components/connection_handler/src/connection_handler_impl.cc +++ b/src/components/connection_handler/src/connection_handler_impl.cc @@ -697,6 +697,19 @@ void ConnectionHandlerImpl::ConnectToDevice( } } +void ConnectionHandlerImpl::RunAppOnDevice(const std::string& device_mac, + const std::string& bundle_id) const { + for (DeviceMap::const_iterator i = device_list_.begin(); + i != device_list_.end(); ++i) { + const connection_handler::Device& device = i->second; + if (device.mac_address() == device_mac) { + transport_manager_.RunAppOnDevice(device.device_handle(), bundle_id); + return; + } + } + LOG4CXX_WARN(logger_, "No apps found on device " << device_mac); +} + void ConnectionHandlerImpl::ConnectToAllDevices() { for (DeviceMap::iterator i = device_list_.begin(); i != device_list_.end(); ++i) { diff --git a/src/components/include/test/connection_handler/mock_connection_handler.h b/src/components/include/test/connection_handler/mock_connection_handler.h index eac82cc177..ed9fec7761 100644 --- a/src/components/include/test/connection_handler/mock_connection_handler.h +++ b/src/components/include/test/connection_handler/mock_connection_handler.h @@ -59,6 +59,9 @@ class MockConnectionHandler : public connection_handler::ConnectionHandler { MOCK_METHOD0(StartTransportManager, void()); MOCK_METHOD1(ConnectToDevice, void(connection_handler::DeviceHandle device_handle)); + MOCK_CONST_METHOD2(RunAppOnDevice, + void(const std::string&, + const std::string&)); MOCK_METHOD0(ConnectToAllDevices, void()); MOCK_METHOD1(CloseRevokedConnection, void(uint32_t connection_key)); MOCK_METHOD1(CloseConnection, void(ConnectionHandle connection_handle)); diff --git a/src/components/include/test/transport_manager/mock_transport_manager.h b/src/components/include/test/transport_manager/mock_transport_manager.h index 618e85a4fa..89534b4588 100644 --- a/src/components/include/test/transport_manager/mock_transport_manager.h +++ b/src/components/include/test/transport_manager/mock_transport_manager.h @@ -65,6 +65,9 @@ class MockTransportManager : public ::transport_manager::TransportManager, MOCK_METHOD1(DisconnectForce, int(const ConnectionUID)); MOCK_METHOD1(SendMessageToDevice, int(const ::protocol_handler::RawMessagePtr)); + MOCK_METHOD2(RunAppOnDevice, + void(const DeviceHandle, + const std::string&)); MOCK_METHOD1(ReceiveEventFromDevice, int(const TransportAdapterEvent&)); MOCK_METHOD1(AddTransportAdapter, int(TransportAdapter* adapter)); MOCK_METHOD1(AddEventListener, int(TransportManagerListener* listener)); diff --git a/src/components/include/transport_manager/transport_adapter/device.h b/src/components/include/transport_manager/transport_adapter/device.h index a1dd7b9bcf..c09fa4d21e 100644 --- a/src/components/include/transport_manager/transport_adapter/device.h +++ b/src/components/include/transport_manager/transport_adapter/device.h @@ -38,6 +38,7 @@ #include "transport_manager/common.h" #include "utils/shared_ptr.h" +#include "utils/macro.h" namespace transport_manager { namespace transport_adapter { @@ -76,7 +77,16 @@ class Device { virtual ApplicationList GetApplicationList() const = 0; - virtual void Stop() {} + /** + * @brief LaunchApp allows to run appropriate application on the device. + * + * @param bundle_id application identifier to run. + */ + virtual void LaunchApp(const std::string& bundle_id) const { + UNUSED(bundle_id); + } + + virtual void Stop() { } inline const DeviceUID& unique_device_id() const { return unique_device_id_; diff --git a/src/components/include/transport_manager/transport_adapter/transport_adapter.h b/src/components/include/transport_manager/transport_adapter/transport_adapter.h index 3ff1aa6eee..c2d829fcbe 100644 --- a/src/components/include/transport_manager/transport_adapter/transport_adapter.h +++ b/src/components/include/transport_manager/transport_adapter/transport_adapter.h @@ -175,6 +175,16 @@ class TransportAdapter { virtual Error ConnectDevice(const DeviceUID& device_handle) = 0; /** + * @brief RunAppOnDevice allows to run specific application on the certain device. + * + * @param device_handle device identifier to run application on. + * + * @param app_id application id also known as bundle id on some devices to run. + */ + virtual void RunAppOnDevice(const std::string& device_uid, + const std::string& bundle_id) = 0; + + /** * @brief Notify that listener of client connection is available. * * @return true - available, false - not available. diff --git a/src/components/include/transport_manager/transport_manager.h b/src/components/include/transport_manager/transport_manager.h index 718f9e12aa..2fcf614e62 100644 --- a/src/components/include/transport_manager/transport_manager.h +++ b/src/components/include/transport_manager/transport_manager.h @@ -121,6 +121,16 @@ class TransportManager { const protocol_handler::RawMessagePtr message) = 0; /** + * @brief RunAppOnDevice allows run specific application on the certain device. + * + * @param device_handle device identifier to run application on. + * + * @param bundle_id application id alsow known as bundle id on some devices to run. + */ + virtual void RunAppOnDevice(const DeviceHandle device_handle, + const std::string& bundle_id) = 0; + + /** * @brief Post event in the event queue. * * @param event Current event information. diff --git a/src/components/transport_manager/include/transport_manager/transport_adapter/transport_adapter_impl.h b/src/components/transport_manager/include/transport_manager/transport_adapter/transport_adapter_impl.h index 3dedead540..5dd0dfbce4 100644 --- a/src/components/transport_manager/include/transport_manager/transport_adapter/transport_adapter_impl.h +++ b/src/components/transport_manager/include/transport_manager/transport_adapter/transport_adapter_impl.h @@ -478,6 +478,17 @@ class TransportAdapterImpl : public TransportAdapter, */ TransportAdapter::Error ConnectDevice(DeviceSptr device); + + /** + * @brief RunAppOnDevice allows run specific application on the certain device. + * + * @param device_handle device identifier to run application on. + * + * @param bundle_id application id alsow known as bundle id on some devices to run. + */ + void RunAppOnDevice(const DeviceUID &device_uid, + const std::string& bundle_id) OVERRIDE; + /** * @brief Remove specified device * @param device_handle Device unique identifier. diff --git a/src/components/transport_manager/include/transport_manager/transport_manager_impl.h b/src/components/transport_manager/include/transport_manager/transport_manager_impl.h index 289df3535d..bf7ec7324f 100644 --- a/src/components/transport_manager/include/transport_manager/transport_manager_impl.h +++ b/src/components/transport_manager/include/transport_manager/transport_manager_impl.h @@ -181,6 +181,16 @@ class TransportManagerImpl const protocol_handler::RawMessagePtr message) OVERRIDE; /** + * @brief RunAppOnDevice allows to run specific application on the certain device. + * + * @param device_handle device identifier to run application on. + * + * @param bundle_id application id also known as bundle id on some devices to run. + */ + void RunAppOnDevice(const DeviceHandle device_handle, + const std::string& bundle_id) OVERRIDE; + + /** * @brief Post event in the event queue. * * @param event Current event information. 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 5638eecdee..a481ed111e 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 @@ -952,6 +952,20 @@ TransportAdapter::Error TransportAdapterImpl::ConnectDevice(DeviceSptr device) { } } +void TransportAdapterImpl::RunAppOnDevice(const DeviceUID& device_uid, + const std::string& bundle_id) { + LOG4CXX_AUTO_TRACE(logger_); + + DeviceSptr device = FindDevice(device_uid); + if (!device) { + LOG4CXX_WARN(logger_, "Device with id: " << device_uid << " Not found" + << "withing list of connected deviced"); + return; + } + + device->LaunchApp(bundle_id); +} + void TransportAdapterImpl::RemoveDevice(const DeviceUID& device_handle) { LOG4CXX_AUTO_TRACE(logger_); LOG4CXX_DEBUG(logger_, "Device_handle: " << &device_handle); diff --git a/src/components/transport_manager/src/transport_manager_impl.cc b/src/components/transport_manager/src/transport_manager_impl.cc index 113d280c8d..c5b1f5c89a 100644 --- a/src/components/transport_manager/src/transport_manager_impl.cc +++ b/src/components/transport_manager/src/transport_manager_impl.cc @@ -341,6 +341,34 @@ int TransportManagerImpl::SendMessageToDevice( return E_SUCCESS; } +void TransportManagerImpl::RunAppOnDevice(const DeviceHandle device_handle, + const std::string& bundle_id) { + if (!this->is_initialized_) { + LOG4CXX_ERROR(logger_, "TransportManager is not initialized."); + return; + } + DeviceUID device_id = converter_.HandleToUid(device_handle); + LOG4CXX_DEBUG(logger_, "Convert handle to id:" << device_id); + + sync_primitives::AutoReadLock lock(device_to_adapter_map_lock_); + DeviceToAdapterMap::iterator it = device_to_adapter_map_.find(device_id); + if (it == device_to_adapter_map_.end()) { + LOG4CXX_ERROR(logger_, "No device adapter found by id " << device_id); + return; + } + transport_adapter::TransportAdapter* ta = it->second; + + if (!ta) { + LOG4CXX_ERROR(logger_, "Transport adapter for device: " << device_id + << " is NULL"); + return; + } + + ta->RunAppOnDevice(device_id, bundle_id); + + return; +} + int TransportManagerImpl::ReceiveEventFromDevice( const TransportAdapterEvent& event) { LOG4CXX_TRACE(logger_, "enter. TransportAdapterEvent: " << &event); diff --git a/src/components/transport_manager/test/include/transport_manager/transport_adapter_mock.h b/src/components/transport_manager/test/include/transport_manager/transport_adapter_mock.h index d12741f49a..2aca5e97bb 100644 --- a/src/components/transport_manager/test/include/transport_manager/transport_adapter_mock.h +++ b/src/components/transport_manager/test/include/transport_manager/transport_adapter_mock.h @@ -66,6 +66,9 @@ class MockTransportAdapter MOCK_METHOD1(ConnectDevice, ::transport_manager::transport_adapter::TransportAdapter::Error( const ::transport_manager::DeviceUID& device_handle)); + MOCK_METHOD2(RunAppOnDevice, + void(const std::string&, + const std::string&)); MOCK_CONST_METHOD0(IsClientOriginatedConnectSupported, bool()); MOCK_METHOD0( StartClientListening, |