Adding a function to get the provider count
authorkyeongwoo.lee <kyeongwoo.lee@samsung.com>
Wed, 3 Jul 2013 05:30:24 +0000 (14:30 +0900)
committerkyeongwoo.lee <kyeongwoo.lee@samsung.com>
Wed, 3 Jul 2013 05:30:24 +0000 (14:30 +0900)
Change-Id: I4dbaec1840287dc8e581768c7441fb0e4ebb8f57

inc/FShell_AppWidgetManagerService.h
inc/FShell_AppWidgetManagerStub.h
src/FShell_AppWidgetManagerService.cpp
src/FShell_AppWidgetManagerStub.cpp

index c8d97dfbe558b2fe58b47b684dd2a94d1015827e..6ac4bf798f14e90c60f02a4b8853443320cf8328 100644 (file)
@@ -50,6 +50,7 @@ public:
        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);
@@ -82,6 +83,7 @@ private:
        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);
 
index 1401f0af5097dc49173fcf1874f2e3bb48a8077b..4d10284288f2456e984b526075aaa19e0227167b 100644 (file)
@@ -63,6 +63,7 @@ protected:
        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);
 
@@ -75,6 +76,7 @@ protected:
        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;
 
index a39fe6c0273e74e4c523a1c9acffed455456ebbf..0624d512a4e849cfa431e7d3672f0ec4b0bf11c9 100644 (file)
@@ -183,6 +183,29 @@ AppWidgetManagerService::Find(const String& appId) const
        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)
 {
@@ -742,6 +765,35 @@ AppWidgetManagerService::RequestReleaseSharedMemoryForPD(const Tizen::App::AppId
        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)
 {
@@ -767,7 +819,7 @@ AppWidgetManagerService::SendResult(const Tizen::App::AppId& appId, const Tizen:
                                }
                        }
                }
-               else    
+               else
                {
                        pAppWidgetContext = this->Find(appId, instanceId);
                }
index cc125917b35e4bbee6a7a6de2046e6772b8bfbaa..28a8835295e1b4a20765199cf50a333d734095c5 100644 (file)
@@ -155,6 +155,16 @@ _AppWidgetManagerStub::OnRequestReleaseSharedMemoryForPD(const String& instanceI
        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)
 {
@@ -221,6 +231,7 @@ _AppWidgetManagerStub::OnIpcRequestReceived(_IpcServer& server, const IPC::Messa
                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()