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 static Evas_Object *_pwd_conformant_add(void *data)
64 Evas_Object *win = NULL;
65 Evas_Object *conformant = NULL;
67 win = (Evas_Object *)data;
70 conformant = elm_conformant_add(win);
71 retv_if(!conformant, NULL);
73 evas_object_size_hint_weight_set(conformant, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
74 elm_win_resize_object_add(win, conformant);
76 elm_win_indicator_mode_set(win, ELM_WIN_INDICATOR_SHOW);
77 elm_win_indicator_opacity_set(win, ELM_WIN_INDICATOR_TRANSLUCENT);
78 elm_win_conformant_set(win, EINA_TRUE);
80 evas_object_show(conformant);
86 void lock_pwd_util_bg_image_set(Evas_Object *bg, char *file)
94 _D("lock bg : %s", file);
95 if (!elm_bg_file_set(bg, file, NULL)) {
96 _E("Failed to set BG : %s", file);
100 ret = system_settings_get_value_string(SYSTEM_SETTINGS_KEY_WALLPAPER_LOCK_SCREEN, &bg_path);
101 if (SYSTEM_SETTINGS_ERROR_NONE != ret) {
102 _E("Failed to get system setting value : %d", SYSTEM_SETTINGS_KEY_WALLPAPER_LOCK_SCREEN);
105 _D("lock bg : %s", bg_path);
107 if (!elm_bg_file_set(bg, bg_path, NULL)) {
108 _E("Failed to set bg : %s", bg_path);
126 if (!elm_bg_file_set(bg, LOCK_MGR_DEFAULT_BG_PATH, NULL)) {
127 _E("Failed to set default BG : %s. Retry to set default BG.", LOCK_MGR_DEFAULT_BG_PATH);
128 if (!elm_bg_file_set(bg, LOCK_MGR_DEFAULT_BG_PATH, NULL)) {
129 _E("Failed to set default BG : %s", LOCK_MGR_DEFAULT_BG_PATH);
138 static void _wallpaper_lock_screen_changed_cb(system_settings_key_e key, void *data)
141 Evas_Object *bg = (Evas_Object *)data;
144 lock_pwd_util_bg_image_set(bg, NULL);
149 static Evas_Object *_pwd_bg_add(void *data)
151 Evas_Object *bg = NULL;
152 Evas_Object *parent = NULL;
155 parent = (Evas_Object *)data;
156 retv_if(!parent, NULL);
158 bg = elm_bg_add(parent);
161 elm_bg_option_set(bg, ELM_BG_OPTION_SCALE);
162 elm_win_resize_object_add(parent, bg);
163 lock_pwd_util_bg_image_set(bg, NULL);
164 evas_object_show(bg);
166 ret = system_settings_set_changed_cb(SYSTEM_SETTINGS_KEY_WALLPAPER_LOCK_SCREEN, _wallpaper_lock_screen_changed_cb, bg);
167 if (SYSTEM_SETTINGS_ERROR_NONE != ret) {
168 _E("Failed to register settings changed cb : %d", SYSTEM_SETTINGS_KEY_WALLPAPER_LOCK_SCREEN);
176 static Evas_Object *_pwd_layout_create(void *data)
178 Evas_Object *layout = NULL;
179 Evas_Object *parent = NULL;
181 parent = (Evas_Object *)data;
182 retv_if(!parent, NULL);
184 layout = elm_layout_add(parent);
185 retv_if(!layout, NULL);
187 if (!elm_layout_file_set(layout, LOCK_PWD_EDJE_FILE, "lock_pwd")) {
188 _E("Failed to set edje file : %s", LOCK_PWD_EDJE_FILE);
192 evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
193 evas_object_size_hint_align_set(layout, EVAS_HINT_FILL, EVAS_HINT_FILL);
195 evas_object_show(layout);
200 _E("Failed to create password layout");
203 evas_object_del(layout);
212 void lock_pwd_util_back_key_relased(void)
216 ret_if(lock_pwd_simple_is_blocked_get());
218 lock_mgr_sound_play(LOCK_SOUND_TAP);
220 if (!lock_mgr_lockscreen_launch()) {
221 _E("Failed to launch lockscreen");
224 lock_pwd_util_view_init();
229 void lock_pwd_util_create(Eina_Bool is_show)
231 Evas_Object *win = NULL;
232 Evas_Object *conformant = NULL;
233 Evas_Object *bg = NULL;
234 Evas_Object *layout = NULL;
235 Evas_Object *pwd_layout = NULL;
237 int x = 0, y = 0, w = 0, h = 0;
239 if (!s_lock_pwd_util.lock_pwd_win) {
240 win = window_mgr_pwd_lock_win_create();
242 s_lock_pwd_util.lock_pwd_win = win;
244 elm_win_screen_size_get(win, &x, &y, &w, &h);
245 _D("win size : %dx%d(%d, %d)", w, h, x, y);
246 s_lock_pwd_util.win_w = w;
247 s_lock_pwd_util.win_h = h;
250 conformant = _pwd_conformant_add(win);
251 goto_if(!conformant, ERROR);
252 s_lock_pwd_util.conformant = conformant;
254 layout = _pwd_layout_create(conformant);
255 goto_if(!layout, ERROR);
256 s_lock_pwd_util.layout = layout;
258 elm_object_content_set(conformant, layout);
260 bg = _pwd_bg_add(win);
262 s_lock_pwd_util.bg = bg;
264 elm_object_part_content_set(layout, "sw.bg", bg);
266 lock_type = status_active_get()->setappl_screen_lock_type_int;
267 _D("lock type : %d", lock_type);
270 case SETTING_SCREEN_LOCK_TYPE_SIMPLE_PASSWORD:
271 pwd_layout = lock_pwd_simple_layout_create(layout);
273 case SETTING_SCREEN_LOCK_TYPE_PASSWORD:
274 pwd_layout = lock_pwd_complex_layout_create(layout);
277 _E("lock type is not password : %d", lock_type);
280 goto_if(!pwd_layout, ERROR);
282 elm_object_part_content_set(layout, "sw.lock_pwd", pwd_layout);
285 evas_object_show(win);
291 _E("Failed to launch password lockscreen");
300 void lock_pwd_util_del(void)
302 int lock_type = status_active_get()->setappl_screen_lock_type_int;
303 _D("lock type : %d", lock_type);
305 if (lock_type == SETTING_SCREEN_LOCK_TYPE_SIMPLE_PASSWORD) {
306 lock_pwd_simple_layout_del();
307 } else if (lock_type == SETTING_SCREEN_LOCK_TYPE_PASSWORD) {
308 lock_pwd_complex_layout_del();
311 if (s_lock_pwd_util.layout) {
312 evas_object_del(s_lock_pwd_util.layout);
313 s_lock_pwd_util.layout = NULL;
316 if (s_lock_pwd_util.conformant) {
317 evas_object_del(s_lock_pwd_util.conformant);
318 s_lock_pwd_util.conformant = NULL;
321 if (s_lock_pwd_util.bg) {
322 system_settings_unset_changed_cb(SYSTEM_SETTINGS_KEY_WALLPAPER_LOCK_SCREEN);
323 evas_object_del(s_lock_pwd_util.bg);
324 s_lock_pwd_util.bg = NULL;
327 if (s_lock_pwd_util.lock_pwd_win) {
328 evas_object_del(s_lock_pwd_util.lock_pwd_win);
329 s_lock_pwd_util.lock_pwd_win = NULL;
336 static void _pwd_popup_cb(void *data, Evas_Object *obj, void *event_info)
340 evas_object_del((Evas_Object *)data);
345 void lock_pwd_util_popup_create(char *title, char *text, Evas_Smart_Cb func, double timeout)
347 Evas_Object *popup = NULL;
348 Evas_Object *btn = NULL;
350 ret_if(!s_lock_pwd_util.lock_pwd_win);
352 popup = elm_popup_add(s_lock_pwd_util.lock_pwd_win);
355 elm_popup_orient_set(popup, ELM_POPUP_ORIENT_BOTTOM);
356 evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
359 elm_object_part_text_set(popup, "title,text", title);
363 elm_object_text_set(popup, text);
366 btn = elm_button_add(popup);
368 _E("Failed to create lock popup button");
369 evas_object_del(popup);
373 elm_object_style_set(btn, "popup");
374 elm_object_text_set(btn, _("IDS_COM_BUTTON_OK_ABB"));
375 elm_object_part_content_set(popup, "button1", btn);
378 elm_popup_timeout_set(popup, timeout);
382 evas_object_smart_callback_add(btn, "clicked", func, popup);
383 eext_object_event_callback_add(popup, EEXT_CALLBACK_BACK, func, popup);
385 evas_object_smart_callback_add(btn, "clicked", _pwd_popup_cb, popup);
386 eext_object_event_callback_add(popup, EEXT_CALLBACK_BACK, _pwd_popup_cb, popup);
389 evas_object_show(popup);
396 void lock_pwd_util_view_init(void)
398 _D("initialize password lock values");
401 /* clear pwd lockscreen */
402 lock_type = status_active_get()->setappl_screen_lock_type_int;
403 if (lock_type == SETTING_SCREEN_LOCK_TYPE_SIMPLE_PASSWORD) {
404 lock_pwd_simple_view_init();
405 } else if (lock_type == SETTING_SCREEN_LOCK_TYPE_PASSWORD) {
406 lock_pwd_complex_view_init();
412 Evas_Object *lock_pwd_util_win_get(void)
414 return s_lock_pwd_util.lock_pwd_win;
419 Eina_Bool lock_pwd_util_win_visible_get(void)
421 retv_if(!s_lock_pwd_util.lock_pwd_win, EINA_FALSE);
422 return evas_object_visible_get(s_lock_pwd_util.lock_pwd_win);
427 void lock_pwd_util_win_show(void)
429 ret_if(!s_lock_pwd_util.lock_pwd_win);
430 evas_object_show(s_lock_pwd_util.lock_pwd_win);
435 void lock_pwd_util_win_hide(void)
437 ret_if(!s_lock_pwd_util.lock_pwd_win);
438 evas_object_hide(s_lock_pwd_util.lock_pwd_win);