add FShell_AppContext.cpp
authorjungmin76.park <jungmin76.park@samsung.com>
Sat, 3 Aug 2013 01:28:49 +0000 (10:28 +0900)
committerjungmin76.park <jungmin76.park@samsung.com>
Sat, 3 Aug 2013 01:53:51 +0000 (10:53 +0900)
Change-Id: I7769e37606130dcb4fe4a7c6f00c30472090a790
Signed-off-by: jungmin76.park <jungmin76.park@samsung.com>
CMakeLists.txt
inc/FShell_AppContext.h [new file with mode: 0644]
inc/FShell_AppWidgetContext.h
inc/FShell_AppWidgetManagerService.h
inc/FShell_AppWidgetManagerStub.h
inc/FShell_AppWidgetRemoteBuffer.h
src/FShell_AppContext.cpp [new file with mode: 0644]
src/FShell_AppWidgetContext.cpp
src/FShell_AppWidgetManagerService.cpp

index 538baa99363b253f25e8699a6f17f8fc399d4e21..242071913bcfaa8c0441d8a64008e1c4177accaa 100644 (file)
@@ -27,6 +27,7 @@ INCLUDE_DIRECTORIES (
 SET (${this_target}_SOURCE_FILES
        src/OspAppWidgetService.cpp
        src/OspAppWidgetServiceEntry.cpp
+       src/FShell_AppContext.cpp
        src/FShell_AppWidgetContext.cpp
        src/FShell_AppWidgetRemoteBuffer.cpp
        src/FShell_AppWidgetManagerService.cpp
diff --git a/inc/FShell_AppContext.h b/inc/FShell_AppContext.h
new file mode 100644 (file)
index 0000000..ed3ff78
--- /dev/null
@@ -0,0 +1,107 @@
+//
+// Copyright (c) 2012-2013 Samsung Electronics Co., Ltd.
+//
+// Licensed under the Flora License, Version 1.1 (the License);
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://floralicense.org/license/
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+/**
+ * @file       FShell_AppContext.h
+ * @brief      This is the header file for the _AppContext class.
+ *
+ * This header file contains the declarations of the _AppContext class.
+ */
+
+#ifndef _FSHELL_INTERNAL_APP_CONTEXT_H_
+#define _FSHELL_INTERNAL_APP_CONTEXT_H_
+
+#include <FAppTypes.h>
+#include <FBaseColArrayListT.h>
+
+namespace Tizen { namespace Base  { namespace Collection
+{
+class HashMap;
+}}}
+
+namespace Tizen { namespace Shell  { namespace App
+{
+
+enum _ConnectionState
+{
+       CONNECTION_STATE_NONE = 0,
+       CONNECTION_STATE_CONNECTING,
+       CONNECTION_STATE_CONNECTED,
+       CONNECTION_STATE_DISCONNECTED
+};
+
+class _AppWidgetContext;
+
+/**
+ * @class      _AppContext
+ * @brief      Context of a AppWidget provider application.
+ */
+class _AppContext
+       :public Tizen::Base::Object
+{
+
+public:
+       _AppContext(const Tizen::App::AppId& appId);
+       ~_AppContext(void);
+
+       _AppWidgetContext* AddAppWidget(const Tizen::Base::String& userInfo, const Tizen::Base::String& providerId, const Tizen::Base::String& instanceId, int width, int height, int period, int priority);
+       result RemoveAppWidget(const Tizen::Base::String& instanceId, bool isTriggeredByViewer = true);
+       result RequestUpdate(const Tizen::Base::String& providerName, const Tizen::Base::String& argument) const;
+       result OnAppWidgetBackgroundAll(void) const;
+       result OnAppWidgetForegroundAll(void) const;
+
+       result SendRequestToApp(const Tizen::App::AppId& providerAppId, const Tizen::Base::String& operation, Tizen::Base::Collection::HashMap* pArgs);
+       result SendPendingEvent(void);
+
+       void OnIpcConnected(int clientId);
+       void OnIpcDisconnected(void);
+
+       Tizen::App::AppId GetAppId(void) const;
+       int GetClientId(void) const;
+       _ConnectionState GetConnectionState(void) const;
+       bool GetWaitingStatus(void) const;
+
+       _AppWidgetContext* FindAppWidget(const Tizen::Base::String& instanceId) const;
+       int GetProviderCount(const Tizen::Base::String& appId) const;
+
+private:
+       void SetConnectionState(_ConnectionState state);
+       void SetWaitingStatus(bool status);
+       _AppWidgetContext* FindInvalidAppWidget(void) const;
+
+private:
+
+       struct PendingEvent
+       {
+               PendingEvent(const Tizen::Base::String& operation, Tizen::Base::Collection::HashMap* pHashMap)
+                : operation(operation), pArg(pHashMap) {  }
+
+               Tizen::Base::String operation;
+               Tizen::Base::Collection::HashMap* pArg;
+       };
+
+       const Tizen::App::AppId __appId;
+       bool __isWaitingResult;
+       int __ipcClientId;
+       _ConnectionState __connectionState;
+       Tizen::Base::Collection::HashMapT<Tizen::Base::String, _AppWidgetContext*> __appWidgetContextList;
+       Tizen::Base::Collection::ArrayListT<PendingEvent*>* __pPendingEventList;
+};
+
+
+}}} // Tizen::Shell::App
+
+#endif // _FSHELL_INTERNAL_APP_CONTEXT_H_
index 8d566343b10d492c670f703baea1be26a0b93f69..bbadc5b050b5c2afaa32694cf90c9713332dc5ae 100644 (file)
@@ -28,6 +28,7 @@
 #include <FAppTypes.h>
 #include <FBaseRtTimer.h>
 #include <FBaseColArrayListT.h>
+#include "FShell_AppContext.h"
 #include "FShell_AppWidgetRemoteBuffer.h"
 
 namespace Tizen { namespace Base  { namespace Collection
@@ -54,73 +55,6 @@ extern const wchar_t ARG_KEY_TIME_STAMP[];
 extern const int UPDATE_PERIOD_MSEC_MIN;
 
 
-enum _ConnectionState
-{
-       CONNECTION_STATE_NONE = 0,
-       CONNECTION_STATE_CONNECTING,
-       CONNECTION_STATE_CONNECTED,
-       CONNECTION_STATE_DISCONNECTED
-};
-
-class _AppWidgetContext;
-
-/**
- * @class      _AppContext
- * @brief      Context of a AppWidget provider application.
- */
-class _AppContext
-       :public Tizen::Base::Object
-{
-
-public:
-       _AppContext(const Tizen::App::AppId& appId);
-       ~_AppContext(void);
-
-       _AppWidgetContext* AddAppWidget(const Tizen::Base::String& userInfo, const Tizen::Base::String& providerId, const Tizen::Base::String& instanceId, int width, int height, int period, int priority);
-       result RemoveAppWidget(const Tizen::Base::String& instanceId, bool isTriggeredByViewer = true);
-       result RequestUpdate(const Tizen::Base::String& providerName, const Tizen::Base::String& argument) const;
-       result OnAppWidgetBackgroundAll(void) const;
-       result OnAppWidgetForegroundAll(void) const;
-
-       result SendRequestToApp(const Tizen::App::AppId& providerAppId, const Tizen::Base::String& operation, Tizen::Base::Collection::HashMap* pArgs);
-       result SendPendingEvent(void);
-
-       void OnIpcConnected(int clientId);
-       void OnIpcDisconnected(void);
-
-       Tizen::App::AppId GetAppId(void) const;
-       int GetClientId(void) const;
-       _ConnectionState GetConnectionState(void) const;
-       bool GetWaitingStatus(void) const;
-
-       _AppWidgetContext* FindAppWidget(const Tizen::Base::String& instanceId) const;
-       int GetProviderCount(const Tizen::Base::String& appId) const;
-
-private:
-       void SetConnectionState(_ConnectionState state);
-       void SetWaitingStatus(bool status);
-       _AppWidgetContext* FindInvalidAppWidget(void) const;
-
-private:
-
-       struct PendingEvent
-       {
-               PendingEvent(const Tizen::Base::String& operation, Tizen::Base::Collection::HashMap* pHashMap)
-                : operation(operation), pArg(pHashMap) {  }
-
-               Tizen::Base::String operation;
-               Tizen::Base::Collection::HashMap* pArg;
-       };
-
-       Tizen::App::AppId __appId;
-       bool __isWaitingResult;
-       int __ipcClientId;
-       _ConnectionState __connectionState;
-       Tizen::Base::Collection::HashMapT<Tizen::Base::String, _AppWidgetContext*> __appWidgetContextList;
-       Tizen::Base::Collection::ArrayListT<PendingEvent*>* __pPendingEventList;
-};
-
-
 class _AppWidgetPopupContext;
 
 /**
@@ -133,20 +67,19 @@ class _AppWidgetContext
        , public Tizen::Base::Object
 {
 public:
-       _AppWidgetContext(_AppContext* pAppContext, const Tizen::Base::String& userInfo, 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& instanceId, const Tizen::Base::String& providerId, int width, int height, const Tizen::Base::String& userInfo, int period, int priority);
        virtual ~_AppWidgetContext(void);
 
        // handle dynamic box
        void OnAdded(void);
        void OnUpdate(const Tizen::Base::String& argument);
+       result OnUpdateAsync(const Tizen::Base::String& argument);
        void OnResize(int width, int height);
        result OnRemoved(bool isTriggeredByViewer = true);
        // dynamic box state
        void OnForeground(void);
        void OnBackground(void);
 
-       result RequestUpdate(const Tizen::Base::String& argument);
-
        // handle request from dynamic box
        int AcquireRemoteBuffer(int w, int h) const;
        result SyncRemoteBuffer(int width, int height);
@@ -185,7 +118,6 @@ private:
        virtual void OnTouchEventReceived(buffer_event event, double timestamp, double x, double y);
        virtual void OnTimerExpired(Tizen::Base::Runtime::Timer& timer);
 
-       void SetForeground(bool forground);
        void SetWidth(int width);
        void SetHeight(int height);
        int GetPeriod(void) const;
@@ -207,21 +139,22 @@ private:
                double  y;
        };
 
-       mutable bool __isRemoteBufferProxyCreated;
-       bool __hasPendingRequest;
-       bool __isForeground;
+       const Tizen::Base::String __instanceId;
+       const Tizen::Base::String __providerId;
+       const Tizen::Base::String __appId;
+       const Tizen::Base::String __providerName;
+       const Tizen::Base::String __userInfo;
+
        int __width;
        int __height;
-       int __priority;
-       int __ipcClientId;
+       const int __priority;
        const int __updateMillis;
-       long long __lastUpdatedTime;
 
-       const Tizen::Base::String __userInfo;
-       const Tizen::Base::String __providerId;
-       const Tizen::Base::String __instanceId;
-       Tizen::Base::String __appId;//TODO: const
-       Tizen::Base::String __providerName;//TODO: const
+       int __ipcClientId;
+       bool __isForeground;
+       mutable bool __isRemoteBufferProxyCreated;
+       long long __lastUpdatedTime;
+       bool __hasPendingRequest;
        Tizen::Base::String __pendingArgument;
        Tizen::Base::Runtime::Timer __updateTimer;
 
index 467a24aa163a2a5512decab47e76fa9eabfa70da..c6db66e09a0f4ef02b481cd705e12009a5185222 100644 (file)
@@ -55,7 +55,10 @@ public:
        void OnUserEventReceivedN(RequestId reqId, Tizen::Base::Collection::IList* pArgs);
 
 private:
+       AppWidgetManagerService(void);
+       virtual ~AppWidgetManagerService(void);
        result Construct(const char* pServiceIdForCoreDaemon);
+
        result InitializeCoreDaemonEventReceiver(const char* pServiceIdForCoreDaemon);
        result DeinitializeCoreDaemonEventReceiver(void);
 
@@ -76,22 +79,22 @@ private:
        static int OnAppWidgetPeriodChanged(struct event_arg *arg, void* data);
        static int OnAppWidgetRecreate(struct event_arg *arg, void* data);
 
-       // stub implementations
+       // stub implementations(request for app)
        virtual result RequestUpdate(const Tizen::App::AppId& appId, const Tizen::Base::String& providerName, const Tizen::Base::String& argument) const;
        virtual result RequestUpdateInstance(const Tizen::App::AppId& appId, const Tizen::Base::String& instanceId, const Tizen::Base::String& argument);
+
+       // stub implementations(request for buffer)
        virtual result AcquireRemoteBuffer(const Tizen::App::AppId& appId, const Tizen::Base::String& instanceId, int w, int h, int& bufferId);
        virtual result AcquireRemoteBufferForPD(const Tizen::App::AppId& appId, const Tizen::Base::String& instanceId, int w, int h, int& bufferId);
        virtual result SyncRemoteBuffer(const Tizen::App::AppId& appId, const Tizen::Base::String& instanceId, int width, int height);
        virtual result SyncRemoteBufferForPD(const Tizen::App::AppId& appId, const Tizen::Base::String& instanceId);
        virtual result ReleaseRemoteBuffer(const Tizen::App::AppId& appId, const Tizen::Base::String& instanceId);
        virtual result ReleaseRemoteBufferForPD(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);
 
-       // internal functions
-       AppWidgetManagerService(void);
-       virtual ~AppWidgetManagerService(void);
+       // stub implementations(response)
+       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);
 
        // _IIpcServerEventListener
        virtual void OnIpcClientConnected(const Tizen::Io::_IpcServer& server, int clientId);
@@ -102,12 +105,8 @@ private:
 
        // helpers
        _AppWidgetContext* FindAppWidget(const Tizen::App::AppId& appId, const Tizen::Base::String& instanceId) const;
-       int UpdateAppWidgetsByProviderId(const Tizen::Base::String& providerId);
-//     result RequestPendingEvent(void);
-
        void StartPingTimer(void);
        virtual void OnTimerExpired(Tizen::Base::Runtime::Timer& timer);
-       static Tizen::App::AppId ExtractAppId(const Tizen::Base::String& providerId);
        result RequestUpdateAllSuspened(void) const;
 
 private:
@@ -117,6 +116,13 @@ private:
        Tizen::Base::Runtime::Timer __pingTimer;
 };     // class AppWidgetManagerService
 
+class _AppWidgetHelper
+{
+public:
+       static Tizen::App::AppId ExtractAppId(const Tizen::Base::String& providerId);
+       static Tizen::Base::String ExtractProviderName(const Tizen::Base::String& providerId);
+}; //AppWidgetHelper
+
 }}} // Tizen::Shell::App
 
 #endif // _FSHELL_INTERNAL_APPWIDGET_MANAGER_SERVICE_H_
index df3411dfe9bdbaea3701bbb64926721a4a705611..5523a45db6b534196b06fd822b9dbb2318396b11 100644 (file)
@@ -75,10 +75,10 @@ protected:
        virtual result SyncRemoteBufferForPD(const Tizen::App::AppId& appId, const Tizen::Base::String& instanceId) = 0;
        virtual result ReleaseRemoteBuffer(const Tizen::App::AppId& appId, const Tizen::Base::String& instanceId) = 0;
        virtual result ReleaseRemoteBufferForPD(const Tizen::App::AppId& appId, const Tizen::Base::String& instanceId) = 0;
+       virtual result SendAccessStatus(const Tizen::App::AppId& appId, const Tizen::Base::String& instanceId, int accessStatus) = 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;
 
        // _IIpcServerEventListener
        virtual void OnIpcServerStarted(const Tizen::Io::_IpcServer& server);
index 1b32ba046b8fa8d969b26a9d278113d14f44a599..749596d640645b7f7535ff883c3f20cdd8bbc9a5 100644 (file)
@@ -58,9 +58,9 @@ private:
        result Release(void);
 
 private:
-       target_type __type;
-       Tizen::Base::String __providerId;
-       Tizen::Base::String __instanceId;
+       const target_type __type;
+       const Tizen::Base::String __providerId;
+       const Tizen::Base::String __instanceId;
        void* __buffer;
        struct livebox_buffer* __buffer_info;
        _IAppWidgetRemoteBufferEventListener* __pListener;
diff --git a/src/FShell_AppContext.cpp b/src/FShell_AppContext.cpp
new file mode 100644 (file)
index 0000000..fc03aa1
--- /dev/null
@@ -0,0 +1,336 @@
+//
+// Copyright (c) 2012-2013 Samsung Electronics Co., Ltd.
+//
+// Licensed under the Flora License, Version 1.1 (the License);
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://floralicense.org/license/
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+/**
+ * @file       FShell_AppWidgetContext.cpp
+ * @brief      This is the implementation for the _AppWidgetContext class.
+ */
+
+#include <provider.h>
+#include <unique_ptr.h>
+#include <FBase.h>
+#include <FBaseSysLog.h>
+#include <FBaseColHashMap.h>
+#include <FAppApp.h>
+#include <FBaseComparerT.h>
+#include <FApp_AppManagerImpl.h>
+#include "FShell_AppWidgetContext.h"
+#include "FShell_AppWidgetContextHelper.h"
+#include "FShell_TemplateUtil.h"
+
+namespace Tizen { namespace Shell  { namespace App
+{
+
+using namespace std;
+using namespace Tizen::App;
+using namespace Tizen::Base;
+using namespace Tizen::Base::Collection;
+using namespace Tizen::System;
+
+static const wchar_t INVALID_INSTANCE[] = L"file://invalid instance id";
+
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+// _AppContext class
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+_AppContext::_AppContext(const AppId& appId)
+       :__appId(appId)
+       ,__isWaitingResult(false)
+       ,__ipcClientId(0)
+       ,__connectionState(CONNECTION_STATE_NONE)
+       ,__pPendingEventList(null)
+{
+
+       __pPendingEventList = new (nothrow) ArrayListT<PendingEvent*>();
+       SysTryReturnVoidResult(NID_SHELL, __pPendingEventList, E_OUT_OF_MEMORY, "");
+
+       result r = __pPendingEventList->Construct();
+       SysTryReturnVoidResult(NID_SHELL, !IsFailed(r), E_SYSTEM, "Failed to execute Construct.");
+
+       static __HashMapDefaultProviderT <String> strHashCodeProvider;
+       static ComparerT <String> strComparer;
+       r = __appWidgetContextList.Construct(0, 0, strHashCodeProvider, strComparer);
+       SysTryReturnVoidResult(NID_SHELL, !IsFailed(r), E_SYSTEM, "Failed to execute Construct.");
+}
+
+_AppContext::~_AppContext(void)
+{
+       if (__pPendingEventList)
+       {
+               for (int i = 0; i < __pPendingEventList->GetCount(); i++)
+               {
+                       PendingEvent* pEvent = null;
+                       __pPendingEventList->GetAt(i, pEvent);
+                       delete pEvent;
+               }
+               __pPendingEventList->RemoveAll();
+               delete __pPendingEventList;
+       }
+}
+
+_AppWidgetContext*
+_AppContext::AddAppWidget(const Tizen::Base::String& userInfo, const Tizen::Base::String& providerId, const Tizen::Base::String& instanceId, int width, int height, int period, int priority)
+{
+       _AppWidgetContext* pAppWidgetContext = new (std::nothrow)_AppWidgetContext(this, instanceId, providerId, width, height, userInfo, period, priority);
+       SysTryReturn(NID_SHELL, pAppWidgetContext, 0, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY]");
+
+       __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
+_AppContext::RemoveAppWidget(const Tizen::Base::String& instanceId, bool isTriggeredByViewer)
+{
+       _AppWidgetContext* pAppWidgetContext = FindAppWidget(instanceId);
+       SysTryReturnResult(NID_SHELL, pAppWidgetContext, E_OBJ_NOT_FOUND, "[E_OBJ_NOT_FOUND]");
+
+       __appWidgetContextList.Remove(instanceId);
+
+       result r = pAppWidgetContext->OnRemoved(isTriggeredByViewer);
+       SysTryLog(NID_SHELL, !IsFailed(r), "Failed to execute OnRemoved.");
+
+       delete pAppWidgetContext;
+
+    SysLog(NID_SHELL, "AppWidget(%ls, %ls) is removed. remain count(%d)", pAppWidgetContext->GetProviderId().GetPointer(), instanceId.GetPointer(), __appWidgetContextList.GetCount());
+       return E_SUCCESS;
+}
+
+_ConnectionState
+_AppContext::GetConnectionState(void) const
+{
+       return __connectionState;
+}
+
+void
+_AppContext::SetConnectionState(_ConnectionState state)
+{
+       __connectionState = state;
+}
+
+Tizen::App::AppId
+_AppContext::GetAppId(void) const
+{
+       return __appId;
+}
+
+int
+_AppContext::GetClientId(void) const
+{
+       return __ipcClientId;
+}
+
+void
+_AppContext::OnIpcConnected(int clientId)
+{
+       __ipcClientId = clientId;
+       SetConnectionState(CONNECTION_STATE_CONNECTED);
+}
+
+void
+_AppContext::OnIpcDisconnected(void)
+{
+       __ipcClientId = -1;
+       SetConnectionState(CONNECTION_STATE_DISCONNECTED);
+
+       unique_ptr< IMapEnumeratorT<String, _AppWidgetContext*> > pAppWidgetContextEnum(__appWidgetContextList.GetMapEnumeratorN());
+       SysTryReturnVoidResult(NID_SHELL, pAppWidgetContextEnum, E_SYSTEM, "");
+
+       _AppWidgetContext* pAppWidgetContext = null;
+       while (pAppWidgetContextEnum->MoveNext() == E_SUCCESS)
+       {
+               pAppWidgetContextEnum->GetValue(pAppWidgetContext);
+               if (pAppWidgetContext)
+               {
+                       pAppWidgetContext->OnDisconnected();
+               }
+       }
+}
+
+void
+_AppContext::SetWaitingStatus(bool status)
+{
+       __isWaitingResult = status;
+}
+
+bool
+_AppContext::GetWaitingStatus(void) const
+{
+       return __isWaitingResult;
+}
+
+result
+_AppContext::SendRequestToApp(const AppId& providerAppId, const String& operation, HashMap* pArgs)
+{
+       result r = E_SUCCESS;
+
+       if (GetConnectionState() == CONNECTION_STATE_NONE || GetConnectionState() == CONNECTION_STATE_DISCONNECTED)
+       {
+               SysLog(NID_SHELL, "The application is not running.");
+               result r = _AppWidgetRequestHelper::SendAppControlRequest(providerAppId, operation, pArgs);
+               SysTryReturn(NID_SHELL, !IsFailed(r), r, r, "[%s] Failed to SendRequestToApp", GetErrorMessage(r));
+
+               SetWaitingStatus(true);
+               SetConnectionState(CONNECTION_STATE_CONNECTING);
+       }
+       else
+       {
+               if (GetConnectionState() == CONNECTION_STATE_CONNECTING || GetWaitingStatus() == true)
+               {
+                       SysLog(NID_SHELL, "The application is running but IPC is not connected yet.");
+                       __pPendingEventList->Add(new (nothrow) PendingEvent(operation, pArgs));
+               }
+               else
+               {
+                       SysLog(NID_SHELL, "The application is running and IPC is connected.");
+                       r  = _AppWidgetRequestHelper::SendIpcRequest(GetClientId(), operation, pArgs);
+
+                       pArgs->RemoveAll(true);
+                       delete pArgs;
+                       SetWaitingStatus(true);
+               }
+       }
+
+       return E_SUCCESS;
+}
+
+result
+_AppContext::SendPendingEvent(void)
+{
+       SetWaitingStatus(false);
+       TryReturn(__pPendingEventList->GetCount() > 0, E_DATA_NOT_FOUND, "This context has no pending event. Please find next pending event context.");
+
+       PendingEvent* pEvent = null;
+       __pPendingEventList->GetAt(0, pEvent);
+       __pPendingEventList->RemoveAt(0);
+       SysLog(NID_SHELL, "(%d) Remains in __pPendingEventList.", __pPendingEventList->GetCount());
+
+       result r = _AppWidgetRequestHelper::SendIpcRequest(GetClientId(), pEvent->operation, pEvent->pArg);
+       delete pEvent;
+       SysTryReturnResult(NID_SHELL, !IsFailed(r), E_SYSTEM, "SendIpcRequest failed.");
+
+       return E_SUCCESS;
+}
+
+_AppWidgetContext*
+_AppContext::FindAppWidget(const String& instanceId) const
+{
+       _AppWidgetContext* pAppWidgetContext = null;
+
+       if (instanceId == INVALID_INSTANCE)
+       {
+               pAppWidgetContext = FindInvalidAppWidget();
+       }
+       else
+       {
+               result r = __appWidgetContextList.GetValue(instanceId, pAppWidgetContext);
+               SysTryReturn(NID_SHELL, !IsFailed(r), null, E_OBJ_NOT_FOUND, "instanceId(%ls) is not found", instanceId.GetPointer() );
+       }
+       return pAppWidgetContext;
+}
+
+_AppWidgetContext*
+_AppContext::FindInvalidAppWidget(void) const
+{
+       SysTryReturn(NID_SHELL, GetConnectionState() == CONNECTION_STATE_NONE, null, E_INVALID_STATE, "[E_INVALID_STATE] connectionState(%d)", GetConnectionState());
+
+       _AppWidgetContext* pAppWidgetContext = null;
+       unique_ptr< IMapEnumeratorT<String, _AppWidgetContext*> > pAppWidgetContextEnum(__appWidgetContextList.GetMapEnumeratorN());
+       SysTryReturn(NID_SHELL, pAppWidgetContextEnum, null, E_SYSTEM, "");
+
+       while (pAppWidgetContextEnum->MoveNext() == E_SUCCESS)
+       {
+               pAppWidgetContextEnum->GetValue(pAppWidgetContext);
+               if (pAppWidgetContext)
+               {
+                       //TODO: check whether this app context has only one instance of _AppWidgetContext
+                       return pAppWidgetContext;
+               }
+       }
+       return null;
+}
+
+int
+_AppContext::GetProviderCount(const String& appId) const
+{
+       return __appWidgetContextList.GetCount();
+}
+
+result
+_AppContext::RequestUpdate(const Tizen::Base::String& providerName, const Tizen::Base::String& argument) const
+{
+       bool found = false;
+       bool requestToAll = providerName.IsEmpty();
+
+       unique_ptr< IMapEnumeratorT<String, _AppWidgetContext*> > pAppWidgetContextEnum(__appWidgetContextList.GetMapEnumeratorN());
+       SysTryReturnResult(NID_SHELL, pAppWidgetContextEnum, E_SYSTEM, "Failed to invoke __appWidgetContextList.GetMapEnumeratorN()");
+
+       while (pAppWidgetContextEnum->MoveNext() == E_SUCCESS)
+       {
+               _AppWidgetContext* pAppWidgetContext = null;
+               pAppWidgetContextEnum->GetValue(pAppWidgetContext);
+
+               if (pAppWidgetContext->GetProviderName() == providerName || requestToAll == true)
+               {
+                       pAppWidgetContext->OnUpdateAsync(argument);
+                       found = true;
+               }
+       }
+
+       SysLog(NID_SHELL, "Exit.");
+       return (found) ? E_SUCCESS : E_OBJ_NOT_FOUND;
+}
+
+result
+_AppContext::OnAppWidgetBackgroundAll(void) const
+{
+       unique_ptr< IMapEnumeratorT<String, _AppWidgetContext*> > pAppWidgetContextEnum(__appWidgetContextList.GetMapEnumeratorN());
+       SysTryReturnResult(NID_SHELL, pAppWidgetContextEnum, E_SYSTEM, "Failed to invoke GetMapEnumeratorN()");
+
+       while (pAppWidgetContextEnum->MoveNext() == E_SUCCESS)
+       {
+               _AppWidgetContext* pAppWidgetContext = null;
+               pAppWidgetContextEnum->GetValue(pAppWidgetContext);
+               if (pAppWidgetContext)
+               {
+                       pAppWidgetContext->OnBackground();
+               }
+       }
+
+       return E_SUCCESS;
+}
+
+result
+_AppContext::OnAppWidgetForegroundAll(void) const
+{
+       unique_ptr< IMapEnumeratorT<String, _AppWidgetContext*> > pAppWidgetContextEnum(__appWidgetContextList.GetMapEnumeratorN());
+       SysTryReturnResult(NID_SHELL, pAppWidgetContextEnum, E_SYSTEM, "Failed to invoke GetMapEnumeratorN()");
+
+       while (pAppWidgetContextEnum->MoveNext() == E_SUCCESS)
+       {
+               _AppWidgetContext* pAppWidgetContext = null;
+               pAppWidgetContextEnum->GetValue(pAppWidgetContext);
+               if (pAppWidgetContext)
+               {
+                       pAppWidgetContext->OnForeground();
+               }
+       }
+
+       return E_SUCCESS;
+}
+
+}}}  // Tizen::Shell::App
index 021b64fbf32cf63312a036c84065187015eba0ff..23baf022a8547f90a0f15f9110eca186d6043759 100644 (file)
 #include <unique_ptr.h>
 
 #include <FBase.h>
-//#include <FBaseColIList.h>
 #include <FBaseSysLog.h>
-#include <FBaseInteger.h>
-#include <FBaseDouble.h>
-#include <FBaseColHashMap.h>
-#include <FBaseColAllElementsDeleter.h>
 #include <FSysSystemTime.h>
 #include <FAppApp.h>
-#include <FAppAppManager.h>
-#include <FBaseComparerT.h>
-
 #include <FBase_StringConverter.h>
+#include <FApp_AppManagerImpl.h>
 #include "FShell_AppWidgetManagerImpl.h"
 #include "FShell_AppWidgetManagerService.h"
 #include "FShell_AppWidgetPopupContext.h"
 #include "FShell_AppWidgetContext.h"
 #include "FShell_AppWidgetContextHelper.h"
 #include "FShell_AppWidgetRemoteBuffer.h"
-#include "FShell_TemplateUtil.h"
 
 namespace Tizen { namespace Shell  { namespace App
 {
@@ -73,325 +65,27 @@ const wchar_t APPWIDGET_ON_TOUCH[] = L"http://tizen.org/appcontrol/appwidget/tou
 
 const int UPDATE_PERIOD_MSEC_MIN = 1800000;    // 30min
 
-static const wchar_t INVALID_INSTANCE[] = L"file://invalid instance id";
-
-//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-// _AppContext class
-//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-_AppContext::_AppContext(const AppId& appId)
-       :__appId(appId)
-       ,__isWaitingResult(false)
-       ,__ipcClientId(0)
-       ,__connectionState(CONNECTION_STATE_NONE)
-       ,__pPendingEventList(null)
-{
-
-       __pPendingEventList = new (nothrow) ArrayListT<PendingEvent*>();
-       SysTryReturnVoidResult(NID_SHELL, __pPendingEventList, E_OUT_OF_MEMORY, "");
-
-       result r = __pPendingEventList->Construct();
-       SysTryReturnVoidResult(NID_SHELL, !IsFailed(r), E_SYSTEM, "Failed to execute Construct.");
-
-       static __HashMapDefaultProviderT <String> strHashCodeProvider;
-       static ComparerT <String> strComparer;
-       r = __appWidgetContextList.Construct(0, 0, strHashCodeProvider, strComparer);
-       SysTryReturnVoidResult(NID_SHELL, !IsFailed(r), E_SYSTEM, "Failed to execute Construct.");
-}
-
-_AppContext::~_AppContext(void)
-{
-       if (__pPendingEventList)
-       {
-               for (int i = 0; i < __pPendingEventList->GetCount(); i++)
-               {
-                       PendingEvent* pEvent = null;
-                       __pPendingEventList->GetAt(i, pEvent);
-                       delete pEvent;
-               }
-               __pPendingEventList->RemoveAll();
-               delete __pPendingEventList;
-       }
-}
-
-_AppWidgetContext*
-_AppContext::AddAppWidget(const Tizen::Base::String& userInfo, const Tizen::Base::String& providerId, const Tizen::Base::String& instanceId, int width, int height, int period, int priority)
-{
-       _AppWidgetContext* pAppWidgetContext = new (std::nothrow)_AppWidgetContext(this, userInfo, providerId, instanceId, width, height, period, priority);
-       SysTryReturn(NID_SHELL, pAppWidgetContext, 0, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY]");
-
-       __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
-_AppContext::RemoveAppWidget(const Tizen::Base::String& instanceId, bool isTriggeredByViewer)
-{
-       _AppWidgetContext* pAppWidgetContext = FindAppWidget(instanceId);
-       SysTryReturnResult(NID_SHELL, pAppWidgetContext, E_OBJ_NOT_FOUND, "[E_OBJ_NOT_FOUND]");
-
-       __appWidgetContextList.Remove(instanceId);
-
-       result r = pAppWidgetContext->OnRemoved(isTriggeredByViewer);
-       SysTryLog(NID_SHELL, !IsFailed(r), "Failed to execute OnRemoved.");
-
-       delete pAppWidgetContext;
-
-    SysLog(NID_SHELL, "AppWidget(%ls, %ls) is removed. remain count(%d)", pAppWidgetContext->GetProviderId().GetPointer(), instanceId.GetPointer(), __appWidgetContextList.GetCount());
-       return E_SUCCESS;
-}
-
-_ConnectionState
-_AppContext::GetConnectionState(void) const
-{
-       return __connectionState;
-}
-
-void
-_AppContext::SetConnectionState(_ConnectionState state)
-{
-       __connectionState = state;
-}
-
-Tizen::App::AppId
-_AppContext::GetAppId(void) const
-{
-       return __appId;
-}
-
-int
-_AppContext::GetClientId(void) const
-{
-       return __ipcClientId;
-}
-
-void
-_AppContext::OnIpcConnected(int clientId)
-{
-       __ipcClientId = clientId;
-       SetConnectionState(CONNECTION_STATE_CONNECTED);
-}
-
-void
-_AppContext::OnIpcDisconnected(void)
-{
-       __ipcClientId = -1;
-       SetConnectionState(CONNECTION_STATE_DISCONNECTED);
-
-       unique_ptr< IMapEnumeratorT<String, _AppWidgetContext*> > pAppWidgetContextEnum(__appWidgetContextList.GetMapEnumeratorN());
-       SysTryReturnVoidResult(NID_SHELL, pAppWidgetContextEnum, E_SYSTEM, "");
-
-       _AppWidgetContext* pAppWidgetContext = null;
-       while (pAppWidgetContextEnum->MoveNext() == E_SUCCESS)
-       {
-               pAppWidgetContextEnum->GetValue(pAppWidgetContext);
-               if (pAppWidgetContext)
-               {
-                       pAppWidgetContext->OnDisconnected();
-               }
-       }
-}
-
-void
-_AppContext::SetWaitingStatus(bool status)
-{
-       __isWaitingResult = status;
-}
-
-bool
-_AppContext::GetWaitingStatus(void) const
-{
-       return __isWaitingResult;
-}
-
-result
-_AppContext::SendRequestToApp(const AppId& providerAppId, const String& operation, HashMap* pArgs)
-{
-       result r = E_SUCCESS;
-
-       if (GetConnectionState() == CONNECTION_STATE_NONE || GetConnectionState() == CONNECTION_STATE_DISCONNECTED)
-       {
-               SysLog(NID_SHELL, "The application is not running.");
-               result r = _AppWidgetRequestHelper::SendAppControlRequest(providerAppId, operation, pArgs);
-               SysTryReturn(NID_SHELL, !IsFailed(r), r, r, "[%s] Failed to SendRequestToApp", GetErrorMessage(r));
-
-               SetWaitingStatus(true);
-               SetConnectionState(CONNECTION_STATE_CONNECTING);
-       }
-       else
-       {
-               if (GetConnectionState() == CONNECTION_STATE_CONNECTING || GetWaitingStatus() == true)
-               {
-                       SysLog(NID_SHELL, "The application is running but IPC is not connected yet.");
-                       __pPendingEventList->Add(new (nothrow) PendingEvent(operation, pArgs));
-               }
-               else
-               {
-                       SysLog(NID_SHELL, "The application is running and IPC is connected.");
-                       r  = _AppWidgetRequestHelper::SendIpcRequest(GetClientId(), operation, pArgs);
-
-                       pArgs->RemoveAll(true);
-                       delete pArgs;
-                       SetWaitingStatus(true);
-               }
-       }
-
-       return E_SUCCESS;
-}
-
-result
-_AppContext::SendPendingEvent(void)
-{
-       SetWaitingStatus(false);
-       TryReturn(__pPendingEventList->GetCount() > 0, E_DATA_NOT_FOUND, "This context has no pending event. Please find next pending event context.");
-
-       PendingEvent* pEvent = null;
-       __pPendingEventList->GetAt(0, pEvent);
-       SysTryReturnResult(NID_SHELL, pEvent != null, E_SYSTEM, "__pPendingEventList has (%d) items, but failed to GetAt(0)", __pPendingEventList->GetCount());
-
-       __pPendingEventList->RemoveAt(0);
-       SysLog(NID_SHELL, "(%d) Remains in __pPendingEventList.", __pPendingEventList->GetCount());
-
-       result r = _AppWidgetRequestHelper::SendIpcRequest(GetClientId(), pEvent->operation, pEvent->pArg);
-       delete pEvent;
-       SysTryReturnResult(NID_SHELL, !IsFailed(r), E_SYSTEM, "SendIpcRequest failed.");
-
-       return E_SUCCESS;
-}
-
-_AppWidgetContext*
-_AppContext::FindAppWidget(const String& instanceId) const
-{
-       _AppWidgetContext* pAppWidgetContext = null;
-
-       if (instanceId == INVALID_INSTANCE)
-       {
-               pAppWidgetContext = FindInvalidAppWidget();
-       }
-       else
-       {
-               result r = __appWidgetContextList.GetValue(instanceId, pAppWidgetContext);
-               SysTryReturn(NID_SHELL, !IsFailed(r), null, E_OBJ_NOT_FOUND, "instanceId(%ls) is not found", instanceId.GetPointer() );
-       }
-       return pAppWidgetContext;
-}
-
-_AppWidgetContext*
-_AppContext::FindInvalidAppWidget(void) const
-{
-       SysTryReturn(NID_SHELL, GetConnectionState() == CONNECTION_STATE_NONE, null, E_INVALID_STATE, "[E_INVALID_STATE] connectionState(%d)", GetConnectionState());
-
-       _AppWidgetContext* pAppWidgetContext = null;
-       unique_ptr< IMapEnumeratorT<String, _AppWidgetContext*> > pAppWidgetContextEnum(__appWidgetContextList.GetMapEnumeratorN());
-       SysTryReturn(NID_SHELL, pAppWidgetContextEnum, null, E_SYSTEM, "");
-
-       while (pAppWidgetContextEnum->MoveNext() == E_SUCCESS)
-       {
-               pAppWidgetContextEnum->GetValue(pAppWidgetContext);
-               if (pAppWidgetContext)
-               {
-                       //TODO: check whether this app context has only one instance of _AppWidgetContext
-                       return pAppWidgetContext;
-               }
-       }
-       return null;
-}
-
-int
-_AppContext::GetProviderCount(const String& appId) const
-{
-       return __appWidgetContextList.GetCount();
-}
-
-result
-_AppContext::RequestUpdate(const Tizen::Base::String& providerName, const Tizen::Base::String& argument) const
-{
-       bool found = false;
-       bool requestToAll = providerName.IsEmpty();
-
-       unique_ptr< IMapEnumeratorT<String, _AppWidgetContext*> > pAppWidgetContextEnum(__appWidgetContextList.GetMapEnumeratorN());
-       SysTryReturnResult(NID_SHELL, pAppWidgetContextEnum, E_SYSTEM, "Failed to invoke __appWidgetContextList.GetMapEnumeratorN()");
 
-       while (pAppWidgetContextEnum->MoveNext() == E_SUCCESS)
-       {
-               _AppWidgetContext* pAppWidgetContext = null;
-               pAppWidgetContextEnum->GetValue(pAppWidgetContext);
-
-               if (pAppWidgetContext->GetProviderName() == providerName || requestToAll == true)
-               {
-                       pAppWidgetContext->RequestUpdate(argument);
-                       found = true;
-               }
-       }
-
-       SysLog(NID_SHELL, "Exit.");
-       return (found) ? E_SUCCESS : E_OBJ_NOT_FOUND;
-}
-
-result
-_AppContext::OnAppWidgetBackgroundAll(void) const
-{
-       unique_ptr< IMapEnumeratorT<String, _AppWidgetContext*> > pAppWidgetContextEnum(__appWidgetContextList.GetMapEnumeratorN());
-       SysTryReturnResult(NID_SHELL, pAppWidgetContextEnum, E_SYSTEM, "Failed to invoke GetMapEnumeratorN()");
-
-       while (pAppWidgetContextEnum->MoveNext() == E_SUCCESS)
-       {
-               _AppWidgetContext* pAppWidgetContext = null;
-               pAppWidgetContextEnum->GetValue(pAppWidgetContext);
-               if (pAppWidgetContext)
-               {
-                       pAppWidgetContext->OnBackground();
-               }
-       }
-
-       return E_SUCCESS;
-}
-
-result
-_AppContext::OnAppWidgetForegroundAll(void) const
-{
-       unique_ptr< IMapEnumeratorT<String, _AppWidgetContext*> > pAppWidgetContextEnum(__appWidgetContextList.GetMapEnumeratorN());
-       SysTryReturnResult(NID_SHELL, pAppWidgetContextEnum, E_SYSTEM, "Failed to invoke GetMapEnumeratorN()");
-
-       while (pAppWidgetContextEnum->MoveNext() == E_SUCCESS)
-       {
-               _AppWidgetContext* pAppWidgetContext = null;
-               pAppWidgetContextEnum->GetValue(pAppWidgetContext);
-               if (pAppWidgetContext)
-               {
-                       pAppWidgetContext->OnForeground();
-               }
-       }
-
-       return E_SUCCESS;
-}
-
-
-
-//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-// _AppWidgetContext class
-//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-_AppWidgetContext::_AppWidgetContext(_AppContext* pAppContext, const String& userInfo, const String& providerId, const String& instanceId, int width, int height, int period, int priority)
-       :__isRemoteBufferProxyCreated(false)
-       ,__hasPendingRequest(false)
-       ,__isForeground(true)
+_AppWidgetContext::_AppWidgetContext(_AppContext* pAppContext, const String& instanceId, const String& providerId, int width, int height, const Tizen::Base::String& userInfo, int period, int priority)
+       :__instanceId(instanceId)
+       ,__providerId(providerId)
+       ,__appId(_AppWidgetHelper::ExtractAppId(providerId))
+       ,__providerName(_AppWidgetHelper::ExtractProviderName(providerId))
+       ,__userInfo(userInfo)
        ,__width(width)
        ,__height(height)
        ,__priority(priority)
-       ,__ipcClientId(-1)
        ,__updateMillis( (period > UPDATE_PERIOD_MSEC_MIN) ? period : UPDATE_PERIOD_MSEC_MIN )
+       ,__ipcClientId(-1)
+       ,__isForeground(true)
+       ,__isRemoteBufferProxyCreated(false)
        ,__lastUpdatedTime(0)
-       ,__userInfo(userInfo)
-       ,__providerId(providerId)
-       ,__instanceId(instanceId)
+       ,__hasPendingRequest(false)
        ,__pAppContext(pAppContext)
        ,__pAppWidgetPopup(null)
        ,__pAppWidgetRemoteBuffer(null)
        ,__pPendingTouchEventList(null)
 {
-       _AppWidgetManagerImpl::ExtractAppIdAndProviderName(providerId, __appId, __providerName);//TODO: extract this line to outside
        SysSecureLog(NID_SHELL, "appId(%ls), providerId(%ls), instanceId(%ls), width(%d), height(%d), priority(%d), period(%d)", __appId.GetPointer(), __providerId.GetPointer(), __instanceId.GetPointer(), __width, __height, __priority, __updateMillis);
 
        // for updating period
@@ -486,19 +180,7 @@ _AppWidgetContext::OnUpdate(const String& argument)
        SysLog(NID_SHELL, "argument(%ls)", argument.GetPointer());
        ClearLastResult();
 
-       // Queueing the pointer of background context.
-       if (!this->IsForeground())
-       {
-               // Saving the data
-               if (!argument.IsEmpty())
-               {
-                       __pendingArgument = argument;
-               }
-
-               __hasPendingRequest = true;
-               SysLog(NID_SHELL, "Update is requested but the %ls is background.", (this->GetAppId()).GetPointer());
-       }
-       else
+       if (this->IsForeground())
        {
                result r = this->SendUpdateRequest(GetWidth(), GetHeight(), argument);
                SysTryLog(NID_SHELL, !IsFailed(r), "Failed to execute SendUpdateRequest.");
@@ -509,21 +191,21 @@ _AppWidgetContext::OnUpdate(const String& argument)
                __hasPendingRequest = false;
                __pendingArgument.Clear();
        }
-}
-
-void
-_AppWidgetContext::OnResize(int width, int height)
-{
-       SysSecureLog(NID_SHELL, "appId(%ls), instanceId(%ls), width(%d), height(%d), priority(%d)", GetProviderId().GetPointer(), GetInstanceId().GetPointer(), GetWidth(), GetHeight(), GetPriority());
-
-       SetWidth(width);
-       SetHeight(height);
+       else
+       {
+               // Queueing the pointer of background context.
+               if (!argument.IsEmpty())
+               {
+                       __pendingArgument = argument;
+               }
 
-       SendResizeRequest(width, height);
+               __hasPendingRequest = true;
+               SysLog(NID_SHELL, "Update is requested but the %ls is background.", (this->GetProviderId()).GetPointer());
+       }
 }
 
 result
-_AppWidgetContext::RequestUpdate(const String& argument)
+_AppWidgetContext::OnUpdateAsync(const String& argument)
 {
        ArrayList* pArray = new (std::nothrow) ArrayList();
        SysTryReturnResult(NID_SHELL, pArray, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY]");
@@ -539,6 +221,17 @@ _AppWidgetContext::RequestUpdate(const String& argument)
        return E_SUCCESS;
 }
 
+void
+_AppWidgetContext::OnResize(int width, int height)
+{
+       SysSecureLog(NID_SHELL, "appId(%ls), instanceId(%ls), width(%d), height(%d), priority(%d)", GetProviderId().GetPointer(), GetInstanceId().GetPointer(), GetWidth(), GetHeight(), GetPriority());
+
+       SetWidth(width);
+       SetHeight(height);
+
+       SendResizeRequest(width, height);
+}
+
 void
 _AppWidgetContext::OnForeground(void)
 {
@@ -548,12 +241,12 @@ _AppWidgetContext::OnForeground(void)
                return;
        }
 
-       this->SetForeground(true);
+       __isForeground = true;
 
        if (__hasPendingRequest == true)
        {
                SysLog(NID_SHELL, "There is pending update request.");
-//             RequestUpdate(__pendingArgument);
+//             OnUpdateAsync(__pendingArgument);
                OnUpdate(__pendingArgument);
        }
        else
@@ -561,7 +254,7 @@ _AppWidgetContext::OnForeground(void)
                if (IsUpdatePeriodExpired() == true)
                {
                        SysLog(NID_SHELL, "The period is expired.");
-//                     RequestUpdate(L"");
+//                     OnUpdateAsync(L"");
                        OnUpdate(L"");
                }
        }
@@ -595,7 +288,7 @@ _AppWidgetContext::OnBackground(void)
        }
 
        SysLog(NID_SHELL, "OnBackground");
-       SetForeground(false);
+       __isForeground = false;
 }
 
 void
@@ -614,7 +307,6 @@ _AppWidgetContext::OnPopupDestoyed(void)
 
        if (__pAppWidgetPopup)
        {
-//             __pAppWidgetPopup->OnPopupDestoyed();
                delete __pAppWidgetPopup;
                __pAppWidgetPopup = null;
        }
@@ -679,7 +371,7 @@ _AppWidgetContext::OnTouchEventReceived(buffer_event event, double timestamp, do
        {
                __pPendingTouchEventList->Add(new (nothrow) PendingTouchEvent(event, timestamp, x, y));
 
-               if( AppManager::GetInstance()->IsRunning(this->GetAppId() ) == false ||
+               if( _AppManagerImpl::GetInstance()->IsRunning(this->GetAppId() ) == false ||
                        ( __pAppContext->GetConnectionState() == CONNECTION_STATE_CONNECTED && __isRemoteBufferProxyCreated == false))
                {
                        SysLog(NID_SHELL, "request to start AppControl");
@@ -816,12 +508,6 @@ _AppWidgetContext::GetProviderName(void) const
        return __providerName;
 }
 
-void
-_AppWidgetContext::SetForeground(bool foreground)
-{
-       __isForeground = foreground;
-}
-
 bool
 _AppWidgetContext::IsForeground(void) const
 {
index 7127d35ba9b1c4ac8907c8afd4ef460cde3b2bc3..65fe7ba933e77bccde232abc809ed84ba10108f7 100644 (file)
@@ -36,7 +36,6 @@
 
 #include "FShell_AppWidgetContext.h"
 #include "FShell_AppWidgetPopupContext.h"
-#include "FShell_AppWidgetManagerStub.h"
 #include "FShell_AppWidgetManagerService.h"
 #include "FShell_TemplateUtil.h"
 
@@ -158,18 +157,6 @@ AppWidgetManagerService::OnTimerExpired(Timer& timer)
        provider_send_ping();
 }
 
-AppId
-AppWidgetManagerService::ExtractAppId(const String& providerId)
-{
-       int index = 0;
-       result r = providerId.IndexOf(".", 12, index);//"1234567890._"
-       SysTryReturn(NID_SHELL, !IsFailed(r), L"", E_INVALID_ARG, "[E_INVALID_ARG] Failed to get the index from providerId(%ls).", providerId.GetPointer() );
-
-       String appId;
-       providerId.SubString(0, index, appId);
-       return appId;
-}
-
 _AppWidgetContext*
 AppWidgetManagerService::FindAppWidget(const AppId& appId, const String& instanceId) const
 {
@@ -289,7 +276,7 @@ AppWidgetManagerService::OnAppWidgetUpdate(struct event_arg *arg, void* data)
        }
        else
        {
-               _AppWidgetContext* pAppWidgetContext = AppWidgetManagerService::GetInstance()->FindAppWidget(ExtractAppId(arg->pkgname), arg->id);
+               _AppWidgetContext* pAppWidgetContext = AppWidgetManagerService::GetInstance()->FindAppWidget(_AppWidgetHelper::ExtractAppId(arg->pkgname), arg->id);
                SysSecureTryReturnResult(NID_SHELL, pAppWidgetContext , E_SYSTEM, "pAppWidgetContext is null for providerId(%s), instanceId(%s)", arg->pkgname, arg->id);
 
                pAppWidgetContext->OnUpdate(L"");
@@ -305,7 +292,7 @@ AppWidgetManagerService::OnAppWidgetDestroy(struct event_arg *arg, void* data)
        SysLog(NID_SHELL, "Enter");
 
     _AppContext* pAppContext = null;
-       result r = AppWidgetManagerService::GetInstance()->__appContextList.GetValue(ExtractAppId(arg->pkgname), pAppContext);
+       result r = AppWidgetManagerService::GetInstance()->__appContextList.GetValue(_AppWidgetHelper::ExtractAppId(arg->pkgname), pAppContext);
        SysTryReturn(NID_SHELL, !IsFailed(r), null, E_OBJ_NOT_FOUND, "[E_OBJ_NOT_FOUND]");
 
        pAppContext->RemoveAppWidget(arg->id);
@@ -320,7 +307,7 @@ AppWidgetManagerService::OnAppWidgetPopupCreate(struct event_arg *arg, void* dat
        SysTryReturn (NID_SHELL, arg->type == event_arg::EVENT_PD_CREATE, -EPERM, E_SUCCESS, "invalid argument from master");
        SysSecureLog(NID_SHELL, "providerId(%s), id(%s), x(%d), y(%d), width(%f), height(%f), priority(%d)", arg->pkgname, arg->id, arg->info.pd_create.x, arg->info.pd_create.y, arg->info.pd_create.w, arg->info.pd_create.h);
 
-       _AppWidgetContext* pAppWidgetContext = AppWidgetManagerService::GetInstance()->FindAppWidget(ExtractAppId(arg->pkgname), arg->id);
+       _AppWidgetContext* pAppWidgetContext = AppWidgetManagerService::GetInstance()->FindAppWidget(_AppWidgetHelper::ExtractAppId(arg->pkgname), arg->id);
        SysSecureTryReturnResult(NID_SHELL, pAppWidgetContext , E_SYSTEM, "[E_SYSTEM] pAppWidgetContext is null for providerId(%s), instanceId(%s)", arg->pkgname, arg->id);
 
        pAppWidgetContext->OnPopupCreated(arg->info.pd_create.x, arg->info.pd_create.y, arg->info.pd_create.w, arg->info.pd_create.h);
@@ -332,7 +319,7 @@ AppWidgetManagerService::OnAppWidgetPopupCreate(struct event_arg *arg, void* dat
  AppWidgetManagerService::OnAppWidgetPopupDestroy(struct event_arg *arg, void* data)
 {
        SysTryReturn (NID_SHELL, arg->type == event_arg::EVENT_PD_DESTROY, -EPERM, E_SUCCESS, "invalid argument from master");
-       _AppWidgetContext* pAppWidgetContext = AppWidgetManagerService::GetInstance()->FindAppWidget(ExtractAppId(arg->pkgname), arg->id);
+       _AppWidgetContext* pAppWidgetContext = AppWidgetManagerService::GetInstance()->FindAppWidget(_AppWidgetHelper::ExtractAppId(arg->pkgname), arg->id);
        SysSecureTryReturnResult(NID_SHELL, pAppWidgetContext , E_SYSTEM, "[E_SYSTEM] pAppWidgetContext is null for providerId(%s), instanceId(%s)", arg->pkgname, arg->id);
 
        SysSecureLog(NID_SHELL, "providerId(%s), id(%s)", arg->pkgname, arg->id);
@@ -346,7 +333,7 @@ AppWidgetManagerService::OnAppWidgetBackground(struct event_arg *arg, void* data
 {
         SysTryReturn(NID_SHELL, arg, 0, E_SUCCESS, "arg is null!");
 
-        _AppWidgetContext* pAppWidgetContext = AppWidgetManagerService::GetInstance()->FindAppWidget(ExtractAppId(arg->pkgname), arg->id);
+        _AppWidgetContext* pAppWidgetContext = AppWidgetManagerService::GetInstance()->FindAppWidget(_AppWidgetHelper::ExtractAppId(arg->pkgname), arg->id);
         SysSecureTryReturnResult(NID_SHELL, pAppWidgetContext , 0, "[E_SYSTEM] pAppWidgetContext is null for providerId(%s), instanceId(%s)", arg->pkgname, arg->id);
 
         SysSecureLog(NID_SHELL, "providerId(%s), id(%s)", arg->pkgname, arg->id);
@@ -381,7 +368,7 @@ AppWidgetManagerService::OnAppWidgetForeground(struct event_arg *pArg, void* pDa
        SysTryReturn(NID_SHELL, pArg || pArg->id || pArg->pkgname, 0, E_SUCCESS, "pArg is null!");
        SysSecureLog(NID_SHELL, "providerId(%s), id(%s)", pArg->pkgname, pArg->id);
 
-       _AppWidgetContext* pAppWidgetContext = AppWidgetManagerService::GetInstance()->FindAppWidget(ExtractAppId(pArg->pkgname), pArg->id);
+       _AppWidgetContext* pAppWidgetContext = AppWidgetManagerService::GetInstance()->FindAppWidget(_AppWidgetHelper::ExtractAppId(pArg->pkgname), pArg->id);
        SysSecureTryReturnResult(NID_SHELL, pAppWidgetContext , E_SYSTEM, "[E_SYSTEM] pAppWidgetContext is null for providerId(%s), instanceId(%s)", pArg->pkgname, pArg->id);
 
        pAppWidgetContext->OnForeground();
@@ -427,7 +414,7 @@ AppWidgetManagerService::OnAppWidgetResize(struct event_arg *arg, void* data)
 
        SysSecureLog(NID_SHELL, "providerId(%s), id(%s), resize.w(%d), resize.h(%d)", arg->pkgname, arg->id, arg->info.resize.w, arg->info.resize.h);
 
-       _AppWidgetContext* pAppWidgetContext = AppWidgetManagerService::GetInstance()->FindAppWidget(ExtractAppId(arg->pkgname), arg->id);
+       _AppWidgetContext* pAppWidgetContext = AppWidgetManagerService::GetInstance()->FindAppWidget(_AppWidgetHelper::ExtractAppId(arg->pkgname), arg->id);
        SysSecureTryReturnResult(NID_SHELL, pAppWidgetContext , E_SYSTEM, "[E_SYSTEM] pAppWidgetContext is null for providerId(%s), instanceId(%s)", arg->pkgname, arg->id);
 
        pAppWidgetContext->OnResize(arg->info.resize.w, arg->info.resize.h);
@@ -528,7 +515,7 @@ AppWidgetManagerService::RequestUpdateAllSuspened(void) const
                _AppContext* pAppContext = null;
                pAppContextEnum->GetValue(pAppContext);
 
-               if ( pAppContext && AppManager::GetInstance()->IsRunning(pAppContext->GetAppId()) == false )
+               if ( pAppContext && _AppManagerImpl::GetInstance()->IsRunning(pAppContext->GetAppId()) == false )
                {
                        pAppContext->RequestUpdate(L"", L"");
                }
@@ -547,7 +534,7 @@ AppWidgetManagerService::RequestUpdateInstance(const Tizen::App::AppId& appId, c
        _AppWidgetContext* pAppWidgetContext = FindAppWidget(appId, instanceId);
        SysTryReturnResult(NID_SHELL, pAppWidgetContext, E_OBJ_NOT_FOUND, "Failed to find the object(%ls).", instanceId.GetPointer());
 
-       pAppWidgetContext->RequestUpdate(argument);
+       pAppWidgetContext->OnUpdateAsync(argument);
        return E_SUCCESS;
 }
 
@@ -694,4 +681,29 @@ AppWidgetManagerService::OnUserEventReceivedN(RequestId reqId, IList* pArgs)
        SysLog(NID_SHELL, "Exit.");
 }
 
+// _AppWidgetHelper
+AppId
+_AppWidgetHelper::ExtractAppId(const String& providerId)
+{
+       int indexOfSecondDot = 0;
+       result r = providerId.IndexOf(".", 12, indexOfSecondDot);//"1234567890._"
+       SysTryReturn(NID_SHELL, !IsFailed(r), L"", E_INVALID_ARG, "[E_INVALID_ARG] Failed to get the index from providerId(%ls).", providerId.GetPointer() );
+
+       String appId;
+       providerId.SubString(0, indexOfSecondDot, appId);
+       return appId;
+}
+
+String
+_AppWidgetHelper::ExtractProviderName(const String& providerId)
+{
+       int indexOfSecondDot = 0;
+       result r = providerId.IndexOf(".", 12, indexOfSecondDot);//"1234567890._"
+       SysTryReturn(NID_SHELL, !IsFailed(r), L"", E_INVALID_ARG, "[E_INVALID_ARG] Failed to get the index from providerId(%ls).", providerId.GetPointer() );
+
+       String providerName;
+       providerId.SubString(indexOfSecondDot + 1, providerName);
+       return providerName;
+}
+
 }}}    // Tizen::Shell::App