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