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);
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);
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
Tizen::Base::Collection::ArrayListT<PendingTouchEvent*>* __pPendingTouchEventList;
Tizen::Base::String __pendingArgument;
bool __hasPendingRequest;
- AppContext* __pAppContext;
+ _AppContext* __pAppContext;
Tizen::Base::Collection::ArrayListT<PendingEvent*>* __pPendingEventList;
}; // class _AppWidgetContext
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;
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;
void SetWidth(int width);
void SetHeight(int height);
+protected:
+ bool __isRemoteBufferCreated;
+
private:
target_type __type;
Tizen::Base::String __userInfo;
Tizen::Base::String __providerName;
struct livebox_buffer *__buffer_info;
void *__buffer;
- _AppWidgetProviderState __providerState;
}; // class _AppWidgetContextBase
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;
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);
private:
static AppWidgetManagerService* __pTheInstance;
Tizen::Base::Collection::HashMapT<Tizen::Base::String, _AppWidgetContext*> __appWidgetContextList;
- Tizen::Base::Collection::HashMapT<Tizen::Base::String, AppContext*> __appContextList;
+ Tizen::Base::Collection::HashMapT<Tizen::Base::String, _AppContext*> __appContextList;
Tizen::Base::Runtime::Timer __pingTimer;
_TaskHandlerThread __handlerThread;
// _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);
private:
virtual Tizen::Base::Collection::HashMap* CreateRequestArgsN(void);
+ int GetClientId(void) const;
private:
_AppWidgetContext* __pParent;
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)
}
}
-AppContext*
+_AppContext*
_AppWidgetContext::GetAppContext(void) const
{
return __pAppContext;
_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);
}
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);
{
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));
return __lastUpdatedTime;
}
-void
-_AppWidgetContext::SetIpcClientId(int clientId)
+int
+_AppWidgetContext::GetClientId(void) const
{
- _AppWidgetContextBase::SetIpcClientId(clientId);
+ return GetAppContext()->GetClientId();
}
void
,__height(height)
,__priority(priority)
,__isForeground(true)
- ,__ipcClientId(-1)
,__buffer_info(null)
,__buffer(null)
- ,__providerState(INVALID)
+ ,__isRemoteBufferCreated(false)
{
_AppWidgetManagerImpl::ExtractAppIdAndProviderName(providerId, __appId, __providerName);
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
{
}
int bufferId = __buffer_info->fb->handle;
- __providerState = RUNNING;
+ __isRemoteBufferCreated = true;
SysLog(NID_SHELL, "(%d) Exit", bufferId);
return bufferId;
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<int>(__providerState);
+ return __isRemoteBufferCreated;
}
result
}
int
-_AppWidgetContextBase::GetClientId(void) const
-{
- return __ipcClientId;
-}
-
-int
_AppWidgetContextBase::GetWidth(void) const
{
return __width;
}
int
-AppWidgetManagerService::Find(const String& appId) const
-{
- int clientId = -1;
-
- unique_ptr< IMapEnumeratorT<String, _AppWidgetContext*> > 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
{
int providerCount = 0;
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<String, _AppWidgetContext*> > 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())
{
}
}
}
-
- 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";
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
_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();
_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());
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;
}
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);
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);
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
return pArgs;
}
+int
+_AppWidgetPopupContext::GetClientId(void) const
+{
+ return __pParent->GetAppContext()->GetClientId();
+}
+
}}} // Tizen::Shell::App