fix appcontrol result behavior from service callee
authorYoung Ik Cho <youngik.cho@samsung.com>
Thu, 5 Sep 2013 03:01:47 +0000 (12:01 +0900)
committerYoung Ik Cho <youngik.cho@samsung.com>
Thu, 5 Sep 2013 03:01:47 +0000 (12:01 +0900)
Change-Id: I1d387684a9f2f6e2671d1abd889dbcf3bbdf20d2
Signed-off-by: Young Ik Cho <youngik.cho@samsung.com>
src/app/FApp_AppArg.cpp
src/app/FApp_AppControlImpl.cpp
src/app/FApp_AppControlManager.cpp
src/app/FApp_AppControlProviderManagerImpl.cpp
src/app/FApp_Aul.cpp
src/app/FApp_DataControlProviderManagerImpl.cpp
src/app/inc/FApp_AppArg.h
src/app/inc/FApp_AppControlImpl.h
src/app/inc/FApp_AppControlManager.h
src/app/inc/FApp_Aul.h

index 46ad3c5..67ffb46 100644 (file)
@@ -71,10 +71,15 @@ static const char OSP_V_REQUEST_TYPE_MAP_INSERT[] = "map_insert";
 static const char OSP_V_REQUEST_TYPE_MAP_UPDATE[] = "map_update";
 static const char OSP_V_REQUEST_TYPE_MAP_DELETE[] = "map_delete";
 static const char OSP_V_VERSION_2_1_0_3[] = "ver_2.1.0.3";
+
 static const char BUNDLE_KEY_PREFIX_AUL[] = "__AUL_";
 static const char BUNDLE_KEY_PREFIX_SERVICE[] = "__APP_SVC_";
 static const char BUNDLE_KEY_PREFIX_OSP[] = "__OSP_";
 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";
 
@@ -1150,12 +1155,22 @@ bool
 _AppArg::IsSubMode(bundle* pBundle)
 {
        const char* p = appsvc_get_data(pBundle, OSP_K_SUBMODE_CALLEE);
-       if (p && (strncmp(p, "1", sizeof(char)) == 0))
-       {
-               return true;
-       }
+       return (p && (strncmp(p, "1", sizeof(char)) == 0));
+}
 
-       return false;
+
+void
+_AppArg::UpdateServiceApp(bundle* pBundle)
+{
+       appsvc_add_data(pBundle, OSP_K_SERVICE_CALLEE, "1");
+}
+
+
+bool
+_AppArg::IsServiceApp(bundle* pBundle)
+{
+       const char* p = appsvc_get_data(pBundle, OSP_K_SERVICE_CALLEE);
+       return (p && (strncmp(p, "1", sizeof(char)) == 0));
 }
 
 
index 74205ff..d3a1953 100644 (file)
@@ -516,13 +516,14 @@ _AppControlImpl::AppControlCbLegacy(void* data, _AppArg* pArg, _AppArg* pResArg,
        }
 
        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);
+       _AppControlManager::InvokeLegacyAppControlCompleteListener(*pListener, provider, oId, &list, isSubMode | isServiceCallee);
 
        return E_SUCCESS;
 }
@@ -582,6 +583,7 @@ _AppControlImpl::AppControlCb(void* data, _AppArg* pArg, _AppArg* pResArg, servi
        }
 
        const bool isSubMode = _AppArg::IsSubMode(b);
+       const bool isServiceCallee = _AppArg::IsServiceApp(b);
 
        std::unique_ptr<HashMap> pMap(pResArg->GetArgMapN());
 
@@ -595,13 +597,13 @@ _AppControlImpl::AppControlCb(void* data, _AppArg* pArg, _AppArg* pResArg, servi
 
        if (pResponseEvent != null)
        {
-               _AppControlResponseEventArg* pResponseEventArg = new (std::nothrow) _AppControlResponseEventArg(pListener, _APPCONTROL_RESPONSETYPE_COMPLETE, provider, oId, E_SUCCESS, ret, pMap.release(), reqId, isSubMode);
+               _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);
+               _AppControlManager::InvokeAppControlCompleteListener(*pListener, provider, oId, ret, pMap.get(), isSubMode | isServiceCallee);
        }
 
        return E_SUCCESS;
index bc39ebd..f8c1f67 100644 (file)
@@ -234,11 +234,11 @@ _AppControlManager::OnAppControlEventReceivedN(int reqId, const AppId& appId, co
 
 
 void
-_AppControlManager::InvokeAppControlCompleteListener(IAppControlResponseListener& listener, const AppId& appId, const String& op, AppCtrlResult res, const IMap* pExtraData, bool isSubMode)
+_AppControlManager::InvokeAppControlCompleteListener(IAppControlResponseListener& listener, const AppId& appId, const String& op, AppCtrlResult res, const IMap* pExtraData, bool noRaise)
 {
        listener.OnAppControlCompleteResponseReceived(appId, op, res, pExtraData);
 
-       if (!isSubMode)
+       if (!noRaise)
        {
                _AppImpl::GetInstance()->SendUserEvent(_APP_EVENT_RAISE, null, false);
        }
@@ -248,11 +248,11 @@ _AppControlManager::InvokeAppControlCompleteListener(IAppControlResponseListener
 
 
 void
-_AppControlManager::InvokeLegacyAppControlCompleteListener(IAppControlEventListener& listener, const AppId& appId, const String& op, const IList* pList, bool isSubMode)
+_AppControlManager::InvokeLegacyAppControlCompleteListener(IAppControlEventListener& listener, const AppId& appId, const String& op, const IList* pList, bool noRaise)
 {
        listener.OnAppControlCompleted(appId, op, pList);
 
-       if (!isSubMode)
+       if (!noRaise)
        {
                _AppImpl::GetInstance()->SendUserEvent(_APP_EVENT_RAISE, null, false);
        }
@@ -293,6 +293,7 @@ _AppControlManager::OnAppControlEventReceivedN(int reqId, int res, const IMap* p
                }
 
                const bool isSubMode = (property & _APPCONTROL_PROPERTY_SUBMODE);
+               const bool isServiceCallee = (property & _APPCONTROL_PROPERTY_SERVICE_CALLEE);
 
                if (pInfo->isLegacy)
                {
@@ -302,7 +303,7 @@ _AppControlManager::OnAppControlEventReceivedN(int reqId, int res, const IMap* p
                                ArrayList list(SingleObjectDeleter);
                                _AppArg::FillLegacyAppControlResult(list, res, pArgs, aId);
 
-                               InvokeLegacyAppControlCompleteListener(*pListener, aId, oId, &list, isSubMode);
+                               InvokeLegacyAppControlCompleteListener(*pListener, aId, oId, &list, isSubMode | isServiceCallee);
                        }
                        else
                        {
@@ -329,7 +330,7 @@ _AppControlManager::OnAppControlEventReceivedN(int reqId, int res, const IMap* p
                                }
                                else
                                {
-                                       InvokeAppControlCompleteListener(*pListener, aId, oId, ConvertAppControlResultCode(res), pArgs, isSubMode);
+                                       InvokeAppControlCompleteListener(*pListener, aId, oId, ConvertAppControlResultCode(res), pArgs, isSubMode | isServiceCallee);
                                        SysLog(NID_APP, "Listener called directly");
                                        delete pArgs;
                                }
index 9e40660..2250b0d 100644 (file)
@@ -78,8 +78,10 @@ _AppControlProviderManagerImpl::SendAppControlResult(RequestId reqId, const ILis
        result r = resArg.ConstructResult(arg, pResultList);
        SysTryReturn(NID_APP, !IsFailed(r), r, r, "[%s] Propagating.", GetErrorMessage(r));
 
+       const bool isService = _AppInfo::GetAppType() & _APP_TYPE_SERVICE_APP;
+
        //resArg.Print();
-       r = _Aul::SendResult(resArg.GetBundle(), static_cast<appsvc_result_val>(0), _AppInfo::IsSubMode());
+       r = _Aul::SendResult(resArg.GetBundle(), static_cast<appsvc_result_val>(0), _AppInfo::IsSubMode(), isService);
        SysLog(NID_APP, "Sent AppControl event for %d.", reqId);
 
        // erase _AppArg after sending the result back to the caller
@@ -128,8 +130,10 @@ _AppControlProviderManagerImpl::SendAppControlResult(RequestId reqId, AppCtrlRes
                break;
        }
 
+       const bool isService = _AppInfo::GetAppType() & _APP_TYPE_SERVICE_APP;
+
        //resArg.Print();
-       r = _Aul::SendResult(resArg.GetBundle(), static_cast<appsvc_result_val>(res), _AppInfo::IsSubMode());
+       r = _Aul::SendResult(resArg.GetBundle(), static_cast<appsvc_result_val>(res), _AppInfo::IsSubMode(), isService);
        SysLog(NID_APP, "Sent AppControl event for %d.", reqId);
 
        // erase _AppArg after sending the result back to the caller
index 0487402..104b4e0 100644 (file)
@@ -114,7 +114,7 @@ _Aul::GetConvertedResult(const int aul_ret, const char* pFunctionName)
 }
 
 result
-_Aul::SendResult(bundle* b, appsvc_result_val res, bool isSubMode)
+_Aul::SendResult(bundle* b, appsvc_result_val res, bool isSubMode, bool isServiceApp)
 {
        // to skip error handling, of appsvc_send_result, use aul_send_service_result() directly.
        //int ret = appsvc_send_result(b, res);
@@ -128,6 +128,11 @@ _Aul::SendResult(bundle* b, appsvc_result_val res, bool isSubMode)
                _AppArg::UpdateSubMode(b);
        }
 
+       if (isServiceApp)
+       {
+               _AppArg::UpdateServiceApp(b);
+       }
+
        const int aul_ret = aul_send_service_result(b);
 
        result r = GetConvertedResult(aul_ret, "SendResult");
index bcc5ba6..a78c9f5 100644 (file)
@@ -364,7 +364,7 @@ _DataControlProviderManagerImpl::SendDataControlResult(RequestId reqId, _DataCon
        resultArg.UpdateKeyValue(OSP_K_DATACONTROL_PROTOCOL_VERSION, version);
 
        //resultArg.Print();
-       r = _Aul::SendResult(resultArg.GetBundle(), static_cast< appsvc_result_val >(0), false);
+       r = _Aul::SendResult(resultArg.GetBundle(), static_cast< appsvc_result_val >(0), false, false);
        SysTryCatch(NID_APP, !IsFailed(r), , r, "[%s] Failed to send result.", GetErrorMessage(r));
 
        // Erases _AppArg after sending the result back to the caller
index 8ae5b2c..f61782d 100644 (file)
@@ -63,7 +63,6 @@ enum _DataControlRequestType
 #define OSP_K_COND          "__OSP_COND_NAME__"
 #define OSP_K_APPID         "__OSP_APPID__"
 #define OSP_K_REQUEST_ID    "__OSP_REQUEST_ID__"
-#define OSP_K_SUBMODE_CALLEE   "__OSP_SUB_CALLEE__"
 #define OSP_K_APPCONTROL_INTERNAL_OPERATION "__OSP_APPCONTROL_INTERNAL_INTERNAL_OPERATION__"
 #define OSP_K_DATACONTROL_PROVIDER             "__OSP_DATACONTROL_PROVIDER__"
 #define OSP_K_DATACONTROL_DATA                 "__OSP_DATACONTROL_DATA__"
@@ -184,6 +183,10 @@ public:
 
        static bool IsSubMode(bundle* b);
 
+       static void UpdateServiceApp(bundle* b);
+
+       static bool IsServiceApp(bundle* b);
+
        static result UpdateWindowHandle(bundle* b, long handle);
 
        static Tizen::Base::Collection::ArrayList* GetListN(bundle* b, const char* key);
index 58627c5..2094d8b 100644 (file)
@@ -57,6 +57,7 @@ enum _AppControlProperty
        _APPCONTROL_PROPERTY_ALIAS = 0x400,
        _APPCONTROL_PROPERTY_APPID_CHANGE = 0x800,
        _APPCONTROL_PROPERTY_SUBMODE = 0x1000,
+       _APPCONTROL_PROPERTY_SERVICE_CALLEE = 0x2000,
 };
 
 class _OSP_EXPORT_ _AppControlImpl
index 002c73b..bc151ea 100644 (file)
@@ -166,9 +166,9 @@ public:
 
        static AppCtrlResult ConvertAppControlResultCode(int res);
 
-       static void InvokeAppControlCompleteListener(IAppControlResponseListener& listener, const AppId& appId, const Tizen::Base::String& op, AppCtrlResult res, const Tizen::Base::Collection::IMap* pExtraData, bool isSubMode);
+       static void InvokeAppControlCompleteListener(IAppControlResponseListener& listener, const AppId& appId, const Tizen::Base::String& op, AppCtrlResult res, const Tizen::Base::Collection::IMap* pExtraData, bool noRaise);
 
-       static void InvokeLegacyAppControlCompleteListener(IAppControlEventListener& listener, const AppId& appId, const Tizen::Base::String& op, const Tizen::Base::Collection::IList* pList, bool isSubMode);
+       static void InvokeLegacyAppControlCompleteListener(IAppControlEventListener& listener, const AppId& appId, const Tizen::Base::String& op, const Tizen::Base::Collection::IList* pList, bool noRaise);
 
 private:
        _OSP_LOCAL_ _AppControlManager(void);
index 43184ba..08133c2 100644 (file)
@@ -48,7 +48,7 @@ public:
 
        static result TerminateApplicationByPid(int pid);
 
-       static result SendResult(bundle* b, appsvc_result_val res, bool isSubMode);
+       static result SendResult(bundle* b, appsvc_result_val res, bool isSubMode, bool isServiceApp);
 
        static bool IsRunning(const Tizen::Base::String& appId);