2 // Copyright (c) 2012 Samsung Electronics Co., Ltd.
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
8 // http://www.apache.org/licenses/LICENSE-2.0
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.
18 * @file FApp_AppControlImpl.h
19 * @brief This is the header file for the _AppControlImpl class.
22 #ifndef _FAPP_INTERNAL_APP_CONTROL_IMPL_H_
23 #define _FAPP_INTERNAL_APP_CONTROL_IMPL_H_
25 #include <FBaseObject.h>
26 #include <FAppTypes.h>
27 #include <FOspConfig.h>
28 #include <FAppAppControl.h>
29 #include <FBaseColArrayListT.h>
31 #include <FBaseRt_LibraryImpl.h>
33 #include "FApp_AppManagerImpl.h"
34 #include "FApp_IAppControlResponseEventListener.h"
36 typedef struct _bundle_t bundle;
39 namespace Tizen { namespace Base { class String; } }
40 namespace Tizen { namespace Base { namespace Collection { class IList; } } }
41 namespace Tizen { namespace Base { namespace Runtime { class IEventListener; } } }
43 namespace Tizen { namespace App
47 class IAppControlEventListener;
48 class IAppControlResponseListener;
49 class _IAppControlPluginProvider;
50 class _AppMessageImpl;
52 enum _AppControlProperty
54 _APPCONTROL_PROPERTY_NONE = 0x0,
55 _APPCONTROL_PROPERTY_PUBLIC = 0x01,
56 _APPCONTROL_PROPERTY_SUBMODE = 0x1000,
57 _APPCONTROL_PROPERTY_SERVICE_CALLEE = 0x2000,
60 class _OSP_LOCAL_ _AppControlImpl
61 : public Tizen::Base::Object
62 , public Tizen::App::_IAppControlResponseEventListener
63 , virtual public Tizen::Base::Runtime::IEventListener
67 * AppControl delegate constructor
69 static AppControl* CreateN(const Tizen::Base::String& path, const Tizen::Base::String& aId, const Tizen::Base::String& oId, int prop);
72 * Internal GetImpl() method.
74 static const _AppControlImpl* GetInstance(const AppControl& ac);
77 * Internal GetImpl() method.
79 static _AppControlImpl* GetInstance(AppControl& ac);
82 * Starts the resolved application control. @n
83 * Once the application starts, it goes to the background and the target
84 * application control is displayed.
86 * @return An error code
87 * @param[in] pDataList The data list to deliver to the resolved application control @n
88 * The maximum size of the list is 4096 bytes.
89 * @param[in] pListener The application control callback listener @n
90 * Some application controls need to get the callback result by implementing
91 * the IAppControlEventListener interface.
92 * @exception E_SUCCESS The method is successful.
93 * @exception E_MAX_EXCEEDED The size of @c pDataList has exceeded the maximum limit.
94 * @exception E_OUT_OF_MEMORY The memory is insufficient.
95 * @exception E_OBJ_NOT_FOUND The target application control resource is not found.
96 * @exception E_IN_PROGRESS The application control is in progress: @n
97 * - The application has already started an _AppControlImpl. @n
98 * - The target application has already started.
99 * @exception E_SYSTEM A system error has occurred.
100 * @remarks If the %IAppControlEventListener instance (@c pListener) needs to get the
101 * callback result for an application control, it should be valid till
102 * IAppControlEventListener::OnAppControlCompleted() is invoked.
103 * For example, a form object listener should not be deleted before the
104 * system invokes IAppControlEventListener::OnAppControlCompleted().
106 result Start(const Tizen::Base::Collection::IList* pDataList, IAppControlEventListener* pListener);
109 * Starts the found application control. @n
110 * Once the found application starts, the calling application goes to the background and the found
111 * application is displayed.
113 * @return An error code
114 * @param[in] pUriData A pointer to the URI data
115 * @param[in] pDataType A pointer to the MIME type (RFC 2046) data
116 * @param[in] pExtraData The Tizen::Base::String key and Tizen::Base::String value pair map to deliver to the resolved application @n
117 * The maximum size is 16 kilo bytes.
118 * @param[in] pListener The application control callback listener @n
119 * Some application need to get the result by implementing the IAppControlResponseListener interface.
120 * @exception E_SUCCESS The method is successful.
121 * @exception E_MAX_EXCEEDED The size of @c pExtraData has exceeded the maximum limit.
122 * @exception E_OBJ_NOT_FOUND The target application control is not found.
123 * @exception E_IN_PROGRESS The application control is in progress: @n
124 * - The application has already started an %AppControl.
125 * @exception E_SYSTEM The method cannot proceed due to a severe system error.
126 * @remarks If the calling application needs to get some result for application control,
127 * it must be valid till %IAppControlResponseListener::OnAppControlCompleteResponseReceived() is invoked.
128 * For example, a form object listener must not be deleted before the
129 * system invokes %IAppControlResponseListener::OnAppControlCompleteResponseReceived().
130 * @see IAppControlResponseListener, AppManager::FindAppControlN(), AppManager::FindAppControlsN()
132 result Start(const Tizen::Base::String* pUriData, const Tizen::Base::String* pDataType, const Tizen::Base::Collection::IMap* pExtraData, IAppControlResponseListener* pListener);
135 * Gets the name of the application that provides the features represented by this %_AppControlImpl instance.
137 * @return The name of the application providing this %_AppControlImpl instance
139 Tizen::Base::String GetAppName(void);
142 * Gets the associated application ID. @n
144 * @return The application control ID
146 Tizen::Base::String GetAppId(void) const;
149 * Gets the associated application control provider ID. @n
151 * @return The application control provider ID
153 const Tizen::Base::String& GetAppControlProviderId(void) const;
156 * Gets the associated operation ID. @n
158 * @return The operation ID
160 const Tizen::Base::String& GetOperationId(void) const;
163 * Returns the associated application control categories.
165 * @return A pointer to the list of application control categories, @n
166 * else @c null if an error occurs
167 * @exception E_SUCCESS The method is successful.
168 * @exception E_OUT_OF_MEMORY The memory is insufficient.
169 * @exception E_SYSTEM A system error has occurred.
170 * @remarks The specific error code can be accessed using the GetLastResult() method.
172 Tizen::Base::Collection::IList* GetCategoryListN(void) const;
175 * Stops the activated application control. @n
177 * @return An error code
178 * @exception E_SUCCESS The method is successful.
179 * @exception E_SYSTEM A system error has occurred.
180 * @exception E_INVALID_OPERATION The application control is not permitted to call this method.
181 * @remarks This method is asynchronous.
186 * Finds the matching application control with given operation ID, URI pattern, data type and category and
187 * starts the found one. @n
188 * 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.
189 * When the found application control is started, the URI pattern, MIME type, and extra data is delivered via IAppControlProviderEventListener.
191 * @return An error code
192 * @param[in] pOperationId The operation ID
193 * @param[in] pUriPattern A URI pattern which is used for application control resolution and to be delivered as the argument
194 * @param[in] pDataType The MIME type (RFC 2046) or file extension @n
195 * The '.' prefix must be used when specifying the file extension.
196 * @param[in] pCategory The application control category
197 * @param[in] pExtraData The extra collection data to be delivered to the resolved application @n
198 * The maximum size is 16 kilo bytes.
199 * @param[in] pListener A listener that gets notified
200 * @exception E_SUCCESS The method is successful.
201 * @exception E_MAX_EXCEEDED The size of @c pDataList has exceeded the maximum limit.
202 * @exception E_OBJ_NOT_FOUND The application control is not found.
203 * @exception E_SYSTEM The method cannot proceed due to a severe system error.
204 * @see IAppControlResponseListener, IAppControlProviderEventListener
206 _OSP_EXPORT_ 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);
209 * Stops the event listener for receiving application control result.
211 * @param[in] pListener The listener to stop receiving the application control result
213 static void StopAppControlResponseListener(IAppControlResponseListener* pListener);
215 static result StartImplicit(bundle* pBundle, const Tizen::Base::Collection::IList* pDataList, IAppControlEventListener* pListener);
217 static result StartImplicit(bundle* pBundle, const Tizen::Base::Collection::IMap* pData, IAppControlResponseListener* pListener);
219 static result StartImplicit(const _AppMessageImpl& msg, Tizen::Base::Runtime::IEventListener* pListener, bool isLegacy);
221 bool IsPublic(void) const
223 return (_property & _APPCONTROL_PROPERTY_PUBLIC);
226 void SetProperty(int prop)
231 virtual void OnAppControlResponseEventReceivedN(const Tizen::Base::Runtime::IEventArg* arg);
233 _AppControlImpl(const AppControl& value);
236 * This is the default constructor for this class.
238 _AppControlImpl(void);
240 _AppControlImpl(const _AppControlImpl& rhs);
242 _AppControlImpl& operator =(const _AppControlImpl& rhs);
245 * This is the destructor for this class.
247 virtual ~_AppControlImpl(void);
249 static _IAppControlPluginProvider* GetAppControlPluginProvider(const Tizen::Base::String& path);
251 static result InvokeStartAppControl(_IAppControlPluginProvider* pProvider, 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);
253 static result InvokeStartAppControl(_IAppControlPluginProvider* pProvider, int req, const Tizen::Base::String& appId, const Tizen::Base::String& oId, const Tizen::Base::Collection::IList* pList);
255 static result InvokeStartAppControl(_IAppControlPluginProvider* pProvider, int req, const Tizen::Base::String& appId, const _AppMessageImpl& message);
258 static const unsigned long _LIBRARY_OPTION = Tizen::Base::Runtime::_LIBRARY_LOAD_OPTION_LAZY | Tizen::Base::Runtime::_LIBRARY_LOAD_OPTION_NODELETE;
260 const AppControl& _appControl;
262 Tizen::Base::String _path;
263 Tizen::Base::String _appId;
264 Tizen::Base::String _opId;
265 Tizen::Base::String _appName;
271 Tizen::Base::Collection::ArrayListT<int> __appControlResponseEventList;
273 friend class AppControl;
274 }; // _AppControlImpl
278 #endif // _FAPP_INTERNAL_APP_CONTROL_IMPL_H_