From 736f4207e55b17763dc80fd86cbee3f03f7bdf08 Mon Sep 17 00:00:00 2001 From: "junkyu.han" Date: Mon, 11 May 2015 16:31:33 +0900 Subject: [PATCH] Merge tizen2.4 starter Change-Id: I746cceccc33934d7ba81e38c526e8f5a25133ef5 --- AUTHORS | 2 - CMakeLists.txt | 189 ++++-- LICENSE | 204 ++++++ LICENSE.Flora | 206 ------ NOTICE | 4 +- debian/changelog | 536 ---------------- debian/compat | 1 - debian/control | 19 - debian/rules | 112 ---- debian/starter.install.in | 4 - debian/starter.postinst | 14 - include/dbus_util.h | 51 ++ include/hw_key.h | 22 - include/lock-daemon.h | 24 - include/lockd-debug.h | 64 -- include/lockd-process-mgr.h | 38 -- include/lockd-window-mgr.h | 42 -- include/menu_daemon.h | 36 -- include/mobile/home_mgr.h | 27 + include/mobile/hw_key.h | 39 ++ include/mobile/lock_mgr.h | 62 ++ include/mobile/lock_pwd_complex.h | 28 + include/mobile/lock_pwd_control_panel.h | 27 + include/mobile/lock_pwd_simple.h | 30 + include/mobile/lock_pwd_util.h | 38 ++ include/mobile/lock_pwd_verification.h | 56 ++ include/mobile/popup.h | 25 + include/mobile/starter.h | 27 + include/package_mgr.h | 22 + include/pkg_event.h | 46 -- include/process_mgr.h | 38 ++ include/starter-util.h | 35 -- include/starter-vconf.h | 24 - include/starter.h | 28 - include/status.h | 92 +++ include/util.h | 74 ++- include/wearable/clock_mgr.h | 23 + include/wearable/home_mgr.h | 27 + include/wearable/hourly_alert.h | 24 + include/wearable/hw_key.h | 20 + include/window_mgr.h | 38 ++ include/x11.h | 26 - include/xmonitor.h | 25 - lock-setting/CMakeLists.txt | 9 - lock-setting/lockscreen-options/CMakeLists.txt | 39 -- .../include/lockscreen-options-debug.h | 48 -- .../include/lockscreen-options-main.h | 28 - .../include/lockscreen-options-util.h | 48 -- .../include/lockscreen-options.h | 64 -- .../src/lockscreen-options-main.c | 343 ---------- .../src/lockscreen-options-util.c | 148 ----- .../lockscreen-options/src/lockscreen-options.c | 213 ------- lock-setting/po/CMakeLists.txt | 26 - lock-setting/po/ar.po | 54 -- lock-setting/po/az.po | 54 -- lock-setting/po/bg.po | 54 -- lock-setting/po/ca.po | 54 -- lock-setting/po/cs.po | 54 -- lock-setting/po/da.po | 54 -- lock-setting/po/de_DE.po | 54 -- lock-setting/po/el_GR.po | 54 -- lock-setting/po/en.po | 54 -- lock-setting/po/en_PH.po | 54 -- lock-setting/po/en_US.po | 54 -- lock-setting/po/es_ES.po | 54 -- lock-setting/po/es_MX.po | 54 -- lock-setting/po/es_US.po | 51 -- lock-setting/po/et.po | 54 -- lock-setting/po/eu.po | 54 -- lock-setting/po/fi.po | 54 -- lock-setting/po/fr_CA.po | 54 -- lock-setting/po/fr_FR.po | 54 -- lock-setting/po/ga.po | 54 -- lock-setting/po/gl.po | 54 -- lock-setting/po/hi.po | 54 -- lock-setting/po/hr.po | 54 -- lock-setting/po/hu.po | 54 -- lock-setting/po/hy.po | 54 -- lock-setting/po/is.po | 54 -- lock-setting/po/it_IT.po | 54 -- lock-setting/po/ja_JP.po | 54 -- lock-setting/po/ka.po | 54 -- lock-setting/po/kk.po | 54 -- lock-setting/po/ko_KR.po | 54 -- lock-setting/po/lt.po | 54 -- lock-setting/po/lv.po | 54 -- lock-setting/po/mk.po | 54 -- lock-setting/po/nb.po | 54 -- lock-setting/po/nl_NL.po | 54 -- lock-setting/po/pl.po | 54 -- lock-setting/po/pt_BR.po | 54 -- lock-setting/po/pt_PT.po | 54 -- lock-setting/po/ro.po | 54 -- lock-setting/po/ru_RU.po | 54 -- lock-setting/po/sk.po | 54 -- lock-setting/po/sl.po | 54 -- lock-setting/po/sr.po | 54 -- lock-setting/po/sv.po | 54 -- lock-setting/po/tr_TR.po | 54 -- lock-setting/po/uk.po | 54 -- lock-setting/po/uz.po | 54 -- lock-setting/po/zh_CN.po | 54 -- lock-setting/po/zh_HK.po | 54 -- lock-setting/po/zh_SG.po | 54 -- lock-setting/po/zh_TW.po | 54 -- packaging/.starter.spec.swp | Bin 0 -> 20480 bytes packaging/starter-pre.service | 6 + packaging/starter.changes | 3 - packaging/starter.manifest | 5 - packaging/starter.service | 12 +- packaging/starter.spec | 168 +++-- packaging/wait-lock.service | 14 + po/CMakeLists.txt | 24 + po/az.po | 57 ++ po/bg.po | 57 ++ po/ca.po | 57 ++ po/cs.po | 57 ++ po/da.po | 57 ++ po/de.po | 57 ++ po/el_GR.po | 57 ++ po/en.po | 57 ++ po/en_US.po | 57 ++ po/es_ES.po | 57 ++ po/es_US.po | 57 ++ po/et.po | 57 ++ po/eu.po | 57 ++ po/fi.po | 57 ++ po/fr.po | 57 ++ po/fr_CA.po | 57 ++ po/gl.po | 57 ++ po/hr.po | 57 ++ po/hu.po | 57 ++ po/hy.po | 57 ++ po/is.po | 57 ++ po/it_IT.po | 57 ++ po/ka.po | 57 ++ po/kk.po | 57 ++ po/ko_KR.po | 57 ++ po/lt.po | 57 ++ po/lv.po | 57 ++ po/mn_MN.po | 57 ++ po/nb.po | 57 ++ po/nl.po | 57 ++ po/pl.po | 57 ++ po/pt_BR.po | 57 ++ po/pt_PT.po | 57 ++ po/ro.po | 57 ++ po/ru_RU.po | 57 ++ po/sk.po | 57 ++ po/sl.po | 57 ++ po/sr.po | 57 ++ po/sv.po | 57 ++ po/tr_TR.po | 57 ++ po/uk.po | 57 ++ po/uz.po | 6 + rd3starter | 14 +- rd4starter | 6 +- res/CMakeLists.txt | 1 + res/edje/CMakeLists.txt | 3 + res/edje/mobile/CMakeLists.txt | 15 + res/edje/mobile/images/B09_btn_doubletab_h.png | Bin 0 -> 3654 bytes res/edje/mobile/images/Notification_ic_message.png | Bin 0 -> 3330 bytes .../mobile/images/Notification_ic_missedcall.png | Bin 0 -> 3351 bytes res/edje/mobile/images/RB07_icon_back_01.png | Bin 0 -> 3568 bytes res/edje/mobile/images/RB07_icon_back_dim.png | Bin 0 -> 3570 bytes res/edje/mobile/images/RB07_icon_back_normal.png | Bin 0 -> 3903 bytes res/edje/mobile/images/RB07_icon_back_press.png | Bin 0 -> 3575 bytes res/edje/mobile/images/RB07_icon_enter.png | Bin 0 -> 3539 bytes res/edje/mobile/images/RB07_icon_shift_focused.png | Bin 0 -> 3597 bytes res/edje/mobile/images/RB07_icon_shift_normal.png | Bin 0 -> 3412 bytes res/edje/mobile/images/RB07_icon_shift_press.png | Bin 0 -> 3143 bytes res/edje/mobile/images/RB07_icon_space.png | Bin 0 -> 2909 bytes res/edje/mobile/images/RB07_icon_space_press.png | Bin 0 -> 2892 bytes res/edje/mobile/images/RB07_key_btn_01.png | Bin 0 -> 3450 bytes res/edje/mobile/images/RB07_key_btn_02.png | Bin 0 -> 3391 bytes res/edje/mobile/images/RB07_key_btn_perss.png | Bin 0 -> 3412 bytes res/edje/mobile/images/RB07_key_btn_press.png | Bin 0 -> 3713 bytes res/edje/mobile/images/RB07_key_btn_qwerty_01.png | Bin 0 -> 3128 bytes res/edje/mobile/images/RB07_key_btn_qwerty_02.png | Bin 0 -> 3119 bytes res/edje/mobile/images/RB07_keypad_bg.png | Bin 0 -> 2861 bytes res/edje/mobile/images/circular_gauge_bg.png | Bin 0 -> 4874 bytes res/edje/mobile/images/circular_gauge_password.png | Bin 0 -> 3685 bytes res/edje/mobile/images/circular_gauge_pin.png | Bin 0 -> 4251 bytes res/edje/mobile/images/dismiss_button.png | Bin 0 -> 467 bytes .../mobile/images/edit_btn_icon_keyboard_nor.png | Bin 0 -> 1400 bytes .../mobile/images/edit_btn_icon_keyboard_press.png | Bin 0 -> 1468 bytes res/edje/mobile/images/event_clock_colon.png | Bin 0 -> 3000 bytes res/edje/mobile/images/event_close_bg.#.png | Bin 0 -> 3177 bytes res/edje/mobile/images/event_list_bg.#.png | Bin 0 -> 2841 bytes res/edje/mobile/images/event_list_divider.#.png | Bin 0 -> 2807 bytes res/edje/mobile/images/event_number_bg.#.png | Bin 0 -> 2839 bytes res/edje/mobile/images/fahrenheit_icon.png | Bin 0 -> 3234 bytes res/edje/mobile/images/gradation_bg.#.png | Bin 0 -> 2857 bytes res/edje/mobile/images/icon_backtocall_nor.png | Bin 0 -> 4182 bytes res/edje/mobile/images/icon_backtocall_press.png | Bin 0 -> 3945 bytes res/edje/mobile/images/indicator_high.png | Bin 0 -> 985 bytes res/edje/mobile/images/indicator_nor.png | Bin 0 -> 990 bytes res/edje/mobile/images/keyboard_basic_pad.png | Bin 0 -> 3816 bytes .../mobile/images/keyboard_basic_pad_press.png | Bin 0 -> 3713 bytes res/edje/mobile/images/keypad_press_bg.png | Bin 0 -> 4247 bytes res/edje/mobile/images/lock_circle_line_camera.png | Bin 0 -> 12323 bytes .../mobile/images/lock_circle_line_camera_drag.png | Bin 0 -> 8719 bytes res/edje/mobile/images/ls_back_01_nor.png | Bin 0 -> 4209 bytes res/edje/mobile/images/ls_back_01_press.png | Bin 0 -> 4190 bytes res/edje/mobile/images/ls_back_02_nor.png | Bin 0 -> 4010 bytes res/edje/mobile/images/ls_back_02_press.png | Bin 0 -> 3971 bytes res/edje/mobile/images/ls_button_02_default.png | Bin 0 -> 7799 bytes res/edje/mobile/images/ls_button_02_press.png | Bin 0 -> 10112 bytes res/edje/mobile/images/ls_button_default.png | Bin 0 -> 17823 bytes res/edje/mobile/images/ls_button_press.png | Bin 0 -> 10404 bytes res/edje/mobile/images/ls_button_sos_phone.png | Bin 0 -> 12946 bytes res/edje/mobile/images/ls_button_x.png | Bin 0 -> 10650 bytes res/edje/mobile/images/ls_password_box_01.png | Bin 0 -> 3729 bytes res/edje/mobile/images/ls_password_box_02.png | Bin 0 -> 1979 bytes res/edje/mobile/images/ls_password_dot.png | Bin 0 -> 3119 bytes res/edje/mobile/images/ls_password_star_01.png | Bin 0 -> 3508 bytes res/edje/mobile/images/ls_phone_01_nor.png | Bin 0 -> 4404 bytes res/edje/mobile/images/ls_phone_01_press.png | Bin 0 -> 5120 bytes res/edje/mobile/images/quick_shot.png | Bin 0 -> 4889 bytes res/edje/mobile/images/quick_shot_drag.png | Bin 0 -> 3197 bytes res/edje/mobile/lock_btn.edc | 458 ++++++++++++++ res/edje/mobile/lock_pwd.edc | 416 ++++++++++++ res/edje/mobile/lock_pwd_complex.edc | 148 +++++ res/edje/mobile/lock_pwd_simple.edc | 476 ++++++++++++++ src/dbus_util.c | 395 ++++++++++++ src/hw_key.c | 332 ---------- src/lock-daemon.c | 663 ------------------- src/lockd-debug.c | 94 --- src/lockd-process-mgr.c | 176 ------ src/lockd-window-mgr.c | 303 --------- src/menu_daemon.c | 418 ------------ src/mobile/home_mgr.c | 427 +++++++++++++ src/mobile/hw_key.c | 500 +++++++++++++++ src/mobile/lock_mgr.c | 700 +++++++++++++++++++++ src/mobile/lock_pwd_complex.c | 374 +++++++++++ src/mobile/lock_pwd_control_panel.c | 297 +++++++++ src/mobile/lock_pwd_simple.c | 448 +++++++++++++ src/mobile/lock_pwd_util.c | 472 ++++++++++++++ src/mobile/lock_pwd_verification.c | 207 ++++++ src/mobile/popup.c | 112 ++++ src/mobile/starter.c | 255 ++++++++ src/mobile/window_mgr.c | 400 ++++++++++++ src/package_mgr.c | 42 ++ src/pkg_event.c | 301 --------- src/process_mgr.c | 434 +++++++++++++ src/starter.c | 272 -------- src/status.c | 573 +++++++++++++++++ src/wearable/clock_mgr.c | 171 +++++ src/wearable/home_mgr.c | 118 ++++ src/wearable/hourly_alert.c | 271 ++++++++ src/wearable/hw_key.c | 396 ++++++++++++ src/wearable/starter.c | 199 ++++++ src/x11.c | 119 ---- src/xmonitor.c | 314 --------- starter | 3 +- starter.desktop.in | 9 - starter.efl | 38 ++ starter.manifest | 35 ++ test/get_entry.c | 89 --- test/get_theme.c | 56 -- test/set_theme.c | 62 -- 261 files changed, 11982 insertions(+), 8445 deletions(-) delete mode 100755 AUTHORS mode change 100755 => 100644 CMakeLists.txt create mode 100644 LICENSE delete mode 100755 LICENSE.Flora mode change 100755 => 100644 NOTICE delete mode 100755 debian/changelog delete mode 100755 debian/compat delete mode 100755 debian/control delete mode 100755 debian/rules delete mode 100755 debian/starter.install.in delete mode 100755 debian/starter.postinst create mode 100644 include/dbus_util.h delete mode 100755 include/hw_key.h delete mode 100755 include/lock-daemon.h delete mode 100755 include/lockd-debug.h delete mode 100755 include/lockd-process-mgr.h delete mode 100755 include/lockd-window-mgr.h delete mode 100755 include/menu_daemon.h create mode 100644 include/mobile/home_mgr.h create mode 100644 include/mobile/hw_key.h create mode 100644 include/mobile/lock_mgr.h create mode 100644 include/mobile/lock_pwd_complex.h create mode 100644 include/mobile/lock_pwd_control_panel.h create mode 100755 include/mobile/lock_pwd_simple.h create mode 100644 include/mobile/lock_pwd_util.h create mode 100755 include/mobile/lock_pwd_verification.h create mode 100644 include/mobile/popup.h create mode 100644 include/mobile/starter.h create mode 100644 include/package_mgr.h delete mode 100755 include/pkg_event.h create mode 100644 include/process_mgr.h delete mode 100755 include/starter-util.h delete mode 100755 include/starter-vconf.h delete mode 100755 include/starter.h create mode 100644 include/status.h mode change 100755 => 100644 include/util.h create mode 100644 include/wearable/clock_mgr.h create mode 100644 include/wearable/home_mgr.h create mode 100644 include/wearable/hourly_alert.h create mode 100644 include/wearable/hw_key.h create mode 100644 include/window_mgr.h delete mode 100755 include/x11.h delete mode 100755 include/xmonitor.h delete mode 100755 lock-setting/CMakeLists.txt delete mode 100755 lock-setting/lockscreen-options/CMakeLists.txt delete mode 100755 lock-setting/lockscreen-options/include/lockscreen-options-debug.h delete mode 100755 lock-setting/lockscreen-options/include/lockscreen-options-main.h delete mode 100755 lock-setting/lockscreen-options/include/lockscreen-options-util.h delete mode 100755 lock-setting/lockscreen-options/include/lockscreen-options.h delete mode 100755 lock-setting/lockscreen-options/src/lockscreen-options-main.c delete mode 100755 lock-setting/lockscreen-options/src/lockscreen-options-util.c delete mode 100755 lock-setting/lockscreen-options/src/lockscreen-options.c delete mode 100755 lock-setting/po/CMakeLists.txt delete mode 100644 lock-setting/po/ar.po delete mode 100644 lock-setting/po/az.po delete mode 100644 lock-setting/po/bg.po delete mode 100644 lock-setting/po/ca.po delete mode 100644 lock-setting/po/cs.po delete mode 100644 lock-setting/po/da.po delete mode 100644 lock-setting/po/de_DE.po delete mode 100644 lock-setting/po/el_GR.po delete mode 100644 lock-setting/po/en.po delete mode 100644 lock-setting/po/en_PH.po delete mode 100644 lock-setting/po/en_US.po delete mode 100644 lock-setting/po/es_ES.po delete mode 100644 lock-setting/po/es_MX.po delete mode 100644 lock-setting/po/es_US.po delete mode 100644 lock-setting/po/et.po delete mode 100644 lock-setting/po/eu.po delete mode 100644 lock-setting/po/fi.po delete mode 100644 lock-setting/po/fr_CA.po delete mode 100644 lock-setting/po/fr_FR.po delete mode 100644 lock-setting/po/ga.po delete mode 100644 lock-setting/po/gl.po delete mode 100644 lock-setting/po/hi.po delete mode 100644 lock-setting/po/hr.po delete mode 100644 lock-setting/po/hu.po delete mode 100644 lock-setting/po/hy.po delete mode 100644 lock-setting/po/is.po delete mode 100644 lock-setting/po/it_IT.po delete mode 100644 lock-setting/po/ja_JP.po delete mode 100644 lock-setting/po/ka.po delete mode 100644 lock-setting/po/kk.po delete mode 100644 lock-setting/po/ko_KR.po delete mode 100644 lock-setting/po/lt.po delete mode 100644 lock-setting/po/lv.po delete mode 100644 lock-setting/po/mk.po delete mode 100644 lock-setting/po/nb.po delete mode 100644 lock-setting/po/nl_NL.po delete mode 100644 lock-setting/po/pl.po delete mode 100644 lock-setting/po/pt_BR.po delete mode 100644 lock-setting/po/pt_PT.po delete mode 100644 lock-setting/po/ro.po delete mode 100644 lock-setting/po/ru_RU.po delete mode 100644 lock-setting/po/sk.po delete mode 100644 lock-setting/po/sl.po delete mode 100644 lock-setting/po/sr.po delete mode 100644 lock-setting/po/sv.po delete mode 100644 lock-setting/po/tr_TR.po delete mode 100644 lock-setting/po/uk.po delete mode 100644 lock-setting/po/uz.po delete mode 100644 lock-setting/po/zh_CN.po delete mode 100644 lock-setting/po/zh_HK.po delete mode 100644 lock-setting/po/zh_SG.po delete mode 100644 lock-setting/po/zh_TW.po create mode 100644 packaging/.starter.spec.swp create mode 100644 packaging/starter-pre.service delete mode 100644 packaging/starter.changes delete mode 100644 packaging/starter.manifest create mode 100644 packaging/wait-lock.service create mode 100644 po/CMakeLists.txt create mode 100644 po/az.po create mode 100644 po/bg.po create mode 100644 po/ca.po create mode 100644 po/cs.po create mode 100644 po/da.po create mode 100644 po/de.po create mode 100644 po/el_GR.po create mode 100644 po/en.po create mode 100644 po/en_US.po create mode 100644 po/es_ES.po create mode 100644 po/es_US.po create mode 100644 po/et.po create mode 100644 po/eu.po create mode 100644 po/fi.po create mode 100644 po/fr.po create mode 100644 po/fr_CA.po create mode 100644 po/gl.po create mode 100644 po/hr.po create mode 100644 po/hu.po create mode 100644 po/hy.po create mode 100644 po/is.po create mode 100644 po/it_IT.po create mode 100644 po/ka.po create mode 100644 po/kk.po create mode 100644 po/ko_KR.po create mode 100644 po/lt.po create mode 100644 po/lv.po create mode 100644 po/mn_MN.po create mode 100644 po/nb.po create mode 100644 po/nl.po create mode 100644 po/pl.po create mode 100644 po/pt_BR.po create mode 100644 po/pt_PT.po create mode 100644 po/ro.po create mode 100644 po/ru_RU.po create mode 100644 po/sk.po create mode 100644 po/sl.po create mode 100644 po/sr.po create mode 100644 po/sv.po create mode 100644 po/tr_TR.po create mode 100644 po/uk.po create mode 100644 po/uz.po mode change 100755 => 100644 rd3starter mode change 100755 => 100644 rd4starter create mode 100755 res/CMakeLists.txt create mode 100755 res/edje/CMakeLists.txt create mode 100755 res/edje/mobile/CMakeLists.txt create mode 100755 res/edje/mobile/images/B09_btn_doubletab_h.png create mode 100755 res/edje/mobile/images/Notification_ic_message.png create mode 100755 res/edje/mobile/images/Notification_ic_missedcall.png create mode 100755 res/edje/mobile/images/RB07_icon_back_01.png create mode 100755 res/edje/mobile/images/RB07_icon_back_dim.png create mode 100755 res/edje/mobile/images/RB07_icon_back_normal.png create mode 100755 res/edje/mobile/images/RB07_icon_back_press.png create mode 100755 res/edje/mobile/images/RB07_icon_enter.png create mode 100755 res/edje/mobile/images/RB07_icon_shift_focused.png create mode 100755 res/edje/mobile/images/RB07_icon_shift_normal.png create mode 100755 res/edje/mobile/images/RB07_icon_shift_press.png create mode 100755 res/edje/mobile/images/RB07_icon_space.png create mode 100755 res/edje/mobile/images/RB07_icon_space_press.png create mode 100755 res/edje/mobile/images/RB07_key_btn_01.png create mode 100755 res/edje/mobile/images/RB07_key_btn_02.png create mode 100755 res/edje/mobile/images/RB07_key_btn_perss.png create mode 100755 res/edje/mobile/images/RB07_key_btn_press.png create mode 100755 res/edje/mobile/images/RB07_key_btn_qwerty_01.png create mode 100755 res/edje/mobile/images/RB07_key_btn_qwerty_02.png create mode 100755 res/edje/mobile/images/RB07_keypad_bg.png create mode 100644 res/edje/mobile/images/circular_gauge_bg.png create mode 100644 res/edje/mobile/images/circular_gauge_password.png create mode 100644 res/edje/mobile/images/circular_gauge_pin.png create mode 100755 res/edje/mobile/images/dismiss_button.png create mode 100755 res/edje/mobile/images/edit_btn_icon_keyboard_nor.png create mode 100755 res/edje/mobile/images/edit_btn_icon_keyboard_press.png create mode 100644 res/edje/mobile/images/event_clock_colon.png create mode 100755 res/edje/mobile/images/event_close_bg.#.png create mode 100755 res/edje/mobile/images/event_list_bg.#.png create mode 100755 res/edje/mobile/images/event_list_divider.#.png create mode 100644 res/edje/mobile/images/event_number_bg.#.png create mode 100755 res/edje/mobile/images/fahrenheit_icon.png create mode 100755 res/edje/mobile/images/gradation_bg.#.png create mode 100755 res/edje/mobile/images/icon_backtocall_nor.png create mode 100755 res/edje/mobile/images/icon_backtocall_press.png create mode 100755 res/edje/mobile/images/indicator_high.png create mode 100755 res/edje/mobile/images/indicator_nor.png create mode 100755 res/edje/mobile/images/keyboard_basic_pad.png create mode 100755 res/edje/mobile/images/keyboard_basic_pad_press.png create mode 100755 res/edje/mobile/images/keypad_press_bg.png create mode 100755 res/edje/mobile/images/lock_circle_line_camera.png create mode 100755 res/edje/mobile/images/lock_circle_line_camera_drag.png create mode 100755 res/edje/mobile/images/ls_back_01_nor.png create mode 100755 res/edje/mobile/images/ls_back_01_press.png create mode 100755 res/edje/mobile/images/ls_back_02_nor.png create mode 100755 res/edje/mobile/images/ls_back_02_press.png create mode 100755 res/edje/mobile/images/ls_button_02_default.png create mode 100755 res/edje/mobile/images/ls_button_02_press.png create mode 100755 res/edje/mobile/images/ls_button_default.png create mode 100755 res/edje/mobile/images/ls_button_press.png create mode 100755 res/edje/mobile/images/ls_button_sos_phone.png create mode 100755 res/edje/mobile/images/ls_button_x.png create mode 100755 res/edje/mobile/images/ls_password_box_01.png create mode 100755 res/edje/mobile/images/ls_password_box_02.png create mode 100755 res/edje/mobile/images/ls_password_dot.png create mode 100755 res/edje/mobile/images/ls_password_star_01.png create mode 100755 res/edje/mobile/images/ls_phone_01_nor.png create mode 100755 res/edje/mobile/images/ls_phone_01_press.png create mode 100755 res/edje/mobile/images/quick_shot.png create mode 100755 res/edje/mobile/images/quick_shot_drag.png create mode 100755 res/edje/mobile/lock_btn.edc create mode 100755 res/edje/mobile/lock_pwd.edc create mode 100755 res/edje/mobile/lock_pwd_complex.edc create mode 100755 res/edje/mobile/lock_pwd_simple.edc create mode 100644 src/dbus_util.c delete mode 100755 src/hw_key.c delete mode 100755 src/lock-daemon.c delete mode 100755 src/lockd-debug.c delete mode 100755 src/lockd-process-mgr.c delete mode 100755 src/lockd-window-mgr.c delete mode 100755 src/menu_daemon.c create mode 100644 src/mobile/home_mgr.c create mode 100644 src/mobile/hw_key.c create mode 100644 src/mobile/lock_mgr.c create mode 100644 src/mobile/lock_pwd_complex.c create mode 100644 src/mobile/lock_pwd_control_panel.c create mode 100755 src/mobile/lock_pwd_simple.c create mode 100644 src/mobile/lock_pwd_util.c create mode 100755 src/mobile/lock_pwd_verification.c create mode 100644 src/mobile/popup.c create mode 100644 src/mobile/starter.c create mode 100644 src/mobile/window_mgr.c create mode 100644 src/package_mgr.c delete mode 100755 src/pkg_event.c create mode 100644 src/process_mgr.c delete mode 100755 src/starter.c create mode 100644 src/status.c create mode 100644 src/wearable/clock_mgr.c create mode 100644 src/wearable/home_mgr.c create mode 100644 src/wearable/hourly_alert.c create mode 100644 src/wearable/hw_key.c create mode 100644 src/wearable/starter.c delete mode 100644 src/x11.c delete mode 100755 src/xmonitor.c mode change 100755 => 100644 starter delete mode 100755 starter.desktop.in create mode 100644 starter.efl create mode 100644 starter.manifest delete mode 100755 test/get_entry.c delete mode 100755 test/get_theme.c delete mode 100755 test/set_theme.c diff --git a/AUTHORS b/AUTHORS deleted file mode 100755 index b7f374a..0000000 --- a/AUTHORS +++ /dev/null @@ -1,2 +0,0 @@ -jin yoon -seungtaek chung diff --git a/CMakeLists.txt b/CMakeLists.txt old mode 100755 new mode 100644 index 8765878..895746f --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,58 +1,109 @@ CMAKE_MINIMUM_REQUIRED(VERSION 2.6) PROJECT(starter C) -SET(VENDOR "tizen") SET(PACKAGE ${PROJECT_NAME}) -SET(PKGNAME "org.${VENDOR}.${PACKAGE}") +SET(PKGNAME "org.tizen.${PACKAGE}") SET(PREFIX ${CMAKE_INSTALL_PREFIX}) SET(BINDIR "${PREFIX}/bin") SET(DATADIR "${PREFIX}/share") -SET(LOCALEDIR "${DATADIR}/locale") - -INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/include) +SET(RESDIR "${PREFIX}/res") +SET(LOCALEDIR "${PREFIX}/share/locale") +IF("${TIZEN_PROFILE_NAME}" STREQUAL "MOBILE") +INCLUDE_DIRECTORIES( + ${CMAKE_SOURCE_DIR}/include + ${CMAKE_SOURCE_DIR}/include/mobile +) INCLUDE(FindPkgConfig) -SET(PKGS_CHECK_MODULES - ail - aul - capi-system-media-key - db-util - dlog - ecore - ecore-evas - ecore-input - eet - eina - elementary - evas - heynoti - sysman - syspopup-caller - vconf - appcore-efl - glib-2.0 - ui-gadget-1 - bundle - capi-appfw-application - capi-system-info - pkgmgr-info) - -IF (with_x) - pkg_check_modules(pkgs REQUIRED ${PKGS_CHECK_MODULES} ecore-x utilX x11 xcomposite xext) -ENDIF(with_x) +pkg_check_modules(pkgs REQUIRED + aul + capi-system-media-key + db-util + dlog + ecore + ecore-evas + ecore-input +#ecore-x + edbus + eina + elementary + evas + syspopup-caller +#utilX + vconf + appcore-efl + glib-2.0 + ui-gadget-1 + bundle + capi-appfw-application + capi-appfw-app-manager + capi-network-bluetooth + capi-system-system-settings + feedback + alarm-service + pkgmgr-info + deviced + edbus + dbus-1 + dbus-glib-1 + tts +#capi-message-port + security-server + efl-assist +) +ELSE() +INCLUDE_DIRECTORIES( + ${CMAKE_SOURCE_DIR}/include + ${CMAKE_SOURCE_DIR}/include/wearable +) +INCLUDE(FindPkgConfig) +pkg_check_modules(pkgs REQUIRED + aul + capi-system-media-key + db-util + dlog + ecore + ecore-evas + ecore-input +#ecore-x + edbus + eina + elementary + evas + syspopup-caller +#utilX + vconf + appcore-efl + glib-2.0 + ui-gadget-1 + bundle + capi-appfw-application + capi-appfw-app-manager + capi-network-bluetooth + feedback + alarm-service + pkgmgr-info + deviced + edbus + dbus-1 + dbus-glib-1 +) +ENDIF() -IF (with_wayland) - ADD_DEFINITIONS("-DWAYLAND") - pkg_check_modules(pkgs REQUIRED ${PKGS_CHECK_MODULES}) -ENDIF(with_wayland) FOREACH(flag ${pkgs_CFLAGS}) SET(EXTRA_CFLAGS "${EXTRA_CFLAGS} ${flag}") ENDFOREACH(flag) -SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${EXTRA_CFLAGS} -Wall") -SET(CMAKE_C_FLAGS_DEBUG "-O0 -g") -SET(CMAKE_C_FLAGS_RELEASE "-O2") +SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${EXTRA_CFLAGS} -Wall -fPIE") +SET(CMAKE_C_FLAGS_PROFILING "-O0 -g -pg -fPIE") +SET(CMAKE_CXX_FLAGS_PROFILING "-O0 -std=c++0x -g -pg -fPIE") +SET(CMAKE_C_FLAGS_DEBUG "-O0 -g -fPIE") +SET(CMAKE_CXX_FLAGS_DEBUG "-O0 -std=c++0x -g -fPIE") +SET(CMAKE_C_FLAGS_RELEASE "-O2 -g -fPIE") +SET(CMAKE_CXX_FLAGS_RELEASE "-O2 -std=c++0x -g -fPIE") +SET(CMAKE_C_FLAGS_CCOV "-O2 -g --coverage -fPIE") +SET(CMAKE_CXX_FLAGS_CCOV "-O2 -std=c++0x -g --coverage -fPIE") SET(CMAKE_EXE_LINKER_FLAGS "-Wl,--as-needed -Wl,--rpath=${PREFIX}/lib -pie") @@ -63,37 +114,48 @@ IF("${ARCH}" STREQUAL "arm") MESSAGE("add -DTARGET") ENDIF("${ARCH}" STREQUAL "arm") -ADD_DEFINITIONS("-DVENDOR=\"${VENDOR}\"") ADD_DEFINITIONS("-DPACKAGE=\"${PACKAGE}\"") ADD_DEFINITIONS("-DPACKAGE_NAME=\"${PKGNAME}\"") ADD_DEFINITIONS("-DPREFIX=\"${PREFIX}\"") ADD_DEFINITIONS("-DLOCALEDIR=\"${LOCALEDIR}\"") ADD_DEFINITIONS("-D_GNU_SOURCE") -SET(CMAKE_EXE_LINKER_FLAGS "-Wl,--as-needed") - +IF("${TIZEN_PROFILE_NAME}" STREQUAL "MOBILE") ADD_EXECUTABLE(${PROJECT_NAME} - src/hw_key.c - src/pkg_event.c - src/menu_daemon.c - src/starter.c - src/x11.c - src/xmonitor.c - src/lock-daemon.c - src/lockd-debug.c - src/lockd-process-mgr.c - src/lockd-window-mgr.c + src/dbus_util.c + src/package_mgr.c + src/process_mgr.c + src/status.c + + src/mobile/hw_key.c + src/mobile/home_mgr.c + src/mobile/starter.c +#src/mobile/lock_mgr.c +#src/mobile/lock_pwd_util.c +#src/mobile/lock_pwd_simple.c +#src/mobile/lock_pwd_complex.c +#src/mobile/lock_pwd_control_panel.c +#src/mobile/lock_pwd_verification.c +#src/mobile/window_mgr.c + src/mobile/popup.c ) +ELSE() +ADD_EXECUTABLE(${PROJECT_NAME} + src/dbus_util.c + src/package_mgr.c + src/process_mgr.c + src/status.c + + src/wearable/clock_mgr.c + src/wearable/home_mgr.c + src/wearable/hourly_alert.c + src/wearable/hw_key.c + src/wearable/starter.c +) +ENDIF() TARGET_LINK_LIBRARIES(${PROJECT_NAME} ${pkgs_LDFLAGS}) INSTALL(TARGETS ${PROJECT_NAME} DESTINATION ${BINDIR}) - -SET(LOCK_SETTING lock-setting) - -ADD_SUBDIRECTORY(${CMAKE_SOURCE_DIR}/${LOCK_SETTING}) - -# install desktop file & icon -#CONFIGURE_FILE(${PROJECT_NAME}.desktop.in ${PROJECT_NAME}.desktop) -#INSTALL(FILES ${CMAKE_BINARY_DIR}/${PROJECT_NAME}.desktop DESTINATION share/applications) +INSTALL(DIRECTORY DESTINATION ${DATADIR}) INSTALL(FILES ${CMAKE_SOURCE_DIR}/rd4starter DESTINATION /etc/init.d PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE @@ -102,3 +164,8 @@ INSTALL(FILES ${CMAKE_SOURCE_DIR}/rd3starter DESTINATION /etc/init.d PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE) #INSTALL to /etc/init.d + +INSTALL(FILES starter.efl DESTINATION /etc/smack/accesses.d) + +ADD_SUBDIRECTORY(res) +ADD_SUBDIRECTORY(po) diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..a06208b --- /dev/null +++ b/LICENSE @@ -0,0 +1,204 @@ +Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved. + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + diff --git a/LICENSE.Flora b/LICENSE.Flora deleted file mode 100755 index 571fe79..0000000 --- a/LICENSE.Flora +++ /dev/null @@ -1,206 +0,0 @@ -Flora License - -Version 1.1, April, 2013 - -http://floralicense.org/license/ - -TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - -1. Definitions. - -"License" shall mean the terms and conditions for use, reproduction, -and distribution as defined by Sections 1 through 9 of this document. - -"Licensor" shall mean the copyright owner or entity authorized by -the copyright owner that is granting the License. - -"Legal Entity" shall mean the union of the acting entity and -all other entities that control, are controlled by, or are -under common control with that entity. For the purposes of -this definition, "control" means (i) the power, direct or indirect, -to cause the direction or management of such entity, -whether by contract or otherwise, or (ii) ownership of fifty percent (50%) -or more of the outstanding shares, or (iii) beneficial ownership of -such entity. - -"You" (or "Your") shall mean an individual or Legal Entity -exercising permissions granted by this License. - -"Source" form shall mean the preferred form for making modifications, -including but not limited to software source code, documentation source, -and configuration files. - -"Object" form shall mean any form resulting from mechanical -transformation or translation of a Source form, including but -not limited to compiled object code, generated documentation, -and conversions to other media types. - -"Work" shall mean the work of authorship, whether in Source or Object form, -made available under the License, as indicated by a copyright notice -that is included in or attached to the work (an example is provided -in the Appendix below). - -"Derivative Works" shall mean any work, whether in Source or Object form, -that is based on (or derived from) the Work and for which the editorial -revisions, annotations, elaborations, or other modifications represent, -as a whole, an original work of authorship. For the purposes of this License, -Derivative Works shall not include works that remain separable from, -or merely link (or bind by name) to the interfaces of, the Work and -Derivative Works thereof. - -"Contribution" shall mean any work of authorship, including the original -version of the Work and any modifications or additions to that Work or -Derivative Works thereof, that is intentionally submitted to Licensor -for inclusion in the Work by the copyright owner or by an individual or -Legal Entity authorized to submit on behalf of the copyright owner. -For the purposes of this definition, "submitted" means any form of -electronic, verbal, or written communication sent to the Licensor or -its representatives, including but not limited to communication on -electronic mailing lists, source code control systems, and issue -tracking systems that are managed by, or on behalf of, the Licensor -for the purpose of discussing and improving the Work, but excluding -communication that is conspicuously marked or otherwise designated -in writing by the copyright owner as "Not a Contribution." - -"Contributor" shall mean Licensor and any individual or Legal Entity -on behalf of whom a Contribution has been received by Licensor and -subsequently incorporated within the Work. - -"Tizen Certified Platform" shall mean a software platform that complies -with the standards set forth in the Tizen Compliance Specification -and passes the Tizen Compliance Tests as defined from time to time -by the Tizen Technical Steering Group and certified by the Tizen -Association or its designated agent. - -2. Grant of Copyright License. Subject to the terms and conditions of -this License, each Contributor hereby grants to You a perpetual, -worldwide, non-exclusive, no-charge, royalty-free, irrevocable -copyright license to reproduce, prepare Derivative Works of, -publicly display, publicly perform, sublicense, and distribute the -Work and such Derivative Works in Source or Object form. - -3. Grant of Patent License. Subject to the terms and conditions of -this License, each Contributor hereby grants to You a perpetual, -worldwide, non-exclusive, no-charge, royalty-free, irrevocable -(except as stated in this section) patent license to make, have made, -use, offer to sell, sell, import, and otherwise transfer the Work -solely as incorporated into a Tizen Certified Platform, where such -license applies only to those patent claims licensable by such -Contributor that are necessarily infringed by their Contribution(s) -alone or by combination of their Contribution(s) with the Work solely -as incorporated into a Tizen Certified Platform to which such -Contribution(s) was submitted. If You institute patent litigation -against any entity (including a cross-claim or counterclaim -in a lawsuit) alleging that the Work or a Contribution incorporated -within the Work constitutes direct or contributory patent infringement, -then any patent licenses granted to You under this License for that -Work shall terminate as of the date such litigation is filed. - -4. Redistribution. You may reproduce and distribute copies of the -Work or Derivative Works thereof pursuant to the copyright license -above, in any medium, with or without modifications, and in Source or -Object form, provided that You meet the following conditions: - - 1. You must give any other recipients of the Work or Derivative Works - a copy of this License; and - 2. You must cause any modified files to carry prominent notices stating - that You changed the files; and - 3. You must retain, in the Source form of any Derivative Works that - You distribute, all copyright, patent, trademark, and attribution - notices from the Source form of the Work, excluding those notices - that do not pertain to any part of the Derivative Works; and - 4. If the Work includes a "NOTICE" text file as part of its distribution, - then any Derivative Works that You distribute must include a readable - copy of the attribution notices contained within such NOTICE file, - excluding those notices that do not pertain to any part of - the Derivative Works, in at least one of the following places: - within a NOTICE text file distributed as part of the Derivative Works; - within the Source form or documentation, if provided along with the - Derivative Works; or, within a display generated by the Derivative Works, - if and wherever such third-party notices normally appear. - The contents of the NOTICE file are for informational purposes only - and do not modify the License. You may add Your own attribution notices - within Derivative Works that You distribute, alongside or as an addendum - to the NOTICE text from the Work, provided that such additional attribution - notices cannot be construed as modifying the License. You may add Your own - copyright statement to Your modifications and may provide additional or - different license terms and conditions for use, reproduction, or - distribution of Your modifications, or for any such Derivative Works - as a whole, provided Your use, reproduction, and distribution of - the Work otherwise complies with the conditions stated in this License - and your own copyright statement or terms and conditions do not conflict - the conditions stated in the License including section 3. - -5. Submission of Contributions. Unless You explicitly state otherwise, -any Contribution intentionally submitted for inclusion in the Work -by You to the Licensor shall be under the terms and conditions of -this License, without any additional terms or conditions. -Notwithstanding the above, nothing herein shall supersede or modify -the terms of any separate license agreement you may have executed -with Licensor regarding such Contributions. - -6. Trademarks. This License does not grant permission to use the trade -names, trademarks, service marks, or product names of the Licensor, -except as required for reasonable and customary use in describing the -origin of the Work and reproducing the content of the NOTICE file. - -7. Disclaimer of Warranty. Unless required by applicable law or -agreed to in writing, Licensor provides the Work (and each -Contributor provides its Contributions) on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -implied, including, without limitation, any warranties or conditions -of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A -PARTICULAR PURPOSE. You are solely responsible for determining the -appropriateness of using or redistributing the Work and assume any -risks associated with Your exercise of permissions under this License. - -8. Limitation of Liability. In no event and under no legal theory, -whether in tort (including negligence), contract, or otherwise, -unless required by applicable law (such as deliberate and grossly -negligent acts) or agreed to in writing, shall any Contributor be -liable to You for damages, including any direct, indirect, special, -incidental, or consequential damages of any character arising as a -result of this License or out of the use or inability to use the -Work (including but not limited to damages for loss of goodwill, -work stoppage, computer failure or malfunction, or any and all -other commercial damages or losses), even if such Contributor -has been advised of the possibility of such damages. - -9. Accepting Warranty or Additional Liability. While redistributing -the Work or Derivative Works thereof, You may choose to offer, -and charge a fee for, acceptance of support, warranty, indemnity, -or other liability obligations and/or rights consistent with this -License. However, in accepting such obligations, You may act only -on Your own behalf and on Your sole responsibility, not on behalf -of any other Contributor, and only if You agree to indemnify, -defend, and hold each Contributor harmless for any liability -incurred by, or claims asserted against, such Contributor by reason -of your accepting any such warranty or additional liability. - -END OF TERMS AND CONDITIONS - -APPENDIX: How to apply the Flora License to your work - -To apply the Flora License to your work, attach the following -boilerplate notice, with the fields enclosed by brackets "[]" -replaced with your own identifying information. (Don't include -the brackets!) The text should be enclosed in the appropriate -comment syntax for the file format. We also recommend that a -file or class name and description of purpose be included on the -same "printed page" as the copyright notice for easier -identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Flora License, Version 1.1 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://floralicense.org/license/ - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - diff --git a/NOTICE b/NOTICE old mode 100755 new mode 100644 index db64ab0..b2e5019 --- a/NOTICE +++ b/NOTICE @@ -1,3 +1 @@ -Copyright (c) 2012 Samsung Electronics Co., Ltd. All rights reserved. -Except as noted, this software is licensed under Flora License, Version 1.1 -Please, see the LICENSE file for Flora License, Version 1.1 terms and conditions. +Copyright (c) 2000 - 2015 Samsung Electronics Co., Ltd. All rights reserved. diff --git a/debian/changelog b/debian/changelog deleted file mode 100755 index b157545..0000000 --- a/debian/changelog +++ /dev/null @@ -1,536 +0,0 @@ -starter (0.4.59) unstable; urgency=low - - * Git: slp/pkgs/s/starter - * Tag: starter_0.4.59 - - * Modify the service file : remove an unused field - - -- Jin Yoon Tue, 02 Apr 2013 13:08:59 +0900 - -starter (0.4.58) unstable; urgency=low - - * Git: slp/pkgs/s/starter - * Tag: starter_0.4.58 - - * Remove an unused vconf setting - - -- Jin Yoon Mon, 11 Mar 2013 16:23:50 +0900 - -starter (0.4.56) unstable; urgency=low - - * Git: slp/pkgs/s/starter - * Tag: starter_0.4.56 - - * Do not destroy ail resources when ail returns an error code - - -- Jin Yoon Mon, 04 Feb 2013 19:05:45 +0900 - -starter (0.4.55) unstable; urgency=low - - * fix manifest file. - - -- minho07.kim Thu, 31 Jan 2013 11:34:26 +0900 - -starter (0.4.54) unstable; urgency=low - - * update manifest file. - - -- minho07.kim Wed, 30 Jan 2013 19:03:11 +0900 - -starter (0.4.51) unstable; urgency=low - - * Git: slp/pkgs/s/starter - * Tag: starter_0.4.51 - - * EFL Menu-screen & Lock-screen - - -- Jin Yoon Fri, 11 Jan 2013 15:35:10 +0900 - -starter (0.4.47) unstable; urgency=low - - * Git: slp/pkgs/s/starter - * Tag: starter_0.4.47 - - * Package name : Package name : org.tizen.menu-screen -> cwkuromqdr.Home, org.tizen.lockscreen -> sgooa9p9fz.Lock - - -- Jin Yoon Fri, 21 Dec 2012 20:31:10 +0900 - -starter (0.4.6-2) unstable; urgency=low - - * temporal release for Orangey - * Git: slp/pkgs/s/starter - * Tag: starter_0.4.6-2 - - -- youngsub ko Fri, 01 Jun 2012 14:02:49 +0900 - -starter (0.4.6-1) unstable; urgency=low - - * Changing vconf key-path according to naming policy - * Git: slp/pkgs/s/starter - * Tag: starter_0.4.6-1 - - -- youngsub ko Thu, 31 May 2012 19:25:22 +0900 - -starter (0.4.5-1) unstable; urgency=low - - * apply livebox lockscreen to default setting - * Git: slp/pkgs/s/starter - * Tag: starter_0.4.5-1 - - -- Seungtaek Chung Thu, 24 May 2012 21:03:29 +0900 - -starter (0.4.4-1) unstable; urgency=low - - * new vconf policy was applied - * Git: slp/pkgs/s/starter - * Tag: starter_0.4.4-1 - - -- youngsub ko Thu, 24 May 2012 16:20:20 +0900 - -starter (0.4.3-2) unstable; urgency=low - - * Removed "/usr/share/*" files from debian/redhat packages - * Git: slp/pkgs/s/starter - * Tag: starter_0.4.3-2 - - -- youngsub ko Mon, 14 May 2012 10:39:32 +0900 - -starter (0.4.3-1) unstable; urgency=low - - * remove set elm entry - * Git: slp/pkgs/s/starter - * Tag: starter_0.4.3-1 - - -- Seungtaek Chung Wed, 18 Apr 2012 11:20:12 +0900 - -starter (0.4.2-1) unstable; urgency=low - - * apply phone lock launching interface - * Git: slp/pkgs/s/starter - * Tag: starter_0.4.2-1 - - -- Seungtaek Chung Sat, 07 Apr 2012 23:30:39 +0900 - -starter (0.4.1-1) unstable; urgency=low - - * Add cancel button in password view - * Git: slp/pkgs/s/starter - * Tag: starter_0.4.1-1 - - -- Mi-Ju Lee Wed, 21 Mar 2012 21:12:34 +0900 - -starter (0.4.0-1) unstable; urgency=low - - * Change desktop file for TIZEN - * Git: slp/pkgs/s/starter - * Tag: starter_0.4.0-1 - - -- Mi-Ju Lee Thu, 15 Mar 2012 19:28:01 +0900 - -starter (0.3-51) unstable; urgency=low - - * apply efl migration - * Git: slp/pkgs/s/starter - * Tag: starter_0.3-51 - - -- Seungtaek Chung Wed, 14 Mar 2012 14:21:15 +0900 - -starter (0.3-50) unstable; urgency=low - - * apply efl deprecation - * Git: slp/pkgs/s/starter - * Tag: starter_0.3-50 - - -- Seungtaek Chung Fri, 02 Mar 2012 16:32:50 +0900 - -starter (0.3-49) unstable; urgency=low - - * block set scale window - * Git: slp/pkgs/s/starter - * Tag: starter_0.3-49 - - -- Seungtaek Chung Wed, 29 Feb 2012 19:17:53 +0900 - -starter (0.3-48) unstable; urgency=low - - * block set window scale - * Git: slp/pkgs/s/starter - * Tag: starter_0.3-48 - - -- Seungtaek Chung Wed, 29 Feb 2012 18:42:54 +0900 - -starter (0.3-47) unstable; urgency=low - - * fix launch lock screen - * Git: slp/pkgs/s/starter - * Tag: starter_0.3-47 - - -- Seungtaek Chung Tue, 28 Feb 2012 14:56:18 +0900 - -starter (0.3-46) unstable; urgency=low - - * apply input window - * Git: slp/pkgs/s/starter - * Tag: starter_0.3-46 - - -- Seungtaek Chung Wed, 22 Feb 2012 14:21:08 +0900 - -starter (0.3-45) unstable; urgency=low - - * apply efl migration - * Git: slp/pkgs/s/starter - * Tag: starter_0.3-45 - - -- Seungtaek Chung Thu, 16 Feb 2012 20:32:05 +0900 - -starter (0.3-44) unstable; urgency=low - - * fix xwindow - * Git: slp/pkgs/s/starter - * Tag: starter_0.3-44 - - -- Seungtaek Chung Mon, 02 Jan 2012 18:03:13 +0900 - -starter (0.3-43) unstable; urgency=low - - * set lock class name - * Git: slp/pkgs/s/starter - * Tag: starter_0.3-43 - - -- Seungtaek Chung Mon, 02 Jan 2012 17:40:25 +0900 - -starter (0.3-42) unstable; urgency=low - - * set lock alpha - * Git: slp/pkgs/s/starter - * Tag: starter_0.3-42 - - -- Seungtaek Chung Wed, 28 Dec 2011 14:26:23 +0900 - -starter (0.3-41) unstable; urgency=low - - * fix lock state - * Git: slp/pkgs/s/starter - * Tag: starter_0.3-41 - - -- Seungtaek Chung Mon, 26 Dec 2011 17:27:15 +0900 - -starter (0.3-40) unstable; urgency=low - - * remove tizen subfolder - * Git: slp/pkgs/s/starter - * Tag: starter_0.3-40 - - -- Seungtaek Chung Mon, 19 Dec 2011 14:03:33 +0900 - -starter (0.3-39) unstable; urgency=low - - * fix phone lock operation - * Git: 165.213.180.234:slp/pkgs/s/starter - * Tag: starter_0.3-39 - - -- Seungtaek Chung Fri, 09 Dec 2011 21:04:27 +0900 - -starter (0.3-38) unstable; urgency=low - - * fix homekey operation - * Git: 165.213.180.234:slp/pkgs/s/starter - * Tag: starter_0.3-38 - - -- Seungtaek Chung Thu, 08 Dec 2011 13:47:04 +0900 - -starter (0.3-37) unstable; urgency=low - - * fix set property for phone lock - * Git: 165.213.180.234:slp/pkgs/s/starter - * Tag: starter_0.3-37 - - -- Seungtaek Chung Tue, 06 Dec 2011 16:51:07 +0900 - -starter (0.3-36) unstable; urgency=low - - * apply reset lock screen when lcd is off - * Git: 165.213.180.234:slp/pkgs/s/starter - * Tag: starter_0.3-36 - - -- Seungtaek Chung Fri, 02 Dec 2011 22:59:26 +0900 - -starter (0.3-35) unstable; urgency=low - - * fix selecting lockscreen - * Git: 165.213.180.234:slp/pkgs/s/starter - * Tag: starter_0.3-35 - - -- Seungtaek Chung Wed, 30 Nov 2011 14:12:12 +0900 - -starter (0.3-34) unstable; urgency=low - - * fix setting lockscreen - * Git: 165.213.180.234:slp/pkgs/s/starter - * Tag: starter_0.3-34 - - -- Seungtaek Chung Tue, 29 Nov 2011 09:48:02 +0900 - -starter (0.3-33) unstable; urgency=low - - * remove lockd_launch_first_lockscreen - * Git: 165.213.180.234:slp/pkgs/s/starter - * Tag: starter_0.3-33 - - -- Seungtaek Chung Sat, 26 Nov 2011 16:47:48 +0900 - -starter (0.3-32) unstable; urgency=low - - * fix launching phone lock app - * Git: 165.213.180.234:slp/pkgs/s/starter - * Tag: starter_0.3-32 - - -- Seungtaek Chung Sat, 26 Nov 2011 14:03:48 +0900 - -starter (0.3-31) unstable; urgency=low - - * apply open lock screen - * Git: 165.213.180.234:slp/pkgs/s/starter - * Tag: starter_0.3-31 - - -- Seungtaek Chung Mon, 21 Nov 2011 21:41:09 +0900 - -starter (0.3-30) unstable; urgency=low - - * apply tapi changes - * Git: 165.213.180.234:slp/pkgs/s/starter - * Tag: starter_0.3-30 - - -- Seungtaek Chung Thu, 29 Sep 2011 17:38:08 +0900 - -starter (0.3-29) unstable; urgency=low - - * fix prevent problem - * Git: 165.213.180.234:slp/pkgs/s/starter - * Tag: starter_0.3-29 - - -- Seungtaek Chung Sat, 20 Aug 2011 19:32:57 +0900 - -starter (0.3-28) unstable; urgency=low - - * fix aul launch error - * Git: 165.213.180.234:slp/pkgs/s/starter - * Tag: starter_0.3-28 - - -- Seungtaek Chung Fri, 01 Jul 2011 17:29:44 +0900 - -starter (0.3-27) unstable; urgency=low - - * added plock variable to identify menu screen showing time. - * Git: 165.213.180.234:slp/pkgs/s/starter - * Tag: starter_0.3-27 - - -- jeesun kim Thu, 12 May 2011 09:00:00 +0900 - -starter (0.3-26) unstable; urgency=low - - * modified log error when get vconf failed - * Git: 165.213.180.234:slp/pkgs/s/starter - * Tag: starter_0.3-26 - - -- jeesun kim Mon, 2 May 2011 09:00:00 +0900 - -starter (0.3-25) unstable; urgency=low - - * added debug message - * Git: 165.213.180.234:slp/pkgs/s/starter - * Tag: starter_0.3-25 - - -- jeesun kim Fri, 22 Apr 2011 18:00:00 +0900 - -starter (0.3-24) unstable; urgency=low - - * skipped "memory/startapps/sequence" set 1 when first boot - * Git: 165.213.180.234:slp/pkgs/s/starter - * Tag: starter_0.3-24 - - -- jeesun kim Wed, 14 Apr 2011 10:00:00 +0900 - -starter (0.3-23) unstable; urgency=low - - * removed deb from pwlock, added inhouse right in sequence - * Git: 165.213.180.234:slp/pkgs/s/starter - * Tag: starter_0.3-23 - - -- jeesun kim Wed, 14 Apr 2011 10:00:00 +0900 - -starter (0.3-22) unstable; urgency=low - - * commmented wm_ready in postinst file and tossed this to isf team. - * Git: 165.213.180.234:slp/pkgs/s/starter - * Tag: starter_0.3-22 - - -- jeesun kim Wed, 16 Mar 2011 09:36:31 +0900 - -starter (0.3-21) unstable; urgency=low - - * set starter text rd3 and rd4 - * Git: 165.213.180.234:slp/pkgs/s/starter - * Tag: starter_0.3-21 - - -- Jeesun kim Thu, 03 Mar 2011 14:44:37 +0900 - -starter (0.3-20) unstable; urgency=low - - * applied wm_ready (req from boot script) - * Git: 165.213.180.234:slp/pkgs/s/starter - * Tag: starter_0.3-20 - - -- Jeesun kim Wed, 23 Feb 2011 13:56:09 +0900 - -starter (0.3-19) unstable; urgency=low - - * added x11 package in control - * Git: 165.213.180.234:slp/pkgs/s/starter - * Tag: starter_0.3-19 - - -- Jeesun kim Thu, 10 Feb 2011 17:44:47 +0900 - -starter (0.3-18) unstable; urgency=low - - * path change /opt/apps/deb.com.samsung.pwlock/bin/pwlock - * Git: 165.213.180.234:slp/pkgs/s/starter - * Tag: starter_0.3-18 - - -- Jeesun kim Thu, 27 Jan 2011 17:19:13 +0900 - -starter (0.3-17) unstable; urgency=low - - * added theme set step when hibnation - * Git: 165.213.180.234:slp/pkgs/s/starter - * Tag: starter_0.3-17 - - -- Jeesun kim Thu, 13 Jan 2011 11:41:14 +0900 - -starter (0.3-16) unstable; urgency=low - - * modified action when SIM doesn't exist - * Git: 165.213.180.234:slp/pkgs/s/starter - * Tag: starter_0.3-16 - - -- Jeesun kim Thu, 06 Jan 2011 14:13:54 +0900 - -starter (0.3-15) unstable; urgency=low - - * set else statement when tapi state is none - * Git: 165.213.180.234:slp/pkgs/s/starter - * Tag: starter_0.3-15 - - -- Jeesun kim Mon, 13 Dec 2010 11:29:39 +0900 - -starter (0.3-14) unstable; urgency=low - - * added dbg package - * Git: 165.213.180.234:/git/slp/pkgs/starter - * Tag: starter_0.3-14 - - -- Jeesun kim Tue, 30 Nov 2010 11:10:22 +0900 - -starter (0.3-13) unstable; urgency=low - - * hibernation set : starter_ready set 1 - * Git: 165.213.180.234:/git/slp/pkgs/starter - * Tag: starter_0.3-13 - - -- Jeesun kim Tue, 23 Nov 2010 17:37:15 +0900 - -starter (0.3-12) unstable; urgency=low - - * set hib check_ready - * Git: 165.213.180.234:/git/slp/pkgs/starter - * Tag: starter_0.3-12 - - -- Jeesun kim Fri, 12 Nov 2010 09:26:05 +0900 - -starter (0.3-11) unstable; urgency=low - - * Add hib leave - * Git: 165.213.180.234:/git/slp/pkgs/starter - * Tag: starter_0.3-11 - - -- Suchang Woo Mon, 25 Oct 2010 19:05:00 +0900 - -starter (0.3-10) unstable; urgency=low - - * Remove startup script - * Git: 165.213.180.234:/git/slp/pkgs/starter - * Tag: starter_0.3-10 - - -- Suchang Woo Wed, 20 Oct 2010 15:52:53 +0900 - -starter (0.3-9) unstable; urgency=low - - * Reset timeout every transition - * Git: 165.213.180.234:/git/slp/pkgs/starter - * Tag: starter_0.3-9 - - -- Suchang Woo Tue, 12 Oct 2010 17:16:38 +0900 - -starter (0.3-8) unstable; urgency=low - - * Increase SIM check timeout - * Git: 165.213.180.234:/git/slp/pkgs/starter - * Tag: starter_0.3-8 - - -- Suchang Woo Thu, 07 Oct 2010 17:49:26 +0900 - -starter (0.3-7) unstable; urgency=low - - * Wait for TAPI ready - * Git: 165.213.180.234:/git/slp/pkgs/starter - * Tag: starter_0.3-7 - - -- Suchang Woo Thu, 07 Oct 2010 11:36:40 +0900 - -starter (0.3-6) unstable; urgency=low - - * Do not check first boot - * Git: 165.213.180.234:/git/slp/pkgs/starter - * Tag: starter_0.3-6 - - -- Suchang Woo Mon, 04 Oct 2010 19:35:37 +0900 - -starter (0.3-5) unstable; urgency=low - - * add entry setting - * Git: 165.213.180.234:/git/slp/pkgs/starter - * Tag: starter_0.3-5 - - -- Suchang Woo Fri, 01 Oct 2010 20:49:01 +0900 - -starter (0.3-4) unstable; urgency=low - - * quit after pwlock launching - * Git: 165.213.180.234:/git/slp/pkgs/starter - * Tag: starter_0.3-4 - - -- Suchang Woo Fri, 01 Oct 2010 17:31:51 +0900 - -starter (0.3-3) unstable; urgency=low - - * modify for language selection - * Git: 165.213.180.234:/git/slp/pkgs/starter - * Tag: starter_0.3-3 - - -- Suchang Woo Tue, 28 Sep 2010 20:19:54 +0900 - -starter (0.3-2) unstable; urgency=low - - * unlock menu screen even if exited with error - * Git: 165.213.180.234:/git/slp/pkgs/starter - * Tag: starter_0.3-2 - - -- Suchang Woo Wed, 15 Sep 2010 15:06:18 +0900 - -starter (0.3-1) unstable; urgency=low - - * Rewrite the code - * Git: 165.213.180.234:/git/slp/pkgs/starter - * Tag: starter_0.3-1 - - -- Suchang Woo Fri, 23 Apr 2010 20:30:14 +0900 diff --git a/debian/compat b/debian/compat deleted file mode 100755 index 7ed6ff8..0000000 --- a/debian/compat +++ /dev/null @@ -1 +0,0 @@ -5 diff --git a/debian/control b/debian/control deleted file mode 100755 index 557f975..0000000 --- a/debian/control +++ /dev/null @@ -1,19 +0,0 @@ -Source: starter -Section: devel -Priority: extra -Maintainer: Seungtaek Chung , Mi-Ju Lee , Xi Zhichan -Build-Depends: debhelper (>= 5), libappcore-efl-dev, libglib2.0-dev, libslp-tapi-dev, libslp-setting-dev, libheynoti-dev, libaul-1-dev, libx11-dev, libelm-dev, libefreet-dev, dlog-dev, libecore-dev, libsvi-dev, libslp-utilx-dev, libail-0-dev, libui-gadget-dev, libslp-sysman-dev, pkgmgr-info-dev -Standards-Version: 3.7.2 - -Package: starter -Section: admin -Architecture: any -Depends: ${shlibs:Depends}, ${misc:Depends} -Description: starter - -Package: starter-dbg -Section: debug -Architecture: any -Depends: ${shlibs:Depends}, ${misc:Depends} -Description: starter (unstripped) - diff --git a/debian/rules b/debian/rules deleted file mode 100755 index 6bf3469..0000000 --- a/debian/rules +++ /dev/null @@ -1,112 +0,0 @@ -#!/usr/bin/make -f -# -*- makefile -*- -# Sample debian/rules that uses debhelper. -# This file was originally written by Joey Hess and Craig Small. -# As a special exception, when this file is copied by dh-make into a -# dh-make output file, you may use that output file without restriction. -# This special exception was added by Craig Small in version 0.37 of dh-make. - -# Uncomment this to turn on verbose mode. -#export DH_VERBOSE=1 - -CFLAGS ?= -Wall -g -LDFLAGS ?= -PREFIX ?= /usr -DATADIR ?= /usr/share - -ifneq (,$(findstring noopt,$(DEB_BUILD_OPTIONS))) - CFLAGS += -O0 -else - CFLAGS += -O2 -endif - -LDFLAGS += -Wl,--rpath=$(PREFIX)/lib -Wl,--as-needed - -CMAKE_BUILD_DIR ?= $(CURDIR)/cmake_build_tmp - -configure: configure-stamp -configure-stamp: - dh_testdir - # Add here commands to configure the package. - mkdir -p $(CMAKE_BUILD_DIR) && cd $(CMAKE_BUILD_DIR) && \ - CFLAGS="$(CFLAGS)" LDFLAGS="$(LDFLAGS)" cmake .. -DCMAKE_INSTALL_PREFIX="$(PREFIX)" - - touch configure-stamp - -build: build-stamp - -build-stamp: configure-stamp - dh_testdir - - # Add here commands to compile the package. - cd $(CMAKE_BUILD_DIR) && $(MAKE) - - for f in `find $(CURDIR)/debian/ -name "*.in"`; do \ - cat $$f > $${f%.in}; \ - sed -i -e "s#@PREFIX@#$(PREFIX)#g" $${f%.in}; \ - sed -i -e "s#@DATADIR@#$(DATADIR)#g" $${f%.in}; \ - done - - touch $@ - -clean: - dh_testdir - dh_testroot - rm -f build-stamp configure-stamp - - # Add here commands to clean up after the build process. - rm -rf $(CMAKE_BUILD_DIR) - - for f in `find $(CURDIR)/debian/ -name "*.in"`; do \ - rm -f $${f%.in}; \ - done - - dh_clean - -install: build - dh_testdir - dh_testroot - dh_clean -k - dh_installdirs - - # Add here commands to install the package into debian/wavplayer. - cd $(CMAKE_BUILD_DIR) && $(MAKE) DESTDIR=$(CURDIR)/debian/tmp install - - -# Build architecture-independent files here. -binary-indep: build install -# We have nothing to do by default. - -# Build architecture-dependent files here. -binary-arch: build install - dh_testdir - dh_testroot -# dh_installchangelogs -# dh_installdocs - dh_installexamples - dh_install --sourcedir=debian/tmp -# dh_installmenu -# dh_installdebconf -# dh_installlogrotate -# dh_installemacsen -# dh_installpam -# dh_installmime -# dh_python -# dh_installinit -# dh_installcron -# dh_installinfo - dh_installman - dh_link - dh_strip --dbg-package=starter-dbg - dh_compress - dh_fixperms -# dh_perl - dh_makeshlibs - dh_installdeb - dh_shlibdeps - dh_gencontrol - dh_md5sums - dh_builddeb - -binary: binary-indep binary-arch -.PHONY: build clean binary-indep binary-arch binary install configure diff --git a/debian/starter.install.in b/debian/starter.install.in deleted file mode 100755 index 464e764..0000000 --- a/debian/starter.install.in +++ /dev/null @@ -1,4 +0,0 @@ -@PREFIX@/bin/* -@PREFIX@/lib/* -/etc/init.d/* -/opt/ug/* diff --git a/debian/starter.postinst b/debian/starter.postinst deleted file mode 100755 index f1f673f..0000000 --- a/debian/starter.postinst +++ /dev/null @@ -1,14 +0,0 @@ -#!/bin/sh - -vconftool set -t int "memory/starter/sequence" 0 -i -u 5000 -g 5000 - -vconftool set -t string file/private/lockscreen/pkgname "org.tizen.lockscreen" -u 5000 -g 5000 - -vconftool -i set -t int memory/idle_lock/state "0" -u 5000 -g 5000 - -vconftool -i set -t bool memory/lockscreen/phone_lock_verification "0" -u 5000 -g 5000 - -ln -sf /etc/init.d/rd4starter /etc/rc.d/rc4.d/S81starter -ln -sf /etc/init.d/rd3starter /etc/rc.d/rc3.d/S43starter - -sync diff --git a/include/dbus_util.h b/include/dbus_util.h new file mode 100644 index 0000000..c958416 --- /dev/null +++ b/include/dbus_util.h @@ -0,0 +1,51 @@ +/* + * Copyright (c) 2000 - 2015 Samsung Electronics Co., Ltd. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef __DBUS_UTIL_H__ +#define __DBUS_UTIL_H__ + +#include + +#define OOM_ADJ_VALUE_HOMESCREEN 0 + +#ifdef TIZEN_PROFILE_MOBILE +#define OOM_ADJ_VALUE_DEFAULT 200 +#else +#define OOM_ADJ_VALUE_DEFAULT 0 +#endif + +#define DEVICED_BUS_NAME "org.tizen.system.deviced" +#define DEVICED_OBJECT_PATH "/Org/Tizen/System/DeviceD" +#define DEVICED_INTERFACE_NAME DEVICED_BUS_NAME +#define DEVICED_PATH DEVICED_OBJECT_PATH"/Process" +#define DEVICED_INTERFACE DEVICED_INTERFACE_NAME".Process" +#define DEVICED_SET_METHOD "oomadj_set" + +#define DISPLAY_OBJECT_PATH DEVICED_OBJECT_PATH"/Display" +#define DEVICED_INTERFACE_DISPLAY DEVICED_INTERFACE_NAME".display" +#define MEMBER_LCD_ON "LCDOn" +#define MEMBER_LCD_OFF "LCDOff" + +extern void dbus_util_send_home_raise_signal(void); +extern int dbus_util_send_oomadj(int pid, int oom_adj_value); +extern void dbus_util_send_cpu_booster_signal(void); +extern void dbus_util_send_poweroff_signal(void); +extern void dbus_util_send_lock_PmQos_signal(void); + +extern int dbus_util_receive_lcd_status(void (*changed_cb)(void *data, DBusMessage *msg), void *data); +extern char *dbus_util_msg_arg_get_str(DBusMessage *msg); + +#endif //__DBUS_UTIL_H__ diff --git a/include/hw_key.h b/include/hw_key.h deleted file mode 100755 index 42d891d..0000000 --- a/include/hw_key.h +++ /dev/null @@ -1,22 +0,0 @@ - /* - * Copyright 2012 Samsung Electronics Co., Ltd - * - * Licensed under the Flora License, Version 1.1 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://floralicense.org/license/ - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - - - -extern void destroy_key_window(void); -extern void create_key_window(void); - -// End of a file diff --git a/include/lock-daemon.h b/include/lock-daemon.h deleted file mode 100755 index 268d945..0000000 --- a/include/lock-daemon.h +++ /dev/null @@ -1,24 +0,0 @@ - /* - * Copyright 2012 Samsung Electronics Co., Ltd - * - * Licensed under the Flora License, Version 1.1 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://floralicense.org/license/ - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - - - -#ifndef __LOCK_DAEMON_H__ -#define __LOCK_DAEMON_H__ - -int start_lock_daemon(int launch_lock); - -#endif diff --git a/include/lockd-debug.h b/include/lockd-debug.h deleted file mode 100755 index 07a3835..0000000 --- a/include/lockd-debug.h +++ /dev/null @@ -1,64 +0,0 @@ - /* - * Copyright 2012 Samsung Electronics Co., Ltd - * - * Licensed under the Flora License, Version 1.1 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://floralicense.org/license/ - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - - - -#ifndef __LOCKD_DEBUG_H__ -#define __LOCKD_DEBUG_H__ - -#include -#include - -#ifdef LOG_TAG -#undef LOG_TAG -#endif - -#define LOG_TAG "starter" - -#define ENABLE_LOG_SYSTEM - -void lockd_log_t(char *fmt, ...); - -#ifdef ENABLE_LOG_SYSTEM -#define STARTER_ERR(fmt, arg...) LOGE("["LOG_TAG"%s:%d:E] "fmt, __FILE__, __LINE__, ##arg) -#define STARTER_DBG(fmt, arg...) LOGD("["LOG_TAG"%s:%d:D] "fmt, __FILE__, __LINE__, ##arg) -#else -#define STARTER_ERR(fmt, arg...) -#define STARTER_DBG(fmt, arg...) -#endif - -#ifdef ENABLE_LOG_SYSTEM -#define _ERR(fmt, arg...) do { STARTER_ERR(fmt, ##arg); lockd_log_t("["LOG_TAG":%d:E] "fmt, __LINE__, ##arg); } while (0) -#define _DBG(fmt, arg...) do { STARTER_DBG(fmt, ##arg); lockd_log_t("["LOG_TAG":%d:D] "fmt, __LINE__, ##arg); } while (0) - -#define LOCKD_ERR(fmt, arg...) _ERR(fmt, ##arg) -#define LOCKD_DBG(fmt, arg...) _DBG(fmt, ##arg) -#else -#define _ERR(...) -#define _DBG(...) - -#define LOCKD_ERR(...) -#define LOCKD_ERR(...) -#endif - -#ifndef TRUE -#define TRUE 1 -#endif -#ifndef FALSE -#define FALSE 0 -#endif - -#endif diff --git a/include/lockd-process-mgr.h b/include/lockd-process-mgr.h deleted file mode 100755 index 195f73f..0000000 --- a/include/lockd-process-mgr.h +++ /dev/null @@ -1,38 +0,0 @@ - /* - * Copyright 2012 Samsung Electronics Co., Ltd - * - * Licensed under the Flora License, Version 1.1 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://floralicense.org/license/ - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - - - -#ifndef __LOCKD_PROCESS_MGR_H__ -#define __LOCKD_PROCESS_MGR_H__ - -int lockd_process_mgr_start_lock(void *data, int (*dead_cb) (int, void *), - int phone_lock_state); - -int lockd_process_mgr_restart_lock(int phone_lock_state); - -int lockd_process_mgr_start_phone_lock(void); - -int lockd_process_mgr_start_normal_lock(void *data, int (*dead_cb) (int, void *)); - -void lockd_process_mgr_terminate_lock_app(int lock_app_pid, - int state); - -void lockd_process_mgr_terminate_phone_lock(int phone_lock_pid); - -int lockd_process_mgr_check_lock(int pid); - -#endif diff --git a/include/lockd-window-mgr.h b/include/lockd-window-mgr.h deleted file mode 100755 index d30ab31..0000000 --- a/include/lockd-window-mgr.h +++ /dev/null @@ -1,42 +0,0 @@ - /* - * Copyright 2012 Samsung Electronics Co., Ltd - * - * Licensed under the Flora License, Version 1.1 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://floralicense.org/license/ - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - - - -#ifndef __LOCKD_WINDOW_MGR_H__ -#define __LOCKD_WINDOW_MGR_H__ - -typedef struct _lockw_data lockw_data; - -Eina_Bool -lockd_window_set_window_property(lockw_data * data, int lock_app_pid, - void *event); - -Eina_Bool -lockd_window_set_window_effect(lockw_data * data, int lock_app_pid, - void *event); - -void lockd_window_set_phonelock_pid(lockw_data * data, int phone_lock_pid); - -void -lockd_window_mgr_ready_lock(void *data, lockw_data * lockw, - Eina_Bool(*create_cb) (void *, int, void *), - Eina_Bool(*show_cb) (void *, int, void *)); - -void lockd_window_mgr_finish_lock(lockw_data * lockw); - -lockw_data *lockd_window_init(void); -#endif diff --git a/include/menu_daemon.h b/include/menu_daemon.h deleted file mode 100755 index de3e843..0000000 --- a/include/menu_daemon.h +++ /dev/null @@ -1,36 +0,0 @@ - /* - * Copyright 2012 Samsung Electronics Co., Ltd - * - * Licensed under the Flora License, Version 1.1 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://floralicense.org/license/ - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - - - -#include -#include -#include - -extern void menu_daemon_init(void *data); -extern void menu_daemon_fini(void); - -extern int menu_daemon_open_app(const char *pkgname); -extern int menu_daemon_launch_app(const char *pkgname, bundle *b); - -extern bool menu_daemon_is_homescreen(pid_t pid); - -extern int menu_daemon_check_dead_signal(int pid); - -extern char *menu_daemon_get_selected_pkgname(void); -extern void menu_daemon_open_homescreen(const char *pkgname); - -// End of a file diff --git a/include/mobile/home_mgr.h b/include/mobile/home_mgr.h new file mode 100644 index 0000000..e0d0fc7 --- /dev/null +++ b/include/mobile/home_mgr.h @@ -0,0 +1,27 @@ +/* + * Copyright (c) 2000 - 2015 Samsung Electronics Co., Ltd. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include + +extern void home_mgr_init(void *data); +extern void home_mgr_fini(void); + +extern int home_mgr_check_dead_signal(int pid, void *data); +extern int home_mgr_open_home(const char *pkgname); + +// End of a file diff --git a/include/mobile/hw_key.h b/include/mobile/hw_key.h new file mode 100644 index 0000000..c1e4857 --- /dev/null +++ b/include/mobile/hw_key.h @@ -0,0 +1,39 @@ +/* + * Copyright (c) 2000 - 2015 Samsung Electronics Co., Ltd. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef __HW_KEY_H__ +#define __HW_KEY_H__ + +#define KEY_VOLUMEUP "XF86AudioRaiseVolume" +#define KEY_VOLUMEDOWN "XF86AudioLowerVolume" +#define KEY_HOME "XF86Home" +#define KEY_CONFIG "XF86Camera_Full" +#define KEY_SEARCH "XF86Search" +#define KEY_MEDIA "XF86AudioMedia" +#define KEY_TASKSWITCH "XF86TaskPane" +#define KEY_WEBPAGE "XF86WWW" +#define KEY_MAIL "XF86Mail" +#define KEY_VOICE "XF86Voice" +#define KEY_APPS "XF86Apps" +#define KEY_CONNECT "XF86Call" +#define KEY_BACK "XF86Back" + +extern void hw_key_destroy_window(void); +extern void hw_key_create_window(void); + +#endif + +// End of a file diff --git a/include/mobile/lock_mgr.h b/include/mobile/lock_mgr.h new file mode 100644 index 0000000..f21cfaf --- /dev/null +++ b/include/mobile/lock_mgr.h @@ -0,0 +1,62 @@ +/* + * Copyright (c) 2000 - 2015 Samsung Electronics Co., Ltd. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef __LOCK_DAEMON_H__ +#define __LOCK_DAEMON_H__ + +#include +#include +#include + +#include "window_mgr.h" + +#define _EDJ(x) elm_layout_edje_get(x) + +#define LOCK_MGR_DEFAULT_PKG_NAME "org.tizen.lockscreen" + +#ifdef TIZEN_BUILD_EMULATOR +#define LOCK_MGR_DEFAULT_BG_PATH "/opt/share/settings/Wallpapers/Default.jpg" +#else +#define LOCK_MGR_DEFAULT_BG_PATH "/opt/share/settings/Wallpapers/Lock_default.png" +#endif + + + +typedef enum { + LOCK_SOUND_LOCK, + LOCK_SOUND_UNLOCK, + LOCK_SOUND_BTN_KEY, + LOCK_SOUND_TAP, + LOCK_SOUND_MAX, +} lock_sound_type_e; + +typedef enum { + LCD_STATE_ON, + LCD_STATE_OFF, + LCD_STATE_MAX, +} lock_lcd_state_e; + +int lock_mgr_lcd_state_get(void); +int lock_mgr_lock_pid_get(void); +void lock_mgr_sound_play(lock_sound_type_e type); + +void lock_mgr_idle_lock_state_set(int lock_state); +Eina_Bool lock_mgr_lockscreen_launch(void); + +int lock_mgr_daemon_start(void); +void lock_mgr_daemon_end(void); + +#endif /* __LOCK_DAEMON_H__ */ diff --git a/include/mobile/lock_pwd_complex.h b/include/mobile/lock_pwd_complex.h new file mode 100644 index 0000000..69e8b05 --- /dev/null +++ b/include/mobile/lock_pwd_complex.h @@ -0,0 +1,28 @@ +/* + * Copyright (c) 2000 - 2015 Samsung Electronics Co., Ltd. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef __LOCK_PWD_COMPLEX_H__ +#define __LOCK_PWD_COMPLEX_H__ + +#include "lock_pwd_verification.h" + +Eina_Bool lock_pwd_complex_is_blocked_get(void); +void lock_pwd_complex_event(lock_pwd_event_e event); +Evas_Object *lock_pwd_complex_layout_create(void *data); +void lock_pwd_complex_layout_del(void); +void lock_pwd_complex_view_init(void); + +#endif diff --git a/include/mobile/lock_pwd_control_panel.h b/include/mobile/lock_pwd_control_panel.h new file mode 100644 index 0000000..ddc4770 --- /dev/null +++ b/include/mobile/lock_pwd_control_panel.h @@ -0,0 +1,27 @@ +/* + * Copyright (c) 2000 - 2015 Samsung Electronics Co., Ltd. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef __LOCK_PWD_CONTROL_PANEL_H__ +#define __LOCK_PWD_CONTROL_PANEL_H__ + +void lock_pwd_control_panel_cancel_btn_enable_set(Eina_Bool enable); + +Evas_Object *lock_pwd_control_panel_create(Evas_Object *parent); +void lock_pwd_control_panel_del(void); + +void lock_pwd_control_panel_pause(void); +void lock_pwd_control_panel_resume(void); +#endif diff --git a/include/mobile/lock_pwd_simple.h b/include/mobile/lock_pwd_simple.h new file mode 100755 index 0000000..62a2429 --- /dev/null +++ b/include/mobile/lock_pwd_simple.h @@ -0,0 +1,30 @@ +/* + * Copyright (c) 2000 - 2015 Samsung Electronics Co., Ltd. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef __LOCK_PWD_SIMPLE_H__ +#define __LOCK_PWD_SIMPLE_H__ + +#include + +#include "lock_pwd_verification.h" + +Eina_Bool lock_pwd_simple_is_blocked_get(void); +Evas_Object *lock_pwd_simple_layout_create(void *data); +void lock_pwd_simple_layout_del(void); +void lock_pwd_simple_event(lock_pwd_event_e event); +void lock_pwd_simple_view_init(void); + +#endif diff --git a/include/mobile/lock_pwd_util.h b/include/mobile/lock_pwd_util.h new file mode 100644 index 0000000..2746fcd --- /dev/null +++ b/include/mobile/lock_pwd_util.h @@ -0,0 +1,38 @@ +/* + * Copyright (c) 2000 - 2015 Samsung Electronics Co., Ltd. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef __LOCK_PWD_UTIL_H__ +#define __LOCK_PWD_UTIL_H__ + +#define LOCK_PWD_EDJE_FILE "/usr/share/starter/res/edje/lock_pwd.edj" +#define LOCK_PWD_BTN_EDJE_FILE "/usr/share/starter/res/edje/lock_btn.edj" + +int lock_pwd_util_win_width_get(void); +int lock_pwd_util_win_height_get(void); + +void lock_pwd_util_create(Eina_Bool is_show); +void lock_pwd_util_del(void); + +void lock_pwd_util_popup_create(char *title, char *text, Evas_Smart_Cb func, double timeout); + +void lock_pwd_util_view_init(void); +void lock_pwd_util_back_key_relased(void); +Evas_Object *lock_pwd_util_win_get(void); +Eina_Bool lock_pwd_util_win_visible_get(void); +void lock_pwd_util_win_show(void); +void lock_pwd_util_win_hide(void); + +#endif diff --git a/include/mobile/lock_pwd_verification.h b/include/mobile/lock_pwd_verification.h new file mode 100755 index 0000000..bd7042d --- /dev/null +++ b/include/mobile/lock_pwd_verification.h @@ -0,0 +1,56 @@ +/* + * Copyright (c) 2000 - 2015 Samsung Electronics Co., Ltd. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef __LOCK_PWD_VERIFICATION_H__ +#define __LOCK_PWD_VERIFICATION_H__ + +#include + +#define PASSWORD_ATTEMPTS_MAX_NUM 5 +#define MAX_PASSWORD_NUM 4 +#define INFINITE_ATTEMPT 0 +#define PASSWORD_BLOCK_SECONDS 30 +#define PASSWORD_TIMESTAMP_STR_LENGTH 512 +#define VCONFKEY_SETAPPL_PASSWORD_TIMESTAMP_STR VCONFKEY_SETAPPL_PREFIX"/phone_lock_timestamp" + +typedef enum { + PWD_EVENT_CORRECT = 0, + PWD_EVENT_INCORRECT_WARNING = 1, + PWD_EVENT_INCORRECT, + PWD_EVENT_INPUT_BLOCK_WARNING, + PWD_EVENT_INPUT_BLOCK, + PWD_EVENT_EMPTY, + PWD_EVENT_OVER, +} lock_pwd_event_e; + +typedef struct { + unsigned int current_attempt; + unsigned int block_attempt; + unsigned int max_attempt; + unsigned int expire_sec; + unsigned int incorrect_count; + void *data; +} lock_pwd_policy; + +int lock_pwd_verification_current_attempt_get(void); +int lock_pwd_verification_remain_attempt_get(void); + +lock_pwd_event_e lock_pwd_verification_verify(const char *password); +void lock_pwd_verification_policy_create(void); + +void lock_pwd_verification_popup_create(lock_pwd_event_e event); + +#endif diff --git a/include/mobile/popup.h b/include/mobile/popup.h new file mode 100644 index 0000000..f8602ad --- /dev/null +++ b/include/mobile/popup.h @@ -0,0 +1,25 @@ +/* + * Copyright (c) 2000 - 2015 Samsung Electronics Co., Ltd. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef __POPUP_H__ +#define __POPUP_H__ + +#include + +extern Evas_Object *popup_create(const char *title, const char *text); + +#endif +// End of a file diff --git a/include/mobile/starter.h b/include/mobile/starter.h new file mode 100644 index 0000000..a9700c2 --- /dev/null +++ b/include/mobile/starter.h @@ -0,0 +1,27 @@ +/* + * Copyright (c) 2000 - 2015 Samsung Electronics Co., Ltd. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef __STARTER_H__ +#define __STARTER_H__ + +#include + +struct appdata { + struct timeval tv_start; /* start time */ + int lcd_status; +}; + +#endif /* __STARTER_H__ */ diff --git a/include/package_mgr.h b/include/package_mgr.h new file mode 100644 index 0000000..85b7d4c --- /dev/null +++ b/include/package_mgr.h @@ -0,0 +1,22 @@ +/* + * Copyright (c) 2000 - 2015 Samsung Electronics Co., Ltd. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef __PACKAGE_MGR_H__ +#define __PACKAGE_MGR_H__ + +extern bool package_mgr_exist_app(char *appid); + +#endif /* __PACKAGE_MGR_H__ */ diff --git a/include/pkg_event.h b/include/pkg_event.h deleted file mode 100755 index a9fb2cd..0000000 --- a/include/pkg_event.h +++ /dev/null @@ -1,46 +0,0 @@ - /* - * Copyright 2012 Samsung Electronics Co., Ltd - * - * Licensed under the Flora License, Version 1.1 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://floralicense.org/license/ - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - - - -#ifndef __NOTIFIER_H__ -#define __NOTIFIER_H__ -#include - -#if !defined(PUBLIC) -#define PUBLIC __attribute__((visibility("default"))) -#endif - -#if !defined(PROTECTED) -#define PROTECTED __attribute__((visibility("hidden"))) -#endif - -#if !defined(PRIVATE) -#define PRIVATE __attribute__((visibility("internal"))) -#endif - - -struct desktop_notifier { - int number; - int ifd; - Ecore_Fd_Handler *handler; -}; - - -PRIVATE void pkg_event_init(void); -PRIVATE void pkg_event_fini(void); - -#endif diff --git a/include/process_mgr.h b/include/process_mgr.h new file mode 100644 index 0000000..008dfae --- /dev/null +++ b/include/process_mgr.h @@ -0,0 +1,38 @@ +/* + * Copyright (c) 2000 - 2015 Samsung Electronics Co., Ltd. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef __PROCESS_MGR_H__ +#define __PROCESS_MGR_H__ + +typedef struct _process_mgr_s *process_mgr_h; + +typedef void (*after_func)(int pid); +typedef int (*change_func)(const char *, const char *, const char *, void *, void *); + +void process_mgr_must_launch(const char *appid, const char *key, const char *value, change_func cfn, after_func afn); +void process_mgr_must_open(const char *appid, change_func cfn, after_func afn); +void process_mgr_must_syspopup_launch(const char *appid, const char *key, const char *value, change_func cfn, after_func afn); + +extern void process_mgr_terminate_app(int lock_app_pid, int state); +extern void process_mgr_kill_app(int lock_app_pid); + +extern int process_mgr_validate_app(int pid); +extern int process_mgr_validate_call(int pid); + +extern int process_mgr_set_lock_priority(int pid); +extern int process_mgr_set_pwlock_priority(int pid); + +#endif /* __PROCESS_MGR_H__ */ diff --git a/include/starter-util.h b/include/starter-util.h deleted file mode 100755 index 117c9a4..0000000 --- a/include/starter-util.h +++ /dev/null @@ -1,35 +0,0 @@ - /* - * Copyright 2012 Samsung Electronics Co., Ltd - * - * Licensed under the Flora License, Version 1.1 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://floralicense.org/license/ - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - - - -#ifndef __STARTER_UTIL_H__ -#define __STARTER_UTIL_H__ - -#include -#include - -#define WRITE_FILE_LOG(fmt, arg...) do { \ - FILE *fp;\ - struct timeval tv; \ - gettimeofday(&tv, NULL); \ - fp = fopen("/var/log/boottime", "a+");\ - if (NULL == fp) break;\ - fprintf(fp, "%u%09u : "fmt"\n", (int) tv.tv_sec, (int) tv.tv_usec, ##arg); \ - fclose(fp);\ -} while (0) - -#endif diff --git a/include/starter-vconf.h b/include/starter-vconf.h deleted file mode 100755 index f75bb77..0000000 --- a/include/starter-vconf.h +++ /dev/null @@ -1,24 +0,0 @@ - /* - * Copyright 2012 Samsung Electronics Co., Ltd - * - * Licensed under the Flora License, Version 1.1 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://floralicense.org/license/ - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - - - -#ifndef __STARTER_VCONF_H__ -#define __STARTER_VCONF_H__ - -#define VCONF_PRIVATE_LOCKSCREEN_PKGNAME "file/private/lockscreen/pkgname" - -#endif diff --git a/include/starter.h b/include/starter.h deleted file mode 100755 index 00ee1e6..0000000 --- a/include/starter.h +++ /dev/null @@ -1,28 +0,0 @@ - /* - * Copyright 2012 Samsung Electronics Co., Ltd - * - * Licensed under the Flora License, Version 1.1 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://floralicense.org/license/ - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - - - -#ifndef __STARTER_H__ -#define __STARTER_H__ - -#include - -struct appdata { - struct timeval tv_start; -}; - -#endif diff --git a/include/status.h b/include/status.h new file mode 100644 index 0000000..879bdc7 --- /dev/null +++ b/include/status.h @@ -0,0 +1,92 @@ +/* + * Copyright (c) 2000 - 2015 Samsung Electronics Co., Ltd. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef __STATUS_H__ +#define __STATUS_H__ + +#include + +#ifndef VCONFKEY_STARTER_RESERVED_APPS_STATUS +/* 2 digits for reserved apps & popup */ +/* 0x01 : reserved apps */ +/* 0x10 : reserved popup */ +#define VCONFKEY_STARTER_RESERVED_APPS_STATUS "memory/starter/reserved_apps_status" +#endif + +#ifndef VCONFKEY_SETUP_WIZARD_FIRST_BOOT +#define VCONFKEY_SETUP_WIZARD_FIRST_BOOT "db/setup_wizard/first_boot" +#endif + +#define VCONFKEY_SETAPPL_PASSWORD_ATTEMPTS_LEFT_INT VCONFKEY_SETAPPL_PREFIX"/phone_lock_attempts_left" + +typedef enum { + STATUS_ACTIVE_KEY_INVALID = -1, + STATUS_ACTIVE_KEY_PM_STATE = 0, + STATUS_ACTIVE_KEY_SETAPPL_SELECTED_PACKAGE_NAME, + STATUS_ACTIVE_KEY_SETAPPL_SCREEN_LOCK_TYPE_INT, + STATUS_ACTIVE_KEY_STARTER_SEQUENCE, + STATUS_ACTIVE_KEY_SYSMAN_POWER_OFF_STATUS, + STATUS_ACTIVE_KEY_LANGSET, + STATUS_ACTIVE_KEY_MAX, +} status_active_key_e; + +struct status_active_s { + Eina_List *list[STATUS_ACTIVE_KEY_MAX]; + char *setappl_selected_package_name; + int setappl_screen_lock_type_int; + char *langset; + int pm_state; + int starter_sequence; + int sysman_power_off_status; +}; + +struct status_passive_s { + int setup_wizard_state; + int wms_wakeup_by_gesture_setting; + int setup_wizard_first_boot; + + int pm_key_ignore; + int pm_state; + int call_state; + int idle_lock_state; + int setappl_password_attempts_left_int; + int remote_lock_islocked; + int setappl_psmode; + int starter_reserved_apps_status; + int setappl_sound_lock_bool; + int setappl_motion_activation; + int setappl_use_pick_up; + int setappl_accessibility_lock_time_int; + int idle_screen_safemode; + int boot_animation_finished; + int setappl_ambient_mode_bool; + + char *setappl_3rd_lock_pkg_name_str; +}; +typedef struct status_passive_s *status_passive_h; +typedef struct status_active_s *status_active_h; +typedef int (*status_active_cb)(status_active_key_e key, void *data); + +extern status_active_h status_active_get(void); +extern status_passive_h status_passive_get(void); + +int status_active_register_cb(status_active_key_e key, status_active_cb func, void *data); +int status_active_unregister_cb(status_active_key_e key, status_active_cb func); + +extern int status_register(void); +extern void status_unregister(void); + +#endif //__STATUS_H__ diff --git a/include/util.h b/include/util.h old mode 100755 new mode 100644 index b59d2dc..bec5430 --- a/include/util.h +++ b/include/util.h @@ -1,33 +1,48 @@ - /* - * Copyright 2012 Samsung Electronics Co., Ltd - * - * Licensed under the Flora License, Version 1.1 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://floralicense.org/license/ - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - - +/* + * Copyright (c) 2000 - 2015 Samsung Electronics Co., Ltd. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ #ifndef __MENU_DAEMON_UTIL_H__ #define __MENU_DAEMON_UTIL_H__ #include #include #include - -#define HOME_SCREEN_PKG_NAME "org.tizen.menu-screen" +#include + +#define APP_TRAY_PKG_NAME "org.tizen.app-tray" +#define MENU_SCREEN_PKG_NAME "org.tizen.menu-screen" +#define PROVIDER_PKG_NAME "org.tizen.data-provider-master" +#define CLUSTER_HOME_PKG_NAME "org.tizen.cluster-home" +#define EASY_HOME_PKG_NAME "org.tizen.easy-home" +#define EASY_APPS_PKG_NAME "org.tizen.easy-apps" +#define HOMESCREEN_PKG_NAME "org.tizen.homescreen" +#define TASKMGR_PKG_NAME "org.tizen.task-mgr" +#define DEFAULT_TASKMGR_PKG_NAME "org.tizen.taskmgr" #define CONF_PATH_NUMBER 1024 +#define BUF_SIZE_16 16 +#define BUF_SIZE_32 32 +#define BUF_SIZE_128 128 +#define BUF_SIZE_256 256 +#define BUF_SIZE_512 512 +#define BUF_SIZE_1024 1024 + + #ifdef LOG_TAG #undef LOG_TAG -#define LOG_TAG "starter" +#define LOG_TAG "STARTER" #endif /* Log */ @@ -43,6 +58,18 @@ #define _E(fmt, arg...) LOGE("[%s:%d] "fmt"\n", __func__, __LINE__, ##arg) #endif +#if !defined(_SECURE_W) +#define _SECURE_W(fmt, arg...) SECURE_LOGW("[%s:%d] "fmt"\n", __func__, __LINE__, ##arg) +#endif + +#if !defined(_SECURE_D) +#define _SECURE_D(fmt, arg...) SECURE_LOGD("[%s:%d] "fmt"\n", __func__, __LINE__, ##arg) +#endif + +#if !defined(_SECURE_E) +#define _SECURE_E(fmt, arg...) SECURE_LOGE("[%s:%d] "fmt"\n", __func__, __LINE__, ##arg) +#endif + #define retv_if(expr, val) do { \ if(expr) { \ _E("(%s) -> %s() return", #expr, __FUNCTION__); \ @@ -92,6 +119,13 @@ fclose(fp);\ } while (0) +#if !defined(_) +#define _(str) dgettext(PACKAGE, str) +#endif + +#if !defined(S_) +#define S_(str) dgettext("sys_string", str) +#endif #endif /* __MENU_DAEMON_UTIL_H__ */ diff --git a/include/wearable/clock_mgr.h b/include/wearable/clock_mgr.h new file mode 100644 index 0000000..4f3af15 --- /dev/null +++ b/include/wearable/clock_mgr.h @@ -0,0 +1,23 @@ +/* + * Copyright (c) 2000 - 2015 Samsung Electronics Co., Ltd. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef __CLOCK_MGR_H__ +#define __CLOCK_MGR_H__ + +void clock_mgr_init(void); +void clock_mgr_fini(void); + +#endif /* __CLOCK_MGR_H__*/ diff --git a/include/wearable/home_mgr.h b/include/wearable/home_mgr.h new file mode 100644 index 0000000..d01a8ea --- /dev/null +++ b/include/wearable/home_mgr.h @@ -0,0 +1,27 @@ +/* + * Copyright (c) 2000 - 2015 Samsung Electronics Co., Ltd. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef __HOME_MGR_H__ +#define __HOME_MGR_H__ + +extern void home_mgr_launch_home(void); +extern void home_mgr_launch_home_first(void); +extern void home_mgr_launch_home_by_power(void); + +extern void home_mgr_init(void); +extern void home_mgr_fini(void); + +#endif /* __HOME_MGR_H__*/ diff --git a/include/wearable/hourly_alert.h b/include/wearable/hourly_alert.h new file mode 100644 index 0000000..a0ecf40 --- /dev/null +++ b/include/wearable/hourly_alert.h @@ -0,0 +1,24 @@ +/* + * Copyright (c) 2000 - 2015 Samsung Electronics Co., Ltd. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef __HOURLY_ALERT_H__ +#define __HOURLY_ALERT_H__ + + +void hourly_alert_init(void); +void hourly_alert_fini(void); + +#endif /* __HOURLY_ALERT_H__ */ diff --git a/include/wearable/hw_key.h b/include/wearable/hw_key.h new file mode 100644 index 0000000..a937000 --- /dev/null +++ b/include/wearable/hw_key.h @@ -0,0 +1,20 @@ +/* + * Copyright (c) 2000 - 2015 Samsung Electronics Co., Ltd. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +extern void hw_key_destroy_window(void); +extern void hw_key_create_window(void); + +// End of a file diff --git a/include/window_mgr.h b/include/window_mgr.h new file mode 100644 index 0000000..f966603 --- /dev/null +++ b/include/window_mgr.h @@ -0,0 +1,38 @@ +/* + * Copyright (c) 2000 - 2015 Samsung Electronics Co., Ltd. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef __WINDOW_MGR_H__ +#define __WINDOW_MGR_H__ + +typedef struct _lockw_data lockw_data; + +int window_mgr_get_focus_window_pid(void); +Eina_Bool window_mgr_set_prop(lockw_data * data, int lock_app_pid, void *event); +Eina_Bool window_mgr_set_effect(lockw_data * data, int lock_app_pid, void *event); + +void window_mgr_set_scroll_prop(lockw_data * data, int lock_type); +void window_mgr_register_event(void *data, lockw_data * lockw, + Eina_Bool (*create_cb) (void *, int, void *), + Eina_Bool (*show_cb) (void *, int, void *), + Eina_Bool (*hide_cb) (void *, int, void *)); +void window_mgr_unregister_event(lockw_data * lockw); + +lockw_data *window_mgr_init(void); +void window_mgr_fini(lockw_data *lockw); + +Evas_Object *window_mgr_pwd_lock_win_create(void); + +#endif /* __WINDOW_MGR_H__ */ diff --git a/include/x11.h b/include/x11.h deleted file mode 100755 index bad90a4..0000000 --- a/include/x11.h +++ /dev/null @@ -1,26 +0,0 @@ - /* - * Copyright 2012 Samsung Electronics Co., Ltd - * - * Licensed under the Flora License, Version 1.1 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://floralicense.org/license/ - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - - - -#ifndef __STARTER_X11_H__ -#define __STARTER_X11_H__ - -void prop_string_set(const char *name, const char *value); -void prop_int_set(const char *name, unsigned int val); -void set_window_scale(void); - -#endif diff --git a/include/xmonitor.h b/include/xmonitor.h deleted file mode 100755 index 097e613..0000000 --- a/include/xmonitor.h +++ /dev/null @@ -1,25 +0,0 @@ - /* - * Copyright 2012 Samsung Electronics Co., Ltd - * - * Licensed under the Flora License, Version 1.1 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://floralicense.org/license/ - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - - - -#ifndef __MENU_DAEMON_XMONITOR_H__ -#define __MENU_DAEMON_XMONITOR_H__ - -extern int xmonitor_init(void); -extern void xmonitor_fini(void); - -#endif /* __MENU_DAEMON_XMONITOR_H__ */ diff --git a/lock-setting/CMakeLists.txt b/lock-setting/CMakeLists.txt deleted file mode 100755 index 7745b83..0000000 --- a/lock-setting/CMakeLists.txt +++ /dev/null @@ -1,9 +0,0 @@ -CMAKE_MINIMUM_REQUIRED(VERSION 2.6) -PROJECT(lock-setting C) - -ADD_SUBDIRECTORY(lockscreen-options) - -# i18n -ADD_SUBDIRECTORY(po) - -# End of a file diff --git a/lock-setting/lockscreen-options/CMakeLists.txt b/lock-setting/lockscreen-options/CMakeLists.txt deleted file mode 100755 index 719f98e..0000000 --- a/lock-setting/lockscreen-options/CMakeLists.txt +++ /dev/null @@ -1,39 +0,0 @@ -CMAKE_MINIMUM_REQUIRED(VERSION 2.6) -PROJECT(ug-lockscreen-options C) - -SET(PREFIX ${CMAKE_INSTALL_PREFIX}/ug) -SET(LIBDIR "${PREFIX}/lib") -SET(RESDIR "${PREFIX}/res") -SET(DATADIR "${PREFIX}/data") -SET(LOCALEDIR "${RESDIR}/locale") -SET(IMAGEDIR "${RESDIR}/images") -SET(EDJEDIR "${RESDIR}/edje") -SET(ETCDIR "${RESDIR}/etc") -SET(VERSION 0.1.0) - -SET(SRCS - ./src/lockscreen-options.c - ./src/lockscreen-options-util.c - ./src/lockscreen-options-main.c -) - -INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/include) -INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/include) - -INCLUDE(FindPkgConfig) -pkg_check_modules(pkgs_lock-screen-options REQUIRED elementary ui-gadget-1 edje evas ail capi-appfw-application) - -FOREACH(flag ${pkgs_lock-screen-options_CFLAGS}) - SET(EXTRA_CFLAGS "${EXTRA_CFLAGS} ${flag}") -ENDFOREACH(flag) - -SET(EXTRA_CFLAGS "${EXTRA_CFLAGS} -fvisibility=hidden -Wall") -SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${EXTRA_CFLAGS}") - -ADD_DEFINITIONS("-DPREFIX=\"${CMAKE_INSTALL_PREFIX}\"") - -ADD_LIBRARY(${PROJECT_NAME} SHARED ${SRCS}) -SET_TARGET_PROPERTIES(${PROJECT_NAME} PROPERTIES SOVERSION 0.1.0) -TARGET_LINK_LIBRARIES(${PROJECT_NAME} ${pkgs_lock-screen-options_LDFLAGS}) - -INSTALL(TARGETS ${PROJECT_NAME} DESTINATION ${LIBDIR}) diff --git a/lock-setting/lockscreen-options/include/lockscreen-options-debug.h b/lock-setting/lockscreen-options/include/lockscreen-options-debug.h deleted file mode 100755 index ef9799b..0000000 --- a/lock-setting/lockscreen-options/include/lockscreen-options-debug.h +++ /dev/null @@ -1,48 +0,0 @@ - /* - * Copyright 2012 Samsung Electronics Co., Ltd - * - * Licensed under the Flora License, Version 1.1 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://floralicense.org/license/ - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - - - -#ifndef __LOCKSCREEN_OPTIONS_DEBUG_H__ -#define __LOCKSCREEN_OPTIONS_DEBUG_H__ - -#include - -#define OPENLOCK_USING_PLATFORM_DEBUG - -#ifdef OPENLOCK_USING_PLATFORM_DEBUG -#ifndef LOG_TAG -#define LOG_TAG "lockscreen-options" -#endif -#include - -#define LOCKOPTIONS_DBG(fmt, args...) LOGD("["LOG_TAG"%s:%d:E] "fmt, __FILE__, __LINE__, ##args) -#define LOCKOPTIONS_WARN(fmt, args...) LOGW("["LOG_TAG"%s:%d:E] "fmt, __FILE__, __LINE__, ##args) -#define LOCKOPTIONS_ERR(fmt, args...) LOGE("["LOG_TAG"%s:%d:E] "fmt, __FILE__, __LINE__, ##args) -#else -#define LOCKOPTIONS_DBG(fmt, args...) do{printf("[LOCKOPTIONS_DBG][%s(%d)] "fmt " \n", __FILE__, __LINE__, ##args);}while(0); -#define LOCKOPTIONS_WARN(fmt, args...) do{printf("[LOCKOPTIONS_WARN][%s(%d)] "fmt " \n", __FILE__, __LINE__, ##args);}while(0); -#define LOCKOPTIONS_ERR(fmt, args...) do{printf("[LOCKOPTIONS_ERR][%s(%d)] "fmt " \n", __FILE__, __LINE__, ##args);}while(0); -#endif - -#ifndef TRUE -#define TRUE 1 -#endif -#ifndef FALSE -#define FALSE 0 -#endif - -#endif diff --git a/lock-setting/lockscreen-options/include/lockscreen-options-main.h b/lock-setting/lockscreen-options/include/lockscreen-options-main.h deleted file mode 100755 index d4c05ec..0000000 --- a/lock-setting/lockscreen-options/include/lockscreen-options-main.h +++ /dev/null @@ -1,28 +0,0 @@ - /* - * Copyright 2012 Samsung Electronics Co., Ltd - * - * Licensed under the Flora License, Version 1.1 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://floralicense.org/license/ - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - - - -#ifndef __LOCKSCREEN_OPTIONS_MAIN_H__ -#define __LOCKSCREEN_OPTIONS_MAIN_H__ - -#include -#include "lockscreen-options.h" - -void lockscreen_options_main_create_view(lockscreen_options_ug_data * ug_data); -void lockscreen_options_main_update_view(); - -#endif diff --git a/lock-setting/lockscreen-options/include/lockscreen-options-util.h b/lock-setting/lockscreen-options/include/lockscreen-options-util.h deleted file mode 100755 index b0ad283..0000000 --- a/lock-setting/lockscreen-options/include/lockscreen-options-util.h +++ /dev/null @@ -1,48 +0,0 @@ - /* - * Copyright 2012 Samsung Electronics Co., Ltd - * - * Licensed under the Flora License, Version 1.1 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://floralicense.org/license/ - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - - - -#ifndef __LOCKSCREEN_OPTIONS_UTIL_H__ -#define __LOCKSCREEN_OPTIONS_UTIL_H__ - -#include - -enum { - IDS_COM_SK_OK = 0, - IDS_COM_SK_CANCEL, - IDS_LOCKSCREEN_OPTIONS_SYSTEM_STRING_MAX, -}; - -enum { - IDS_LOCKSCREEN_OPTIONS_EVENT_NOTIFICATIONS = - IDS_LOCKSCREEN_OPTIONS_SYSTEM_STRING_MAX, - IDS_LOCKSCREEN_OPTIONS_EVENT_NOTIFICATIONS_HELP, - IDS_LOCKSCREEN_OPTIONS_CLOCK, - IDS_LOCKSCREEN_OPTIONS_HELPTEXT, - IDS_LOCKSCREEN_OPTIONS_HELPTEXT_HELP, - IDS_LOCKSCREEN_OPTIONS_APP_STRING_MAX, -}; - -Evas_Object *lockscreen_options_util_create_navigation(Evas_Object * parent); -Evas_Object *lockscreen_options_util_create_layout(Evas_Object * parent, - const char *file, - const char *group); -void lockscreen_options_util_create_seperator(Evas_Object * genlist); -void lockscreen_options_util_create_underline(Evas_Object * genlist); -char *lockscreen_optoins_get_string(int id); - -#endif diff --git a/lock-setting/lockscreen-options/include/lockscreen-options.h b/lock-setting/lockscreen-options/include/lockscreen-options.h deleted file mode 100755 index 37c478d..0000000 --- a/lock-setting/lockscreen-options/include/lockscreen-options.h +++ /dev/null @@ -1,64 +0,0 @@ - /* - * Copyright 2012 Samsung Electronics Co., Ltd - * - * Licensed under the Flora License, Version 1.1 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://floralicense.org/license/ - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - - - -#ifndef __LOCKSCREEN_OPTIONS_H__ -#define __LOCKSCREEN_OPTIONS_H__ - -#include -#include -#include - -#define PKGNAME "ug-lockscreen-options" - -#define _EDJ(o) elm_layout_edje_get(o) -#define _S(str) dgettext("sys_string", str) -#define _(s) dgettext(PKGNAME, s) -#define dgettext_noop(s) (s) -#define N_(s) dgettext_noop(s) - -enum{ - ENUM_LOCKSCREEN_GENLIST_STYLE_SEPERATOR = 0, - ENUM_LOCKSCREEN_GENLIST_STYLE_1TEXT1ICON, - ENUM_LOCKSCREEN_GENLIST_STYLE_2TEXT1ICON, - ENUM_LOCKSCREEN_GENLIST_STYLE_HELP, - ENUM_LOCKSCREEN_GENLIST_STYLE_UNDERLINE -}; - -#define LOCKSCREEN_GENLIST_STYLE_SEPERATOR "dialogue/separator/21/with_line" -#define LOCKSCREEN_GENLIST_STYLE_1TEXT1ICON "dialogue/1text.1icon" -#define LOCKSCREEN_GENLIST_STYLE_2TEXT1ICON "dialogue/2text.1icon.6" -#define LOCKSCREEN_GENLIST_STYLE_HELP "multiline/1text" -#define LOCKSCREEN_GENLIST_STYLE_UNDERLINE "dialogue/separator/1/with_line" - - -typedef struct _lockscreen_options_ug_data { - int index; - - Evas_Object *win_main; - Evas_Object *base; - ui_gadget_h ug; - - Evas_Object *navi_bar; - - Elm_Gen_Item_Class itc_separator; - Elm_Gen_Item_Class itc_menu_1text1icon; - Elm_Gen_Item_Class itc_help_1text; - -} lockscreen_options_ug_data; - -#endif diff --git a/lock-setting/lockscreen-options/src/lockscreen-options-main.c b/lock-setting/lockscreen-options/src/lockscreen-options-main.c deleted file mode 100755 index 2ede565..0000000 --- a/lock-setting/lockscreen-options/src/lockscreen-options-main.c +++ /dev/null @@ -1,343 +0,0 @@ - /* - * Copyright 2012 Samsung Electronics Co., Ltd - * - * Licensed under the Flora License, Version 1.1 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://floralicense.org/license/ - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - - - -#include -#include -#include -#include -#include - -#include "lockscreen-options.h" -#include "lockscreen-options-debug.h" -#include "lockscreen-options-main.h" -#include "lockscreen-options-util.h" - -#include "starter-vconf.h" - -#define LOCKSCREEN_OPTOINS_GENLIST_ITEM_CNT 5 - -typedef struct { - int glStyle; - int stringId; - Evas_Object *check; - void (*func) (void *data, Evas_Object * obj, void *event_info); -} lockscreen_menu_item_info; - -static lockscreen_menu_item_info lockscreen_options_menu_item[] = { - {ENUM_LOCKSCREEN_GENLIST_STYLE_1TEXT1ICON, IDS_LOCKSCREEN_OPTIONS_EVENT_NOTIFICATIONS, NULL, NULL}, - {ENUM_LOCKSCREEN_GENLIST_STYLE_HELP, IDS_LOCKSCREEN_OPTIONS_EVENT_NOTIFICATIONS_HELP, NULL, NULL}, - {ENUM_LOCKSCREEN_GENLIST_STYLE_1TEXT1ICON, IDS_LOCKSCREEN_OPTIONS_CLOCK, NULL, NULL}, - {ENUM_LOCKSCREEN_GENLIST_STYLE_1TEXT1ICON, IDS_LOCKSCREEN_OPTIONS_HELPTEXT, NULL, NULL}, - {ENUM_LOCKSCREEN_GENLIST_STYLE_HELP, IDS_LOCKSCREEN_OPTIONS_HELPTEXT_HELP, NULL, NULL} -}; - -static Elm_Gen_Item_Class itc_menu_1text1icon; -static Elm_Gen_Item_Class itc_menu_2text1icon; -static Elm_Gen_Item_Class itc_help_1text; - -static void _lockscreen_options_main_back_cb(void *data, Evas_Object * obj, - void *event_info) -{ - lockscreen_options_ug_data *ug_data = - (lockscreen_options_ug_data *) data; - - if (ug_data == NULL) - return; - - ug_destroy_me(ug_data->ug); -} - -static char *_lockscreen_options_main_gl_label_get(void *data, - Evas_Object * obj, - const char *part) -{ - if (data == NULL || part == NULL) - return NULL; - - lockscreen_menu_item_info *lockoption_data = - (lockscreen_menu_item_info *) data; - - if ((strcmp(part, "elm.text") == 0) || - (strcmp(part, "elm.text.1") == 0)) { - return - strdup(lockscreen_optoins_get_string - (lockoption_data->stringId)); - } - - return NULL; - -} - -static void _lockscreen_options_set_menu_status(int stringId, int value) -{ - int ret = 0; - switch (stringId) { - case IDS_LOCKSCREEN_OPTIONS_EVENT_NOTIFICATIONS: - ret = vconf_set_bool(VCONFKEY_LOCKSCREEN_EVENT_NOTIFICATION_DISPLAY, value); - break; - case IDS_LOCKSCREEN_OPTIONS_CLOCK: - ret = vconf_set_bool(VCONFKEY_LOCKSCREEN_CLOCK_DISPLAY, value); - break; - case IDS_LOCKSCREEN_OPTIONS_HELPTEXT: - ret = vconf_set_bool(VCONFKEY_LOCKSCREEN_HELP_TEXT_DISPLAY, value); - break; - default: - LOCKOPTIONS_DBG("NO VALID STRINGID %d", stringId); - break; - } -} - -static bool _lockscreen_options_get_menu_status(int stringId) -{ - int status = 0; - int ret = 0; - - switch (stringId) { - case IDS_LOCKSCREEN_OPTIONS_EVENT_NOTIFICATIONS: - ret = vconf_get_bool(VCONFKEY_LOCKSCREEN_EVENT_NOTIFICATION_DISPLAY, &status); - break; - case IDS_LOCKSCREEN_OPTIONS_CLOCK: - ret = vconf_get_bool(VCONFKEY_LOCKSCREEN_CLOCK_DISPLAY, &status); - break; - case IDS_LOCKSCREEN_OPTIONS_HELPTEXT: - ret = vconf_get_bool(VCONFKEY_LOCKSCREEN_HELP_TEXT_DISPLAY, &status); - break; - default: - LOCKOPTIONS_DBG("NO VALID INDEX %d", stringId); - break; - } - - if (ret == -1) { - LOCKOPTIONS_ERR("Failed to get vconfkey %d!", stringId); - return 0; - } - - LOCKOPTIONS_DBG - ("_lockscreen_options_get_menu_status index %d Status %d", stringId, - status); - - return status; -} - -static void _lockscreen_options_check_changed_cb(void *data, Evas_Object * obj, - void *event_info) -{ - if (data == NULL || obj == NULL) - return; - - lockscreen_menu_item_info *lockoption_data = - (lockscreen_menu_item_info *) data; - - Eina_Bool ret; - int value = 0; - - ret = elm_check_state_get(obj); - - LOCKOPTIONS_DBG("_lockscreen_options_check_changed_cb : %s", - ret == EINA_TRUE ? "ON" : "OFF"); - - if (ret == EINA_TRUE) { - value = 1; - } else { - value = 0; - } - - _lockscreen_options_set_menu_status(lockoption_data->stringId, value); -} - -static Evas_Object *_lockscreen_options_main_gl_icon_get(void *data, - Evas_Object * obj, - const char *part) -{ - if (data == NULL || obj == NULL) - return NULL; - - lockscreen_menu_item_info *lockoption_data = - (lockscreen_menu_item_info *) data; - - LOCKOPTIONS_DBG("icon get stringId : %d", lockoption_data->stringId); - - Evas_Object *check; - int value = 0; - - check = elm_check_add(obj); - elm_object_style_set(check, "on&off"); - evas_object_show(check); - - value = _lockscreen_options_get_menu_status(lockoption_data->stringId); - elm_check_state_set(check, value); - - evas_object_pass_events_set(check, 1); - evas_object_propagate_events_set(check, 0); - - evas_object_smart_callback_add(check, "changed", - _lockscreen_options_check_changed_cb, - lockoption_data); - - lockoption_data->check = check; - - return check; -} - -static void _lockscreen_options_main_gl_del(void *data, Evas_Object * obj) -{ - LOCKOPTIONS_DBG("_lockscreen_options_main_gl_del"); -} - -static void _lockscreen_options_main_gl_sel(void *data, Evas_Object * obj, - void *event_info) -{ - if (data == NULL) - return; - - lockscreen_menu_item_info *lockoption_data = NULL; - - elm_genlist_item_selected_set((Elm_Object_Item *) event_info, - EINA_FALSE); - - Elm_Object_Item *item = (Elm_Object_Item *) event_info; - lockoption_data = - (lockscreen_menu_item_info *) elm_object_item_data_get(item); - if (lockoption_data == NULL) { - return; - } - - if (lockoption_data->stringId == - IDS_LOCKSCREEN_OPTIONS_EVENT_NOTIFICATIONS - || lockoption_data->stringId == IDS_LOCKSCREEN_OPTIONS_CLOCK - || lockoption_data->stringId == IDS_LOCKSCREEN_OPTIONS_HELPTEXT) { - Eina_Bool check_state = - elm_check_state_get(lockoption_data->check); - _lockscreen_options_set_menu_status(lockoption_data->stringId, - !check_state); - elm_genlist_item_update(item); - } - - if (lockoption_data->func != NULL) { - lockoption_data->func(data, obj, event_info); - } -} - -static void _lockscreen_options_create_gl_item(Elm_Gen_Item_Class * item, - int glStyle) -{ - if (glStyle == ENUM_LOCKSCREEN_GENLIST_STYLE_1TEXT1ICON) { - item->item_style = LOCKSCREEN_GENLIST_STYLE_1TEXT1ICON; - item->func.text_get = _lockscreen_options_main_gl_label_get; - item->func.content_get = _lockscreen_options_main_gl_icon_get; - item->func.state_get = NULL; - item->func.del = _lockscreen_options_main_gl_del; - } else if (glStyle == ENUM_LOCKSCREEN_GENLIST_STYLE_2TEXT1ICON) { - item->item_style = LOCKSCREEN_GENLIST_STYLE_2TEXT1ICON; - item->func.text_get = _lockscreen_options_main_gl_label_get; - item->func.content_get = _lockscreen_options_main_gl_icon_get; - item->func.state_get = NULL; - item->func.del = NULL; - } else if (glStyle == ENUM_LOCKSCREEN_GENLIST_STYLE_HELP) { - item->item_style = LOCKSCREEN_GENLIST_STYLE_HELP; - item->func.text_get = _lockscreen_options_main_gl_label_get; - item->func.content_get = NULL; - item->func.state_get = NULL; - item->func.del = _lockscreen_options_main_gl_del; - } else { - LOCKOPTIONS_DBG("_lockscreen_options_create_gl_item FAIL\n"); - } -} - -void lockscreen_options_main_create_view(lockscreen_options_ug_data * ug_data) -{ - LOCKOPTIONS_DBG("lockscreen_options_main_create_view begin\n"); - - Evas_Object *navi_bar = ug_data->navi_bar; - Evas_Object *back_button = NULL; - Evas_Object *genlist = NULL; - Elm_Object_Item *item = NULL; - int i = 0; - - if (navi_bar == NULL) { - LOCKOPTIONS_WARN("navi_bar is null."); - return; - } - - _lockscreen_options_create_gl_item(&(itc_menu_1text1icon), - ENUM_LOCKSCREEN_GENLIST_STYLE_1TEXT1ICON); - _lockscreen_options_create_gl_item(&(itc_menu_2text1icon), - ENUM_LOCKSCREEN_GENLIST_STYLE_2TEXT1ICON); - _lockscreen_options_create_gl_item(&(itc_help_1text), - ENUM_LOCKSCREEN_GENLIST_STYLE_HELP); - - genlist = elm_genlist_add(navi_bar); - - elm_genlist_mode_set(genlist, ELM_LIST_COMPRESS); - elm_object_style_set(genlist, "dialogue"); - - lockscreen_options_util_create_seperator(genlist); - - for (i = 0; i < LOCKSCREEN_OPTOINS_GENLIST_ITEM_CNT; i++) { - Elm_Gen_Item_Class *itc = NULL; - if (lockscreen_options_menu_item[i].glStyle == - ENUM_LOCKSCREEN_GENLIST_STYLE_1TEXT1ICON) { - itc = &(itc_menu_1text1icon); - elm_genlist_item_append(genlist, - itc, - & - (lockscreen_options_menu_item - [i]), NULL, - ELM_GENLIST_ITEM_NONE, - _lockscreen_options_main_gl_sel, - ug_data); - } else if(lockscreen_options_menu_item[i].glStyle == - ENUM_LOCKSCREEN_GENLIST_STYLE_2TEXT1ICON) { - itc = &(itc_menu_2text1icon); - elm_genlist_item_append(genlist, - itc, - & - (lockscreen_options_menu_item - [i]), NULL, - ELM_GENLIST_ITEM_NONE, - _lockscreen_options_main_gl_sel, - ug_data); - } else if (lockscreen_options_menu_item[i].glStyle == - ENUM_LOCKSCREEN_GENLIST_STYLE_HELP) { - itc = &(itc_help_1text); - item = elm_genlist_item_append(genlist, - itc, - & - (lockscreen_options_menu_item - [i]), NULL, - ELM_GENLIST_ITEM_NONE, - NULL, NULL); - elm_genlist_item_select_mode_set(item, - ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY); - if(i != (LOCKSCREEN_OPTOINS_GENLIST_ITEM_CNT - 1)){ - lockscreen_options_util_create_underline(genlist); - } - } else { - LOCKOPTIONS_WARN("lockscreen option has no such type."); - return; - } - } - - back_button = elm_button_add(navi_bar); - elm_object_style_set(back_button, "naviframe/back_btn/default"); - evas_object_smart_callback_add(back_button, "clicked", - _lockscreen_options_main_back_cb, - ug_data); - - elm_naviframe_item_push(navi_bar, _("IDS_ST_BODY_LOCK_SCREEN") , back_button, NULL, genlist, NULL); -} diff --git a/lock-setting/lockscreen-options/src/lockscreen-options-util.c b/lock-setting/lockscreen-options/src/lockscreen-options-util.c deleted file mode 100755 index 6f0b84c..0000000 --- a/lock-setting/lockscreen-options/src/lockscreen-options-util.c +++ /dev/null @@ -1,148 +0,0 @@ - /* - * Copyright 2012 Samsung Electronics Co., Ltd - * - * Licensed under the Flora License, Version 1.1 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://floralicense.org/license/ - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - - - -#include "lockscreen-options-debug.h" -#include "lockscreen-options.h" -#include "lockscreen-options-util.h" - -const char *sys_str_table[] = { - "IDS_COM_SK_OK", - "IDS_COM_SK_CANCEL", -}; - -const char *app_str_table[] = { - "IDS_IDLE_MBODY_EVENT_NOTIFICATIONS", - "IDS_IDLE_BODY_VIEW_EVENT_NOTIFICATIONS_ON_THE_LOCK_SCREEN", - "IDS_ST_BODY_CLOCK", - "IDS_IM_BODY_HELP_TEXT", - "IDS_ST_BODY_SHOW_HELP_TEXT_ON_LOCK_SCREEN" -}; - -static Elm_Gen_Item_Class itc_underline; -static Elm_Gen_Item_Class itc_separator; - -Evas_Object *lockscreen_options_util_create_navigation(Evas_Object * parent) -{ - Evas_Object *navi_bar = NULL; - - if (parent == NULL) { - LOCKOPTIONS_WARN("Parent is null."); - return NULL; - } - - navi_bar = elm_naviframe_add(parent); - if (navi_bar == NULL) { - LOCKOPTIONS_ERR("Cannot add naviagtionbar."); - return NULL; - } - - elm_object_part_content_set(parent, "elm.swallow.content", navi_bar); - - evas_object_show(navi_bar); - - return navi_bar; -} - -Evas_Object *lockscreen_options_util_create_layout(Evas_Object * parent, - const char *file, - const char *group) -{ - Evas_Object *layout = NULL; - - if (parent == NULL) { - LOCKOPTIONS_WARN("Parent is null."); - return NULL; - } - - layout = elm_layout_add(parent); - if (layout == NULL) { - LOCKOPTIONS_ERR("Cannot add layout."); - return NULL; - } - - if ((file != NULL) && (group != NULL)) { - elm_layout_file_set(layout, file, group); - } - - evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, - EVAS_HINT_EXPAND); - - evas_object_show(layout); - - return layout; -} - -void lockscreen_options_util_create_seperator(Evas_Object * genlist) -{ - if (NULL == genlist) - return; - - Elm_Object_Item *item = NULL; - - itc_separator.item_style = LOCKSCREEN_GENLIST_STYLE_SEPERATOR; - itc_separator.func.text_get = NULL; - itc_separator.func.content_get = NULL; - itc_separator.func.state_get = NULL; - itc_separator.func.del = NULL; - - item = - elm_genlist_item_append(genlist, &(itc_separator), NULL, NULL, - ELM_GENLIST_ITEM_NONE, NULL, NULL); - elm_genlist_item_select_mode_set(item, - ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY); -} - -void lockscreen_options_util_create_underline(Evas_Object * genlist) -{ - if (NULL == genlist) - return; - - Elm_Object_Item *item = NULL; - - itc_underline.item_style = LOCKSCREEN_GENLIST_STYLE_UNDERLINE; - itc_underline.func.text_get = NULL; - itc_underline.func.content_get = NULL; - itc_underline.func.state_get = NULL; - itc_underline.func.del = NULL; - - item = - elm_genlist_item_append(genlist, &(itc_underline), NULL, NULL, - ELM_GENLIST_ITEM_NONE, NULL, NULL); - elm_genlist_item_select_mode_set(item, - ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY); -} - -char *lockscreen_optoins_get_string(int id) -{ - LOCKOPTIONS_DBG("get string id : %d\n", id); - - char *str = NULL; - - if (id < IDS_LOCKSCREEN_OPTIONS_SYSTEM_STRING_MAX) { - str = dgettext("sys_string", sys_str_table[id]); - } else { - str = - dgettext(PKGNAME, - app_str_table[id - - IDS_LOCKSCREEN_OPTIONS_SYSTEM_STRING_MAX]); - } - - LOCKOPTIONS_DBG("get string : %s\n", str); - - return str; -} diff --git a/lock-setting/lockscreen-options/src/lockscreen-options.c b/lock-setting/lockscreen-options/src/lockscreen-options.c deleted file mode 100755 index de5eb00..0000000 --- a/lock-setting/lockscreen-options/src/lockscreen-options.c +++ /dev/null @@ -1,213 +0,0 @@ - /* - * Copyright 2012 Samsung Electronics Co., Ltd - * - * Licensed under the Flora License, Version 1.1 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://floralicense.org/license/ - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - - - -#ifndef UG_MODULE_API -#define UG_MODULE_API __attribute__ ((visibility("default"))) -#endif - -#include -#include - -#include "lockscreen-options.h" -#include "lockscreen-options-util.h" -#include "lockscreen-options-main.h" - -static Evas_Object *create_bg(Evas_Object * parent) -{ - Evas_Object *bg = elm_bg_add(parent); - - evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, - EVAS_HINT_EXPAND); - elm_object_style_set(bg, "group_list"); - - elm_object_part_content_set(parent, "elm.swallow.bg", bg); - evas_object_show(bg); - - return bg; -} - -static Evas_Object *create_fullview(Evas_Object * parent, - lockscreen_options_ug_data * ug_data) -{ - Evas_Object *base = NULL; - Evas_Object *navi_bar = NULL; - - base = lockscreen_options_util_create_layout(parent, NULL, NULL); - - elm_layout_theme_set(base, "layout", "application", "default"); - elm_win_resize_object_add(parent, base); - - elm_win_indicator_mode_set(parent, ELM_WIN_INDICATOR_SHOW); - - create_bg(base); - - navi_bar = lockscreen_options_util_create_navigation(base); - ug_data->navi_bar = navi_bar; - - lockscreen_options_main_create_view(ug_data); - - return base; -} - -static Evas_Object *create_frameview(Evas_Object * parent, - lockscreen_options_ug_data * ug_data) -{ - Evas_Object *base = NULL; - - return base; -} - -static void *on_create(ui_gadget_h ug, enum ug_mode mode, service_h service, - void *priv) -{ - Evas_Object *parent = NULL; - Evas_Object *win_main = NULL; - lockscreen_options_ug_data *ug_data = NULL; - - if (!ug || !priv) - return NULL; - - bindtextdomain(PKGNAME, "/usr/ug/res/locale"); - - ug_data = priv; - ug_data->ug = ug; - - parent = ug_get_parent_layout(ug); - if (!parent) - return NULL; - - win_main = ug_get_window(); - if (!win_main) { - return NULL; - } - - ug_data->win_main = win_main; - - if (mode == UG_MODE_FULLVIEW) - ug_data->base = create_fullview(parent, ug_data); - else - ug_data->base = create_frameview(parent, ug_data); - - return ug_data->base; -} - -static void on_start(ui_gadget_h ug, service_h service, void *priv) -{ -} - -static void on_pause(ui_gadget_h ug, service_h service, void *priv) -{ - -} - -static void on_resume(ui_gadget_h ug, service_h service, void *priv) -{ - -} - -static void on_destroy(ui_gadget_h ug, service_h service, void *priv) -{ - lockscreen_options_ug_data *ug_data; - - if (!ug || !priv) - return; - - ug_data = priv; - evas_object_del(ug_data->base); - ug_data->base = NULL; -} - -static void on_message(ui_gadget_h ug, service_h msg, service_h service, - void *priv) -{ -} - -static void on_event(ui_gadget_h ug, enum ug_event event, service_h service, - void *priv) -{ - switch (event) { - case UG_EVENT_LOW_MEMORY: - break; - case UG_EVENT_LOW_BATTERY: - break; - case UG_EVENT_LANG_CHANGE: - break; - case UG_EVENT_ROTATE_PORTRAIT: - break; - case UG_EVENT_ROTATE_PORTRAIT_UPSIDEDOWN: - break; - case UG_EVENT_ROTATE_LANDSCAPE: - break; - case UG_EVENT_ROTATE_LANDSCAPE_UPSIDEDOWN: - break; - default: - break; - } -} - -static void on_key_event(ui_gadget_h ug, enum ug_key_event event, - service_h service, void *priv) -{ - if (!ug) - return; - - switch (event) { - case UG_KEY_EVENT_END: - ug_destroy_me(ug); - break; - default: - break; - } -} - -UG_MODULE_API int UG_MODULE_INIT(struct ug_module_ops *ops) -{ - lockscreen_options_ug_data *ug_data; - - if (!ops) - return -1; - - ug_data = calloc(1, sizeof(lockscreen_options_ug_data)); - if (!ug_data) - return -1; - - ops->create = on_create; - ops->start = on_start; - ops->pause = on_pause; - ops->resume = on_resume; - ops->destroy = on_destroy; - ops->message = on_message; - ops->event = on_event; - ops->key_event = on_key_event; - ops->priv = ug_data; - ops->opt = UG_OPT_INDICATOR_ENABLE; - - return 0; -} - -UG_MODULE_API void UG_MODULE_EXIT(struct ug_module_ops *ops) -{ - lockscreen_options_ug_data *ug_data; - - if (!ops) - return; - - ug_data = ops->priv; - if (ug_data) - free(ug_data); -} diff --git a/lock-setting/po/CMakeLists.txt b/lock-setting/po/CMakeLists.txt deleted file mode 100755 index 647202a..0000000 --- a/lock-setting/po/CMakeLists.txt +++ /dev/null @@ -1,26 +0,0 @@ -# for i18n - -SET(LOCKPONAME "ug-lockscreen-options") - -SET(POFILES ar.po az.po bg.po ca.po cs.po da.po de_DE.po el_GR.po en.po en_PH.po en_US.po es_ES.po es_US.po fi.po fr_CA.po fr_FR.po ga.po gl.po hi.po hr.po hu.po hy.po is.po it_IT.po ja_JP.po ka.po kk.po ko_KR.po lt.po lv.po mk.po nb.po nl_NL.po pl.po pt_BR.po pt_PT.po ro.po ru_RU.po sk.po sl.po sr.po sv.po tr_TR.po uk.po uz.po zh_CN.po zh_HK.po zh_SG.po zh_TW.po) - -SET(MSGFMT "/usr/bin/msgfmt") - -FOREACH(pofile ${POFILES}) - SET(pofile ${CMAKE_CURRENT_SOURCE_DIR}/${pofile}) - MESSAGE("PO: ${pofile}") - GET_FILENAME_COMPONENT(absPofile ${pofile} ABSOLUTE) - GET_FILENAME_COMPONENT(lang ${absPofile} NAME_WE) - SET(moFile ${CMAKE_CURRENT_BINARY_DIR}/${lang}.mo) - ADD_CUSTOM_COMMAND( - OUTPUT ${moFile} - COMMAND ${MSGFMT} -o ${moFile} ${absPofile} - DEPENDS ${absPofile} - ) - -INSTALL(FILES ${moFile} DESTINATION /usr/ug/res/locale/${lang}/LC_MESSAGES RENAME ${LOCKPONAME}.mo) - SET(moFiles ${moFiles} ${moFile}) -ENDFOREACH(pofile) - -MESSAGE(".mo files: ${moFiles}") -ADD_CUSTOM_TARGET(po ALL DEPENDS ${moFiles}) diff --git a/lock-setting/po/ar.po b/lock-setting/po/ar.po deleted file mode 100644 index 7c0e6a6..0000000 --- a/lock-setting/po/ar.po +++ /dev/null @@ -1,54 +0,0 @@ -msgid "IDS_ST_BODY_LOCK_SCREEN" -msgstr "قفل الشاشة" - -msgid "IDS_IDLE_BODY_VIEW_EVENT_NOTIFICATIONS_ON_THE_LOCK_SCREEN" -msgstr "عرض إخطارات الحدث على شاشة القفل" - -msgid "IDS_IDLE_MBODY_EVENT_NOTIFICATIONS" -msgstr "إشعارات الحدث" - -msgid "IDS_ST_BODY_CLOCK" -msgstr "الساعة" - -msgid "IDS_ST_BODY_WEATHER" -msgstr "الطقس" - -msgid "IDS_ST_BODY_SET_SHORTCUTS_ON_LOCK_SCREEN" -msgstr "تعيين اختصارات على شاشة القفل" - -msgid "IDS_ST_BODY_SHORTCUTS" -msgstr "الاختصارات" - -msgid "IDS_ST_BODY_DUAL_CLOCK" -msgstr "ساعة ثنائية" - -msgid "IDS_ST_BODY_SHOW_HELP_TEXT_ON_LOCK_SCREEN" -msgstr "عرض نص التعليمات على شاشة القفل" - -msgid "IDS_ST_BODY_SHOW_DUAL_CLOCK_ON_LOCK_SCREEN_WHEN_ROAMING" -msgstr "عرض ‏‫ساعة مزدوجة على شاشة القفل أثناء التجوال" - -msgid "IDS_ST_BODY_TAP_AND_HOLD_THE_SCREEN_WHILE_ROTATING_THE_DEVICE_TO_OPEN_CAMERA" -msgstr "انقر مع الاستمرار فوق الشاشة مع تدوير الجهاز لفتح الكاميرا" - -msgid "IDS_ST_MBODY_CAMERA_QUICK_ACCESS" -msgstr "وصول سريع إلى الكاميرا" - -msgid "IDS_ST_BODY_SET_SHORTCUTS" -msgstr "تعيين اختصارات" - -msgid "IDS_ST_BODY_DRAG_AND_DROP_TO_CHANGE_ORDER" -msgstr "قم بالسحب والإسقاط لتغيير الترتيب" - -msgid "IDS_ST_BODY_SELECT_APPLICATION" -msgstr "اختر تطبيق" - -msgid "IDS_ST_BODY_TAP_SHORTCUT_TO_ASSIGN_APPLICATION" -msgstr "‏‫انقر فوق الاختصار لتخصيص تطبيق" - -msgid "IDS_ST_OPT_EDIT_SHORTCUTS" -msgstr "تعديل الاختصارات" - -msgid "IDS_IM_BODY_HELP_TEXT" -msgstr "نص المساعدة" - diff --git a/lock-setting/po/az.po b/lock-setting/po/az.po deleted file mode 100644 index 305092a..0000000 --- a/lock-setting/po/az.po +++ /dev/null @@ -1,54 +0,0 @@ -msgid "IDS_ST_BODY_LOCK_SCREEN" -msgstr "Ekranı kilidləyin" - -msgid "IDS_IDLE_BODY_VIEW_EVENT_NOTIFICATIONS_ON_THE_LOCK_SCREEN" -msgstr "Kilid ekranında tədbir bildirişlərinə bax" - -msgid "IDS_IDLE_MBODY_EVENT_NOTIFICATIONS" -msgstr "Tədbir bildirişləri" - -msgid "IDS_ST_BODY_CLOCK" -msgstr "Saat" - -msgid "IDS_ST_BODY_WEATHER" -msgstr "Hava" - -msgid "IDS_ST_BODY_SET_SHORTCUTS_ON_LOCK_SCREEN" -msgstr "Kilid ekranına qısayol qur" - -msgid "IDS_ST_BODY_SHORTCUTS" -msgstr "Çevik düymələr" - -msgid "IDS_ST_BODY_DUAL_CLOCK" -msgstr "İkili saat" - -msgid "IDS_ST_BODY_SHOW_HELP_TEXT_ON_LOCK_SCREEN" -msgstr "Kilid ekranında kömək mətnini göstər" - -msgid "IDS_ST_BODY_SHOW_DUAL_CLOCK_ON_LOCK_SCREEN_WHEN_ROAMING" -msgstr "Rouminq zamanı kilid ekranında ikili saat göstər" - -msgid "IDS_ST_BODY_TAP_AND_HOLD_THE_SCREEN_WHILE_ROTATING_THE_DEVICE_TO_OPEN_CAMERA" -msgstr "Kameranı açmaq üçün ekrana vurun saxlayaraq cihazı fırladın" - -msgid "IDS_ST_MBODY_CAMERA_QUICK_ACCESS" -msgstr "Kamera çevik girişi" - -msgid "IDS_ST_BODY_SET_SHORTCUTS" -msgstr "Qısayolları qur" - -msgid "IDS_ST_BODY_DRAG_AND_DROP_TO_CHANGE_ORDER" -msgstr "Sıranı dəyişmək üçün dartıb buraxın" - -msgid "IDS_ST_BODY_SELECT_APPLICATION" -msgstr "Proqramı seç" - -msgid "IDS_ST_BODY_TAP_SHORTCUT_TO_ASSIGN_APPLICATION" -msgstr "Proqrama təyin etmək üçün qısayola vur" - -msgid "IDS_ST_OPT_EDIT_SHORTCUTS" -msgstr "Qısayolları redaktə edin" - -msgid "IDS_IM_BODY_HELP_TEXT" -msgstr "Yardımçı mətn" - diff --git a/lock-setting/po/bg.po b/lock-setting/po/bg.po deleted file mode 100644 index 1033cf8..0000000 --- a/lock-setting/po/bg.po +++ /dev/null @@ -1,54 +0,0 @@ -msgid "IDS_ST_BODY_LOCK_SCREEN" -msgstr "Заключен екран" - -msgid "IDS_IDLE_BODY_VIEW_EVENT_NOTIFICATIONS_ON_THE_LOCK_SCREEN" -msgstr "Преглед на известията за събития на заключения екран" - -msgid "IDS_IDLE_MBODY_EVENT_NOTIFICATIONS" -msgstr "Уведомявания за събития" - -msgid "IDS_ST_BODY_CLOCK" -msgstr "Часовник" - -msgid "IDS_ST_BODY_WEATHER" -msgstr "Време" - -msgid "IDS_ST_BODY_SET_SHORTCUTS_ON_LOCK_SCREEN" -msgstr "Задайте бързите клавиши на заключения екран" - -msgid "IDS_ST_BODY_SHORTCUTS" -msgstr "Бърз достъп" - -msgid "IDS_ST_BODY_DUAL_CLOCK" -msgstr "Двоен часовник" - -msgid "IDS_ST_BODY_SHOW_HELP_TEXT_ON_LOCK_SCREEN" -msgstr "Показвай текста на помощта на заключения екран" - -msgid "IDS_ST_BODY_SHOW_DUAL_CLOCK_ON_LOCK_SCREEN_WHEN_ROAMING" -msgstr "Покажи двоен часовник на заключения екран в роуминг" - -msgid "IDS_ST_BODY_TAP_AND_HOLD_THE_SCREEN_WHILE_ROTATING_THE_DEVICE_TO_OPEN_CAMERA" -msgstr "Чукнете и задръжте екрана, докато въртите устройството, за да отворите Камера" - -msgid "IDS_ST_MBODY_CAMERA_QUICK_ACCESS" -msgstr "Бърз достъп с камера" - -msgid "IDS_ST_BODY_SET_SHORTCUTS" -msgstr "Задаване на бързи команди" - -msgid "IDS_ST_BODY_DRAG_AND_DROP_TO_CHANGE_ORDER" -msgstr "Плъзнете и пуснете, за да промените реда" - -msgid "IDS_ST_BODY_SELECT_APPLICATION" -msgstr "Избор на приложение" - -msgid "IDS_ST_BODY_TAP_SHORTCUT_TO_ASSIGN_APPLICATION" -msgstr "Чукнете върху бърза команда, за да зададете приложение" - -msgid "IDS_ST_OPT_EDIT_SHORTCUTS" -msgstr "Редактиране на бързи клавиши" - -msgid "IDS_IM_BODY_HELP_TEXT" -msgstr "Помощен текст" - diff --git a/lock-setting/po/ca.po b/lock-setting/po/ca.po deleted file mode 100644 index e6a6351..0000000 --- a/lock-setting/po/ca.po +++ /dev/null @@ -1,54 +0,0 @@ -msgid "IDS_ST_BODY_LOCK_SCREEN" -msgstr "Bloquejar pantalla" - -msgid "IDS_IDLE_BODY_VIEW_EVENT_NOTIFICATIONS_ON_THE_LOCK_SCREEN" -msgstr "Veure notificacions d'esdeveniments a pantalla de bloqueig" - -msgid "IDS_IDLE_MBODY_EVENT_NOTIFICATIONS" -msgstr "Avisos d'esdeveniments" - -msgid "IDS_ST_BODY_CLOCK" -msgstr "Rellotge" - -msgid "IDS_ST_BODY_WEATHER" -msgstr "Temps" - -msgid "IDS_ST_BODY_SET_SHORTCUTS_ON_LOCK_SCREEN" -msgstr "Definir accessos directes a la pantalla de bloqueig" - -msgid "IDS_ST_BODY_SHORTCUTS" -msgstr "Accessos directes" - -msgid "IDS_ST_BODY_DUAL_CLOCK" -msgstr "Rellotge dual" - -msgid "IDS_ST_BODY_SHOW_HELP_TEXT_ON_LOCK_SCREEN" -msgstr "Mostrar text d'ajuda a la pantalla de bloqueig" - -msgid "IDS_ST_BODY_SHOW_DUAL_CLOCK_ON_LOCK_SCREEN_WHEN_ROAMING" -msgstr "Mostrar rellotge dual a la pantalla de bloqueig en itinerància" - -msgid "IDS_ST_BODY_TAP_AND_HOLD_THE_SCREEN_WHILE_ROTATING_THE_DEVICE_TO_OPEN_CAMERA" -msgstr "Mantingui tocada la pantalla mentre gira el dispositiu per obrir la Càmera" - -msgid "IDS_ST_MBODY_CAMERA_QUICK_ACCESS" -msgstr "Accés ràpid a càmera" - -msgid "IDS_ST_BODY_SET_SHORTCUTS" -msgstr "Definir editar accessos directes" - -msgid "IDS_ST_BODY_DRAG_AND_DROP_TO_CHANGE_ORDER" -msgstr "Arrossegui i deixi anar per canviar l'ordre" - -msgid "IDS_ST_BODY_SELECT_APPLICATION" -msgstr "Seleccionar aplicació" - -msgid "IDS_ST_BODY_TAP_SHORTCUT_TO_ASSIGN_APPLICATION" -msgstr "Toqui l'accés directe per assignar l'aplicació" - -msgid "IDS_ST_OPT_EDIT_SHORTCUTS" -msgstr "Editar accessos directes" - -msgid "IDS_IM_BODY_HELP_TEXT" -msgstr "Text ajuda" - diff --git a/lock-setting/po/cs.po b/lock-setting/po/cs.po deleted file mode 100644 index 5a6e267..0000000 --- a/lock-setting/po/cs.po +++ /dev/null @@ -1,54 +0,0 @@ -msgid "IDS_ST_BODY_LOCK_SCREEN" -msgstr "Zamknout displej" - -msgid "IDS_IDLE_BODY_VIEW_EVENT_NOTIFICATIONS_ON_THE_LOCK_SCREEN" -msgstr "Zobrazení upozorňování na události na zamknutém displeji" - -msgid "IDS_IDLE_MBODY_EVENT_NOTIFICATIONS" -msgstr "Upozorňování na události" - -msgid "IDS_ST_BODY_CLOCK" -msgstr "Hodiny" - -msgid "IDS_ST_BODY_WEATHER" -msgstr "Počasí" - -msgid "IDS_ST_BODY_SET_SHORTCUTS_ON_LOCK_SCREEN" -msgstr "Nastavit zástupce na zamknutém displeji" - -msgid "IDS_ST_BODY_SHORTCUTS" -msgstr "Zkratky" - -msgid "IDS_ST_BODY_DUAL_CLOCK" -msgstr "Duál. hodiny" - -msgid "IDS_ST_BODY_SHOW_HELP_TEXT_ON_LOCK_SCREEN" -msgstr "Zobrazit text nápovědy na zamknutém displeji" - -msgid "IDS_ST_BODY_SHOW_DUAL_CLOCK_ON_LOCK_SCREEN_WHEN_ROAMING" -msgstr "Zobrazit duální hodiny na zamknutém displeji během roamingu" - -msgid "IDS_ST_BODY_TAP_AND_HOLD_THE_SCREEN_WHILE_ROTATING_THE_DEVICE_TO_OPEN_CAMERA" -msgstr "Klepnutím na displej a podržením při otáčení zařízení otevřete Fotoaparát" - -msgid "IDS_ST_MBODY_CAMERA_QUICK_ACCESS" -msgstr "Rychlý přístup k fotoap." - -msgid "IDS_ST_BODY_SET_SHORTCUTS" -msgstr "Nastavit zástupce" - -msgid "IDS_ST_BODY_DRAG_AND_DROP_TO_CHANGE_ORDER" -msgstr "Přetažením změníte pořadí" - -msgid "IDS_ST_BODY_SELECT_APPLICATION" -msgstr "Vyberte aplikaci" - -msgid "IDS_ST_BODY_TAP_SHORTCUT_TO_ASSIGN_APPLICATION" -msgstr "Chcete-li přiřadit aplikaci, klepněte na zástupce" - -msgid "IDS_ST_OPT_EDIT_SHORTCUTS" -msgstr "Upravit zástupce" - -msgid "IDS_IM_BODY_HELP_TEXT" -msgstr "Nápověda" - diff --git a/lock-setting/po/da.po b/lock-setting/po/da.po deleted file mode 100644 index d9a26bb..0000000 --- a/lock-setting/po/da.po +++ /dev/null @@ -1,54 +0,0 @@ -msgid "IDS_ST_BODY_LOCK_SCREEN" -msgstr "Låseskærm" - -msgid "IDS_IDLE_BODY_VIEW_EVENT_NOTIFICATIONS_ON_THE_LOCK_SCREEN" -msgstr "Vis begivenhedsbeskeder på den låste skærm" - -msgid "IDS_IDLE_MBODY_EVENT_NOTIFICATIONS" -msgstr "Begivenhedsbeskeder" - -msgid "IDS_ST_BODY_CLOCK" -msgstr "Ur" - -msgid "IDS_ST_BODY_WEATHER" -msgstr "Vejr" - -msgid "IDS_ST_BODY_SET_SHORTCUTS_ON_LOCK_SCREEN" -msgstr "Indstil genveje på låseskærm" - -msgid "IDS_ST_BODY_SHORTCUTS" -msgstr "Genveje" - -msgid "IDS_ST_BODY_DUAL_CLOCK" -msgstr "Dobbelt-ur" - -msgid "IDS_ST_BODY_SHOW_HELP_TEXT_ON_LOCK_SCREEN" -msgstr "Vis hjælpetekst på låst skærm" - -msgid "IDS_ST_BODY_SHOW_DUAL_CLOCK_ON_LOCK_SCREEN_WHEN_ROAMING" -msgstr "Vis dobbelt ur på låseskærm under roaming" - -msgid "IDS_ST_BODY_TAP_AND_HOLD_THE_SCREEN_WHILE_ROTATING_THE_DEVICE_TO_OPEN_CAMERA" -msgstr "Tryk og hold på skærmen, mens du roterer enheden, for at åbne Kamera" - -msgid "IDS_ST_MBODY_CAMERA_QUICK_ACCESS" -msgstr "Hurtig adgang til kamera" - -msgid "IDS_ST_BODY_SET_SHORTCUTS" -msgstr "Angiv genveje" - -msgid "IDS_ST_BODY_DRAG_AND_DROP_TO_CHANGE_ORDER" -msgstr "Træk og slip for at skifte rækkefølge" - -msgid "IDS_ST_BODY_SELECT_APPLICATION" -msgstr "Vælg program" - -msgid "IDS_ST_BODY_TAP_SHORTCUT_TO_ASSIGN_APPLICATION" -msgstr "Tryk på genvej for at tildele program" - -msgid "IDS_ST_OPT_EDIT_SHORTCUTS" -msgstr "Redigér genveje" - -msgid "IDS_IM_BODY_HELP_TEXT" -msgstr "Hjælpetekst" - diff --git a/lock-setting/po/de_DE.po b/lock-setting/po/de_DE.po deleted file mode 100644 index 70a4592..0000000 --- a/lock-setting/po/de_DE.po +++ /dev/null @@ -1,54 +0,0 @@ -msgid "IDS_ST_BODY_LOCK_SCREEN" -msgstr "Sperrbildschirm" - -msgid "IDS_IDLE_BODY_VIEW_EVENT_NOTIFICATIONS_ON_THE_LOCK_SCREEN" -msgstr "Ereignisbenachrichtigungen auf Sperrbildschirm anzeigen" - -msgid "IDS_IDLE_MBODY_EVENT_NOTIFICATIONS" -msgstr "Ereignisbenachrichtig." - -msgid "IDS_ST_BODY_CLOCK" -msgstr "Uhr" - -msgid "IDS_ST_BODY_WEATHER" -msgstr "Wetter" - -msgid "IDS_ST_BODY_SET_SHORTCUTS_ON_LOCK_SCREEN" -msgstr "Schnellzugriffe auf gesperrtem Bildschirm festlegen" - -msgid "IDS_ST_BODY_SHORTCUTS" -msgstr "Schnellzugriffe" - -msgid "IDS_ST_BODY_DUAL_CLOCK" -msgstr "Dual-Uhr" - -msgid "IDS_ST_BODY_SHOW_HELP_TEXT_ON_LOCK_SCREEN" -msgstr "Hilfetext auf gesperrtem Bildschirm anzeigen" - -msgid "IDS_ST_BODY_SHOW_DUAL_CLOCK_ON_LOCK_SCREEN_WHEN_ROAMING" -msgstr "Dual-Uhr beim Roaming auf gesperrtem Bildschirm anzeigen" - -msgid "IDS_ST_BODY_TAP_AND_HOLD_THE_SCREEN_WHILE_ROTATING_THE_DEVICE_TO_OPEN_CAMERA" -msgstr "Tippen Sie auf den Bildschirm und halten Sie ihn, während Sie das Gerät drehen, um die Kamera zu öffnen." - -msgid "IDS_ST_MBODY_CAMERA_QUICK_ACCESS" -msgstr "Kamera-Schnellzugriff" - -msgid "IDS_ST_BODY_SET_SHORTCUTS" -msgstr "Schnellzugriffe festlegen" - -msgid "IDS_ST_BODY_DRAG_AND_DROP_TO_CHANGE_ORDER" -msgstr "Ziehen und ablegen, um die Reihenfolge zu ändern." - -msgid "IDS_ST_BODY_SELECT_APPLICATION" -msgstr "Anwendung auswählen" - -msgid "IDS_ST_BODY_TAP_SHORTCUT_TO_ASSIGN_APPLICATION" -msgstr "Auf Shortcut tippen, um Anwendung zuzuweisen." - -msgid "IDS_ST_OPT_EDIT_SHORTCUTS" -msgstr "Schnellzugriffe bearbeiten" - -msgid "IDS_IM_BODY_HELP_TEXT" -msgstr "Hilfetext" - diff --git a/lock-setting/po/el_GR.po b/lock-setting/po/el_GR.po deleted file mode 100644 index 151b419..0000000 --- a/lock-setting/po/el_GR.po +++ /dev/null @@ -1,54 +0,0 @@ -msgid "IDS_ST_BODY_LOCK_SCREEN" -msgstr "Οθόνη κλειδώματος" - -msgid "IDS_IDLE_BODY_VIEW_EVENT_NOTIFICATIONS_ON_THE_LOCK_SCREEN" -msgstr "Προβολή ειδοποιήσεων συμβάντων στην οθόνη κλειδώματος" - -msgid "IDS_IDLE_MBODY_EVENT_NOTIFICATIONS" -msgstr "Ειδοποιήσεις συμβάντων" - -msgid "IDS_ST_BODY_CLOCK" -msgstr "Ρολόι" - -msgid "IDS_ST_BODY_WEATHER" -msgstr "Καιρός" - -msgid "IDS_ST_BODY_SET_SHORTCUTS_ON_LOCK_SCREEN" -msgstr "Ρύθμιση συντομεύσεων στην οθόνη κλειδώματος" - -msgid "IDS_ST_BODY_SHORTCUTS" -msgstr "Συντομεύσεις" - -msgid "IDS_ST_BODY_DUAL_CLOCK" -msgstr "Διπλό ρολόι" - -msgid "IDS_ST_BODY_SHOW_HELP_TEXT_ON_LOCK_SCREEN" -msgstr "Εμφάνιση κειμένου βοήθειας στην οθόνη κλειδώματος" - -msgid "IDS_ST_BODY_SHOW_DUAL_CLOCK_ON_LOCK_SCREEN_WHEN_ROAMING" -msgstr "Εμφάνιση διπλού ρολογιού στην οθόνη κλειδώματος κατά την περιαγωγή" - -msgid "IDS_ST_BODY_TAP_AND_HOLD_THE_SCREEN_WHILE_ROTATING_THE_DEVICE_TO_OPEN_CAMERA" -msgstr "Πατήστε παρατεταμένα στην οθόνη και κατά την περιστροφή της συσκευής για να ανοίξετε την Κάμερα" - -msgid "IDS_ST_MBODY_CAMERA_QUICK_ACCESS" -msgstr "Γρήγορη πρόσβαση κάμερας" - -msgid "IDS_ST_BODY_SET_SHORTCUTS" -msgstr "Ρύθμιση συντομεύσεων" - -msgid "IDS_ST_BODY_DRAG_AND_DROP_TO_CHANGE_ORDER" -msgstr "Μεταφέρετε και αποθέστε για να αλλάξετε τη σειρά" - -msgid "IDS_ST_BODY_SELECT_APPLICATION" -msgstr "Επιλογή εφαρμογής" - -msgid "IDS_ST_BODY_TAP_SHORTCUT_TO_ASSIGN_APPLICATION" -msgstr "Πατήστε τη συντόμευση για αντιστοίχιση εφαρμογής" - -msgid "IDS_ST_OPT_EDIT_SHORTCUTS" -msgstr "Επεξεργασία συντομεύσεων" - -msgid "IDS_IM_BODY_HELP_TEXT" -msgstr "Κείμενο βοήθειας" - diff --git a/lock-setting/po/en.po b/lock-setting/po/en.po deleted file mode 100644 index 5c14712..0000000 --- a/lock-setting/po/en.po +++ /dev/null @@ -1,54 +0,0 @@ -msgid "IDS_ST_BODY_LOCK_SCREEN" -msgstr "Lock screen" - -msgid "IDS_IDLE_BODY_VIEW_EVENT_NOTIFICATIONS_ON_THE_LOCK_SCREEN" -msgstr "View event notifications on the lock screen" - -msgid "IDS_IDLE_MBODY_EVENT_NOTIFICATIONS" -msgstr "Event notifications" - -msgid "IDS_ST_BODY_CLOCK" -msgstr "Clock" - -msgid "IDS_ST_BODY_WEATHER" -msgstr "Weather" - -msgid "IDS_ST_BODY_SET_SHORTCUTS_ON_LOCK_SCREEN" -msgstr "Set shortcuts on lock screen" - -msgid "IDS_ST_BODY_SHORTCUTS" -msgstr "Shortcuts" - -msgid "IDS_ST_BODY_DUAL_CLOCK" -msgstr "Dual clock" - -msgid "IDS_ST_BODY_SHOW_HELP_TEXT_ON_LOCK_SCREEN" -msgstr "Show help text on lock screen" - -msgid "IDS_ST_BODY_SHOW_DUAL_CLOCK_ON_LOCK_SCREEN_WHEN_ROAMING" -msgstr "Show dual clock on lock screen when roaming" - -msgid "IDS_ST_BODY_TAP_AND_HOLD_THE_SCREEN_WHILE_ROTATING_THE_DEVICE_TO_OPEN_CAMERA" -msgstr "Tap and hold the screen while rotating the device to open Camera" - -msgid "IDS_ST_MBODY_CAMERA_QUICK_ACCESS" -msgstr "Camera quick access" - -msgid "IDS_ST_BODY_SET_SHORTCUTS" -msgstr "Set shortcuts" - -msgid "IDS_ST_BODY_DRAG_AND_DROP_TO_CHANGE_ORDER" -msgstr "Drag and drop to change order" - -msgid "IDS_ST_BODY_SELECT_APPLICATION" -msgstr "Select application" - -msgid "IDS_ST_BODY_TAP_SHORTCUT_TO_ASSIGN_APPLICATION" -msgstr "Tap shortcut to assign application" - -msgid "IDS_ST_OPT_EDIT_SHORTCUTS" -msgstr "Edit shortcuts" - -msgid "IDS_IM_BODY_HELP_TEXT" -msgstr "Help text" - diff --git a/lock-setting/po/en_PH.po b/lock-setting/po/en_PH.po deleted file mode 100644 index 5c14712..0000000 --- a/lock-setting/po/en_PH.po +++ /dev/null @@ -1,54 +0,0 @@ -msgid "IDS_ST_BODY_LOCK_SCREEN" -msgstr "Lock screen" - -msgid "IDS_IDLE_BODY_VIEW_EVENT_NOTIFICATIONS_ON_THE_LOCK_SCREEN" -msgstr "View event notifications on the lock screen" - -msgid "IDS_IDLE_MBODY_EVENT_NOTIFICATIONS" -msgstr "Event notifications" - -msgid "IDS_ST_BODY_CLOCK" -msgstr "Clock" - -msgid "IDS_ST_BODY_WEATHER" -msgstr "Weather" - -msgid "IDS_ST_BODY_SET_SHORTCUTS_ON_LOCK_SCREEN" -msgstr "Set shortcuts on lock screen" - -msgid "IDS_ST_BODY_SHORTCUTS" -msgstr "Shortcuts" - -msgid "IDS_ST_BODY_DUAL_CLOCK" -msgstr "Dual clock" - -msgid "IDS_ST_BODY_SHOW_HELP_TEXT_ON_LOCK_SCREEN" -msgstr "Show help text on lock screen" - -msgid "IDS_ST_BODY_SHOW_DUAL_CLOCK_ON_LOCK_SCREEN_WHEN_ROAMING" -msgstr "Show dual clock on lock screen when roaming" - -msgid "IDS_ST_BODY_TAP_AND_HOLD_THE_SCREEN_WHILE_ROTATING_THE_DEVICE_TO_OPEN_CAMERA" -msgstr "Tap and hold the screen while rotating the device to open Camera" - -msgid "IDS_ST_MBODY_CAMERA_QUICK_ACCESS" -msgstr "Camera quick access" - -msgid "IDS_ST_BODY_SET_SHORTCUTS" -msgstr "Set shortcuts" - -msgid "IDS_ST_BODY_DRAG_AND_DROP_TO_CHANGE_ORDER" -msgstr "Drag and drop to change order" - -msgid "IDS_ST_BODY_SELECT_APPLICATION" -msgstr "Select application" - -msgid "IDS_ST_BODY_TAP_SHORTCUT_TO_ASSIGN_APPLICATION" -msgstr "Tap shortcut to assign application" - -msgid "IDS_ST_OPT_EDIT_SHORTCUTS" -msgstr "Edit shortcuts" - -msgid "IDS_IM_BODY_HELP_TEXT" -msgstr "Help text" - diff --git a/lock-setting/po/en_US.po b/lock-setting/po/en_US.po deleted file mode 100644 index a1db6bc..0000000 --- a/lock-setting/po/en_US.po +++ /dev/null @@ -1,54 +0,0 @@ -msgid "IDS_ST_BODY_LOCK_SCREEN" -msgstr "Lock screen" - -msgid "IDS_IDLE_BODY_VIEW_EVENT_NOTIFICATIONS_ON_THE_LOCK_SCREEN" -msgstr "View event notifications on the lock screen" - -msgid "IDS_IDLE_MBODY_EVENT_NOTIFICATIONS" -msgstr "Event notifications" - -msgid "IDS_ST_BODY_CLOCK" -msgstr "Clock" - -msgid "IDS_ST_BODY_WEATHER" -msgstr "Weather" - -msgid "IDS_ST_BODY_SET_SHORTCUTS_ON_LOCK_SCREEN" -msgstr "Set shortcuts on lock screen." - -msgid "IDS_ST_BODY_SHORTCUTS" -msgstr "Shortcuts" - -msgid "IDS_ST_BODY_DUAL_CLOCK" -msgstr "Dual clock" - -msgid "IDS_ST_BODY_SHOW_HELP_TEXT_ON_LOCK_SCREEN" -msgstr "Show help text on lock screen." - -msgid "IDS_ST_BODY_SHOW_DUAL_CLOCK_ON_LOCK_SCREEN_WHEN_ROAMING" -msgstr "Show dual clock on lock screen when roaming." - -msgid "IDS_ST_BODY_TAP_AND_HOLD_THE_SCREEN_WHILE_ROTATING_THE_DEVICE_TO_OPEN_CAMERA" -msgstr "Tap and hold the screen while rotating the device to open Camera" - -msgid "IDS_ST_MBODY_CAMERA_QUICK_ACCESS" -msgstr "Camera quick access" - -msgid "IDS_ST_BODY_SET_SHORTCUTS" -msgstr "Set shortcuts" - -msgid "IDS_ST_BODY_DRAG_AND_DROP_TO_CHANGE_ORDER" -msgstr "Drag and drop to change order" - -msgid "IDS_ST_BODY_SELECT_APPLICATION" -msgstr "Select application" - -msgid "IDS_ST_BODY_TAP_SHORTCUT_TO_ASSIGN_APPLICATION" -msgstr "Tap shortcut to assign application" - -msgid "IDS_ST_OPT_EDIT_SHORTCUTS" -msgstr "Edit shortcuts" - -msgid "IDS_IM_BODY_HELP_TEXT" -msgstr "Help text" - diff --git a/lock-setting/po/es_ES.po b/lock-setting/po/es_ES.po deleted file mode 100644 index 407f8d7..0000000 --- a/lock-setting/po/es_ES.po +++ /dev/null @@ -1,54 +0,0 @@ -msgid "IDS_ST_BODY_LOCK_SCREEN" -msgstr "Pantalla de bloqueo" - -msgid "IDS_IDLE_BODY_VIEW_EVENT_NOTIFICATIONS_ON_THE_LOCK_SCREEN" -msgstr "Ver notificaciones de eventos en la pantalla de bloqueo" - -msgid "IDS_IDLE_MBODY_EVENT_NOTIFICATIONS" -msgstr "Notificaciones de evento" - -msgid "IDS_ST_BODY_CLOCK" -msgstr "Reloj" - -msgid "IDS_ST_BODY_WEATHER" -msgstr "Clima" - -msgid "IDS_ST_BODY_SET_SHORTCUTS_ON_LOCK_SCREEN" -msgstr "Definir accesos directos en pantalla de bloqueo" - -msgid "IDS_ST_BODY_SHORTCUTS" -msgstr "Accesos directos" - -msgid "IDS_ST_BODY_DUAL_CLOCK" -msgstr "Reloj dual" - -msgid "IDS_ST_BODY_SHOW_HELP_TEXT_ON_LOCK_SCREEN" -msgstr "Mostrar texto de ayuda en pantalla de bloqueo" - -msgid "IDS_ST_BODY_SHOW_DUAL_CLOCK_ON_LOCK_SCREEN_WHEN_ROAMING" -msgstr "Mostrar reloj dual en pantalla de bloqueo en itinerancia" - -msgid "IDS_ST_BODY_TAP_AND_HOLD_THE_SCREEN_WHILE_ROTATING_THE_DEVICE_TO_OPEN_CAMERA" -msgstr "Mantenga pulsada la pantalla mientras gira el dispositivo para abrir la Cámara" - -msgid "IDS_ST_MBODY_CAMERA_QUICK_ACCESS" -msgstr "Acceso rápido a Cámara" - -msgid "IDS_ST_BODY_SET_SHORTCUTS" -msgstr "Definir accesos directos" - -msgid "IDS_ST_BODY_DRAG_AND_DROP_TO_CHANGE_ORDER" -msgstr "Arrastrar y soltar para cambiar el orden" - -msgid "IDS_ST_BODY_SELECT_APPLICATION" -msgstr "Seleccionar aplicación" - -msgid "IDS_ST_BODY_TAP_SHORTCUT_TO_ASSIGN_APPLICATION" -msgstr "Toque el acceso directo para asignar la aplicación" - -msgid "IDS_ST_OPT_EDIT_SHORTCUTS" -msgstr "Editar accesos directos" - -msgid "IDS_IM_BODY_HELP_TEXT" -msgstr "Texto de ayuda" - diff --git a/lock-setting/po/es_MX.po b/lock-setting/po/es_MX.po deleted file mode 100644 index a3ce4bd..0000000 --- a/lock-setting/po/es_MX.po +++ /dev/null @@ -1,54 +0,0 @@ -msgid "IDS_ST_BODY_LOCK_SCREEN" -msgstr "Bloqueo de pantalla" - -msgid "IDS_IDLE_BODY_VIEW_EVENT_NOTIFICATIONS_ON_THE_LOCK_SCREEN" -msgstr "Ver las notificaciones de eventos en la pantalla de bloqueo" - -msgid "IDS_IDLE_MBODY_EVENT_NOTIFICATIONS" -msgstr "Notificaciones de eventos" - -msgid "IDS_ST_BODY_CLOCK" -msgstr "Reloj" - -msgid "IDS_ST_BODY_WEATHER" -msgstr "Clima" - -msgid "IDS_ST_BODY_SET_SHORTCUTS_ON_LOCK_SCREEN" -msgstr "Definir atajos en pantalla bloqueada" - -msgid "IDS_ST_BODY_SHORTCUTS" -msgstr "Atajos" - -msgid "IDS_ST_BODY_DUAL_CLOCK" -msgstr "Reloj dual" - -msgid "IDS_ST_BODY_SHOW_HELP_TEXT_ON_LOCK_SCREEN" -msgstr "Mostrar texto de ayuda en pantalla bloqueada" - -msgid "IDS_ST_BODY_SHOW_DUAL_CLOCK_ON_LOCK_SCREEN_WHEN_ROAMING" -msgstr "Mostrar el reloj dual en la pantalla bloqueada durante el roaming" - -msgid "IDS_ST_BODY_TAP_AND_HOLD_THE_SCREEN_WHILE_ROTATING_THE_DEVICE_TO_OPEN_CAMERA" -msgstr "Mantenga pulsada la pantalla mientras gira el dispositivo para abrir la Cámara" - -msgid "IDS_ST_MBODY_CAMERA_QUICK_ACCESS" -msgstr "Acceso rápido a cámara" - -msgid "IDS_ST_BODY_SET_SHORTCUTS" -msgstr "Configurar atajos" - -msgid "IDS_ST_BODY_DRAG_AND_DROP_TO_CHANGE_ORDER" -msgstr "Arrastre y coloque para cambiar el orden" - -msgid "IDS_ST_BODY_SELECT_APPLICATION" -msgstr "Seleccionar aplicación" - -msgid "IDS_ST_BODY_TAP_SHORTCUT_TO_ASSIGN_APPLICATION" -msgstr "Pulse el atajo para asignar la aplicación" - -msgid "IDS_ST_OPT_EDIT_SHORTCUTS" -msgstr "Editar atajos" - -msgid "IDS_IM_BODY_HELP_TEXT" -msgstr "Texto de ayuda" - diff --git a/lock-setting/po/es_US.po b/lock-setting/po/es_US.po deleted file mode 100644 index 43a19d9..0000000 --- a/lock-setting/po/es_US.po +++ /dev/null @@ -1,51 +0,0 @@ -msgid "IDS_IDLE_BODY_VIEW_EVENT_NOTIFICATIONS_ON_THE_LOCK_SCREEN" -msgstr "Ver las notificaciones de eventos en la pantalla de bloqueo" - -msgid "IDS_IDLE_MBODY_EVENT_NOTIFICATIONS" -msgstr "Notificaciones de eventos" - -msgid "IDS_ST_BODY_CLOCK" -msgstr "Reloj" - -msgid "IDS_ST_BODY_WEATHER" -msgstr "Clima" - -msgid "IDS_ST_BODY_SET_SHORTCUTS_ON_LOCK_SCREEN" -msgstr "Definir atajos en pantalla bloqueada" - -msgid "IDS_ST_BODY_SHORTCUTS" -msgstr "Atajos" - -msgid "IDS_ST_BODY_DUAL_CLOCK" -msgstr "Reloj dual" - -msgid "IDS_ST_BODY_SHOW_HELP_TEXT_ON_LOCK_SCREEN" -msgstr "Mostrar texto de ayuda en pantalla bloqueada" - -msgid "IDS_ST_BODY_SHOW_DUAL_CLOCK_ON_LOCK_SCREEN_WHEN_ROAMING" -msgstr "Mostrar el reloj dual en la pantalla bloqueada durante el roaming" - -msgid "IDS_ST_BODY_TAP_AND_HOLD_THE_SCREEN_WHILE_ROTATING_THE_DEVICE_TO_OPEN_CAMERA" -msgstr "Mantenga pulsada la pantalla mientras gira el dispositivo para abrir la Cámara" - -msgid "IDS_ST_MBODY_CAMERA_QUICK_ACCESS" -msgstr "Acceso rápido a cámara" - -msgid "IDS_ST_BODY_SET_SHORTCUTS" -msgstr "Configurar atajos" - -msgid "IDS_ST_BODY_DRAG_AND_DROP_TO_CHANGE_ORDER" -msgstr "Arrastre y coloque para cambiar el orden" - -msgid "IDS_ST_BODY_SELECT_APPLICATION" -msgstr "Seleccionar aplicación" - -msgid "IDS_ST_BODY_TAP_SHORTCUT_TO_ASSIGN_APPLICATION" -msgstr "Pulse el atajo para asignar la aplicación" - -msgid "IDS_ST_OPT_EDIT_SHORTCUTS" -msgstr "Editar atajos" - -msgid "IDS_IM_BODY_HELP_TEXT" -msgstr "Texto de ayuda" - diff --git a/lock-setting/po/et.po b/lock-setting/po/et.po deleted file mode 100644 index 073973f..0000000 --- a/lock-setting/po/et.po +++ /dev/null @@ -1,54 +0,0 @@ -msgid "IDS_ST_BODY_LOCK_SCREEN" -msgstr "Lukusta ekraan" - -msgid "IDS_IDLE_BODY_VIEW_EVENT_NOTIFICATIONS_ON_THE_LOCK_SCREEN" -msgstr "Vaadake sündmuste teavitusi lukustatud ekraanil" - -msgid "IDS_IDLE_MBODY_EVENT_NOTIFICATIONS" -msgstr "Sündmuse teavitused" - -msgid "IDS_ST_BODY_CLOCK" -msgstr "Kell" - -msgid "IDS_ST_BODY_WEATHER" -msgstr "Ilm" - -msgid "IDS_ST_BODY_SET_SHORTCUTS_ON_LOCK_SCREEN" -msgstr "Määra otseteed lukustusekraanil" - -msgid "IDS_ST_BODY_SHORTCUTS" -msgstr "Otseteed" - -msgid "IDS_ST_BODY_DUAL_CLOCK" -msgstr "Kaksikkell" - -msgid "IDS_ST_BODY_SHOW_HELP_TEXT_ON_LOCK_SCREEN" -msgstr "Näita spikrit lukustusekraanil" - -msgid "IDS_ST_BODY_SHOW_DUAL_CLOCK_ON_LOCK_SCREEN_WHEN_ROAMING" -msgstr "Kuva rändluse ajal lukustusekraanil kaksikkell" - -msgid "IDS_ST_BODY_TAP_AND_HOLD_THE_SCREEN_WHILE_ROTATING_THE_DEVICE_TO_OPEN_CAMERA" -msgstr "Kaamera avamiseks toksake ja hoidke sõrme ekraanil ning samal ajal pöörake seadet" - -msgid "IDS_ST_MBODY_CAMERA_QUICK_ACCESS" -msgstr "Kiirjuurdepääs kaamerale" - -msgid "IDS_ST_BODY_SET_SHORTCUTS" -msgstr "Määra otseteed" - -msgid "IDS_ST_BODY_DRAG_AND_DROP_TO_CHANGE_ORDER" -msgstr "Lohistage, et muuta järjestust" - -msgid "IDS_ST_BODY_SELECT_APPLICATION" -msgstr "Vali rakendus" - -msgid "IDS_ST_BODY_TAP_SHORTCUT_TO_ASSIGN_APPLICATION" -msgstr "Toksake otseteed, et määrata rakendust" - -msgid "IDS_ST_OPT_EDIT_SHORTCUTS" -msgstr "Muuda otseteid" - -msgid "IDS_IM_BODY_HELP_TEXT" -msgstr "Spikker" - diff --git a/lock-setting/po/eu.po b/lock-setting/po/eu.po deleted file mode 100644 index 8ba1000..0000000 --- a/lock-setting/po/eu.po +++ /dev/null @@ -1,54 +0,0 @@ -msgid "IDS_ST_BODY_LOCK_SCREEN" -msgstr "Blokeatu pantaila" - -msgid "IDS_IDLE_BODY_VIEW_EVENT_NOTIFICATIONS_ON_THE_LOCK_SCREEN" -msgstr "Ikusi gertaeren jakinarazpenak blokeo pantailan" - -msgid "IDS_IDLE_MBODY_EVENT_NOTIFICATIONS" -msgstr "Gertaeren jakinarazpenak" - -msgid "IDS_ST_BODY_CLOCK" -msgstr "Ordularia" - -msgid "IDS_ST_BODY_WEATHER" -msgstr "Eguraldia" - -msgid "IDS_ST_BODY_SET_SHORTCUTS_ON_LOCK_SCREEN" -msgstr "Ezarri lasterbideak blokeo pantailan" - -msgid "IDS_ST_BODY_SHORTCUTS" -msgstr "Sarrera zuzenak" - -msgid "IDS_ST_BODY_DUAL_CLOCK" -msgstr "Erloju duala" - -msgid "IDS_ST_BODY_SHOW_HELP_TEXT_ON_LOCK_SCREEN" -msgstr "Erakutsi laguntza testua blokeo pantailan" - -msgid "IDS_ST_BODY_SHOW_DUAL_CLOCK_ON_LOCK_SCREEN_WHEN_ROAMING" -msgstr "Erakutsi erloju duala blokeo pantailan ibiltaritzan" - -msgid "IDS_ST_BODY_TAP_AND_HOLD_THE_SCREEN_WHILE_ROTATING_THE_DEVICE_TO_OPEN_CAMERA" -msgstr "Ukitu eta eutsi pantaila gailua biratu bitartean Kamera irekitzeko" - -msgid "IDS_ST_MBODY_CAMERA_QUICK_ACCESS" -msgstr "Kameraren sarbide azkarra" - -msgid "IDS_ST_BODY_SET_SHORTCUTS" -msgstr "Ezarri lasterbideak" - -msgid "IDS_ST_BODY_DRAG_AND_DROP_TO_CHANGE_ORDER" -msgstr "Arrastatu eta jaregin ordena aldatzeko" - -msgid "IDS_ST_BODY_SELECT_APPLICATION" -msgstr "Hautatu aplikazioa" - -msgid "IDS_ST_BODY_TAP_SHORTCUT_TO_ASSIGN_APPLICATION" -msgstr "Ukitu lasterbidea aplikazioa esleitzeko" - -msgid "IDS_ST_OPT_EDIT_SHORTCUTS" -msgstr "Editatu lasterbideak" - -msgid "IDS_IM_BODY_HELP_TEXT" -msgstr "Laguntza testua" - diff --git a/lock-setting/po/fi.po b/lock-setting/po/fi.po deleted file mode 100644 index 856e0a0..0000000 --- a/lock-setting/po/fi.po +++ /dev/null @@ -1,54 +0,0 @@ -msgid "IDS_ST_BODY_LOCK_SCREEN" -msgstr "Lukitusnäyttö" - -msgid "IDS_IDLE_BODY_VIEW_EVENT_NOTIFICATIONS_ON_THE_LOCK_SCREEN" -msgstr "Näytä tapahtumailmoitukset lukitusnäytössä" - -msgid "IDS_IDLE_MBODY_EVENT_NOTIFICATIONS" -msgstr "Tapahtumailmoitukset" - -msgid "IDS_ST_BODY_CLOCK" -msgstr "Kello" - -msgid "IDS_ST_BODY_WEATHER" -msgstr "Sää" - -msgid "IDS_ST_BODY_SET_SHORTCUTS_ON_LOCK_SCREEN" -msgstr "Määritä pikanäppäimet lukitusnäytössä" - -msgid "IDS_ST_BODY_SHORTCUTS" -msgstr "Pikanäppäimet" - -msgid "IDS_ST_BODY_DUAL_CLOCK" -msgstr "Kaksoiskello" - -msgid "IDS_ST_BODY_SHOW_HELP_TEXT_ON_LOCK_SCREEN" -msgstr "Ohjetekstin näyttäminen lukitusnäytössä" - -msgid "IDS_ST_BODY_SHOW_DUAL_CLOCK_ON_LOCK_SCREEN_WHEN_ROAMING" -msgstr "Näytä kaksoiskello lukitusnäytössä verkkovierailun aikana" - -msgid "IDS_ST_BODY_TAP_AND_HOLD_THE_SCREEN_WHILE_ROTATING_THE_DEVICE_TO_OPEN_CAMERA" -msgstr "Avaa kamera painamalla näyttöä jonkin aikaa ja kiertämällä samalla laitetta" - -msgid "IDS_ST_MBODY_CAMERA_QUICK_ACCESS" -msgstr "Kameran pikakäyttö" - -msgid "IDS_ST_BODY_SET_SHORTCUTS" -msgstr "Määritä pikavalinnat" - -msgid "IDS_ST_BODY_DRAG_AND_DROP_TO_CHANGE_ORDER" -msgstr "Muuta järjestystä vetämällä ja pudottamalla" - -msgid "IDS_ST_BODY_SELECT_APPLICATION" -msgstr "Valitse sovellus" - -msgid "IDS_ST_BODY_TAP_SHORTCUT_TO_ASSIGN_APPLICATION" -msgstr "Määritä sovellus napauttamalla pikakuvaketta" - -msgid "IDS_ST_OPT_EDIT_SHORTCUTS" -msgstr "Muokkaa pikavalintoja" - -msgid "IDS_IM_BODY_HELP_TEXT" -msgstr "Ohjeteksti" - diff --git a/lock-setting/po/fr_CA.po b/lock-setting/po/fr_CA.po deleted file mode 100644 index 6982f65..0000000 --- a/lock-setting/po/fr_CA.po +++ /dev/null @@ -1,54 +0,0 @@ -msgid "IDS_ST_BODY_LOCK_SCREEN" -msgstr "Écran verrouillé" - -msgid "IDS_IDLE_BODY_VIEW_EVENT_NOTIFICATIONS_ON_THE_LOCK_SCREEN" -msgstr "Voir les notifications d'évènements sur l'écran de verrouillage" - -msgid "IDS_IDLE_MBODY_EVENT_NOTIFICATIONS" -msgstr "Notifications évènements" - -msgid "IDS_ST_BODY_CLOCK" -msgstr "Horloge" - -msgid "IDS_ST_BODY_WEATHER" -msgstr "Météo" - -msgid "IDS_ST_BODY_SET_SHORTCUTS_ON_LOCK_SCREEN" -msgstr "Sélectionner les raccourcis sur l'écran de verrouillage" - -msgid "IDS_ST_BODY_SHORTCUTS" -msgstr "Raccourcis" - -msgid "IDS_ST_BODY_DUAL_CLOCK" -msgstr "Deux horloges" - -msgid "IDS_ST_BODY_SHOW_HELP_TEXT_ON_LOCK_SCREEN" -msgstr "Afficher texte d'aide sur l'écran de verrouillage" - -msgid "IDS_ST_BODY_SHOW_DUAL_CLOCK_ON_LOCK_SCREEN_WHEN_ROAMING" -msgstr "Afficher double horloge sur l'écran de verrouillage en itinérance" - -msgid "IDS_ST_BODY_TAP_AND_HOLD_THE_SCREEN_WHILE_ROTATING_THE_DEVICE_TO_OPEN_CAMERA" -msgstr "Touchez longuement l'écran et faites pivoter l'appareil pour lancer l'appareil photo" - -msgid "IDS_ST_MBODY_CAMERA_QUICK_ACCESS" -msgstr "Accès rapide app. photo" - -msgid "IDS_ST_BODY_SET_SHORTCUTS" -msgstr "Définir des raccourcis" - -msgid "IDS_ST_BODY_DRAG_AND_DROP_TO_CHANGE_ORDER" -msgstr "Glisser et déposer pour modifier l'ordre" - -msgid "IDS_ST_BODY_SELECT_APPLICATION" -msgstr "Sélectionnez une application" - -msgid "IDS_ST_BODY_TAP_SHORTCUT_TO_ASSIGN_APPLICATION" -msgstr "Touchez le raccourci pour l'affecter à l'application" - -msgid "IDS_ST_OPT_EDIT_SHORTCUTS" -msgstr "Modifier les raccourcis" - -msgid "IDS_IM_BODY_HELP_TEXT" -msgstr "Texte d'aide" - diff --git a/lock-setting/po/fr_FR.po b/lock-setting/po/fr_FR.po deleted file mode 100644 index 0ffb78b..0000000 --- a/lock-setting/po/fr_FR.po +++ /dev/null @@ -1,54 +0,0 @@ -msgid "IDS_ST_BODY_LOCK_SCREEN" -msgstr "Écran de verrouillage" - -msgid "IDS_IDLE_BODY_VIEW_EVENT_NOTIFICATIONS_ON_THE_LOCK_SCREEN" -msgstr "Voir les notifications d'événements sur l'écran de verrouillage" - -msgid "IDS_IDLE_MBODY_EVENT_NOTIFICATIONS" -msgstr "Notifications événements" - -msgid "IDS_ST_BODY_CLOCK" -msgstr "Horloge" - -msgid "IDS_ST_BODY_WEATHER" -msgstr "Météo" - -msgid "IDS_ST_BODY_SET_SHORTCUTS_ON_LOCK_SCREEN" -msgstr "Définir les raccourcis à afficher sur l'écran de verrouillage" - -msgid "IDS_ST_BODY_SHORTCUTS" -msgstr "Raccourcis" - -msgid "IDS_ST_BODY_DUAL_CLOCK" -msgstr "Double horloge" - -msgid "IDS_ST_BODY_SHOW_HELP_TEXT_ON_LOCK_SCREEN" -msgstr "Afficher le texte d'aide au déverrouillage sur l'écran" - -msgid "IDS_ST_BODY_SHOW_DUAL_CLOCK_ON_LOCK_SCREEN_WHEN_ROAMING" -msgstr "Afficher la double horloge sur l'écran de verrouillage en itinérance" - -msgid "IDS_ST_BODY_TAP_AND_HOLD_THE_SCREEN_WHILE_ROTATING_THE_DEVICE_TO_OPEN_CAMERA" -msgstr "Maintenez votre doigt appuyé sur l'écran et faites pivoter l'appareil pour ouvrir l'appareil photo" - -msgid "IDS_ST_MBODY_CAMERA_QUICK_ACCESS" -msgstr "Accès rapide app. photo" - -msgid "IDS_ST_BODY_SET_SHORTCUTS" -msgstr "Définir des raccourcis" - -msgid "IDS_ST_BODY_DRAG_AND_DROP_TO_CHANGE_ORDER" -msgstr "Glisser et déposer pour modifier l'ordre" - -msgid "IDS_ST_BODY_SELECT_APPLICATION" -msgstr "Sélectionnez une application" - -msgid "IDS_ST_BODY_TAP_SHORTCUT_TO_ASSIGN_APPLICATION" -msgstr "Appuyez sur le raccourci pour l'affecter à l'application" - -msgid "IDS_ST_OPT_EDIT_SHORTCUTS" -msgstr "Modifier les raccourcis" - -msgid "IDS_IM_BODY_HELP_TEXT" -msgstr "Texte d'aide" - diff --git a/lock-setting/po/ga.po b/lock-setting/po/ga.po deleted file mode 100644 index 54b0785..0000000 --- a/lock-setting/po/ga.po +++ /dev/null @@ -1,54 +0,0 @@ -msgid "IDS_ST_BODY_LOCK_SCREEN" -msgstr "Glasáil an scáileán" - -msgid "IDS_IDLE_BODY_VIEW_EVENT_NOTIFICATIONS_ON_THE_LOCK_SCREEN" -msgstr "Amharc ar fhógraí imeachta ar an scáileán glasála" - -msgid "IDS_IDLE_MBODY_EVENT_NOTIFICATIONS" -msgstr "Fógra faoi imeachtaí" - -msgid "IDS_ST_BODY_CLOCK" -msgstr "Clog" - -msgid "IDS_ST_BODY_WEATHER" -msgstr "Aimsir" - -msgid "IDS_ST_BODY_SET_SHORTCUTS_ON_LOCK_SCREEN" -msgstr "Socraigh aicearraí ar an scáileán glasála" - -msgid "IDS_ST_BODY_SHORTCUTS" -msgstr "Aicearraí" - -msgid "IDS_ST_BODY_DUAL_CLOCK" -msgstr "Déchlog" - -msgid "IDS_ST_BODY_SHOW_HELP_TEXT_ON_LOCK_SCREEN" -msgstr "Taispeáin téacs cabhrach ar an scáileán glasála" - -msgid "IDS_ST_BODY_SHOW_DUAL_CLOCK_ON_LOCK_SCREEN_WHEN_ROAMING" -msgstr "Taispeáin déchlog ar an scáileáin glasála le linn fánaíocht" - -msgid "IDS_ST_BODY_TAP_AND_HOLD_THE_SCREEN_WHILE_ROTATING_THE_DEVICE_TO_OPEN_CAMERA" -msgstr "Tapáil agus coinnigh an scáileán agus an gléas á rothlú le Ceamara a oscailt" - -msgid "IDS_ST_MBODY_CAMERA_QUICK_ACCESS" -msgstr "Mear-rochtain ar cheamara" - -msgid "IDS_ST_BODY_SET_SHORTCUTS" -msgstr "Socraigh aicearraí" - -msgid "IDS_ST_BODY_DRAG_AND_DROP_TO_CHANGE_ORDER" -msgstr "Tarraing agus scaoil leis an ord a athrú" - -msgid "IDS_ST_BODY_SELECT_APPLICATION" -msgstr "Roghnaigh feidhmchlár" - -msgid "IDS_ST_BODY_TAP_SHORTCUT_TO_ASSIGN_APPLICATION" -msgstr "Tapáil aicearra le feidhmchlár a shannadh" - -msgid "IDS_ST_OPT_EDIT_SHORTCUTS" -msgstr "Cuir aicearraí in eagar" - -msgid "IDS_IM_BODY_HELP_TEXT" -msgstr "Téacs cabhrach" - diff --git a/lock-setting/po/gl.po b/lock-setting/po/gl.po deleted file mode 100644 index d1f01aa..0000000 --- a/lock-setting/po/gl.po +++ /dev/null @@ -1,54 +0,0 @@ -msgid "IDS_ST_BODY_LOCK_SCREEN" -msgstr "Bloquear pantalla" - -msgid "IDS_IDLE_BODY_VIEW_EVENT_NOTIFICATIONS_ON_THE_LOCK_SCREEN" -msgstr "Ver notificacións de eventos na pantalla de bloqueo" - -msgid "IDS_IDLE_MBODY_EVENT_NOTIFICATIONS" -msgstr "Notificacións de eventos" - -msgid "IDS_ST_BODY_CLOCK" -msgstr "Reloxo" - -msgid "IDS_ST_BODY_WEATHER" -msgstr "Tempo" - -msgid "IDS_ST_BODY_SET_SHORTCUTS_ON_LOCK_SCREEN" -msgstr "Definir os atallos na pantalla de bloqueo" - -msgid "IDS_ST_BODY_SHORTCUTS" -msgstr "Atallos" - -msgid "IDS_ST_BODY_DUAL_CLOCK" -msgstr "Reloxo dual" - -msgid "IDS_ST_BODY_SHOW_HELP_TEXT_ON_LOCK_SCREEN" -msgstr "Amosa texto de axuda na pantalla de bloqueo" - -msgid "IDS_ST_BODY_SHOW_DUAL_CLOCK_ON_LOCK_SCREEN_WHEN_ROAMING" -msgstr "Amosa o reloxo dual na pantalla de bloqueo durante a itinerancia" - -msgid "IDS_ST_BODY_TAP_AND_HOLD_THE_SCREEN_WHILE_ROTATING_THE_DEVICE_TO_OPEN_CAMERA" -msgstr "Mantén tocada a pantalla mentres xiras o dispositivo para abrir a cámara" - -msgid "IDS_ST_MBODY_CAMERA_QUICK_ACCESS" -msgstr "Acceso rápido á cámara" - -msgid "IDS_ST_BODY_SET_SHORTCUTS" -msgstr "Definir atallos" - -msgid "IDS_ST_BODY_DRAG_AND_DROP_TO_CHANGE_ORDER" -msgstr "Arrastra e solta para cambiar a orde" - -msgid "IDS_ST_BODY_SELECT_APPLICATION" -msgstr "Seleccionar aplicación" - -msgid "IDS_ST_BODY_TAP_SHORTCUT_TO_ASSIGN_APPLICATION" -msgstr "Toca o atallo ao que desexas asignar a aplicación" - -msgid "IDS_ST_OPT_EDIT_SHORTCUTS" -msgstr "Editar atallos" - -msgid "IDS_IM_BODY_HELP_TEXT" -msgstr "Texto de axuda" - diff --git a/lock-setting/po/hi.po b/lock-setting/po/hi.po deleted file mode 100644 index 1dc2c7e..0000000 --- a/lock-setting/po/hi.po +++ /dev/null @@ -1,54 +0,0 @@ -msgid "IDS_ST_BODY_LOCK_SCREEN" -msgstr "स्क्रीन लॉक करें" - -msgid "IDS_IDLE_BODY_VIEW_EVENT_NOTIFICATIONS_ON_THE_LOCK_SCREEN" -msgstr "लॉक स्क्रीन पर प्रसंग अधिसूचनाएँ देखें" - -msgid "IDS_IDLE_MBODY_EVENT_NOTIFICATIONS" -msgstr "प्रसंग अधिसूचनाएँ" - -msgid "IDS_ST_BODY_CLOCK" -msgstr "घड़ी" - -msgid "IDS_ST_BODY_WEATHER" -msgstr "मौसम" - -msgid "IDS_ST_BODY_SET_SHORTCUTS_ON_LOCK_SCREEN" -msgstr "लॉक स्‍क्रीन पर शॉर्टकट्स सेट करें" - -msgid "IDS_ST_BODY_SHORTCUTS" -msgstr "शार्टकट्स" - -msgid "IDS_ST_BODY_DUAL_CLOCK" -msgstr "दोहरी घड़ी" - -msgid "IDS_ST_BODY_SHOW_HELP_TEXT_ON_LOCK_SCREEN" -msgstr "लॉक स्क्रीन पर मदद टेक्स्ट दिखाता है" - -msgid "IDS_ST_BODY_SHOW_DUAL_CLOCK_ON_LOCK_SCREEN_WHEN_ROAMING" -msgstr "जब रोमिंग में हों तब लॉक स्‍क्रीन पर डुअल क्लॉक दिखाएँ" - -msgid "IDS_ST_BODY_TAP_AND_HOLD_THE_SCREEN_WHILE_ROTATING_THE_DEVICE_TO_OPEN_CAMERA" -msgstr "कैमरा खोलनें के लिए डिवाइस को घुमाते समय स्क्रीन को टैप और होल्ड करें" - -msgid "IDS_ST_MBODY_CAMERA_QUICK_ACCESS" -msgstr "कैमरा क्विक ऍक्सेस" - -msgid "IDS_ST_BODY_SET_SHORTCUTS" -msgstr "शॉर्टकट्स सेट करें" - -msgid "IDS_ST_BODY_DRAG_AND_DROP_TO_CHANGE_ORDER" -msgstr "क्रम बदलने के लिए ड्रैग और ड्रॉप करें" - -msgid "IDS_ST_BODY_SELECT_APPLICATION" -msgstr "एप्लीकेशन चुनें" - -msgid "IDS_ST_BODY_TAP_SHORTCUT_TO_ASSIGN_APPLICATION" -msgstr "एप्लीकेशन असाइन करने के लिए शॉर्टकट टैप करें" - -msgid "IDS_ST_OPT_EDIT_SHORTCUTS" -msgstr "शॉर्टकट्स संपादित करें" - -msgid "IDS_IM_BODY_HELP_TEXT" -msgstr "सहायता टेक्स्ट" - diff --git a/lock-setting/po/hr.po b/lock-setting/po/hr.po deleted file mode 100644 index 86c6896..0000000 --- a/lock-setting/po/hr.po +++ /dev/null @@ -1,54 +0,0 @@ -msgid "IDS_ST_BODY_LOCK_SCREEN" -msgstr "Zaslon zaključavanja" - -msgid "IDS_IDLE_BODY_VIEW_EVENT_NOTIFICATIONS_ON_THE_LOCK_SCREEN" -msgstr "Vidi obavijesti o događaju na zaslonu zaključavanja" - -msgid "IDS_IDLE_MBODY_EVENT_NOTIFICATIONS" -msgstr "Obavijesti o događaju" - -msgid "IDS_ST_BODY_CLOCK" -msgstr "Sat" - -msgid "IDS_ST_BODY_WEATHER" -msgstr "Prognoza" - -msgid "IDS_ST_BODY_SET_SHORTCUTS_ON_LOCK_SCREEN" -msgstr "Postavi prečace na zaslonu zaključavanja" - -msgid "IDS_ST_BODY_SHORTCUTS" -msgstr "Prečaci" - -msgid "IDS_ST_BODY_DUAL_CLOCK" -msgstr "Dvostruki sat" - -msgid "IDS_ST_BODY_SHOW_HELP_TEXT_ON_LOCK_SCREEN" -msgstr "Prikaži tekst pomoći na zaslonu zaključavanja" - -msgid "IDS_ST_BODY_SHOW_DUAL_CLOCK_ON_LOCK_SCREEN_WHEN_ROAMING" -msgstr "Prikaži dvostruki sat na zaslonu zaključavanja u roamingu" - -msgid "IDS_ST_BODY_TAP_AND_HOLD_THE_SCREEN_WHILE_ROTATING_THE_DEVICE_TO_OPEN_CAMERA" -msgstr "Dodirnite i držite zaslon dok okrećete uređaj da biste uključili fotoaparat" - -msgid "IDS_ST_MBODY_CAMERA_QUICK_ACCESS" -msgstr "Brzi pristup fotoaparatu" - -msgid "IDS_ST_BODY_SET_SHORTCUTS" -msgstr "Postavi prečace" - -msgid "IDS_ST_BODY_DRAG_AND_DROP_TO_CHANGE_ORDER" -msgstr "Dovucite i ispustite za promjenu redoslijeda" - -msgid "IDS_ST_BODY_SELECT_APPLICATION" -msgstr "Odaberi aplikaciju" - -msgid "IDS_ST_BODY_TAP_SHORTCUT_TO_ASSIGN_APPLICATION" -msgstr "Dodaj prečac za dodjeljivanje aplikacije" - -msgid "IDS_ST_OPT_EDIT_SHORTCUTS" -msgstr "Uredi prečace" - -msgid "IDS_IM_BODY_HELP_TEXT" -msgstr "Upute" - diff --git a/lock-setting/po/hu.po b/lock-setting/po/hu.po deleted file mode 100644 index 7028c02..0000000 --- a/lock-setting/po/hu.po +++ /dev/null @@ -1,54 +0,0 @@ -msgid "IDS_ST_BODY_LOCK_SCREEN" -msgstr "Képernyő lezárása" - -msgid "IDS_IDLE_BODY_VIEW_EVENT_NOTIFICATIONS_ON_THE_LOCK_SCREEN" -msgstr "Eseményértesítések megjelenítése a zárolt képernyőn" - -msgid "IDS_IDLE_MBODY_EVENT_NOTIFICATIONS" -msgstr "Eseményértesítések" - -msgid "IDS_ST_BODY_CLOCK" -msgstr "Óra" - -msgid "IDS_ST_BODY_WEATHER" -msgstr "Időjárás" - -msgid "IDS_ST_BODY_SET_SHORTCUTS_ON_LOCK_SCREEN" -msgstr "Zárolt képernyő parancsikonjainak beállítása" - -msgid "IDS_ST_BODY_SHORTCUTS" -msgstr "Gyorsgombok" - -msgid "IDS_ST_BODY_DUAL_CLOCK" -msgstr "Kettős óra" - -msgid "IDS_ST_BODY_SHOW_HELP_TEXT_ON_LOCK_SCREEN" -msgstr "Súgó megjelenítése a zárolt képernyőn" - -msgid "IDS_ST_BODY_SHOW_DUAL_CLOCK_ON_LOCK_SCREEN_WHEN_ROAMING" -msgstr "Második óra megjelenítése a zárolt képernyőn roaming esetén" - -msgid "IDS_ST_BODY_TAP_AND_HOLD_THE_SCREEN_WHILE_ROTATING_THE_DEVICE_TO_OPEN_CAMERA" -msgstr "A Fényképező megnyitásához érintse meg a képernyőt, és forgassa el az eszközt" - -msgid "IDS_ST_MBODY_CAMERA_QUICK_ACCESS" -msgstr "Gyors fényképezés" - -msgid "IDS_ST_BODY_SET_SHORTCUTS" -msgstr "Parancsikonok beállítása" - -msgid "IDS_ST_BODY_DRAG_AND_DROP_TO_CHANGE_ORDER" -msgstr "Az elemek áthúzásával megváltoztathatja a sorrendet" - -msgid "IDS_ST_BODY_SELECT_APPLICATION" -msgstr "Alkalmazás kiválasztása" - -msgid "IDS_ST_BODY_TAP_SHORTCUT_TO_ASSIGN_APPLICATION" -msgstr "Alkalmazás hozzárendeléséhez érintse meg a parancsikont" - -msgid "IDS_ST_OPT_EDIT_SHORTCUTS" -msgstr "Ikonok szerkesztése" - -msgid "IDS_IM_BODY_HELP_TEXT" -msgstr "Súgószöveg" - diff --git a/lock-setting/po/hy.po b/lock-setting/po/hy.po deleted file mode 100644 index 6916644..0000000 --- a/lock-setting/po/hy.po +++ /dev/null @@ -1,54 +0,0 @@ -msgid "IDS_ST_BODY_LOCK_SCREEN" -msgstr "Կողպել էկրանը" - -msgid "IDS_IDLE_BODY_VIEW_EVENT_NOTIFICATIONS_ON_THE_LOCK_SCREEN" -msgstr "Դիտել իրադարձության ծանուցումները կողպված էկրանին" - -msgid "IDS_IDLE_MBODY_EVENT_NOTIFICATIONS" -msgstr "Իրադարձութ. ծանուցումներ" - -msgid "IDS_ST_BODY_CLOCK" -msgstr "Ժամացույց" - -msgid "IDS_ST_BODY_WEATHER" -msgstr "Եղանակ" - -msgid "IDS_ST_BODY_SET_SHORTCUTS_ON_LOCK_SCREEN" -msgstr "Դնել դյուրանցումներ կողպված էկրանին" - -msgid "IDS_ST_BODY_SHORTCUTS" -msgstr "Արագ անցումներ" - -msgid "IDS_ST_BODY_DUAL_CLOCK" -msgstr "Երկակի ժամացույց" - -msgid "IDS_ST_BODY_SHOW_HELP_TEXT_ON_LOCK_SCREEN" -msgstr "Ցույց տալ օգնության տեքստը կողպված էկրանի վրա" - -msgid "IDS_ST_BODY_SHOW_DUAL_CLOCK_ON_LOCK_SCREEN_WHEN_ROAMING" -msgstr "Ռոումինգի ժամանակ ցույց տալ կրկնակի ժամացույցը կողպված էկրանին" - -msgid "IDS_ST_BODY_TAP_AND_HOLD_THE_SCREEN_WHILE_ROTATING_THE_DEVICE_TO_OPEN_CAMERA" -msgstr "Թակեք և պահեք էկրանը սարքը պտտելու ընթացքում՝ Խցիկը բացելու համար" - -msgid "IDS_ST_MBODY_CAMERA_QUICK_ACCESS" -msgstr "Խցիկի արագ մուտք" - -msgid "IDS_ST_BODY_SET_SHORTCUTS" -msgstr "Դնել դյուրանցումներ" - -msgid "IDS_ST_BODY_DRAG_AND_DROP_TO_CHANGE_ORDER" -msgstr "Քարշել և թողնել՝ կարգը փոխելու համար" - -msgid "IDS_ST_BODY_SELECT_APPLICATION" -msgstr "Ընտրել ծրագիր" - -msgid "IDS_ST_BODY_TAP_SHORTCUT_TO_ASSIGN_APPLICATION" -msgstr "Թակել դյուրանցումը՝ ծրագիր վերագրելու համար" - -msgid "IDS_ST_OPT_EDIT_SHORTCUTS" -msgstr "Խմբագրել դյուրանցումները" - -msgid "IDS_IM_BODY_HELP_TEXT" -msgstr "Օգնության տեքստ" - diff --git a/lock-setting/po/is.po b/lock-setting/po/is.po deleted file mode 100644 index 5693eed..0000000 --- a/lock-setting/po/is.po +++ /dev/null @@ -1,54 +0,0 @@ -msgid "IDS_ST_BODY_LOCK_SCREEN" -msgstr "Læsa skjá" - -msgid "IDS_IDLE_BODY_VIEW_EVENT_NOTIFICATIONS_ON_THE_LOCK_SCREEN" -msgstr "Skoða viðburðatilkynningar á lásskjá" - -msgid "IDS_IDLE_MBODY_EVENT_NOTIFICATIONS" -msgstr "Viðburðatilkynningar" - -msgid "IDS_ST_BODY_CLOCK" -msgstr "Klukka" - -msgid "IDS_ST_BODY_WEATHER" -msgstr "Veður" - -msgid "IDS_ST_BODY_SET_SHORTCUTS_ON_LOCK_SCREEN" -msgstr "Stilla flýtileiðir á læstum skjá" - -msgid "IDS_ST_BODY_SHORTCUTS" -msgstr "Flýtileiðir" - -msgid "IDS_ST_BODY_DUAL_CLOCK" -msgstr "Tvöföld klukka" - -msgid "IDS_ST_BODY_SHOW_HELP_TEXT_ON_LOCK_SCREEN" -msgstr "Sýna hjálpartexta á lásskjá" - -msgid "IDS_ST_BODY_SHOW_DUAL_CLOCK_ON_LOCK_SCREEN_WHEN_ROAMING" -msgstr "Sýna tvöfalda klukku á lásskjá í reiki" - -msgid "IDS_ST_BODY_TAP_AND_HOLD_THE_SCREEN_WHILE_ROTATING_THE_DEVICE_TO_OPEN_CAMERA" -msgstr "Pikkaðu á og haltu fingrinum á skjánum á meðan þú snýrð tækinu til að opna Myndavélina" - -msgid "IDS_ST_MBODY_CAMERA_QUICK_ACCESS" -msgstr "Flýtiaðgangur myndavélar" - -msgid "IDS_ST_BODY_SET_SHORTCUTS" -msgstr "Stilla flýtileiðir" - -msgid "IDS_ST_BODY_DRAG_AND_DROP_TO_CHANGE_ORDER" -msgstr "Dragðu og slepptu til að breyta röð" - -msgid "IDS_ST_BODY_SELECT_APPLICATION" -msgstr "Velja forrit" - -msgid "IDS_ST_BODY_TAP_SHORTCUT_TO_ASSIGN_APPLICATION" -msgstr "Pikkaðu á flýtileið til að úthluta forriti" - -msgid "IDS_ST_OPT_EDIT_SHORTCUTS" -msgstr "Breyta flýtileiðum" - -msgid "IDS_IM_BODY_HELP_TEXT" -msgstr "Hjálpartexti" - diff --git a/lock-setting/po/it_IT.po b/lock-setting/po/it_IT.po deleted file mode 100644 index d39fd3c..0000000 --- a/lock-setting/po/it_IT.po +++ /dev/null @@ -1,54 +0,0 @@ -msgid "IDS_ST_BODY_LOCK_SCREEN" -msgstr "Schermata di blocco" - -msgid "IDS_IDLE_BODY_VIEW_EVENT_NOTIFICATIONS_ON_THE_LOCK_SCREEN" -msgstr "Visualizza le notifiche eventi sulla schermata di blocco" - -msgid "IDS_IDLE_MBODY_EVENT_NOTIFICATIONS" -msgstr "Notifiche eventi" - -msgid "IDS_ST_BODY_CLOCK" -msgstr "Orologio" - -msgid "IDS_ST_BODY_WEATHER" -msgstr "Meteo" - -msgid "IDS_ST_BODY_SET_SHORTCUTS_ON_LOCK_SCREEN" -msgstr "Imposta collegamenti nella schermata di blocco" - -msgid "IDS_ST_BODY_SHORTCUTS" -msgstr "Collegamenti" - -msgid "IDS_ST_BODY_DUAL_CLOCK" -msgstr "Doppio orologio" - -msgid "IDS_ST_BODY_SHOW_HELP_TEXT_ON_LOCK_SCREEN" -msgstr "Mostra testo guida nella schermata di blocco" - -msgid "IDS_ST_BODY_SHOW_DUAL_CLOCK_ON_LOCK_SCREEN_WHEN_ROAMING" -msgstr "Mostra orologio doppio nella schermata di blocco durante il roaming" - -msgid "IDS_ST_BODY_TAP_AND_HOLD_THE_SCREEN_WHILE_ROTATING_THE_DEVICE_TO_OPEN_CAMERA" -msgstr "Tenere premuto lo schermo mentre si ruota il dispositivo per aprire la fotocamera" - -msgid "IDS_ST_MBODY_CAMERA_QUICK_ACCESS" -msgstr "Sblocco fotocamera" - -msgid "IDS_ST_BODY_SET_SHORTCUTS" -msgstr "Imposta collegamenti" - -msgid "IDS_ST_BODY_DRAG_AND_DROP_TO_CHANGE_ORDER" -msgstr "Trascina per modificare ordine" - -msgid "IDS_ST_BODY_SELECT_APPLICATION" -msgstr "Seleziona applicazione" - -msgid "IDS_ST_BODY_TAP_SHORTCUT_TO_ASSIGN_APPLICATION" -msgstr "Tocca collegamento per assegnare un'applicazione" - -msgid "IDS_ST_OPT_EDIT_SHORTCUTS" -msgstr "Modifica collegamenti" - -msgid "IDS_IM_BODY_HELP_TEXT" -msgstr "Testo guida" - diff --git a/lock-setting/po/ja_JP.po b/lock-setting/po/ja_JP.po deleted file mode 100644 index 19c083d..0000000 --- a/lock-setting/po/ja_JP.po +++ /dev/null @@ -1,54 +0,0 @@ -msgid "IDS_ST_BODY_LOCK_SCREEN" -msgstr "ロック画面" - -msgid "IDS_IDLE_BODY_VIEW_EVENT_NOTIFICATIONS_ON_THE_LOCK_SCREEN" -msgstr "ロック画面にイベント通知を表示" - -msgid "IDS_IDLE_MBODY_EVENT_NOTIFICATIONS" -msgstr "イベント通知" - -msgid "IDS_ST_BODY_CLOCK" -msgstr "時計" - -msgid "IDS_ST_BODY_WEATHER" -msgstr "天気予報" - -msgid "IDS_ST_BODY_SET_SHORTCUTS_ON_LOCK_SCREEN" -msgstr "ロック画面に表示するショートカットを設定" - -msgid "IDS_ST_BODY_SHORTCUTS" -msgstr "ショートカット" - -msgid "IDS_ST_BODY_DUAL_CLOCK" -msgstr "デュアル時計" - -msgid "IDS_ST_BODY_SHOW_HELP_TEXT_ON_LOCK_SCREEN" -msgstr "ロック画面にヘルプテキストを表示" - -msgid "IDS_ST_BODY_SHOW_DUAL_CLOCK_ON_LOCK_SCREEN_WHEN_ROAMING" -msgstr "ローミング時、ロック画面にデュアル時計を表示" - -msgid "IDS_ST_BODY_TAP_AND_HOLD_THE_SCREEN_WHILE_ROTATING_THE_DEVICE_TO_OPEN_CAMERA" -msgstr "画面を押しながら端末を回転させてカメラを起動" - -msgid "IDS_ST_MBODY_CAMERA_QUICK_ACCESS" -msgstr "カメラクイック起動" - -msgid "IDS_ST_BODY_SET_SHORTCUTS" -msgstr "ショートカットを設定" - -msgid "IDS_ST_BODY_DRAG_AND_DROP_TO_CHANGE_ORDER" -msgstr "ドラッグして順番を並べ替えます。" - -msgid "IDS_ST_BODY_SELECT_APPLICATION" -msgstr "アプリケーションを選択" - -msgid "IDS_ST_BODY_TAP_SHORTCUT_TO_ASSIGN_APPLICATION" -msgstr "ショートカットをタップしてアプリケーションを割り当てます。" - -msgid "IDS_ST_OPT_EDIT_SHORTCUTS" -msgstr "ショートカットを編集" - -msgid "IDS_IM_BODY_HELP_TEXT" -msgstr "ヘルプ" - diff --git a/lock-setting/po/ka.po b/lock-setting/po/ka.po deleted file mode 100644 index b6b045e..0000000 --- a/lock-setting/po/ka.po +++ /dev/null @@ -1,54 +0,0 @@ -msgid "IDS_ST_BODY_LOCK_SCREEN" -msgstr "ეკრანის დაბლოკვა" - -msgid "IDS_IDLE_BODY_VIEW_EVENT_NOTIFICATIONS_ON_THE_LOCK_SCREEN" -msgstr "მოვლენის შეტყობინებების ნახვა დაბლოკილ ეკრანზე" - -msgid "IDS_IDLE_MBODY_EVENT_NOTIFICATIONS" -msgstr "მოვლენის შეტყობინებები" - -msgid "IDS_ST_BODY_CLOCK" -msgstr "საათი" - -msgid "IDS_ST_BODY_WEATHER" -msgstr "ამინდი" - -msgid "IDS_ST_BODY_SET_SHORTCUTS_ON_LOCK_SCREEN" -msgstr "სწრაფი ღილაკების დაყენება დაბლოკილ ეკრანზე" - -msgid "IDS_ST_BODY_SHORTCUTS" -msgstr "სწრაფი ღილაკები" - -msgid "IDS_ST_BODY_DUAL_CLOCK" -msgstr "ორმაგი საათი" - -msgid "IDS_ST_BODY_SHOW_HELP_TEXT_ON_LOCK_SCREEN" -msgstr "დახმარების ტექსტის ჩვენება დაბლოკილ ეკრანზე" - -msgid "IDS_ST_BODY_SHOW_DUAL_CLOCK_ON_LOCK_SCREEN_WHEN_ROAMING" -msgstr "ორმაგი საათის ჩვენება დაბლოკილ ეკრანზე როუმინგის დროს" - -msgid "IDS_ST_BODY_TAP_AND_HOLD_THE_SCREEN_WHILE_ROTATING_THE_DEVICE_TO_OPEN_CAMERA" -msgstr "კამერის გასახსნელად, ხანგრძლივად შეეხეთ ეკრანს და მოაბრუნეთ აპარატი" - -msgid "IDS_ST_MBODY_CAMERA_QUICK_ACCESS" -msgstr "კამერის სწრაფი გახსნა" - -msgid "IDS_ST_BODY_SET_SHORTCUTS" -msgstr "ღილაკების დაყენება" - -msgid "IDS_ST_BODY_DRAG_AND_DROP_TO_CHANGE_ORDER" -msgstr "აიღეთ და გადაიტანეთ, თუ გსურთ შეცვალოთ მიმდევრობა" - -msgid "IDS_ST_BODY_SELECT_APPLICATION" -msgstr "აირჩიეთ პროგრამა" - -msgid "IDS_ST_BODY_TAP_SHORTCUT_TO_ASSIGN_APPLICATION" -msgstr "დააკაკუნეთ სწრაფ ღილაკზე, რომ მიანიჭოთ პროგრამის გახსნის ფუნქცია" - -msgid "IDS_ST_OPT_EDIT_SHORTCUTS" -msgstr "სწრაფი ღილაკების შესწორება" - -msgid "IDS_IM_BODY_HELP_TEXT" -msgstr "დამხმარე ტექსტი" - diff --git a/lock-setting/po/kk.po b/lock-setting/po/kk.po deleted file mode 100644 index 5f30631..0000000 --- a/lock-setting/po/kk.po +++ /dev/null @@ -1,54 +0,0 @@ -msgid "IDS_ST_BODY_LOCK_SCREEN" -msgstr "Экранды құлыптау" - -msgid "IDS_IDLE_BODY_VIEW_EVENT_NOTIFICATIONS_ON_THE_LOCK_SCREEN" -msgstr "Құлыптау экранында оқиғалар туралы хабарландыруларды қарап шығу" - -msgid "IDS_IDLE_MBODY_EVENT_NOTIFICATIONS" -msgstr "Оқиғалар туралы хабарлау" - -msgid "IDS_ST_BODY_CLOCK" -msgstr "Сағат" - -msgid "IDS_ST_BODY_WEATHER" -msgstr "Ауа райы" - -msgid "IDS_ST_BODY_SET_SHORTCUTS_ON_LOCK_SCREEN" -msgstr "Құлып экранында белгішелерді белгілеу" - -msgid "IDS_ST_BODY_SHORTCUTS" -msgstr "Тез кіру" - -msgid "IDS_ST_BODY_DUAL_CLOCK" -msgstr "Қос сағат" - -msgid "IDS_ST_BODY_SHOW_HELP_TEXT_ON_LOCK_SCREEN" -msgstr "Құлыптаулы экранында көмек мәтінді көрсетіңіз" - -msgid "IDS_ST_BODY_SHOW_DUAL_CLOCK_ON_LOCK_SCREEN_WHEN_ROAMING" -msgstr "Роумингте қос сағатты құлып экранынан көрсетіңіз" - -msgid "IDS_ST_BODY_TAP_AND_HOLD_THE_SCREEN_WHILE_ROTATING_THE_DEVICE_TO_OPEN_CAMERA" -msgstr "Камераны ашу үшін құрылғыны бұрғанда экранды басып тұрыңыз" - -msgid "IDS_ST_MBODY_CAMERA_QUICK_ACCESS" -msgstr "Камераға жылдам өту" - -msgid "IDS_ST_BODY_SET_SHORTCUTS" -msgstr "Белгішелер орнату" - -msgid "IDS_ST_BODY_DRAG_AND_DROP_TO_CHANGE_ORDER" -msgstr "Ретін өзгерту үшін сүйреп алып барыңыз" - -msgid "IDS_ST_BODY_SELECT_APPLICATION" -msgstr "Бағдарлама таңдау" - -msgid "IDS_ST_BODY_TAP_SHORTCUT_TO_ASSIGN_APPLICATION" -msgstr "Бағдарламаны тағайындау үшін белгішені түртіңіз" - -msgid "IDS_ST_OPT_EDIT_SHORTCUTS" -msgstr "Тез кіру ретін өзгерту" - -msgid "IDS_IM_BODY_HELP_TEXT" -msgstr "Анықтама мәтіні" - diff --git a/lock-setting/po/ko_KR.po b/lock-setting/po/ko_KR.po deleted file mode 100644 index aca7f74..0000000 --- a/lock-setting/po/ko_KR.po +++ /dev/null @@ -1,54 +0,0 @@ -msgid "IDS_ST_BODY_LOCK_SCREEN" -msgstr "잠금화면" - -msgid "IDS_IDLE_BODY_VIEW_EVENT_NOTIFICATIONS_ON_THE_LOCK_SCREEN" -msgstr "잠금화면에서 일정 알림 보기" - -msgid "IDS_IDLE_MBODY_EVENT_NOTIFICATIONS" -msgstr "일정 알림" - -msgid "IDS_ST_BODY_CLOCK" -msgstr "시계" - -msgid "IDS_ST_BODY_WEATHER" -msgstr "날씨" - -msgid "IDS_ST_BODY_SET_SHORTCUTS_ON_LOCK_SCREEN" -msgstr "잠금화면에 바로가기를 설정합니다" - -msgid "IDS_ST_BODY_SHORTCUTS" -msgstr "바로가기" - -msgid "IDS_ST_BODY_DUAL_CLOCK" -msgstr "듀얼 시계" - -msgid "IDS_ST_BODY_SHOW_HELP_TEXT_ON_LOCK_SCREEN" -msgstr "잠금화면에 도움말을 표시합니다" - -msgid "IDS_ST_BODY_SHOW_DUAL_CLOCK_ON_LOCK_SCREEN_WHEN_ROAMING" -msgstr "로밍 시 잠금화면에 듀얼 시계를 표시합니다" - -msgid "IDS_ST_BODY_TAP_AND_HOLD_THE_SCREEN_WHILE_ROTATING_THE_DEVICE_TO_OPEN_CAMERA" -msgstr "화면을 길게 누른 채 디바이스를 회전하면 카메라가 실행됩니다" - -msgid "IDS_ST_MBODY_CAMERA_QUICK_ACCESS" -msgstr "빠른 카메라 실행" - -msgid "IDS_ST_BODY_SET_SHORTCUTS" -msgstr "바로가기 설정" - -msgid "IDS_ST_BODY_DRAG_AND_DROP_TO_CHANGE_ORDER" -msgstr "순서를 바꾸려면 드래그하세요" - -msgid "IDS_ST_BODY_SELECT_APPLICATION" -msgstr "애플리케이션 선택" - -msgid "IDS_ST_BODY_TAP_SHORTCUT_TO_ASSIGN_APPLICATION" -msgstr "애플리케이션을 지정하려면 바로가기를 누르세요" - -msgid "IDS_ST_OPT_EDIT_SHORTCUTS" -msgstr "바로가기 편집" - -msgid "IDS_IM_BODY_HELP_TEXT" -msgstr "도움말" - diff --git a/lock-setting/po/lt.po b/lock-setting/po/lt.po deleted file mode 100644 index 7067c08..0000000 --- a/lock-setting/po/lt.po +++ /dev/null @@ -1,54 +0,0 @@ -msgid "IDS_ST_BODY_LOCK_SCREEN" -msgstr "Užrakinimo ekranas" - -msgid "IDS_IDLE_BODY_VIEW_EVENT_NOTIFICATIONS_ON_THE_LOCK_SCREEN" -msgstr "Peržiūrėti pranešimus apie įvykius užrakintame ekrane" - -msgid "IDS_IDLE_MBODY_EVENT_NOTIFICATIONS" -msgstr "Pranešimai apie įvykius" - -msgid "IDS_ST_BODY_CLOCK" -msgstr "Laikrodis" - -msgid "IDS_ST_BODY_WEATHER" -msgstr "Oras" - -msgid "IDS_ST_BODY_SET_SHORTCUTS_ON_LOCK_SCREEN" -msgstr "Nustatyti sparčiuosius mygtukus užrakinimo ekrane" - -msgid "IDS_ST_BODY_SHORTCUTS" -msgstr "Sparčiosios prieigos mygtukai" - -msgid "IDS_ST_BODY_DUAL_CLOCK" -msgstr "Dvigubas laikrodis" - -msgid "IDS_ST_BODY_SHOW_HELP_TEXT_ON_LOCK_SCREEN" -msgstr "Rodyti pagalbos tekstą užrakintame ekrane" - -msgid "IDS_ST_BODY_SHOW_DUAL_CLOCK_ON_LOCK_SCREEN_WHEN_ROAMING" -msgstr "Rodyti dvigubą laikrodį užrakinimo ekrane, kai naudojamasi tarptinkliniu ryšiu" - -msgid "IDS_ST_BODY_TAP_AND_HOLD_THE_SCREEN_WHILE_ROTATING_THE_DEVICE_TO_OPEN_CAMERA" -msgstr "Jei norite atidaryti fotoaparatą, bakstelėkite ir laikykite ekraną sukdami įrenginį" - -msgid "IDS_ST_MBODY_CAMERA_QUICK_ACCESS" -msgstr "Gr. prieiga prie fotoap." - -msgid "IDS_ST_BODY_SET_SHORTCUTS" -msgstr "Nustatyti trumpinius" - -msgid "IDS_ST_BODY_DRAG_AND_DROP_TO_CHANGE_ORDER" -msgstr "Vilkdami pakeiskite išdėstymą" - -msgid "IDS_ST_BODY_SELECT_APPLICATION" -msgstr "Pasirinkti programą" - -msgid "IDS_ST_BODY_TAP_SHORTCUT_TO_ASSIGN_APPLICATION" -msgstr "Bakstelėkite spartųjį mygtuką, kad priskirtumėte programą" - -msgid "IDS_ST_OPT_EDIT_SHORTCUTS" -msgstr "Redaguoti nuorodas" - -msgid "IDS_IM_BODY_HELP_TEXT" -msgstr "Pagalbos tekstas" - diff --git a/lock-setting/po/lv.po b/lock-setting/po/lv.po deleted file mode 100644 index af7d248..0000000 --- a/lock-setting/po/lv.po +++ /dev/null @@ -1,54 +0,0 @@ -msgid "IDS_ST_BODY_LOCK_SCREEN" -msgstr "Bloķēšanas ekrāns" - -msgid "IDS_IDLE_BODY_VIEW_EVENT_NOTIFICATIONS_ON_THE_LOCK_SCREEN" -msgstr "Skatīt notikumu paziņojumus bloķētā ekrānā" - -msgid "IDS_IDLE_MBODY_EVENT_NOTIFICATIONS" -msgstr "Notikumu paziņojumi" - -msgid "IDS_ST_BODY_CLOCK" -msgstr "Pulkstenis" - -msgid "IDS_ST_BODY_WEATHER" -msgstr "Laiks" - -msgid "IDS_ST_BODY_SET_SHORTCUTS_ON_LOCK_SCREEN" -msgstr "Iestatīt īsceļus bloķētajā ekrānā" - -msgid "IDS_ST_BODY_SHORTCUTS" -msgstr "Īsceļi" - -msgid "IDS_ST_BODY_DUAL_CLOCK" -msgstr "Duālais pulkstenis" - -msgid "IDS_ST_BODY_SHOW_HELP_TEXT_ON_LOCK_SCREEN" -msgstr "Rādīt palīdzības tekstu bloķēšanas ekrānā" - -msgid "IDS_ST_BODY_SHOW_DUAL_CLOCK_ON_LOCK_SCREEN_WHEN_ROAMING" -msgstr "Viesabonēšanas laikā bloķēšanas ekrānā rādīt duālo pulksteni" - -msgid "IDS_ST_BODY_TAP_AND_HOLD_THE_SCREEN_WHILE_ROTATING_THE_DEVICE_TO_OPEN_CAMERA" -msgstr "Lai atvērtu kameru, pieskarieties un turiet ekrānu, un vienlaicīgi pagrieziet ierīci" - -msgid "IDS_ST_MBODY_CAMERA_QUICK_ACCESS" -msgstr "Ātra piekļuve kamerai" - -msgid "IDS_ST_BODY_SET_SHORTCUTS" -msgstr "Iestatīt īsceļus" - -msgid "IDS_ST_BODY_DRAG_AND_DROP_TO_CHANGE_ORDER" -msgstr "Velciet un nometiet, lai mainītu kārtību" - -msgid "IDS_ST_BODY_SELECT_APPLICATION" -msgstr "Izvēlēties programmu" - -msgid "IDS_ST_BODY_TAP_SHORTCUT_TO_ASSIGN_APPLICATION" -msgstr "Pieskarieties īsceļam, lai piešķirtu programmu" - -msgid "IDS_ST_OPT_EDIT_SHORTCUTS" -msgstr "Rediģēt īsceļus" - -msgid "IDS_IM_BODY_HELP_TEXT" -msgstr "Palīdzības teksts" - diff --git a/lock-setting/po/mk.po b/lock-setting/po/mk.po deleted file mode 100644 index 2cc2c03..0000000 --- a/lock-setting/po/mk.po +++ /dev/null @@ -1,54 +0,0 @@ -msgid "IDS_ST_BODY_LOCK_SCREEN" -msgstr "Заклучување на екранот" - -msgid "IDS_IDLE_BODY_VIEW_EVENT_NOTIFICATIONS_ON_THE_LOCK_SCREEN" -msgstr "Гледај известувања за настани на екранот за заклучување" - -msgid "IDS_IDLE_MBODY_EVENT_NOTIFICATIONS" -msgstr "Известувања за настани" - -msgid "IDS_ST_BODY_CLOCK" -msgstr "Часовник" - -msgid "IDS_ST_BODY_WEATHER" -msgstr "Време" - -msgid "IDS_ST_BODY_SET_SHORTCUTS_ON_LOCK_SCREEN" -msgstr "Постави кратенки на екранот за заклучување" - -msgid "IDS_ST_BODY_SHORTCUTS" -msgstr "Кратенки" - -msgid "IDS_ST_BODY_DUAL_CLOCK" -msgstr "Двоен часовник" - -msgid "IDS_ST_BODY_SHOW_HELP_TEXT_ON_LOCK_SCREEN" -msgstr "Прикажи текст за помош на екранот за заклучување" - -msgid "IDS_ST_BODY_SHOW_DUAL_CLOCK_ON_LOCK_SCREEN_WHEN_ROAMING" -msgstr "Прикажи двоен часовник на екранот за заклучување при роаминг" - -msgid "IDS_ST_BODY_TAP_AND_HOLD_THE_SCREEN_WHILE_ROTATING_THE_DEVICE_TO_OPEN_CAMERA" -msgstr "Допрете и држете го екранот додека го вртите уредот за да го отворите фотоапаратот" - -msgid "IDS_ST_MBODY_CAMERA_QUICK_ACCESS" -msgstr "Брз пристап до камерата" - -msgid "IDS_ST_BODY_SET_SHORTCUTS" -msgstr "Одреди кратенки" - -msgid "IDS_ST_BODY_DRAG_AND_DROP_TO_CHANGE_ORDER" -msgstr "Повлечете и пуштете за да го смените редоследот" - -msgid "IDS_ST_BODY_SELECT_APPLICATION" -msgstr "Избери апликација" - -msgid "IDS_ST_BODY_TAP_SHORTCUT_TO_ASSIGN_APPLICATION" -msgstr "Допрете кратенка за да доделите апликација" - -msgid "IDS_ST_OPT_EDIT_SHORTCUTS" -msgstr "Измени кратенки" - -msgid "IDS_IM_BODY_HELP_TEXT" -msgstr "Текст за помош" - diff --git a/lock-setting/po/nb.po b/lock-setting/po/nb.po deleted file mode 100644 index 167c148..0000000 --- a/lock-setting/po/nb.po +++ /dev/null @@ -1,54 +0,0 @@ -msgid "IDS_ST_BODY_LOCK_SCREEN" -msgstr "Skjermlås" - -msgid "IDS_IDLE_BODY_VIEW_EVENT_NOTIFICATIONS_ON_THE_LOCK_SCREEN" -msgstr "Vis hendelsesvarsler på skjermlåsen" - -msgid "IDS_IDLE_MBODY_EVENT_NOTIFICATIONS" -msgstr "Hendelsesvarsler" - -msgid "IDS_ST_BODY_CLOCK" -msgstr "Klokke" - -msgid "IDS_ST_BODY_WEATHER" -msgstr "Vær" - -msgid "IDS_ST_BODY_SET_SHORTCUTS_ON_LOCK_SCREEN" -msgstr "Angi snarveier på skjermlås" - -msgid "IDS_ST_BODY_SHORTCUTS" -msgstr "Snarveier" - -msgid "IDS_ST_BODY_DUAL_CLOCK" -msgstr "Dobbel klokke" - -msgid "IDS_ST_BODY_SHOW_HELP_TEXT_ON_LOCK_SCREEN" -msgstr "Vis hjelpetekst på skjermlås" - -msgid "IDS_ST_BODY_SHOW_DUAL_CLOCK_ON_LOCK_SCREEN_WHEN_ROAMING" -msgstr "Vis dobbel klokke på skjermlås under roaming" - -msgid "IDS_ST_BODY_TAP_AND_HOLD_THE_SCREEN_WHILE_ROTATING_THE_DEVICE_TO_OPEN_CAMERA" -msgstr "Trykk på og hold skjermen mens du roterer enheten for å åpne Kamera" - -msgid "IDS_ST_MBODY_CAMERA_QUICK_ACCESS" -msgstr "Hurtigtilgang til kamera" - -msgid "IDS_ST_BODY_SET_SHORTCUTS" -msgstr "Angi snarveier" - -msgid "IDS_ST_BODY_DRAG_AND_DROP_TO_CHANGE_ORDER" -msgstr "Dra og slipp for å endre rekkefølgen" - -msgid "IDS_ST_BODY_SELECT_APPLICATION" -msgstr "Velg program" - -msgid "IDS_ST_BODY_TAP_SHORTCUT_TO_ASSIGN_APPLICATION" -msgstr "Trykk på snarvei for å tilordne program" - -msgid "IDS_ST_OPT_EDIT_SHORTCUTS" -msgstr "Rediger snarveier" - -msgid "IDS_IM_BODY_HELP_TEXT" -msgstr "Hjelpetekst" - diff --git a/lock-setting/po/nl_NL.po b/lock-setting/po/nl_NL.po deleted file mode 100644 index 9289e1b..0000000 --- a/lock-setting/po/nl_NL.po +++ /dev/null @@ -1,54 +0,0 @@ -msgid "IDS_ST_BODY_LOCK_SCREEN" -msgstr "Vergrendelscherm" - -msgid "IDS_IDLE_BODY_VIEW_EVENT_NOTIFICATIONS_ON_THE_LOCK_SCREEN" -msgstr "Meldingen van agenda-items weergeven op het vergrendelscherm" - -msgid "IDS_IDLE_MBODY_EVENT_NOTIFICATIONS" -msgstr "Meldingen agenda-items" - -msgid "IDS_ST_BODY_CLOCK" -msgstr "Klok" - -msgid "IDS_ST_BODY_WEATHER" -msgstr "Weer" - -msgid "IDS_ST_BODY_SET_SHORTCUTS_ON_LOCK_SCREEN" -msgstr "Sneltoetsen instellen op vergrendeld scherm" - -msgid "IDS_ST_BODY_SHORTCUTS" -msgstr "Sneltoetsen" - -msgid "IDS_ST_BODY_DUAL_CLOCK" -msgstr "Twee klokken" - -msgid "IDS_ST_BODY_SHOW_HELP_TEXT_ON_LOCK_SCREEN" -msgstr "Help-tekst op vergrendeld scherm weergeven" - -msgid "IDS_ST_BODY_SHOW_DUAL_CLOCK_ON_LOCK_SCREEN_WHEN_ROAMING" -msgstr "Dubbele klok weergeven op vergrendeld scherm bij roaming" - -msgid "IDS_ST_BODY_TAP_AND_HOLD_THE_SCREEN_WHILE_ROTATING_THE_DEVICE_TO_OPEN_CAMERA" -msgstr "Tik en houd uw vinger op het scherm terwijl u het apparaat draait om de camera te openen" - -msgid "IDS_ST_MBODY_CAMERA_QUICK_ACCESS" -msgstr "Camera ontgrendelen" - -msgid "IDS_ST_BODY_SET_SHORTCUTS" -msgstr "Snelkoppelingen instellen" - -msgid "IDS_ST_BODY_DRAG_AND_DROP_TO_CHANGE_ORDER" -msgstr "Sleep en zet neer om volgorde te wijzigen" - -msgid "IDS_ST_BODY_SELECT_APPLICATION" -msgstr "Applicatie selecteren" - -msgid "IDS_ST_BODY_TAP_SHORTCUT_TO_ASSIGN_APPLICATION" -msgstr "Tik op sneltoets om applicatie toe te wijzen" - -msgid "IDS_ST_OPT_EDIT_SHORTCUTS" -msgstr "Sneltoetsen wijzigen" - -msgid "IDS_IM_BODY_HELP_TEXT" -msgstr "Help-tekst" - diff --git a/lock-setting/po/pl.po b/lock-setting/po/pl.po deleted file mode 100644 index 3d8cbae..0000000 --- a/lock-setting/po/pl.po +++ /dev/null @@ -1,54 +0,0 @@ -msgid "IDS_ST_BODY_LOCK_SCREEN" -msgstr "Ekran blokady" - -msgid "IDS_IDLE_BODY_VIEW_EVENT_NOTIFICATIONS_ON_THE_LOCK_SCREEN" -msgstr "Wyświetlaj powiadomienia o wydarzeniach na ekranie blokady" - -msgid "IDS_IDLE_MBODY_EVENT_NOTIFICATIONS" -msgstr "Powiadomienia o wydarzen." - -msgid "IDS_ST_BODY_CLOCK" -msgstr "Zegar" - -msgid "IDS_ST_BODY_WEATHER" -msgstr "Pogoda" - -msgid "IDS_ST_BODY_SET_SHORTCUTS_ON_LOCK_SCREEN" -msgstr "Ustaw skróty na ekranie blokady" - -msgid "IDS_ST_BODY_SHORTCUTS" -msgstr "Skróty klawiszowe" - -msgid "IDS_ST_BODY_DUAL_CLOCK" -msgstr "Zegar podwójny" - -msgid "IDS_ST_BODY_SHOW_HELP_TEXT_ON_LOCK_SCREEN" -msgstr "Pokaż tekst pomocy na ekranie blokady" - -msgid "IDS_ST_BODY_SHOW_DUAL_CLOCK_ON_LOCK_SCREEN_WHEN_ROAMING" -msgstr "Wyświetlanie zegara podwójnego na ekranie blokady podczas roamingu" - -msgid "IDS_ST_BODY_TAP_AND_HOLD_THE_SCREEN_WHILE_ROTATING_THE_DEVICE_TO_OPEN_CAMERA" -msgstr "Obracając urządzenie, dotknij i przytrzymaj ekran, aby otworzyć aparat" - -msgid "IDS_ST_MBODY_CAMERA_QUICK_ACCESS" -msgstr "Skrót aparatu" - -msgid "IDS_ST_BODY_SET_SHORTCUTS" -msgstr "Ustawianie skrótów" - -msgid "IDS_ST_BODY_DRAG_AND_DROP_TO_CHANGE_ORDER" -msgstr "Przeciągnij i upuść, aby zmienić kolejność" - -msgid "IDS_ST_BODY_SELECT_APPLICATION" -msgstr "Wybierz aplikację" - -msgid "IDS_ST_BODY_TAP_SHORTCUT_TO_ASSIGN_APPLICATION" -msgstr "Dotknij skrótu, aby przypisać aplikację" - -msgid "IDS_ST_OPT_EDIT_SHORTCUTS" -msgstr "Edytuj skróty" - -msgid "IDS_IM_BODY_HELP_TEXT" -msgstr "Tekst pomocy" - diff --git a/lock-setting/po/pt_BR.po b/lock-setting/po/pt_BR.po deleted file mode 100644 index 8072ea6..0000000 --- a/lock-setting/po/pt_BR.po +++ /dev/null @@ -1,54 +0,0 @@ -msgid "IDS_ST_BODY_LOCK_SCREEN" -msgstr "Tela de bloqueio" - -msgid "IDS_IDLE_BODY_VIEW_EVENT_NOTIFICATIONS_ON_THE_LOCK_SCREEN" -msgstr "Exibir notificações de eventos na tela de bloqueio" - -msgid "IDS_IDLE_MBODY_EVENT_NOTIFICATIONS" -msgstr "Notificações de evento" - -msgid "IDS_ST_BODY_CLOCK" -msgstr "Relógio" - -msgid "IDS_ST_BODY_WEATHER" -msgstr "Clima" - -msgid "IDS_ST_BODY_SET_SHORTCUTS_ON_LOCK_SCREEN" -msgstr "Definir atalhos na tela de bloqueio" - -msgid "IDS_ST_BODY_SHORTCUTS" -msgstr "Atalhos" - -msgid "IDS_ST_BODY_DUAL_CLOCK" -msgstr "Relógio duplo" - -msgid "IDS_ST_BODY_SHOW_HELP_TEXT_ON_LOCK_SCREEN" -msgstr "Exibir texto de ajuda na tela bloqueada" - -msgid "IDS_ST_BODY_SHOW_DUAL_CLOCK_ON_LOCK_SCREEN_WHEN_ROAMING" -msgstr "Mostrar relógio duplo na tela de bloqueio quando em roaming" - -msgid "IDS_ST_BODY_TAP_AND_HOLD_THE_SCREEN_WHILE_ROTATING_THE_DEVICE_TO_OPEN_CAMERA" -msgstr "Toque e segure a tela enquanto gira o dispositivo para abrir a Câmera" - -msgid "IDS_ST_MBODY_CAMERA_QUICK_ACCESS" -msgstr "Acesso rápido à Câmera" - -msgid "IDS_ST_BODY_SET_SHORTCUTS" -msgstr "Configurar atalhos" - -msgid "IDS_ST_BODY_DRAG_AND_DROP_TO_CHANGE_ORDER" -msgstr "Arraste e solte para alterar a ordem" - -msgid "IDS_ST_BODY_SELECT_APPLICATION" -msgstr "Selecionar aplicação" - -msgid "IDS_ST_BODY_TAP_SHORTCUT_TO_ASSIGN_APPLICATION" -msgstr "Toque no atalho para atribuir aplicativo" - -msgid "IDS_ST_OPT_EDIT_SHORTCUTS" -msgstr "Editar atalhos" - -msgid "IDS_IM_BODY_HELP_TEXT" -msgstr "Texto de ajuda" - diff --git a/lock-setting/po/pt_PT.po b/lock-setting/po/pt_PT.po deleted file mode 100644 index 5005ee3..0000000 --- a/lock-setting/po/pt_PT.po +++ /dev/null @@ -1,54 +0,0 @@ -msgid "IDS_ST_BODY_LOCK_SCREEN" -msgstr "Ecrã bloqueado" - -msgid "IDS_IDLE_BODY_VIEW_EVENT_NOTIFICATIONS_ON_THE_LOCK_SCREEN" -msgstr "Ver notificações de eventos no ecrã bloqueado" - -msgid "IDS_IDLE_MBODY_EVENT_NOTIFICATIONS" -msgstr "Notificações de eventos" - -msgid "IDS_ST_BODY_CLOCK" -msgstr "Relógio" - -msgid "IDS_ST_BODY_WEATHER" -msgstr "Tempo" - -msgid "IDS_ST_BODY_SET_SHORTCUTS_ON_LOCK_SCREEN" -msgstr "Definir atalhos no ecrã bloqueado" - -msgid "IDS_ST_BODY_SHORTCUTS" -msgstr "Atalhos" - -msgid "IDS_ST_BODY_DUAL_CLOCK" -msgstr "Rel. duplo" - -msgid "IDS_ST_BODY_SHOW_HELP_TEXT_ON_LOCK_SCREEN" -msgstr "Mostrar texto de ajuda no ecrã bloqueado" - -msgid "IDS_ST_BODY_SHOW_DUAL_CLOCK_ON_LOCK_SCREEN_WHEN_ROAMING" -msgstr "Mostrar relógio duplo no ecrã bloqueado em roaming" - -msgid "IDS_ST_BODY_TAP_AND_HOLD_THE_SCREEN_WHILE_ROTATING_THE_DEVICE_TO_OPEN_CAMERA" -msgstr "Toque sem soltar no ecrã ao rodar o dispositivo para abrir a Câmara" - -msgid "IDS_ST_MBODY_CAMERA_QUICK_ACCESS" -msgstr "Acesso rápido à câmara" - -msgid "IDS_ST_BODY_SET_SHORTCUTS" -msgstr "Definir atalhos" - -msgid "IDS_ST_BODY_DRAG_AND_DROP_TO_CHANGE_ORDER" -msgstr "Arrastar e largar para alterar a ordem" - -msgid "IDS_ST_BODY_SELECT_APPLICATION" -msgstr "Seleccionar aplicação" - -msgid "IDS_ST_BODY_TAP_SHORTCUT_TO_ASSIGN_APPLICATION" -msgstr "Tocar no atalho para atribuir aplicação" - -msgid "IDS_ST_OPT_EDIT_SHORTCUTS" -msgstr "Editar atalhos" - -msgid "IDS_IM_BODY_HELP_TEXT" -msgstr "Texto de ajuda" - diff --git a/lock-setting/po/ro.po b/lock-setting/po/ro.po deleted file mode 100644 index d0a832f..0000000 --- a/lock-setting/po/ro.po +++ /dev/null @@ -1,54 +0,0 @@ -msgid "IDS_ST_BODY_LOCK_SCREEN" -msgstr "Blocare ecran" - -msgid "IDS_IDLE_BODY_VIEW_EVENT_NOTIFICATIONS_ON_THE_LOCK_SCREEN" -msgstr "Vizualizaţi pe ecranul blocat notificările privind evenimentul" - -msgid "IDS_IDLE_MBODY_EVENT_NOTIFICATIONS" -msgstr "Notificări eveniment" - -msgid "IDS_ST_BODY_CLOCK" -msgstr "Ceas" - -msgid "IDS_ST_BODY_WEATHER" -msgstr "Vreme" - -msgid "IDS_ST_BODY_SET_SHORTCUTS_ON_LOCK_SCREEN" -msgstr "Setare comenzi rapide în ecranul de blocare" - -msgid "IDS_ST_BODY_SHORTCUTS" -msgstr "Comenzi rapide" - -msgid "IDS_ST_BODY_DUAL_CLOCK" -msgstr "Ceas dual" - -msgid "IDS_ST_BODY_SHOW_HELP_TEXT_ON_LOCK_SCREEN" -msgstr "Afişare text asistenţă pe ecranul de blocare" - -msgid "IDS_ST_BODY_SHOW_DUAL_CLOCK_ON_LOCK_SCREEN_WHEN_ROAMING" -msgstr "Afişare ceas dual pe ecranul de blocare în roaming" - -msgid "IDS_ST_BODY_TAP_AND_HOLD_THE_SCREEN_WHILE_ROTATING_THE_DEVICE_TO_OPEN_CAMERA" -msgstr "Ţineţi apăsat pe ecran şi rotiţi dispozitivul pentru a deschide Camera foto" - -msgid "IDS_ST_MBODY_CAMERA_QUICK_ACCESS" -msgstr "Acc. rapid la camera foto" - -msgid "IDS_ST_BODY_SET_SHORTCUTS" -msgstr "Setare comenzi rapide" - -msgid "IDS_ST_BODY_DRAG_AND_DROP_TO_CHANGE_ORDER" -msgstr "Glisaţi şi fixaţi pentru schimbarea ordinii" - -msgid "IDS_ST_BODY_SELECT_APPLICATION" -msgstr "Selectare aplicaţie" - -msgid "IDS_ST_BODY_TAP_SHORTCUT_TO_ASSIGN_APPLICATION" -msgstr "Atingeţi comanda rapidă pentru a atribui aplicaţia" - -msgid "IDS_ST_OPT_EDIT_SHORTCUTS" -msgstr "Editare comenzi rapide" - -msgid "IDS_IM_BODY_HELP_TEXT" -msgstr "Text asistenţă" - diff --git a/lock-setting/po/ru_RU.po b/lock-setting/po/ru_RU.po deleted file mode 100644 index fb29213..0000000 --- a/lock-setting/po/ru_RU.po +++ /dev/null @@ -1,54 +0,0 @@ -msgid "IDS_ST_BODY_LOCK_SCREEN" -msgstr "Экран блокировки" - -msgid "IDS_IDLE_BODY_VIEW_EVENT_NOTIFICATIONS_ON_THE_LOCK_SCREEN" -msgstr "Просмотр уведомлений о событиях на экране блокировки" - -msgid "IDS_IDLE_MBODY_EVENT_NOTIFICATIONS" -msgstr "Уведомления о событиях" - -msgid "IDS_ST_BODY_CLOCK" -msgstr "Часы" - -msgid "IDS_ST_BODY_WEATHER" -msgstr "Погода" - -msgid "IDS_ST_BODY_SET_SHORTCUTS_ON_LOCK_SCREEN" -msgstr "Настроить ярлыки на экране блокировки" - -msgid "IDS_ST_BODY_SHORTCUTS" -msgstr "Горячие клавиши" - -msgid "IDS_ST_BODY_DUAL_CLOCK" -msgstr "Двойные часы" - -msgid "IDS_ST_BODY_SHOW_HELP_TEXT_ON_LOCK_SCREEN" -msgstr "Показывать текст справки на экране блокировки" - -msgid "IDS_ST_BODY_SHOW_DUAL_CLOCK_ON_LOCK_SCREEN_WHEN_ROAMING" -msgstr "Показывать двойные часы на экране блокировки в роуминге" - -msgid "IDS_ST_BODY_TAP_AND_HOLD_THE_SCREEN_WHILE_ROTATING_THE_DEVICE_TO_OPEN_CAMERA" -msgstr "Чтобы открыть камеру, прикоснитесь к экрану и, удерживая палец, поверните устройство" - -msgid "IDS_ST_MBODY_CAMERA_QUICK_ACCESS" -msgstr "Быстрый доступ к камере" - -msgid "IDS_ST_BODY_SET_SHORTCUTS" -msgstr "Задать ярлыки" - -msgid "IDS_ST_BODY_DRAG_AND_DROP_TO_CHANGE_ORDER" -msgstr "Используйте перетаскивание, чтобы изменить порядок" - -msgid "IDS_ST_BODY_SELECT_APPLICATION" -msgstr "Выбор приложения" - -msgid "IDS_ST_BODY_TAP_SHORTCUT_TO_ASSIGN_APPLICATION" -msgstr "Нажмите ярлык, чтобы назначить приложение" - -msgid "IDS_ST_OPT_EDIT_SHORTCUTS" -msgstr "Изменить ссылки" - -msgid "IDS_IM_BODY_HELP_TEXT" -msgstr "Текст справки" - diff --git a/lock-setting/po/sk.po b/lock-setting/po/sk.po deleted file mode 100644 index 5c28e7d..0000000 --- a/lock-setting/po/sk.po +++ /dev/null @@ -1,54 +0,0 @@ -msgid "IDS_ST_BODY_LOCK_SCREEN" -msgstr "Uzamknúť obrazovku" - -msgid "IDS_IDLE_BODY_VIEW_EVENT_NOTIFICATIONS_ON_THE_LOCK_SCREEN" -msgstr "Zobraziť oznámenia udalostí na zamknutej obrazovke" - -msgid "IDS_IDLE_MBODY_EVENT_NOTIFICATIONS" -msgstr "Oznámenia udalostí" - -msgid "IDS_ST_BODY_CLOCK" -msgstr "Hodiny" - -msgid "IDS_ST_BODY_WEATHER" -msgstr "Počasie" - -msgid "IDS_ST_BODY_SET_SHORTCUTS_ON_LOCK_SCREEN" -msgstr "Nastaviť odkazy na zamknutej obrazovke" - -msgid "IDS_ST_BODY_SHORTCUTS" -msgstr "Skratky" - -msgid "IDS_ST_BODY_DUAL_CLOCK" -msgstr "Duálne hod." - -msgid "IDS_ST_BODY_SHOW_HELP_TEXT_ON_LOCK_SCREEN" -msgstr "Zobraziť text pomocníka na zamknutej obrazovke" - -msgid "IDS_ST_BODY_SHOW_DUAL_CLOCK_ON_LOCK_SCREEN_WHEN_ROAMING" -msgstr "Pri roamingu zobraziť na zamknutej obrazovke duálne hodiny" - -msgid "IDS_ST_BODY_TAP_AND_HOLD_THE_SCREEN_WHILE_ROTATING_THE_DEVICE_TO_OPEN_CAMERA" -msgstr "Ťuknutím na obrazovku a jej podržaním počas otáčania zariadenia môžete otvoriť aplikáciu Fotoaparát" - -msgid "IDS_ST_MBODY_CAMERA_QUICK_ACCESS" -msgstr "Rýchly príst. cez fotoap." - -msgid "IDS_ST_BODY_SET_SHORTCUTS" -msgstr "Nastaviť skratky" - -msgid "IDS_ST_BODY_DRAG_AND_DROP_TO_CHANGE_ORDER" -msgstr "Presunutím môžete zmeniť poradie" - -msgid "IDS_ST_BODY_SELECT_APPLICATION" -msgstr "Vyberte aplikáciu" - -msgid "IDS_ST_BODY_TAP_SHORTCUT_TO_ASSIGN_APPLICATION" -msgstr "Ťuknutím na odkaz priraďte aplikáciu" - -msgid "IDS_ST_OPT_EDIT_SHORTCUTS" -msgstr "Upraviť odkazy" - -msgid "IDS_IM_BODY_HELP_TEXT" -msgstr "Text pomocníka" - diff --git a/lock-setting/po/sl.po b/lock-setting/po/sl.po deleted file mode 100644 index 805afbc..0000000 --- a/lock-setting/po/sl.po +++ /dev/null @@ -1,54 +0,0 @@ -msgid "IDS_ST_BODY_LOCK_SCREEN" -msgstr "Zaklepanje zaslona" - -msgid "IDS_IDLE_BODY_VIEW_EVENT_NOTIFICATIONS_ON_THE_LOCK_SCREEN" -msgstr "Prikaz obvestil o dogodkih na zaklenjenem zaslonu" - -msgid "IDS_IDLE_MBODY_EVENT_NOTIFICATIONS" -msgstr "Obvestila o dogodkih" - -msgid "IDS_ST_BODY_CLOCK" -msgstr "Ura" - -msgid "IDS_ST_BODY_WEATHER" -msgstr "Vreme" - -msgid "IDS_ST_BODY_SET_SHORTCUTS_ON_LOCK_SCREEN" -msgstr "Nastavi bližnjice na zaklenjenem zaslonu" - -msgid "IDS_ST_BODY_SHORTCUTS" -msgstr "Bližnjice" - -msgid "IDS_ST_BODY_DUAL_CLOCK" -msgstr "Dvojna ura" - -msgid "IDS_ST_BODY_SHOW_HELP_TEXT_ON_LOCK_SCREEN" -msgstr "Pokaži besedilo za pomoč na zaklenjenem zaslonu" - -msgid "IDS_ST_BODY_SHOW_DUAL_CLOCK_ON_LOCK_SCREEN_WHEN_ROAMING" -msgstr "Med gostovanjem pokaži dvojno uro na zaklenjenem zaslonu" - -msgid "IDS_ST_BODY_TAP_AND_HOLD_THE_SCREEN_WHILE_ROTATING_THE_DEVICE_TO_OPEN_CAMERA" -msgstr "Pritisnite in pridržite prst na zaslonu in hkrati zavrtite napravo, da odprete kamero" - -msgid "IDS_ST_MBODY_CAMERA_QUICK_ACCESS" -msgstr "Hitri dostop do kamere" - -msgid "IDS_ST_BODY_SET_SHORTCUTS" -msgstr "Nastavi bližnjice" - -msgid "IDS_ST_BODY_DRAG_AND_DROP_TO_CHANGE_ORDER" -msgstr "Povlecite in spustite, če želite spremeniti vrstni red" - -msgid "IDS_ST_BODY_SELECT_APPLICATION" -msgstr "Izberite program" - -msgid "IDS_ST_BODY_TAP_SHORTCUT_TO_ASSIGN_APPLICATION" -msgstr "Pritisnite bližnjico, da jo dodelite programu" - -msgid "IDS_ST_OPT_EDIT_SHORTCUTS" -msgstr "Uredi bližnjice" - -msgid "IDS_IM_BODY_HELP_TEXT" -msgstr "Besedilo s pomočjo" - diff --git a/lock-setting/po/sr.po b/lock-setting/po/sr.po deleted file mode 100644 index c74520f..0000000 --- a/lock-setting/po/sr.po +++ /dev/null @@ -1,54 +0,0 @@ -msgid "IDS_ST_BODY_LOCK_SCREEN" -msgstr "Zaključavanje ekrana" - -msgid "IDS_IDLE_BODY_VIEW_EVENT_NOTIFICATIONS_ON_THE_LOCK_SCREEN" -msgstr "Prikaži obaveštenja o događajima na zaključanom ekranu" - -msgid "IDS_IDLE_MBODY_EVENT_NOTIFICATIONS" -msgstr "Obaveštenja o događaju" - -msgid "IDS_ST_BODY_CLOCK" -msgstr "Sat" - -msgid "IDS_ST_BODY_WEATHER" -msgstr "Vreme" - -msgid "IDS_ST_BODY_SET_SHORTCUTS_ON_LOCK_SCREEN" -msgstr "Postavi prečice na zaključanom ekranu" - -msgid "IDS_ST_BODY_SHORTCUTS" -msgstr "Prečice" - -msgid "IDS_ST_BODY_DUAL_CLOCK" -msgstr "Dvostruki sat" - -msgid "IDS_ST_BODY_SHOW_HELP_TEXT_ON_LOCK_SCREEN" -msgstr "Prikaži tekst pomoći na zaključanom ekranu" - -msgid "IDS_ST_BODY_SHOW_DUAL_CLOCK_ON_LOCK_SCREEN_WHEN_ROAMING" -msgstr "Prikaži dvostruki sat na zaključanom ekranu u romingu" - -msgid "IDS_ST_BODY_TAP_AND_HOLD_THE_SCREEN_WHILE_ROTATING_THE_DEVICE_TO_OPEN_CAMERA" -msgstr "Kucni i zadrži ekran tokom rotiranja uređaja da bi otvorio/la kameru" - -msgid "IDS_ST_MBODY_CAMERA_QUICK_ACCESS" -msgstr "Brzi pristup na kameri" - -msgid "IDS_ST_BODY_SET_SHORTCUTS" -msgstr "Podesi prečice" - -msgid "IDS_ST_BODY_DRAG_AND_DROP_TO_CHANGE_ORDER" -msgstr "Prevuci i otpusti za promenu redosleda" - -msgid "IDS_ST_BODY_SELECT_APPLICATION" -msgstr "Izaberi aplikaciju" - -msgid "IDS_ST_BODY_TAP_SHORTCUT_TO_ASSIGN_APPLICATION" -msgstr "Kucni prečicu za dodelu aplikacije" - -msgid "IDS_ST_OPT_EDIT_SHORTCUTS" -msgstr "Izmeni prečice" - -msgid "IDS_IM_BODY_HELP_TEXT" -msgstr "Tekst pomoći" - diff --git a/lock-setting/po/sv.po b/lock-setting/po/sv.po deleted file mode 100644 index ea54af4..0000000 --- a/lock-setting/po/sv.po +++ /dev/null @@ -1,54 +0,0 @@ -msgid "IDS_ST_BODY_LOCK_SCREEN" -msgstr "Låsskärm" - -msgid "IDS_IDLE_BODY_VIEW_EVENT_NOTIFICATIONS_ON_THE_LOCK_SCREEN" -msgstr "Visa händelsemeddelanden på låsskärmen" - -msgid "IDS_IDLE_MBODY_EVENT_NOTIFICATIONS" -msgstr "Händelsemeddelanden" - -msgid "IDS_ST_BODY_CLOCK" -msgstr "Klocka" - -msgid "IDS_ST_BODY_WEATHER" -msgstr "Väder" - -msgid "IDS_ST_BODY_SET_SHORTCUTS_ON_LOCK_SCREEN" -msgstr "Ställ in genvägar på låsskärmen" - -msgid "IDS_ST_BODY_SHORTCUTS" -msgstr "Genvägar" - -msgid "IDS_ST_BODY_DUAL_CLOCK" -msgstr "Dubbel klocka" - -msgid "IDS_ST_BODY_SHOW_HELP_TEXT_ON_LOCK_SCREEN" -msgstr "Visa hjälptexten på låsskärmen" - -msgid "IDS_ST_BODY_SHOW_DUAL_CLOCK_ON_LOCK_SCREEN_WHEN_ROAMING" -msgstr "Visa dubbla klockor på låsskärmen vid roaming" - -msgid "IDS_ST_BODY_TAP_AND_HOLD_THE_SCREEN_WHILE_ROTATING_THE_DEVICE_TO_OPEN_CAMERA" -msgstr "Tryck på och håll kvar på skärmen och rotera samtidigt enheten för att öppna Kameran" - -msgid "IDS_ST_MBODY_CAMERA_QUICK_ACCESS" -msgstr "Snabbåtkomst till kameran" - -msgid "IDS_ST_BODY_SET_SHORTCUTS" -msgstr "Ställ in genvägar" - -msgid "IDS_ST_BODY_DRAG_AND_DROP_TO_CHANGE_ORDER" -msgstr "Dra och släpp för att ändra ordning" - -msgid "IDS_ST_BODY_SELECT_APPLICATION" -msgstr "Välj program" - -msgid "IDS_ST_BODY_TAP_SHORTCUT_TO_ASSIGN_APPLICATION" -msgstr "Tryck på genväg för att tilldela program" - -msgid "IDS_ST_OPT_EDIT_SHORTCUTS" -msgstr "Redigera genvägar" - -msgid "IDS_IM_BODY_HELP_TEXT" -msgstr "Hjälptext" - diff --git a/lock-setting/po/tr_TR.po b/lock-setting/po/tr_TR.po deleted file mode 100644 index 8c5ab33..0000000 --- a/lock-setting/po/tr_TR.po +++ /dev/null @@ -1,54 +0,0 @@ -msgid "IDS_ST_BODY_LOCK_SCREEN" -msgstr "Kilit ekranı" - -msgid "IDS_IDLE_BODY_VIEW_EVENT_NOTIFICATIONS_ON_THE_LOCK_SCREEN" -msgstr "Kilit ekranında etkinlik bildirimlerini gör" - -msgid "IDS_IDLE_MBODY_EVENT_NOTIFICATIONS" -msgstr "Etkinlik bildirimleri" - -msgid "IDS_ST_BODY_CLOCK" -msgstr "Saat" - -msgid "IDS_ST_BODY_WEATHER" -msgstr "Hava" - -msgid "IDS_ST_BODY_SET_SHORTCUTS_ON_LOCK_SCREEN" -msgstr "Kısayolları kilit ekranında ayarla" - -msgid "IDS_ST_BODY_SHORTCUTS" -msgstr "Kısayollar" - -msgid "IDS_ST_BODY_DUAL_CLOCK" -msgstr "İkili saat" - -msgid "IDS_ST_BODY_SHOW_HELP_TEXT_ON_LOCK_SCREEN" -msgstr "Yardım metnini kilit ekranında göster" - -msgid "IDS_ST_BODY_SHOW_DUAL_CLOCK_ON_LOCK_SCREEN_WHEN_ROAMING" -msgstr "Dolaşımdayken kilit ekranında çift saat göster" - -msgid "IDS_ST_BODY_TAP_AND_HOLD_THE_SCREEN_WHILE_ROTATING_THE_DEVICE_TO_OPEN_CAMERA" -msgstr "Kamerayı açmak için cihazı döndürürken ekrana dokunun ve basılı tutun" - -msgid "IDS_ST_MBODY_CAMERA_QUICK_ACCESS" -msgstr "Kameraya hızlı erişim" - -msgid "IDS_ST_BODY_SET_SHORTCUTS" -msgstr "Kısayol ayarla" - -msgid "IDS_ST_BODY_DRAG_AND_DROP_TO_CHANGE_ORDER" -msgstr "Sırayı değiştirmek için sürükle ve bırak" - -msgid "IDS_ST_BODY_SELECT_APPLICATION" -msgstr "Uygulama seç" - -msgid "IDS_ST_BODY_TAP_SHORTCUT_TO_ASSIGN_APPLICATION" -msgstr "Uygulama atamak için kısayola dokun" - -msgid "IDS_ST_OPT_EDIT_SHORTCUTS" -msgstr "Kısayolları düzenle" - -msgid "IDS_IM_BODY_HELP_TEXT" -msgstr "Yardım metni" - diff --git a/lock-setting/po/uk.po b/lock-setting/po/uk.po deleted file mode 100644 index 67ef257..0000000 --- a/lock-setting/po/uk.po +++ /dev/null @@ -1,54 +0,0 @@ -msgid "IDS_ST_BODY_LOCK_SCREEN" -msgstr "Екран блокування" - -msgid "IDS_IDLE_BODY_VIEW_EVENT_NOTIFICATIONS_ON_THE_LOCK_SCREEN" -msgstr "Перегляд сповіщень про події на екрані блокування" - -msgid "IDS_IDLE_MBODY_EVENT_NOTIFICATIONS" -msgstr "Сповіщення про події" - -msgid "IDS_ST_BODY_CLOCK" -msgstr "Годинник" - -msgid "IDS_ST_BODY_WEATHER" -msgstr "Погода" - -msgid "IDS_ST_BODY_SET_SHORTCUTS_ON_LOCK_SCREEN" -msgstr "Встановлення клавіш швидкого доступу на екрані блокування" - -msgid "IDS_ST_BODY_SHORTCUTS" -msgstr "Швидкий доступ" - -msgid "IDS_ST_BODY_DUAL_CLOCK" -msgstr "Подвійний годинник" - -msgid "IDS_ST_BODY_SHOW_HELP_TEXT_ON_LOCK_SCREEN" -msgstr "Відображення тексту довідки на екрані блокування" - -msgid "IDS_ST_BODY_SHOW_DUAL_CLOCK_ON_LOCK_SCREEN_WHEN_ROAMING" -msgstr "Відображення подвійного годинника на екрані блокування під час перебування в роумінгу" - -msgid "IDS_ST_BODY_TAP_AND_HOLD_THE_SCREEN_WHILE_ROTATING_THE_DEVICE_TO_OPEN_CAMERA" -msgstr "Натисніть і утримуйте екран, одночасно обертаючи пристрій, щоб відкрити камеру" - -msgid "IDS_ST_MBODY_CAMERA_QUICK_ACCESS" -msgstr "Швидкий доступ до камери" - -msgid "IDS_ST_BODY_SET_SHORTCUTS" -msgstr "Встановлення клавіш швидкого доступу" - -msgid "IDS_ST_BODY_DRAG_AND_DROP_TO_CHANGE_ORDER" -msgstr "Перетягніть, щоб змінити порядок" - -msgid "IDS_ST_BODY_SELECT_APPLICATION" -msgstr "Виберіть програму" - -msgid "IDS_ST_BODY_TAP_SHORTCUT_TO_ASSIGN_APPLICATION" -msgstr "Натисніть клавішу швидкого доступу, щоб призначити програму" - -msgid "IDS_ST_OPT_EDIT_SHORTCUTS" -msgstr "Редагувати клавіші шв. доступу" - -msgid "IDS_IM_BODY_HELP_TEXT" -msgstr "Текст довідки" - diff --git a/lock-setting/po/uz.po b/lock-setting/po/uz.po deleted file mode 100644 index 280ac1b..0000000 --- a/lock-setting/po/uz.po +++ /dev/null @@ -1,54 +0,0 @@ -msgid "IDS_ST_BODY_LOCK_SCREEN" -msgstr "Bloklash ekrani" - -msgid "IDS_IDLE_BODY_VIEW_EVENT_NOTIFICATIONS_ON_THE_LOCK_SCREEN" -msgstr "Bloklash ekranida hodisa bildirshnomalarini ko‘rib chiqish" - -msgid "IDS_IDLE_MBODY_EVENT_NOTIFICATIONS" -msgstr "Hodisa bildirishnomalari" - -msgid "IDS_ST_BODY_CLOCK" -msgstr "Soat" - -msgid "IDS_ST_BODY_WEATHER" -msgstr "Ob-havo" - -msgid "IDS_ST_BODY_SET_SHORTCUTS_ON_LOCK_SCREEN" -msgstr "Bloklash ekranida yorliqlarni o‘rnatish" - -msgid "IDS_ST_BODY_SHORTCUTS" -msgstr "Yorliqlar" - -msgid "IDS_ST_BODY_DUAL_CLOCK" -msgstr "Ikkitali soat" - -msgid "IDS_ST_BODY_SHOW_HELP_TEXT_ON_LOCK_SCREEN" -msgstr "Bloklash ekranida yordam matnini ko‘rsatish" - -msgid "IDS_ST_BODY_SHOW_DUAL_CLOCK_ON_LOCK_SCREEN_WHEN_ROAMING" -msgstr "Rouming vaqtida bloklash ekarnida ikkitali soatni ko‘rsat" - -msgid "IDS_ST_BODY_TAP_AND_HOLD_THE_SCREEN_WHILE_ROTATING_THE_DEVICE_TO_OPEN_CAMERA" -msgstr "Kamerani ochish uchun, aylantirish vaqtida ekranni bosib turing" - -msgid "IDS_ST_MBODY_CAMERA_QUICK_ACCESS" -msgstr "Kameraga tezkor kirish" - -msgid "IDS_ST_BODY_SET_SHORTCUTS" -msgstr "Yorliqlarni o‘rnatish" - -msgid "IDS_ST_BODY_DRAG_AND_DROP_TO_CHANGE_ORDER" -msgstr "Tartibni o‘zgartirish uchun tortib o‘tkazing" - -msgid "IDS_ST_BODY_SELECT_APPLICATION" -msgstr "Ilova tanlash" - -msgid "IDS_ST_BODY_TAP_SHORTCUT_TO_ASSIGN_APPLICATION" -msgstr "Ilovani tayinlash uchun yorliqni tanlang" - -msgid "IDS_ST_OPT_EDIT_SHORTCUTS" -msgstr "Yorliqlarni tahrirlash" - -msgid "IDS_IM_BODY_HELP_TEXT" -msgstr "Yordam matni" - diff --git a/lock-setting/po/zh_CN.po b/lock-setting/po/zh_CN.po deleted file mode 100644 index 776d32c..0000000 --- a/lock-setting/po/zh_CN.po +++ /dev/null @@ -1,54 +0,0 @@ -msgid "IDS_ST_BODY_LOCK_SCREEN" -msgstr "锁定屏幕" - -msgid "IDS_IDLE_BODY_VIEW_EVENT_NOTIFICATIONS_ON_THE_LOCK_SCREEN" -msgstr "在锁屏上查看事件通知" - -msgid "IDS_IDLE_MBODY_EVENT_NOTIFICATIONS" -msgstr "事件通知" - -msgid "IDS_ST_BODY_CLOCK" -msgstr "时钟" - -msgid "IDS_ST_BODY_WEATHER" -msgstr "天气" - -msgid "IDS_ST_BODY_SET_SHORTCUTS_ON_LOCK_SCREEN" -msgstr "设置屏幕锁定时的快捷键" - -msgid "IDS_ST_BODY_SHORTCUTS" -msgstr "快捷键" - -msgid "IDS_ST_BODY_DUAL_CLOCK" -msgstr "双时钟" - -msgid "IDS_ST_BODY_SHOW_HELP_TEXT_ON_LOCK_SCREEN" -msgstr "在锁定屏幕时显示帮助文本" - -msgid "IDS_ST_BODY_SHOW_DUAL_CLOCK_ON_LOCK_SCREEN_WHEN_ROAMING" -msgstr "漫游时在锁屏上显示双时钟" - -msgid "IDS_ST_BODY_TAP_AND_HOLD_THE_SCREEN_WHILE_ROTATING_THE_DEVICE_TO_OPEN_CAMERA" -msgstr "点击并按住屏幕同时旋转手机以打开摄像头" - -msgid "IDS_ST_MBODY_CAMERA_QUICK_ACCESS" -msgstr "照相机快速访问" - -msgid "IDS_ST_BODY_SET_SHORTCUTS" -msgstr "设置快捷方式" - -msgid "IDS_ST_BODY_DRAG_AND_DROP_TO_CHANGE_ORDER" -msgstr "用拖放的方式调整顺序" - -msgid "IDS_ST_BODY_SELECT_APPLICATION" -msgstr "选择应用程序" - -msgid "IDS_ST_BODY_TAP_SHORTCUT_TO_ASSIGN_APPLICATION" -msgstr "点击快捷方式分配应用程序" - -msgid "IDS_ST_OPT_EDIT_SHORTCUTS" -msgstr "编辑快捷方式" - -msgid "IDS_IM_BODY_HELP_TEXT" -msgstr "帮助文本" - diff --git a/lock-setting/po/zh_HK.po b/lock-setting/po/zh_HK.po deleted file mode 100644 index 53b912e..0000000 --- a/lock-setting/po/zh_HK.po +++ /dev/null @@ -1,54 +0,0 @@ -msgid "IDS_ST_BODY_LOCK_SCREEN" -msgstr "鎖定螢幕" - -msgid "IDS_IDLE_BODY_VIEW_EVENT_NOTIFICATIONS_ON_THE_LOCK_SCREEN" -msgstr "於鎖定螢幕上檢視事件通知" - -msgid "IDS_IDLE_MBODY_EVENT_NOTIFICATIONS" -msgstr "事件通知" - -msgid "IDS_ST_BODY_CLOCK" -msgstr "時鐘" - -msgid "IDS_ST_BODY_WEATHER" -msgstr "天氣" - -msgid "IDS_ST_BODY_SET_SHORTCUTS_ON_LOCK_SCREEN" -msgstr "在鎖定螢幕上設定捷徑" - -msgid "IDS_ST_BODY_SHORTCUTS" -msgstr "捷徑" - -msgid "IDS_ST_BODY_DUAL_CLOCK" -msgstr "雙時鐘" - -msgid "IDS_ST_BODY_SHOW_HELP_TEXT_ON_LOCK_SCREEN" -msgstr "於鎖定螢幕顯示說明文字" - -msgid "IDS_ST_BODY_SHOW_DUAL_CLOCK_ON_LOCK_SCREEN_WHEN_ROAMING" -msgstr "當漫遊時在鎖定螢幕上顯示雙時鐘" - -msgid "IDS_ST_BODY_TAP_AND_HOLD_THE_SCREEN_WHILE_ROTATING_THE_DEVICE_TO_OPEN_CAMERA" -msgstr "輕觸並按住螢幕同時旋轉裝置以開啟相機" - -msgid "IDS_ST_MBODY_CAMERA_QUICK_ACCESS" -msgstr "相機快速捷徑" - -msgid "IDS_ST_BODY_SET_SHORTCUTS" -msgstr "設定捷徑" - -msgid "IDS_ST_BODY_DRAG_AND_DROP_TO_CHANGE_ORDER" -msgstr "拖放以更改順序" - -msgid "IDS_ST_BODY_SELECT_APPLICATION" -msgstr "選擇應用程式" - -msgid "IDS_ST_BODY_TAP_SHORTCUT_TO_ASSIGN_APPLICATION" -msgstr "輕觸捷徑以指定應用程式" - -msgid "IDS_ST_OPT_EDIT_SHORTCUTS" -msgstr "編輯捷徑" - -msgid "IDS_IM_BODY_HELP_TEXT" -msgstr "說明文字" - diff --git a/lock-setting/po/zh_SG.po b/lock-setting/po/zh_SG.po deleted file mode 100644 index c78be58..0000000 --- a/lock-setting/po/zh_SG.po +++ /dev/null @@ -1,54 +0,0 @@ -msgid "IDS_ST_BODY_LOCK_SCREEN" -msgstr "锁定屏幕" - -msgid "IDS_IDLE_BODY_VIEW_EVENT_NOTIFICATIONS_ON_THE_LOCK_SCREEN" -msgstr "在锁屏上查看事件通知" - -msgid "IDS_IDLE_MBODY_EVENT_NOTIFICATIONS" -msgstr "事件通知" - -msgid "IDS_ST_BODY_CLOCK" -msgstr "时钟" - -msgid "IDS_ST_BODY_WEATHER" -msgstr "天气" - -msgid "IDS_ST_BODY_SET_SHORTCUTS_ON_LOCK_SCREEN" -msgstr "设置锁屏快捷方式" - -msgid "IDS_ST_BODY_SHORTCUTS" -msgstr "快捷键" - -msgid "IDS_ST_BODY_DUAL_CLOCK" -msgstr "双时钟" - -msgid "IDS_ST_BODY_SHOW_HELP_TEXT_ON_LOCK_SCREEN" -msgstr "在锁定屏幕上显示帮助文本" - -msgid "IDS_ST_BODY_SHOW_DUAL_CLOCK_ON_LOCK_SCREEN_WHEN_ROAMING" -msgstr "漫游时在锁屏上显示双时钟" - -msgid "IDS_ST_BODY_TAP_AND_HOLD_THE_SCREEN_WHILE_ROTATING_THE_DEVICE_TO_OPEN_CAMERA" -msgstr "轻敲并按住屏幕同时旋转设备以打开摄像头" - -msgid "IDS_ST_MBODY_CAMERA_QUICK_ACCESS" -msgstr "摄像头快速访问" - -msgid "IDS_ST_BODY_SET_SHORTCUTS" -msgstr "设置快捷方式" - -msgid "IDS_ST_BODY_DRAG_AND_DROP_TO_CHANGE_ORDER" -msgstr "用拖放的方式调整顺序" - -msgid "IDS_ST_BODY_SELECT_APPLICATION" -msgstr "选择应用程序" - -msgid "IDS_ST_BODY_TAP_SHORTCUT_TO_ASSIGN_APPLICATION" -msgstr "轻敲快捷方式分配应用程序" - -msgid "IDS_ST_OPT_EDIT_SHORTCUTS" -msgstr "编辑快捷键" - -msgid "IDS_IM_BODY_HELP_TEXT" -msgstr "帮助文本" - diff --git a/lock-setting/po/zh_TW.po b/lock-setting/po/zh_TW.po deleted file mode 100644 index 5859f7f..0000000 --- a/lock-setting/po/zh_TW.po +++ /dev/null @@ -1,54 +0,0 @@ -msgid "IDS_ST_BODY_LOCK_SCREEN" -msgstr "鎖定螢幕" - -msgid "IDS_IDLE_BODY_VIEW_EVENT_NOTIFICATIONS_ON_THE_LOCK_SCREEN" -msgstr "於鎖定螢幕上檢視活動通知" - -msgid "IDS_IDLE_MBODY_EVENT_NOTIFICATIONS" -msgstr "活動通知" - -msgid "IDS_ST_BODY_CLOCK" -msgstr "時鐘" - -msgid "IDS_ST_BODY_WEATHER" -msgstr "氣象" - -msgid "IDS_ST_BODY_SET_SHORTCUTS_ON_LOCK_SCREEN" -msgstr "在鎖定螢幕上設定捷徑" - -msgid "IDS_ST_BODY_SHORTCUTS" -msgstr "捷徑" - -msgid "IDS_ST_BODY_DUAL_CLOCK" -msgstr "雙時鐘" - -msgid "IDS_ST_BODY_SHOW_HELP_TEXT_ON_LOCK_SCREEN" -msgstr "於鎖定螢幕顯示說明文字" - -msgid "IDS_ST_BODY_SHOW_DUAL_CLOCK_ON_LOCK_SCREEN_WHEN_ROAMING" -msgstr "漫遊時在鎖定螢幕上顯示雙時鐘" - -msgid "IDS_ST_BODY_TAP_AND_HOLD_THE_SCREEN_WHILE_ROTATING_THE_DEVICE_TO_OPEN_CAMERA" -msgstr "輕觸並按住螢幕同時旋轉裝置以開啟相機" - -msgid "IDS_ST_MBODY_CAMERA_QUICK_ACCESS" -msgstr "相機快速捷徑" - -msgid "IDS_ST_BODY_SET_SHORTCUTS" -msgstr "設定捷徑" - -msgid "IDS_ST_BODY_DRAG_AND_DROP_TO_CHANGE_ORDER" -msgstr "拖放以變更順序" - -msgid "IDS_ST_BODY_SELECT_APPLICATION" -msgstr "選擇應用程式" - -msgid "IDS_ST_BODY_TAP_SHORTCUT_TO_ASSIGN_APPLICATION" -msgstr "輕觸捷徑以指定應用程式" - -msgid "IDS_ST_OPT_EDIT_SHORTCUTS" -msgstr "編輯快捷鍵" - -msgid "IDS_IM_BODY_HELP_TEXT" -msgstr "說明文字" - diff --git a/packaging/.starter.spec.swp b/packaging/.starter.spec.swp new file mode 100644 index 0000000000000000000000000000000000000000..72fd2e385a837a8749f1f8e54979d22b40c0e513 GIT binary patch literal 20480 zcmeI4dyFJS9mk6Uls5!p6b+`ByOBGfr)OVx%fj8UdpEbYvX5hD4^9cRJ>Au_ecLbk zv3tw95Xb@H4?&C(qft~YM2(6-qH^jVMob9cAI1n#`~!?6@(36?NQ@-Vq|5PTmjfvdo7a1l5gym=NOzXe|hJ}`j+_Jblg75wc?LY@G} zz)^4`*abcT-hh%%f``Bz;0CY*d=$KOIw5}mKLmGyo4_G(6)1rJoJPni;AQXxcmNn+ z0o({CznBDP%`(JdSgF$^l0w7h+AkQS>m2WR(G z2G)6-_-u*bxU7VGaRswP_H9gLL)-=}n$dC0#dd=_vOnLhQ)v5WprTVVC0>hU>CmX2 z)#?8B8}JbcTFIQ1@&(!GE6=`C+IyX8wi6)hO6NgY)!fep= zBdgGdS*orPcEqt=pYAzyXy4@Mcy(uCOY*UCzp;Z8lY6Dg)WONoxtZBQqe-Jd_#v}; zkr^IqG+OgMbEC84mAQ4^C8=E0HQ818l#yL?L!C>Ed0l06c64mAvgVCD8x&QT)MB)A zAZQ^aR++bH!EtR(HyG7DdhrsIUAbnkiwhVG*of*HEfiOF$8}ZtVt~ zxv7~k%#dc2jG=0;-m51KksbXo?Hanod(pK6QE{Pt#_daVias=^&)&+|!EvcF-8vXO z`rN%iB7INmMYc`mU?}w zS_?d(j_wM5+t#YqQRDQc9L5E;OGuTgjIW()j~b9=)?GojG`mMF*?@Br;-$E~9;Ho% z!eQ9fVV+ctz}JmKy+j1MP?uGVT5sE6QaH8~ID&$W26KB!3=Q31D)*|x7Ud2@raQ(A zW-<$p$#PFAcm~_cQ^V19xLWRlS=ZjarChPyo)uKXuJ;n4)&xEPy{c#oYT{7uwuakl zo9n5;WSYUBOdZc+k7*1a6}Y;;98MrURP9esN}?h=x?nQTlj}_2>wBkQ-}eMeY}Wax zqhu{lp52%5&XGrox6aVl_i?hh=fnt`S7wq6W|ZX zxN8Sa_$8%tGtyW^#O`#mvKO0AtTYCb<0gIN+DPCCEtiH$L;a*0m?nHd`nF_RHlsT< zdrmfcH8^_RAMp%F#1!yE{1+{@iFF`yfNDF2h6nn!er2ev3|~G_RG0v>n^F}w#{V1O#P1`L5u zf>(L`4*m*W1U%ONF1Q8MfD8z@AF;duE(0$kcK1{|2DbtOi~#~3M%;ZHxC{_*9Pu@e zz3&EfPyu_vR&XwO3-&qzo&`S#+Bp2&SfPBpzDU$Y?bwnSvUB6=nkc~MprEVj%mA$b%FhL0yHbqyOkEGQ{X z?vbV{)#~VYr3#fr+wnzJ_GNM2HkqKx%(ShRc9G8&iz^l!BSMjlr>n#zS@#7fu+Yfc zWJ~E<7wb9Sa2fXQsj9D4{O-6rQlz}gef>hx?LSZ=mI1 zYs)yzmuc*k;$w6&+V!lzk@h z#|*(gW0qL+k?o_x_A=cvK67AhVrH6dIS_r=upm3Y?RIpN)LoPbKjJQ@wMoJUNe+Bl z;%d@9D(ETQsKN@vnlSFmG_fl~Ye9F9y8D1ctn3(j*8IJddak=2Fb$xKHoj-1<`x#RC;}D8ms%ZQbFokqmvVR zD$~_UOZU90Nze=fMy-2fT({z|-JCunMjRSAYw^Kamgk9rzje7Pu44g9<1E5u5>DLZ0AJ z@CY~t?gjUNF9LohU=@4;1YjCm1pa|s!f(JY!7so!!R>&b3E=Pk-$5?nIdB|&1t_2d zE(V_l9|Nx-kMKBn3>*d5fX{#lZ~{4nH^J-RCGZ#UBsdNp2VVmk7zF2oXOUz0Be)0b z2Crd!?f~I9eV_qmE_}Tf=;{#O#be#{7_sZma=aN&^?D<<{1iot_svLwWQ}U0`nsKP z{LXSU({1OcDDqPjjWaCG^AX8=^86GQxy3ripHU) Z)R~9;6vfv36a{TLMUg&OkWMU-{{nG~O)dZc literal 0 HcmV?d00001 diff --git a/packaging/starter-pre.service b/packaging/starter-pre.service new file mode 100644 index 0000000..b9949f2 --- /dev/null +++ b/packaging/starter-pre.service @@ -0,0 +1,6 @@ +[Unit] +Description=Pre actions for "starter" + +[Service] +Type=oneshot +ExecStart=/etc/init.d/rd3starter diff --git a/packaging/starter.changes b/packaging/starter.changes deleted file mode 100644 index 1ec467a..0000000 --- a/packaging/starter.changes +++ /dev/null @@ -1,3 +0,0 @@ -* Thu Aug 1 21:47:53 UTC 2013 - tracy.graydon@intel.com -- Fix lang rpmlint errors and invalid group - diff --git a/packaging/starter.manifest b/packaging/starter.manifest deleted file mode 100644 index 017d22d..0000000 --- a/packaging/starter.manifest +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/packaging/starter.service b/packaging/starter.service index 63d0e3f..08e4873 100644 --- a/packaging/starter.service +++ b/packaging/starter.service @@ -1,12 +1,16 @@ [Unit] Description=Start the "starter" program -Before=core-efl.target -After=boot-animation.service +Requires=starter-pre.service +After=starter-pre.service wm_ready.service ac.service deviced.service launchpad-preload.service [Service] ExecStart=/usr/bin/starter Restart=always -RestartSec=3 +RestartSec=0 +KillSignal=SIGKILL +User=system +Group=system +SmackProcessLabel=starter [Install] -WantedBy=core-efl.target +WantedBy=tizen-system.target diff --git a/packaging/starter.spec b/packaging/starter.spec index ccd64df..42631ff 100644 --- a/packaging/starter.spec +++ b/packaging/starter.spec @@ -1,53 +1,58 @@ -%bcond_with x -%bcond_with wayland - +#sbs-git:slp/pkgs/s/starter starter 0.3 f75832f2c50c8930cf1a6bfcffbac648bcde87d9 Name: starter Summary: starter -Version: 0.4.62 -Release: 3 -Group: Base/Startup -License: TO_BE/FILLED_IN +Version: 0.5.52 +Release: 1 +Group: TO_BE/FILLED_IN +License: Apache-2.0 Source0: starter-%{version}.tar.gz Source1: starter.service Source2: starter.path -Source1001: starter.manifest -Requires(post): /usr/bin/vconftool +Source3: starter-pre.service BuildRequires: cmake -BuildRequires: pkgconfig(ail) BuildRequires: pkgconfig(appcore-efl) BuildRequires: pkgconfig(aul) BuildRequires: pkgconfig(capi-appfw-application) +BuildRequires: pkgconfig(capi-appfw-app-manager) BuildRequires: pkgconfig(capi-system-media-key) +BuildRequires: pkgconfig(capi-network-bluetooth) +BuildRequires: pkgconfig(capi-system-system-settings) + +%if "%{?profile}" == "mobile" +BuildRequires: tts +BuildRequires: tts-devel +#BuildRequires: pkgconfig(capi-message-port) +BuildRequires: pkgconfig(security-server) +BuildRequires: pkgconfig(efl-assist) +%endif + +BuildRequires: pkgconfig(feedback) BuildRequires: pkgconfig(db-util) BuildRequires: pkgconfig(dlog) BuildRequires: pkgconfig(ecore) BuildRequires: pkgconfig(edje) -BuildRequires: pkgconfig(eet) +BuildRequires: pkgconfig(edbus) BuildRequires: pkgconfig(eina) BuildRequires: pkgconfig(elementary) BuildRequires: pkgconfig(evas) BuildRequires: pkgconfig(glib-2.0) -BuildRequires: pkgconfig(heynoti) -BuildRequires: pkgconfig(sysman) BuildRequires: pkgconfig(syspopup-caller) -BuildRequires: pkgconfig(tapi) BuildRequires: pkgconfig(ui-gadget-1) -%if %{with x} -BuildRequires: pkgconfig(utilX) -BuildRequires: pkgconfig(x11) -BuildRequires: pkgconfig(xcomposite) -BuildRequires: pkgconfig(xext) -BuildRequires: pkgconfig(ecore-x) -%endif +#BuildRequires: pkgconfig(utilX) BuildRequires: pkgconfig(vconf) -BuildRequires: pkgconfig(capi-system-info) +BuildRequires: pkgconfig(alarm-service) BuildRequires: pkgconfig(pkgmgr-info) +BuildRequires: pkgconfig(deviced) +BuildRequires: pkgconfig(edbus) +BuildRequires: pkgconfig(dbus-1) +BuildRequires: pkgconfig(dbus-glib-1) +#BuildRequires: model-build-features BuildRequires: cmake BuildRequires: edje-bin -BuildRequires: gettext -BuildRequires: gettext-tools - +BuildRequires: gettext +BuildRequires: gettext-tools Requires(post): /usr/bin/vconftool +Requires: sys-assert %define _systemddir /usr/lib/systemd %define _userdir %{_systemddir}/user @@ -56,34 +61,65 @@ Requires(post): /usr/bin/vconftool %description Description: Starter + %prep %setup -q -cp %{SOURCE1001} . %build -%cmake . \ -%if %{with wayland} && !%{with x} --Dwith_wayland=TRUE +%if 0%{?sec_build_binary_debug_enable} +export CFLAGS="$CFLAGS -DTIZEN_DEBUG_ENABLE" +export CXXFLAGS="$CXXFLAGS -DTIZEN_DEBUG_ENABLE" +export FFLAGS="$FFLAGS -DTIZEN_DEBUG_ENABLE" +%endif + +%if "%{?profile}" == "mobile" +echo "profile is 'mobile'" +%define TIZEN_PROFILE_NAME "MOBILE" +export CFLAGS="$CFLAGS -DTIZEN_PROFILE_MOBILE" +export CXXFLAGS="$CXXFLAGS -DTIZEN_PROFILE_MOBILE" +%else if "%{?profile}" == "wearable" +echo "profile is 'wearable'" +%define TIZEN_PROFILE_NAME "WEARABLE" +export CFLAGS="$CFLAGS -DTIZEN_PROFILE_WEARABLE" +export CXXFLAGS="$CXXFLAGS -DTIZEN_PROFILE_WEARABLE" +%endif + +%ifarch %{arm} +export CFLAGS="$CFLAGS -DTIZEN_BUILD_TARGET" +export CXXFLAGS="$CXXFLAGS -DTIZEN_BUILD_TARGET" %else --Dwith_x=TRUE +export CFLAGS="$CFLAGS -DTIZEN_BUILD_EMULATOR" +export CXXFLAGS="$CXXFLAGS -DTIZEN_BUILD_EMULATOR" %endif +cmake . -DTIZEN_PROFILE_NAME=%{TIZEN_PROFILE_NAME} -DCMAKE_INSTALL_PREFIX=%{_prefix} + +make make -j1 %install rm -rf %{buildroot} %make_install -mkdir -p %{buildroot}/usr/share/license mkdir -p %{buildroot}%{_userdir} install -m 0644 %SOURCE1 %{buildroot}%{_userdir}/ install -m 0644 %SOURCE2 %{buildroot}%{_userdir}/ mkdir -p %{buildroot}%{_wantsdir} ln -s ../starter.path %{buildroot}%{_wantsdir}/starter.path + +mkdir -p %{buildroot}%{_libdir}/systemd/system/multi-user.target.wants +install -m 0644 %SOURCE1 %{buildroot}%{_libdir}/systemd/system/starter.service +install -m 0644 %SOURCE3 %{buildroot}%{_libdir}/systemd/system/starter-pre.service +ln -s ../starter.service %{buildroot}%{_libdir}/systemd/system/multi-user.target.wants/starter.service +mkdir -p %{buildroot}%{_libdir}/systemd/system/tizen-system.target.wants +install -m 0644 %SOURCE2 %{buildroot}%{_libdir}/systemd/system/wait-lock.service +ln -s ../wait-lock.service %{buildroot}%{_libdir}/systemd/system/tizen-system.target.wants/ mkdir -p %{buildroot}/usr/share/license -cp -f LICENSE.Flora %{buildroot}/usr/share/license/%{name} +cp -f LICENSE %{buildroot}/usr/share/license/%{name} mkdir -p %{buildroot}/opt/data/home-daemon -%find_lang ug-lockscreen-options +mkdir -p %{buildroot}%{_sysconfdir}/systemd/default-extra-dependencies/ignore-units.d/ +ln -s %{_libdir}/systemd/system/starter.service %{buildroot}%{_sysconfdir}/systemd/default-extra-dependencies/ignore-units.d/ +ln -s %{_libdir}/systemd/system/starter-pre.service %{buildroot}%{_sysconfdir}/systemd/default-extra-dependencies/ignore-units.d/ %post change_file_executable() @@ -94,37 +130,61 @@ change_file_executable() fi } -GOPTION="-u 5000 -f" +GOPTION="-u 200 -g 5000 -f" +SOPTION="-s system::vconf_inhouse" +POPTION="-s starter_private::vconf" +LOPTION="-s starter::vconf" + +vconftool set -t string file/private/lockscreen/pkgname "org.tizen.lockscreen" $GOPTION $POPTION +vconftool set -t string file/private/lockscreen/default_pkgname "org.tizen.lockscreen" $GOPTION $POPTION +#vconftool set -t string db/setting/menuscreen/package_name "org.tizen.homescreen" -u 200 -g 200 $SOPTION + +vconftool set -t int memory/idle_lock/state 0 -i $GOPTION $LOPTION +vconftool set -t bool memory/lockscreen/phone_lock_verification 0 -i $GOPTION $SOPTION + +vconftool set -t int memory/idle-screen/safemode 0 -i $GOPTION $SOPTION -vconftool set -t int "memory/starter/sequence" 1 -i $GOPTION -vconftool set -t int "memory/starter/use_volume_key" 0 -i $GOPTION -vconftool set -t string file/private/lockscreen/pkgname "org.tizen.lockscreen" -u 5000 -g 5000 -f -vconftool set -t int memory/idle_lock/state "0" -i $GOPTION -vconftool set -t bool memory/lockscreen/phone_lock_verification 0 -i $GOPTION +vconftool set -t int memory/starter/sequence 1 -i $GOPTION $SOPTION +vconftool set -t int memory/starter/use_volume_key 0 -i $GOPTION $SOPTION +vconftool set -t int db/starter/is_fallback 0 -i $GOPTION $SOPTION +vconftool set -t string db/starter/fallback_pkg "org.tizen.homescreen" $GOPTION $SOPTION -vconftool set -t bool db/lockscreen/event_notification_display 1 $GOPTION -vconftool set -t bool db/lockscreen/clock_display 1 $GOPTION -vconftool set -t bool db/lockscreen/help_text_display 0 $GOPTION +vconftool set -t int memory/lockscreen/security_auto_lock 1 -i $GOPTION $SOPTION -vconftool set -t int memory/idle-screen/is_idle_screen_launched "0" -i -u 5000 -f -vconftool set -t int memory/idle-screen/top "0" -i -f -vconftool set -t int memory/idle-screen/safemode "0" -i -f +vconftool set -t int file/private/lockscreen/bt_out -70 $GOPTION $POPTION +vconftool set -t int file/private/lockscreen/bt_in -60 $GOPTION $POPTION -ln -sf /etc/init.d/rd4starter /etc/rc.d/rc4.d/S81starter -ln -sf /etc/init.d/rd3starter /etc/rc.d/rc3.d/S43starter -%postun -p /sbin/ldconfig +mkdir -p %{_sysconfdir}/systemd/default-extra-dependencies/ignore-units.d/ +ln -s %{_libdir}/systemd/system/wait-lock.service %{_sysconfdir}/systemd/default-extra-dependencies/ignore-units.d/ -%files -f ug-lockscreen-options.lang -%manifest %{name}.manifest +#ln -sf /etc/init.d/rd4starter /etc/rc.d/rc4.d/S81starter +#ln -sf /etc/init.d/rd4starter /etc/rc.d/rc3.d/S81starter + +sync + +%files +%manifest starter.manifest %defattr(-,root,root,-) %{_sysconfdir}/init.d/rd4starter %{_sysconfdir}/init.d/rd3starter %{_bindir}/starter -/usr/ug/lib/libug-lockscreen-options.so -/usr/ug/lib/libug-lockscreen-options.so.0.1.0 +%{_libdir}/systemd/system/starter.service +%{_libdir}/systemd/system/multi-user.target.wants/starter.service +%{_sysconfdir}/systemd/default-extra-dependencies/ignore-units.d/starter.service +%{_libdir}/systemd/system/starter-pre.service +%{_sysconfdir}/systemd/default-extra-dependencies/ignore-units.d/starter-pre.service +%{_libdir}/systemd/system/wait-lock.service +%{_libdir}/systemd/system/tizen-system.target.wants/wait-lock.service +/usr/share/license/%{name} +/opt/data/home-daemon +/usr/share/locale/*/LC_MESSAGES/* +/etc/smack/accesses.d/starter.efl + %{_userdir}/starter.service %{_userdir}/starter.path %{_wantsdir}/starter.path -/usr/share/license/%{name} -/opt/data/home-daemon + +%if "%{?profile}" == "mobile" +/usr/share/starter/res/edje/* +%endif diff --git a/packaging/wait-lock.service b/packaging/wait-lock.service new file mode 100644 index 0000000..1147161 --- /dev/null +++ b/packaging/wait-lock.service @@ -0,0 +1,14 @@ +[Unit] +Description=wait lockscreen +After=tizen-boot.target boot-animation.service +Requires=tizen-boot.target +Before=tizen-system.target +ConditionPathExists=|/tmp/.passwordlock + +[Service] +Type=oneshot +ExecStart=/bin/sh -c 'while [ -e /tmp/.passwordlock ]; do sleep 0.5 ; done' +TimeoutSec=7s + +[Install] +WantedBy=tizen-system.target diff --git a/po/CMakeLists.txt b/po/CMakeLists.txt new file mode 100644 index 0000000..51ec894 --- /dev/null +++ b/po/CMakeLists.txt @@ -0,0 +1,24 @@ +# for i18n + +SET(POFILES az.po bg.po ca.po cs.po da.po de.po el_GR.po en.po en_US.po es_ES.po et.po eu.po fi.po fr_CA.po fr.po gl.po hr.po hu.po hy.po is.po it_IT.po ka.po kk.po ko_KR.po lt.po lv.po mn_MN.po nb.po nl.po pl.po pt_BR.po pt_PT.po ro.po ru_RU.po sk.po sl.po sr.po sv.po tr_TR.po uk.po uz.po) + +SET(MSGFMT "/usr/bin/msgfmt") + +FOREACH(pofile ${POFILES}) + SET(pofile ${CMAKE_CURRENT_SOURCE_DIR}/${pofile}) + MESSAGE("PO: ${pofile}") + GET_FILENAME_COMPONENT(absPofile ${pofile} ABSOLUTE) + GET_FILENAME_COMPONENT(lang ${absPofile} NAME_WE) + SET(moFile ${CMAKE_CURRENT_BINARY_DIR}/${lang}.mo) + ADD_CUSTOM_COMMAND( + OUTPUT ${moFile} + COMMAND ${MSGFMT} -o ${moFile} ${absPofile} + DEPENDS ${absPofile} + ) + INSTALL(FILES ${moFile} + DESTINATION ${LOCALEDIR}/${lang}/LC_MESSAGES RENAME ${PROJECT_NAME}.mo) + SET(moFiles ${moFiles} ${moFile}) +ENDFOREACH(pofile) + +MESSAGE(".mo files: ${moFiles}") +ADD_CUSTOM_TARGET(po ALL DEPENDS ${moFiles}) diff --git a/po/az.po b/po/az.po new file mode 100644 index 0000000..7d952f2 --- /dev/null +++ b/po/az.po @@ -0,0 +1,57 @@ +msgid "IDS_IDLE_POP_UNABLE_TO_LAUNCH_PS" +msgstr "%s-ə başlamaq mümkün deyildir." + +msgid "IDS_COM_POP_WARNING" +msgstr "Xəbərdarlıq" + +msgid "IDS_COM_BODY_ENTER_PIN" +msgstr "PIN daxil et." + +msgid "IDS_LCKSCN_NPBODY_ENTER_PIN_TO_VIEW_MESSAGE_ABB" +msgstr "Mesaja baxmaq üçün PIN daxil et" + +msgid "IDS_LCKSCN_NPBODY_ENTER_PIN_TO_VIEW_CALL_LOG_ABB" +msgstr "Zəng jurnalına baxmaq üçün PIN daxil et" + +msgid "IDS_LCKSCN_POP_TRY_AGAIN_IN_PD_SECONDS" +msgstr "%d saniyə yenidən cəhd et." + +msgid "IDS_COM_BODY_INCORRECT_PIN" +msgstr "Yanlış PIN." + +msgid "IDS_IDLE_BODY_1_ATTEMPT_LEFT" +msgstr "1 cəhd qalmışdır." + +msgid "IDS_IDLE_BODY_PD_ATTEMPTS_LEFT" +msgstr "%d cəhd qalıb." + +msgid "IDS_LCKSCN_POP_YOU_HAVE_ATTEMPTED_TO_UNLOCK_THE_DEVICE_INCORRECTLY_P1SD_TIMES_YOU_HAVE_P2SD_ATTEMPTS_LEFT_BEFORE_THE_DEVICE_IS_RESET_TO_FACTORY_MSG" +msgstr "Siz %1$d dəfə cihazın kilidini səhv açmağa cəhd etmisiniz. Sizin cihazın defolt parametrlərinə bərpa edilməsi və bütün məlumatların silinməsi üçün %2$d cəhdiniz qalır." + +msgid "IDS_LCKSCN_POP_YOU_HAVE_MADE_P1SD_UNSUCCESSFUL_ATTEMPTS_TO_UNLOCK_YOUR_DEVICE_TRY_AGAIN_IN_P2SD_SECONDS" +msgstr "Siz cihazı kiliddən açmaq üçün %1$d dəfə uğursuz cəhd etmisiniz. %2$d saniyə ərzində yenidən cəhd edin." + +msgid "IDS_LCKSCN_HEADER_UNABLE_TO_UNLOCK_SCREEN_ABB" +msgstr "Ekr kilid açmaq müm olm" + +msgid "IDS_COM_BODY_ENTER_PASSWORD" +msgstr "Kodu daxil et." + +msgid "IDS_LCKSCN_BODY_P1SD_TO_P2SD_DIGITS_OR_LETTERS_REQUIRED" +msgstr "%1$d - %2$d rəqəm və ya hərf tələb olunur." + +msgid "IDS_IDLE_BODY_INCORRECT_PASSWORD" +msgstr "Yanlış şifrə." + +msgid "IDS_LCKSCN_BODY_YOU_HAVE_ATTEMPTED_TO_UNLOCK_THE_DEVICE_INCORRECTLY_PD_TIMES_IT_WILL_NOW_BE_RESET_TO_FACTORY_DEFAULTS_AND_ALL_DATA_WILL_BE_ERASED" +msgstr "Siz %d dəfə cihazın kilidini səhv açmağa cəhd etmisiniz. Bu, zavod parametrlərinə bərpa edəcək və bütün məlumatlar silinəcək" + +msgid "IDS_COM_BUTTON_OK_ABB" +msgstr "OK" + +msgid "IDS_ST_BUTTON_CANCEL" +msgstr "Ləğv et" + +msgid "IDS_LCKSCN_BODY_EMERGENCY_CALL" +msgstr "Təcili zəng" + diff --git a/po/bg.po b/po/bg.po new file mode 100644 index 0000000..0247ac8 --- /dev/null +++ b/po/bg.po @@ -0,0 +1,57 @@ +msgid "IDS_IDLE_POP_UNABLE_TO_LAUNCH_PS" +msgstr "Не може да се стартира %s." + +msgid "IDS_COM_POP_WARNING" +msgstr "Предупреждение" + +msgid "IDS_COM_BODY_ENTER_PIN" +msgstr "Въведете PIN." + +msgid "IDS_LCKSCN_NPBODY_ENTER_PIN_TO_VIEW_MESSAGE_ABB" +msgstr "Въведете PIN за преглед на съобщението" + +msgid "IDS_LCKSCN_NPBODY_ENTER_PIN_TO_VIEW_CALL_LOG_ABB" +msgstr "Въведете PIN за преглед на дневника на повикванията" + +msgid "IDS_LCKSCN_POP_TRY_AGAIN_IN_PD_SECONDS" +msgstr "Опитайте пак след %d сек." + +msgid "IDS_COM_BODY_INCORRECT_PIN" +msgstr "Неправилен PIN." + +msgid "IDS_IDLE_BODY_1_ATTEMPT_LEFT" +msgstr "1 оставащ опит." + +msgid "IDS_IDLE_BODY_PD_ATTEMPTS_LEFT" +msgstr "Остават %d опита." + +msgid "IDS_LCKSCN_POP_YOU_HAVE_ATTEMPTED_TO_UNLOCK_THE_DEVICE_INCORRECTLY_P1SD_TIMES_YOU_HAVE_P2SD_ATTEMPTS_LEFT_BEFORE_THE_DEVICE_IS_RESET_TO_FACTORY_MSG" +msgstr "Опитахте да отключите устройството неуспешно %1$d пъти. Остават ви още %2$d опита, преди устройството да се рестартира до фабричните настройки по подразбиране и всички данни да бъдат изтрити." + +msgid "IDS_LCKSCN_POP_YOU_HAVE_MADE_P1SD_UNSUCCESSFUL_ATTEMPTS_TO_UNLOCK_YOUR_DEVICE_TRY_AGAIN_IN_P2SD_SECONDS" +msgstr "Направили сте %1$d неуспешни опита да отключите устройството си. Опитайте отново след %2$d секунди." + +msgid "IDS_LCKSCN_HEADER_UNABLE_TO_UNLOCK_SCREEN_ABB" +msgstr "Екранът не може да се отключи" + +msgid "IDS_COM_BODY_ENTER_PASSWORD" +msgstr "Въвеждане на парола" + +msgid "IDS_LCKSCN_BODY_P1SD_TO_P2SD_DIGITS_OR_LETTERS_REQUIRED" +msgstr "Задължителни са %1$d до %2$d цифри или букви." + +msgid "IDS_IDLE_BODY_INCORRECT_PASSWORD" +msgstr "Грешна парола." + +msgid "IDS_LCKSCN_BODY_YOU_HAVE_ATTEMPTED_TO_UNLOCK_THE_DEVICE_INCORRECTLY_PD_TIMES_IT_WILL_NOW_BE_RESET_TO_FACTORY_DEFAULTS_AND_ALL_DATA_WILL_BE_ERASED" +msgstr "Опитахте да отключите устройството неуспешно %d пъти. Сега то ще се рестартира до фабричните настройки по подразбиране и всички данни ще бъдат изтрити." + +msgid "IDS_COM_BUTTON_OK_ABB" +msgstr "OK" + +msgid "IDS_ST_BUTTON_CANCEL" +msgstr "Отказ" + +msgid "IDS_LCKSCN_BODY_EMERGENCY_CALL" +msgstr "Спешно повикване" + diff --git a/po/ca.po b/po/ca.po new file mode 100644 index 0000000..d359ba4 --- /dev/null +++ b/po/ca.po @@ -0,0 +1,57 @@ +msgid "IDS_IDLE_POP_UNABLE_TO_LAUNCH_PS" +msgstr "No es pot iniciar %s" + +msgid "IDS_COM_POP_WARNING" +msgstr "Advertiment" + +msgid "IDS_COM_BODY_ENTER_PIN" +msgstr "Introdueixi PIN" + +msgid "IDS_LCKSCN_NPBODY_ENTER_PIN_TO_VIEW_MESSAGE_ABB" +msgstr "Introdueixi el PIN per veure el missatge" + +msgid "IDS_LCKSCN_NPBODY_ENTER_PIN_TO_VIEW_CALL_LOG_ABB" +msgstr "Introdueixi el PIN per veure el registre de trucades" + +msgid "IDS_LCKSCN_POP_TRY_AGAIN_IN_PD_SECONDS" +msgstr "Torni a intentar en %d s" + +msgid "IDS_COM_BODY_INCORRECT_PIN" +msgstr "PIN incorrecte" + +msgid "IDS_IDLE_BODY_1_ATTEMPT_LEFT" +msgstr "Queda 1 intent" + +msgid "IDS_IDLE_BODY_PD_ATTEMPTS_LEFT" +msgstr "Queden %d intents" + +msgid "IDS_LCKSCN_POP_YOU_HAVE_ATTEMPTED_TO_UNLOCK_THE_DEVICE_INCORRECTLY_P1SD_TIMES_YOU_HAVE_P2SD_ATTEMPTS_LEFT_BEFORE_THE_DEVICE_IS_RESET_TO_FACTORY_MSG" +msgstr "Ha intentat desbloquejar el dispositiu de forma incorrecta %1$d cops. Li queden %2$d intents abans que el dispositiu es restableixi als valors predeterminats de fàbrica i s'esborrin totes les dades." + +msgid "IDS_LCKSCN_POP_YOU_HAVE_MADE_P1SD_UNSUCCESSFUL_ATTEMPTS_TO_UNLOCK_YOUR_DEVICE_TRY_AGAIN_IN_P2SD_SECONDS" +msgstr "Ha intentat desbloquejar el dispositiu de manera incorrecta %1$d cops. Torni-ho a intentar en %2$d segons." + +msgid "IDS_LCKSCN_HEADER_UNABLE_TO_UNLOCK_SCREEN_ABB" +msgstr "No es pot desbloq. la pantalla" + +msgid "IDS_COM_BODY_ENTER_PASSWORD" +msgstr "Introduir contrasenya" + +msgid "IDS_LCKSCN_BODY_P1SD_TO_P2SD_DIGITS_OR_LETTERS_REQUIRED" +msgstr "Calen de %1$d a %2$d dígits o lletres" + +msgid "IDS_IDLE_BODY_INCORRECT_PASSWORD" +msgstr "Contrasenya incorrecta" + +msgid "IDS_LCKSCN_BODY_YOU_HAVE_ATTEMPTED_TO_UNLOCK_THE_DEVICE_INCORRECTLY_PD_TIMES_IT_WILL_NOW_BE_RESET_TO_FACTORY_DEFAULTS_AND_ALL_DATA_WILL_BE_ERASED" +msgstr "Ha intentat desbloquejar el dispositiu de forma incorrecta %d cops. Ara es restablirà als valors predeterminats de fàbrica i s'esborraran totes les dades." + +msgid "IDS_COM_BUTTON_OK_ABB" +msgstr "Acceptar" + +msgid "IDS_ST_BUTTON_CANCEL" +msgstr "Cancel" + +msgid "IDS_LCKSCN_BODY_EMERGENCY_CALL" +msgstr "Trucada d'emergència" + diff --git a/po/cs.po b/po/cs.po new file mode 100644 index 0000000..13d0c23 --- /dev/null +++ b/po/cs.po @@ -0,0 +1,57 @@ +msgid "IDS_IDLE_POP_UNABLE_TO_LAUNCH_PS" +msgstr "Nelze spustit %s." + +msgid "IDS_COM_POP_WARNING" +msgstr "Upozornění" + +msgid "IDS_COM_BODY_ENTER_PIN" +msgstr "Zadat PIN." + +msgid "IDS_LCKSCN_NPBODY_ENTER_PIN_TO_VIEW_MESSAGE_ABB" +msgstr "Zadejte PIN kód pro zobrazení zprávy" + +msgid "IDS_LCKSCN_NPBODY_ENTER_PIN_TO_VIEW_CALL_LOG_ABB" +msgstr "Zadejte PIN kód pro zobrazení protokolu hovorů" + +msgid "IDS_LCKSCN_POP_TRY_AGAIN_IN_PD_SECONDS" +msgstr "Opakujte akci za %d s." + +msgid "IDS_COM_BODY_INCORRECT_PIN" +msgstr "Chybný PIN." + +msgid "IDS_IDLE_BODY_1_ATTEMPT_LEFT" +msgstr "Zbývá 1 pokus." + +msgid "IDS_IDLE_BODY_PD_ATTEMPTS_LEFT" +msgstr "Počet zbývajících pokusů: %d." + +msgid "IDS_LCKSCN_POP_YOU_HAVE_ATTEMPTED_TO_UNLOCK_THE_DEVICE_INCORRECTLY_P1SD_TIMES_YOU_HAVE_P2SD_ATTEMPTS_LEFT_BEFORE_THE_DEVICE_IS_RESET_TO_FACTORY_MSG" +msgstr "%1$dkrát jste se chybně pokusili odemknout zařízení. Po %2$d dalších neúspěšných pokusech se obnoví výchozí nastavení zařízení a všechna data budou vymazána." + +msgid "IDS_LCKSCN_POP_YOU_HAVE_MADE_P1SD_UNSUCCESSFUL_ATTEMPTS_TO_UNLOCK_YOUR_DEVICE_TRY_AGAIN_IN_P2SD_SECONDS" +msgstr "%1$dkrát jste se neúspěšně pokusili odemknout zařízení. Opakujte akci za %2$d sekund." + +msgid "IDS_LCKSCN_HEADER_UNABLE_TO_UNLOCK_SCREEN_ABB" +msgstr "Displej nelze odemknout" + +msgid "IDS_COM_BODY_ENTER_PASSWORD" +msgstr "Zadejte heslo." + +msgid "IDS_LCKSCN_BODY_P1SD_TO_P2SD_DIGITS_OR_LETTERS_REQUIRED" +msgstr "Musí obsahovat %1$d až %2$d číslic nebo písmen." + +msgid "IDS_IDLE_BODY_INCORRECT_PASSWORD" +msgstr "Nesprávné heslo." + +msgid "IDS_LCKSCN_BODY_YOU_HAVE_ATTEMPTED_TO_UNLOCK_THE_DEVICE_INCORRECTLY_PD_TIMES_IT_WILL_NOW_BE_RESET_TO_FACTORY_DEFAULTS_AND_ALL_DATA_WILL_BE_ERASED" +msgstr "%dkrát jste se chybně pokusili odemknout zařízení. Nyní se obnoví výchozí nastavení a všechna data budou vymazána." + +msgid "IDS_COM_BUTTON_OK_ABB" +msgstr "OK" + +msgid "IDS_ST_BUTTON_CANCEL" +msgstr "Storno" + +msgid "IDS_LCKSCN_BODY_EMERGENCY_CALL" +msgstr "Tísňové volání" + diff --git a/po/da.po b/po/da.po new file mode 100644 index 0000000..665ae60 --- /dev/null +++ b/po/da.po @@ -0,0 +1,57 @@ +msgid "IDS_IDLE_POP_UNABLE_TO_LAUNCH_PS" +msgstr "Kunne ikke starte %s." + +msgid "IDS_COM_POP_WARNING" +msgstr "Advarsel" + +msgid "IDS_COM_BODY_ENTER_PIN" +msgstr "Angiv PIN-kode." + +msgid "IDS_LCKSCN_NPBODY_ENTER_PIN_TO_VIEW_MESSAGE_ABB" +msgstr "Angiv PIN-kode for at se besked" + +msgid "IDS_LCKSCN_NPBODY_ENTER_PIN_TO_VIEW_CALL_LOG_ABB" +msgstr "Angiv PIN-kode for at se opkaldslog" + +msgid "IDS_LCKSCN_POP_TRY_AGAIN_IN_PD_SECONDS" +msgstr "Prøv igen om %d sekunder." + +msgid "IDS_COM_BODY_INCORRECT_PIN" +msgstr "Forkert PIN-kode." + +msgid "IDS_IDLE_BODY_1_ATTEMPT_LEFT" +msgstr "1 forsøg tilbage." + +msgid "IDS_IDLE_BODY_PD_ATTEMPTS_LEFT" +msgstr "%d forsøg tilbage." + +msgid "IDS_LCKSCN_POP_YOU_HAVE_ATTEMPTED_TO_UNLOCK_THE_DEVICE_INCORRECTLY_P1SD_TIMES_YOU_HAVE_P2SD_ATTEMPTS_LEFT_BEFORE_THE_DEVICE_IS_RESET_TO_FACTORY_MSG" +msgstr "Du har brugt %1$d forkerte forsøg på at oplåse enheden. Du har %2$d forsøg tilbage, før enheden nulstilles til fabriksstandarderne, og alle data slettes." + +msgid "IDS_LCKSCN_POP_YOU_HAVE_MADE_P1SD_UNSUCCESSFUL_ATTEMPTS_TO_UNLOCK_YOUR_DEVICE_TRY_AGAIN_IN_P2SD_SECONDS" +msgstr "Du har foretaget %1$d mislykkede forsøg på at låse din enhed op. Prøv igen om %2$d sekunder." + +msgid "IDS_LCKSCN_HEADER_UNABLE_TO_UNLOCK_SCREEN_ABB" +msgstr "Kan ikke låse skærmen op" + +msgid "IDS_COM_BODY_ENTER_PASSWORD" +msgstr "Angiv adgangskode." + +msgid "IDS_LCKSCN_BODY_P1SD_TO_P2SD_DIGITS_OR_LETTERS_REQUIRED" +msgstr "%1$d til %2$d cifre eller bogstaver krævet." + +msgid "IDS_IDLE_BODY_INCORRECT_PASSWORD" +msgstr "Forkert adgangskode." + +msgid "IDS_LCKSCN_BODY_YOU_HAVE_ATTEMPTED_TO_UNLOCK_THE_DEVICE_INCORRECTLY_PD_TIMES_IT_WILL_NOW_BE_RESET_TO_FACTORY_DEFAULTS_AND_ALL_DATA_WILL_BE_ERASED" +msgstr "Du har forgæves forsøgt at låse enheden op %d gange. Den nulstilles nu til fabriksstandarderne, og alle data slettes." + +msgid "IDS_COM_BUTTON_OK_ABB" +msgstr "OK" + +msgid "IDS_ST_BUTTON_CANCEL" +msgstr "Annullér" + +msgid "IDS_LCKSCN_BODY_EMERGENCY_CALL" +msgstr "Nødopkald" + diff --git a/po/de.po b/po/de.po new file mode 100644 index 0000000..7a02dda --- /dev/null +++ b/po/de.po @@ -0,0 +1,57 @@ +msgid "IDS_IDLE_POP_UNABLE_TO_LAUNCH_PS" +msgstr "%s kann nicht gestartet werden" + +msgid "IDS_COM_POP_WARNING" +msgstr "Warnung" + +msgid "IDS_COM_BODY_ENTER_PIN" +msgstr "PIN eingeben" + +msgid "IDS_LCKSCN_NPBODY_ENTER_PIN_TO_VIEW_MESSAGE_ABB" +msgstr "Geben Sie die PIN ein, um die Nachricht anzuzeigen." + +msgid "IDS_LCKSCN_NPBODY_ENTER_PIN_TO_VIEW_CALL_LOG_ABB" +msgstr "Geben Sie die PIN ein, um das Anrufprotokoll anzuzeigen." + +msgid "IDS_LCKSCN_POP_TRY_AGAIN_IN_PD_SECONDS" +msgstr "In %d s erneut versuchen." + +msgid "IDS_COM_BODY_INCORRECT_PIN" +msgstr "Falsche PIN" + +msgid "IDS_IDLE_BODY_1_ATTEMPT_LEFT" +msgstr "Noch 1 Versuch" + +msgid "IDS_IDLE_BODY_PD_ATTEMPTS_LEFT" +msgstr "%d Versuche übrig" + +msgid "IDS_LCKSCN_POP_YOU_HAVE_ATTEMPTED_TO_UNLOCK_THE_DEVICE_INCORRECTLY_P1SD_TIMES_YOU_HAVE_P2SD_ATTEMPTS_LEFT_BEFORE_THE_DEVICE_IS_RESET_TO_FACTORY_MSG" +msgstr "Sie haben %1$d Mal fehlerhaft versucht, das Gerät zu entsperren. Sie haben noch %2$d Versuche. Danach wird das Gerät auf die Werkseinstellungen zurückgesetzt, und alle Daten werden gelöscht." + +msgid "IDS_LCKSCN_POP_YOU_HAVE_MADE_P1SD_UNSUCCESSFUL_ATTEMPTS_TO_UNLOCK_YOUR_DEVICE_TRY_AGAIN_IN_P2SD_SECONDS" +msgstr "Sie haben %1$d Mal vergeblich versucht, das Gerät zu entsperren. Versuchen Sie es in %2$d Sekunden erneut." + +msgid "IDS_LCKSCN_HEADER_UNABLE_TO_UNLOCK_SCREEN_ABB" +msgstr "Entsperren nicht moglich" + +msgid "IDS_COM_BODY_ENTER_PASSWORD" +msgstr "Passwort eingeben" + +msgid "IDS_LCKSCN_BODY_P1SD_TO_P2SD_DIGITS_OR_LETTERS_REQUIRED" +msgstr "Es sind %1$d bis %2$d Ziffern oder Buchstaben erforderlich." + +msgid "IDS_IDLE_BODY_INCORRECT_PASSWORD" +msgstr "Falsches Passwort" + +msgid "IDS_LCKSCN_BODY_YOU_HAVE_ATTEMPTED_TO_UNLOCK_THE_DEVICE_INCORRECTLY_PD_TIMES_IT_WILL_NOW_BE_RESET_TO_FACTORY_DEFAULTS_AND_ALL_DATA_WILL_BE_ERASED" +msgstr "Sie haben %d Mal vergeblich versucht, das Gerät zu entsperren. Das Gerät wird jetzt auf die Werkseinstellungen zurückgesetzt und alle Daten gelöscht." + +msgid "IDS_COM_BUTTON_OK_ABB" +msgstr "OK" + +msgid "IDS_ST_BUTTON_CANCEL" +msgstr "Abbruch" + +msgid "IDS_LCKSCN_BODY_EMERGENCY_CALL" +msgstr "Notruf" + diff --git a/po/el_GR.po b/po/el_GR.po new file mode 100644 index 0000000..dd9d747 --- /dev/null +++ b/po/el_GR.po @@ -0,0 +1,57 @@ +msgid "IDS_IDLE_POP_UNABLE_TO_LAUNCH_PS" +msgstr "Αδύνατη η εκκίνηση του %s." + +msgid "IDS_COM_POP_WARNING" +msgstr "Προειδοποίηση" + +msgid "IDS_COM_BODY_ENTER_PIN" +msgstr "Εισαγωγή PIN κλειδώματος." + +msgid "IDS_LCKSCN_NPBODY_ENTER_PIN_TO_VIEW_MESSAGE_ABB" +msgstr "Καταχώριση PIN για προβολή του μηνύματος" + +msgid "IDS_LCKSCN_NPBODY_ENTER_PIN_TO_VIEW_CALL_LOG_ABB" +msgstr "Καταχώριση PIN για προβολή του αρχείου κλήσεων" + +msgid "IDS_LCKSCN_POP_TRY_AGAIN_IN_PD_SECONDS" +msgstr "Δοκιμ. ξανά σε %d δευτ." + +msgid "IDS_COM_BODY_INCORRECT_PIN" +msgstr "Λανθασμένο PIN κλειδώματος" + +msgid "IDS_IDLE_BODY_1_ATTEMPT_LEFT" +msgstr "Απομένει 1 προσπάθεια." + +msgid "IDS_IDLE_BODY_PD_ATTEMPTS_LEFT" +msgstr "%d προσπάθειες απομένουν." + +msgid "IDS_LCKSCN_POP_YOU_HAVE_ATTEMPTED_TO_UNLOCK_THE_DEVICE_INCORRECTLY_P1SD_TIMES_YOU_HAVE_P2SD_ATTEMPTS_LEFT_BEFORE_THE_DEVICE_IS_RESET_TO_FACTORY_MSG" +msgstr "Έχετε επιχειρήσει να ξεκλειδώσετε τη συσκευή %1$d φορές εσφαλμένα. Έχουν απομείνει %2$d προσπάθειες μέχρι την επαναφορά των εργοστασιακών ρυθμίσεων και τη διαγραφή όλων των δεδομένων της συσκευής" + +msgid "IDS_LCKSCN_POP_YOU_HAVE_MADE_P1SD_UNSUCCESSFUL_ATTEMPTS_TO_UNLOCK_YOUR_DEVICE_TRY_AGAIN_IN_P2SD_SECONDS" +msgstr "Προσπαθήσατε %1$d φορές να ξεκλειδώσετε τη συσκευή σας χωρίς επιτυχία. Δοκιμάστε ξανά σε %2$d δευτερόλεπτα." + +msgid "IDS_LCKSCN_HEADER_UNABLE_TO_UNLOCK_SCREEN_ABB" +msgstr "Ξεκλείδωμα οθόνης μη δυνατό" + +msgid "IDS_COM_BODY_ENTER_PASSWORD" +msgstr "Εισαγωγή κωδικού." + +msgid "IDS_LCKSCN_BODY_P1SD_TO_P2SD_DIGITS_OR_LETTERS_REQUIRED" +msgstr "Απαιτούνται από %1$d έως %2$d ψηφία ή γράμματα." + +msgid "IDS_IDLE_BODY_INCORRECT_PASSWORD" +msgstr "Λάθος κωδικός." + +msgid "IDS_LCKSCN_BODY_YOU_HAVE_ATTEMPTED_TO_UNLOCK_THE_DEVICE_INCORRECTLY_PD_TIMES_IT_WILL_NOW_BE_RESET_TO_FACTORY_DEFAULTS_AND_ALL_DATA_WILL_BE_ERASED" +msgstr "Έχετε επιχειρήσει να ξεκλειδώσετε τη συσκευή %d φορές εσφαλμένα. Θα γίνει επαναφορά των εργοστασιακών ρυθμίσεων όλα τα δεδομένα θα διαγραφούν." + +msgid "IDS_COM_BUTTON_OK_ABB" +msgstr "OK" + +msgid "IDS_ST_BUTTON_CANCEL" +msgstr "Ακύρωση" + +msgid "IDS_LCKSCN_BODY_EMERGENCY_CALL" +msgstr "Κλήση έκτακτης ανάγκης" + diff --git a/po/en.po b/po/en.po new file mode 100644 index 0000000..095d766 --- /dev/null +++ b/po/en.po @@ -0,0 +1,57 @@ +msgid "IDS_IDLE_POP_UNABLE_TO_LAUNCH_PS" +msgstr "Unable to launch %s." + +msgid "IDS_COM_POP_WARNING" +msgstr "Warning" + +msgid "IDS_COM_BODY_ENTER_PIN" +msgstr "Enter PIN." + +msgid "IDS_LCKSCN_NPBODY_ENTER_PIN_TO_VIEW_MESSAGE_ABB" +msgstr "Enter PIN to view message" + +msgid "IDS_LCKSCN_NPBODY_ENTER_PIN_TO_VIEW_CALL_LOG_ABB" +msgstr "Enter PIN to view call log" + +msgid "IDS_LCKSCN_POP_TRY_AGAIN_IN_PD_SECONDS" +msgstr "Try again in %d seconds." + +msgid "IDS_COM_BODY_INCORRECT_PIN" +msgstr "Incorrect PIN." + +msgid "IDS_IDLE_BODY_1_ATTEMPT_LEFT" +msgstr "1 attempt left." + +msgid "IDS_IDLE_BODY_PD_ATTEMPTS_LEFT" +msgstr "%d attempts left." + +msgid "IDS_LCKSCN_POP_YOU_HAVE_ATTEMPTED_TO_UNLOCK_THE_DEVICE_INCORRECTLY_P1SD_TIMES_YOU_HAVE_P2SD_ATTEMPTS_LEFT_BEFORE_THE_DEVICE_IS_RESET_TO_FACTORY_MSG" +msgstr "You have attempted to unlock the device incorrectly %1$d times. You have %2$d attempts left before the device is reset to factory defaults and all data is erased." + +msgid "IDS_LCKSCN_POP_YOU_HAVE_MADE_P1SD_UNSUCCESSFUL_ATTEMPTS_TO_UNLOCK_YOUR_DEVICE_TRY_AGAIN_IN_P2SD_SECONDS" +msgstr "You have made %1$d unsuccessful attempts to unlock your device. Try again in %2$d seconds." + +msgid "IDS_LCKSCN_HEADER_UNABLE_TO_UNLOCK_SCREEN_ABB" +msgstr "Unable to unlock screen" + +msgid "IDS_COM_BODY_ENTER_PASSWORD" +msgstr "Enter password." + +msgid "IDS_LCKSCN_BODY_P1SD_TO_P2SD_DIGITS_OR_LETTERS_REQUIRED" +msgstr "%1$d to %2$d digits or letters required." + +msgid "IDS_IDLE_BODY_INCORRECT_PASSWORD" +msgstr "Incorrect password." + +msgid "IDS_LCKSCN_BODY_YOU_HAVE_ATTEMPTED_TO_UNLOCK_THE_DEVICE_INCORRECTLY_PD_TIMES_IT_WILL_NOW_BE_RESET_TO_FACTORY_DEFAULTS_AND_ALL_DATA_WILL_BE_ERASED" +msgstr "You have attempted to unlock the device incorrectly %d times. It will now be reset to factory defaults and all data will be erased." + +msgid "IDS_COM_BUTTON_OK_ABB" +msgstr "OK" + +msgid "IDS_ST_BUTTON_CANCEL" +msgstr "Cancel" + +msgid "IDS_LCKSCN_BODY_EMERGENCY_CALL" +msgstr "Emergency call" + diff --git a/po/en_US.po b/po/en_US.po new file mode 100644 index 0000000..e8b6322 --- /dev/null +++ b/po/en_US.po @@ -0,0 +1,57 @@ +msgid "IDS_IDLE_POP_UNABLE_TO_LAUNCH_PS" +msgstr "Unable to launch %s." + +msgid "IDS_COM_POP_WARNING" +msgstr "Warning" + +msgid "IDS_COM_BODY_ENTER_PIN" +msgstr "Enter PIN" + +msgid "IDS_LCKSCN_NPBODY_ENTER_PIN_TO_VIEW_MESSAGE_ABB" +msgstr "Enter PIN to view message" + +msgid "IDS_LCKSCN_NPBODY_ENTER_PIN_TO_VIEW_CALL_LOG_ABB" +msgstr "Enter PIN to view call log" + +msgid "IDS_LCKSCN_POP_TRY_AGAIN_IN_PD_SECONDS" +msgstr "Try again in %d seconds." + +msgid "IDS_COM_BODY_INCORRECT_PIN" +msgstr "Incorrect PIN." + +msgid "IDS_IDLE_BODY_1_ATTEMPT_LEFT" +msgstr "1 attempt left." + +msgid "IDS_IDLE_BODY_PD_ATTEMPTS_LEFT" +msgstr "%d attempts left." + +msgid "IDS_LCKSCN_POP_YOU_HAVE_ATTEMPTED_TO_UNLOCK_THE_DEVICE_INCORRECTLY_P1SD_TIMES_YOU_HAVE_P2SD_ATTEMPTS_LEFT_BEFORE_THE_DEVICE_IS_RESET_TO_FACTORY_MSG" +msgstr "You have attempted to unlock the device incorrectly %1$d times. You have %2$d attempts left before the device is reset to factory defaults and all data is erased." + +msgid "IDS_LCKSCN_POP_YOU_HAVE_MADE_P1SD_UNSUCCESSFUL_ATTEMPTS_TO_UNLOCK_YOUR_DEVICE_TRY_AGAIN_IN_P2SD_SECONDS" +msgstr "You have made %1$d unsuccessful attempts to unlock your device. Try again in %2$d seconds." + +msgid "IDS_LCKSCN_HEADER_UNABLE_TO_UNLOCK_SCREEN_ABB" +msgstr "Unable to unlock screen" + +msgid "IDS_COM_BODY_ENTER_PASSWORD" +msgstr "Enter password" + +msgid "IDS_LCKSCN_BODY_P1SD_TO_P2SD_DIGITS_OR_LETTERS_REQUIRED" +msgstr "%1$d to %2$d digits or letters required." + +msgid "IDS_IDLE_BODY_INCORRECT_PASSWORD" +msgstr "Incorrect password." + +msgid "IDS_LCKSCN_BODY_YOU_HAVE_ATTEMPTED_TO_UNLOCK_THE_DEVICE_INCORRECTLY_PD_TIMES_IT_WILL_NOW_BE_RESET_TO_FACTORY_DEFAULTS_AND_ALL_DATA_WILL_BE_ERASED" +msgstr "You have attempted to unlock the device incorrectly %d times. It will now be reset to factory defaults and all data will be erased." + +msgid "IDS_COM_BUTTON_OK_ABB" +msgstr "OK" + +msgid "IDS_ST_BUTTON_CANCEL" +msgstr "Cancel" + +msgid "IDS_LCKSCN_BODY_EMERGENCY_CALL" +msgstr "Emergency call" + diff --git a/po/es_ES.po b/po/es_ES.po new file mode 100644 index 0000000..1eb44bf --- /dev/null +++ b/po/es_ES.po @@ -0,0 +1,57 @@ +msgid "IDS_IDLE_POP_UNABLE_TO_LAUNCH_PS" +msgstr "No se puede iniciar %s" + +msgid "IDS_COM_POP_WARNING" +msgstr "Aviso" + +msgid "IDS_COM_BODY_ENTER_PIN" +msgstr "Introducir PIN" + +msgid "IDS_LCKSCN_NPBODY_ENTER_PIN_TO_VIEW_MESSAGE_ABB" +msgstr "Introduzca el PIN para ver el mensaje" + +msgid "IDS_LCKSCN_NPBODY_ENTER_PIN_TO_VIEW_CALL_LOG_ABB" +msgstr "Introduzca el PIN para ver el registro de llamadas" + +msgid "IDS_LCKSCN_POP_TRY_AGAIN_IN_PD_SECONDS" +msgstr "Int. de nuevo en %d seg" + +msgid "IDS_COM_BODY_INCORRECT_PIN" +msgstr "PIN incorrecto" + +msgid "IDS_IDLE_BODY_1_ATTEMPT_LEFT" +msgstr "Último intento" + +msgid "IDS_IDLE_BODY_PD_ATTEMPTS_LEFT" +msgstr "Quedan %d intentos." + +msgid "IDS_LCKSCN_POP_YOU_HAVE_ATTEMPTED_TO_UNLOCK_THE_DEVICE_INCORRECTLY_P1SD_TIMES_YOU_HAVE_P2SD_ATTEMPTS_LEFT_BEFORE_THE_DEVICE_IS_RESET_TO_FACTORY_MSG" +msgstr "Ha intentado desbloquear el dispositivo de forma incorrecta %1$d veces. Le quedan %2$d intentos antes de que el dispositivo se restablezca a los valores predeterminados de fábrica y se eliminen todos los datos." + +msgid "IDS_LCKSCN_POP_YOU_HAVE_MADE_P1SD_UNSUCCESSFUL_ATTEMPTS_TO_UNLOCK_YOUR_DEVICE_TRY_AGAIN_IN_P2SD_SECONDS" +msgstr "Ha intentado desbloquear su dispositivo %1$d veces sin éxito. Vuelva a intentarlo dentro de %2$d segundos." + +msgid "IDS_LCKSCN_HEADER_UNABLE_TO_UNLOCK_SCREEN_ABB" +msgstr "No se puede desbloq pantalla" + +msgid "IDS_COM_BODY_ENTER_PASSWORD" +msgstr "Introducir contraseña" + +msgid "IDS_LCKSCN_BODY_P1SD_TO_P2SD_DIGITS_OR_LETTERS_REQUIRED" +msgstr "Se requieren de %1$d a %2$d dígitos o letras" + +msgid "IDS_IDLE_BODY_INCORRECT_PASSWORD" +msgstr "Contraseña incorrecta" + +msgid "IDS_LCKSCN_BODY_YOU_HAVE_ATTEMPTED_TO_UNLOCK_THE_DEVICE_INCORRECTLY_PD_TIMES_IT_WILL_NOW_BE_RESET_TO_FACTORY_DEFAULTS_AND_ALL_DATA_WILL_BE_ERASED" +msgstr "Ha intentado desbloquear el dispositivo de forma incorrecta %d veces. Ahora se restablecerá a los valores predeterminados de fábrica y se eliminarán todos los datos." + +msgid "IDS_COM_BUTTON_OK_ABB" +msgstr "OK" + +msgid "IDS_ST_BUTTON_CANCEL" +msgstr "Cancelar" + +msgid "IDS_LCKSCN_BODY_EMERGENCY_CALL" +msgstr "Llamada de emergencia" + diff --git a/po/es_US.po b/po/es_US.po new file mode 100644 index 0000000..99df3f4 --- /dev/null +++ b/po/es_US.po @@ -0,0 +1,57 @@ +msgid "IDS_IDLE_POP_UNABLE_TO_LAUNCH_PS" +msgstr "No es posible iniciar %s." + +msgid "IDS_COM_POP_WARNING" +msgstr "Aviso" + +msgid "IDS_COM_BODY_ENTER_PIN" +msgstr "Introducir PIN." + +msgid "IDS_LCKSCN_NPBODY_ENTER_PIN_TO_VIEW_MESSAGE_ABB" +msgstr "Introducir PIN para ver mensaje" + +msgid "IDS_LCKSCN_NPBODY_ENTER_PIN_TO_VIEW_CALL_LOG_ABB" +msgstr "Introducir PIN para ver registro de llamadas" + +msgid "IDS_LCKSCN_POP_TRY_AGAIN_IN_PD_SECONDS" +msgstr "Intentar de nuevo en %d seg." + +msgid "IDS_COM_BODY_INCORRECT_PIN" +msgstr "PIN incorrecto." + +msgid "IDS_IDLE_BODY_1_ATTEMPT_LEFT" +msgstr "Último intento." + +msgid "IDS_IDLE_BODY_PD_ATTEMPTS_LEFT" +msgstr "Quedan %d intentos." + +msgid "IDS_LCKSCN_POP_YOU_HAVE_ATTEMPTED_TO_UNLOCK_THE_DEVICE_INCORRECTLY_P1SD_TIMES_YOU_HAVE_P2SD_ATTEMPTS_LEFT_BEFORE_THE_DEVICE_IS_RESET_TO_FACTORY_MSG" +msgstr "Intentó desbloquear el dispositivo incorrectamente %1$d veces. Le quedan %2$d intentos antes de que el dispositivo se restablezca a sus valores predeterminados de fábrica y se eliminen todos los datos." + +msgid "IDS_LCKSCN_POP_YOU_HAVE_MADE_P1SD_UNSUCCESSFUL_ATTEMPTS_TO_UNLOCK_YOUR_DEVICE_TRY_AGAIN_IN_P2SD_SECONDS" +msgstr "Ha intentado desbloquear su dispositivo %1$d veces sin éxito. Vuelva a intentarlo dentro de %2$d segundos." + +msgid "IDS_LCKSCN_HEADER_UNABLE_TO_UNLOCK_SCREEN_ABB" +msgstr "No es posible desbloquear" + +msgid "IDS_COM_BODY_ENTER_PASSWORD" +msgstr "Introducir contraseña." + +msgid "IDS_LCKSCN_BODY_P1SD_TO_P2SD_DIGITS_OR_LETTERS_REQUIRED" +msgstr "Se requieren de %1$d a %2$d dígitos o letras." + +msgid "IDS_IDLE_BODY_INCORRECT_PASSWORD" +msgstr "Contraseña incorrecta." + +msgid "IDS_LCKSCN_BODY_YOU_HAVE_ATTEMPTED_TO_UNLOCK_THE_DEVICE_INCORRECTLY_PD_TIMES_IT_WILL_NOW_BE_RESET_TO_FACTORY_DEFAULTS_AND_ALL_DATA_WILL_BE_ERASED" +msgstr "Intentó desbloquear el dispositivo incorrectamente %d veces. Ahora se restablecerá a sus valores predeterminados de fábrica y se eliminarán todos los datos." + +msgid "IDS_COM_BUTTON_OK_ABB" +msgstr "Aceptar" + +msgid "IDS_ST_BUTTON_CANCEL" +msgstr "Cancelar" + +msgid "IDS_LCKSCN_BODY_EMERGENCY_CALL" +msgstr "Llamada de emergencia" + diff --git a/po/et.po b/po/et.po new file mode 100644 index 0000000..dac6335 --- /dev/null +++ b/po/et.po @@ -0,0 +1,57 @@ +msgid "IDS_IDLE_POP_UNABLE_TO_LAUNCH_PS" +msgstr "Üksust %s ei saa käivitada." + +msgid "IDS_COM_POP_WARNING" +msgstr "Hoiatus" + +msgid "IDS_COM_BODY_ENTER_PIN" +msgstr "Sisestage PIN-kood." + +msgid "IDS_LCKSCN_NPBODY_ENTER_PIN_TO_VIEW_MESSAGE_ABB" +msgstr "Sisestage sõnumi kuvamiseks PIN-kood" + +msgid "IDS_LCKSCN_NPBODY_ENTER_PIN_TO_VIEW_CALL_LOG_ABB" +msgstr "Sisestage kõnelogi kuvamiseks PIN-kood" + +msgid "IDS_LCKSCN_POP_TRY_AGAIN_IN_PD_SECONDS" +msgstr "Proovige %d sek parast." + +msgid "IDS_COM_BODY_INCORRECT_PIN" +msgstr "Vale PIN-kood." + +msgid "IDS_IDLE_BODY_1_ATTEMPT_LEFT" +msgstr "1 katse on jäänud." + +msgid "IDS_IDLE_BODY_PD_ATTEMPTS_LEFT" +msgstr "%d katset jäänud." + +msgid "IDS_LCKSCN_POP_YOU_HAVE_ATTEMPTED_TO_UNLOCK_THE_DEVICE_INCORRECTLY_P1SD_TIMES_YOU_HAVE_P2SD_ATTEMPTS_LEFT_BEFORE_THE_DEVICE_IS_RESET_TO_FACTORY_MSG" +msgstr "Te olete proovinud seadet valesti lukust avada %1$d korda. %2$d katset on jäänud enne, kui seade lähtestatakse tehase vaikeseadetele ja kõik andmed kustutatakse." + +msgid "IDS_LCKSCN_POP_YOU_HAVE_MADE_P1SD_UNSUCCESSFUL_ATTEMPTS_TO_UNLOCK_YOUR_DEVICE_TRY_AGAIN_IN_P2SD_SECONDS" +msgstr "Olete teinud seadme avamisel %1$d ebaõnnestunud katset. Proovige %2$d sekundi pärast uuesti." + +msgid "IDS_LCKSCN_HEADER_UNABLE_TO_UNLOCK_SCREEN_ABB" +msgstr "Ekraani ei saa avada" + +msgid "IDS_COM_BODY_ENTER_PASSWORD" +msgstr "Sisestage parool." + +msgid "IDS_LCKSCN_BODY_P1SD_TO_P2SD_DIGITS_OR_LETTERS_REQUIRED" +msgstr "Nõutud on %1$d kuni %2$d numbrit või tähte." + +msgid "IDS_IDLE_BODY_INCORRECT_PASSWORD" +msgstr "Vale parool." + +msgid "IDS_LCKSCN_BODY_YOU_HAVE_ATTEMPTED_TO_UNLOCK_THE_DEVICE_INCORRECTLY_PD_TIMES_IT_WILL_NOW_BE_RESET_TO_FACTORY_DEFAULTS_AND_ALL_DATA_WILL_BE_ERASED" +msgstr "Te olete proovinud seadet valesti lukust avada %d korda. Nüüd lähtestatakse see tehase vaikeseadetele ning kõik andmed kustutatakse." + +msgid "IDS_COM_BUTTON_OK_ABB" +msgstr "OK" + +msgid "IDS_ST_BUTTON_CANCEL" +msgstr "Tühista" + +msgid "IDS_LCKSCN_BODY_EMERGENCY_CALL" +msgstr "Hädaabikõne" + diff --git a/po/eu.po b/po/eu.po new file mode 100644 index 0000000..6fc807e --- /dev/null +++ b/po/eu.po @@ -0,0 +1,57 @@ +msgid "IDS_IDLE_POP_UNABLE_TO_LAUNCH_PS" +msgstr "Ezin da %s abiatu" + +msgid "IDS_COM_POP_WARNING" +msgstr "Oharra" + +msgid "IDS_COM_BODY_ENTER_PIN" +msgstr "PINa idatzi" + +msgid "IDS_LCKSCN_NPBODY_ENTER_PIN_TO_VIEW_MESSAGE_ABB" +msgstr "Idatzi PINa mezua ikusteko" + +msgid "IDS_LCKSCN_NPBODY_ENTER_PIN_TO_VIEW_CALL_LOG_ABB" +msgstr "Idatzi PINa dei erregistroa ikusteko" + +msgid "IDS_LCKSCN_POP_TRY_AGAIN_IN_PD_SECONDS" +msgstr "Saiatu berriz %d segundoren ondoren" + +msgid "IDS_COM_BODY_INCORRECT_PIN" +msgstr "PIN okerra" + +msgid "IDS_IDLE_BODY_1_ATTEMPT_LEFT" +msgstr "Ahalegin 1 gelditzen zaizu" + +msgid "IDS_IDLE_BODY_PD_ATTEMPTS_LEFT" +msgstr "%d saiakera geratzen dira" + +msgid "IDS_LCKSCN_POP_YOU_HAVE_ATTEMPTED_TO_UNLOCK_THE_DEVICE_INCORRECTLY_P1SD_TIMES_YOU_HAVE_P2SD_ATTEMPTS_LEFT_BEFORE_THE_DEVICE_IS_RESET_TO_FACTORY_MSG" +msgstr "Gailua modu desegokian desblokeatzen saiatu zara %1$d aldiz. %2$d saio geratzen zaizkizu gailuan fabrikako hobespenak berrezarri eta datu guztiak ezabatu aurretik." + +msgid "IDS_LCKSCN_POP_YOU_HAVE_MADE_P1SD_UNSUCCESSFUL_ATTEMPTS_TO_UNLOCK_YOUR_DEVICE_TRY_AGAIN_IN_P2SD_SECONDS" +msgstr "Gailua desblokeatzeko %1$d saio oker egin dituzu. Saiatu berriz %2$d segundo barru." + +msgid "IDS_LCKSCN_HEADER_UNABLE_TO_UNLOCK_SCREEN_ABB" +msgstr "Ezin izan da pantaila desblokeatu" + +msgid "IDS_COM_BODY_ENTER_PASSWORD" +msgstr "Pasahitza idatzi" + +msgid "IDS_LCKSCN_BODY_P1SD_TO_P2SD_DIGITS_OR_LETTERS_REQUIRED" +msgstr "%1$d eta %2$d digitu edo letra artean behar dira" + +msgid "IDS_IDLE_BODY_INCORRECT_PASSWORD" +msgstr "Pasahitz okerra" + +msgid "IDS_LCKSCN_BODY_YOU_HAVE_ATTEMPTED_TO_UNLOCK_THE_DEVICE_INCORRECTLY_PD_TIMES_IT_WILL_NOW_BE_RESET_TO_FACTORY_DEFAULTS_AND_ALL_DATA_WILL_BE_ERASED" +msgstr "Gailua modu desegokian desblokeatzen saiatu zara %d aldiz. Orain, fabrikako hobespenak berrezarri eta datu guztiak ezabatuko dira." + +msgid "IDS_COM_BUTTON_OK_ABB" +msgstr "Ados" + +msgid "IDS_ST_BUTTON_CANCEL" +msgstr "Ezeztatu" + +msgid "IDS_LCKSCN_BODY_EMERGENCY_CALL" +msgstr "Emergentzia deia" + diff --git a/po/fi.po b/po/fi.po new file mode 100644 index 0000000..ccd0f4c --- /dev/null +++ b/po/fi.po @@ -0,0 +1,57 @@ +msgid "IDS_IDLE_POP_UNABLE_TO_LAUNCH_PS" +msgstr "Sovellusta %s ei voi käynnistää." + +msgid "IDS_COM_POP_WARNING" +msgstr "Varoitus" + +msgid "IDS_COM_BODY_ENTER_PIN" +msgstr "Anna PIN-koodi." + +msgid "IDS_LCKSCN_NPBODY_ENTER_PIN_TO_VIEW_MESSAGE_ABB" +msgstr "Anna PIN-koodi viestin tarkastelua varten" + +msgid "IDS_LCKSCN_NPBODY_ENTER_PIN_TO_VIEW_CALL_LOG_ABB" +msgstr "Anna PIN-koodi puhelulokin tarkastelua varten" + +msgid "IDS_LCKSCN_POP_TRY_AGAIN_IN_PD_SECONDS" +msgstr "Yritä %d s kul. uudelleen." + +msgid "IDS_COM_BODY_INCORRECT_PIN" +msgstr "Virheellinen PIN-koodi." + +msgid "IDS_IDLE_BODY_1_ATTEMPT_LEFT" +msgstr "1 yritys jäljellä" + +msgid "IDS_IDLE_BODY_PD_ATTEMPTS_LEFT" +msgstr "%d yritystä jäljellä" + +msgid "IDS_LCKSCN_POP_YOU_HAVE_ATTEMPTED_TO_UNLOCK_THE_DEVICE_INCORRECTLY_P1SD_TIMES_YOU_HAVE_P2SD_ATTEMPTS_LEFT_BEFORE_THE_DEVICE_IS_RESET_TO_FACTORY_MSG" +msgstr "Olet yrittänyt poistaa laitteen lukituksen virheellisesti %1$d kertaa. Sinulla on %2$d yrityskertaa jäljellä, ennen kuin laitteen tehdasasetukset palautetaan ja kaikki tiedot poistetaan." + +msgid "IDS_LCKSCN_POP_YOU_HAVE_MADE_P1SD_UNSUCCESSFUL_ATTEMPTS_TO_UNLOCK_YOUR_DEVICE_TRY_AGAIN_IN_P2SD_SECONDS" +msgstr "Laitteen lukituksen poistaminen epäonnistui %1$d kertaa. Yritä %2$d sekunnin kuluttua uudelleen." + +msgid "IDS_LCKSCN_HEADER_UNABLE_TO_UNLOCK_SCREEN_ABB" +msgstr "Näytön lukit. ei voi poistaa" + +msgid "IDS_COM_BODY_ENTER_PASSWORD" +msgstr "Kirjoita salasana." + +msgid "IDS_LCKSCN_BODY_P1SD_TO_P2SD_DIGITS_OR_LETTERS_REQUIRED" +msgstr "Oltava %1$d–%2$d numeroa tai kirjainta." + +msgid "IDS_IDLE_BODY_INCORRECT_PASSWORD" +msgstr "Virheellinen salasana" + +msgid "IDS_LCKSCN_BODY_YOU_HAVE_ATTEMPTED_TO_UNLOCK_THE_DEVICE_INCORRECTLY_PD_TIMES_IT_WILL_NOW_BE_RESET_TO_FACTORY_DEFAULTS_AND_ALL_DATA_WILL_BE_ERASED" +msgstr "Olet yrittänyt poistaa laitteen lukituksen virheellisesti %d kertaa. Laitteen tehdasasetukset palautetaan ja kaikki tiedot poistetaan." + +msgid "IDS_COM_BUTTON_OK_ABB" +msgstr "OK" + +msgid "IDS_ST_BUTTON_CANCEL" +msgstr "Peruuta" + +msgid "IDS_LCKSCN_BODY_EMERGENCY_CALL" +msgstr "Hätäpuhelu" + diff --git a/po/fr.po b/po/fr.po new file mode 100644 index 0000000..d6c48b6 --- /dev/null +++ b/po/fr.po @@ -0,0 +1,57 @@ +msgid "IDS_IDLE_POP_UNABLE_TO_LAUNCH_PS" +msgstr "Impossible de lancer %s." + +msgid "IDS_COM_POP_WARNING" +msgstr "Avertissement" + +msgid "IDS_COM_BODY_ENTER_PIN" +msgstr "Saisir le code PIN." + +msgid "IDS_LCKSCN_NPBODY_ENTER_PIN_TO_VIEW_MESSAGE_ABB" +msgstr "Saisir le code PIN pour afficher le message" + +msgid "IDS_LCKSCN_NPBODY_ENTER_PIN_TO_VIEW_CALL_LOG_ABB" +msgstr "Saisir le code PIN pour afficher le journal d'appels" + +msgid "IDS_LCKSCN_POP_TRY_AGAIN_IN_PD_SECONDS" +msgstr "Réessayez dans %d secondes." + +msgid "IDS_COM_BODY_INCORRECT_PIN" +msgstr "Code PIN incorrect" + +msgid "IDS_IDLE_BODY_1_ATTEMPT_LEFT" +msgstr "1 essai restant" + +msgid "IDS_IDLE_BODY_PD_ATTEMPTS_LEFT" +msgstr "%d essais restants" + +msgid "IDS_LCKSCN_POP_YOU_HAVE_ATTEMPTED_TO_UNLOCK_THE_DEVICE_INCORRECTLY_P1SD_TIMES_YOU_HAVE_P2SD_ATTEMPTS_LEFT_BEFORE_THE_DEVICE_IS_RESET_TO_FACTORY_MSG" +msgstr "Vous avez essayé de déverrouiller l'appareil de façon incorrecte à %1$d reprises. Il reste %2$d tentatives avant le rétablissement des paramètres d'origine et la suppression de toutes les données." + +msgid "IDS_LCKSCN_POP_YOU_HAVE_MADE_P1SD_UNSUCCESSFUL_ATTEMPTS_TO_UNLOCK_YOUR_DEVICE_TRY_AGAIN_IN_P2SD_SECONDS" +msgstr "Le déverrouillage de votre appareil a échoué à %1$d reprises. Réessayez dans %2$d secondes." + +msgid "IDS_LCKSCN_HEADER_UNABLE_TO_UNLOCK_SCREEN_ABB" +msgstr "Impossible déverrouiller écran" + +msgid "IDS_COM_BODY_ENTER_PASSWORD" +msgstr "Saisir le mot de passe." + +msgid "IDS_LCKSCN_BODY_P1SD_TO_P2SD_DIGITS_OR_LETTERS_REQUIRED" +msgstr "%1$d à %2$d chiffres ou lettres requis" + +msgid "IDS_IDLE_BODY_INCORRECT_PASSWORD" +msgstr "Mot de passe incorrect" + +msgid "IDS_LCKSCN_BODY_YOU_HAVE_ATTEMPTED_TO_UNLOCK_THE_DEVICE_INCORRECTLY_PD_TIMES_IT_WILL_NOW_BE_RESET_TO_FACTORY_DEFAULTS_AND_ALL_DATA_WILL_BE_ERASED" +msgstr "Vous avez essayé de déverrouiller l'appareil de façon incorrecte à %d reprises. Les paramètres d'origine vont maintenant être rétablis et toutes les données effacées." + +msgid "IDS_COM_BUTTON_OK_ABB" +msgstr "OK" + +msgid "IDS_ST_BUTTON_CANCEL" +msgstr "Annuler" + +msgid "IDS_LCKSCN_BODY_EMERGENCY_CALL" +msgstr "Appel d'urgence" + diff --git a/po/fr_CA.po b/po/fr_CA.po new file mode 100644 index 0000000..9e115c7 --- /dev/null +++ b/po/fr_CA.po @@ -0,0 +1,57 @@ +msgid "IDS_IDLE_POP_UNABLE_TO_LAUNCH_PS" +msgstr "Impossible de lancer %s." + +msgid "IDS_COM_POP_WARNING" +msgstr "Avertissement" + +msgid "IDS_COM_BODY_ENTER_PIN" +msgstr "Saisir le NIP." + +msgid "IDS_LCKSCN_NPBODY_ENTER_PIN_TO_VIEW_MESSAGE_ABB" +msgstr "Saisir le code NIP pour afficher le message" + +msgid "IDS_LCKSCN_NPBODY_ENTER_PIN_TO_VIEW_CALL_LOG_ABB" +msgstr "Saisir le code NIP pour afficher le journal d'appels" + +msgid "IDS_LCKSCN_POP_TRY_AGAIN_IN_PD_SECONDS" +msgstr "Réessayez ds %d secondes." + +msgid "IDS_COM_BODY_INCORRECT_PIN" +msgstr "NIP incorrect" + +msgid "IDS_IDLE_BODY_1_ATTEMPT_LEFT" +msgstr "1 essai restant." + +msgid "IDS_IDLE_BODY_PD_ATTEMPTS_LEFT" +msgstr "%d essais restants." + +msgid "IDS_LCKSCN_POP_YOU_HAVE_ATTEMPTED_TO_UNLOCK_THE_DEVICE_INCORRECTLY_P1SD_TIMES_YOU_HAVE_P2SD_ATTEMPTS_LEFT_BEFORE_THE_DEVICE_IS_RESET_TO_FACTORY_MSG" +msgstr "Vous avez essayé de déverrouiller l'appareil de façon incorrecte à %1$d reprises. Il reste %2$d tentatives avant le rétablissement des paramètres d'origine et la suppression de toutes les données." + +msgid "IDS_LCKSCN_POP_YOU_HAVE_MADE_P1SD_UNSUCCESSFUL_ATTEMPTS_TO_UNLOCK_YOUR_DEVICE_TRY_AGAIN_IN_P2SD_SECONDS" +msgstr "Le déverrouillage de votre appareil a échoué à %1$d reprises. Réessayez dans %2$d secondes." + +msgid "IDS_LCKSCN_HEADER_UNABLE_TO_UNLOCK_SCREEN_ABB" +msgstr "Impossible déverrouiller écran" + +msgid "IDS_COM_BODY_ENTER_PASSWORD" +msgstr "Saisir le mot de passe." + +msgid "IDS_LCKSCN_BODY_P1SD_TO_P2SD_DIGITS_OR_LETTERS_REQUIRED" +msgstr "%1$d à %2$d chiffres ou lettres requis." + +msgid "IDS_IDLE_BODY_INCORRECT_PASSWORD" +msgstr "Mot de passe incorrect." + +msgid "IDS_LCKSCN_BODY_YOU_HAVE_ATTEMPTED_TO_UNLOCK_THE_DEVICE_INCORRECTLY_PD_TIMES_IT_WILL_NOW_BE_RESET_TO_FACTORY_DEFAULTS_AND_ALL_DATA_WILL_BE_ERASED" +msgstr "Vous avez essayé de déverrouiller l'appareil de façon incorrecte à %d reprises. Les paramètres d'origine vont maintenant être rétablis et toutes les données effacées." + +msgid "IDS_COM_BUTTON_OK_ABB" +msgstr "OK" + +msgid "IDS_ST_BUTTON_CANCEL" +msgstr "Annuler" + +msgid "IDS_LCKSCN_BODY_EMERGENCY_CALL" +msgstr "Appel d'urgence" + diff --git a/po/gl.po b/po/gl.po new file mode 100644 index 0000000..0b8cf03 --- /dev/null +++ b/po/gl.po @@ -0,0 +1,57 @@ +msgid "IDS_IDLE_POP_UNABLE_TO_LAUNCH_PS" +msgstr "Non se pode iniciar %s" + +msgid "IDS_COM_POP_WARNING" +msgstr "Aviso" + +msgid "IDS_COM_BODY_ENTER_PIN" +msgstr "Introducir PIN" + +msgid "IDS_LCKSCN_NPBODY_ENTER_PIN_TO_VIEW_MESSAGE_ABB" +msgstr "Introduce o PIN para ver a mensaxe" + +msgid "IDS_LCKSCN_NPBODY_ENTER_PIN_TO_VIEW_CALL_LOG_ABB" +msgstr "Introduce o PIN para ver o rexistro de chamadas" + +msgid "IDS_LCKSCN_POP_TRY_AGAIN_IN_PD_SECONDS" +msgstr "Ténteo de novo en %d seg." + +msgid "IDS_COM_BODY_INCORRECT_PIN" +msgstr "PIN incorrecto" + +msgid "IDS_IDLE_BODY_1_ATTEMPT_LEFT" +msgstr "Queda 1 intento" + +msgid "IDS_IDLE_BODY_PD_ATTEMPTS_LEFT" +msgstr "Quedan %d intentos" + +msgid "IDS_LCKSCN_POP_YOU_HAVE_ATTEMPTED_TO_UNLOCK_THE_DEVICE_INCORRECTLY_P1SD_TIMES_YOU_HAVE_P2SD_ATTEMPTS_LEFT_BEFORE_THE_DEVICE_IS_RESET_TO_FACTORY_MSG" +msgstr "Tentaches desbloquear o dispositivo incorrectamente %1$d veces. Quédanche %2$d intentos antes de que se restablezan os axustes predeterminados de fábrica e se eliminen todos os datos do dispositivo." + +msgid "IDS_LCKSCN_POP_YOU_HAVE_MADE_P1SD_UNSUCCESSFUL_ATTEMPTS_TO_UNLOCK_YOUR_DEVICE_TRY_AGAIN_IN_P2SD_SECONDS" +msgstr "Realizaches %1$d intentos sen éxito de desbloquear o dispositivo. Téntao de novo dentro de %2$d segundos." + +msgid "IDS_LCKSCN_HEADER_UNABLE_TO_UNLOCK_SCREEN_ABB" +msgstr "Imposible desbloquear pantalla" + +msgid "IDS_COM_BODY_ENTER_PASSWORD" +msgstr "Introduza o contrasinal" + +msgid "IDS_LCKSCN_BODY_P1SD_TO_P2SD_DIGITS_OR_LETTERS_REQUIRED" +msgstr "Precísanse entre %1$d e %2$d díxitos ou letras" + +msgid "IDS_IDLE_BODY_INCORRECT_PASSWORD" +msgstr "Contrasinal non válido" + +msgid "IDS_LCKSCN_BODY_YOU_HAVE_ATTEMPTED_TO_UNLOCK_THE_DEVICE_INCORRECTLY_PD_TIMES_IT_WILL_NOW_BE_RESET_TO_FACTORY_DEFAULTS_AND_ALL_DATA_WILL_BE_ERASED" +msgstr "Tentaches desbloquear o dispositivo incorrectamente %d veces. Agora restableceranse os axustes predeterminados de fábrica e borraranse todos os datos." + +msgid "IDS_COM_BUTTON_OK_ABB" +msgstr "Aceptar" + +msgid "IDS_ST_BUTTON_CANCEL" +msgstr "Cancelar" + +msgid "IDS_LCKSCN_BODY_EMERGENCY_CALL" +msgstr "Chamada de urxencia" + diff --git a/po/hr.po b/po/hr.po new file mode 100644 index 0000000..2922fde --- /dev/null +++ b/po/hr.po @@ -0,0 +1,57 @@ +msgid "IDS_IDLE_POP_UNABLE_TO_LAUNCH_PS" +msgstr "Nemoguće pokrenuti %s." + +msgid "IDS_COM_POP_WARNING" +msgstr "Upozorenje" + +msgid "IDS_COM_BODY_ENTER_PIN" +msgstr "Unesite PIN." + +msgid "IDS_LCKSCN_NPBODY_ENTER_PIN_TO_VIEW_MESSAGE_ABB" +msgstr "Unesite PIN za prikaz poruke" + +msgid "IDS_LCKSCN_NPBODY_ENTER_PIN_TO_VIEW_CALL_LOG_ABB" +msgstr "Unesite PIN za prikaz popisa poziva" + +msgid "IDS_LCKSCN_POP_TRY_AGAIN_IN_PD_SECONDS" +msgstr "Ponovite nakon %d sek." + +msgid "IDS_COM_BODY_INCORRECT_PIN" +msgstr "Neispravan PIN." + +msgid "IDS_IDLE_BODY_1_ATTEMPT_LEFT" +msgstr "Još 1 pokušaj." + +msgid "IDS_IDLE_BODY_PD_ATTEMPTS_LEFT" +msgstr "%d pokušaja preostalo." + +msgid "IDS_LCKSCN_POP_YOU_HAVE_ATTEMPTED_TO_UNLOCK_THE_DEVICE_INCORRECTLY_P1SD_TIMES_YOU_HAVE_P2SD_ATTEMPTS_LEFT_BEFORE_THE_DEVICE_IS_RESET_TO_FACTORY_MSG" +msgstr "Pokušali ste neispravno otključati uređaj %1$d puta. Imate još %2$d pokušaja prije nego što se uređaj vrati na tvornički zadane postavke te se svi podaci izbrišu." + +msgid "IDS_LCKSCN_POP_YOU_HAVE_MADE_P1SD_UNSUCCESSFUL_ATTEMPTS_TO_UNLOCK_YOUR_DEVICE_TRY_AGAIN_IN_P2SD_SECONDS" +msgstr "Neuspješno ste pokušali otključati uređaj %1$d puta. Pokušajte ponovno za %2$d sekundi." + +msgid "IDS_LCKSCN_HEADER_UNABLE_TO_UNLOCK_SCREEN_ABB" +msgstr "Nije moguće otključati zaslon" + +msgid "IDS_COM_BODY_ENTER_PASSWORD" +msgstr "Unesite lozinku." + +msgid "IDS_LCKSCN_BODY_P1SD_TO_P2SD_DIGITS_OR_LETTERS_REQUIRED" +msgstr "Potrebno je %1$d do %2$d znamenki ili slova." + +msgid "IDS_IDLE_BODY_INCORRECT_PASSWORD" +msgstr "Neispravna lozinka." + +msgid "IDS_LCKSCN_BODY_YOU_HAVE_ATTEMPTED_TO_UNLOCK_THE_DEVICE_INCORRECTLY_PD_TIMES_IT_WILL_NOW_BE_RESET_TO_FACTORY_DEFAULTS_AND_ALL_DATA_WILL_BE_ERASED" +msgstr "Pokušali ste neispravno otključati uređaj %d puta. Vratit će se na tvornički zadane postavke i svi će podaci biti izbrisani." + +msgid "IDS_COM_BUTTON_OK_ABB" +msgstr "OK" + +msgid "IDS_ST_BUTTON_CANCEL" +msgstr "Prekid" + +msgid "IDS_LCKSCN_BODY_EMERGENCY_CALL" +msgstr "SOS poziv" + diff --git a/po/hu.po b/po/hu.po new file mode 100644 index 0000000..92f5620 --- /dev/null +++ b/po/hu.po @@ -0,0 +1,57 @@ +msgid "IDS_IDLE_POP_UNABLE_TO_LAUNCH_PS" +msgstr "A(z) %s nem indítható el." + +msgid "IDS_COM_POP_WARNING" +msgstr "Figyelmeztetés" + +msgid "IDS_COM_BODY_ENTER_PIN" +msgstr "Írja be a PIN-kódot!" + +msgid "IDS_LCKSCN_NPBODY_ENTER_PIN_TO_VIEW_MESSAGE_ABB" +msgstr "Adja meg a PIN-t az üzenet megjelenítéséhez" + +msgid "IDS_LCKSCN_NPBODY_ENTER_PIN_TO_VIEW_CALL_LOG_ABB" +msgstr "Adja meg a PIN-t a hívásnapló megjelenítéséhez" + +msgid "IDS_LCKSCN_POP_TRY_AGAIN_IN_PD_SECONDS" +msgstr "Prób. újra %d mp múlva." + +msgid "IDS_COM_BODY_INCORRECT_PIN" +msgstr "Hibás PIN-kód" + +msgid "IDS_IDLE_BODY_1_ATTEMPT_LEFT" +msgstr "Még 1 próbálkozásra van." + +msgid "IDS_IDLE_BODY_PD_ATTEMPTS_LEFT" +msgstr "%d kísérlet maradt." + +msgid "IDS_LCKSCN_POP_YOU_HAVE_ATTEMPTED_TO_UNLOCK_THE_DEVICE_INCORRECTLY_P1SD_TIMES_YOU_HAVE_P2SD_ATTEMPTS_LEFT_BEFORE_THE_DEVICE_IS_RESET_TO_FACTORY_MSG" +msgstr "%1$d alkalommal helytelenül kísérelte meg az eszköz feloldását. További %2$d sikertelen kísérlet esetén visszaállnak az eszköz gyári alapértelmezései, és minden adat törlődik róla." + +msgid "IDS_LCKSCN_POP_YOU_HAVE_MADE_P1SD_UNSUCCESSFUL_ATTEMPTS_TO_UNLOCK_YOUR_DEVICE_TRY_AGAIN_IN_P2SD_SECONDS" +msgstr "%1$d alkalommal sikertelenül próbálta feloldani az eszközt. Próbálja újra %2$d másodperc múlva." + +msgid "IDS_LCKSCN_HEADER_UNABLE_TO_UNLOCK_SCREEN_ABB" +msgstr "Nem oldható fel a képernyő" + +msgid "IDS_COM_BODY_ENTER_PASSWORD" +msgstr "Írja be a jelszót." + +msgid "IDS_LCKSCN_BODY_P1SD_TO_P2SD_DIGITS_OR_LETTERS_REQUIRED" +msgstr "%1$d–%2$d számjegy vagy betű szükséges." + +msgid "IDS_IDLE_BODY_INCORRECT_PASSWORD" +msgstr "Téves jelszó" + +msgid "IDS_LCKSCN_BODY_YOU_HAVE_ATTEMPTED_TO_UNLOCK_THE_DEVICE_INCORRECTLY_PD_TIMES_IT_WILL_NOW_BE_RESET_TO_FACTORY_DEFAULTS_AND_ALL_DATA_WILL_BE_ERASED" +msgstr "%d alkalommal helytelenül kísérelte meg az eszköz feloldását. Most visszaállnak az eszköz gyári alapértelmezései, és minden adat törlődik róla." + +msgid "IDS_COM_BUTTON_OK_ABB" +msgstr "OK" + +msgid "IDS_ST_BUTTON_CANCEL" +msgstr "Mégse" + +msgid "IDS_LCKSCN_BODY_EMERGENCY_CALL" +msgstr "Segélyhívás" + diff --git a/po/hy.po b/po/hy.po new file mode 100644 index 0000000..1fd5932 --- /dev/null +++ b/po/hy.po @@ -0,0 +1,57 @@ +msgid "IDS_IDLE_POP_UNABLE_TO_LAUNCH_PS" +msgstr "Հնարավոր չէ գործարկել %s-ը:" + +msgid "IDS_COM_POP_WARNING" +msgstr "Զգուշացում" + +msgid "IDS_COM_BODY_ENTER_PIN" +msgstr "Մուտքագրեք PIN-ը:" + +msgid "IDS_LCKSCN_NPBODY_ENTER_PIN_TO_VIEW_MESSAGE_ABB" +msgstr "Մուտքագրեք PIN՝ հաղորդագրությունը դիտելու համար" + +msgid "IDS_LCKSCN_NPBODY_ENTER_PIN_TO_VIEW_CALL_LOG_ABB" +msgstr "Մուտքագրեք PIN՝ կանչերի մատյանը դիտելու համար" + +msgid "IDS_LCKSCN_POP_TRY_AGAIN_IN_PD_SECONDS" +msgstr "Նորից փորձեք %d վրկ.-ից:" + +msgid "IDS_COM_BODY_INCORRECT_PIN" +msgstr "Սխալ PIN:" + +msgid "IDS_IDLE_BODY_1_ATTEMPT_LEFT" +msgstr "1 փորձ է մնացել:" + +msgid "IDS_IDLE_BODY_PD_ATTEMPTS_LEFT" +msgstr "Մնացել է %d փորձ:" + +msgid "IDS_LCKSCN_POP_YOU_HAVE_ATTEMPTED_TO_UNLOCK_THE_DEVICE_INCORRECTLY_P1SD_TIMES_YOU_HAVE_P2SD_ATTEMPTS_LEFT_BEFORE_THE_DEVICE_IS_RESET_TO_FACTORY_MSG" +msgstr "Դուք սարքի արգելաբացման սխալ փորձ եք արել %1$d անգամ: Ձեզ %2$d փորձ է մնացել, նախքան սարքը կհետադարձվի գործարանային կանխադրվածքի, և բոլոր տվյալները կջնջվեն:" + +msgid "IDS_LCKSCN_POP_YOU_HAVE_MADE_P1SD_UNSUCCESSFUL_ATTEMPTS_TO_UNLOCK_YOUR_DEVICE_TRY_AGAIN_IN_P2SD_SECONDS" +msgstr "Դուք կատարել եք Ձեր սարքն արգելաբացելու %1$d անհաջող փորձ: Նորից փորձեք %2$d վայրկյանից:" + +msgid "IDS_LCKSCN_HEADER_UNABLE_TO_UNLOCK_SCREEN_ABB" +msgstr "Անհնար է արգելաբացել էկրանը" + +msgid "IDS_COM_BODY_ENTER_PASSWORD" +msgstr "Մուտքագրեք գաղտնաբառը:" + +msgid "IDS_LCKSCN_BODY_P1SD_TO_P2SD_DIGITS_OR_LETTERS_REQUIRED" +msgstr "Պահանջվում է %1$d-ից %2$d թվանշան կամ տառ:" + +msgid "IDS_IDLE_BODY_INCORRECT_PASSWORD" +msgstr "Սխալ գաղտնաբառ:" + +msgid "IDS_LCKSCN_BODY_YOU_HAVE_ATTEMPTED_TO_UNLOCK_THE_DEVICE_INCORRECTLY_PD_TIMES_IT_WILL_NOW_BE_RESET_TO_FACTORY_DEFAULTS_AND_ALL_DATA_WILL_BE_ERASED" +msgstr "Դուք սարքի արգելաբացման սխալ փորձ եք արել %d անգամ: Այն հիմա կհետադարձվի գործարանային կանխադրվածքի, և բոլոր տվյալները կջնջվեն" + +msgid "IDS_COM_BUTTON_OK_ABB" +msgstr "OK" + +msgid "IDS_ST_BUTTON_CANCEL" +msgstr "Չեղարկել" + +msgid "IDS_LCKSCN_BODY_EMERGENCY_CALL" +msgstr "Հրատապ զանգ" + diff --git a/po/is.po b/po/is.po new file mode 100644 index 0000000..ac0da16 --- /dev/null +++ b/po/is.po @@ -0,0 +1,57 @@ +msgid "IDS_IDLE_POP_UNABLE_TO_LAUNCH_PS" +msgstr "Mistókst að opna %s." + +msgid "IDS_COM_POP_WARNING" +msgstr "Viðvörun" + +msgid "IDS_COM_BODY_ENTER_PIN" +msgstr "Sláðu inn PIN-númeri." + +msgid "IDS_LCKSCN_NPBODY_ENTER_PIN_TO_VIEW_MESSAGE_ABB" +msgstr "Sláðu inn PIN-númer til að skoða skilaboð" + +msgid "IDS_LCKSCN_NPBODY_ENTER_PIN_TO_VIEW_CALL_LOG_ABB" +msgstr "Sláðu inn PIN-númer til að skoða símtalaskrá" + +msgid "IDS_LCKSCN_POP_TRY_AGAIN_IN_PD_SECONDS" +msgstr "Reyndu aftur eftir %d sek." + +msgid "IDS_COM_BODY_INCORRECT_PIN" +msgstr "Rangt PIN-númer." + +msgid "IDS_IDLE_BODY_1_ATTEMPT_LEFT" +msgstr "1 tilraun eftir." + +msgid "IDS_IDLE_BODY_PD_ATTEMPTS_LEFT" +msgstr "%d tilraunir eftir." + +msgid "IDS_LCKSCN_POP_YOU_HAVE_ATTEMPTED_TO_UNLOCK_THE_DEVICE_INCORRECTLY_P1SD_TIMES_YOU_HAVE_P2SD_ATTEMPTS_LEFT_BEFORE_THE_DEVICE_IS_RESET_TO_FACTORY_MSG" +msgstr "Þú hefur reynt að opna tækið á rangan hátt %1$d sinnum. Þú átt %2$d tilraunir eftir áður en tækið verður núllstillt og öllum gögnum þess eytt." + +msgid "IDS_LCKSCN_POP_YOU_HAVE_MADE_P1SD_UNSUCCESSFUL_ATTEMPTS_TO_UNLOCK_YOUR_DEVICE_TRY_AGAIN_IN_P2SD_SECONDS" +msgstr "Þú hefur gert %1$d misheppnaðar tilraunir til að opna tækið. Reyndu aftur eftir %2$d sekúndur." + +msgid "IDS_LCKSCN_HEADER_UNABLE_TO_UNLOCK_SCREEN_ABB" +msgstr "Ekki er hægt að opna skjá" + +msgid "IDS_COM_BODY_ENTER_PASSWORD" +msgstr "Rita aðgangsorð." + +msgid "IDS_LCKSCN_BODY_P1SD_TO_P2SD_DIGITS_OR_LETTERS_REQUIRED" +msgstr "Slá þarf inn %1$d til %2$d stafi." + +msgid "IDS_IDLE_BODY_INCORRECT_PASSWORD" +msgstr "Rangt aðgangsorð." + +msgid "IDS_LCKSCN_BODY_YOU_HAVE_ATTEMPTED_TO_UNLOCK_THE_DEVICE_INCORRECTLY_PD_TIMES_IT_WILL_NOW_BE_RESET_TO_FACTORY_DEFAULTS_AND_ALL_DATA_WILL_BE_ERASED" +msgstr "Þú hefur reynt að opna tækið á rangan hátt %d sinnum. Það verður nú endurstillt á grunnstillingar framleiðanda og öllum gögnum verður eytt." + +msgid "IDS_COM_BUTTON_OK_ABB" +msgstr "Í lagi" + +msgid "IDS_ST_BUTTON_CANCEL" +msgstr "Hætta v." + +msgid "IDS_LCKSCN_BODY_EMERGENCY_CALL" +msgstr "Neyðarhringing" + diff --git a/po/it_IT.po b/po/it_IT.po new file mode 100644 index 0000000..1f8b41e --- /dev/null +++ b/po/it_IT.po @@ -0,0 +1,57 @@ +msgid "IDS_IDLE_POP_UNABLE_TO_LAUNCH_PS" +msgstr "Impossibile avviare %s." + +msgid "IDS_COM_POP_WARNING" +msgstr "Avviso" + +msgid "IDS_COM_BODY_ENTER_PIN" +msgstr "Inserisci PIN." + +msgid "IDS_LCKSCN_NPBODY_ENTER_PIN_TO_VIEW_MESSAGE_ABB" +msgstr "Inserite il PIN per visualizzare il messaggio" + +msgid "IDS_LCKSCN_NPBODY_ENTER_PIN_TO_VIEW_CALL_LOG_ABB" +msgstr "Inserite il PIN per visualizzare il registro chiamate" + +msgid "IDS_LCKSCN_POP_TRY_AGAIN_IN_PD_SECONDS" +msgstr "Riprovate tra %d secondi." + +msgid "IDS_COM_BODY_INCORRECT_PIN" +msgstr "PIN errato." + +msgid "IDS_IDLE_BODY_1_ATTEMPT_LEFT" +msgstr "1 tentativo rimasto." + +msgid "IDS_IDLE_BODY_PD_ATTEMPTS_LEFT" +msgstr "%d tentativi rimasti." + +msgid "IDS_LCKSCN_POP_YOU_HAVE_ATTEMPTED_TO_UNLOCK_THE_DEVICE_INCORRECTLY_P1SD_TIMES_YOU_HAVE_P2SD_ATTEMPTS_LEFT_BEFORE_THE_DEVICE_IS_RESET_TO_FACTORY_MSG" +msgstr "Avete tentato per %1$d volte di sbloccare il dispositivo in modo errato. Sono rimasti %2$d tentativi prima che il dispositivo venga ripristinato ai valori predefiniti di fabbrica e che tutti i dati vengano eliminati." + +msgid "IDS_LCKSCN_POP_YOU_HAVE_MADE_P1SD_UNSUCCESSFUL_ATTEMPTS_TO_UNLOCK_YOUR_DEVICE_TRY_AGAIN_IN_P2SD_SECONDS" +msgstr "Avete effettuato %1$d tentativi errati per sbloccare il dispositivo. Riprovate tra %2$d secondi." + +msgid "IDS_LCKSCN_HEADER_UNABLE_TO_UNLOCK_SCREEN_ABB" +msgstr "Impossibile sbloccare schermo" + +msgid "IDS_COM_BODY_ENTER_PASSWORD" +msgstr "Inserisci password." + +msgid "IDS_LCKSCN_BODY_P1SD_TO_P2SD_DIGITS_OR_LETTERS_REQUIRED" +msgstr "Sono necessarie da %1$d a %2$d cifre o lettere." + +msgid "IDS_IDLE_BODY_INCORRECT_PASSWORD" +msgstr "Password errata." + +msgid "IDS_LCKSCN_BODY_YOU_HAVE_ATTEMPTED_TO_UNLOCK_THE_DEVICE_INCORRECTLY_PD_TIMES_IT_WILL_NOW_BE_RESET_TO_FACTORY_DEFAULTS_AND_ALL_DATA_WILL_BE_ERASED" +msgstr "%d tentativi errati di sblocco del dispositivo. Il dispositivo verrà ripristinato ai valori predefiniti di fabbrica e i dati verranno eliminati." + +msgid "IDS_COM_BUTTON_OK_ABB" +msgstr "OK" + +msgid "IDS_ST_BUTTON_CANCEL" +msgstr "Annulla" + +msgid "IDS_LCKSCN_BODY_EMERGENCY_CALL" +msgstr "Chiamata di emergenza" + diff --git a/po/ka.po b/po/ka.po new file mode 100644 index 0000000..2a7888e --- /dev/null +++ b/po/ka.po @@ -0,0 +1,57 @@ +msgid "IDS_IDLE_POP_UNABLE_TO_LAUNCH_PS" +msgstr "ვერ გაიხსნება %s." + +msgid "IDS_COM_POP_WARNING" +msgstr "გაფრთხილება" + +msgid "IDS_COM_BODY_ENTER_PIN" +msgstr "შეიყვანეთ PIN." + +msgid "IDS_LCKSCN_NPBODY_ENTER_PIN_TO_VIEW_MESSAGE_ABB" +msgstr "შეიყვანეთ PIN, რომ ნახოთ შეტყობინება" + +msgid "IDS_LCKSCN_NPBODY_ENTER_PIN_TO_VIEW_CALL_LOG_ABB" +msgstr "შეიყვანეთ PIN, რომ ნახოთ ზარების ჟურნალი" + +msgid "IDS_LCKSCN_POP_TRY_AGAIN_IN_PD_SECONDS" +msgstr "კიდევ ცადეთ %d წამში." + +msgid "IDS_COM_BODY_INCORRECT_PIN" +msgstr "არასწორი PIN." + +msgid "IDS_IDLE_BODY_1_ATTEMPT_LEFT" +msgstr "დარჩა 1 ცდა." + +msgid "IDS_IDLE_BODY_PD_ATTEMPTS_LEFT" +msgstr "%d ცდა დარჩა." + +msgid "IDS_LCKSCN_POP_YOU_HAVE_ATTEMPTED_TO_UNLOCK_THE_DEVICE_INCORRECTLY_P1SD_TIMES_YOU_HAVE_P2SD_ATTEMPTS_LEFT_BEFORE_THE_DEVICE_IS_RESET_TO_FACTORY_MSG" +msgstr "თქვენ აპარატის განბლოკვის %1$d არასწორი მცდელობა გქონდათ. თქვენ დაგრჩათ %2$d მცდელობა, სანამ დაბრუნდება აპარატის საწყისი ქარხნული პარამეტრები და წაიშლება ყველა მონაცემი." + +msgid "IDS_LCKSCN_POP_YOU_HAVE_MADE_P1SD_UNSUCCESSFUL_ATTEMPTS_TO_UNLOCK_YOUR_DEVICE_TRY_AGAIN_IN_P2SD_SECONDS" +msgstr "თქვენ გქონდათ აპარატის განბლოკვის %1$d წარუმატებელი მცდელობა. ისევ სცადეთ %2$d წამში." + +msgid "IDS_LCKSCN_HEADER_UNABLE_TO_UNLOCK_SCREEN_ABB" +msgstr "ეკრანის განბლოკვა შეუძლებელია" + +msgid "IDS_COM_BODY_ENTER_PASSWORD" +msgstr "პაროლის შეყვანა." + +msgid "IDS_LCKSCN_BODY_P1SD_TO_P2SD_DIGITS_OR_LETTERS_REQUIRED" +msgstr "უნდა იყოს %1$d-%2$d ციფრი ან ასო." + +msgid "IDS_IDLE_BODY_INCORRECT_PASSWORD" +msgstr "პაროლი არასწორია." + +msgid "IDS_LCKSCN_BODY_YOU_HAVE_ATTEMPTED_TO_UNLOCK_THE_DEVICE_INCORRECTLY_PD_TIMES_IT_WILL_NOW_BE_RESET_TO_FACTORY_DEFAULTS_AND_ALL_DATA_WILL_BE_ERASED" +msgstr "თქვენ აპარატის განბლოკვის %d არასწორი მცდელობა გქონდათ. ახლა დაბრუნდება საწყისი ქარხნული პარამეტრები და წაიშლება ყველა მონაცემი" + +msgid "IDS_COM_BUTTON_OK_ABB" +msgstr "OK" + +msgid "IDS_ST_BUTTON_CANCEL" +msgstr "გაუქმება" + +msgid "IDS_LCKSCN_BODY_EMERGENCY_CALL" +msgstr "საგანგებო ზარი" + diff --git a/po/kk.po b/po/kk.po new file mode 100644 index 0000000..246740a --- /dev/null +++ b/po/kk.po @@ -0,0 +1,57 @@ +msgid "IDS_IDLE_POP_UNABLE_TO_LAUNCH_PS" +msgstr "%s іске қосу мүмкін емес." + +msgid "IDS_COM_POP_WARNING" +msgstr "Ескерту" + +msgid "IDS_COM_BODY_ENTER_PIN" +msgstr "PIN енгізу." + +msgid "IDS_LCKSCN_NPBODY_ENTER_PIN_TO_VIEW_MESSAGE_ABB" +msgstr "Хабарды көру үшін, PIN кодын енгізу" + +msgid "IDS_LCKSCN_NPBODY_ENTER_PIN_TO_VIEW_CALL_LOG_ABB" +msgstr "Қоңыраулар журналын көру үшін, PIN кодын енгізу" + +msgid "IDS_LCKSCN_POP_TRY_AGAIN_IN_PD_SECONDS" +msgstr "%d сек кейін қайталаңыз." + +msgid "IDS_COM_BODY_INCORRECT_PIN" +msgstr "Қате PIN." + +msgid "IDS_IDLE_BODY_1_ATTEMPT_LEFT" +msgstr "1 әрекет қалды." + +msgid "IDS_IDLE_BODY_PD_ATTEMPTS_LEFT" +msgstr "%d әрекеттену аяқталды." + +msgid "IDS_LCKSCN_POP_YOU_HAVE_ATTEMPTED_TO_UNLOCK_THE_DEVICE_INCORRECTLY_P1SD_TIMES_YOU_HAVE_P2SD_ATTEMPTS_LEFT_BEFORE_THE_DEVICE_IS_RESET_TO_FACTORY_MSG" +msgstr "Құрылғының құлпын ашуда %1$d рет қателестіңіз. Құрылғының зауыттық параметрлері қалпына келтіріліп, барлық деректердің өшірілуінен бұрын %2$d талпынысыңыз қалды." + +msgid "IDS_LCKSCN_POP_YOU_HAVE_MADE_P1SD_UNSUCCESSFUL_ATTEMPTS_TO_UNLOCK_YOUR_DEVICE_TRY_AGAIN_IN_P2SD_SECONDS" +msgstr "Құрылғы құлпын ашу үшін, %1$d рет сәтсіз әрекет жасалды. Әрекетті %2$d секундтан кейін қайталаңыз." + +msgid "IDS_LCKSCN_HEADER_UNABLE_TO_UNLOCK_SCREEN_ABB" +msgstr "Экран құлпын ашу мүмкін емес" + +msgid "IDS_COM_BODY_ENTER_PASSWORD" +msgstr "Кілтсөз енгізіңіз." + +msgid "IDS_LCKSCN_BODY_P1SD_TO_P2SD_DIGITS_OR_LETTERS_REQUIRED" +msgstr "%1$d-%2$d сан немесе әріп талап етіледі." + +msgid "IDS_IDLE_BODY_INCORRECT_PASSWORD" +msgstr "Қате кілтсөз." + +msgid "IDS_LCKSCN_BODY_YOU_HAVE_ATTEMPTED_TO_UNLOCK_THE_DEVICE_INCORRECTLY_PD_TIMES_IT_WILL_NOW_BE_RESET_TO_FACTORY_DEFAULTS_AND_ALL_DATA_WILL_BE_ERASED" +msgstr "%d рет дұрыс емес құрылғының құлпын ашу әрекетін жасадыңыз. Зауыттық әдепкі параметрлер қалпына келтіріліп, бүкіл деректер өшіріледі" + +msgid "IDS_COM_BUTTON_OK_ABB" +msgstr "OK" + +msgid "IDS_ST_BUTTON_CANCEL" +msgstr "Тоқтату" + +msgid "IDS_LCKSCN_BODY_EMERGENCY_CALL" +msgstr "Шұғыл қоңырау шалу" + diff --git a/po/ko_KR.po b/po/ko_KR.po new file mode 100644 index 0000000..d45618f --- /dev/null +++ b/po/ko_KR.po @@ -0,0 +1,57 @@ +msgid "IDS_IDLE_POP_UNABLE_TO_LAUNCH_PS" +msgstr "%s을(를) 실행할 수 없습니다." + +msgid "IDS_COM_POP_WARNING" +msgstr "경고" + +msgid "IDS_COM_BODY_ENTER_PIN" +msgstr "PIN을 입력하세요." + +msgid "IDS_LCKSCN_NPBODY_ENTER_PIN_TO_VIEW_MESSAGE_ABB" +msgstr "메시지를 보려면 PIN을 입력하세요" + +msgid "IDS_LCKSCN_NPBODY_ENTER_PIN_TO_VIEW_CALL_LOG_ABB" +msgstr "통화기록을 보려면 PIN을 입력하세요" + +msgid "IDS_LCKSCN_POP_TRY_AGAIN_IN_PD_SECONDS" +msgstr "%d초 후에 다시 시도하세요." + +msgid "IDS_COM_BODY_INCORRECT_PIN" +msgstr "잘못된 PIN을 입력하였습니다." + +msgid "IDS_IDLE_BODY_1_ATTEMPT_LEFT" +msgstr "입력 기회가 1회 남았습니다." + +msgid "IDS_IDLE_BODY_PD_ATTEMPTS_LEFT" +msgstr "입력 기회가 %d회 남았습니다." + +msgid "IDS_LCKSCN_POP_YOU_HAVE_ATTEMPTED_TO_UNLOCK_THE_DEVICE_INCORRECTLY_P1SD_TIMES_YOU_HAVE_P2SD_ATTEMPTS_LEFT_BEFORE_THE_DEVICE_IS_RESET_TO_FACTORY_MSG" +msgstr "잠금해제 비밀번호를 %1$d회 잘못 입력하였습니다. 디바이스 설정 및 데이터가 기본 설정으로 초기화되기까지 비밀번호를 %2$d회 입력할 수 있습니다." + +msgid "IDS_LCKSCN_POP_YOU_HAVE_MADE_P1SD_UNSUCCESSFUL_ATTEMPTS_TO_UNLOCK_YOUR_DEVICE_TRY_AGAIN_IN_P2SD_SECONDS" +msgstr "잠금해제를 %1$d회 잘못 입력하였습니다. %2$d초 후에 다시 시도하세요." + +msgid "IDS_LCKSCN_HEADER_UNABLE_TO_UNLOCK_SCREEN_ABB" +msgstr "화면 잠금을 해제할 수 없음" + +msgid "IDS_COM_BODY_ENTER_PASSWORD" +msgstr "비밀번호를 입력하세요." + +msgid "IDS_LCKSCN_BODY_P1SD_TO_P2SD_DIGITS_OR_LETTERS_REQUIRED" +msgstr "%1$d-%2$d자의 숫자 또는 문자를 입력하세요." + +msgid "IDS_IDLE_BODY_INCORRECT_PASSWORD" +msgstr "잘못된 비밀번호를 입력하였습니다." + +msgid "IDS_LCKSCN_BODY_YOU_HAVE_ATTEMPTED_TO_UNLOCK_THE_DEVICE_INCORRECTLY_PD_TIMES_IT_WILL_NOW_BE_RESET_TO_FACTORY_DEFAULTS_AND_ALL_DATA_WILL_BE_ERASED" +msgstr "잠금해제 비밀번호를 %d회 잘못 입력하였습니다. 디바이스 설정을 기본 설정으로 초기화하고 모든 데이터를 삭제합니다." + +msgid "IDS_COM_BUTTON_OK_ABB" +msgstr "확인" + +msgid "IDS_ST_BUTTON_CANCEL" +msgstr "취소" + +msgid "IDS_LCKSCN_BODY_EMERGENCY_CALL" +msgstr "긴급전화" + diff --git a/po/lt.po b/po/lt.po new file mode 100644 index 0000000..9b2dc46 --- /dev/null +++ b/po/lt.po @@ -0,0 +1,57 @@ +msgid "IDS_IDLE_POP_UNABLE_TO_LAUNCH_PS" +msgstr "Negalima paleisti %s." + +msgid "IDS_COM_POP_WARNING" +msgstr "Perspėjimas" + +msgid "IDS_COM_BODY_ENTER_PIN" +msgstr "Įvesti PIN kodą." + +msgid "IDS_LCKSCN_NPBODY_ENTER_PIN_TO_VIEW_MESSAGE_ABB" +msgstr "Įveskite PIN žinutės peržiūrai" + +msgid "IDS_LCKSCN_NPBODY_ENTER_PIN_TO_VIEW_CALL_LOG_ABB" +msgstr "Įveskite PIN skambučių žurnalo peržiūrai" + +msgid "IDS_LCKSCN_POP_TRY_AGAIN_IN_PD_SECONDS" +msgstr "Bandykite dar po %d sek." + +msgid "IDS_COM_BODY_INCORRECT_PIN" +msgstr "Netinkamas PIN kodas." + +msgid "IDS_IDLE_BODY_1_ATTEMPT_LEFT" +msgstr "Liko 1 bandymas." + +msgid "IDS_IDLE_BODY_PD_ATTEMPTS_LEFT" +msgstr "%d likę bandymai." + +msgid "IDS_LCKSCN_POP_YOU_HAVE_ATTEMPTED_TO_UNLOCK_THE_DEVICE_INCORRECTLY_P1SD_TIMES_YOU_HAVE_P2SD_ATTEMPTS_LEFT_BEFORE_THE_DEVICE_IS_RESET_TO_FACTORY_MSG" +msgstr "Neteisingai bandėte atrakinti įrenginį %1$d kartus (-ų). Prieš grąžinant įrenginio gamyklinius numatytuosius nustatymus ir ištrinant visus duomenis, turėsite %2$d bandymus (-ų)." + +msgid "IDS_LCKSCN_POP_YOU_HAVE_MADE_P1SD_UNSUCCESSFUL_ATTEMPTS_TO_UNLOCK_YOUR_DEVICE_TRY_AGAIN_IN_P2SD_SECONDS" +msgstr "Jūs %1$d k. nesėkmingai bandėte atrakinti įrenginį. Bandykite dar kartą po %2$d sek." + +msgid "IDS_LCKSCN_HEADER_UNABLE_TO_UNLOCK_SCREEN_ABB" +msgstr "Neįmanoma atrakinti ekrano" + +msgid "IDS_COM_BODY_ENTER_PASSWORD" +msgstr "Įvesti slaptažodį." + +msgid "IDS_LCKSCN_BODY_P1SD_TO_P2SD_DIGITS_OR_LETTERS_REQUIRED" +msgstr "Reikia nurodyti %1$d–%2$d skaitmenis (-ų) ar raides (-ių)." + +msgid "IDS_IDLE_BODY_INCORRECT_PASSWORD" +msgstr "Neteisingas slaptažodis." + +msgid "IDS_LCKSCN_BODY_YOU_HAVE_ATTEMPTED_TO_UNLOCK_THE_DEVICE_INCORRECTLY_PD_TIMES_IT_WILL_NOW_BE_RESET_TO_FACTORY_DEFAULTS_AND_ALL_DATA_WILL_BE_ERASED" +msgstr "Neteisingai bandėte atrakinti įrenginį %d kartus (-ų). Dabar bus iš naujo nustatyti gamykliniai numatytieji nustatymai ir ištrinti visi duomenys." + +msgid "IDS_COM_BUTTON_OK_ABB" +msgstr "Gerai" + +msgid "IDS_ST_BUTTON_CANCEL" +msgstr "Atšaukti" + +msgid "IDS_LCKSCN_BODY_EMERGENCY_CALL" +msgstr "Pagalbos skambučiai" + diff --git a/po/lv.po b/po/lv.po new file mode 100644 index 0000000..2c4e8eb --- /dev/null +++ b/po/lv.po @@ -0,0 +1,57 @@ +msgid "IDS_IDLE_POP_UNABLE_TO_LAUNCH_PS" +msgstr "Nevar palaist %s." + +msgid "IDS_COM_POP_WARNING" +msgstr "Brīdinājums" + +msgid "IDS_COM_BODY_ENTER_PIN" +msgstr "Ievadiet PIN kodu." + +msgid "IDS_LCKSCN_NPBODY_ENTER_PIN_TO_VIEW_MESSAGE_ABB" +msgstr "Ievadiet PIN kodu, lai skatītu ziņu" + +msgid "IDS_LCKSCN_NPBODY_ENTER_PIN_TO_VIEW_CALL_LOG_ABB" +msgstr "Ievadiet PIN kodu, lai skatītu zvanu žurnālu" + +msgid "IDS_LCKSCN_POP_TRY_AGAIN_IN_PD_SECONDS" +msgstr "Mēģiniet vēlr.pēc %d sek." + +msgid "IDS_COM_BODY_INCORRECT_PIN" +msgstr "Nepareizs PIN." + +msgid "IDS_IDLE_BODY_1_ATTEMPT_LEFT" +msgstr "Atlicis 1 mēģinājums." + +msgid "IDS_IDLE_BODY_PD_ATTEMPTS_LEFT" +msgstr "Atlikuši %d mēģinājumi." + +msgid "IDS_LCKSCN_POP_YOU_HAVE_ATTEMPTED_TO_UNLOCK_THE_DEVICE_INCORRECTLY_P1SD_TIMES_YOU_HAVE_P2SD_ATTEMPTS_LEFT_BEFORE_THE_DEVICE_IS_RESET_TO_FACTORY_MSG" +msgstr "Jūs %1$d reizes nepareizi mēģinājāt atbloķēt ierīci. Jums ir atlikuši %2$d mēģinājumi, pirms ierīcē tiks atjaunoti rūpnīcas noklusējuma iestatījumi un visi dati tiks izdzēsti." + +msgid "IDS_LCKSCN_POP_YOU_HAVE_MADE_P1SD_UNSUCCESSFUL_ATTEMPTS_TO_UNLOCK_YOUR_DEVICE_TRY_AGAIN_IN_P2SD_SECONDS" +msgstr "Jūs esat veicis %1$d neveiksmīgus ierīces atbloķēšanas mēģinājumus. Mēģiniet vēlreiz pēc %2$d sekundēm." + +msgid "IDS_LCKSCN_HEADER_UNABLE_TO_UNLOCK_SCREEN_ABB" +msgstr "Nevar atbloķēt ekrānu" + +msgid "IDS_COM_BODY_ENTER_PASSWORD" +msgstr "Ievadiet paroli." + +msgid "IDS_LCKSCN_BODY_P1SD_TO_P2SD_DIGITS_OR_LETTERS_REQUIRED" +msgstr "Nepieciešams ievadīt no %1$d līdz %2$d cipariem vai burtiem." + +msgid "IDS_IDLE_BODY_INCORRECT_PASSWORD" +msgstr "Nepareiza parole." + +msgid "IDS_LCKSCN_BODY_YOU_HAVE_ATTEMPTED_TO_UNLOCK_THE_DEVICE_INCORRECTLY_PD_TIMES_IT_WILL_NOW_BE_RESET_TO_FACTORY_DEFAULTS_AND_ALL_DATA_WILL_BE_ERASED" +msgstr "Jūs %d reizes neveiksmīgi mēģinājāt atbloķēt ierīci. Tagad tajā tiks atjaunoti rūpnīcas iestatījumi un visi dati tiks izdzēsti." + +msgid "IDS_COM_BUTTON_OK_ABB" +msgstr "Labi" + +msgid "IDS_ST_BUTTON_CANCEL" +msgstr "Atcelt" + +msgid "IDS_LCKSCN_BODY_EMERGENCY_CALL" +msgstr "Ārkārtas zvans" + diff --git a/po/mn_MN.po b/po/mn_MN.po new file mode 100644 index 0000000..05ed489 --- /dev/null +++ b/po/mn_MN.po @@ -0,0 +1,57 @@ +msgid "IDS_IDLE_POP_UNABLE_TO_LAUNCH_PS" +msgstr "Unable to launch %s." + +msgid "IDS_COM_POP_WARNING" +msgstr "Анхааруулга" + +msgid "IDS_COM_BODY_ENTER_PIN" +msgstr "PIN код оруулах" + +msgid "IDS_LCKSCN_NPBODY_ENTER_PIN_TO_VIEW_MESSAGE_ABB" +msgstr "PIN оруулж зурвас үз" + +msgid "IDS_LCKSCN_NPBODY_ENTER_PIN_TO_VIEW_CALL_LOG_ABB" +msgstr "PIN оруулж дуудлагын бүртгэл үз" + +msgid "IDS_LCKSCN_POP_TRY_AGAIN_IN_PD_SECONDS" +msgstr "%d сек дараа дахин оролд" + +msgid "IDS_COM_BODY_INCORRECT_PIN" +msgstr "Буруу PIN код" + +msgid "IDS_IDLE_BODY_1_ATTEMPT_LEFT" +msgstr "1 оролдлого үлдсэн." + +msgid "IDS_IDLE_BODY_PD_ATTEMPTS_LEFT" +msgstr "%d оролдлого үлдсэн." + +msgid "IDS_LCKSCN_POP_YOU_HAVE_ATTEMPTED_TO_UNLOCK_THE_DEVICE_INCORRECTLY_P1SD_TIMES_YOU_HAVE_P2SD_ATTEMPTS_LEFT_BEFORE_THE_DEVICE_IS_RESET_TO_FACTORY_MSG" +msgstr "Та төхөөрөмжийг нээх гэж %1$d удаа буруу оролдсон. Төхөөрөмж үйлдвэрийн өгөгдмөл тохиргоо руугаа буцан орж, бүх өгөгдөл арилах хүртэл %2$d удаа оролдох боломж үлдсэн." + +msgid "IDS_LCKSCN_POP_YOU_HAVE_MADE_P1SD_UNSUCCESSFUL_ATTEMPTS_TO_UNLOCK_YOUR_DEVICE_TRY_AGAIN_IN_P2SD_SECONDS" +msgstr "Та төхөөрөмжөө нээх гэж %1$d удаа амжилтгүй оролдсон. %2$d секундын дараа дахин оролд." + +msgid "IDS_LCKSCN_HEADER_UNABLE_TO_UNLOCK_SCREEN_ABB" +msgstr "Дэлгэц нээх боломжгүй" + +msgid "IDS_COM_BODY_ENTER_PASSWORD" +msgstr "Нууц үг оруулах" + +msgid "IDS_LCKSCN_BODY_P1SD_TO_P2SD_DIGITS_OR_LETTERS_REQUIRED" +msgstr "%1$d to %2$d digits or letters required." + +msgid "IDS_IDLE_BODY_INCORRECT_PASSWORD" +msgstr "Буруу нууц үг" + +msgid "IDS_LCKSCN_BODY_YOU_HAVE_ATTEMPTED_TO_UNLOCK_THE_DEVICE_INCORRECTLY_PD_TIMES_IT_WILL_NOW_BE_RESET_TO_FACTORY_DEFAULTS_AND_ALL_DATA_WILL_BE_ERASED" +msgstr "Та төхөөрөмжийг нээх гэж %d удаа буруу оролдсон. Энэ одоо үйлдвэрийн өгөгдмөл тохиргоо руугаа буцаж орох бөгөөд бүх өгөгдөл арилна" + +msgid "IDS_COM_BUTTON_OK_ABB" +msgstr "OK" + +msgid "IDS_ST_BUTTON_CANCEL" +msgstr "Цуцлах" + +msgid "IDS_LCKSCN_BODY_EMERGENCY_CALL" +msgstr "Яаралтай тусламжийн дуудлага" + diff --git a/po/nb.po b/po/nb.po new file mode 100644 index 0000000..440a9cd --- /dev/null +++ b/po/nb.po @@ -0,0 +1,57 @@ +msgid "IDS_IDLE_POP_UNABLE_TO_LAUNCH_PS" +msgstr "Kan ikke starte %s." + +msgid "IDS_COM_POP_WARNING" +msgstr "Advarsel" + +msgid "IDS_COM_BODY_ENTER_PIN" +msgstr "Angi PIN." + +msgid "IDS_LCKSCN_NPBODY_ENTER_PIN_TO_VIEW_MESSAGE_ABB" +msgstr "Angi PIN-kode for å vise melding" + +msgid "IDS_LCKSCN_NPBODY_ENTER_PIN_TO_VIEW_CALL_LOG_ABB" +msgstr "Angi PIN-kode for å vise samtalelogg" + +msgid "IDS_LCKSCN_POP_TRY_AGAIN_IN_PD_SECONDS" +msgstr "Prøv på nytt om %d sek." + +msgid "IDS_COM_BODY_INCORRECT_PIN" +msgstr "Ugyldig PIN." + +msgid "IDS_IDLE_BODY_1_ATTEMPT_LEFT" +msgstr "1 forsøk gjenstår." + +msgid "IDS_IDLE_BODY_PD_ATTEMPTS_LEFT" +msgstr "%d forsøk igjen." + +msgid "IDS_LCKSCN_POP_YOU_HAVE_ATTEMPTED_TO_UNLOCK_THE_DEVICE_INCORRECTLY_P1SD_TIMES_YOU_HAVE_P2SD_ATTEMPTS_LEFT_BEFORE_THE_DEVICE_IS_RESET_TO_FACTORY_MSG" +msgstr "Du har prøvd å låse opp enheten på feil måte %1$d ganger. Du har %2$d forsøk igjen før enheten tilbakestilles til fabrikkstandarder og alle data slettes." + +msgid "IDS_LCKSCN_POP_YOU_HAVE_MADE_P1SD_UNSUCCESSFUL_ATTEMPTS_TO_UNLOCK_YOUR_DEVICE_TRY_AGAIN_IN_P2SD_SECONDS" +msgstr "Du har gjort %1$d feil forsøk på å låse opp enheten. Prøv på nytt om %2$d sekunder." + +msgid "IDS_LCKSCN_HEADER_UNABLE_TO_UNLOCK_SCREEN_ABB" +msgstr "Kan ikke låse opp skjermen" + +msgid "IDS_COM_BODY_ENTER_PASSWORD" +msgstr "Angi passord." + +msgid "IDS_LCKSCN_BODY_P1SD_TO_P2SD_DIGITS_OR_LETTERS_REQUIRED" +msgstr "%1$d til %2$d sifre eller bokstaver nødvendige." + +msgid "IDS_IDLE_BODY_INCORRECT_PASSWORD" +msgstr "Feil passord." + +msgid "IDS_LCKSCN_BODY_YOU_HAVE_ATTEMPTED_TO_UNLOCK_THE_DEVICE_INCORRECTLY_PD_TIMES_IT_WILL_NOW_BE_RESET_TO_FACTORY_DEFAULTS_AND_ALL_DATA_WILL_BE_ERASED" +msgstr "Du har prøvd å låse opp enheten på feil måte %d ganger. Den vil nå bli tilbakestilt til fabrikkstandardene og alle data vil bli slettet." + +msgid "IDS_COM_BUTTON_OK_ABB" +msgstr "OK" + +msgid "IDS_ST_BUTTON_CANCEL" +msgstr "Avbryt" + +msgid "IDS_LCKSCN_BODY_EMERGENCY_CALL" +msgstr "Nødanrop" + diff --git a/po/nl.po b/po/nl.po new file mode 100644 index 0000000..b627760 --- /dev/null +++ b/po/nl.po @@ -0,0 +1,57 @@ +msgid "IDS_IDLE_POP_UNABLE_TO_LAUNCH_PS" +msgstr "Kan %s niet starten." + +msgid "IDS_COM_POP_WARNING" +msgstr "Waarschuwing" + +msgid "IDS_COM_BODY_ENTER_PIN" +msgstr "PIN invoeren" + +msgid "IDS_LCKSCN_NPBODY_ENTER_PIN_TO_VIEW_MESSAGE_ABB" +msgstr "Pincode invoeren voor weergave bericht" + +msgid "IDS_LCKSCN_NPBODY_ENTER_PIN_TO_VIEW_CALL_LOG_ABB" +msgstr "Pincode invoeren voor weergave oproepenlijst" + +msgid "IDS_LCKSCN_POP_TRY_AGAIN_IN_PD_SECONDS" +msgstr "Probeer opn. over %d sec." + +msgid "IDS_COM_BODY_INCORRECT_PIN" +msgstr "Onjuiste PIN." + +msgid "IDS_IDLE_BODY_1_ATTEMPT_LEFT" +msgstr "1 poging over." + +msgid "IDS_IDLE_BODY_PD_ATTEMPTS_LEFT" +msgstr "%d pogingen over." + +msgid "IDS_LCKSCN_POP_YOU_HAVE_ATTEMPTED_TO_UNLOCK_THE_DEVICE_INCORRECTLY_P1SD_TIMES_YOU_HAVE_P2SD_ATTEMPTS_LEFT_BEFORE_THE_DEVICE_IS_RESET_TO_FACTORY_MSG" +msgstr "U hebt %1$d keer een onjuiste poging gedaan om het apparaat te ontgrendelen. U hebt nog %2$d pogingen over voordat het apparaat wordt teruggezet op de fabrieksinstellingen en alle gegevens worden gewist." + +msgid "IDS_LCKSCN_POP_YOU_HAVE_MADE_P1SD_UNSUCCESSFUL_ATTEMPTS_TO_UNLOCK_YOUR_DEVICE_TRY_AGAIN_IN_P2SD_SECONDS" +msgstr "U hebt %1$d mislukte pogingen gedaan om uw apparaat te ontgrendelen. Probeer het opnieuw over %2$d seconden." + +msgid "IDS_LCKSCN_HEADER_UNABLE_TO_UNLOCK_SCREEN_ABB" +msgstr "Kan scherm niet ontgrendelen" + +msgid "IDS_COM_BODY_ENTER_PASSWORD" +msgstr "Wachtwoord invoeren" + +msgid "IDS_LCKSCN_BODY_P1SD_TO_P2SD_DIGITS_OR_LETTERS_REQUIRED" +msgstr "%1$d tot %2$d cijfers of letters vereist." + +msgid "IDS_IDLE_BODY_INCORRECT_PASSWORD" +msgstr "Onjuist wachtwoord." + +msgid "IDS_LCKSCN_BODY_YOU_HAVE_ATTEMPTED_TO_UNLOCK_THE_DEVICE_INCORRECTLY_PD_TIMES_IT_WILL_NOW_BE_RESET_TO_FACTORY_DEFAULTS_AND_ALL_DATA_WILL_BE_ERASED" +msgstr "U hebt %d keer een onjuiste poging gedaan om het apparaat te ontgrendelen. Het wordt nu teruggezet op de fabrieksinstellingen en alle gegevens worden gewist." + +msgid "IDS_COM_BUTTON_OK_ABB" +msgstr "OK" + +msgid "IDS_ST_BUTTON_CANCEL" +msgstr "Annuleer" + +msgid "IDS_LCKSCN_BODY_EMERGENCY_CALL" +msgstr "Noodoproep" + diff --git a/po/pl.po b/po/pl.po new file mode 100644 index 0000000..c7515a4 --- /dev/null +++ b/po/pl.po @@ -0,0 +1,57 @@ +msgid "IDS_IDLE_POP_UNABLE_TO_LAUNCH_PS" +msgstr "Nie można uruchomić %s." + +msgid "IDS_COM_POP_WARNING" +msgstr "Ostrzeżenie" + +msgid "IDS_COM_BODY_ENTER_PIN" +msgstr "Wpisz PIN." + +msgid "IDS_LCKSCN_NPBODY_ENTER_PIN_TO_VIEW_MESSAGE_ABB" +msgstr "Podaj kod PIN, aby wyświetlić wiadomość" + +msgid "IDS_LCKSCN_NPBODY_ENTER_PIN_TO_VIEW_CALL_LOG_ABB" +msgstr "Podaj kod PIN, aby wyświetlić spis połączeń" + +msgid "IDS_LCKSCN_POP_TRY_AGAIN_IN_PD_SECONDS" +msgstr "Ponów próbę za %d sek." + +msgid "IDS_COM_BODY_INCORRECT_PIN" +msgstr "Nieprawidłowy PIN." + +msgid "IDS_IDLE_BODY_1_ATTEMPT_LEFT" +msgstr "Pozostała 1 próba." + +msgid "IDS_IDLE_BODY_PD_ATTEMPTS_LEFT" +msgstr "Pozostało prób: %d." + +msgid "IDS_LCKSCN_POP_YOU_HAVE_ATTEMPTED_TO_UNLOCK_THE_DEVICE_INCORRECTLY_P1SD_TIMES_YOU_HAVE_P2SD_ATTEMPTS_LEFT_BEFORE_THE_DEVICE_IS_RESET_TO_FACTORY_MSG" +msgstr "Nieprawidłowych prób odblokowania urządzenia: %1$d. Pozostałych prób przed wyzerowaniem urządzenia do domyślnych ustawień fabrycznych i usunięciem wszystkich danych: %2$d." + +msgid "IDS_LCKSCN_POP_YOU_HAVE_MADE_P1SD_UNSUCCESSFUL_ATTEMPTS_TO_UNLOCK_YOUR_DEVICE_TRY_AGAIN_IN_P2SD_SECONDS" +msgstr "Liczba nieudanych prób odblokowania urządzenia: %1$d. Spróbuj ponownie za %2$d s." + +msgid "IDS_LCKSCN_HEADER_UNABLE_TO_UNLOCK_SCREEN_ABB" +msgstr "Nie można odblokować ekranu" + +msgid "IDS_COM_BODY_ENTER_PASSWORD" +msgstr "Wpisz hasło." + +msgid "IDS_LCKSCN_BODY_P1SD_TO_P2SD_DIGITS_OR_LETTERS_REQUIRED" +msgstr "Wymaganych jest co najmniej cyfr lub liter: %1$d do %2$d." + +msgid "IDS_IDLE_BODY_INCORRECT_PASSWORD" +msgstr "Błędne hasło." + +msgid "IDS_LCKSCN_BODY_YOU_HAVE_ATTEMPTED_TO_UNLOCK_THE_DEVICE_INCORRECTLY_PD_TIMES_IT_WILL_NOW_BE_RESET_TO_FACTORY_DEFAULTS_AND_ALL_DATA_WILL_BE_ERASED" +msgstr "Podjęto nieprawidłową próbę odblokowania urządzenia %d razy. W urządzeniu zostaną przywrócone domyślne ustawienia fabryczne oraz zostaną z niego usunięte wszystkie dane." + +msgid "IDS_COM_BUTTON_OK_ABB" +msgstr "OK" + +msgid "IDS_ST_BUTTON_CANCEL" +msgstr "Anuluj" + +msgid "IDS_LCKSCN_BODY_EMERGENCY_CALL" +msgstr "Połączenie alarmowe" + diff --git a/po/pt_BR.po b/po/pt_BR.po new file mode 100644 index 0000000..ae67d43 --- /dev/null +++ b/po/pt_BR.po @@ -0,0 +1,57 @@ +msgid "IDS_IDLE_POP_UNABLE_TO_LAUNCH_PS" +msgstr "Impossível iniciar %s." + +msgid "IDS_COM_POP_WARNING" +msgstr "Aviso" + +msgid "IDS_COM_BODY_ENTER_PIN" +msgstr "Insira o PIN." + +msgid "IDS_LCKSCN_NPBODY_ENTER_PIN_TO_VIEW_MESSAGE_ABB" +msgstr "Insira o PIN para visualizar a mensagem" + +msgid "IDS_LCKSCN_NPBODY_ENTER_PIN_TO_VIEW_CALL_LOG_ABB" +msgstr "Insira o PIN para visualizar o registro de chamadas" + +msgid "IDS_LCKSCN_POP_TRY_AGAIN_IN_PD_SECONDS" +msgstr "Tente nov. dentro %d seg." + +msgid "IDS_COM_BODY_INCORRECT_PIN" +msgstr "PIN incorreto." + +msgid "IDS_IDLE_BODY_1_ATTEMPT_LEFT" +msgstr "Resta 1 tentativa." + +msgid "IDS_IDLE_BODY_PD_ATTEMPTS_LEFT" +msgstr "Restam %d tentativas." + +msgid "IDS_LCKSCN_POP_YOU_HAVE_ATTEMPTED_TO_UNLOCK_THE_DEVICE_INCORRECTLY_P1SD_TIMES_YOU_HAVE_P2SD_ATTEMPTS_LEFT_BEFORE_THE_DEVICE_IS_RESET_TO_FACTORY_MSG" +msgstr "Você tentou desbloquear o dispositivo incorretamente %1$d vezes. Você tem %2$d tentativas restantes antes do dispositivo ser redefinido para os padrões de fábrica e todos os dados serem apagados." + +msgid "IDS_LCKSCN_POP_YOU_HAVE_MADE_P1SD_UNSUCCESSFUL_ATTEMPTS_TO_UNLOCK_YOUR_DEVICE_TRY_AGAIN_IN_P2SD_SECONDS" +msgstr "Você fez %1$d tentativas sem sucesso para desbloquear seu dispositivo. Tente novamente em %2$d segundos." + +msgid "IDS_LCKSCN_HEADER_UNABLE_TO_UNLOCK_SCREEN_ABB" +msgstr "Impossível desbloquear a tela" + +msgid "IDS_COM_BODY_ENTER_PASSWORD" +msgstr "Insira senha." + +msgid "IDS_LCKSCN_BODY_P1SD_TO_P2SD_DIGITS_OR_LETTERS_REQUIRED" +msgstr "São necessários de %1$d a %2$d dígitos ou letras." + +msgid "IDS_IDLE_BODY_INCORRECT_PASSWORD" +msgstr "Senha incorreta." + +msgid "IDS_LCKSCN_BODY_YOU_HAVE_ATTEMPTED_TO_UNLOCK_THE_DEVICE_INCORRECTLY_PD_TIMES_IT_WILL_NOW_BE_RESET_TO_FACTORY_DEFAULTS_AND_ALL_DATA_WILL_BE_ERASED" +msgstr "Você tentou desbloquear o dispositivo incorretamente %d vezes. Ele será redefinido agora para os padrões de fábrica e todos os dados serão apagados." + +msgid "IDS_COM_BUTTON_OK_ABB" +msgstr "OK" + +msgid "IDS_ST_BUTTON_CANCEL" +msgstr "Cancelar" + +msgid "IDS_LCKSCN_BODY_EMERGENCY_CALL" +msgstr "Chamada de emergência" + diff --git a/po/pt_PT.po b/po/pt_PT.po new file mode 100644 index 0000000..b49a15b --- /dev/null +++ b/po/pt_PT.po @@ -0,0 +1,57 @@ +msgid "IDS_IDLE_POP_UNABLE_TO_LAUNCH_PS" +msgstr "Impossível iniciar %s." + +msgid "IDS_COM_POP_WARNING" +msgstr "Aviso" + +msgid "IDS_COM_BODY_ENTER_PIN" +msgstr "Introduzir PIN." + +msgid "IDS_LCKSCN_NPBODY_ENTER_PIN_TO_VIEW_MESSAGE_ABB" +msgstr "Introduza PIN para ver mensagem" + +msgid "IDS_LCKSCN_NPBODY_ENTER_PIN_TO_VIEW_CALL_LOG_ABB" +msgstr "Introduza PIN para ver registo de chamadas" + +msgid "IDS_LCKSCN_POP_TRY_AGAIN_IN_PD_SECONDS" +msgstr "Tente nov. dentro %d seg." + +msgid "IDS_COM_BODY_INCORRECT_PIN" +msgstr "PIN incorrecto." + +msgid "IDS_IDLE_BODY_1_ATTEMPT_LEFT" +msgstr "Resta 1 tentativa." + +msgid "IDS_IDLE_BODY_PD_ATTEMPTS_LEFT" +msgstr "%d tentativas restantes." + +msgid "IDS_LCKSCN_POP_YOU_HAVE_ATTEMPTED_TO_UNLOCK_THE_DEVICE_INCORRECTLY_P1SD_TIMES_YOU_HAVE_P2SD_ATTEMPTS_LEFT_BEFORE_THE_DEVICE_IS_RESET_TO_FACTORY_MSG" +msgstr "Tentou desbloquear o dispositivo incorrectamente %1$d vezes. Tem %2$d tentativas até serem repostos no dispositivo os valores de fábrica e todos os dados serem apagados." + +msgid "IDS_LCKSCN_POP_YOU_HAVE_MADE_P1SD_UNSUCCESSFUL_ATTEMPTS_TO_UNLOCK_YOUR_DEVICE_TRY_AGAIN_IN_P2SD_SECONDS" +msgstr "Fez %1$d tentativas mal sucedidas de desbloquear o seu dispositivo. Tente de novo daqui a %2$d segundos." + +msgid "IDS_LCKSCN_HEADER_UNABLE_TO_UNLOCK_SCREEN_ABB" +msgstr "Impossível desbloquear ecrã" + +msgid "IDS_COM_BODY_ENTER_PASSWORD" +msgstr "Introduzir palavra-passe." + +msgid "IDS_LCKSCN_BODY_P1SD_TO_P2SD_DIGITS_OR_LETTERS_REQUIRED" +msgstr "São necessários %1$d a %2$d dígitos ou letras." + +msgid "IDS_IDLE_BODY_INCORRECT_PASSWORD" +msgstr "Palavra-passe incorrecta." + +msgid "IDS_LCKSCN_BODY_YOU_HAVE_ATTEMPTED_TO_UNLOCK_THE_DEVICE_INCORRECTLY_PD_TIMES_IT_WILL_NOW_BE_RESET_TO_FACTORY_DEFAULTS_AND_ALL_DATA_WILL_BE_ERASED" +msgstr "Tentou desbloquear o dispositivo incorrectamente %d vezes. Este vai ser reposto para as predefinições de fábrica e todos os dados serão apagados." + +msgid "IDS_COM_BUTTON_OK_ABB" +msgstr "OK" + +msgid "IDS_ST_BUTTON_CANCEL" +msgstr "Cancelar" + +msgid "IDS_LCKSCN_BODY_EMERGENCY_CALL" +msgstr "Chamada de emergência" + diff --git a/po/ro.po b/po/ro.po new file mode 100644 index 0000000..e809592 --- /dev/null +++ b/po/ro.po @@ -0,0 +1,57 @@ +msgid "IDS_IDLE_POP_UNABLE_TO_LAUNCH_PS" +msgstr "Imposibil de lansat %s" + +msgid "IDS_COM_POP_WARNING" +msgstr "Avertisment" + +msgid "IDS_COM_BODY_ENTER_PIN" +msgstr "Introduceţi PIN." + +msgid "IDS_LCKSCN_NPBODY_ENTER_PIN_TO_VIEW_MESSAGE_ABB" +msgstr "Introduceţi codul PIN pentru a vizualiza mesajul" + +msgid "IDS_LCKSCN_NPBODY_ENTER_PIN_TO_VIEW_CALL_LOG_ABB" +msgstr "Introduceţi codul PIN pentru a vizualiza jurnalul de apeluri" + +msgid "IDS_LCKSCN_POP_TRY_AGAIN_IN_PD_SECONDS" +msgstr "Reîncercaţi peste %d sec." + +msgid "IDS_COM_BODY_INCORRECT_PIN" +msgstr "PIN incorect" + +msgid "IDS_IDLE_BODY_1_ATTEMPT_LEFT" +msgstr "1 încercare rămasă" + +msgid "IDS_IDLE_BODY_PD_ATTEMPTS_LEFT" +msgstr "%d încercări rămase" + +msgid "IDS_LCKSCN_POP_YOU_HAVE_ATTEMPTED_TO_UNLOCK_THE_DEVICE_INCORRECTLY_P1SD_TIMES_YOU_HAVE_P2SD_ATTEMPTS_LEFT_BEFORE_THE_DEVICE_IS_RESET_TO_FACTORY_MSG" +msgstr "Aţi încercat să deblocaţi incorect dispozitivul de %1$d ori. Mai aveţi %2$d încercări înainte ca dispozitivul să fie resetat la valorile implicite din fabrică şi înainte ca toate datele să fie şterse." + +msgid "IDS_LCKSCN_POP_YOU_HAVE_MADE_P1SD_UNSUCCESSFUL_ATTEMPTS_TO_UNLOCK_YOUR_DEVICE_TRY_AGAIN_IN_P2SD_SECONDS" +msgstr "Aţi avut %1$d încercări nereuşite de a debloca dispozitivul. Reîncercaţi peste %2$d secunde." + +msgid "IDS_LCKSCN_HEADER_UNABLE_TO_UNLOCK_SCREEN_ABB" +msgstr "Ecranul nu se poate debloca" + +msgid "IDS_COM_BODY_ENTER_PASSWORD" +msgstr "Introduceţi parola." + +msgid "IDS_LCKSCN_BODY_P1SD_TO_P2SD_DIGITS_OR_LETTERS_REQUIRED" +msgstr "Sunt necesare între %1$d şi %2$d cifre sau litere." + +msgid "IDS_IDLE_BODY_INCORRECT_PASSWORD" +msgstr "Parolă incorectă" + +msgid "IDS_LCKSCN_BODY_YOU_HAVE_ATTEMPTED_TO_UNLOCK_THE_DEVICE_INCORRECTLY_PD_TIMES_IT_WILL_NOW_BE_RESET_TO_FACTORY_DEFAULTS_AND_ALL_DATA_WILL_BE_ERASED" +msgstr "Aţi încercat să deblocaţi incorect dispozitivul de %d ori. Acesta va fi resetat acum la valorile implicite din fabrică şi toate datele vor fi şterse." + +msgid "IDS_COM_BUTTON_OK_ABB" +msgstr "OK" + +msgid "IDS_ST_BUTTON_CANCEL" +msgstr "Anulare" + +msgid "IDS_LCKSCN_BODY_EMERGENCY_CALL" +msgstr "Apel de urgenţă" + diff --git a/po/ru_RU.po b/po/ru_RU.po new file mode 100644 index 0000000..21a79ae --- /dev/null +++ b/po/ru_RU.po @@ -0,0 +1,57 @@ +msgid "IDS_IDLE_POP_UNABLE_TO_LAUNCH_PS" +msgstr "Невозможно запустить %s." + +msgid "IDS_COM_POP_WARNING" +msgstr "Предупреждение" + +msgid "IDS_COM_BODY_ENTER_PIN" +msgstr "Введите PIN." + +msgid "IDS_LCKSCN_NPBODY_ENTER_PIN_TO_VIEW_MESSAGE_ABB" +msgstr "Введите PIN-код, чтобы просмотреть сообщение" + +msgid "IDS_LCKSCN_NPBODY_ENTER_PIN_TO_VIEW_CALL_LOG_ABB" +msgstr "Введите PIN-код, чтобы просмотреть журнал вызовов" + +msgid "IDS_LCKSCN_POP_TRY_AGAIN_IN_PD_SECONDS" +msgstr "Повторите через %d сек." + +msgid "IDS_COM_BODY_INCORRECT_PIN" +msgstr "Неверный PIN" + +msgid "IDS_IDLE_BODY_1_ATTEMPT_LEFT" +msgstr "Осталась 1 попытка." + +msgid "IDS_IDLE_BODY_PD_ATTEMPTS_LEFT" +msgstr "Осталось попыток: %d." + +msgid "IDS_LCKSCN_POP_YOU_HAVE_ATTEMPTED_TO_UNLOCK_THE_DEVICE_INCORRECTLY_P1SD_TIMES_YOU_HAVE_P2SD_ATTEMPTS_LEFT_BEFORE_THE_DEVICE_IS_RESET_TO_FACTORY_MSG" +msgstr "Число неудачных попыток разблокировки устройства: %1$d. Осталось попыток: %2$d, после чего настройки будут сброшены до заводских значений, а все данные — удалены." + +msgid "IDS_LCKSCN_POP_YOU_HAVE_MADE_P1SD_UNSUCCESSFUL_ATTEMPTS_TO_UNLOCK_YOUR_DEVICE_TRY_AGAIN_IN_P2SD_SECONDS" +msgstr "Число неудачных попыток разблокировки устройства: %1$d. Повторите попытку через %2$d сек." + +msgid "IDS_LCKSCN_HEADER_UNABLE_TO_UNLOCK_SCREEN_ABB" +msgstr "Невозможно разблокир-ть экран" + +msgid "IDS_COM_BODY_ENTER_PASSWORD" +msgstr "Введите пароль." + +msgid "IDS_LCKSCN_BODY_P1SD_TO_P2SD_DIGITS_OR_LETTERS_REQUIRED" +msgstr "Требуется от %1$d до %2$d цифр или букв." + +msgid "IDS_IDLE_BODY_INCORRECT_PASSWORD" +msgstr "Неправильный пароль" + +msgid "IDS_LCKSCN_BODY_YOU_HAVE_ATTEMPTED_TO_UNLOCK_THE_DEVICE_INCORRECTLY_PD_TIMES_IT_WILL_NOW_BE_RESET_TO_FACTORY_DEFAULTS_AND_ALL_DATA_WILL_BE_ERASED" +msgstr "Число неудачных попыток разблокировки устройства: %d. Настройки будут сброшены до заводских значений, а все данные — удалены" + +msgid "IDS_COM_BUTTON_OK_ABB" +msgstr "ОК" + +msgid "IDS_ST_BUTTON_CANCEL" +msgstr "Отмена" + +msgid "IDS_LCKSCN_BODY_EMERGENCY_CALL" +msgstr "Экстренный вызов" + diff --git a/po/sk.po b/po/sk.po new file mode 100644 index 0000000..b889a7c --- /dev/null +++ b/po/sk.po @@ -0,0 +1,57 @@ +msgid "IDS_IDLE_POP_UNABLE_TO_LAUNCH_PS" +msgstr "Nedá sa spustiť %s." + +msgid "IDS_COM_POP_WARNING" +msgstr "Varovanie" + +msgid "IDS_COM_BODY_ENTER_PIN" +msgstr "Zadať PIN" + +msgid "IDS_LCKSCN_NPBODY_ENTER_PIN_TO_VIEW_MESSAGE_ABB" +msgstr "Zadajte kód PIN na zobrazenie správy" + +msgid "IDS_LCKSCN_NPBODY_ENTER_PIN_TO_VIEW_CALL_LOG_ABB" +msgstr "Zadajte kód PIN na zobrazenie denníka hovorov" + +msgid "IDS_LCKSCN_POP_TRY_AGAIN_IN_PD_SECONDS" +msgstr "Skúste znova o %d sekúnd." + +msgid "IDS_COM_BODY_INCORRECT_PIN" +msgstr "Nesprávny PIN." + +msgid "IDS_IDLE_BODY_1_ATTEMPT_LEFT" +msgstr "Zostáva 1 pokus." + +msgid "IDS_IDLE_BODY_PD_ATTEMPTS_LEFT" +msgstr "Počet zostávajúcich pokusov: %d." + +msgid "IDS_LCKSCN_POP_YOU_HAVE_ATTEMPTED_TO_UNLOCK_THE_DEVICE_INCORRECTLY_P1SD_TIMES_YOU_HAVE_P2SD_ATTEMPTS_LEFT_BEFORE_THE_DEVICE_IS_RESET_TO_FACTORY_MSG" +msgstr "%1$d-krát ste sa pokúsili nesprávne odomknúť zariadenie. Zostávajú vám ešte %2$d pokusy a potom sa pre zariadenie obnovia predvolené nastavenia od výrobcu a vymažú sa všetky údaje." + +msgid "IDS_LCKSCN_POP_YOU_HAVE_MADE_P1SD_UNSUCCESSFUL_ATTEMPTS_TO_UNLOCK_YOUR_DEVICE_TRY_AGAIN_IN_P2SD_SECONDS" +msgstr "Dokončili ste vykonanie %1$d neúspešných pokusov o odomknutie zariadenia. Skúste to znova po uplynutí %2$d sekúnd." + +msgid "IDS_LCKSCN_HEADER_UNABLE_TO_UNLOCK_SCREEN_ABB" +msgstr "Obrazovka sa nedá odomknúť" + +msgid "IDS_COM_BODY_ENTER_PASSWORD" +msgstr "Zadajte heslo." + +msgid "IDS_LCKSCN_BODY_P1SD_TO_P2SD_DIGITS_OR_LETTERS_REQUIRED" +msgstr "Vyžaduje sa %1$d až %2$d číslic alebo písmen." + +msgid "IDS_IDLE_BODY_INCORRECT_PASSWORD" +msgstr "Nesprávne heslo." + +msgid "IDS_LCKSCN_BODY_YOU_HAVE_ATTEMPTED_TO_UNLOCK_THE_DEVICE_INCORRECTLY_PD_TIMES_IT_WILL_NOW_BE_RESET_TO_FACTORY_DEFAULTS_AND_ALL_DATA_WILL_BE_ERASED" +msgstr "%d-krát ste sa pokúsili nesprávne odomknúť zariadenie. Teraz sa preň obnovia predvolené nastavenia od výrobcu a vymažú sa všetky údaje." + +msgid "IDS_COM_BUTTON_OK_ABB" +msgstr "OK" + +msgid "IDS_ST_BUTTON_CANCEL" +msgstr "Zrušiť" + +msgid "IDS_LCKSCN_BODY_EMERGENCY_CALL" +msgstr "Tiesňový hovor" + diff --git a/po/sl.po b/po/sl.po new file mode 100644 index 0000000..4af9bcc --- /dev/null +++ b/po/sl.po @@ -0,0 +1,57 @@ +msgid "IDS_IDLE_POP_UNABLE_TO_LAUNCH_PS" +msgstr "Ni mogoče zagnati %s." + +msgid "IDS_COM_POP_WARNING" +msgstr "Opozorilo" + +msgid "IDS_COM_BODY_ENTER_PIN" +msgstr "Vnesite PIN." + +msgid "IDS_LCKSCN_NPBODY_ENTER_PIN_TO_VIEW_MESSAGE_ABB" +msgstr "Za prikaz sporočila vnesite kodo PIN" + +msgid "IDS_LCKSCN_NPBODY_ENTER_PIN_TO_VIEW_CALL_LOG_ABB" +msgstr "Za prikaz dnevnika klicev vnesite kodo PIN" + +msgid "IDS_LCKSCN_POP_TRY_AGAIN_IN_PD_SECONDS" +msgstr "Poskusite znova čez %d s." + +msgid "IDS_COM_BODY_INCORRECT_PIN" +msgstr "Napačna koda PIN." + +msgid "IDS_IDLE_BODY_1_ATTEMPT_LEFT" +msgstr "Preostal je še 1 poskus." + +msgid "IDS_IDLE_BODY_PD_ATTEMPTS_LEFT" +msgstr "%d preostalih poizkusov." + +msgid "IDS_LCKSCN_POP_YOU_HAVE_ATTEMPTED_TO_UNLOCK_THE_DEVICE_INCORRECTLY_P1SD_TIMES_YOU_HAVE_P2SD_ATTEMPTS_LEFT_BEFORE_THE_DEVICE_IS_RESET_TO_FACTORY_MSG" +msgstr "Napravo ste %1$d-krat poskusili odkleniti nepravilno. Imate še %2$d poskusov, preden bo naprava ponastavljena na privzete tovarniške nastavitve in bodo izbrisani vsi podatki." + +msgid "IDS_LCKSCN_POP_YOU_HAVE_MADE_P1SD_UNSUCCESSFUL_ATTEMPTS_TO_UNLOCK_YOUR_DEVICE_TRY_AGAIN_IN_P2SD_SECONDS" +msgstr "%1$d-krat ste neuspešno poskusili odkleniti napravo. Poskusite znova čez %2$d s." + +msgid "IDS_LCKSCN_HEADER_UNABLE_TO_UNLOCK_SCREEN_ABB" +msgstr "Zaslona ni mogoče odkleniti" + +msgid "IDS_COM_BODY_ENTER_PASSWORD" +msgstr "Vnesite geslo." + +msgid "IDS_LCKSCN_BODY_P1SD_TO_P2SD_DIGITS_OR_LETTERS_REQUIRED" +msgstr "Zahtevanih je od %1$d do %2$d znakov ali črk." + +msgid "IDS_IDLE_BODY_INCORRECT_PASSWORD" +msgstr "Napačno geslo." + +msgid "IDS_LCKSCN_BODY_YOU_HAVE_ATTEMPTED_TO_UNLOCK_THE_DEVICE_INCORRECTLY_PD_TIMES_IT_WILL_NOW_BE_RESET_TO_FACTORY_DEFAULTS_AND_ALL_DATA_WILL_BE_ERASED" +msgstr "Napravo ste %d-krat poskusili odkleniti nepravilno. Zdaj bo ponastavljena na privzete tovarniške nastavitve in vsi podatki bodo izbrisani." + +msgid "IDS_COM_BUTTON_OK_ABB" +msgstr "V redu" + +msgid "IDS_ST_BUTTON_CANCEL" +msgstr "Prekliči" + +msgid "IDS_LCKSCN_BODY_EMERGENCY_CALL" +msgstr "Klic v sili" + diff --git a/po/sr.po b/po/sr.po new file mode 100644 index 0000000..cd330bd --- /dev/null +++ b/po/sr.po @@ -0,0 +1,57 @@ +msgid "IDS_IDLE_POP_UNABLE_TO_LAUNCH_PS" +msgstr "Nemoguće pokrenuti %s." + +msgid "IDS_COM_POP_WARNING" +msgstr "Upozorenje" + +msgid "IDS_COM_BODY_ENTER_PIN" +msgstr "Unesi PIN kod." + +msgid "IDS_LCKSCN_NPBODY_ENTER_PIN_TO_VIEW_MESSAGE_ABB" +msgstr "Unesi PIN kôd da bi prikazao/la poruku" + +msgid "IDS_LCKSCN_NPBODY_ENTER_PIN_TO_VIEW_CALL_LOG_ABB" +msgstr "Unesi PIN kôd da bi prikazao/la dnevnik poziva" + +msgid "IDS_LCKSCN_POP_TRY_AGAIN_IN_PD_SECONDS" +msgstr "Probaj opet za %d sekundi." + +msgid "IDS_COM_BODY_INCORRECT_PIN" +msgstr "Neispravan PIN kod." + +msgid "IDS_IDLE_BODY_1_ATTEMPT_LEFT" +msgstr "1 pokušaj preostao." + +msgid "IDS_IDLE_BODY_PD_ATTEMPTS_LEFT" +msgstr "%d pokušaja ostalo." + +msgid "IDS_LCKSCN_POP_YOU_HAVE_ATTEMPTED_TO_UNLOCK_THE_DEVICE_INCORRECTLY_P1SD_TIMES_YOU_HAVE_P2SD_ATTEMPTS_LEFT_BEFORE_THE_DEVICE_IS_RESET_TO_FACTORY_MSG" +msgstr "%1$d puta si pogrešio/la u pokušaju da otključaš uređaj. Preostalo ti je %2$d pokušaja pre vraćanja uređaja na podrazumevana fabrička podešavanja i brisanja svih podataka." + +msgid "IDS_LCKSCN_POP_YOU_HAVE_MADE_P1SD_UNSUCCESSFUL_ATTEMPTS_TO_UNLOCK_YOUR_DEVICE_TRY_AGAIN_IN_P2SD_SECONDS" +msgstr "%1$d neuspešnih pokušaja otključavanja uređaja. Pokušaj ponovo za %2$d sekundi." + +msgid "IDS_LCKSCN_HEADER_UNABLE_TO_UNLOCK_SCREEN_ABB" +msgstr "Nije moguće otključati ekran" + +msgid "IDS_COM_BODY_ENTER_PASSWORD" +msgstr "Unesi šifru." + +msgid "IDS_LCKSCN_BODY_P1SD_TO_P2SD_DIGITS_OR_LETTERS_REQUIRED" +msgstr "Obavezno je između %1$d i %2$d cifara ili slova." + +msgid "IDS_IDLE_BODY_INCORRECT_PASSWORD" +msgstr "Pogrešna šifra" + +msgid "IDS_LCKSCN_BODY_YOU_HAVE_ATTEMPTED_TO_UNLOCK_THE_DEVICE_INCORRECTLY_PD_TIMES_IT_WILL_NOW_BE_RESET_TO_FACTORY_DEFAULTS_AND_ALL_DATA_WILL_BE_ERASED" +msgstr "%d puta si pogrešio/la u pokušaju da otključaš uređaj. Uređaj će se sada vratiti na podrazumevana fabrička podešavanja i svi podaci će biti izbrisani." + +msgid "IDS_COM_BUTTON_OK_ABB" +msgstr "OK" + +msgid "IDS_ST_BUTTON_CANCEL" +msgstr "Otkaži" + +msgid "IDS_LCKSCN_BODY_EMERGENCY_CALL" +msgstr "Pozivi u hitnim slučajevima" + diff --git a/po/sv.po b/po/sv.po new file mode 100644 index 0000000..6f4d91d --- /dev/null +++ b/po/sv.po @@ -0,0 +1,57 @@ +msgid "IDS_IDLE_POP_UNABLE_TO_LAUNCH_PS" +msgstr "Kan inte starta %s." + +msgid "IDS_COM_POP_WARNING" +msgstr "Varning" + +msgid "IDS_COM_BODY_ENTER_PIN" +msgstr "Ange PIN." + +msgid "IDS_LCKSCN_NPBODY_ENTER_PIN_TO_VIEW_MESSAGE_ABB" +msgstr "Ange PIN-koden för att visa meddelandet" + +msgid "IDS_LCKSCN_NPBODY_ENTER_PIN_TO_VIEW_CALL_LOG_ABB" +msgstr "Ange PIN-koden för att visa samtalsloggen" + +msgid "IDS_LCKSCN_POP_TRY_AGAIN_IN_PD_SECONDS" +msgstr "Försök igen om %d sek." + +msgid "IDS_COM_BODY_INCORRECT_PIN" +msgstr "Fel PIN-kod." + +msgid "IDS_IDLE_BODY_1_ATTEMPT_LEFT" +msgstr "1 försök kvar." + +msgid "IDS_IDLE_BODY_PD_ATTEMPTS_LEFT" +msgstr "%d försök kvar." + +msgid "IDS_LCKSCN_POP_YOU_HAVE_ATTEMPTED_TO_UNLOCK_THE_DEVICE_INCORRECTLY_P1SD_TIMES_YOU_HAVE_P2SD_ATTEMPTS_LEFT_BEFORE_THE_DEVICE_IS_RESET_TO_FACTORY_MSG" +msgstr "Du har försökt låsa upp enheten på fel sätt %1$d gånger. Du har %2$d försök kvar innan enheten återställs till fabriksinställningar och alla data raderas." + +msgid "IDS_LCKSCN_POP_YOU_HAVE_MADE_P1SD_UNSUCCESSFUL_ATTEMPTS_TO_UNLOCK_YOUR_DEVICE_TRY_AGAIN_IN_P2SD_SECONDS" +msgstr "Du har gjort %1$d misslyckade försök att låsa upp enheten. Försök igen om %2$d sekunder." + +msgid "IDS_LCKSCN_HEADER_UNABLE_TO_UNLOCK_SCREEN_ABB" +msgstr "Kan inte låsa upp skärmen" + +msgid "IDS_COM_BODY_ENTER_PASSWORD" +msgstr "Ange lösenord." + +msgid "IDS_LCKSCN_BODY_P1SD_TO_P2SD_DIGITS_OR_LETTERS_REQUIRED" +msgstr "%1$d till %2$d siffror eller bokstäver krävs." + +msgid "IDS_IDLE_BODY_INCORRECT_PASSWORD" +msgstr "Fel lösenord." + +msgid "IDS_LCKSCN_BODY_YOU_HAVE_ATTEMPTED_TO_UNLOCK_THE_DEVICE_INCORRECTLY_PD_TIMES_IT_WILL_NOW_BE_RESET_TO_FACTORY_DEFAULTS_AND_ALL_DATA_WILL_BE_ERASED" +msgstr "Du har försökt att låsa upp enheten felaktigt %d gånger. Enheten kommer nu att återställas till fabriksinställningarna och alla data kommer att raderas." + +msgid "IDS_COM_BUTTON_OK_ABB" +msgstr "OK" + +msgid "IDS_ST_BUTTON_CANCEL" +msgstr "Avbryt" + +msgid "IDS_LCKSCN_BODY_EMERGENCY_CALL" +msgstr "Nödsamtal" + diff --git a/po/tr_TR.po b/po/tr_TR.po new file mode 100644 index 0000000..8d5a977 --- /dev/null +++ b/po/tr_TR.po @@ -0,0 +1,57 @@ +msgid "IDS_IDLE_POP_UNABLE_TO_LAUNCH_PS" +msgstr "%s öğesi başlatılamıyor." + +msgid "IDS_COM_POP_WARNING" +msgstr "Uyarı" + +msgid "IDS_COM_BODY_ENTER_PIN" +msgstr "PIN'i girin." + +msgid "IDS_LCKSCN_NPBODY_ENTER_PIN_TO_VIEW_MESSAGE_ABB" +msgstr "Mesajı görüntülemek için PIN'i girin" + +msgid "IDS_LCKSCN_NPBODY_ENTER_PIN_TO_VIEW_CALL_LOG_ABB" +msgstr "Arama kaydını görüntülemek için PIN'i girin" + +msgid "IDS_LCKSCN_POP_TRY_AGAIN_IN_PD_SECONDS" +msgstr "%d saniye içinde de tekrar deneyin." + +msgid "IDS_COM_BODY_INCORRECT_PIN" +msgstr "PIN yanlış." + +msgid "IDS_IDLE_BODY_1_ATTEMPT_LEFT" +msgstr "1 deneme hakkı kaldı." + +msgid "IDS_IDLE_BODY_PD_ATTEMPTS_LEFT" +msgstr "%d deneme kaldı." + +msgid "IDS_LCKSCN_POP_YOU_HAVE_ATTEMPTED_TO_UNLOCK_THE_DEVICE_INCORRECTLY_P1SD_TIMES_YOU_HAVE_P2SD_ATTEMPTS_LEFT_BEFORE_THE_DEVICE_IS_RESET_TO_FACTORY_MSG" +msgstr "Cihazın kilidini açmak için şifreyi %1$d kez yanlış girdiniz. Cihaz varsayılan fabrika ayarlarına sıfırlanmadan ve tüm veriler silinmeden önce %2$d deneme hakkınız kaldı." + +msgid "IDS_LCKSCN_POP_YOU_HAVE_MADE_P1SD_UNSUCCESSFUL_ATTEMPTS_TO_UNLOCK_YOUR_DEVICE_TRY_AGAIN_IN_P2SD_SECONDS" +msgstr "Cihazınızın kilidini açmak için %1$d başarısız denemede bulundunuz. %2$d saniye içinde tekrar deneyin." + +msgid "IDS_LCKSCN_HEADER_UNABLE_TO_UNLOCK_SCREEN_ABB" +msgstr "Ekran kilidi açılamıyor" + +msgid "IDS_COM_BODY_ENTER_PASSWORD" +msgstr "Şifreyi girin." + +msgid "IDS_LCKSCN_BODY_P1SD_TO_P2SD_DIGITS_OR_LETTERS_REQUIRED" +msgstr "%1$d - %2$d hane veya harf gerekli." + +msgid "IDS_IDLE_BODY_INCORRECT_PASSWORD" +msgstr "Şifre yanlış." + +msgid "IDS_LCKSCN_BODY_YOU_HAVE_ATTEMPTED_TO_UNLOCK_THE_DEVICE_INCORRECTLY_PD_TIMES_IT_WILL_NOW_BE_RESET_TO_FACTORY_DEFAULTS_AND_ALL_DATA_WILL_BE_ERASED" +msgstr "Cihazın kilidini %d defa yanlış açma girişiminde bulundunuz. Cihaz şimdi fabrika ayarlarına sıfırlanacak ve tüm veriler silinecektir." + +msgid "IDS_COM_BUTTON_OK_ABB" +msgstr "Tamam" + +msgid "IDS_ST_BUTTON_CANCEL" +msgstr "İptal" + +msgid "IDS_LCKSCN_BODY_EMERGENCY_CALL" +msgstr "Acil arama" + diff --git a/po/uk.po b/po/uk.po new file mode 100644 index 0000000..b64c13d --- /dev/null +++ b/po/uk.po @@ -0,0 +1,57 @@ +msgid "IDS_IDLE_POP_UNABLE_TO_LAUNCH_PS" +msgstr "Неможливо запустити %s." + +msgid "IDS_COM_POP_WARNING" +msgstr "Попередження" + +msgid "IDS_COM_BODY_ENTER_PIN" +msgstr "Введіть PIN." + +msgid "IDS_LCKSCN_NPBODY_ENTER_PIN_TO_VIEW_MESSAGE_ABB" +msgstr "Введіть PIN-код, щоб переглянути повідомлення" + +msgid "IDS_LCKSCN_NPBODY_ENTER_PIN_TO_VIEW_CALL_LOG_ABB" +msgstr "Введіть PIN-код, щоб переглянути журнал викликів" + +msgid "IDS_LCKSCN_POP_TRY_AGAIN_IN_PD_SECONDS" +msgstr "Повт.спробу через %d сек." + +msgid "IDS_COM_BODY_INCORRECT_PIN" +msgstr "Хибний PIN." + +msgid "IDS_IDLE_BODY_1_ATTEMPT_LEFT" +msgstr "Залишилась 1 спроба." + +msgid "IDS_IDLE_BODY_PD_ATTEMPTS_LEFT" +msgstr "%d спроби залишилось." + +msgid "IDS_LCKSCN_POP_YOU_HAVE_ATTEMPTED_TO_UNLOCK_THE_DEVICE_INCORRECTLY_P1SD_TIMES_YOU_HAVE_P2SD_ATTEMPTS_LEFT_BEFORE_THE_DEVICE_IS_RESET_TO_FACTORY_MSG" +msgstr "Кількість невдалих спроб розблокування пристрою: %1$d. Залишилася %2$d спроб, перш ніж установки пристрою буде скинуто до стандартних заводських значень, а всі дані видалено." + +msgid "IDS_LCKSCN_POP_YOU_HAVE_MADE_P1SD_UNSUCCESSFUL_ATTEMPTS_TO_UNLOCK_YOUR_DEVICE_TRY_AGAIN_IN_P2SD_SECONDS" +msgstr "Здійснено %1$d невдалих спроб розблокування пристрою. Спробуйте ще раз через %2$d сек." + +msgid "IDS_LCKSCN_HEADER_UNABLE_TO_UNLOCK_SCREEN_ABB" +msgstr "Неможливо розблокувати екран" + +msgid "IDS_COM_BODY_ENTER_PASSWORD" +msgstr "Введіть пароль." + +msgid "IDS_LCKSCN_BODY_P1SD_TO_P2SD_DIGITS_OR_LETTERS_REQUIRED" +msgstr "Потрібно ввести від %1$d до %2$d цифр або літер." + +msgid "IDS_IDLE_BODY_INCORRECT_PASSWORD" +msgstr "Хибний пароль." + +msgid "IDS_LCKSCN_BODY_YOU_HAVE_ATTEMPTED_TO_UNLOCK_THE_DEVICE_INCORRECTLY_PD_TIMES_IT_WILL_NOW_BE_RESET_TO_FACTORY_DEFAULTS_AND_ALL_DATA_WILL_BE_ERASED" +msgstr "Кількість невдалих спроб розблокування пристрою: %d. Установки буде скинуто до заводських та усі дані буде стерто" + +msgid "IDS_COM_BUTTON_OK_ABB" +msgstr "ОК" + +msgid "IDS_ST_BUTTON_CANCEL" +msgstr "Скасувати" + +msgid "IDS_LCKSCN_BODY_EMERGENCY_CALL" +msgstr "Екстрений виклик" + diff --git a/po/uz.po b/po/uz.po new file mode 100644 index 0000000..9533af6 --- /dev/null +++ b/po/uz.po @@ -0,0 +1,6 @@ +msgid "IDS_IDLE_POP_UNABLE_TO_LAUNCH_PS" +msgstr "Unable to launch %s." + +msgid "IDS_COM_POP_WARNING" +msgstr "Warning" + diff --git a/rd3starter b/rd3starter old mode 100755 new mode 100644 index 0304170..b6507e2 --- a/rd3starter +++ b/rd3starter @@ -6,21 +6,19 @@ # sleep 0.1 #done -while [ ! -f /tmp/amd_ready ]; +while [ ! -f /run/.wm_ready]; do - sleep 0.1 + /bin/sleep 0.1 done vconf_set_safemode() { - if [ -f /opt/etc/.safemode ] + if [ -f /opt/etc/.safeboot ] then - vconftool set -t int memory/idle-screen/safemode "1" -i -f + /usr/bin/vconftool set -t int memory/idle-screen/safemode "1" -f else - vconftool set -t int memory/idle-screen/safemode "0" -i -f + /usr/bin/vconftool set -t int memory/idle-screen/safemode "0" -f fi } vconf_set_safemode - -echo -e "<2>[${_G}menu-daemon start${C_}]" > /dev/kmsg -/usr/bin/starter & +exit 0 diff --git a/rd4starter b/rd4starter old mode 100755 new mode 100644 index e5a896c..409c90c --- a/rd4starter +++ b/rd4starter @@ -1,11 +1,11 @@ #!/bin/sh vconf_set_safemode() { - if [ -f /opt/etc/.safemode ] + if [ -f /opt/etc/.safeboot ] then - vconftool set -t int memory/idle-screen/safemode "1" -i -f + /usr/bin/vconftool set -t int memory/idle-screen/safemode "1" -i -f else - vconftool set -t int memory/idle-screen/safemode "0" -i -f + /usr/bin/vconftool set -t int memory/idle-screen/safemode "0" -i -f fi } vconf_set_safemode diff --git a/res/CMakeLists.txt b/res/CMakeLists.txt new file mode 100755 index 0000000..2ab7c7b --- /dev/null +++ b/res/CMakeLists.txt @@ -0,0 +1 @@ +ADD_SUBDIRECTORY(edje) diff --git a/res/edje/CMakeLists.txt b/res/edje/CMakeLists.txt new file mode 100755 index 0000000..a1ccc4d --- /dev/null +++ b/res/edje/CMakeLists.txt @@ -0,0 +1,3 @@ +IF("${TIZEN_PROFILE_NAME}" STREQUAL "MOBILE") +ADD_SUBDIRECTORY(mobile) +ENDIF() diff --git a/res/edje/mobile/CMakeLists.txt b/res/edje/mobile/CMakeLists.txt new file mode 100755 index 0000000..f82b90b --- /dev/null +++ b/res/edje/mobile/CMakeLists.txt @@ -0,0 +1,15 @@ +ADD_CUSTOM_TARGET(lock_btn.edj + COMMAND edje_cc -id ${CMAKE_CURRENT_SOURCE_DIR}/images + ${CMAKE_CURRENT_SOURCE_DIR}/lock_btn.edc ${CMAKE_BINARY_DIR}/res/edje/mobile/lock_btn.edj + DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/lock_btn.edc +) +ADD_DEPENDENCIES(${PROJECT_NAME} lock_btn.edj) +INSTALL(FILES lock_btn.edj DESTINATION /usr/share/starter/res/edje) + +ADD_CUSTOM_TARGET(lock_pwd.edj + COMMAND edje_cc -id ${CMAKE_CURRENT_SOURCE_DIR}/images + ${CMAKE_CURRENT_SOURCE_DIR}/lock_pwd.edc ${CMAKE_BINARY_DIR}/res/edje/mobile/lock_pwd.edj + DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/lock_pwd.edc +) +ADD_DEPENDENCIES(${PROJECT_NAME} lock_pwd.edj) +INSTALL(FILES lock_pwd.edj DESTINATION /usr/share/starter/res/edje) diff --git a/res/edje/mobile/images/B09_btn_doubletab_h.png b/res/edje/mobile/images/B09_btn_doubletab_h.png new file mode 100755 index 0000000000000000000000000000000000000000..9c027fe9c1d3dc88a84e5131a744b94560ba71a6 GIT binary patch literal 3654 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 literal 0 HcmV?d00001 diff --git a/res/edje/mobile/images/Notification_ic_message.png b/res/edje/mobile/images/Notification_ic_message.png new file mode 100755 index 0000000000000000000000000000000000000000..8f25d404387c057da3b268eba4995ebc72bff0be GIT binary patch literal 3330 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 literal 0 HcmV?d00001 diff --git a/res/edje/mobile/images/RB07_icon_back_01.png b/res/edje/mobile/images/RB07_icon_back_01.png new file mode 100755 index 0000000000000000000000000000000000000000..f224b0415ce3332d753d2b2fb7baf6791845d680 GIT binary patch literal 3568 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 N002ovPDHLkV1kp&FSq~z literal 0 HcmV?d00001 diff --git a/res/edje/mobile/images/RB07_icon_back_press.png b/res/edje/mobile/images/RB07_icon_back_press.png new file mode 100755 index 0000000000000000000000000000000000000000..00d0f762b184bb315a0c306540669ea95a9b7e2c GIT binary patch literal 3575 zcmVKLZ*U+IBfRsybQWXdwQbLP>6pAqfylh#{fb6;Z(vMMVS~$e@S=j*ftg6;Uhf59&ghTmgWD0l;*T zI709Y^p6lP1rIRMx#05C~cW=H_Aw*bJ-5DT&Z2n+x)QHX^p z00esgV8|mQcmRZ%02D^@S3L16t`O%c004NIvOKvYIYoh62rY33S640`D9%Y2D-rV&neh&#Q1i z007~1e$oCcFS8neI|hJl{-P!B1ZZ9hpmq0)X0i`JwE&>$+E?>%_LC6RbVIkUx0b+_+BaR3cnT7Zv!AJxW zizFb)h!jyGOOZ85F;a?DAXP{m@;!0_IfqH8(HlgRxt7s3}k3K`kFu>>-2Q$QMFfPW!La{h336o>X zu_CMttHv6zR;&ZNiS=X8v3CR#fknUxHUxJ0uoBa_M6WNWeqIg~6QE69c9o#eyhGvpiOA@W-aonk<7r1(?fC{oI5N*U!4 zfg=2N-7=cNnjjOr{yriy6mMFgG#l znCF=fnQv8CDz++o6_Lscl}eQ+l^ZHARH>?_s@|##Rr6KLRFA1%Q+=*RRWnoLsR`7U zt5vFIcfW3@?wFpwUVxrVZ>QdQz32KIeJ}k~{cZZE^+ya? z2D1z#2HOnI7(B%_ac?{wFUQ;QQA1tBKtrWrm0_3Rgps+?Jfqb{jYbcQX~taRB;#$y zZN{S}1|}gUOHJxc?wV3fxuz+mJ4`!F$IZ;mqRrNsHJd##*D~ju=bP7?-?v~|cv>vB zsJ6IeNwVZxrdjT`yl#bBIa#GxRa#xMMy;K#CDyyGyQdMSxlWT#tDe?p!?5wT$+oGt z8L;Kp2HUQ-ZMJ=3XJQv;x5ci*?vuTfeY$;({XGW_huIFR9a(?@3)XSs8O^N5RyOM=TTmp(3=8^+zpz2r)C z^>JO{deZfso3oq3?Wo(Y?l$ge?uXo;%ru`Vo>?<<(8I_>;8Eq#KMS9gFl*neeosSB zfoHYnBQIkwkyowPu(zdms`p{<7e4kra-ZWq<2*OsGTvEV%s0Td$hXT+!*8Bnh2KMe zBmZRodjHV?r+_5^X9J0WL4jKW`}lf%A-|44I@@LTvf1rHjG(ze6+w@Jt%Bvjts!X0 z?2xS?_ve_-kiKB_KiJlZ$9G`c^=E@oNG)mWWaNo-3TIW8)$Hg0Ub-~8?KhvJ>$ z3*&nim@mj(aCxE5!t{lw7O5^0EIO7zOo&c6l<+|iDySBWCGrz@C5{St!X3hAA}`T4 z(TLbXTq+(;@<=L8dXnssyft|w#WSTW<++3>sgS%(4NTpeI-VAqb|7ssJvzNHgOZVu zaYCvgO_R1~>SyL=cFU|~g|hy|Zi}}s9+d~lYqOB71z9Z$wnC=pR9Yz4DhIM>Wmjgu z&56o6maCpC&F##y%G;1PobR9i?GnNg;gYtchD%p19a!eQtZF&3JaKv33gZ<8D~47E ztUS1iwkmDaPpj=$m#%)jCVEY4fnLGNg2A-`YwHVD3gv};>)hAvT~AmqS>Lr``i7kw zJ{5_It`yrBmlc25DBO7E8;5VoznR>Ww5hAaxn$2~(q`%A-YuS64wkBy=9dm`4cXeX z4c}I@?e+FW+b@^RDBHV(wnMq2zdX3SWv9u`%{xC-q*U}&`cyXV(%rRT*Z6MH?i+i& z_B8C(+grT%{XWUQ+f@NoP1R=AW&26{v-dx)iK^-Nmiuj8txj!m?Z*Ss1N{dh4z}01 z)YTo*JycSU)+_5r4#yw9{+;i4Ee$peRgIj+;v;ZGdF1K$3E%e~4LaI(jC-u%2h$&R z9cLXcYC@Xwnns&bn)_Q~Te?roKGD|d-g^8;+aC{{G(1^(O7m37Y1-+6)01cN&y1aw zoqc{T`P^XJqPBbIW6s}d4{z_f5Om?vMgNQEJG?v2T=KYd^0M3I6IZxbny)%vZR&LD zJpPl@Psh8QyPB@KTx+@RdcC!KX7}kEo;S|j^u2lU7XQ}Oo;f|;z4Ll+_r>@1-xl3| zawq-H%e&ckC+@AhPrP6BKT#_XdT7&;F71j}Joy zkC~6lh7E@6o;W@^IpRNZ{ptLtL(gQ-CY~4mqW;US7Zxvm_|@yz&e53Bp_lTPlfP|z zrTyx_>lv@x#=^!PzR7qqF<$gm`|ZJZ+;<)Cqu&ot2z=0000WV@Og>004R=004l4008;_004mL004C`008P>0026e000+nl3&F} z0009bNkldzDqbRjZirm=BO+gez{sl^s z6a`_MA}EZcNCd-GZjyu`=+H_CS_y(MAP56ui|#`mXQnsz-8VB&&)Ez!a3AwNbAOz3 z@0+IW?QJY};)oF#h=CZ0ff$H^7>I!wh=CZ0ff$H^7|0=uqe(9yBBee)4s^TMMvoO> zNmVz4fRu=SU>a!4P{;TsA{SJ3J@k;d3Cv{-1K_m#?!kIU4tN}0G^5cG3gj5@#toG$ zM=mjlh;#t+k?x^hc15HI_!byrBSG7>x`BwuFtFf;OQ@IyP6EpwZ6|2l5_m{Sz}0X#rjXR{{^)8DIz~xcAYGEdZS{G4N>X-$O*C z9r%(0Mjja1g;9KC%T-|PZaWBUrUD`&XWZo3N%&|3J^`&|Zmb+iIgIF<(?Cmb5E1DI zz5*vwTQT30v)|>QCTY=-J%G_bM^sq71m#boN73b=B1pGl4JVI%67*~^gktW}N zL%3sz4}{%$Uj^Dd+vZ7jg!)!hhrG{aRCUo!wkrWa+7q-5a-N*%uv=AE97?^@{ZxuO z-&l8R|0@I8iGrJGM>A~kJ0wUHUyGO_n?M7 xg=ioKVju=$AO>O}24WxvVju=$AO|o04gdn5+D)+SCE5T0002ovPDHLkV1gy*f?WUr literal 0 HcmV?d00001 diff --git a/res/edje/mobile/images/RB07_icon_enter.png b/res/edje/mobile/images/RB07_icon_enter.png new file mode 100755 index 0000000000000000000000000000000000000000..0fb460ec355d0a0c9b44ae359866af2d124ef38a GIT binary patch literal 3539 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 N002ovPDHLkV1gvDruYB= literal 0 HcmV?d00001 diff --git a/res/edje/mobile/images/RB07_icon_shift_focused.png b/res/edje/mobile/images/RB07_icon_shift_focused.png new file mode 100755 index 0000000000000000000000000000000000000000..4a18b36f723a51f3848fe290b01a9f239a32df27 GIT binary patch literal 3597 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 TTV_F}00000NkvXXu0mjfgZ`{y literal 0 HcmV?d00001 diff --git a/res/edje/mobile/images/RB07_icon_shift_normal.png b/res/edje/mobile/images/RB07_icon_shift_normal.png new file mode 100755 index 0000000000000000000000000000000000000000..de568be6bd3e2e19f45d48555c7dcb2ff07ba358 GIT binary patch literal 3412 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 literal 0 HcmV?d00001 diff --git a/res/edje/mobile/images/RB07_icon_space.png b/res/edje/mobile/images/RB07_icon_space.png new file mode 100755 index 0000000000000000000000000000000000000000..a3832158169c60334ba267788bbabf883c067c4a GIT binary patch literal 2909 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 Hu0mjfvKwTA literal 0 HcmV?d00001 diff --git a/res/edje/mobile/images/RB07_icon_space_press.png b/res/edje/mobile/images/RB07_icon_space_press.png new file mode 100755 index 0000000000000000000000000000000000000000..da4b3e69635021a0697d130b3eb807e3d7e08d77 GIT binary patch literal 2892 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 literal 0 HcmV?d00001 diff --git a/res/edje/mobile/images/RB07_key_btn_02.png b/res/edje/mobile/images/RB07_key_btn_02.png new file mode 100755 index 0000000000000000000000000000000000000000..9a38142ab1fbd4642ce97854fe74fdf4f0e60790 GIT binary patch literal 3391 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 VQaDVxi)a7<002ovPDHLkV1lC{UhDt> literal 0 HcmV?d00001 diff --git a/res/edje/mobile/images/RB07_key_btn_perss.png b/res/edje/mobile/images/RB07_key_btn_perss.png new file mode 100755 index 0000000000000000000000000000000000000000..62dcdba52977bd4b0754efe9bdb96ca1c7e6d8fc GIT binary patch literal 3412 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 literal 0 HcmV?d00001 diff --git a/res/edje/mobile/images/RB07_key_btn_qwerty_01.png b/res/edje/mobile/images/RB07_key_btn_qwerty_01.png new file mode 100755 index 0000000000000000000000000000000000000000..67afa2b52458cdcf593bbd9a253f4f1751c5c616 GIT binary patch literal 3128 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 JPDHLkV1l0<%D4ak literal 0 HcmV?d00001 diff --git a/res/edje/mobile/images/RB07_keypad_bg.png b/res/edje/mobile/images/RB07_keypad_bg.png new file mode 100755 index 0000000000000000000000000000000000000000..547ec6af9459d7fdae2564853624da2ff32957bf GIT binary patch literal 2861 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 LNkvXXu0mjf*vn3; literal 0 HcmV?d00001 diff --git a/res/edje/mobile/images/circular_gauge_bg.png b/res/edje/mobile/images/circular_gauge_bg.png new file mode 100644 index 0000000000000000000000000000000000000000..49bfae1bc0ec76740bbab0bbce0aede90fb23648 GIT binary patch literal 4874 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 literal 0 HcmV?d00001 diff --git a/res/edje/mobile/images/circular_gauge_password.png b/res/edje/mobile/images/circular_gauge_password.png new file mode 100644 index 0000000000000000000000000000000000000000..1031ac040a9aaefd9bd7235500ce76c16740dfc2 GIT binary patch literal 3685 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 XR>$)}SLK7dJqFa3b(9c_R&V|T%F^aj literal 0 HcmV?d00001 diff --git a/res/edje/mobile/images/circular_gauge_pin.png b/res/edje/mobile/images/circular_gauge_pin.png new file mode 100644 index 0000000000000000000000000000000000000000..a7e7dfe0bc94922d09a21ae408b0b83400d9e8a6 GIT binary patch literal 4251 zcmb7IcTm&o(*AKkdQ(9VD zJVPZ(l5y_j*N7qpn=fVylu!XK!|rZtfVC{(BK~-D z3W&j;6hu-0j?Vcf$N@027s3aP&;-j#SpNU1K5ye18TsmEFcF(AWeYREkF-} zm7x)!Wd!74N%4{ZRV3gtBrN<8cv=9k866-r_oeGux1@e|s-RJ`O+?Kw){#~=kOqMO z@kVo>h3%C?wl~}$UjsQSO7W?mN56>SGnCl4ym2@2QUD>bis4s=w z+}18O#%cm|0bnI0dg4L`+{7KDK^^0J@lte`%Igk8$pdmKvXMo%87LvmBMt-p>5buw z%(l6?jrH|e(*cO1>qkV?1*-3E58~YCXSC)S`S?rssz|JYbF4Ad$(O#7BlB0hV`#dk zZVQ_k#%C=ImuGxaLIY5@HhU?yHQ2Slbc4dQLxopD$q=;Ud(p{DkJV+FQ%db+W#ILF zZHmY&*-B@3${%Lpto9*2t7HH;=$eXDl6+-Vp6|SHbxt3bzz{;dEM#g7_1` zUK6TosUiX&lGtEEW?9N6@-``O0Xq}E1FfJx)DoSH+Osr<0EM`-gid4mXR(bitxt^2 z`fZh}+)s^OGK_nK$QNeZD8Y;ez2(+QQ+cs9UgO0wpP{Xfm+RT)q){C3kpm6(L*Cq! zq04q3ej`-NSTo4|`c^GvNAj`z*qbn_Yq5qsbShL~5CKgvc7_NTjn3oH)Zh2 zYm-Kkem24+nJSEu3Ab?ehj|b0MjEweG6K>=@$1<2{&mH5o^`|~j8`Pfp3VL>>g*JnHG5U}GG~h0 zi^Ge2uVFi+{pw;4zh&MyVse;dyq&jAc@)OTl)(N3pM;X&!f?`XqPW618}iM|xu#ON z@NhX*`EU7K1uO;rcJ@*@sYmQtAL(;UbHs9Zq`>g1>hkKPY6iPQyJ2`n)g9ZYdLuhU z+qEjXPq{UA)mZCqwmi0|Dvip-YE-2^T&FDB;XIkzq2IjUO1}(N^5*VZ=b!+CJ6F>~ z89{HRnuG_j$^&9=M&}-dN_FI)^L3 z48j%cmhGJFVg-H04GS&x<9blF_bZ+k9R^|V{3>?yi@Wc{6r1~3EQNP%{o;)RpTp06 ze^neCGul%(F^W(V83~-4@0A1nHTl4J;yz5@xnEcRm1~Y`-pbRgwh7JBX`{c4Skmqd zI<1MU`40LHmWok}35uCne6`puw6SO_mn_#X*D%MAj*Pw>{am1o(UPB0*urdKW-!Yw zF1H`vmcdoxT0NnS>$l4tc5$74@we3+UfJ8-c5X7N!`6v@?x^dixLVO>nQd89{2A5% zdLQ=zSJlGxdSjNFSda6?MY*EfI8ZI`>-%@JyRxI&qy9SAqG3v$W3J)5%@-Z~Hi%9A zmikg5p=ehp>itnJ35>EIV;!4ST*F--mK?Z;wZ%*sqc~7)!A}m8Qj^W%hCzASAPmpo z;!xMRX~=P)^Gd|zF&5K=>D#F!HteeG-rG%Fcs`=^T(a0fF?hUxNdF6LV?u}Fd5)a- za&5GgzEv!$c}p1V4$eZ<&Ae`T6;@4l-Q&>yp&j&mO?ypKbxC2#;qHiPPs>otuvNc* z@!j}k{l~(W9+wf96F^0bCy@tML)(Mig@(Edld(83H(c7QLX5eYi!0ZI1U6Y_b=VG|4b z!OI4}3~~*YFerH|wFX&JWhw1y(0$E$)pn(Jok0-NVPx7KYY+7?<5dGm)vNgVbT6On z944+}R~gnKIr70n&H>>s2z^KK6*sCt*JRXlblxp8@!l`B1DoJhaM zenmRr7Im#=YYI-vciO6E2a#7F-6a-b;T?OY_hVddGllmz20QwV_^59SGds>!_F#wQ zX4hW{SRQTms)8)8@Pj~oTNOb z5oX5Cw0)Z9o795aWPFzXX3UKLv-<+O7beT3!esYX(cr3ZfI;{=iA=Xl=4Vo$4^4}# zU7?x!Gn5a-2fhy}JSa56*cP5Tx;eI6jc8AN{<;)#W=#B(rASHBA>8y3{^8y{DQ+qo zbugBO&A~=RgMKc!5MSaVx7-QK_gVb++F3(ZCJirBw=_C62u=sBAqS1bjq8Y3L}7#a zUEi-EUo|hXr>yWDMID9pZBE{8yAfT@kw`L$r&yJ+c+?fXf8+A=bg`P&V%K4WKlwfR zc=^U+bddNtVYp*1OnkSl)2j3Ck?xM(oc?0sw2tG&!tCC{uJxcl&Xk3k`>BVH^*y!Ef zav&u}I3lwe#1yX5zl6O!v=gwb9skZ^saVKZQM-Wk1L0OSLomeM#db0=)!BPtQD-a7 zCGQb`t3P3HVeA}x71D^2jU@uUn?Lo`a9ge%h#!9IK2Yi6nBon6)-+HBG;N=hqh z!FTLRqH@Z(p`++|(Q|<+a~q?P@TrUfi>j?!oBy-1n$YBcUCg<>AO5*`k}T3)DbC z$U+ATbde%b1@HM>Tcyb)uE-mSQ>wd<2D#(I{uLjnR6 zgzFgkIXZ$A8uXC=ILeo2!{&+|E{ayfU`51-MZn$WNBxE$ts6FbFJ#0Hu zI2R|fgK^&UFqN{Lydy-S%X7e>oerEJOXlUqKi<)F~a2Bzsx3|}4An8RzgMZIP_WN``jZhs}WMt%N5^=e+wkthKrMIO0f|HSheCycd#v`1eZx z#lpfuPI6F6YU<2W$crqvT9%1Or}s>~EY$DK4J+&GFPzXiP{P4=amym}oZySIpZ+3UnIc=Hu1NAN zL!m5_#-iNZTrudktL_KtM$xXWE5+&Q>6m>#Cpk`D^?)zB&8ZZ(Zy}MJG>C>fUA$r4 zJj|C5&QA7kL-)!a=KK=riu`p%viCVRa#ow`%o=b zw?q;QZg84x47u80(AuMfm3}@US(%))w6~rF8@-CM@|7Pu#4veQ zT1FFf(JHXvdIa>!#>R$p==WLJI{B0%zJJBU+uJ+R&d%<c3${98A%;WM}tXEsH#(_ ze@>Y)dbRG^Qf3GgjltxLlX9pUdegU?{}M8KB+n+>69iS8Fh0sJ13};Ev}*=%NIS0dm4 z9?{9nxAyq)6NMH;`pxuULFC0_dz*TEkvcxGJL$tu>q(;wwHZEqRnmuW+eyC+HGQ;c zMTbDsq``R0g>b>09Qd|;g)HICwC(oP*-d;g24eYGolQh`V4Fm0+dS6r_4RcROkXU} z2&=E~{It8f3msk?9UUcefSk6gtSBido!{WOxw#>8b92Q(eJg*zUf$cX6N09%b*jcU zoLBCjrzHE>qTij1MqKfFBXzOma<2|w1XDakix0k2otECe=$jGV zPx#32;bRa{vGf6951U69E94oEQKA00(qQO+^RZ2LTEz4+SI%qyPW`Wl2OqR9M69 z*uf2hFbn`d6ZMP409}B2s{RQZFbNwJ{)l@zKk~Zr3?TXyOGGU zd(ZJ;ksuUw{DwX>%R3JoEP zZfFAqM#d^`B;qz8VU+|@0*h{;TakYm^J0)|nZ*v@Dh7$o1_xH{f#krdy^yh3wI?zL z>&s{@g+yR$a@BJqSFjo7zo$_O=@`DpIUegb)8XdP3wl9?*9R*M6wr8W{kH%B002ov JPDHLkV1kVMxFG-l literal 0 HcmV?d00001 diff --git a/res/edje/mobile/images/edit_btn_icon_keyboard_nor.png b/res/edje/mobile/images/edit_btn_icon_keyboard_nor.png new file mode 100755 index 0000000000000000000000000000000000000000..da150ad322fc33bdc201bcee034798f6545403bb GIT binary patch literal 1400 zcmeAS@N?(olHy`uVBq!ia0vp^c0g>x!3HERMRh9yDajJoh?3y^w370~qErUQl>DSr z1<%~X^wgl##FWaylc_cg49rTIArU1JzCKpT`MG+DAT@dwxdlMo3=B5*6$OdO*{LN8 zNvY|XdA3ULckfqH$V{%1*XSQL?vFu&J;D8jzb> zlBiITo0C^;Rbi_HHrEQs1_|pcDS(xfWZNo192Makpx~Tel&WB=XRMoSU}&gdW~OIo zVrph)sH0$HU}&Uo07PcGh9*{~W>!Y#3Q(W~w5=#5%__*n4QdyVXRDM^Qc_^0uU}qX zu2*iXmtT~wZ)j<02{OaTNEfI=x41H|B(Xv_uUHvof=g;~a#3bMNoIbY0?5R~r2Ntn zTP2`NAzsKWfE$}v3=Jk=fazBx7U&!58GyV5Q|Rl9UukYGTy=3tP%6T`SPd=?sVqp< z4@xc0FD*(2MqHXQ$f^P>=c3falKi5O{QMkPCP^Az7AKr~^?{Dj2SqGWM8kxDsRzV_CtDx~p72xifT_I*n5=F6z5+7^;~P&G$B>F! zZzA^Vvp9;}bDeNOQRI*)*To9~o-yvNPL8RIr+Tl*P$}W+l;8X05Bn4;zvVWnSH1im z2?+`b9i98tO!8z!<@V}tWrpv5Ptu>c{deBCeP^ma-|Kl>IWM$7W5X*E0ltS&l&3dq z-@|O_C8t-H9*yo?p0%j_aD~X0h%%4$cD^=-7K_+BuLp+hIsYN#U6<6WZ4VDgKfZBC zXX^XgZ*FoFhHnnRqcL z{%EpzjZE&Ju%j~T9!yU9w)E5Gk1bX}H^c?^^>fem>)$ZZ^3Z#`i<)N+8friJ!mzo# zL*MD{x^=v~nF&Tmn487TeD^r4xGwN&{So$s^WR^4vq&pajQhQrsh%+Rp*w$X{fN}? zeS3uO>^|jbEnBizzLRiXD0iUeyJ+M=^|LjXn*776--rE}*5~_h@8O!DCjY*lJ|UOd zir5|s{M+AX)feE-to*2}LTAoo@tdkmvk%mN)wfAAsgBPmlDWq5w~ASq{o(r5;w^B@+6h_u(P#K^S?KBN=d#Wzp$P!S CnFdGz literal 0 HcmV?d00001 diff --git a/res/edje/mobile/images/edit_btn_icon_keyboard_press.png b/res/edje/mobile/images/edit_btn_icon_keyboard_press.png new file mode 100755 index 0000000000000000000000000000000000000000..7b7742da048c83b2ec4539baf98b9c663d61765c GIT binary patch literal 1468 zcmeAS@N?(olHy`uVBq!ia0vp^c0g>x!3HERMRh9yDajJoh?3y^w370~qErUQl>DSr z1<%~X^wgl##FWaylc_cg49rTIArU1JzCKpT`MG+DAT@dwxdlMo3=B5*6$OdO*{LN8 zNvY|XdA3ULckfqH$V{%1*XSQL?vFu&J;D8jzb> zlBiITo0C^;Rbi_HHrEQs1_|pcDS(xfWZNo192Makpx~Tel&WB=XRMoSU}&gdW~OIo zVrph)sH0$HU}&Uo07PcGh9*{~W>!Y#3Q(W~w5=#5%__*n4QdyVXRDM^Qc_^0uU}qX zu2*iXmtT~wZ)j<02{OaTNEfI=x41H|B(Xv_uUHvof=g;~a#3bMNoIbY0?5R~r2Ntn zTP2`NAzsKWfE$}v3=Jk=fazBx7U&!58GyV5Q|Rl9UukYGTy=3tP%6T`SPd=?sVqp< z4@xc0FD*(2MqHXQ$f^P>=c3falKi5O{QMkPCG;uUG zF?4ixf$4S0PcF?(%`1WFO+n~2#iP^Az7Gs=x^?{Dj2SqGWM8kxDsRzV_CtDx~p72xifT_I*n5^HKPRV6pU^4J@aSW-r z^=5{>4s)Q)@oJ7qw*=T6ANd~%;_h@=6r8P`xWZLGY@)$Nk1S)4DX}4I*xa~H4X>RF z@>I=jnlM4))|KxkC-3?5>C3BI*?WHcos|FU-rd(%z6)t~CJ9ID}ZZH;rH~(?ttG#;)WP$El zuW?LWz}@6!NtVz|-~G#bZku#=-|A6Y_WNXwbd|DY+6nCsb}NI#$}HZuFXGE)N=tixCZ&f zdAFAIv3q_Nym;k7%cFaezJKcWN37`e@VU$_GhvV8>m5JtdX|-f0;&8~W8|^p^A6TH zs_gf!d&Kkaw^beU+>CpZ7pDj-zCF0Ni?=^Bb>HgDqMS<{p}aP&GdeS+W@u!FO_FQ4 z&0@1IGok5eQ*n>6g}V7#Ugf?p88eP&DN3uh^-lb$^u@E9yZ&DB@%y^CpdE7zEt-vC=)dA`kpzZ)*;Og_ SFRn9!%2Q8QKbLh*2~7ZN0v)yh literal 0 HcmV?d00001 diff --git a/res/edje/mobile/images/event_clock_colon.png b/res/edje/mobile/images/event_clock_colon.png new file mode 100644 index 0000000000000000000000000000000000000000..26a51c6cdf5f2944ccfc74a0624fdb9640395cd4 GIT binary patch literal 3000 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 literal 0 HcmV?d00001 diff --git a/res/edje/mobile/images/event_list_divider.#.png b/res/edje/mobile/images/event_list_divider.#.png new file mode 100755 index 0000000000000000000000000000000000000000..3be1e5ecd412a604e1cca7eac87da4042a8ca630 GIT binary patch literal 2807 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 JPDHLkV1g#WG(7+S literal 0 HcmV?d00001 diff --git a/res/edje/mobile/images/event_number_bg.#.png b/res/edje/mobile/images/event_number_bg.#.png new file mode 100644 index 0000000000000000000000000000000000000000..de0f8a50336f5074b2fdb65f5500daf61222d4a3 GIT binary patch literal 2839 zcmV+y3+VKTP)KLZ*U+IBfRsybQWXdwQbLP>6pAqfylh#{fb6;Z(vMMVS~$e@S=j*ftg6;Uhf59&ghTmgWD0l;*T zI709Y^p6lP1rIRMx#05C~cW=H_Aw*bJ-5DT&Z2n+x)QHX^p z00esgV8|mQcmRZ%02D^@S3L16t`O%c004NIvOKvYIYoh62rY33S640`D9%Y2D-rV&neh&#Q1i z007~1e$oCcFS8neI|hJl{-P!B1ZZ9hpmq0)X0i`JwE&>$+E?>%_LC6RbVIkUx0b+_+BaR3cnT7Zv!AJxW zizFb)h!jyGOOZ85F;a?DAXP{m@;!0_IfqH8(HlgRxt7s3}k3K`kFu>>-2Q$QMFfPW!La{h336o>X zu_CMttHv6zR;&ZNiS=X8v3CR#fknUxHUxJ0uoBa_M6WNWeqIg~6QE69c9o#eyhGvpiOA@W-aonk<7r1(?fC{oI5N*U!4 zfg=2N-7=cNnjjOr{yriy6mMFgG#l znCF=fnQv8CDz++o6_Lscl}eQ+l^ZHARH>?_s@|##Rr6KLRFA1%Q+=*RRWnoLsR`7U zt5vFIcfW3@?wFpwUVxrVZ>QdQz32KIeJ}k~{cZZE^+ya? z2D1z#2HOnI7(B%_ac?{wFUQ;QQA1tBKtrWrm0_3Rgps+?Jfqb{jYbcQX~taRB;#$y zZN{S}1|}gUOHJxc?wV3fxuz+mJ4`!F$IZ;mqRrNsHJd##*D~ju=bP7?-?v~|cv>vB zsJ6IeNwVZxrdjT`yl#bBIa#GxRa#xMMy;K#CDyyGyQdMSxlWT#tDe?p!?5wT$+oGt z8L;Kp2HUQ-ZMJ=3XJQv;x5ci*?vuTfeY$;({XGW_huIFR9a(?@3)XSs8O^N5RyOM=TTmp(3=8^+zpz2r)C z^>JO{deZfso3oq3?Wo(Y?l$ge?uXo;%ru`Vo>?<<(8I_>;8Eq#KMS9gFl*neeosSB zfoHYnBQIkwkyowPu(zdms`p{<7e4kra-ZWq<2*OsGTvEV%s0Td$hXT+!*8Bnh2KMe zBmZRodjHV?r+_5^X9J0WL4jKW`}lf%A-|44I@@LTvf1rHjG(ze6+w@Jt%Bvjts!X0 z?2xS?_ve_-kiKB_KiJlZ$9G`c^=E@oNG)mWWaNo-3TIW8)$Hg0Ub-~8?KhvJ>$ z3*&nim@mj(aCxE5!t{lw7O5^0EIO7zOo&c6l<+|iDySBWCGrz@C5{St!X3hAA}`T4 z(TLbXTq+(;@<=L8dXnssyft|w#WSTW<++3>sgS%(4NTpeI-VAqb|7ssJvzNHgOZVu zaYCvgO_R1~>SyL=cFU|~g|hy|Zi}}s9+d~lYqOB71z9Z$wnC=pR9Yz4DhIM>Wmjgu z&56o6maCpC&F##y%G;1PobR9i?GnNg;gYtchD%p19a!eQtZF&3JaKv33gZ<8D~47E ztUS1iwkmDaPpj=$m#%)jCVEY4fnLGNg2A-`YwHVD3gv};>)hAvT~AmqS>Lr``i7kw zJ{5_It`yrBmlc25DBO7E8;5VoznR>Ww5hAaxn$2~(q`%A-YuS64wkBy=9dm`4cXeX z4c}I@?e+FW+b@^RDBHV(wnMq2zdX3SWv9u`%{xC-q*U}&`cyXV(%rRT*Z6MH?i+i& z_B8C(+grT%{XWUQ+f@NoP1R=AW&26{v-dx)iK^-Nmiuj8txj!m?Z*Ss1N{dh4z}01 z)YTo*JycSU)+_5r4#yw9{+;i4Ee$peRgIj+;v;ZGdF1K$3E%e~4LaI(jC-u%2h$&R z9cLXcYC@Xwnns&bn)_Q~Te?roKGD|d-g^8;+aC{{G(1^(O7m37Y1-+6)01cN&y1aw zoqc{T`P^XJqPBbIW6s}d4{z_f5Om?vMgNQEJG?v2T=KYd^0M3I6IZxbny)%vZR&LD zJpPl@Psh8QyPB@KTx+@RdcC!KX7}kEo;S|j^u2lU7XQ}Oo;f|;z4Ll+_r>@1-xl3| zawq-H%e&ckC+@AhPrP6BKT#_XdT7&;F71j}Joy zkC~6lh7E@6o;W@^IpRNZ{ptLtL(gQ-CY~4mqW;US7Zxvm_|@yz&e53Bp_lTPlfP|z zrTyx_>lv@x#=^!PzR7qqF<$gm`|ZJZ+;<)Cqu&ot2z=0000WV@Og>004R=004l4008;_004mL004C`008P>0026e000+nl3&F} z0000&Nklcc<1QKZe( pSp=+#we)`7{l==e{&?y;1^^AC6ApayuhRek002ovPDHLkV1gb0NR0ph literal 0 HcmV?d00001 diff --git a/res/edje/mobile/images/fahrenheit_icon.png b/res/edje/mobile/images/fahrenheit_icon.png new file mode 100755 index 0000000000000000000000000000000000000000..5629e1a1339b67ae7b350de66545f444937ffae9 GIT binary patch literal 3234 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 UyKoA_Jpcdz07*qoM6N<$f-xZp;Q#;t literal 0 HcmV?d00001 diff --git a/res/edje/mobile/images/gradation_bg.#.png b/res/edje/mobile/images/gradation_bg.#.png new file mode 100755 index 0000000000000000000000000000000000000000..3589b3b00ba132d9482384b25558a603f5e34b9d GIT binary patch literal 2857 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 Hu0mjfnjlEU literal 0 HcmV?d00001 diff --git a/res/edje/mobile/images/icon_backtocall_nor.png b/res/edje/mobile/images/icon_backtocall_nor.png new file mode 100755 index 0000000000000000000000000000000000000000..ab0140ca1a863bf2c28c3228b9c123ee32c1ab32 GIT binary patch literal 4182 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 literal 0 HcmV?d00001 diff --git a/res/edje/mobile/images/icon_backtocall_press.png b/res/edje/mobile/images/icon_backtocall_press.png new file mode 100755 index 0000000000000000000000000000000000000000..96781afdb87b11bc83196221f1171fb3958aa842 GIT binary patch literal 3945 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 KXs;{1yMF+J>oT7J literal 0 HcmV?d00001 diff --git a/res/edje/mobile/images/indicator_nor.png b/res/edje/mobile/images/indicator_nor.png new file mode 100755 index 0000000000000000000000000000000000000000..3ab25a79b57ea0dc687bf3268c9aec9f70cf4ca5 GIT binary patch literal 990 zcmaJ=J#W)M7&eVmp`r{32}B1tIZ^?M_#?61#EMCiIH9TPQqo9`m~iY%p(aFOd1HpArdk#AZZh(Qx>IG)D-c>9h8j;*olvLP6L3AUZZegN0{D|M^i zv9dOszXo!VN(5YpO%S(*7^|R!0tjR-owNi|1d76m zlB_7=Rge-#N;Kgh< zOEprdBtay@o`=mS>4k}rf(}C~aD40_4^Tz3iMFxEl1z_|;QC`(FC3PM6pW8dpBFiS z9%%$LjQ>MjcZ?2k4IbzFPvNlM^C4e@A=(Zs(zsTFhVs=?08Na7Izn5cDz3H>MqwNI zptPod%j=G3qi%R*fHw@a>V??!ELhbwmMCzJW2=gks_5xTR**{-Q7lUZNszM{shklq zx|AsvM_e6Q+b;C*h-)8n3lq823a(Eg>o9P3pj`=&3kFA4oyob(Pt+T7?a8@hCUSX_ z3{M;TSEEN;#65I6wk=tVjSoHI_JG)WXgTupoOk>W(p1yxs-aos0 zOWHiW^Js4B=SA@QM&jVygBR(kQ(yRn>G@slSM2+~vvBa_{^PsF&fK@QEN*_Lr1)N$ aIWf(Aczx;SvkUrjdgH3)75z=|_Psy-bu=sh literal 0 HcmV?d00001 diff --git a/res/edje/mobile/images/keyboard_basic_pad.png b/res/edje/mobile/images/keyboard_basic_pad.png new file mode 100755 index 0000000000000000000000000000000000000000..2cf16b4ec09f680f5fc576a167098a3d821c79e6 GIT binary patch literal 3816 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 literal 0 HcmV?d00001 diff --git a/res/edje/mobile/images/keypad_press_bg.png b/res/edje/mobile/images/keypad_press_bg.png new file mode 100755 index 0000000000000000000000000000000000000000..533ebb9cf3e37263e6359f250376331045b51bdd GIT binary patch literal 4247 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 literal 0 HcmV?d00001 diff --git a/res/edje/mobile/images/lock_circle_line_camera.png b/res/edje/mobile/images/lock_circle_line_camera.png new file mode 100755 index 0000000000000000000000000000000000000000..476de64ca5d513f475310592094c2d886469cf88 GIT binary patch literal 12323 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 literal 0 HcmV?d00001 diff --git a/res/edje/mobile/images/ls_back_01_nor.png b/res/edje/mobile/images/ls_back_01_nor.png new file mode 100755 index 0000000000000000000000000000000000000000..c98baf23d68e622e628b624c54c2d6f62f7df8b9 GIT binary patch literal 4209 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 Hu0mjfBsb6z literal 0 HcmV?d00001 diff --git a/res/edje/mobile/images/ls_back_01_press.png b/res/edje/mobile/images/ls_back_01_press.png new file mode 100755 index 0000000000000000000000000000000000000000..5904846ec2e3e34ed30e42faeca8751e16b615d9 GIT binary patch literal 4190 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 literal 0 HcmV?d00001 diff --git a/res/edje/mobile/images/ls_back_02_nor.png b/res/edje/mobile/images/ls_back_02_nor.png new file mode 100755 index 0000000000000000000000000000000000000000..af67780eba56b3345e5af997084fcd2876230a0c GIT binary patch literal 4010 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 literal 0 HcmV?d00001 diff --git a/res/edje/mobile/images/ls_back_02_press.png b/res/edje/mobile/images/ls_back_02_press.png new file mode 100755 index 0000000000000000000000000000000000000000..bd59d79b0bd1ef9125c314f4e60a0d02996ba992 GIT binary patch literal 3971 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 literal 0 HcmV?d00001 diff --git a/res/edje/mobile/images/ls_button_02_press.png b/res/edje/mobile/images/ls_button_02_press.png new file mode 100755 index 0000000000000000000000000000000000000000..e713390705fae24da97e4ea0303ae5f3b90594ed GIT binary patch literal 10112 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 Cj-)66 literal 0 HcmV?d00001 diff --git a/res/edje/mobile/images/ls_button_default.png b/res/edje/mobile/images/ls_button_default.png new file mode 100755 index 0000000000000000000000000000000000000000..5273c7be1e92b23bfbf23a7af57fe6a7bd322e7e GIT binary patch literal 17823 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 JPDHLkV1oZL$65dY literal 0 HcmV?d00001 diff --git a/res/edje/mobile/images/ls_password_star_01.png b/res/edje/mobile/images/ls_password_star_01.png new file mode 100755 index 0000000000000000000000000000000000000000..088eb12d6e8bafeebfb6467423b1312b6f207a9f GIT binary patch literal 3508 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 literal 0 HcmV?d00001 diff --git a/res/edje/mobile/images/ls_phone_01_nor.png b/res/edje/mobile/images/ls_phone_01_nor.png new file mode 100755 index 0000000000000000000000000000000000000000..3580d8404dde8b4cda7d7c0911f60ee9ac728432 GIT binary patch literal 4404 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

b%_rcKL&VFJMN<;!(jwrsJ< zZd07f&CSgYcg|=uW_@eirZ|RDDS+1j=m1;;aEwywh_!rncD6p;xxBnQ!*le90niBG zRRAsky_C`qB>|KWVg>MCK-OXauMk37DWy}f)S=Vq(!!lntJSJF`@;fg15go=Z6$UM2S7#U;94r|f9W6U@EPytaWh>j-+Hyxm zMr>EETq)hUb?bZpO$k{E#FK(WDg9b%XlUrAl==db-EN=G&d&ZDfKC9~P~`&Cg$oyc z6bo~6~*)yCj!Hg4RwP!h9zety0tRKCSx(e(B8 zm6%MXB>>)uRENP}u=_#`37^mB%gD&M8ACT(BEb|N8Yc;$3WXxVE+EG)fmT4jnpVjs(-~c6&IEvr7Uf!!Sci zrSe)Ns3j#O`oo70M_Q9V1#pDt`3bdJJ)%~tM|hr}0MI3#3#+3?kJ9Gm=A1|{eLmmE z9LM!b#j*c`QmHH#y?`=8NJzhN;lhQ{Ry-ecb#-~Fs;VknE|>DsrAvdGH*fw+wD^Ha zrOIa*MiB+(eE`3cQg9?4z;8Sr&kB#n^EIemuh)0~{{6Lug@tE>-hcT3Y5-ILFo&u8 z5rA_5KBAP~3UNNo?RNi%<~lf%=x9?qfcHEekJasVm#9=KwST4-1mQti zTG|@`KJtg_0IUbFCa{8_UxBp_MZV9rj+_&pYV7*FS}f> zEC61WO7*!yp_mASDOI2Vparl8K)HDA6rKBi0IdMlTCLW!0|ySgTw7afil;x;kZ6&z?OC zckbL-z_RRfdmYD)9s5s9OUpgC+kFkdcF|I`0G5dla1?+$gwHBzpn*5?I?wYzIez^3 z;&toR&7X@Ic4%nmaa~>At*NQ0la$i;W9*0Yff7Q@06M$7yO+c}#G`3=c=$v zR#sO2{`~p#<%ztp=H}*+Q>RY-oKiX%q7OL$N+T41Bu;Qi8}hq?{lzd)yC|h6f^KHt z(9qB?%F4q*L0kl}H z*7Vxi+OU0i@Zf=P^5n^K0P6sJ5Ld&`5wUOW?(Y69Tr}OE1VQk2baZ?IpeZ1NZtm^v zeH5+iT&015fiD1*1hoHJTU*;*K@hyr$_@?=KGtY72jb-uw}tNAyVn-WWWq3vqP4ZP zU~Ft`(d?2bJ>6VYRh5~n38K8bJR>J3$1E;Sv0=l8`8#&(Ccb#?Vi2?wgz>*M-0 zQlrsK`~SCEtxJ;a#+c3K*$1lCYNz5UtJP|0!hxDhrb`}=Cnl(Fx7)RB*|LxQ$BPy% zdMVjJ3knKmS7A1r&F-I|qRH#^`gA(ojdj>-E7eQ2JmA5#uQ^X3E+>E(tk?ELdC5vT>w-mYM5>SKc$r3k&1=BSyNME z+`W5uzR6@tDX0?@6VCSb_D}o!`+o#6NS^Yu{K}Opzt_{#Q>s#_Qf|^KDk{=eR8(Zv z*Vlh0nOT1S{{3aC2y@noSe9vRZ7r4z(Bk4^O{&lCOP4M+NCqg+^WIbk%Cf9OGC-9| zh=07f*|}W)@?7zl*{F!4u|6tolbX7N^AK)@jPFFfDf!vMI6V0<2V5L zP%;*ZXWs<<8qao*q?+yl*az{G$QQm+lJ#ONR0b+b1}X!Ufy$DB%0OkHvSgq#P#LH! i8K?|Y2Krsp{|5l4s0PgDiCBLC0000KLZ*U+IBfRsybQWXdwQbLP>6pAqfylh#{fb6;Z(vMMVS~$e@S=j*ftg6;Uhf59&ghTmgWD0l;*T zI709Y^p6lP1rIRMx#05C~cW=H_Aw*bJ-5DT&Z2n+x)QHX^p z00esgV8|mQcmRZ%02D^@S3L16t`O%c004NIvOKvYIYoh62rY33S640`D9%Y2D-rV&neh&#Q1i z007~1e$oCcFS8neI|hJl{-P!B1ZZ9hpmq0)X0i`JwE&>$+E?>%_LC6RbVIkUx0b+_+BaR3cnT7Zv!AJxW zizFb)h!jyGOOZ85F;a?DAXP{m@;!0_IfqH8(HlgRxt7s3}k3K`kFu>>-2Q$QMFfPW!La{h336o>X zu_CMttHv6zR;&ZNiS=X8v3CR#fknUxHUxJ0uoBa_M6WNWeqIg~6QE69c9o#eyhGvpiOA@W-aonk<7r1(?fC{oI5N*U!4 zfg=2N-7=cNnjjOr{yriy6mMFgG#l znCF=fnQv8CDz++o6_Lscl}eQ+l^ZHARH>?_s@|##Rr6KLRFA1%Q+=*RRWnoLsR`7U zt5vFIcfW3@?wFpwUVxrVZ>QdQz32KIeJ}k~{cZZE^+ya? z2D1z#2HOnI7(B%_ac?{wFUQ;QQA1tBKtrWrm0_3Rgps+?Jfqb{jYbcQX~taRB;#$y zZN{S}1|}gUOHJxc?wV3fxuz+mJ4`!F$IZ;mqRrNsHJd##*D~ju=bP7?-?v~|cv>vB zsJ6IeNwVZxrdjT`yl#bBIa#GxRa#xMMy;K#CDyyGyQdMSxlWT#tDe?p!?5wT$+oGt z8L;Kp2HUQ-ZMJ=3XJQv;x5ci*?vuTfeY$;({XGW_huIFR9a(?@3)XSs8O^N5RyOM=TTmp(3=8^+zpz2r)C z^>JO{deZfso3oq3?Wo(Y?l$ge?uXo;%ru`Vo>?<<(8I_>;8Eq#KMS9gFl*neeosSB zfoHYnBQIkwkyowPu(zdms`p{<7e4kra-ZWq<2*OsGTvEV%s0Td$hXT+!*8Bnh2KMe zBmZRodjHV?r+_5^X9J0WL4jKW`}lf%A-|44I@@LTvf1rHjG(ze6+w@Jt%Bvjts!X0 z?2xS?_ve_-kiKB_KiJlZ$9G`c^=E@oNG)mWWaNo-3TIW8)$Hg0Ub-~8?KhvJ>$ z3*&nim@mj(aCxE5!t{lw7O5^0EIO7zOo&c6l<+|iDySBWCGrz@C5{St!X3hAA}`T4 z(TLbXTq+(;@<=L8dXnssyft|w#WSTW<++3>sgS%(4NTpeI-VAqb|7ssJvzNHgOZVu zaYCvgO_R1~>SyL=cFU|~g|hy|Zi}}s9+d~lYqOB71z9Z$wnC=pR9Yz4DhIM>Wmjgu z&56o6maCpC&F##y%G;1PobR9i?GnNg;gYtchD%p19a!eQtZF&3JaKv33gZ<8D~47E ztUS1iwkmDaPpj=$m#%)jCVEY4fnLGNg2A-`YwHVD3gv};>)hAvT~AmqS>Lr``i7kw zJ{5_It`yrBmlc25DBO7E8;5VoznR>Ww5hAaxn$2~(q`%A-YuS64wkBy=9dm`4cXeX z4c}I@?e+FW+b@^RDBHV(wnMq2zdX3SWv9u`%{xC-q*U}&`cyXV(%rRT*Z6MH?i+i& z_B8C(+grT%{XWUQ+f@NoP1R=AW&26{v-dx)iK^-Nmiuj8txj!m?Z*Ss1N{dh4z}01 z)YTo*JycSU)+_5r4#yw9{+;i4Ee$peRgIj+;v;ZGdF1K$3E%e~4LaI(jC-u%2h$&R z9cLXcYC@Xwnns&bn)_Q~Te?roKGD|d-g^8;+aC{{G(1^(O7m37Y1-+6)01cN&y1aw zoqc{T`P^XJqPBbIW6s}d4{z_f5Om?vMgNQEJG?v2T=KYd^0M3I6IZxbny)%vZR&LD zJpPl@Psh8QyPB@KTx+@RdcC!KX7}kEo;S|j^u2lU7XQ}Oo;f|;z4Ll+_r>@1-xl3| zawq-H%e&ckC+@AhPrP6BKT#_XdT7&;F71j}Joy zkC~6lh7E@6o;W@^IpRNZ{ptLtL(gQ-CY~4mqW;US7Zxvm_|@yz&e53Bp_lTPlfP|z zrTyx_>lv@x#=^!PzR7qqF<$gm`|ZJZ+;<)Cqu&ot2z=0000WV@Og>004R=004l4008;_004mL004C`008P>0026e000+nl3&F} z000O?NklIK$;g#cPXLS)@KU~j)&MX8C?htPB|Qc39{^`If#(9W0HBgVzzYF? zM9hk!KosWZ?9w7ZGHT zxxngloxCPZ$W_EHFE%YFpFJm_UnUcg#VUa?$SUX+07{^$l(5JO=;dTOttzBS!h|a5 zf^=~jj19sY0C(75i$I#;;W3XN*nYlC^rk2 zOND32X@NE+`j%A9`}N11Df4l@fC{;KY_r*RY}&NxILC2(iaCYZYuB!Qx@F6j9+|pc zfzUdnnCyry0ictkr+fGAEp2XYK9VYA0N^-|Z*FcrvTxr$x%|ot#1hQ!+XC4;4#0Z3 zKs%kzPLs*BF_Si2F4ylRB_$uo1p6s~+la{W#me3ZazVD)Y&$ZA3;-sRX`{_%+acqq z7LqX?vi$7Y+uMbvrlt;B?KL$ub?n}~Tdp*&DUmZQ%0{GNwOS1;SFViP?(yTtKjeA7 znAUspJYU?|+4-^2X#6(b>qbXMy_YUs@=*TBOA%T_4aBn1FOlFoV;PM`?bWMS-!Yrb z?Rvd_1sGN!5cv1bojYeYZ{Ga9+wBfgYIbhjUWiGDJc-1 zn3(vhzP|p@qeqWsXncRfDb90-MWD2!sHdlAkJ2CmfFKC3_4M@Yq12on5jmnr(A4Z> zZEbCe*O9cnUDxuw{ESgudi<`FE8J!(P#=7{Ro8s{NeDf z5-G0gCKx?8Xf!i2GII9d!Gos~O(?8ZtKr0n6Yp15Rkb5d{@iZ2cdc2o<_oXaE3RF; zwxGAS_e((#Hq1)^aonpEK|3T#8ViG74T^g;G6fwB2A_0ycOPwUZ~r5e`?|WiHnz65 zex}uGm&BQzj7?2V-8UEv>v*1Da21;}=m|-ZMl=zL5N2%Y>C>k_OcgQ!w6(SUe&)=X zLy{!T#td%t`U;cD^m;7FSxPd^IY1pNpa%v9zB_Q>z(Bh9@87@w?}34VlVC@DBxok~ zHT(VkhZc+F$4uL?SS&yI{r-n6f@UJL8yXt=g+@}x?RE!;hK7D&1T@DS=xeSL53+`02JuqA)=hz>GCn&bG!#>P*^$H%`qdi3b3 zM6W+~>{!+K`1se2jg80B*&LZ=N9d2783Mp7p!AR?rNsYSa~_Z9#_;fP|Lxni@7}w2 z&kX=IH8sX{>(3{pbxerAXsJ#T^e6yl^ah$K zsG_Yorjek1pil%PJg5~6hgRPMkw206%7^+g!7-B37##`!f(TG46k-X8dbF!er zb9MC)faGSA_INKy1Ug*MT2*2P=*_r1#j!@lGxvSkwBeX7>R|iMNickbH(sOwfsvDtPO-?u7 zvvj!ciwG5ZQV;jdkvKf77njU&)e=Ix>chuXKP5ofJg!<*_Vxb&VMis;q3hlU00000 LNkvXXu0mjff^Rye literal 0 HcmV?d00001 diff --git a/res/edje/mobile/images/quick_shot_drag.png b/res/edje/mobile/images/quick_shot_drag.png new file mode 100755 index 0000000000000000000000000000000000000000..34ea67f758eb5557f4ffdb3b54901cacbda9381f GIT binary patch literal 3197 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 +#include +#include + +#include "dbus_util.h" +#include "util.h" + +#define DBUS_HOME_BUS_NAME "org.tizen.coreapps.home" +#define DBUS_HOME_RAISE_PATH "/Org/Tizen/Coreapps/home/raise" +#define DBUS_HOME_RAISE_INTERFACE DBUS_HOME_BUS_NAME".raise" +#define DBUS_HOME_RAISE_MEMBER "homeraise" + +#define DBUS_REPLY_TIMEOUT (120 * 1000) + +#define POWEROFF_BUS_NAME "org.tizen.system.popup" +#define POWEROFF_OBJECT_PATH "/Org/Tizen/System/Popup/Poweroff" +#define POWEROFF_INTERFACE_NAME POWEROFF_BUS_NAME".Poweroff" +#define METHOD_POWEROFF_NAME "PopupLaunch" + +#define CPU_BOOSTER_OBJECT_PATH DEVICED_OBJECT_PATH"/PmQos" +#define CPU_BOOSTER_INTERFACE DEVICED_BUS_NAME".PmQos" +#define METHOD_CPU_BOOSTER "AppLaunchHome" +#define DBUS_CPU_BOOSTER_SEC 200 + +#define METHOD_LOCK_PMQOS_NAME "LockScreen" +#define DBUS_LOCK_PMQOS_SEC (2 * 1000) + +static struct _info { + DBusConnection *connection; +} s_info = { + .connection = NULL, +}; + + + +static DBusConnection *_dbus_connection_get(void) +{ + DBusError derror; + DBusConnection *connection = NULL; + + if (s_info.connection) { + return s_info.connection; + } + + _W("no connection for dbus. get dbus connection"); + + dbus_error_init(&derror); + connection = dbus_bus_get_private(DBUS_BUS_SYSTEM, &derror); + if (!connection) { + _E("Failed to get dbus connection:%s", derror.message); + dbus_error_free(&derror); + return NULL; + } + dbus_connection_setup_with_g_main(connection, NULL); + dbus_error_free(&derror); + + s_info.connection = connection; + + return s_info.connection; +} + + + +static int _append_variant(DBusMessageIter *iter, const char *sig, char *param[]) +{ + char *ch; + int i; + int int_type; + uint64_t int64_type; + + if (!sig || !param) + return 0; + + for (ch = (char*)sig, i = 0; *ch != '\0'; ++i, ++ch) { + switch (*ch) { + case 'i': + int_type = atoi(param[i]); + dbus_message_iter_append_basic(iter, DBUS_TYPE_INT32, &int_type); + break; + case 'u': + int_type = atoi(param[i]); + dbus_message_iter_append_basic(iter, DBUS_TYPE_UINT32, &int_type); + break; + case 't': + int64_type = atoi(param[i]); + dbus_message_iter_append_basic(iter, DBUS_TYPE_UINT64, &int64_type); + break; + case 's': + dbus_message_iter_append_basic(iter, DBUS_TYPE_STRING, ¶m[i]); + break; + default: + return -EINVAL; + } + } + + return 0; +} + + + +static DBusMessage *_invoke_dbus_method_sync(const char *dest, const char *path, + const char *interface, const char *method, + const char *sig, char *param[]) +{ + DBusConnection *conn = NULL; + DBusMessage *msg; + DBusMessageIter iter; + DBusMessage *reply; + DBusError err; + int r; + + conn = (DBusConnection *)_dbus_connection_get(); + if (!conn) { + _E("dbus_bus_get error"); + return NULL; + } + + msg = dbus_message_new_method_call(dest, path, interface, method); + if (!msg) { + _E("dbus_message_new_method_call(%s:%s-%s)", path, interface, method); + return NULL; + } + + dbus_message_iter_init_append(msg, &iter); + r = _append_variant(&iter, sig, param); + if (r < 0) { + _E("append_variant error(%d)", r); + dbus_message_unref(msg); + return NULL; + } + + dbus_error_init(&err); + + reply = dbus_connection_send_with_reply_and_block(conn, msg, DBUS_REPLY_TIMEOUT, &err); + dbus_message_unref(msg); + if (!reply) { + _E("dbus_connection_send error(%s:%s)", err.name, err.message); + dbus_error_free(&err); + return NULL; + } + + return reply; +} + + + +static int _invoke_dbus_method_async(const char *dest, const char *path, + const char *interface, const char *method, + const char *sig, char *param[]) +{ + DBusConnection *conn; + DBusMessage *msg; + DBusMessageIter iter; + int r; + + conn = dbus_bus_get(DBUS_BUS_SYSTEM, NULL); + if (!conn) { + _E("dbus_bus_get error"); + return 0; + } + + msg = dbus_message_new_method_call(dest, path, interface, method); + if (!msg) { + _E("dbus_message_new_method_call(%s:%s-%s)", path, interface, method); + return 0; + } + + dbus_message_iter_init_append(msg, &iter); + r = _append_variant(&iter, sig, param); + if (r < 0) { + _E("append_variant error(%d)", r); + dbus_message_unref(msg); + return 0; + } + + r = dbus_connection_send(conn, msg, NULL); + dbus_message_unref(msg); + if (r != TRUE) { + _E("dbus_connection_send error(%s:%s:%s-%s)", dest, path, interface, method); + return 0; + } + + _D("dbus_connection_send, ret=%d", r); + return 1; +} + + + +static int _dbus_message_send(const char *path, const char *interface, const char *member) +{ + int ret = 0; + DBusMessage *msg = NULL; + DBusConnection *conn = NULL; + + conn = (DBusConnection *)_dbus_connection_get(); + if (!conn) { + _E("dbus_bus_get error"); + return -1; + } + + msg = dbus_message_new_signal(path, interface, member); + if (!msg) { + _E("dbus_message_new_signal(%s:%s-%s)", path, interface, member); + return -1; + } + + ret = dbus_connection_send(conn, msg, NULL); //async call + dbus_message_unref(msg); + if (ret != TRUE) { + _E("dbus_connection_send error(%s:%s-%s)", path, interface, member); + return -ECOMM; + } + _D("dbus_connection_send, ret=%d", ret); + return 0; +} + + + +void dbus_util_send_home_raise_signal(void) +{ + int ret = 0; + + ret = _dbus_message_send( + DBUS_HOME_RAISE_PATH, + DBUS_HOME_RAISE_INTERFACE, + DBUS_HOME_RAISE_MEMBER); + _E("Sending HOME RAISE signal, result:%d", ret); +} + + + +int dbus_util_send_oomadj(int pid, int oom_adj_value) +{ + DBusError err; + DBusMessage *msg; + char *pa[4]; + char buf1[BUF_SIZE_16]; + char buf2[BUF_SIZE_16]; + int ret, val; + + if(pid <= 0){ + _E("Pid is invalid"); + return -1; + } + + snprintf(buf1, sizeof(buf1), "%d", pid); + snprintf(buf2, sizeof(buf2), "%d", oom_adj_value); + + pa[0] = DEVICED_SET_METHOD; + pa[1] = "2"; + pa[2] = buf1; + pa[3] = buf2; + + msg = _invoke_dbus_method_sync(DEVICED_BUS_NAME, DEVICED_PATH, DEVICED_INTERFACE, DEVICED_SET_METHOD, "siss", pa); + if (!msg) + return -EBADMSG; + + dbus_error_init(&err); + + ret = dbus_message_get_args(msg, &err, DBUS_TYPE_INT32, &val, DBUS_TYPE_INVALID); + if (!ret) { + _E("no message : [%s:%s]", err.name, err.message); + val = -EBADMSG; + } + + dbus_message_unref(msg); + dbus_error_free(&err); + + _D("%s-%s : %d", DEVICED_INTERFACE, pa[0], val); + return val; +} + + + +void dbus_util_send_cpu_booster_signal(void) +{ + int ret = 0; + char *arr[1]; + char val[BUF_SIZE_32]; + + snprintf(val, sizeof(val), "%d", DBUS_CPU_BOOSTER_SEC); + arr[0] = val; + + ret = _invoke_dbus_method_async(DEVICED_BUS_NAME, CPU_BOOSTER_OBJECT_PATH, CPU_BOOSTER_INTERFACE, + METHOD_CPU_BOOSTER, "i", arr); + ret_if(!ret); + + _D("%s-%s", CPU_BOOSTER_INTERFACE, METHOD_CPU_BOOSTER); +} + + + +void dbus_util_send_poweroff_signal(void) +{ + int ret = 0; + + ret = _invoke_dbus_method_async(POWEROFF_BUS_NAME, POWEROFF_OBJECT_PATH, POWEROFF_INTERFACE_NAME, + METHOD_POWEROFF_NAME, NULL, NULL); + ret_if(!ret); + + _D("%s-%s", POWEROFF_INTERFACE_NAME, METHOD_POWEROFF_NAME); +} + + + +void dbus_util_send_lock_PmQos_signal(void) +{ + int ret = 0; + + char *arr[1]; + char val[BUF_SIZE_32]; + + snprintf(val, sizeof(val), "%d", DBUS_LOCK_PMQOS_SEC); + arr[0] = val; + + ret = _invoke_dbus_method_async(DEVICED_BUS_NAME, CPU_BOOSTER_OBJECT_PATH, CPU_BOOSTER_INTERFACE, + METHOD_LOCK_PMQOS_NAME, "i", arr); + ret_if(!ret); + + _D("%s-%s", CPU_BOOSTER_INTERFACE, METHOD_LOCK_PMQOS_NAME); +} + + + +int dbus_util_receive_lcd_status(void (*changed_cb)(void *data, DBusMessage *msg), void *data) +{ + E_DBus_Connection *conn; + E_DBus_Signal_Handler *handler; + + e_dbus_init(); + + conn = e_dbus_bus_get(DBUS_BUS_SYSTEM); + if (conn == NULL) { + _E("e_dbus_bus_get error"); + return 0; + } + + handler = e_dbus_signal_handler_add(conn, NULL, DISPLAY_OBJECT_PATH, + DEVICED_INTERFACE_DISPLAY, MEMBER_LCD_ON, + changed_cb, data); + if (handler == NULL) { + _E("e_dbus_signal_handler_add error"); + return 0; + } + + handler = e_dbus_signal_handler_add(conn, NULL, DISPLAY_OBJECT_PATH, + DEVICED_INTERFACE_DISPLAY, MEMBER_LCD_OFF, + changed_cb, data); + if (handler == NULL) { + _E("e_dbus_signal_handler_add error"); + return 0; + } + + return 1; +} + +char *dbus_util_msg_arg_get_str(DBusMessage *msg) +{ + int ret = 0; + DBusError derror; + const char *state = NULL; + dbus_error_init(&derror); + + ret = dbus_message_get_args(msg, &derror, DBUS_TYPE_STRING, &state, DBUS_TYPE_INVALID); + goto_if(!ret, ERROR); + + dbus_error_free(&derror); + + return strdup(state); + +ERROR: + _E("Failed to get reply (%s:%s)", derror.name, derror.message); + dbus_error_free(&derror); + + return NULL; +} + + + diff --git a/src/hw_key.c b/src/hw_key.c deleted file mode 100755 index 359d0fc..0000000 --- a/src/hw_key.c +++ /dev/null @@ -1,332 +0,0 @@ - /* - * Copyright 2012 Samsung Electronics Co., Ltd - * - * Licensed under the Flora License, Version 1.1 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://floralicense.org/license/ - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - - - -#include -#include -#include - -#ifndef WAYLAND -#include -#include -#endif - -#include -#include -#include -#include -#include - -#include "hw_key.h" -#include "menu_daemon.h" -#include "util.h" - -#define TASKMGR_PKG_NAME "org.tizen.taskmgr" -#define CAMERA_PKG_NAME "org.tizen.camera-app" -#define CALLLOG_PKG_NAME "org.tizen.calllog" -#define MUSIC_PLAYER_PKG_NAME "org.tizen.music-player" - - - -static struct { - Ecore_X_Window win; - Ecore_Event_Handler *key_up; - Ecore_Event_Handler *key_down; - Ecore_Timer *long_press; - Ecore_Timer *single_timer; - Ecore_Timer *volume_up_long_press; - Ecore_Timer *volume_down_long_press; - Eina_Bool cancel; -} key_info = { - .win = 0x0, - .key_up = NULL, - .key_down = NULL, - .long_press = NULL, - .single_timer = NULL, - .volume_up_long_press = NULL, - .volume_down_long_press = NULL, - .cancel = EINA_FALSE, -}; - - - -static Eina_Bool _launch_taskmgr_cb(void* data) -{ - int val1 = -1; - int val2 = -1; - _D("Launch TASKMGR"); - - key_info.long_press = NULL; - - if (vconf_get_int(VCONFKEY_PM_STATE, &val1) < 0) { - _E("Cannot get VCONFKEY_PM_STATE"); - return ECORE_CALLBACK_CANCEL; - } - if (vconf_get_int(VCONFKEY_IDLE_LOCK_STATE, &val2) < 0) { - _E("Cannot get VCONFKEY_IDLE_LOCK_STATE"); - return ECORE_CALLBACK_CANCEL; - } - - if ((val1 == VCONFKEY_PM_STATE_NORMAL) && (val2 == VCONFKEY_IDLE_UNLOCK)) { - _D("LCD ON, UNLOCK state => launch taskmgr"); - if (menu_daemon_open_app(TASKMGR_PKG_NAME) < 0) - _E("Failed to launch the taskmgr"); - } else { - _D("Can't launch TASKMGR pm state : %d lock state : %d", val1, val2); - } - - return ECORE_CALLBACK_CANCEL; -} - - - -static Eina_Bool _launch_by_home_key(void *data) -{ - key_info.single_timer = NULL; - syspopup_destroy_all(); - menu_daemon_open_homescreen(NULL); - return ECORE_CALLBACK_CANCEL; -} - - - -inline static int _release_home_key(void) -{ - retv_if(NULL == key_info.long_press, EXIT_SUCCESS); - ecore_timer_del(key_info.long_press); - key_info.long_press = NULL; - - if (NULL == key_info.single_timer) { - key_info.single_timer = ecore_timer_add(0.3, _launch_by_home_key, NULL); - return EXIT_SUCCESS; - } - ecore_timer_del(key_info.single_timer); - key_info.single_timer = NULL; - - syspopup_destroy_all(); - - return EXIT_SUCCESS; -} - - - -inline static void _release_multimedia_key(const char *value) -{ - ret_if(NULL == value); - - _D("Multimedia key is released with %s", value); - - bundle *b; - b = bundle_create(); - if (!b) { - _E("Cannot create bundle"); - return; - } - bundle_add(b, "multimedia_key", value); - - int ret; - ret = menu_daemon_launch_app(MUSIC_PLAYER_PKG_NAME, b); - if (ret < 0) - _E("Failed to launch the running apps, ret : %d", ret); - - bundle_free(b); -} - - - -static Eina_Bool _key_release_cb(void *data, int type, void *event) -{ - Evas_Event_Key_Up *ev = event; - int val = -1; - - _D("Released"); - - if (!ev) { - _D("Invalid event object"); - return ECORE_CALLBACK_RENEW; - } - -#ifndef WAYLAND - if (!strcmp(ev->keyname, KEY_END)) { - } else if (!strcmp(ev->keyname, KEY_CONFIG)) { - } else if (!strcmp(ev->keyname, KEY_SEND)) { - } else if (!strcmp(ev->keyname, KEY_HOME)) { - - if (vconf_get_int(VCONFKEY_IDLE_LOCK_STATE, &val) < 0) { - _D("Cannot get VCONFKEY_IDLE_LOCK_STATE"); - } - if (val == VCONFKEY_IDLE_LOCK) { - _D("lock state, ignore home key..!!"); - return ECORE_CALLBACK_RENEW; - } - - if (EINA_TRUE == key_info.cancel) { - _D("Cancel key is activated"); - if (key_info.long_press) { - ecore_timer_del(key_info.long_press); - key_info.long_press = NULL; - } - - if (key_info.single_timer) { - ecore_timer_del(key_info.single_timer); - key_info.single_timer = NULL; - } - - return ECORE_CALLBACK_RENEW; - } - - _release_home_key(); - } else if (!strcmp(ev->keyname, KEY_PAUSE)) { - } else if (!strcmp(ev->keyname, KEY_CANCEL)) { - _D("CANCEL Key is released"); - key_info.cancel = EINA_FALSE; - } else if (!strcmp(ev->keyname, KEY_MEDIA)) { - _release_multimedia_key("KEY_PLAYCD"); - } -#endif - - return ECORE_CALLBACK_RENEW; -} - - - -static Eina_Bool _key_press_cb(void *data, int type, void *event) -{ - Evas_Event_Key_Down *ev = event; - int val = -1; - - _D("Pressed"); - - if (!ev) { - _D("Invalid event object"); - return ECORE_CALLBACK_RENEW; - } - -#ifndef WAYLAND - if (!strcmp(ev->keyname, KEY_SEND)) { - _D("Launch calllog"); - if (menu_daemon_open_app(CALLLOG_PKG_NAME) < 0) - _E("Failed to launch %s", CALLLOG_PKG_NAME); - } else if(!strcmp(ev->keyname, KEY_CONFIG)) { - _D("Launch camera"); - if (menu_daemon_open_app(CAMERA_PKG_NAME) < 0) - _E("Failed to launch %s", CAMERA_PKG_NAME); - } else if (!strcmp(ev->keyname, KEY_HOME)) { - if (vconf_get_int(VCONFKEY_IDLE_LOCK_STATE, &val) < 0) { - _D("Cannot get VCONFKEY_IDLE_LOCK_STATE"); - } - if (val == VCONFKEY_IDLE_LOCK) { - _D("lock state, ignore home key..!!"); - return ECORE_CALLBACK_RENEW; - } - if (key_info.long_press) { - ecore_timer_del(key_info.long_press); - key_info.long_press = NULL; - } - - key_info.long_press = ecore_timer_add(0.5, _launch_taskmgr_cb, NULL); - if (!key_info.long_press) - _E("Failed to add timer for long press detection"); - } else if (!strcmp(ev->keyname, KEY_CANCEL)) { - _D("Cancel button is pressed"); - key_info.cancel = EINA_TRUE; - } else if (!strcmp(ev->keyname, KEY_MEDIA)) { - _D("Media key is pressed"); - } -#endif - - return ECORE_CALLBACK_RENEW; -} - - - -void _media_key_event_cb(media_key_e key, media_key_event_e status, void *user_data) -{ - _D("MEDIA KEY EVENT"); - if (MEDIA_KEY_STATUS_PRESSED == status) return; - - if (MEDIA_KEY_PAUSE == key) { - _release_multimedia_key("KEY_PAUSECD"); - } else if (MEDIA_KEY_PLAY == key) { - _release_multimedia_key("KEY_PLAYCD"); - } -} - - - -void create_key_window(void) -{ -#ifndef WAYLAND - key_info.win = ecore_x_window_input_new(0, 0, 0, 1, 1); - if (!key_info.win) { - _D("Failed to create hidden window"); - return; - } - ecore_x_event_mask_unset(key_info.win, ECORE_X_EVENT_MASK_NONE); - ecore_x_icccm_title_set(key_info.win, "menudaemon,key,receiver"); - ecore_x_netwm_name_set(key_info.win, "menudaemon,key,receiver"); - ecore_x_netwm_pid_set(key_info.win, getpid()); - - utilx_grab_key(ecore_x_display_get(), key_info.win, KEY_HOME, SHARED_GRAB); - utilx_grab_key(ecore_x_display_get(), key_info.win, KEY_VOLUMEDOWN, SHARED_GRAB); - utilx_grab_key(ecore_x_display_get(), key_info.win, KEY_VOLUMEUP, SHARED_GRAB); - utilx_grab_key(ecore_x_display_get(), key_info.win, KEY_CONFIG, SHARED_GRAB); - utilx_grab_key(ecore_x_display_get(), key_info.win, KEY_MEDIA, SHARED_GRAB); - - key_info.key_up = ecore_event_handler_add(ECORE_EVENT_KEY_UP, _key_release_cb, NULL); - if (!key_info.key_up) - _D("Failed to register a key up event handler"); - - key_info.key_down = ecore_event_handler_add(ECORE_EVENT_KEY_DOWN, _key_press_cb, NULL); - if (!key_info.key_down) - _D("Failed to register a key down event handler"); - - media_key_reserve(_media_key_event_cb, NULL); -#endif -} - - - -void destroy_key_window(void) -{ -#ifndef WAYLAND - utilx_ungrab_key(ecore_x_display_get(), key_info.win, KEY_HOME); - utilx_ungrab_key(ecore_x_display_get(), key_info.win, KEY_VOLUMEDOWN); - utilx_ungrab_key(ecore_x_display_get(), key_info.win, KEY_VOLUMEUP); - utilx_ungrab_key(ecore_x_display_get(), key_info.win, KEY_CONFIG); - utilx_ungrab_key(ecore_x_display_get(), key_info.win, KEY_MEDIA); - - if (key_info.key_up) { - ecore_event_handler_del(key_info.key_up); - key_info.key_up = NULL; - } - - if (key_info.key_down) { - ecore_event_handler_del(key_info.key_down); - key_info.key_down = NULL; - } - - ecore_x_window_delete_request_send(key_info.win); - key_info.win = 0x0; - - media_key_release(); -#endif -} - - - -// End of a file diff --git a/src/lock-daemon.c b/src/lock-daemon.c deleted file mode 100755 index 2ceb5be..0000000 --- a/src/lock-daemon.c +++ /dev/null @@ -1,663 +0,0 @@ - /* - * Copyright 2012 Samsung Electronics Co., Ltd - * - * Licensed under the Flora License, Version 1.1 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://floralicense.org/license/ - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - - - -#include - -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "lockd-debug.h" -#include "lock-daemon.h" -#include "lockd-process-mgr.h" -#include "lockd-window-mgr.h" -#include "starter-util.h" -#include "menu_daemon.h" - -static int phone_lock_pid; - -struct lockd_data { - int lock_app_pid; - int phone_lock_app_pid; - int lock_type; - Eina_Bool request_recovery; - lockw_data *lockw; - GPollFD *gpollfd; -}; - -#define PHLOCK_SOCK_PREFIX "/tmp/phlock" -#define PHLOCK_SOCK_MAXBUFF 65535 -#define PHLOCK_APP_CMDLINE "/usr/apps/org.tizen.lockscreen/bin/lockscreen" -#define PHLOCK_UNLOCK_CMD "unlock" -#define PHLOCK_LAUNCH_CMD "launch_phone_lock" -#define LAUNCH_INTERVAL 100*1000 - -static int lockd_launch_app_lockscreen(struct lockd_data *lockd); - -static void lockd_unlock_lockscreen(struct lockd_data *lockd); - -static int _lockd_get_lock_type(void) -{ - int lock_type = 0; - int ret = 0; - - vconf_get_int(VCONFKEY_SETAPPL_SCREEN_LOCK_TYPE_INT, &lock_type); - - if (lock_type == SETTING_SCREEN_LOCK_TYPE_PASSWORD || - lock_type == SETTING_SCREEN_LOCK_TYPE_SIMPLE_PASSWORD) { - ret = 1; - } else if (lock_type == SETTING_SCREEN_LOCK_TYPE_SWIPE || - lock_type == SETTING_SCREEN_LOCK_TYPE_MOTION) { - ret = 0; - } else { - ret = 2; - } - - LOCKD_DBG("_lockd_get_lock_type ret(%d), lock_type (%d)", ret, lock_type); - - return ret; -} - -static void _lockd_notify_pm_state_cb(keynode_t * node, void *data) -{ - LOCKD_DBG("PM state Notification!!"); - - struct lockd_data *lockd = (struct lockd_data *)data; - int val = -1; - - if (lockd == NULL) { - LOCKD_ERR("lockd is NULL"); - return; - } - - if (vconf_get_int(VCONFKEY_PM_STATE, &val) < 0) { - LOCKD_ERR("Cannot get VCONFKEY_PM_STATE"); - return; - } - - if (val == VCONFKEY_PM_STATE_LCDOFF) { - lockd->lock_type = _lockd_get_lock_type(); - lockd_launch_app_lockscreen(lockd); - } -} - -static void -_lockd_notify_lock_state_cb(keynode_t * node, void *data) -{ - LOCKD_DBG("lock state changed!!"); - - struct lockd_data *lockd = (struct lockd_data *)data; - int val = -1; - - if (lockd == NULL) { - LOCKD_ERR("lockd is NULL"); - return; - } - - if (vconf_get_int(VCONFKEY_IDLE_LOCK_STATE, &val) < 0) { - LOCKD_ERR("Cannot get VCONFKEY_IDLE_LOCK_STATE"); - return; - } - - if (val == VCONFKEY_IDLE_UNLOCK) { - LOCKD_DBG("unlocked..!!"); - if (lockd->lock_app_pid != 0) { - LOCKD_DBG("terminate lock app..!!"); - lockd_process_mgr_terminate_lock_app(lockd->lock_app_pid, 1); - } - } -} - -static Eina_Bool lockd_set_lock_state_cb(void *data) -{ - LOCKD_DBG("%s, %d", __func__, __LINE__); - vconf_set_int(VCONFKEY_IDLE_LOCK_STATE, VCONFKEY_IDLE_LOCK); - return ECORE_CALLBACK_CANCEL; -} - -static void -_lockd_notify_phone_lock_verification_cb(keynode_t * node, void *data) -{ - LOCKD_DBG("%s, %d", __func__, __LINE__); - - struct lockd_data *lockd = (struct lockd_data *)data; - int val = -1; - - if (lockd == NULL) { - LOCKD_ERR("lockd is NULL"); - return; - } - - if (vconf_get_bool(VCONFKEY_LOCKSCREEN_PHONE_LOCK_VERIFICATION, &val) < 0) { - LOCKD_ERR("Cannot get %s", VCONFKEY_LOCKSCREEN_PHONE_LOCK_VERIFICATION); - return; - } - - if (val == TRUE) { - lockd_window_mgr_finish_lock(lockd->lockw); - vconf_set_int(VCONFKEY_IDLE_LOCK_STATE, VCONFKEY_IDLE_UNLOCK); - } -} - -static int lockd_app_dead_cb(int pid, void *data) -{ - LOCKD_DBG("app dead cb call! (pid : %d)", pid); - - struct lockd_data *lockd = (struct lockd_data *)data; - - if (pid == lockd->lock_app_pid) { - LOCKD_DBG("lock app(pid:%d) is destroyed.", pid); - - lockd_unlock_lockscreen(lockd); - } - - menu_daemon_check_dead_signal(pid); - - return 0; - -} - -static Eina_Bool lockd_app_create_cb(void *data, int type, void *event) -{ - struct lockd_data *lockd = (struct lockd_data *)data; - - if (lockd == NULL) { - return ECORE_CALLBACK_PASS_ON; - } - LOCKD_DBG("%s, %d", __func__, __LINE__); - if (lockd_window_set_window_effect(lockd->lockw, lockd->lock_app_pid, - event) == EINA_TRUE) { - if(lockd_window_set_window_property(lockd->lockw, lockd->lock_app_pid, - event) == EINA_FALSE) { - LOCKD_ERR("window is not matched..!!"); - } - } - return ECORE_CALLBACK_PASS_ON; -} - -static Eina_Bool lockd_app_show_cb(void *data, int type, void *event) -{ - struct lockd_data *lockd = (struct lockd_data *)data; - - if (lockd == NULL) { - return EINA_TRUE; - } - LOCKD_DBG("%s, %d", __func__, __LINE__); - if (lockd_window_set_window_property(lockd->lockw, lockd->lock_app_pid, - event)) { - ecore_idler_add(lockd_set_lock_state_cb, NULL); - } - return EINA_FALSE; -} - -static int lockd_launch_app_lockscreen(struct lockd_data *lockd) -{ - LOCKD_DBG("launch app lock screen"); - - int call_state = -1, phlock_state = -1, factory_mode = -1, test_mode = -1; - int r = 0; - - WRITE_FILE_LOG("%s", "Launch lockscreen in starter"); - - if (lockd_process_mgr_check_lock(lockd->lock_app_pid) == TRUE) { - LOCKD_DBG("Lock Screen App is already running."); - r = lockd_process_mgr_restart_lock(lockd->lock_type); - if (r < 0) { - LOCKD_DBG("Restarting Lock Screen App is fail [%d].", r); - usleep(LAUNCH_INTERVAL); - } else { - LOCKD_DBG("Restarting Lock Screen App, pid[%d].", r); - return 1; - } - } - - vconf_get_int(VCONFKEY_CALL_STATE, &call_state); - if (call_state != VCONFKEY_CALL_OFF) { - LOCKD_DBG - ("Current call state(%d) does not allow to launch lock screen.", - call_state); - return 0; - } - - lockd->lock_app_pid = - lockd_process_mgr_start_lock(lockd, lockd_app_dead_cb, - lockd->lock_type); - if (lockd->lock_app_pid < 0) - return 0; - lockd_window_mgr_finish_lock(lockd->lockw); - lockd_window_mgr_ready_lock(lockd, lockd->lockw, lockd_app_create_cb, - lockd_app_show_cb); - - return 1; -} - -static void lockd_unlock_lockscreen(struct lockd_data *lockd) -{ - LOCKD_DBG("unlock lock screen"); - lockd->lock_app_pid = 0; - - vconf_set_int(VCONFKEY_IDLE_LOCK_STATE, VCONFKEY_IDLE_UNLOCK); - lockd_window_mgr_finish_lock(lockd->lockw); -} - -inline static void lockd_set_sock_option(int fd, int cli) -{ - int size; - int ret; - struct timeval tv = { 1, 200 * 1000 }; - - size = PHLOCK_SOCK_MAXBUFF; - ret = setsockopt(fd, SOL_SOCKET, SO_SNDBUF, &size, sizeof(size)); - if(ret != 0) - return; - ret = setsockopt(fd, SOL_SOCKET, SO_RCVBUF, &size, sizeof(size)); - if(ret != 0) - return; - if (cli) { - ret = setsockopt(fd, SOL_SOCKET, SO_RCVTIMEO, &tv, sizeof(tv)); - if(ret != 0) - return; - } -} - -static int lockd_create_sock(void) -{ - struct sockaddr_un saddr; - int fd; - - fd = socket(AF_UNIX, SOCK_STREAM, 0); - if (fd < 0) { - if (errno == EINVAL) { - fd = socket(AF_UNIX, SOCK_STREAM, 0); - if (fd < 0) { - LOCKD_DBG - ("second chance - socket create error"); - return -1; - } - } else { - LOCKD_DBG("socket error"); - return -1; - } - } - - bzero(&saddr, sizeof(saddr)); - saddr.sun_family = AF_UNIX; - - strncpy(saddr.sun_path, PHLOCK_SOCK_PREFIX, strlen(PHLOCK_SOCK_PREFIX)); - saddr.sun_path[strlen(PHLOCK_SOCK_PREFIX)] = 0; - - unlink(saddr.sun_path); - - if (bind(fd, (struct sockaddr *)&saddr, sizeof(saddr)) < 0) { - LOCKD_DBG("bind error"); - close(fd); - return -1; - } - - if (chmod(saddr.sun_path, (S_IRWXU | S_IRWXG | S_IRWXO)) < 0) { - LOCKD_DBG("failed to change the socket permission"); - close(fd); - return -1; - } - - lockd_set_sock_option(fd, 0); - - if (listen(fd, 10) == -1) { - LOCKD_DBG("listen error"); - close(fd); - return -1; - } - - return fd; -} - -static gboolean lockd_glib_check(GSource * src) -{ - GSList *fd_list; - GPollFD *tmp; - - fd_list = src->poll_fds; - do { - tmp = (GPollFD *) fd_list->data; - if ((tmp->revents & (POLLIN | POLLPRI))) - return TRUE; - fd_list = fd_list->next; - } while (fd_list); - - return FALSE; -} - -static char *lockd_read_cmdline_from_proc(int pid) -{ - int memsize = 32; - char path[32]; - char *cmdline = NULL, *tempptr = NULL; - FILE *fp = NULL; - - snprintf(path, sizeof(path), "/proc/%d/cmdline", pid); - - fp = fopen(path, "r"); - if (fp == NULL) { - LOCKD_DBG("Cannot open cmdline on pid[%d]", pid); - return NULL; - } - - cmdline = malloc(32); - if (cmdline == NULL) { - LOCKD_DBG("%s", "Out of memory"); - fclose(fp); - return NULL; - } - - bzero(cmdline, memsize); - if (fgets(cmdline, 32, fp) == NULL) { - LOCKD_DBG("%s", "Cannot read cmdline"); - free(cmdline); - fclose(fp); - return NULL; - } - - while (cmdline[memsize - 2] != 0) { - cmdline[memsize - 1] = (char)fgetc(fp); - tempptr = realloc(cmdline, memsize + 32); - if (tempptr == NULL) { - fclose(fp); - LOCKD_DBG("%s", "Out of memory"); - return NULL; - } - cmdline = tempptr; - bzero(cmdline + memsize, 32); - fgets(cmdline + memsize, 32, fp); - memsize += 32; - } - - if (fp != NULL) - fclose(fp); - return cmdline; -} - -static int lockd_sock_handler(void *data) -{ - int cl; - int len; - int sun_size; - int clifd = -1; - char cmd[PHLOCK_SOCK_MAXBUFF]; - char *cmdline = NULL; - int val = -1; - int fd = -1; - int recovery_state = -1; - GPollFD *gpollfd; - - struct ucred cr; - struct sockaddr_un lockd_addr; - struct lockd_data *lockd = (struct lockd_data *)data; - - if ((lockd == NULL) || (lockd->gpollfd == NULL)) { - LOCKD_DBG("lockd->gpollfd is NULL"); - return -1; - } - gpollfd = (GPollFD *)lockd->gpollfd; - fd = gpollfd->fd; - - cl = sizeof(cr); - sun_size = sizeof(struct sockaddr_un); - - if ((clifd = - accept(fd, (struct sockaddr *)&lockd_addr, - (socklen_t *) & sun_size)) == -1) { - if (errno != EINTR) - LOCKD_DBG("accept error"); - return -1; - } - - if (getsockopt(clifd, SOL_SOCKET, SO_PEERCRED, &cr, (socklen_t *) & cl) - < 0) { - LOCKD_DBG("peer information error"); - close(clifd); - return -1; - } - LOCKD_DBG("Peer's pid=%d, uid=%d, gid=%d\n", cr.pid, cr.uid, cr.gid); - - memset(cmd, 0, PHLOCK_SOCK_MAXBUFF); - - lockd_set_sock_option(clifd, 1); - - len = recv(clifd, cmd, PHLOCK_SOCK_MAXBUFF, 0); - cmd[PHLOCK_SOCK_MAXBUFF - 1] = '\0'; - - if (len != strlen(cmd)) { - LOCKD_DBG("recv error %d %d", len, strlen(cmd)); - close(clifd); - return -1; - } - - LOCKD_DBG("cmd %s", cmd); - - cmdline = lockd_read_cmdline_from_proc(cr.pid); - if (cmdline == NULL) { - LOCKD_DBG("Error on opening /proc/%d/cmdline", cr.pid); - close(clifd); - return -1; - } - - LOCKD_DBG("/proc/%d/cmdline : %s", cr.pid, cmdline); - LOCKD_DBG("phone_lock_pid : %d vs cr.pid : %d", phone_lock_pid, cr.pid); - - if ((!strncmp(cmdline, PHLOCK_APP_CMDLINE, strlen(cmdline))) - && (!strncmp(cmd, PHLOCK_UNLOCK_CMD, strlen(cmd)))) { - LOCKD_DBG("cmd is %s\n", PHLOCK_UNLOCK_CMD); - - if (phone_lock_pid == cr.pid) { - LOCKD_DBG("pid [%d] %s is verified, unlock..!!\n", cr.pid, - cmdline); - lockd_process_mgr_terminate_phone_lock(phone_lock_pid); - phone_lock_pid = 0; - vconf_set_bool(VCONFKEY_LOCKSCREEN_PHONE_LOCK_VERIFICATION, TRUE); - } - } else if (!strncmp(cmd, PHLOCK_LAUNCH_CMD, strlen(cmd))) { - LOCKD_DBG("cmd is %s\n", PHLOCK_LAUNCH_CMD); - if (_lockd_get_lock_type() == 1) { - lockd->lock_type = 1; - lockd_launch_app_lockscreen(lockd); - } - } - - if(cmdline != NULL) { - free(cmdline); - cmdline = NULL; - } - - close(clifd); - return 0; -} - -static gboolean lockd_glib_handler(gpointer data) -{ - if (lockd_sock_handler(data) < 0) { - LOCKD_DBG("lockd_sock_handler is failed..!!"); - } - return TRUE; -} - -static gboolean lockd_glib_dispatch(GSource * src, GSourceFunc callback, - gpointer data) -{ - callback(data); - return TRUE; -} - -static gboolean lockd_glib_prepare(GSource * src, gint * timeout) -{ - return FALSE; -} - -static GSourceFuncs funcs = { - .prepare = lockd_glib_prepare, - .check = lockd_glib_check, - .dispatch = lockd_glib_dispatch, - .finalize = NULL -}; - -static int lockd_init_sock(struct lockd_data *lockd) -{ - int fd; - GPollFD *gpollfd; - GSource *src; - int ret; - - fd = lockd_create_sock(); - if (fd < 0) { - LOCKD_DBG("lock daemon create sock failed..!!"); - } - - src = g_source_new(&funcs, sizeof(GSource)); - - gpollfd = (GPollFD *) g_malloc(sizeof(GPollFD)); - gpollfd->events = POLLIN; - gpollfd->fd = fd; - - lockd->gpollfd = gpollfd; - - g_source_add_poll(src, lockd->gpollfd); - g_source_set_callback(src, (GSourceFunc) lockd_glib_handler, - (gpointer) lockd, NULL); - g_source_set_priority(src, G_PRIORITY_LOW); - - ret = g_source_attach(src, NULL); - if (ret == 0) - return -1; - - g_source_unref(src); - - return 0; -} - -static void lockd_init_vconf(struct lockd_data *lockd) -{ - int val = -1; - - if (vconf_notify_key_changed - (VCONFKEY_PM_STATE, _lockd_notify_pm_state_cb, lockd) != 0) { - LOCKD_ERR("Fail vconf_notify_key_changed : VCONFKEY_PM_STATE"); - } - - if (vconf_notify_key_changed - (VCONFKEY_LOCKSCREEN_PHONE_LOCK_VERIFICATION, - _lockd_notify_phone_lock_verification_cb, lockd) != 0) { - if (vconf_get_bool(VCONFKEY_LOCKSCREEN_PHONE_LOCK_VERIFICATION, &val) < 0) { - LOCKD_ERR - ("Cannot get %s", VCONFKEY_LOCKSCREEN_PHONE_LOCK_VERIFICATION); - vconf_set_bool(VCONFKEY_LOCKSCREEN_PHONE_LOCK_VERIFICATION, 0); - if (vconf_notify_key_changed - (VCONFKEY_LOCKSCREEN_PHONE_LOCK_VERIFICATION, - _lockd_notify_phone_lock_verification_cb, - lockd) != 0) { - LOCKD_ERR - ("Fail vconf_notify_key_changed : %s", VCONFKEY_LOCKSCREEN_PHONE_LOCK_VERIFICATION); - } - } else { - LOCKD_ERR - ("Fail vconf_notify_key_changed : %s", VCONFKEY_LOCKSCREEN_PHONE_LOCK_VERIFICATION); - } - } - - if (vconf_notify_key_changed - (VCONFKEY_IDLE_LOCK_STATE, - _lockd_notify_lock_state_cb, - lockd) != 0) { - LOCKD_ERR - ("[Error] vconf notify : lock state"); - } -} - -static void lockd_start_lock_daemon(void *data) -{ - struct lockd_data *lockd = NULL; - int r = 0; - - lockd = (struct lockd_data *)data; - - if (!lockd) { - return; - } - - LOCKD_DBG("%s, %d", __func__, __LINE__); - - lockd_init_vconf(lockd); - - r = lockd_init_sock(lockd); - if (r < 0) { - LOCKD_DBG("lockd init socket failed: %d", r); - } - - lockd->lockw = lockd_window_init(); - - aul_listen_app_dead_signal(lockd_app_dead_cb, data); - - LOCKD_DBG("%s, %d", __func__, __LINE__); -} - -int start_lock_daemon(int launch_lock) -{ - struct lockd_data *lockd = NULL; - int val = -1; - int recovery_state = -1; - int first_boot = 0; - int lock_type = 0; - int ret = 0; - - LOCKD_DBG("%s, %d", __func__, __LINE__); - - lockd = (struct lockd_data *)malloc(sizeof(struct lockd_data)); - memset(lockd, 0x0, sizeof(struct lockd_data)); - lockd_start_lock_daemon(lockd); - - if (launch_lock == FALSE) { - LOCKD_DBG("Don't launch lockscreen.."); - return 0; - } - - if (vconf_get_bool(VCONFKEY_PWLOCK_FIRST_BOOT, &first_boot) < 0) { - LOCKD_ERR("Cannot get %s vconfkey", VCONFKEY_PWLOCK_FIRST_BOOT); - } else if (first_boot == 1) { - LOCKD_DBG("first_boot : %d \n", first_boot); - return 0; - } - - lock_type = _lockd_get_lock_type(); - if (lock_type == 1) { - lockd->request_recovery = FALSE; - } - lockd->lock_type = lock_type; - ret = lockd_launch_app_lockscreen(lockd); - return ret; -} diff --git a/src/lockd-debug.c b/src/lockd-debug.c deleted file mode 100755 index 72c7227..0000000 --- a/src/lockd-debug.c +++ /dev/null @@ -1,94 +0,0 @@ - /* - * Copyright 2012 Samsung Electronics Co., Ltd - * - * Licensed under the Flora License, Version 1.1 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://floralicense.org/license/ - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - - - -#include -#include -#include -#include -#include -#include -#include -#include - -#include "lockd-debug.h" - -#define LINEMAX 256 -#define MAXFILELEN 1048576 -#define LOGFILE "/tmp/starter.log" - -void lockd_log_t(char *fmt, ...) -{ - va_list ap; - FILE *fd = 0; - char buf[LINEMAX] = { 0, }; - char debugString[LINEMAX] = { 0, }; - - va_start(ap, fmt); - vsnprintf(buf, sizeof(buf), fmt, ap); - va_end(ap); - int fileLen = 0; - struct tm local_t; - time_t current_time = 0; - bzero((char *)&debugString, LINEMAX); - time(¤t_time); - gmtime_r(¤t_time, &local_t); - int len = snprintf(debugString, sizeof(debugString), - "[%d-%02d-%02d, %02d:%02d:%02d]: ", - local_t.tm_year + 1900, local_t.tm_mon + 1, - local_t.tm_mday, local_t.tm_hour, local_t.tm_min, - local_t.tm_sec); - if (len == -1) { - return; - } else { - debugString[len] = '\0'; - } - len = g_strlcat(debugString, buf, LINEMAX); - if (len >= LINEMAX) { - return; - } else { - debugString[len] = '\n'; - } - if ((fd = fopen(LOGFILE, "at+")) == NULL) { - LOCKD_DBG("File fopen fail for writing Pwlock information"); - } else { - int pid = -1; - if (fwrite(debugString, strlen(debugString), 1, fd) < 1) { - LOCKD_DBG - ("File fwrite fail for writing Pwlock information"); - fclose(fd); - if ((pid = fork()) < 0) { - } else if (pid == 0) { - execl("/bin/rm", "rm", "-f", LOGFILE, - (char *)0); - } - } else { - fseek(fd, 0l, SEEK_END); - fileLen = ftell(fd); - if (fileLen > MAXFILELEN) { - fclose(fd); - if ((pid = fork()) < 0) { - return; - } else if (pid == 0) { - execl("/bin/rm", "rm", "-f", LOGFILE, - (char *)0); - } - } else - fclose(fd); - } - } -} diff --git a/src/lockd-process-mgr.c b/src/lockd-process-mgr.c deleted file mode 100755 index f9bc863..0000000 --- a/src/lockd-process-mgr.c +++ /dev/null @@ -1,176 +0,0 @@ - /* - * Copyright 2012 Samsung Electronics Co., Ltd - * - * Licensed under the Flora License, Version 1.1 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://floralicense.org/license/ - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - - - -#include -#include - -#include - -#include "lockd-debug.h" -#include "lockd-process-mgr.h" -#include "starter-vconf.h" - -#define LOCKD_DEFAULT_PKG_NAME "org.tizen.lockscreen" -#define LOCKD_DEFAULT_LOCKSCREEN "org.tizen.lockscreen" -#define LOCKD_PHONE_LOCK_PKG_NAME "org.tizen.lockscreen" -#define RETRY_MAXCOUNT 30 -#define RELAUNCH_INTERVAL 100*1000 - -static char *_lockd_process_mgr_get_pkgname(void) -{ - char *pkgname = NULL; - - pkgname = vconf_get_str(VCONFKEY_SETAPPL_3RD_LOCK_PKG_NAME_STR); - - LOCKD_DBG("pkg name is %s", pkgname); - - if (pkgname == NULL) { - return LOCKD_DEFAULT_PKG_NAME; - } - - return pkgname; -} - -int lockd_process_mgr_restart_lock(int phone_lock_state) -{ - char *lock_app_path = NULL; - int pid; - - lock_app_path = _lockd_process_mgr_get_pkgname(); - pid = aul_launch_app(lock_app_path, NULL); - - LOCKD_DBG("Reset : aul_launch_app(%s, NULL), pid = %d", lock_app_path, - pid); - - return pid; -} - -int lockd_process_mgr_start_lock(void *data, int (*dead_cb) (int, void *), - int phone_lock_state) -{ - char *lock_app_path = NULL; - int pid; - int ret; - - lock_app_path = _lockd_process_mgr_get_pkgname(); - - int i; - for (i=0; i0) { - return pid; - } - } else { - return pid; - } - } - LOCKD_DBG("Relaunch lock application failed..!!"); - return pid; -} - -int lockd_process_mgr_start_normal_lock(void *data, int (*dead_cb) (int, void *)) -{ - int pid = 0; - - int i; - for (i=0; i0) { - return pid; - } - } else { - return pid; - } - } - LOCKD_DBG("Relaunch lock application failed..!!"); - return pid; -} - -int lockd_process_mgr_start_phone_lock(void) -{ - int pid = 0; - - pid = aul_launch_app(LOCKD_PHONE_LOCK_PKG_NAME, NULL); - LOCKD_DBG("aul_launch_app(%s, b), pid = %d", LOCKD_PHONE_LOCK_PKG_NAME, - pid); - return pid; -} - -void lockd_process_mgr_terminate_lock_app(int lock_app_pid, int state) -{ - LOCKD_DBG - ("lockd_process_mgr_terminate_lock_app, state:%d\n", - state); - - if (state == 1) { - if (lock_app_pid != 0) { - LOCKD_DBG("Terminate Lock app(pid : %d)", lock_app_pid); - aul_terminate_pid(lock_app_pid); - } - } -} - -void lockd_process_mgr_terminate_phone_lock(int phone_lock_pid) -{ - LOCKD_DBG("Terminate Phone Lock(pid : %d)", phone_lock_pid); - aul_terminate_pid(phone_lock_pid); -} - -int lockd_process_mgr_check_lock(int pid) -{ - char buf[128]; - LOCKD_DBG("%s, %d", __func__, __LINE__); - - if (aul_app_get_pkgname_bypid(pid, buf, sizeof(buf)) < 0) { - LOCKD_DBG("no such pkg by pid %d\n", pid); - } else { - LOCKD_DBG("app pkgname = %s, pid = %d\n", buf, pid); - if (aul_app_is_running(buf) == TRUE) { - LOCKD_DBG("%s [pid = %d] is running\n", buf, pid); - return TRUE; - } else { - LOCKD_DBG("[pid = %d] is exist but %s is not running\n", - pid, buf); - } - } - return FALSE; -} diff --git a/src/lockd-window-mgr.c b/src/lockd-window-mgr.c deleted file mode 100755 index bf36ffe..0000000 --- a/src/lockd-window-mgr.c +++ /dev/null @@ -1,303 +0,0 @@ - /* - * Copyright 2012 Samsung Electronics Co., Ltd - * - * Licensed under the Flora License, Version 1.1 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://floralicense.org/license/ - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - - - -#include - -#ifndef WAYLAND -#include -#include -#endif - -#include -#include -#include -#include -#include - -#include "lockd-debug.h" -#include "lockd-window-mgr.h" - -#define PACKAGE "starter" -#define SOS_KEY_COUNT 3 -#define SOS_KEY_INTERVAL 0.5 - -struct _lockw_data { - Evas_Object *main_win; - Evas_Object *main_layout; - - Ecore_X_Window lock_x_window; - - Ecore_Event_Handler *h_keydown; - Ecore_Event_Handler *h_wincreate; - Ecore_Event_Handler *h_winshow; - - Ecore_Timer *pTimerId; - int volume_key_cnt; - - int phone_lock_state; - int phone_lock_app_pid; -}; - -static Eina_Bool _lockd_window_key_down_cb(void *data, int type, void *event) -{ - Ecore_Event_Key *ev = event; - - LOCKD_DBG("Key Down CB : %s", ev->keyname); - - return ECORE_CALLBACK_PASS_ON; -} - -#ifndef WAYLAND -static int -_lockd_window_check_validate_rect(Ecore_X_Display * dpy, Ecore_X_Window window) -{ - Ecore_X_Window root; - Ecore_X_Window child; - - int rel_x = 0; - int rel_y = 0; - int abs_x = 0; - int abs_y = 0; - - unsigned int width = 0; - unsigned int height = 0; - unsigned int border = 0; - unsigned int depth = 0; - - Eina_Bool ret = FALSE; - - root = ecore_x_window_root_first_get(); - - if (XGetGeometry - (dpy, window, &root, &rel_x, &rel_y, &width, &height, &border, - &depth)) { - if (XTranslateCoordinates - (dpy, window, root, 0, 0, &abs_x, &abs_y, &child)) { - if ((abs_x - border) >= 480 || (abs_y - border) >= 800 - || (width + abs_x) <= 0 || (height + abs_y) <= 0) { - ret = FALSE; - } else { - ret = TRUE; - } - } - } - - return ret; -} -#endif - -#ifndef WAYLAND -static Window get_user_created_window(Window win) -{ - Atom type_ret = 0; - int ret, size_ret = 0; - unsigned long num_ret = 0, bytes = 0; - unsigned char *prop_ret = NULL; - unsigned int xid; - Atom prop_user_created_win; - - prop_user_created_win = - XInternAtom(ecore_x_display_get(), "_E_USER_CREATED_WINDOW", False); - - ret = - XGetWindowProperty(ecore_x_display_get(), win, - prop_user_created_win, 0L, 1L, False, 0, - &type_ret, &size_ret, &num_ret, &bytes, - &prop_ret); - - if (ret != Success) { - if (prop_ret) - XFree((void *)prop_ret); - return win; - } else if (!prop_ret) { - return win; - } - - memcpy(&xid, prop_ret, sizeof(unsigned int)); - XFree((void *)prop_ret); - - return xid; - -} -#endif - -Eina_Bool -lockd_window_set_window_property(lockw_data * data, int lock_app_pid, - void *event) -{ -#ifndef WAYLAND - Ecore_X_Event_Window_Create *e = event; - Ecore_X_Window user_window = 0; - lockw_data *lockw = (lockw_data *) data; - int pid = 0; - - if (!lockw) { - return EINA_FALSE; - } - LOCKD_DBG("%s, %d", __func__, __LINE__); - - user_window = get_user_created_window((Window) (e->win)); - - int ret = ecore_x_netwm_pid_get(user_window, &pid); - if(ret != 1) { - return EINA_FALSE; - } - - LOCKD_DBG("Check PID(%d) window. (lock_app_pid : %d)\n", pid, - lock_app_pid); - - if (lock_app_pid == pid) { - if (_lockd_window_check_validate_rect - (ecore_x_display_get(), user_window) == TRUE) { - lockw->lock_x_window = user_window; - LOCKD_DBG - ("This is lock application. Set window property. win id : %x", - user_window); - - ecore_x_icccm_name_class_set(user_window, "LOCK_SCREEN", - "LOCK_SCREEN"); - ecore_x_netwm_window_type_set(user_window, - ECORE_X_WINDOW_TYPE_NOTIFICATION); - utilx_set_system_notification_level(ecore_x_display_get - (), user_window, - UTILX_NOTIFICATION_LEVEL_NORMAL); - utilx_set_window_opaque_state(ecore_x_display_get(), - user_window, - UTILX_OPAQUE_STATE_ON); - return EINA_TRUE; - } - } -#endif - - return EINA_FALSE; -} - -Eina_Bool -lockd_window_set_window_effect(lockw_data * data, int lock_app_pid, void *event) -{ -#ifndef WAYLAND - Ecore_X_Event_Window_Create *e = event; - Ecore_X_Window user_window = 0; - int pid = 0; - - user_window = get_user_created_window((Window) (e->win)); - int ret = ecore_x_netwm_pid_get(user_window, &pid); - if(ret != 1) { - return EINA_FALSE; - } - - LOCKD_DBG("%s, %d", __func__, __LINE__); - - LOCKD_DBG("PID(%d) window created. (lock_app_pid : %d)\n", pid, - lock_app_pid); - - if (lock_app_pid == pid) { - if (_lockd_window_check_validate_rect - (ecore_x_display_get(), user_window) == TRUE) { - LOCKD_DBG - ("This is lock application. Disable window effect. win id : %x\n", - user_window); - -#if 0 //window effect is not available now - utilx_set_window_effect_state(ecore_x_display_get(), - user_window, 0); -#endif - return EINA_TRUE; - } - } -#endif - - return EINA_FALSE; -} - -void lockd_window_set_phonelock_pid(lockw_data * data, int phone_lock_pid) -{ - lockw_data *lockw = (lockw_data *) data; - - if (!lockw) { - return; - } - LOCKD_DBG("%s, %d", __func__, __LINE__); - lockw->phone_lock_app_pid = phone_lock_pid; - LOCKD_DBG("%s, %d, lockw->phone_lock_app_pid = %d", __func__, __LINE__, - lockw->phone_lock_app_pid); -} - -void -lockd_window_mgr_ready_lock(void *data, lockw_data * lockw, - Eina_Bool(*create_cb) (void *, int, void *), - Eina_Bool(*show_cb) (void *, int, void *)) -{ - if (lockw == NULL) { - LOCKD_ERR("lockw is NULL."); - return; - } -#ifndef WAYLAND - lockw->h_wincreate = - ecore_event_handler_add(ECORE_X_EVENT_WINDOW_CREATE, create_cb, - data); - lockw->h_winshow = - ecore_event_handler_add(ECORE_X_EVENT_WINDOW_SHOW, show_cb, data); - - lockw->volume_key_cnt = 0; - - lockw->h_keydown = - ecore_event_handler_add(ECORE_EVENT_KEY_DOWN, - _lockd_window_key_down_cb, lockw); -#endif -} - -void lockd_window_mgr_finish_lock(lockw_data * lockw) -{ -#ifndef WAYLAND - Ecore_X_Window xwin; - - if (lockw == NULL) { - LOCKD_ERR("lockw is NULL."); - return; - } - if (lockw->h_wincreate != NULL) { - ecore_event_handler_del(lockw->h_wincreate); - lockw->h_wincreate = NULL; - } - if (lockw->h_winshow != NULL) { - ecore_event_handler_del(lockw->h_winshow); - lockw->h_winshow = NULL; - } - - ecore_x_pointer_ungrab(); - - if (lockw->h_keydown != NULL) { - ecore_event_handler_del(lockw->h_keydown); - lockw->h_keydown = NULL; - } -#endif -} - -lockw_data *lockd_window_init(void) -{ - lockw_data *lockw = NULL; - long pid; - - lockw = (lockw_data *) malloc(sizeof(lockw_data)); - memset(lockw, 0x0, sizeof(lockw_data)); - - pid = getpid(); - - return lockw; -} diff --git a/src/menu_daemon.c b/src/menu_daemon.c deleted file mode 100755 index 821e373..0000000 --- a/src/menu_daemon.c +++ /dev/null @@ -1,418 +0,0 @@ - /* - * Copyright 2012 Samsung Electronics Co., Ltd - * - * Licensed under the Flora License, Version 1.1 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://floralicense.org/license/ - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - - - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "hw_key.h" -#include "pkg_event.h" -#include "util.h" -#include "xmonitor.h" - - -int errno; - - -#define QUERY_UPDATE_NAME "UPDATE app_info SET name='%s' where package='%s';" -#define SAT_DESKTOP_FILE "/opt/share/applications/org.tizen.sat-ui.desktop" -#define RELAUNCH_INTERVAL 100*1000 -#define RETRY_MAXCOUNT 30 - -#define DEAD_TIMER_SEC 2.0 -#define DEAD_TIMER_COUNT_MAX 2 -#define MENU_SCREEN_PKG_NAME "org.tizen.menu-screen" - -static struct info { - pid_t home_pid; - pid_t volume_pid; - int power_off; - - int dead_count; - Ecore_Timer *dead_timer; -} s_info = { - .home_pid = -1, - .volume_pid = -1, - .power_off = 0, - - .dead_count = 0, - .dead_timer = NULL, -}; - - - -#define RETRY_COUNT 5 -int menu_daemon_open_app(const char *pkgname) -{ - register int i; - int r = AUL_R_ETIMEOUT; - for (i = 0; AUL_R_ETIMEOUT == r && i < RETRY_COUNT; i ++) { - r = aul_open_app(pkgname); - if (0 <= r) return r; - else { - _D("aul_open_app error(%d)", r); - _F("cannot open an app(%s) by %d", pkgname, r); - } - usleep(500000); - } - - return r; -} - - - -int menu_daemon_launch_app(const char *pkgname, bundle *b) -{ - register int i; - int r = AUL_R_ETIMEOUT; - for (i = 0; AUL_R_ETIMEOUT == r && i < RETRY_COUNT; i ++) { - r = aul_launch_app(pkgname, b); - if (0 <= r) return r; - else { - _D("aul_launch_app error(%d)", r); - _F("cannot launch an app(%s) by %d", pkgname, r); - } - usleep(500000); - } - - return r; -} - - - -bool menu_daemon_is_homescreen(pid_t pid) -{ - if (s_info.home_pid == pid) return true; - return false; -} - - - -inline char *menu_daemon_get_selected_pkgname(void) -{ - char *pkgname = NULL; - - pkgname = vconf_get_str(VCONFKEY_SETAPPL_SELECTED_PACKAGE_NAME); - retv_if(NULL == pkgname, NULL); - - return pkgname; -} - - - -static bool _exist_package(char *pkgid) -{ - int ret = 0; - pkgmgrinfo_pkginfo_h handle = NULL; - - ret = pkgmgrinfo_pkginfo_get_pkginfo(pkgid, &handle); - if (PMINFO_R_OK != ret || NULL == handle) { - _D("%s doesn't exist in this binary", pkgid); - return false; - } - - pkgmgrinfo_pkginfo_destroy_pkginfo(handle); - - return true; -} - - - -inline void menu_daemon_open_homescreen(const char *pkgname) -{ - char *homescreen = NULL; - char *tmp = NULL; - - system("echo -e '[${_G}menu-daemon launches home-screen${C_}]' > /dev/kmsg"); - - if (NULL == pkgname) { - tmp = menu_daemon_get_selected_pkgname(); - ret_if(NULL == tmp); - homescreen = tmp; - } else { - homescreen = (char *) pkgname; - } - - syspopup_destroy_all(); - - int ret; - ret = menu_daemon_open_app(homescreen); - _D("can%s launch %s now. (%d)", ret < 0 ? "not" : "", homescreen, ret); - if (ret < 0 && strcmp(homescreen, HOME_SCREEN_PKG_NAME) && _exist_package(HOME_SCREEN_PKG_NAME)) { - _E("cannot launch package %s", homescreen); - - if (0 != vconf_set_str(VCONFKEY_SETAPPL_SELECTED_PACKAGE_NAME, HOME_SCREEN_PKG_NAME)) { - _E("Cannot set value(%s) into key(%s)", VCONFKEY_SETAPPL_SELECTED_PACKAGE_NAME, HOME_SCREEN_PKG_NAME); - } - - while (AUL_R_ETIMEOUT == ret) { - _E("Failed to open a default home, %s", HOME_SCREEN_PKG_NAME); - ret = menu_daemon_open_app(HOME_SCREEN_PKG_NAME); - } - } - - if (ret < 0) { - _E("Critical! Starter cannot launch anymore[%d]", ret); - _F("Critical! Starter cannot launch anymore[%d]", ret); - } - - s_info.home_pid = ret; - if (ret > 0) { - if (-1 == sysconf_set_mempolicy_bypid(ret, OOM_IGNORE)) { - _E("Cannot set the memory policy for Home-screen(%d)", ret); - } else { - _D("Set the memory policy for Home-screen(%d)", ret); - } - } - - if (tmp) free(tmp); -} - - - -static void _show_cb(keynode_t* node, void *data) -{ - int seq; - - _D("[MENU_DAEMON] _show_cb is invoked"); - - if (node) { - seq = vconf_keynode_get_int(node); - } else { - if (vconf_get_int(VCONFKEY_STARTER_SEQUENCE, &seq) < 0) { - _E("Failed to get sequence info"); - return; - } - } - - switch (seq) { - case 0: - if (s_info.home_pid > 0) { - int pid; - _D("pid[%d] is terminated.", s_info.home_pid); - pid = s_info.home_pid; - s_info.home_pid = -1; - - if (aul_terminate_pid(pid) != AUL_R_OK) - _E("Failed to terminate %d", s_info.home_pid); - } - break; - case 1: - menu_daemon_open_homescreen(NULL); - break; - default: - _E("False sequence [%d]", seq); - break; - } - - return; -} - - - -static void _pkg_changed(keynode_t* node, void *data) -{ - char *pkgname; - int seq; - - if (vconf_get_int(VCONFKEY_STARTER_SEQUENCE, &seq) < 0) { - _E("Do nothing, there is no sequence info yet"); - return; - } - - if (seq < 1) { - _E("Sequence is not ready yet, do nothing"); - return; - } - - _D("_pkg_changed is invoked"); - - pkgname = menu_daemon_get_selected_pkgname(); - if (!pkgname) - return; - - _D("pkg_name : %s", pkgname); - - if (s_info.home_pid > 0) { - char old_pkgname[256]; - - if (aul_app_get_pkgname_bypid(s_info.home_pid, old_pkgname, sizeof(old_pkgname)) == AUL_R_OK) { - if (!strcmp(pkgname, old_pkgname)) { - _D("Package is changed but same package is selected"); - free(pkgname); - return; - } - } - - if (AUL_R_OK != aul_terminate_pid(s_info.home_pid)) - _D("Failed to terminate pid %d", s_info.home_pid); - - s_info.dead_count = 0; - if (s_info.dead_timer) { - ecore_timer_del(s_info.dead_timer); - s_info.dead_timer = NULL; - } - } else { - /* If there is no running home */ - menu_daemon_open_homescreen(pkgname); - } - - free(pkgname); - return; -} - - - -static void _launch_volume(void) -{ - int pid; - int i; - _D("_launch_volume"); - - for (i=0; i= DEAD_TIMER_COUNT_MAX) { - _D("Change homescreen package to default"); - if (vconf_set_str(VCONFKEY_SETAPPL_SELECTED_PACKAGE_NAME, MENU_SCREEN_PKG_NAME) != 0) { - _D("cannot set the vconfkey as : %s", MENU_SCREEN_PKG_NAME); - return ECORE_CALLBACK_CANCEL; - } - } - - s_info.dead_timer = NULL; - s_info.dead_count = 0; - - return ECORE_CALLBACK_CANCEL; -} - -int menu_daemon_check_dead_signal(int pid) -{ - if (s_info.power_off) { - _D("Power off. ignore dead cb\n"); - return 0; - } - - _D("Process %d is termianted", pid); - - if (pid < 0) - return 0; - - if (pid == s_info.home_pid) { - s_info.dead_count++; - _D("home dead count : %d", s_info.dead_count); - - char *pkgname = NULL; - pkgname = menu_daemon_get_selected_pkgname(); - retv_if(NULL == pkgname, 0); - - if (!s_info.dead_timer) { - _D("Add dead timer"); - s_info.dead_timer = ecore_timer_add(DEAD_TIMER_SEC, _dead_timer_cb, (void *)pkgname); - } - - _D("pkg_name : %s", pkgname); - menu_daemon_open_homescreen(pkgname); - free(pkgname); - } else if (pid == s_info.volume_pid) { - _launch_volume(); - } else { - _D("Unknown process, ignore it (pid %d, home pid %d)", - pid, s_info.home_pid); - } - - - return 0; -} - - - -void menu_daemon_init(void *data) -{ - _D( "[MENU_DAEMON]menu_daemon_init is invoked"); - - aul_launch_init(NULL,NULL); - - create_key_window(); - if (xmonitor_init() < 0) _E("cannot init xmonitor"); - - pkg_event_init(); - _launch_volume(); - - if (unlink(SAT_DESKTOP_FILE) != 0) - _E("cannot remove sat-ui desktop."); - - if (vconf_notify_key_changed(VCONFKEY_SETAPPL_SELECTED_PACKAGE_NAME, _pkg_changed, NULL) < 0) - _E("Failed to add the callback for package change event"); - - if (vconf_notify_key_changed(VCONFKEY_STARTER_SEQUENCE, _show_cb, NULL) < 0) - _E("Failed to add the callback for show event"); - - _pkg_changed(NULL, NULL); - vconf_set_int(VCONFKEY_IDLE_SCREEN_LAUNCHED, VCONFKEY_IDLE_SCREEN_LAUNCHED_TRUE); -} - - - -void menu_daemon_fini(void) -{ - if (vconf_ignore_key_changed(VCONFKEY_SETAPPL_SELECTED_PACKAGE_NAME, _pkg_changed) < 0) - _E("Failed to ignore the callback for package change event"); - - if (vconf_ignore_key_changed(VCONFKEY_STARTER_SEQUENCE, _show_cb) < 0) - _E("Failed to ignore the callback for show event"); - - xmonitor_fini(); - pkg_event_fini(); - destroy_key_window(); -} - - - -// End of a file diff --git a/src/mobile/home_mgr.c b/src/mobile/home_mgr.c new file mode 100644 index 0000000..6054378 --- /dev/null +++ b/src/mobile/home_mgr.c @@ -0,0 +1,427 @@ +/* + * Copyright (c) 2000 - 2015 Samsung Electronics Co., Ltd. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "util.h" +#include "dbus_util.h" +#include "status.h" +#include "process_mgr.h" +#include "popup.h" + +#define HOME_TERMINATED "home_terminated" +#define ISTRUE "TRUE" +#define SYSPOPUPID_VOLUME "volume" + +#define DEAD_TIMER_SEC 2.0 +#define DEAD_TIMER_COUNT_MAX 2 + +#define VCONFKEY_STARTER_IS_FALLBACK "db/starter/is_fallback" +#define VCONFKEY_STARTER_FALLBACK_PKG "db/starter/fallback_pkg" + + + +int errno; +static struct { + pid_t home_pid; + pid_t volume_pid; + int power_off; + + Ecore_Timer *dead_timer; + int dead_count; + + Evas_Object *popup; +} s_home_mgr = { + .home_pid = (pid_t)-1, + .volume_pid = (pid_t)-1, + .power_off = 0, + + .dead_timer = NULL, + .dead_count = 0, + + .popup = NULL, +}; + + + +static void _after_launch_home(int pid) +{ + if (dbus_util_send_oomadj(pid, OOM_ADJ_VALUE_HOMESCREEN) < 0){ + _E("failed to send oom dbus signal"); + } + s_home_mgr.home_pid = pid; +} + + + +static int _change_home_cb(const char *appid, const char *key, const char *value, void *cfn, void *afn) +{ + if (!strcmp(appid, MENU_SCREEN_PKG_NAME)) { + _E("We cannot do anything anymore."); + } else if (!strcmp(appid, status_active_get()->setappl_selected_package_name)) { + if (vconf_set_str(VCONFKEY_SETAPPL_SELECTED_PACKAGE_NAME, MENU_SCREEN_PKG_NAME) != 0) { + _E("cannot set the vconf key as %s", MENU_SCREEN_PKG_NAME); + } + /* change_home func will be called by changing the home */ + return 0; + } + _E("cannot change home"); + return -1; +} + + + +#define SERVICE_OPERATION_MAIN_KEY "__APP_SVC_OP_TYPE__" +#define SERVICE_OPERATION_MAIN_VALUE "http://tizen.org/appcontrol/operation/main" +void home_mgr_open_home(const char *appid) +{ + char *home_appid = NULL; + + if (status_passive_get()->idle_screen_safemode) { + home_appid = MENU_SCREEN_PKG_NAME; + } else if (!appid) { + home_appid = status_active_get()->setappl_selected_package_name; + } else { + home_appid = (char *) appid; + } + ret_if(!home_appid); + + if (!strncmp(home_appid, MENU_SCREEN_PKG_NAME, strlen(home_appid))) { + process_mgr_must_launch(home_appid, SERVICE_OPERATION_MAIN_KEY, SERVICE_OPERATION_MAIN_VALUE, _change_home_cb, _after_launch_home); + } else { + process_mgr_must_open(home_appid, _change_home_cb, _after_launch_home); + } +} + + + +static int _show_home_cb(status_active_key_e key, void *data) +{ + int seq = status_active_get()->starter_sequence; + int is_fallback = 0; + char *fallback_pkg = NULL; + + _D("[MENU_DAEMON] _show_home_cb is invoked(%d)", seq); + + switch (seq) { + case 0: + if (s_home_mgr.home_pid > 0) { + _D("Home[%d] has to be terminated.", s_home_mgr.home_pid); + if (aul_terminate_pid(s_home_mgr.home_pid) != AUL_R_OK) { + _E("Failed to terminate %d", s_home_mgr.home_pid); + } + s_home_mgr.home_pid = -1; /* to freeze the dead_cb */ + } + break; + case 1: + if (vconf_get_int(VCONFKEY_STARTER_IS_FALLBACK, &is_fallback) < 0) { + _E("Failed to get vconfkey : %s", VCONFKEY_STARTER_IS_FALLBACK); + } + + if (is_fallback) { + fallback_pkg = vconf_get_str(VCONFKEY_STARTER_FALLBACK_PKG); + if (!fallback_pkg) { + _E("Failed to get vconfkey : %s", VCONFKEY_STARTER_FALLBACK_PKG); + home_mgr_open_home(NULL); + break; + } + _D("fallback pkg : %s", fallback_pkg); + + if (vconf_set_str(VCONFKEY_SETAPPL_SELECTED_PACKAGE_NAME, fallback_pkg) < 0) { + _E("Failed to set vconfkey : %s", VCONFKEY_SETAPPL_SELECTED_PACKAGE_NAME); + home_mgr_open_home(NULL); + free(fallback_pkg); + break; + } + + if (vconf_set_int(VCONFKEY_STARTER_IS_FALLBACK, 0)) { + _E("Failed to set vconfkey : %s", VCONFKEY_STARTER_IS_FALLBACK); + } + + free(fallback_pkg); + } else { + home_mgr_open_home(NULL); + } + break; + default: + _E("False sequence [%d]", seq); + break; + } + + return 1; +} + + + +static int _change_selected_package_name(status_active_key_e key, void *data) +{ + char *appid = NULL; + int seq = status_active_get()->starter_sequence; + + if (seq < 1) { + _E("Sequence is not ready yet, do nothing"); + return 1; + } + + _D("_change_selected_package_name is invoked"); + + appid = status_active_get()->setappl_selected_package_name; + if (!appid) { + return 1; + } + _SECURE_D("pkg_name : %s", appid); + + if (s_home_mgr.home_pid > 0) { + char old_appid[BUF_SIZE_512] = { 0 , }; + + if (aul_app_get_pkgname_bypid(s_home_mgr.home_pid, old_appid, sizeof(old_appid)) == AUL_R_OK) { + if (!strcmp(appid, old_appid)) { + _D("Package is changed but same package is selected"); + return 1; + } + } + + if (AUL_R_OK != aul_terminate_pid(s_home_mgr.home_pid)) { + _D("Failed to terminate pid %d", s_home_mgr.home_pid); + } + s_home_mgr.home_pid = -1; + s_home_mgr.dead_count = 0; + if (s_home_mgr.dead_timer) { + ecore_timer_del(s_home_mgr.dead_timer); + s_home_mgr.dead_timer = NULL; + } + } + + home_mgr_open_home(appid); + + return 1; +} + + + +static void _after_launch_volume(int pid) +{ + if (dbus_util_send_oomadj(pid, OOM_ADJ_VALUE_DEFAULT) < 0){ + _E("failed to send oom dbus signal"); + } + s_home_mgr.volume_pid = pid; +} + + + +static void _launch_after_home(int pid) +{ + if (pid > 0) { + if(dbus_util_send_oomadj(pid, OOM_ADJ_VALUE_HOMESCREEN) < 0){ + _E("failed to send oom dbus signal"); + } + } + s_home_mgr.home_pid = pid; +} + + + +static void _launch_home(const char *appid) +{ + const char *home_appid = NULL; + + if (status_passive_get()->idle_screen_safemode) { + home_appid = MENU_SCREEN_PKG_NAME; + } else if (!appid) { + home_appid = status_active_get()->setappl_selected_package_name; + } else { + home_appid = (char *) appid; + } + ret_if(!home_appid); + + process_mgr_must_launch(home_appid, HOME_TERMINATED, ISTRUE, _change_home_cb, _launch_after_home); +} + + + +static void _popup_del_cb(void *data, Evas *e, Evas_Object *obj, void *event_info) +{ + _D("popup is deleted"); + + s_home_mgr.popup = NULL; +} + + + +static Eina_Bool _dead_timer_cb(void *data) +{ + Evas_Object *popup = NULL; + char title[BUF_SIZE_128] = { 0, }; + char text[BUF_SIZE_1024] = { 0, }; + + char *appid = (char *)data; + retv_if(!appid, ECORE_CALLBACK_CANCEL); + + _D("dead count : %s(%d)", appid, s_home_mgr.dead_count); + + if (s_home_mgr.dead_count >= DEAD_TIMER_COUNT_MAX) { + _D("Change homescreen package to default"); + + if (vconf_set_str(VCONFKEY_SETAPPL_SELECTED_PACKAGE_NAME, MENU_SCREEN_PKG_NAME) != 0) { + _E("cannot set the vconf key as %s", MENU_SCREEN_PKG_NAME); + return ECORE_CALLBACK_RENEW; + } + + strncpy(title, _("IDS_COM_POP_WARNING"), sizeof(title)); + title[sizeof(title) - 1] = '\0'; + + snprintf(text, sizeof(text), _("IDS_IDLE_POP_UNABLE_TO_LAUNCH_PS"), appid); + _D("title : %s / text : %s", title, text); + + if (!s_home_mgr.popup) { + popup = popup_create(title, text); + if (!popup) { + _E("Failed to create popup"); + } else { + s_home_mgr.popup = popup; + evas_object_event_callback_add(popup, EVAS_CALLBACK_DEL, _popup_del_cb, NULL); + } + } + + /* set fallback status */ + if (vconf_set_int(VCONFKEY_STARTER_IS_FALLBACK, 1) < 0) { + _E("Failed to set vconfkey : %s", VCONFKEY_STARTER_IS_FALLBACK); + } + + if (vconf_set_str(VCONFKEY_STARTER_FALLBACK_PKG, appid) < 0) { + _E("Failed to set vconfkey : %s", VCONFKEY_STARTER_FALLBACK_PKG); + } + } + + s_home_mgr.dead_timer = NULL; + s_home_mgr.dead_count = 0; + + return ECORE_CALLBACK_CANCEL; +} + + + +int home_mgr_check_dead_signal(int pid, void *data) +{ + char *appid = NULL; + + _D("Process %d is termianted", pid); + + if (pid < 0) { + _E("pid : %d", pid); + return 0; + } + + if (s_home_mgr.power_off) { + _E("power off"); + return 0; + } + + appid = status_active_get()->setappl_selected_package_name; + if (!appid) { + _E("appid is NULL"); + return 0; + } + + if (pid == s_home_mgr.home_pid) { + s_home_mgr.dead_count++; + _D("home dead count : %d", s_home_mgr.dead_count); + + if (!s_home_mgr.dead_timer) { + _D("Add dead timer"); + s_home_mgr.dead_timer = ecore_timer_add(DEAD_TIMER_SEC, _dead_timer_cb, (void *)appid); + } + + _launch_home(appid); + } else if (pid == s_home_mgr.volume_pid) { + process_mgr_must_syspopup_launch(SYSPOPUPID_VOLUME, NULL, NULL, NULL, _after_launch_volume); + } else { + _D("Unknown process, ignore it (dead pid %d, home pid %d)", pid, s_home_mgr.home_pid); + } + + return 0; +} + + + +static int _power_off_cb(status_active_key_e key, void *data) +{ + int val = status_active_get()->sysman_power_off_status; + + if (val == VCONFKEY_SYSMAN_POWER_OFF_DIRECT || val == VCONFKEY_SYSMAN_POWER_OFF_RESTART) { + s_home_mgr.power_off = 1; + } else { + s_home_mgr.power_off = 0; + } + + _D("power off status : %d", s_home_mgr.power_off); + + return 1; +} + + + +static Eina_Bool _launch_volume_idler_cb(void *data) +{ + process_mgr_must_syspopup_launch(SYSPOPUPID_VOLUME, NULL, NULL, NULL, _after_launch_volume); + return ECORE_CALLBACK_CANCEL; +} + + + +void home_mgr_init(void *data) +{ + _D( "[MENU_DAEMON]home_mgr_init is invoked"); + + status_active_register_cb(STATUS_ACTIVE_KEY_STARTER_SEQUENCE, _show_home_cb, NULL); + status_active_register_cb(STATUS_ACTIVE_KEY_SYSMAN_POWER_OFF_STATUS, _power_off_cb, NULL); + status_active_register_cb(STATUS_ACTIVE_KEY_SETAPPL_SELECTED_PACKAGE_NAME, _change_selected_package_name, NULL); + _change_selected_package_name(STATUS_ACTIVE_KEY_SETAPPL_SELECTED_PACKAGE_NAME, NULL); + + ecore_idler_add(_launch_volume_idler_cb, NULL); + + aul_listen_app_dead_signal(home_mgr_check_dead_signal, NULL); +} + + + +void home_mgr_fini(void) +{ + if (s_home_mgr.volume_pid > 0) { + process_mgr_terminate_app(s_home_mgr.volume_pid, 1); + s_home_mgr.volume_pid = -1; + } + + status_active_unregister_cb(STATUS_ACTIVE_KEY_STARTER_SEQUENCE, _show_home_cb); + status_active_unregister_cb(STATUS_ACTIVE_KEY_SYSMAN_POWER_OFF_STATUS, _power_off_cb); + status_active_unregister_cb(STATUS_ACTIVE_KEY_SETAPPL_SELECTED_PACKAGE_NAME, _change_selected_package_name); +} + + + +// End of a file diff --git a/src/mobile/hw_key.c b/src/mobile/hw_key.c new file mode 100644 index 0000000..dbb1eaa --- /dev/null +++ b/src/mobile/hw_key.c @@ -0,0 +1,500 @@ +/* + * Copyright (c) 2000 - 2015 Samsung Electronics Co., Ltd. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +//#include +#include +#include +#include +//#include +#include +#include +#include +#include + +#include "hw_key.h" +#include "home_mgr.h" +#include "util.h" +#include "dbus_util.h" +#include "lock_mgr.h" +#include "status.h" +#include "process_mgr.h" +#include "lock_pwd_util.h" + +#define APPID_CAMERA "org.tizen.camera-app" +#define APPID_CALLLOG "org.tizen.calllog" +#define APPID_MUSIC_PLAYER "org.tizen.music-player" +#define APPID_TASKMGR "org.tizen.task-mgr" +#define APPID_BROWSER "org.tizen.browser" +#define APPID_EMAIL "org.tizen.email" +#define APPID_DIALER "org.tizen.phone" + +#define STR_ATOM_XKEY_COMPOSITION "_XKEY_COMPOSITION" +#define STR_ATOM_KEYROUTER_NOTIWINDOW "_KEYROUTER_NOTIWINDOW" + +#define LONG_PRESS_TIMER_SEC 0.4 +#define HOMEKEY_TIMER_SEC 0.2 +#define CANCEL_KEY_TIMER_SEC 0.3 + +static struct { + //Ecore_X_Window win; + Ecore_Event_Handler *key_up; + Ecore_Event_Handler *key_down; + Ecore_Timer *home_long_press_timer; + Ecore_Timer *home_multi_press_timer; + Eina_Bool cancel; + //Ecore_X_Window keyrouter_notiwindow; + int homekey_count; +} key_info = { + //.win = 0x0, + .key_up = NULL, + .key_down = NULL, + .home_long_press_timer = NULL, + .home_multi_press_timer = NULL, + .cancel = EINA_FALSE, + //.keyrouter_notiwindow = 0x0, + .homekey_count = 0, +}; + + + +static void _after_launch_taskmgr(int pid) +{ + if(0 < pid) { + if(dbus_util_send_oomadj(pid, OOM_ADJ_VALUE_DEFAULT) < 0){ + _E("failed to send oom dbus signal"); + } + } +} + + + +static Eina_Bool _launch_taskmgr_cb(void* data) +{ + int val = -1; + + _D("Launch TASKMGR"); + + key_info.home_long_press_timer = NULL; + + if (vconf_get_int(VCONFKEY_IDLE_LOCK_STATE, &val) < 0) { + _E("Cannot get VCONFKEY for lock state"); + } else if (VCONFKEY_IDLE_LOCK == val) { + _E("lock state, ignore home key long press..!!"); + return ECORE_CALLBACK_CANCEL; + } + + process_mgr_must_launch(APPID_TASKMGR, NULL, NULL, NULL, _after_launch_taskmgr); + + return ECORE_CALLBACK_CANCEL; +} + + + +static void _release_multimedia_key(const char *value) +{ + ret_if(NULL == value); + _D("Multimedia key is released with %s", value); + process_mgr_must_launch(APPID_MUSIC_PLAYER, "multimedia_key", value, NULL, NULL); +} + + + +static Eina_Bool _launch_by_home_key(void *data) +{ + int ret = 0; + + if (status_passive_get()->idle_lock_state > VCONFKEY_IDLE_UNLOCK) { + return ECORE_CALLBACK_CANCEL; + } + + ret = home_mgr_open_home(NULL); + if(ret > 0) { + dbus_util_send_home_raise_signal(); + } + + return ECORE_CALLBACK_CANCEL; +} + + + +static Eina_Bool _home_multi_press_timer_cb(void *data) +{ + _W("homekey count[%d]", key_info.homekey_count); + + key_info.home_multi_press_timer = NULL; + + if(0 == key_info.homekey_count % 2) { + key_info.homekey_count = 0; + return ECORE_CALLBACK_CANCEL; + } else if(key_info.homekey_count >= 3) { + key_info.homekey_count = 0; + return ECORE_CALLBACK_CANCEL; + } + + /* Single homekey operation */ + key_info.homekey_count = 0; + _launch_by_home_key(data); + + return ECORE_CALLBACK_CANCEL; + +} + + + +#define SERVICE_OPERATION_POPUP_SEARCH "http://samsung.com/appcontrol/operation/search" +#define SEARCH_PKG_NAME "org.tizen.sfinder" +static int _launch_search(void) +{ + app_control_h app_control; + int ret = APP_CONTROL_ERROR_NONE; + + app_control_create(&app_control); + app_control_set_operation(app_control, APP_CONTROL_OPERATION_DEFAULT); + app_control_set_app_id(app_control, SEARCH_PKG_NAME); + + ret = app_control_send_launch_request(app_control, NULL, NULL); + + if(ret != APP_CONTROL_ERROR_NONE) { + _E("Cannot launch search!! err[%d]", ret); + } + + app_control_destroy(app_control); + return ret; +} + + + +static void _cancel_key_events(void) +{ + key_info.homekey_count = 0; + + if (key_info.home_long_press_timer) { + ecore_timer_del(key_info.home_long_press_timer); + key_info.home_long_press_timer = NULL; + } + + if(key_info.home_multi_press_timer) { + ecore_timer_del(key_info.home_multi_press_timer); + key_info.home_multi_press_timer = NULL; + } +} + + + +#if 0 +static Eina_Bool _key_release_cb(void *data, int type, void *event) +{ + Evas_Event_Key_Up *ev = event; + + retv_if(!ev, ECORE_CALLBACK_RENEW); + retv_if(!ev->keyname, ECORE_CALLBACK_RENEW); + + _D("_key_release_cb : %s Released", ev->keyname); + + /* Priority 1 : Cancel event */ + if (!strcmp(ev->keyname, KEY_CANCEL)) { + _D("CANCEL Key is released"); + key_info.cancel = EINA_FALSE; + return ECORE_CALLBACK_RENEW; + } + + if (EINA_TRUE == key_info.cancel) { + _D("CANCEL is on"); + return ECORE_CALLBACK_RENEW; + } + + /* Priority 2 : Execute before checking the lock status */ + if (!strcmp(ev->keyname, KEY_MEDIA)) { + _release_multimedia_key("KEY_PLAYCD"); + return ECORE_CALLBACK_RENEW; + } + + /* Priority 3 : Check the lock status */ + if ((status_passive_get()->idle_lock_state == VCONFKEY_IDLE_LOCK) + && (status_active_get()->setappl_screen_lock_type_int > SETTING_SCREEN_LOCK_TYPE_NONE)) { + if (!strcmp(ev->keyname, KEY_BACK)) { + _D("Back key is released"); + lock_pwd_util_back_key_relased(); + } else { + _D("phone lock state, ignore home key."); + } + return ECORE_CALLBACK_RENEW; + } + + /* Priority 4 : These keys are only activated after checking the lock state */ + if (!strcmp(ev->keyname, KEY_END)) { + } else if (!strcmp(ev->keyname, KEY_CONFIG)) { + } else if (!strcmp(ev->keyname, KEY_SEND)) { + } else if (!strcmp(ev->keyname, KEY_HOME)) { + _W("Home Key is released"); + + syspopup_destroy_all(); + + if(key_info.home_multi_press_timer) { + _D("delete homekey timer"); + ecore_timer_del(key_info.home_multi_press_timer); + key_info.home_multi_press_timer = NULL; + } + + if (key_info.home_long_press_timer) { + ecore_timer_del(key_info.home_long_press_timer); + key_info.home_long_press_timer = NULL; + } else { + key_info.homekey_count = 0; + return ECORE_CALLBACK_RENEW; + } + + key_info.home_multi_press_timer = ecore_timer_add(HOMEKEY_TIMER_SEC, _home_multi_press_timer_cb, NULL); + if (!key_info.home_multi_press_timer) { + _E("Critical! cannot add a timer for home multi press"); + } + return ECORE_CALLBACK_RENEW; + } else if (!strcmp(ev->keyname, KEY_PAUSE)) { + } else if (!strcmp(ev->keyname, KEY_APPS)) { + _D("App tray key is released"); + } else if (!strcmp(ev->keyname, KEY_TASKSWITCH)) { + _D("Task switch key is released"); + _launch_taskmgr_cb(NULL); + } else if (!strcmp(ev->keyname, KEY_WEBPAGE)) { + _D("Web page key is released"); + process_mgr_must_open(APPID_BROWSER, NULL, NULL); + } else if (!strcmp(ev->keyname, KEY_MAIL)) { + _D("Mail key is released"); + process_mgr_must_open(APPID_EMAIL, NULL, NULL); + } else if (!strcmp(ev->keyname, KEY_CONNECT)) { + _D("Connect key is released"); + process_mgr_must_open(APPID_DIALER, NULL, NULL); + } else if (!strcmp(ev->keyname, KEY_SEARCH)) { + _D("Search key is released"); + if (_launch_search() < 0) { + _E("Failed to launch the search"); + } + } else if (!strcmp(ev->keyname, KEY_VOICE)) { + _D("Voice key is released"); + } + + return ECORE_CALLBACK_RENEW; +} +#endif + + + +#if 0 +static Eina_Bool _key_press_cb(void *data, int type, void *event) +{ + Evas_Event_Key_Down *ev = event; + + retv_if(!ev, ECORE_CALLBACK_RENEW); + retv_if(!ev->keyname, ECORE_CALLBACK_RENEW); + + _D("_key_press_cb : %s Pressed", ev->keyname); + + /* Priority 1 : Cancel */ + /* every reserved events have to be canceld when cancel key is pressed */ + if (!strcmp(ev->keyname, KEY_CANCEL)) { + _D("Cancel button is pressed"); + key_info.cancel = EINA_TRUE; + _cancel_key_events(); + return ECORE_CALLBACK_RENEW; + } + + if (EINA_TRUE == key_info.cancel) { + _D("CANCEL is on"); + return ECORE_CALLBACK_RENEW; + } + + /* Priority 2 : Check the lock status */ + if ((status_passive_get()->idle_lock_state == VCONFKEY_IDLE_LOCK) + && (status_active_get()->setappl_screen_lock_type_int > SETTING_SCREEN_LOCK_TYPE_NONE)) { + _D("phone lock state, ignore key events."); + _cancel_key_events(); + return ECORE_CALLBACK_RENEW; + } + + /* Priority 3 : other keys */ + if (!strcmp(ev->keyname, KEY_SEND)) { + _D("Launch calllog"); + process_mgr_must_open(APPID_CALLLOG, NULL, NULL); + } else if(!strcmp(ev->keyname, KEY_CONFIG)) { + _D("Launch camera"); + process_mgr_must_open(APPID_CAMERA, NULL, NULL); + } else if (!strcmp(ev->keyname, KEY_HOME)) { + _W("Home Key is pressed"); + if (key_info.home_long_press_timer) { + ecore_timer_del(key_info.home_long_press_timer); + key_info.home_long_press_timer = NULL; + } + + key_info.homekey_count++; + _W("homekey count : %d", key_info.homekey_count); + + if(key_info.home_multi_press_timer) { + ecore_timer_del(key_info.home_multi_press_timer); + key_info.home_multi_press_timer = NULL; + _D("delete homekey timer"); + } + + _D("create long press timer"); + key_info.home_long_press_timer = ecore_timer_add(LONG_PRESS_TIMER_SEC, _launch_taskmgr_cb, NULL); + if (!key_info.home_long_press_timer) { + _E("Failed to add timer for long press detection"); + } + } else if (!strcmp(ev->keyname, KEY_MEDIA)) { + _D("Media key is pressed"); + } else if (!strcmp(ev->keyname, KEY_APPS)) { + _D("App tray key is pressed"); + } else if (!strcmp(ev->keyname, KEY_TASKSWITCH)) { + _D("Task switch key is pressed"); + } else if (!strcmp(ev->keyname, KEY_WEBPAGE)) { + _D("Web page key is pressed"); + } else if (!strcmp(ev->keyname, KEY_MAIL)) { + _D("Mail key is pressed"); + } else if (!strcmp(ev->keyname, KEY_SEARCH)) { + _D("Search key is pressed"); + } else if (!strcmp(ev->keyname, KEY_VOICE)) { + _D("Voice key is pressed"); + } else if (!strcmp(ev->keyname, KEY_CONNECT)) { + _D("Connect key is pressed"); + } + + return ECORE_CALLBACK_RENEW; +} +#endif + + + +#if 0 +void _media_key_event_cb(media_key_e key, media_key_event_e status, void *user_data) +{ + _D("MEDIA KEY EVENT : %d", key); + if (MEDIA_KEY_STATUS_PRESSED == status) return; + + switch (key) { + case MEDIA_KEY_PAUSE: + _release_multimedia_key("KEY_PAUSECD"); + break; + case MEDIA_KEY_PLAY: + _release_multimedia_key("KEY_PLAYCD"); + break; + case MEDIA_KEY_PLAYPAUSE: + _release_multimedia_key("KEY_PLAYPAUSECD"); + break; + default: + _E("cannot reach here, key[%d]", key); + break; + } +} +#endif + + + +void hw_key_create_window(void) +{ + int ret; +#if 0 //build error + Ecore_X_Atom atomNotiWindow; + Ecore_X_Window keyrouter_notiwindow; + + key_info.win = ecore_x_window_input_new(0, 0, 0, 1, 1); + if (!key_info.win) { + _D("Failed to create hidden window"); + return; + } + ecore_x_event_mask_unset(key_info.win, ECORE_X_EVENT_MASK_NONE); + ecore_x_icccm_title_set(key_info.win, "menudaemon,key,receiver"); + ecore_x_netwm_name_set(key_info.win, "menudaemon,key,receiver"); + ecore_x_netwm_pid_set(key_info.win, getpid()); + + utilx_grab_key(ecore_x_display_get(), key_info.win, KEY_HOME, SHARED_GRAB); + utilx_grab_key(ecore_x_display_get(), key_info.win, KEY_VOLUMEDOWN, SHARED_GRAB); + utilx_grab_key(ecore_x_display_get(), key_info.win, KEY_VOLUMEUP, SHARED_GRAB); + utilx_grab_key(ecore_x_display_get(), key_info.win, KEY_CONFIG, SHARED_GRAB); + utilx_grab_key(ecore_x_display_get(), key_info.win, KEY_MEDIA, SHARED_GRAB); + utilx_grab_key(ecore_x_display_get(), key_info.win, KEY_APPS, SHARED_GRAB); + utilx_grab_key(ecore_x_display_get(), key_info.win, KEY_TASKSWITCH, SHARED_GRAB); + utilx_grab_key(ecore_x_display_get(), key_info.win, KEY_WEBPAGE, SHARED_GRAB); + utilx_grab_key(ecore_x_display_get(), key_info.win, KEY_MAIL, SHARED_GRAB); + utilx_grab_key(ecore_x_display_get(), key_info.win, KEY_SEARCH, SHARED_GRAB); + utilx_grab_key(ecore_x_display_get(), key_info.win, KEY_VOICE, SHARED_GRAB); + utilx_grab_key(ecore_x_display_get(), key_info.win, KEY_CONNECT, SHARED_GRAB); + utilx_grab_key(ecore_x_display_get(), key_info.win, KEY_POWER, SHARED_GRAB); + + key_info.key_up = ecore_event_handler_add(ECORE_EVENT_KEY_UP, _key_release_cb, NULL); + if (!key_info.key_up) + _E("Failed to register a key up event handler"); + + key_info.key_down = ecore_event_handler_add(ECORE_EVENT_KEY_DOWN, _key_press_cb, NULL); + if (!key_info.key_down) + _E("Failed to register a key down event handler"); + + /* Get notifwindow */ + atomNotiWindow = ecore_x_atom_get(STR_ATOM_KEYROUTER_NOTIWINDOW); + ret = ecore_x_window_prop_window_get(ecore_x_window_root_first_get(), atomNotiWindow, &keyrouter_notiwindow, 1); + if (ret > 0) { + _D("Succeed to get keyrouter notiwindow ! ret = %d (win=0x%x)\n" + , ret, keyrouter_notiwindow); + ecore_x_window_sniff(keyrouter_notiwindow); + key_info.keyrouter_notiwindow = keyrouter_notiwindow; + } else { + _E("Failed to get keyrouter notiwindow! ret = %d, atomNotiWindow = 0x%x, keyrouter_notiwindow = 0x%x" + , ret, atomNotiWindow, keyrouter_notiwindow); + } + + media_key_reserve(_media_key_event_cb, NULL); +#endif +} + + + +void hw_key_destroy_window(void) +{ +#if 0 //build error + utilx_ungrab_key(ecore_x_display_get(), key_info.win, KEY_HOME); + utilx_ungrab_key(ecore_x_display_get(), key_info.win, KEY_VOLUMEDOWN); + utilx_ungrab_key(ecore_x_display_get(), key_info.win, KEY_VOLUMEUP); + utilx_ungrab_key(ecore_x_display_get(), key_info.win, KEY_CONFIG); + utilx_ungrab_key(ecore_x_display_get(), key_info.win, KEY_MEDIA); + utilx_ungrab_key(ecore_x_display_get(), key_info.win, KEY_APPS); + utilx_ungrab_key(ecore_x_display_get(), key_info.win, KEY_TASKSWITCH); + utilx_ungrab_key(ecore_x_display_get(), key_info.win, KEY_WEBPAGE); + utilx_ungrab_key(ecore_x_display_get(), key_info.win, KEY_MAIL); + utilx_ungrab_key(ecore_x_display_get(), key_info.win, KEY_SEARCH); + utilx_ungrab_key(ecore_x_display_get(), key_info.win, KEY_VOICE); + utilx_ungrab_key(ecore_x_display_get(), key_info.win, KEY_CONNECT); + + if (key_info.key_up) { + ecore_event_handler_del(key_info.key_up); + key_info.key_up = NULL; + } + + if (key_info.key_down) { + ecore_event_handler_del(key_info.key_down); + key_info.key_down = NULL; + } + + ecore_x_window_delete_request_send(key_info.win); + key_info.win = 0x0; + + media_key_release(); +#endif +} + + + +// End of a file diff --git a/src/mobile/lock_mgr.c b/src/mobile/lock_mgr.c new file mode 100644 index 0000000..4aca455 --- /dev/null +++ b/src/mobile/lock_mgr.c @@ -0,0 +1,700 @@ +/* + * Copyright (c) 2000 - 2015 Samsung Electronics Co., Ltd. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "lock_mgr.h" +#include "package_mgr.h" +#include "process_mgr.h" +#include "hw_key.h" +#include "dbus_util.h" +#include "util.h" +#include "status.h" +#include "lock_pwd_util.h" +#include "lock_pwd_simple.h" +#include "lock_pwd_control_panel.h" + +#define PASSWORD_LOCK_PROGRESS "/tmp/.passwordlock" + +static struct { + int checkfd; + alarm_id_t alarm_id; /* -1 : None, others : set alarm */ + Eina_Bool is_alarm; /* EINA_TRUE : can use alarm EINA_FALSE : cannot use */ + + int old_lock_type; + char *lock_appid; + int lock_pid; + int lcd_state; + + lockw_data *lockw; +} s_lock_mgr = { + .checkfd = 0, + .alarm_id = -1, + .is_alarm = EINA_FALSE, + + .old_lock_type = 0, + .lock_appid = NULL, + .lock_pid = -1, + .lcd_state = -1, + + .lockw = NULL, +}; + + + +int lock_mgr_lcd_state_get(void) +{ + return s_lock_mgr.lcd_state; +} + + + +int lock_mgr_lock_pid_get(void) +{ + return s_lock_mgr.lock_pid; +} + + + +static int _alarm_del(alarm_id_t id, void * user_param) +{ + int ret = ALARMMGR_RESULT_SUCCESS; + + _D("delete alarm id : %d", id); + + ret = alarmmgr_remove_alarm(id); + if (ret != ALARMMGR_RESULT_SUCCESS) { + _E("Failed to remove alarm(%d)", ret ); + } + + return 0; +} + + + +static void _alarm_unset(void) +{ + int ret = ALARMMGR_RESULT_SUCCESS; + + ret = alarmmgr_enum_alarm_ids(_alarm_del, NULL); + if (ret != ALARMMGR_RESULT_SUCCESS) { + _E("Failed to get list of alarm ids"); + } +} + + + +static void _alarm_lockscreen_launch(alarm_id_t alarm_id, void *data) +{ + int ret = ALARMMGR_RESULT_SUCCESS; + + _D("alarm id : %d", alarm_id); + + /* launch lockscreen */ + lock_mgr_lockscreen_launch(); + + if (alarm_id != -1) { + if (alarm_id != s_lock_mgr.alarm_id) { + _E("alarm ids are different callback->id(%d), s_lock_mgr.alarm_id(%d)", alarm_id, s_lock_mgr.alarm_id); + /* delete all registering alarm*/ + _alarm_unset(); + s_lock_mgr.alarm_id = -1; + } else { + ret = alarmmgr_remove_alarm(alarm_id); + if (ret != ALARMMGR_RESULT_SUCCESS) { + _E("Failed to remove alaram(%d)", ret); + /* delete all registering alarm*/ + _alarm_unset(); + } + s_lock_mgr.alarm_id = -1; + } + } +} + + + +static Eina_Bool _alarm_set(int sec) +{ + time_t current_time; + struct tm current_tm; + alarm_entry_t *alarm_info; + alarm_id_t alarm_id; + alarm_date_t alarm_time; + int ret = ALARMMGR_RESULT_SUCCESS; + + /* delete before registering alarm ids */ + if (s_lock_mgr.alarm_id != -1){ + _E("ad->alarm_id(%d) deleted", s_lock_mgr.alarm_id); + ret = alarmmgr_remove_alarm(s_lock_mgr.alarm_id); + if (ret != ALARMMGR_RESULT_SUCCESS) { + _E("Failed to remove alarm(%d) : %d", ret, s_lock_mgr.alarm_id); + _alarm_unset(); + } + s_lock_mgr.alarm_id = -1; + } + + /* set alarm after sec */ + time(¤t_time); + + _D("%s, after %d SEC.s alarm set", ctime(¤t_time), sec); + localtime_r(¤t_time, ¤t_tm); + + alarm_info = alarmmgr_create_alarm(); + retv_if(!alarm_info, EINA_FALSE); + + alarm_time.year = 0; + alarm_time.month = 0; + alarm_time.day = 0; + alarm_time.hour = current_tm.tm_hour; + alarm_time.min = current_tm.tm_min; + alarm_time.sec = current_tm.tm_sec + sec; + + alarmmgr_set_repeat_mode(alarm_info, ALARM_REPEAT_MODE_ONCE, 0); + alarmmgr_set_time(alarm_info, alarm_time); + alarmmgr_set_type(alarm_info, ALARM_TYPE_VOLATILE); + + ret = alarmmgr_add_alarm_with_localtime(alarm_info, NULL, &alarm_id); + if (ret != ALARMMGR_RESULT_SUCCESS) { + _E("Failed to add alarm with localtime(%d)", ret); + alarmmgr_free_alarm(alarm_info) ; + return EINA_FALSE; + } + + _D("alarm id(%d) is set", alarm_id); + s_lock_mgr.alarm_id = alarm_id; + alarmmgr_free_alarm(alarm_info) ; + + return EINA_TRUE; +} + + + +static Eina_Bool _alarm_init(void) +{ + int ret = 0; + + /* alarm id initialize */ + s_lock_mgr.alarm_id = -1; + + ret = alarmmgr_init(PACKAGE_NAME); + if (ret != ALARMMGR_RESULT_SUCCESS) { + _E("Failed to initialize alarmmgr(%d)", ret); + return EINA_FALSE; + } + + ret = alarmmgr_set_cb((alarm_cb_t)_alarm_lockscreen_launch, NULL); + if (ret != ALARMMGR_RESULT_SUCCESS) { + _E("Failed to set cb func(%d)", ret); + return EINA_FALSE; + } + + _D("alarm init success"); + + return EINA_TRUE; +} + + + + +void lock_mgr_sound_play(lock_sound_type_e type) +{ + int val = status_passive_get()->setappl_sound_lock_bool; + ret_if(!val); + + switch(type) { + case LOCK_SOUND_LOCK: + feedback_play_type(FEEDBACK_TYPE_SOUND, FEEDBACK_PATTERN_LOCK); + break; + case LOCK_SOUND_UNLOCK: + feedback_play_type(FEEDBACK_TYPE_SOUND, FEEDBACK_PATTERN_UNLOCK); + break; + case LOCK_SOUND_BTN_KEY: + feedback_play_type(FEEDBACK_TYPE_SOUND, FEEDBACK_PATTERN_SIP); + break; + case LOCK_SOUND_TAP: + feedback_play_type(FEEDBACK_TYPE_SOUND, FEEDBACK_PATTERN_TOUCH_TAP); + break; + default: + break; + } +} + + + +void lock_mgr_idle_lock_state_set(int lock_state) +{ + _D("lock state : %d", lock_state); + + if (lock_state < VCONFKEY_IDLE_UNLOCK) { + _E("Can't set lock_state : %d out of range", lock_state); + } else { + vconf_set_int(VCONFKEY_IDLE_LOCK_STATE, lock_state); + } +} + + + +static void _after_launch_lock(int pid) +{ + int idle_lock_state = 0; + + if (dbus_util_send_oomadj(pid, OOM_ADJ_VALUE_DEFAULT) < 0) { + _E("cannot send oomadj for pid[%d]", pid); + } + process_mgr_set_lock_priority(pid); + display_unlock_state(LCD_OFF, PM_SLEEP_MARGIN); + s_lock_mgr.lock_pid = pid; + + idle_lock_state = status_passive_get()->idle_lock_state; + if (!idle_lock_state) { + lock_mgr_idle_lock_state_set(VCONFKEY_IDLE_LOCK); + lock_mgr_sound_play(LOCK_SOUND_LOCK); + } +} + + + +static int _lock_changed_cb(const char *appid, const char *key, const char *value, void *cfn, void *afn) +{ + if (!strncmp(appid, status_passive_get()->setappl_3rd_lock_pkg_name_str, strlen(appid))) { + _E("We cannot do anything anymore."); + } else { + if (vconf_set_str(VCONFKEY_SETAPPL_3RD_LOCK_PKG_NAME_STR, appid) != 0) { + _E("Failed to set vconfkey : %s", VCONFKEY_SETAPPL_3RD_LOCK_PKG_NAME_STR); + return -1; + } else { + if (s_lock_mgr.lock_appid) free(s_lock_mgr.lock_appid); + s_lock_mgr.lock_appid = strdup(appid); + retv_if(!s_lock_mgr.lock_appid, -1); + return 0; + } + } + _E("cannot change lock"); + return -1; +} + + + +static void _other_lockscreen_unlock(void) +{ + _D("unlock other lock screen"); + + window_mgr_unregister_event(s_lock_mgr.lockw); + window_mgr_fini(s_lock_mgr.lockw); + s_lock_mgr.lockw = NULL; +} + + + +static Eina_Bool _lock_create_cb(void *data, int type, void *event) +{ + _D("lockw(%p), lock_pid(%d)", s_lock_mgr.lockw, s_lock_mgr.lock_pid); + + if (window_mgr_set_effect(s_lock_mgr.lockw, s_lock_mgr.lock_pid, event) == EINA_TRUE) { + //FIXME sometimes show cb is not called. + if (window_mgr_set_prop(s_lock_mgr.lockw, s_lock_mgr.lock_pid, event) == EINA_FALSE) { + _E("window is not matched..!!"); + } + } + return ECORE_CALLBACK_PASS_ON; +} + + + +static Eina_Bool _lock_show_cb(void *data, int type, void *event) +{ + _D("lockw(%p), lock_pid(%d)", s_lock_mgr.lockw, s_lock_mgr.lock_pid); + + if (window_mgr_set_prop(s_lock_mgr.lockw, s_lock_mgr.lock_pid, event)) { + int lock_type = status_active_get()->setappl_screen_lock_type_int; + _D("lock type : %d", lock_type); + + window_mgr_set_scroll_prop(s_lock_mgr.lockw, lock_type); + } + + return ECORE_CALLBACK_CANCEL; +} + + + +static Eina_Bool _lock_hide_cb(void *data, int type, void *event) +{ + int pwd_win_visible = lock_pwd_util_win_visible_get(); + int lock_type = status_active_get()->setappl_screen_lock_type_int; + _D("pwd win visible(%d), lock type(%d)", pwd_win_visible, lock_type); + + + if (!pwd_win_visible) { + lock_mgr_idle_lock_state_set(VCONFKEY_IDLE_UNLOCK); + lock_mgr_sound_play(LOCK_SOUND_UNLOCK); + s_lock_mgr.lock_pid = 0; + if (lock_type == SETTING_SCREEN_LOCK_TYPE_OTHER) { + _other_lockscreen_unlock(); + } + } + + window_mgr_unregister_event(s_lock_mgr.lockw); + + return ECORE_CALLBACK_CANCEL; +} + + + +static void _lcd_off_by_timeout(void) +{ + int idle_lock_state = 0; + int accessibility_lock_time = 0; + + idle_lock_state = status_passive_get()->idle_lock_state; + if (idle_lock_state == VCONFKEY_IDLE_LOCK) { + _D("VCONFKEY is set(not need to set alarm), lock_pid : %d", s_lock_mgr.lock_pid); + return; + } + + if (s_lock_mgr.alarm_id != -1) { + _E("Alarm is set yet (alarm_id = %d) : do nothing", s_lock_mgr.alarm_id); + return; + } + + accessibility_lock_time = status_passive_get()->setappl_accessibility_lock_time_int; + _D("accessibility lock time : %d", accessibility_lock_time); + if (accessibility_lock_time == 0) { + _alarm_lockscreen_launch(-1, NULL); + return; + } else { + if (s_lock_mgr.is_alarm) { + _D("set alarm %d sec", accessibility_lock_time); + if (_alarm_set(accessibility_lock_time) != EINA_TRUE) { + _E("Failed to set alarm"); + _alarm_lockscreen_launch(-1, NULL); + } + } else { + _E("is_alarm is EINA_FALSE"); + _alarm_lockscreen_launch(-1, NULL); + } + } +} + + + +static void _on_lcd_changed_receive(void *data, DBusMessage *msg) +{ + int lcd_on = 0; + int lcd_off = 0; + + _D("LCD signal is received"); + + lcd_on = dbus_message_is_signal(msg, DEVICED_INTERFACE_DISPLAY, MEMBER_LCD_ON); + lcd_off = dbus_message_is_signal(msg, DEVICED_INTERFACE_DISPLAY, MEMBER_LCD_OFF); + + if (lcd_on) { + _W("LCD on"); + s_lock_mgr.lcd_state = LCD_STATE_ON; + + /* delete all alarm registering */ + _D("delete alarm : id(%d)", s_lock_mgr.alarm_id); + _alarm_unset(); + s_lock_mgr.alarm_id = -1; + + if (lock_pwd_util_win_visible_get()) { + _D("Password lock is ON"); + lock_pwd_control_panel_resume(); + } else { + _D("Password lock is OFF"); + } + } else if (lcd_off) { + s_lock_mgr.lcd_state = LCD_STATE_OFF; + char *lcd_off_source = dbus_util_msg_arg_get_str(msg); + ret_if(!lcd_off_source); + + int idle_lock_state = status_passive_get()->idle_lock_state; + int lock_type = status_active_get()->setappl_screen_lock_type_int; + _D("idle_lock_state(%d), lock type(%d)", idle_lock_state, lock_type); + + if (lock_pwd_util_win_visible_get()) { + _D("Password lock is ON"); + lock_pwd_control_panel_pause(); + if (!lock_pwd_simple_is_blocked_get()) { + if (lock_type == SETTING_SCREEN_LOCK_TYPE_SIMPLE_PASSWORD || + lock_type == SETTING_SCREEN_LOCK_TYPE_PASSWORD || + lock_type == SETTING_SCREEN_LOCK_TYPE_SWIPE) { + display_lock_state(LCD_OFF, STAY_CUR_STATE, 0); + dbus_util_send_lock_PmQos_signal(); + } + lock_pwd_util_view_init(); + } + } else { + _D("Password lock is OFF"); + if (!strncmp(lcd_off_source, "powerkey", strlen(lcd_off_source))) { + _D("LCD off by Powerkey"); + if (idle_lock_state == VCONFKEY_IDLE_UNLOCK) { + if (lock_type == SETTING_SCREEN_LOCK_TYPE_SIMPLE_PASSWORD || + lock_type == SETTING_SCREEN_LOCK_TYPE_PASSWORD || + lock_type == SETTING_SCREEN_LOCK_TYPE_SWIPE) { + display_lock_state(LCD_OFF, STAY_CUR_STATE, 0); + dbus_util_send_lock_PmQos_signal(); + } + lock_mgr_lockscreen_launch(); + } + } else if(!strncmp(lcd_off_source, "timeout", strlen(lcd_off_source))) { + _D("LCD off by timeout"); + _lcd_off_by_timeout(); + } else { + _E("Dbus message is unknow : %s", lcd_off_source); + } + } + + free(lcd_off_source); + } else { + _E("%s dbus_message_is_signal error", DEVICED_INTERFACE_DISPLAY); + } +} + + + +Eina_Bool lock_mgr_lockscreen_launch(void) +{ + int lock_type = 0; + Evas_Object *lock_pwd_win = NULL; + + lock_type = status_active_get()->setappl_screen_lock_type_int; + _D("lock type : %d", lock_type); + + //PM LOCK - don't go to sleep + display_lock_state(LCD_OFF, STAY_CUR_STATE, 0); + + /* reset window mgr before start win mgr */ + window_mgr_unregister_event(s_lock_mgr.lockw); + window_mgr_register_event(NULL, s_lock_mgr.lockw, _lock_create_cb, _lock_show_cb, _lock_hide_cb); + + switch (lock_type) { + case SETTING_SCREEN_LOCK_TYPE_NONE: + _E("Lockscreen type is NONE"); + return EINA_TRUE; + case SETTING_SCREEN_LOCK_TYPE_SWIPE: + process_mgr_must_launch(LOCK_MGR_DEFAULT_PKG_NAME, NULL, NULL, _lock_changed_cb, _after_launch_lock); + goto_if(s_lock_mgr.lock_pid < 0, ERROR); + break; + case SETTING_SCREEN_LOCK_TYPE_SIMPLE_PASSWORD: + case SETTING_SCREEN_LOCK_TYPE_PASSWORD: + process_mgr_must_launch(LOCK_MGR_DEFAULT_PKG_NAME, NULL, NULL, _lock_changed_cb, _after_launch_lock); + goto_if(s_lock_mgr.lock_pid < 0, ERROR); + + if (dbus_util_send_oomadj(s_lock_mgr.lock_pid, OOM_ADJ_VALUE_DEFAULT) < 0){ + _E("Failed to send oom dbus signal"); + } + + process_mgr_set_lock_priority(s_lock_mgr.lock_pid); + display_unlock_state(LCD_OFF, PM_SLEEP_MARGIN); + + /* password lockscreen */ + lock_pwd_win = lock_pwd_util_win_get(); + if (!lock_pwd_win) { + lock_pwd_util_create(EINA_TRUE); + } else { + lock_pwd_util_win_show(); + } + break; + case SETTING_SCREEN_LOCK_TYPE_OTHER: + if (!package_mgr_exist_app(status_passive_get()->setappl_3rd_lock_pkg_name_str)) { + process_mgr_must_launch(status_passive_get()->setappl_3rd_lock_pkg_name_str, NULL, NULL, _lock_changed_cb, _after_launch_lock); + } else { + _D("launch default lockscreen"); + process_mgr_must_launch(LOCK_MGR_DEFAULT_PKG_NAME, NULL, NULL, _lock_changed_cb, _after_launch_lock); + } + goto_if(s_lock_mgr.lock_pid < 0, ERROR); + + break; + default: + _E("type error(%d)", lock_type); + goto ERROR; + } + + _W("lock_pid : %d", s_lock_mgr.lock_pid); + + return EINA_TRUE; + +ERROR: + _E("Failed to launch lockscreen"); + display_unlock_state(LCD_OFF, PM_SLEEP_MARGIN); + + return EINA_FALSE; +} + + + +static void _check_ongoing(bool ongoing) +{ + if (ongoing) { + /* check previous process */ + if (s_lock_mgr.checkfd) { + _E("checkfd fail"); + return; + } + + if (access(PASSWORD_LOCK_PROGRESS, F_OK) == 0) { + _E("file(%s) is exist", PASSWORD_LOCK_PROGRESS); + return; + } + + /* make tmp file */ + s_lock_mgr.checkfd = creat(PASSWORD_LOCK_PROGRESS, 0640); + + if (s_lock_mgr.checkfd < 0) { + _E("Failed to make %s file", PASSWORD_LOCK_PROGRESS); + s_lock_mgr.checkfd = 0; + } + + _W("make %s file", PASSWORD_LOCK_PROGRESS); + s_lock_mgr.checkfd = 1; + } else { + if (!s_lock_mgr.checkfd) { + _E("checkfd is NULL"); + return; + } + + if (unlink(PASSWORD_LOCK_PROGRESS) < 0) { + _E("Failed to remove %s file", PASSWORD_LOCK_PROGRESS); + } + + close(s_lock_mgr.checkfd); + s_lock_mgr.checkfd = 0; + _W("delete %s file", PASSWORD_LOCK_PROGRESS); + } +} + + + +static void _lock_daemon_init(void) +{ + s_lock_mgr.lock_appid = strdup(status_passive_get()->setappl_3rd_lock_pkg_name_str); + if (!s_lock_mgr.lock_appid) { + s_lock_mgr.lock_appid = strdup(LOCK_MGR_DEFAULT_PKG_NAME); + } + + if (s_lock_mgr.lock_appid && !package_mgr_exist_app(s_lock_mgr.lock_appid)) { + _SECURE_E("%s is not exist, default lock screen pkg name is set to %s", s_lock_mgr.lock_appid, LOCK_MGR_DEFAULT_PKG_NAME); + free(s_lock_mgr.lock_appid); + s_lock_mgr.lock_appid = strdup(LOCK_MGR_DEFAULT_PKG_NAME); + if (vconf_set_str(VCONFKEY_SETAPPL_3RD_LOCK_PKG_NAME_STR, LOCK_MGR_DEFAULT_PKG_NAME) != 0) { + _E("Failed to set vconfkey : %s", VCONFKEY_SETAPPL_3RD_LOCK_PKG_NAME_STR); + } + } + + _SECURE_D("default lock screen pkg name is %s", s_lock_mgr.lock_appid); + + /* init alarm manager */ + s_lock_mgr.is_alarm = _alarm_init(); + + /* register lcd changed cb */ + dbus_util_receive_lcd_status(_on_lcd_changed_receive, NULL); + + /* Create internal 1x1 window */ + s_lock_mgr.lockw = window_mgr_init(); +} + + + +static int _lock_type_changed_cb(status_active_key_e key, void *data) +{ + int lock_type = status_active_get()->setappl_screen_lock_type_int; + retv_if(lock_type == s_lock_mgr.old_lock_type, 1); + + _D("lock type is changed : %d -> %d", s_lock_mgr.old_lock_type, lock_type); + + if (s_lock_mgr.old_lock_type == SETTING_SCREEN_LOCK_TYPE_SIMPLE_PASSWORD || + s_lock_mgr.old_lock_type == SETTING_SCREEN_LOCK_TYPE_PASSWORD) { + _D("delete password lockscreen layout"); + lock_pwd_util_del(); + } + + switch (lock_type) { + case SETTING_SCREEN_LOCK_TYPE_NONE: + break; + case SETTING_SCREEN_LOCK_TYPE_SWIPE: + break; + case SETTING_SCREEN_LOCK_TYPE_SIMPLE_PASSWORD: + case SETTING_SCREEN_LOCK_TYPE_PASSWORD: + lock_pwd_util_create(EINA_FALSE); + break; + case SETTING_SCREEN_LOCK_TYPE_OTHER: + break; + default: + break; + } + + s_lock_mgr.old_lock_type = lock_type; + + return 1; +} + + +int lock_mgr_daemon_start(void) +{ + int lock_type = 0; + int ret = 0; + + _lock_daemon_init(); + + lock_type = status_active_get()->setappl_screen_lock_type_int; + _D("lock type : %d", lock_type); + + if (lock_type == SETTING_SCREEN_LOCK_TYPE_SIMPLE_PASSWORD || + lock_type == SETTING_SCREEN_LOCK_TYPE_PASSWORD) { + if (s_lock_mgr.checkfd) { + _check_ongoing(EINA_FALSE); + } else { + _check_ongoing(EINA_TRUE); + } + } + + ret = lock_mgr_lockscreen_launch(); + _D("ret : %d", ret); + + status_active_register_cb(STATUS_ACTIVE_KEY_SETAPPL_SCREEN_LOCK_TYPE_INT, _lock_type_changed_cb, NULL); + + if (feedback_initialize() != FEEDBACK_ERROR_NONE) { + _E("Failed to initialize feedback"); + } + + return ret; +} + + + +void lock_mgr_daemon_end(void) +{ + if (s_lock_mgr.lock_appid) { + free(s_lock_mgr.lock_appid); + s_lock_mgr.lock_appid = NULL; + } +} diff --git a/src/mobile/lock_pwd_complex.c b/src/mobile/lock_pwd_complex.c new file mode 100644 index 0000000..9054bf5 --- /dev/null +++ b/src/mobile/lock_pwd_complex.c @@ -0,0 +1,374 @@ +/* + * Copyright (c) 2000 - 2015 Samsung Electronics Co., Ltd. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include + +#include "lock_mgr.h" +#include "util.h" +#include "lock_pwd_util.h" +#include "lock_pwd_complex.h" +#include "lock_pwd_control_panel.h" + +#define IME_RESIZED 1 +#define IME_DOWN 2 + +static struct _s_lock_pwd_complex { + Evas_Object *pwd_complex_layout; + Evas_Object *pwd_complex_entry; + + Eina_Bool is_blocked; + Ecore_Timer *timer_pin; + int pin_time_remain; +} s_lock_pwd_complex = { + .pwd_complex_layout = NULL, + .pwd_complex_entry = NULL, + + .is_blocked = EINA_FALSE, + .timer_pin = NULL, + .pin_time_remain = PASSWORD_BLOCK_SECONDS, +}; + + + + +Eina_Bool lock_pwd_complex_is_blocked_get(void) +{ + return s_lock_pwd_complex.is_blocked; +} + +static void _pwd_complex_layout_title_set(const char *title) +{ + ret_if(!s_lock_pwd_complex.pwd_complex_layout); + ret_if(!title); + + elm_object_part_text_set(s_lock_pwd_complex.pwd_complex_layout, "title", title); +} + + + +void lock_pwd_complex_entry_clear(void) +{ + ret_if(!s_lock_pwd_complex.pwd_complex_entry); + + elm_entry_entry_set(s_lock_pwd_complex.pwd_complex_entry, ""); +} + + + +static Eina_Bool _pwd_complex_entry_clear(void *data) +{ + lock_pwd_complex_entry_clear(); + return ECORE_CALLBACK_CANCEL; +} + + + +static void _pwd_complex_lock_time_init(void) +{ + if (vconf_set_str(VCONFKEY_SETAPPL_PASSWORD_TIMESTAMP_STR, "") < 0) { + _E("Failed to set vconfkey : %s", VCONFKEY_SETAPPL_PASSWORD_TIMESTAMP_STR); + } +} + + + +static void _pwd_complex_lock_time_save(void) +{ + time_t cur_time = time(NULL); + char buf[64] = { 0, }; + snprintf(buf, sizeof(buf), "%ld", cur_time); + if (vconf_set_str(VCONFKEY_SETAPPL_PASSWORD_TIMESTAMP_STR, buf) < 0) { + _E("Failed to set vconfkey : %s", VCONFKEY_SETAPPL_PASSWORD_TIMESTAMP_STR); + } +} + + + +static void _pwd_complex_event_correct(lock_pwd_event_e event) +{ + _D("%s", __func__); + + lock_pwd_util_win_hide(); + lock_pwd_complex_entry_clear(); + _pwd_complex_layout_title_set(_("IDS_COM_BODY_ENTER_PIN")); + + lock_mgr_idle_lock_state_set(VCONFKEY_IDLE_UNLOCK); + lock_mgr_sound_play(LOCK_SOUND_UNLOCK); +} + + + +static void _pwd_complex_event_incorrect(lock_pwd_event_e event) +{ + char temp_str[BUF_SIZE_256] = { 0, }; + char temp_left[BUF_SIZE_256] = { 0, }; + int remain_attempt = 0; + + remain_attempt = lock_pwd_verification_remain_attempt_get(); + _D("remain_attempt(%d)", remain_attempt); + + if (remain_attempt == 1) { + strncpy(temp_left, _("IDS_IDLE_BODY_1_ATTEMPT_LEFT"), sizeof(temp_left)); + temp_left[sizeof(temp_left) - 1] = '\0'; + } else { + snprintf(temp_left, sizeof(temp_left), _("IDS_IDLE_BODY_PD_ATTEMPTS_LEFT"), remain_attempt); + } + snprintf(temp_str, sizeof(temp_str), "%s
%s", _("IDS_COM_BODY_INCORRECT_PIN"), temp_left); + _pwd_complex_layout_title_set(temp_str); + + ecore_timer_add(0.1, _pwd_complex_entry_clear, NULL); + + lock_pwd_verification_popup_create(event); +} + + + +static Eina_Bool _wrong_pwd_wait_timer_cb(void *data) +{ + char try_again_buf[BUF_SIZE_256] = { 0, }; + char incorrect_pass_buf[BUF_SIZE_256] = { 0, }; + + retv_if(!s_lock_pwd_complex.pwd_complex_layout, ECORE_CALLBACK_CANCEL); + + snprintf(try_again_buf, sizeof(try_again_buf), _("IDS_LCKSCN_POP_TRY_AGAIN_IN_PD_SECONDS"), s_lock_pwd_complex.pin_time_remain); + snprintf(incorrect_pass_buf, sizeof(incorrect_pass_buf), "%s
%s", _("IDS_COM_BODY_INCORRECT_PIN"), try_again_buf); + _pwd_complex_layout_title_set(incorrect_pass_buf); + + if (s_lock_pwd_complex.pin_time_remain == PASSWORD_BLOCK_SECONDS || + s_lock_pwd_complex.pin_time_remain > 0) { + s_lock_pwd_complex.pin_time_remain--; + return ECORE_CALLBACK_RENEW; + } else { + lock_pwd_complex_view_init(); + + int lcd_state = lock_mgr_lcd_state_get(); + if (lcd_state == LCD_STATE_OFF) { + lock_mgr_lockscreen_launch(); + } + } + + return ECORE_CALLBACK_CANCEL; +} + + + +static void _pwd_complex_event_input_block(lock_pwd_event_e event) +{ + _D("%s", __func__); + + int block_sec = PASSWORD_BLOCK_SECONDS; + char try_again_buf[BUF_SIZE_256] = { 0, }; + char incorrect_pass_buf[BUF_SIZE_256] = { 0, }; + + ret_if(!s_lock_pwd_complex.pwd_complex_layout); + + _pwd_complex_lock_time_save(); + + snprintf(try_again_buf, sizeof(try_again_buf), _("IDS_LCKSCN_POP_TRY_AGAIN_IN_PD_SECONDS"), block_sec); + snprintf(incorrect_pass_buf, sizeof(incorrect_pass_buf), "%s
%s", _("IDS_COM_BODY_INCORRECT_PIN"), try_again_buf); + _pwd_complex_layout_title_set(incorrect_pass_buf); + + s_lock_pwd_complex.is_blocked = EINA_TRUE; + + if (s_lock_pwd_complex.timer_pin) { + ecore_timer_del(s_lock_pwd_complex.timer_pin); + s_lock_pwd_complex.timer_pin = NULL; + } + + s_lock_pwd_complex.timer_pin = ecore_timer_add(1.0, _wrong_pwd_wait_timer_cb, NULL); + + ecore_timer_add(0.1, _pwd_complex_entry_clear, NULL); + + lock_pwd_verification_popup_create(event); + + lock_pwd_control_panel_cancel_btn_enable_set(EINA_FALSE); +} + + + +void lock_pwd_complex_event(lock_pwd_event_e event) +{ + switch(event) { + case PWD_EVENT_CORRECT: + _pwd_complex_event_correct(event); + break; + case PWD_EVENT_INCORRECT_WARNING: + case PWD_EVENT_INCORRECT: + _pwd_complex_event_incorrect(event); + break; + case PWD_EVENT_INPUT_BLOCK_WARNING: + case PWD_EVENT_INPUT_BLOCK: + _pwd_complex_event_input_block(event); + break; + case PWD_EVENT_EMPTY: + break; + case PWD_EVENT_OVER: + break; + default: + break; + } +} + + + +static void _pwd_complex_enter_cb(void *data, Evas_Object *obj, void *event_info) +{ + ret_if(!obj); + + const char *password = elm_entry_entry_get(obj); + + lock_pwd_event_e pwd_event = lock_pwd_verification_verify(password); + lock_pwd_complex_event(pwd_event); +} + + + +Evas_Object *_pwd_complex_entry_create(void *data) +{ + Evas_Object *parent = NULL; + Evas_Object *entry = NULL; + + parent = (Evas_Object *)data; + goto_if(!parent, ERROR); + + entry = elm_entry_add(parent); + goto_if(!entry, ERROR); + + elm_entry_single_line_set(entry, EINA_TRUE); + elm_entry_password_set(entry, EINA_TRUE); + elm_entry_entry_set(entry, ""); + elm_entry_cursor_end_set(entry); + //elm_entry_scrollabled_set(entry, EINA_TRUE); + elm_entry_cnp_mode_set(entry, ELM_CNP_MODE_PLAINTEXT); + elm_entry_input_panel_layout_set(entry, ELM_INPUT_PANEL_LAYOUT_PASSWORD); + elm_entry_input_panel_imdata_set(entry, "type=lockscreen", 15); + elm_entry_input_panel_return_key_type_set(entry, ELM_INPUT_PANEL_RETURN_KEY_TYPE_DONE); + + evas_object_smart_callback_add(entry, "activated", _pwd_complex_enter_cb, NULL); + + evas_object_show(entry); + + return entry; + +ERROR: + _E("Failed to create entry"); + if (entry) { + evas_object_del(entry); + entry = NULL; + } + + return NULL; +} + + + +Evas_Object *lock_pwd_complex_layout_create(void *data) +{ + Evas_Object *parent = NULL; + Evas_Object *pwd_complex_layout = NULL; + Evas_Object *pwd_complex_entry = NULL; + Evas_Object *pwd_control_panel = NULL; + + lock_pwd_verification_policy_create(); + + parent = (Evas_Object *)data; + retv_if(!parent, NULL); + + pwd_complex_layout = elm_layout_add(parent); + goto_if(!pwd_complex_layout, ERROR); + s_lock_pwd_complex.pwd_complex_layout = pwd_complex_layout; + + if (!elm_layout_file_set(pwd_complex_layout, LOCK_PWD_EDJE_FILE, "lock-complex-password")) { + _E("Failed to set edje file : %s", LOCK_PWD_EDJE_FILE); + goto ERROR; + } + + evas_object_size_hint_weight_set(pwd_complex_layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(pwd_complex_layout, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_show(pwd_complex_layout); + + /* create entry */ + pwd_complex_entry = _pwd_complex_entry_create(pwd_complex_layout); + goto_if(!pwd_complex_entry, ERROR); + s_lock_pwd_complex.pwd_complex_entry = pwd_complex_entry; + + elm_object_part_content_set(pwd_complex_layout, "entry", pwd_complex_entry); + + _pwd_complex_layout_title_set(_("IDS_COM_BODY_ENTER_PIN")); + + /* create control panel */ + pwd_control_panel = lock_pwd_control_panel_create(pwd_complex_layout); + if (!pwd_control_panel) { + _E("Failed to create password control panel"); + } else { + elm_object_part_content_set(pwd_complex_layout, "control_panel", pwd_control_panel); + } + + evas_object_show(pwd_complex_layout); + + return pwd_complex_layout; + +ERROR: + _E("Failed to create complex password layout"); + + if (pwd_complex_entry) { + evas_object_del(pwd_complex_entry); + s_lock_pwd_complex.pwd_complex_entry = NULL; + } + + if (pwd_complex_layout) { + evas_object_del(pwd_complex_layout); + s_lock_pwd_complex.pwd_complex_layout = NULL; + } + + return NULL; +} + + +void lock_pwd_complex_layout_del(void) +{ + if (s_lock_pwd_complex.timer_pin) { + ecore_timer_del(s_lock_pwd_complex.timer_pin); + s_lock_pwd_complex.timer_pin = NULL; + } + + if (s_lock_pwd_complex.pwd_complex_entry) { + evas_object_del(s_lock_pwd_complex.pwd_complex_entry); + s_lock_pwd_complex.pwd_complex_entry = NULL; + } + + if (s_lock_pwd_complex.pwd_complex_layout) { + evas_object_del(s_lock_pwd_complex.pwd_complex_layout); + s_lock_pwd_complex.pwd_complex_layout = NULL; + } +} + + + +void lock_pwd_complex_view_init(void) +{ + _D("initialize complex password values"); + _pwd_complex_layout_title_set(_("IDS_COM_BODY_ENTER_PIN")); + elm_object_signal_emit(s_lock_pwd_complex.pwd_complex_layout, "show_title", "title"); + s_lock_pwd_complex.is_blocked = EINA_FALSE; + + lock_pwd_complex_entry_clear(); + + _pwd_complex_lock_time_init(); + + lock_pwd_control_panel_cancel_btn_enable_set(EINA_TRUE); +} diff --git a/src/mobile/lock_pwd_control_panel.c b/src/mobile/lock_pwd_control_panel.c new file mode 100644 index 0000000..5f360ac --- /dev/null +++ b/src/mobile/lock_pwd_control_panel.c @@ -0,0 +1,297 @@ +/* + * Copyright (c) 2000 - 2015 Samsung Electronics Co., Ltd. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +//#include +#include + +#include "lock_mgr.h" +#include "util.h" +#include "lock_pwd_util.h" +#include "lock_pwd_control_panel.h" + +#define EMG_CALL_LABEL_STYLE_START "" +#define EMG_CALL_LABEL_STYLE_END "" +#define EMG_BTN_WIDTH 280 + +static struct _s_lock_pwd_control_panel { + Evas_Object *control_panel_layout; + Evas_Object *emg_call_btn; + Evas_Object *cancel_btn; +} s_lock_pwd_control_panel = { + .control_panel_layout = NULL, + .emg_call_btn = NULL, + .cancel_btn = NULL, +}; + + + +static void _emg_call_btn_clicked_cb(void *data, Evas_Object *obj, const char *emission, const char *source) +{ + _D("%s", __func__); + app_control_h service; + Evas_Object *lock_pwd_win = NULL; + + lock_pwd_win = lock_pwd_util_win_get(); + ret_if(!lock_pwd_win); + + app_control_create(&service); + ret_if(!service); + + lock_mgr_sound_play(LOCK_SOUND_TAP); + + UG_INIT_EFL(lock_pwd_win, UG_OPT_INDICATOR_ENABLE); + + if (APP_CONTROL_ERROR_NONE != app_control_set_operation(service, APP_CONTROL_OPERATION_DEFAULT)) { + _E("Failed to set operation for app control handle"); + goto ERROR; + } + + //@TODO: need to check appid + if (APP_CONTROL_ERROR_NONE != app_control_set_app_id(service, "dialer-efl")) { + _E("Failed to launch dialer-efl"); + goto ERROR; + } + + app_control_add_extra_data(service, "emergency_dialer", "emergency"); + + if (APP_CONTROL_ERROR_NONE != app_control_send_launch_request(service, NULL, NULL)) { + _E("Failed to send launch request"); + } + + app_control_destroy(service); + + return; + +ERROR: + _E("Failed to launch emergency call"); + + if (service) app_control_destroy(service); +} + + + +static void _sliding_label_mode_set(Evas_Object *label) +{ + Evas_Object *label_edje = NULL; + Evas_Object *tb = NULL; + Evas_Coord tb_w = 0; + + ret_if(!label); + + elm_label_slide_mode_set(label, ELM_LABEL_SLIDE_MODE_NONE); + + label_edje = elm_layout_edje_get(label); + ret_if(!label_edje); + + tb = (Evas_Object *)edje_object_part_object_get(label_edje, "elm.text"); + ret_if(!tb); + + evas_object_textblock_size_native_get(tb, &tb_w, NULL); + _D("tb width(%d), label width(%f)", tb_w, ELM_SCALE_SIZE(EMG_BTN_WIDTH)); + + if ((tb_w > 0) && (tb_w > ELM_SCALE_SIZE(EMG_BTN_WIDTH))) { + elm_label_slide_mode_set(label, ELM_LABEL_SLIDE_MODE_AUTO); + } + + elm_label_slide_go(label); +} + + +static Evas_Object *_sliding_label_create(Evas_Object *parent, const char *text) +{ + char buf[BUF_SIZE_512] = { 0, }; + char *markup_txt = NULL; + Evas_Object *label = NULL; + + retv_if(!parent, NULL); + + label = elm_label_add(parent); + retv_if(!label, NULL); + + markup_txt = elm_entry_utf8_to_markup(text); + snprintf(buf, sizeof(buf), "%s%s%s", EMG_CALL_LABEL_STYLE_START, markup_txt, EMG_CALL_LABEL_STYLE_END); + free(markup_txt); + + elm_object_style_set(label, "slide_short"); + elm_label_wrap_width_set(label, EMG_BTN_WIDTH); + elm_label_slide_duration_set(label, 2); + elm_object_text_set(label, buf); + evas_object_show(label); + + _sliding_label_mode_set(label); + + return label; +} + + + +static Evas_Object *_emg_call_btn_create(Evas_Object *parent) +{ + Evas_Object *btn = NULL; + + retv_if(!parent, NULL); + + btn = _sliding_label_create(parent, _("IDS_LCKSCN_BODY_EMERGENCY_CALL")); + retv_if(!btn, NULL); + + elm_object_signal_callback_add(parent, "emg_button", "clicked", _emg_call_btn_clicked_cb, NULL); + + s_lock_pwd_control_panel.emg_call_btn = btn; + + return btn; +} + + + +void lock_pwd_control_panel_cancel_btn_enable_set(Eina_Bool enable) +{ + ret_if(!s_lock_pwd_control_panel.control_panel_layout); + + if (enable) { + elm_object_signal_emit(s_lock_pwd_control_panel.control_panel_layout, "button3,enable", "prog"); + } else { + elm_object_signal_emit(s_lock_pwd_control_panel.control_panel_layout, "button3,disable", "prog"); + } +} + + + +static void _cancel_btn_clicked_cb(void *data, Evas_Object *obj, void *event_info) +{ + _D("%s", __func__); + lock_mgr_sound_play(LOCK_SOUND_TAP); + + lock_pwd_util_view_init(); +} + + + +static Evas_Object *_cancel_btn_create(Evas_Object *parent) +{ + Evas_Object *btn = NULL; + + retv_if(!parent, NULL); + + btn = elm_button_add(parent); + retv_if(!btn, NULL); + + elm_theme_extension_add(NULL, LOCK_PWD_BTN_EDJE_FILE); + + elm_object_style_set(btn, "right_button"); + elm_object_text_set(btn, _("IDS_ST_BUTTON_CANCEL")); + evas_object_smart_callback_add(btn, "clicked", (Evas_Smart_Cb)_cancel_btn_clicked_cb, NULL); + + evas_object_show(btn); + + s_lock_pwd_control_panel.cancel_btn = btn; + + return btn; +} + + + +Evas_Object *lock_pwd_control_panel_create(Evas_Object *parent) +{ + Evas_Object *control_panel_layout = NULL; + Evas_Object *cancel_btn = NULL; + Evas_Object *emg_call_btn = NULL; + + retv_if(!parent, NULL); + + control_panel_layout = elm_layout_add(parent); + retv_if(!control_panel_layout, NULL); + + if (!elm_layout_file_set(control_panel_layout, LOCK_PWD_EDJE_FILE, "lock-control-panel")) { + _E("Failed to set edje file : %s", LOCK_PWD_EDJE_FILE); + goto ERROR; + } + s_lock_pwd_control_panel.control_panel_layout = control_panel_layout; + + evas_object_size_hint_weight_set(control_panel_layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(control_panel_layout, EVAS_HINT_FILL, EVAS_HINT_FILL); + + /* create emg call button */ + emg_call_btn = _emg_call_btn_create(control_panel_layout); + if (!emg_call_btn) { + _E("Failed to create operator button"); + } else { + elm_object_part_content_set(control_panel_layout, "button1", emg_call_btn); + } + + /* create cancel button */ + cancel_btn = _cancel_btn_create(control_panel_layout); + if (!cancel_btn) { + _E("Failed to create cancel button"); + } else { + elm_object_part_content_set(control_panel_layout, "button3", cancel_btn); + } + + evas_object_show(control_panel_layout); + + return control_panel_layout; + +ERROR: + _E("Failed to create password control panel"); + + if (cancel_btn) { + evas_object_del(cancel_btn); + cancel_btn = NULL; + } + + if (control_panel_layout) { + evas_object_del(control_panel_layout); + s_lock_pwd_control_panel.control_panel_layout = NULL; + } + + return NULL; +} + +void lock_pwd_control_panel_del(void) +{ + if (s_lock_pwd_control_panel.cancel_btn) { + evas_object_smart_callback_del(s_lock_pwd_control_panel.cancel_btn, "clicked", (Evas_Smart_Cb)_cancel_btn_clicked_cb); + evas_object_del(s_lock_pwd_control_panel.cancel_btn); + s_lock_pwd_control_panel.cancel_btn = NULL; + } + + if (s_lock_pwd_control_panel.emg_call_btn) { + elm_object_signal_callback_del(s_lock_pwd_control_panel.control_panel_layout, "emg_button", "clicked", _emg_call_btn_clicked_cb); + evas_object_del(s_lock_pwd_control_panel.emg_call_btn); + s_lock_pwd_control_panel.emg_call_btn = NULL; + } + + if (s_lock_pwd_control_panel.control_panel_layout) { + evas_object_del(s_lock_pwd_control_panel.control_panel_layout); + s_lock_pwd_control_panel.control_panel_layout = NULL; + } +} + +void lock_pwd_control_panel_pause(void) +{ + if (s_lock_pwd_control_panel.emg_call_btn) { + elm_label_slide_mode_set(s_lock_pwd_control_panel.emg_call_btn, ELM_LABEL_SLIDE_MODE_NONE); + elm_label_slide_go(s_lock_pwd_control_panel.emg_call_btn); + } +} + +void lock_pwd_control_panel_resume(void) +{ + if (s_lock_pwd_control_panel.emg_call_btn) { + elm_label_slide_mode_set(s_lock_pwd_control_panel.emg_call_btn, ELM_LABEL_SLIDE_MODE_AUTO); + elm_label_slide_go(s_lock_pwd_control_panel.emg_call_btn); + } +} diff --git a/src/mobile/lock_pwd_simple.c b/src/mobile/lock_pwd_simple.c new file mode 100755 index 0000000..d2aab01 --- /dev/null +++ b/src/mobile/lock_pwd_simple.c @@ -0,0 +1,448 @@ +/* + * Copyright (c) 2000 - 2015 Samsung Electronics Co., Ltd. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include +#include +#include +#include + +#include "lock_mgr.h" +#include "util.h" +#include "status.h" +#include "lock_pwd_util.h" +#include "lock_pwd_simple.h" +#include "lock_pwd_control_panel.h" + +#define DOT_TIME 1.5 +#define CORRECT_TIME 0.2 + +static struct _s_lock_pwd_simple { + Evas_Object *pwd_simple_layout; + Ecore_Timer *timer_dot; + + Eina_Bool is_blocked; + + char pwd_simple[MAX_PASSWORD_NUM +1]; + int pwd_simple_length; + + Ecore_Timer *timer_correct; + Ecore_Timer *timer_pin; + int pin_time_remain; +} s_lock_pwd_simple = { + .pwd_simple_layout = NULL, + .timer_dot = NULL, + + .is_blocked = EINA_FALSE, + + .pwd_simple = { 0, }, + .pwd_simple_length = 0, + + .timer_correct = NULL, + .timer_pin = NULL, + .pin_time_remain = PASSWORD_BLOCK_SECONDS, +}; + + + +Eina_Bool lock_pwd_simple_is_blocked_get(void) +{ + return s_lock_pwd_simple.is_blocked; +} + + + + +static void _pwd_simple_layout_title_set(const char *title) +{ + ret_if(!s_lock_pwd_simple.pwd_simple_layout); + ret_if(!title); + elm_object_part_text_set(s_lock_pwd_simple.pwd_simple_layout, "title", title); +} + + + +static void _pwd_simple_backspace(int length) +{ + char buf[BUF_SIZE_32] = { 0, }; + ret_if(!s_lock_pwd_simple.pwd_simple_layout); + + snprintf(buf, sizeof(buf), "dot_hide%d", length); + elm_object_signal_emit(s_lock_pwd_simple.pwd_simple_layout, buf, "keyboard"); + if (s_lock_pwd_simple.timer_dot) { + ecore_timer_del(s_lock_pwd_simple.timer_dot); + s_lock_pwd_simple.timer_dot = NULL; + } +} + + + +static Eina_Bool _hide_dot_cb(void *data) +{ + char buf[BUF_SIZE_32] = { 0, }; + retv_if(!s_lock_pwd_simple.pwd_simple_layout, ECORE_CALLBACK_CANCEL); + + snprintf(buf, sizeof(buf), "dot_show%d", (int)data); + elm_object_signal_emit(s_lock_pwd_simple.pwd_simple_layout, buf, "keyboard"); + s_lock_pwd_simple.timer_dot = NULL; + + return ECORE_CALLBACK_CANCEL; +} + + + +static void _pwd_simple_input(int length, const char *text) +{ + char part_buf[BUF_SIZE_32] = { 0, }; + char signal_buf[BUF_SIZE_32] = { 0, }; + ret_if(!s_lock_pwd_simple.pwd_simple_layout); + + lock_mgr_sound_play(LOCK_SOUND_BTN_KEY); + + snprintf(part_buf, sizeof(part_buf), "panel%d", length); + elm_object_part_text_set(s_lock_pwd_simple.pwd_simple_layout, part_buf, text); + + snprintf(signal_buf, sizeof(signal_buf), "input_show%d", length); + elm_object_signal_emit(s_lock_pwd_simple.pwd_simple_layout, signal_buf, "keyboard"); + + if (length > 0) { + snprintf(signal_buf, sizeof(signal_buf), "dot_show%d", length-1); + elm_object_signal_emit(s_lock_pwd_simple.pwd_simple_layout, signal_buf, "keyboard"); + } + + if (s_lock_pwd_simple.timer_dot) { + ecore_timer_del(s_lock_pwd_simple.timer_dot); + s_lock_pwd_simple.timer_dot = NULL; + } + + if (length < MAX_PASSWORD_NUM-1) { + s_lock_pwd_simple.timer_dot = ecore_timer_add(DOT_TIME, _hide_dot_cb, (void *)length); + } +} + + + +static void _pwd_simple_keypad_process(void *data, Evas_Object *obj, const char *emission, const char *source) +{ + _D("%s", __func__); + + if (s_lock_pwd_simple.is_blocked) { + _E("blocked"); + lock_mgr_sound_play(LOCK_SOUND_BTN_KEY); + return; + } + + if (!strncmp("Backspace", source, strlen("Backspace"))) { + _E("Backspace"); + lock_mgr_sound_play(LOCK_SOUND_BTN_KEY); + ret_if(s_lock_pwd_simple.pwd_simple_length <= 0); + _pwd_simple_backspace(--s_lock_pwd_simple.pwd_simple_length); + } else { + if (s_lock_pwd_simple.pwd_simple_length >= MAX_PASSWORD_NUM) { + _E("Too long"); + return; + } else { + s_lock_pwd_simple.pwd_simple[s_lock_pwd_simple.pwd_simple_length] = *source; + _pwd_simple_input(s_lock_pwd_simple.pwd_simple_length++, source); + } + } + + if (s_lock_pwd_simple.pwd_simple_length == MAX_PASSWORD_NUM) { + lock_pwd_event_e pwd_event = lock_pwd_verification_verify(s_lock_pwd_simple.pwd_simple); + lock_pwd_simple_event(pwd_event); + } +} + + + +Evas_Object *lock_pwd_simple_layout_create(void *data) +{ + Evas_Object *parent = NULL; + Evas_Object *pwd_simple_layout = NULL; + Evas_Object *pwd_control_panel = NULL; + + lock_pwd_verification_policy_create(); + + parent = (Evas_Object *)data; + retv_if(!parent, NULL); + + pwd_simple_layout = elm_layout_add(parent); + goto_if(!pwd_simple_layout, ERROR); + s_lock_pwd_simple.pwd_simple_layout = pwd_simple_layout; + + if (!elm_layout_file_set(pwd_simple_layout, LOCK_PWD_EDJE_FILE, "lock-simple-password")) { + _E("Failed to set edje file : %s", LOCK_PWD_EDJE_FILE); + goto ERROR; + } + + evas_object_size_hint_weight_set(pwd_simple_layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(pwd_simple_layout, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_show(pwd_simple_layout); + + elm_object_signal_callback_add(pwd_simple_layout, "keypad_down_clicked", "*", _pwd_simple_keypad_process, NULL); + _pwd_simple_layout_title_set(_("IDS_COM_BODY_ENTER_PIN")); + + /* create control panel */ + pwd_control_panel = lock_pwd_control_panel_create(pwd_simple_layout); + if (!pwd_control_panel) { + _E("Failed to create password control panel"); + } else { + elm_object_part_content_set(pwd_simple_layout, "control_panel", pwd_control_panel); + } + + return pwd_simple_layout; + +ERROR: + _E("Failed to create simple password layout"); + + if (pwd_simple_layout) { + evas_object_del(pwd_simple_layout); + s_lock_pwd_simple.pwd_simple_layout = NULL; + } + + return NULL; +} + + + +void lock_pwd_simple_layout_del(void) +{ + if (s_lock_pwd_simple.pwd_simple_layout) { + evas_object_del(s_lock_pwd_simple.pwd_simple_layout); + s_lock_pwd_simple.pwd_simple_layout = NULL; + } + + if (s_lock_pwd_simple.timer_dot) { + ecore_timer_del(s_lock_pwd_simple.timer_dot); + s_lock_pwd_simple.timer_dot = NULL; + } + + if (s_lock_pwd_simple.timer_pin) { + ecore_timer_del(s_lock_pwd_simple.timer_pin); + s_lock_pwd_simple.timer_pin = NULL; + } +} + + + +void lock_pwd_simple_entry_clear(void) +{ + int i = 0; + char buf[BUF_SIZE_32] = { 0, }; + + ret_if(!s_lock_pwd_simple.pwd_simple_layout); + + if (s_lock_pwd_simple.timer_dot) { + ecore_timer_del(s_lock_pwd_simple.timer_dot); + s_lock_pwd_simple.timer_dot = NULL; + } + + for (i = 0; i <= 3; i++) { + snprintf(buf, sizeof(buf), "dot_hide%d", i); + elm_object_signal_emit(s_lock_pwd_simple.pwd_simple_layout, buf, "keyboard"); + } + s_lock_pwd_simple.pwd_simple_length = 0; +} + + + +static Eina_Bool _pwd_simple_entry_clear(void *data) +{ + lock_pwd_simple_entry_clear(); + return ECORE_CALLBACK_CANCEL; +} + + + +static void _pwd_simple_event_incorrect(lock_pwd_event_e event) +{ + char temp_str[BUF_SIZE_256] = { 0, }; + char temp_left[BUF_SIZE_256] = { 0, }; + int remain_attempt = 0; + + remain_attempt = lock_pwd_verification_remain_attempt_get(); + _D("remain_attempt(%d)", remain_attempt); + + if (remain_attempt == 1) { + strncpy(temp_left, _("IDS_IDLE_BODY_1_ATTEMPT_LEFT"), sizeof(temp_left)); + temp_left[sizeof(temp_left) - 1] = '\0'; + } else { + snprintf(temp_left, sizeof(temp_left), _("IDS_IDLE_BODY_PD_ATTEMPTS_LEFT"), remain_attempt); + } + snprintf(temp_str, sizeof(temp_str), "%s
%s", _("IDS_COM_BODY_INCORRECT_PIN"), temp_left); + _pwd_simple_layout_title_set(temp_str); + + ecore_timer_add(0.1, _pwd_simple_entry_clear, NULL); + + lock_pwd_verification_popup_create(event); +} + + + +static Eina_Bool _pwd_correct_timer_cb(void *data) +{ + lock_pwd_util_win_hide(); + lock_pwd_simple_entry_clear(); + _pwd_simple_layout_title_set(_("IDS_COM_BODY_ENTER_PIN")); + + lock_mgr_idle_lock_state_set(VCONFKEY_IDLE_UNLOCK); + lock_mgr_sound_play(LOCK_SOUND_UNLOCK); + + s_lock_pwd_simple.timer_correct = NULL; + + return ECORE_CALLBACK_CANCEL; +} + + + +static void _pwd_simple_event_correct(lock_pwd_event_e event) +{ + if (s_lock_pwd_simple.timer_correct) { + ecore_timer_del(s_lock_pwd_simple.timer_correct); + } + + s_lock_pwd_simple.timer_correct = ecore_timer_add(CORRECT_TIME, _pwd_correct_timer_cb, NULL); + if(!s_lock_pwd_simple.timer_correct) { + _E("Failed to add tiemr for correct password event"); + } +} + + + +static void _pwd_simple_lock_time_init(void) +{ + if (vconf_set_str(VCONFKEY_SETAPPL_PASSWORD_TIMESTAMP_STR, "") < 0) { + _E("Failed to set vconfkey : %s", VCONFKEY_SETAPPL_PASSWORD_TIMESTAMP_STR); + } +} + + + +static void _pwd_simple_lock_time_save(void) +{ + time_t cur_time = time(NULL); + char buf[64] = { 0, }; + snprintf(buf, sizeof(buf), "%ld", cur_time); + if (vconf_set_str(VCONFKEY_SETAPPL_PASSWORD_TIMESTAMP_STR, buf) < 0) { + _E("Failed to set vconfkey : %s", VCONFKEY_SETAPPL_PASSWORD_TIMESTAMP_STR); + } +} + + + +static Eina_Bool _wrong_pwd_wait_timer_cb(void *data) +{ + char try_again_buf[BUF_SIZE_256] = { 0, }; + char incorrect_pass_buf[BUF_SIZE_256] = { 0, }; + + retv_if(!s_lock_pwd_simple.pwd_simple_layout, ECORE_CALLBACK_CANCEL); + + snprintf(try_again_buf, sizeof(try_again_buf), _("IDS_LCKSCN_POP_TRY_AGAIN_IN_PD_SECONDS"), s_lock_pwd_simple.pin_time_remain); + snprintf(incorrect_pass_buf, sizeof(incorrect_pass_buf), "%s
%s", _("IDS_COM_BODY_INCORRECT_PIN"), try_again_buf); + _pwd_simple_layout_title_set(incorrect_pass_buf); + + if (s_lock_pwd_simple.pin_time_remain == PASSWORD_BLOCK_SECONDS || + s_lock_pwd_simple.pin_time_remain > 0) { + s_lock_pwd_simple.pin_time_remain--; + return ECORE_CALLBACK_RENEW; + } else { + lock_pwd_simple_view_init(); + + int lcd_state = lock_mgr_lcd_state_get(); + if (lcd_state == LCD_STATE_OFF) { + lock_mgr_lockscreen_launch(); + } + } + + return ECORE_CALLBACK_CANCEL; +} + + + +static void _pwd_simple_event_input_block(lock_pwd_event_e event) +{ + _D("%s", __func__); + + int block_sec = PASSWORD_BLOCK_SECONDS; + char try_again_buf[200] = { 0, }; + char incorrect_pass_buf[200] = { 0, }; + + ret_if(!s_lock_pwd_simple.pwd_simple_layout); + + _pwd_simple_lock_time_save(); + + snprintf(try_again_buf, sizeof(try_again_buf), _("IDS_LCKSCN_POP_TRY_AGAIN_IN_PD_SECONDS"), block_sec); + snprintf(incorrect_pass_buf, sizeof(incorrect_pass_buf), "%s
%s", _("IDS_COM_BODY_INCORRECT_PIN"), try_again_buf); + _pwd_simple_layout_title_set(incorrect_pass_buf); + + s_lock_pwd_simple.is_blocked = EINA_TRUE; + + if (s_lock_pwd_simple.timer_pin) { + ecore_timer_del(s_lock_pwd_simple.timer_pin); + s_lock_pwd_simple.timer_pin = NULL; + } + + s_lock_pwd_simple.timer_pin = ecore_timer_add(1.0, _wrong_pwd_wait_timer_cb, NULL); + + ecore_timer_add(0.1, _pwd_simple_entry_clear, NULL); + + lock_pwd_verification_popup_create(event); + + lock_pwd_control_panel_cancel_btn_enable_set(EINA_FALSE); +} + + + +void lock_pwd_simple_event(lock_pwd_event_e event) +{ + switch(event) { + case PWD_EVENT_CORRECT: + _pwd_simple_event_correct(event); + break; + case PWD_EVENT_INCORRECT_WARNING: + case PWD_EVENT_INCORRECT: + _pwd_simple_event_incorrect(event); + break; + case PWD_EVENT_INPUT_BLOCK_WARNING: + case PWD_EVENT_INPUT_BLOCK: + _pwd_simple_event_input_block(event); + break; + case PWD_EVENT_EMPTY: + break; + case PWD_EVENT_OVER: + break; + default: + break; + } +} + +void lock_pwd_simple_view_init(void) +{ + _D("initialize simpel password values"); + s_lock_pwd_simple.pin_time_remain = PASSWORD_BLOCK_SECONDS; + + _pwd_simple_layout_title_set(_("IDS_COM_BODY_ENTER_PIN")); + elm_object_signal_emit(s_lock_pwd_simple.pwd_simple_layout, "show_title", "title"); + s_lock_pwd_simple.is_blocked = EINA_FALSE; + + lock_pwd_simple_entry_clear(); + + _pwd_simple_lock_time_init(); + + lock_pwd_control_panel_cancel_btn_enable_set(EINA_TRUE); +} diff --git a/src/mobile/lock_pwd_util.c b/src/mobile/lock_pwd_util.c new file mode 100644 index 0000000..5a07ef3 --- /dev/null +++ b/src/mobile/lock_pwd_util.c @@ -0,0 +1,472 @@ +/* + * Copyright (c) 2000 - 2015 Samsung Electronics Co., Ltd. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include + +#include "lock_mgr.h" +#include "util.h" +#include "status.h" +#include "status.h" +#include "lock_pwd_util.h" +#include "lock_pwd_simple.h" +#include "lock_pwd_complex.h" + +static struct _s_lock_pwd_util { + Evas_Object *lock_pwd_win; + Evas_Object *conformant; + Evas_Object *layout; + Evas_Object *bg; + + int win_w; + int win_h; +} s_lock_pwd_util = { + .lock_pwd_win = NULL, + .conformant = NULL, + .layout = NULL, + .bg = NULL, + + .win_w = 0, + .win_h = 0, +}; + + + +int lock_pwd_util_win_width_get(void) +{ + return s_lock_pwd_util.win_w; +} + + + +int lock_pwd_util_win_height_get(void) +{ + return s_lock_pwd_util.win_h; +} + + + +static Evas_Object *_pwd_conformant_add(void *data) +{ + Evas_Object *win = NULL; + Evas_Object *conformant = NULL; + + win = (Evas_Object *)data; + goto_if(!win, ERROR); + + conformant = elm_conformant_add(win); + goto_if(!conformant, ERROR); + + evas_object_size_hint_weight_set(conformant, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_win_resize_object_add(win, conformant); + + elm_win_indicator_mode_set(win, ELM_WIN_INDICATOR_SHOW); + elm_win_indicator_opacity_set(win, ELM_WIN_INDICATOR_TRANSLUCENT); + elm_win_conformant_set(win, EINA_TRUE); + + evas_object_show(conformant); + + return conformant; + +ERROR: + _E("Failed to add password conformant"); + + if (conformant) { + evas_object_del(conformant); + conformant = NULL; + } + + return NULL; +} + + +void lock_pwd_util_bg_image_set(Evas_Object *bg, char *file) +{ + char *bg_path = NULL; + int ret = 0; + + ret_if(!bg); + + if (file) { + _D("lock bg : %s", file); + if (!elm_bg_file_set(bg, file, NULL)) { + _E("Failed to set BG : %s", file); + goto ERROR; + } + } else { + ret = system_settings_get_value_string(SYSTEM_SETTINGS_KEY_WALLPAPER_LOCK_SCREEN, &bg_path); + if (SYSTEM_SETTINGS_ERROR_NONE != ret) { + _E("Failed to get system setting value : %d", SYSTEM_SETTINGS_KEY_WALLPAPER_LOCK_SCREEN); + goto ERROR; + } + _D("lock bg : %s", bg_path); + + if (!elm_bg_file_set(bg, bg_path, NULL)) { + _E("Failed to set bg : %s", bg_path); + goto ERROR; + } + + if (bg_path) { + free(bg_path); + bg_path = NULL; + } + } + + return; + +ERROR: + if (bg_path) { + free(bg_path); + bg_path = NULL; + } + + if (!elm_bg_file_set(bg, LOCK_MGR_DEFAULT_BG_PATH, NULL)) { + _E("Failed to set default BG : %s. Retry to set default BG.", LOCK_MGR_DEFAULT_BG_PATH); + if (!elm_bg_file_set(bg, LOCK_MGR_DEFAULT_BG_PATH, NULL)) { + _E("Failed to set default BG : %s", LOCK_MGR_DEFAULT_BG_PATH); + } + } + + return; +} + + + +static void _wallpaper_lock_screen_changed_cb(system_settings_key_e key, void *data) +{ + _D("%s", __func__); + Evas_Object *bg = (Evas_Object *)data; + ret_if(!bg); + + lock_pwd_util_bg_image_set(bg, NULL); +} + + + +static Evas_Object *_pwd_bg_add(void *data) +{ + Evas_Object *bg = NULL; + Evas_Object *parent = NULL; + int ret = 0; + + parent = (Evas_Object *)data; + retv_if(!parent, NULL); + + bg = elm_bg_add(parent); + goto_if(!bg, ERROR); + + elm_bg_option_set(bg, ELM_BG_OPTION_SCALE); + + elm_win_resize_object_add(parent, bg); + + evas_object_show(bg); + + lock_pwd_util_bg_image_set(bg, NULL); + + ret = system_settings_set_changed_cb(SYSTEM_SETTINGS_KEY_WALLPAPER_LOCK_SCREEN, _wallpaper_lock_screen_changed_cb, bg); + if (SYSTEM_SETTINGS_ERROR_NONE != ret) { + _E("Failed to register settings changed cb : %d", SYSTEM_SETTINGS_KEY_WALLPAPER_LOCK_SCREEN); + } + + return bg; + +ERROR: + _E("Failed to add password bg"); + + if (bg) { + evas_object_del(bg); + bg = NULL; + } + + return NULL; +} + + + +static Evas_Object *_pwd_layout_create(void *data) +{ + Evas_Object *layout = NULL; + Evas_Object *parent = NULL; + + parent = (Evas_Object *)data; + retv_if(!parent, NULL); + + layout = elm_layout_add(parent); + retv_if(!layout, NULL); + + if (!elm_layout_file_set(layout, LOCK_PWD_EDJE_FILE, "lock_pwd")) { + _E("Failed to set edje file : %s", LOCK_PWD_EDJE_FILE); + goto ERROR; + } + + evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(layout, EVAS_HINT_FILL, EVAS_HINT_FILL); + + evas_object_show(layout); + + return layout; + +ERROR: + _E("Failed to create password layout"); + + if (layout) { + evas_object_del(layout); + layout = NULL; + } + + return NULL; +} + + + +void lock_pwd_util_back_key_relased(void) +{ + _D("%s", __func__); + + ret_if(lock_pwd_simple_is_blocked_get()); + + lock_mgr_sound_play(LOCK_SOUND_TAP); + + lock_pwd_util_view_init(); +} + + + +void lock_pwd_util_create(Eina_Bool is_show) +{ + Evas_Object *win = NULL; + Evas_Object *conformant = NULL; + Evas_Object *bg = NULL; + Evas_Object *layout = NULL; + Evas_Object *pwd_layout = NULL; + int lock_type = 0; + int x = 0, y = 0, w = 0, h = 0; + + if (!s_lock_pwd_util.lock_pwd_win) { + win = window_mgr_pwd_lock_win_create(); + ret_if(!win); + s_lock_pwd_util.lock_pwd_win = win; + + elm_win_screen_size_get(win, &x, &y, &w, &h); + _D("win size : %dx%d(%d, %d)", w, h, x, y); + s_lock_pwd_util.win_w = w; + s_lock_pwd_util.win_h = h; + } + + conformant = _pwd_conformant_add(win); + goto_if(!conformant, ERROR); + s_lock_pwd_util.conformant = conformant; + + layout = _pwd_layout_create(conformant); + goto_if(!layout, ERROR); + s_lock_pwd_util.layout = layout; + + elm_object_content_set(conformant, layout); + + bg = _pwd_bg_add(win); + goto_if(!bg, ERROR); + s_lock_pwd_util.bg = bg; + + elm_object_part_content_set(layout, "sw.bg", bg); + + lock_type = status_active_get()->setappl_screen_lock_type_int; + _D("lock type : %d", lock_type); + + switch(lock_type) { + case SETTING_SCREEN_LOCK_TYPE_SIMPLE_PASSWORD: + pwd_layout = lock_pwd_simple_layout_create(layout); + break; + case SETTING_SCREEN_LOCK_TYPE_PASSWORD: + pwd_layout = lock_pwd_complex_layout_create(layout); + break; + default: + _E("lock type is not password : %d", lock_type); + goto ERROR; + } + goto_if(!pwd_layout, ERROR); + + elm_object_part_content_set(layout, "sw.lock_pwd", pwd_layout); + + if (is_show) { + evas_object_show(win); + } + + return; + +ERROR: + _E("Failed to launch password lockscreen"); + + lock_pwd_util_del(); + + return; +} + + + +void lock_pwd_util_del(void) +{ + int lock_type = status_active_get()->setappl_screen_lock_type_int; + _D("lock type : %d", lock_type); + + if (lock_type == SETTING_SCREEN_LOCK_TYPE_SIMPLE_PASSWORD) { + lock_pwd_simple_layout_del(); + } else if (lock_type == SETTING_SCREEN_LOCK_TYPE_PASSWORD) { + lock_pwd_complex_layout_del(); + } + + if (s_lock_pwd_util.layout) { + evas_object_del(s_lock_pwd_util.layout); + s_lock_pwd_util.layout = NULL; + } + + if (s_lock_pwd_util.conformant) { + evas_object_del(s_lock_pwd_util.conformant); + s_lock_pwd_util.conformant = NULL; + } + + if (s_lock_pwd_util.bg) { + system_settings_unset_changed_cb(SYSTEM_SETTINGS_KEY_WALLPAPER_LOCK_SCREEN); + evas_object_del(s_lock_pwd_util.bg); + s_lock_pwd_util.bg = NULL; + } + + if (s_lock_pwd_util.lock_pwd_win) { + evas_object_del(s_lock_pwd_util.lock_pwd_win); + s_lock_pwd_util.lock_pwd_win = NULL; + } +} + + + + +static void _pwd_popup_cb(void *data, Evas_Object *obj, void *event_info) +{ + ret_if(!data); + + evas_object_del((Evas_Object *)data); +} + + + +void lock_pwd_util_popup_create(char *title, char *text, Evas_Smart_Cb func, double timeout) +{ + Evas_Object *popup = NULL; + Evas_Object *btn = NULL; + + ret_if(!s_lock_pwd_util.lock_pwd_win); + + popup = elm_popup_add(s_lock_pwd_util.lock_pwd_win); + ret_if(!popup); + + elm_popup_orient_set(popup, ELM_POPUP_ORIENT_BOTTOM); + evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + + if (title) { + elm_object_part_text_set(popup, "title,text", title); + } + + if (text) { + elm_object_text_set(popup, text); + } + + btn = elm_button_add(popup); + goto_if(!btn, ERROR); + + elm_object_style_set(btn, "popup"); + elm_object_text_set(btn, _("IDS_COM_BUTTON_OK_ABB")); + elm_object_part_content_set(popup, "button1", btn); + + if (timeout > 0.0) { + elm_popup_timeout_set(popup, timeout); + } + + if (func) { + evas_object_smart_callback_add(btn, "clicked", func, popup); + ea_object_event_callback_add(popup, EA_CALLBACK_BACK, func, popup); + } else { + evas_object_smart_callback_add(btn, "clicked", _pwd_popup_cb, popup); + ea_object_event_callback_add(popup, EA_CALLBACK_BACK, _pwd_popup_cb, popup); + } + + evas_object_show(popup); + + return; + +ERROR: + _E("Failed to create lock popup"); + + if (btn) { + evas_object_del(btn); + btn = NULL; + } + + if (popup) { + evas_object_del(popup); + popup = NULL; + } + + return; +} + + + +void lock_pwd_util_view_init(void) +{ + _D("initialize password lock values"); + int lock_type = 0; + + if (!lock_mgr_lockscreen_launch()) { + _E("Failed to launch lockscreen"); + } + + /* clear pwd lockscreen */ + lock_type = status_active_get()->setappl_screen_lock_type_int; + if (lock_type == SETTING_SCREEN_LOCK_TYPE_SIMPLE_PASSWORD) { + lock_pwd_simple_view_init(); + } else if (lock_type == SETTING_SCREEN_LOCK_TYPE_PASSWORD) { + } +} + + + +Evas_Object *lock_pwd_util_win_get(void) +{ + return s_lock_pwd_util.lock_pwd_win; +} + + + +Eina_Bool lock_pwd_util_win_visible_get(void) +{ + retv_if(!s_lock_pwd_util.lock_pwd_win, EINA_FALSE); + return evas_object_visible_get(s_lock_pwd_util.lock_pwd_win); +} + + + +void lock_pwd_util_win_show(void) +{ + ret_if(!s_lock_pwd_util.lock_pwd_win); + evas_object_show(s_lock_pwd_util.lock_pwd_win); +} + + + +void lock_pwd_util_win_hide(void) +{ + ret_if(!s_lock_pwd_util.lock_pwd_win); + evas_object_hide(s_lock_pwd_util.lock_pwd_win); +} diff --git a/src/mobile/lock_pwd_verification.c b/src/mobile/lock_pwd_verification.c new file mode 100755 index 0000000..df64b1c --- /dev/null +++ b/src/mobile/lock_pwd_verification.c @@ -0,0 +1,207 @@ +/* + * Copyright (c) 2009-2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include +#include +#include + +#include "util.h" +#include "status.h" +#include "lock_mgr.h" +#include "lock_pwd_util.h" +#include "lock_pwd_verification.h" +#include "lock_pwd_simple.h" + +#define PASSWORD_LENGTH_MIN 4 +#define PASSWORD_LENGTH_MAX 16 + +typedef enum { + NORMAL_PWD = 0, + EMPTY_PWD = 1, + OVERLENGTH_PWD = 2, +} lock_pwd_type; + +static struct _s_lock_pwd_verification { + unsigned int current_attempt; + unsigned int remain_attempt; + unsigned int max_attempt; + unsigned int expire_sec; + unsigned int incorrect_count; +} s_lock_pwd_verification = { + .current_attempt = 0, + .remain_attempt = 0, + .max_attempt = 0, + .expire_sec = 0, + .incorrect_count = 0, +}; + + + +int lock_pwd_verification_current_attempt_get(void) +{ + return s_lock_pwd_verification.current_attempt; +} + + +int lock_pwd_verification_remain_attempt_get(void) +{ + return s_lock_pwd_verification.remain_attempt; +} + + +static Eina_Bool _pwd_verification_check_pwd(const char *str) +{ + int ret = SECURITY_SERVER_API_ERROR_PASSWORD_MISMATCH; + unsigned int current_attempt = 0; + unsigned int max_attempt = 0; + unsigned int expire_sec = 0; + + ret = security_server_chk_pwd(str, ¤t_attempt, &max_attempt, &expire_sec); + _D("ret(%d), current_attempt(%d), max_attempt(%d), valid_sec(%d)", ret, current_attempt, max_attempt, expire_sec); + + s_lock_pwd_verification.current_attempt = current_attempt; + s_lock_pwd_verification.max_attempt = max_attempt; + s_lock_pwd_verification.expire_sec = expire_sec; + + switch(ret) { + case SECURITY_SERVER_API_SUCCESS: + case SECURITY_SERVER_API_ERROR_PASSWORD_EXPIRED: + _E("Correct password"); + return EINA_TRUE; + case SECURITY_SERVER_API_ERROR_PASSWORD_RETRY_TIMER: + _E("Timer set! : not saved"); + break; + default: + _E("Incorrect password"); + break; + } + + return EINA_FALSE; +} + + +static lock_pwd_type _pwd_verification_check_length(const char *str, int min, int max) +{ + int len = 0; + + retv_if(!str, EMPTY_PWD); + + len = strlen(str); + retv_if(len == 0, EMPTY_PWD); + + retv_if(len < min || len > max, OVERLENGTH_PWD); + + return NORMAL_PWD; +} + +static void _pwd_values_init(void) +{ + s_lock_pwd_verification.current_attempt = 0; + s_lock_pwd_verification.remain_attempt = PASSWORD_ATTEMPTS_MAX_NUM; + s_lock_pwd_verification.max_attempt = PASSWORD_ATTEMPTS_MAX_NUM; + s_lock_pwd_verification.incorrect_count = 0; +} + +lock_pwd_event_e lock_pwd_verification_verify(const char *password) +{ + lock_pwd_type pwd_type = NORMAL_PWD; + + retv_if(!password, PWD_EVENT_EMPTY); + + pwd_type = _pwd_verification_check_length(password, PASSWORD_LENGTH_MIN, PASSWORD_LENGTH_MAX); + switch(pwd_type) { + case NORMAL_PWD: + if (_pwd_verification_check_pwd(password)) { + _D("Correct Password"); + _pwd_values_init(); + return PWD_EVENT_CORRECT; + } else { + s_lock_pwd_verification.incorrect_count++; + s_lock_pwd_verification.remain_attempt--; + _D("incorrect_count(%d), remain_attempt(%d)", s_lock_pwd_verification.incorrect_count, s_lock_pwd_verification.remain_attempt); + + if (s_lock_pwd_verification.remain_attempt == 0) { + _pwd_values_init(); + return PWD_EVENT_INPUT_BLOCK; + } else { + return PWD_EVENT_INCORRECT; + } + } + break; + case EMPTY_PWD: + return PWD_EVENT_EMPTY; + break; + case OVERLENGTH_PWD: + return PWD_EVENT_OVER; + break; + } + + return PWD_EVENT_INCORRECT; +} + +void lock_pwd_verification_policy_create(void) +{ + int ret = 0; + unsigned int current_attempt = 0; + unsigned int max_attempt = 0; + unsigned int expire_sec = 0; + + ret = security_server_is_pwd_valid(¤t_attempt, &max_attempt, &expire_sec); + _D("policy status(%d), current_attempt(%d), max_attempt(%d)", ret, current_attempt, max_attempt); + + if (ret == SECURITY_SERVER_API_ERROR_NO_PASSWORD || + ret == SECURITY_SERVER_API_ERROR_PASSWORD_EXIST) { + s_lock_pwd_verification.current_attempt = current_attempt; + s_lock_pwd_verification.max_attempt = max_attempt; + s_lock_pwd_verification.expire_sec = expire_sec; + } + + s_lock_pwd_verification.remain_attempt = PASSWORD_ATTEMPTS_MAX_NUM; + s_lock_pwd_verification.incorrect_count = 0; + + return; +} + +void lock_pwd_verification_popup_create(lock_pwd_event_e event) +{ + char popup_text[BUF_SIZE_512] = { 0, }; + int remain_attempt = 0; + int current_attempt = 0; + + current_attempt = lock_pwd_verification_current_attempt_get(); + remain_attempt = lock_pwd_verification_remain_attempt_get(); + _D("current_attemp(%d), remain_attempt(%d)", current_attempt, remain_attempt); + + switch(event) { + case PWD_EVENT_INCORRECT_WARNING: + snprintf(popup_text, sizeof(popup_text), _("IDS_LCKSCN_POP_YOU_HAVE_ATTEMPTED_TO_UNLOCK_THE_DEVICE_INCORRECTLY_P1SD_P1SD_TIMES_YOU_HAVE_P2SD_ATTEMPTS_LEFT_BEFORE_THE_DEVICE_IS_RESET_THE_DEVICE_IS_RESET_TO_FACTORY_MSG"), current_attempt, remain_attempt); + lock_pwd_util_popup_create(NULL, popup_text, NULL, 0.0); + break; + case PWD_EVENT_INPUT_BLOCK: + snprintf(popup_text, sizeof(popup_text), _("IDS_LCKSCN_POP_YOU_HAVE_MADE_P1SD_UNSUCCESSFUL_ATTEMPTS_TO_UNLOCK_YOUR_DEVICE_TRY_AGAIN_IN_P2SD_SECONDS"), PASSWORD_ATTEMPTS_MAX_NUM, PASSWORD_BLOCK_SECONDS); + lock_pwd_util_popup_create(_("IDS_LCKSCN_HEADER_UNABLE_TO_UNLOCK_SCREEN_ABB"), popup_text, NULL, 15.0); + break; + case PWD_EVENT_INPUT_BLOCK_WARNING: + snprintf(popup_text, sizeof(popup_text), _("IDS_LCKSCN_POP_YOU_HAVE_ATTEMPTED_TO_UNLOCK_THE_DEVICE_INCORRECTLY_P1SD_TIMES_YOU_HAVE_P2SD_ATTEMPTS_LEFT_BEFORE_THE_DEVICE_IS_RESET_TO_FACTORY_MSG"), current_attempt, remain_attempt); + lock_pwd_util_popup_create(NULL, popup_text, NULL, 0.0); + break; + default: + break; + } +} diff --git a/src/mobile/popup.c b/src/mobile/popup.c new file mode 100644 index 0000000..46b9e0c --- /dev/null +++ b/src/mobile/popup.c @@ -0,0 +1,112 @@ +/* + * Copyright (c) 2000 - 2015 Samsung Electronics Co., Ltd. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "popup.h" +#include "util.h" + +#define POPUP_DATA_KEY_WINDOW "__popup_window__" + +static void _popup_destroy(Evas_Object *popup) +{ + Evas_Object *win = NULL; + + if (popup) { + win = evas_object_data_del(popup, POPUP_DATA_KEY_WINDOW); + evas_object_del(popup); + + if (win) { + evas_object_del(win); + } + } +} + +static Evas_Object *_window_create(void) +{ + Evas_Object *win = NULL; + int win_w = 0, win_h = 0; + + win = elm_win_add(NULL, "STARTER-POPUP", ELM_WIN_DIALOG_BASIC); + retv_if(!win, NULL); + + elm_win_title_set(win, "STARTER-POPUP"); + elm_win_alpha_set(win, EINA_TRUE); + elm_win_borderless_set(win, EINA_TRUE); + elm_win_autodel_set(win, EINA_TRUE); + elm_win_raise(win); + + elm_win_screen_size_get(win, NULL, NULL, &win_w, &win_h); + _D("win size : (%dx%d)", win_w, win_h); + evas_object_resize(win, win_w, win_h); + + evas_object_show(win); + + return win; +} + + + +static void _popup_btn_clicked_cb(void *data, Evas_Object *obj, void *event_info) +{ + Evas_Object *popup = (Evas_Object *)data; + ret_if(!popup); + + _popup_destroy(popup); +} + + + +Evas_Object *popup_create(const char *title, const char *text) +{ + Evas_Object *win = NULL; + Evas_Object *popup = NULL; + Evas_Object *btn = NULL; + + retv_if(!title, NULL); + retv_if(!text, NULL); + + win = _window_create(); + goto_if(!win, ERROR); + + popup = elm_popup_add(win); + goto_if(!popup, ERROR); + + elm_popup_orient_set(popup, ELM_POPUP_ORIENT_BOTTOM); + evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_object_part_text_set(popup, "title,text", title); + elm_object_text_set(popup, text); + evas_object_data_set(popup, POPUP_DATA_KEY_WINDOW, win); + + /* ok button */ + btn = elm_button_add(popup); + goto_if(!btn, ERROR); + + elm_object_style_set(btn, "popup"); + elm_object_text_set(btn, S_("IDS_COM_SK_CONFIRM")); + elm_object_part_content_set(popup, "button1", btn); + evas_object_smart_callback_add(btn, "clicked", _popup_btn_clicked_cb, popup); + + evas_object_show(popup); + + return popup; + +ERROR: + _E("Failed to create popup"); + + _popup_destroy(popup); + + return NULL; +} + diff --git a/src/mobile/starter.c b/src/mobile/starter.c new file mode 100644 index 0000000..7c09b1c --- /dev/null +++ b/src/mobile/starter.c @@ -0,0 +1,255 @@ +/* + * Copyright (c) 2000 - 2015 Samsung Electronics Co., Ltd. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +#include "starter.h" +//#include "lock_mgr.h" +#include "home_mgr.h" +#include "hw_key.h" +#include "process_mgr.h" +#include "util.h" +#include "status.h" + +#define PWLOCK_LITE_PKG_NAME "org.tizen.pwlock-lite" + +#define DATA_UNENCRYPTED "unencrypted" +#define DATA_MOUNTED "mounted" +#define SD_DATA_ENCRYPTED "encrypted" +#define SD_CRYPT_META_FILE ".MetaEcfsFile" +#define MMC_MOUNT_POINT "/opt/storage/sdcard" + + + +static void _hide_home(void) +{ + vconf_set_int(VCONFKEY_STARTER_SEQUENCE, 0); +} + + + +static void _show_home(void) +{ + int show_menu = 0; + + if (status_active_get()->starter_sequence || !show_menu) { + vconf_set_int(VCONFKEY_STARTER_SEQUENCE, 1); + } +} + + + +static Eina_Bool _finish_boot_animation(void *data) +{ + if (vconf_set_int(VCONFKEY_BOOT_ANIMATION_FINISHED, 1) != 0) { + _E("Failed to set boot animation finished set"); + } + _show_home(); + + return ECORE_CALLBACK_CANCEL; +} + + + +static int _fail_to_launch_pwlock(const char *appid, const char *key, const char *value, void *cfn, void *afn) +{ + _finish_boot_animation(NULL); + return 0; +} + + + +static void _after_launch_pwlock(int pid) +{ + process_mgr_set_pwlock_priority(pid); + ecore_timer_add(0.5, _finish_boot_animation, NULL); +} + + + +static void _signal_handler(int signum, siginfo_t *info, void *unused) +{ + _D("_signal_handler : Terminated..."); + elm_exit(); +} + + + +static int _power_off_cb(status_active_key_e key, void *data) +{ + int val = status_active_get()->sysman_power_off_status; + + if (val == VCONFKEY_SYSMAN_POWER_OFF_DIRECT + || val == VCONFKEY_SYSMAN_POWER_OFF_RESTART) + { + _D("_power_off_cb : Terminated..."); + elm_exit(); + } + + return 1; +} + + + +#if 0 +static void _data_encryption_cb(keynode_t * node, void *data) +{ + char *file = NULL; + + file = vconf_get_str(VCONFKEY_ODE_CRYPTO_STATE); + if (!file) { + return; + } + + _D("get the value : %s", file); + if (!strcmp(file, DATA_MOUNTED)) { + lock_mgr_daemon_start(); + home_mgr_init(NULL); + } + free(file); +} +#endif + + + +static int _set_i18n(const char *domain, const char *dir) +{ + char *r = NULL; + + if (domain == NULL) { + errno = EINVAL; + return -1; + } + + char *lang = vconf_get_str(VCONFKEY_LANGSET); + r = setlocale(LC_ALL, lang); + if (!r) { + _E("setlocale() error"); + } + if (lang) { + free(lang); + } + + r = bindtextdomain(domain, dir); + if (!r) { + _E("bindtextdomain() error"); + } + + r = textdomain(domain); + if (!r) { + _E("textdomain() error"); + } + + return 0; +} + + + +static void _init(struct appdata *ad) +{ + struct sigaction act; + char *file = NULL; + + memset(&act,0x00,sizeof(struct sigaction)); + act.sa_sigaction = _signal_handler; + act.sa_flags = SA_SIGINFO; + + int ret = sigemptyset(&act.sa_mask); + if (ret < 0) { + _E("Failed to sigemptyset[%s]", strerror(errno)); + } + ret = sigaddset(&act.sa_mask, SIGTERM); + if (ret < 0) { + _E("Failed to sigaddset[%s]", strerror(errno)); + } + ret = sigaction(SIGTERM, &act, NULL); + if (ret < 0) { + _E("Failed to sigaction[%s]", strerror(errno)); + } + + _set_i18n(PACKAGE, LOCALEDIR); + + status_register(); + status_active_register_cb(STATUS_ACTIVE_KEY_SYSMAN_POWER_OFF_STATUS, _power_off_cb, NULL); + + /* Ordering : _hide_home -> process_mgr_must_launch(pwlock) -> _show_home */ + _hide_home(); + process_mgr_must_launch(PWLOCK_LITE_PKG_NAME, NULL, NULL, _fail_to_launch_pwlock, _after_launch_pwlock); + +#if 0 + /* Check data encrption */ + file = vconf_get_str(VCONFKEY_ODE_CRYPTO_STATE); + if (file) { + _D("get VCONFKEY : %s\n", file); + if (strncmp(DATA_UNENCRYPTED, file, strlen(file))) { + if (vconf_notify_key_changed(VCONFKEY_ODE_CRYPTO_STATE, _data_encryption_cb, NULL) != 0) { + _E("[Error] vconf notify changed is failed: %s", VCONFKEY_ODE_CRYPTO_STATE); + } else { + _D("waiting mount..!!"); + free(file); + return; + } + } + free(file); + } +#endif + + //lock_mgr_daemon_start(); + hw_key_create_window(); + home_mgr_init(NULL); +} + + + +static void _fini(struct appdata *ad) +{ + home_mgr_fini(); + hw_key_destroy_window(); + //lock_mgr_daemon_end(); + + status_active_unregister_cb(STATUS_ACTIVE_KEY_SYSMAN_POWER_OFF_STATUS, _power_off_cb); + status_unregister(); +} + + + +int main(int argc, char *argv[]) +{ + struct appdata ad; + + _D("starter is launched..!!"); + + elm_init(argc, argv); + _init(&ad); + + elm_run(); + + _fini(&ad); + elm_shutdown(); + + return 0; +} diff --git a/src/mobile/window_mgr.c b/src/mobile/window_mgr.c new file mode 100644 index 0000000..69fe357 --- /dev/null +++ b/src/mobile/window_mgr.c @@ -0,0 +1,400 @@ +/* + * Copyright (c) 2000 - 2015 Samsung Electronics Co., Ltd. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include +#include +#include +#include +#include + +#include "window_mgr.h" +#include "util.h" +#include "lock_pwd_util.h" + +#define STR_ATOM_PANEL_SCROLLABLE_STATE "_E_MOVE_PANEL_SCROLLABLE_STATE" + + + +struct _lockw_data { + Eina_Bool is_registered; + Ecore_X_Window lock_x_window; + + Ecore_Event_Handler *h_wincreate; + Ecore_Event_Handler *h_winshow; + Ecore_Event_Handler *h_winhide; +}; + + + +static int _is_on_screen(Ecore_X_Display * dpy, Ecore_X_Window window) +{ + Ecore_X_Window root; + Window child; + Window win; + + int rel_x = 0; + int rel_y = 0; + int abs_x = 0; + int abs_y = 0; + + unsigned int width = 0; + unsigned int height = 0; + unsigned int border = 0; + unsigned int depth = 0; + unsigned int root_w = 0; + unsigned int root_h = 0; + + Eina_Bool ret = FALSE; + + root = ecore_x_window_root_first_get(); + XGetGeometry(dpy, root, &win, &rel_x, &rel_y, &root_w, &root_h, &border, &depth); + _D("root rel_x[%d] rel_y[%d] border[%d] width[%d] height[%d]", rel_x, rel_y, border, root_w, root_h); + + if (XGetGeometry(dpy, window, &win, &rel_x, &rel_y, &width, &height, &border, &depth)) { + if (XTranslateCoordinates(dpy, window, root, 0, 0, &abs_x, &abs_y, &child)) { + _D("abs_x[%d] abs_y[%d] border[%d] width[%d] height[%d]", abs_x, abs_y, border, width, height); + if ((abs_x - border) >= root_w + || (abs_y - border) >= root_h + || (width + abs_x) <= 0 || (height + abs_y) <= 0) + { + ret = FALSE; + } else { + ret = (width == root_w) && (height == root_h); + } + } + } + + return ret; +} + + + +static Window _get_user_created_window(Window win) +{ + Atom type_ret = 0; + int ret, size_ret = 0; + unsigned long num_ret = 0, bytes = 0; + unsigned char *prop_ret = NULL; + unsigned int xid; + Atom prop_user_created_win; + + prop_user_created_win = XInternAtom(ecore_x_display_get(), "_E_USER_CREATED_WINDOW", False); + + ret = XGetWindowProperty(ecore_x_display_get() + , win, prop_user_created_win + , 0L, 1L + , False, 0 + , &type_ret, &size_ret + , &num_ret, &bytes + , &prop_ret); + if (ret != Success) { + if (prop_ret) + XFree((void *) prop_ret); + return win; + } else if (!prop_ret) { + return win; + } + + memcpy(&xid, prop_ret, sizeof(unsigned int)); + XFree((void *)prop_ret); + + return xid; + +} + + + +int window_mgr_get_focus_window_pid(void) +{ + Ecore_X_Window x_win_focused = 0; + int pid = 0; + int ret = -1; + + _D("%s, %d", __func__, __LINE__); + + x_win_focused = ecore_x_window_focus_get(); + ret = ecore_x_netwm_pid_get(x_win_focused, &pid); + if(ret != 1) { + _E("Can't get pid for focus x window (%x)\n", x_win_focused); + return -1; + } + _D("PID(%d) for focus x window (%x)\n", pid, x_win_focused); + + return pid; +} + + + +static void _pwd_transient_set(Ecore_X_Window win, Ecore_X_Window for_win) +{ + _W("%p is transient for %p", win, for_win); + + ecore_x_icccm_transient_for_set(win, for_win); +} + + + +static void _pwd_transient_unset(Ecore_X_Window xwin) +{ + ret_if(!xwin); + + _W("%p is not transient", xwin); + ecore_x_icccm_transient_for_unset(xwin); +} + + + +Eina_Bool window_mgr_pwd_transient_set(void *data) +{ + Evas_Object *pwd_win = NULL; + Ecore_X_Window pwd_x_win; + lockw_data *lockw = (lockw_data *) data; + retv_if(!lockw, EINA_FALSE); + + pwd_win = lock_pwd_util_win_get(); + retv_if(!pwd_win, EINA_FALSE); + + pwd_x_win = elm_win_xwindow_get(pwd_win); + retv_if(!pwd_x_win, EINA_FALSE); + + retv_if(!lockw->lock_x_window, EINA_FALSE); + + /* unset transient */ + _pwd_transient_unset(lockw->lock_x_window); + + /* set transient */ + _pwd_transient_set(lockw->lock_x_window, pwd_x_win); + + return EINA_TRUE; +} + + + +Eina_Bool window_mgr_set_prop(lockw_data * data, int lock_app_pid, void *event) +{ + Ecore_X_Event_Window_Create *e = event; + Ecore_X_Window user_window = 0; + lockw_data *lockw = (lockw_data *) data; + int pid = 0; + int ret = 0; + + retv_if(!lockw, EINA_FALSE); + + user_window = _get_user_created_window((Window) (e->win)); + + ret = ecore_x_netwm_pid_get(user_window, &pid); + retv_if(ret != 1, EINA_FALSE); + + _D("Check PID(%d) window. (lock_app_pid : %d)", pid, lock_app_pid); + + if (lock_app_pid == pid) { + if (_is_on_screen(ecore_x_display_get(), user_window) == TRUE) { + lockw->lock_x_window = user_window; + /* window effect : fade in /out */ + ecore_x_icccm_name_class_set(user_window, "LOCK_SCREEN", "LOCK_SCREEN"); + ecore_x_netwm_window_type_set(user_window, ECORE_X_WINDOW_TYPE_NOTIFICATION); + utilx_set_system_notification_level(ecore_x_display_get(), user_window, UTILX_NOTIFICATION_LEVEL_NORMAL); + utilx_set_window_opaque_state(ecore_x_display_get(), user_window, UTILX_OPAQUE_STATE_ON); + + /* set transient */ + if (!window_mgr_pwd_transient_set(lockw)) { + _E("Failed to set transient"); + } + + return EINA_TRUE; + } + } + return EINA_FALSE; +} + + + +Eina_Bool window_mgr_set_effect(lockw_data * data, int lock_app_pid, void *event) +{ + Ecore_X_Event_Window_Create *e = event; + Ecore_X_Window user_window = 0; + int pid = 0; + int ret = 0; + + user_window = _get_user_created_window((Window) (e->win)); + ret = ecore_x_netwm_pid_get(user_window, &pid); + retv_if(ret != 1, EINA_FALSE); + + if (lock_app_pid == pid) { + if (_is_on_screen(ecore_x_display_get(), user_window) == TRUE) { + Ecore_X_Atom ATOM_WINDOW_EFFECT_ENABLE = 0; + unsigned int effect_state = 0; + + ATOM_WINDOW_EFFECT_ENABLE = ecore_x_atom_get("_NET_CM_WINDOW_EFFECT_ENABLE"); + if (ATOM_WINDOW_EFFECT_ENABLE) { + ecore_x_window_prop_card32_set(user_window, ATOM_WINDOW_EFFECT_ENABLE, &effect_state, 1); + } else { + _E("ecore_x_atom_get() failed"); + } + return EINA_TRUE; + } + } + return EINA_FALSE; +} + + + +void window_mgr_set_scroll_prop(lockw_data *data, int lock_type) +{ + lockw_data *lockw = (lockw_data *) data; + Ecore_X_Atom ATOM_PANEL_SCROLLABLE_STATE = 0; + unsigned int val[3] = { 0, }; + + ret_if(!lockw); + + ATOM_PANEL_SCROLLABLE_STATE = ecore_x_atom_get(STR_ATOM_PANEL_SCROLLABLE_STATE); + if (lock_type == SETTING_SCREEN_LOCK_TYPE_SIMPLE_PASSWORD || + lock_type == SETTING_SCREEN_LOCK_TYPE_PASSWORD) { + val[0] = 0; // always enable F + val[1] = 0; // quickpanel enable F + val[2] = 0; // apptray enable F + } else { + val[0] = 0; // always enable F + val[1] = 1; // quickpanel enable T + val[2] = 0; // apptray enable F + } + ecore_x_window_prop_card32_set(lockw->lock_x_window, ATOM_PANEL_SCROLLABLE_STATE, val, 3); +} + + + +void window_mgr_register_event(void *data, lockw_data * lockw, + Eina_Bool (*create_cb) (void *, int, void *), + Eina_Bool (*show_cb) (void *, int, void *), + Eina_Bool (*hide_cb) (void *, int, void *)) +{ + Ecore_X_Window root_window; + + ret_if(!lockw); + + if (lockw->is_registered) { + _E("Already register event cb"); + return; + } + + /* For getting window x event */ + root_window = ecore_x_window_root_first_get(); + ecore_x_window_client_sniff(root_window); + + lockw->h_wincreate = ecore_event_handler_add(ECORE_X_EVENT_WINDOW_CREATE, create_cb, data); + lockw->h_winshow = ecore_event_handler_add(ECORE_X_EVENT_WINDOW_SHOW, show_cb, data); + lockw->h_winhide = ecore_event_handler_add(ECORE_X_EVENT_WINDOW_HIDE, hide_cb, data); + + lockw->is_registered = EINA_TRUE; +} + + + +static inline void _unregister_event(lockw_data *lockw) +{ + Ecore_X_Window root_window; + + /* unset transient */ + _pwd_transient_unset(lockw->lock_x_window); + + /* delete getting window x event */ + root_window = ecore_x_window_root_first_get(); + ecore_x_window_client_sniff(root_window); + + /* delete window create event handler */ + if (lockw->h_wincreate) { + ecore_event_handler_del(lockw->h_wincreate); + lockw->h_wincreate = NULL; + } + if (lockw->h_winshow) { + ecore_event_handler_del(lockw->h_winshow); + lockw->h_winshow = NULL; + } + if (lockw->h_winhide) { + ecore_event_handler_del(lockw->h_winhide); + lockw->h_winhide = NULL; + } + + ecore_x_pointer_ungrab(); + + lockw->is_registered = EINA_FALSE; +} + + + +void window_mgr_unregister_event(lockw_data *lockw) +{ + ret_if(!lockw); + + if (!lockw->is_registered) { + _E("event cb is not registered"); + return; + } + + _unregister_event(lockw); +} + + + +lockw_data *window_mgr_init(void) +{ + lockw_data *lockw = NULL; + + lockw = calloc(1, sizeof(*lockw)); + + return lockw; +} + + + +void window_mgr_fini(lockw_data *lockw) +{ + ret_if(!lockw); + + if (lockw->is_registered) { + _unregister_event(lockw); + } + + free(lockw); +} + +Evas_Object *window_mgr_pwd_lock_win_create(void) +{ + Evas_Object *win = elm_win_add(NULL, "LOCKSCREEN_PWD", ELM_WIN_NOTIFICATION); + retv_if(!win, NULL); + + elm_win_alpha_set(win, EINA_TRUE); + elm_win_borderless_set(win, EINA_TRUE); + elm_win_autodel_set(win, EINA_TRUE); + elm_win_role_set(win, "no-dim"); + + Ecore_X_Window xwin = elm_win_xwindow_get(win); + if (xwin) { + ecore_x_netwm_window_type_set(xwin, ECORE_X_WINDOW_TYPE_NOTIFICATION); + utilx_set_system_notification_level(ecore_x_display_get(), xwin, UTILX_NOTIFICATION_LEVEL_NORMAL); + utilx_set_window_opaque_state(ecore_x_display_get(), xwin, UTILX_OPAQUE_STATE_ON); + + Ecore_X_Atom ATOM_PANEL_SCROLLABLE_STATE = ecore_x_atom_get(STR_ATOM_PANEL_SCROLLABLE_STATE); + unsigned int val[3] = { 0, }; + + ecore_x_window_prop_card32_set(xwin, ATOM_PANEL_SCROLLABLE_STATE, val, 3); + } + + return win; +} diff --git a/src/package_mgr.c b/src/package_mgr.c new file mode 100644 index 0000000..452887d --- /dev/null +++ b/src/package_mgr.c @@ -0,0 +1,42 @@ +/* + * Copyright (c) 2000 - 2015 Samsung Electronics Co., Ltd. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include + +#include "package_mgr.h" +#include "util.h" + + + +bool package_mgr_exist_app(char *appid) +{ + int ret = 0; + pkgmgrinfo_appinfo_h handle = NULL; + + ret = pkgmgrinfo_appinfo_get_appinfo(appid, &handle); + if (PMINFO_R_OK != ret || NULL == handle) { + _SECURE_D("%s doesn't exist in this binary", appid); + return false; + } + + pkgmgrinfo_appinfo_destroy_appinfo(handle); + + return true; +} + + + diff --git a/src/pkg_event.c b/src/pkg_event.c deleted file mode 100755 index 46feba9..0000000 --- a/src/pkg_event.c +++ /dev/null @@ -1,301 +0,0 @@ - /* - * Copyright 2012 Samsung Electronics Co., Ltd - * - * Licensed under the Flora License, Version 1.1 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://floralicense.org/license/ - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - - - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "pkg_event.h" -#include "util.h" - - -#define CONF_FILE "/usr/share/install-info/desktop.conf" -#define BUFSZE 1024 - - -extern int errno; -struct inotify_path -{ - int wd; - char *path; -}; - -struct desktop_notifier s_desktop_notifier = { - .number = 0, - .ifd = 0, - .handler = NULL, -}; - - - -struct inotify_path paths[CONF_PATH_NUMBER]; - - -static Eina_Bool -directory_notify(void* data, Ecore_Fd_Handler* fd_handler) -{ - char *buf; - ssize_t read_size, len, i = 0; - int fd; - - fd = ecore_main_fd_handler_fd_get(fd_handler); - _D("There are some modification, ifd [%d]", fd); - if(fd < 0) { - _E("Failed to get fd"); - return ECORE_CALLBACK_CANCEL; - } - - if (ioctl(fd, FIONREAD, &read_size) < 0) { - _E("Failed to get q size"); - return ECORE_CALLBACK_CANCEL; - } - - if (read_size <= 0) { - _E("Buffer is not ready!!!"); - return ECORE_CALLBACK_RENEW; - } - - buf = malloc(read_size); - if (!buf) { - _E("Failed to allocate heap for event handling"); - return ECORE_CALLBACK_RENEW; - } - - len = read(fd, buf, read_size); - if (len < 0) { - free(buf); - return ECORE_CALLBACK_CANCEL; - } - buf[read_size - 1] = '\0'; - - while (i < len) { - struct inotify_event* event = (struct inotify_event*) &buf[i]; - char *str_potksed = "potksed."; - char *package = NULL; - ssize_t idx; - int nev_name; - - nev_name = strlen(event->name) - 1; - for (idx = 0; nev_name >= 0 && str_potksed[idx]; idx++) { - if (event->name[nev_name] != str_potksed[idx]) { - break; - } - nev_name --; - } - - if (str_potksed[idx] != '\0' || nev_name < 0) { - _D("This is not a desktop file : %s", event->name); - i += sizeof(struct inotify_event) + event->len; - continue; - } - - package = strdup(event->name); - break_if(NULL == package); - - package[nev_name + 1] = '\0'; - _D("Package : %s", package); - - if (event->mask & IN_CLOSE_WRITE || event->mask & IN_MOVED_TO) { - ail_appinfo_h ai = NULL; - ail_error_e ret; - - ret = ail_get_appinfo(package, &ai); - if (AIL_ERROR_OK == ret || AIL_ERROR_NO_DATA == ret) { - if (ai) ail_destroy_appinfo(ai); - - if (AIL_ERROR_NO_DATA == ret) { - if (ail_desktop_add(package) < 0) { - _D("Failed to add a new package (%s)", event->name); - } - } else if (AIL_ERROR_OK == ret) { - if (ail_desktop_update(package) < 0) { - _D("Failed to add a new package (%s)", event->name); - } - } - } else { - _E("Failed to get appinfo"); - } - } else if (event->mask & IN_DELETE) { - if (ail_desktop_remove(package) < 0) - _D("Failed to remove a package (%s)", event->name); - } else { - _D("this event is not dealt with inotify"); - } - - free(package); - - i += sizeof(struct inotify_event) + event->len; - } - - free(buf); - return ECORE_CALLBACK_RENEW; -} - - - -static inline char *_ltrim(char *str) -{ - retv_if(NULL == str, NULL); - while (*str && (*str == ' ' || *str == '\t' || *str == '\n')) str ++; - return str; -} - - - -static inline int _rtrim(char *str) -{ - int len; - - retv_if(NULL == str, 0); - - len = strlen(str); - while (--len >= 0 && (str[len] == ' ' || str[len] == '\n' || str[len] == '\t')) { - str[len] = '\0'; - } - - return len; -} - - - -static int _retrieve_conf_path(struct inotify_path* paths) -{ - char *line = NULL; - FILE *fp; - size_t size = 0; - ssize_t read; - int i = 0; - - fp = fopen(CONF_FILE, "r"); - if (NULL == fp) { - _E(CONF_FILE); - return -1; - } - - while ((read = getline(&line, &size, fp)) != -1 && i < CONF_PATH_NUMBER - 1) { - char *begin; - - if (size <= 0) break; - - begin = _ltrim(line); - _rtrim(line); - - if (*begin == '#' || *begin == '\0') continue; - - paths[i].path = strdup(begin); - i++; - } - - if (line) free(line); - paths[i].path = NULL; - fclose(fp); - - return i; -} - - - -static void _unretrieve_conf_path(struct inotify_path* paths, int number) -{ - register int i; - - for (i = 0; i < number; i ++) { - if (paths[i].path) { - free(paths[i].path); - paths[i].path = NULL; - } - } -} - - - -void pkg_event_init() -{ - int wd = 0; - int i; - - s_desktop_notifier.ifd = inotify_init(); - if (s_desktop_notifier.ifd == -1) { - _E("inotify_init error: %s", strerror(errno)); - return; - } - - s_desktop_notifier.number = _retrieve_conf_path(paths); - - for (i = 0; i < CONF_PATH_NUMBER && paths[i].path; i++) - { - _D("Configuration file for desktop file monitoring [%s] is added", paths[i].path); - if (access(paths[i].path, R_OK) != 0) - { - ecore_file_mkpath(paths[i].path); - if (chmod(paths[i].path, 0777) == -1) { - _E("cannot chmod %s", paths[i].path); - } - } - - wd = inotify_add_watch(s_desktop_notifier.ifd, paths[i].path, IN_CLOSE_WRITE | IN_MOVED_TO | IN_DELETE); - if (wd == -1) { - _E("inotify_add_watch error: %s", strerror(errno)); - close(s_desktop_notifier.ifd); - return; - } - - paths[i].wd = wd; - } - - s_desktop_notifier.handler = ecore_main_fd_handler_add(s_desktop_notifier.ifd, ECORE_FD_READ, directory_notify, NULL, NULL, NULL); - if (!s_desktop_notifier.handler) { - _E("cannot add handler for inotify"); - } -} - - - -void pkg_event_fini(void) -{ - register int i; - - if (s_desktop_notifier.handler) { - ecore_main_fd_handler_del(s_desktop_notifier.handler); - } - - for (i = 0; i < CONF_PATH_NUMBER; i ++) { - if (paths[i].wd) { - if (inotify_rm_watch(s_desktop_notifier.ifd, paths[i].wd) < 0) { - _E("Error: %s", strerror(errno)); - } - paths[i].wd = 0; - } - } - - _unretrieve_conf_path(paths, s_desktop_notifier.number); - - if (s_desktop_notifier.ifd) { - close(s_desktop_notifier.ifd); - s_desktop_notifier.ifd = 0; - } -} diff --git a/src/process_mgr.c b/src/process_mgr.c new file mode 100644 index 0000000..820259a --- /dev/null +++ b/src/process_mgr.c @@ -0,0 +1,434 @@ +/* + * Copyright (c) 2000 - 2015 Samsung Electronics Co., Ltd. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include +#include +#include + +#include "process_mgr.h" +#include "util.h" +#include "dbus_util.h" + +#define LOCKD_VOICE_CALL_PKG_NAME "org.tizen.call" +#define LOCKD_VIDEO_CALL_PKG_NAME "org.tizen.vtmain" + +#define NICE_VALUE_PWLOCK -5 +#define NICE_VALUE_LOCKSCREEN -20 + + + +typedef struct _launch_info_s { + char *appid; + char *key; + char *value; + after_func afn; + change_func cfn; +} launch_info_s; + + + +static int _try_to_launch(const char *appid, const char *key, const char *value, after_func afn) +{ + int pid = -1; + bundle *b = NULL; + + retv_if(!appid, -1); + + if (key) { + b = bundle_create(); + bundle_add(b, key, value); + } + + pid = aul_launch_app(appid, b); + if (b) bundle_free(b); + if (pid > 0) { + _D("Succeed to launch %s", appid); + if (afn) afn(pid); + } + + return pid; +} + + + +static Eina_Bool _must_launch_cb(void *data) +{ + launch_info_s *launch_info = data; + int pid; + + retv_if(!launch_info, ECORE_CALLBACK_CANCEL); + + pid = _try_to_launch(launch_info->appid, launch_info->key, launch_info->value, launch_info->afn); + if (pid > 0) { + goto OUT; + } + + retv_if(pid == AUL_R_ECOMM, ECORE_CALLBACK_RENEW); + retv_if(pid == AUL_R_ETERMINATING, ECORE_CALLBACK_RENEW); + if (pid == AUL_R_ERROR) { + if (launch_info->cfn + && 0 == launch_info->cfn(launch_info->appid, launch_info->key, launch_info->value, (void *) launch_info->cfn, (void *) launch_info->afn)) + { + _D("change func has set the next appid"); + } else { + _E("change func has returned error"); + } + goto OUT; + } + + return ECORE_CALLBACK_RENEW; + +OUT: + free(launch_info->appid); + free(launch_info->key); + free(launch_info->value); + free(launch_info); + return ECORE_CALLBACK_CANCEL; +} + + + +void process_mgr_must_launch(const char *appid, const char *key, const char *value, change_func cfn, after_func afn) +{ + Ecore_Timer *timer = NULL; + launch_info_s *launch_info = NULL; + int pid = -1; + + _D("Must launch %s", appid); + + pid = _try_to_launch(appid, key, value, afn); + if (pid > 0) return; + + _E("Failed the first try to launch %s", appid); + + launch_info = calloc(1, sizeof(launch_info_s)); + ret_if(!launch_info); + + + if (appid) launch_info->appid = strdup(appid); + if (key) launch_info->key = strdup(key); + if (value) launch_info->value = strdup(value); + launch_info->cfn = cfn; + launch_info->afn = afn; + + timer = ecore_timer_add(0.1f, _must_launch_cb, launch_info); + if (!timer) { + _E("cannot add a timer for must_launch"); + free(launch_info->appid); + free(launch_info->key); + free(launch_info->value); + free(launch_info); + } +} + + + +static int _try_to_open(const char *appid, after_func afn) +{ + int pid = -1; + + retv_if(!appid, -1); + + pid = aul_open_app(appid); + if (pid > 0) { + _D("Succeed to open %s", appid); + if (afn) afn(pid); + } + + return pid; +} + + + +static Eina_Bool _must_open_cb(void *data) +{ + launch_info_s *launch_info = data; + int pid; + + retv_if(!launch_info, ECORE_CALLBACK_CANCEL); + + pid = _try_to_open(launch_info->appid, launch_info->afn); + if (pid > 0) { + goto OUT; + } + + retv_if(pid == AUL_R_ECOMM, ECORE_CALLBACK_RENEW); + retv_if(pid == AUL_R_ETERMINATING, ECORE_CALLBACK_RENEW); + if (pid == AUL_R_ERROR) { + if (launch_info->cfn && 0 == launch_info->cfn(launch_info->appid, NULL, NULL, launch_info->cfn, launch_info->afn)) { + _D("change func has set the next appid"); + } else { + _E("change func has returned error"); + } + goto OUT; + } + + return ECORE_CALLBACK_RENEW; + +OUT: + free(launch_info->appid); + free(launch_info); + return ECORE_CALLBACK_CANCEL; +} + + + +void process_mgr_must_open(const char *appid, change_func cfn, after_func afn) +{ + Ecore_Timer *timer = NULL; + launch_info_s *launch_info = NULL; + int pid = -1; + + _D("Must open %s", appid); + + pid = _try_to_open(appid, afn); + if (pid > 0) return; + + _E("Failed the first try to open %s", appid); + + launch_info = calloc(1, sizeof(launch_info_s)); + ret_if(!launch_info); + + if (appid) launch_info->appid = strdup(appid); + launch_info->cfn = cfn; + launch_info->afn = afn; + + timer = ecore_timer_add(0.1f, _must_open_cb, launch_info); + if (!timer) { + _E("cannot add a timer for must_launch"); + free(launch_info->appid); + free(launch_info); + } +} + + + +static int _try_to_syspopup_launch(const char *appid, const char *key, const char *value, after_func afn) +{ + int pid = -1; + bundle *b = NULL; + + retv_if(!appid, -1); + + if (key) { + b = bundle_create(); + bundle_add(b, key, value); + } + + pid = syspopup_launch((char *) appid, b); + if (b) bundle_free(b); + if (pid > 0) { + _D("Succeed to launch %s", appid); + if (afn) afn(pid); + } + + return pid; +} + + + +static Eina_Bool _must_syspopup_launch_cb(void *data) +{ + launch_info_s *launch_info = data; + int pid; + + retv_if(!launch_info, ECORE_CALLBACK_CANCEL); + + pid = _try_to_syspopup_launch(launch_info->appid, launch_info->key, launch_info->value, launch_info->afn); + if (pid > 0) { + goto OUT; + } + + retv_if(pid == AUL_R_ECOMM, ECORE_CALLBACK_RENEW); + retv_if(pid == AUL_R_ETERMINATING, ECORE_CALLBACK_RENEW); + if (pid == AUL_R_ERROR) { + if (launch_info->cfn + && 0 == launch_info->cfn(launch_info->appid, launch_info->key, launch_info->value, launch_info->cfn, launch_info->afn)) { + _D("change func has set the next appid"); + } else { + _E("change func has returned error"); + } + goto OUT; + } + + return ECORE_CALLBACK_RENEW; + +OUT: + free(launch_info->appid); + free(launch_info->key); + free(launch_info->value); + free(launch_info); + return ECORE_CALLBACK_CANCEL; +} + + + +void process_mgr_must_syspopup_launch(const char *appid, const char *key, const char *value, change_func cfn, after_func afn) +{ + Ecore_Timer *timer = NULL; + launch_info_s *launch_info = NULL; + int pid = -1; + + _D("Must launch %s", appid); + + pid = _try_to_syspopup_launch(appid, key, value, afn); + if (pid > 0) return; + + _E("Failed the first try to launch %s", appid); + + launch_info = calloc(1, sizeof(launch_info_s)); + ret_if(!launch_info); + + if (appid) launch_info->appid = strdup(appid); + if (key) launch_info->key = strdup(key); + if (value) launch_info->value = strdup(value); + launch_info->cfn = cfn; + launch_info->afn = afn; + + timer = ecore_timer_add(0.1f, _must_syspopup_launch_cb, launch_info); + if (!timer) { + _E("cannot add a timer for must_launch"); + free(launch_info->appid); + free(launch_info->key); + free(launch_info->value); + free(launch_info); + } +} + + + +static Eina_Bool _set_lock_priority_cb(void *data) +{ + int prio; + + prio = getpriority(PRIO_PROCESS, (pid_t)data); + if (prio == NICE_VALUE_LOCKSCREEN) { + _D("%s (%d: %d)\n", "setpriority Success", (pid_t)data, prio); + return ECORE_CALLBACK_CANCEL; + } + + if (setpriority(PRIO_PROCESS, (pid_t)data, NICE_VALUE_LOCKSCREEN) < 0 ) { + _D("%s\n", strerror(errno)); + return ECORE_CALLBACK_CANCEL; + } + + return ECORE_CALLBACK_RENEW; +} + + + +static Eina_Bool _set_pwlock_priority_cb(void *data) +{ + int prio; + + prio = getpriority(PRIO_PROCESS, (pid_t)data); + if (prio == NICE_VALUE_PWLOCK) { + _D("%s (%d: %d)\n", "setpriority Success", (pid_t)data, prio); + return ECORE_CALLBACK_CANCEL; + } + + if (setpriority(PRIO_PROCESS, (pid_t)data, NICE_VALUE_PWLOCK) < 0 ) { + _D("%s\n", strerror(errno)); + return ECORE_CALLBACK_CANCEL; + } + + return ECORE_CALLBACK_RENEW; +} + + + +int process_mgr_set_lock_priority(int pid) +{ + return !ecore_timer_add(1.0f, _set_lock_priority_cb, (void *)pid); +} + + + +int process_mgr_set_pwlock_priority(int pid) +{ + return !ecore_timer_add(1.0f, _set_pwlock_priority_cb, (void *)pid); +} + + + +void process_mgr_terminate_app(int pid, int state) +{ + _D("process_mgr_terminate_app, state:%d\n", state); + + if (state == 1) { + if (pid != 0) { + _D("Terminate Lock app(pid : %d)", pid); + aul_terminate_pid(pid); + } + } +} + + + +extern int aul_kill_pid(int pid); +void process_mgr_kill_app(int pid) +{ + _D ("process_mgr_kill_app [pid:%d]..", pid); + aul_kill_pid(pid); +} + + + +int process_mgr_validate_app(int pid) +{ + char buf[BUF_SIZE_128] = {0, }; + + /* Check pid is invalid. */ + if (aul_app_get_pkgname_bypid(pid, buf, sizeof(buf)) < 0) { + _D("no such pkg by pid %d\n", pid); + } else { + _SECURE_D("appid = %s, pid = %d\n", buf, pid); + if (aul_app_is_running(buf) == TRUE) { + _D("%s [pid = %d] is running\n", buf, pid); + return TRUE; + } else { + _SECURE_D("[pid = %d] is exist but %s is not running\n", pid, buf); + } + } + + return FALSE; +} + + + +int process_mgr_validate_call(int pid) +{ + char buf[BUF_SIZE_128] = {0, }; + + /* Check pid is invalid. */ + if (aul_app_get_pkgname_bypid(pid, buf, sizeof(buf)) < 0) { + _D("no such pkg by pid %d", pid); + } else { + _SECURE_D("appid = %s, pid = %d", buf, pid); + if ((!strncmp(buf, LOCKD_VOICE_CALL_PKG_NAME, strlen(buf))) + || (!strncmp(buf, LOCKD_VIDEO_CALL_PKG_NAME, strlen(buf)))) { + return TRUE; + } + } + + return FALSE; +} + + + diff --git a/src/starter.c b/src/starter.c deleted file mode 100755 index f7baec3..0000000 --- a/src/starter.c +++ /dev/null @@ -1,272 +0,0 @@ - /* - * Copyright 2012 Samsung Electronics Co., Ltd - * - * Licensed under the Flora License, Version 1.1 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://floralicense.org/license/ - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - - - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include - -#include "starter.h" -#include "starter-util.h" -#include "x11.h" -#include "lock-daemon.h" -#include "lockd-debug.h" -#include "menu_daemon.h" - -#ifndef PACKAGE_NAME -#define PACKAGE_NAME "org.tizen.starter" -#endif - -#define DEFAULT_THEME "tizen" -#define PWLOCK_PATH "/usr/apps/org.tizen.pwlock/bin/pwlock" -#define PWLOCK_PKG_NAME "org.tizen.pwlock" -#define QP_EMUL_STR "Emulator" - -static void lock_menu_screen(void) -{ - vconf_set_int(VCONFKEY_STARTER_SEQUENCE, 0); -} - -static void unlock_menu_screen(void) -{ - int r; - int show_menu; - - show_menu = 0; - r = vconf_get_int(VCONFKEY_STARTER_SEQUENCE, &show_menu); - if (r || !show_menu) { - vconf_set_int(VCONFKEY_STARTER_SEQUENCE, 1); - } -} - -static void _set_elm_theme(void) -{ - char *vstr; - char *theme; - Elm_Theme *th = NULL; - vstr = vconf_get_str(VCONFKEY_SETAPPL_WIDGET_THEME_STR); - if (vstr == NULL) - theme = DEFAULT_THEME; - else - theme = vstr; - - th = elm_theme_new(); - _DBG("theme vconf[%s]\n set[%s]\n", vstr, theme); - elm_theme_set(th, theme); - - if (vstr) - free(vstr); -} - -#define SYSTEM_INFO_KEY_MODEL "http://tizen.org/system/model_name" -static int _check_emul() -{ - int is_emul = 0; - char *info = NULL; - - if (system_info_get_platform_string(SYSTEM_INFO_KEY_MODEL, &info) == 0) { - if (info == NULL) return 0; - if (!strncmp(QP_EMUL_STR, info, strlen(info))) { - is_emul = 1; - } - } - - if (info != NULL) free(info); - - return is_emul; -} - -static int _launch_pwlock(void) -{ - int r; - - _DBG("%s", __func__); - - if(_check_emul()) { - _DBG("Emulator => skip pwlock"); - vconf_set_int(VCONFKEY_STARTER_SEQUENCE, 1); - return 0; - } - - r = aul_launch_app(PWLOCK_PKG_NAME, NULL); - if (r < 0) { - _ERR("PWLock launch error: error(%d)", r); - if (r == AUL_R_ETIMEOUT) { - _DBG("Launch pwlock is failed for AUL_R_ETIMEOUT, again launch pwlock"); - r = aul_launch_app(PWLOCK_PKG_NAME, NULL); - if (r < 0) { - _ERR("2'nd PWLock launch error: error(%d)", r); - return -1; - } else { - _DBG("Launch pwlock"); - return 0; - } - } else { - return -1; - } - } else { - _DBG("Launch pwlock"); - return 0; - } -} - -static void _signal_handler(int signum, siginfo_t *info, void *unused) -{ - _DBG("_signal_handler : Terminated..."); - elm_exit(); -} - -static void _heynoti_event_power_off(void *data) -{ - _DBG("_heynoti_event_power_off : Terminated..."); - elm_exit(); -} - -static Eina_Bool _init_idle(void *data) -{ - _DBG("%s %d\n", __func__, __LINE__); - if (_launch_pwlock() < 0) { - _ERR("launch pwlock error"); - } - menu_daemon_init(NULL); - - return ECORE_CALLBACK_CANCEL; -} - -static void _lock_state_cb(keynode_t * node, void *data) -{ - _DBG("%s %d\n", __func__, __LINE__); - WRITE_FILE_LOG("%s", "Lock state is changed!"); - - if (_launch_pwlock() < 0) { - _ERR("launch pwlock error"); - } - menu_daemon_init(NULL); - if (vconf_ignore_key_changed(VCONFKEY_IDLE_LOCK_STATE, - _lock_state_cb) != 0) { - LOCKD_DBG("Fail to unregister"); - } -} - -static void _init(struct appdata *ad) -{ - int r; - struct sigaction act; - - memset(&act,0x00,sizeof(struct sigaction)); - act.sa_sigaction = _signal_handler; - act.sa_flags = SA_SIGINFO; - - int ret = sigemptyset(&act.sa_mask); - if (ret < 0) { - _ERR("Failed to sigemptyset[%s]", strerror(errno)); - } - ret = sigaddset(&act.sa_mask, SIGTERM); - if (ret < 0) { - _ERR("Failed to sigaddset[%s]", strerror(errno)); - } - ret = sigaction(SIGTERM, &act, NULL); - if (ret < 0) { - _ERR("Failed to sigaction[%s]", strerror(errno)); - } - - memset(ad, 0, sizeof(struct appdata)); - - gettimeofday(&ad->tv_start, NULL); - - //lock_menu_screen(); - _set_elm_theme(); - - _DBG("%s %d\n", __func__, __LINE__); - - r = start_lock_daemon(TRUE); - if (r == 1) { - if (vconf_notify_key_changed(VCONFKEY_IDLE_LOCK_STATE, - _lock_state_cb, NULL) != 0) { - _ERR("[Error] vconf notify : lock state"); - ecore_timer_add(1.5, _init_idle, NULL); - } - } else { - if (_launch_pwlock() < 0) { - _ERR("launch pwlock error"); - } - menu_daemon_init(NULL); - } -} - -static void _fini(struct appdata *ad) -{ - struct timeval tv, res; - - if (ad == NULL) { - fprintf(stderr, "Invalid argument: appdata is NULL\n"); - return; - } - - unlock_menu_screen(); - menu_daemon_fini(); - - gettimeofday(&tv, NULL); - timersub(&tv, &ad->tv_start, &res); - _DBG("Total time: %d.%06d sec\n", (int)res.tv_sec, (int)res.tv_usec); -} - -int main(int argc, char *argv[]) -{ - struct appdata ad; - - WRITE_FILE_LOG("%s", "Main function is started in starter"); - - int heyfd = heynoti_init(); - if (heyfd < 0) { - _ERR("Failed to heynoti_init[%d]", heyfd); - return -1; - } - - int ret = heynoti_subscribe(heyfd, "power_off_start", _heynoti_event_power_off, NULL); - if (ret < 0) { - _ERR("Failed to heynoti_subscribe[%d]", ret); - } - ret = heynoti_attach_handler(heyfd); - if (ret < 0) { - _ERR("Failed to heynoti_attach_handler[%d]", ret); - } - - elm_init(argc, argv); - - _init(&ad); - - elm_run(); - - _fini(&ad); - - elm_shutdown(); - - return 0; -} diff --git a/src/status.c b/src/status.c new file mode 100644 index 0000000..f715d52 --- /dev/null +++ b/src/status.c @@ -0,0 +1,573 @@ +/* + * Copyright (c) 2000 - 2015 Samsung Electronics Co., Ltd. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include + +#include "status.h" +#include "util.h" + +#define VCONFKEY_REMOTE_LOCK_ISLOCKED "db/private/org.tizen.wfmw/is_locked" +#define VCONFKEY_IDLE_SCREEN_SAFEMODE "memory/idle-screen/safemode" + + + +typedef struct cb_info { + status_active_cb func; + void *data; +} cb_info_s; + + + +static struct status_active_s s_status_active = { + .list = {NULL, }, + .setappl_selected_package_name = NULL, + .setappl_screen_lock_type_int = -1, + .langset = NULL, + .pm_state = -1, + .starter_sequence = -1, + .sysman_power_off_status = -1, +}; + + + +static struct status_passive_s s_status_passive = { + .setup_wizard_state = -1, + .wms_wakeup_by_gesture_setting = -1, + .setup_wizard_first_boot = -1, + + .pm_key_ignore = -1, + .call_state = -1, + .idle_lock_state = -1, + .setappl_password_attempts_left_int = -1, + .remote_lock_islocked = -1, + .setappl_psmode = -1, + .starter_reserved_apps_status = -1, + .setappl_sound_lock_bool = -1, + .setappl_motion_activation = -1, + .setappl_use_pick_up = -1, + .setappl_accessibility_lock_time_int = -1, + .idle_screen_safemode = -1, + .boot_animation_finished = -1, + .setappl_ambient_mode_bool = -1, + + .setappl_3rd_lock_pkg_name_str = NULL, +}; + + + +status_active_h status_active_get(void) +{ + return &s_status_active; +} + + + +status_passive_h status_passive_get(void) +{ + return &s_status_passive; +} + + + +int status_active_register_cb(status_active_key_e key, status_active_cb func, void *data) +{ + cb_info_s *info = NULL; + + retv_if(key <= STATUS_ACTIVE_KEY_INVALID, -1); + retv_if(key >= STATUS_ACTIVE_KEY_MAX, -1); + retv_if(!func, -1); + + info = calloc(1, sizeof(cb_info_s)); + retv_if(!info, -1); + + info->func = func; + info->data = data; + + s_status_active.list[key] = eina_list_append(s_status_active.list[key], info); + + return 0; +} + + + +int status_active_unregister_cb(status_active_key_e key, status_active_cb func) +{ + const Eina_List *l = NULL; + const Eina_List *ln = NULL; + cb_info_s *info = NULL; + + retv_if(key <= STATUS_ACTIVE_KEY_INVALID, -1); + retv_if(key >= STATUS_ACTIVE_KEY_MAX, -1); + retv_if(!func, -1); + + EINA_LIST_FOREACH_SAFE(s_status_active.list[key], l, ln, info) { + if (func == info->func) { + s_status_active.list[key] = eina_list_remove(s_status_active.list[key], info); + free(info); + return 0; + } + } + + _W("We cannot unregister the func. Because the list doesn't have it."); + + return 0; +} + + + +static void _status_active_change_cb(keynode_t* node, void *data) +{ + const char *key_name = NULL; + const Eina_List *l = NULL; + cb_info_s *info = NULL; + + ret_if(!node); + + key_name = vconf_keynode_get_name(node); + ret_if(!key_name); + + if (!strcmp(key_name, VCONFKEY_PM_STATE)) { + s_status_active.pm_state = vconf_keynode_get_int(node); + EINA_LIST_FOREACH(s_status_active.list[STATUS_ACTIVE_KEY_PM_STATE], l, info) { + continue_if(!info->func); + if (0 == info->func(STATUS_ACTIVE_KEY_PM_STATE, info->data)) break; + } + } else if (!strcmp(key_name, VCONFKEY_SETAPPL_SELECTED_PACKAGE_NAME)) { + char *tmp = vconf_keynode_get_str(node); + free(s_status_active.setappl_selected_package_name); + if (tmp) s_status_active.setappl_selected_package_name = strdup(tmp); + else s_status_active.setappl_selected_package_name = NULL; + EINA_LIST_FOREACH(s_status_active.list[STATUS_ACTIVE_KEY_SETAPPL_SELECTED_PACKAGE_NAME], l, info) { + continue_if(!info->func); + if (0 == info->func(STATUS_ACTIVE_KEY_SETAPPL_SELECTED_PACKAGE_NAME, info->data)) break; + } + } else if (!strcmp(key_name, VCONFKEY_SETAPPL_SCREEN_LOCK_TYPE_INT)) { + s_status_active.setappl_screen_lock_type_int = vconf_keynode_get_int(node); + EINA_LIST_FOREACH(s_status_active.list[STATUS_ACTIVE_KEY_SETAPPL_SCREEN_LOCK_TYPE_INT], l, info) { + continue_if(!info->func); + if (0 == info->func(STATUS_ACTIVE_KEY_SETAPPL_SCREEN_LOCK_TYPE_INT, info->data)) break; + } + } else if (!strcmp(key_name, VCONFKEY_STARTER_SEQUENCE)) { + s_status_active.starter_sequence = vconf_keynode_get_int(node); + EINA_LIST_FOREACH(s_status_active.list[STATUS_ACTIVE_KEY_STARTER_SEQUENCE], l, info) { + continue_if(!info->func); + if (0 == info->func(STATUS_ACTIVE_KEY_STARTER_SEQUENCE, info->data)) break; + } + } else if (!strcmp(key_name, VCONFKEY_SYSMAN_POWER_OFF_STATUS)) { + s_status_active.sysman_power_off_status = vconf_keynode_get_int(node); + EINA_LIST_FOREACH(s_status_active.list[STATUS_ACTIVE_KEY_SYSMAN_POWER_OFF_STATUS], l, info) { + continue_if(!info->func); + if (0 == info->func(STATUS_ACTIVE_KEY_SYSMAN_POWER_OFF_STATUS, info->data)) break; + } + } else if (!strcmp(key_name, VCONFKEY_LANGSET)) { + char *tmp = vconf_keynode_get_str(node); + free(s_status_active.langset); + if (tmp) s_status_active.langset = strdup(tmp); + else s_status_active.langset = NULL; + EINA_LIST_FOREACH(s_status_active.list[STATUS_ACTIVE_KEY_LANGSET], l, info) { + continue_if(!info->func); + if (0 == info->func(STATUS_ACTIVE_KEY_LANGSET, info->data)) break; + } +#if 0 + } else if (!strcmp(key_name, )) { + s_status_active. = vconf_keynode_get_int(node); + EINA_LIST_FOREACH(s_status_active.list[STATUS_ACTIVE_KEY_], l, info) { + continue_if(!info->func); + if (0 == info->func(STATUS_ACTIVE_KEY_, info->data)) break; + } +#endif + } +} + + + +static void _status_passive_change_cb(keynode_t* node, void *data) +{ + char *key_name = NULL; + + ret_if(!node); + + key_name = vconf_keynode_get_name(node); + ret_if(!key_name); + +#ifdef TIZEN_PROFILE_WEARABLE + if (!strcmp(key_name, VCONFKEY_SETUP_WIZARD_STATE)) { + s_status_passive.setup_wizard_state = vconf_keynode_get_int(node); + } else if (!strcmp(key_name, VCONFKEY_WMS_WAKEUP_BY_GESTURE_SETTING)) { + s_status_passive.wms_wakeup_by_gesture_setting = vconf_keynode_get_int(node); + } else if (!strcmp(key_name, VCONFKEY_SETUP_WIZARD_FIRST_BOOT)) { + s_status_passive.setup_wizard_first_boot = vconf_keynode_get_int(node); + } else +#endif + if (!strcmp(key_name, VCONFKEY_PM_KEY_IGNORE)) { + s_status_passive.pm_key_ignore = vconf_keynode_get_int(node); + } else if (!strcmp(key_name, VCONFKEY_CALL_STATE)) { + s_status_passive.call_state = vconf_keynode_get_int(node); + } else if (!strcmp(key_name, VCONFKEY_IDLE_LOCK_STATE)) { + s_status_passive.idle_lock_state = vconf_keynode_get_int(node); + } else if (!strcmp(key_name, VCONFKEY_SETAPPL_PASSWORD_ATTEMPTS_LEFT_INT)) { + s_status_passive.setappl_password_attempts_left_int = vconf_keynode_get_int(node); + } else if (!strcmp(key_name, VCONFKEY_REMOTE_LOCK_ISLOCKED)) { + s_status_passive.remote_lock_islocked = vconf_keynode_get_bool(node); + } else if (!strcmp(key_name, VCONFKEY_SETAPPL_PSMODE)) { + s_status_passive.setappl_psmode = vconf_keynode_get_int(node); + } else if (!strcmp(key_name, VCONFKEY_STARTER_RESERVED_APPS_STATUS)) { + s_status_passive.starter_reserved_apps_status = vconf_keynode_get_int(node); + } else if (!strcmp(key_name, VCONFKEY_IDLE_SCREEN_SAFEMODE)) { + s_status_passive.idle_screen_safemode = vconf_keynode_get_int(node); + } else if (!strcmp(key_name, VCONFKEY_BOOT_ANIMATION_FINISHED)) { + s_status_passive.boot_animation_finished = vconf_keynode_get_int(node); +#if 0 //build error + } else if (!strcmp(key_name, VCONFKEY_SETAPPL_AMBIENT_MODE_BOOL)) { + s_status_passive.setappl_ambient_mode_bool = vconf_keynode_get_int(node); +#endif + } else if (!strcmp(key_name, VCONFKEY_SETAPPL_3RD_LOCK_PKG_NAME_STR)) { + char *tmp = vconf_keynode_get_str(node); + free(s_status_passive.setappl_3rd_lock_pkg_name_str); + if (tmp) s_status_passive.setappl_3rd_lock_pkg_name_str = strdup(tmp); + else s_status_passive.setappl_3rd_lock_pkg_name_str = NULL; +#if 0 + } else if (!strcmp(key_name, )) { + s_status_passive. = vconf_keynode_get_int(node); +#endif + } +} + + + +int status_register(void) +{ + _W("Register every events for Starter"); + + /* Active events */ + if (vconf_notify_key_changed(VCONFKEY_PM_STATE, _status_active_change_cb, NULL) < 0) { + _E("Failed to register add the callback for %s", VCONFKEY_PM_STATE); + } else if (vconf_get_int(VCONFKEY_PM_STATE, &s_status_active.pm_state) < 0) { + _E("Failed to get vconfkey[%s]", VCONFKEY_PM_STATE); + s_status_active.pm_state = -1; + } + + if (vconf_notify_key_changed(VCONFKEY_SETAPPL_SELECTED_PACKAGE_NAME, _status_active_change_cb, NULL) < 0) { + _E("Failed to register add the callback for %s", VCONFKEY_SETAPPL_SELECTED_PACKAGE_NAME); + } else if (!(s_status_active.setappl_selected_package_name = vconf_get_str(VCONFKEY_SETAPPL_SELECTED_PACKAGE_NAME))) { + _E("Failed to get vconfkey[%s]", VCONFKEY_SETAPPL_SELECTED_PACKAGE_NAME); + } + + if (vconf_notify_key_changed(VCONFKEY_SETAPPL_SCREEN_LOCK_TYPE_INT, _status_active_change_cb, NULL) < 0) { + _E("Failed to register add the callback for %s", VCONFKEY_SETAPPL_SCREEN_LOCK_TYPE_INT); + } else if (vconf_get_int(VCONFKEY_SETAPPL_SCREEN_LOCK_TYPE_INT, &s_status_active.setappl_screen_lock_type_int) < 0) { + _E("Failed to get vconfkey[%s]", VCONFKEY_SETAPPL_SCREEN_LOCK_TYPE_INT); + s_status_active.setappl_screen_lock_type_int = -1; + } + + if (vconf_notify_key_changed(VCONFKEY_STARTER_SEQUENCE, _status_active_change_cb, NULL) < 0) { + _E("Failed to register add the callback for %s", VCONFKEY_STARTER_SEQUENCE); + } else if (vconf_get_int(VCONFKEY_STARTER_SEQUENCE, &s_status_active.starter_sequence) < 0) { + _E("Failed to get vconfkey[%s]", VCONFKEY_STARTER_SEQUENCE); + s_status_active.starter_sequence = -1; + } + + if (vconf_notify_key_changed(VCONFKEY_SYSMAN_POWER_OFF_STATUS, _status_active_change_cb, NULL) < 0) { + _E("Failed to register add the callback for %s", VCONFKEY_SYSMAN_POWER_OFF_STATUS); + } else if (vconf_get_int(VCONFKEY_SYSMAN_POWER_OFF_STATUS, &s_status_active.sysman_power_off_status ) < 0) { + _E("Failed to get vconfkey[%s]", VCONFKEY_SYSMAN_POWER_OFF_STATUS); + s_status_active.sysman_power_off_status = -1; + } + + if (vconf_notify_key_changed(VCONFKEY_LANGSET, _status_active_change_cb, NULL) < 0) { + _E("Failed to register add the callback for %s", VCONFKEY_LANGSET); + } else if (!(s_status_active.langset = vconf_get_str(VCONFKEY_LANGSET))) { + _E("Failed to get vconfkey[%s]", VCONFKEY_LANGSET); + } + +#if 0 + if (vconf_notify_key_changed(, _status_active_change_cb, NULL) < 0) { + _E("Failed to register add the callback for %s", ); + } else if (vconf_get_int(, &s_status_active.) < 0) { + _E("Failed to get vconfkey[%s]", ); + s_status_active. = -1; + } +#endif + + /* Passive events */ +#ifdef TIZEN_PROFILE_WEARABLE + if (vconf_notify_key_changed(VCONFKEY_SETUP_WIZARD_STATE, _status_passive_change_cb, NULL) < 0) { + _E("Failed to register add the callback for %s", VCONFKEY_SETUP_WIZARD_STATE); + } else if (vconf_get_int(VCONFKEY_SETUP_WIZARD_STATE, &s_status_passive.setup_wizard_state) < 0) { + _E("Failed to get vconfkey[%s]", VCONFKEY_SETUP_WIZARD_STATE); + s_status_passive.setup_wizard_state = -1; + } + + if (vconf_notify_key_changed(VCONFKEY_WMS_WAKEUP_BY_GESTURE_SETTING, _status_passive_change_cb, NULL) < 0) { + _E("Failed to register add the callback for %s", VCONFKEY_WMS_WAKEUP_BY_GESTURE_SETTING); + } else if (vconf_get_int(VCONFKEY_WMS_WAKEUP_BY_GESTURE_SETTING, &s_status_passive.wms_wakeup_by_gesture_setting) < 0) { + _E("Failed to get vconfkey[%s]", VCONFKEY_WMS_WAKEUP_BY_GESTURE_SETTING); + s_status_passive.wms_wakeup_by_gesture_setting = -1; + } + + if (vconf_notify_key_changed(VCONFKEY_SETUP_WIZARD_FIRST_BOOT, _status_passive_change_cb, NULL) < 0) { + _E("Failed to register add the callback for %s", VCONFKEY_SETUP_WIZARD_FIRST_BOOT); + } else if (vconf_get_int(VCONFKEY_SETUP_WIZARD_FIRST_BOOT, &s_status_passive.setup_wizard_first_boot) < 0) { + _E("Failed to get vconfkey[%s]", VCONFKEY_SETUP_WIZARD_FIRST_BOOT); + s_status_passive.setup_wizard_first_boot = -1; + } +#endif + + if (vconf_notify_key_changed(VCONFKEY_PM_KEY_IGNORE, _status_passive_change_cb, NULL) < 0) { + _E("Failed to register add the callback for %s", VCONFKEY_PM_KEY_IGNORE); + } else if (vconf_get_int(VCONFKEY_PM_KEY_IGNORE, &s_status_passive.pm_key_ignore) < 0) { + _E("Failed to get vconfkey[%s]", VCONFKEY_PM_KEY_IGNORE); + s_status_passive.pm_key_ignore = -1; + } + + if (vconf_notify_key_changed(VCONFKEY_CALL_STATE, _status_passive_change_cb, NULL) < 0) { + _E("Failed to register add the callback for %s", VCONFKEY_CALL_STATE); + } else if (vconf_get_int(VCONFKEY_CALL_STATE, &s_status_passive.call_state) < 0) { + _E("Failed to get vconfkey[%s]", VCONFKEY_CALL_STATE); + s_status_passive.call_state = -1; + } + + if (vconf_notify_key_changed(VCONFKEY_IDLE_LOCK_STATE, _status_passive_change_cb, NULL) < 0) { + _E("Failed to regsiter add the callback for %s", VCONFKEY_IDLE_LOCK_STATE); + } else if (vconf_get_int(VCONFKEY_IDLE_LOCK_STATE, &s_status_passive.idle_lock_state) < 0) { + _E("Failed to get vconfkey[%s]", VCONFKEY_IDLE_LOCK_STATE); + s_status_passive.idle_lock_state = -1; + } + + if (vconf_notify_key_changed(VCONFKEY_SETAPPL_PASSWORD_ATTEMPTS_LEFT_INT, _status_passive_change_cb, NULL) < 0) { + _E("Failed to register add the callback for %s", VCONFKEY_SETAPPL_PASSWORD_ATTEMPTS_LEFT_INT); + } else if (vconf_get_int(VCONFKEY_SETAPPL_PASSWORD_ATTEMPTS_LEFT_INT, &s_status_passive.setappl_password_attempts_left_int) < 0) { + _E("Failed to get vconfkey[%s]", VCONFKEY_SETAPPL_PASSWORD_ATTEMPTS_LEFT_INT); + s_status_passive.setappl_password_attempts_left_int = -1; + } + + if (vconf_notify_key_changed(VCONFKEY_REMOTE_LOCK_ISLOCKED, _status_passive_change_cb, NULL) < 0) { + _E("Failed to register add the callback for %s", VCONFKEY_REMOTE_LOCK_ISLOCKED); + } else if (vconf_get_bool(VCONFKEY_REMOTE_LOCK_ISLOCKED, &s_status_passive.remote_lock_islocked) < 0) { + _E("Failed to get vconfkey[%s]", VCONFKEY_REMOTE_LOCK_ISLOCKED); + s_status_passive.remote_lock_islocked = -1; + } + + if (vconf_notify_key_changed(VCONFKEY_SETAPPL_PSMODE, _status_passive_change_cb, NULL) < 0) { + _E("Failed to register add the callback for %s", VCONFKEY_SETAPPL_PSMODE); + } else if (vconf_get_int(VCONFKEY_SETAPPL_PSMODE, &s_status_passive.setappl_psmode) < 0) { + _E("Failed to get vconfkey[%s]", VCONFKEY_SETAPPL_PSMODE); + s_status_passive.setappl_psmode = -1; + } + + if (vconf_notify_key_changed(VCONFKEY_STARTER_RESERVED_APPS_STATUS, _status_passive_change_cb, NULL) < 0) { + _E("Failed to register add the callback for %s", VCONFKEY_STARTER_RESERVED_APPS_STATUS); + } else if (vconf_get_int(VCONFKEY_STARTER_RESERVED_APPS_STATUS, &s_status_passive.starter_reserved_apps_status) < 0) { + _E("Failed to get vconfkey[%s]", VCONFKEY_STARTER_RESERVED_APPS_STATUS); + s_status_passive.starter_reserved_apps_status = -1; + } + + if (vconf_notify_key_changed(VCONFKEY_SETAPPL_SOUND_LOCK_BOOL, _status_passive_change_cb, NULL) < 0) { + _E("Failed to register add the callback for %s", VCONFKEY_SETAPPL_SOUND_LOCK_BOOL); + } else if (vconf_get_bool(VCONFKEY_SETAPPL_SOUND_LOCK_BOOL, &s_status_passive.setappl_sound_lock_bool) < 0) { + _E("Failed to get vconfkey[%s]", VCONFKEY_SETAPPL_SOUND_LOCK_BOOL); + s_status_passive.setappl_sound_lock_bool = -1; + } + + if (vconf_notify_key_changed(VCONFKEY_SETAPPL_MOTION_ACTIVATION, _status_passive_change_cb, NULL) < 0) { + _E("Failed to regitster add the callback for %s", VCONFKEY_SETAPPL_MOTION_ACTIVATION); + } else if (vconf_get_bool(VCONFKEY_SETAPPL_MOTION_ACTIVATION, &s_status_passive.setappl_motion_activation) < 0) { + _E("Failed to get vconfkey[%s]", VCONFKEY_SETAPPL_MOTION_ACTIVATION); + s_status_passive.setappl_motion_activation = -1; + } + + if (vconf_notify_key_changed(VCONFKEY_SETAPPL_USE_PICK_UP, _status_passive_change_cb, NULL) < 0) { + _E("Failed to regitster add the callback for %s", VCONFKEY_SETAPPL_USE_PICK_UP); + } else if (vconf_get_bool(VCONFKEY_SETAPPL_USE_PICK_UP, &s_status_passive.setappl_use_pick_up) < 0) { + _E("Failed to get vconfkey[%s]", VCONFKEY_SETAPPL_USE_PICK_UP); + s_status_passive.setappl_use_pick_up = -1; + } + +#if 0 //build error + if (vconf_notify_key_changed(VCONFKEY_SETAPPL_ACCESSIBILITY_LOCK_TIME_INT, _status_passive_change_cb, NULL) < 0) { + _E("Failed to register add the callback for %s", VCONFKEY_SETAPPL_ACCESSIBILITY_LOCK_TIME_INT); + } else if (vconf_get_int(VCONFKEY_SETAPPL_ACCESSIBILITY_LOCK_TIME_INT, &s_status_passive.setappl_accessibility_lock_time_int) < 0) { + _E("Failed to get vconfkey[%s]", VCONFKEY_SETAPPL_ACCESSIBILITY_LOCK_TIME_INT); + s_status_passive.setappl_accessibility_lock_time_int = -1; + } +#endif + + if (vconf_notify_key_changed(VCONFKEY_IDLE_SCREEN_SAFEMODE, _status_passive_change_cb, NULL) < 0) { + _E("Failed to register add the callback for %s", VCONFKEY_IDLE_SCREEN_SAFEMODE); + } else if (vconf_get_int(VCONFKEY_IDLE_SCREEN_SAFEMODE, &s_status_passive.idle_screen_safemode ) < 0) { + _E("Failed to get vconfkey[%s]", VCONFKEY_IDLE_SCREEN_SAFEMODE); + s_status_passive.idle_screen_safemode = -1; + } + + if (vconf_notify_key_changed(VCONFKEY_BOOT_ANIMATION_FINISHED, _status_passive_change_cb, NULL) < 0) { + _E("Failed to register add the callback for %s", VCONFKEY_BOOT_ANIMATION_FINISHED); + } else if (vconf_get_int(VCONFKEY_BOOT_ANIMATION_FINISHED, &s_status_passive.boot_animation_finished) < 0) { + _E("Failed to get vconfkey[%s]", VCONFKEY_BOOT_ANIMATION_FINISHED); + s_status_passive.boot_animation_finished = -1; + } + +#if 0 //build error + if (vconf_notify_key_changed(VCONFKEY_SETAPPL_AMBIENT_MODE_BOOL, _status_passive_change_cb, NULL) < 0) { + _E("Failed to register add the callback for %s", VCONFKEY_SETAPPL_AMBIENT_MODE_BOOL); + } else if (vconf_get_int(VCONFKEY_SETAPPL_AMBIENT_MODE_BOOL, &s_status_passive.setappl_ambient_mode_bool) < 0) { + _E("Failed to get vconfkey[%s]", VCONFKEY_SETAPPL_AMBIENT_MODE_BOOL); + s_status_passive.boot_animation_finished = -1; + } +#endif + + if (vconf_notify_key_changed(VCONFKEY_SETAPPL_3RD_LOCK_PKG_NAME_STR, _status_passive_change_cb, NULL) < 0) { + _E("Failed to register add the callback for %s", VCONFKEY_SETAPPL_3RD_LOCK_PKG_NAME_STR); + } else if (!(s_status_passive.setappl_3rd_lock_pkg_name_str = vconf_get_str(VCONFKEY_SETAPPL_3RD_LOCK_PKG_NAME_STR))) { + _E("Failed to get vconfkey[%s]", VCONFKEY_SETAPPL_3RD_LOCK_PKG_NAME_STR); + } + +#if 0 + if (vconf_notify_key_changed(, _status_passive_change_cb, NULL) < 0) { + _E("Failed to register add the callback for %s", ); + } else if (vconf_get_int(, &s_status_passive.) < 0) { + _E("Failed to get vconfkey[%s]", ); + s_status_passive. = -1; + } +#endif + + return 0; +} + + + +void status_unregister(void) +{ + /* Active events */ + if (vconf_ignore_key_changed(VCONFKEY_PM_STATE, _status_active_change_cb) < 0) { + _E("Failed to unregister the callback for %s", VCONFKEY_PM_STATE); + } + + if (vconf_ignore_key_changed(VCONFKEY_SETAPPL_SELECTED_PACKAGE_NAME, _status_active_change_cb) < 0) { + _E("Failed to unregister the callback for %s", VCONFKEY_SETAPPL_SELECTED_PACKAGE_NAME); + } + free(s_status_active.setappl_selected_package_name); + + if (vconf_ignore_key_changed(VCONFKEY_SETAPPL_SCREEN_LOCK_TYPE_INT, _status_active_change_cb) < 0) { + _E("Failed to unregister the callback for %s", VCONFKEY_SETAPPL_SCREEN_LOCK_TYPE_INT); + } + + if (vconf_ignore_key_changed(VCONFKEY_STARTER_SEQUENCE, _status_active_change_cb) < 0) { + _E("Failed to unregister the callback for %s", VCONFKEY_STARTER_SEQUENCE); + } + + if (vconf_ignore_key_changed(VCONFKEY_SYSMAN_POWER_OFF_STATUS, _status_active_change_cb) < 0) { + _E("Failed to unregister the callback for %s", VCONFKEY_SYSMAN_POWER_OFF_STATUS); + } + + if (vconf_ignore_key_changed(VCONFKEY_LANGSET, _status_active_change_cb) < 0) { + _E("Failed to unregister the callback for %s", VCONFKEY_LANGSET); + } + free(s_status_active.langset); + +#if 0 + if (vconf_ignore_key_changed(, _status_active_change_cb) < 0) { + _E("Failed to unregister the callback for %s", ); + } +#endif + + /* Passive events */ +#ifdef TIZEN_PROFILE_WEARABLE + if (vconf_ignore_key_changed(VCONFKEY_SETUP_WIZARD_STATE, _status_passive_change_cb) < 0) { + _E("Failed to unregister the callback for %s", VCONFKEY_SETUP_WIZARD_STATE); + } + + if (vconf_ignore_key_changed(VCONFKEY_WMS_WAKEUP_BY_GESTURE_SETTING, _status_passive_change_cb) < 0) { + _E("Failed to unregister the callback for %s", VCONFKEY_WMS_WAKEUP_BY_GESTURE_SETTING); + } + + if (vconf_ignore_key_changed(VCONFKEY_SETUP_WIZARD_FIRST_BOOT, _status_passive_change_cb) < 0) { + _E("Failed to unregister the callback for %s", VCONFKEY_SETUP_WIZARD_FIRST_BOOT); + } +#endif + + if (vconf_ignore_key_changed(VCONFKEY_PM_KEY_IGNORE, _status_passive_change_cb) < 0) { + _E("Failed to unregister the callback for %s", VCONFKEY_PM_KEY_IGNORE); + } + + if (vconf_ignore_key_changed(VCONFKEY_CALL_STATE, _status_passive_change_cb) < 0) { + _E("Failed to unregister the callback for %s", VCONFKEY_CALL_STATE); + } + + if (vconf_ignore_key_changed(VCONFKEY_IDLE_LOCK_STATE, _status_passive_change_cb) < 0) { + _E("Faield to unregister the callback for %s", VCONFKEY_IDLE_LOCK_STATE); + } + + if (vconf_ignore_key_changed(VCONFKEY_SETAPPL_PASSWORD_ATTEMPTS_LEFT_INT, _status_passive_change_cb) < 0) { + _E("Failed to unregister the callback for %s", VCONFKEY_SETAPPL_PASSWORD_ATTEMPTS_LEFT_INT); + } + + if (vconf_ignore_key_changed(VCONFKEY_REMOTE_LOCK_ISLOCKED, _status_passive_change_cb) < 0) { + _E("Failed to unregister the callback for %s", VCONFKEY_REMOTE_LOCK_ISLOCKED); + } + + if (vconf_ignore_key_changed(VCONFKEY_SETAPPL_PSMODE, _status_passive_change_cb) < 0) { + _E("Failed to unregister the callback for %s", VCONFKEY_SETAPPL_PSMODE); + } + + if (vconf_ignore_key_changed(VCONFKEY_STARTER_RESERVED_APPS_STATUS, _status_passive_change_cb) < 0) { + _E("Failed to unregister the callback for %s", VCONFKEY_STARTER_RESERVED_APPS_STATUS); + } + + if (vconf_ignore_key_changed(VCONFKEY_SETAPPL_SOUND_LOCK_BOOL, _status_passive_change_cb) < 0) { + _E("Failed to unregister the callback for %s", VCONFKEY_SETAPPL_SOUND_LOCK_BOOL); + } + + if (vconf_ignore_key_changed(VCONFKEY_SETAPPL_MOTION_ACTIVATION, _status_passive_change_cb) < 0) { + _E("Failed to unregister the callback for %s", VCONFKEY_SETAPPL_MOTION_ACTIVATION); + } + + if (vconf_ignore_key_changed(VCONFKEY_SETAPPL_USE_PICK_UP, _status_passive_change_cb) < 0) { + _E("Failed to unregister the callback for %s", VCONFKEY_SETAPPL_USE_PICK_UP); + } + +#if 0 //build error + if (vconf_ignore_key_changed(VCONFKEY_SETAPPL_ACCESSIBILITY_LOCK_TIME_INT, _status_passive_change_cb) < 0) { + _E("Failed to unregister the callback for %s", VCONFKEY_SETAPPL_ACCESSIBILITY_LOCK_TIME_INT); + } +#endif + + if (vconf_ignore_key_changed(VCONFKEY_IDLE_SCREEN_SAFEMODE, _status_passive_change_cb) < 0) { + _E("Failed to unregister the callback for %s", VCONFKEY_IDLE_SCREEN_SAFEMODE); + } + + if (vconf_ignore_key_changed(VCONFKEY_BOOT_ANIMATION_FINISHED, _status_passive_change_cb) < 0) { + _E("Failed to unregister the callback for %s", VCONFKEY_BOOT_ANIMATION_FINISHED); + } + +#if 0 //build error + if (vconf_ignore_key_changed(VCONFKEY_SETAPPL_AMBIENT_MODE_BOOL, _status_passive_change_cb) < 0) { + _E("Failed to unregister the callback for %s", VCONFKEY_SETAPPL_AMBIENT_MODE_BOOL); + } +#endif + + if (vconf_ignore_key_changed(VCONFKEY_SETAPPL_3RD_LOCK_PKG_NAME_STR, _status_passive_change_cb) < 0) { + _E("Failed to unregister ther callback for %s", VCONFKEY_SETAPPL_3RD_LOCK_PKG_NAME_STR); + } + +#if 0 + if (vconf_ignore_key_changed(, _status_passive_change_cb) < 0) { + _E("Failed to unregister the callback for %s", ); + } +#endif +} + diff --git a/src/wearable/clock_mgr.c b/src/wearable/clock_mgr.c new file mode 100644 index 0000000..2a0f03a --- /dev/null +++ b/src/wearable/clock_mgr.c @@ -0,0 +1,171 @@ +/* + * Copyright (c) 2000 - 2015 Samsung Electronics Co., Ltd. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include + +#include "dbus_util.h" +#include "util.h" +#include "status.h" +#include "process_mgr.h" + +#define PM_UNLOCK_TIMER_SEC 0.3 + + + +static struct { + Eina_List *reserved_apps_list; + char *reserved_popup_app_id; +} s_clock_mgr = { + .reserved_apps_list = NULL, + .reserved_popup_app_id = NULL, +}; + + + +static int _check_reserved_popup_status(void) +{ + int val = 0; + int tmp = 0; + + val = status_passive_get()->starter_reserved_apps_status; + tmp = val & 0x10; + if(tmp == 0x10){ + if(aul_app_is_running(s_clock_mgr.reserved_popup_app_id) == 1){ + return TRUE; + } else{ + _E("%s is not running now.", s_clock_mgr.reserved_popup_app_id); + s_clock_mgr.reserved_popup_app_id = NULL; + val = val ^ 0x10; + vconf_set_int(VCONFKEY_STARTER_RESERVED_APPS_STATUS, val); + _W("now reserved apps status %x", val); + return FALSE; + } + } + + return FALSE; +} + + + +static int _check_reserved_apps_status(void) +{ + int val = 0; + + val = status_passive_get()->starter_reserved_apps_status; + _W("Current reserved apps status : %x", val); + + if(val > 0){ + return TRUE; + } + + return FALSE; +} + + + +static Eina_Bool _pm_unlock_timer_cb(void *data){ + /* PM_SLEEP_MARGIN : If the current status is lcd off, deviced reset timer to 1 second. */ + display_unlock_state(LCD_OFF, PM_SLEEP_MARGIN); + return ECORE_CALLBACK_CANCEL; +} + + + +static void _on_lcd_changed_receive(void *data, DBusMessage *msg) +{ + int lcd_off = -1; + int setup_wizard_state = -1; + int count = 0; + char *info = NULL; + char *lcd_off_source = NULL; + Eina_List *l = NULL; + + lcd_off = dbus_message_is_signal(msg, DEVICED_INTERFACE_DISPLAY, MEMBER_LCD_OFF); + + if (lcd_off) { + /** + * lcd off source + * string : 'powerkey' or 'timeout' or 'event' or 'unknown' + */ + lcd_off_source = dbus_util_msg_arg_get_str(msg); + ret_if(!lcd_off_source); + + _D("lcd off source : %s", lcd_off_source); + free(lcd_off_source); + + if (vconf_get_int(VCONFKEY_SETUP_WIZARD_STATE, &setup_wizard_state) < 0) { + _E("Failed to get [%s]", VCONFKEY_SETUP_WIZARD_STATE); + } else { + if (setup_wizard_state == VCONFKEY_SETUP_WIZARD_LOCK) { + _E("starter doesn't react for this case, setup wizard state is [%d]", setup_wizard_state); + return; + } + } + + if(_check_reserved_popup_status() > 0){ + _W("reserved popup is on top. do nothing"); + return; + } + + if (_check_reserved_apps_status() <= 0) { + _W("reserved app is not running now."); + return; + } + + EINA_LIST_FOREACH(s_clock_mgr.reserved_apps_list, l, info){ + if(aul_app_is_running(info) == 1){ + // STAY_CUR_STATE : State is not changed directly and phone stay current state until timeout expired. + display_lock_state(LCD_OFF, STAY_CUR_STATE, 0); + process_mgr_must_open(info, NULL, NULL); + ecore_timer_add(PM_UNLOCK_TIMER_SEC, _pm_unlock_timer_cb, NULL); + break; + } else{ + _W("%s is not running now", info); + s_clock_mgr.reserved_apps_list = eina_list_remove_list(s_clock_mgr.reserved_apps_list, l); + continue; + } + } + + count = eina_list_count(s_clock_mgr.reserved_apps_list); + if(count == 0){ + _W("there is no reserved app."); + vconf_set_int(VCONFKEY_STARTER_RESERVED_APPS_STATUS, 0); + } + } + +} + + + +void clock_mgr_init(void) +{ + _W("clock_mgr_init"); + + dbus_util_receive_lcd_status(_on_lcd_changed_receive, NULL); +} + + + +void clock_mgr_fini(void) +{ +} + + + +// End of a file diff --git a/src/wearable/home_mgr.c b/src/wearable/home_mgr.c new file mode 100644 index 0000000..7633987 --- /dev/null +++ b/src/wearable/home_mgr.c @@ -0,0 +1,118 @@ +/* + * Copyright (c) 2000 - 2015 Samsung Electronics Co., Ltd. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include + +#include "util.h" +#include "process_mgr.h" +#include "dbus_util.h" +#include "status.h" + +#define W_HOME_PKGNAME "org.tizen.w-home" +#define W_CLOCK_VIEWER_PKGNAME "org.tizen.w-clock-viewer" + + +static struct { + char *home_appid; + int home_pid; +} s_home_mgr = { + .home_appid = W_HOME_PKGNAME, + .home_pid = -1, +}; + + + +static void _after_launch_home(int pid) +{ + if (-1 == deviced_conf_set_mempolicy_bypid(pid, OOM_IGNORE)) { + _E("Cannot set the memory policy for Homescreen(%d)", pid); + } else { + _E("Set the memory policy for Homescreen(%d)", pid); + } + s_home_mgr.home_pid = pid; +} + + + +void home_mgr_launch_home(void) +{ + process_mgr_must_launch(s_home_mgr.home_appid, NULL, NULL, NULL, _after_launch_home); +} + + + +void home_mgr_launch_home_first(void) +{ + process_mgr_must_launch(s_home_mgr.home_appid, "home_op", "first_boot", NULL, _after_launch_home); +} + + + +void home_mgr_launch_home_by_power(void) +{ + process_mgr_must_launch(s_home_mgr.home_appid, "home_op", "powerkey", NULL, _after_launch_home); +} + + + +static int _dead_cb(int pid, void *data) +{ + _D("_dead_cb is called(pid : %d)", pid); + + if (pid == s_home_mgr.home_pid) { + _E("Home(%d) is destroyed.", pid); + home_mgr_launch_home(); + } + + return 0; +} + + + +static void _on_lcd_changed_receive(void *data, DBusMessage *msg) +{ + int lcd_off = dbus_message_is_signal(msg, DEVICED_INTERFACE_DISPLAY, MEMBER_LCD_OFF); + + if (lcd_off) { + _D("LCD off"); + + int ambient_mode = status_passive_get()->setappl_ambient_mode_bool; + _D("ambient mode : %d", ambient_mode); + if (ambient_mode) { + process_mgr_must_launch(W_CLOCK_VIEWER_PKGNAME, NULL, NULL, NULL, NULL); + } + } +} + + + +void home_mgr_init(void) +{ + aul_listen_app_dead_signal(_dead_cb, NULL); + + /* register lcd changed cb */ + dbus_util_receive_lcd_status(_on_lcd_changed_receive, NULL); +} + + + +void home_mgr_fini(void) +{ +} + + + diff --git a/src/wearable/hourly_alert.c b/src/wearable/hourly_alert.c new file mode 100644 index 0000000..75e729a --- /dev/null +++ b/src/wearable/hourly_alert.c @@ -0,0 +1,271 @@ +/* + * Copyright (c) 2000 - 2015 Samsung Electronics Co., Ltd. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include + +#include "util.h" + + + +static struct { + alarm_id_t alarm_id; /* -1 : None, others : set alarm */ +} s_hourly_alert = { + .alarm_id = -1, +}; + + + +static int _alarm_delete_cb(alarm_id_t id, void *user_param) +{ + int ret = ALARMMGR_RESULT_SUCCESS; + + ret = alarmmgr_remove_alarm(id); + if(ret != ALARMMGR_RESULT_SUCCESS) { + _E("alarmmgr_enum_alarm_ids() failed"); + } + + return 0; +} + + + +static void _alarm_unset(void *data) +{ + int ret = ALARMMGR_RESULT_SUCCESS; + + if (s_hourly_alert.alarm_id != -1) { + _D("try to delete alarm_id(%d)", s_hourly_alert.alarm_id); + ret = alarmmgr_remove_alarm(s_hourly_alert.alarm_id); + if(ret != ALARMMGR_RESULT_SUCCESS) { + ret = alarmmgr_enum_alarm_ids(_alarm_delete_cb, NULL); + if(ret != ALARMMGR_RESULT_SUCCESS) { + _E("alarmmgr_enum_alarm_ids() failed"); + } + } + s_hourly_alert.alarm_id = -1; + } +} + + + +static int _alarm_set(void *data) +{ + int ret = ALARMMGR_RESULT_SUCCESS; + time_t current_time; + struct tm current_tm; + alarm_entry_t *alarm_info = NULL; + alarm_id_t alarm_id; + alarm_date_t alarm_time; + + /* delete before registering alarm ids */ + _alarm_unset(NULL); + + time(¤t_time); + + /* alarm revision */ + current_time += 3600; // +1 hour + + localtime_r(¤t_time, ¤t_tm); + + alarm_info = alarmmgr_create_alarm(); + if(alarm_info == NULL) { + _E("alarmmgr_create_alarm() is failed\n"); + return -1; + } + + alarm_time.year = current_tm.tm_year; + alarm_time.month = current_tm.tm_mon; + alarm_time.day = current_tm.tm_mday; + alarm_time.hour = current_tm.tm_hour; + alarm_time.min = 0; + alarm_time.sec = 0; + + //alarmmgr_set_repeat_mode(alarm_info, ALARM_REPEAT_MODE_ONCE, 0); + ret = alarmmgr_set_repeat_mode(alarm_info, ALARM_REPEAT_MODE_REPEAT, 60*60); + if(ret != ALARMMGR_RESULT_SUCCESS) { + _E("alarmmgr_set_repeat_mode() failed"); + alarmmgr_free_alarm(alarm_info) ; + return -1; + } + alarmmgr_set_time(alarm_info, alarm_time); + alarmmgr_set_type(alarm_info, ALARM_TYPE_VOLATILE); + + ret = alarmmgr_add_alarm_with_localtime(alarm_info, NULL, &alarm_id); + if(ret != ALARMMGR_RESULT_SUCCESS) { + _E("alarmmgr_add_alarm_with_localtime() failed"); + alarmmgr_free_alarm(alarm_info) ; + return -1; + } + + s_hourly_alert.alarm_id = alarm_id; + alarmmgr_free_alarm(alarm_info); + + return 0; +} + + + +static int _alarm_cb(alarm_id_t alarm_id, void *data) +{ + _D("hourly_alert alarm callback called"); + + feedback_initialize(); + feedback_play(FEEDBACK_PATTERN_HOURLY_ALERT); + feedback_deinitialize(); + + return 0; +} + + + +static int _alarm_init(void *data) +{ + int ret = 0; + + ret = alarmmgr_init("starter"); + retv_if(ret<0, -1); + + ret = alarmmgr_set_cb(_alarm_cb, NULL); + retv_if(ret<0, -1); + + s_hourly_alert.alarm_id = -1; + + return 0; +} + +static void _alarm_fini(void *data) +{ + _alarm_unset(NULL); + alarmmgr_fini(); +} + + + +static Eina_Bool _register_hourly_alert_alarm(void) +{ + int ret = 0; + + ret = _alarm_init(NULL); + retv_if(ret < 0, EINA_FALSE); + + _alarm_set(NULL); + + return EINA_TRUE; + +} + + + +static int _unregister_hourly_alert_alarm(void) +{ + _alarm_fini(NULL); + return 0; +} + + + +static void _hourly_alert_changed_cb(keynode_t* node, void *data) +{ + int hourly_alert = -1; + + _D("%s, %d", __func__, __LINE__); + + if (node) { + hourly_alert = vconf_keynode_get_bool(node); + } else { + if (vconf_get_int(VCONFKEY_SETAPPL_HOURLY_ALERT_BOOL, &hourly_alert) < 0) { + _E("Failed to get %s", VCONFKEY_SETAPPL_HOURLY_ALERT_BOOL); + return; + } + } + + if (hourly_alert == TRUE) { + _E("hourly_alert is set"); + _register_hourly_alert_alarm(); + } else { + _E("hourly_alert is unset"); + _unregister_hourly_alert_alarm(); + } + +} + + + +static void _hourly_system_time_changed_cb(keynode_t *node, void *data) +{ + _alarm_set(NULL); +} + + + +void hourly_alert_init(void) +{ + int hourly_alert = -1; + int ret = 0; + + ret = vconf_get_bool(VCONFKEY_SETAPPL_HOURLY_ALERT_BOOL, &hourly_alert); + if (ret < 0){ + _E("can't get vconfkey value of [%s], ret=[%d]", VCONFKEY_SETAPPL_HOURLY_ALERT_BOOL, ret); + hourly_alert = FALSE; + } else if (hourly_alert == TRUE) { + _D("[%s] value is [%d], hourly_alert is set..!!", VCONFKEY_SETAPPL_HOURLY_ALERT_BOOL, hourly_alert); + if (_register_hourly_alert_alarm() == EINA_FALSE) { + _E("_register_hourly_alert_alarm is failed..!!"); + } + } + + if (vconf_notify_key_changed(VCONFKEY_SETAPPL_HOURLY_ALERT_BOOL, _hourly_alert_changed_cb, NULL) < 0) { + _E("Failed to add the callback for %s changed", VCONFKEY_SETAPPL_HOURLY_ALERT_BOOL); + } + /* for time revision */ + if (vconf_notify_key_changed(VCONFKEY_SYSTEM_TIME_CHANGED, _hourly_system_time_changed_cb, NULL) < 0) { + _E("Failed to add the callback for %s changed", VCONFKEY_SYSTEM_TIME_CHANGED); + } +} + + + +void hourly_alert_fini(void) +{ + _unregister_hourly_alert_alarm(); + + if (vconf_ignore_key_changed(VCONFKEY_SETAPPL_HOURLY_ALERT_BOOL, _hourly_alert_changed_cb) < 0) { + _E("Failed to ignore the callback for %s changed", VCONFKEY_SETAPPL_HOURLY_ALERT_BOOL); + } + + if (vconf_ignore_key_changed(VCONFKEY_SYSTEM_TIME_CHANGED, _hourly_system_time_changed_cb) < 0) { + _E("Failed to ignore the callback for %s changed", VCONFKEY_SYSTEM_TIME_CHANGED); + } +} + + + diff --git a/src/wearable/hw_key.c b/src/wearable/hw_key.c new file mode 100644 index 0000000..5bf3bcd --- /dev/null +++ b/src/wearable/hw_key.c @@ -0,0 +1,396 @@ +/* + * Copyright (c) 2000 - 2015 Samsung Electronics Co., Ltd. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +//#include +#include +//#include + +#include +#include +#include + +#include "hw_key.h" +#include "util.h" +#include "status.h" +#include "dbus_util.h" +#include "home_mgr.h" +#include "process_mgr.h" + +#define GRAB_TWO_FINGERS 2 +#define POWERKEY_TIMER_SEC 0.25 +#define POWERKEY_LCDOFF_TIMER_SEC 0.4 +#define LONG_PRESS_TIMER_SEC 0.7 + +#define APP_CONTROL_OPERATION_MAIN_KEY "__APP_SVC_OP_TYPE__" +#define APP_CONTROL_OPERATION_MAIN_VALUE "http://tizen.org/appcontrol/operation/main" + +#define USE_DBUS_POWEROFF 1 +#define W_TASKMGR_PKGNAME "org.tizen.w-taskmanager" + + + +static struct { + //Ecore_X_Window win; + Ecore_Event_Handler *key_up; + Ecore_Event_Handler *key_down; + Ecore_Event_Handler *two_fingers_hold_hd; + Ecore_Timer *power_long_press_timer; + Ecore_Timer *power_release_timer; + Eina_Bool is_lcd_on; + Eina_Bool is_long_press; + int powerkey_count; + Eina_Bool is_cancel; +} key_info = { + //.win = 0x0, + .key_up = NULL, + .key_down = NULL, + .two_fingers_hold_hd = NULL, + .power_long_press_timer = NULL, + .power_release_timer = NULL, + .is_lcd_on = EINA_FALSE, + .is_long_press = EINA_FALSE, + .powerkey_count = 0, + .is_cancel = EINA_FALSE, +}; + + + +static Eina_Bool _powerkey_timer_cb(void *data) +{ + _W("%s, powerkey count[%d]", __func__, key_info.powerkey_count); + + key_info.power_release_timer = NULL; + + if (VCONFKEY_SETUP_WIZARD_LOCK == status_passive_get()->setup_wizard_state) { + _E("setdup_wizard is running"); + key_info.powerkey_count = 0; + return ECORE_CALLBACK_CANCEL; + } + + if (VCONFKEY_PM_KEY_LOCK == status_passive_get()->pm_key_ignore) { + _E("Critical Low Batt Clock Mode"); + key_info.powerkey_count = 0; + if(key_info.is_lcd_on) { + _W("just turn off LCD"); + display_change_state(LCD_OFF); + } else { + _W("just turn on LCD by powerkey.. starter ignore powerkey operation"); + } + return ECORE_CALLBACK_CANCEL; + } + + if (key_info.powerkey_count % 2 == 0) { + /* double press */ + _W("powerkey double press"); + key_info.powerkey_count = 0; + return ECORE_CALLBACK_CANCEL; + } + key_info.powerkey_count = 0; + + if (key_info.is_lcd_on) { + if(VCONFKEY_PM_STATE_LCDOFF <= status_active_get()->pm_state) { + _E("Already lcd state was changed while powerkey op. starter ignore powerkey operation"); + return ECORE_CALLBACK_CANCEL; + } + } else { + _W("just turn on LCD by powerkey.. starter ignore powerkey operation"); + return ECORE_CALLBACK_CANCEL; + } + + if (VCONFKEY_CALL_VOICE_ACTIVE == status_passive_get()->call_state) { + _W("call state is [%d] -> just turn off LCD"); + display_change_state(LCD_OFF); + return ECORE_CALLBACK_CANCEL; + } + + if (VCONFKEY_IDLE_LOCK == status_passive_get()->idle_lock_state) { + _W("lock state is [%d] -> just turn off LCD"); + display_change_state(LCD_OFF); + return ECORE_CALLBACK_CANCEL; + } + + if (0 < status_passive_get()->remote_lock_islocked) { + _W("remote lock is on top (%d), -> just turn off LCD", status_passive_get()->remote_lock_islocked); + display_change_state(LCD_OFF); + return ECORE_CALLBACK_CANCEL; + } + + home_mgr_launch_home_by_power(); + + return ECORE_CALLBACK_CANCEL; +} + + +static Eina_Bool _long_press_timer_cb(void* data) +{ + key_info.power_long_press_timer = NULL; + key_info.is_long_press = EINA_TRUE; + key_info.powerkey_count = 0; + + if (0 < status_passive_get()->remote_lock_islocked){ + _W("remote lock is on top (%d), -> just turn off LCD", status_passive_get()->remote_lock_islocked); + return ECORE_CALLBACK_CANCEL; + } + + if (key_info.power_release_timer) { + ecore_timer_del(key_info.power_release_timer); + key_info.power_release_timer = NULL; + _D("delete power_release_timer"); + } + +#if USE_DBUS_POWEROFF + dbus_util_send_poweroff_signal(); +#else + _D("launch power off syspopup"); + process_mgr_syspopup_launch("poweroff-syspopup", NULL, NULL, NULL, NULL); +#endif + + feedback_initialize(); + feedback_play_type(FEEDBACK_TYPE_VIBRATION, FEEDBACK_PATTERN_HOLD); + feedback_deinitialize(); + + return ECORE_CALLBACK_CANCEL; +} + + +#if 0 +static Eina_Bool _key_release_cb(void *data, int type, void *event) +{ + Evas_Event_Key_Up *ev = event; + + retv_if(!ev, ECORE_CALLBACK_RENEW); + retv_if(!ev->keyname, ECORE_CALLBACK_RENEW); + + _D("_key_release_cb : %s Released", ev->keyname); + + if (!strcmp(ev->keyname, KEY_POWER)) { + _W("POWER Key is released"); + + if(key_info.power_long_press_timer) { + ecore_timer_del(key_info.power_long_press_timer); + key_info.power_long_press_timer = NULL; + _D("delete long press timer"); + } + + // Check powerkey timer + if(key_info.power_release_timer) { + ecore_timer_del(key_info.power_release_timer); + key_info.power_release_timer = NULL; + _D("delete powerkey timer"); + } + + // Cancel key operation + if (EINA_TRUE == key_info.is_cancel) { + _D("Cancel key is activated"); + key_info.is_cancel = EINA_FALSE; + key_info.powerkey_count = 0; //initialize powerkey count + return ECORE_CALLBACK_RENEW; + } + + // Check long press operation + if(key_info.is_long_press) { + _D("ignore power key release by long poress"); + key_info.is_long_press = EINA_FALSE; + return ECORE_CALLBACK_RENEW; + } + + if(key_info.is_lcd_on) { + key_info.power_release_timer = ecore_timer_add(POWERKEY_TIMER_SEC, _powerkey_timer_cb, NULL); + } else { + _D("lcd off --> [%f]sec timer", POWERKEY_LCDOFF_TIMER_SEC); + key_info.power_release_timer = ecore_timer_add(POWERKEY_LCDOFF_TIMER_SEC, _powerkey_timer_cb, NULL); + } + if (!key_info.power_release_timer) { + _E("Critical, cannot add a timer for powerkey"); + } + } else if (!strcmp(ev->keyname, KEY_CANCEL)) { + _D("CANCEL Key is released"); + key_info.is_cancel = EINA_FALSE; + } + + return ECORE_CALLBACK_RENEW; +} +#endif + + + +#if 0 +static Eina_Bool _key_press_cb(void *data, int type, void *event) +{ + Evas_Event_Key_Down *ev = event; + + retv_if(!ev, ECORE_CALLBACK_RENEW); + retv_if(!ev->keyname, ECORE_CALLBACK_RENEW); + + _D("_key_press_cb : %s Pressed", ev->keyname); + + if (!strcmp(ev->keyname, KEY_POWER)) { + _W("POWER Key is pressed"); + + /** + * lcd status + * 1 : lcd normal + * 2 : lcd dim + * 3 : lcd off + * 4 : suspend + */ + if (VCONFKEY_PM_STATE_LCDDIM >= status_active_get()->pm_state) { + key_info.is_lcd_on = EINA_TRUE; + } else if (VCONFKEY_PM_STATE_LCDOFF <= status_active_get()->pm_state) { + key_info.is_lcd_on = EINA_FALSE; + } + + key_info.powerkey_count++; + _W("powerkey count : %d", key_info.powerkey_count); + + if(key_info.power_release_timer) { + ecore_timer_del(key_info.power_release_timer); + key_info.power_release_timer = NULL; + } + + if (key_info.power_long_press_timer) { + ecore_timer_del(key_info.power_long_press_timer); + key_info.power_long_press_timer = NULL; + } + + key_info.is_long_press = EINA_FALSE; + key_info.power_long_press_timer = ecore_timer_add(LONG_PRESS_TIMER_SEC, _long_press_timer_cb, NULL); + if(!key_info.power_long_press_timer) { + _E("Failed to add power_long_press_timer"); + } + } else if (!strcmp(ev->keyname, KEY_CANCEL)) { + _D("CANCEL key is pressed"); + key_info.is_cancel = EINA_TRUE; + } + + return ECORE_CALLBACK_RENEW; +} +#endif + + + +#if 0 +static Eina_Bool _w_gesture_hold_cb(void *data, int ev_type, void *ev) +{ + Ecore_X_Event_Gesture_Notify_Hold *e = ev; + + if (VCONFKEY_PM_KEY_LOCK == status_passive_get()->pm_key_ignore) { + _E("Critical Low Batt Clock Mode, ignore gesture"); + return ECORE_CALLBACK_RENEW; + } + + if (SETTING_PSMODE_WEARABLE_ENHANCED == status_passive_get()->setappl_psmode) { + _E("UPS Mode, ignore gesture"); + return ECORE_CALLBACK_RENEW; + } + + if(e->num_fingers == GRAB_TWO_FINGERS) { + _D("subtype[%d]: hold[%d]\n", e->subtype, e->hold_time); + if (e->subtype == ECORE_X_GESTURE_BEGIN) { + _D("Begin : launch task mgr..!!"); + dbus_util_send_cpu_booster_signal(); + process_mgr_must_launch(W_TASKMGR_PKGNAME, APP_CONTROL_OPERATION_MAIN_KEY, APP_CONTROL_OPERATION_MAIN_VALUE, NULL, NULL); + } + } + + return ECORE_CALLBACK_RENEW; +} +#endif + + + +void hw_key_create_window(void) +{ +#if 0 //build error + int status = -1; + int ret = -1; + + _W("hw_key_create_window"); + + key_info.win = ecore_x_window_input_new(0, 0, 0, 1, 1); + if (!key_info.win) { + _E("Failed to create hidden window"); + return; + } + ecore_x_event_mask_unset(key_info.win, ECORE_X_EVENT_MASK_NONE); + ecore_x_icccm_title_set(key_info.win, "w_starter,key,receiver"); + ecore_x_netwm_name_set(key_info.win, "w_starter,key,receiver"); + ecore_x_netwm_pid_set(key_info.win, getpid()); + + ret = utilx_grab_key(ecore_x_display_get(), key_info.win, KEY_POWER, SHARED_GRAB); + if (ret != 0) { + _E("utilx_grab_key KEY_POWER GrabSHARED_GRAB failed, ret[%d]", ret); + } + + key_info.key_up = ecore_event_handler_add(ECORE_EVENT_KEY_UP, _key_release_cb, NULL); + if (!key_info.key_up) { + _E("Failed to register a key up event handler"); + } + + key_info.key_down = ecore_event_handler_add(ECORE_EVENT_KEY_DOWN, _key_press_cb, NULL); + if (!key_info.key_down) { + _E("Failed to register a key down event handler"); + } + + status = ecore_x_gesture_event_grab(key_info.win, ECORE_X_GESTURE_EVENT_HOLD, GRAB_TWO_FINGERS); + _E("ECORE_X_GESTURE_EVENT_HOLD Grab(%d fingers) status[%d]\n", GRAB_TWO_FINGERS, status); + + key_info.two_fingers_hold_hd = ecore_event_handler_add(ECORE_X_EVENT_GESTURE_NOTIFY_HOLD, _w_gesture_hold_cb, NULL); + if (!key_info.two_fingers_hold_hd) { + _E("Failed to register handler : ECORE_X_EVENT_GESTURE_NOTIFY_TAPNHOLD\n"); + } +#endif +} + + + +void hw_key_destroy_window(void) +{ +#if 0 //build error + int status; + + if (key_info.two_fingers_hold_hd) { + ecore_event_handler_del(key_info.two_fingers_hold_hd); + key_info.two_fingers_hold_hd = NULL; + } + + status = ecore_x_gesture_event_ungrab(key_info.win, ECORE_X_GESTURE_EVENT_HOLD, GRAB_TWO_FINGERS); + if (!status) { + _E("ECORE_X_GESTURE_EVENT_HOLD UnGrab(%d fingers) failed, status[%d]\n", GRAB_TWO_FINGERS, status); + } + + if (key_info.key_up) { + ecore_event_handler_del(key_info.key_up); + key_info.key_up = NULL; + } + + if (key_info.key_down) { + ecore_event_handler_del(key_info.key_down); + key_info.key_down = NULL; + } + + utilx_ungrab_key(ecore_x_display_get(), key_info.win, KEY_POWER); + + ecore_x_window_delete_request_send(key_info.win); + key_info.win = 0x0; +#endif +} + + + +// End of a file diff --git a/src/wearable/starter.c b/src/wearable/starter.c new file mode 100644 index 0000000..6aa6df7 --- /dev/null +++ b/src/wearable/starter.c @@ -0,0 +1,199 @@ +/* + * Copyright (c) 2000 - 2015 Samsung Electronics Co., Ltd. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "hw_key.h" +#include "util.h" +#include "hourly_alert.h" +#include "dbus_util.h" +#include "clock_mgr.h" +#include "status.h" +#include "home_mgr.h" +#include "process_mgr.h" + +#define PWLOCK_PKGNAME "org.tizen.b2-pwlock" + +int errno; + + + + +static struct { + int lcd_status; +} s_starter = { + .lcd_status = -1, +}; + + + +static void _signal_handler(int signum, siginfo_t *info, void *unused) +{ + _D("_signal_handler : Terminated..."); + elm_exit(); +} + + + +static int _power_off_cb(status_active_key_e key, void *data) +{ + int val = status_active_get()->sysman_power_off_status; + + if (val > VCONFKEY_SYSMAN_POWER_OFF_POPUP) { + _E("power off status : %d", val); + elm_exit(); + } + + return 1; +} + + + +static int _change_language_cb(status_active_key_e key, void *data) +{ + _D("%s, %d", __func__, __LINE__); + + if (status_active_get()->langset) { + elm_language_set(status_active_get()->langset); + } + + return 1; +} + + + +static int _change_sequence_cb(status_active_key_e key, void *data) +{ + int seq = status_active_get()->starter_sequence; + + if (seq == 1) { + home_mgr_launch_home_first(); + } + + return 1; +} + + + +static void _on_lcd_changed_receive(void *data, DBusMessage *msg) +{ + int lcd_on = 0; + int lcd_off = 0; + + _D("LCD signal is received"); + + lcd_on = dbus_message_is_signal(msg, DEVICED_INTERFACE_DISPLAY, MEMBER_LCD_ON); + lcd_off = dbus_message_is_signal(msg, DEVICED_INTERFACE_DISPLAY, MEMBER_LCD_OFF); + + if (lcd_on) { + _W("LCD on"); + s_starter.lcd_status = 1; + } else if(lcd_off) { + _W("LCD off"); + s_starter.lcd_status = 0; + } else { + _E("%s dbus_message_is_signal error", DEVICED_INTERFACE_DISPLAY); + } +} + + + +static void _init(void) +{ + struct sigaction act; + + memset(&act,0x00,sizeof(struct sigaction)); + act.sa_sigaction = _signal_handler; + act.sa_flags = SA_SIGINFO; + + int ret = sigemptyset(&act.sa_mask); + if (ret < 0) { + _E("Failed to sigemptyset[%s]", strerror(errno)); + } + ret = sigaddset(&act.sa_mask, SIGTERM); + if (ret < 0) { + _E("Failed to sigaddset[%s]", strerror(errno)); + } + ret = sigaction(SIGTERM, &act, NULL); + if (ret < 0) { + _E("Failed to sigaction[%s]", strerror(errno)); + } + + status_register(); + status_active_register_cb(STATUS_ACTIVE_KEY_SYSMAN_POWER_OFF_STATUS, _power_off_cb, NULL); + status_active_register_cb(STATUS_ACTIVE_KEY_LANGSET, _change_language_cb, NULL); + + if (0 < status_passive_get()->setup_wizard_first_boot) { + /* First boot : pwlock > set sequence > home */ + process_mgr_must_launch(PWLOCK_PKGNAME, NULL, NULL, NULL, NULL); + vconf_set_int(VCONFKEY_STARTER_SEQUENCE, 0); + status_active_register_cb(STATUS_ACTIVE_KEY_STARTER_SEQUENCE, _change_sequence_cb, NULL); + } else { + /* Other : Home > pwlock */ + home_mgr_launch_home(); + process_mgr_must_launch(PWLOCK_PKGNAME, NULL, NULL, NULL, NULL); + } + + dbus_util_receive_lcd_status(_on_lcd_changed_receive, NULL); + + home_mgr_init(); + clock_mgr_init(); + hourly_alert_init(); + hw_key_create_window(); +} + + + +static void _fini(void) +{ + hw_key_destroy_window(); + hourly_alert_fini(); + clock_mgr_fini(); + home_mgr_fini(); + + status_active_unregister_cb(STATUS_ACTIVE_KEY_SYSMAN_POWER_OFF_STATUS, _power_off_cb); + status_active_unregister_cb(STATUS_ACTIVE_KEY_LANGSET, _change_language_cb); + status_active_unregister_cb(STATUS_ACTIVE_KEY_STARTER_SEQUENCE, _change_sequence_cb); + status_unregister(); +} + + + +int main(int argc, char *argv[]) +{ + _D("starter is launched..!!"); + + elm_init(argc, argv); + _init(); + + elm_run(); + + _fini(); + elm_shutdown(); + + return 0; +} diff --git a/src/x11.c b/src/x11.c deleted file mode 100644 index feb358b..0000000 --- a/src/x11.c +++ /dev/null @@ -1,119 +0,0 @@ - /* - * Copyright 2012 Samsung Electronics Co., Ltd - * - * Licensed under the Flora License, Version 1.1 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://floralicense.org/license/ - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - - - -#include -#include -#include - -#ifndef WAYLAND -#include -#include -#include -#endif - -#define DEFAULT_WINDOW_H 1280 - -void prop_string_set(const char *name, const char *value) -{ -#ifndef WAYLAND - Display *d; - Atom a_name; - Atom a_UTF8; - XTextProperty xtp; - - if (name == NULL || value == NULL || value[0] == '\0') - return; - - d = XOpenDisplay(NULL); - if (d == NULL) - return; - - a_name = XInternAtom(d, name, False); - if (a_name == None) - goto exit; - - a_UTF8 = XInternAtom(d, "UTF8_STRING", False); - if (a_UTF8 == None) - goto exit; - - xtp.value = (unsigned char *)value; - xtp.format = 8; - xtp.encoding = a_UTF8; - xtp.nitems = strlen(value); - - XSetTextProperty(d, DefaultRootWindow(d), &xtp, a_name); - - exit: - XCloseDisplay(d); -#endif -} - -void prop_int_set(const char *name, unsigned int val) -{ -#ifndef WAYLAND - Display *d; - Atom a_name; - - if (name == NULL) - return; - - d = XOpenDisplay(NULL); - if (d == NULL) - return; - - a_name = XInternAtom(d, name, False); - if (a_name == None) - goto exit; - - XChangeProperty(d, DefaultRootWindow(d), a_name, XA_CARDINAL, 32, - PropModeReplace, (unsigned char *)&val, 1); - - exit: - XCloseDisplay(d); -#endif -} - -void set_window_scale(void) -{ -#ifndef WAYLAND - double root_width = 0.0, root_height = 0.0; - char buf[128] = { 0, }; - Display *disp; - int screen_num; - - disp = XOpenDisplay(NULL); - if (disp == NULL) - return; - - screen_num = DefaultScreen(disp); - - root_width = DisplayWidth(disp, screen_num); - root_height = DisplayHeight(disp, screen_num); - - XCloseDisplay(disp); - - snprintf(buf, sizeof(buf), "%lf", root_height / DEFAULT_WINDOW_H); - - if (root_width == 800 && root_height == 1280) { - snprintf(buf, sizeof(buf), "0.71"); - } - - setenv("ELM_SCALE", buf, 1); - setenv("SCALE_FACTOR", buf, 1); -#endif -} diff --git a/src/xmonitor.c b/src/xmonitor.c deleted file mode 100755 index 49ea19e..0000000 --- a/src/xmonitor.c +++ /dev/null @@ -1,314 +0,0 @@ - /* - * Copyright 2012 Samsung Electronics Co., Ltd - * - * Licensed under the Flora License, Version 1.1 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://floralicense.org/license/ - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - - - -#include -#include -#include -#include - -#ifndef WAYLAND -#include -#endif - -#include -#include -#include -#include -#include -#include - -#include "menu_daemon.h" -#include "util.h" -#include "starter-util.h" -#include "xmonitor.h" - - - -static struct info { - Ecore_Event_Handler *create_handler; - Ecore_Event_Handler *destroy_handler; - Ecore_Event_Handler *focus_in_handler; - Ecore_Event_Handler *focus_out_handler; - int is_top; -} xmonitor_info = { - .create_handler = NULL, - .destroy_handler = NULL, - .focus_in_handler = NULL, - .focus_out_handler = NULL, - .is_top = VCONFKEY_IDLE_SCREEN_TOP_FALSE, -}; - - - -int errno; - - -#ifndef WAYLAND -static inline int _get_pid(Ecore_X_Window win) -{ - int pid; - Ecore_X_Atom atom; - unsigned char *in_pid = NULL; - int num; - - atom = ecore_x_atom_get("X_CLIENT_PID"); - if (ecore_x_window_prop_property_get(win, atom, ECORE_X_ATOM_CARDINAL, - sizeof(int), &in_pid, &num) == EINA_FALSE) { - if(in_pid != NULL) { - free(in_pid); - in_pid = NULL; - } - if (ecore_x_netwm_pid_get(win, &pid) == EINA_FALSE) { - _E("Failed to get PID from a window 0x%X", win); - return -EINVAL; - } - } else { - pid = *(int *)in_pid; - free(in_pid); - } - - return pid; -} -#endif - - -bool _set_idlescreen_top(void) -{ -#ifndef WAYLAND - Ecore_X_Window win; - - int is_top; - int ret; - int focused_pid; - - win = ecore_x_window_focus_get(); - focused_pid = _get_pid(win); - retv_if(focused_pid <= 0, false); - - is_top = menu_daemon_is_homescreen(focused_pid)? - VCONFKEY_IDLE_SCREEN_TOP_TRUE : VCONFKEY_IDLE_SCREEN_TOP_FALSE; - - if (is_top != xmonitor_info.is_top) { - ret = vconf_set_int(VCONFKEY_IDLE_SCREEN_TOP, is_top); - retv_if(0 != ret, false); - xmonitor_info.is_top = is_top; - _D("set the key of idlescreen_is_top as %d", is_top); - } -#endif - - return true; -} - - - -static Eina_Bool _create_cb(void *data, int type, void *event) -{ -#ifndef WAYLAND - Ecore_X_Event_Window_Create *info = event; - - _D("Create a window[%x]", info->win); - - ecore_x_window_client_sniff(info->win); -#endif - - return ECORE_CALLBACK_PASS_ON; -} - - - -static Eina_Bool _destroy_cb(void *data, int type, void *event) -{ - return ECORE_CALLBACK_PASS_ON; -} - - - -static Eina_Bool _focus_in_cb(void *data, int type, void *event) -{ -#ifndef WAYLAND - Ecore_X_Event_Window_Focus_In *info = event; - - _D("Focus in a window[%x]", info->win); - - retv_if(false == _set_idlescreen_top(), ECORE_CALLBACK_PASS_ON); -#endif - - return ECORE_CALLBACK_PASS_ON; -} - - - -static Eina_Bool _focus_out_cb(void *data, int type, void *event) -{ -#ifndef WAYLAND - Ecore_X_Event_Window_Focus_Out *info = event; - - _D("Focus out a window[%x]", info->win); -#endif - - return ECORE_CALLBACK_PASS_ON; -} - - - -static inline void _sniff_all_windows(void) -{ -#ifndef WAYLAND - Ecore_X_Window root; - Ecore_X_Window ret; - struct stack_item *new_item; - struct stack_item *item; - Eina_List *win_stack = NULL; - struct stack_item { - Ecore_X_Window *wins; - int nr_of_wins; - int i; - }; - - root = ecore_x_window_root_first_get(); - ecore_x_window_sniff(root); - - new_item = malloc(sizeof(*new_item)); - if (!new_item) { - _E("Error(%s)\n", strerror(errno)); - return; - } - - new_item->nr_of_wins = 0; - new_item->wins = - ecore_x_window_children_get(root, &new_item->nr_of_wins); - new_item->i = 0; - - if (new_item->wins) - win_stack = eina_list_append(win_stack, new_item); - else - free(new_item); - - while ((item = eina_list_nth(win_stack, 0))) { - win_stack = eina_list_remove(win_stack, item); - - if (!item->wins) { - free(item); - continue; - } - - while (item->i < item->nr_of_wins) { - ret = item->wins[item->i]; - - ecore_x_window_client_sniff(ret); - - new_item = malloc(sizeof(*new_item)); - if (!new_item) { - _E("Error %s\n", strerror(errno)); - item->i++; - continue; - } - - new_item->i = 0; - new_item->nr_of_wins = 0; - new_item->wins = - ecore_x_window_children_get(ret, - &new_item->nr_of_wins); - if (new_item->wins) { - win_stack = - eina_list_append(win_stack, new_item); - } else { - free(new_item); - } - - item->i++; - } - - free(item->wins); - free(item); - } -#endif - - return; -} - - - -int xmonitor_init(void) -{ -#ifndef WAYLAND - if (ecore_x_composite_query() == EINA_FALSE) - _D("====> COMPOSITOR IS NOT ENABLED"); - - xmonitor_info.create_handler = - ecore_event_handler_add(ECORE_X_EVENT_WINDOW_CREATE, _create_cb, NULL); - goto_if(NULL == xmonitor_info.create_handler, Error); - - xmonitor_info.destroy_handler = - ecore_event_handler_add(ECORE_X_EVENT_WINDOW_DESTROY, _destroy_cb, NULL); - goto_if(NULL == xmonitor_info.destroy_handler, Error); - - xmonitor_info.focus_in_handler = - ecore_event_handler_add(ECORE_X_EVENT_WINDOW_FOCUS_IN, _focus_in_cb, NULL); - goto_if(NULL == xmonitor_info.focus_in_handler, Error); - - xmonitor_info.focus_out_handler = - ecore_event_handler_add(ECORE_X_EVENT_WINDOW_FOCUS_OUT, _focus_out_cb, NULL); - goto_if(NULL == xmonitor_info.focus_out_handler, Error); - - _sniff_all_windows(); - if (false == _set_idlescreen_top()) _E("cannot set idlescreen_is_top"); - - return 0; - -Error: - if (xmonitor_info.create_handler) { - ecore_event_handler_del(xmonitor_info.create_handler); - xmonitor_info.create_handler = NULL; - } else return -EFAULT; - - if (xmonitor_info.destroy_handler) { - ecore_event_handler_del(xmonitor_info.destroy_handler); - xmonitor_info.destroy_handler = NULL; - } else return -EFAULT; - - if (xmonitor_info.focus_in_handler) { - ecore_event_handler_del(xmonitor_info.focus_in_handler); - xmonitor_info.focus_in_handler = NULL; - } else return -EFAULT; - - if (xmonitor_info.focus_out_handler) { - ecore_event_handler_del(xmonitor_info.focus_out_handler); - xmonitor_info.focus_out_handler = NULL; - } else return -EFAULT; -#endif - - return -EFAULT; -} - -void xmonitor_fini(void) -{ -#ifndef WAYLAND - ecore_event_handler_del(xmonitor_info.create_handler); - xmonitor_info.create_handler = NULL; - - ecore_event_handler_del(xmonitor_info.destroy_handler); - xmonitor_info.destroy_handler = NULL; - - ecore_event_handler_del(xmonitor_info.focus_in_handler); - xmonitor_info.focus_in_handler = NULL; - - ecore_event_handler_del(xmonitor_info.focus_out_handler); - xmonitor_info.focus_out_handler = NULL; -#endif -} diff --git a/starter b/starter old mode 100755 new mode 100644 index b5c0fa6..03d278c --- a/starter +++ b/starter @@ -6,9 +6,10 @@ CURRENT_RUNLEVEL=`basename $PWD` if [ x"$CURRENT_RUNLEVEL" == x"rc3.d" ]; then while [ ! -f /tmp/.wm_ready ]; do - sleep 0.1 + /bin/sleep 0.1 done fi /usr/bin/starter & + diff --git a/starter.desktop.in b/starter.desktop.in deleted file mode 100755 index f2a89f3..0000000 --- a/starter.desktop.in +++ /dev/null @@ -1,9 +0,0 @@ -[Desktop Entry] -Encoding=UTF-8 -Name=@PROJECT_NAME@ -Exec=@BINDIR@/@PROJECT_NAME@ -Icon=elementary -Terminal=false -Type=Application -Categories=Application;Utility; - diff --git a/starter.efl b/starter.efl new file mode 100644 index 0000000..895c460 --- /dev/null +++ b/starter.efl @@ -0,0 +1,38 @@ +root starter rw---- ------ +_default_ starter rw---- ------ +starter e17::notification rw---- ------ +starter bt-service::gap rwx-t- ------ +starter tts-server rwx--- ------ +starter aul::terminate --x--- ------ +starter aul::launch --x--- ------ +starter alarm-server::alarm -w---- ------ +starter deviced::haptic rw---- ------ +starter deviced::display rw---- ------ +starter pulseaudio rwxat- ------ +starter system::share rwxat- ------ +starter system::media::root rwxat- ------ +starter system::media rwxat- ------ +starter org.tizen.setting::private rw---- ------ +starter org.tizen.setting::default-resources r-x--- ------ +starter system::homedir rwxat- ------ +starter sys-assert::core rwxat- ------ +starter data-provider-master::bin r----- ------ +starter data-router r----- ------ +starter device::app_logging rw---- ------ +starter device::sys_logging rw---- ------ +starter deviced r----- ------ +starter isf r-x--- ------ +starter starter::vconf rw---l ------ +starter stt-server r----- ------ +starter system::vconf rwxat- ------ +starter system::vconf_inhouse rw---l ------ +starter system::vconf_system r----l ------ +starter system::vconf_setting r----l ------ +starter system::vconf_multimedia r----l ------ +starter starter_private::vconf r----l ------ +starter xorg r----- ------ +starter xorg -w---- ------ +starter pkgmgr::db r----l ------ +starter syspopup::db r----l ------ +starter security-server::api-password-check -w---- ------ +starter org.tizen.wallpaper-ui-service r----- ------ diff --git a/starter.manifest b/starter.manifest new file mode 100644 index 0000000..ebdbd8d --- /dev/null +++ b/starter.manifest @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/get_entry.c b/test/get_entry.c deleted file mode 100755 index ea35358..0000000 --- a/test/get_entry.c +++ /dev/null @@ -1,89 +0,0 @@ - /* - * Copyright 2012 Samsung Electronics Co., Ltd - * - * Licensed under the Flora License, Version 1.1 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://floralicense.org/license/ - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - - - -#include -#include -#include -#include - -int main(int argc, char *argv[]) -{ - unsigned char *prop_ret; - Atom type_ret; - unsigned long bytes_after, num_ret; - int format_ret; - unsigned int i; - int num; - - Display *d; - Atom a_ac; - Atom a_ap; - Status r; - - d = XOpenDisplay(NULL); - if (d == NULL) { - printf("Display open error\n"); - return 1; - } - - a_ac = XInternAtom(d, "ENLIGHTENMENT_AUTOCAPITAL_ALLOW", False); - if (a_ac == None) { - printf("XInternAtom error\n"); - goto exit; - } - - r = XGetWindowProperty(d, DefaultRootWindow(d), a_ac, 0, 0x7fffffff, - False, XA_CARDINAL, &type_ret, &format_ret, - &num_ret, &bytes_after, &prop_ret); - if (r != Success) { - printf("XGetWindowProperty error\n"); - goto exit; - } - - if (type_ret == XA_CARDINAL && format_ret == 32 && num_ret > 0 - && prop_ret) { - printf("Auto capital: %lu\n", ((unsigned long *)prop_ret)[0]); - } - if (prop_ret) - XFree(prop_ret); - - a_ap = XInternAtom(d, "ENLIGHTENMENT_AUTOPERIOD_ALLOW", False); - if (a_ap == None) { - printf("XInternAtom error\n"); - goto exit; - } - - r = XGetWindowProperty(d, DefaultRootWindow(d), a_ap, 0, 0x7fffffff, - False, XA_CARDINAL, &type_ret, &format_ret, - &num_ret, &bytes_after, &prop_ret); - if (r != Success) { - printf("XGetWindowProperty error\n"); - goto exit; - } - - if (type_ret == XA_CARDINAL && format_ret == 32 && num_ret > 0 - && prop_ret) { - printf("Auto period: %lu\n", ((unsigned long *)prop_ret)[0]); - } - if (prop_ret) - XFree(prop_ret); - - exit: - XCloseDisplay(d); - return 0; -} diff --git a/test/get_theme.c b/test/get_theme.c deleted file mode 100755 index 2439ed5..0000000 --- a/test/get_theme.c +++ /dev/null @@ -1,56 +0,0 @@ - /* - * Copyright 2012 Samsung Electronics Co., Ltd - * - * Licensed under the Flora License, Version 1.1 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://floralicense.org/license/ - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - - - -#include -#include -#include -#include - -int main(int argc, char *argv[]) -{ - XTextProperty xtp; - Display *d; - Atom a_e17; - Status r; - - d = XOpenDisplay(NULL); - if (d == NULL) { - printf("Display open error\n"); - return 1; - } - - a_e17 = XInternAtom(d, "ENLIGHTENMENT_THEME", False); - if (a_e17 == None) { - printf("XInternAtom error\n"); - goto exit; - } - - r = XGetTextProperty(d, DefaultRootWindow(d), &xtp, a_e17); - if (!r) { - printf("XGetTextProperty error\n"); - goto exit; - } - - printf("THEME: [%s]\n", (char *)xtp.value); - - XFree(xtp.value); - - exit: - XCloseDisplay(d); - return 0; -} diff --git a/test/set_theme.c b/test/set_theme.c deleted file mode 100755 index a6cf4eb..0000000 --- a/test/set_theme.c +++ /dev/null @@ -1,62 +0,0 @@ - /* - * Copyright 2012 Samsung Electronics Co., Ltd - * - * Licensed under the Flora License, Version 1.1 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://floralicense.org/license/ - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - - - -#include - -#include -#include -#include - -void set_elm_theme(void) -{ - char *theme; - Display *d; - Atom a_e17; - Atom a_UTF8; - XTextProperty xtp; - - theme = "beat:kessler"; - - d = XOpenDisplay(NULL); - if (d == NULL) - return; - - a_e17 = XInternAtom(d, "ENLIGHTENMENT_THEME", False); - if (a_e17 == None) - goto exit; - - a_UTF8 = XInternAtom(d, "UTF8_STRING", False); - if (a_UTF8 == None) - goto exit; - - xtp.value = (unsigned char *)theme; - xtp.format = 8; - xtp.encoding = a_UTF8; - xtp.nitems = strlen(theme); - - XSetTextProperty(d, DefaultRootWindow(d), &xtp, a_e17); - - exit: - XCloseDisplay(d); -} - -int main(int argc, char *argv[]) -{ - set_elm_theme(); - return 0; -} -- 2.7.4