void OnIpcConnected(int clientId);
void OnIpcDisconnected(void);
+ void OnApplicationTerminated(void);
+
_ConnectionState GetConnectionState(void) const;
bool GetWaitingStatus(void) const;
Tizen::App::AppId GetAppId(void) const;
#include <FBaseRtThread.h>
#include <FBaseColHashMapT.h>
#include <FSysISettingEventListener.h>
+#include <FApp_IAppEventListener.h>
#include "FShell_AppWidgetContext.h"
#include "FShell_AppWidgetManagerStub.h"
*/
class AppWidgetManagerService
:public Tizen::Shell::App::_AppWidgetManagerStub
+ ,public Tizen::App::_IAppEventListener
,public Tizen::Base::Runtime::ITimerEventListener
,public Tizen::System::ISettingEventListener
{
// core daemon callbacks
static int OnAppWidgetServiceConnected(struct event_arg *arg, void* data);
- static int OnAppWidgetServiceCDisconnected(struct event_arg *arg, void* data);
+ static int OnAppWidgetServiceDisconnected(struct event_arg *arg, void* data);
static int OnAppWidgetCreate(struct event_arg *arg, int *width, int *height, double *priority, void* data);
static int OnAppWidgetDestroy(struct event_arg *arg, void* data);
static int OnAppWidgetUpdate(struct event_arg *arg, void* data);
// ISettingEventListener
virtual void OnSettingChanged(Tizen::Base::String & key);
+ // _IAppEventListener
+ virtual void OnApplicationLaunched(const Tizen::App::AppId& appId, int pid);
+ virtual void OnApplicationTerminated(const Tizen::App::AppId& appId, int pid);
+
// helpers
_AppContext* FindAppContext(const Tizen::App::AppId& appId) const;
result RemoveAppContext(const Tizen::App::AppId& appId);
}
void
+_AppContext::OnApplicationTerminated(void)
+{
+ if (GetWaitingStatus() == true )
+ {
+ SysLog(NID_SHELL, "The application (%ls) is terminated without response.", __appId.GetPointer() );
+ SetWaitingStatus(false);
+
+ if (GetConnectionState() == CONNECTION_STATE_CONNECTING)
+ {
+ SysLog(NID_SHELL, "The application (%ls) is terminated before IPC connected, resetting connection state.", __appId.GetPointer() );
+ SetConnectionState(CONNECTION_STATE_DISCONNECTED);
+ }
+ }
+}
+
+void
_AppContext::SetWaitingStatus(bool status)
{
__isWaitingResult = status;
#include <FSystem.h>
#include <FBaseComparerT.h>
#include <FApp_AppManagerImpl.h>
+#include <FSys_SettingInfoImpl.h>
#include <FShell_AppWidgetManagerImpl.h>
#include <FIo_IpcServer.h>
#include <FBase_StringConverter.h>
__pingTimer.Cancel();
DeinitializeCoreDaemonEventReceiver();
+ _AppManagerImpl::GetInstance()->RemoveAppEventListener(*this);
+ _SettingInfoImpl::RemoveSettingEventListener(*this);
IMapEnumeratorT<String, _AppContext*>* pMapEnum = __appContextList.GetMapEnumeratorN();
if (pMapEnum != null)
InitializeCoreDaemonEventReceiver(pCoreDaemonId);
SetSettingEventListener(*this);
+ _AppManagerImpl::GetInstance()->AddAppEventListener(*this);
return E_SUCCESS;
}
while (true)
{
- result r = SettingInfo::AddSettingEventListener(listener);
+ result r = _SettingInfoImpl::AddSettingEventListener(listener);
if (r == E_SUCCESS)
{
SysLog(NID_APP, "Succeeded to invoke AddSettingEventListener");
}
int
-AppWidgetManagerService::OnAppWidgetServiceCDisconnected(struct event_arg *arg, void* data)
+AppWidgetManagerService::OnAppWidgetServiceDisconnected(struct event_arg *arg, void* data)
{
SysLog(NID_SHELL, "Disconnected with master daemon");
return 0;
}
void
+AppWidgetManagerService::OnApplicationLaunched(const AppId& appId, int pid)
+{
+
+}
+
+void
+AppWidgetManagerService::OnApplicationTerminated(const AppId& appId, int pid)
+{
+ _AppContext* pAppContext = null;
+ __appContextList.GetValue(appId, pAppContext);
+ if (pAppContext)
+ {
+ pAppContext->OnApplicationTerminated();
+ }
+}
+
+void
AppWidgetManagerService::OnIpcClientConnected(const AppId& appId, int clientId)
{
SysLog(NID_SHELL, "appId(%ls)", appId.GetPointer());
memset(&cbs, 0, sizeof(event_handler));
cbs.connected = OnAppWidgetServiceConnected,
- cbs.disconnected = OnAppWidgetServiceCDisconnected,
+ cbs.disconnected = OnAppWidgetServiceDisconnected,
cbs.pause = OnAppWidgetBackgroundAll,
cbs.resume = OnAppWidgetForegroundAll,
cbs.lb_pause = OnAppWidgetBackground,