//
-// Open Service Platform
// Copyright (c) 2012 Samsung Electronics Co., Ltd.
//
// Licensed under the Apache License, Version 2.0 (the License);
#include <app_service.h>
#include <FOspConfig.h>
-#include <FBaseColIListT.h>
-#include <FBaseColIList.h>
+#include <FBaseColArrayListT.h>
#include <FBaseObject.h>
-#include <FBaseString.h>
#include <FBaseRtIEventListener.h>
-#include <FAppAppManager.h>
-#include <FAppIAppControlEventListener.h>
+#include <FAppTypes.h>
#include <FBaseSysLog.h>
#include "FApp_Types.h"
#include "FApp_AppManagerEvent.h"
#include "FApp_IAppManagerServiceEventListener.h"
#include "FApp_RequestManagerT.h"
+#include "FApp_IAppControlResponseEventListener.h"
+#include "FApp_LaunchInfo.h"
namespace Tizen { namespace Base
{
class String;
-namespace Runtime
-{
-class _LibraryImpl;
-}
namespace Collection
{
class IMap;
+class IList;
}
}}
namespace Tizen { namespace Io
class _IAppManagerEventListener;
class _AppManagerEventArg;
class _AppMessageImpl;
-
-typedef result (*LaunchCbType)(void* data, _AppArg* pArg, _AppArg* pResArg, service_result_e res, int prop);
+class _AppControlResponseEvent;
+class IAppControlEventListener;
+class IAppControlResponseListener;
typedef void (*AppSvcResFn)(void* b, int requestCode, service_result_e res, void* data);
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-// _LaunchInfo handles the launch request from this process
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-const long LAUNCH_INFO_MAGIC = 0x494C;
-
-class _LaunchInfo
-{
-public:
- _LaunchInfo(_AppArg* pArg, LaunchCbType pCb, void* pData, int prop)
- : magic(LAUNCH_INFO_MAGIC)
- , reqId(-1)
- , pArg(pArg)
- , launchCb(pCb)
- , pUserData(pData)
- , property(prop)
- {
- }
-
- ~_LaunchInfo(void);
-
-private:
- _LaunchInfo(const _LaunchInfo& rhs);
- _LaunchInfo& operator =(const _LaunchInfo& rhs);
-
-public:
- const long magic;
- int reqId;
- _AppArg* pArg;
- const LaunchCbType launchCb;
- void* pUserData;
- const int property;
-}; // _LaunchInfo
-
-
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-// _InAppRequestManager manges In-process AppControl request
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-struct _InProcessInfo
-{
-public:
- _InProcessInfo(const Tizen::Base::String& aId, const Tizen::Base::String& oId, int prop, bool legacy, Tizen::Base::Runtime::_LibraryImpl& lib, Tizen::Base::Runtime::IEventListener* pListener)
- : reqId(-1)
- , providerId(aId)
- , operationId(oId)
- , property(prop)
- , pLib(&lib)
- , pListener(pListener)
- , isLegacy(legacy)
- {
- }
-
- ~_InProcessInfo(void);
-
-private:
- _InProcessInfo(const _InProcessInfo& rhs);
- _InProcessInfo& operator =(const _InProcessInfo& rhs);
-
-public:
- int reqId;
- const Tizen::Base::String providerId;
- const Tizen::Base::String operationId;
- const int property;
- Tizen::Base::Runtime::_LibraryImpl* pLib; // non-empty
- Tizen::Base::Runtime::IEventListener* pListener;
- bool isLegacy;
-}; // _InProcessInfo
-
-
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-// _RequestManager manges out-of-process launch request and handles the return arguments
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-class _ResultInfo
-{
-public:
- _ResultInfo(_AppArg& arg)
- : reqId(-1)
- , arg(arg)
- {
- }
-
- ~_ResultInfo(void)
- {
- }
-
-private:
- _ResultInfo(const _ResultInfo& rhs);
- _ResultInfo& operator =(const _ResultInfo& rhs);
-
-public:
- int reqId;
- _AppArg& arg;
-}; // _ResultInfo
-
-// partial specialization
-template<> inline void _RequestManagerT<_ResultInfo>::RemoveItem(int reqId)
-{
- // 1st request is launch request itself and do not remove it ever.
- if (reqId == 0)
- {
- return;
- }
-
- _ResultInfo* pItem = FindItem(reqId);
- if (pItem)
- {
- __requestList.Remove(reqId);
- delete pItem;
- }
-}
+const int RESPONSE_EVENT_REQID_MAGIC = 65536;
class _OSP_EXPORT_ _AppControlManager
: public Tizen::Base::Object
, public _IAppControlSysEventListener
+ , public _IAppControlResponseEventListener
, virtual public Tizen::Base::Runtime::IEventListener
{
public:
virtual void OnAppControlEventReceivedN(int reqId, _AppArg* pAppArg, int res);
- virtual void OnAppControlEventReceivedN(int reqId, int res, const Tizen::Base::Collection::IMap* pArgs);
+ virtual void OnAppControlEventReceivedN(int reqId, int res, const Tizen::Base::Collection::IMap* pArgs, int prop);
virtual void OnAppControlEventReceivedN(int reqId, const AppId& appId, const Tizen::Base::String& operationId);
_OSP_LOCAL_ result SendAppControlEvent(Tizen::Base::Runtime::IEventArg& arg);
+ _OSP_LOCAL_ Tizen::Base::Collection::IMapT<int,_AppControlResponseEvent*>* GetAppControlResponseEventContainer(void);
+
_OSP_LOCAL_ result RegisterRequest(service_s* service, int& req, _AppHandler& handler);
- _OSP_LOCAL_ void RemoveResultRequest(int reqId)
- {
- __resultManager.RemoveItem(reqId);
- }
+ _OSP_LOCAL_ void RemoveResultRequest(int reqId);
const _AppArg* FindResultRequest(int reqId) const;
- void FinishAppControl(int reqId, int res, const Tizen::Base::Collection::IMap* pArg);
+ void FinishAppControl(int reqId, int res, Tizen::Base::Collection::IMap* pArg);
result LaunchApp(const AppId& appId, _AppArg* pArg, int req = -1);
+
int Launch(const AppId& appId, _AppArg* pArg, int req = -1);
+ int Launch(const AppId& appId, _AppArg* pArg, AppSvcResFn pCb, void* pData, int req);
+
+ int Launch(const _AppMessageImpl& msg, const AppId& aId, const Tizen::Base::String& oId, const Tizen::Base::String* pUriData, const Tizen::Base::String* pMimeType, AppSvcResFn pCb, void* pData);
+
result LaunchAppImplicit(_AppArg* pArg, int req);
result LaunchPkg(const char* pkg_name, const char* op, const char* mime, const char* uri, AppSvcResFn pCb, void* data);
result LaunchPkg(_AppMessageImpl& msg, const char* pkg_name, const char* op, const char* mime, const char* uri, AppSvcResFn pCb, void* data);
+ int LaunchPkg(_AppMessageImpl& msg, const AppId& appId, const Tizen::Base::String& opId, const Tizen::Base::String* pUri, const Tizen::Base::String* pMime, AppSvcResFn pCb, void* data);
+
int Launch(_AppMessageImpl& msg, const char* pkg_name, const char* op, const char* mime, const char* uri, AppSvcResFn pCb, void* data);
- result LaunchAppWithCondition(const AppId& appId, const Tizen::Base::String& executableName, const Tizen::Base::String& condition, Tizen::Base::Collection::IList* pArgs);
+
+ result LaunchAppWithCondition(const AppId& appId, const Tizen::Base::String& condition, Tizen::Base::Collection::IList* pArgs);
result SendAppControlStartResponse(int req, const char* pValue, const char* pOp);
- static bool IsAllowedAppControl(const wchar_t aTable[][2][64], int count, const Tizen::Base::String& aId, const Tizen::Base::String& oId);
+ static bool IsAllowedAppControl(const char aTable[][2][96], int count, const Tizen::Base::String& aId, const Tizen::Base::String& oId);
+
+ static AppId GetAliasAppId(const AppId& appId);
static result GetMimeFromExt(const Tizen::Base::String& ext, Tizen::Base::String& out);
+ void RemoveLaunchRequest(int req);
+
+ virtual void OnAppControlResponseEventReceivedN(const Tizen::Base::Runtime::IEventArg* arg);
+
+ static AppCtrlResult ConvertAppControlResultCode(int res);
+
+ static void InvokeAppControlCompleteListener(IAppControlResponseListener& listener, const AppId& appId, const Tizen::Base::String& op, AppCtrlResult res, const Tizen::Base::Collection::IMap* pExtraData, bool noRaise);
+
+ static void InvokeLegacyAppControlCompleteListener(IAppControlEventListener& listener, const AppId& appId, const Tizen::Base::String& op, const Tizen::Base::Collection::IList* pList, bool noRaise);
+
private:
_OSP_LOCAL_ _AppControlManager(void);
_OSP_LOCAL_ int AddLaunchRequest(_AppArg* pArg, LaunchCbType pCb, void* data, int prop = -1);
- _OSP_LOCAL_ void RemoveLaunchRequest(int req);
-
private:
_AppControlEvent __appControlEvent;
_RequestManagerT<_LaunchInfo> __launchManager;
_RequestManagerT<_InProcessInfo> __inAppManager;
_RequestManagerT<_ResultInfo> __resultManager;
+ Tizen::Base::Collection::ArrayListT<void*> __listenerList;
- //friend class AppManager;
+ Tizen::Base::Collection::HashMapT<int, _AppControlResponseEvent*> __appControlResponseEventContainer;
+ Tizen::Base::Collection::ArrayListT<int> __appControlResponseEventList;
friend class _AppControlImpl;
- //friend class _SqlDataControlImpl;
- //friend class _MapDataControlImpl;
friend class _DataControlProviderManagerImpl;
friend class _AppControlProviderManagerImpl;
friend class Tizen::Io::_DataControlResultSetImpl;