move general AppControl launch logic to plugin
authorYoung Ik Cho <youngik.cho@samsung.com>
Thu, 10 Oct 2013 06:24:07 +0000 (15:24 +0900)
committerYoung Ik Cho <youngik.cho@samsung.com>
Thu, 10 Oct 2013 08:27:22 +0000 (17:27 +0900)
Change-Id: Ib224b45f631919c1e7202c4cce1427910ad8dc24
Signed-off-by: Young Ik Cho <youngik.cho@samsung.com>
18 files changed:
src/app/FApp_AppArg.cpp
src/app/FApp_AppControlEvent.cpp
src/app/FApp_AppControlEventArg.cpp
src/app/FApp_AppControlEventArg.h
src/app/FApp_AppControlImpl.cpp
src/app/FApp_AppControlImpl.h [moved from src/app/inc/FApp_AppControlImpl.h with 76% similarity]
src/app/FApp_AppControlManager.cpp
src/app/FApp_AppControlRegistry.cpp
src/app/FApp_AppControlRegistry.h
src/app/FApp_AppManagerImpl.cpp
src/app/FApp_AppMessageImpl.cpp
src/app/FApp_RequestManagerT.cpp
src/app/inc/FApp_AppArg.h
src/app/inc/FApp_AppControlManager.h
src/app/inc/FApp_AppMessageImpl.h
src/app/inc/FApp_IAppControlSysEventListener.h
src/app/inc/FApp_LaunchInfo.h
src/app/inc/FApp_RequestManagerT.h

index 96c0ae3..3f79949 100644 (file)
@@ -80,9 +80,6 @@ static const char BUNDLE_KEY_PREFIX_UG[] = "__UG_";
 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)
@@ -120,26 +117,6 @@ _AppArg::Construct(const IList* pList)
 
 
 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();
@@ -563,9 +540,9 @@ _AppArg::GetCallerAppId(void) const
 
 
 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;
 
@@ -879,73 +856,6 @@ _AppArg::CreateAppLaunchConditionArg(bundle* b, const String& condition, const I
 }
 
 
-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;
index 5843165..ae009bd 100644 (file)
@@ -52,7 +52,7 @@ _AppControlEvent::FireImpl(IEventListener& listener, const IEventArg& arg)
 
                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;
                }
index 12404f0..dfc257d 100644 (file)
@@ -44,53 +44,19 @@ _AppControlEventArg::~_AppControlEventArg(void)
 _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
index 621fcf3..5585266 100644 (file)
@@ -102,7 +102,9 @@ class _NativeAppControlEventArg
 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
        {
@@ -124,11 +126,23 @@ public:
                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
 
 /**
index 0b5961a..d5db899 100644 (file)
@@ -33,8 +33,6 @@
 #include <FAppIAppControlEventListener.h>
 #include <FAppIAppControlResponseListener.h>
 
-#include <FIo_DirectoryImpl.h>
-
 #include "FApp_AppControlImpl.h"
 #include "FApp_AppControlManager.h"
 #include "FApp_IAppControlPluginProvider.h"
@@ -59,14 +57,13 @@ namespace
 {
 
 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)
@@ -103,7 +100,7 @@ _AppControlImpl::~_AppControlImpl(void)
 }
 
 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.");
@@ -116,48 +113,13 @@ _AppControlImpl::CreateN(const String& path, const String& aId, const String& oI
        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)
@@ -188,51 +150,6 @@ _AppControlImpl::GetAppControlPluginProvider(const String& path)
        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)
@@ -283,351 +200,68 @@ _AppControlImpl::FindAndStart(const String& operationId, const String* pUriPatte
        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);
@@ -636,18 +270,18 @@ _AppControlImpl::StartNative(const IList* pDataList, IAppControlEventListener* p
        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)
        {
@@ -670,7 +304,7 @@ _AppControlImpl::StartNative(const IList* pDataList, IAppControlEventListener* p
 }
 
 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);
@@ -684,7 +318,7 @@ _AppControlImpl::StartNative(const String* pUriData, const String* pMimeType, co
 
        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);
@@ -713,7 +347,7 @@ _AppControlImpl::StartNative(const String* pUriData, const String* pMimeType, co
                        }
                }
        }
-       r = InvokeStartAppControl(pProvider, req, _provider, _opId, pUriData, pMimeType, pDataList);
+       r = InvokeStartAppControl(pProvider, req, _appId, _opId, pUriData, pMimeType, pDataList);
 
        if (pListener == null)
        {
@@ -758,12 +392,21 @@ _AppControlImpl::InvokeStartAppControl(_IAppControlPluginProvider* pProvider, in
 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)
 {
@@ -816,40 +459,33 @@ _AppControlImpl::Stop(void)
        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;
 }
@@ -907,13 +543,13 @@ _AppControlImpl::GetAppName(void)
 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&
similarity index 76%
rename from src/app/inc/FApp_AppControlImpl.h
rename to src/app/FApp_AppControlImpl.h
index 8137caf..85e833b 100644 (file)
@@ -22,8 +22,6 @@
 #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>
@@ -40,6 +38,7 @@ typedef struct _bundle_t bundle;
 
 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
 {
@@ -48,22 +47,17 @@ class AppControl;
 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
@@ -72,17 +66,7 @@ public:
        /**
         * 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.
@@ -95,30 +79,30 @@ public:
        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);
 
        /**
@@ -232,6 +216,8 @@ public:
 
        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);
@@ -260,23 +246,13 @@ private:
         */
        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;
@@ -284,7 +260,7 @@ protected:
        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;
@@ -295,7 +271,6 @@ private:
        Tizen::Base::Collection::ArrayListT<int> __appControlResponseEventList;
 
        friend class AppControl;
-       friend class _AppArg;
 }; // _AppControlImpl
 
 } } // Tizen::App
index 7fa2684..0d15ee1 100644 (file)
@@ -43,8 +43,8 @@
 #include <FAppSqlDataControl.h>
 #include <FAppMapDataControl.h>
 #include <FAppPkgPackageInfo.h>
-
 #include <FBaseSysLog.h>
+
 #include <FBase_StringConverter.h>
 #include <FIo_DataControlResultSetImpl.h>
 
@@ -75,15 +75,14 @@ using namespace Tizen::Base::Runtime;
 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)
 {
@@ -151,7 +150,7 @@ _AppControlManager::OnAppControlEventReceivedN(int reqId, _AppArg* pAppArg, int
 
        //_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);
 
@@ -179,23 +178,24 @@ _AppControlManager::OnAppControlEventReceivedN(int reqId, _AppArg* pAppArg, int
 }
 
 
-// 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')
                {
@@ -228,6 +228,12 @@ _AppControlManager::OnAppControlEventReceivedN(int reqId, const AppId& appId, co
        {
                SysLog(NID_APP, "No listener registered.");
        }
+
+       if (r == E_OPERATION_CANCELED)
+       {
+               SysLog(NID_APP, "Removed start listener as operation is canceled.");
+               __inAppManager.RemoveItem(reqId);
+       }
 }
 
 
@@ -261,7 +267,7 @@ _AppControlManager::InvokeLegacyAppControlCompleteListener(IAppControlEventListe
 
 // 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);
 
@@ -272,24 +278,25 @@ _AppControlManager::OnAppControlEventReceivedN(int reqId, int res, const IMap* p
 
        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);
 
@@ -344,12 +351,15 @@ _AppControlManager::OnAppControlEventReceivedN(int reqId, int res, const IMap* p
                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);
@@ -375,11 +385,6 @@ IsMatchingProcListener(const _InProcessInfo& info, IEventListener* pListener)
        return (info.pListener == pListener);
 }
 
-static bool
-IsMatchingLaunchListener(const _LaunchInfo& info, IEventListener* pListener)
-{
-       return (info.pUserData == pListener);
-}
 
 void
 _AppControlManager::StopAppControlResponseListener(IAppControlResponseListener* pListener)
@@ -391,14 +396,6 @@ _AppControlManager::StopAppControlResponseListener(IAppControlResponseListener*
                __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);
-       }
-
 }
 
 
@@ -450,7 +447,6 @@ result
 _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)
        {
@@ -469,31 +465,12 @@ _AppControlManager::LaunchPkg(_AppMessageImpl& msg, const char* pkg_name, const
                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;
@@ -592,33 +569,6 @@ _AppControlManager::LaunchPkg(_AppMessageImpl& msg, AppSvcResFn pCb, void* data)
 }
 
 
-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)
 {
@@ -767,14 +717,14 @@ _AppControlManager::Launch(const AppId& appId, _AppArg* pArg, int req)
 
 
 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);
 }
 
 
@@ -785,18 +735,6 @@ _AppControlManager::Launch(const AppId& appId, _AppArg* pArg, AppSvcResFn pCb, v
        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);
 
@@ -882,78 +820,6 @@ _AppControlManager::Launch(const AppId& appId, _AppArg* pArg, AppSvcResFn pCb, v
        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)
@@ -963,9 +829,20 @@ _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)
 {
@@ -984,7 +861,7 @@ _AppControlManager::AddLaunchRequest(_AppArg* pArg, LaunchCbType pCb, void* pDat
 {
        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);
index 866f405..6c97827 100644 (file)
@@ -21,8 +21,9 @@
 
 #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;
@@ -52,7 +50,7 @@ namespace
 
 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.";
 
@@ -75,17 +73,11 @@ _AppControlRegistry::_AppControlRegistry(void)
        __tizenList.Construct();
 
        __aliasList.Construct();
-
-       __aliasAppId.Construct();
-
-       __runtimeAlias.Construct();
 }
 
 _AppControlRegistry::~_AppControlRegistry(void)
 {
        _DeleteCollectionMapValue<String, _AppControlAliasEntry>(__aliasList);
-
-       _DeleteCollection<_AppControlAliasEntry>(__runtimeAlias);
 }
 
 _AppControlRegistry*
@@ -101,8 +93,6 @@ _AppControlRegistry::GetInstance(void)
                __pSelf->LoadTizenAppControlRegistry();
 
                __pSelf->LoadLegacyList();
-
-               __pSelf->LoadAliasList();
        }
 
        return __pSelf;
@@ -239,49 +229,6 @@ _AppControlRegistry::LoadLegacyList(void)
        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
@@ -289,6 +236,8 @@ _AppControlRegistry::GetTizenAppControlN(const String& aId, const String& oId) c
        int count = 0;
        const String* pAppId = &aId;
        const String* pOperation = &oId;
+
+       // legacy check first
        do
        {
                const _AppControlAliasEntry* const pEntry = GetAppControlAliasEntry(*pAppId, *pOperation);
@@ -311,36 +260,9 @@ _AppControlRegistry::GetTizenAppControlN(const String& aId, const String& oId) c
        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);
 }
 
 
@@ -355,8 +277,8 @@ _AppControlRegistry::GetTizenAppControlProvider(const String& appId, const Strin
                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);
 }
 
 
@@ -366,8 +288,9 @@ _AppControlRegistry::GetTizenAppControlProvider(const String& appId, const Strin
 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;
 };
@@ -383,6 +306,8 @@ AppSvcIterFnCb(const char* pAppId, void* pData)
        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)
@@ -392,7 +317,7 @@ AppSvcIterFnCb(const char* pAppId, void* pData)
        }
 
        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());
@@ -433,7 +358,7 @@ _AppControlRegistry::FindAppControlListN(const String* pOid, const String* pUri,
        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));
 
@@ -474,108 +399,26 @@ _AppControlRegistry::GetAppControlAliasEntry(const String& aId, const String& oI
 }
 
 
-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
index 30c413e..05eb5be 100644 (file)
@@ -79,7 +79,6 @@ public:
                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;
 
@@ -91,20 +90,12 @@ public:
 
        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);
 
@@ -114,8 +105,6 @@ private:
 
        result LoadLegacyList(void);
 
-       result LoadAliasList(void);
-
        Tizen::Base::String GetTizenAppControlProvider(const Tizen::Base::String& appId, const Tizen::Base::String& opId) const;
 
 private:
@@ -123,10 +112,6 @@ private:
 
        AppControlAliasList __aliasList;
 
-       AliasMapType __aliasAppId;
-
-       mutable RuntimeAliasType __runtimeAlias;
-
        static _AppControlRegistry* __pSelf;
 }; // _AppControlRegistry
 
index 2528c1e..8ef7d29 100644 (file)
@@ -196,14 +196,6 @@ _AppManagerImpl::FindAppControlN(const AppId& aId, const String& oId)
        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);
@@ -469,7 +461,7 @@ _AppManagerImpl::LaunchApplication(const String& appId, const IList* pArguments,
 //                                       "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)
index 56d22d6..00bac76 100644 (file)
@@ -22,6 +22,7 @@
 #include <typeinfo>
 #include <unique_ptr.h>
 
+#include <bundle.h>
 #include <appsvc/appsvc.h>
 
 #include <FBaseSysLog.h>
@@ -47,6 +48,12 @@ _AppMessageImpl::_AppMessageImpl(void)
        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))
 {
index 9b03b53..d1ba185 100644 (file)
@@ -47,7 +47,7 @@ _InProcessInfo::~_InProcessInfo(void)
        }
 }
 
-_LaunchInfo::~_LaunchInfo(void)
+_DataControlInfo::~_DataControlInfo(void)
 {
        delete pArg;
 }
@@ -247,7 +247,7 @@ _RequestManagerT<_ResultInfo>::RemoveItem(int reqId)
 
 
 // explicit template initialization
-template class _RequestManagerT<_LaunchInfo>;
+template class _RequestManagerT<_DataControlInfo>;
 template class _RequestManagerT<_InProcessInfo>;
 template class _RequestManagerT<_ResultInfo>;
 
index 2be9d68..49975e2 100644 (file)
@@ -40,7 +40,6 @@ class HashMap;
 namespace Tizen { namespace App
 {
 
-class _AppControlImpl;
 class _AppMessageImpl;
 class _SqlDataControlImpl;
 class _MapDataControlImpl;
@@ -86,10 +85,6 @@ public:
 
        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);
@@ -128,7 +123,10 @@ public:
                return GetCallerPid(__pBundle);
        }
 
-       AppId GetCalleeAppId(void) const;
+       AppId GetCalleeAppId(void) const
+       {
+               return GetCalleeAppId(__pBundle);
+       }
 
        void Print() const
        {
@@ -184,6 +182,8 @@ public:
        static void UpdateServiceApp(bundle* b);
 
        static bool IsServiceApp(bundle* b);
+       
+       static AppId GetCalleeAppId(bundle* b);
 
        static result UpdateWindowHandle(bundle* b, long handle);
 
@@ -206,12 +206,6 @@ private:
 
        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);
index dba96f6..c651314 100644 (file)
@@ -112,7 +112,7 @@ public:
 
        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);
 
@@ -128,22 +128,29 @@ public:
 
        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);
@@ -179,7 +186,7 @@ private:
 
 private:
        _AppControlEvent __appControlEvent;
-       _RequestManagerT<_LaunchInfo> __launchManager;
+       _RequestManagerT<_DataControlInfo> __launchManager;
        _RequestManagerT<_InProcessInfo> __inAppManager;
        _RequestManagerT<_ResultInfo> __resultManager;
 
index aa97815..6875d4d 100644 (file)
@@ -52,6 +52,8 @@ public:
 
        _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);
index 5165a2a..9bded34 100644 (file)
@@ -46,7 +46,7 @@ public:
 
        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
index 96493e8..7d9cfc0 100644 (file)
@@ -46,14 +46,14 @@ typedef result (*LaunchCbType)(void* data, _AppArg* pArg, _AppArg* pResArg, serv
 
 
 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-// _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)
@@ -63,11 +63,11 @@ public:
        {
        }
 
-       ~_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;
@@ -76,7 +76,7 @@ public:
        const LaunchCbType launchCb;
        void* pUserData;
        const int property;
-}; // _LaunchInfo
+}; // _DataControlInfo
 
 
 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
@@ -96,6 +96,16 @@ public:
        {
        }
 
+       // 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:
index 34391e0..1661874 100644 (file)
@@ -56,6 +56,8 @@ public:
 
        T* FindItem(int reqId) const;
 
+       void Dump(void) const;
+
 private:
        _RequestManagerT(const T& rhs);