2 * Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved
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 #include "events_ctrl.h"
19 #include "events_view.h"
20 #include "main_view.h"
22 #include "time_format.h"
23 #include "util_time.h"
29 static Ecore_Event_Handler *events_handler;
30 static Evas_Object *main_view;
32 static Evas_Object *_lockscreen_events_view_ctrl_genlist_noti_content_get(void *data, Evas_Object *obj, const char *part);
33 static char *_lockscreen_events_view_ctrl_genlist_noti_text_get(void *data, Evas_Object *obj, const char *part);
34 static Evas_Object *_lockscreen_events_view_ctrl_genlist_widget_content_get(void *data, Evas_Object *obj, const char *part);
36 static Elm_Genlist_Item_Class noti_itc = {
37 .item_style = NOTI_ITEM_STYLE,
38 .func.content_get = _lockscreen_events_view_ctrl_genlist_noti_content_get,
39 .func.text_get = _lockscreen_events_view_ctrl_genlist_noti_text_get,
42 static Elm_Genlist_Item_Class widget_itc = {
43 .item_style = WIDGET_ITEM_STYLE,
44 .func.content_get = _lockscreen_events_view_ctrl_genlist_widget_content_get,
47 static Evas_Object *_lockscreen_events_view_ctrl_genlist_noti_content_get(void *data, Evas_Object *obj, const char *part)
49 Evas_Object *ret = NULL;
50 lockscreen_event_t *event = data;
52 if (!strcmp(part, NOTI_ITEM_ICON)) {
53 ret = elm_icon_add(obj);
54 elm_image_file_set(ret, lockscreen_event_icon_get(event), NULL);
56 else if (!strcmp(part, NOTI_ITEM_ICON_SUB)) {
57 ret = elm_icon_add(obj);
58 elm_image_file_set(ret, lockscreen_event_sub_icon_get(event), NULL);
63 static char *_lockscreen_events_view_ctrl_genlist_noti_text_time_get(time_t time)
65 const char *locale = lockscreen_time_format_locale_get();
66 const char *timezone = lockscreen_time_format_timezone_get();
67 bool use24hformat = lockscreen_time_format_use_24h();
68 char *str_time, *str_meridiem;
69 char time_buf[PATH_MAX] = {0,};
71 if (!util_time_formatted_time_get(time, locale, timezone, use24hformat, &str_time, &str_meridiem)) {
72 ERR("util_time_formatted_time_get failed");
77 snprintf(time_buf, sizeof(time_buf), "%s", str_time);
79 snprintf(time_buf, sizeof(time_buf), "%s %s", str_time, str_meridiem);
84 return strdup(time_buf);
87 static char *_lockscreen_events_view_ctrl_genlist_noti_text_get(void *data, Evas_Object *obj, const char *part)
89 lockscreen_event_t *event = data;
90 const char *val = NULL;
92 if (!strcmp(part, NOTI_ITEM_TEXT)) {
93 val = lockscreen_event_title_get(event);
95 else if (!strcmp(part, NOTI_ITEM_TEXT_SUB)) {
96 val = lockscreen_event_content_get(event);
98 else if (!strcmp(part, NOTI_ITEM_TEXT_TIME)) {
99 val = _lockscreen_events_view_ctrl_genlist_noti_text_time_get(lockscreen_event_time_get(event));
102 return val ? strdup(val) : NULL;
105 static Evas_Object *_lockscreen_events_view_ctrl_genlist_widget_content_get(void *data, Evas_Object *obj, const char *part)
107 lockscreen_event_t *event = data;
109 if (!strcmp(part, WIDGET_ITEM_CONTENT)) {
110 return lockscreen_event_minicontroller_create(event, obj);
115 static void _lockscreen_events_view_close_all_button_clicked(void *data, Evas_Object *obj, void *event_info)
117 lockscreen_events_remove_all();
120 static void _lockscreen_events_ctrl_view_show()
122 Evas_Object *events_view = lockscreen_main_view_part_content_get(main_view, PART_EVENTS);
124 events_view = lockscreen_events_view_create(main_view);
125 evas_object_smart_callback_add(events_view, SIGNAL_CLOSE_BUTTON_CLICKED, _lockscreen_events_view_close_all_button_clicked, NULL);
126 lockscreen_main_view_part_content_set(main_view, PART_EVENTS, events_view);
130 static void _lockscreen_events_ctrl_view_hide()
132 Evas_Object *events_view = lockscreen_main_view_part_content_unset(main_view, PART_EVENTS);
134 evas_object_del(events_view);
138 static int _lockscreen_events_ctrl_sort(const void *data1, const void *data2)
140 const lockscreen_event_t *event1 = data1;
141 const lockscreen_event_t *event2 = data2;
143 lockscreen_event_type_e type1 = lockscreen_event_type_get(event1);
144 lockscreen_event_type_e type2 = lockscreen_event_type_get(event2);
147 return type1 > type2 ? -1 : 1;
149 time_t time1 = lockscreen_event_time_get(event1);
150 time_t time2 = lockscreen_event_time_get(event2);
152 return time1 > time2 ? -1 : 1;
155 static void _lockscreen_events_ctrl_main_view_unlocked(void *data, Evas_Object *obj, void *event_info)
160 static void _lockscreen_events_ctrl_launch_result(bool result)
163 evas_object_smart_callback_add(main_view, SIGNAL_UNLOCK_ANIMATION_FINISHED, _lockscreen_events_ctrl_main_view_unlocked, NULL);
164 lockscreen_main_view_unlock(main_view);
166 INF("Failed to launch application");
170 static void _lockscreen_events_ctrl_item_selected(void *data, Evas_Object *obj, void *info)
172 lockscreen_event_t *event = data;
173 lockscreen_event_launch(event, _lockscreen_events_ctrl_launch_result);
176 static void _lockscreen_events_ctrl_events_load()
178 lockscreen_event_t *event;
180 Evas_Object *genlist = lockscreen_events_genlist_get(lockscreen_main_view_part_content_get(main_view, PART_EVENTS));
182 FAT("lockscreen_events_genlist_get failed");
186 Eina_List *events = lockscreen_events_get();
187 events = eina_list_sort(events, -1, _lockscreen_events_ctrl_sort);
188 EINA_LIST_FREE(events, event) {
189 lockscreen_event_type_e type = lockscreen_event_type_get(event);
192 case LOCKSCREEN_EVENT_TYPE_NOTIFICATION:
193 elm_genlist_item_append(genlist, ¬i_itc, event, NULL, ELM_GENLIST_ITEM_NONE, _lockscreen_events_ctrl_item_selected, event);
195 case LOCKSCREEN_EVENT_TYPE_MINICONTROLLER:
196 elm_genlist_item_append(genlist, &widget_itc, event, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
201 static void _lockscreen_events_ctrl_events_unload()
203 Evas_Object *genlist = lockscreen_events_genlist_get(lockscreen_main_view_part_content_get(main_view, PART_EVENTS));
204 elm_genlist_clear(genlist);
207 static Eina_Bool _lockscreen_events_ctrl_events_changed(void *data, int event, void *event_info)
209 /* Improve load/unload in the future */
210 _lockscreen_events_ctrl_events_unload();
212 if (lockscreen_events_exists()) {
213 _lockscreen_events_ctrl_view_show();
214 _lockscreen_events_ctrl_events_load();
217 _lockscreen_events_ctrl_view_hide();
223 int lockscreen_events_ctrl_init(Evas_Object *mv)
225 if (lockscreen_events_init()) {
226 FAT("lockscreen_events_init failed.");
230 if (lockscreen_time_format_init()) {
231 FAT("lockscreen_time_format_init failed.");
232 lockscreen_events_shutdown();
237 events_handler = ecore_event_handler_add(LOCKSCREEN_EVENT_EVENTS_CHANGED, _lockscreen_events_ctrl_events_changed, NULL);
239 if (lockscreen_events_exists()) {
240 _lockscreen_events_ctrl_view_show();
243 _lockscreen_events_ctrl_view_hide();
248 void lockscreen_events_ctrl_shutdown()
250 ecore_event_handler_del(events_handler);
251 lockscreen_events_shutdown();
252 lockscreen_time_format_shutdown();