From: Sunghyun Kim Date: Fri, 11 Sep 2020 10:24:52 +0000 (+0900) Subject: Reload Widget from WidgetViewManager X-Git-Tag: submit/tizen/20200916.173718~1 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=e956d680104b020ad793627de94f01f03cf78794;p=platform%2Fcore%2Fuifw%2Fwidget-viewer-dali.git Reload Widget from WidgetViewManager If Widget is deaded, we need to call ReloadWidget from maanger. Change-Id: I14d1ac0e47556f828579107716a81639af46ce66 --- diff --git a/widget_viewer_dali/internal/widget_view/widget_view_impl.cpp b/widget_viewer_dali/internal/widget_view/widget_view_impl.cpp index b18acdc..c3d5a0c 100644 --- a/widget_viewer_dali/internal/widget_view/widget_view_impl.cpp +++ b/widget_viewer_dali/internal/widget_view/widget_view_impl.cpp @@ -260,16 +260,6 @@ static void OnSurfaceRemoved( const char *appid, const char *instance_id, const } } -static int WidgetLifeCycleCallback(const char *appid, widget_lifecycle_event event, const char *instance_id, void *data) -{ - Dali::WidgetView::Internal::WidgetView* widgetView = static_cast< Dali::WidgetView::Internal::WidgetView* >( data ); - if( event == WIDGET_LIFE_CYCLE_EVENT_APP_DEAD ) - { - widgetView->ReloadWidget(); - } - return 0; -} - } // unnamed namespace Dali::WidgetView::WidgetView WidgetView::New( const std::string& widgetId, const std::string& contentInfo, int width, int height, float updatePeriod ) @@ -1090,8 +1080,6 @@ void WidgetView::OnInitialize() ops.added_cb = OnBufferAdded; mWatcherHandle = screen_connector_toolkit_add(&ops, (char *)instanceId, SCREEN_CONNECTOR_SCREEN_TYPE_WIDGET, this); DALI_LOG_INFO( gWidgetViewLogging, Debug::Verbose, "WidgetView::OnInitialize: widget_instance_launch is called. [%s, mPid = %d]\n", mWidgetId.c_str(), mPid ); - widget_service_set_lifecycle_event_cb( mWidgetId.c_str(), WidgetLifeCycleCallback, this ); - } void WidgetView::OnSceneConnection( int depth ) diff --git a/widget_viewer_dali/internal/widget_view_manager/widget_view_manager_impl.cpp b/widget_viewer_dali/internal/widget_view_manager/widget_view_manager_impl.cpp index fcc7617..0140741 100644 --- a/widget_viewer_dali/internal/widget_view_manager/widget_view_manager_impl.cpp +++ b/widget_viewer_dali/internal/widget_view_manager/widget_view_manager_impl.cpp @@ -201,8 +201,12 @@ Dali::WidgetView::WidgetView WidgetViewManager::AddWidget( const std::string& wi // Add to map mWidgetViewContainer.insert( std::pair( instanceId, widgetView ) ); + mInstanceIdContainer.push_back( InstanceIdPair( widgetId, instanceId ) ); } + // Add lifecycle callback for reload + widget_service_set_lifecycle_event_cb( widgetId.c_str(), WidgetLifeCycleCallback, this ); + DALI_LOG_INFO( gWidgetViewManagerLogging, Debug::Verbose, "WidgetViewManager::AddWidget: success [%s]\n", widgetId.c_str() ); return widgetView; @@ -220,6 +224,17 @@ void WidgetViewManager::OnTerminatedWidget( Dali::WidgetView::WidgetView widgetV { mWidgetViewContainer.erase( iter ); } + + // Delete WidgetInstance + auto widgetInstance = std::find_if( mInstanceIdContainer.begin(), + mInstanceIdContainer.end(), + [instanceId]( InstanceIdPair pair ) + { return (pair.second == instanceId); } ); + + if(widgetInstance != mInstanceIdContainer.end()) + { + mInstanceIdContainer.erase(widgetInstance); + } } DALI_LOG_INFO( gWidgetViewManagerLogging, Debug::Verbose, "WidgetViewManager::OnTerminatedWidget: Widget is deleted!\n" ); @@ -247,6 +262,26 @@ int WidgetViewManager::WidgetEventCallback( const char* widgetId, const char* in return 0; } +int WidgetViewManager::WidgetLifeCycleCallback(const char *appid, widget_lifecycle_event event, const char *instance_id, void *data) +{ + WidgetViewManager* widgetViewManager = static_cast< WidgetViewManager* >( data ); + + if( event == WIDGET_LIFE_CYCLE_EVENT_APP_DEAD ) + { + for( auto&& instanceIter : widgetViewManager->mInstanceIdContainer ) + { + if( ((instanceIter).first).compare(appid) == 0) + { + DALI_LOG_INFO( gWidgetViewManagerLogging, Debug::Verbose, "WidgetViewManager::WidgetLifeCycleCallback: Call ReloadWidget [%s, %s]\n",appid, instanceIter.second); + WidgetViewIter iter = widgetViewManager->mWidgetViewContainer.find( std::string((instanceIter).second ) ); + Dali::WidgetView::WidgetView widgetView = iter->second; + Dali::WidgetView::GetImplementation( widgetView ).ReloadWidget(); + } + } + } + return 0; +} + } // namespace Internal } // namespace WidgetView diff --git a/widget_viewer_dali/internal/widget_view_manager/widget_view_manager_impl.h b/widget_viewer_dali/internal/widget_view_manager/widget_view_manager_impl.h index 94a3211..aa7b817 100644 --- a/widget_viewer_dali/internal/widget_view_manager/widget_view_manager_impl.h +++ b/widget_viewer_dali/internal/widget_view_manager/widget_view_manager_impl.h @@ -25,6 +25,8 @@ // EXTERNAL INCLUDES #include #include +#include +#include namespace Dali { @@ -69,8 +71,16 @@ private: */ int Initialize( Application application, const std::string& name ); + /** + * Callback for event + */ static int WidgetEventCallback( const char* widgetId, const char* instanceId, int event, void* data ); + /** + * Callback for life-cycle + */ + static int WidgetLifeCycleCallback( const char *widgetId, widget_lifecycle_event event, const char *instance_id, void *data); + /** * The widgetView is removed from WidgetViewContainer */ @@ -89,7 +99,11 @@ private: typedef std::map WidgetViewContainer; typedef WidgetViewContainer::iterator WidgetViewIter; + typedef std::pair< std::string, std::string > InstanceIdPair; + typedef std::vector< InstanceIdPair > InstanceIdContainer; + WidgetViewContainer mWidgetViewContainer; + InstanceIdContainer mInstanceIdContainer; }; } // namespace Internal