7c94aead329507462cef6e5ae1ecd65e1faf3dc2
[apps/home/clock.git] / alarm / src / alarm_lib.c
1 /*
2   * Copyright 2012  Samsung Electronics Co., Ltd
3   * 
4   * Licensed under the Flora License, Version 1.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.tizenopensource.org/license
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 #include "alarm_app.h"
18 #include "alarm_lib.h"
19 #include "alarm_fwk_util.h"
20 #include "alarm_fwk_vconf.h"
21 #include "alarm_view_main.h"
22 #include "alarm_view_edit.h"
23 #include "alarm_view_del.h"
24 #include "alarm_view_snooze.h"
25 #include "alarm_subview_type.h"
26 /**********************************************************************
27 ******************Global val , static global val*************************************
28 ***********************************************************************/
29 static struct appdata *g_ad;
30
31 /**********************************************************************
32 ******************Global function ref*************************************
33 ***********************************************************************/
34
35 /**
36 * send
37 * This function is  used to add alarm view
38 * It is used by clock app
39 * @param           parent[in]         pointer to parent Evas object
40 * @param           cb[in]             cb to set controllbar visible or invisible
41 * @return          when success, return Evas Object  or NULL if error
42 * @exception
43 */
44 EAPI Evas_Object *alarm_view_add(Evas_Object *parent, Evas_Object *win,
45                                  alarm_set_controlbar_visible cb)
46 {
47         int nErr = SUCCESS;
48         Evas_Object *ret = NULL;
49         CLK_FUN_BEG();
50         if (g_ad) {
51                 ret = g_ad->layout;
52                 goto End;
53         }
54         //create ad
55         struct appdata *ad = CALLOC(1, struct appdata);
56         CLK_RETVM_IF(NULL_CHECK(ad), NULL, "malloc error");
57         g_ad = ad;
58         // init internationalization
59         bindtextdomain(PACKAGE, LOCALEDIR);
60         //
61         mm_session_init(MM_SESSION_TYPE_ALARM);
62         //
63         nErr = alarmmgr_init(PKGNAME);
64         CLK_RETVM_IF(nErr != SUCCESS, NULL, "alarmmgr_init error");
65         // create window
66         ad->win_main = win;
67         ad->evas = evas_object_evas_get(ad->win_main);
68         ad->parent = parent;
69         //set cb
70         if (cb) {
71                 ad->alarmapp_controlbar_cb = cb;
72         }
73         nErr = alarmdb_init(NULL);
74         CLK_RETVM_IF(nErr != SUCCESS, NULL, "alarmdb_init error");
75         //alarmapp_check_missed_alarm();
76         //beg morning call
77 #ifdef ALARMAPP_FEATURE_MORNINGCALL
78         if (!is_alarmapp_morningcall()) {
79                 alarmapp_create_morningcall();
80         }
81 #endif
82         //end morning call
83         //
84         ad->alarm = alarmdb_create_data();
85         alarm_genlist_name_array_init(MAX_ALARM_NUMBER);
86         //create genlist
87         alarm_view_genlist.create(ad);
88         //
89         alarm_noti_init(ad);
90         //get current time format
91         vconf_get_int(VCONFKEY_REGIONFORMAT_TIME1224, &ad->time_format);
92         //
93         int ecore_ret = ecore_file_init();
94         nErr = IS_EQUAL(0, ecore_ret) ? FAILED : SUCCESS;
95         CLK_RETVM_IF(nErr != SUCCESS, NULL, "ecore_file_init error");
96         //
97         ad->is_alarm = EINA_TRUE;
98         //alarm_key_event_init(ad);
99         ret = ad->layout;
100  End:
101         if (nErr != SUCCESS) {
102                 alarm_view_free(NULL);
103         }
104         CLK_FUN_END();
105         return ret;
106 }
107
108 //
109 EAPI Evas_Object *alarm_view_add_with_bundle(Evas_Object *parent,
110                                              Evas_Object *win,
111                                              alarm_set_controlbar_visible cb,
112                                              char *bundle_value)
113 {
114         int nErr = SUCCESS;
115         Evas_Object *ret = NULL;
116         struct appdata *ad = NULL;
117         CLK_FUN_BEG();
118         ret = alarm_view_add(parent, win, cb);
119         CLK_RETVM_IF(nErr != SUCCESS, NULL, "alarm_view_add error");
120         CLK_RETVM_IF(!bundle_value, ret, "bundle null, just create genlist");
121         //bundle
122         ad = g_ad;
123         if (IS_STR_EQUAL(STRING_ALARM_CREATE, bundle_value)) {
124                 alarm_view_genlist_btn_cb_add(ad, NULL, NULL);
125         }
126  End:
127         CLK_FUN_END();
128         return ret;
129 }
130
131 /**
132 * send
133 * This function is  used to free alarm view
134 * It is used by clock app
135 * @param           data[in]         pointer to Evas object
136 * @return          int              when success, return SUCCESS  or FAILED if error
137 * @exception
138 */
139 EAPI int alarm_view_free(Evas_Object *obj)
140 {
141         struct appdata *ad = g_ad;
142         retvm_if(NULL_CHECK(ad), SUCCESS, "ad null");
143         //not in genlist, don't elem_exit
144         if (!IS_EQUAL(ad->page, PAGE_ALARM_GENLIST)) {
145                 switch (ad->page) {
146                 case PAGE_ALARM_SETTING:
147                         alarm_view_setting_btn_cb_can(ad, NULL, NULL);
148                         break;
149                 case PAGE_ALARM_DELETE:
150                         alarm_view_delete_btn_cb_can(ad, NULL, NULL);
151                         break;
152                 case PAGE_ALARM_SNOOZE:
153                         alarm_view_snooze_btn_cb_can(ad, NULL, NULL);
154                         break;
155                 default:
156                         break;
157                 }
158                 return FAILED;
159         }
160         //just in genlist view, end key will elm_exit
161         EVAS_OBJECT_DELIF(ad->layout);
162         //EVAS_OBJECT_DELIF(ad->layout_main);
163         FREEIF(ad->view_genlist);
164         FREEIF(ad->view_delete);
165         FREEIF(ad->view_setting);
166         FREEIF(ad->view_snooze);
167         alarmdb_free_data(ad->alarm);
168         FREEIF(ad);
169         alarmdb_fini();
170         alarmmgr_fini();
171         alarm_genlist_name_array_fini();
172         alarm_noti_fini();
173         mm_session_finish();
174         //alarmapp_inotify_mgr_fini();
175         //ecore_file_monitor_shutdown();
176         ecore_file_shutdown();
177         return SUCCESS;
178 }
179
180 /**
181 * send
182 * This function is  used to reload alarm view
183 * @param           void
184 * @return          void
185 * @exception
186 */
187 EAPI void alarm_view_reload()
188 {
189         retm_if(!g_ad, "a_ad is null");
190         struct appdata *ad = g_ad;
191
192         ad->is_alarm = EINA_TRUE;
193         alarm_noti_init(ad);
194         switch (ad->page) {
195         case PAGE_ALARM_GENLIST:
196                 alarm_view_genlist.update(ad);
197                 break;
198         case PAGE_ALARM_DELETE:
199                 alarm_view_delete.update(ad);
200                 break;
201         case PAGE_ALARM_SETTING:
202                 alarm_view_setting.update(ad);
203                 break;
204         default:
205                 break;
206         }
207 }
208
209 /**
210 * send
211 * This function is  used to unload alarm view
212 * @param           void
213 * @return          void
214 * @exception
215 */
216 EAPI void alarm_view_unload()
217 {
218         retm_if(!g_ad, "a_ad is null");
219         struct appdata *ad = g_ad;
220
221     ad->is_alarm = EINA_FALSE;
222         if(NULL != ad->view_delete){
223                 evas_object_hide(ad->view_delete->eo_notify);
224                 }
225         alarm_noti_fini();
226 }
227
228 EAPI void alarm_app_pause()
229 {
230         ret_if(!g_ad);
231         struct appdata *ad = g_ad;
232
233         if (IS_EQUAL(ad->page, PAGE_ALARM_SETTING)) {
234                 alarm_setting_stop_sound(ad);
235                 alarm_type_stop_sound(ad);
236         }
237 }