fix code cleanup with file property change
[platform/framework/native/appfw.git] / src / app / inc / FApp_AppControlImpl.h
1 //
2 // Open Service Platform
3 // Copyright (c) 2012 Samsung Electronics Co., Ltd.
4 //
5 // Licensed under the Apache License, Version 2.0 (the License);
6 // you may not use this file except in compliance with the License.
7 // You may obtain a copy of the License at
8 //
9 //     http://www.apache.org/licenses/LICENSE-2.0
10 //
11 // Unless required by applicable law or agreed to in writing, software
12 // distributed under the License is distributed on an "AS IS" BASIS,
13 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 // See the License for the specific language governing permissions and
15 // limitations under the License.
16 //
17
18 /**
19  * @file        FApp_AppControlImpl.h
20  * @brief       This is the header file for the _AppControlImpl class.
21  */
22
23 #ifndef _FAPP_INTERNAL_APP_CONTROL_IMPL_H_
24 #define _FAPP_INTERNAL_APP_CONTROL_IMPL_H_
25
26 #include <app_service.h>
27 #include <bundle.h>
28
29 #include <FBaseObject.h>
30 #include <FAppTypes.h>
31 #include <FOspConfig.h>
32 #include <FAppAppControl.h>
33
34 #include "FApp_AppManagerImpl.h"
35
36 namespace Tizen { namespace Base { class String; } }
37 namespace Tizen { namespace Base { namespace Collection { class IList; } } }
38
39 namespace Tizen { namespace App
40 {
41
42 class AppControl;
43 class IAppControlEventListener;
44 class IAppControlResponseListener;
45 class _AppArg;
46
47 enum _AppControlProperty
48 {
49         _APPCONTROL_PROPERTY_NONE = 0x0,
50         _APPCONTROL_PROPERTY_PUBLIC = 0x01,
51         _APPCONTROL_PROPERTY_PERSISTENT_DLL = 0x08,
52         _APPCONTROL_PROPERTY_SLP = 0x100,
53         _APPCONTROL_PROPERTY_OSP = 0x200,
54         _APPCONTROL_PROPERTY_ALIAS = 0x400,
55         _APPCONTROL_PROPERTY_APPID_CHANGE = 0x800,
56 };
57
58 class _OSP_EXPORT_ _AppControlImpl
59         : public Tizen::Base::Object
60 {
61 public:
62         /**
63          * AppControl delegate constructor
64          */
65         static AppControl* CreateN(const Tizen::Base::String& path, const Tizen::Base::String& aId, const Tizen::Base::String& oId, const Tizen::Base::String& name, int prop);
66
67         /**
68          * AppControl delegate constructor
69          */
70         static AppControl* CreateN(const AppId& appId, const Tizen::Base::String& operationId, bool changeAppId);
71
72         /**
73          * AppControl delegate constructor
74          */
75         static AppControl* CreateN(const AppControl& ac);
76
77         /**
78          * Internal GetImpl() method.
79          */
80         static const _AppControlImpl* GetInstance(const AppControl& ac);
81
82         /**
83          * Internal GetImpl() method.
84          */
85         static _AppControlImpl* GetInstance(AppControl& ac);
86
87         /**
88         * Starts the resolved application control. @n
89         * Once the application starts, it goes to the background and the target
90         * application control is displayed.
91         *
92         * @return               An error code
93         * @param[in]    pDataList       The data list to deliver to the resolved application control @n
94         *                                                       The maximum size of the list is 4096 bytes.
95         * @param[in]    pListener       The application control callback listener @n
96         *                                                       Some application controls need to get the callback result by implementing
97         *                                                       the IAppControlEventListener interface.
98         * @exception    E_SUCCESS                               The method is successful.
99         * @exception    E_MAX_EXCEEDED                  The size of @c pDataList has exceeded the maximum limit.
100         * @exception    E_OUT_OF_MEMORY                 The memory is insufficient.
101         * @exception    E_OBJ_NOT_FOUND                 The target application control resource is not found.
102         * @exception    E_IN_PROGRESS                   The application control is in progress: @n
103         *                                       - The application has already started an _AppControlImpl. @n
104         *                                       - The target application has already started.
105         * @exception    E_SYSTEM                                A system error has occurred.
106         * @remarks              If the %IAppControlEventListener instance (@c pListener) needs to get the
107         *               callback result for an application control, it should be valid till
108         *               IAppControlEventListener::OnAppControlCompleted() is invoked.
109         *               For example, a form object listener should not be deleted before the
110         *               system invokes IAppControlEventListener::OnAppControlCompleted().
111         */
112         result Start(const Tizen::Base::Collection::IList* pDataList, IAppControlEventListener* pListener);
113
114         /**
115          * Starts the found application control. @n
116          * Once the found application starts, the calling application goes to the background and the found
117          * application is displayed.
118          *
119          * @return      An error code
120          * @param[in]   pUriData    A pointer to the URI data
121          * @param[in]   pDataType   A pointer to the MIME type (RFC 2046) data
122          * @param[in]   pExtraData  The Tizen::Base::String key and Tizen::Base::String value pair map to deliver to the resolved application @n
123          *                          The maximum size is 16 kilo bytes.
124          * @param[in]   pListener   The application control callback listener @n
125          *                          Some application need to get the result by implementing the IAppControlResponseListener interface.
126          * @exception   E_SUCCESS               The method is successful.
127          * @exception   E_MAX_EXCEEDED          The size of @c pExtraData has exceeded the maximum limit.
128          * @exception   E_OBJ_NOT_FOUND         The target application control is not found.
129          * @exception   E_IN_PROGRESS           The application control is in progress: @n
130          *                                       - The application has already started an %AppControl.
131          * @exception   E_SYSTEM                The method cannot proceed due to a severe system error.
132          * @remarks     If the calling application needs to get some result for application control,
133          *              it must be valid till %IAppControlResponseListener::OnAppControlCompleteResponseReceived() is invoked.
134          *              For example, a form object listener must not be deleted before the
135          *              system invokes %IAppControlResponseListener::OnAppControlCompleteResponseReceived().
136          * @see IAppControlResponseListener, AppManager::FindAppControlN(), AppManager::FindAppControlsN()
137          */
138         result Start(const Tizen::Base::String* pUriData, const Tizen::Base::String* pDataType, const Tizen::Base::Collection::IMap* pExtraData, IAppControlResponseListener* pListener);
139
140         /**
141          * Gets the name of the application that provides the features represented by this %_AppControlImpl instance.
142          *
143          * @return              The name of the application providing this %_AppControlImpl instance
144          */
145         Tizen::Base::String GetAppName(void);
146
147         /**
148          * Gets the associated application ID. @n
149          *
150          * @return              The application control ID
151          */
152         Tizen::Base::String GetAppId(void) const;
153
154         /**
155          * Gets the associated application control provider ID. @n
156          *
157          * @return              The application control provider ID
158          */
159         const Tizen::Base::String& GetAppControlProviderId(void) const;
160
161         /**
162          * Gets the associated operation ID. @n
163          *
164          * @return              The operation ID
165          */
166         const Tizen::Base::String& GetOperationId(void) const;
167
168         /**
169          * Returns the associated application control categories.
170          *
171          * @return      A pointer to the list of application control categories, @n
172               *               else @c null if an error occurs
173          * @exception   E_SUCCESS       The method is successful.
174          * @exception   E_OUT_OF_MEMORY         The memory is insufficient.
175          * @exception   E_SYSTEM                        A system error has occurred.
176          * @remarks     The specific error code can be accessed using the GetLastResult() method.
177          */
178         Tizen::Base::Collection::IList* GetCategoryListN(void) const;
179
180         /**
181          * Stops the activated application control. @n
182          *
183          * @return          An error code
184          * @exception E_SUCCESS                        The method is successful.
185          * @exception E_SYSTEM                         A system error has occurred.
186          * @exception E_INVALID_OPERATION        The application control is not permitted to call this method.
187          * @remarks     This method is asynchronous.
188          */
189         result Stop(void);
190
191         /**
192          * Finds the matching application control with given operation ID, URI pattern, data type and category and
193          * starts the found one. @n
194          * If there are more than one application controls found, then the selection is shown for user and the one that the user selects is started.
195          * When the found application control is started, the URI pattern, MIME type, and extra data is delivered via IAppControlProviderEventListener.
196          *
197          * @return  An error code
198          * @param[in]   pOperationId   The operation ID
199          * @param[in]   pUriPattern           A URI pattern which is used for application control resolution and to be delivered as the argument
200          * @param[in]   pDataType   The MIME type (RFC 2046) or file extension @n
201          *                          The '.' prefix must be used when specifying the file extension.
202          * @param[in]   pCategory      The application control category
203          * @param[in]   pExtraData     The extra collection data to be delivered to the resolved application @n
204          *                                                   The maximum size is 16 kilo bytes.
205          * @param[in]   pListener   A listener that gets notified
206          * @exception   E_SUCCESS           The method is successful.
207          * @exception   E_MAX_EXCEEDED      The size of @c pDataList has exceeded the maximum limit.
208          * @exception   E_OBJ_NOT_FOUND     The application control is not found.
209          * @exception  E_SYSTEM                              The method cannot proceed due to a severe system error.
210          * @see IAppControlResponseListener, IAppControlProviderEventListener
211          */
212         static result FindAndStart(const Tizen::Base::String& operationId, const Tizen::Base::String* pUriPattern, const Tizen::Base::String* pDataType, const Tizen::Base::String* pCategory, const Tizen::Base::Collection::IMap* pExtraData, IAppControlResponseListener* pListener);
213
214         /**
215          * Stops the event listener for receiving application control result.
216          *
217          * @param[in]  pListener      The listener to stop receiving the application control result
218          */
219         static void StopAppControlResponseListener(IAppControlResponseListener* pListener);
220
221         static result StartImplicit(bundle* pBundle, const Tizen::Base::Collection::IList* pDataList, IAppControlEventListener* pListener);
222
223         static result StartImplicit(bundle* pBundle, const Tizen::Base::Collection::IMap* pData, IAppControlResponseListener* pListener);
224
225         bool IsPublic(void) const
226         {
227                 return (_property & _APPCONTROL_PROPERTY_PUBLIC);
228         }
229
230         void SetProperty(int prop)
231         {
232                 _property |= prop;
233         }
234
235 private:
236         _AppControlImpl(const AppControl& value);
237
238         /**
239          * This is the default constructor for this class.
240          */
241         _AppControlImpl(void);
242
243         _AppControlImpl(const _AppControlImpl& rhs);
244
245         _AppControlImpl& operator =(const _AppControlImpl& rhs);
246
247         /**
248          * This is the destructor for this class.
249          */
250         virtual ~_AppControlImpl(void);
251
252         result StartOsp(const Tizen::Base::Collection::IList* pDataList, IAppControlEventListener* pListener);
253
254         result StartOsp(const Tizen::Base::String* pUriData, const Tizen::Base::String* pMimeType, const Tizen::Base::Collection::IMap* pExtraData, IAppControlResponseListener* pListener);
255
256         result StartNative(const Tizen::Base::Collection::IList* pDataList, IAppControlEventListener* pListener);
257
258         result StartNative(const Tizen::Base::String* pUriData, const Tizen::Base::String* pMimeType, const Tizen::Base::Collection::IMap* pExtraData, IAppControlResponseListener* pListener);
259
260         static result InvokeStartAppControl(Tizen::Base::Runtime::_LibraryImpl& lib, int req, const Tizen::Base::String& appId, const Tizen::Base::String& oId, const Tizen::Base::String* pUri, const Tizen::Base::String* pMime, const Tizen::Base::Collection::IMap* pMap);
261
262         static result InvokeStartAppControl(Tizen::Base::Runtime::_LibraryImpl& lib, int req, const Tizen::Base::String& appId, const Tizen::Base::String& oId, const Tizen::Base::Collection::IList* pList);
263
264         static result AppControlCbLegacy(void* data, _AppArg* pArg, _AppArg* pResArg, service_result_e res, int prop);
265
266         static result AppControlCb(void* data, _AppArg* pArg, _AppArg* pResArg, service_result_e res, int prop);
267
268 protected:
269         const AppControl& _appControl;
270
271         Tizen::Base::String _path;
272         Tizen::Base::String _provider;
273         Tizen::Base::String _opId;
274         Tizen::Base::String _appName;
275         int     _reqId;
276         int     _property;
277         int _processId;
278
279         friend class AppControl;
280         friend class _AppArg;
281 }; // _AppControlImpl
282
283 } } // Tizen::App
284
285 #endif // _FAPP_INTERNAL_APP_CONTROL_IMPL_H_