diff options
Diffstat (limited to 'src/components/application_manager/src/application_manager_impl.cc')
-rw-r--r-- | src/components/application_manager/src/application_manager_impl.cc | 48 |
1 files changed, 30 insertions, 18 deletions
diff --git a/src/components/application_manager/src/application_manager_impl.cc b/src/components/application_manager/src/application_manager_impl.cc index d67ffbe348..6187a6daba 100644 --- a/src/components/application_manager/src/application_manager_impl.cc +++ b/src/components/application_manager/src/application_manager_impl.cc @@ -295,13 +295,6 @@ ApplicationSharedPtr ApplicationManagerImpl::application_by_policy_id( return FindApp(accessor, finder); } -ApplicationSharedPtr ApplicationManagerImpl::application_by_name( - const std::string& app_name) const { - AppNamePredicate finder(app_name); - DataAccessor<ApplicationSet> accessor = applications(); - return FindApp(accessor, finder); -} - ApplicationSharedPtr ApplicationManagerImpl::pending_application_by_policy_id( const std::string& policy_app_id) const { PolicyAppIdPredicate finder(policy_app_id); @@ -309,6 +302,13 @@ ApplicationSharedPtr ApplicationManagerImpl::pending_application_by_policy_id( return FindPendingApp(accessor, finder); } +ApplicationSharedPtr ApplicationManagerImpl::application_by_name( + const std::string& app_name) const { + AppNamePredicate finder(app_name); + DataAccessor<ApplicationSet> accessor = applications(); + return FindApp(accessor, finder); +} + ApplicationSharedPtr ApplicationManagerImpl::reregister_application_by_policy_id( const std::string& policy_app_id) const { @@ -420,6 +420,13 @@ ApplicationManagerImpl::applications_by_button(uint32_t button) { return FindAllApps(accessor, finder); } +std::vector<ApplicationSharedPtr> ApplicationManagerImpl::applications_by_name( + const std::string& app_name) const { + AppNamePredicate finder(app_name); + DataAccessor<ApplicationSet> accessor = applications(); + return FindAllApps(accessor, finder); +} + struct IsApplication { IsApplication(connection_handler::DeviceHandle device_handle, const std::string& policy_app_id) @@ -1026,15 +1033,23 @@ void ApplicationManagerImpl::RefreshCloudAppInformation() { } else if (mobile_apis::HybridAppPreference::MOBILE == hybrid_app_preference) { auto nickname_it = nicknames.begin(); + bool duplicate_found = false; for (; nickname_it != nicknames.end(); ++nickname_it) { - auto app = application_by_name(*nickname_it); - if (app.use_count() != 0) { - LOG4CXX_ERROR( - logger_, - "Mobile app already registered for cloud app: " << *nickname_it); - continue; + auto apps = applications_by_name(*nickname_it); + for (auto app : apps) { + if (app.use_count() != 0 && !app->is_cloud_app()) { + LOG4CXX_ERROR(logger_, + "Mobile app already registered for cloud app: " + << *nickname_it); + duplicate_found = true; + break; + } } } + + if (duplicate_found) { + continue; + } } pending_device_map_.insert( @@ -3130,13 +3145,10 @@ void ApplicationManagerImpl::UnregisterApplication( "There is no more SDL4 apps with device handle: " << handle); RemoveAppsWaitingForRegistration(handle); - RefreshCloudAppInformation(); - SendUpdateAppList(); - } else if (app_to_remove->is_cloud_app()) { - RefreshCloudAppInformation(); - SendUpdateAppList(); } } + RefreshCloudAppInformation(); + SendUpdateAppList(); } commands_holder_->Clear(app_to_remove); |