summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJackLivio <jack@livio.io>2018-11-28 12:52:07 -0500
committerJackLivio <jack@livio.io>2018-11-29 11:18:15 -0500
commit90d1b24267a03cecbf43b7de5331c2d74a876538 (patch)
tree42f55e3e2a99e770eba7d5e4f6323b3ffbbdff1d
parent7b8febf95531d5a576332e9c347eb1aa73d0077b (diff)
downloadsdl_core-90d1b24267a03cecbf43b7de5331c2d74a876538.tar.gz
Connection Status To Trigger UpdateAppList
-rw-r--r--src/components/application_manager/include/application_manager/application_manager_impl.h7
-rw-r--r--src/components/application_manager/src/application_manager_impl.cc4
-rw-r--r--src/components/connection_handler/include/connection_handler/connection_handler_impl.h2
-rw-r--r--src/components/connection_handler/src/connection_handler_impl.cc4
-rw-r--r--src/components/include/connection_handler/connection_handler_observer.h2
-rw-r--r--src/components/include/test/connection_handler/mock_connection_handler_observer.h1
-rw-r--r--src/components/include/test/transport_manager/mock_transport_manager_listener.h1
-rw-r--r--src/components/include/test/transport_manager/transport_adapter/mock_transport_adapter.h1
-rw-r--r--src/components/include/transport_manager/transport_adapter/transport_adapter.h2
-rw-r--r--src/components/include/transport_manager/transport_adapter/transport_adapter_event.h3
-rw-r--r--src/components/include/transport_manager/transport_manager_listener.h5
-rw-r--r--src/components/include/transport_manager/transport_manager_listener_empty.h2
-rw-r--r--src/components/transport_manager/include/transport_manager/transport_adapter/transport_adapter_impl.h4
-rw-r--r--src/components/transport_manager/include/transport_manager/transport_adapter/transport_adapter_listener.h6
-rw-r--r--src/components/transport_manager/include/transport_manager/transport_adapter/transport_adapter_listener_impl.h5
-rw-r--r--src/components/transport_manager/src/transport_adapter/transport_adapter_impl.cc18
-rw-r--r--src/components/transport_manager/src/transport_adapter/transport_adapter_listener_impl.cc17
-rw-r--r--src/components/transport_manager/src/transport_manager_impl.cc5
-rw-r--r--src/components/transport_manager/test/include/transport_manager/transport_adapter/mock_transport_adapter_listener.h2
19 files changed, 86 insertions, 5 deletions
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 58e066461f..d7c03e0fa0 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
@@ -368,10 +368,17 @@ class ApplicationManagerImpl
connection_handler::DeviceHandle device_id);
/**
+ * @brief Notifies the applicaiton manager that a cloud connection status has
+ * updated and should trigger an UpdateAppList RPC to the HMI
+ */
+ void OnConnectionStatusUpdated();
+
+ /**
* @brief Retrieve the current connection status of a cloud app
* @param app A cloud application
* @return The current CloudConnectionStatus of app
*/
+
hmi_apis::Common_CloudConnectionStatus::eType GetCloudAppConnectionStatus(
ApplicationConstSharedPtr app) const;
diff --git a/src/components/application_manager/src/application_manager_impl.cc b/src/components/application_manager/src/application_manager_impl.cc
index e9a45001c7..8fd7f9e455 100644
--- a/src/components/application_manager/src/application_manager_impl.cc
+++ b/src/components/application_manager/src/application_manager_impl.cc
@@ -930,6 +930,10 @@ void ApplicationManagerImpl::CreatePendingApplication(
SendUpdateAppList();
}
+void ApplicationManagerImpl::OnConnectionStatusUpdated() {
+ SendUpdateAppList();
+}
+
hmi_apis::Common_CloudConnectionStatus::eType
ApplicationManagerImpl::GetCloudAppConnectionStatus(
ApplicationConstSharedPtr app) const {
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 cbf829b226..b8153bcf42 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
@@ -176,6 +176,8 @@ class ConnectionHandlerImpl
void OnScanDevicesFailed(
const transport_manager::SearchDeviceError& error) OVERRIDE;
+ void OnConnectionStatusUpdated() OVERRIDE;
+
/**
* \brief Notifies about pending connection.
*
diff --git a/src/components/connection_handler/src/connection_handler_impl.cc b/src/components/connection_handler/src/connection_handler_impl.cc
index 77eb38b8bc..88d57e5d2c 100644
--- a/src/components/connection_handler/src/connection_handler_impl.cc
+++ b/src/components/connection_handler/src/connection_handler_impl.cc
@@ -249,6 +249,10 @@ void ConnectionHandlerImpl::OnScanDevicesFailed(
LOG4CXX_WARN(logger_, "Scan devices failed. " << error.text());
}
+void ConnectionHandlerImpl::OnConnectionStatusUpdated() {
+ connection_handler_observer_->OnConnectionStatusUpdated();
+}
+
void ConnectionHandlerImpl::OnConnectionPending(
const transport_manager::DeviceInfo& device_info,
const transport_manager::ConnectionUID connection_id) {
diff --git a/src/components/include/connection_handler/connection_handler_observer.h b/src/components/include/connection_handler/connection_handler_observer.h
index 298f98803a..f683318ada 100644
--- a/src/components/include/connection_handler/connection_handler_observer.h
+++ b/src/components/include/connection_handler/connection_handler_observer.h
@@ -161,6 +161,8 @@ class ConnectionHandlerObserver {
*/
virtual void OnSecondaryTransportEndedCallback(const int32_t session_key) = 0;
+ virtual void OnConnectionStatusUpdated() = 0;
+
virtual void CreatePendingApplication(
const transport_manager::ConnectionUID connection_id,
const transport_manager::DeviceInfo& device_info,
diff --git a/src/components/include/test/connection_handler/mock_connection_handler_observer.h b/src/components/include/test/connection_handler/mock_connection_handler_observer.h
index 2984b2e471..0a8e71c085 100644
--- a/src/components/include/test/connection_handler/mock_connection_handler_observer.h
+++ b/src/components/include/test/connection_handler/mock_connection_handler_observer.h
@@ -74,6 +74,7 @@ class MockConnectionHandlerObserver
const int32_t session_key));
MOCK_METHOD1(OnSecondaryTransportEndedCallback,
void(const int32_t session_key));
+ MOCK_METHOD0(OnConnectionStatusUpdated, void());
MOCK_METHOD3(CreatePendingApplication,
void(const transport_manager::ConnectionUID connection_id,
const transport_manager::DeviceInfo& device_info,
diff --git a/src/components/include/test/transport_manager/mock_transport_manager_listener.h b/src/components/include/test/transport_manager/mock_transport_manager_listener.h
index 734651f455..04408f945b 100644
--- a/src/components/include/test/transport_manager/mock_transport_manager_listener.h
+++ b/src/components/include/test/transport_manager/mock_transport_manager_listener.h
@@ -55,6 +55,7 @@ class MockTransportManagerListener : public TransportManagerListener {
MOCK_METHOD1(OnDeviceRemoved, void(const DeviceInfo& device_info));
MOCK_METHOD0(OnScanDevicesFinished, void());
MOCK_METHOD1(OnScanDevicesFailed, void(const SearchDeviceError& error));
+ MOCK_METHOD0(OnConnectionStatusUpdated, void());
MOCK_METHOD2(OnConnectionPending,
void(const DeviceInfo& device_info,
const ConnectionUID connection_id));
diff --git a/src/components/include/test/transport_manager/transport_adapter/mock_transport_adapter.h b/src/components/include/test/transport_manager/transport_adapter/mock_transport_adapter.h
index 65cfdae4d5..c993f245b9 100644
--- a/src/components/include/test/transport_manager/transport_adapter/mock_transport_adapter.h
+++ b/src/components/include/test/transport_manager/transport_adapter/mock_transport_adapter.h
@@ -69,6 +69,7 @@ class MockTransportAdapter
MOCK_CONST_METHOD1(GetConnectionStatus,
::transport_manager::ConnectionStatus(
const ::transport_manager::DeviceUID& device_handle));
+ MOCK_METHOD0(ConnectionStatusUpdated, void());
MOCK_METHOD2(RunAppOnDevice, void(const std::string&, const std::string&));
MOCK_CONST_METHOD0(IsClientOriginatedConnectSupported, bool());
MOCK_METHOD0(
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 184ee79a13..303f677720 100644
--- a/src/components/include/transport_manager/transport_adapter/transport_adapter.h
+++ b/src/components/include/transport_manager/transport_adapter/transport_adapter.h
@@ -227,6 +227,8 @@ class TransportAdapter {
virtual ConnectionStatus GetConnectionStatus(
const DeviceUID& device_handle) const = 0;
+ virtual void ConnectionStatusUpdated() = 0;
+
/**
* @brief RunAppOnDevice allows to run specific application on the certain
*device.
diff --git a/src/components/include/transport_manager/transport_adapter/transport_adapter_event.h b/src/components/include/transport_manager/transport_adapter/transport_adapter_event.h
index 921562333b..63d1678ed0 100644
--- a/src/components/include/transport_manager/transport_adapter/transport_adapter_event.h
+++ b/src/components/include/transport_manager/transport_adapter/transport_adapter_event.h
@@ -59,7 +59,8 @@ enum class EventTypeEnum {
ON_UNEXPECTED_DISCONNECT,
ON_TRANSPORT_SWITCH_REQUESTED,
ON_TRANSPORT_CONFIG_UPDATED,
- ON_CONNECT_PENDING
+ ON_CONNECT_PENDING,
+ ON_CONNECTION_STATUS_UPDATED
};
class TransportAdapterEvent {
diff --git a/src/components/include/transport_manager/transport_manager_listener.h b/src/components/include/transport_manager/transport_manager_listener.h
index 7da4bcc2f5..22ee519a67 100644
--- a/src/components/include/transport_manager/transport_manager_listener.h
+++ b/src/components/include/transport_manager/transport_manager_listener.h
@@ -101,6 +101,11 @@ class TransportManagerListener {
virtual void OnScanDevicesFailed(const SearchDeviceError& error) = 0;
/**
+ * @brief Reaction to the event, when the cloud connection status is updated.
+ */
+ virtual void OnConnectionStatusUpdated() = 0;
+
+ /**
* @brief Reaction to the event, when connection is pending.
*
* @param devcie_info Variable that hold information about device.
diff --git a/src/components/include/transport_manager/transport_manager_listener_empty.h b/src/components/include/transport_manager/transport_manager_listener_empty.h
index c0a713f38e..193a86819c 100644
--- a/src/components/include/transport_manager/transport_manager_listener_empty.h
+++ b/src/components/include/transport_manager/transport_manager_listener_empty.h
@@ -59,6 +59,8 @@ class TransportManagerListenerEmpty : public TransportManagerListener {
void OnFindNewApplicationsRequest() OVERRIDE {}
+ void OnConnectionStatusUpdated() OVERRIDE {}
+
/**
* @brief Reaction to the event, when the device is found.
*
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 9b860841e9..8d03bdb2c7 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
@@ -159,6 +159,8 @@ class TransportAdapterImpl : public TransportAdapter,
ConnectionStatus GetConnectionStatus(
const DeviceUID& device_handle) const OVERRIDE;
+ void ConnectionStatusUpdated() OVERRIDE;
+
/**
* @brief Disconnect from specified session.
*
@@ -567,7 +569,7 @@ class TransportAdapterImpl : public TransportAdapter,
/**
* @brief Clear any retry timers which have been completed
*/
- void TransportAdapterImpl::ClearCompletedTimers();
+ void ClearCompletedTimers();
/**
* @brief Retrieve the next device available for a reattempted connection
diff --git a/src/components/transport_manager/include/transport_manager/transport_adapter/transport_adapter_listener.h b/src/components/transport_manager/include/transport_manager/transport_adapter/transport_adapter_listener.h
index b0368869e7..a0e0a51c1e 100644
--- a/src/components/transport_manager/include/transport_manager/transport_adapter/transport_adapter_listener.h
+++ b/src/components/transport_manager/include/transport_manager/transport_adapter/transport_adapter_listener.h
@@ -92,6 +92,12 @@ class TransportAdapterListener {
const TransportAdapter* adapter) = 0;
/**
+ * @brief Reaction to connection status update
+ * @param adapter Current transport adapter
+ */
+ virtual void OnConnectionStatusUpdated(const TransportAdapter* adapter) = 0;
+
+ /**
* @brief Search specified device adapter in the container of shared pointers
* to device adapters to be sure it is available,
* launch event ON_CONNECT_PENDING in transport manager.
diff --git a/src/components/transport_manager/include/transport_manager/transport_adapter/transport_adapter_listener_impl.h b/src/components/transport_manager/include/transport_manager/transport_adapter/transport_adapter_listener_impl.h
index 76271229ad..0c9c6ef6a2 100644
--- a/src/components/transport_manager/include/transport_manager/transport_adapter/transport_adapter_listener_impl.h
+++ b/src/components/transport_manager/include/transport_manager/transport_adapter/transport_adapter_listener_impl.h
@@ -88,6 +88,11 @@ class TransportAdapterListenerImpl
virtual void OnFindNewApplicationsRequest(const TransportAdapter* adapter);
/**
+ * @brief Passes notification to that the cloud conection status has updated
+ */
+ virtual void OnConnectionStatusUpdated(const TransportAdapter* adapter);
+
+ /**
* @brief Search specified device adapter in the container of shared pointers
* to device adapters to be sure it is available,
* launch event ON_CONNECT_PENDING in transport manager.
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 ecf04300bb..7079a55264 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
@@ -252,12 +252,14 @@ TransportAdapter::Error TransportAdapterImpl::ConnectDevice(
if (device->connection_status() == ConnectionStatus::PENDING) {
device->set_connection_status(ConnectionStatus::RETRY);
device->reset_retry_count();
+ ConnectionStatusUpdated();
}
if (device->retry_count() >
get_settings().cloud_app_max_retry_attempts()) {
device->set_connection_status(ConnectionStatus::PENDING);
device->reset_retry_count();
+ ConnectionStatusUpdated();
return err;
}
@@ -272,6 +274,7 @@ TransportAdapter::Error TransportAdapterImpl::ConnectDevice(
timer::kSingleShot);
} else if (OK == err) {
device->set_connection_status(ConnectionStatus::CONNECTED);
+ ConnectionStatusUpdated();
}
LOG4CXX_TRACE(logger_, "exit with error: " << err);
return err;
@@ -303,14 +306,14 @@ void TransportAdapterImpl::ClearCompletedTimers() {
}
DeviceUID TransportAdapterImpl::GetNextRetryDevice() {
- sync_primitives::AutoLock locker(retry_timer_pool_lock_);
+ sync_primitives::AutoLock retry_locker(retry_timer_pool_lock_);
if (retry_timer_pool_.empty()) {
return std::string();
}
auto timer_entry = retry_timer_pool_.front();
retry_timer_pool_.pop();
- sync_primitives::AutoLock locker(completed_timer_pool_lock_);
- completed_timer_pool_.push_back(timer_entry);
+ sync_primitives::AutoLock completed_locker(completed_timer_pool_lock_);
+ completed_timer_pool_.push(timer_entry);
return timer_entry.second;
}
@@ -321,6 +324,14 @@ ConnectionStatus TransportAdapterImpl::GetConnectionStatus(
: device->connection_status();
}
+void TransportAdapterImpl::ConnectionStatusUpdated() {
+ for (TransportAdapterListenerList::iterator it = listeners_.begin();
+ it != listeners_.end();
+ ++it) {
+ (*it)->OnConnectionStatusUpdated(this);
+ }
+}
+
TransportAdapter::Error TransportAdapterImpl::Disconnect(
const DeviceUID& device_id, const ApplicationHandle& app_handle) {
LOG4CXX_TRACE(logger_,
@@ -352,6 +363,7 @@ TransportAdapter::Error TransportAdapterImpl::DisconnectDevice(
Error error = OK;
DeviceSptr device = FindDevice(device_id);
device->set_connection_status(ConnectionStatus::CLOSING);
+ ConnectionStatusUpdated();
std::vector<ConnectionInfo> to_disconnect;
connections_lock_.AcquireForReading();
diff --git a/src/components/transport_manager/src/transport_adapter/transport_adapter_listener_impl.cc b/src/components/transport_manager/src/transport_adapter/transport_adapter_listener_impl.cc
index 73750fe2f3..4ef685adbc 100644
--- a/src/components/transport_manager/src/transport_adapter/transport_adapter_listener_impl.cc
+++ b/src/components/transport_manager/src/transport_adapter/transport_adapter_listener_impl.cc
@@ -116,6 +116,23 @@ void TransportAdapterListenerImpl::OnFindNewApplicationsRequest(
LOG4CXX_TRACE(logger_, "exit");
}
+void TransportAdapterListenerImpl::OnConnectionStatusUpdated(
+ const TransportAdapter* adapter) {
+ LOG4CXX_TRACE(logger_, "enter. adapter* " << adapter);
+ const TransportAdapterEvent event(EventTypeEnum::ON_CONNECTION_STATUS_UPDATED,
+ transport_adapter_,
+ "",
+ 0,
+ ::protocol_handler::RawMessagePtr(),
+ BaseErrorPtr(new BaseError()));
+ if (transport_manager_ != NULL &&
+ transport_manager::E_SUCCESS !=
+ transport_manager_->ReceiveEventFromDevice(event)) {
+ LOG4CXX_WARN(logger_, "Failed to receive event from device");
+ }
+ LOG4CXX_TRACE(logger_, "exit");
+}
+
void TransportAdapterListenerImpl::OnConnectPending(
const TransportAdapter* adapter,
const DeviceUID& device,
diff --git a/src/components/transport_manager/src/transport_manager_impl.cc b/src/components/transport_manager/src/transport_manager_impl.cc
index 1c5a6dae32..518a5639db 100644
--- a/src/components/transport_manager/src/transport_manager_impl.cc
+++ b/src/components/transport_manager/src/transport_manager_impl.cc
@@ -990,6 +990,11 @@ void TransportManagerImpl::Handle(TransportAdapterEvent event) {
LOG4CXX_DEBUG(logger_, "event_type = ON_FIND_NEW_APPLICATIONS_REQUEST");
break;
}
+ case EventTypeEnum::ON_CONNECTION_STATUS_UPDATED: {
+ RaiseEvent(&TransportManagerListener::OnConnectionStatusUpdated);
+ LOG4CXX_DEBUG(logger_, "event_type = ON_CONNECTION_STATUS_UPDATED");
+ break;
+ }
case EventTypeEnum::ON_CONNECT_PENDING: {
const DeviceHandle device_handle = converter_.UidToHandle(
event.device_uid, event.transport_adapter->GetConnectionType());
diff --git a/src/components/transport_manager/test/include/transport_manager/transport_adapter/mock_transport_adapter_listener.h b/src/components/transport_manager/test/include/transport_manager/transport_adapter/mock_transport_adapter_listener.h
index 81e133ec2b..f7bebf69c3 100644
--- a/src/components/transport_manager/test/include/transport_manager/transport_adapter/mock_transport_adapter_listener.h
+++ b/src/components/transport_manager/test/include/transport_manager/transport_adapter/mock_transport_adapter_listener.h
@@ -59,6 +59,8 @@ class MockTransportAdapterListener : public TransportAdapterListener {
const SearchDeviceError& error));
MOCK_METHOD1(OnFindNewApplicationsRequest,
void(const TransportAdapter* adapter));
+ MOCK_METHOD1(OnConnectionStatusUpdated,
+ void(const TransportAdapter* adapter));
MOCK_METHOD3(OnConnectPending,
void(const TransportAdapter* adapter,
const DeviceUID& device_handle,