add new features
authorkyeongwoo.lee <kyeongwoo.lee@samsung.com>
Thu, 13 Jun 2013 13:35:54 +0000 (22:35 +0900)
committerkyeongwoo.lee <kyeongwoo.lee@samsung.com>
Thu, 13 Jun 2013 14:19:49 +0000 (23:19 +0900)
Change-Id: I08ff1d4b33955a4b3dc642903e172438a7e9b7d5

src/FShell_AppWidgetManagerProxy.cpp
src/FShell_AppWidgetProviderManagerImpl.cpp
src/inc/FShell_AppWidgetManagerIpcMessage.h
src/inc/FShell_AppWidgetManagerProxy.h
src/inc/FShell_AppWidgetProviderManagerImpl.h

index 85d6ef4..184ef12 100644 (file)
  */
 
 #include <FBaseRt.h>
+#include <FBaseInteger.h>
+#include <FBaseDouble.h>
+#include <FBaseColHashMap.h>
+#include <FShellTypes.h>
 #include <FIo_IpcClient.h>
 #include <FShell_AppWidgetManagerIpcMessage.h>
 #include "FShell_AppWidgetProviderManagerImpl.h"
@@ -33,7 +37,8 @@ const char IPC_SERVER_NAME[] = "osp.shell.ipcserver.appwidgetmanager";
 };
 
 using namespace Tizen::Io;
-
+using namespace Tizen::Base;
+using namespace Tizen::Base::Collection;
 
 _AppWidgetManagerProxy::_AppWidgetManagerProxy()
        : __pIpcClient(null)
@@ -241,6 +246,12 @@ _AppWidgetManagerProxy::OnTouchEventReceived(const Tizen::Base::String& instance
 }
 
 result
+_AppWidgetManagerProxy::OnAppWidgetEventReceived(const String& instanceId, const String& operationId, const HashMap& args)
+{
+       return _AppWidgetProviderManagerImpl::GetInstance()->HandleAppWidgetRequest(operationId, &args, true);
+}
+
+result
 _AppWidgetManagerProxy::OnTouchEventReceivedForPD(const Tizen::Base::String& instanceId, int eventType, double timeStamp, double x, double y )
 {
        return _AppWidgetProviderManagerImpl::GetInstance()->ForwardTouchEventForPD(instanceId, eventType, timeStamp, x, y);
@@ -251,7 +262,8 @@ _AppWidgetManagerProxy::OnIpcResponseReceived(_IpcClient& client, const IPC::Mes
 {
        SysLog(NID_SHELL, "Enter.");
        IPC_BEGIN_MESSAGE_MAP(_AppWidgetManagerProxy, message)
-               IPC_MESSAGE_HANDLER_EX(AppWidgetManager_SendTouchEvent, &client, OnTouchEventReceived )
+               IPC_MESSAGE_HANDLER_EX(AppWidgetManager_SendAppWidgetEvent, &client, OnAppWidgetEventReceived)
+               IPC_MESSAGE_HANDLER_EX(AppWidgetManager_SendTouchEvent, &client, OnTouchEventReceived)
                IPC_MESSAGE_HANDLER_EX(AppWidgetManager_SendTouchEventForPD, &client, OnTouchEventReceivedForPD )
        IPC_END_MESSAGE_MAP()
 
index bc4c416..eb7ace7 100644 (file)
@@ -58,7 +58,6 @@
 
 namespace Tizen { namespace Shell
 {
-
 using namespace std;
 using namespace Tizen::Base;
 using namespace Tizen::Base::Collection;
@@ -67,33 +66,29 @@ using namespace Tizen::App::Package;
 using namespace Tizen::Security;
 using namespace Tizen::Graphics;
 
-
-namespace
-{
-const char APPWIDGET_ON_ADD[] = "http://tizen.org/appcontrol/appwidget/add";
-const char APPWIDGET_ON_REMOVE[] = "http://tizen.org/appcontrol/appwidget/remove";
-const char APPWIDGET_ON_UPDATE[] = "http://tizen.org/appcontrol/appwidget/update";
-const char APPWIDGET_ON_RESIZE[] = "http://tizen.org/appcontrol/appwidget/resize";
-const char APPWIDGET_ON_TOUCH[] = "http://tizen.org/appcontrol/appwidget/touch";
-const char APPWIDGET_POPUP_ON_CREATE[] = "http://tizen.org/appcontrol/appwidgetpopup/create";
-const char APPWIDGET_POPUP_ON_DESTROY[] = "http://tizen.org/appcontrol/appwidgetpopup/destroy";
-const char APPWIDGET_POPUP_ON_TOUCH[] = "http://tizen.org/appcontrol/appwidgetpopup/touch";
-const char APPWIDGET_POPUP_PREFIX[] = "http://tizen.org/appcontrol/appwidgetpopup";
-
-const String ARG_KEY_INSTANCE_ID = L"_InstanceId";
-const String ARG_KEY_PROVIDER_NAME = L"_ProviderName";
-const String ARG_KEY_USER_INFO = L"_UserInfo";
-const String ARG_KEY_X = L"_X";
-const String ARG_KEY_Y = L"_Y";
-const String ARG_KEY_WIDTH = L"_Width";
-const String ARG_KEY_HEIGHT = L"_Height";
-const String ARG_KEY_POPUP_WIDTH = L"_PopupWidth";
-const String ARG_KEY_POPUP_HEIGHT = L"_PopupHeight";
-const String ARG_KEY_ARGUMENT = L"_Argument";
-const String ARG_KEY_EVENT_TYPE = L"_EventType";
-const String ARG_KEY_TIME_STAMP = L"_TimeStamp";
-
-}
+extern const wchar_t APPWIDGET_ON_ADD[] = L"http://tizen.org/appcontrol/appwidget/add";
+extern const wchar_t APPWIDGET_ON_REMOVE[] = L"http://tizen.org/appcontrol/appwidget/remove";
+extern const wchar_t APPWIDGET_ON_UPDATE[] = L"http://tizen.org/appcontrol/appwidget/update";
+extern const wchar_t APPWIDGET_ON_RESIZE[] = L"http://tizen.org/appcontrol/appwidget/resize";
+extern const wchar_t APPWIDGET_ON_TOUCH[] = L"http://tizen.org/appcontrol/appwidget/touch";
+extern const wchar_t APPWIDGET_POPUP_ON_CREATE[] = L"http://tizen.org/appcontrol/appwidgetpopup/create";
+extern const wchar_t APPWIDGET_POPUP_ON_DESTROY[] = L"http://tizen.org/appcontrol/appwidgetpopup/destroy";
+extern const wchar_t APPWIDGET_POPUP_ON_TOUCH[] = L"http://tizen.org/appcontrol/appwidgetpopup/touch";
+extern const wchar_t APPWIDGET_POPUP_PREFIX[] = L"http://tizen.org/appcontrol/appwidgetpopup";
+extern const wchar_t INVALID_INSTANCE[] = L"file://invalid instance id";
+
+extern const String ARG_KEY_INSTANCE_ID = L"_InstanceId";
+extern const String ARG_KEY_PROVIDER_NAME = L"_ProviderName";
+extern const String ARG_KEY_USER_INFO = L"_UserInfo";
+extern const String ARG_KEY_X = L"_X";
+extern const String ARG_KEY_Y = L"_Y";
+extern const String ARG_KEY_WIDTH = L"_Width";
+extern const String ARG_KEY_HEIGHT = L"_Height";
+extern const String ARG_KEY_POPUP_WIDTH = L"_PopupWidth";
+extern const String ARG_KEY_POPUP_HEIGHT = L"_PopupHeight";
+extern const String ARG_KEY_ARGUMENT = L"_Argument";
+extern const String ARG_KEY_EVENT_TYPE = L"_EventType";
+extern const String ARG_KEY_TIME_STAMP = L"_TimeStamp";
 
 _AppWidgetProviderManagerImpl::_AppWidgetProviderManagerImpl()
        :__pAppWidgetFactory(null)
@@ -109,7 +104,6 @@ _AppWidgetProviderManagerImpl::~_AppWidgetProviderManagerImpl()
        SysLog(NID_SHELL, "");
 }
 
-
 _AppWidgetProviderManagerImpl*
 _AppWidgetProviderManagerImpl::GetInstance()
 {
@@ -119,6 +113,8 @@ _AppWidgetProviderManagerImpl::GetInstance()
                __pAppWidgetManagerImpl = new (nothrow)_AppWidgetProviderManagerImpl;
                SysTryReturn(NID_SHELL, __pAppWidgetManagerImpl, null, E_OUT_OF_MEMORY, "Allocating new _AppWidgetManagerProxy failed.");
 
+               _AppWidgetManagerProxy::GetInstance();
+
                result r = __pAppWidgetManagerImpl->Construct();
                SysTryReturn(NID_SHELL, !IsFailed(r), null, r, "[%s] Propagating.", GetErrorMessage(r));
        }
@@ -148,7 +144,17 @@ result
 _AppWidgetProviderManagerImpl::SetAppWidgetProviderFactory(IAppWidgetProviderFactory& factory)
 {
        result r = ValidateApplicationAttribute();
-       SysTryReturnResult(NID_SHELL, !IsFailed(r), 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." );
+       if (IsFailed(r))
+       {
+               SysLog(NID_SHELL, "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);
+               SysTryLog(NID_SHELL, !IsFailed(r), "Because the context for this dynamic box is removed, POLLRDHUP occurs.");
+
+               SysAssertf(false, "The application's attribute does not meet the condition to provide Dynamic Box.");
+       }
+
+       SysLog(NID_SHELL, "enter");
 
        __pAppWidgetFactory = &factory;
        return E_SUCCESS;
@@ -158,7 +164,15 @@ result
 _AppWidgetProviderManagerImpl::SetAppWidgetPopupProviderFactory(IAppWidgetPopupProviderFactory& factory)
 {
        result r = ValidateApplicationAttribute();
-       SysTryReturnResult(NID_SHELL, !IsFailed(r), 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.");
+       if (IsFailed(r))
+       {
+               SysLog(NID_SHELL, "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);
+               SysTryLog(NID_SHELL, !IsFailed(r), "Because the context for this dynamic box is removed, POLLRDHUP occurs.");
+
+               SysAssertf(false, "The application's attribute does not meet the condition to provide Dynamic Box.");
+       }
 
        __pAppWidgetPopupProviderFactory = &factory;
        return E_SUCCESS;
@@ -372,64 +386,84 @@ _AppWidgetProviderManagerImpl::ContainsAppWidget(const String& instanceId) const
        return contains;
 }
 
-void
-_AppWidgetProviderManagerImpl::OnAppControlRequestReceived(RequestId reqId, const String& operationId, const String* pUri, const String* pMimeType, const IMap* pArgs)
+result
+_AppWidgetProviderManagerImpl::CreateAppWidget(const String& instanceId, const String& operationId, const IMap* pArgs)
 {
-       SysAssertf( pArgs, "[E_SYSTEN] pArgs should not be null.");
-       SysAssertf( pArgs->GetCount() > 0, "[E_SYSTEN] pArgs should have one more key-values.");
+       const String* pName = dynamic_cast<const String*>(pArgs->GetValue(ARG_KEY_PROVIDER_NAME));
+       SysTryReturnResult(NID_SHELL, pName, E_FAILURE, "Failed to GetValue(%ls)", ARG_KEY_PROVIDER_NAME.GetPointer() );
 
-       SysLog(NID_SHELL, "operationId(%ls), argc(%d)", operationId.GetPointer(), pArgs->GetCount());
+       const String* pParam = dynamic_cast<const String*>(pArgs->GetValue(ARG_KEY_USER_INFO));
+       SysTryReturnResult(NID_SHELL, pParam, E_FAILURE, "Failed to GetValue(%ls)", ARG_KEY_USER_INFO.GetPointer() );
 
-       const String* pInstanceId = dynamic_cast<const String*>(pArgs->GetValue(ARG_KEY_INSTANCE_ID));
-       SysTryReturnVoidResult(NID_SHELL, pInstanceId, E_FAILURE, "Failed to GetValue(%ls)", ARG_KEY_INSTANCE_ID.GetPointer() );
+       SysSecureLog(NID_SHELL, "id(%ls), name(%ls), param(%ls)", instanceId.GetPointer(), pName->GetPointer(), pParam->GetPointer());
 
-       const String* pName = dynamic_cast<const String*>(pArgs->GetValue(ARG_KEY_PROVIDER_NAME));
-       SysTryReturnVoidResult(NID_SHELL, pName, E_FAILURE, "Failed to GetValue(%ls)", ARG_KEY_PROVIDER_NAME.GetPointer() );
+       SysLog(NID_SHELL, "no appwidget instance, creating..");
 
-       const String* pParam = dynamic_cast<const String*>(pArgs->GetValue(ARG_KEY_USER_INFO));
-       SysTryReturnVoidResult(NID_SHELL, pParam, E_FAILURE, "Failed to GetValue(%ls)", ARG_KEY_USER_INFO.GetPointer() );
+       int width = 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);
 
-       SysSecureLog(NID_SHELL, "id(%ls), name(%ls), param(%ls)", pInstanceId->GetPointer(), pName->GetPointer(), pParam->GetPointer());
+       int height = 0;
+       pValue = dynamic_cast<const String*>(pArgs->GetValue(ARG_KEY_HEIGHT));
+       SysTryReturnResult(NID_SHELL, pValue, E_FAILURE, "Failed to GetValue(%ls)", ARG_KEY_HEIGHT.GetPointer() );
+       Integer::Parse(*pValue, height);
 
-       if(this->ContainsAppWidget(*pInstanceId) == false)
+       this->CreateAppWidget(*pName, instanceId, width, height, *pParam);
+
+       if(operationId == APPWIDGET_ON_RESIZE)
        {
-               SysLog(NID_SHELL, "no appwidget instance, creating..");
+               SysLog(NID_SHELL, "operation is resize, but appwidget is already recreated with new size, so OnSize won't be called.");
+       }
 
-               int width = 0;
-               const String* pValue = dynamic_cast<const String*>(pArgs->GetValue(ARG_KEY_WIDTH));
-               SysTryReturnVoidResult(NID_SHELL, pValue, E_FAILURE, "Failed to GetValue(%ls)", ARG_KEY_WIDTH.GetPointer() );
-               Integer::Parse(*pValue, width);
+       return E_SUCCESS;
+}
 
-               int height = 0;
-               pValue = dynamic_cast<const String*>(pArgs->GetValue(ARG_KEY_HEIGHT));
-               SysTryReturnVoidResult(NID_SHELL, pValue, E_FAILURE, "Failed to GetValue(%ls)", ARG_KEY_HEIGHT.GetPointer() );
-               Integer::Parse(*pValue, height);
+// entry point for AppControl Request
+void
+_AppWidgetProviderManagerImpl::OnAppControlRequestReceived(RequestId reqId, const String& operationId, const String* pUri, const String* pMimeType, const IMap* pArgs)
+{
+       SysAssertf( pArgs, "[E_SYSTEN] pArgs should not be null.");
+       SysAssertf( pArgs->GetCount() > 0, "[E_SYSTEN] pArgs should have one more key-values.");
 
-               this->CreateAppWidget( *pName, *pInstanceId, width, height, *pParam);
+       SysLog(NID_SHELL, "operationId(%ls), argc(%d)", operationId.GetPointer(), pArgs->GetCount());
 
-               if(operationId == APPWIDGET_ON_RESIZE)
-               {
-                       SysLog(NID_SHELL, "operation is resize, but appwidget is already recreated with new size, so OnSize won't be called.");
-                       return;
-               }
+       HandleRequest(operationId, pArgs);
+
+       SysLog(NID_SHELL, "Exit");
+}
+
+result
+_AppWidgetProviderManagerImpl::HandleRequest(const String& operationId, const IMap* pArgs)
+{
+       const String* pInstanceId = dynamic_cast<const String*>(pArgs->GetValue(ARG_KEY_INSTANCE_ID));
+       SysTryReturnResult(NID_SHELL, pInstanceId, E_FAILURE, "Failed to execute GetValue(%ls)", ARG_KEY_INSTANCE_ID.GetPointer());
+
+       if (this->ContainsAppWidget(*pInstanceId) == false)
+       {
+               SysLog(NID_SHELL, "CreateAppWidget with appcontrol");
+               result r = CreateAppWidget(*pInstanceId, operationId, pArgs);
+               SysTryReturnResult(NID_SHELL, !IsFailed(r), E_FAILURE, "Failed to execute CreateAppWidget.");
        }
 
        if(operationId.StartsWith(APPWIDGET_POPUP_PREFIX, 0) == true)
        {
-               SysTryReturnVoidResult(NID_SHELL, __pAppWidgetPopupProviderFactory, E_FAILURE, "[E_FAILURE] __pAppWidgetPopupProviderFactory is null");
+               SysTryReturnResult(NID_SHELL, __pAppWidgetPopupProviderFactory, E_FAILURE, "__pAppWidgetPopupProviderFactory is null");
                HandleAppWidgetPopupRequest(operationId, pArgs);
        }
        else
        {
-               SysTryReturnVoidResult(NID_SHELL, __pAppWidgetFactory, E_FAILURE, "[E_FAILURE] __pAppWidgetFactory is null");
                HandleAppWidgetRequest(operationId, pArgs);
        }
-       SysLog(NID_SHELL, "Exit");
+
+       return E_SUCCESS;
 }
 
 result
-_AppWidgetProviderManagerImpl::HandleAppWidgetRequest(const String& operationId, const IMap* pArgs)
+_AppWidgetProviderManagerImpl::HandleAppWidgetRequest(const String& operationId, const IMap* pArgs, bool isConnected)
 {
+       SysTryReturnResult(NID_SHELL, __pAppWidgetFactory, E_FAILURE, "[E_FAILURE] __pAppWidgetFactory is null");
+
        if( pArgs == null || pArgs->GetCount() < 3)
        {
                SysAssertf(pArgs, "[E_SYSTEN] pArgs should not be null.");
@@ -439,7 +473,19 @@ _AppWidgetProviderManagerImpl::HandleAppWidgetRequest(const String& operationId,
        SysLog(NID_SHELL, "operationId(%ls), argc(%d)", operationId.GetPointer(), pArgs->GetCount());
 
        const String* pInstanceId = dynamic_cast<const String*>(pArgs->GetValue(ARG_KEY_INSTANCE_ID));
-       SysTryReturnResult(NID_SHELL, pInstanceId, E_FAILURE, "[E_FAILURE] pId is null.");
+       SysTryReturnResult(NID_SHELL, pInstanceId, E_FAILURE, "pId is null.");
+
+       result r = E_SUCCESS;
+
+       if (isConnected)
+       {
+               if(this->ContainsAppWidget(*pInstanceId) == false)
+               {
+                       SysLog(NID_SHELL, "CreateAppWidget with ipc");
+                       r = CreateAppWidget(*pInstanceId, operationId, pArgs);
+                       SysTryReturnResult(NID_SHELL, !IsFailed(r), E_FAILURE, "[E_FAILURE] Failed to execute CreateAppWidget.");
+               }
+       }
 
        if (operationId == APPWIDGET_ON_RESIZE)
        {
@@ -453,7 +499,8 @@ _AppWidgetProviderManagerImpl::HandleAppWidgetRequest(const String& operationId,
                SysTryReturnResult(NID_SHELL, pValue, E_FAILURE, "Failed to GetValue(%ls)", ARG_KEY_HEIGHT.GetPointer() );
                Integer::Parse(*pValue, height);
 
-               this->ResizeAppWidget(*pInstanceId, width, height);
+               r = this->ResizeAppWidget(*pInstanceId, width, height);
+               SysTryReturnResult(NID_SHELL, !IsFailed(r), E_FAILURE, "Failed to execute ResizeAppWidget.");
        }
        else if (operationId == APPWIDGET_ON_UPDATE)
        {
@@ -470,16 +517,21 @@ _AppWidgetProviderManagerImpl::HandleAppWidgetRequest(const String& operationId,
                pValue =  dynamic_cast<const String*>(pArgs->GetValue(ARG_KEY_ARGUMENT));
                SysTryReturnResult(NID_SHELL, pValue, E_FAILURE, "Failed to GetValue(%ls)", ARG_KEY_ARGUMENT.GetPointer() );
 
-               this->UpdateAppWidget(*pInstanceId, width, height, *pValue);
+               r = this->UpdateAppWidget(*pInstanceId, width, height, *pValue);
+               SysTryReturnResult(NID_SHELL, !IsFailed(r), E_FAILURE, "Failed to execute UpdateAppWidget.");
        }
        else if (operationId == APPWIDGET_ON_REMOVE)
        {
-               this->RemoveAppWidget(*pInstanceId, true);
+               r = this->RemoveAppWidget(*pInstanceId, true);
+               SysTryReturnResult(NID_SHELL, !IsFailed(r), E_FAILURE, "Failed to execute RemoveAppWidget.");
        }
        else if (operationId == APPWIDGET_ON_TOUCH)
        {
                SysLog(NID_SHELL, "[APPWIDGET_ON_TOUCH] touch events will be delivered after provider is initialized");
        }
+
+       SendResult(*pInstanceId, true);
+
        SysLog(NID_SHELL, "Exit");
        return E_SUCCESS;
 }
@@ -761,9 +813,7 @@ _AppWidgetProviderManagerImpl::RequestSyncSharedMemory(const String& instanceId,
        _AppWidgetManagerProxy* pProxy = _AppWidgetManagerProxy::GetInstance();
        SysTryReturnResult(NID_SHELL, pProxy, E_SYSTEM, "Failed to get proxy instance!");
 
-       result r = pProxy->RequestSyncSharedMemory(instanceId, width, height);
-
-       return r;
+       return pProxy->RequestSyncSharedMemory(instanceId, width, height);
 }
 
 result
@@ -844,16 +894,16 @@ _AppWidgetProviderManagerImpl::ValidateApplicationAttribute(void)
        int lifeDuration = 0;
        r = Integer::Parse(lifeDurationValue, lifeDuration);
        SysTryReturnResult(NID_SHELL, !IsFailed(r), E_INVALID_OPERATION, "Failed to parse %ls attribute for the ServiceApp in package information.", LIFE_DURATION_KEY );
-//     SysTryReturnResult(NID_SHELL, lifeDuration <= LIFE_DURATION_MIN, E_INVALID_OPERATION, "%ls attribute value should be less than '%d' to be an application that providing AppWidget, but value is %d", LIFE_DURATION_KEY, LIFE_DURATION_MIN, lifeDuration );
+       //SysTryReturnResult(NID_SHELL, lifeDuration <= LIFE_DURATION_MIN, E_INVALID_OPERATION, "%ls attribute value should be less than '%d' to be an application that providing AppWidget, but value is %d", LIFE_DURATION_KEY, LIFE_DURATION_MIN, lifeDuration );
 
        // AutoRestart
-       /*r = pInfo->GetValue(AUTO_RESTART_KEY, pFeature);
+       r = pInfo->GetValue(AUTO_RESTART_KEY, pFeature);
        if (!IsFailed(r))
        {
                String autoRestart = pFeature->GetValue();
                autoRestart.ToLowerCase();
                SysTryReturnResult(NID_SHELL, autoRestart != "true", E_INVALID_OPERATION, "It's not allowed that declaring 'AUTO_RESTART' attribute for AppWidget.");
-       }*/
+       }
 
        _DeleteCollectionMapValue<String, _AppFeatureInfoImpl>(*pInfo);
 
index c8c584f..084818e 100644 (file)
@@ -39,8 +39,9 @@ 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_CONTROL2_0(AppWidgetManager_SendResult, Tizen::Base::String, bool)
+IPC_MESSAGE_CONTROL2(AppWidgetManager_SendResult, Tizen::Base::String, bool)
 
 // Message from service
+IPC_MESSAGE_CONTROL3(AppWidgetManager_SendAppWidgetEvent, Tizen::Base::String, Tizen::Base::String, Tizen::Base::Collection::HashMap)
 IPC_MESSAGE_CONTROL5(AppWidgetManager_SendTouchEvent, Tizen::Base::String, int, double, double, double)
 IPC_MESSAGE_CONTROL5(AppWidgetManager_SendTouchEventForPD, Tizen::Base::String, int, double, double, double)
index 66b92bb..4e540ed 100644 (file)
 #include <FIo_IIpcClientEventListener.h>
 #include <FIo_IpcClient.h>
 
+namespace Tizen { namespace Base  { namespace Collection
+{
+class HashMap;
+}}}
+
 namespace Tizen { namespace Shell {
 
 class _AppWidgetManagerProxy
@@ -51,6 +56,7 @@ public:
        result RequestReleaseSharedMemoryForPD(const Tizen::Base::String& instanceId);
        result SendResult(const Tizen::Base::String& instanceId, bool isSucceeded);
 
+       result OnAppWidgetEventReceived(const Tizen::Base::String& instanceId, const Tizen::Base::String& operationId, const Tizen::Base::Collection::HashMap& args);
        result OnTouchEventReceived(const Tizen::Base::String& instanceId, int eventType, double timeStamp, double x, double y );
        result OnTouchEventReceivedForPD(const Tizen::Base::String& instanceId, int eventType, double timeStamp, double x, double y );
 
index 47a5f98..b2eced5 100644 (file)
@@ -32,7 +32,6 @@
 #include <FAppIAppControlProviderEventListener.h>
 #include <FApp_IAppEventListener.h>
 
-
 namespace Tizen { namespace Shell {
 
 class AppWidgetFrame;
@@ -45,11 +44,33 @@ class AppWidgetPopupProvider;
 class _IAppWidgetTouchEventListener;
 class _AppWidgetManagerProxy;
 
+_OSP_EXPORT_ extern const wchar_t APPWIDGET_ON_ADD[];
+_OSP_EXPORT_ extern const wchar_t APPWIDGET_ON_REMOVE[];
+_OSP_EXPORT_ extern const wchar_t APPWIDGET_ON_UPDATE[];
+_OSP_EXPORT_ extern const wchar_t APPWIDGET_ON_RESIZE[];
+_OSP_EXPORT_ extern const wchar_t APPWIDGET_ON_TOUCH[];
+_OSP_EXPORT_ extern const wchar_t APPWIDGET_POPUP_ON_CREATE[];
+_OSP_EXPORT_ extern const wchar_t APPWIDGET_POPUP_ON_DESTROY[];
+_OSP_EXPORT_ extern const wchar_t APPWIDGET_POPUP_ON_TOUCH[];
+_OSP_EXPORT_ extern const wchar_t APPWIDGET_POPUP_PREFIX[];
+
+_OSP_EXPORT_ extern const Tizen::Base::String ARG_KEY_INSTANCE_ID;
+_OSP_EXPORT_ extern const Tizen::Base::String ARG_KEY_PROVIDER_NAME;
+_OSP_EXPORT_ extern const Tizen::Base::String ARG_KEY_USER_INFO;
+_OSP_EXPORT_ extern const Tizen::Base::String ARG_KEY_X;
+_OSP_EXPORT_ extern const Tizen::Base::String ARG_KEY_Y;
+_OSP_EXPORT_ extern const Tizen::Base::String ARG_KEY_WIDTH;
+_OSP_EXPORT_ extern const Tizen::Base::String ARG_KEY_HEIGHT;
+_OSP_EXPORT_ extern const Tizen::Base::String ARG_KEY_POPUP_WIDTH;
+_OSP_EXPORT_ extern const Tizen::Base::String ARG_KEY_POPUP_HEIGHT;
+_OSP_EXPORT_ extern const Tizen::Base::String ARG_KEY_ARGUMENT;
+_OSP_EXPORT_ extern const Tizen::Base::String ARG_KEY_EVENT_TYPE;
+_OSP_EXPORT_ extern const Tizen::Base::String ARG_KEY_TIME_STAMP;
 
 class _OSP_EXPORT_ _AppWidgetProviderManagerImpl
-       : public Tizen::App::IAppControlProviderEventListener
+       : public Tizen::Base::Object
+       , public Tizen::App::IAppControlProviderEventListener
        , public Tizen::App::_IAppEventListener
-       , public Tizen::Base::Object
 {
 public:
        static _AppWidgetProviderManagerImpl* GetInstance();
@@ -77,17 +98,18 @@ public:
        result ForwardTouchEvent(const Tizen::Base::String& instanceId, int eventType, double timeStamp, double x, double y);
        result ForwardTouchEventForPD(const Tizen::Base::String& instanceId, int eventType, double timeStamp, double x, double y);
 
+       result HandleRequest(const Tizen::Base::String& operationId, const Tizen::Base::Collection::IMap* pArgs);
+       result HandleAppWidgetRequest(const Tizen::Base::String& operationId, const Tizen::Base::Collection::IMap* pArgs, bool isConnected = false);
+
        // helper
-//     static result ExtractAppIdAndProviderName(const Tizen::Base::String& providerId, Tizen::App::AppId& appId, Tizen::Base::String& providerName);
        static result ValidateApplicationAttribute(void);
 
-       void TerminateAppIfInvalidState();
-
 private:
        _AppWidgetProviderManagerImpl();
        virtual ~_AppWidgetProviderManagerImpl();
        result Construct();
 
+       result CreateAppWidget(const Tizen::Base::String& instanceId, const Tizen::Base::String& operationId, const Tizen::Base::Collection::IMap* pArgs);
        result CreateAppWidget(const Tizen::Base::String& name, const Tizen::Base::String& instanceId, int width, int height, const Tizen::Base::String& userInfo);
        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);
@@ -99,7 +121,6 @@ private:
 
        virtual void OnAppControlRequestReceived(RequestId reqId, const Tizen::Base::String& operationId, const Tizen::Base::String* pUriData, const Tizen::Base::String* pMimeType, const Tizen::Base::Collection::IMap* pExtraData);
 
-       result HandleAppWidgetRequest(const Tizen::Base::String& operationId, const Tizen::Base::Collection::IMap* pArgs);
        result HandleAppWidgetPopupRequest(const Tizen::Base::String& operationId, const Tizen::Base::Collection::IMap* pArgs);
 
        static result CheckCertificate(const Tizen::App::AppId& localAppId, const Tizen::App::AppId& remoteAppId);