static const char OSP_K_SUBMODE_CALLEE[] = "__OSP_SUB_CALLEE__";
static const char OSP_K_SERVICE_CALLEE[] = "__OSP_SERVICE_CALLEE__";
-const char TIZEN_NOTIFICATION_DATA[] = "http://tizen.org/appcontrol/data/notification";
-const wchar_t LEGACY_OPERATION_MAIN[] = L"osp.operation.MAIN";
-
_AppArg::_AppArg(void)
: __pBundle(null)
result
-_AppArg::Construct(const _AppControlImpl& ac, const IList* pList)
-{
- __pBundle = bundle_create();
- SysTryReturnResult(NID_APP, __pBundle != null, E_OUT_OF_MEMORY, "Bundle creation failure.");
-
- return CreateAppControlArg(__pBundle, ac, pList);
-}
-
-
-result
-_AppArg::Construct(const _AppControlImpl& ac, const String* pUri, const String* pMime, const IMap* pList)
-{
- __pBundle = bundle_create();
- SysTryReturnResult(NID_APP, __pBundle != null, E_OUT_OF_MEMORY, "Bundle creation failure.");
-
- return CreateAppControlArg(__pBundle, ac, pUri, pMime, pList);
-}
-
-
-result
_AppArg::Construct(const _SqlDataControlImpl& dc, _DataControlRequestType requestType, const IList* pList)
{
__pBundle = bundle_create();
AppId
-_AppArg::GetCalleeAppId(void) const
+_AppArg::GetCalleeAppId(bundle* pBundle)
{
- const char* pBundleValue = bundle_get_val(__pBundle, AUL_K_CALLEE_APPID);
+ const char* pBundleValue = bundle_get_val(pBundle, AUL_K_CALLEE_APPID);
const AppId retVal = pBundleValue;
}
-result
-_AppArg::CreateAppControlArg(bundle* b, const _AppControlImpl& ac, const IList* pList)
-{
- SysAssertf(b != null, "Valid bundle should be supplied");
-
- bundle* pb = b;
-
- AddStrArray(pb, OSP_K_ARG, pList);
-
- std::unique_ptr<char[]> pOperation(_StringConverter::CopyToCharArrayN(ac._opId));
- if (pOperation)
- {
- appsvc_set_operation(pb, pOperation.get());
- }
-
- bundle_add(pb, OSP_K_LAUNCH_TYPE, OSP_V_LAUNCH_TYPE_APPCONTROL);
-
- return E_SUCCESS;
-}
-
-
-result
-_AppArg::CreateAppControlArg(bundle* b, const _AppControlImpl& ac, const String* pUriData, const String* pMimeType, const IMap* pMap)
-{
- return CreateAppControlArg(b, ac._opId, pUriData, pMimeType, pMap);
-}
-
-
-result
-_AppArg::CreateAppControlArg(bundle* b, const String& oId, const String* pUriData, const String* pMimeType, const IMap* pMap)
-{
- SysAssertf(b != null, "Valid bundle should be supplied");
-
- bundle* pb = b;
-
- std::unique_ptr<char[]> pOperation(_StringConverter::CopyToCharArrayN(oId));
- if (pOperation.get())
- {
- appsvc_set_operation(pb, pOperation.get());
- }
-
- if (pUriData)
- {
- std::unique_ptr<char[]> pUri(_StringConverter::CopyToCharArrayN(*pUriData));
- if (pUri.get())
- {
- appsvc_set_uri(pb, pUri.get());
- }
- }
-
- if (pMimeType)
- {
- std::unique_ptr<char[]> pMime(_StringConverter::CopyToCharArrayN(*pMimeType));
- if (pMime.get())
- {
- appsvc_set_mime(pb, pMime.get());
- }
- }
-
- AddStrMap(pb, pMap);
-
- bundle_add(pb, OSP_K_LAUNCH_TYPE, OSP_V_LAUNCH_TYPE_APPCONTROL);
-
- return E_SUCCESS;
-}
-
-
namespace
{
const int MAX_LEN_DATA_CONTROL_REQ_TYPE = 8;
if (pNativeArg != null)
{
- pListener->OnAppControlEventReceivedN(pNativeArg->GetRequestId(), pNativeArg->GetResult(), pNativeArg->GetArgs(), pNativeArg->GetProperty());
+ pListener->OnAppControlPluginEventReceivedN(pNativeArg->GetRequestId(), pNativeArg->GetResult(), pNativeArg->GetOptionalAppId(), pNativeArg->GetOptionalOperationId(), pNativeArg->GetArgs(), pNativeArg->GetProperty());
return;
}
_NativeAppControlEventArg::_NativeAppControlEventArg(int reqId, int res, IMap* pArg, int prop)
: __reqId(reqId)
, __result(res)
- , __pArgs(null)
+ , __pArgs(pArg)
, __property(prop)
{
- if (pArg == null)
- {
- return;
- }
-
-#if 0
- HashMap* pMap = new (std::nothrow) HashMap(SingleObjectDeleter);
- SysTryReturnVoidResult(NID_APP, pMap, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Insufficient memory.");
-
- pMap->Construct();
-
- std::unique_ptr<IMapEnumerator> pMapEnum(pArg->GetMapEnumeratorN());
-
- while(pMapEnum->MoveNext() == E_SUCCESS)
- {
- String* pKey = dynamic_cast<String*>(pMapEnum->GetKey());
- String* pVal = dynamic_cast<String*>(pMapEnum->GetValue());
-
- if (pKey == null || pVal == null)
- {
- continue;
- }
-
- pMap->Add(new (std::nothrow) String(*pKey), new (std::nothrow) String(*pVal));
- }
-
- __pArgs = pMap;
-#else
- // ownership is transferred to event
- __pArgs = pArg;
-#endif
-
- return;
}
-_NativeAppControlEventArg::~_NativeAppControlEventArg(void)
+_NativeAppControlEventArg::_NativeAppControlEventArg(int reqId, int res, const AppId& appId, const String& oId, IMap* pArg, int prop)
+ : __reqId(reqId)
+ , __result(res)
+ , __pArgs(pArg)
+ , __property(prop)
+ , __optAppId(appId)
+ , __optOperationId(oId)
{
-/*
- if (__pArgs)
- {
- SysLog(NID_APP, "Deleting native AppControl argument.");
- delete __pArgs;
- }
-*/
}
} } // Tizen::App
public:
_NativeAppControlEventArg(int reqId, int res, Tizen::Base::Collection::IMap* pArgs, int prop);
- virtual ~_NativeAppControlEventArg(void);
+ _NativeAppControlEventArg(int reqId, int res, const AppId& appId, const Tizen::Base::String& oId, Tizen::Base::Collection::IMap* pArgs, int prop);
+
+ virtual ~_NativeAppControlEventArg(void) {}
int GetRequestId(void) const
{
return __property;
}
+ AppId GetOptionalAppId(void) const
+ {
+ return __optAppId;
+ }
+
+ Tizen::Base::String GetOptionalOperationId(void) const
+ {
+ return __optOperationId;
+ }
+
private:
const int __reqId;
const int __result;
Tizen::Base::Collection::IMap* __pArgs;
const int __property;
+ AppId __optAppId;
+ Tizen::Base::String __optOperationId;
}; // _NativeAppControlEventArg
/**
#include <FAppIAppControlEventListener.h>
#include <FAppIAppControlResponseListener.h>
-#include <FIo_DirectoryImpl.h>
-
#include "FApp_AppControlImpl.h"
#include "FApp_AppControlManager.h"
#include "FApp_IAppControlPluginProvider.h"
{
static const int _REQ_ID_INVALID = -1;
+const wchar_t ACTL_IMPLICIT_PLUGIN[] = L"libosp-ac-implicit.so";
}
namespace Tizen { namespace App
{
-const wchar_t TIZEN_OPERATION_MAIN[] = L"http://tizen.org/appcontrol/operation/main";
-
_AppControlImpl::_AppControlImpl(const AppControl& value)
: _appControl(value)
, _reqId(_REQ_ID_INVALID)
}
AppControl*
-_AppControlImpl::CreateN(const String& path, const String& aId, const String& oId, const String& name, int prop)
+_AppControlImpl::CreateN(const String& path, const String& aId, const String& oId, int prop)
{
SysTryReturn(NID_APP, !path.IsEmpty(), null, E_INVALID_ARG, "[E_INVALID_ARG] Path is empty.");
SysTryReturn(NID_APP, !aId.IsEmpty(), null, E_INVALID_ARG, "[E_INVALID_ARG] Provider Id is empty.");
SysTryReturn(NID_APP, pImpl != null, null, E_OUT_OF_MEMORY, "AppControlImpl instance must not be null.");
pImpl->_path = path;
- pImpl->_provider = aId;
+ pImpl->_appId = aId;
pImpl->_opId = oId;
- // [FIXME] Proper App name setting
- pImpl->_appName = name;
pImpl->_property = prop;
return pAc;
}
-AppControl*
-_AppControlImpl::CreateN(const AppId& appId, const String& operationId, bool changeAppId)
-{
- SysTryReturn(NID_APP, !appId.IsEmpty(), null, E_INVALID_ARG, "[E_INVALID_ARG] appId is empty.");
-
- AppControl* pAc = new (std::nothrow) AppControl;
- SysTryReturn(NID_APP, pAc != null, null, E_OUT_OF_MEMORY, "AppControl allocation failure.");
-
- _AppControlImpl* pImpl = pAc->__pAppControlImpl;
- SysTryReturn(NID_APP, pImpl != null, null, E_OUT_OF_MEMORY, "AppControlImpl instance must not be null.");
-
- pImpl->_path = appId;
- pImpl->_provider = appId;
- pImpl->_opId = operationId;
- //pImpl->_appName = appId;
- pImpl->_property |= (_APPCONTROL_PROPERTY_OSP | _APPCONTROL_PROPERTY_PUBLIC);
-
- if (changeAppId)
- {
- pImpl->_property |= _APPCONTROL_PROPERTY_APPID_CHANGE;
- }
-
- return pAc;
-}
-
-AppControl*
-_AppControlImpl::CreateN(const AppControl& ac)
-{
- const _AppControlImpl* pImpl = GetInstance(ac);
- SysTryReturn(NID_APP, pImpl != null, null, E_INVALID_STATE, "AppControlImpl instance must not be null.");
-
- return CreateN(pImpl->_path, pImpl->_provider, pImpl->_opId, pImpl->_appName, pImpl->_property);
-}
const _AppControlImpl*
_AppControlImpl::GetInstance(const AppControl& ac)
return (*pProvider)();
}
-result
-_AppControlImpl::Start(const IList* pDataList, IAppControlEventListener* pListener)
-{
- SysLog(NID_APP, "Enter");
- result r = E_SYSTEM;
-
- if (_property & _APPCONTROL_PROPERTY_SLP)
- {
- r = StartNative(pDataList, pListener);
- }
- else if (_property & _APPCONTROL_PROPERTY_OSP)
- {
- r = StartOsp(pDataList, pListener);
- }
- else
- {
- SysLogException(NID_APP, E_SYSTEM, "[E_SYSTEM] Invalid AppControl type(property %d)", _property);
- }
- SysLog(NID_APP, "Exit");
-
- return r;
-}
-
-result
-_AppControlImpl::Start(const String* pUriData, const String* pDataType, const IMap* pExtraData, IAppControlResponseListener* pListener)
-{
- SysLog(NID_APP, "Enter");
- result r = E_SYSTEM;
-
- if (_property & _APPCONTROL_PROPERTY_SLP)
- {
- r = StartNative(pUriData, pDataType, pExtraData, pListener);
- }
- else if (_property & _APPCONTROL_PROPERTY_OSP)
- {
- r = StartOsp(pUriData, pDataType, pExtraData, pListener);
- }
- else
- {
- SysLogException(NID_APP, E_SYSTEM, "[E_SYSTEM] Invalid AppControl type(property %d)", _property);
- }
- SysLog(NID_APP, "Exit");
-
- return r;
-}
result
_AppControlImpl::FindAndStart(const String& operationId, const String* pUriPattern, const String* pDataType, const String* pCategory, const IMap* pExtraData, IAppControlResponseListener* pListener)
return StartImplicit(pBundle.get(), pExtraData, pListener);
}
-result
-_AppControlImpl::StartOsp(const IList* pDataList, IAppControlEventListener* pListener)
-{
- SysLog(NID_APP, "Enter");
- result r = E_SUCCESS;
-
- _AppArg* pArg = new (std::nothrow) _AppArg;
- SysTryReturnResult(NID_APP, pArg != null, E_OUT_OF_MEMORY, "Argument allocation failure.");
-
- pArg->Construct(*this, pDataList);
-
- _AppControlManager* pImpl = _AppControlManager::GetInstance();
- int req = _REQ_ID_INVALID;
-
- if (pListener)
- {
- _AppControlManager::_RequestGuard reqObj = _AppControlManager::_RequestGuard(*pImpl, pArg, AppControlCbLegacy, pListener, _property);
- req = reqObj.GetRequestNumber();
-
- _processId = pImpl->Launch(_path, pArg, req);
-
- if (_processId < 0)
- {
- reqObj.Invalidate();
- r = GetLastResult();
- SysLog(NID_APP, "[%s]Launching(%ls) is failed" , GetErrorMessage(r), _path.GetPointer());
- return r;
- }
- }
- else
- {
- _processId = pImpl->Launch(_path, pArg);
- delete pArg;
- SysTryReturnResult(NID_APP, _processId >= 0, GetLastResult(), "Launching(%ls) is failed", _path.GetPointer());
- }
- SysLog(NID_APP, "Exit");
-
- return r;
-}
result
-_AppControlImpl::StartOsp(const String* pUriData, const String* pMimeType, const IMap* pDataList, IAppControlResponseListener* pListener)
+_AppControlImpl::StartImplicit(const _AppMessageImpl& msg, IEventListener* pListener, bool isLegacy)
{
SysLog(NID_APP, "Enter");
- result r = E_SUCCESS;
-
- _AppArg* pArg = new (std::nothrow) _AppArg;
- SysTryReturnResult(NID_APP, pArg != null, E_OUT_OF_MEMORY, "Argument allocation failure.");
-
- pArg->Construct(*this, pUriData, pMimeType, pDataList);
-
- _AppControlManager* pImpl = _AppControlManager::GetInstance();
int req = _REQ_ID_INVALID;
- if (pListener)
- {
- _AppControlManager::_RequestGuard reqObj = _AppControlManager::_RequestGuard(*pImpl, pArg, AppControlCb, pListener, _property);
- req = reqObj.GetRequestNumber();
-
- if (_ThreadImpl::GetCurrentThreadImpl()->GetThreadType() == THREAD_TYPE_EVENT_DRIVEN)
- {
- _AppControlResponseEvent* pAppControlResponseEvent = new (std::nothrow) _AppControlResponseEvent();
- if (pAppControlResponseEvent != null)
- {
- r = pAppControlResponseEvent->Construct();
- SysTryLog(NID_APP, r == E_SUCCESS, "[%s]_AppControlResponseEvent::Construct() is failed", GetErrorMessage(r));
-
- r = pAppControlResponseEvent->AddListener(*this, true);
- SysTryLog(NID_APP, r == E_SUCCESS, "[%s]_AppControlResponseEvent::AddListener() is failed", GetErrorMessage(r));
-
- IMapT<int, _AppControlResponseEvent*>* pResponseEventContainer = pImpl->GetAppControlResponseEventContainer();
- if (pResponseEventContainer != null)
- {
- pResponseEventContainer->Add(req, pAppControlResponseEvent);
- __appControlResponseEventList.Add(req);
- SysLog(NID_APP, "pResponseEvent gets added. reqId(%d)", req);
- }
- }
- }
-
- _processId = pImpl->Launch(_path, pArg, req);
- if (_processId < 0)
- {
- reqObj.Invalidate();
- r = GetLastResult();
- SysLog(NID_APP, "[%s]Launching(%ls) is failed" , GetErrorMessage(r), _path.GetPointer());
- return r;
- }
- }
- else
- {
- _processId = pImpl->Launch(_path, pArg);
- delete pArg;
- SysTryReturnResult(NID_APP, _processId >= 0, GetLastResult(), "Launching(%ls) is failed", _path.GetPointer());
- }
- SysLog(NID_APP, "Exit");
-
- return r;
-}
-
-result
-_AppControlImpl::StartImplicit(bundle* pBundle, const IList* pDataList, IAppControlEventListener* pListener)
-{
- SysLog(NID_APP, "Enter");
- result r = E_SUCCESS;
-
- _AppArg* pArg = new (std::nothrow) _AppArg;
- SysTryReturnResult(NID_APP, pArg != null, E_OUT_OF_MEMORY, "Argument allocation failure.");
-
- pArg->Construct(pBundle);
-
- _AppMessageImpl::AddData(pArg->GetBundle(), pDataList);
-
- _AppControlManager* pImpl = _AppControlManager::GetInstance();
- int req = _REQ_ID_INVALID;
-
- if (pListener)
- {
- _AppControlManager::_RequestGuard reqObj = _AppControlManager::_RequestGuard(*pImpl, pArg, AppControlCbLegacy, pListener, _APPCONTROL_PROPERTY_NONE);
- req = reqObj.GetRequestNumber();
-
- r = pImpl->LaunchAppImplicit(pArg, req);
- SysTryCatch(NID_APP, r == E_SUCCESS, reqObj.Invalidate(), r, "[%s] Propagating." , GetErrorMessage(r));
- }
- else
- {
- r = pImpl->LaunchAppImplicit(pArg, -1);
- delete pArg;
- }
-
- // [FIXME] launch registration is not working correctly
- SysLog(NID_APP, "Exit");
-
-CATCH:
- return r;
-}
-
-result
-_AppControlImpl::StartImplicit(bundle* pBundle, const IMap* pData, IAppControlResponseListener* pListener)
-{
- SysLog(NID_APP, "Enter");
- result r = E_SUCCESS;
-
- _AppArg* pArg = new (std::nothrow) _AppArg;
- SysTryReturnResult(NID_APP, pArg != null, E_OUT_OF_MEMORY, "Argument allocation failure.");
-
- pArg->Construct(pBundle);
-
- _AppArg::AddStrMap(pArg->GetBundle(), pData);
-
- _AppControlManager* pImpl = _AppControlManager::GetInstance();
- int req = _REQ_ID_INVALID;
+ _IAppControlPluginProvider* pProvider = GetAppControlPluginProvider(ACTL_IMPLICIT_PLUGIN);
+ SysTryReturnResult(NID_APP, pProvider != null, E_OBJ_NOT_FOUND, "Propagating.");
if (pListener)
{
- _AppControlManager::_RequestGuard reqObj = _AppControlManager::_RequestGuard(*pImpl, pArg, AppControlCb, pListener, _APPCONTROL_PROPERTY_NONE);
- req = reqObj.GetRequestNumber();
-
- if (_ThreadImpl::GetCurrentThreadImpl()->GetThreadType() == THREAD_TYPE_EVENT_DRIVEN)
+ _InProcessInfo* pItem = new (std::nothrow) _InProcessInfo(isLegacy, pProvider, pListener);
+ if (pItem)
{
- _AppControlResponseEvent* pAppControlResponseEvent = new (std::nothrow) _AppControlResponseEvent();
-
- if (pAppControlResponseEvent != null)
- {
- r = pAppControlResponseEvent->Construct();
- SysTryLog(NID_APP, r == E_SUCCESS, "[%s]_AppControlResponseEvent::Construct() is failed", GetErrorMessage(r));
-
- r = pAppControlResponseEvent->AddListener(*pImpl, true);
- SysTryLog(NID_APP, r == E_SUCCESS, "[%s]_AppControlResponseEvent::AddListener() is failed", GetErrorMessage(r));
-
- IMapT<int, _AppControlResponseEvent*>* pResponseEventContainer = pImpl->GetAppControlResponseEventContainer();
- if (pResponseEventContainer != null)
- {
- pResponseEventContainer->Add(req, pAppControlResponseEvent);
- SysLog(NID_APP, "pResponseEvent gets added. reqId(%d)", req);
- }
- }
+ req = _AppControlManager::GetInstance()->__inAppManager.InsertItem(pItem);
}
- r = pImpl->LaunchAppImplicit(pArg, req);
- SysTryCatch(NID_APP, r == E_SUCCESS, reqObj.Invalidate(), r, "[%s] Propagating." , GetErrorMessage(r));
- }
- else
- {
- r = pImpl->LaunchAppImplicit(pArg, -1);
- delete pArg;
}
- SysLog(NID_APP, "Exit");
- // [FIXME] launch registration is not working correctly
+ result r = InvokeStartAppControl(pProvider, req, L"", msg);
-CATCH:
-
- return r;
-}
-
-result
-_AppControlImpl::AppControlCbLegacy(void* data, _AppArg* pArg, _AppArg* pResArg, service_result_e res, int prop, int reqId)
-{
- SysLog(NID_APP, "Result value %d", res);
-
- SysTryReturnResult(NID_APP, data && pResArg && pArg, E_SYSTEM, "Invalid result (callback, result, arg) = (0x%x, 0x%x, 0x%x).",
- data, pResArg,
- pArg);
-
- bundle* b = pResArg->GetBundle();
- SysTryReturnResult(NID_APP, b != NULL, E_SYSTEM, "Invalid result bundle.");
-
- IAppControlEventListener* pListener = static_cast<IAppControlEventListener*>(data);
- SysTryReturnResult(NID_APP, pListener == null || typeid(pListener) == typeid(IAppControlEventListener*), E_SYSTEM, "Invalid result callback");
-
- bundle* inb = pArg->GetBundle();
- SysTryReturnResult(NID_APP, inb != NULL, E_SYSTEM, "Empty caller bundle.");
-
- String oId;
-
- AppId provider = pResArg->GetCalleeAppId();
-
- const char* p = appsvc_get_operation(inb);
- if (p)
- {
- oId = p;
- }
-
- SysLog(NID_APP, "Invoking callback with (%ls, %ls)", provider.GetPointer(), oId.GetPointer());
-
- if (prop & _APPCONTROL_PROPERTY_ALIAS)
+ if (pListener == null)
{
- const _AppControlRegistry::_AppControlAliasEntry* pEntry = null;
- pEntry = _AppControlRegistry::GetInstance()->GetReverseAppControlAliasEntry(provider, oId);
- if (pEntry)
- {
- provider = pEntry->provider;
- oId = pEntry->operation;
-
- SysLog(NID_APP, "Legacy AppControl(%ls, %ls).", provider.GetPointer(), oId.GetPointer());
- }
+ pProvider->Release();
}
- if (prop & _APPCONTROL_PROPERTY_APPID_CHANGE)
+ // after acquring request number, pLib should be managed from the list, not CATCH
+ if (IsFailed(r))
{
- String tmp = _AppControlRegistry::GetInstance()->GetReverseAliasAppId(provider);
- if (!tmp.IsEmpty())
- {
- SysLog(NID_APP, "App change (%ls -> %ls).", provider.GetPointer(), tmp.GetPointer());
+ _AppControlManager::GetInstance()->__inAppManager.RemoveItem(req);
+ SysLog(NID_APP, "[%s] A system error has occurred.", GetErrorMessage(r));
- provider = tmp;
- }
+ return r;
}
- const bool isSubMode = _AppArg::IsSubMode(b);
- const bool isServiceCallee = _AppArg::IsServiceApp(b);
-
- std::unique_ptr<HashMap> pMap(pResArg->GetArgMapN());
-
- ArrayList list(SingleObjectDeleter);
- _AppArg::FillLegacyAppControlResult(list, res, pMap.get(), provider);
-
- _AppControlManager::InvokeLegacyAppControlCompleteListener(*pListener, provider, oId, &list, isSubMode | isServiceCallee);
-
+ SysLog(NID_APP, "Exit %d", req);
return E_SUCCESS;
}
+
result
-_AppControlImpl::AppControlCb(void* data, _AppArg* pArg, _AppArg* pResArg, service_result_e res, int prop, int reqId)
+_AppControlImpl::StartImplicit(bundle* pBundle, const IList* pDataList, IAppControlEventListener* pListener)
{
- SysLog(NID_APP, "Result value : %d, property : 0x%x", res, prop);
-
- SysTryReturnResult(NID_APP, data && pResArg && pArg, E_SYSTEM, "Invalid result (callback, result, arg) = (0x%x, 0x%x, 0x%x).",
- data, pResArg,
- pArg);
-
- bundle* b = pResArg->GetBundle();
- SysTryReturnResult(NID_APP, b != NULL, E_SYSTEM, "Invalid result bundle.");
-
- IAppControlResponseListener* pListener = static_cast<IAppControlResponseListener*>(data);
- SysTryReturnResult(NID_APP, pListener == null || typeid(pListener) == typeid(IAppControlResponseListener*), E_SYSTEM, "Invalid result callback");
-
- bundle* inb = pArg->GetBundle();
- SysTryReturnResult(NID_APP, inb != NULL, E_SYSTEM, "Empty caller bundle.");
-
- String oId;
-
- AppId provider = pResArg->GetCalleeAppId();
-
- const char* p = appsvc_get_operation(inb);
- if (p)
- {
- oId = p;
- }
-
- SysLog(NID_APP, "Invoking callback with (%ls, %ls)", provider.GetPointer(), oId.GetPointer());
-
- if (prop & _APPCONTROL_PROPERTY_ALIAS)
- {
- const _AppControlRegistry::_AppControlAliasEntry* pEntry = null;
- pEntry = _AppControlRegistry::GetInstance()->GetReverseRuntimeAliasEntry(provider, oId);
- if (pEntry)
- {
- provider = pEntry->provider;
- oId = pEntry->operation;
-
- SysLog(NID_APP, "Original AppControl(%ls, %ls).", provider.GetPointer(), oId.GetPointer());
- }
- }
-
- if (prop & _APPCONTROL_PROPERTY_APPID_CHANGE)
- {
- String tmp = _AppControlRegistry::GetInstance()->GetReverseAliasAppId(provider);
- if (!tmp.IsEmpty())
- {
- SysLog(NID_APP, "App change (%ls -> %ls).", provider.GetPointer(), tmp.GetPointer());
-
- provider = tmp;
- }
- }
+ _AppMessageImpl msg(pBundle);
+ msg.AddData(pDataList);
- const bool isSubMode = _AppArg::IsSubMode(b);
- const bool isServiceCallee = _AppArg::IsServiceApp(b);
-
- std::unique_ptr<HashMap> pMap(pResArg->GetArgMapN());
-
- AppCtrlResult ret = _AppControlManager::ConvertAppControlResultCode(res);
-
- SysLog(NID_APP, "Result code : 0x%x.", ret);
+ return StartImplicit(msg, pListener, true);
+}
- // proper callback invokation
- _AppControlResponseEvent* pResponseEvent = null;
- _AppControlManager::GetInstance()->GetAppControlResponseEventContainer()->GetValue(reqId, pResponseEvent);
- if (pResponseEvent != null)
- {
- _AppControlResponseEventArg* pResponseEventArg = new (std::nothrow) _AppControlResponseEventArg(pListener, _APPCONTROL_RESPONSETYPE_COMPLETE, provider, oId, E_SUCCESS, ret, pMap.release(), reqId, isSubMode | isServiceCallee);
- pResponseEvent->Fire(*pResponseEventArg);
- SysLog(NID_APP, "OnAppControlCompleteResponseReceived, pResponseEvent is Fired");
- }
- else
- {
- _AppControlManager::InvokeAppControlCompleteListener(*pListener, provider, oId, ret, pMap.get(), isSubMode | isServiceCallee);
- }
+result
+_AppControlImpl::StartImplicit(bundle* pBundle, const IMap* pData, IAppControlResponseListener* pListener)
+{
+ _AppMessageImpl msg(pBundle);
+ _AppArg::AddStrMap(msg.GetBundle(), pData);
- return E_SUCCESS;
+ return StartImplicit(msg, pListener, false);
}
+
result
-_AppControlImpl::StartNative(const IList* pDataList, IAppControlEventListener* pListener)
+_AppControlImpl::Start(const IList* pDataList, IAppControlEventListener* pListener)
{
SysLog(NID_APP, "Enter");
_InProcessInfo* pInfo = _AppControlManager::GetInstance()->__inAppManager.FindItem(_reqId);
int req = _REQ_ID_INVALID;
_IAppControlPluginProvider* pProvider = GetAppControlPluginProvider(_path);
- SysTryReturnResult(NID_APP, pProvider != null, E_OBJ_NOT_FOUND, "[E_OBJ_NOT_FOUND] Propagating.");
+ SysTryReturnResult(NID_APP, pProvider != null, E_OBJ_NOT_FOUND, "Propagating.");
if (pListener)
{
- _InProcessInfo* pItem = new (std::nothrow) _InProcessInfo(_provider, _opId, _property, true, pProvider, pListener);
+ _InProcessInfo* pItem = new (std::nothrow) _InProcessInfo(_appId, _opId, _property, true, pProvider, pListener);
if (pItem)
{
req = _AppControlManager::GetInstance()->__inAppManager.InsertItem(pItem);
}
}
- result r = InvokeStartAppControl(pProvider, req, _provider, _opId, pDataList);
+ result r = InvokeStartAppControl(pProvider, req, _appId, _opId, pDataList);
if (pListener == null)
{
}
result
-_AppControlImpl::StartNative(const String* pUriData, const String* pMimeType, const IMap* pDataList, IAppControlResponseListener* pListener)
+_AppControlImpl::Start(const String* pUriData, const String* pMimeType, const IMap* pDataList, IAppControlResponseListener* pListener)
{
SysLog(NID_APP, "Enter");
_InProcessInfo* pInfo = _AppControlManager::GetInstance()->__inAppManager.FindItem(_reqId);
if (pListener)
{
- _InProcessInfo* pItem = new (std::nothrow) _InProcessInfo(_provider, _opId, _property, false, pProvider, pListener);
+ _InProcessInfo* pItem = new (std::nothrow) _InProcessInfo(_appId, _opId, _property, false, pProvider, pListener);
if (pItem)
{
req = _AppControlManager::GetInstance()->__inAppManager.InsertItem(pItem);
}
}
}
- r = InvokeStartAppControl(pProvider, req, _provider, _opId, pUriData, pMimeType, pDataList);
+ r = InvokeStartAppControl(pProvider, req, _appId, _opId, pUriData, pMimeType, pDataList);
if (pListener == null)
{
result
_AppControlImpl::InvokeStartAppControl(_IAppControlPluginProvider* pProvider, int req, const String& appId, const String& oId, const String* pUri, const String* pMime, const IMap* pMap)
{
- SysTryReturnResult(NID_APP, pProvider != null, E_SYSTEM, "Wrong AppControl provider plugin for %ls, %ls (%d).", appId.GetPointer(), oId.GetPointer(), req);
-
_AppMessageImpl msg(appId, oId, pUri, pMime, pMap);
- return pProvider->StartAppControlPlugin(req, appId, msg, null);
+
+ return InvokeStartAppControl(pProvider, req, appId, msg);
+}
+
+
+result
+_AppControlImpl::InvokeStartAppControl(_IAppControlPluginProvider* pProvider, int req, const String& appId, const _AppMessageImpl& message)
+{
+ SysTryReturnResult(NID_APP, pProvider != null, E_SYSTEM, "Wrong AppControl provider plugin for %ls(%d).", appId.GetPointer(), req);
+
+ return pProvider->StartAppControlPlugin(req, appId, message, null);
}
+
static bool
IsValidAppControl(const String& appcontrolID)
{
const String appcontrolID(GetAppControlProviderId());
SysTryReturnResult(NID_APP, IsValidAppControl(appcontrolID), E_INVALID_OPERATION, "Invalid appcontrolID(%ls)", appcontrolID.GetPointer());
- if (_property & _APPCONTROL_PROPERTY_SLP)
+ result (*pStop)(int req) = null;
+
+ if (_reqId != _REQ_ID_INVALID)
{
- result (*pStop)(int req) = null;
+ _InProcessInfo* pInfo = _AppControlManager::GetInstance()->__inAppManager.FindItem(_reqId);
+ SysTryReturnResult(NID_APP, pInfo != null, E_INVALID_OPERATION, "Request ID %d is not found.", _reqId);
- if (_reqId != _REQ_ID_INVALID)
+ if (pInfo->pProvider)
{
- _InProcessInfo* pInfo = _AppControlManager::GetInstance()->__inAppManager.FindItem(_reqId);
- SysTryReturnResult(NID_APP, pInfo != null, E_INVALID_OPERATION, "Request ID %d is not found.", _reqId);
-
- if (pInfo->pProvider)
- {
- pInfo->pProvider->StopAppControlPlugin(_reqId);
- }
+ pInfo->pProvider->StopAppControlPlugin(_reqId);
+ }
- _AppControlManager::GetInstance()->__inAppManager.RemoveItem(_reqId);
+ _AppControlManager::GetInstance()->__inAppManager.RemoveItem(_reqId);
- _reqId = _REQ_ID_INVALID;
- }
- else
+ _reqId = _REQ_ID_INVALID;
+ }
+ else
+ {
+ _IAppControlPluginProvider* pProvider = GetAppControlPluginProvider(_path);
+ if (pProvider)
{
- _IAppControlPluginProvider* pProvider = GetAppControlPluginProvider(_path);
- if (pProvider)
- {
- pProvider->StopAppControlPlugin(_reqId);
- SysLog(NID_APP, "Request %d is stopped.", _reqId);
+ pProvider->StopAppControlPlugin(-1);
+ SysLog(NID_APP, "Request is stopped.");
- pProvider->Release();
- }
+ pProvider->Release();
}
}
- else if (_property & _APPCONTROL_PROPERTY_OSP)
- {
- _Aul::TerminateApplicationByPid(_processId);
- }
return E_SUCCESS;
}
String
_AppControlImpl::GetAppId(void) const
{
- return (_property & _APPCONTROL_PROPERTY_OSP) ? _path : _provider;
+ return _appId;
}
const String&
_AppControlImpl::GetAppControlProviderId(void) const
{
- return _provider;
+ return _appId;
}
const String&
#ifndef _FAPP_INTERNAL_APP_CONTROL_IMPL_H_
#define _FAPP_INTERNAL_APP_CONTROL_IMPL_H_
-#include <app_service.h>
-
#include <FBaseObject.h>
#include <FAppTypes.h>
#include <FOspConfig.h>
namespace Tizen { namespace Base { class String; } }
namespace Tizen { namespace Base { namespace Collection { class IList; } } }
+namespace Tizen { namespace Base { namespace Runtime { class IEventListener; } } }
namespace Tizen { namespace App
{
class IAppControlEventListener;
class IAppControlResponseListener;
class _IAppControlPluginProvider;
-class _AppArg;
+class _AppMessageImpl;
enum _AppControlProperty
{
_APPCONTROL_PROPERTY_NONE = 0x0,
_APPCONTROL_PROPERTY_PUBLIC = 0x01,
- _APPCONTROL_PROPERTY_PERSISTENT_DLL = 0x08,
- _APPCONTROL_PROPERTY_SLP = 0x100,
- _APPCONTROL_PROPERTY_OSP = 0x200,
- _APPCONTROL_PROPERTY_ALIAS = 0x400,
- _APPCONTROL_PROPERTY_APPID_CHANGE = 0x800,
_APPCONTROL_PROPERTY_SUBMODE = 0x1000,
_APPCONTROL_PROPERTY_SERVICE_CALLEE = 0x2000,
};
-class _OSP_EXPORT_ _AppControlImpl
+class _OSP_LOCAL_ _AppControlImpl
: public Tizen::Base::Object
, public Tizen::App::_IAppControlResponseEventListener
, virtual public Tizen::Base::Runtime::IEventListener
/**
* AppControl delegate constructor
*/
- static AppControl* CreateN(const Tizen::Base::String& path, const Tizen::Base::String& aId, const Tizen::Base::String& oId, const Tizen::Base::String& name, int prop);
-
- /**
- * AppControl delegate constructor
- */
- static AppControl* CreateN(const AppId& appId, const Tizen::Base::String& operationId, bool changeAppId);
-
- /**
- * AppControl delegate constructor
- */
- static AppControl* CreateN(const AppControl& ac);
+ static AppControl* CreateN(const Tizen::Base::String& path, const Tizen::Base::String& aId, const Tizen::Base::String& oId, int prop);
/**
* Internal GetImpl() method.
static _AppControlImpl* GetInstance(AppControl& ac);
/**
- * Starts the resolved application control. @n
- * Once the application starts, it goes to the background and the target
- * application control is displayed.
- *
- * @return An error code
- * @param[in] pDataList The data list to deliver to the resolved application control @n
- * The maximum size of the list is 4096 bytes.
- * @param[in] pListener The application control callback listener @n
- * Some application controls need to get the callback result by implementing
- * the IAppControlEventListener interface.
- * @exception E_SUCCESS The method is successful.
- * @exception E_MAX_EXCEEDED The size of @c pDataList has exceeded the maximum limit.
- * @exception E_OUT_OF_MEMORY The memory is insufficient.
- * @exception E_OBJ_NOT_FOUND The target application control resource is not found.
- * @exception E_IN_PROGRESS The application control is in progress: @n
- * - The application has already started an _AppControlImpl. @n
- * - The target application has already started.
- * @exception E_SYSTEM A system error has occurred.
- * @remarks If the %IAppControlEventListener instance (@c pListener) needs to get the
- * callback result for an application control, it should be valid till
- * IAppControlEventListener::OnAppControlCompleted() is invoked.
- * For example, a form object listener should not be deleted before the
- * system invokes IAppControlEventListener::OnAppControlCompleted().
- */
+ * Starts the resolved application control. @n
+ * Once the application starts, it goes to the background and the target
+ * application control is displayed.
+ *
+ * @return An error code
+ * @param[in] pDataList The data list to deliver to the resolved application control @n
+ * The maximum size of the list is 4096 bytes.
+ * @param[in] pListener The application control callback listener @n
+ * Some application controls need to get the callback result by implementing
+ * the IAppControlEventListener interface.
+ * @exception E_SUCCESS The method is successful.
+ * @exception E_MAX_EXCEEDED The size of @c pDataList has exceeded the maximum limit.
+ * @exception E_OUT_OF_MEMORY The memory is insufficient.
+ * @exception E_OBJ_NOT_FOUND The target application control resource is not found.
+ * @exception E_IN_PROGRESS The application control is in progress: @n
+ * - The application has already started an _AppControlImpl. @n
+ * - The target application has already started.
+ * @exception E_SYSTEM A system error has occurred.
+ * @remarks If the %IAppControlEventListener instance (@c pListener) needs to get the
+ * callback result for an application control, it should be valid till
+ * IAppControlEventListener::OnAppControlCompleted() is invoked.
+ * For example, a form object listener should not be deleted before the
+ * system invokes IAppControlEventListener::OnAppControlCompleted().
+ */
result Start(const Tizen::Base::Collection::IList* pDataList, IAppControlEventListener* pListener);
/**
static result StartImplicit(bundle* pBundle, const Tizen::Base::Collection::IMap* pData, IAppControlResponseListener* pListener);
+ static result StartImplicit(const _AppMessageImpl& msg, Tizen::Base::Runtime::IEventListener* pListener, bool isLegacy);
+
bool IsPublic(void) const
{
return (_property & _APPCONTROL_PROPERTY_PUBLIC);
*/
virtual ~_AppControlImpl(void);
- result StartOsp(const Tizen::Base::Collection::IList* pDataList, IAppControlEventListener* pListener);
-
- result StartOsp(const Tizen::Base::String* pUriData, const Tizen::Base::String* pMimeType, const Tizen::Base::Collection::IMap* pExtraData, IAppControlResponseListener* pListener);
-
- result StartNative(const Tizen::Base::Collection::IList* pDataList, IAppControlEventListener* pListener);
-
- result StartNative(const Tizen::Base::String* pUriData, const Tizen::Base::String* pMimeType, const Tizen::Base::Collection::IMap* pExtraData, IAppControlResponseListener* pListener);
-
static _IAppControlPluginProvider* GetAppControlPluginProvider(const Tizen::Base::String& path);
static result InvokeStartAppControl(_IAppControlPluginProvider* pProvider, int req, const Tizen::Base::String& appId, const Tizen::Base::String& oId, const Tizen::Base::String* pUri, const Tizen::Base::String* pMime, const Tizen::Base::Collection::IMap* pMap);
static result InvokeStartAppControl(_IAppControlPluginProvider* pProvider, int req, const Tizen::Base::String& appId, const Tizen::Base::String& oId, const Tizen::Base::Collection::IList* pList);
- static result AppControlCbLegacy(void* data, _AppArg* pArg, _AppArg* pResArg, service_result_e res, int prop, int reqId);
-
- static result AppControlCb(void* data, _AppArg* pArg, _AppArg* pResArg, service_result_e res, int prop, int reqId);
+ static result InvokeStartAppControl(_IAppControlPluginProvider* pProvider, int req, const Tizen::Base::String& appId, const _AppMessageImpl& message);
protected:
static const unsigned long _LIBRARY_OPTION = Tizen::Base::Runtime::_LIBRARY_LOAD_OPTION_LAZY | Tizen::Base::Runtime::_LIBRARY_LOAD_OPTION_NODELETE;
const AppControl& _appControl;
Tizen::Base::String _path;
- Tizen::Base::String _provider;
+ Tizen::Base::String _appId;
Tizen::Base::String _opId;
Tizen::Base::String _appName;
int _reqId;
Tizen::Base::Collection::ArrayListT<int> __appControlResponseEventList;
friend class AppControl;
- friend class _AppArg;
}; // _AppControlImpl
} } // Tizen::App
#include <FAppSqlDataControl.h>
#include <FAppMapDataControl.h>
#include <FAppPkgPackageInfo.h>
-
#include <FBaseSysLog.h>
+
#include <FBase_StringConverter.h>
#include <FIo_DataControlResultSetImpl.h>
using namespace Tizen::Base::Utility;
using namespace Tizen::Io;
-namespace
-{
-const char SELECTOR_NOTI_KEY[] = "__APP_SVC_CALLER_NOTI__";
-}
namespace Tizen { namespace App
{
-const wchar_t TIZEN_OPERATION_PICK[] = L"http://tizen.org/appcontrol/operation/pick";
+const wchar_t TIZEN_OPERATION_PICK[] = L"http://tizen.org/appcontrol/operation/pick";
+const wchar_t TIZEN_OPERATION_MAIN[] = L"http://tizen.org/appcontrol/operation/main";
+const wchar_t LEGACY_OPERATION_MAIN[] = L"osp.operation.MAIN";
+const char TIZEN_NOTIFICATION_DATA[] = "http://tizen.org/appcontrol/data/notification";
_AppControlManager::_AppControlManager(void)
{
//_AppArg::Print(b);
// get launch info from request Id
- _LaunchInfo* pInfo = __launchManager.FindItem(reqId);
+ _DataControlInfo* pInfo = __launchManager.FindItem(reqId);
SysTryReturnVoidResult(NID_APP, pInfo != null, E_OBJ_NOT_FOUND, "[E_OBJ_NOT_FOUND] request Id %d not found with response %d", reqId,
res);
}
-// callback for out-of-process AppControl start event
+// callback for AppControl start event
void
_AppControlManager::OnAppControlEventReceivedN(int reqId, const AppId& appId, const String& operationId)
{
SysLog(NID_APP, "Received request Id %d, app %ls, operationId %ls", reqId, appId.GetPointer(), operationId.GetPointer());
// get launch info from request Id
- _LaunchInfo* pInfo = __launchManager.FindItem(reqId);
+ _InProcessInfo* pInfo = __inAppManager.FindItem(reqId);
SysTryReturnVoidResult(NID_APP, pInfo != null, E_OBJ_NOT_FOUND, "[E_OBJ_NOT_FOUND] request Id %d not found.", reqId);
// at least listener
- IAppControlResponseListener* pListener = static_cast<IAppControlResponseListener*>(pInfo->pUserData);
- SysTryReturnVoidResult(NID_APP, typeid(pListener) == typeid(IAppControlResponseListener*), E_SYSTEM, "[E_SYSTEM] Invalid result callback.");
+ IAppControlResponseListener* pListener = dynamic_cast<IAppControlResponseListener*>(pInfo->pListener);
+ SysTryReturnVoidResult(NID_APP, pListener != null, E_SYSTEM, "[E_SYSTEM] Invalid result callback for req %d, app %ls.", reqId, appId.GetPointer());
+
+ result r = E_SUCCESS;
if (pListener)
{
- result r = E_SUCCESS;
AppId actualAppId = appId;
if (appId == L'c')
{
{
SysLog(NID_APP, "No listener registered.");
}
+
+ if (r == E_OPERATION_CANCELED)
+ {
+ SysLog(NID_APP, "Removed start listener as operation is canceled.");
+ __inAppManager.RemoveItem(reqId);
+ }
}
// callback for in-process event handling
void
-_AppControlManager::OnAppControlEventReceivedN(int reqId, int res, const IMap* pArgs, int property)
+_AppControlManager::OnAppControlPluginEventReceivedN(int reqId, int res, const AppId& optAppId, const String& optOperation, const IMap* pArgs, int property)
{
SysLog(NID_APP, "Received request Id %d, res %d, args 0x%x", reqId, res, pArgs);
if (pInfo->pListener)
{
- String aId = pInfo->providerId;
- String oId = pInfo->operationId;
+ String aId;
+ String oId;
- SysLog(NID_APP, "Invoking callback 0x%x for (%ls, %ls).", pInfo->pListener, aId.GetPointer(), oId.GetPointer());
-
- if (pInfo->property & _APPCONTROL_PROPERTY_ALIAS)
+ if (optAppId.IsEmpty())
{
- const _AppControlRegistry::_AppControlAliasEntry* pEntry = null;
- pEntry = _AppControlRegistry::GetInstance()->GetReverseAppControlAliasEntry(aId, oId);
- if (pEntry)
- {
- aId = pEntry->provider;
- oId = pEntry->operation;
+ String aId = pInfo->providerId;
+ String oId = pInfo->operationId;
+ }
+ else
+ {
+ // implicit launch only
+ aId = optAppId;
+ oId = optOperation;
- SysLog(NID_APP, "Legacy AppControl (%ls, %ls).", aId.GetPointer(), oId.GetPointer());
- }
+ SysLog(NID_APP, "Changing appId/operation for implicit launch.");
}
+ SysLog(NID_APP, "Invoking callback 0x%x for (%ls, %ls).", pInfo->pListener, aId.GetPointer(), oId.GetPointer());
+
const bool isSubMode = (property & _APPCONTROL_PROPERTY_SUBMODE);
const bool isServiceCallee = (property & _APPCONTROL_PROPERTY_SERVICE_CALLEE);
SysLogException(NID_APP, E_SYSTEM, "Invalid AppControl listener.");
}
+#if 0
+ // [FIXME] following logic is not needed.
// call TerminateAppControl
if (pInfo->pProvider)
{
pInfo->pProvider->StopAppControlPlugin(pInfo->reqId);
SysLog(NID_APP, "AppControl stopped for req %d.", pInfo->reqId);
}
+#endif
// remove from list and unload dll
__inAppManager.RemoveItem(reqId);
return (info.pListener == pListener);
}
-static bool
-IsMatchingLaunchListener(const _LaunchInfo& info, IEventListener* pListener)
-{
- return (info.pUserData == pListener);
-}
void
_AppControlManager::StopAppControlResponseListener(IAppControlResponseListener* pListener)
__inAppManager.RemoveItem(pProcInfo);
SysLog(NID_APP, "Listener 0x%x is removed from in-process stub list.", pListener);
}
-
- _LaunchInfo* pLaunchInfo = __launchManager.FindItemWithListener(IsMatchingLaunchListener, pListener);
- if (pLaunchInfo)
- {
- __launchManager.RemoveItem(pLaunchInfo);
- SysLog(NID_APP, "Listener 0x%x is removed from launch request list.", pListener);
- }
-
}
_AppControlManager::LaunchPkg(_AppMessageImpl& msg, const char* pkg_name, const char* op, const char* mime, const char* uri, AppSvcResFn pCb, void* data)
{
bundle* kb = msg.GetBundle();
- SysTryReturnResult(NID_APP, kb != NULL, E_OUT_OF_MEMORY, "Bundle allocation failure.");
if (pkg_name)
{
appsvc_set_uri(kb, uri);
}
- if (_AppImpl::GetInstance() != null)
- {
- const long handle = _AppImpl::GetInstance()->GetWindowHandle();
- _AppArg::UpdateWindowHandle(kb, handle);
- }
-
- SysLog(NID_APP, "MIME(%s), URI(%s).", appsvc_get_mime(kb), appsvc_get_uri(kb));
- int pid = appsvc_run_service(kb, 0, reinterpret_cast<appsvc_res_fn>(pCb), this);
+ int pid = LaunchPkg(msg, pCb, data);
result r = E_SUCCESS;
if (pid < 0)
{
- switch (pid)
- {
- case APPSVC_RET_EILLACC:
- r = E_ILLEGAL_ACCESS;
- break;
- case APPSVC_RET_EINVAL:
- r = E_MAX_EXCEEDED;
- break;
- default:
- r = E_SYSTEM;
- break;
- }
- SysLog(NID_APP, "[%s] Launching service %s failure", GetErrorMessage(r), pkg_name);
+ r = GetLastResult();
}
return r;
}
-int
-_AppControlManager::LaunchPkg(_AppMessageImpl& msg, const AppId& appId, const String& opId, const String* pUri, const String* pMime, AppSvcResFn pCb, void* data)
-{
- std::unique_ptr<char[]> pPackage(_StringConverter::CopyToCharArrayN(appId));
- std::unique_ptr<char[]> pOperation(_StringConverter::CopyToCharArrayN(opId));
-
- const char* pUriData = null;
- if (pUri)
- {
- pUriData = _StringConverter::CopyToCharArrayN(*pUri);
- }
-
- const char* pMimeData = null;
- if (pMime)
- {
- pMimeData = _StringConverter::CopyToCharArrayN(*pMime);
- }
-
- int pid = Launch(msg, pPackage.get(), pOperation.get(), pMimeData, pUriData, pCb, data);
-
- delete [] pUriData;
- delete [] pMimeData;
-
- return pid;
-}
-
-
result
_AppControlManager::LaunchPkg(const char* pkg_name, const char* op, const char* mime, const char* uri, AppSvcResFn pCb, void* data)
{
int
-_AppControlManager::Launch(const _AppMessageImpl& msg, AppSvcResFn pCb, void* pData)
+_AppControlManager::Launch(const _AppMessageImpl& msg, AppSvcResFn pCb, void* pData, int req)
{
const bundle* pBundle = msg.GetBundle();
_AppArg arg;
arg.Construct(pBundle);
- return Launch(_AppMessageImpl::GetApplicationId(pBundle), &arg, pCb, pData, -1);
+ return Launch(_AppMessageImpl::GetApplicationId(pBundle), &arg, pCb, pData, req);
}
SysLog(NID_APP, "App: %ls.", appId.GetPointer());
String actualAppId = appId;
-#if 0
- if (appId.GetLength() == 10)
- {
- const String& execName = _PackageManagerImpl::GetInstance()->GetDefaultAppExecutableName(appId);
-
- if (!execName.IsEmpty())
- {
- actualAppId.Append(L'.');
- actualAppId.Append(execName);
- }
- }
-#endif
pArg->UpdateRequestId(req);
return pid;
}
-result
-_AppControlManager::LaunchAppImplicit(_AppArg* pArg, int req)
-{
- SysTryReturnResult(NID_APP, pArg != null, E_INVALID_ARG, "Invalid launch argument");
-
- result r = E_SUCCESS;
- bundle* kb = pArg->GetBundle();
-
- if (req >= 0)
- {
- pArg->UpdateRequestId(req);
- appsvc_add_data(kb, SELECTOR_NOTI_KEY, appinfo_get_appid());
- }
-
- if (_AppImpl::GetInstance() != null)
- {
- const long handle = _AppImpl::GetInstance()->GetWindowHandle();
- _AppArg::UpdateWindowHandle(kb, handle);
- }
-
- int pid = appsvc_run_service(kb, req, LaunchResultCb, this);
- if (pid >= 0)
- {
- if (pid == 0)
- {
- SysLog(NID_APP, "Sending local process again.");
- pid = getpid();
- }
-
- char pkgname[255] = {0, };
- if (aul_app_get_pkgname_bypid(pid, pkgname, 255) != AUL_R_OK)
- {
- SysLog(NID_APP, "Fail to get package name by pid : (%d).", pid);
- return E_SYSTEM;
- }
-
- if (strncmp(pkgname, APP_SELECTOR, strlen(APP_SELECTOR)) != 0)
- {
- const char* pOperation = appsvc_get_operation(kb);
-
- SysLog(NID_APP, "Starting application without selector : (%s, %s).", pkgname, pOperation);
-
- SendAppControlStartResponse(req, pkgname, pOperation);
- }
- }
- else
- {
- switch (pid)
- {
- case APPSVC_RET_EINVAL:
- r = E_OBJ_NOT_FOUND;
- break;
- case APPSVC_RET_ENOMATCH:
- r = E_OBJ_NOT_FOUND;
- break;
- case APPSVC_RET_EILLACC:
- r = E_ILLEGAL_ACCESS;
- break;
- case APPSVC_RET_ERROR:
- // fall through
- case APPSVC_RET_ELAUNCH:
- // fall through
- default:
- r = E_SYSTEM;
- break;
- }
- }
-
- SysLog(NID_APP, "[%s] Application(%d) launched with reqId(%d) and arg(0x%x).", GetErrorMessage(r), pid, req, pArg);
-
- return r;
-}
void
_AppControlManager::FinishAppControl(int reqId, int res, IMap* pMap)
SysTryReturnVoidResult(NID_APP, pArg != null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Return argument allocation failure.");
SendAppControlEvent(*pArg);
- SysLog(NID_APP, "Exit.");
}
+
+ void
+_AppControlManager::FinishAppControl(int reqId, int res, const AppId& appId, const String& oId, IMap* pMap, int prop)
+{
+ SysLog(NID_APP, "req %d, res %d, appId(%ls), oId(%ls).", reqId, res, appId.GetPointer(), oId.GetPointer());
+ _NativeAppControlEventArg* pArg = new (std::nothrow) _NativeAppControlEventArg(reqId, res, appId, oId, pMap, prop);
+ SysTryReturnVoidResult(NID_APP, pArg != null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Return argument allocation failure.");
+
+ SendAppControlEvent(*pArg);
+}
+
+
void
_AppControlManager::RemoveResultRequest(int reqId)
{
{
SysTryReturn(NID_APP, pArg != null, -1, E_INVALID_ARG, "[E_INVALID_ARG] Empty argument.");
- _LaunchInfo* pItem = new (std::nothrow) _LaunchInfo(pArg, pCb, pData, prop);
+ _DataControlInfo* pItem = new (std::nothrow) _DataControlInfo(pArg, pCb, pData, prop);
SysTryReturn(NID_APP, pItem != null, -1, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Empty argument.");
SysLog(NID_APP, "Registering callback 0x%x, 0x%x", pCb, pData);
#include <new>
#include <unique_ptr.h>
-#include <app.h>
#include <bundle.h>
+#include <appsvc.h>
+#include <new>
#include <FBaseErrors.h>
#include <FBaseSysLog.h>
#include <FBase_StringConverter.h>
#include <FIo_RegistryImpl.h>
-#include "FAppPkg_PackageManagerImpl.h"
#include "FApp_AppControlImpl.h"
-#include "FApp_Aul.h"
#include "FApp_AppControlRegistry.h"
#include "FApp_AppMessageImpl.h"
#include "FApp_TemplateUtil.h"
-using namespace Tizen::App::Package;
using namespace Tizen::Base;
using namespace Tizen::Base::Collection;
using namespace Tizen::Io;
const wchar_t ACTL_DEFAULT_FILE[] = L"/usr/etc/app-control-info.ini";
const wchar_t ACTL_LEGACY_FILE[] = L"/usr/etc/app-control-alias.ini";
-const wchar_t ACTL_ALIAS_FILE[] = L"/usr/etc/app-control-appid.ini";
+const wchar_t ACTL_DEFAULT_PLUGIN[] = L"libosp-ac-platform.so";
const wchar_t TIZEN_ALIAS_APPID_PREFIX[] = L"tizen.";
__tizenList.Construct();
__aliasList.Construct();
-
- __aliasAppId.Construct();
-
- __runtimeAlias.Construct();
}
_AppControlRegistry::~_AppControlRegistry(void)
{
_DeleteCollectionMapValue<String, _AppControlAliasEntry>(__aliasList);
-
- _DeleteCollection<_AppControlAliasEntry>(__runtimeAlias);
}
_AppControlRegistry*
__pSelf->LoadTizenAppControlRegistry();
__pSelf->LoadLegacyList();
-
- __pSelf->LoadAliasList();
}
return __pSelf;
return E_SUCCESS;
}
-result
-_AppControlRegistry::LoadAliasList(void)
-{
- _RegistryImpl reg;
-
- const String regPath = ACTL_ALIAS_FILE;
-
- result r = reg.Construct(regPath, REG_OPEN_READ_ONLY, null);
- SysTryReturn(NID_APP, !IsFailed(r), r, r, "[%s] Propagating.", GetErrorMessage(r));
-
- HashMap* pMap = null;
- r = reg.GetEntryListN(L"Alias", &pMap);
- if (r != E_SUCCESS)
- {
- SysLog(NID_APP, "[%s] Propagating.", GetErrorMessage(r));
- pMap->RemoveAll(true);
- delete pMap;
- return r;
- }
-
- String* pKey = null;
- String* pVal = null;
- std::unique_ptr<IMapEnumerator> pEnum(pMap->GetMapEnumeratorN());
- SysTryCatch(NID_APP, pEnum.get(), r = E_OUT_OF_MEMORY , E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory error.");
-
- while(pEnum->MoveNext() == E_SUCCESS)
- {
- pKey = static_cast<String*>(pEnum->GetKey());
- pVal = static_cast<String*>(pEnum->GetValue());
-
- __aliasAppId.Add(*pKey, *pVal);
- //SysLog(NID_APP, "(%ls, %ls)", pKey->GetPointer(), pVal->GetPointer());
- }
-
- SysLog(NID_APP, "Loading %d alias sections", __aliasAppId.GetCount());
-
-CATCH:
- pMap->RemoveAll(true);
- delete pMap;
-
- return r;
-}
-
AppControl*
_AppControlRegistry::GetTizenAppControlN(const String& aId, const String& oId) const
int count = 0;
const String* pAppId = &aId;
const String* pOperation = &oId;
+
+ // legacy check first
do
{
const _AppControlAliasEntry* const pEntry = GetAppControlAliasEntry(*pAppId, *pOperation);
SysLog(NID_APP, "Found matching AppControl (%ls, %ls)", pAppId->GetPointer(), pOperation->GetPointer());
const String& soName = GetTizenAppControlProvider(*pAppId, *pOperation);
+ SysAssert(!soName.IsEmpty());
- if (soName.IsEmpty())
- {
- AppControl* pAc = GetAppControlN(*pAppId, *pOperation);
- if (pAc)
- {
- _AppControlImpl* pImpl = _AppControlImpl::GetInstance(*pAc);
- pImpl->SetProperty(_APPCONTROL_PROPERTY_ALIAS);
-
- const _AppControlAliasEntry* pLookupEntry = GetReverseRuntimeAliasEntry(*pAppId, *pOperation);
- if (pLookupEntry == null)
- {
- // no entry found : add new one
- _AppControlAliasEntry* pEntry = new (std::nothrow) _AppControlAliasEntry(aId, oId, *pAppId, *pOperation);
- if (pEntry)
- {
- // may fail
- __runtimeAlias.Add(pEntry);
- SysLog(NID_APP, "Setting alias app (%ls -> %ls).", aId.GetPointer(), pAppId->GetPointer());
- }
- }
- }
- else
- {
- SysLog(NID_APP, "No AppControl instance for (%ls, %ls)", pAppId->GetPointer(), pOperation->GetPointer());
- }
- return pAc;
- }
-
- return _AppControlImpl::CreateN(soName, *pAppId, *pOperation, L"", _APPCONTROL_PROPERTY_PUBLIC | _APPCONTROL_PROPERTY_SLP);
+ return _AppControlImpl::CreateN(soName, *pAppId, *pOperation, _APPCONTROL_PROPERTY_PUBLIC);
}
return val;
}
- SysLog(NID_APP, "No platform AppControl and use custom AppControl instead.");
- return L"";
+ SysLog(NID_APP, "Default platform AppControl %ls is used.", ACTL_DEFAULT_PLUGIN);
+ return String(ACTL_DEFAULT_PLUGIN);
}
struct AppSvcIterData
{
public:
- AppSvcIterData(ArrayList* pArr, const String& op) : pArray(pArr), operation(op) {}
+ AppSvcIterData(const _AppControlRegistry* pRegs, ArrayList* pArr, const String& op) : pThis(pRegs), pArray(pArr), operation(op) {}
+ const _AppControlRegistry* pThis;
ArrayList* pArray;
const String& operation;
};
AppSvcIterData* pAppSvcIterData = static_cast<AppSvcIterData*>(pData);
ArrayList* pList = pAppSvcIterData->pArray;
SysAssert(pList != null);
+ const _AppControlRegistry* pThis = pAppSvcIterData->pThis;
+ SysAssert(pThis != null);
const String& operation = pAppSvcIterData->operation;
if (pAppId == NULL)
}
String appId = pAppId;
- AppControl* pAc = _AppControlImpl::CreateN(appId, operation, false);
+ AppControl* pAc = pThis->GetTizenAppControlN(appId, operation);
if (pAc == null)
{
SysLog(NID_APP, "AppControl allocation failure for %ls.", appId.GetPointer());
SysTryReturn(NID_APP, pList != null, null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] ArrayList creation failure.");
pList->Construct();
- AppSvcIterData data(pList, operation);
+ AppSvcIterData data(this, pList, operation);
appsvc_get_list(pBundle.get(), AppSvcIterFnCb, reinterpret_cast<void*>(&data));
}
-const _AppControlRegistry::_AppControlAliasEntry*
-_AppControlRegistry::GetReverseAppControlAliasEntry(const String& aId, const String& oId) const
-{
- std::unique_ptr< IMapEnumeratorT<String, _AppControlAliasEntry*> > pEnum(__aliasList.GetMapEnumeratorN());
-
- while (pEnum->MoveNext() == E_SUCCESS)
- {
- _AppControlAliasEntry* pEntry = null;
- pEnum->GetValue(pEntry);
- if (pEntry->provider2 == aId && pEntry->operation2 == oId)
- {
- SysLog(NID_APP, "Found matching AppControl (%ls, %ls)<-(%ls, %ls)", aId.GetPointer(), oId.GetPointer(), pEntry->provider.GetPointer(), pEntry->operation.GetPointer());
-
- return pEntry;
- }
- }
-
- return null;
-}
-
-
-const _AppControlRegistry::_AppControlAliasEntry*
-_AppControlRegistry::GetReverseRuntimeAliasEntry(const String& aId, const String& oId) const
-{
- std::unique_ptr< IEnumeratorT<_AppControlAliasEntry*> > pEnum(__runtimeAlias.GetEnumeratorN());
-
- while (pEnum->MoveNext() == E_SUCCESS)
- {
- _AppControlAliasEntry* pEntry = null;
- pEnum->GetCurrent(pEntry);
- if (pEntry->provider2 == aId && pEntry->operation2 == oId)
- {
- SysLog(NID_APP, "Found matching AppControl (%ls, %ls)->(%ls, %ls)", aId.GetPointer(), oId.GetPointer(), pEntry->provider2.GetPointer(), pEntry->operation2.GetPointer());
-
- return pEntry;
- }
- }
-
- return null;
-}
-
-
-AppControl*
-_AppControlRegistry::GetAppControlN(const String& appId, const String& operationId) const
-{
- bool changeAppId = false;
-
- String actualAppId = appId;
- if (appId.StartsWith(TIZEN_ALIAS_APPID_PREFIX, 0))
- {
- const String& tmp = GetAliasAppId(appId);
-
- if (!tmp.IsEmpty())
- {
- actualAppId = tmp;
- SysLog(NID_APP, "Found alias app (%ls -> %ls).", appId.GetPointer(), tmp.GetPointer());
-
- changeAppId = true;
- }
- }
-
- bool b = _Aul::IsInstalled(actualAppId);
- SysTryReturn(NID_APP, b == true, null, E_APP_NOT_INSTALLED, "[E_APP_NOT_INSTALLED] %ls not installed.", actualAppId.GetPointer());
-
- return _AppControlImpl::CreateN(actualAppId, operationId, changeAppId);
-}
-
-
AppId
_AppControlRegistry::GetAliasAppId(const AppId& appId) const
{
- String tmp;
- result r = __aliasAppId.GetValue(appId, tmp);
- if (r != E_SUCCESS)
- {
- tmp.Clear();
- }
-
- return tmp;
-}
+ std::unique_ptr<bundle, BundleDeleter> pBundle(bundle_create());
+ if (pBundle.get())
+ {
+ std::unique_ptr<char[]> pAppId(_StringConverter::CopyToCharArrayN(appId));
-AppId
-_AppControlRegistry::GetReverseAliasAppId(const AppId& appId) const
-{
- std::unique_ptr< IMapEnumeratorT<String, String> > pEnum(__aliasAppId.GetMapEnumeratorN());
+ // appsvc_set_appid() lookup for actual app ID internally
+ appsvc_set_appid(pBundle.get(), pAppId.get());
+ const char* pTmp = appsvc_get_appid(pBundle.get());
- String key;
- String value;
- while (pEnum->MoveNext() == E_SUCCESS)
- {
- pEnum->GetKey(key);
- pEnum->GetValue(value);
- if (value == appId)
+ if (pTmp)
{
- return key;
+ return String(pTmp);
}
}
- SysLog(NID_APP, "No entry found for %ls", appId.GetPointer());
- return L"";
+ return String();
}
-
} } // Tizen::App
const Tizen::Base::String operation2;
};
- typedef Tizen::Base::Collection::ArrayListT<_AppControlAliasEntry*> RuntimeAliasType;
typedef Tizen::Base::Collection::MultiHashMapT<Tizen::Base::String, _AppControlAliasEntry*> AppControlAliasList;
typedef Tizen::Base::Collection::HashMapT<Tizen::Base::String, Tizen::Base::String> AliasMapType;
AppControl* GetTizenAppControlN(const Tizen::Base::String& aId, const Tizen::Base::String& oId) const;
- AppControl* GetAppControlN(const Tizen::Base::String& appId, const Tizen::Base::String& operationId) const;
-
Tizen::Base::Collection::ArrayList* FindAppControlListN(const Tizen::Base::String* pOid, const Tizen::Base::String* pUri, const Tizen::Base::String* pMimeType, const Tizen::Base::String* pCategory) const;
const _AppControlAliasEntry* GetAppControlAliasEntry(const Tizen::Base::String& aId, const Tizen::Base::String& oId) const;
- const _AppControlAliasEntry* GetReverseAppControlAliasEntry(const Tizen::Base::String& aId, const Tizen::Base::String& oId) const;
-
- const _AppControlAliasEntry* GetReverseRuntimeAliasEntry(const Tizen::Base::String& aId, const Tizen::Base::String& oId) const;
-
AppId GetAliasAppId(const AppId& appId) const;
- AppId GetReverseAliasAppId(const AppId& appId) const;
-
private:
_AppControlRegistry(const _AppControlRegistry& rhs);
result LoadLegacyList(void);
- result LoadAliasList(void);
-
Tizen::Base::String GetTizenAppControlProvider(const Tizen::Base::String& appId, const Tizen::Base::String& opId) const;
private:
AppControlAliasList __aliasList;
- AliasMapType __aliasAppId;
-
- mutable RuntimeAliasType __runtimeAlias;
-
static _AppControlRegistry* __pSelf;
}; // _AppControlRegistry
AppControl* pAc = null;
pAc = pRegs->GetTizenAppControlN(aId, oId);
- if (pAc != null)
- {
- SetLastResult(E_SUCCESS);
- return pAc;
- }
-
- pAc = pRegs->GetAppControlN(aId, oId);
-
SysTryReturn(NID_APP, pAc != null, null, E_OBJ_NOT_FOUND, "[%s] No matching AppControl instance found (%ls, %ls).",
GetErrorMessage(E_OBJ_NOT_FOUND), aId.GetPointer(), oId.GetPointer());
SetLastResult(E_SUCCESS);
// "The length of appid exceeded the limit(%d).",
// WIDGET_APP_MAX_APPID_LENGTH);
- std::unique_ptr<AppControl> pAc(_AppControlRegistry::GetInstance()->GetAppControlN(appId, TIZEN_OPERATION_MAIN));
+ std::unique_ptr<AppControl> pAc(FindAppControlN(appId, TIZEN_OPERATION_MAIN));
SysTryReturnResult(NID_APP, pAc.get() != null, E_OBJ_NOT_FOUND, "The target application (%ls) is not found.", appId.GetPointer());
if (pArguments)
#include <typeinfo>
#include <unique_ptr.h>
+#include <bundle.h>
#include <appsvc/appsvc.h>
#include <FBaseSysLog.h>
SysAssert(__pBundle != NULL);
}
+_AppMessageImpl::_AppMessageImpl(const bundle* pBundle)
+: __pBundle(bundle_dup(const_cast<bundle*>(pBundle)))
+{
+ SysAssert(__pBundle != NULL);
+}
+
_AppMessageImpl::_AppMessageImpl(const _AppMessageImpl&rhs)
: __pBundle(bundle_dup(rhs.__pBundle))
{
}
}
-_LaunchInfo::~_LaunchInfo(void)
+_DataControlInfo::~_DataControlInfo(void)
{
delete pArg;
}
// explicit template initialization
-template class _RequestManagerT<_LaunchInfo>;
+template class _RequestManagerT<_DataControlInfo>;
template class _RequestManagerT<_InProcessInfo>;
template class _RequestManagerT<_ResultInfo>;
namespace Tizen { namespace App
{
-class _AppControlImpl;
class _AppMessageImpl;
class _SqlDataControlImpl;
class _MapDataControlImpl;
result Construct(const Tizen::Base::String* pUri, const Tizen::Base::String* pMime, const Tizen::Base::Collection::IMap* pMap);
- result Construct(const _AppControlImpl& ac, const Tizen::Base::Collection::IList* pList);
-
- result Construct(const _AppControlImpl& ac, const Tizen::Base::String* pUri, const Tizen::Base::String* pMime, const Tizen::Base::Collection::IMap* pMap);
-
result Construct(const _SqlDataControlImpl& dc, _DataControlRequestType requestType, const Tizen::Base::Collection::IList* pList);
result Construct(const _MapDataControlImpl& dc, _DataControlRequestType requestType, const Tizen::Base::Collection::IList* pList);
return GetCallerPid(__pBundle);
}
- AppId GetCalleeAppId(void) const;
+ AppId GetCalleeAppId(void) const
+ {
+ return GetCalleeAppId(__pBundle);
+ }
void Print() const
{
static void UpdateServiceApp(bundle* b);
static bool IsServiceApp(bundle* b);
+
+ static AppId GetCalleeAppId(bundle* b);
static result UpdateWindowHandle(bundle* b, long handle);
static result CreateLaunchArg(bundle* b, const Tizen::Base::Collection::IList* pList);
- static result CreateAppControlArg(bundle* b, const _AppControlImpl& ac, const Tizen::Base::Collection::IList* pList);
-
- static result CreateAppControlArg(bundle* b, const _AppControlImpl& ac, const Tizen::Base::String* pUri, const Tizen::Base::String* pMime, const Tizen::Base::Collection::IMap* pList);
-
- static result CreateAppControlArg(bundle* b, const Tizen::Base::String& oId, const Tizen::Base::String* pUri, const Tizen::Base::String* pMime, const Tizen::Base::Collection::IMap* pMap);
-
static result CreateSqlDataControlArg(bundle* b, const _SqlDataControlImpl& dc, _DataControlRequestType requestType, const Tizen::Base::Collection::IList* pList);
static result CreateMapDataControlArg(bundle* b, const _MapDataControlImpl& dc, _DataControlRequestType requestType, const Tizen::Base::Collection::IList* pList);
virtual void OnAppControlEventReceivedN(int reqId, _AppArg* pAppArg, int res);
- virtual void OnAppControlEventReceivedN(int reqId, int res, const Tizen::Base::Collection::IMap* pArgs, int prop);
+ virtual void OnAppControlPluginEventReceivedN(int reqId, int res, const AppId& appId, const Tizen::Base::String& oId, const Tizen::Base::Collection::IMap* pArgs, int prop);
virtual void OnAppControlEventReceivedN(int reqId, const AppId& appId, const Tizen::Base::String& operationId);
void FinishAppControl(int reqId, int res, Tizen::Base::Collection::IMap* pArg);
+ void FinishAppControl(int reqId, int res, const AppId& appId, const Tizen::Base::String& oId, Tizen::Base::Collection::IMap* pArg, int prop = 0);
+
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, AppSvcResFn pCb, void* pData);
-
- result LaunchAppImplicit(_AppArg* pArg, int req);
+ int Launch(const _AppMessageImpl& msg, AppSvcResFn pCb, void* pData, int req = -1);
+ /**
+ * Launch with pkgname.(osp-app-service : AppService.cpp)
+ */
result LaunchPkg(const char* pkg_name, const char* op, const char* mime, const char* uri, AppSvcResFn pCb, void* data);
+ /**
+ * Launch with pkgname.(osp-uifw : FUiCtrl_EditCopyPasteManager.cpp)
+ */
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);
-
+ /**
+ * Launch with pkgname.(osp-app-controls)
+ */
int LaunchPkg(_AppMessageImpl& msg, 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);
private:
_AppControlEvent __appControlEvent;
- _RequestManagerT<_LaunchInfo> __launchManager;
+ _RequestManagerT<_DataControlInfo> __launchManager;
_RequestManagerT<_InProcessInfo> __inAppManager;
_RequestManagerT<_ResultInfo> __resultManager;
_AppMessageImpl(const Tizen::Base::String& appId, const Tizen::Base::String& oId, const Tizen::Base::String* pUri, const Tizen::Base::String* pMime, const Tizen::Base::Collection::IMap* pMap);
+ explicit _AppMessageImpl(const bundle* pBundle);
+
virtual ~_AppMessageImpl(void);
_AppMessageImpl(const _AppMessageImpl& rhs);
virtual void OnAppControlEventReceivedN(int reqId, _AppArg* pArg, int res) = 0;
- virtual void OnAppControlEventReceivedN(int reqId, int res, const Tizen::Base::Collection::IMap* pArgs, int prop) = 0;
+ virtual void OnAppControlPluginEventReceivedN(int reqId, int res, const AppId& appId, const Tizen::Base::String& oId, const Tizen::Base::Collection::IMap* pArgs, int prop) = 0;
virtual void OnAppControlEventReceivedN(int reqId, const AppId& appId, const Tizen::Base::String& operationId) = 0;
}; // _IAppControlSysEventListener
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-// _LaunchInfo handles the launch request from this process
+// _DataControlInfo handles the launch request from this process
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
const long LAUNCH_INFO_MAGIC = 0x494C;
-class _LaunchInfo
+class _DataControlInfo
{
public:
- _LaunchInfo(_AppArg* pArg, LaunchCbType pCb, void* pData, int prop)
+ _DataControlInfo(_AppArg* pArg, LaunchCbType pCb, void* pData, int prop)
: magic(LAUNCH_INFO_MAGIC)
, reqId(-1)
, pArg(pArg)
{
}
- ~_LaunchInfo(void);
+ ~_DataControlInfo(void);
private:
- _LaunchInfo(const _LaunchInfo& rhs);
- _LaunchInfo& operator =(const _LaunchInfo& rhs);
+ _DataControlInfo(const _DataControlInfo& rhs);
+ _DataControlInfo& operator =(const _DataControlInfo& rhs);
public:
const long magic;
const LaunchCbType launchCb;
void* pUserData;
const int property;
-}; // _LaunchInfo
+}; // _DataControlInfo
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
{
}
+ // implicit process info
+ _InProcessInfo(bool legacy, _IAppControlPluginProvider* pProvider, Tizen::Base::Runtime::IEventListener* pListener)
+ : reqId(-1)
+ , property(0)
+ , pProvider(pProvider)
+ , pListener(pListener)
+ , isLegacy(legacy)
+ {
+ }
+
~_InProcessInfo(void);
private:
T* FindItem(int reqId) const;
+ void Dump(void) const;
+
private:
_RequestManagerT(const T& rhs);