SET (${this_target}_SOURCE_FILES
src/OspAppWidgetService.cpp
src/OspAppWidgetServiceEntry.cpp
+ src/FShell_AppContext.cpp
src/FShell_AppWidgetContext.cpp
src/FShell_AppWidgetRemoteBuffer.cpp
src/FShell_AppWidgetManagerService.cpp
--- /dev/null
+//
+// Copyright (c) 2012-2013 Samsung Electronics Co., Ltd.
+//
+// Licensed under the Flora License, Version 1.1 (the License);
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://floralicense.org/license/
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+/**
+ * @file FShell_AppContext.h
+ * @brief This is the header file for the _AppContext class.
+ *
+ * This header file contains the declarations of the _AppContext class.
+ */
+
+#ifndef _FSHELL_INTERNAL_APP_CONTEXT_H_
+#define _FSHELL_INTERNAL_APP_CONTEXT_H_
+
+#include <FAppTypes.h>
+#include <FBaseColArrayListT.h>
+
+namespace Tizen { namespace Base { namespace Collection
+{
+class HashMap;
+}}}
+
+namespace Tizen { namespace Shell { namespace App
+{
+
+enum _ConnectionState
+{
+ CONNECTION_STATE_NONE = 0,
+ CONNECTION_STATE_CONNECTING,
+ CONNECTION_STATE_CONNECTED,
+ CONNECTION_STATE_DISCONNECTED
+};
+
+class _AppWidgetContext;
+
+/**
+ * @class _AppContext
+ * @brief Context of a AppWidget provider application.
+ */
+class _AppContext
+ :public Tizen::Base::Object
+{
+
+public:
+ _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);
+ void SetWaitingStatus(bool status);
+ _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;
+ };
+
+ const Tizen::App::AppId __appId;
+ bool __isWaitingResult;
+ int __ipcClientId;
+ _ConnectionState __connectionState;
+ Tizen::Base::Collection::HashMapT<Tizen::Base::String, _AppWidgetContext*> __appWidgetContextList;
+ Tizen::Base::Collection::ArrayListT<PendingEvent*>* __pPendingEventList;
+};
+
+
+}}} // Tizen::Shell::App
+
+#endif // _FSHELL_INTERNAL_APP_CONTEXT_H_
#include <FAppTypes.h>
#include <FBaseRtTimer.h>
#include <FBaseColArrayListT.h>
+#include "FShell_AppContext.h"
#include "FShell_AppWidgetRemoteBuffer.h"
namespace Tizen { namespace Base { namespace Collection
extern const int UPDATE_PERIOD_MSEC_MIN;
-enum _ConnectionState
-{
- CONNECTION_STATE_NONE = 0,
- CONNECTION_STATE_CONNECTING,
- CONNECTION_STATE_CONNECTED,
- CONNECTION_STATE_DISCONNECTED
-};
-
-class _AppWidgetContext;
-
-/**
- * @class _AppContext
- * @brief Context of a AppWidget provider application.
- */
-class _AppContext
- :public Tizen::Base::Object
-{
-
-public:
- _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);
- void SetWaitingStatus(bool status);
- _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::HashMapT<Tizen::Base::String, _AppWidgetContext*> __appWidgetContextList;
- Tizen::Base::Collection::ArrayListT<PendingEvent*>* __pPendingEventList;
-};
-
-
class _AppWidgetPopupContext;
/**
, public Tizen::Base::Object
{
public:
- _AppWidgetContext(_AppContext* pAppContext, const Tizen::Base::String& userInfo, 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& instanceId, const Tizen::Base::String& providerId, int width, int height, const Tizen::Base::String& userInfo, int period, int priority);
virtual ~_AppWidgetContext(void);
// handle dynamic box
void OnAdded(void);
void OnUpdate(const Tizen::Base::String& argument);
+ result OnUpdateAsync(const Tizen::Base::String& argument);
void OnResize(int width, int height);
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);
virtual void OnTouchEventReceived(buffer_event event, double timestamp, double x, double y);
virtual void OnTimerExpired(Tizen::Base::Runtime::Timer& timer);
- void SetForeground(bool forground);
void SetWidth(int width);
void SetHeight(int height);
int GetPeriod(void) const;
double y;
};
- mutable bool __isRemoteBufferProxyCreated;
- bool __hasPendingRequest;
- bool __isForeground;
+ const Tizen::Base::String __instanceId;
+ const Tizen::Base::String __providerId;
+ const Tizen::Base::String __appId;
+ const Tizen::Base::String __providerName;
+ const Tizen::Base::String __userInfo;
+
int __width;
int __height;
- int __priority;
- int __ipcClientId;
+ const int __priority;
const int __updateMillis;
- long long __lastUpdatedTime;
- 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
+ int __ipcClientId;
+ bool __isForeground;
+ mutable bool __isRemoteBufferProxyCreated;
+ long long __lastUpdatedTime;
+ bool __hasPendingRequest;
Tizen::Base::String __pendingArgument;
Tizen::Base::Runtime::Timer __updateTimer;
void OnUserEventReceivedN(RequestId reqId, Tizen::Base::Collection::IList* pArgs);
private:
+ AppWidgetManagerService(void);
+ virtual ~AppWidgetManagerService(void);
result Construct(const char* pServiceIdForCoreDaemon);
+
result InitializeCoreDaemonEventReceiver(const char* pServiceIdForCoreDaemon);
result DeinitializeCoreDaemonEventReceiver(void);
static int OnAppWidgetPeriodChanged(struct event_arg *arg, void* data);
static int OnAppWidgetRecreate(struct event_arg *arg, void* data);
- // stub implementations
+ // stub implementations(request for app)
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);
+
+ // stub implementations(request for buffer)
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 result SyncRemoteBufferForPD(const Tizen::App::AppId& appId, const Tizen::Base::String& instanceId);
virtual result ReleaseRemoteBuffer(const Tizen::App::AppId& appId, const Tizen::Base::String& instanceId);
virtual result ReleaseRemoteBufferForPD(const Tizen::App::AppId& appId, const Tizen::Base::String& instanceId);
- virtual result RequestProviderCount(const Tizen::App::AppId& appId, const Tizen::Base::String& instanceId, int& providerCount);
- virtual result SendResult(const Tizen::App::AppId& appId, const Tizen::Base::String& instanceId, bool isSucceeded);
virtual result SendAccessStatus(const Tizen::App::AppId& appId, const Tizen::Base::String& instanceId, int accessStatus);
- // internal functions
- AppWidgetManagerService(void);
- virtual ~AppWidgetManagerService(void);
+ // stub implementations(response)
+ virtual result RequestProviderCount(const Tizen::App::AppId& appId, const Tizen::Base::String& instanceId, int& providerCount);
+ virtual result SendResult(const Tizen::App::AppId& appId, const Tizen::Base::String& instanceId, bool isSucceeded);
// _IIpcServerEventListener
virtual void OnIpcClientConnected(const Tizen::Io::_IpcServer& server, int clientId);
// helpers
_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:
Tizen::Base::Runtime::Timer __pingTimer;
}; // class AppWidgetManagerService
+class _AppWidgetHelper
+{
+public:
+ static Tizen::App::AppId ExtractAppId(const Tizen::Base::String& providerId);
+ static Tizen::Base::String ExtractProviderName(const Tizen::Base::String& providerId);
+}; //AppWidgetHelper
+
}}} // Tizen::Shell::App
#endif // _FSHELL_INTERNAL_APPWIDGET_MANAGER_SERVICE_H_
virtual result SyncRemoteBufferForPD(const Tizen::App::AppId& appId, const Tizen::Base::String& instanceId) = 0;
virtual result ReleaseRemoteBuffer(const Tizen::App::AppId& appId, const Tizen::Base::String& instanceId) = 0;
virtual result ReleaseRemoteBufferForPD(const Tizen::App::AppId& appId, const Tizen::Base::String& instanceId) = 0;
+ virtual result SendAccessStatus(const Tizen::App::AppId& appId, const Tizen::Base::String& instanceId, int accessStatus) = 0;
virtual result RequestProviderCount(const Tizen::App::AppId& appId, const Tizen::Base::String& instanceId, int& pProviderCount) = 0;
virtual result SendResult(const Tizen::App::AppId& appId, const Tizen::Base::String& instanceId, bool isSucceeded) = 0;
- virtual result SendAccessStatus(const Tizen::App::AppId& appId, const Tizen::Base::String& instanceId, int accessStatus) = 0;
// _IIpcServerEventListener
virtual void OnIpcServerStarted(const Tizen::Io::_IpcServer& server);
result Release(void);
private:
- target_type __type;
- Tizen::Base::String __providerId;
- Tizen::Base::String __instanceId;
+ const target_type __type;
+ const Tizen::Base::String __providerId;
+ const Tizen::Base::String __instanceId;
void* __buffer;
struct livebox_buffer* __buffer_info;
_IAppWidgetRemoteBufferEventListener* __pListener;
--- /dev/null
+//
+// Copyright (c) 2012-2013 Samsung Electronics Co., Ltd.
+//
+// Licensed under the Flora License, Version 1.1 (the License);
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://floralicense.org/license/
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+/**
+ * @file FShell_AppWidgetContext.cpp
+ * @brief This is the implementation for the _AppWidgetContext class.
+ */
+
+#include <provider.h>
+#include <unique_ptr.h>
+#include <FBase.h>
+#include <FBaseSysLog.h>
+#include <FBaseColHashMap.h>
+#include <FAppApp.h>
+#include <FBaseComparerT.h>
+#include <FApp_AppManagerImpl.h>
+#include "FShell_AppWidgetContext.h"
+#include "FShell_AppWidgetContextHelper.h"
+#include "FShell_TemplateUtil.h"
+
+namespace Tizen { namespace Shell { namespace App
+{
+
+using namespace std;
+using namespace Tizen::App;
+using namespace Tizen::Base;
+using namespace Tizen::Base::Collection;
+using namespace Tizen::System;
+
+static const wchar_t INVALID_INSTANCE[] = L"file://invalid instance id";
+
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+// _AppContext class
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+_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, instanceId, providerId, width, height, userInfo, 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
+_AppContext::GetConnectionState(void) const
+{
+ return __connectionState;
+}
+
+void
+_AppContext::SetConnectionState(_ConnectionState state)
+{
+ __connectionState = state;
+}
+
+Tizen::App::AppId
+_AppContext::GetAppId(void) const
+{
+ return __appId;
+}
+
+int
+_AppContext::GetClientId(void) const
+{
+ return __ipcClientId;
+}
+
+void
+_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
+_AppContext::SetWaitingStatus(bool status)
+{
+ __isWaitingResult = status;
+}
+
+bool
+_AppContext::GetWaitingStatus(void) const
+{
+ 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);
+ __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->OnUpdateAsync(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;
+}
+
+}}} // Tizen::Shell::App
#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 <FApp_AppManagerImpl.h>
#include "FShell_AppWidgetManagerImpl.h"
#include "FShell_AppWidgetManagerService.h"
#include "FShell_AppWidgetPopupContext.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(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
-_AppContext::GetConnectionState(void) const
-{
- return __connectionState;
-}
-
-void
-_AppContext::SetConnectionState(_ConnectionState state)
-{
- __connectionState = state;
-}
-
-Tizen::App::AppId
-_AppContext::GetAppId(void) const
-{
- return __appId;
-}
-
-int
-_AppContext::GetClientId(void) const
-{
- return __ipcClientId;
-}
-
-void
-_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
-_AppContext::SetWaitingStatus(bool status)
-{
- __isWaitingResult = status;
-}
-
-bool
-_AppContext::GetWaitingStatus(void) const
-{
- 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
-//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-_AppWidgetContext::_AppWidgetContext(_AppContext* pAppContext, const String& userInfo, const String& providerId, const String& instanceId, int width, int height, int period, int priority)
- :__isRemoteBufferProxyCreated(false)
- ,__hasPendingRequest(false)
- ,__isForeground(true)
+_AppWidgetContext::_AppWidgetContext(_AppContext* pAppContext, const String& instanceId, const String& providerId, int width, int height, const Tizen::Base::String& userInfo, int period, int priority)
+ :__instanceId(instanceId)
+ ,__providerId(providerId)
+ ,__appId(_AppWidgetHelper::ExtractAppId(providerId))
+ ,__providerName(_AppWidgetHelper::ExtractProviderName(providerId))
+ ,__userInfo(userInfo)
,__width(width)
,__height(height)
,__priority(priority)
- ,__ipcClientId(-1)
,__updateMillis( (period > UPDATE_PERIOD_MSEC_MIN) ? period : UPDATE_PERIOD_MSEC_MIN )
+ ,__ipcClientId(-1)
+ ,__isForeground(true)
+ ,__isRemoteBufferProxyCreated(false)
,__lastUpdatedTime(0)
- ,__userInfo(userInfo)
- ,__providerId(providerId)
- ,__instanceId(instanceId)
+ ,__hasPendingRequest(false)
,__pAppContext(pAppContext)
,__pAppWidgetPopup(null)
,__pAppWidgetRemoteBuffer(null)
,__pPendingTouchEventList(null)
{
- _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
SysLog(NID_SHELL, "argument(%ls)", argument.GetPointer());
ClearLastResult();
- // Queueing the pointer of background context.
- if (!this->IsForeground())
- {
- // Saving the data
- if (!argument.IsEmpty())
- {
- __pendingArgument = argument;
- }
-
- __hasPendingRequest = true;
- SysLog(NID_SHELL, "Update is requested but the %ls is background.", (this->GetAppId()).GetPointer());
- }
- else
+ if (this->IsForeground())
{
result r = this->SendUpdateRequest(GetWidth(), GetHeight(), argument);
SysTryLog(NID_SHELL, !IsFailed(r), "Failed to execute SendUpdateRequest.");
__hasPendingRequest = false;
__pendingArgument.Clear();
}
-}
-
-void
-_AppWidgetContext::OnResize(int width, int height)
-{
- SysSecureLog(NID_SHELL, "appId(%ls), instanceId(%ls), width(%d), height(%d), priority(%d)", GetProviderId().GetPointer(), GetInstanceId().GetPointer(), GetWidth(), GetHeight(), GetPriority());
-
- SetWidth(width);
- SetHeight(height);
+ else
+ {
+ // Queueing the pointer of background context.
+ if (!argument.IsEmpty())
+ {
+ __pendingArgument = argument;
+ }
- SendResizeRequest(width, height);
+ __hasPendingRequest = true;
+ SysLog(NID_SHELL, "Update is requested but the %ls is background.", (this->GetProviderId()).GetPointer());
+ }
}
result
-_AppWidgetContext::RequestUpdate(const String& argument)
+_AppWidgetContext::OnUpdateAsync(const String& argument)
{
ArrayList* pArray = new (std::nothrow) ArrayList();
SysTryReturnResult(NID_SHELL, pArray, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY]");
return E_SUCCESS;
}
+void
+_AppWidgetContext::OnResize(int width, int height)
+{
+ SysSecureLog(NID_SHELL, "appId(%ls), instanceId(%ls), width(%d), height(%d), priority(%d)", GetProviderId().GetPointer(), GetInstanceId().GetPointer(), GetWidth(), GetHeight(), GetPriority());
+
+ SetWidth(width);
+ SetHeight(height);
+
+ SendResizeRequest(width, height);
+}
+
void
_AppWidgetContext::OnForeground(void)
{
return;
}
- this->SetForeground(true);
+ __isForeground = true;
if (__hasPendingRequest == true)
{
SysLog(NID_SHELL, "There is pending update request.");
-// RequestUpdate(__pendingArgument);
+// OnUpdateAsync(__pendingArgument);
OnUpdate(__pendingArgument);
}
else
if (IsUpdatePeriodExpired() == true)
{
SysLog(NID_SHELL, "The period is expired.");
-// RequestUpdate(L"");
+// OnUpdateAsync(L"");
OnUpdate(L"");
}
}
}
SysLog(NID_SHELL, "OnBackground");
- SetForeground(false);
+ __isForeground = false;
}
void
if (__pAppWidgetPopup)
{
-// __pAppWidgetPopup->OnPopupDestoyed();
delete __pAppWidgetPopup;
__pAppWidgetPopup = null;
}
{
__pPendingTouchEventList->Add(new (nothrow) PendingTouchEvent(event, timestamp, x, y));
- if( AppManager::GetInstance()->IsRunning(this->GetAppId() ) == false ||
+ if( _AppManagerImpl::GetInstance()->IsRunning(this->GetAppId() ) == false ||
( __pAppContext->GetConnectionState() == CONNECTION_STATE_CONNECTED && __isRemoteBufferProxyCreated == false))
{
SysLog(NID_SHELL, "request to start AppControl");
return __providerName;
}
-void
-_AppWidgetContext::SetForeground(bool foreground)
-{
- __isForeground = foreground;
-}
-
bool
_AppWidgetContext::IsForeground(void) const
{
#include "FShell_AppWidgetContext.h"
#include "FShell_AppWidgetPopupContext.h"
-#include "FShell_AppWidgetManagerStub.h"
#include "FShell_AppWidgetManagerService.h"
#include "FShell_TemplateUtil.h"
provider_send_ping();
}
-AppId
-AppWidgetManagerService::ExtractAppId(const String& providerId)
-{
- 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() );
-
- String appId;
- providerId.SubString(0, index, appId);
- return appId;
-}
-
_AppWidgetContext*
AppWidgetManagerService::FindAppWidget(const AppId& appId, const String& instanceId) const
{
}
else
{
- _AppWidgetContext* pAppWidgetContext = AppWidgetManagerService::GetInstance()->FindAppWidget(ExtractAppId(arg->pkgname), arg->id);
+ _AppWidgetContext* pAppWidgetContext = AppWidgetManagerService::GetInstance()->FindAppWidget(_AppWidgetHelper::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"");
SysLog(NID_SHELL, "Enter");
_AppContext* pAppContext = null;
- result r = AppWidgetManagerService::GetInstance()->__appContextList.GetValue(ExtractAppId(arg->pkgname), pAppContext);
+ result r = AppWidgetManagerService::GetInstance()->__appContextList.GetValue(_AppWidgetHelper::ExtractAppId(arg->pkgname), pAppContext);
SysTryReturn(NID_SHELL, !IsFailed(r), null, E_OBJ_NOT_FOUND, "[E_OBJ_NOT_FOUND]");
pAppContext->RemoveAppWidget(arg->id);
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()->FindAppWidget(ExtractAppId(arg->pkgname), arg->id);
+ _AppWidgetContext* pAppWidgetContext = AppWidgetManagerService::GetInstance()->FindAppWidget(_AppWidgetHelper::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()->FindAppWidget(ExtractAppId(arg->pkgname), arg->id);
+ _AppWidgetContext* pAppWidgetContext = AppWidgetManagerService::GetInstance()->FindAppWidget(_AppWidgetHelper::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()->FindAppWidget(ExtractAppId(arg->pkgname), arg->id);
+ _AppWidgetContext* pAppWidgetContext = AppWidgetManagerService::GetInstance()->FindAppWidget(_AppWidgetHelper::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);
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()->FindAppWidget(ExtractAppId(pArg->pkgname), pArg->id);
+ _AppWidgetContext* pAppWidgetContext = AppWidgetManagerService::GetInstance()->FindAppWidget(_AppWidgetHelper::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);
pAppWidgetContext->OnForeground();
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()->FindAppWidget(ExtractAppId(arg->pkgname), arg->id);
+ _AppWidgetContext* pAppWidgetContext = AppWidgetManagerService::GetInstance()->FindAppWidget(_AppWidgetHelper::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);
_AppContext* pAppContext = null;
pAppContextEnum->GetValue(pAppContext);
- if ( pAppContext && AppManager::GetInstance()->IsRunning(pAppContext->GetAppId()) == false )
+ if ( pAppContext && _AppManagerImpl::GetInstance()->IsRunning(pAppContext->GetAppId()) == false )
{
pAppContext->RequestUpdate(L"", L"");
}
_AppWidgetContext* pAppWidgetContext = FindAppWidget(appId, instanceId);
SysTryReturnResult(NID_SHELL, pAppWidgetContext, E_OBJ_NOT_FOUND, "Failed to find the object(%ls).", instanceId.GetPointer());
- pAppWidgetContext->RequestUpdate(argument);
+ pAppWidgetContext->OnUpdateAsync(argument);
return E_SUCCESS;
}
SysLog(NID_SHELL, "Exit.");
}
+// _AppWidgetHelper
+AppId
+_AppWidgetHelper::ExtractAppId(const String& providerId)
+{
+ int indexOfSecondDot = 0;
+ result r = providerId.IndexOf(".", 12, indexOfSecondDot);//"1234567890._"
+ SysTryReturn(NID_SHELL, !IsFailed(r), L"", E_INVALID_ARG, "[E_INVALID_ARG] Failed to get the index from providerId(%ls).", providerId.GetPointer() );
+
+ String appId;
+ providerId.SubString(0, indexOfSecondDot, appId);
+ return appId;
+}
+
+String
+_AppWidgetHelper::ExtractProviderName(const String& providerId)
+{
+ int indexOfSecondDot = 0;
+ result r = providerId.IndexOf(".", 12, indexOfSecondDot);//"1234567890._"
+ SysTryReturn(NID_SHELL, !IsFailed(r), L"", E_INVALID_ARG, "[E_INVALID_ARG] Failed to get the index from providerId(%ls).", providerId.GetPointer() );
+
+ String providerName;
+ providerId.SubString(indexOfSecondDot + 1, providerName);
+ return providerName;
+}
+
}}} // Tizen::Shell::App