N_SE-34873 : fix phone appcontorl result handling
authorYoung Ik Cho <youngik.cho@samsung.com>
Fri, 19 Apr 2013 06:16:57 +0000 (15:16 +0900)
committerYoung Ik Cho <youngik.cho@samsung.com>
Fri, 19 Apr 2013 06:16:57 +0000 (15:16 +0900)
Change-Id: I844310c87269b8d0cdefaa87edb1edeca3784b6a
Signed-off-by: Young Ik Cho <youngik.cho@samsung.com>
src/call-app-control/PhoneAppControlDllEntry.cpp
src/message-app-control/MessageAppControlDllEntry.cpp

index f4fecf5..0c34aeb 100644 (file)
 #include <appsvc/appsvc.h>
 
 #include <FBaseSysLog.h>
+#include <FBaseColHashMap.h>
 #include <FAppAppControl.h>
 
 #include <FBase_StringConverter.h>
 #include <FApp_AppControlManager.h>
 #include <FApp_AppMessageImpl.h>
+#include <FApp_AppArg.h>
 
 
 using namespace Tizen::App;
@@ -42,7 +44,9 @@ extern "C" {
 
 result _OSP_EXPORT_ StartAppControl(int req, const String&, const String&, const String*, const String*, const IMap*);
 result _OSP_EXPORT_ TerminateAppControl(int req);
+static void OnAppControlResult(void*, int, service_result_e, void*);
 
+static int __req = -1;
 
 result
 StartAppControl(int req, const String& aId, const String& operationId, const String* pUri, const String* pMime, const IMap* pMap)
@@ -79,7 +83,8 @@ StartAppControl(int req, const String& aId, const String& operationId, const Str
        const String& package = _AppControlManager::GetAliasAppId(aId);
        SysLog(NID_APP, "Actual packageId is %ls.", package.GetPointer());
 
-       int pid = _AppControlManager::GetInstance()->LaunchPkg(msg, package, operationId, pActualUri, pMime, NULL, 0);
+       __req = req;
+       int pid = _AppControlManager::GetInstance()->LaunchPkg(msg, package, operationId, pActualUri, pMime, OnAppControlResult, 0);
        if (pid <= 0)
        {
                r = GetLastResult();
@@ -97,6 +102,26 @@ TerminateAppControl(int req)
        return E_SUCCESS;
 }
 
+void
+OnAppControlResult(void* b, int requestCode, service_result_e res, void* userData)
+{
+       SysLog(NID_APP, "Received request %d.", requestCode);
+
+       result r = E_SYSTEM;
+       bundle* pBundle = static_cast<bundle*>(b);
+
+       HashMap* pResult = new (std::nothrow) HashMap();
+       SysTryCatch(NID_APP, pResult != null, , E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Allocation failure.");
+
+       r = pResult->Construct();
+
+       _AppArg::SetArgMap(pBundle, pResult);
+
+       _AppControlManager::GetInstance()->FinishAppControl(__req, res, pResult);
+
+CATCH:
+       __req = -1;
+}
 
 #ifdef __cplusplus
 }
index 5743b2f..50bab12 100644 (file)
@@ -51,6 +51,7 @@ result _OSP_EXPORT_ StartAppControl(int req, const String&, const String&, const
 result _OSP_EXPORT_ TerminateAppControl(int req);
 static void OnAppControlResult(void*, int, service_result_e, void*);
 
+static int __req = -1;
 static int __processId = -1;
 
 static const char __allowedAppControlMessageTable[][2][96] =
@@ -193,7 +194,9 @@ StartAppControl(int req, const String& aId, const String& oId, const String* pUr
                }
 
                const String& package = _AppControlManager::GetAliasAppId(aId);
-               __processId = _AppControlManager::GetInstance()->Launch(msg, package, oId, pUri, pMime, NULL, reinterpret_cast<void*>(req));
+
+               __req = req;
+               __processId = _AppControlManager::GetInstance()->Launch(msg, package, oId, pUri, pMime, OnAppControlResult, 0);
 
                SysTryReturnResult(NID_APP, __processId >= 0, E_SYSTEM, "StartAppControl: Launching Email AppControl is failed.");
                SysLog(NID_APP, "StartAppControl: Launching Message AppControl succeeded.");
@@ -266,7 +269,9 @@ StartAppControl(int req, const String& aId, const String& oId, const String* pUr
                }
 
                const String& package = _AppControlManager::GetAliasAppId(aId);
-               __processId = _AppControlManager::GetInstance()->Launch(msg, package, oId, pUri, pMime, OnAppControlResult, reinterpret_cast<void*>(req));
+
+               __req = req;
+               __processId = _AppControlManager::GetInstance()->Launch(msg, package, oId, pUri, pMime, OnAppControlResult, 0);
 
                SysTryReturnResult(NID_APP, __processId >= 0, E_SYSTEM, "StartAppControl: Launching Email AppControl is failed.");
                SysLog(NID_APP, "StartAppControl: Launching Email AppControl succeeded.");
@@ -301,11 +306,11 @@ OnAppControlResult(void* b, int requestCode, service_result_e res, void* userDat
 
        _AppArg::SetArgMap(pBundle, pResult);
 
-       req = reinterpret_cast<int>(userData);
-       _AppControlManager::GetInstance()->FinishAppControl(req, res, pResult);
+       _AppControlManager::GetInstance()->FinishAppControl(__req, res, pResult);
 
 CATCH:
        __processId = -1;
+       __req = -1;
 }