extern const wchar_t ARG_KEY_TIME_STAMP[];
extern const int UPDATE_PERIOD_MSEC_MIN;
-class _AppWidgetContext;
-class _AppWidgetPopupContext;
+
enum _ConnectionState
{
CONNECTION_STATE_DISCONNECTED
};
-////////////////////////////////////////////////
-// _AppContext
-////////////////////////////////////////////////
+class _AppWidgetContext;
+
+/**
+ * @class _AppContext
+ * @brief Context of a AppWidget provider application.
+ */
class _AppContext
:public Tizen::Base::Object
{
public:
- _AppContext(void);
+ _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);
- int GetClientId(void) const;
- void SetClientId(int clientId);
void SetWaitingStatus(bool status);
- bool GetWaitingStatus(void) const;
+ _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::ArrayListT<_AppWidgetContext*> __appWidetContextList;
+ Tizen::Base::Collection::HashMapT<Tizen::Base::String, _AppWidgetContext*> __appWidgetContextList;
+ Tizen::Base::Collection::ArrayListT<PendingEvent*>* __pPendingEventList;
};
-////////////////////////////////////////////////
-// _AppWidgetContext
-////////////////////////////////////////////////
+
+class _AppWidgetPopupContext;
+
+/**
+ * @class _AppWidgetContext
+ * @brief Context of a AppWidget provider and it's AppWidgetFrame
+ */
class _AppWidgetContext
: public Tizen::Base::Runtime::ITimerEventListener
, public _IAppWidgetRemoteBufferEventListener
void OnAdded(void);
void OnUpdate(const Tizen::Base::String& argument);
void OnResize(int width, int height);
- result OnRemoved(void);
- virtual void OnTouchEventReceived(buffer_event event, double timestamp, double x, double y);
-
+ 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);
void OnPopupCreated(double x, double y, int width, int height);
void OnPopupDestoyed(void);
_AppWidgetPopupContext* GetAppWidgetPopup(void) const;
- result SendPopupRequestToApp(const Tizen::App::AppId& appId, const Tizen::Base::String& operation, Tizen::Base::Collection::HashMap* pArgs) const;
Tizen::Base::Collection::HashMap* CreateRequestArgsN(void) const;
_AppContext* GetAppContext(void) const;
void OnDisconnected(void);
- result SendPendingEvent(void);
Tizen::Base::String GetAppId(void) const;
Tizen::Base::String GetProviderName(void) const;
// void SetPriority(int priority);
private:
- result SendAddRequest(int width, int height);
- result SendUpdateRequest(int width, int height, const Tizen::Base::String& argument);
- result SendResizeRequest(int width, int height);
- result SendRemoveRequest(void);
+ result SendAddRequest(int width, int height) const;
+ result SendUpdateRequest(int width, int height, const Tizen::Base::String& argument) const;
+ result SendResizeRequest(int width, int height) const;
+ result SendRemoveRequest(void) const;
void SendPendingTouchEvent(void);
- result RequestUpdate(const Tizen::Base::String& argument);
- result SendRequestToApp(const Tizen::App::AppId& appId, const Tizen::Base::String& operation, Tizen::Base::Collection::HashMap* pArgs);
+ virtual void OnTouchEventReceived(buffer_event event, double timestamp, double x, double y);
virtual void OnTimerExpired(Tizen::Base::Runtime::Timer& timer);
void SetForeground(bool forground);
int GetClientId(void) const;
bool IsForeground(void) const;
long long GetLastUpdatedTime(void) const;
+ bool IsUpdatePeriodExpired(void) const;
private:
struct PendingTouchEvent
double y;
};
- 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;
- };
-
mutable bool __isRemoteBufferProxyCreated;
bool __hasPendingRequest;
bool __isForeground;
int __height;
int __priority;
int __ipcClientId;
- int __updateMillis;
+ const int __updateMillis;
long long __lastUpdatedTime;
- Tizen::Base::String __userInfo;
- Tizen::Base::String __providerId;
- Tizen::Base::String __instanceId;
- Tizen::Base::String __appId;
- Tizen::Base::String __providerName;
+ 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
Tizen::Base::String __pendingArgument;
Tizen::Base::Runtime::Timer __updateTimer;
_AppWidgetRemoteBuffer* __pAppWidgetRemoteBuffer;
Tizen::Base::Collection::ArrayListT<PendingTouchEvent*>* __pPendingTouchEventList;
- Tizen::Base::Collection::ArrayListT<PendingEvent*>* __pPendingEventList;
-
}; // class _AppWidgetContext
+
+static const RequestId LOCAL_EVENT_REQUEST_UPDATE = 0;
+
}}} // Tizen::Shell::App
#endif // _FSHELL_INTERNAL_APPWIDGET_CONTEXT_H_
namespace Tizen { namespace Shell { namespace App {
+/**
+ * @class AppWidgetManagerService
+ * @brief The AppWidgetManagerService class handles request from viewer and provider applications, and manages context of connected application.
+ */
class AppWidgetManagerService
:public Tizen::Shell::App::_AppWidgetManagerStub
,public Tizen::Base::Runtime::ITimerEventListener
static AppWidgetManagerService* GetInstance(void);
static AppWidgetManagerService* CreateInstance(const char* pServiceIdForCoreDaemon);
_AppWidgetContext* AddAppWidget(const Tizen::Base::String& userInfo, const Tizen::Base::String& appId, const Tizen::Base::String& instanceId, int width, int height, int period, int priority);
- result RemoveAppWidget(const char* pProviderId, const char* pId);
- result RequestUpdate(_AppWidgetContext* pAppWidgetContext, const Tizen::Base::String& argument);
- int GetProviderCount(const Tizen::Base::String& appId) const;
+ result RequestUpdate(_AppWidgetContext* pAppWidgetContext, const Tizen::Base::String& argument) const;
+ void OnUserEventReceivedN(RequestId reqId, Tizen::Base::Collection::IList* pArgs);
private:
result Construct(const char* pServiceIdForCoreDaemon);
result DeinitializeCoreDaemonEventReceiver(void);
// core daemon callbacks
- static int AppWidgetConnected(struct event_arg *arg, void* data);
- static int AppWidgetDisconnected(struct event_arg *arg, void* data);
+ static int OnAppWidgetServiceConnected(struct event_arg *arg, void* data);
+ static int OnAppWidgetServiceCDisconnected(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);
static int OnAppWidgetRecreate(struct event_arg *arg, void* data);
// stub implementations
- virtual result RequestUpdate(const Tizen::App::AppId& appId, const Tizen::Base::String& providerName, const Tizen::Base::String& argument);
- virtual result RequestUpdateInstance(const Tizen::Base::String& instanceId, const Tizen::Base::String& argument);
+ 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);
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 void OnSettingChanged(Tizen::Base::String & key);
// helpers
- _AppWidgetContext* Find(const Tizen::Base::String& instanceId) const;
- int UpdateAppWidgetsByProviderId(const Tizen::Base::String& appId);
- result RequestPendingEvent(void);
+ _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:
- class _TaskHandlerThread
- : public Tizen::Base::Runtime::Thread
- {
- public:
- virtual ~_TaskHandlerThread(void);
- virtual void OnUserEventReceivedN(RequestId reqId, Tizen::Base::Collection::IList* pArgs);
-
- };
static AppWidgetManagerService* __pTheInstance;
- Tizen::Base::Collection::HashMapT<Tizen::Base::String, _AppWidgetContext*> __appWidgetContextList;
Tizen::Base::Collection::HashMapT<Tizen::Base::String, _AppContext*> __appContextList;
Tizen::Base::Runtime::Timer __pingTimer;
- _TaskHandlerThread __handlerThread;
}; // class AppWidgetManagerService
}}} // Tizen::Shell::App
/**
* @class _AppWidgetManagerStub
* @brief Handles IPC requests and calls real methods.
- * @since 2.1
*/
class _AppWidgetManagerStub
: public Tizen::Base::Object
// handlers
bool OnRequestUpdate(const Tizen::App::AppId& appId, const Tizen::Base::String& providerName, const Tizen::Base::String& argument, result* pRes);
bool OnRequestUpdateInstance(const Tizen::Base::String& instanceId, const Tizen::Base::String& argument, result* pRes);
- bool OnAcquireRemoteBuffer(const Tizen::Base::String& instanceId, int width, int height, int* pShmId);
- bool OnAcquireRemoteBufferForPD(const Tizen::Base::String& instanceId, int width, int height, int* pShmId);
+ bool OnAcquireRemoteBuffer(const Tizen::Base::String& instanceId, int width, int height, int* pBufferId);
+ bool OnAcquireRemoteBufferForPD(const Tizen::Base::String& instanceId, int width, int height, int* pBufferId);
bool OnSyncRemoteBuffer(const Tizen::Base::String& instanceId, int width, int height, result* pRes);
bool OnSyncRemoteBufferForPD(const Tizen::Base::String& instanceId, result* pRes);
bool OnReleaseRemoteBuffer(const Tizen::Base::String& instanceId, result* pRes);
bool OnSendAccessStatus(const Tizen::Base::String& instanceId, int accessStatus);
// interface to service
- virtual result RequestUpdate(const Tizen::App::AppId& appId, const Tizen::Base::String& providerName, const Tizen::Base::String& argument) = 0;
- virtual result RequestUpdateInstance(const Tizen::Base::String& instanceId, const Tizen::Base::String& argument) = 0;
+ virtual result RequestUpdate(const Tizen::App::AppId& appId, const Tizen::Base::String& providerName, const Tizen::Base::String& argument) const = 0;
+ virtual result RequestUpdateInstance(const Tizen::App::AppId& appId, const Tizen::Base::String& instanceId, const Tizen::Base::String& argument) = 0;
virtual result AcquireRemoteBuffer(const Tizen::App::AppId& appId, const Tizen::Base::String& instanceId, int width, int height, int& bufferId) = 0;
virtual result AcquireRemoteBufferForPD(const Tizen::App::AppId& appId, const Tizen::Base::String& instanceId, int width, int height, int& bufferId) = 0;
virtual result SyncRemoteBuffer(const Tizen::App::AppId& appId, const Tizen::Base::String& instanceId, int width, int height) = 0;
namespace Tizen { namespace Shell { namespace App
{
-class _AppWidgetContext;
+class _AppWidgetPopupContext;
+/**
+ * @class _AppWidgetContext
+ * @brief Context of a AppWidgetPopupProvider and it's AppWidgetPopup
+ */
class _AppWidgetPopupContext
:public Tizen::Base::Object
, public _IAppWidgetRemoteBufferEventListener
result SendPopupDestroyRequest(void);
private:
- int GetClientId(void) const;
+// int GetClientId(void) const;
void OnPopupDestoyed(void);
virtual void OnTouchEventReceived(buffer_event event, double timestamp, double x, double y);
namespace Tizen { namespace Shell { namespace App
{
+
class _IAppWidgetRemoteBufferEventListener
: virtual public Tizen::Base::Runtime::IEventListener
{
virtual void OnTouchEventReceived(buffer_event event, double timestamp, double x, double y) = 0;
};
+/**
+ * @class _AppWidgetContext
+ * @brief This class wraps provider_buffer_xxx of libprovider.
+ */
class _AppWidgetRemoteBuffer
:public Tizen::Base::Object
{
public:
OspAppWidgetService(void);
+
~OspAppWidgetService(void);
-public:
+private:
// Called when the ServiceApp is initializing.
bool OnAppInitializing(Tizen::App::AppRegistry& appRegistry);
// Called when the battery level changes.
void OnBatteryLevelChanged(Tizen::System::BatteryLevel batteryLevel);
-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);
+
+ virtual void OnUserEventReceivedN(RequestId reqId, Tizen::Base::Collection::IList* pArgs);
}; // class OspAppWidgetService
#endif // _OSP_APPWIDGET_SERVICE_H_
#include <provider.h>
#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 "FShell_AppWidgetManagerImpl.h"
#include "FShell_AppWidgetContext.h"
#include "FShell_AppWidgetContextHelper.h"
#include "FShell_AppWidgetRemoteBuffer.h"
+#include "FShell_TemplateUtil.h"
namespace Tizen { namespace Shell { namespace App
{
const int UPDATE_PERIOD_MSEC_MIN = 1800000; // 30min
+static const wchar_t INVALID_INSTANCE[] = L"file://invalid instance id";
+
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// _AppContext class
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-_AppContext::_AppContext(void)
- :__isWaitingResult(false)
+_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
__connectionState = state;
}
+Tizen::App::AppId
+_AppContext::GetAppId(void) const
+{
+ return __appId;
+}
+
int
_AppContext::GetClientId(void) const
{
}
void
-_AppContext::SetClientId(int clientId)
+_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
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
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
,__height(height)
,__priority(priority)
,__ipcClientId(-1)
- ,__updateMillis(period)
+ ,__updateMillis( (period > UPDATE_PERIOD_MSEC_MIN) ? period : UPDATE_PERIOD_MSEC_MIN )
,__lastUpdatedTime(0)
,__userInfo(userInfo)
,__providerId(providerId)
,__pAppWidgetPopup(null)
,__pAppWidgetRemoteBuffer(null)
,__pPendingTouchEventList(null)
- ,__pPendingEventList(null)
{
- _AppWidgetManagerImpl::ExtractAppIdAndProviderName(providerId, __appId, __providerName);
- SysSecureLog(NID_SHELL, "appId(%ls), providerId(%ls), instanceId(%ls), width(%d), height(%d), priority(%d)", __appId.GetPointer(), __providerId.GetPointer(), __instanceId.GetPointer(), __width, __height, __priority);
+ _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
if (__updateMillis > 0)
{
- __updateMillis = (__updateMillis > UPDATE_PERIOD_MSEC_MIN) ? __updateMillis : UPDATE_PERIOD_MSEC_MIN;
- SysLog(NID_SHELL, "period(%d)", __updateMillis);
-
SystemTime::GetTicks(this->__lastUpdatedTime);
result r = __updateTimer.Construct(*this);
SysTryReturnVoidResult(NID_SHELL, __pPendingTouchEventList, E_OUT_OF_MEMORY, "");
__pPendingTouchEventList->Construct();
- __pPendingEventList = new (nothrow) ArrayListT<PendingEvent*>();
- SysTryReturnVoidResult(NID_SHELL, __pPendingEventList, E_OUT_OF_MEMORY, "");
- __pPendingEventList->Construct();
-
__pAppWidgetRemoteBuffer = new (nothrow) _AppWidgetRemoteBuffer(providerId, instanceId, TYPE_LB, this);
SysTryReturnVoidResult(NID_SHELL, __pAppWidgetRemoteBuffer, E_OUT_OF_MEMORY, "");
}
delete __pPendingTouchEventList;
}
- if (__pPendingEventList)
- {
- for (int i = 0; i < __pPendingEventList->GetCount(); i++)
- {
- PendingEvent* pEvent = null;
- __pPendingEventList->GetAt(i, pEvent);
- delete pEvent;
- }
- __pPendingEventList->RemoveAll();
- delete __pPendingEventList;
- }
-
if (__pAppWidgetRemoteBuffer)
{
delete __pAppWidgetRemoteBuffer;
}
result
-_AppWidgetContext::OnRemoved(void)
+_AppWidgetContext::OnRemoved(bool isTriggeredByViewer)
{
- return SendRemoveRequest();
+ if (isTriggeredByViewer)
+ {
+ return SendRemoveRequest();
+ }
+ else
+ {
+ std::unique_ptr<char[]> providerId(_StringConverter::CopyToCharArrayN(GetProviderId()));
+ std::unique_ptr<char[]> id(_StringConverter::CopyToCharArrayN(GetInstanceId()));
+
+ int ret = provider_send_deleted(providerId.get(), id.get());
+ SysTryReturnResult(NID_SHELL, ret >= 0 , E_SYSTEM, "Failed to execute provider_send_deleted.");
+ }
+ return E_SUCCESS;
}
void
_AppWidgetContext::OnUpdate(const String& argument)
{
SysLog(NID_SHELL, "argument(%ls)", argument.GetPointer());
-
ClearLastResult();
- AppWidgetManagerService* pMgrService = AppWidgetManagerService::GetInstance();
- SysTryReturnVoidResult(NID_SHELL, pMgrService, E_SYSTEM, "[E_SYSTEM] Failed to get an instance of AppWidgetManagerService.");
-
// Queueing the pointer of background context.
if (!this->IsForeground())
{
result
_AppWidgetContext::RequestUpdate(const String& argument)
{
- AppWidgetManagerService* pMgrService = AppWidgetManagerService::GetInstance();
- SysTryReturnResult(NID_SHELL, pMgrService, E_SYSTEM, "Failed to get an instance of AppWidgetManagerService.");
+ ArrayList* pArray = new (std::nothrow) ArrayList();
+ SysTryReturnResult(NID_SHELL, pArray, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY]");
+
+ pArray->Construct();
+ pArray->Add(this);
+ pArray->Add(new String(argument));
- result r = pMgrService->RequestUpdate(this, argument);
- SysTryReturnResult(NID_SHELL, !IsFailed(r), r, "Failed to request update.");
+ result r = Tizen::App::App::GetInstance()->SendUserEvent(LOCAL_EVENT_REQUEST_UPDATE, pArray);
+ SysTryLog(NID_SHELL, !IsFailed(r), "[%s] Propagated.", GetErrorMessage(r));
+ SysLog(NID_SHELL, "UserEvent(%d) is sent for '%ls.%ls'.", LOCAL_EVENT_REQUEST_UPDATE, GetAppId().GetPointer(), GetProviderName().GetPointer() );
- return r;
+ return E_SUCCESS;
}
void
if (__hasPendingRequest == true)
{
- RequestUpdate(__pendingArgument);
+ SysLog(NID_SHELL, "There is pending update request.");
+// RequestUpdate(__pendingArgument);
+ OnUpdate(__pendingArgument);
}
else
{
- if (this->GetPeriod() > 0)
+ if (IsUpdatePeriodExpired() == true)
{
- long long currentTicks = 0;
- SystemTime::GetTicks(currentTicks);
-
- SysLog(NID_SHELL, "current[%lld] - updatedTime[%lld] = [%lld], period[%d]",
- currentTicks, this->GetLastUpdatedTime(), currentTicks - this->GetLastUpdatedTime(), this->GetPeriod());
-
- bool isPeriodExpired = (currentTicks - this->GetLastUpdatedTime()) >= (this->GetPeriod());
- if (isPeriodExpired)
- {
- SysLog(NID_SHELL, "The period is expired.");
- RequestUpdate(L"");
- }
+ SysLog(NID_SHELL, "The period is expired.");
+// RequestUpdate(L"");
+ OnUpdate(L"");
}
}
}
+bool
+_AppWidgetContext::IsUpdatePeriodExpired(void) const
+{
+ if (this->GetPeriod() <= 0)
+ {
+ return false;
+ }
+
+ long long currentTicks = 0;
+ SystemTime::GetTicks(currentTicks);
+
+ SysLog(NID_SHELL, "current[%lld] - last updated time[%lld] = [%lld], period[%d]",
+ currentTicks, this->GetLastUpdatedTime(), currentTicks - this->GetLastUpdatedTime(), this->GetPeriod());
+
+ bool isPeriodExpired = (currentTicks - this->GetLastUpdatedTime()) >= (this->GetPeriod());
+ return isPeriodExpired;
+}
+
void
_AppWidgetContext::OnBackground(void)
{
- SysLog(NID_SHELL, "OnBackground");
-
if (!IsForeground())
{
SysLog(NID_SHELL, "%ls is already background.", (this->GetAppId()).GetPointer());
return;
}
+
+ SysLog(NID_SHELL, "OnBackground");
SetForeground(false);
}
}
result
-_AppWidgetContext::SendAddRequest(int width, int height)
+_AppWidgetContext::SendAddRequest(int width, int height) const
{
std::unique_ptr<HashMap, AllElementsDeleter> pArgs (CreateRequestArgsN());
- return SendRequestToApp(GetAppId(), APPWIDGET_ON_ADD, pArgs.release());
+ return __pAppContext->SendRequestToApp(GetAppId(), APPWIDGET_ON_ADD, pArgs.release());
}
result
-_AppWidgetContext::SendUpdateRequest(int width, int height, const String& argument)
+_AppWidgetContext::SendUpdateRequest(int width, int height, const String& argument) const
{
std::unique_ptr<HashMap, AllElementsDeleter> pArgs (CreateRequestArgsN());
pArgs->Add(new (nothrow) String(ARG_KEY_ARGUMENT), new (nothrow) String(argument));
- return SendRequestToApp(GetAppId(), APPWIDGET_ON_UPDATE, pArgs.release());
+ return __pAppContext->SendRequestToApp(GetAppId(), APPWIDGET_ON_UPDATE, pArgs.release());
}
result
-_AppWidgetContext::SendResizeRequest(int width, int height)
+_AppWidgetContext::SendResizeRequest(int width, int height) const
{
std::unique_ptr<HashMap, AllElementsDeleter> pArgs (CreateRequestArgsN() );
- return SendRequestToApp(GetAppId(), APPWIDGET_ON_RESIZE, pArgs.release());
+ return __pAppContext->SendRequestToApp(GetAppId(), APPWIDGET_ON_RESIZE, pArgs.release());
}
result
-_AppWidgetContext::SendRemoveRequest(void)
+_AppWidgetContext::SendRemoveRequest(void) const
{
std::unique_ptr<HashMap, AllElementsDeleter> pArgs (CreateRequestArgsN());
- return SendRequestToApp(GetAppId(), APPWIDGET_ON_REMOVE, pArgs.release());
-}
-
-result
-_AppWidgetContext::SendPendingEvent(void)
-{
- GetAppContext()->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;
+ return __pAppContext->SendRequestToApp(GetAppId(), APPWIDGET_ON_REMOVE, pArgs.release());
}
void
}
result
-_AppWidgetContext::SendRequestToApp(const AppId& appId, const String& operation, HashMap* pArgs)
-{
- result r = E_SUCCESS;
-
- if ( __pAppContext->GetConnectionState() == CONNECTION_STATE_NONE || __pAppContext->GetConnectionState() == CONNECTION_STATE_DISCONNECTED)
- {
- SysLog(NID_SHELL, "The application is not running.");
- result r = _AppWidgetRequestHelper::SendAppControlRequest(appId, operation, pArgs);
- SysTryReturn(NID_SHELL, !IsFailed(r), r, r, "[%s] Failed to SendRequestToApp", GetErrorMessage(r));
-
- __pAppContext->SetWaitingStatus(true);
- __pAppContext->SetConnectionState(CONNECTION_STATE_CONNECTING);
- }
- else
- {
- if ( __pAppContext->GetConnectionState() == CONNECTION_STATE_CONNECTING || __pAppContext->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;
- __pAppContext->SetWaitingStatus(true);
- }
- }
-
- return E_SUCCESS;
-}
-
-result
-_AppWidgetContext::SendPopupRequestToApp(const AppId& appId, const String& operation, HashMap* pArgs) const
-{
- return _AppWidgetRequestHelper::SendAppControlRequest(appId, operation, pArgs);;
-}
-
-result
_AppWidgetContext::SyncRemoteBuffer(int width, int height)
{
std::unique_ptr<char[]> providerId(_StringConverter::CopyToCharArrayN(GetProviderId()));
#include <unique_ptr.h>
#include <provider.h>
#include <errno.h>
+
+#include <FBase.h>
#include <FBaseSysLog.h>
#include <FBaseColIList.h>
#include <FAppApp.h>
#include <FShell_AppWidgetManagerImpl.h>
#include <FIo_IpcServer.h>
#include <FBase_StringConverter.h>
-#include <FBase.h>
+
#include "FShell_AppWidgetContext.h"
#include "FShell_AppWidgetPopupContext.h"
#include "FShell_AppWidgetManagerStub.h"
namespace
{
-static const RequestId LOCAL_EVENT_REQUEST_UPDATE = 0;
-static const wchar_t INVALID_INSTANCE[] = L"file://invalid instance id";
static const char APPNAME_OSP_APPWIDGET_SERVICE[] = "osp-appwidget-service";
static const int TIMER_DURATION_PING = 120000;
//extern const int UPDATE_PERIOD_MSEC_MIN;
AppWidgetManagerService*
AppWidgetManagerService::GetInstance(void)
{
- if( __pTheInstance == null)
+ if (__pTheInstance == null)
{
__pTheInstance = CreateInstance(APPNAME_OSP_APPWIDGET_SERVICE);
}
AppWidgetManagerService*
AppWidgetManagerService::CreateInstance(const char* pCoreDaemonId)
{
- if( __pTheInstance == null)
+ if (__pTheInstance == null)
{
__pTheInstance = new AppWidgetManagerService();
SysTryReturn(NID_SHELL, __pTheInstance != null, null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY]");
{
_AppWidgetManagerStub::StartIpcServer();
- result r = __handlerThread.Construct(THREAD_TYPE_EVENT_DRIVEN);
- SysTryReturnResult(NID_SHELL, IsFailed(r) == false, r, "Event thread creation failure.");
-
- r = __handlerThread.Start();
- SysTryReturnResult(NID_SHELL, IsFailed(r) == false, r, "Event thread Start failure.");
-
SettingInfo::AddSettingEventListener(*this);
static __HashMapDefaultProviderT <String> strHashCodeProvider;
static ComparerT <String> strComparer;
- r = __appWidgetContextList.Construct(0, 0, strHashCodeProvider, strComparer);
- SysTryReturnResult(NID_SHELL, !IsFailed(r), E_SYSTEM, "Failed to execute Construct.");
-
- r = __appContextList.Construct(0, 0, strHashCodeProvider, strComparer);
+ result r = __appContextList.Construct(0, 0, strHashCodeProvider, strComparer);
SysTryReturnResult(NID_SHELL, !IsFailed(r), E_SYSTEM, "Failed to execute Construct.");
return InitializeCoreDaemonEventReceiver(pCoreDaemonId);
}
int
-AppWidgetManagerService::AppWidgetConnected(struct event_arg *arg, void* data)
+AppWidgetManagerService::OnAppWidgetServiceConnected(struct event_arg *arg, void* data)
{
int ret;
ret = provider_send_hello();
}
int
-AppWidgetManagerService::AppWidgetDisconnected(struct event_arg *arg, void* data)
+AppWidgetManagerService::OnAppWidgetServiceCDisconnected(struct event_arg *arg, void* data)
{
SysLog(NID_SHELL, "Disconnected with master daemon");
return 0;
provider_send_ping();
}
-_AppWidgetContext*
-AppWidgetManagerService::Find(const String& instanceId) const
+AppId
+AppWidgetManagerService::ExtractAppId(const String& providerId)
{
- _AppWidgetContext* pAppWidgetContext = null;
- __appWidgetContextList.GetValue(instanceId, pAppWidgetContext);
+ 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() );
- return pAppWidgetContext;
+ String appId;
+ providerId.SubString(0, index, appId);
+ return appId;
}
-int
-AppWidgetManagerService::GetProviderCount(const String& appId) const
+_AppWidgetContext*
+AppWidgetManagerService::FindAppWidget(const AppId& appId, const String& instanceId) const
{
- int providerCount = 0;
-
- unique_ptr< IMapEnumeratorT<String, _AppWidgetContext*> > pAppWidgetContextEnum(__appWidgetContextList.GetMapEnumeratorN());
- SysTryReturn(NID_SHELL, pAppWidgetContextEnum, providerCount, E_SYSTEM, "[E_SYSTEM]");
-
- while (pAppWidgetContextEnum->MoveNext() == E_SUCCESS)
- {
- _AppWidgetContext* pContext = null;
- pAppWidgetContextEnum->GetValue(pContext);
-
- if (pContext->GetAppId() == appId)
- {
- providerCount++;
- }
- }
+ _AppContext* pAppContext = null;
+ result r = __appContextList.GetValue(appId, pAppContext);
+ SysTryReturn(NID_SHELL, !IsFailed(r), null, E_OBJ_NOT_FOUND, "appId(%ls) is not found", appId.GetPointer() );
- SysLog(NID_SHELL, "The provider count is %d for %ls", providerCount, appId.GetPointer());
- return providerCount;
+ return pAppContext->FindAppWidget(instanceId);
}
-
void
AppWidgetManagerService::OnIpcClientConnected(const _IpcServer& server, int clientId)
{
__appContextList.GetValue(appId, pAppContext);
if (pAppContext)
{
- pAppContext->SetClientId(clientId);
- pAppContext->SetConnectionState(CONNECTION_STATE_CONNECTED);
+ pAppContext->OnIpcConnected(clientId);
}
}
__appContextList.GetValue(appId, pAppContext);
if (pAppContext)
{
- pAppContext->SetClientId(-1);
- pAppContext->SetConnectionState(CONNECTION_STATE_DISCONNECTED);
- }
-
- unique_ptr< IMapEnumeratorT<String, _AppWidgetContext*> > pAppWidgetContextEnum(__appWidgetContextList.GetMapEnumeratorN());
- SysTryReturnVoidResult(NID_SHELL, pAppWidgetContextEnum, E_SYSTEM, "");
-
- _AppWidgetContext* pContext = null;
- while (pAppWidgetContextEnum->MoveNext() == E_SUCCESS)
- {
-
- pAppWidgetContextEnum->GetValue(pContext);
- if (pContext->GetAppId() == appId)
- {
- pContext->OnDisconnected();
- }
+ pAppContext->OnIpcDisconnected();
}
}
|| key == KEY_SETTING_COUNTRY )
{
SysLog(NID_SHELL, "'%ls' is changed.", key.GetPointer() );
- RequestUpdate("", "", "");
+ RequestUpdateAllSuspened();
}
}
__appContextList.ContainsKey(appId, containsKey);
if( containsKey == false)
{
- pAppContext = new(std::nothrow) _AppContext;
+ pAppContext = new(std::nothrow) _AppContext(appId);
+ SysTryReturn(NID_SHELL, pAppContext, 0, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY]");
__appContextList.Add(appId, pAppContext);
}
else
__appContextList.GetValue(appId, pAppContext);
}
- _AppWidgetContext* pAppWidgetContext = new (std::nothrow)_AppWidgetContext(pAppContext, 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
-AppWidgetManagerService::RemoveAppWidget(const char* pProviderId, const char* pId)
-{
- SysTryReturn(NID_SHELL, ( pProviderId != null && pId != null), null, E_INVALID_ARG, "[E_INVALID_ARG]");
-
- _AppWidgetContext* pAppWidgetContext = Find(pId);
- SysTryReturn(NID_SHELL, pAppWidgetContext, null, E_OBJ_NOT_FOUND, "[E_OBJ_NOT_FOUND]");
-
- result r = __appWidgetContextList.Remove(pAppWidgetContext->GetInstanceId());
-
- delete pAppWidgetContext;
-
- SysLog(NID_SHELL, "AppWidget(%s, %s) is removed. remain count(%d)", pProviderId, pId, __appWidgetContextList.GetCount());
- return r;
+ return pAppContext->AddAppWidget(userInfo, providerId, instanceId, width, height, period, priority);
}
///////////////////////////////////////////////////////
SysSecureLog(NID_SHELL, "providerId(%s) id(%s) content(%s) cluster(%s) category(%s)", arg->pkgname, arg->id, arg->info.lb_create.content, arg->info.lb_create.cluster, arg->info.lb_create.category);
AppWidgetManagerService* pAppWidgetService = AppWidgetManagerService::GetInstance();
- SysTryReturn (NID_SHELL, pAppWidgetService->Find(arg->id) == null, -EBUSY, E_SUCCESS,"already exist");
+// SysTryReturn (NID_SHELL, pAppWidgetService->FindAppWidget(ExtractAppId(arg->pkgname), arg->id) == null, -EBUSY, E_SUCCESS,"already exist");
const double default_priority = 1.0f;
_AppWidgetContext* pAppWidgetContext = pAppWidgetService->AddAppWidget(arg->info.lb_create.content, arg->pkgname, arg->id, arg->info.lb_create.width, arg->info.lb_create.height, arg->info.lb_create.period * 1000, default_priority);
bool isInstanceIdSpecified = (arg->id == null || strlen(arg->id) < 1) ? false : true;
if (isInstanceIdSpecified == false)
{
- AppWidgetManagerService::GetInstance()->UpdateAppWidgetsByProviderId(arg->pkgname);
+ AppId appId;
+ String providerName;
+ _AppWidgetManagerImpl::ExtractAppIdAndProviderName(arg->pkgname, appId, providerName);
+
+ AppWidgetManagerService::GetInstance()->RequestUpdate(appId, providerName, L"");
}
else
{
- _AppWidgetContext* pAppWidgetContext = AppWidgetManagerService::GetInstance()->Find(arg->id);
- SysSecureTryReturnResult(NID_SHELL, pAppWidgetContext , E_SYSTEM, "[E_SYSTEM] pAppWidgetContext is null for providerId(%s), instanceId(%s)", arg->pkgname, arg->id);
+ _AppWidgetContext* pAppWidgetContext = AppWidgetManagerService::GetInstance()->FindAppWidget(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"");
}
}
int
-AppWidgetManagerService::UpdateAppWidgetsByProviderId(const String& providerId)
-{
- SysLog(NID_SHELL, "");
-
- unique_ptr< IMapEnumeratorT<String, _AppWidgetContext*> > pAppWidgetContextEnum(__appWidgetContextList.GetMapEnumeratorN());
- SysTryReturn(NID_SHELL, pAppWidgetContextEnum, 0, E_SYSTEM, "[E_SYSTEM]");
-
- while (pAppWidgetContextEnum->MoveNext() == E_SUCCESS)
- {
- _AppWidgetContext* pContext = null;
- pAppWidgetContextEnum->GetValue(pContext);
-
- if (pContext->GetProviderId() == providerId)
- {
- pContext->OnUpdate(L"");
- }
- }
-
- return 0;
-}
-
-int
AppWidgetManagerService::OnAppWidgetDestroy(struct event_arg *arg, void* data)
{
SysTryReturn (NID_SHELL, arg->type == event_arg::EVENT_DELETE, -EPERM, E_SUCCESS, "invalid argument from master");
SysLog(NID_SHELL, "Enter");
- AppWidgetManagerService* pAppWidgetManagerService = AppWidgetManagerService::GetInstance();
-
- _AppWidgetContext* pAppWidgetContext = pAppWidgetManagerService->Find(arg->id);
- SysSecureTryReturn(NID_SHELL, pAppWidgetContext, 0, E_SYSTEM, "[E_SYSTEM] pAppWidgetContext is null for providerId(%s), instanceId(%s)", arg->pkgname, arg->id);
-
- result r = pAppWidgetContext->OnRemoved();
- SysTryReturn(NID_SHELL, !IsFailed(r), 0, E_SYSTEM, "[E_SYSTEM] Failed to execute OnRemoved.");
+ _AppContext* pAppContext = null;
+ result r = AppWidgetManagerService::GetInstance()->__appContextList.GetValue(ExtractAppId(arg->pkgname), pAppContext);
+ SysTryReturn(NID_SHELL, !IsFailed(r), null, E_OBJ_NOT_FOUND, "[E_OBJ_NOT_FOUND]");
- r = pAppWidgetManagerService->RemoveAppWidget(arg->pkgname, arg->id);
- SysTryReturn(NID_SHELL, !IsFailed(r), 0, E_SYSTEM, "[E_SYSTEM] Failed to execute RemoveAppWidget.");
+ pAppContext->RemoveAppWidget(arg->id);
SysLog(NID_SHELL, "Exit");
return 0;
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()->Find(arg->id);
+ _AppWidgetContext* pAppWidgetContext = AppWidgetManagerService::GetInstance()->FindAppWidget(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);
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()->Find(arg->id);
+ _AppWidgetContext* pAppWidgetContext = AppWidgetManagerService::GetInstance()->FindAppWidget(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);
{
SysTryReturn(NID_SHELL, arg, 0, E_SUCCESS, "arg is null!");
- _AppWidgetContext* pAppWidgetContext = AppWidgetManagerService::GetInstance()->Find(arg->id);
+ _AppWidgetContext* pAppWidgetContext = AppWidgetManagerService::GetInstance()->FindAppWidget(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);
int
AppWidgetManagerService::OnAppWidgetBackgroundAll(struct event_arg *arg, void* data)
{
- unique_ptr< IMapEnumeratorT<String, _AppWidgetContext*> > pAppWidgetContextEnum((AppWidgetManagerService::GetInstance()->__appWidgetContextList).GetMapEnumeratorN());
- SysTryReturn(NID_SHELL, pAppWidgetContextEnum, -1, E_SYSTEM, "[E_SYSTEM]");
+ unique_ptr< IMapEnumeratorT<String, _AppContext*> > pAppContextEnum(AppWidgetManagerService::GetInstance()->__appContextList.GetMapEnumeratorN());
+ SysTryReturnResult(NID_SHELL, pAppContextEnum, E_SYSTEM, "Failed to invoke __appContextList.GetMapEnumeratorN()");
- while (pAppWidgetContextEnum->MoveNext() == E_SUCCESS)
+ while (pAppContextEnum->MoveNext() == E_SUCCESS)
{
- _AppWidgetContext* pContext = null;
- pAppWidgetContextEnum->GetValue(pContext);
+ _AppContext* pAppContext = null;
+ pAppContextEnum->GetValue(pAppContext);
- pContext->OnBackground();
+ if (pAppContext)
+ {
+ pAppContext->OnAppWidgetBackgroundAll();
+ }
}
return 0;
AppWidgetManagerService::OnAppWidgetForeground(struct event_arg *pArg, void* pData)
{
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()->Find(pArg->id);
+ _AppWidgetContext* pAppWidgetContext = AppWidgetManagerService::GetInstance()->FindAppWidget(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);
- SysSecureLog(NID_SHELL, "providerId(%s), id(%s)", pArg->pkgname, pArg->id);
pAppWidgetContext->OnForeground();
+
return 0;
}
int
AppWidgetManagerService::OnAppWidgetForegroundAll(struct event_arg *pArg, void* pData)
{
- unique_ptr< IMapEnumeratorT<String, _AppWidgetContext*> > pAppWidgetContextEnum((AppWidgetManagerService::GetInstance()->__appWidgetContextList).GetMapEnumeratorN());
- SysTryReturn(NID_SHELL, pAppWidgetContextEnum, -1, E_SYSTEM, "[E_SYSTEM]");
+ unique_ptr< IMapEnumeratorT<String, _AppContext*> > pAppContextEnum(AppWidgetManagerService::GetInstance()->__appContextList.GetMapEnumeratorN());
+ SysTryReturnResult(NID_SHELL, pAppContextEnum, E_SYSTEM, "Failed to invoke __appContextList.GetMapEnumeratorN()");
- while (pAppWidgetContextEnum->MoveNext() == E_SUCCESS)
+ while (pAppContextEnum->MoveNext() == E_SUCCESS)
{
- _AppWidgetContext* pContext = null;
- pAppWidgetContextEnum->GetValue(pContext);
+ _AppContext* pAppContext = null;
+ pAppContextEnum->GetValue(pAppContext);
- pContext->OnForeground();
+ if (pAppContext)
+ {
+ pAppContext->OnAppWidgetForegroundAll();
+ }
}
return 0;
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()->Find(arg->id);
+ _AppWidgetContext* pAppWidgetContext = AppWidgetManagerService::GetInstance()->FindAppWidget(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);
SysTryReturn(NID_SHELL, arg != null, EINVAL, E_INVALID_ARG, "[E_INVALID_ARG]");
SysTryReturn(NID_SHELL, arg->pkgname != null, EINVAL, E_INVALID_ARG, "[E_INVALID_ARG]");
SysTryReturn(NID_SHELL, arg->id != null, EINVAL, E_INVALID_ARG, "[E_INVALID_ARG]");
+ SysTryReturn(NID_SHELL, arg->type == event_arg::EVENT_RENEW, -EPERM, E_SUCCESS, "invalid argument from master");
SysSecureLog(NID_SHELL, "providerId(%s) id(%s) content(%s) cluster(%s) category(%s)", arg->pkgname, arg->id, arg->info.lb_recreate.content, arg->info.lb_recreate.cluster, arg->info.lb_recreate.category);
struct event_handler cbs;
memset(&cbs, 0, sizeof(event_handler));
- cbs.connected = AppWidgetConnected,
- cbs.disconnected = AppWidgetDisconnected,
+ cbs.connected = OnAppWidgetServiceConnected,
+ cbs.disconnected = OnAppWidgetServiceCDisconnected,
cbs.pause = OnAppWidgetBackgroundAll,
cbs.resume = OnAppWidgetForegroundAll,
cbs.lb_pause = OnAppWidgetBackground,
result
-AppWidgetManagerService::RequestUpdate(const Tizen::App::AppId& appId, const Tizen::Base::String& providerName, const Tizen::Base::String& argument)
+AppWidgetManagerService::RequestUpdate(const Tizen::App::AppId& appId, const Tizen::Base::String& providerName, const Tizen::Base::String& argument) const
{
- bool found = false;
- bool updateAllSuspended = appId.IsEmpty();
-
- unique_ptr< IMapEnumeratorT<String, _AppWidgetContext*> > pAppWidgetContextEnum((AppWidgetManagerService::GetInstance()->__appWidgetContextList).GetMapEnumeratorN());
- SysTryReturnResult(NID_SHELL, pAppWidgetContextEnum, E_SYSTEM, "");
-
- while (pAppWidgetContextEnum->MoveNext() == E_SUCCESS)
- {
- _AppWidgetContext* pContext = null;
- pAppWidgetContextEnum->GetValue(pContext);
-
- if ( (updateAllSuspended == true && AppManager::GetInstance()->IsRunning(appId) == false )
- || ( pContext->GetAppId() == appId && pContext->GetProviderName() == providerName ) )
- {
- RequestUpdate(pContext, argument);
- found = true;
- }
- }
+ _AppContext* pAppContext = null;
+ result r = __appContextList.GetValue(appId, pAppContext);
+ SysTryReturn(NID_SHELL, !IsFailed(r), null, E_OBJ_NOT_FOUND, "appId(%ls) is not found", appId.GetPointer() );
- SysLog(NID_SHELL, "Exit.");
- return (found) ? E_SUCCESS : E_OBJ_NOT_FOUND;
+ return pAppContext->RequestUpdate(providerName, argument);
}
-// for resuming
result
-AppWidgetManagerService::RequestUpdate(_AppWidgetContext* pAppWidgetContext, const String& argument)
+AppWidgetManagerService::RequestUpdateAllSuspened(void) const
{
- SysTryReturnResult( NID_SHELL, pAppWidgetContext, E_INVALID_STATE, "pAppWidgetContext is null.");
+ unique_ptr< IMapEnumeratorT<String, _AppContext*> > pAppContextEnum(__appContextList.GetMapEnumeratorN());
+ SysTryReturnResult(NID_SHELL, pAppContextEnum, E_SYSTEM, "Failed to invoke __appContextList.GetMapEnumeratorN()");
- ArrayList* pArray = new (std::nothrow) ArrayList();
- SysTryReturnResult(NID_SHELL, pArray, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY]");
+ while (pAppContextEnum->MoveNext() == E_SUCCESS)
+ {
+ _AppContext* pAppContext = null;
+ pAppContextEnum->GetValue(pAppContext);
- pArray->Construct();
- pArray->Add(pAppWidgetContext);
- pArray->Add(new String(argument));
+ if ( pAppContext && AppManager::GetInstance()->IsRunning(pAppContext->GetAppId()) == false )
+ {
+ pAppContext->RequestUpdate(L"", L"");
+ }
- result r = __handlerThread.SendUserEvent(LOCAL_EVENT_REQUEST_UPDATE, pArray);
- SysTryLog(NID_SHELL, !IsFailed(r), "[%s] Propagated.", GetErrorMessage(r));
- SysLog(NID_SHELL, "UserEvent(%d) is sent for '%ls.%ls'.", LOCAL_EVENT_REQUEST_UPDATE, pAppWidgetContext->GetAppId().GetPointer(), pAppWidgetContext->GetProviderName().GetPointer() );
+ }
+ SysLog(NID_SHELL, "Exit.");
return E_SUCCESS;
}
result
-AppWidgetManagerService::RequestUpdateInstance(const Tizen::Base::String& instanceId, const Tizen::Base::String& argument)
+AppWidgetManagerService::RequestUpdateInstance(const Tizen::App::AppId& appId, const Tizen::Base::String& instanceId, const Tizen::Base::String& argument)
{
SysSecureLog(NID_SHELL, "%ls, %ls", instanceId.GetPointer(), argument.GetPointer() );
- _AppWidgetContext* pAppWidgetContext = Find(instanceId);
+ _AppWidgetContext* pAppWidgetContext = FindAppWidget(appId, instanceId);
SysTryReturnResult(NID_SHELL, pAppWidgetContext, E_OBJ_NOT_FOUND, "Failed to find the object(%ls).", instanceId.GetPointer());
- RequestUpdate(pAppWidgetContext, argument);
+ pAppWidgetContext->RequestUpdate(argument);
return E_SUCCESS;
}
result
AppWidgetManagerService::AcquireRemoteBuffer(const Tizen::App::AppId& appId, const Tizen::Base::String& instanceId, int width, int height, int& bufferId)
{
- _AppWidgetContext* pAppWidgetContext = this->Find(instanceId);
+ _AppWidgetContext* pAppWidgetContext = this->FindAppWidget(appId, instanceId);
SysSecureTryReturnResult(NID_SHELL, pAppWidgetContext , E_SYSTEM, "[E_SYSTEM] pAppWidgetContext is null for (%ls) (%ls)", appId.GetPointer(), instanceId.GetPointer());
bufferId = pAppWidgetContext->AcquireRemoteBuffer(width, height);
result
AppWidgetManagerService::AcquireRemoteBufferForPD(const Tizen::App::AppId& appId, const Tizen::Base::String& instanceId, int width, int height, int& bufferId)
{
- _AppWidgetContext* pAppWidgetContext = this->Find(instanceId);
+ _AppWidgetContext* pAppWidgetContext = this->FindAppWidget(appId, instanceId);
SysSecureTryReturnResult(NID_SHELL, pAppWidgetContext , E_SYSTEM, "pAppWidgetContext is null for (%ls) (%ls)", appId.GetPointer(), instanceId.GetPointer());
_AppWidgetPopupContext* pPopupContext = pAppWidgetContext->GetAppWidgetPopup();
result
AppWidgetManagerService::SyncRemoteBuffer(const Tizen::App::AppId& appId, const Tizen::Base::String& instanceId, int width, int height)
{
- _AppWidgetContext* pAppWidgetContext = this->Find(instanceId);
+ _AppWidgetContext* pAppWidgetContext = this->FindAppWidget(appId, instanceId);
SysSecureTryReturnResult(NID_SHELL, pAppWidgetContext , E_SYSTEM, "[E_SYSTEM] pAppWidgetContext is null for (%ls) (%ls)", appId.GetPointer(), instanceId.GetPointer());
return pAppWidgetContext->SyncRemoteBuffer(width, height);
result
AppWidgetManagerService::SyncRemoteBufferForPD(const Tizen::App::AppId& appId, const Tizen::Base::String& instanceId)
{
- _AppWidgetContext* pAppWidgetContext = this->Find(instanceId);
+ _AppWidgetContext* pAppWidgetContext = this->FindAppWidget(appId, instanceId);
SysSecureTryReturnResult(NID_SHELL, pAppWidgetContext , E_SYSTEM, "[E_SYSTEM] pAppWidgetContext is null for (%ls) (%ls)", appId.GetPointer(), instanceId.GetPointer());
SysSecureTryReturnResult(NID_SHELL, pAppWidgetContext->GetAppWidgetPopup(), E_SYSTEM, "[E_SYSTEM] GetAppWidgetPopup() returns null for (%ls) (%ls)", appId.GetPointer(), instanceId.GetPointer());
{
SysLog(NID_SHELL, "ENTER");
- _AppWidgetContext* pAppWidgetContext = this->Find(instanceId);
- SysSecureTryReturnResult(NID_SHELL, pAppWidgetContext, E_SYSTEM, "pAppWidgetContext is null for (%ls) (%ls)", appId.GetPointer(), instanceId.GetPointer());
-
- providerCount = GetProviderCount(pAppWidgetContext->GetAppId());
-
- std::unique_ptr<char[]> providerId(_StringConverter::CopyToCharArrayN(pAppWidgetContext->GetProviderId()));
- std::unique_ptr<char[]> id(_StringConverter::CopyToCharArrayN(pAppWidgetContext->GetInstanceId()));
-
- int ret = provider_send_deleted(providerId.get(), id.get());
- SysTryReturnResult(NID_SHELL, ret >= 0 , E_SYSTEM, "Failed to execute provider_send_deleted.");
+ _AppContext* pAppContext = null;
+ result r = __appContextList.GetValue(appId, pAppContext);
+ SysTryReturn(NID_SHELL, pAppContext, null, E_OBJ_NOT_FOUND, "[E_OBJ_NOT_FOUND]");
- //result r = pAppWidgetContext->OnRemoved();
- //SysTryReturnResult(NID_SHELL, !IsFailed(r), E_SYSTEM, "Failed to execute OnRemoved.");
+ providerCount = pAppContext->GetProviderCount(appId);
- result r = RemoveAppWidget(providerId.get(), id.get());
+ r = pAppContext->RemoveAppWidget(instanceId, false);
SysTryReturnResult(NID_SHELL, !IsFailed(r), E_SYSTEM, "Failed to execute RemoveAppWidget.");
providerCount--;
- RequestPendingEvent();
+ pAppContext->SendPendingEvent();
return E_SUCCESS;
}
result
AppWidgetManagerService::SendResult(const Tizen::App::AppId& appId, const Tizen::Base::String& instanceId, bool isSucceeded)
{
- _AppWidgetContext* pAppWidgetContext = null;
+ _AppContext* pAppContext = null;
+ result r = __appContextList.GetValue(appId, pAppContext);
+ SysTryReturn(NID_SHELL, !IsFailed(r), null, E_OBJ_NOT_FOUND, "appId(%ls) is not found", appId.GetPointer() );
if (!isSucceeded)
{
- SysLog(NID_SHELL, "SendResult is called[false].");
-
- if (instanceId == INVALID_INSTANCE)
- {
- unique_ptr< IMapEnumeratorT<String, _AppWidgetContext*> > pAppWidgetContextEnum((AppWidgetManagerService::GetInstance()->__appWidgetContextList).GetMapEnumeratorN());
- SysTryReturnResult(NID_SHELL, pAppWidgetContextEnum, E_SYSTEM, "");
-
- while (pAppWidgetContextEnum->MoveNext() == E_SUCCESS)
- {
- pAppWidgetContextEnum->GetValue(pAppWidgetContext);
- SysSecureTryReturnResult(NID_SHELL, pAppWidgetContext, E_SYSTEM, "pAppWidgetContext is null for (%ls) (%ls)", appId.GetPointer(), instanceId.GetPointer());
-
- if (pAppWidgetContext->GetAppContext()->GetConnectionState() == CONNECTION_STATE_NONE)
- {
- break;
- }
- }
- }
- else
- {
- pAppWidgetContext = this->Find(instanceId);
- }
-
- SysSecureTryReturnResult(NID_SHELL, pAppWidgetContext, E_SYSTEM, "pAppWidgetContext is null for (%ls) (%ls)", appId.GetPointer(), instanceId.GetPointer());
-
- std::unique_ptr<char[]> providerId(_StringConverter::CopyToCharArrayN(pAppWidgetContext->GetProviderId()));
- std::unique_ptr<char[]> id(_StringConverter::CopyToCharArrayN(pAppWidgetContext->GetInstanceId()));
-
- int ret = provider_send_deleted(providerId.get(), id.get());
- SysTryReturnResult(NID_SHELL, ret >= 0 , E_SYSTEM, "Failed to execute provider_send_deleted.");
-
- //result r = pAppWidgetContext->OnRemoved();
- //SysTryReturnResult(NID_SHELL, !IsFailed(r), E_SYSTEM, "Failed to execute OnRemoved.");
-
- result r = RemoveAppWidget(providerId.get(), id.get());
+ r = pAppContext->RemoveAppWidget(instanceId, false);
SysTryReturnResult(NID_SHELL, !IsFailed(r), E_SYSTEM, "Failed to execute RemoveAppWidget.");
}
else // for pending event excluding touch event.
SysLog(NID_SHELL, "SendResult is called[true].");
}
- RequestPendingEvent();
+ pAppContext->SendPendingEvent();
return E_SUCCESS;
}
result
AppWidgetManagerService::SendAccessStatus(const Tizen::App::AppId& appId, const Tizen::Base::String& instanceId, int accessStatus)
{
- _AppWidgetContext* pAppWidgetContext = this->Find(instanceId);
+ _AppWidgetContext* pAppWidgetContext = this->FindAppWidget(appId, instanceId);
SysSecureTryReturnResult(NID_SHELL, pAppWidgetContext , E_SYSTEM, "[E_SYSTEM] pAppWidgetContext is null for (%ls) (%ls)", appId.GetPointer(), instanceId.GetPointer());
return pAppWidgetContext->SendAccessStatus(accessStatus);
}
-result
-AppWidgetManagerService::RequestPendingEvent(void)
-{
- unique_ptr< IMapEnumeratorT<String, _AppWidgetContext*> > pAppWidgetContextEnum((AppWidgetManagerService::GetInstance()->__appWidgetContextList).GetMapEnumeratorN());
- SysTryReturnResult(NID_SHELL, pAppWidgetContextEnum, E_SYSTEM, "");
-
- result r = E_SUCCESS;
-
- while (pAppWidgetContextEnum->MoveNext() == E_SUCCESS)
- {
- _AppWidgetContext* pContext = null;
- pAppWidgetContextEnum->GetValue(pContext);
-
- r = pContext->SendPendingEvent();
- if (r == E_SUCCESS)
- {
- SysLog(NID_SHELL, "Found pending event.");
- break;
- }
- }
-
- return E_SUCCESS;
-}
-
-AppWidgetManagerService::_TaskHandlerThread::~_TaskHandlerThread(void)
-{
-
-}
-
void
-AppWidgetManagerService::_TaskHandlerThread::OnUserEventReceivedN(RequestId reqId, IList* pArgs)
+AppWidgetManagerService::OnUserEventReceivedN(RequestId reqId, IList* pArgs)
{
SysTryReturnVoidResult(NID_SHELL, pArgs != null, E_INVALID_STATE, "pArgs is null!.");
_AppWidgetManagerStub::OnRequestUpdateInstance(const Tizen::Base::String& instanceId, const Tizen::Base::String& argument, result* pRes)
{
SysLog(NID_SHELL, "");
- *pRes = RequestUpdateInstance(instanceId, argument);
+ *pRes = RequestUpdateInstance(__pIpcServer->GetClientApplicationId(), instanceId, argument);
return true;
}
bool
-_AppWidgetManagerStub::OnAcquireRemoteBuffer(const String& instanceId, int w, int h, int* pShmId)
+_AppWidgetManagerStub::OnAcquireRemoteBuffer(const String& instanceId, int w, int h, int* pBufferId)
{
SysSecureLog(NID_SHELL, "(instanceId:%ls)", instanceId.GetPointer());
- AcquireRemoteBuffer(__pIpcServer->GetClientPackageId(), instanceId, w, h, *pShmId);
+ AcquireRemoteBuffer(__pIpcServer->GetClientApplicationId(), instanceId, w, h, *pBufferId);
return true;
}
bool
-_AppWidgetManagerStub::OnAcquireRemoteBufferForPD(const String& instanceId, int w, int h, int* pShmId)
+_AppWidgetManagerStub::OnAcquireRemoteBufferForPD(const String& instanceId, int w, int h, int* pBufferId)
{
SysSecureLog(NID_SHELL, "(instanceId:%ls)", instanceId.GetPointer());
- AcquireRemoteBufferForPD(__pIpcServer->GetClientPackageId(), instanceId, w, h, *pShmId);
+ AcquireRemoteBufferForPD(__pIpcServer->GetClientApplicationId(), instanceId, w, h, *pBufferId);
return true;
}
{
SysSecureLog(NID_SHELL, "(instanceId:%ls)", instanceId.GetPointer());
- *pRes = SyncRemoteBuffer(__pIpcServer->GetClientPackageId(), instanceId, w, h);
+ *pRes = SyncRemoteBuffer(__pIpcServer->GetClientApplicationId(), instanceId, w, h);
return true;
}
{
SysSecureLog(NID_SHELL, "(instanceId:%ls)", instanceId.GetPointer());
- *pRes = SyncRemoteBufferForPD(__pIpcServer->GetClientPackageId(), instanceId);
+ *pRes = SyncRemoteBufferForPD(__pIpcServer->GetClientApplicationId(), instanceId);
return true;
}
{
SysSecureLog(NID_SHELL, "(instanceId:%ls)", instanceId.GetPointer());
- *pRes = ReleaseRemoteBuffer(__pIpcServer->GetClientPackageId(), instanceId);
+ *pRes = ReleaseRemoteBuffer(__pIpcServer->GetClientApplicationId(), instanceId);
return true;
}
{
SysSecureLog(NID_SHELL, "(instanceId:%ls)", instanceId.GetPointer());
- *pRes = ReleaseRemoteBufferForPD(__pIpcServer->GetClientPackageId(), instanceId);
+ *pRes = ReleaseRemoteBufferForPD(__pIpcServer->GetClientApplicationId(), instanceId);
return true;
}
{
SysSecureLog(NID_SHELL, "(instanceId:%ls)", instanceId.GetPointer());
- RequestProviderCount(__pIpcServer->GetClientPackageId(), instanceId, *pProviderCount);
+ RequestProviderCount(__pIpcServer->GetClientApplicationId(), instanceId, *pProviderCount);
return true;
}
{
SysSecureLog(NID_SHELL, "(instanceId:%ls, data:%d)", instanceId.GetPointer(), isSucceeded);
- SendResult(__pIpcServer->GetClientPackageId(), instanceId, isSucceeded);
+ SendResult(__pIpcServer->GetClientApplicationId(), instanceId, isSucceeded);
return true;
}
{
SysSecureLog(NID_SHELL, "(instanceId:%ls, data:%d)", instanceId.GetPointer(), accessStatus);
- SendAccessStatus(__pIpcServer->GetClientPackageId(), instanceId, accessStatus);
+ SendAccessStatus(__pIpcServer->GetClientApplicationId(), instanceId, accessStatus);
return true;
}
pArgs->Add(new String(ARG_KEY_POPUP_WIDTH), new String(Integer::ToString(width)));
pArgs->Add(new String(ARG_KEY_POPUP_HEIGHT), new String(Integer::ToString(height)));
- return __pParent->SendPopupRequestToApp(__pParent->GetAppId(), APPWIDGET_POPUP_ON_CREATE, pArgs.get());
+ return _AppWidgetRequestHelper::SendAppControlRequest(__pParent->GetAppId(), APPWIDGET_POPUP_ON_CREATE, pArgs.get());
}
result
{
std::unique_ptr<HashMap, AllElementsDeleter> pArgs (__pParent->CreateRequestArgsN() );
- return __pParent->SendPopupRequestToApp(__pParent->GetAppId(), APPWIDGET_POPUP_ON_DESTROY, pArgs.get());
+ return _AppWidgetRequestHelper::SendAppControlRequest(__pParent->GetAppId(), APPWIDGET_POPUP_ON_DESTROY, pArgs.get());
}
void
return E_SUCCESS;
}
-int
+/*int
_AppWidgetPopupContext::GetClientId(void) const
{
return __pParent->GetAppContext()->GetClientId();
-}
+}*/
int
_AppWidgetPopupContext::AcquireRemoteBuffer(int w, int h) const
isServiceCreated = true;
}
}
+
+void
+OspAppWidgetService::OnUserEventReceivedN(RequestId reqId, Tizen::Base::Collection::IList* pArgs)
+{
+ AppWidgetManagerService::GetInstance()->OnUserEventReceivedN(reqId, pArgs);
+}