diff options
author | jacobkeeler <jacob.keeler@livioradio.com> | 2021-12-03 09:37:14 -0500 |
---|---|---|
committer | jacobkeeler <jacob.keeler@livioradio.com> | 2021-12-03 09:37:14 -0500 |
commit | 306024cccc972c7058d71d36bca7ab4170405a10 (patch) | |
tree | b85c5fc7f2c43ca54077ce6ce75da2bcbe94d1a1 | |
parent | 68f082169e0a40fccd9eb0db3c83911c28870f07 (diff) | |
download | sdl_core-306024cccc972c7058d71d36bca7ab4170405a10.tar.gz |
Create new app list timer instead of restartingexperimental/fix_timer_restart_issue
Fixes issue with Android where the app list timer would not fire after being started more than once
-rw-r--r-- | src/components/application_manager/include/application_manager/application_manager_impl.h | 4 | ||||
-rw-r--r-- | src/components/application_manager/src/application_manager_impl.cc | 65 |
2 files changed, 55 insertions, 14 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 c59456a022..192472171d 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 @@ -1724,9 +1724,9 @@ class ApplicationManagerImpl AMTelemetryObserver* metric_observer_; #endif // TELEMETRY_MONITOR - Timer application_list_update_timer_; + TimerSPtr application_list_update_timer_; - Timer tts_global_properties_timer_; + TimerSPtr tts_global_properties_timer_; Timer clear_pool_timer_; diff --git a/src/components/application_manager/src/application_manager_impl.cc b/src/components/application_manager/src/application_manager_impl.cc index 7a5d5fc0dc..361cc0d1b3 100644 --- a/src/components/application_manager/src/application_manager_impl.cc +++ b/src/components/application_manager/src/application_manager_impl.cc @@ -189,13 +189,20 @@ ApplicationManagerImpl::ApplicationManagerImpl( , pending_device_map_lock_ptr_( std::make_shared<sync_primitives::RecursiveLock>()) , application_list_update_timer_( - "AM ListUpdater", - new TimerTaskImpl<ApplicationManagerImpl>( - this, &ApplicationManagerImpl::OnApplicationListUpdateTimer)) + std::make_shared<timer::Timer, + const char*, + ::timer::TimerTaskImpl<ApplicationManagerImpl>*>( + "AM ListUpdater", + new TimerTaskImpl<ApplicationManagerImpl>( + this, &ApplicationManagerImpl::OnApplicationListUpdateTimer))) , tts_global_properties_timer_( - "AM TTSGLPRTimer", - new TimerTaskImpl<ApplicationManagerImpl>( - this, &ApplicationManagerImpl::OnTimerSendTTSGlobalProperties)) + std::make_shared<timer::Timer, + const char*, + ::timer::TimerTaskImpl<ApplicationManagerImpl>*>( + "AM TTSGLPRTimer", + new TimerTaskImpl<ApplicationManagerImpl>( + this, + &ApplicationManagerImpl::OnTimerSendTTSGlobalProperties))) , clear_pool_timer_("ClearPoolTimer", new TimerTaskImpl<ApplicationManagerImpl>( this, &ApplicationManagerImpl::ClearTimerPool)) @@ -577,7 +584,18 @@ ApplicationSharedPtr ApplicationManagerImpl::RegisterApplication( SDL_LOG_DEBUG("Restarting application list update timer"); GetPolicyHandler().OnAppsSearchStarted(); uint32_t timeout = get_settings().application_list_update_timeout(); - application_list_update_timer_.Start(timeout, timer::kSingleShot); + if (application_list_update_timer_->is_running() || + application_list_update_timer_->is_completed()) { + application_list_update_timer_->Stop(); + } + application_list_update_timer_ = + std::make_shared<timer::Timer, + const char*, + ::timer::TimerTaskImpl<ApplicationManagerImpl>*>( + "AM ListUpdater", + new TimerTaskImpl<ApplicationManagerImpl>( + this, &ApplicationManagerImpl::OnApplicationListUpdateTimer)); + application_list_update_timer_->Start(timeout, timer::kSingleShot); if (!is_all_apps_allowed_) { SDL_LOG_WARN("RegisterApplication: access to app's disabled by user"); @@ -1677,7 +1695,18 @@ void ApplicationManagerImpl::OnFindNewApplicationsRequest() { connection_handler().ConnectToAllDevices(); SDL_LOG_DEBUG("Starting application list update timer"); uint32_t timeout = get_settings().application_list_update_timeout(); - application_list_update_timer_.Start(timeout, timer::kSingleShot); + if (application_list_update_timer_->is_running() || + application_list_update_timer_->is_completed()) { + application_list_update_timer_->Stop(); + } + application_list_update_timer_ = + std::make_shared<timer::Timer, + const char*, + ::timer::TimerTaskImpl<ApplicationManagerImpl>*>( + "AM ListUpdater", + new TimerTaskImpl<ApplicationManagerImpl>( + this, &ApplicationManagerImpl::OnApplicationListUpdateTimer)); + application_list_update_timer_->Start(timeout, timer::kSingleShot); GetPolicyHandler().OnAppsSearchStarted(); } @@ -2650,7 +2679,7 @@ bool ApplicationManagerImpl::Init( bool ApplicationManagerImpl::Stop() { SDL_LOG_AUTO_TRACE(); InitiateStopping(); - application_list_update_timer_.Stop(); + application_list_update_timer_->Stop(); try { if (unregister_reason_ == mobile_api::AppInterfaceUnregisteredReason::INVALID_ENUM) { @@ -4318,7 +4347,19 @@ void ApplicationManagerImpl::AddAppToTTSGlobalPropertiesList( SDL_LOG_INFO("Start tts_global_properties_timer_"); tts_global_properties_app_list_lock_.Release(); const uint32_t timeout_ms = 1000; - tts_global_properties_timer_.Start(timeout_ms, timer::kSingleShot); + if (tts_global_properties_timer_->is_running() || + tts_global_properties_timer_->is_completed()) { + tts_global_properties_timer_->Stop(); + } + tts_global_properties_timer_ = + std::make_shared<timer::Timer, + const char*, + ::timer::TimerTaskImpl<ApplicationManagerImpl>*>( + "AM TTSGLPRTimer", + new TimerTaskImpl<ApplicationManagerImpl>( + this, + &ApplicationManagerImpl::OnTimerSendTTSGlobalProperties)); + tts_global_properties_timer_->Start(timeout_ms, timer::kSingleShot); return; } tts_global_properties_app_list_lock_.Release(); @@ -4337,7 +4378,7 @@ void ApplicationManagerImpl::RemoveAppFromTTSGlobalPropertiesList( SDL_LOG_DEBUG("Stop tts_global_properties_timer_"); // if container is empty need to stop timer tts_global_properties_app_list_lock_.Release(); - tts_global_properties_timer_.Stop(); + tts_global_properties_timer_->Stop(); return; } } @@ -4774,7 +4815,7 @@ void ApplicationManagerImpl::AddAppToRegisteredAppList( SDL_LOG_DEBUG("App with app_id: " << application->app_id() << " has been added to registered applications list"); - if (application_list_update_timer_.is_running() && + if (application_list_update_timer_->is_running() && !registered_during_timer_execution_) { GetPolicyHandler().OnAddedNewApplicationToAppList( application->app_id(), application->policy_app_id()); |