From 55af0a48131f9c2e0a952048d0dca06455409fed Mon Sep 17 00:00:00 2001 From: "kyeongwoo.lee" Date: Tue, 25 Jun 2013 10:39:41 +0900 Subject: [PATCH] update for removing dbox Change-Id: I498787c07bd2b5559050250928b6381fcdbe8214 --- inc/FShell_AppWidgetContext.h | 18 +++- inc/FShell_AppWidgetManagerService.h | 3 +- src/FShell_AppWidgetContext.cpp | 28 ++++-- src/FShell_AppWidgetManagerService.cpp | 133 +++++++++++++------------ 4 files changed, 110 insertions(+), 72 deletions(-) diff --git a/inc/FShell_AppWidgetContext.h b/inc/FShell_AppWidgetContext.h index bfe5b73..da71baf 100644 --- a/inc/FShell_AppWidgetContext.h +++ b/inc/FShell_AppWidgetContext.h @@ -39,13 +39,24 @@ namespace Tizen { namespace Shell { namespace App class _AppWidgetPopupContext; extern const int UPDATE_PERIOD_MSEC_MIN; +class _AppWidgetContext; + +class AppContext + :public Tizen::Base::Object +{ +public: + AppContext(void):__isWaitingResult(false){} + ~AppContext(void){} + bool __isWaitingResult; + Tizen::Base::Collection::ArrayListT<_AppWidgetContext*> __appWidetContextList; +}; class _AppWidgetContext : public _AppWidgetContextBase , public Tizen::Base::Runtime::ITimerEventListener { public: - _AppWidgetContext(const Tizen::Base::String& name, const Tizen::Base::String& appId, const Tizen::Base::String& instanceId, int width, int height, int period, int priority); + _AppWidgetContext(AppContext* pAppContext, const Tizen::Base::String& name, const Tizen::Base::String& appId, const Tizen::Base::String& instanceId, int width, int height, int period, int priority); virtual ~_AppWidgetContext(void); void OnAdded(void); @@ -70,6 +81,8 @@ public: long long GetLastUpdatedTime(void) const; virtual void SetIpcClientId(int clientId); + AppContext* GetAppContext(void) const; + private: result SendAddRequest(int width, int height); result SendUpdateRequest(int width, int height, const Tizen::Base::String& argument); @@ -108,9 +121,10 @@ private: int __updateMillis; long long __lastUpdatedTime; Tizen::Base::Collection::ArrayListT* __pPendingTouchEventList; - Tizen::Base::Collection::ArrayListT* __pPendingEventList; Tizen::Base::String __pendingArgument; bool __hasPendingRequest; + AppContext* __pAppContext; + Tizen::Base::Collection::ArrayListT* __pPendingEventList; }; // class _AppWidgetContext diff --git a/inc/FShell_AppWidgetManagerService.h b/inc/FShell_AppWidgetManagerService.h index dda360b..c8d97df 100644 --- a/inc/FShell_AppWidgetManagerService.h +++ b/inc/FShell_AppWidgetManagerService.h @@ -46,7 +46,7 @@ class AppWidgetManagerService public: static AppWidgetManagerService* GetInstance(void); static AppWidgetManagerService* CreateInstance(const char* pServiceIdForCoreDaemon); - result AddAppWidget(_AppWidgetContext* pAppWidget); + _AppWidgetContext* AddAppWidget(const Tizen::Base::String& name, const Tizen::Base::String& appId, const Tizen::Base::String& instanceId, int width, int height, int period, int priority); result RemoveAppWidget(const char* pPackageName, const char* pId, bool free); int Find(const Tizen::App::AppId& appId) const; result RequestUpdate(_AppWidgetContext* pAppWidgetContext, const Tizen::Base::String& argument); @@ -116,6 +116,7 @@ private: private: static AppWidgetManagerService* __pTheInstance; Tizen::Base::Collection::HashMapT __appWidgetContextList; + Tizen::Base::Collection::HashMapT __appContextList; Tizen::Base::Runtime::Timer __pingTimer; _TaskHandlerThread __handlerThread; diff --git a/src/FShell_AppWidgetContext.cpp b/src/FShell_AppWidgetContext.cpp index ca9d584..c36a171 100644 --- a/src/FShell_AppWidgetContext.cpp +++ b/src/FShell_AppWidgetContext.cpp @@ -52,14 +52,15 @@ const String APPWIDGET_ON_TOUCH = L"http://tizen.org/appcontrol/appwidget/touch" const int UPDATE_PERIOD_MSEC_MIN = 1800000; // 30min -_AppWidgetContext::_AppWidgetContext(const String& info, const String& providerId, const String& instanceId, int width, int height, int period, int priority) +_AppWidgetContext::_AppWidgetContext(AppContext* pAppContext, const String& info, const String& providerId, const String& instanceId, int width, int height, int period, int priority) :_AppWidgetContextBase(TYPE_LB, info, providerId, instanceId, width, height, priority) ,__pAppWidgetPopup(null) ,__updateMillis(period) ,__lastUpdatedTime(0) ,__pPendingTouchEventList(null) + ,__hasPendingRequest(false) + ,__pAppContext(pAppContext) ,__pPendingEventList(null) - , __hasPendingRequest(false) { // for updating period if (__updateMillis > 0) @@ -118,6 +119,12 @@ _AppWidgetContext::~_AppWidgetContext(void) } } +AppContext* +_AppWidgetContext::GetAppContext(void) const +{ + return __pAppContext; +} + _AppWidgetPopupContext* _AppWidgetContext::GetAppWidgetPopup(void) const { @@ -308,24 +315,30 @@ _AppWidgetContext::SendRemoveRequest(void) result _AppWidgetContext::SendPendingEvent(void) { - SysTryReturnResult(NID_SHELL, __pPendingEventList->GetCount() > 0 , E_SUCCESS, "There is no pending event."); + SysTryReturnResult(NID_SHELL, __pPendingEventList->GetCount() > 0 , E_DATA_NOT_FOUND, "There is no pending event."); + result r = E_SUCCESS; PendingEvent* pEvent = null; __pPendingEventList->GetAt(0, pEvent); if (pEvent != null) { SysLog(NID_SHELL, "SendPendingEvent by IPC [%d existed.]", __pPendingEventList->GetCount()); - _AppWidgetRequestHelper::SendIpcRequest(GetClientId(), pEvent->operation, pEvent->pArg); - __pPendingEventList->RemoveAt(0); + r = _AppWidgetRequestHelper::SendIpcRequest(GetClientId(), pEvent->operation, pEvent->pArg); + + result r1 = __pPendingEventList->RemoveAt(0); + SysTryLog(NID_SHELL, !IsFailed(r1), "Failed to execute remove context."); delete pEvent; + + SysTryReturnResult(NID_SHELL, !IsFailed(r), E_SYSTEM, "SendIpcRequest failed."); } else { SysLog(NID_SHELL, "SendPendingEvent by IPC [0 existed.]"); + r = E_OBJ_NOT_FOUND; } - return E_SUCCESS; + return r; } void @@ -383,7 +396,7 @@ _AppWidgetContext::SendRequestToApp(const AppId& appId, const String& operation, } else { - if(!HasValidClientId()) + if (!HasValidClientId() || __pAppContext->__isWaitingResult == true) { SysLog(NID_SHELL, "The application is running but IPC is not connected yet."); __pPendingEventList->Add(new PendingEvent(*new String(operation), pArgs)); @@ -395,6 +408,7 @@ _AppWidgetContext::SendRequestToApp(const AppId& appId, const String& operation, pArgs->RemoveAll(true); delete pArgs; + __pAppContext->__isWaitingResult = true; } } diff --git a/src/FShell_AppWidgetManagerService.cpp b/src/FShell_AppWidgetManagerService.cpp index 6cc2d4a..d32dd93 100644 --- a/src/FShell_AppWidgetManagerService.cpp +++ b/src/FShell_AppWidgetManagerService.cpp @@ -27,6 +27,7 @@ #include #include #include +#include #include #include #include @@ -171,7 +172,7 @@ AppWidgetManagerService::Find(const String& appId) const _AppWidgetContext* pValue = null; pAppWidgetContextEnum->GetValue(pValue); - if (pValue->GetProviderId() == appId) + if (pValue->GetAppId() == appId) { clientId = pValue->GetClientId(); break; @@ -254,12 +255,45 @@ AppWidgetManagerService::OnSettingChanged(Tizen::Base::String& key) } } -result -AppWidgetManagerService::AddAppWidget(_AppWidgetContext* pAppWidgetContext) +_AppWidgetContext* +AppWidgetManagerService::AddAppWidget(const Tizen::Base::String& name, const Tizen::Base::String& providerId, const Tizen::Base::String& instanceId, int width, int height, int period, int priority) { - SysSecureLog(NID_SHELL, "%ls, %ls, count(%d)", pAppWidgetContext->GetProviderId().GetPointer(), pAppWidgetContext->GetInstanceId().GetPointer(), __appWidgetContextList.GetCount()); + AppId appId; + String providerName; + _AppWidgetManagerImpl::ExtractAppIdAndProviderName(providerId, appId, providerName); + + AppContext* pAppContext = null; + bool containsKey = false; + __appContextList.ContainsKey(appId, containsKey); + if( containsKey == false) + { + pAppContext = new(std::nothrow) AppContext; + __appContextList.Add(appId, pAppContext); + } + else + { + __appContextList.GetValue(appId, pAppContext); + } - return __appWidgetContextList.Add(pAppWidgetContext->GetInstanceId(), pAppWidgetContext); + _AppWidgetContext* pAppWidgetContext = new (std::nothrow)_AppWidgetContext(pAppContext, name, providerId, instanceId, width, height, period, priority); + SysTryReturn(NID_SHELL, pAppWidgetContext, 0, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY]"); + + int clientId = AppWidgetManagerService::GetInstance()->Find(appId); + if (clientId != -1) + { + SysLog(NID_SHELL, "There is same parent application."); + pAppWidgetContext->SetIpcClientId(clientId); + } + else + { + SysLog(NID_SHELL, "There is no same parent application."); + } + + __appWidgetContextList.Add(pAppWidgetContext->GetInstanceId(), pAppWidgetContext); + pAppWidgetContext->OnAdded(); + + SysSecureLog(NID_SHELL, "%ls, %ls, count(%d)", pAppWidgetContext->GetProviderId().GetPointer(), pAppWidgetContext->GetInstanceId().GetPointer(), __appWidgetContextList.GetCount()); + return pAppWidgetContext; } result @@ -290,33 +324,16 @@ AppWidgetManagerService::OnAppWidgetCreate(struct event_arg *arg, int *width, in SysTryReturn(NID_SHELL, arg->type == event_arg::EVENT_NEW, -EPERM, E_SUCCESS, "invalid argument from master"); SysSecureLog(NID_SHELL, "packageName(%s) id(%s) content(%s) cluster(%s) category(%s)", arg->pkgname, arg->id, arg->info.lb_create.content, arg->info.lb_create.cluster, arg->info.lb_create.category); - SysTryReturn (NID_SHELL, AppWidgetManagerService::GetInstance()->Find(arg->pkgname, arg->id) == null, -EBUSY, E_SUCCESS,"already exist"); + AppWidgetManagerService* pAppWidgetService = AppWidgetManagerService::GetInstance(); + SysTryReturn (NID_SHELL, pAppWidgetService->Find(arg->pkgname, arg->id) == null, -EBUSY, E_SUCCESS,"already exist"); double default_priority = 1.0f; - _AppWidgetContext* pAppWidgetContext = new (std::nothrow)_AppWidgetContext( arg->info.lb_create.content, arg->pkgname, arg->id, - arg->info.lb_create.width, arg->info.lb_create.height, arg->info.lb_create.period * 1000, default_priority); - SysTryReturn(NID_SHELL, pAppWidgetContext, 0, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY]"); - - int clientId = AppWidgetManagerService::GetInstance()->Find(arg->pkgname); - if (clientId != -1) - { - SysLog(NID_SHELL, "There is same parent application."); - pAppWidgetContext->SetIpcClientId(clientId); - } - else - { - SysLog(NID_SHELL, "There is no same parent application."); - } - - AppWidgetManagerService* pAppWidgetService = AppWidgetManagerService::GetInstance(); - pAppWidgetService->AddAppWidget(pAppWidgetContext); - pAppWidgetContext->OnAdded(); + _AppWidgetContext* pAppWidgetContext = pAppWidgetService->AddAppWidget(arg->info.lb_create.content, arg->pkgname, arg->id, arg->info.lb_create.width, arg->info.lb_create.height, arg->info.lb_create.period * 1000, default_priority); *priority = pAppWidgetContext->GetPriority(); *height= pAppWidgetContext->GetHeight(); *width = pAppWidgetContext->GetWidth(); - SysLog(NID_SHELL, "Exit. %d appWidget(s)", pAppWidgetService->__appWidgetContextList.GetCount()); return 0; } @@ -511,27 +528,13 @@ AppWidgetManagerService::OnAppWidgetRecreate(struct event_arg *arg, void* data) SysSecureLog(NID_SHELL, "packageName(%s) id(%s) content(%s) cluster(%s) category(%s)", arg->pkgname, arg->id, arg->info.lb_recreate.content, arg->info.lb_recreate.cluster, arg->info.lb_recreate.category); - double default_priority = 1.0f; - _AppWidgetContext* pAppWidgetContext = new (std::nothrow)_AppWidgetContext( arg->info.lb_recreate.content, arg->pkgname, arg->id, - arg->info.lb_recreate.width, arg->info.lb_recreate.height, arg->info.lb_recreate.period * 1000, default_priority); - SysTryReturn(NID_SHELL, pAppWidgetContext, 0, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY]"); - - int clientId = AppWidgetManagerService::GetInstance()->Find(arg->pkgname); - if (clientId != -1) - { - SysLog(NID_SHELL, "There is same parent application."); - pAppWidgetContext->SetIpcClientId(clientId); - } - else - { - SysLog(NID_SHELL, "There is no same parent application."); - } + AppWidgetManagerService* pAppWidgetManagerService = AppWidgetManagerService::GetInstance(); + SysTryReturn(NID_SHELL, pAppWidgetManagerService != null, -EBUSY, E_SYSTEM, "Failed to get the instance for AppWidgetManagerService."); - AppWidgetManagerService* pAppWidgetService = AppWidgetManagerService::GetInstance(); - pAppWidgetService->AddAppWidget(pAppWidgetContext); - pAppWidgetContext->OnAdded(); + double default_priority = 1.0f; + _AppWidgetContext* pAppWidgetContext = pAppWidgetManagerService->AddAppWidget(arg->info.lb_create.content, arg->pkgname, arg->id, arg->info.lb_create.width, arg->info.lb_create.height, arg->info.lb_create.period * 1000, default_priority); + SysTryReturn(NID_SHELL, pAppWidgetContext != null, -EBUSY, E_SYSTEM, "Failed to add the appwidget."); - SysLog(NID_SHELL, "Exit. %d appWidget(s)", pAppWidgetService->__appWidgetContextList.GetCount()); return 0; } @@ -546,6 +549,9 @@ AppWidgetManagerService::InitializeCoreDaemonEventReceiver(const char *pIdForCor result r = __appWidgetContextList.Construct(0, 0, strHashCodeProvider, strComparer); SysTryReturnResult(NID_SHELL, !IsFailed(r), E_SYSTEM, "Failed to execute Construct."); + r = __appContextList.Construct(0, 0, strHashCodeProvider, strComparer); + SysTryReturnResult(NID_SHELL, !IsFailed(r), E_SYSTEM, "Failed to execute Construct."); + /*! * \note * Only for the buffer type @@ -773,31 +779,19 @@ AppWidgetManagerService::SendResult(const Tizen::App::AppId& appId, const Tizen: int ret = provider_send_deleted(packageName.get(), id.get()); SysTryReturnResult(NID_SHELL, ret >= 0 , E_SYSTEM, "Failed to execute provider_send_deleted."); - result r = pAppWidgetContext->OnRemoved(); - SysTryReturnResult(NID_SHELL, !IsFailed(r), E_SYSTEM, "Failed to execute OnRemoved."); + //result r = pAppWidgetContext->OnRemoved(); + //SysTryReturnResult(NID_SHELL, !IsFailed(r), E_SYSTEM, "Failed to execute OnRemoved."); - r = RemoveAppWidget(packageName.get(), id.get(), true); + result r = RemoveAppWidget(packageName.get(), id.get(), true); SysTryReturnResult(NID_SHELL, !IsFailed(r), E_SYSTEM, "Failed to execute RemoveAppWidget."); - - RequestPendingEvent(); } else // for pending event excluding touch event. { SysLog(NID_SHELL, "SendResult is called[true]."); - - pAppWidgetContext = this->Find(appId, instanceId); - - if (pAppWidgetContext) - { - SysLog(NID_SHELL, "AppWidgetContext for %ls exists.", instanceId.GetPointer()); - RequestPendingEvent(); - } - else - { - SysLog(NID_SHELL, "AppWidgetContext for %ls is empty.", instanceId.GetPointer()); - } } + RequestPendingEvent(); + return E_SUCCESS; } @@ -816,12 +810,27 @@ AppWidgetManagerService::RequestPendingEvent(void) unique_ptr< IMapEnumeratorT > pAppWidgetContextEnum((AppWidgetManagerService::GetInstance()->__appWidgetContextList).GetMapEnumeratorN()); SysTryReturnResult(NID_SHELL, pAppWidgetContextEnum, E_SYSTEM, ""); + result r = E_SUCCESS; + while (pAppWidgetContextEnum->MoveNext() == E_SUCCESS) { _AppWidgetContext* pValue = null; pAppWidgetContextEnum->GetValue(pValue); - pValue->SendPendingEvent(); + r = pValue->SendPendingEvent(); + if (r == E_SUCCESS) + { + (pValue->GetAppContext())->__isWaitingResult = false; + SysLog(NID_SHELL, "Found pending event."); + break; + } + else + { + if (E_DATA_NOT_FOUND) + { + (pValue->GetAppContext())->__isWaitingResult = false; + } + } } return E_SUCCESS; -- 2.34.1