71aa878a4daf555c1008ca5483d2ee0869778627
[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         if (IsFailed(r))
80         {
81                 SysPropagate(NID_APP, r);
82                 return r;
83         }
84
85         const bool isService = _AppInfo::GetAppType() & _APP_TYPE_SERVICE_APP;
86
87         //resArg.Print();
88         r = _Aul::SendResult(resArg.GetBundle(), static_cast<appsvc_result_val>(0), _AppInfo::IsSubMode(), isService);
89         SysLog(NID_APP, "Sent AppControl event for %d.", reqId);
90
91         // erase _AppArg after sending the result back to the caller
92         pAppMgr->__resultManager.RemoveItem(reqId);
93
94         return r;
95 }
96
97 result
98 _AppControlProviderManagerImpl::SendAppControlResult(RequestId reqId, AppCtrlResult appControlResult, const IMap* pResultMap)
99 {
100         SysTryReturnResult(NID_APP, reqId != -1, E_OBJ_NOT_FOUND, "The application request %d is not found.", reqId);
101
102         _AppControlManager* pAppMgr = _AppControlManager::GetInstance();
103
104         _ResultInfo* pInfo = pAppMgr->__resultManager.FindItem(reqId);
105         SysTryReturnResult(NID_APP, pInfo != null, E_OBJ_NOT_FOUND, "The application request %d is not found.", reqId);
106
107         const _AppArg& arg = pInfo->arg;
108
109         _AppArg resArg;
110         result r = resArg.ConstructResult(arg, pResultMap);
111         if (IsFailed(r))
112         {
113                 SysPropagate(NID_APP, r);
114                 return r;
115         }
116
117         const int code = appControlResult;
118         int res = APPSVC_RES_NOT_OK;
119         switch (code)
120         {
121         case APP_CTRL_RESULT_SUCCEEDED:
122                 res = APPSVC_RES_OK;
123                 break;
124         case APP_CTRL_RESULT_FAILED:
125                 res = APPSVC_OSP_RES_FAIL;
126                 break;
127         case APP_CTRL_RESULT_CANCELED:
128                 res = APPSVC_RES_NOT_OK;
129                 break;
130         case APP_CTRL_RESULT_TERMINATED:
131                 res = APPSVC_OSP_RES_TERMINATE;
132                 break;
133         case APP_CTRL_RESULT_ABORTED:
134                 res = APPSVC_RES_CANCEL;
135                 break;
136         default:
137                 res = APPSVC_RES_NOT_OK;
138                 break;
139         }
140
141         const bool isService = _AppInfo::GetAppType() & _APP_TYPE_SERVICE_APP;
142
143         //resArg.Print();
144         r = _Aul::SendResult(resArg.GetBundle(), static_cast<appsvc_result_val>(res), _AppInfo::IsSubMode(), isService);
145         SysLog(NID_APP, "Sent AppControl event for %d.", reqId);
146
147         // erase _AppArg after sending the result back to the caller
148         pAppMgr->__resultManager.RemoveItem(reqId);
149
150         return r;
151 }
152
153 AppId
154 _AppControlProviderManagerImpl::GetClientAppId(RequestId reqId) const
155 {
156         SysTryReturn(NID_APP, reqId != -1, L"", E_OBJ_NOT_FOUND, "[E_OBJ_NOT_FOUND] The application control request %d is not found.", reqId);
157
158         _ResultInfo* pInfo = _AppControlManager::GetInstance()->__resultManager.FindItem(reqId);
159         SysTryReturn(NID_APP, pInfo != null, L"", E_OBJ_NOT_FOUND, "[E_OB_NOT_FOUND] The application control request %d is not found.", reqId);
160
161         const _AppArg& arg = pInfo->arg;
162
163         return arg.GetCallerAppId();
164 }
165
166 const _AppControlProviderManagerImpl*
167 _AppControlProviderManagerImpl::GetInstance(const AppControlProviderManager& ac)
168 {
169         return ac.__pAppControlProviderManagerImpl;
170 }
171
172 _AppControlProviderManagerImpl*
173 _AppControlProviderManagerImpl::GetInstance(AppControlProviderManager& ac)
174 {
175         return ac.__pAppControlProviderManagerImpl;
176 }
177
178 } } // Tizen::App
179