Add file lock to avoid adding the duplicated registry section by multi-process
[platform/framework/native/appfw.git] / src / app / FApp_AppControlProviderManagerImpl.cpp
1 //
2 // Copyright (c) 2012 Samsung Electronics Co., Ltd.
3 //
4 // Licensed under the Apache License, Version 2.0 (the License);
5 // you may not use this file except in compliance with the License.
6 // You may obtain a copy of the License at
7 //
8 //     http://www.apache.org/licenses/LICENSE-2.0
9 //
10 // Unless required by applicable law or agreed to in writing, software
11 // distributed under the License is distributed on an "AS IS" BASIS,
12 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 // See the License for the specific language governing permissions and
14 // limitations under the License.
15 //
16
17 /**
18  * @file        FApp_AppControlProviderManagerImpl.cpp
19  * @brief       This is the implementation for the %_AppControlProviderManagerImpl class.
20  */
21
22 #include <FBaseDataType.h>
23 #include <FBaseString.h>
24 #include <FBaseColArrayList.h>
25 #include <FBaseColIListT.h>
26 #include <FBaseErrors.h>
27 #include <FAppAppManager.h>
28 #include <FAppAppControl.h>
29 #include <FAppAppControlProviderManager.h>
30 #include <FAppIAppControlProviderEventListener.h>
31
32 #include <FBaseSysLog.h>
33
34 #include "FApp_Aul.h"
35 #include "FApp_AppArg.h"
36 #include "FApp_AppImpl.h"
37 #include "FApp_AppInfo.h"
38 #include "FApp_AppControlManager.h"
39 #include "FApp_AppControlProviderManagerImpl.h"
40
41 using namespace Tizen::Base;
42 using namespace Tizen::Base::Collection;
43
44
45 namespace Tizen { namespace App
46 {
47
48 _AppControlProviderManagerImpl::_AppControlProviderManagerImpl(void)
49 {
50 }
51
52 _AppControlProviderManagerImpl::~_AppControlProviderManagerImpl(void)
53 {
54 }
55
56 result
57 _AppControlProviderManagerImpl::SetAppControlProviderEventListener(IAppControlProviderEventListener* pListener)
58 {
59         _AppImpl* pAppImpl = _AppImpl::GetInstance();
60         SysTryReturn(NID_APP, pAppImpl, false, E_INVALID_STATE, "[E_INVALID_STATE] Getting _AppImpl instance failed.");
61
62         return pAppImpl->SetAppControlProviderEventListener(pListener);
63 }
64
65 result
66 _AppControlProviderManagerImpl::SendAppControlResult(RequestId reqId, const IList* pResultList)
67 {
68         SysTryReturnResult(NID_APP, reqId != -1, E_OBJ_NOT_FOUND, "The application request %d is not found.", reqId);
69
70         _AppControlManager* pAppMgr = _AppControlManager::GetInstance();
71
72         _ResultInfo* pInfo = pAppMgr->__resultManager.FindItem(reqId);
73         SysTryReturnResult(NID_APP, pInfo != null, E_OBJ_NOT_FOUND, "The application request %d is not found.", reqId);
74
75         const _AppArg& arg = pInfo->arg;
76
77         _AppArg resArg;
78         result r = resArg.ConstructResult(arg, pResultList);
79         SysTryReturn(NID_APP, !IsFailed(r), r, r, "[%s] Propagating.", GetErrorMessage(r));
80
81         const bool isService = _AppInfo::GetAppType() & _APP_TYPE_SERVICE_APP;
82
83         //resArg.Print();
84         r = _Aul::SendResult(resArg.GetBundle(), static_cast<appsvc_result_val>(0), _AppInfo::IsSubMode(), isService);
85         SysLog(NID_APP, "Sent AppControl event for %d.", reqId);
86
87         // erase _AppArg after sending the result back to the caller
88         pAppMgr->__resultManager.RemoveItem(reqId);
89
90         return r;
91 }
92
93 result
94 _AppControlProviderManagerImpl::SendAppControlResult(RequestId reqId, AppCtrlResult appControlResult, const IMap* pResultMap)
95 {
96         SysTryReturnResult(NID_APP, reqId != -1, E_OBJ_NOT_FOUND, "The application request %d is not found.", reqId);
97
98         _AppControlManager* pAppMgr = _AppControlManager::GetInstance();
99
100         _ResultInfo* pInfo = pAppMgr->__resultManager.FindItem(reqId);
101         SysTryReturnResult(NID_APP, pInfo != null, E_OBJ_NOT_FOUND, "The application request %d is not found.", reqId);
102
103         const _AppArg& arg = pInfo->arg;
104
105         _AppArg resArg;
106         result r = resArg.ConstructResult(arg, pResultMap);
107         SysTryReturn(NID_APP, !IsFailed(r), r, r, "[%s] Propagating.", GetErrorMessage(r));
108
109         const int code = appControlResult;
110         int res = APPSVC_RES_NOT_OK;
111         switch (code)
112         {
113         case APP_CTRL_RESULT_SUCCEEDED:
114                 res = APPSVC_RES_OK;
115                 break;
116         case APP_CTRL_RESULT_FAILED:
117                 res = APPSVC_OSP_RES_FAIL;
118                 break;
119         case APP_CTRL_RESULT_CANCELED:
120                 res = APPSVC_RES_NOT_OK;
121                 break;
122         case APP_CTRL_RESULT_TERMINATED:
123                 res = APPSVC_OSP_RES_TERMINATE;
124                 break;
125         case APP_CTRL_RESULT_ABORTED:
126                 res = APPSVC_RES_CANCEL;
127                 break;
128         default:
129                 res = APPSVC_RES_NOT_OK;
130                 break;
131         }
132
133         const bool isService = _AppInfo::GetAppType() & _APP_TYPE_SERVICE_APP;
134
135         //resArg.Print();
136         r = _Aul::SendResult(resArg.GetBundle(), static_cast<appsvc_result_val>(res), _AppInfo::IsSubMode(), isService);
137         SysLog(NID_APP, "Sent AppControl event for %d.", reqId);
138
139         // erase _AppArg after sending the result back to the caller
140         pAppMgr->__resultManager.RemoveItem(reqId);
141
142         return r;
143 }
144
145 AppId
146 _AppControlProviderManagerImpl::GetClientAppId(RequestId reqId) const
147 {
148         SysTryReturn(NID_APP, reqId != -1, L"", E_OBJ_NOT_FOUND, "[E_OBJ_NOT_FOUND] The application control request %d is not found.", reqId);
149
150         _ResultInfo* pInfo = _AppControlManager::GetInstance()->__resultManager.FindItem(reqId);
151         SysTryReturn(NID_APP, pInfo != null, L"", E_OBJ_NOT_FOUND, "[E_OB_NOT_FOUND] The application control request %d is not found.", reqId);
152
153         const _AppArg& arg = pInfo->arg;
154
155         return arg.GetCallerAppId();
156 }
157
158 const _AppControlProviderManagerImpl*
159 _AppControlProviderManagerImpl::GetInstance(const AppControlProviderManager& ac)
160 {
161         return ac.__pAppControlProviderManagerImpl;
162 }
163
164 _AppControlProviderManagerImpl*
165 _AppControlProviderManagerImpl::GetInstance(AppControlProviderManager& ac)
166 {
167         return ac.__pAppControlProviderManagerImpl;
168 }
169
170 } } // Tizen::App
171