From 31edc3b4dc4e20dc59d72e68fa810bf3aba6cf49 Mon Sep 17 00:00:00 2001 From: "kyeongwoo.lee" Date: Wed, 3 Jul 2013 14:30:17 +0900 Subject: [PATCH] Adding a function to get the provider count Change-Id: I60ae96f04ed0a9b0cef9e6b1d4680e1a92101090 --- src/FShell_AppWidgetManagerProxy.cpp | 15 +++++++- src/FShell_AppWidgetProviderManagerImpl.cpp | 55 +++++++++++++++++++++++---- src/inc/FShell_AppWidgetManagerIpcMessage.h | 1 + src/inc/FShell_AppWidgetManagerProxy.h | 1 + src/inc/FShell_AppWidgetProviderManagerImpl.h | 2 + 5 files changed, 65 insertions(+), 9 deletions(-) diff --git a/src/FShell_AppWidgetManagerProxy.cpp b/src/FShell_AppWidgetManagerProxy.cpp index 61dc8a1..7ad3df8 100644 --- a/src/FShell_AppWidgetManagerProxy.cpp +++ b/src/FShell_AppWidgetManagerProxy.cpp @@ -227,6 +227,19 @@ _AppWidgetManagerProxy::RequestReleaseSharedMemoryForPD(const Tizen::Base::Strin } result +_AppWidgetManagerProxy::RequestProviderCount(const Tizen::Base::String& instanceId, int &count) +{ + SysTryReturnResult(NID_SHELL, __pIpcClient != null, E_SYSTEM, "__pIpcClient instance must not be null."); + SysLog(NID_SHELL, ""); + + std::auto_ptr pMsg (new (std::nothrow) AppWidgetManager_RequestProviderCount(instanceId, &count)); + result r = __pIpcClient->SendRequest(*pMsg.get()); + SysTryReturnResult(NID_SHELL, !IsFailed(r), r, "SendRequest failed."); + + return E_SUCCESS; +} + +result _AppWidgetManagerProxy::SendResult(const Tizen::Base::String& instanceId, bool isSucceeded) { SysTryReturnResult(NID_SHELL, __pIpcClient != null, E_SYSTEM, "__pIpcClient instance must not be null."); @@ -234,7 +247,7 @@ _AppWidgetManagerProxy::SendResult(const Tizen::Base::String& instanceId, bool i std::auto_ptr pMsg (new (std::nothrow) AppWidgetManager_SendResult(instanceId, isSucceeded)); result r = __pIpcClient->SendRequest(*pMsg.get()); - SysTryReturnResult(NID_SHELL, !IsFailed(r), r, "SendResult failed."); + SysTryReturnResult(NID_SHELL, !IsFailed(r), r, "SendRequest failed."); return E_SUCCESS; } diff --git a/src/FShell_AppWidgetProviderManagerImpl.cpp b/src/FShell_AppWidgetProviderManagerImpl.cpp index fdacfb1..3a94112 100644 --- a/src/FShell_AppWidgetProviderManagerImpl.cpp +++ b/src/FShell_AppWidgetProviderManagerImpl.cpp @@ -146,7 +146,7 @@ _AppWidgetProviderManagerImpl::SetAppWidgetProviderFactory(IAppWidgetProviderFac { SysLogException(NID_SHELL, E_INVALID_OPERATION, "The application's attribute does not meet the condition to provide AppWidget. 'LifeDuration' and 'UseUi' attribute should be specified in application manifest and it's not allowed that declaring 'AUTO_RESTART' attribute for AppWidget."); - r = SendResult(INVALID_INSTANCE, false); + r = SendResult(INVALID_INSTANCE, false); SysTryLog(NID_SHELL, !IsFailed(r), "Because the context for this dynamic box is removed, POLLRDHUP occurs."); return E_INVALID_OPERATION; @@ -444,11 +444,12 @@ _AppWidgetProviderManagerImpl::HandleRequest(const String& operationId, const IM } else { + HandleAppWidgetRequest(operationId, pArgs); + + // reset the timer for life duration _ServiceAppImpl* pServiceAppImpl = _ServiceAppImpl::GetInstance(); SysAssert(pServiceAppImpl); pServiceAppImpl->ResetLifeDurationTimer(); - - HandleAppWidgetRequest(operationId, pArgs); } return E_SUCCESS; @@ -501,6 +502,7 @@ _AppWidgetProviderManagerImpl::HandleAppWidgetRequest(const String& operationId, { int width = 0; int height = 0; + const String* pValue = dynamic_cast( pArgs->GetValue(ARG_KEY_WIDTH)); SysTryReturnResult(NID_SHELL, pValue, E_FAILURE, "Failed to GetValue(%ls)", ARG_KEY_WIDTH.GetPointer() ); Integer::Parse(*pValue, width); @@ -630,7 +632,7 @@ _AppWidgetProviderManagerImpl::CreateAppWidget(const String& name, const String& result _AppWidgetProviderManagerImpl::UpdateAppWidget(const String& instanceId, int width, int height, const String& argument) { - SysSecureLog(NID_SHELL, "instanceId(%ls), w:%d, h:%d, argument:%ls", instanceId.GetPointer(), width, height, argument.GetPointer() ); + SysSecureLog(NID_SHELL, "instanceId(%ls), w:%d, h:%d, argument:%ls", instanceId.GetPointer(), width, height, argument.GetPointer()); AppWidgetProvider* pAppWidget = null; __appwidgetProviders.GetValue(instanceId, pAppWidget); @@ -641,9 +643,10 @@ _AppWidgetProviderManagerImpl::UpdateAppWidget(const String& instanceId, int wid { SysLog(NID_SHELL, "Failed to update."); - result r = SendResult(instanceId, false); - SysTryLog(NID_SHELL, !IsFailed(r), "Failed to send the result."); - RemoveAppWidget(instanceId, false); + int count = 0; + result r = RequestProviderCount(instanceId, count); + SysTryLog(NID_SHELL, !IsFailed(r), "Failed to get the count of a provider."); + RemoveAppWidget(instanceId, count); return E_SYSTEM; } @@ -686,8 +689,35 @@ _AppWidgetProviderManagerImpl::RemoveAppWidget(const String& instanceId, bool te SysLog(NID_SHELL, "(%d) provider(s) remains.", __appwidgetProviders.GetCount() ); - if( terminateIfFinished && this->__appwidgetProviders.GetCount() == 0) + if (terminateIfFinished && this->__appwidgetProviders.GetCount() == 0) + { + SysLog(NID_SHELL, "%ls is terminated.", instanceId.GetPointer()); + Tizen::App::App::GetInstance()->Terminate(); + } + + return E_SUCCESS; +} + +result +_AppWidgetProviderManagerImpl::RemoveAppWidget(const String& instanceId, int providerCount) +{ + SysSecureLog(NID_SHELL, "instanceId(%ls), providerCount(%d)", instanceId.GetPointer(), providerCount); + + AppWidgetProvider* pAppWidgetProvider = null; + __appwidgetProviders.GetValue(instanceId, pAppWidgetProvider); + result r = __appwidgetProviders.Remove(instanceId); + SysLog(NID_SHELL, "%s", GetErrorMessage(r) ); + + if (pAppWidgetProvider != null) { + pAppWidgetProvider->OnAppWidgetProviderRemoved(); + pAppWidgetProvider->OnAppWidgetProviderTerminating(); + delete pAppWidgetProvider; + } + + if (providerCount == 0) + { + SysLog(NID_SHELL, "The count of provider is 0. %ls is terminated.", instanceId.GetPointer()); Tizen::App::App::GetInstance()->Terminate(); } @@ -822,6 +852,15 @@ _AppWidgetProviderManagerImpl::RequestSyncSharedMemoryForPD(const String& instan } result +_AppWidgetProviderManagerImpl::RequestProviderCount(const String& instanceId, int& providerCount) +{ + _AppWidgetManagerProxy* pProxy = _AppWidgetManagerProxy::GetInstance(); + SysTryReturnResult(NID_SHELL, pProxy, E_SYSTEM, "Failed to get proxy instance!"); + + return pProxy->RequestProviderCount(instanceId, providerCount); +} + +result _AppWidgetProviderManagerImpl::SendResult(const String& instanceId, bool isSucceeded) { _AppWidgetManagerProxy* pProxy = _AppWidgetManagerProxy::GetInstance(); diff --git a/src/inc/FShell_AppWidgetManagerIpcMessage.h b/src/inc/FShell_AppWidgetManagerIpcMessage.h index 01b64d5..c33c60c 100644 --- a/src/inc/FShell_AppWidgetManagerIpcMessage.h +++ b/src/inc/FShell_AppWidgetManagerIpcMessage.h @@ -39,6 +39,7 @@ IPC_SYNC_MESSAGE_CONTROL3_1(AppWidgetManager_RequestSyncSharedMemory, Tizen::Bas IPC_SYNC_MESSAGE_CONTROL1_1(AppWidgetManager_RequestSyncSharedMemoryForPD, Tizen::Base::String, result) IPC_SYNC_MESSAGE_CONTROL1_1(AppWidgetManager_RequestReleaseSharedMemory, Tizen::Base::String, result) IPC_SYNC_MESSAGE_CONTROL1_1(AppWidgetManager_RequestReleaseSharedMemoryForPD, Tizen::Base::String, result) +IPC_SYNC_MESSAGE_CONTROL1_1(AppWidgetManager_RequestProviderCount, Tizen::Base::String, int) IPC_MESSAGE_CONTROL2(AppWidgetManager_SendResult, Tizen::Base::String, bool) IPC_MESSAGE_CONTROL2(AppWidgetManager_SendAccessStatus, Tizen::Base::String, int) diff --git a/src/inc/FShell_AppWidgetManagerProxy.h b/src/inc/FShell_AppWidgetManagerProxy.h index 1c1eb82..0725fac 100644 --- a/src/inc/FShell_AppWidgetManagerProxy.h +++ b/src/inc/FShell_AppWidgetManagerProxy.h @@ -54,6 +54,7 @@ public: result RequestSyncSharedMemoryForPD(const Tizen::Base::String& instanceId); result RequestReleaseSharedMemory(const Tizen::Base::String& instanceId); result RequestReleaseSharedMemoryForPD(const Tizen::Base::String& instanceId); + result RequestProviderCount(const Tizen::Base::String& instanceId, int& providerCount); result SendResult(const Tizen::Base::String& instanceId, bool isSucceeded); result SendAccessStatus(const Tizen::Base::String& instanceId, int accessStatus); diff --git a/src/inc/FShell_AppWidgetProviderManagerImpl.h b/src/inc/FShell_AppWidgetProviderManagerImpl.h index b9b4128..0a57783 100644 --- a/src/inc/FShell_AppWidgetProviderManagerImpl.h +++ b/src/inc/FShell_AppWidgetProviderManagerImpl.h @@ -89,6 +89,7 @@ public: result RequestSyncSharedMemoryForPD(const Tizen::Base::String& instanceId); result RequestReleaseSharedMemory(const Tizen::Base::String& instanceId); result RequestReleaseSharedMemoryForPD(const Tizen::Base::String& instanceId); + result RequestProviderCount(const Tizen::Base::String& instanceId, int& providerCount); result SendResult(const Tizen::Base::String& instanceId, bool isSucceeded); result SendAccessStatus(const Tizen::Base::String& instanceId, int accessStatus); @@ -115,6 +116,7 @@ private: result UpdateAppWidget(const Tizen::Base::String& instanceId, int width, int height, const Tizen::Base::String& argument); result ResizeAppWidget(const Tizen::Base::String& instanceId, int width, int height); result RemoveAppWidget(const Tizen::Base::String& instanceId, bool terminateIfFinished); + result RemoveAppWidget(const Tizen::Base::String& instanceId, int providerCount); result CreateAppWidgetPopupProvider(const Tizen::Base::String& instanceId, const Tizen::Base::String& providerName, const Tizen::Base::String& userInfo, double x, double y, int width, int height); result DestroyAppWidgetPopupProvider(const Tizen::Base::String& instanceId); -- 2.7.4