Merge branch 'devel/master' into sandbox/dkdk/tizen
[platform/core/uifw/dali-adaptor.git] / dali / public-api / watch / watch-application.h
1 #ifndef DALI_WATCH_APPLICATION_H
2 #define DALI_WATCH_APPLICATION_H
3
4 /*
5  * Copyright (c) 2020 Samsung Electronics Co., Ltd.
6  *
7  * Licensed under the Apache License, Version 2.0 (the "License");
8  * you may not use this file except in compliance with the License.
9  * You may obtain a copy of the License at
10  *
11  * http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18  *
19  */
20
21 // EXTERNAL INCLUDES
22 #include <dali/public-api/object/base-handle.h>
23 #include <dali/public-api/signals/callback.h>
24 #include <string>
25
26 // INTERNAL INCLUDES
27 #include <dali/public-api/adaptor-framework/application.h>
28 #include <dali/public-api/dali-adaptor-common.h>
29 #include <dali/public-api/watch/watch-time.h>
30
31 namespace Dali
32 {
33 /**
34  * @addtogroup dali_adaptor_framework
35  * @{
36  */
37 namespace Internal DALI_INTERNAL
38 {
39 namespace Adaptor
40 {
41 class WatchApplication;
42 }
43 } // namespace DALI_INTERNAL
44
45 /**
46  * @brief A WatchApplication class object should be created by every watch application
47  * that wishes to use Dali.
48  *
49  * It provides a means for initialising the resources required by the Dali::Core.
50  * Like Application class, the WatchApplication class manages Tizen watch application life cycle.
51  *
52  * The WatchApplication class emits additional signals which are availalble only in the watch application
53  * (TimeTick, AmbientTick, AmbientChanged)
54  *
55  * This feature is supported in wearable applications only.
56  *
57  * WatchApplication should follow the example below:
58  *
59  * @code
60  * class ExampleController: public ConnectionTracker
61  * {
62  * public:
63  *   ExampleController( WatchApplication& application )
64  *   : mApplication( application )
65  *   {
66  *     mApplication.InitSignal().Connect( this, &ExampleController::Create );
67  *   }
68  *
69  *   void Create( Application& application )
70  *   {
71  *     // Create Dali components...
72  *   }
73  *  ...
74  * private:
75  *   WatchApplication&  mApplication;
76  * };
77  *
78  * int DALI_ADAPTOR_API main (int argc, char **argv)
79  * {
80  *   WatchApplication app = WatchApplication::New(&argc, &argv);
81  *   ExampleController example( app );
82  *   app.MainLoop();
83  * }
84  * @endcode
85  *
86  * If required, you can also connect class member functions to a signal:
87  *
88  * @code
89  * MyApplication app;
90  * app.ResumeSignal().Connect(&app, &MyApplication::Resume);
91  * @endcode
92  *
93  * When the above options are found, they are stripped from argv, and argc is updated appropriately.
94  * @SINCE_1_1.37
95  */
96
97 class DALI_ADAPTOR_API WatchApplication : public Application
98 {
99 public:
100   typedef Signal<void(Application&, const WatchTime&)> WatchTimeSignal; ///< Watch pointer signal callback type @SINCE_1_1.37
101   typedef Signal<void(Application&, bool)>             WatchBoolSignal; ///< Watch bool signal callback type @SINCE_1_1.37
102
103 public:
104   /**
105    * @brief This is the constructor for applications without an argument list.
106    * @SINCE_1_1.37
107    * @return A handle to the WatchApplication
108    */
109   static WatchApplication New();
110
111   /**
112    * @brief This is the constructor for applications.
113    *
114    * @SINCE_1_1.37
115    * @param[in,out]  argc        A pointer to the number of arguments
116    * @param[in,out]  argv        A pointer the the argument list
117    * @return A handle to the WatchApplication
118    */
119   static WatchApplication New(int* argc, char** argv[]);
120
121   /**
122    * @brief This is the constructor for applications with a name
123    *
124    * @SINCE_1_1.37
125    * @param[in,out]  argc        A pointer to the number of arguments
126    * @param[in,out]  argv        A pointer the the argument list
127    * @param[in]      stylesheet  The path to user defined theme file
128    * @return A handle to the WatchApplication
129    */
130   static WatchApplication New(int* argc, char** argv[], const std::string& stylesheet);
131
132   /**
133    * @brief Construct an empty handle
134    * @SINCE_1_1.37
135    */
136   WatchApplication();
137
138   /**
139    * @brief Copy Constructor
140    * @SINCE_1_1.37
141    * @param[in] implementation The WatchApplication implementation
142    */
143   WatchApplication(const WatchApplication& implementation);
144
145   /**
146    * @brief Assignment operator
147    * @SINCE_1_1.37
148    * @param[in] application Handle to an object
149    * @return A reference to this
150    */
151   WatchApplication& operator=(const WatchApplication& application);
152
153   /**
154    * @brief Move constructor.
155    *
156    * @SINCE_1_9.24
157    * @param[in] rhs A reference to the moved handle
158    */
159   WatchApplication(WatchApplication&& rhs);
160
161   /**
162    * @brief Move assignment operator.
163    *
164    * @SINCE_1_9.24
165    * @param[in] rhs A reference to the moved handle
166    * @return A reference to this handle
167    */
168   WatchApplication& operator=(WatchApplication&& rhs);
169
170   /**
171    * @brief Destructor
172    *
173    * This is non-virtual since derived Handle types must not contain data or virtual methods.
174    * @SINCE_1_1.37
175    */
176   ~WatchApplication();
177
178 public:
179   /**
180    * @brief This signal is emitted at every second
181    * A callback of the following type may be connected:
182    * @code
183    *   void YourCallbackName(Application& application, const WatchTime& time);
184    * @endcode
185    * time(watch time handle) will not be available after returning this callback. It will be freed by the framework.
186    * @SINCE_1_1.37
187    * @return The signal to connect to
188    */
189   WatchTimeSignal& TimeTickSignal();
190
191   /**
192    * @brief This signal is emitted at each minute in ambient mode
193    * A callback of the following type may be connected:
194    * @code
195    *   void YourCallbackName(Application& application, const WatchTime& time);
196    * @endcode
197    * time(watch time handle) will not be available after returning this callback. It will be freed by the framework.
198    * @SINCE_1_1.37
199    * @remarks http://tizen.org/privilege/alarm.set privilege is needed to receive ambient ticks at each minute.
200    * The AmbientTickSignal() will be ignored if your app doesn't have the privilege
201    * @return The signal to connect to
202    */
203   WatchTimeSignal& AmbientTickSignal();
204
205   /**
206    * @brief This signal is emitted when the device enters or exits ambient mode
207    * A callback of the following type may be connected:
208    * @code
209    *   void YourCallbackName(Application& application, bool ambient);
210    * @endcode
211    * ambient_mode If true the device enters the ambient mode, otherwise false
212    * @SINCE_1_1.37
213    * @return The signal to connect to
214    */
215   WatchBoolSignal& AmbientChangedSignal();
216
217 public: // Not intended for application developers
218   /// @cond internal
219   /**
220    * @brief Internal constructor
221    * @SINCE_1_1.37
222    */
223   explicit DALI_INTERNAL WatchApplication(Internal::Adaptor::WatchApplication* implementation);
224   /// @endcond
225 };
226
227 /**
228  * @}
229  */
230 } // namespace Dali
231
232 #endif // DALI_WATCH_APPLICATION_H