}
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<IPC::Message> 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.");
std::auto_ptr<IPC::Message> 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;
}
{
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;
}
else
{
+ HandleAppWidgetRequest(operationId, pArgs);
+
+ // reset the timer for life duration
_ServiceAppImpl* pServiceAppImpl = _ServiceAppImpl::GetInstance();
SysAssert(pServiceAppImpl);
pServiceAppImpl->ResetLifeDurationTimer();
-
- HandleAppWidgetRequest(operationId, pArgs);
}
return E_SUCCESS;
{
int width = 0;
int height = 0;
+
const String* pValue = dynamic_cast<const String*>( pArgs->GetValue(ARG_KEY_WIDTH));
SysTryReturnResult(NID_SHELL, pValue, E_FAILURE, "Failed to GetValue(%ls)", ARG_KEY_WIDTH.GetPointer() );
Integer::Parse(*pValue, width);
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);
{
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;
}
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();
}
}
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();
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);
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);