2 * Copyright (c) 2000 - 2015 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.
17 #include <system_settings.h>
18 #include <efl_extension.h>
24 #include "lock_pwd_util.h"
25 #include "lock_pwd_simple.h"
26 #include "lock_pwd_complex.h"
28 static struct _s_lock_pwd_util {
29 Evas_Object *lock_pwd_win;
30 Evas_Object *conformant;
48 int lock_pwd_util_win_width_get(void)
50 return s_lock_pwd_util.win_w;
55 int lock_pwd_util_win_height_get(void)
57 return s_lock_pwd_util.win_h;
62 Evas_Object *lock_pwd_util_win_get(void)
64 return s_lock_pwd_util.lock_pwd_win;
69 Eina_Bool lock_pwd_util_win_visible_get(void)
71 retv_if(!s_lock_pwd_util.lock_pwd_win, EINA_FALSE);
72 return evas_object_visible_get(s_lock_pwd_util.lock_pwd_win);
77 static Evas_Object *_pwd_conformant_add(Evas_Object *parent)
79 Evas_Object *conformant = NULL;
81 retv_if(!parent, NULL);
83 conformant = elm_conformant_add(parent);
84 retv_if(!conformant, NULL);
86 evas_object_size_hint_weight_set(conformant, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
87 elm_win_resize_object_add(parent, conformant);
89 elm_object_signal_emit(conformant, "elm,state,indicator,overlap", "elm");
91 evas_object_show(conformant);
97 void lock_pwd_util_bg_image_set(Evas_Object *bg, char *file)
99 const char *old_filename = NULL;
100 char *lock_bg = NULL;
105 elm_image_file_get(bg, &old_filename, NULL);
107 old_filename = LOCK_MGR_DEFAULT_BG_PATH;
109 _D("old file name : %s", old_filename);
112 if (!elm_image_file_set(bg, file, NULL)) {
113 _E("Failed to set image file : %s", file);
117 ret = system_settings_get_value_string(SYSTEM_SETTINGS_KEY_WALLPAPER_LOCK_SCREEN, &lock_bg);
118 if (SYSTEM_SETTINGS_ERROR_NONE != ret) {
119 _E("Failed to get system setting value : %d", SYSTEM_SETTINGS_KEY_WALLPAPER_LOCK_SCREEN);
122 goto_if(!lock_bg, ERROR);
124 _D("lock_bg : %s", lock_bg);
126 if (!elm_image_file_set(bg, lock_bg, NULL)) {
127 _E("Failed to set image file : %s", lock_bg);
138 if (!elm_bg_file_set(bg, old_filename, NULL)) {
139 _E("Failed to set old BG file : %s / Retry to set default BG.", old_filename);
140 if (!elm_bg_file_set(bg, LOCK_MGR_DEFAULT_BG_PATH, NULL)) {
141 _E("Failed to set default BG : %s", LOCK_MGR_DEFAULT_BG_PATH);
151 static void _wallpaper_lock_screen_changed_cb(system_settings_key_e key, void *data)
153 Evas_Object *bg = (Evas_Object *)data;
156 lock_pwd_util_bg_image_set(bg, NULL);
161 static Evas_Object *_pwd_bg_add(void *data)
163 Evas_Object *bg = NULL;
164 Evas_Object *parent = NULL;
167 parent = (Evas_Object *)data;
168 retv_if(!parent, NULL);
170 bg = elm_image_add(parent);
173 elm_image_aspect_fixed_set(bg, EINA_TRUE);
174 elm_image_fill_outside_set(bg, EINA_TRUE);
175 elm_image_preload_disabled_set(bg, EINA_TRUE);
177 lock_pwd_util_bg_image_set(bg, NULL);
178 evas_object_show(bg);
180 ret = system_settings_set_changed_cb(SYSTEM_SETTINGS_KEY_WALLPAPER_LOCK_SCREEN, _wallpaper_lock_screen_changed_cb, bg);
181 if (SYSTEM_SETTINGS_ERROR_NONE != ret) {
182 _E("Failed to register settings changed cb : %d", SYSTEM_SETTINGS_KEY_WALLPAPER_LOCK_SCREEN);
190 static Evas_Object *_pwd_layout_create(Evas_Object *parent)
192 Evas_Object *layout = NULL;
194 retv_if(!parent, NULL);
196 layout = elm_layout_add(parent);
197 retv_if(!layout, NULL);
199 if (!elm_layout_file_set(layout, LOCK_PWD_EDJE_FILE, "lock_pwd")) {
200 _E("Failed to set edje file : %s", LOCK_PWD_EDJE_FILE);
204 evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
205 evas_object_size_hint_align_set(layout, EVAS_HINT_FILL, EVAS_HINT_FILL);
207 evas_object_show(layout);
212 _E("Failed to create password layout");
215 evas_object_del(layout);
224 void lock_pwd_util_back_key_relased(void)
228 ret_if(lock_pwd_simple_is_blocked_get());
230 lock_mgr_sound_play(LOCK_SOUND_TAP);
232 if (!lock_mgr_lockscreen_launch()) {
233 _E("Failed to launch lockscreen");
236 lock_pwd_util_view_init();
241 static void __win_resize_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
250 evas_object_geometry_get(obj, &x, &y, &w, &h);
251 _D("win resize : %d, %d(%d*%d)", x, y, w, h);
256 static void __conformant_resize_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
265 evas_object_geometry_get(obj, &x, &y, &w, &h);
266 _D("conformant resize : %d, %d(%d*%d)", x, y, w, h);
271 static void __layout_resize_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
280 evas_object_geometry_get(obj, &x, &y, &w, &h);
281 _D("layout resize : %d, %d(%d*%d)", x, y, w, h);
286 void lock_pwd_util_create(Eina_Bool is_show)
288 Evas_Object *win = NULL;
289 Evas_Object *conformant = NULL;
290 Evas_Object *bg = NULL;
291 Evas_Object *layout = NULL;
292 Evas_Object *pwd_layout = NULL;
294 int x = 0, y = 0, w = 0, h = 0;
296 if (!s_lock_pwd_util.lock_pwd_win) {
297 win = window_mgr_pwd_lock_win_create();
299 s_lock_pwd_util.lock_pwd_win = win;
301 elm_win_screen_size_get(win, &x, &y, &w, &h);
302 _D("win size : %dx%d(%d, %d)", w, h, x, y);
303 s_lock_pwd_util.win_w = w;
304 s_lock_pwd_util.win_h = h;
307 conformant = _pwd_conformant_add(win);
308 goto_if(!conformant, ERROR);
309 s_lock_pwd_util.conformant = conformant;
311 layout = _pwd_layout_create(conformant);
312 goto_if(!layout, ERROR);
313 s_lock_pwd_util.layout = layout;
315 evas_object_event_callback_add(s_lock_pwd_util.lock_pwd_win, EVAS_CALLBACK_RESIZE, __win_resize_cb, NULL);
316 evas_object_event_callback_add(conformant, EVAS_CALLBACK_RESIZE, __conformant_resize_cb, NULL);
317 evas_object_event_callback_add(conformant, EVAS_CALLBACK_RESIZE, __layout_resize_cb, NULL);
319 elm_object_content_set(conformant, layout);
321 bg = _pwd_bg_add(win);
323 s_lock_pwd_util.bg = bg;
325 elm_object_part_content_set(layout, "sw.bg", bg);
327 lock_type = status_active_get()->setappl_screen_lock_type_int;
328 _D("lock type : %d", lock_type);
331 case SETTING_SCREEN_LOCK_TYPE_SIMPLE_PASSWORD:
332 pwd_layout = lock_pwd_simple_layout_create(layout);
334 case SETTING_SCREEN_LOCK_TYPE_PASSWORD:
335 pwd_layout = lock_pwd_complex_layout_create(layout);
338 _E("lock type is not password : %d", lock_type);
341 goto_if(!pwd_layout, ERROR);
343 elm_object_part_content_set(layout, "sw.lock_pwd", pwd_layout);
346 evas_object_show(win);
352 _E("Failed to launch password lockscreen");
354 lock_pwd_util_destroy();
361 void lock_pwd_util_destroy(void)
363 int lock_type = status_active_get()->setappl_screen_lock_type_int;
364 _D("lock type : %d", lock_type);
366 if (lock_type == SETTING_SCREEN_LOCK_TYPE_SIMPLE_PASSWORD) {
367 lock_pwd_simple_layout_destroy();
368 } else if (lock_type == SETTING_SCREEN_LOCK_TYPE_PASSWORD) {
369 lock_pwd_complex_layout_destroy();
372 if (s_lock_pwd_util.layout) {
373 evas_object_del(s_lock_pwd_util.layout);
374 s_lock_pwd_util.layout = NULL;
377 if (s_lock_pwd_util.conformant) {
378 evas_object_del(s_lock_pwd_util.conformant);
379 s_lock_pwd_util.conformant = NULL;
382 if (s_lock_pwd_util.bg) {
383 system_settings_unset_changed_cb(SYSTEM_SETTINGS_KEY_WALLPAPER_LOCK_SCREEN);
384 evas_object_del(s_lock_pwd_util.bg);
385 s_lock_pwd_util.bg = NULL;
388 if (s_lock_pwd_util.lock_pwd_win) {
389 evas_object_del(s_lock_pwd_util.lock_pwd_win);
390 s_lock_pwd_util.lock_pwd_win = NULL;
397 static void _pwd_popup_cb(void *data, Evas_Object *obj, void *event_info)
401 evas_object_del((Evas_Object *)data);
406 void lock_pwd_util_popup_create(char *title, char *text, Evas_Smart_Cb func, double timeout)
408 Evas_Object *popup = NULL;
409 Evas_Object *btn = NULL;
411 ret_if(!s_lock_pwd_util.lock_pwd_win);
413 popup = elm_popup_add(s_lock_pwd_util.lock_pwd_win);
416 elm_popup_orient_set(popup, ELM_POPUP_ORIENT_BOTTOM);
417 evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
420 elm_object_part_text_set(popup, "title,text", title);
424 elm_object_text_set(popup, text);
427 btn = elm_button_add(popup);
429 _E("Failed to create lock popup button");
430 evas_object_del(popup);
434 elm_object_style_set(btn, "popup");
435 elm_object_text_set(btn, _("IDS_COM_BUTTON_OK_ABB"));
436 elm_object_part_content_set(popup, "button1", btn);
439 elm_popup_timeout_set(popup, timeout);
443 evas_object_smart_callback_add(btn, "clicked", func, popup);
444 eext_object_event_callback_add(popup, EEXT_CALLBACK_BACK, func, popup);
446 evas_object_smart_callback_add(btn, "clicked", _pwd_popup_cb, popup);
447 eext_object_event_callback_add(popup, EEXT_CALLBACK_BACK, _pwd_popup_cb, popup);
450 evas_object_show(popup);
457 void lock_pwd_util_view_init(void)
459 _D("initialize password lock values");
462 /* clear pwd lockscreen */
463 lock_type = status_active_get()->setappl_screen_lock_type_int;
464 if (lock_type == SETTING_SCREEN_LOCK_TYPE_SIMPLE_PASSWORD) {
465 lock_pwd_simple_view_init();
466 } else if (lock_type == SETTING_SCREEN_LOCK_TYPE_PASSWORD) {
467 lock_pwd_complex_view_init();
473 void lock_pwd_util_win_show(void)
475 ret_if(!s_lock_pwd_util.lock_pwd_win);
476 evas_object_show(s_lock_pwd_util.lock_pwd_win);
481 void lock_pwd_util_win_hide(void)
483 ret_if(!s_lock_pwd_util.lock_pwd_win);
484 evas_object_hide(s_lock_pwd_util.lock_pwd_win);