From: Young Ik Cho Date: Thu, 5 Sep 2013 03:01:47 +0000 (+0900) Subject: fix appcontrol result behavior from service callee X-Git-Tag: accepted/tizen/20130927.081017^2~19^2 X-Git-Url: http://review.tizen.org/git/?p=platform%2Fframework%2Fnative%2Fappfw.git;a=commitdiff_plain;h=bd37086481f239c8e4c0d2c54bc0683e022c178c fix appcontrol result behavior from service callee Change-Id: I1d387684a9f2f6e2671d1abd889dbcf3bbdf20d2 Signed-off-by: Young Ik Cho --- diff --git a/src/app/FApp_AppArg.cpp b/src/app/FApp_AppArg.cpp index 46ad3c5..67ffb46 100644 --- a/src/app/FApp_AppArg.cpp +++ b/src/app/FApp_AppArg.cpp @@ -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)); } diff --git a/src/app/FApp_AppControlImpl.cpp b/src/app/FApp_AppControlImpl.cpp index 74205ff..d3a1953 100644 --- a/src/app/FApp_AppControlImpl.cpp +++ b/src/app/FApp_AppControlImpl.cpp @@ -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 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 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; diff --git a/src/app/FApp_AppControlManager.cpp b/src/app/FApp_AppControlManager.cpp index bc39ebd..f8c1f67 100644 --- a/src/app/FApp_AppControlManager.cpp +++ b/src/app/FApp_AppControlManager.cpp @@ -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; } diff --git a/src/app/FApp_AppControlProviderManagerImpl.cpp b/src/app/FApp_AppControlProviderManagerImpl.cpp index 9e40660..2250b0d 100644 --- a/src/app/FApp_AppControlProviderManagerImpl.cpp +++ b/src/app/FApp_AppControlProviderManagerImpl.cpp @@ -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(0), _AppInfo::IsSubMode()); + r = _Aul::SendResult(resArg.GetBundle(), static_cast(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(res), _AppInfo::IsSubMode()); + r = _Aul::SendResult(resArg.GetBundle(), static_cast(res), _AppInfo::IsSubMode(), isService); SysLog(NID_APP, "Sent AppControl event for %d.", reqId); // erase _AppArg after sending the result back to the caller diff --git a/src/app/FApp_Aul.cpp b/src/app/FApp_Aul.cpp index 0487402..104b4e0 100644 --- a/src/app/FApp_Aul.cpp +++ b/src/app/FApp_Aul.cpp @@ -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"); diff --git a/src/app/FApp_DataControlProviderManagerImpl.cpp b/src/app/FApp_DataControlProviderManagerImpl.cpp index bcc5ba6..a78c9f5 100644 --- a/src/app/FApp_DataControlProviderManagerImpl.cpp +++ b/src/app/FApp_DataControlProviderManagerImpl.cpp @@ -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 diff --git a/src/app/inc/FApp_AppArg.h b/src/app/inc/FApp_AppArg.h index 8ae5b2c..f61782d 100644 --- a/src/app/inc/FApp_AppArg.h +++ b/src/app/inc/FApp_AppArg.h @@ -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); diff --git a/src/app/inc/FApp_AppControlImpl.h b/src/app/inc/FApp_AppControlImpl.h index 58627c5..2094d8b 100644 --- a/src/app/inc/FApp_AppControlImpl.h +++ b/src/app/inc/FApp_AppControlImpl.h @@ -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 diff --git a/src/app/inc/FApp_AppControlManager.h b/src/app/inc/FApp_AppControlManager.h index 002c73b..bc151ea 100644 --- a/src/app/inc/FApp_AppControlManager.h +++ b/src/app/inc/FApp_AppControlManager.h @@ -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); diff --git a/src/app/inc/FApp_Aul.h b/src/app/inc/FApp_Aul.h index 43184ba..08133c2 100644 --- a/src/app/inc/FApp_Aul.h +++ b/src/app/inc/FApp_Aul.h @@ -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);