From: jungmin76.park Date: Mon, 8 Jul 2013 11:13:26 +0000 (+0900) Subject: move provider state to state of _AppContext [Nabi 45218] X-Git-Tag: submit/tizen/20130912.075546~21 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=15ab4e9282cffbf0289bac3a6d3ab0ba2c426eae;p=platform%2Fframework%2Fnative%2Fappwidget-service.git move provider state to state of _AppContext [Nabi 45218] Change-Id: I8e9437670c074cd066358ca1d3b7bb1a279149de Signed-off-by: jungmin76.park --- diff --git a/inc/FShell_AppWidgetContext.h b/inc/FShell_AppWidgetContext.h index da71baf..367d9a9 100644 --- a/inc/FShell_AppWidgetContext.h +++ b/inc/FShell_AppWidgetContext.h @@ -41,22 +41,49 @@ class _AppWidgetPopupContext; extern const int UPDATE_PERIOD_MSEC_MIN; class _AppWidgetContext; -class AppContext + +//////////////////////////////////////////////// +// _AppContext +//////////////////////////////////////////////// +class _AppContext :public Tizen::Base::Object { + +public: + enum ConnectionState + { + NONE = 0, + CONNECTING, + CONNECTED, + DISCONNECTED, + }; + +public: + _AppContext(void):__isWaitingResult(false), __connectionState(NONE){} + ~_AppContext(void){} + ConnectionState GetConnectionState(void) const { return __connectionState; } + void SetConnectionState(ConnectionState state) { __connectionState = state; } + int GetClientId(void) const { return __ipcClientId; } + void SetClientId(int clientId) { __ipcClientId = clientId; } + public: - AppContext(void):__isWaitingResult(false){} - ~AppContext(void){} bool __isWaitingResult; - Tizen::Base::Collection::ArrayListT<_AppWidgetContext*> __appWidetContextList; + //Tizen::Base::Collection::ArrayListT<_AppWidgetContext*> __appWidetContextList; + +private: + ConnectionState __connectionState; + int __ipcClientId; }; +//////////////////////////////////////////////// +// _AppWidgetContext +//////////////////////////////////////////////// class _AppWidgetContext : public _AppWidgetContextBase , public Tizen::Base::Runtime::ITimerEventListener { public: - _AppWidgetContext(AppContext* pAppContext, const Tizen::Base::String& name, 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& name, const Tizen::Base::String& appId, const Tizen::Base::String& instanceId, int width, int height, int period, int priority); virtual ~_AppWidgetContext(void); void OnAdded(void); @@ -79,9 +106,8 @@ public: int GetPeriod(void) const; long long GetLastUpdatedTime(void) const; - virtual void SetIpcClientId(int clientId); - AppContext* GetAppContext(void) const; + _AppContext* GetAppContext(void) const; private: result SendAddRequest(int width, int height); @@ -93,6 +119,7 @@ private: result RequestUpdate(const Tizen::Base::String& argument); virtual Tizen::Base::Collection::HashMap* CreateRequestArgsN(void); + int GetClientId(void) const; virtual void OnTimerExpired(Tizen::Base::Runtime::Timer& timer); struct PendingTouchEvent @@ -123,7 +150,7 @@ private: Tizen::Base::Collection::ArrayListT* __pPendingTouchEventList; Tizen::Base::String __pendingArgument; bool __hasPendingRequest; - AppContext* __pAppContext; + _AppContext* __pAppContext; Tizen::Base::Collection::ArrayListT* __pPendingEventList; }; // class _AppWidgetContext diff --git a/inc/FShell_AppWidgetContextBase.h b/inc/FShell_AppWidgetContextBase.h index 62b73a3..d192c51 100644 --- a/inc/FShell_AppWidgetContextBase.h +++ b/inc/FShell_AppWidgetContextBase.h @@ -40,28 +40,17 @@ namespace Tizen { namespace Shell { namespace App class _AppWidgetContextBase : public Tizen::Base::Object { -protected: - enum _AppWidgetProviderState - { - INVALID = 0, - RUNNING, - SUSPENDED, - }; - public: _AppWidgetContextBase(target_type type, const Tizen::Base::String& userInfo, const Tizen::Base::String& providerId, const Tizen::Base::String& instanceId, int width, int height, int priority); virtual ~_AppWidgetContextBase(void); virtual void OnPopupCreated(double x, double y, int width, int height) = 0; virtual void OnPopupDestoyed(void) = 0; virtual result SendTouchEvent(buffer_event event, double timestamp, double x, double y) = 0; - //virtual result SendPendingEvent(void) = 0; - virtual void SetIpcClientId(int clientId); - int GetClientId(void) const; - bool HasValidClientId(void) const; + // for buffered appWidget int GetSharedMemId(int w, int h); result ReleaseSharedMem(void); - void Suspend(void); + Tizen::Base::String GetInstanceId(void) const; int GetWidth(void) const; int GetHeight(void) const; @@ -69,8 +58,9 @@ public: Tizen::Base::String GetAppId(void) const; int GetPriority(void) const; Tizen::Base::String GetProviderName(void) const; - bool IsRunning(void) const; - int GetProviderState(void) const; + + void OnDisconnected(void); + bool IsRemoteBufferCreated(void) const; protected: bool IsSharedMemCreated(void) const; @@ -83,6 +73,9 @@ protected: void SetWidth(int width); void SetHeight(int height); +protected: + bool __isRemoteBufferCreated; + private: target_type __type; Tizen::Base::String __userInfo; @@ -97,7 +90,6 @@ private: Tizen::Base::String __providerName; struct livebox_buffer *__buffer_info; void *__buffer; - _AppWidgetProviderState __providerState; }; // class _AppWidgetContextBase diff --git a/inc/FShell_AppWidgetManagerService.h b/inc/FShell_AppWidgetManagerService.h index 6ac4bf7..2ec25d8 100644 --- a/inc/FShell_AppWidgetManagerService.h +++ b/inc/FShell_AppWidgetManagerService.h @@ -48,7 +48,6 @@ public: static AppWidgetManagerService* CreateInstance(const char* pServiceIdForCoreDaemon); _AppWidgetContext* AddAppWidget(const Tizen::Base::String& name, const Tizen::Base::String& appId, const Tizen::Base::String& instanceId, int width, int height, int period, int priority); 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; @@ -97,7 +96,6 @@ private: virtual void OnSettingChanged(Tizen::Base::String & key); // helpers - result SetIpcClientIds(const Tizen::App::AppId& appId, int clientId); int UpdateAllAppWidgetsByAppId(const Tizen::Base::String& appId); void StartPingTimer(void); @@ -118,7 +116,7 @@ private: private: static AppWidgetManagerService* __pTheInstance; Tizen::Base::Collection::HashMapT __appWidgetContextList; - Tizen::Base::Collection::HashMapT __appContextList; + Tizen::Base::Collection::HashMapT __appContextList; Tizen::Base::Runtime::Timer __pingTimer; _TaskHandlerThread __handlerThread; diff --git a/inc/FShell_AppWidgetManagerStub.h b/inc/FShell_AppWidgetManagerStub.h index 4d10284..f03dcc1 100644 --- a/inc/FShell_AppWidgetManagerStub.h +++ b/inc/FShell_AppWidgetManagerStub.h @@ -83,8 +83,6 @@ protected: // _IIpcServerEventListener virtual void OnIpcServerStarted(const Tizen::Io::_IpcServer& server); virtual void OnIpcServerStopped(const Tizen::Io::_IpcServer& server); - virtual void OnIpcClientConnected(const Tizen::Io::_IpcServer& server, int clientId); - virtual void OnIpcClientDisconnected(const Tizen::Io::_IpcServer&server, int clientId); virtual void OnIpcRequestReceived(Tizen::Io::_IpcServer& server, const IPC::Message& message); result StartIpcServer(void); diff --git a/inc/FShell_AppWidgetPopupContext.h b/inc/FShell_AppWidgetPopupContext.h index 02daa51..656e479 100644 --- a/inc/FShell_AppWidgetPopupContext.h +++ b/inc/FShell_AppWidgetPopupContext.h @@ -50,6 +50,7 @@ public: private: virtual Tizen::Base::Collection::HashMap* CreateRequestArgsN(void); + int GetClientId(void) const; private: _AppWidgetContext* __pParent; diff --git a/src/FShell_AppWidgetContext.cpp b/src/FShell_AppWidgetContext.cpp index e6c4c14..bb91d1f 100644 --- a/src/FShell_AppWidgetContext.cpp +++ b/src/FShell_AppWidgetContext.cpp @@ -53,7 +53,7 @@ const String APPWIDGET_ON_TOUCH = L"http://tizen.org/appcontrol/appwidget/touch" const int UPDATE_PERIOD_MSEC_MIN = 1800000; // 30min -_AppWidgetContext::_AppWidgetContext(AppContext* pAppContext, const String& info, const String& providerId, const String& instanceId, int width, int height, int period, int priority) +_AppWidgetContext::_AppWidgetContext(_AppContext* pAppContext, const String& info, const String& providerId, const String& instanceId, int width, int height, int period, int priority) :_AppWidgetContextBase(TYPE_LB, info, providerId, instanceId, width, height, priority) ,__pAppWidgetPopup(null) ,__updateMillis(period) @@ -120,7 +120,7 @@ _AppWidgetContext::~_AppWidgetContext(void) } } -AppContext* +_AppContext* _AppWidgetContext::GetAppContext(void) const { return __pAppContext; @@ -262,7 +262,6 @@ void _AppWidgetContext::OnPopupCreated(double x, double y, int width, int height) { __pAppWidgetPopup = new (nothrow) _AppWidgetPopupContext(GetUserInfo(), GetProviderId(), GetInstanceId(), GetWidth(), GetHeight(), GetPriority(), this); - __pAppWidgetPopup->SetIpcClientId(GetClientId()); __pAppWidgetPopup->OnPopupCreated(x, y, width, height); } @@ -358,7 +357,7 @@ _AppWidgetContext::SendPendingTouchEvent(void) result _AppWidgetContext::SendTouchEvent(buffer_event eventType, double timeStamp, double x, double y) { - if (HasValidClientId() && IsRunning()) + if (__pAppContext->GetConnectionState() == _AppContext::CONNECTED && IsRemoteBufferCreated()) { SysAssert(IsSharedMemCreated() == true); SysLog(NID_SHELL, "%d, %f, %f", eventType, x, y); @@ -390,14 +389,18 @@ _AppWidgetContext::SendRequestToApp(const AppId& appId, const String& operation, { result r = E_SUCCESS; - if (AppManager::GetInstance()->IsRunning(appId) == false) + if ( __pAppContext->GetConnectionState() == _AppContext::NONE || __pAppContext->GetConnectionState() == _AppContext::DISCONNECTED) { SysLog(NID_SHELL, "The application is not running."); - return _AppWidgetContextBase::SendRequestToApp(appId, operation, pArgs); + result r = _AppWidgetContextBase::SendRequestToApp(appId, operation, pArgs); + SysTryReturn(NID_SHELL, !IsFailed(r), r, r, "[%s] Failed to SendRequestToApp", GetErrorMessage(r)); + + __pAppContext->__isWaitingResult = true; + __pAppContext->SetConnectionState(_AppContext::CONNECTING); } else { - if (!HasValidClientId() || __pAppContext->__isWaitingResult == true) + if ( __pAppContext->GetConnectionState() == _AppContext::CONNECTING || __pAppContext->__isWaitingResult == true) { SysLog(NID_SHELL, "The application is running but IPC is not connected yet."); __pPendingEventList->Add(new (nothrow) PendingEvent(operation, pArgs)); @@ -472,10 +475,10 @@ _AppWidgetContext::GetLastUpdatedTime(void) const return __lastUpdatedTime; } -void -_AppWidgetContext::SetIpcClientId(int clientId) +int +_AppWidgetContext::GetClientId(void) const { - _AppWidgetContextBase::SetIpcClientId(clientId); + return GetAppContext()->GetClientId(); } void diff --git a/src/FShell_AppWidgetContextBase.cpp b/src/FShell_AppWidgetContextBase.cpp index bfe9535..4c77a35 100644 --- a/src/FShell_AppWidgetContextBase.cpp +++ b/src/FShell_AppWidgetContextBase.cpp @@ -99,10 +99,9 @@ _AppWidgetContextBase::_AppWidgetContextBase(target_type type, const String& use ,__height(height) ,__priority(priority) ,__isForeground(true) - ,__ipcClientId(-1) ,__buffer_info(null) ,__buffer(null) - ,__providerState(INVALID) + ,__isRemoteBufferCreated(false) { _AppWidgetManagerImpl::ExtractAppIdAndProviderName(providerId, __appId, __providerName); @@ -115,19 +114,6 @@ _AppWidgetContextBase::~_AppWidgetContextBase(void) ReleaseSharedMem(); } -void -_AppWidgetContextBase::SetIpcClientId(int clientId) -{ - __ipcClientId = clientId; -} - -bool -_AppWidgetContextBase::HasValidClientId(void) const -{ - SysLog(NID_SHELL, "%d", __ipcClientId); - return (__ipcClientId > -1); -} - bool _AppWidgetContextBase::IsSharedMemCreated(void) const { @@ -160,7 +146,7 @@ _AppWidgetContextBase::GetSharedMemId(int w, int h) } int bufferId = __buffer_info->fb->handle; - __providerState = RUNNING; + __isRemoteBufferCreated = true; SysLog(NID_SHELL, "(%d) Exit", bufferId); return bufferId; @@ -168,21 +154,15 @@ _AppWidgetContextBase::GetSharedMemId(int w, int h) void -_AppWidgetContextBase::Suspend(void) +_AppWidgetContextBase::OnDisconnected(void) { - __providerState = SUSPENDED; + __isRemoteBufferCreated = false; } bool -_AppWidgetContextBase::IsRunning(void) const +_AppWidgetContextBase::IsRemoteBufferCreated(void) const { - return (__providerState == RUNNING); -} - -int -_AppWidgetContextBase::GetProviderState(void) const -{ - return static_cast(__providerState); + return __isRemoteBufferCreated; } result @@ -252,12 +232,6 @@ _AppWidgetContextBase::IsForeground(void) const return __isForeground; } -int -_AppWidgetContextBase::GetClientId(void) const -{ - return __ipcClientId; -} - int _AppWidgetContextBase::GetWidth(void) const { diff --git a/src/FShell_AppWidgetManagerService.cpp b/src/FShell_AppWidgetManagerService.cpp index 0624d51..93b9f19 100644 --- a/src/FShell_AppWidgetManagerService.cpp +++ b/src/FShell_AppWidgetManagerService.cpp @@ -159,30 +159,6 @@ AppWidgetManagerService::Find(const String& appId, const String& instanceId) con return pAppWidgetContext; } -int -AppWidgetManagerService::Find(const String& appId) const -{ - int clientId = -1; - - unique_ptr< IMapEnumeratorT > pAppWidgetContextEnum(__appWidgetContextList.GetMapEnumeratorN()); - SysTryReturn(NID_SHELL, pAppWidgetContextEnum, clientId, E_SYSTEM, "[E_SYSTEM]"); - - while (pAppWidgetContextEnum->MoveNext() == E_SUCCESS) - { - _AppWidgetContext* pValue = null; - pAppWidgetContextEnum->GetValue(pValue); - - if (pValue->GetAppId() == appId) - { - clientId = pValue->GetClientId(); - break; - } - } - - SysLog(NID_SHELL, "clientId is %d", clientId); - return clientId; -} - int AppWidgetManagerService::GetProviderCount(const String& appId) const { @@ -206,26 +182,52 @@ AppWidgetManagerService::GetProviderCount(const String& appId) const return providerCount; } -result -AppWidgetManagerService::SetIpcClientIds(const Tizen::App::AppId& appId, int clientId) + +void +AppWidgetManagerService::OnIpcClientConnected(const _IpcServer& server, int clientId) { + String appId = server.GetClientApplicationId(); + SysLog(NID_SHELL, "(%ls)\n", appId.GetPointer()); + + _AppContext* pAppContext = null; + __appContextList.GetValue(appId, pAppContext); + if (pAppContext) + { + pAppContext->SetClientId(clientId); + pAppContext->SetConnectionState(_AppContext::CONNECTED); + } +} + +void +AppWidgetManagerService::OnIpcClientDisconnected(const _IpcServer& server, int clientId) +{ + String appId = server.GetClientApplicationId(); + SysLog(NID_SHELL, "(%ls)\n", appId.GetPointer()); + + _AppContext* pAppContext = null; + __appContextList.GetValue(appId, pAppContext); + if (pAppContext) + { + pAppContext->SetClientId(-1); + pAppContext->SetConnectionState(_AppContext::DISCONNECTED); + } + unique_ptr< IMapEnumeratorT > pAppWidgetContextEnum(__appWidgetContextList.GetMapEnumeratorN()); - SysTryReturnResult(NID_SHELL, pAppWidgetContextEnum, E_SYSTEM, ""); + SysTryReturnVoidResult(NID_SHELL, pAppWidgetContextEnum, E_SYSTEM, ""); + _AppWidgetContext* pValue = null; while (pAppWidgetContextEnum->MoveNext() == E_SUCCESS) { - _AppWidgetContext* pValue = null; + pAppWidgetContextEnum->GetValue(pValue); SysSecureLog(NID_SHELL, "%ls, %ls, %ls", pValue->GetInstanceId().GetPointer(), pValue->GetProviderId().GetPointer(), appId.GetPointer()); if (pValue->GetAppId() == appId) { - pValue->SetIpcClientId(clientId); - if (clientId == -1) { SysLog(NID_SHELL, "client is unregistered."); - pValue->Suspend(); + pValue->OnDisconnected(); if (pValue->GetAppWidgetPopup()) { @@ -238,26 +240,6 @@ AppWidgetManagerService::SetIpcClientIds(const Tizen::App::AppId& appId, int cli } } } - - return E_SUCCESS; -} - -void -AppWidgetManagerService::OnIpcClientConnected(const _IpcServer& server, int clientId) -{ - String appId = server.GetClientApplicationId(); - SysLog(NID_SHELL, "(%ls)\n", appId.GetPointer()); - - this->SetIpcClientIds(appId, clientId); -} - -void -AppWidgetManagerService::OnIpcClientDisconnected(const _IpcServer& server, int clientId) -{ - String appId = server.GetClientApplicationId(); - SysLog(NID_SHELL, "(%ls)\n", appId.GetPointer()); - - this->SetIpcClientIds(appId, -1); } wchar_t KEY_SETTING_FONT_SIZE[] = L"http://tizen.org/setting/font.size"; @@ -285,12 +267,12 @@ AppWidgetManagerService::AddAppWidget(const Tizen::Base::String& name, const Tiz String providerName; _AppWidgetManagerImpl::ExtractAppIdAndProviderName(providerId, appId, providerName); - AppContext* pAppContext = null; + _AppContext* pAppContext = null; bool containsKey = false; __appContextList.ContainsKey(appId, containsKey); if( containsKey == false) { - pAppContext = new(std::nothrow) AppContext; + pAppContext = new(std::nothrow) _AppContext; __appContextList.Add(appId, pAppContext); } else @@ -301,17 +283,6 @@ AppWidgetManagerService::AddAppWidget(const Tizen::Base::String& name, const Tiz _AppWidgetContext* pAppWidgetContext = new (std::nothrow)_AppWidgetContext(pAppContext, name, providerId, instanceId, width, height, period, priority); SysTryReturn(NID_SHELL, pAppWidgetContext, 0, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY]"); - int clientId = AppWidgetManagerService::GetInstance()->Find(appId); - if (clientId != -1) - { - SysLog(NID_SHELL, "There is same parent application."); - pAppWidgetContext->SetIpcClientId(clientId); - } - else - { - SysLog(NID_SHELL, "There is no same parent application."); - } - __appWidgetContextList.Add(pAppWidgetContext->GetInstanceId(), pAppWidgetContext); pAppWidgetContext->OnAdded(); @@ -722,12 +693,6 @@ AppWidgetManagerService::RequestSharedMemoryIdForPD(const Tizen::App::AppId& app _AppWidgetPopupContext* pPd = pAppWidgetContext->GetAppWidgetPopup(); SysSecureTryReturnResult(NID_SHELL, pPd , E_SYSTEM, "[E_SYSTEM] pPd is null for (%ls) (%ls)", appId.GetPointer(), instanceId.GetPointer()); - if(pPd->HasValidClientId() == false) - { - String fullAppId = __pIpcServer->GetClientApplicationId(); - pPd->SetIpcClientId(__pIpcServer->GetClientId()); - } - shmId = pPd->GetSharedMemId(width, height); SysSecureTryReturnResult(NID_SHELL, pAppWidgetContext , shmId != -1, "[E_SYSTEM] failed to GetSharedMemId for (%ls) (%ls)", appId.GetPointer(), instanceId.GetPointer()); @@ -813,7 +778,7 @@ AppWidgetManagerService::SendResult(const Tizen::App::AppId& appId, const Tizen: pAppWidgetContextEnum->GetValue(pAppWidgetContext); SysSecureTryReturnResult(NID_SHELL, pAppWidgetContext, E_SYSTEM, "pAppWidgetContext is null for (%ls) (%ls)", appId.GetPointer(), instanceId.GetPointer()); - if (pAppWidgetContext->GetProviderState() == 0) + if (pAppWidgetContext->GetAppContext()->GetConnectionState() == _AppContext::NONE) { break; } diff --git a/src/FShell_AppWidgetManagerStub.cpp b/src/FShell_AppWidgetManagerStub.cpp index 28a8835..09c2d78 100644 --- a/src/FShell_AppWidgetManagerStub.cpp +++ b/src/FShell_AppWidgetManagerStub.cpp @@ -98,7 +98,7 @@ _AppWidgetManagerStub::OnRequestUpdateInstance(const Tizen::Base::String& instan bool _AppWidgetManagerStub::OnRequestSharedMemoryId(const String& instanceId, int w, int h, int* pShmId) { - SysSecureLog(NID_SHELL, "(instanceId:%d)xxx", instanceId.GetPointer()); + SysSecureLog(NID_SHELL, "(instanceId:%ls)", instanceId.GetPointer()); RequestSharedMemoryId(__pIpcServer->GetClientPackageId(), instanceId, w, h, *pShmId); @@ -108,7 +108,7 @@ _AppWidgetManagerStub::OnRequestSharedMemoryId(const String& instanceId, int w, bool _AppWidgetManagerStub::OnRequestSharedMemoryIdForPD(const String& instanceId, int w, int h, int* pShmId) { - SysSecureLog(NID_SHELL, "(instanceId:%d)", instanceId.GetPointer()); + SysSecureLog(NID_SHELL, "(instanceId:%ls)", instanceId.GetPointer()); RequestSharedMemoryIdForPD(__pIpcServer->GetClientPackageId(), instanceId, w, h, *pShmId); @@ -249,17 +249,4 @@ _AppWidgetManagerStub::OnIpcServerStopped(const _IpcServer& server) SysLog(NID_SHELL, "\n"); } -void -_AppWidgetManagerStub::OnIpcClientConnected(const _IpcServer& server, int clientId) -{ - SysLog(NID_SHELL, "(clientId:%d)\n", clientId); - -} - -void -_AppWidgetManagerStub::OnIpcClientDisconnected(const _IpcServer& server, int clientId) -{ - SysLog(NID_SHELL, "(appId:%ls, clientId:%d)\n", server.GetClientApplicationId().GetPointer(), clientId); -} - }}} // Tizen::Shell::App diff --git a/src/FShell_AppWidgetPopupContext.cpp b/src/FShell_AppWidgetPopupContext.cpp index e328f39..39e2bdc 100644 --- a/src/FShell_AppWidgetPopupContext.cpp +++ b/src/FShell_AppWidgetPopupContext.cpp @@ -125,4 +125,10 @@ _AppWidgetPopupContext::CreateRequestArgsN(void) return pArgs; } +int +_AppWidgetPopupContext::GetClientId(void) const +{ + return __pParent->GetAppContext()->GetClientId(); +} + }}} // Tizen::Shell::App