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);
+ int GetProviderCount(const Tizen::Base::String& appId) const;
private:
result Construct(const char* pServiceIdForCoreDaemon);
virtual result RequestSyncSharedMemoryForPD(const Tizen::App::AppId& appId, const Tizen::Base::String& instanceId);
virtual result RequestReleaseSharedMemory(const Tizen::App::AppId& appId, const Tizen::Base::String& instanceId);
virtual result RequestReleaseSharedMemoryForPD(const Tizen::App::AppId& appId, const Tizen::Base::String& instanceId);
+ virtual result RequestProviderCount(const Tizen::App::AppId& appId, const Tizen::Base::String& instanceId, int& providerCount);
virtual result SendResult(const Tizen::App::AppId& appId, const Tizen::Base::String& instanceId, bool isSucceeded);
virtual result SendAccessStatus(const Tizen::App::AppId& appId, const Tizen::Base::String& instanceId, int accessStatus);
bool OnRequestSyncSharedMemoryForPD(const Tizen::Base::String& instanceId, result* pRes);
bool OnRequestReleaseSharedMemory(const Tizen::Base::String& instanceId, result* pRes);
bool OnRequestReleaseSharedMemoryForPD(const Tizen::Base::String& instanceId, result* pRes);
+ bool OnRequestProviderCount(const Tizen::Base::String& instanceId, int* pProviderCount);
bool OnSendResult(const Tizen::Base::String& instanceId, bool isSucceeded);
bool OnSendAccessStatus(const Tizen::Base::String& instanceId, int accessStatus);
virtual result RequestSyncSharedMemoryForPD(const Tizen::App::AppId& appId, const Tizen::Base::String& instanceId) = 0;
virtual result RequestReleaseSharedMemory(const Tizen::App::AppId& appId, const Tizen::Base::String& instanceId) = 0;
virtual result RequestReleaseSharedMemoryForPD(const Tizen::App::AppId& appId, const Tizen::Base::String& instanceId) = 0;
+ virtual result RequestProviderCount(const Tizen::App::AppId& appId, const Tizen::Base::String& instanceId, int& pProviderCount) = 0;
virtual result SendResult(const Tizen::App::AppId& appId, const Tizen::Base::String& instanceId, bool isSucceeded) = 0;
virtual result SendAccessStatus(const Tizen::App::AppId& appId, const Tizen::Base::String& instanceId, int accessStatus) = 0;
return clientId;
}
+int
+AppWidgetManagerService::GetProviderCount(const String& appId) const
+{
+ int providerCount = 0;
+
+ unique_ptr< IMapEnumeratorT<String, _AppWidgetContext*> > pAppWidgetContextEnum(__appWidgetContextList.GetMapEnumeratorN());
+ SysTryReturn(NID_SHELL, pAppWidgetContextEnum, providerCount, E_SYSTEM, "[E_SYSTEM]");
+
+ while (pAppWidgetContextEnum->MoveNext() == E_SUCCESS)
+ {
+ _AppWidgetContext* pValue = null;
+ pAppWidgetContextEnum->GetValue(pValue);
+
+ if (pValue->GetAppId() == appId)
+ {
+ providerCount++;
+ }
+ }
+
+ SysLog(NID_SHELL, "The provider count is %d for %ls", providerCount, appId.GetPointer());
+ return providerCount;
+}
+
result
AppWidgetManagerService::SetIpcClientIds(const Tizen::App::AppId& appId, int clientId)
{
return E_SUCCESS;
}
+result
+AppWidgetManagerService::RequestProviderCount(const Tizen::App::AppId& appId, const Tizen::Base::String& instanceId, int& providerCount)
+{
+ SysLog(NID_SHELL, "ENTER");
+
+ _AppWidgetContext* pAppWidgetContext = this->Find(appId, instanceId);
+ SysSecureTryReturnResult(NID_SHELL, pAppWidgetContext, E_SYSTEM, "pAppWidgetContext is null for (%ls) (%ls)", appId.GetPointer(), instanceId.GetPointer());
+
+ providerCount = GetProviderCount(pAppWidgetContext->GetAppId());
+
+ std::unique_ptr<char[]> packageName(_StringConverter::CopyToCharArrayN(pAppWidgetContext->GetProviderId()));
+ std::unique_ptr<char[]> id(_StringConverter::CopyToCharArrayN(pAppWidgetContext->GetInstanceId()));
+
+ 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 = RemoveAppWidget(packageName.get(), id.get(), true);
+ SysTryReturnResult(NID_SHELL, !IsFailed(r), E_SYSTEM, "Failed to execute RemoveAppWidget.");
+
+ providerCount--;
+
+ RequestPendingEvent();
+
+ return E_SUCCESS;
+}
+
result
AppWidgetManagerService::SendResult(const Tizen::App::AppId& appId, const Tizen::Base::String& instanceId, bool isSucceeded)
{
}
}
}
- else
+ else
{
pAppWidgetContext = this->Find(appId, instanceId);
}
return true;
}
+bool
+_AppWidgetManagerStub::OnRequestProviderCount(const String& instanceId, int* pProviderCount)
+{
+ SysSecureLog(NID_SHELL, "(instanceId:%ls)", instanceId.GetPointer());
+
+ RequestProviderCount(__pIpcServer->GetClientPackageId(), instanceId, *pProviderCount);
+
+ return true;
+}
+
bool
_AppWidgetManagerStub::OnSendResult(const String& instanceId, bool isSucceeded)
{
IPC_MESSAGE_HANDLER_EX(AppWidgetManager_RequestSyncSharedMemoryForPD, &server, OnRequestSyncSharedMemoryForPD)
IPC_MESSAGE_HANDLER_EX(AppWidgetManager_RequestReleaseSharedMemory, &server, OnRequestReleaseSharedMemory)
IPC_MESSAGE_HANDLER_EX(AppWidgetManager_RequestReleaseSharedMemoryForPD, &server, OnRequestReleaseSharedMemoryForPD)
+ IPC_MESSAGE_HANDLER_EX(AppWidgetManager_RequestProviderCount, &server, OnRequestProviderCount)
IPC_MESSAGE_HANDLER_EX(AppWidgetManager_SendResult, &server, OnSendResult)
// IPC_MESSAGE_HANDLER_EX(AppWidgetManager_SendAccessStatus, &server, OnSendAccessStatus)
IPC_END_MESSAGE_MAP()