From cd81790ee4cc97134f63a2da9f72ac6c19b15082 Mon Sep 17 00:00:00 2001 From: Jin Yoon Date: Thu, 6 Dec 2012 22:35:33 +0900 Subject: [PATCH] Code sync Change-Id: I78714d99d6321f357c5253085261ae567cfcc57b --- CMakeLists.txt | 85 ++- boot-mgr/CMakeLists.txt | 42 -- boot-mgr/starter.c | 273 ------- boot-mgr/starter.h | 27 - boot-mgr/x11.c | 82 --- boot-mgr/x11.h | 23 - debian/control | 2 +- debian/starter.postinst | 2 + include/hw_key.h | 24 + include/lock-daemon.h | 24 + {lock-mgr/include => include}/lockd-debug.h | 32 +- include/lockd-process-mgr.h | 40 + include/lockd-window-mgr.h | 48 ++ include/menu_daemon.h | 29 + include/pkg_event.h | 46 ++ include/starter-util.h | 35 + include/starter-vconf.h | 37 +- include/starter.h | 28 + include/util.h | 79 ++ include/x11.h | 26 + include/xmonitor.h | 25 + lock-mgr/CMakeLists.txt | 48 -- lock-mgr/include/lock-daemon.h | 22 - lock-mgr/include/lockd-process-mgr.h | 29 - lock-mgr/include/lockd-window-mgr.h | 39 - lock-mgr/src/lock-daemon.c | 272 ------- lock-mgr/src/lockd-process-mgr.c | 146 ---- lock-mgr/src/lockd-window-mgr.c | 270 ------- lock-setting/CMakeLists.txt | 10 + lock-setting/lockapp-setting/CMakeLists.txt | 39 + .../include/openlock-setting-debug.h | 48 ++ .../include/openlock-setting-main.h | 48 ++ .../lockapp-setting/include/openlock-setting-pw.h | 30 + .../include/openlock-setting-util.h | 28 + .../lockapp-setting/include/openlock-setting.h | 40 + .../lockapp-setting/src/openlock-setting-main.c | 342 +++++++++ .../lockapp-setting/src/openlock-setting-pw.c | 522 ++++++++++++++ .../lockapp-setting/src/openlock-setting-util.c | 65 ++ .../lockapp-setting/src/openlock-setting.c | 217 ++++++ lock-setting/lockscreen-options/CMakeLists.txt | 54 ++ .../include/lockscreen-options-debug.h | 48 ++ .../include/lockscreen-options-dualclock.h | 28 + .../include/lockscreen-options-locktitle.h | 26 + .../include/lockscreen-options-main.h | 28 + .../include/lockscreen-options-shortcuts-edit.h | 25 + .../include/lockscreen-options-shortcuts.h | 26 + .../include/lockscreen-options-util.h | 72 ++ .../include/lockscreen-options.h | 64 ++ .../res/edje/lockscreen-options-locktitle.edc | 432 +++++++++++ .../res/edje/lockscreen-options-shortcuts.edc | 116 +++ .../res/edje/lockscreen-options-thumbnail.edc | 66 ++ .../res/edje/lockscreen-options.edc | 23 + .../res/images/B09_Add Text_sip_option_Italic.png | Bin 0 -> 3404 bytes .../res/images/B09_Add Text_sip_option_bg.png | Bin 0 -> 3297 bytes .../res/images/B09_Add Text_sip_option_bold.png | Bin 0 -> 3616 bytes .../res/images/B09_Add Text_sip_option_color.png | Bin 0 -> 3652 bytes .../res/images/B09_Add Text_sip_option_size.png | Bin 0 -> 3612 bytes .../res/images/B09_Add Text_sip_option_style.png | Bin 0 -> 5205 bytes .../images/B09_Add Text_sip_option_underline.png | Bin 0 -> 3476 bytes .../res/images/B09_key_btn_01.png | Bin 0 -> 3423 bytes .../res/images/B09_key_btn_press.png | Bin 0 -> 3494 bytes .../lockscreen-options/res/images/icon_add.png | Bin 0 -> 1205 bytes .../lockscreen-options/res/images/icon_delete.png | Bin 0 -> 6062 bytes .../res/images/icon_delete_press.png | Bin 0 -> 6231 bytes .../res/images/mainmenu_icon.png | Bin 0 -> 2184 bytes .../src/lockscreen-options-dualclock.c | 249 +++++++ .../src/lockscreen-options-locktitle.c | 535 ++++++++++++++ .../src/lockscreen-options-main.c | 462 ++++++++++++ .../src/lockscreen-options-shortcuts-edit.c | 576 +++++++++++++++ .../src/lockscreen-options-shortcuts.c | 803 +++++++++++++++++++++ .../src/lockscreen-options-util.c | 174 +++++ .../lockscreen-options/src/lockscreen-options.c | 217 ++++++ 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.service | 6 +- packaging/starter.spec | 77 +- rd3starter | 18 +- rd4starter | 12 +- src/hw_key.c | 347 +++++++++ src/lock-daemon.c | 743 +++++++++++++++++++ {lock-mgr/src => src}/lockd-debug.c | 42 +- src/lockd-process-mgr.c | 234 ++++++ src/lockd-window-mgr.c | 709 ++++++++++++++++++ src/menu_daemon.c | 320 ++++++++ src/pkg_event.c | 306 ++++++++ src/starter.c | 331 +++++++++ src/x11.c | 111 +++ src/xmonitor.c | 304 ++++++++ test/get_entry.c | 89 +++ test/get_theme.c | 56 ++ test/set_theme.c | 62 ++ 142 files changed, 12496 insertions(+), 1350 deletions(-) delete mode 100755 boot-mgr/CMakeLists.txt delete mode 100755 boot-mgr/starter.c delete mode 100755 boot-mgr/starter.h delete mode 100755 boot-mgr/x11.c delete mode 100755 boot-mgr/x11.h create mode 100644 include/hw_key.h create mode 100755 include/lock-daemon.h rename {lock-mgr/include => include}/lockd-debug.h (63%) mode change 100755 => 100644 create mode 100644 include/lockd-process-mgr.h create mode 100644 include/lockd-window-mgr.h create mode 100755 include/menu_daemon.h create mode 100644 include/pkg_event.h create mode 100644 include/starter-util.h create mode 100644 include/starter.h create mode 100644 include/util.h create mode 100644 include/x11.h create mode 100644 include/xmonitor.h delete mode 100755 lock-mgr/CMakeLists.txt delete mode 100755 lock-mgr/include/lock-daemon.h delete mode 100755 lock-mgr/include/lockd-process-mgr.h delete mode 100755 lock-mgr/include/lockd-window-mgr.h delete mode 100755 lock-mgr/src/lock-daemon.c delete mode 100755 lock-mgr/src/lockd-process-mgr.c delete mode 100755 lock-mgr/src/lockd-window-mgr.c create mode 100755 lock-setting/CMakeLists.txt create mode 100755 lock-setting/lockapp-setting/CMakeLists.txt create mode 100755 lock-setting/lockapp-setting/include/openlock-setting-debug.h create mode 100755 lock-setting/lockapp-setting/include/openlock-setting-main.h create mode 100755 lock-setting/lockapp-setting/include/openlock-setting-pw.h create mode 100755 lock-setting/lockapp-setting/include/openlock-setting-util.h create mode 100755 lock-setting/lockapp-setting/include/openlock-setting.h create mode 100755 lock-setting/lockapp-setting/src/openlock-setting-main.c create mode 100755 lock-setting/lockapp-setting/src/openlock-setting-pw.c create mode 100755 lock-setting/lockapp-setting/src/openlock-setting-util.c create mode 100755 lock-setting/lockapp-setting/src/openlock-setting.c create mode 100755 lock-setting/lockscreen-options/CMakeLists.txt create mode 100755 lock-setting/lockscreen-options/include/lockscreen-options-debug.h create mode 100755 lock-setting/lockscreen-options/include/lockscreen-options-dualclock.h create mode 100755 lock-setting/lockscreen-options/include/lockscreen-options-locktitle.h create mode 100755 lock-setting/lockscreen-options/include/lockscreen-options-main.h create mode 100755 lock-setting/lockscreen-options/include/lockscreen-options-shortcuts-edit.h create mode 100755 lock-setting/lockscreen-options/include/lockscreen-options-shortcuts.h create mode 100755 lock-setting/lockscreen-options/include/lockscreen-options-util.h create mode 100755 lock-setting/lockscreen-options/include/lockscreen-options.h create mode 100755 lock-setting/lockscreen-options/res/edje/lockscreen-options-locktitle.edc create mode 100755 lock-setting/lockscreen-options/res/edje/lockscreen-options-shortcuts.edc create mode 100755 lock-setting/lockscreen-options/res/edje/lockscreen-options-thumbnail.edc create mode 100755 lock-setting/lockscreen-options/res/edje/lockscreen-options.edc create mode 100755 lock-setting/lockscreen-options/res/images/B09_Add Text_sip_option_Italic.png create mode 100755 lock-setting/lockscreen-options/res/images/B09_Add Text_sip_option_bg.png create mode 100755 lock-setting/lockscreen-options/res/images/B09_Add Text_sip_option_bold.png create mode 100755 lock-setting/lockscreen-options/res/images/B09_Add Text_sip_option_color.png create mode 100755 lock-setting/lockscreen-options/res/images/B09_Add Text_sip_option_size.png create mode 100755 lock-setting/lockscreen-options/res/images/B09_Add Text_sip_option_style.png create mode 100755 lock-setting/lockscreen-options/res/images/B09_Add Text_sip_option_underline.png create mode 100755 lock-setting/lockscreen-options/res/images/B09_key_btn_01.png create mode 100755 lock-setting/lockscreen-options/res/images/B09_key_btn_press.png create mode 100755 lock-setting/lockscreen-options/res/images/icon_add.png create mode 100755 lock-setting/lockscreen-options/res/images/icon_delete.png create mode 100755 lock-setting/lockscreen-options/res/images/icon_delete_press.png create mode 100755 lock-setting/lockscreen-options/res/images/mainmenu_icon.png create mode 100755 lock-setting/lockscreen-options/src/lockscreen-options-dualclock.c create mode 100755 lock-setting/lockscreen-options/src/lockscreen-options-locktitle.c create mode 100755 lock-setting/lockscreen-options/src/lockscreen-options-main.c create mode 100755 lock-setting/lockscreen-options/src/lockscreen-options-shortcuts-edit.c create mode 100755 lock-setting/lockscreen-options/src/lockscreen-options-shortcuts.c create mode 100755 lock-setting/lockscreen-options/src/lockscreen-options-util.c create mode 100755 lock-setting/lockscreen-options/src/lockscreen-options.c create mode 100755 lock-setting/po/CMakeLists.txt create mode 100644 lock-setting/po/ar.po create mode 100644 lock-setting/po/az.po create mode 100644 lock-setting/po/bg.po create mode 100644 lock-setting/po/ca.po create mode 100644 lock-setting/po/cs.po create mode 100644 lock-setting/po/da.po create mode 100644 lock-setting/po/de_DE.po create mode 100644 lock-setting/po/el_GR.po create mode 100644 lock-setting/po/en.po create mode 100644 lock-setting/po/en_PH.po create mode 100644 lock-setting/po/en_US.po create mode 100644 lock-setting/po/es_ES.po create mode 100644 lock-setting/po/es_MX.po create mode 100644 lock-setting/po/es_US.po create mode 100644 lock-setting/po/et.po create mode 100644 lock-setting/po/eu.po create mode 100644 lock-setting/po/fi.po create mode 100644 lock-setting/po/fr_CA.po create mode 100644 lock-setting/po/fr_FR.po create mode 100644 lock-setting/po/ga.po create mode 100644 lock-setting/po/gl.po create mode 100644 lock-setting/po/hi.po create mode 100644 lock-setting/po/hr.po create mode 100644 lock-setting/po/hu.po create mode 100644 lock-setting/po/hy.po create mode 100644 lock-setting/po/is.po create mode 100644 lock-setting/po/it_IT.po create mode 100644 lock-setting/po/ja_JP.po create mode 100644 lock-setting/po/ka.po create mode 100644 lock-setting/po/kk.po create mode 100644 lock-setting/po/ko_KR.po create mode 100644 lock-setting/po/lt.po create mode 100644 lock-setting/po/lv.po create mode 100644 lock-setting/po/mk.po create mode 100644 lock-setting/po/nb.po create mode 100644 lock-setting/po/nl_NL.po create mode 100644 lock-setting/po/pl.po create mode 100644 lock-setting/po/pt_BR.po create mode 100644 lock-setting/po/pt_PT.po create mode 100644 lock-setting/po/ro.po create mode 100644 lock-setting/po/ru_RU.po create mode 100644 lock-setting/po/sk.po create mode 100644 lock-setting/po/sl.po create mode 100644 lock-setting/po/sr.po create mode 100644 lock-setting/po/sv.po create mode 100644 lock-setting/po/tr_TR.po create mode 100644 lock-setting/po/uk.po create mode 100644 lock-setting/po/uz.po create mode 100644 lock-setting/po/zh_CN.po create mode 100644 lock-setting/po/zh_HK.po create mode 100644 lock-setting/po/zh_SG.po create mode 100644 lock-setting/po/zh_TW.po create mode 100755 src/hw_key.c create mode 100755 src/lock-daemon.c rename {lock-mgr/src => src}/lockd-debug.c (63%) mode change 100755 => 100644 create mode 100755 src/lockd-process-mgr.c create mode 100644 src/lockd-window-mgr.c create mode 100755 src/menu_daemon.c create mode 100644 src/pkg_event.c create mode 100755 src/starter.c create mode 100644 src/x11.c create mode 100644 src/xmonitor.c create mode 100755 test/get_entry.c create mode 100755 test/get_theme.c create mode 100755 test/set_theme.c diff --git a/CMakeLists.txt b/CMakeLists.txt index bd66ffc..4f1c998 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,7 +1,9 @@ CMAKE_MINIMUM_REQUIRED(VERSION 2.6) PROJECT(starter C) -SET(VENDOR "org.tizen") +SET(VENDOR "tizen") +SET(PACKAGE ${PROJECT_NAME}) +SET(PKGNAME "org.${VENDOR}.${PACKAGE}") SET(PREFIX ${CMAKE_INSTALL_PREFIX}) SET(BINDIR "${PREFIX}/bin") SET(DATADIR "${PREFIX}/share") @@ -9,11 +11,84 @@ SET(LOCALEDIR "${DATADIR}/locale") INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/include) -SET(LOCK_MGR lock-mgr) -SET(BOOT_MGR boot-mgr) +INCLUDE(FindPkgConfig) +pkg_check_modules(pkgs REQUIRED + ail + aul + capi-system-media-key + db-util + dlog + ecore + ecore-evas + ecore-input + ecore-x + eet + eina + elementary + evas + heynoti + sysman + syspopup-caller + utilX + vconf + x11 + xcomposite + xext + appcore-efl + glib-2.0 + ui-gadget-1 + bundle + capi-appfw-application +) -ADD_SUBDIRECTORY(${CMAKE_SOURCE_DIR}/${LOCK_MGR}) -ADD_SUBDIRECTORY(${CMAKE_SOURCE_DIR}/${BOOT_MGR}) +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_EXE_LINKER_FLAGS "-Wl,--as-needed -Wl,--rpath=${PREFIX}/lib -pie") + +FIND_PROGRAM(UNAME NAMES uname) +EXEC_PROGRAM("${UNAME}" ARGS "-m" OUTPUT_VARIABLE "ARCH") +IF("${ARCH}" STREQUAL "arm") + ADD_DEFINITIONS("-DTARGET") + 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") + +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 +) +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(FILES ${CMAKE_SOURCE_DIR}/rd4starter DESTINATION /etc/init.d PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE diff --git a/boot-mgr/CMakeLists.txt b/boot-mgr/CMakeLists.txt deleted file mode 100755 index 6dfcd8b..0000000 --- a/boot-mgr/CMakeLists.txt +++ /dev/null @@ -1,42 +0,0 @@ -CMAKE_MINIMUM_REQUIRED(VERSION 2.6) -PROJECT(starter C) - -SET(SRCS starter.c x11.c) - -SET(CMAKE_BINARY_LOCK_DAEMON_DIR "${CMAKE_BINARY_DIR}/${LOCK_MGR}") - -INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}) -INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/${LOCK_MGR}/include) - -INCLUDE(FindPkgConfig) -pkg_check_modules(pkgs REQUIRED elementary vconf x11 heynoti aul ecore evas ecore-evas x11 dlog ecore-x utilX ecore-input) - -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_EXE_LINKER_FLAGS "-Wl,--as-needed -Wl,--rpath=${PREFIX}/lib -pie") - -FIND_PROGRAM(UNAME NAMES uname) -EXEC_PROGRAM("${UNAME}" ARGS "-m" OUTPUT_VARIABLE "ARCH") -IF("${ARCH}" STREQUAL "arm") - ADD_DEFINITIONS("-DTARGET") - 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}\"") - -SET(CMAKE_EXE_LINKER_FLAGS "-Wl,--as-needed") - -ADD_EXECUTABLE(${PROJECT_NAME} ${SRCS}) -#TARGET_LINK_LIBRARIES(${PROJECT_NAME} ${pkgs_LDFLAGS}) -TARGET_LINK_LIBRARIES(${PROJECT_NAME} -L${CMAKE_BINARY_LOCK_DAEMON_DIR} -llock-daemon ${pkgs_LDFLAGS}) -INSTALL(TARGETS ${PROJECT_NAME} DESTINATION ${BINDIR}) diff --git a/boot-mgr/starter.c b/boot-mgr/starter.c deleted file mode 100755 index 98148a9..0000000 --- a/boot-mgr/starter.c +++ /dev/null @@ -1,273 +0,0 @@ -/* - * Copyright 2012 Samsung Electronics Co., Ltd - * - * Licensed under the Flora License, Version 1.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.tizenopensource.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 "starter.h" -#include "x11.h" -#include "lock-daemon.h" -#include "lockd-debug.h" - -#define DEFAULT_THEME "tizen" - -#define HIB_CAPTURING "/opt/etc/.hib_capturing" -#define STR_STARTER_READY "/tmp/hibernation/starter_ready" - -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); -} -static int _launch_pwlock(void) -{ - int r; - - _DBG("%s", __func__); - - r = aul_launch_app("org.tizen.pwlock", 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("org.tizen.pwlock", 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 hib_leave(void *data) -{ - struct appdata *ad = data; - if (ad == NULL) { - fprintf(stderr, "Invalid argument: appdata is NULL\n"); - return; - } - - _DBG("%s", __func__); - _set_elm_theme(); - start_lock_daemon(); - if (_launch_pwlock() < 0) { - _ERR("launch pwlock error"); - } -} - -static int add_noti(struct appdata *ad) -{ - int fd; - int r; - _DBG("%s %d\n", __func__, __LINE__); - - if (ad == NULL) { - fprintf(stderr, "Invalid argument: appdata is NULL\n"); - return -1; - } - - fd = heynoti_init(); - if (fd == -1) { - _ERR("Noti init error"); - return -1; - } - ad->noti = fd; - - r = heynoti_subscribe(fd, "HIBERNATION_PRELEAVE", hib_leave, ad); - if (r == -1) { - _ERR("Noti subs error"); - return -1; - } - - r = heynoti_attach_handler(fd); - if (r == -1) { - _ERR("Noti attach error"); - return -1; - } - - _DBG("Waiting for hib leave"); - _DBG("%s %d\n", __func__, __LINE__); - - 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 int _init(struct appdata *ad) -{ - int fd; - int r; - int fd1; - - struct sigaction act; - 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)); - - ad->noti = -1; - gettimeofday(&ad->tv_start, NULL); - - lock_menu_screen(); - _set_elm_theme(); - - _DBG("%s %d\n", __func__, __LINE__); - - fd = open(HIB_CAPTURING, O_RDONLY); - _DBG("fd = %d\n", fd); - if (fd == -1) { - _DBG("fd = %d\n", fd); - start_lock_daemon(); - if (_launch_pwlock() < 0) { - _ERR("launch pwlock error"); - } - r = 0; - } else { - close(fd); - r = add_noti(ad); - } - - fd1 = open(STR_STARTER_READY, O_RDWR | O_CREAT, S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH); - if (fd1 > 0) { - _DBG("Hibernation ready.\n"); - close(fd1); - } - - return r; -} - -static void _fini(struct appdata *ad) -{ - struct timeval tv, res; - - if (ad == NULL) { - fprintf(stderr, "Invalid argument: appdata is NULL\n"); - return; - } - if (ad->noti != -1) - heynoti_close(ad->noti); - - unlock_menu_screen(); - - 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; - - int heyfd = heynoti_init(); - if (heyfd < 0) { - _ERR("Failed to heynoti_init[%d]", heyfd); - } - - 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/boot-mgr/starter.h b/boot-mgr/starter.h deleted file mode 100755 index d6e9a74..0000000 --- a/boot-mgr/starter.h +++ /dev/null @@ -1,27 +0,0 @@ -/* - * Copyright 2012 Samsung Electronics Co., Ltd - * - * Licensed under the Flora License, Version 1.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.tizenopensource.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; - int noti; -}; - -#endif /* __STARTER_H__ */ diff --git a/boot-mgr/x11.c b/boot-mgr/x11.c deleted file mode 100755 index d9d8aa9..0000000 --- a/boot-mgr/x11.c +++ /dev/null @@ -1,82 +0,0 @@ -/* - * Copyright 2012 Samsung Electronics Co., Ltd - * - * Licensed under the Flora License, Version 1.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.tizenopensource.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 - -#define DEFAULT_WINDOW_H 1280 - -void prop_string_set(const char *name, const char *value) -{ - 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); -} - -void prop_int_set(const char *name, unsigned int val) -{ - 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); -} - diff --git a/boot-mgr/x11.h b/boot-mgr/x11.h deleted file mode 100755 index f32e141..0000000 --- a/boot-mgr/x11.h +++ /dev/null @@ -1,23 +0,0 @@ -/* - * Copyright 2012 Samsung Electronics Co., Ltd - * - * Licensed under the Flora License, Version 1.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.tizenopensource.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); - -#endif /* __STARTER_X11_H__ */ diff --git a/debian/control b/debian/control index ae2c243..d62b6d2 100755 --- a/debian/control +++ b/debian/control @@ -2,7 +2,7 @@ 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 +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 Standards-Version: 3.7.2 Package: starter diff --git a/debian/starter.postinst b/debian/starter.postinst index b4e7f9d..a3c94ed 100755 --- a/debian/starter.postinst +++ b/debian/starter.postinst @@ -6,6 +6,8 @@ vconftool set -t string file/private/lockscreen/pkgname "org.tizen.draglock" -u 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 diff --git a/include/hw_key.h b/include/hw_key.h new file mode 100644 index 0000000..594e810 --- /dev/null +++ b/include/hw_key.h @@ -0,0 +1,24 @@ + /* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.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.tizenopensource.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 new file mode 100755 index 0000000..47caf66 --- /dev/null +++ b/include/lock-daemon.h @@ -0,0 +1,24 @@ + /* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.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.tizenopensource.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 /* __LOCK_DAEMON_H__ */ diff --git a/lock-mgr/include/lockd-debug.h b/include/lockd-debug.h old mode 100755 new mode 100644 similarity index 63% rename from lock-mgr/include/lockd-debug.h rename to include/lockd-debug.h index e017667..2da144e --- a/lock-mgr/include/lockd-debug.h +++ b/include/lockd-debug.h @@ -1,18 +1,20 @@ -/* - * Copyright 2012 Samsung Electronics Co., Ltd - * - * Licensed under the Flora License, Version 1.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.tizenopensource.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 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.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.tizenopensource.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__ diff --git a/include/lockd-process-mgr.h b/include/lockd-process-mgr.h new file mode 100644 index 0000000..93c69fa --- /dev/null +++ b/include/lockd-process-mgr.h @@ -0,0 +1,40 @@ + /* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.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.tizenopensource.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_recovery_lock(void); + +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 /* __LOCKD_PROCESS_MGR_H__ */ diff --git a/include/lockd-window-mgr.h b/include/lockd-window-mgr.h new file mode 100644 index 0000000..28f5dd6 --- /dev/null +++ b/include/lockd-window-mgr.h @@ -0,0 +1,48 @@ + /* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.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.tizenopensource.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; + +void +lockd_window_set_window_property(lockw_data * data, int lock_app_pid, + void *event); + +void +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); + +void lockd_create_ug_window(void *data); + +void lockd_destroy_ug_window(void *data); + +void lockd_show_phonelock_alpha_ug(void *data); +#endif /* __LOCKD_WINDOW_MGR_H__ */ diff --git a/include/menu_daemon.h b/include/menu_daemon.h new file mode 100755 index 0000000..cde3b5c --- /dev/null +++ b/include/menu_daemon.h @@ -0,0 +1,29 @@ + /* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.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.tizenopensource.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 + +extern void menu_daemon_init(void *data); +extern void menu_daemon_fini(void); + +extern bool menu_daemon_is_homescreen(pid_t pid); + +extern int menu_daemon_check_dead_signal(int pid); + +// End of a file diff --git a/include/pkg_event.h b/include/pkg_event.h new file mode 100644 index 0000000..0445093 --- /dev/null +++ b/include/pkg_event.h @@ -0,0 +1,46 @@ + /* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.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.tizenopensource.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"))) /** +#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 /* __STARTER_UTIL_H__ */ diff --git a/include/starter-vconf.h b/include/starter-vconf.h index b0db772..9f18b8a 100755 --- a/include/starter-vconf.h +++ b/include/starter-vconf.h @@ -1,23 +1,20 @@ -/* - * starter - * - * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved. - * - * Contact: Seungtaek Chung , Mi-Ju Lee , Xi Zhichan - * - * 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. - * - */ + /* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.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.tizenopensource.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__ diff --git a/include/starter.h b/include/starter.h new file mode 100644 index 0000000..9032010 --- /dev/null +++ b/include/starter.h @@ -0,0 +1,28 @@ + /* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.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.tizenopensource.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; /* start time */ +}; + +#endif /* __STARTER_H__ */ diff --git a/include/util.h b/include/util.h new file mode 100644 index 0000000..4956d0d --- /dev/null +++ b/include/util.h @@ -0,0 +1,79 @@ + /* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.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.tizenopensource.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_UTIL_H__ +#define __MENU_DAEMON_UTIL_H__ +#include + +#define HOME_SCREEN_PKG_NAME "org.tizen.menu-screen" +#define CONF_PATH_NUMBER 1024 + +#ifdef LOG_TAG +#undef LOG_TAG +#define LOG_TAG "starter" +#endif + +/* Log */ +#if !defined(_W) +#define _W(fmt, arg...) LOGW("[%s:%d] "fmt"\n", __func__, __LINE__, ##arg) +#endif + +#if !defined(_D) +#define _D(fmt, arg...) LOGD("[%s:%d] "fmt"\n", __func__, __LINE__, ##arg) +#endif + +#if !defined(_E) +#define _E(fmt, arg...) LOGE("[%s:%d] "fmt"\n", __func__, __LINE__, ##arg) +#endif + +#define retv_if(expr, val) do { \ + if(expr) { \ + _E("(%s) -> %s() return", #expr, __FUNCTION__); \ + return (val); \ + } \ +} while (0) + +#define ret_if(expr) do { \ + if(expr) { \ + _E("(%s) -> %s() return", #expr, __FUNCTION__); \ + return; \ + } \ +} while (0) + +#define goto_if(expr, val) do { \ + if(expr) { \ + _E("(%s) -> goto", #expr); \ + goto val; \ + } \ +} while (0) + +#define break_if(expr) { \ + if(expr) { \ + _E("(%s) -> break", #expr); \ + break; \ + } \ +} + +#define continue_if(expr) { \ + if(expr) { \ + _E("(%s) -> continue", #expr); \ + continue; \ + } \ +} + +#endif /* __MENU_DAEMON_UTIL_H__ */ diff --git a/include/x11.h b/include/x11.h new file mode 100644 index 0000000..78735af --- /dev/null +++ b/include/x11.h @@ -0,0 +1,26 @@ + /* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.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.tizenopensource.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 /* __STARTER_X11_H__ */ diff --git a/include/xmonitor.h b/include/xmonitor.h new file mode 100644 index 0000000..e904c0b --- /dev/null +++ b/include/xmonitor.h @@ -0,0 +1,25 @@ + /* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.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.tizenopensource.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-mgr/CMakeLists.txt b/lock-mgr/CMakeLists.txt deleted file mode 100755 index 197ad11..0000000 --- a/lock-mgr/CMakeLists.txt +++ /dev/null @@ -1,48 +0,0 @@ -CMAKE_MINIMUM_REQUIRED(VERSION 2.6) -PROJECT(lock-daemon C) - -SET(PREFIX "/usr") -SET(EXEC_PREFIX "${PREFIX}/bin") -SET(LIBDIR "${PREFIX}/lib") -SET(CONFDIR "/etc") -SET(VERSION 0.1.0) - -INCLUDE(FindPkgConfig) -pkg_check_modules(pkgs_lock_daemon REQUIRED - elementary - appcore-efl - heynoti - aul - vconf - ecore - evas - ecore-evas - eet - x11 - dlog - ecore-x - utilX - ecore-input - glib-2.0 - bundle - capi-appfw-application -) -FOREACH (flag ${pkgs_lock_daemon_CFLAGS}) - SET(EXTRA_CFLAGS "${EXTRA_CFLAGS} ${flag}") -ENDFOREACH(flag) - -ADD_DEFINITIONS("-D_GNU_SOURCE") -ADD_DEFINITIONS(${EXTRA_CFLAGS}) -ADD_LIBRARY(${PROJECT_NAME} SHARED - src/lock-daemon.c - src/lockd-debug.c - src/lockd-process-mgr.c - src/lockd-window-mgr.c -) -INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/include) -INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/include) - -TARGET_LINK_LIBRARIES(${PROJECT_NAME} ${pkgs_lock_daemon_LDFLAGS}) -INSTALL(TARGETS ${PROJECT_NAME} DESTINATION lib) - -# End of a file diff --git a/lock-mgr/include/lock-daemon.h b/lock-mgr/include/lock-daemon.h deleted file mode 100755 index 5fe3b93..0000000 --- a/lock-mgr/include/lock-daemon.h +++ /dev/null @@ -1,22 +0,0 @@ -/* - * Copyright 2012 Samsung Electronics Co., Ltd - * - * Licensed under the Flora License, Version 1.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.tizenopensource.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(); - -#endif /* __LOCK_DAEMON_H__ */ diff --git a/lock-mgr/include/lockd-process-mgr.h b/lock-mgr/include/lockd-process-mgr.h deleted file mode 100755 index e15d817..0000000 --- a/lock-mgr/include/lockd-process-mgr.h +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Copyright 2012 Samsung Electronics Co., Ltd - * - * Licensed under the Flora License, Version 1.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.tizenopensource.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 lockd_process_mgr_restart_lock(void); - -void lockd_process_mgr_terminate_lock_app(int lock_app_pid, - int state); - -int lockd_process_mgr_check_lock(int pid); - -#endif /* __LOCKD_PROCESS_MGR_H__ */ diff --git a/lock-mgr/include/lockd-window-mgr.h b/lock-mgr/include/lockd-window-mgr.h deleted file mode 100755 index 5bf8a5b..0000000 --- a/lock-mgr/include/lockd-window-mgr.h +++ /dev/null @@ -1,39 +0,0 @@ -/* - * Copyright 2012 Samsung Electronics Co., Ltd - * - * Licensed under the Flora License, Version 1.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.tizenopensource.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; - -void -lockd_window_set_window_property(lockw_data * data, int lock_app_pid, - void *event); - -void -lockd_window_set_window_effect(lockw_data * data, int lock_app_pid, - void *event); - -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 /* __LOCKD_WINDOW_MGR_H__ */ diff --git a/lock-mgr/src/lock-daemon.c b/lock-mgr/src/lock-daemon.c deleted file mode 100755 index 7dba048..0000000 --- a/lock-mgr/src/lock-daemon.c +++ /dev/null @@ -1,272 +0,0 @@ -/* - * Copyright 2012 Samsung Electronics Co., Ltd - * - * Licensed under the Flora License, Version 1.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.tizenopensource.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 "lockd-debug.h" -#include "lock-daemon.h" -#include "lockd-process-mgr.h" -#include "lockd-window-mgr.h" - -struct lockd_data { - int lock_app_pid; - lockw_data *lockw; -}; - -#define LAUNCH_INTERVAL 100*1000 - -static void lockd_launch_lockscreen(struct lockd_data *lockd); -static void lockd_launch_app_lockscreen(struct lockd_data *lockd); - -static void lockd_unlock_lockscreen(struct lockd_data *lockd); - -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_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 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); - } - 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 EINA_TRUE; - } - LOCKD_DBG("%s, %d", __func__, __LINE__); - lockd_window_set_window_effect(lockd->lockw, lockd->lock_app_pid, - event); - lockd_window_set_window_property(lockd->lockw, lockd->lock_app_pid, - event); - return EINA_FALSE; -} - -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__); - lockd_window_set_window_property(lockd->lockw, lockd->lock_app_pid, - event); - - return EINA_FALSE; -} - -static void lockd_launch_app_lockscreen(struct lockd_data *lockd) -{ - LOCKD_DBG("launch app lock screen"); - - int call_state = -1, phlock_state = -1; - int r = 0; - - 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(); - 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; - } - } - - 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; - } - - lockd->lock_app_pid = - lockd_process_mgr_start_lock(lockd, lockd_app_dead_cb); - if (lockd->lock_app_pid < 0) - return; - - vconf_set_int(VCONFKEY_IDLE_LOCK_STATE, VCONFKEY_IDLE_LOCK); - lockd_window_mgr_ready_lock(lockd, lockd->lockw, lockd_app_create_cb, - lockd_app_show_cb); -} - -static void lockd_launch_lockscreen(struct lockd_data *lockd) -{ - LOCKD_DBG("launch lock screen"); - - int call_state = -1; - int r = 0; - - 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(); - if (r < 0) { - LOCKD_DBG("Restarting Lock Screen App is fail [%d].", r); - } else { - LOCKD_DBG("Restarting Lock Screen App, pid[%d].", r); - return; - } - } - - 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; - } - - lockd_window_mgr_ready_lock(lockd, lockd->lockw, lockd_app_create_cb, - lockd_app_show_cb); - - lockd->lock_app_pid = - lockd_process_mgr_start_lock(lockd, lockd_app_dead_cb); - - vconf_set_int(VCONFKEY_IDLE_LOCK_STATE, VCONFKEY_IDLE_LOCK); -} - -static void lockd_unlock_lockscreen(struct lockd_data *lockd) -{ - LOCKD_DBG("unlock lock screen"); - lockd->lock_app_pid = 0; - - lockd_window_mgr_finish_lock(lockd->lockw); - - vconf_set_int(VCONFKEY_IDLE_LOCK_STATE, VCONFKEY_IDLE_UNLOCK); -} - -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_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); - - lockd->lockw = lockd_window_init(); - - LOCKD_DBG("%s, %d", __func__, __LINE__); -} - -int start_lock_daemon() -{ - struct lockd_data *lockd = NULL; - int val = -1; - - 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); - - return 0; -} diff --git a/lock-mgr/src/lockd-process-mgr.c b/lock-mgr/src/lockd-process-mgr.c deleted file mode 100755 index 179fced..0000000 --- a/lock-mgr/src/lockd-process-mgr.c +++ /dev/null @@ -1,146 +0,0 @@ -/* - * Copyright 2012 Samsung Electronics Co., Ltd - * - * Licensed under the Flora License, Version 1.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.tizenopensource.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.draglock" -#define LOCKD_DEFAULT_LOCKSCREEN "org.tizen.draglock" -#define RETRY_MAXCOUNT 30 -#define RELAUNCH_INTERVAL 100*1000 - -static char *_lockd_process_mgr_get_pkgname(void) -{ - char *pkgname = NULL; - - pkgname = vconf_get_str(VCONF_PRIVATE_LOCKSCREEN_PKGNAME); - - LOCKD_DBG("pkg name is %s", pkgname); - - if (pkgname == NULL) { - return LOCKD_DEFAULT_PKG_NAME; - } - - return pkgname; -} - -int lockd_process_mgr_restart_lock(void) -{ - char *lock_app_path = NULL; - int pid; - bundle *b = NULL; - - lock_app_path = _lockd_process_mgr_get_pkgname(); - - b = bundle_create(); - - bundle_add(b, "mode", "normal"); - - pid = aul_launch_app(lock_app_path, b); - - LOCKD_DBG("Reset : aul_launch_app(%s, NULL), pid = %d", lock_app_path, - pid); - - if (b) - bundle_free(b); - - return pid; -} - -int -lockd_process_mgr_start_lock(void *data, int (*dead_cb) (int, void *)) -{ - char *lock_app_path = NULL; - int pid; - bundle *b = NULL; - - lock_app_path = _lockd_process_mgr_get_pkgname(); - - b = bundle_create(); - - bundle_add(b, "mode", "normal"); - - int i; - for (i=0; i0) { - aul_listen_app_dead_signal(dead_cb, data); - if (b) - bundle_free(b); - return pid; - } - } else { - /* set listen and dead signal */ - aul_listen_app_dead_signal(dead_cb, data); - if (b) - bundle_free(b); - return pid; - } - } - LOCKD_DBG("Relaunch lock application failed..!!"); - 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); - } - } -} - -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/lock-mgr/src/lockd-window-mgr.c b/lock-mgr/src/lockd-window-mgr.c deleted file mode 100755 index cdf5e74..0000000 --- a/lock-mgr/src/lockd-window-mgr.c +++ /dev/null @@ -1,270 +0,0 @@ -/* - * Copyright 2012 Samsung Electronics Co., Ltd - * - * Licensed under the Flora License, Version 1.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.tizenopensource.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 "lockd-debug.h" -#include "lockd-window-mgr.h" - -#define PACKAGE "starter" - -struct _lockw_data { - Ecore_X_Window input_x_window; - - 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; - -}; - -static Eina_Bool _lockd_window_key_down_cb(void *data, int type, void *event) -{ - LOCKD_DBG("Key Down CB."); - - return ECORE_CALLBACK_PASS_ON; -} - -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; -} - -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; - -} - -void -lockd_window_set_window_property(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; - - if (!lockw) { - return; - } - LOCKD_DBG("%s, %d", __func__, __LINE__); - - user_window = get_user_created_window((Window) (e->win)); - - ecore_x_netwm_pid_get(user_window, &pid); - - 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); - } - } -} - -void -lockd_window_set_window_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; - - user_window = get_user_created_window((Window) (e->win)); - ecore_x_netwm_pid_get(user_window, &pid); - - 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); - - utilx_set_window_effect_state(ecore_x_display_get(), - user_window, 0); - } - } -} - -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 *)) -{ - Ecore_X_Window xwin; - - if (lockw == NULL) { - LOCKD_ERR("lockw is NULL."); - return; - } - - 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); - - xwin = lockw->input_x_window; - utilx_grab_key(ecore_x_display_get(), xwin, KEY_SELECT, EXCLUSIVE_GRAB); - - lockw->h_keydown = - ecore_event_handler_add(ECORE_EVENT_KEY_DOWN, - _lockd_window_key_down_cb, NULL); -} - -void lockd_window_mgr_finish_lock(lockw_data * lockw) -{ - 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; - } - - xwin = lockw->input_x_window; - utilx_ungrab_key(ecore_x_display_get(), xwin, KEY_SELECT); - - if (lockw->h_keydown != NULL) { - ecore_event_handler_del(lockw->h_keydown); - lockw->h_keydown = NULL; - } -} - -lockw_data *lockd_window_init(void) -{ - lockw_data *lockw = NULL; - Ecore_X_Window input_x_window; - Ecore_X_Window root_window; - long pid; - - lockw = (lockw_data *) malloc(sizeof(lockw_data)); - memset(lockw, 0x0, sizeof(lockw_data)); - - pid = getpid(); - - input_x_window = ecore_x_window_input_new(0, 0, 0, 1, 1); - ecore_x_icccm_title_set(input_x_window, "lock-daemon-input-window"); - ecore_x_netwm_name_set(input_x_window, "lock-daemon-input-window"); - ecore_x_netwm_pid_set(input_x_window, pid); - LOCKD_DBG("Created input window : %p", input_x_window); - lockw->input_x_window = input_x_window; - - root_window = ecore_x_window_root_first_get(); - ecore_x_window_client_sniff(root_window); - - return lockw; -} diff --git a/lock-setting/CMakeLists.txt b/lock-setting/CMakeLists.txt new file mode 100755 index 0000000..f754bda --- /dev/null +++ b/lock-setting/CMakeLists.txt @@ -0,0 +1,10 @@ +CMAKE_MINIMUM_REQUIRED(VERSION 2.6) +PROJECT(lock-setting C) + +ADD_SUBDIRECTORY(lockapp-setting) +ADD_SUBDIRECTORY(lockscreen-options) + +# i18n +ADD_SUBDIRECTORY(po) + +# End of a file diff --git a/lock-setting/lockapp-setting/CMakeLists.txt b/lock-setting/lockapp-setting/CMakeLists.txt new file mode 100755 index 0000000..002b0bd --- /dev/null +++ b/lock-setting/lockapp-setting/CMakeLists.txt @@ -0,0 +1,39 @@ +CMAKE_MINIMUM_REQUIRED(VERSION 2.6) +PROJECT(ug-openlock-setting C) + +SET(PREFIX ${CMAKE_INSTALL_PREFIX}) +SET(EXEC_PREFIX "\${prefix}") +SET(LIBDIR "\${prefix}/lib") +SET(INCLUDEDIR "\${prefix}/include") +SET(VERSION 0.1.0) + +SET(SRCS + ./src/openlock-setting.c + ./src/openlock-setting-util.c + ./src/openlock-setting-main.c + ./src/openlock-setting-pw.c +) + +INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/include) +INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/include) + +INCLUDE(FindPkgConfig) +pkg_check_modules(pkgs_lock_settings REQUIRED appcore-efl aul elementary ui-gadget-1 evas ail capi-appfw-application) + +FOREACH(flag ${pkgs_lock_settings_CFLAGS}) + SET(EXTRA_CXXFLAGS "${EXTRA_CXXFLAGS} ${flag}") +ENDFOREACH(flag) + +SET(EXTRA_CXXFLAGS "${EXTRA_CXXFLAGS} -fvisibility=hidden -Wall") +SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${EXTRA_CXXFLAGS}") +SET(CMAKE_C_FLAGS ${CMAKE_CXX_FLAGS}) + +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_settings_LDFLAGS}) + +INSTALL(TARGETS ${PROJECT_NAME} DESTINATION /usr/ug/lib) +#INSTALL(TARGETS "${CMAKE_CURRENT_SOURCE_DIR}/00_winset_control_top_arrow.png" DESTINATION /opt/ug/res/images/ug-openlock-setting) + diff --git a/lock-setting/lockapp-setting/include/openlock-setting-debug.h b/lock-setting/lockapp-setting/include/openlock-setting-debug.h new file mode 100755 index 0000000..8855a1b --- /dev/null +++ b/lock-setting/lockapp-setting/include/openlock-setting-debug.h @@ -0,0 +1,48 @@ + /* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.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.tizenopensource.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 __OPENLOCK_SETTING_DEBUG_H__ +#define __OPENLOCK_SETTING_DEBUG_H__ + +#include + +#define OPENLOCK_USING_PLATFORM_DEBUG + +#ifdef OPENLOCK_USING_PLATFORM_DEBUG +#ifndef LOG_TAG +#define LOG_TAG "openlock-setting" +#endif +#include + +#define OPENLOCKS_DBG(fmt, args...) LOGD("["LOG_TAG"%s:%d:E] "fmt, __FILE__, __LINE__, ##args) +#define OPENLOCKS_WARN(fmt, args...) LOGW("["LOG_TAG"%s:%d:E] "fmt, __FILE__, __LINE__, ##args) +#define OPENLOCKS_ERR(fmt, args...) LOGE("["LOG_TAG"%s:%d:E] "fmt, __FILE__, __LINE__, ##args) +#else +#define OPENLOCKS_DBG(fmt, args...) do{printf("[OPENLOCKS_DBG][%s(%d)] "fmt " \n", __FILE__, __LINE__, ##args);}while(0); +#define OPENLOCKS_WARN(fmt, args...) do{printf("[OPENLOCKS_WARN][%s(%d)] "fmt " \n", __FILE__, __LINE__, ##args);}while(0); +#define OPENLOCKS_ERR(fmt, args...) do{printf("[OPENLOCKS_ERR][%s(%d)] "fmt " \n", __FILE__, __LINE__, ##args);}while(0); +#endif /* LOCKD_USING_PLATFORM_DEBUG */ + +#ifndef TRUE +#define TRUE 1 +#endif +#ifndef FALSE +#define FALSE 0 +#endif + +#endif /* __OPENLOCK_SETTING_DEBUG_H__ */ diff --git a/lock-setting/lockapp-setting/include/openlock-setting-main.h b/lock-setting/lockapp-setting/include/openlock-setting-main.h new file mode 100755 index 0000000..5155f0a --- /dev/null +++ b/lock-setting/lockapp-setting/include/openlock-setting-main.h @@ -0,0 +1,48 @@ + /* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.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.tizenopensource.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 __OPENLOCK_SETTING_MAIN_H__ +#define __OPENLOCK_SETTING_MAIN_H__ + +#include +#include "openlock-setting.h" + +typedef struct _openlock_setting_appdata openlock_setting_appdata; + +struct _openlock_setting_appdata { + openlock_setting_appdata *prev; + openlock_setting_appdata *next; + + char *pkg_name; + char *app_name; + int index; + + Evas_Object *radio; + Evas_Object *entry; + Evas_Object *editfield_layout; + Evas_Object *popup; + /* for pw */ + Evas_Object *ly; + Evas_Object *genlist; + int count; + openlock_ug_data *openlock_data; +}; + +void openlock_setting_main_create_view(openlock_ug_data * openlock_data); + +#endif /* __OPENLOCK_SETTING_MAIN_H__ */ diff --git a/lock-setting/lockapp-setting/include/openlock-setting-pw.h b/lock-setting/lockapp-setting/include/openlock-setting-pw.h new file mode 100755 index 0000000..c1dfd1d --- /dev/null +++ b/lock-setting/lockapp-setting/include/openlock-setting-pw.h @@ -0,0 +1,30 @@ + /* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.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.tizenopensource.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 __OPENLOCK_SETTING_PW_H__ +#define __OPENLOCK_SETTING_PW_H__ + +#include + +#include "openlock-setting-main.h" + +void +openlock_setting_pw_create_view(openlock_setting_appdata * + openlock_setting_data); + +#endif /* __OPENLOCK_SETTING_PW_H__ */ diff --git a/lock-setting/lockapp-setting/include/openlock-setting-util.h b/lock-setting/lockapp-setting/include/openlock-setting-util.h new file mode 100755 index 0000000..e95a66d --- /dev/null +++ b/lock-setting/lockapp-setting/include/openlock-setting-util.h @@ -0,0 +1,28 @@ + /* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.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.tizenopensource.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 __OPENLOCK_SETTING_UTIL_H__ +#define __OPENLOCK_SETTING_UTIL_H__ + +#include + +Evas_Object *openlock_setting_util_create_navigation(Evas_Object * parent); + +Evas_Object *openlock_setting_util_create_layout(Evas_Object * parent); + +#endif /* __OPENLOCK_SETTING_UTIL_H__ */ diff --git a/lock-setting/lockapp-setting/include/openlock-setting.h b/lock-setting/lockapp-setting/include/openlock-setting.h new file mode 100755 index 0000000..4adb642 --- /dev/null +++ b/lock-setting/lockapp-setting/include/openlock-setting.h @@ -0,0 +1,40 @@ + /* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.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.tizenopensource.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 __openlock_setting_H__ +#define __openlock_setting_H__ + +#include +#include +#include + +#define PKGNAME "ug-openlock-setting" + +#define _EDJ(o) elm_layout_edje_get(o) +#define dgettext_noop(s) (s) + +typedef struct _openlock_ug_data { + Evas_Object *win_main; + Evas_Object *base; + ui_gadget_h ug; + + Evas_Object *navi_bar; + ; +} openlock_ug_data; + +#endif /* __openlock_setting_H__ */ diff --git a/lock-setting/lockapp-setting/src/openlock-setting-main.c b/lock-setting/lockapp-setting/src/openlock-setting-main.c new file mode 100755 index 0000000..03cbce3 --- /dev/null +++ b/lock-setting/lockapp-setting/src/openlock-setting-main.c @@ -0,0 +1,342 @@ + /* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.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.tizenopensource.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 "openlock-setting.h" +#include "openlock-setting-pw.h" +#include "openlock-setting-debug.h" +#include "openlock-setting-main.h" +#include "starter-vconf.h" + +#define OPENLOCK_DESKTOP_VALUE_LOCKSCREEN "lock-screen" + +static Elm_Gen_Item_Class itc; +static Evas_Object *radio_group = NULL; + +static void _openlock_setting_main_back_cb(void *data, Evas_Object * obj, + void *event_info) +{ + openlock_ug_data *openlock_data = (openlock_ug_data *) data; + + if (openlock_data == NULL) + return; + + ug_destroy_me(openlock_data->ug); +} + +static void +_openlock_setting_main_button_clicked_cb(void *data, Evas_Object * obj, + void *event_info) +{ + if (data == NULL) + return; + + openlock_setting_appdata *lockapp_data = + (openlock_setting_appdata *) data; + + OPENLOCKS_DBG("edit button pressed : %s", lockapp_data->pkg_name); + + bundle *b = NULL; + + b = bundle_create(); + + bundle_add(b, "mode", "edit"); + aul_launch_app(lockapp_data->pkg_name, b); + + if (b) + bundle_free(b); +} + +static Evas_Object *_openlock_setting_main_gl_icon_get(void *data, + Evas_Object * obj, + const char *part) +{ + if (data == NULL || part == NULL) + return NULL; + + openlock_setting_appdata *lockapp_data = + (openlock_setting_appdata *) data; + Evas_Object *radio = NULL; + Evas_Object *button = NULL; + char *cur_pkg_name = NULL; + char editable_key[512] = { 0, }; + int val = 0; + + OPENLOCKS_DBG("part : %s", part); + + if (!strcmp(part, "elm.icon.1")) { + radio = elm_radio_add(obj); + elm_radio_state_value_set(radio, lockapp_data->index); + + if (lockapp_data->index != 0) { + elm_radio_group_add(radio, radio_group); + } else { + radio_group = radio; + } + + lockapp_data->radio = radio; + + cur_pkg_name = vconf_get_str(VCONF_PRIVATE_LOCKSCREEN_PKGNAME); + OPENLOCKS_DBG("cur pkg : %s, this pkg : %s", cur_pkg_name, + lockapp_data->pkg_name); + if (cur_pkg_name == NULL) { + return NULL; + } + if (!strcmp(cur_pkg_name, lockapp_data->pkg_name)) { + elm_radio_value_set(radio_group, lockapp_data->index); + } + + return radio; + } else if (!strcmp(part, "elm.icon.2")) { + snprintf(editable_key, sizeof(editable_key), + "db/openlockscreen/%s/editable", + lockapp_data->app_name); + int ret = vconf_get_bool(editable_key, &val); + if (ret == 0 && val == 1) { + OPENLOCKS_DBG("app %s have a editable mode!", + lockapp_data->app_name); + button = elm_button_add(obj); + elm_object_style_set(button, "text_only/sweep"); + elm_object_text_set(button, "edit"); + evas_object_smart_callback_add(button, "clicked", + _openlock_setting_main_button_clicked_cb, + lockapp_data); + + return button; + } + } + + return NULL; +} + +static char *_openlock_setting_main_gl_label_get(void *data, Evas_Object * obj, + const char *part) +{ + if (data == NULL || part == NULL) + return NULL; + + openlock_setting_appdata *lockapp_data = + (openlock_setting_appdata *) data; + + if (lockapp_data->app_name && !strcmp(part, "elm.text")) { + return strdup(lockapp_data->app_name); + } + + return NULL; +} + +static void _openlock_setting_main_gl_del(void *data, Evas_Object * obj) +{ + if (data == NULL) + return; + + openlock_setting_appdata *lockapp_data = + (openlock_setting_appdata *) data; + + if (lockapp_data->pkg_name) + free(lockapp_data->pkg_name); + + if (lockapp_data->app_name) + free(lockapp_data->app_name); + + free(lockapp_data); +} + +static void +_openlock_setting_main_gl_sel(void *data, Evas_Object * obj, void *event_info) +{ + char *cur_pkg_name = NULL; + elm_genlist_item_selected_set((Elm_Object_Item *) event_info, + EINA_FALSE); + + if (data == NULL) + return; + + openlock_setting_appdata *lockapp_data = + (openlock_setting_appdata *) data; + + (lockapp_data->count)++; + OPENLOCKS_DBG("lockapp_data->count = %d\n", lockapp_data->count); + + if ((lockapp_data->count) > 1) { + lockapp_data->count = 0; + return; + } + + OPENLOCKS_DBG("lockapp_data->pkg_name = %s\n", lockapp_data->pkg_name); + + if (lockapp_data != NULL && lockapp_data->pkg_name != NULL) { + int ret = 0; + elm_radio_value_set(radio_group, lockapp_data->index); + ret = vconf_set_str(VCONF_PRIVATE_LOCKSCREEN_PKGNAME, + lockapp_data->pkg_name); + if(ret != 0) + { + OPENLOCKS_ERR("Failed to get vconf : VCONF_PRIVATE_LOCKSCREEN_PKGNAME\n"); + } + lockapp_data->count = 0; /* reset the count */ + } +} + + +ail_cb_ret_e _openlock_setting_main_appinfo_cb(const ail_appinfo_h appinfo, + void *user_data) +{ + openlock_setting_appdata *lockapp_data = + (openlock_setting_appdata *) user_data; + openlock_setting_appdata *new_lockapp_data = NULL; + char *pkgname = NULL; + char *appname = NULL; + + ail_appinfo_get_str(appinfo, AIL_PROP_PACKAGE_STR, &pkgname); + ail_appinfo_get_str(appinfo, AIL_PROP_NAME_STR, &appname); + + /* Get tail of the list */ + while (lockapp_data->next != NULL) { + lockapp_data = lockapp_data->next; + } + + if (lockapp_data->index == 0 && lockapp_data->pkg_name == NULL) { + /* first data */ + lockapp_data->pkg_name = strdup(pkgname); + lockapp_data->app_name = strdup(appname); + OPENLOCKS_DBG("appinfo %d) %s, %s", lockapp_data->index, + lockapp_data->pkg_name, lockapp_data->app_name); + } else { + /* create new data */ + new_lockapp_data = (openlock_setting_appdata *) + malloc(sizeof(openlock_setting_appdata)); + memset(new_lockapp_data, 0, sizeof(openlock_setting_appdata)); + new_lockapp_data->pkg_name = strdup(pkgname); + new_lockapp_data->app_name = strdup(appname); + new_lockapp_data->index = lockapp_data->index + 1; + new_lockapp_data->openlock_data = lockapp_data->openlock_data; + + new_lockapp_data->next = NULL; + new_lockapp_data->prev = lockapp_data; + + lockapp_data->next = new_lockapp_data; + + OPENLOCKS_DBG("appinfo %d) %s, %s", new_lockapp_data->index, + new_lockapp_data->pkg_name, + new_lockapp_data->app_name); + } + + return AIL_CB_RET_CONTINUE; +} + +void openlock_setting_main_create_view(openlock_ug_data * openlock_data) +{ + OPENLOCKS_DBG("openlock_setting_main_create_view begin\n"); + Evas_Object *navi_bar = openlock_data->navi_bar; + Evas_Object *back_button = NULL; + Evas_Object *genlist = NULL; + Elm_Object_Item *item = NULL; + int i = 0, count = 0; + openlock_setting_appdata *lockapp_data = NULL; + openlock_setting_appdata *head_lockapp_data = NULL; + + if (navi_bar == NULL) { + OPENLOCKS_WARN("navi_bar is null."); + return; + } + + /* Get app info */ + ail_filter_h filter; + ail_error_e ret; + + ret = ail_filter_new(&filter); + if (ret != AIL_ERROR_OK) { + OPENLOCKS_WARN("Fail ail_filter_new : %d", ret); + return; + } + + ret = + ail_filter_add_str(filter, AIL_PROP_CATEGORIES_STR, + OPENLOCK_DESKTOP_VALUE_LOCKSCREEN); + ret = ail_filter_count_appinfo(filter, &count); + + lockapp_data = (openlock_setting_appdata *) + malloc(sizeof(openlock_setting_appdata)); + memset(lockapp_data, 0, sizeof(openlock_setting_appdata)); + lockapp_data->prev = NULL; + lockapp_data->next = NULL; + lockapp_data->pkg_name = NULL; + lockapp_data->app_name = NULL; + lockapp_data->index = 0; + lockapp_data->openlock_data = openlock_data; + ail_filter_list_appinfo_foreach(filter, + _openlock_setting_main_appinfo_cb, + lockapp_data); + + ail_filter_destroy(filter); + + OPENLOCKS_DBG("lock app count : %d", count); + + if (count > 0) { + /* Create genlist */ + genlist = elm_genlist_add(navi_bar); + + itc.item_style = "dialogue/1text.2icon"; + itc.func.text_get = _openlock_setting_main_gl_label_get; + itc.func.content_get = _openlock_setting_main_gl_icon_get; + itc.func.state_get = NULL; + itc.func.del = _openlock_setting_main_gl_del; + + head_lockapp_data = lockapp_data; + + for (i = 0; i < count; i++) { + /* Find index */ + lockapp_data = head_lockapp_data; + + while (lockapp_data != NULL) { + if (lockapp_data->index == i) { + /* find */ + OPENLOCKS_DBG("%d) [%s][%s]", + lockapp_data->index, + lockapp_data->pkg_name, + lockapp_data->app_name); + elm_genlist_item_append(genlist, + &itc, + lockapp_data, + NULL, + ELM_GENLIST_ITEM_NONE, + _openlock_setting_main_gl_sel, + lockapp_data); + break; + } + lockapp_data = lockapp_data->next; + } + } + } + + /* Set navigation objects and push */ + 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", + _openlock_setting_main_back_cb, + openlock_data); + + elm_naviframe_item_push(navi_bar, "Downloaded lock screens", back_button, NULL, genlist, NULL); /* the same tile */ +} diff --git a/lock-setting/lockapp-setting/src/openlock-setting-pw.c b/lock-setting/lockapp-setting/src/openlock-setting-pw.c new file mode 100755 index 0000000..cec2763 --- /dev/null +++ b/lock-setting/lockapp-setting/src/openlock-setting-pw.c @@ -0,0 +1,522 @@ + /* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.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.tizenopensource.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 "openlock-setting-pw.h" +#include "openlock-setting-debug.h" +#include "starter-vconf.h" + +static Evas_Object *done_button = NULL; +static Elm_Gen_Item_Class itc_label, itc_entry; +static Evas_Object *_openlock_setting_pw_editfield_create(Evas_Object * parent, + void *data); +static Evas_Object *_openlock_setting_pw_editfield_entry_get(Evas_Object * + parent); + +static Evas_Object *_openlock_setting_pw_create_conformant(Evas_Object * parent) +{ + Evas_Object *conform = NULL; + elm_win_conformant_set(parent, 1); + conform = elm_conformant_add(parent); + elm_object_style_set(conform, "internal_layout"); + evas_object_show(conform); + + return conform; +} + +static void _openlock_setting_pw_done_button_changed(void *data, + Evas_Object * obj, void *e) +{ + openlock_setting_appdata *openlock_setting_data = + (openlock_setting_appdata *) data; + + if (!openlock_setting_data) { + return; + } + int length = strlen(elm_entry_entry_get(obj)); + + if (length == 0) { + elm_object_disabled_set(done_button, EINA_TRUE); + } else { + elm_object_disabled_set(done_button, EINA_FALSE); + } + + if (elm_object_focus_get(obj)) { + if (elm_entry_is_empty(obj)) { + elm_object_signal_emit + (openlock_setting_data->editfield_layout, + "elm,state,eraser,hide", "elm"); + } else { + elm_object_signal_emit + (openlock_setting_data->editfield_layout, + "elm,state,eraser,show", "elm"); + } + } +} + +static void _openlock_setting_pw_focused_cb(void *data, Evas_Object * obj, + void *event_info) +{ + if (!elm_entry_is_empty(obj)) { + elm_object_signal_emit(data, "elm,state,eraser,show", "elm"); + } + elm_object_signal_emit(data, "elm,state,guidetext,hide", "elm"); +} + +static void _openlock_setting_pw_unfocused_cb(void *data, Evas_Object * obj, + void *event_info) +{ + if (elm_entry_is_empty(obj)) { + elm_object_signal_emit(data, "elm,state,guidetext,show", "elm"); + } + elm_object_signal_emit(data, "elm,state,eraser,hide", "elm"); +} + +static void _openlock_setting_pw_eraser_clicked_cb(void *data, + Evas_Object * obj, + const char *emission, + const char *source) +{ + elm_entry_entry_set(data, ""); +} + +static Evas_Object *_openlock_setting_pw_editfield_create(Evas_Object * parent, + void *data) +{ + Evas_Object *layout = NULL; + Evas_Object *entry = NULL; + openlock_setting_appdata *openlock_setting_data = + (openlock_setting_appdata *) data; + static Elm_Entry_Filter_Limit_Size limit_filter_data; + + limit_filter_data.max_char_count = 15; /* hard code for demo */ + limit_filter_data.max_byte_count = 0; + + layout = elm_layout_add(parent); + elm_layout_theme_set(layout, "layout", "editfield", "title"); + + entry = elm_entry_add(parent); + elm_entry_scrollable_set(entry, EINA_TRUE); + elm_entry_single_line_set(entry, EINA_TRUE); + elm_entry_password_set(entry, EINA_TRUE); + elm_entry_input_panel_layout_set(entry, + ELM_INPUT_PANEL_LAYOUT_NUMBERONLY); + elm_entry_markup_filter_append(entry, elm_entry_filter_limit_size, + &limit_filter_data); + elm_object_focus_set(entry, EINA_TRUE); + evas_object_show(entry); + evas_object_smart_callback_add(entry, "changed", + _openlock_setting_pw_done_button_changed, + openlock_setting_data); + evas_object_smart_callback_add(entry, "focused", + _openlock_setting_pw_focused_cb, layout); + evas_object_smart_callback_add(entry, "unfocused", + _openlock_setting_pw_unfocused_cb, + layout); + + elm_object_part_content_set(layout, "elm.swallow.content", entry); + elm_object_part_text_set(layout, "elm.guidetext", ""); + elm_object_signal_callback_add(layout, "elm,eraser,clicked", "elm", + _openlock_setting_pw_eraser_clicked_cb, + entry); + + Ecore_IMF_Context *imf_context = + (Ecore_IMF_Context *) elm_entry_imf_context_get(entry); + if (imf_context) { + ecore_imf_context_input_panel_show(imf_context); + } + elm_object_focus_set(entry, EINA_TRUE); + + return layout; +} + +static Evas_Object *_openlock_setting_pw_editfield_entry_get(Evas_Object * + parent) +{ + Evas_Object *entry = NULL; + + entry = elm_object_part_content_get(parent, "elm.swallow.content"); + + return entry; +} + +static char *_openlock_setting_pw_gl_label_get_title(void *data, + Evas_Object * obj, + const char *part) +{ + openlock_setting_appdata *openlock_setting_data = + (openlock_setting_appdata *) data; + char buf[50] = { 0, }; + + if (!openlock_setting_data || !part) { + return NULL; + } + + if (!strcmp(part, "elm.text")) { + snprintf(buf, sizeof(buf), "%s", "Enter Password"); /* hard code for demo */ + return strdup(buf); + } + return NULL; +} + +static Evas_Object *_openlock_setting_pw_gl_icon_get(void *data, + Evas_Object * obj, + const char *part) +{ + Evas_Object *layout = NULL; + openlock_setting_appdata *openlock_setting_data = + (openlock_setting_appdata *) data; + + if (!openlock_setting_data || !part) { + return NULL; + } + + if (!strcmp(part, "elm.icon")) { + layout = + _openlock_setting_pw_editfield_create(obj, + openlock_setting_data); + openlock_setting_data->editfield_layout = layout; + + return layout; + + } + return NULL; +} + +static void _openlock_setting_pw_list_set_styles() +{ + itc_label.item_style = "dialogue/title"; + itc_label.func.text_get = _openlock_setting_pw_gl_label_get_title; + itc_label.func.content_get = NULL; + itc_label.func.state_get = NULL; + itc_label.func.del = NULL; + + itc_entry.item_style = "dialogue/1icon"; + itc_entry.func.text_get = NULL; + itc_entry.func.content_get = _openlock_setting_pw_gl_icon_get; + itc_entry.func.state_get = NULL; + itc_entry.func.del = NULL; +} + +static void _openlock_setting_pw_back_cb(void *data, Evas_Object * obj, + void *event_info) +{ + openlock_setting_appdata *openlock_setting_data = + (openlock_setting_appdata *) data; + openlock_ug_data *openlock_data = NULL; + + if (!openlock_setting_data) { + return; + } + + openlock_data = openlock_setting_data->openlock_data; + if (!openlock_data) { + return; + } + OPENLOCKS_DBG("_openlock_setting_pw_back_cb\n"); + openlock_setting_data->count = 0; + + elm_naviframe_item_pop(openlock_data->navi_bar); + if (openlock_setting_data->editfield_layout) { + evas_object_del(openlock_setting_data->editfield_layout); + openlock_setting_data->editfield_layout = NULL; + } + if (openlock_setting_data->genlist) { + evas_object_del(openlock_setting_data->genlist); + openlock_setting_data->genlist = NULL; + } + if (openlock_setting_data->ly) { + evas_object_del(openlock_setting_data->ly); + openlock_setting_data->ly = NULL; + } +} + +static Eina_Bool _openlock_setting_pw_input_panel_show_idler(void *data) +{ + Evas_Object *entry = (Evas_Object *) data; + + OPENLOCKS_DBG("_openlock_setting_pw_input_panel_show_idler"); + + elm_object_focus_set(entry, EINA_TRUE); + + return ECORE_CALLBACK_CANCEL; +} + +static void _openlock_setting_pw_imf_context_input_panel_show(void *data) +{ + openlock_setting_appdata *openlock_setting_data = + (openlock_setting_appdata *) data; + Evas_Object *entry = NULL; + + if (!openlock_setting_data) { + return; + } + + OPENLOCKS_DBG("_openlock_setting_pw_imf_context_input_panel_show\n"); + + entry = _openlock_setting_pw_editfield_entry_get( + openlock_setting_data->editfield_layout); + evas_object_show(entry); + + ecore_idler_add(_openlock_setting_pw_input_panel_show_idler, entry); +} + +static void _openlock_setting_pw_imf_context_input_panel_hide(void *data) +{ + openlock_setting_appdata *openlock_setting_data = + (openlock_setting_appdata *) data; + Evas_Object *entry = NULL; + + if (!openlock_setting_data) { + return; + } + + OPENLOCKS_DBG("_openlock_setting_pw_imf_context_input_panel_hide\n"); + + entry = _openlock_setting_pw_editfield_entry_get( + openlock_setting_data->editfield_layout); + evas_object_hide(entry); + + elm_object_focus_set(entry, EINA_FALSE); +} + +static void _openlock_setting_pw_destroy_popup_cb(void *data, Evas_Object * obj, + void *e) +{ + openlock_setting_appdata *openlock_setting_data = + (openlock_setting_appdata *) data; + Evas_Object *popup = NULL; + + OPENLOCKS_DBG("_openlock_setting_pw_destroy_popup_cb\n"); + _openlock_setting_pw_imf_context_input_panel_show + (openlock_setting_data); + + if (!openlock_setting_data) { + return; + } + + popup = openlock_setting_data->popup; + if (popup) { + evas_object_del(popup); + popup = NULL; + } +} + +static void _openlock_setting_pw_show_popup(void *data, const char *mesg) +{ + openlock_setting_appdata *openlock_setting_data = + (openlock_setting_appdata *) data; + openlock_ug_data *openlock_data = NULL; + Evas_Object *popup = NULL; + + if (!openlock_setting_data) { + return; + } + openlock_data = openlock_setting_data->openlock_data; + if (!openlock_data) { + return; + } + + OPENLOCKS_DBG("_openlock_setting_pw_show_popup\n"); + + _openlock_setting_pw_imf_context_input_panel_hide + (openlock_setting_data); + popup = elm_popup_add(openlock_data->win_main); + openlock_setting_data->popup = popup; + evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, + EVAS_HINT_EXPAND); + elm_object_text_set(popup, mesg); + elm_popup_timeout_set(popup, 3); + evas_object_smart_callback_add(popup, "timeout", + _openlock_setting_pw_destroy_popup_cb, + openlock_setting_data); + evas_object_show(popup); +} + +static void _openlock_setting_pw_set_str(char **s, const char *str) +{ + if (s == NULL) + return; + + if (*s) + free(*s); + + if (str && str[0] != '\0') + *s = strdup(str); + else + *s = NULL; +} + +static void _openlock_setting_pw_done_cb(void *data, Evas_Object * obj, void *e) +{ + openlock_setting_appdata *openlock_setting_data = + (openlock_setting_appdata *) data; + openlock_ug_data *openlock_data = NULL; + Evas_Object *entry = NULL; + Evas_Object *editfield_layout = NULL; + char *str = NULL; + + if (!openlock_setting_data) { + return; + } + + OPENLOCKS_DBG("_openlock_setting_pw_done_cb\n"); + editfield_layout = openlock_setting_data->editfield_layout; + entry = + _openlock_setting_pw_editfield_entry_get + (openlock_setting_data->editfield_layout); + + _openlock_setting_pw_set_str(&str, elm_entry_entry_get(entry)); + OPENLOCKS_DBG("str = %s\n", str); + if (!str) { + _openlock_setting_pw_show_popup(openlock_setting_data, "Wrong Password!"); /* hard code for demo */ + if (entry) { + elm_object_part_text_set(editfield_layout, + "elm.guidetext", ""); + elm_entry_entry_set(entry, ""); + } + } else { + if (strcmp(str, "16777216") == 0) { /* hard code for demo */ + OPENLOCKS_DBG("right pw\n"); + OPENLOCKS_DBG("openlock_setting_data->index: %d", + openlock_setting_data->index); + if (openlock_setting_data != NULL + && openlock_setting_data->pkg_name != NULL) { + vconf_set_str(VCONF_PRIVATE_LOCKSCREEN_PKGNAME, + openlock_setting_data->pkg_name); + OPENLOCKS_DBG("vconf pkgname set : %s", + openlock_setting_data->pkg_name); + } + openlock_data = openlock_setting_data->openlock_data; + if (!openlock_data) { + return; + } + OPENLOCKS_DBG("_openlock_setting_pw_done_cb\n"); + openlock_setting_data->count = 0; /* reset the count */ + + elm_naviframe_item_pop(openlock_data->navi_bar); + if (openlock_setting_data->editfield_layout) { + evas_object_del + (openlock_setting_data->editfield_layout); + openlock_setting_data->editfield_layout = NULL; + } + if (openlock_setting_data->genlist) { + evas_object_del(openlock_setting_data->genlist); + openlock_setting_data->genlist = NULL; + } + if (openlock_setting_data->ly) { + evas_object_del(openlock_setting_data->ly); + openlock_setting_data->ly = NULL; + } + } else { + _openlock_setting_pw_show_popup(openlock_setting_data, "Wrong Password!"); /* hard code for demo */ + if (entry) { + elm_object_part_text_set(editfield_layout, + "elm.guidetext", ""); + elm_entry_entry_set(entry, ""); + } + } + } +} + +void +openlock_setting_pw_create_view(openlock_setting_appdata * + openlock_setting_data) +{ + Evas_Object *navi_bar = NULL; + Evas_Object *win_main = NULL; + Evas_Object *genlist = NULL; + Evas_Object *ly = NULL; + Evas_Object *cancel_button = NULL; + Evas_Object *back_button = NULL; + Elm_Object_Item *genlist_item = NULL; + Elm_Object_Item *navi_it = NULL; + openlock_ug_data *openlock_data = NULL; + + if (!openlock_setting_data) { + return; + } + + openlock_data = openlock_setting_data->openlock_data; + if (!openlock_data) { + return; + } + + OPENLOCKS_DBG("openlock_setting_pw_create_view begin\n"); + + win_main = openlock_data->win_main; + navi_bar = openlock_data->navi_bar; + + ly = _openlock_setting_pw_create_conformant(win_main); + openlock_setting_data->ly = ly; + + /* genlist */ + genlist = elm_genlist_add(navi_bar); + _openlock_setting_pw_list_set_styles(); + genlist_item = + elm_genlist_item_append(genlist, &itc_label, + (void *)openlock_setting_data, NULL, + ELM_GENLIST_ITEM_NONE, NULL, NULL); + elm_genlist_item_select_mode_set(genlist_item, EINA_TRUE); + + genlist_item = + elm_genlist_item_append(genlist, &itc_entry, + (void *)openlock_setting_data, NULL, + ELM_GENLIST_ITEM_NONE, NULL, NULL); + elm_genlist_item_select_mode_set(genlist_item, EINA_TRUE); + + evas_object_show(genlist); + elm_object_content_set(ly, genlist); + openlock_setting_data->genlist = genlist; + + /* Done button */ + done_button = elm_button_add(navi_bar); + elm_object_style_set(done_button, "naviframe/title/default"); + elm_object_text_set(done_button, "Done"); /* hard code for demo */ + elm_object_disabled_set(done_button, EINA_TRUE); + evas_object_smart_callback_add(done_button, "clicked", + _openlock_setting_pw_done_cb, + openlock_setting_data); + + /* Cancel button */ + cancel_button = elm_button_add(navi_bar); + elm_object_style_set(cancel_button, "naviframe/title/default"); + elm_object_text_set(cancel_button, "Cancel"); /* hard code for demo */ + elm_object_disabled_set(cancel_button, EINA_FALSE); + evas_object_smart_callback_add(cancel_button, "clicked", + _openlock_setting_pw_back_cb, openlock_setting_data); + + /* Set navigation objects and push */ + navi_it = elm_naviframe_item_push(navi_bar, "Enter Password", NULL, NULL, + ly, NULL); /* hard code for demo */ + elm_object_item_part_content_set(navi_it, "title_right_btn", done_button); + elm_object_item_part_content_set(navi_it, "title_left_btn", cancel_button); + + /* Remove <- button */ + back_button = elm_object_item_part_content_get(navi_it, "prev_btn"); + if (back_button != NULL) { + elm_object_item_part_content_set(navi_it, "prev_btn", NULL); + if (back_button != NULL) { + evas_object_del(back_button); + } + } +} diff --git a/lock-setting/lockapp-setting/src/openlock-setting-util.c b/lock-setting/lockapp-setting/src/openlock-setting-util.c new file mode 100755 index 0000000..3722b2b --- /dev/null +++ b/lock-setting/lockapp-setting/src/openlock-setting-util.c @@ -0,0 +1,65 @@ + /* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.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.tizenopensource.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 "openlock-setting-debug.h" +#include "openlock-setting-util.h" + +Evas_Object *openlock_setting_util_create_navigation(Evas_Object * parent) +{ + Evas_Object *navi_bar = NULL; + + if (parent == NULL) { + OPENLOCKS_WARN("Parent is null."); + return NULL; + } + + navi_bar = elm_naviframe_add(parent); + if (navi_bar == NULL) { + OPENLOCKS_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 *openlock_setting_util_create_layout(Evas_Object * parent) +{ + Evas_Object *layout = NULL; + + if (parent == NULL) { + OPENLOCKS_WARN("Parent is null."); + return NULL; + } + + layout = elm_layout_add(parent); + if (layout == NULL) { + OPENLOCKS_ERR("Cannot add layout."); + return NULL; + } + + evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, + EVAS_HINT_EXPAND); + + evas_object_show(layout); + + return layout; +} diff --git a/lock-setting/lockapp-setting/src/openlock-setting.c b/lock-setting/lockapp-setting/src/openlock-setting.c new file mode 100755 index 0000000..4b6184a --- /dev/null +++ b/lock-setting/lockapp-setting/src/openlock-setting.c @@ -0,0 +1,217 @@ + /* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.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.tizenopensource.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 "openlock-setting.h" +#include "openlock-setting-util.h" +#include "openlock-setting-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, + openlock_ug_data * openlock_data) +{ + Evas_Object *base = NULL; + Evas_Object *navi_bar = NULL; + Evas_Object *bg = NULL; + + base = openlock_setting_util_create_layout(parent); + + 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); + + bg = create_bg(base); + + navi_bar = openlock_setting_util_create_navigation(base); + openlock_data->navi_bar = navi_bar; + + openlock_setting_main_create_view(openlock_data); + + return base; +} + +static Evas_Object *create_frameview(Evas_Object * parent, + openlock_ug_data * openlock_data) +{ + Evas_Object *base = NULL; + + /* Create Frame view */ + + 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; + openlock_ug_data *openlock_data = NULL; + + if (!ug || !priv) + return NULL; + + bindtextdomain("openlock-setting", "/opt/ug/res/locale"); + + openlock_data = priv; + openlock_data->ug = ug; + + parent = ug_get_parent_layout(ug); + if (!parent) + return NULL; + + win_main = ug_get_window(); + if (!win_main) { + return NULL; + } + + openlock_data->win_main = win_main; + + if (mode == UG_MODE_FULLVIEW) + openlock_data->base = create_fullview(parent, openlock_data); + else + openlock_data->base = create_frameview(parent, openlock_data); + + /* Add del callback for base layout */ + + return openlock_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) +{ + openlock_ug_data *openlock_data; + + if (!ug || !priv) + return; + + openlock_data = priv; + evas_object_del(openlock_data->base); + openlock_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) +{ + openlock_ug_data *openlock_data; + + if (!ops) + return -1; + + openlock_data = calloc(1, sizeof(openlock_ug_data)); + if (!openlock_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 = openlock_data; + ops->opt = UG_OPT_INDICATOR_ENABLE; + + return 0; +} + +UG_MODULE_API void UG_MODULE_EXIT(struct ug_module_ops *ops) +{ + openlock_ug_data *openlock_data; + + if (!ops) + return; + + openlock_data = ops->priv; + if (openlock_data) + free(openlock_data); +} diff --git a/lock-setting/lockscreen-options/CMakeLists.txt b/lock-setting/lockscreen-options/CMakeLists.txt new file mode 100755 index 0000000..e4789c1 --- /dev/null +++ b/lock-setting/lockscreen-options/CMakeLists.txt @@ -0,0 +1,54 @@ +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 + ./src/lockscreen-options-shortcuts.c + ./src/lockscreen-options-shortcuts-edit.c + ./src/lockscreen-options-dualclock.c + ./src/lockscreen-options-locktitle.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_CXXFLAGS "${EXTRA_CXXFLAGS} ${flag}") +ENDFOREACH(flag) + +SET(EXTRA_CXXFLAGS "${EXTRA_CXXFLAGS} -fvisibility=hidden -Wall") +SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${EXTRA_CXXFLAGS}") +SET(CMAKE_C_FLAGS ${CMAKE_CXX_FLAGS}) + +ADD_DEFINITIONS("-DPREFIX=\"${CMAKE_INSTALL_PREFIX}\"") + +ADD_CUSTOM_TARGET(lockscreen-options.edj COMMAND edje_cc -id ${CMAKE_CURRENT_SOURCE_DIR}/res/images + ${CMAKE_CURRENT_SOURCE_DIR}/res/edje/lockscreen-options.edc + ${CMAKE_CURRENT_BINARY_DIR}/lockscreen-options.edj + DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/res/edje/lockscreen-options.edc +) + +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}) + +ADD_DEPENDENCIES(${PROJECT_NAME} lockscreen-options.edj) + +INSTALL(TARGETS ${PROJECT_NAME} DESTINATION ${LIBDIR}) +INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/lockscreen-options.edj DESTINATION ${EDJEDIR}/ug-lockscreen-options-efl) +INSTALL(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/res/images/ DESTINATION ${IMAGEDIR}/ug-lockscreen-options-efl) diff --git a/lock-setting/lockscreen-options/include/lockscreen-options-debug.h b/lock-setting/lockscreen-options/include/lockscreen-options-debug.h new file mode 100755 index 0000000..a25f85e --- /dev/null +++ b/lock-setting/lockscreen-options/include/lockscreen-options-debug.h @@ -0,0 +1,48 @@ + /* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.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.tizenopensource.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 /* LOCKD_USING_PLATFORM_DEBUG */ + +#ifndef TRUE +#define TRUE 1 +#endif +#ifndef FALSE +#define FALSE 0 +#endif + +#endif /* __OPENLOCK_SETTING_DEBUG_H__ */ diff --git a/lock-setting/lockscreen-options/include/lockscreen-options-dualclock.h b/lock-setting/lockscreen-options/include/lockscreen-options-dualclock.h new file mode 100755 index 0000000..84447f7 --- /dev/null +++ b/lock-setting/lockscreen-options/include/lockscreen-options-dualclock.h @@ -0,0 +1,28 @@ + /* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.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.tizenopensource.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_DUALCLOCK_H__ +#define __LOCKSCREEN_OPTIONS_DUALCLOCK_H__ + +#include +#include "lockscreen-options.h" + +void lockscreen_options_dualclock_create_view(lockscreen_options_ug_data * ug_data); + +#endif /* __OPENLOCK_SETTING_MAIN_H__ */ + diff --git a/lock-setting/lockscreen-options/include/lockscreen-options-locktitle.h b/lock-setting/lockscreen-options/include/lockscreen-options-locktitle.h new file mode 100755 index 0000000..28f1910 --- /dev/null +++ b/lock-setting/lockscreen-options/include/lockscreen-options-locktitle.h @@ -0,0 +1,26 @@ + /* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.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.tizenopensource.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_LOCKTITLE_H__ +#define __LOCKSCREEN_OPTIONS_LOCKTITLE_H__ + +#include "lockscreen-options.h" + +void lockscreen_options_locktitle_create_view(lockscreen_options_ug_data * ug_data); + +#endif /* __LOCKSCREEN_OPTIONS_LOCKTITLE_H__ */ diff --git a/lock-setting/lockscreen-options/include/lockscreen-options-main.h b/lock-setting/lockscreen-options/include/lockscreen-options-main.h new file mode 100755 index 0000000..a1c0c49 --- /dev/null +++ b/lock-setting/lockscreen-options/include/lockscreen-options-main.h @@ -0,0 +1,28 @@ + /* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.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.tizenopensource.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 /* __OPENLOCK_SETTING_MAIN_H__ */ diff --git a/lock-setting/lockscreen-options/include/lockscreen-options-shortcuts-edit.h b/lock-setting/lockscreen-options/include/lockscreen-options-shortcuts-edit.h new file mode 100755 index 0000000..497b8cc --- /dev/null +++ b/lock-setting/lockscreen-options/include/lockscreen-options-shortcuts-edit.h @@ -0,0 +1,25 @@ + /* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.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.tizenopensource.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_SHORTCUTS_EDIT_H__ +#define __LOCKSCREEN_OPTIONS_SHORTCUTS_EDIT_H__ + +void lockscreen_options_shortcuts_create_edit_view(void *data); + +#endif /* __LOCKSCREEN_OPTIONS_SHORTCUTS_EDIT_H__ */ + diff --git a/lock-setting/lockscreen-options/include/lockscreen-options-shortcuts.h b/lock-setting/lockscreen-options/include/lockscreen-options-shortcuts.h new file mode 100755 index 0000000..f7e6d22 --- /dev/null +++ b/lock-setting/lockscreen-options/include/lockscreen-options-shortcuts.h @@ -0,0 +1,26 @@ + /* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.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.tizenopensource.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_SHORTCUTS_H__ +#define __LOCKSCREEN_OPTIONS_SHORTCUTS_H__ + +void lockscreen_options_shortcuts_create_view(void *data); +void lockscreen_options_shortcuts_update_view(); +Eina_Bool lockscreen_options_shortcuts_check_items(); + +#endif /* __LOCKSCREEN_OPTIONS_SHORTCUTS_H__ */ diff --git a/lock-setting/lockscreen-options/include/lockscreen-options-util.h b/lock-setting/lockscreen-options/include/lockscreen-options-util.h new file mode 100755 index 0000000..0fb97bb --- /dev/null +++ b/lock-setting/lockscreen-options/include/lockscreen-options-util.h @@ -0,0 +1,72 @@ + /* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.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.tizenopensource.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 + +#define USE_TITLE_AND_CAMERA 0 + +enum { + IDS_COM_SK_OK = 0, + IDS_COM_SK_CANCEL, + IDS_LOCKSCREEN_OPTIONS_SYSTEM_STRING_MAX, +}; + +enum { + IDS_LOCKSCREEN_OPTIONS_SHORTCUTS = + IDS_LOCKSCREEN_OPTIONS_SYSTEM_STRING_MAX, + IDS_LOCKSCREEN_OPTIONS_SHORTCUTS_HELP, +#if USE_TITLE_AND_CAMERA + IDS_LOCKSCREEN_OPTIONS_LOCK_SCREEN_TITLE, + IDS_LOCKSCREEN_OPTIONS_LOCK_SCREEN_TITLE_HELP, +#endif + IDS_LOCKSCREEN_OPTIONS_EVENT_NOTIFICATIONS, + IDS_LOCKSCREEN_OPTIONS_EVENT_NOTIFICATIONS_HELP, + IDS_LOCKSCREEN_OPTIONS_CONTEXTAWARE_NOTI, + IDS_LOCKSCREEN_OPTIONS_CONTEXTAWARE_NOTI_HELP, +#if USE_TITLE_AND_CAMERA + IDS_LOCKSCREEN_OPTIONS_CAMERA_QUICK_ACCESS, + IDS_LOCKSCREEN_OPTIONS_CAMERA_QUICK_ACCESS_HELP, +#endif + IDS_LOCKSCREEN_OPTIONS_CLOCK, +// IDS_LOCKSCREEN_OPTIONS_DUAL_CLOCK, +// IDS_LOCKSCREEN_OPTIONS_DUAL_CLOCK_HELP, + IDS_LOCKSCREEN_OPTIONS_WEATHER, + IDS_LOCKSCREEN_OPTIONS_HELPTEXT, + IDS_LOCKSCREEN_OPTIONS_HELPTEXT_HELP, + IDS_LOCKSCREEN_OPTIONS_SET_SHORTCUTS, + IDS_LOCKSCREEN_OPTIONS_EDIT_SHORTCUTS, + IDS_LOCKSCREEN_OPTIONS_SET_SHORTCUTS_ON_LOCKSCREEN, + IDS_LOCKSCREEN_OPTIONS_TAP_SHORTCUTS, + IDS_LOCKSCREEN_OPTIONS_DRAG_DROP_SHORTCUTS, + IDS_LOCKSCREEN_OPTIONS_SELECT_APPLICATIONS, + IDS_LOCKSCREEN_OPTIONS_LOCK_SCREEN_TITLE_GUIDE_TEXT, + IDS_LOCKSCREEN_OPTIONS_APP_STRING_MAX, /* 45 */ +}; + +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 /* __OPENLOCK_SETTING_UTIL_H__ */ diff --git a/lock-setting/lockscreen-options/include/lockscreen-options.h b/lock-setting/lockscreen-options/include/lockscreen-options.h new file mode 100755 index 0000000..2820560 --- /dev/null +++ b/lock-setting/lockscreen-options/include/lockscreen-options.h @@ -0,0 +1,64 @@ + /* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.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.tizenopensource.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 /* __lockscreen_options_H__ */ diff --git a/lock-setting/lockscreen-options/res/edje/lockscreen-options-locktitle.edc b/lock-setting/lockscreen-options/res/edje/lockscreen-options-locktitle.edc new file mode 100755 index 0000000..eced5a4 --- /dev/null +++ b/lock-setting/lockscreen-options/res/edje/lockscreen-options-locktitle.edc @@ -0,0 +1,432 @@ + /* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.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.tizenopensource.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. + */ + + + +#define WIDTH 720 +#define HEIGHT 1280 +#define TOOLBAR_WIDTH 720 +#define TOOLBAR_HEIGHT 84 + +#define BUTTON_BG_NORMAL_OR_PRESS(part_name, rel1_x, rel1_y, rel2_x, rel2_y, normal_icon_name, press_icon_name)\ + part{\ + name: part_name;\ + type: IMAGE;\ + mouse_events: 1;\ + scale: 1;\ + description{\ + state: "default" 0.0;\ + visible: 1;\ + rel1 {relative: rel1_x rel1_y; to: "bg";}\ + rel2 {relative: rel2_x rel2_y; to: "bg";}\ + image.normal: normal_icon_name;\ + image.border: 8 8 0 0;\ + }\ + description{\ + state: "press" 0.0;\ + inherit: "default" 0.0;\ + image.normal: press_icon_name;\ + image.border: 8 8 0 0;\ + }\ + } + +#define BUTTON_NORMAL_OR_PRESS(part_name, normal_icon_name, press_icon_name, part_bg_name)\ + part{\ + name: part_name;\ + type: IMAGE;\ + scale: 1;\ + mouse_events: 1;\ + repeat_events: 1;\ + description{\ + state: "default" 0.0;\ + visible: 1;\ + rel1 {relative: 0.0 0.0; to: part_bg_name;}\ + rel2 {relative: 1.0 1.0; to: part_bg_name;}\ + image.normal: normal_icon_name;\ + }\ + description{\ + state: "press" 0.0;\ + inherit: "default" 0.0;\ + image.normal: press_icon_name;\ + }\ + } +#define TOOLBAR_BUTTON_PROGRAM_SIGNAL_EMIT_1(part_name, singal_name)\ + program{\ + name: "mouse_down_"part_name;\ + signal: "mouse,down,1";\ + source: part_name;\ + action: STATE_SET "press" 0.0;\ + target: part_name;\ + }\ + program{\ + name: "send_event_"part_name;\ + signal: "mouse,clicked,1";\ + source: part_name;\ + action: SIGNAL_EMIT singal_name "";\ + }\ + program{\ + name: "mouse_up_"part_name;\ + signal: "mouse,up,1";\ + source: part_name;\ + action: STATE_SET "default" 0.0;\ + target: part_name;\ + } +#define TOOLBAR_BUTTON_PROGRAM_SIGNAL_EMIT_2(part_name, singal_name)\ + program{\ + name: "send_event_"part_name;\ + signal: "mouse,clicked,1";\ + source: part_name;\ + action: SIGNAL_EMIT singal_name "";\ + } +#define COLOR_RECT(part_name, relative_part_name, color_class_name)\ + part{\ + name: part_name;\ + type: RECT;\ + scale: 1;\ + description{\ + state: "default" 0.0;\ + rel1 { relative: 9/56 40/60; to: relative_part_name;}\ + rel2 { relative: 49/56 50/60; to: relative_part_name;}\ + color_class: color_class_name;\ + }\ + } + +group{ + images{ + image: "B09_Add Text_sip_option_bg.png" COMP; + } + name: "lockscreen.options.locktitle.main"; + parts{ + part{ + name: "background"; + type: RECT; + scale: 1; + description{ + state: "default" 0.0; + visible: 0; + rel1 { relative: 0.0 0.0; } + rel2 { relative: 1.0 1.0; } + } + } + part{ + name: "elm.swallow.content"; /* editfield */ + type: SWALLOW; + scale: 1; + description{ + state: "default" 0.0; + min: 0 108; + align: 0.0 0.0; + rel1 { relative: 0.0 0.15; to: "background";} + rel2 { relative: 1.0 0.15; to: "background";} + } + } + part{ + name: "toolbar.bg"; + type: IMAGE; + scale: 1; + description{ + state: "default" 0.0; + min: 0 100; + align: 0.0 1.0; + visible: 0; + rel1 { relative: 0.0 1.0; to: "background";} + rel2 { relative: 1.0 1.0; to: "background";} + image.normal: "B09_Add Text_sip_option_bg.png"; + image.border: 8 8 8 8; + } + } + part{ + name: "elm.swallow.toolbar";/* toolbar layout */ + type: SWALLOW; + scale: 1; + description{ + state: "default" 0.0; + visible: 0; + rel1 { relative: 0.0 0.0; to: "toolbar.bg";} + rel2 { relative: 1.0 1.0; to: "toolbar.bg";} + } + } + part{ + name: "elm.swallow.selector";/* font and color selector layout */ + type: SWALLOW; + scale: 1; + description{ + state: "default" 0.0; + visible: 1; + rel1 { relative: 0.0 1.0; to: "toolbar.bg";} + rel2 { relative: 1.0 1.0; to: "background";} + } + } + } + script { + public message(Msg_Type:type, id, ...) { + custom_state(PART:"toolbar.bg", "default", 0.0); + custom_state(PART:"elm.swallow.toolbar", "default", 0.0); + if ((type == MSG_FLOAT) && (id == 1)) { + new Float:rel2_y = Float:getarg(2); + set_state_val(PART:"toolbar.bg", STATE_REL1, 0.0, rel2_y); + set_state_val(PART:"toolbar.bg", STATE_REL2, 1.0, rel2_y); + } + if ((type == MSG_FLOAT) && (id == 2)) { + set_state_val(PART:"toolbar.bg", STATE_VISIBLE, 1); + set_state_val(PART:"elm.swallow.toolbar", STATE_VISIBLE, 1); + } + if ((type == MSG_FLOAT) && (id == 3)) { + set_state_val(PART:"toolbar.bg", STATE_VISIBLE, 0); + set_state_val(PART:"elm.swallow.toolbar", STATE_VISIBLE, 0); + } + set_state(PART:"toolbar.bg", "custom", 0.0); + set_state(PART:"elm.swallow.toolbar", "custom", 0.0); + } + } +} + +group{ + images{ + image: "B09_key_btn_01.png" COMP; + image: "B09_key_btn_press.png" COMP; + image: "B09_Add Text_sip_option_bold.png" COMP; + image: "B09_Add Text_sip_option_Italic.png" COMP; + image: "B09_Add Text_sip_option_underline.png" COMP; + image: "B09_Add Text_sip_option_color.png" COMP; + image: "B09_Add Text_sip_option_style.png" COMP; + image: "B09_Add Text_sip_option_size.png" COMP; + } + name: "lockscreen.options.locktitle.toolbar"; + parts{ + part{ + name: "bg"; + type: RECT; + scale: 1; + description{ + state: "default" 0.0; + visible: 0; + rel1 { relative: 0.0 0.0; } + rel2 { relative: 1.0 1.0; } + } + } + part{ + name: "font.bg"; + type: IMAGE; + mouse_events: 1; + scale: 1; + description{ + state: "default" 0.0; + visible: 1; + rel1 {relative: 8/TOOLBAR_WIDTH 12/TOOLBAR_HEIGHT; to: "bg";} + rel2 {relative: 144/TOOLBAR_WIDTH 76/TOOLBAR_HEIGHT; to: "bg";} + image.normal: "B09_key_btn_01.png"; + image.border: 5 5 0 0; + } + description{ + state: "press" 0.0; + inherit: "default" 0.0; + image.normal: "B09_key_btn_press.png"; + image.border: 5 5 0 0; + } + } + part{ + name: "font"; + type: IMAGE; + scale: 1; + mouse_events: 1; + repeat_events: 1; + description{ + state: "default" 0.0; + visible: 1; + rel1 {relative: 0.0 0.0; to: font.bg;} + rel2 {relative: 1.0 1.0; to: font.bg;} + image.normal: "B09_Add Text_sip_option_style.png"; + } + description{ + state: "press" 0.0; + inherit: "default" 0.0; + image.normal: "B09_Add Text_sip_option_style.png"; + } + } + part{ + name: "size.bg"; + type: IMAGE; + mouse_events: 1; + scale: 1; + description{ + state: "default" 0.0; + visible: 1; + rel1 {relative: 160/TOOLBAR_WIDTH 12/TOOLBAR_HEIGHT; to: "bg";} + rel2 {relative: 240/TOOLBAR_WIDTH 76/TOOLBAR_HEIGHT; to: "bg";} + image.normal: B09_key_btn_01.png; + image.border: 5 5 0 0; + } + description{ + state: "press" 0.0; + inherit: "default" 0.0; + image.normal: "B09_key_btn_press.png"; + image.border: 5 5 0 0; + } + } + part{ + name: "size"; + type: IMAGE; + scale: 1; + mouse_events: 1; + repeat_events: 1; + description{ + state: "default" 0.0; + visible: 1; + rel1 {relative: 0.0 0.0; to: size.bg;} + rel2 {relative: 1.0 1.0; to: size.bg;} + image.normal: "B09_Add Text_sip_option_size.png"; + } + description{ + state: "press" 0.0; + inherit: "default" 0.0; + image.normal: "B09_Add Text_sip_option_size.png"; + } + } + part{ + name: "draw.bg"; + type: IMAGE; + mouse_events: 1; + scale: 1; + description{ + state: "default" 0.0; + visible: 1; + rel1 {relative: 256/TOOLBAR_WIDTH 12/TOOLBAR_HEIGHT; to: "bg";} + rel2 {relative: 336/TOOLBAR_WIDTH 76/TOOLBAR_HEIGHT; to: "bg";} + image.normal: B09_key_btn_01.png; + image.border: 5 5 0 0; + } + description{ + state: "press" 0.0; + inherit: "default" 0.0; + image.normal: "B09_key_btn_press.png"; + image.border: 5 5 0 0; + } + } + part{ + name: "draw"; + type: IMAGE; + scale: 1; + mouse_events: 1; + repeat_events: 1; + description{ + state: "default" 0.0; + visible: 1; + rel1 {relative: 0.0 0.0; to: draw.bg;} + rel2 {relative: 1.0 1.0; to: draw.bg;} + image.normal: "B09_Add Text_sip_option_color.png"; + } + description{ + state: "press" 0.0; + inherit: "default" 0.0; + image.normal: "B09_Add Text_sip_option_color.png"; + } + } + COLOR_RECT("draw_indictor", "draw", "draw_indictor"); + + BUTTON_BG_NORMAL_OR_PRESS("text.bold.bg", 440/TOOLBAR_WIDTH, 12/TOOLBAR_HEIGHT, + 520/TOOLBAR_WIDTH, 76/TOOLBAR_HEIGHT, "B09_key_btn_01.png", + "B09_key_btn_press.png"); + BUTTON_NORMAL_OR_PRESS("text.bold","B09_Add Text_sip_option_bold.png", "B09_Add Text_sip_option_bold.png", "text.bold.bg"); + BUTTON_BG_NORMAL_OR_PRESS("text.italic.bg", 536/TOOLBAR_WIDTH, 12/TOOLBAR_HEIGHT, + 616/TOOLBAR_WIDTH, 76/TOOLBAR_HEIGHT, "B09_key_btn_01.png", + "B09_key_btn_press.png"); + BUTTON_NORMAL_OR_PRESS("text.italic","B09_Add Text_sip_option_Italic.png", "B09_Add Text_sip_option_Italic.png", "text.italic.bg"); + BUTTON_BG_NORMAL_OR_PRESS("text.underline.bg", 632/TOOLBAR_WIDTH, 12/TOOLBAR_HEIGHT, + 712/TOOLBAR_WIDTH, 76/TOOLBAR_HEIGHT, "B09_key_btn_01.png", + "B09_key_btn_press.png"); + BUTTON_NORMAL_OR_PRESS("text.underline","B09_Add Text_sip_option_underline.png", "B09_Add Text_sip_option_underline.png", "text.underline.bg"); + } + script { + public message(Msg_Type:type, id, ...) { + if ((type == MSG_INT) && (id == 1)) { + new text_mode = getarg(2); + new btnState[128]; + new Float:x; + + if (text_mode == 1) { + //Bold + get_state(PART:"text.bold.bg", btnState, 128, x); + if (strcmp(btnState, "press") == 0) { + set_state(PART:"text.bold.bg", "default", 0.0); + } else { + set_state(PART:"text.bold.bg", "press", 0.0); + } + } else if (text_mode == 2) { + //italic + get_state(PART:"text.italic.bg", btnState, 128, x); + if (strcmp(btnState, "press") == 0) { + set_state(PART:"text.italic.bg", "default", 0.0); + } else { + set_state(PART:"text.italic.bg", "press", 0.0); + } + } else if (text_mode == 3) { + //font_underline + get_state(PART:"text.underline.bg", btnState, 128, x); + if (strcmp(btnState, "press") == 0) { + set_state(PART:"text.underline.bg", "default", 0.0); + } else { + set_state(PART:"text.underline.bg", "press", 0.0); + } + } + } + } + } + programs{ + TOOLBAR_BUTTON_PROGRAM_SIGNAL_EMIT_1("font.bg", "dropdown.fonttype.clicked"); + TOOLBAR_BUTTON_PROGRAM_SIGNAL_EMIT_1("size.bg", "size.button.clicked"); + TOOLBAR_BUTTON_PROGRAM_SIGNAL_EMIT_1("draw.bg", "draw.button.clicked"); + TOOLBAR_BUTTON_PROGRAM_SIGNAL_EMIT_2("text.bold.bg", "text.bold.clicked"); + TOOLBAR_BUTTON_PROGRAM_SIGNAL_EMIT_2("text.italic.bg", "text.italic.clicked"); + TOOLBAR_BUTTON_PROGRAM_SIGNAL_EMIT_2("text.underline.bg", "text.underline.clicked"); + } +} + +group { + name: "lockscreen.options.locktitle.colorselector"; + parts{ + part { + name: "bg"; + type: RECT; + scale: 1; + description { + state: "default" 0.0; + visible: 0; + } + } + part { + name: "rect"; + type: SWALLOW; + scale: 1; + description { + state: "default" 0.0; + min: 0 109; + rel1 { relative: 0.0 0.0; to: "bg"; offset: 83 83;} + rel2 { relative: 1.0 0.0; to: "bg"; offset: -83 83;} + } + } + part { + name: "color"; + type: SWALLOW; + scale: 1; + description { + state: "default" 0.0; + rel1 { relative: 0.0 1.0; to_x: "bg"; to_y:"rect"; offset: 0 20;} + rel2 { relative: 1.0 1.0; to: "bg"; offset: 0 -20;} + } + } + } +} diff --git a/lock-setting/lockscreen-options/res/edje/lockscreen-options-shortcuts.edc b/lock-setting/lockscreen-options/res/edje/lockscreen-options-shortcuts.edc new file mode 100755 index 0000000..1f3d3ae --- /dev/null +++ b/lock-setting/lockscreen-options/res/edje/lockscreen-options-shortcuts.edc @@ -0,0 +1,116 @@ + /* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.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.tizenopensource.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. + */ + + + + group{ + name: "lockscreen.options.shortcuts.main"; + parts{ + part{ + name: "background"; + type: RECT; + scale: 1; + description{ + state: "default" 0.0; + visible: 0; + rel1 { relative: 0.0 0.0; } + rel2 { relative: 1.0 1.0; } + } + } + part{ + name: "shortcuts.help.title"; + type: SWALLOW; + scale: 1; + description{ + state: "default" 0.0; + align: 0.5 0.0; + min: 0 40; + rel1 { relative: 0.0 0.08; to: "background"; } + rel2 { relative: 1.0 0.08; to: "background"; } + } + } + part{ + name: "blank.rect1"; + type: RECT; + scale: 1; + description{ + state: "default" 0.0; + visible: 0; + min: 0 40; + rel1 { relative: 0.0 1.0; to: "shortcuts.help.title"; } + rel2 { relative: 1.0 1.0; to: "shortcuts.help.title"; } + } + } + part{ + name: "shortcuts.help.contents"; + type: SWALLOW; + scale: 1; + description{ + state: "default" 0.0; + align: 0.5 0.0; + min: 0 80; + rel1 { relative: 0.0 1.0; to: "blank.rect1"; } + rel2 { relative: 1.0 1.0; to: "blank.rect1"; } + } + } + part{ + name: "blank.rect2"; + type: RECT; + scale: 1; + description{ + state: "default" 0.0; + visible: 0; + min: 0 100; + rel1 { relative: 0.0 1.0; to: "shortcuts.help.contents"; } + rel2 { relative: 1.0 1.0; to: "shortcuts.help.contents"; } + } + } + part{ + name: "shortcuts.edit.help.title"; + type: SWALLOW; + scale: 1; + description{ + state: "default" 0.0; + align: 0.5 0.0; + min: 0 40; + rel1 { relative: 0.0 0.14; to: "background"; } + rel2 { relative: 1.0 0.14; to: "background"; } + } + } + part{ + name: "blank.rect3"; + type: RECT; + scale: 1; + description{ + state: "default" 0.0; + visible: 0; + min: 0 40; + rel1 { relative: 0.0 1.0; to: "shortcuts.edit.help.title"; } + rel2 { relative: 1.0 1.0; to: "shortcuts.edit.help.title"; } + } + } + part{ + name: "shortcuts.gengrid"; + type: SWALLOW; + scale: 1; + description{ + state: "default" 0.0; + rel1 { relative: 0.0 1.0; to: "blank.rect2"; } + rel2 { relative: 1.0 1.0; to: "background"; } + } + } + } + } diff --git a/lock-setting/lockscreen-options/res/edje/lockscreen-options-thumbnail.edc b/lock-setting/lockscreen-options/res/edje/lockscreen-options-thumbnail.edc new file mode 100755 index 0000000..a3da17f --- /dev/null +++ b/lock-setting/lockscreen-options/res/edje/lockscreen-options-thumbnail.edc @@ -0,0 +1,66 @@ + /* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.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.tizenopensource.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. + */ + + + +group{ + images{ + image: "icon_delete.png" COMP; + image: "icon_delete_press.png" COMP; + } + + name: "lockscreen.options.shortcuts.thumbnail.main"; + parts{ + part{ + name: "background"; + type: RECT; + mouse_events: 1; + scale: 1; + description{ + state: "default" 0.0; + visible: 1; + rel1 { relative: 0.0 0.0; } + rel2 { relative: 1.0 1.0; } + color: 0 0 0 0; + } + } + part{ + name: "elm.swallow.contents"; + type: SWALLOW; + repeat_events: 1; + scale: 1; + description{ + state: "default" 0.0; + rel1 {relative: 0.0 0.0; to: "background";} + rel2 {relative: 1.0 1.0; to: "background";} + } + } + part{ + name: "elm.swallow.button"; + type: SWALLOW; + repeat_events: 0; + scale: 1; + description{ + state: "default" 0.0; + fixed: 1 1; + rel1 {relative: 0.0 0.0; to: "background";} + rel2 {relative: 0.45 0.45; to: "background";} + } + } + } + programs{ + } +} diff --git a/lock-setting/lockscreen-options/res/edje/lockscreen-options.edc b/lock-setting/lockscreen-options/res/edje/lockscreen-options.edc new file mode 100755 index 0000000..d0ba457 --- /dev/null +++ b/lock-setting/lockscreen-options/res/edje/lockscreen-options.edc @@ -0,0 +1,23 @@ + /* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.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.tizenopensource.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. + */ + + + +collections { + #include "lockscreen-options-shortcuts.edc" + #include "lockscreen-options-thumbnail.edc" + #include "lockscreen-options-locktitle.edc" +} diff --git a/lock-setting/lockscreen-options/res/images/B09_Add Text_sip_option_Italic.png b/lock-setting/lockscreen-options/res/images/B09_Add Text_sip_option_Italic.png new file mode 100755 index 0000000000000000000000000000000000000000..ef2092c4b97a72ec9fd4f74cb57e0889acc5913d GIT binary patch literal 3404 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 literal 0 HcmV?d00001 diff --git a/lock-setting/lockscreen-options/res/images/B09_Add Text_sip_option_bg.png b/lock-setting/lockscreen-options/res/images/B09_Add Text_sip_option_bg.png new file mode 100755 index 0000000000000000000000000000000000000000..dcaef91dc87b140cebc8188fc50a44f62d2b2bc2 GIT binary patch literal 3297 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 VVvlzOfl8!DV4!2FT?ciF{yS$MtG)mL literal 0 HcmV?d00001 diff --git a/lock-setting/lockscreen-options/res/images/B09_Add Text_sip_option_bold.png b/lock-setting/lockscreen-options/res/images/B09_Add Text_sip_option_bold.png new file mode 100755 index 0000000000000000000000000000000000000000..d222f744aca756d4218920c8d33ba3c8e393f49c GIT binary patch literal 3616 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 O01XwL7j;UuVgCVhtkkOj literal 0 HcmV?d00001 diff --git a/lock-setting/lockscreen-options/res/images/B09_Add Text_sip_option_underline.png b/lock-setting/lockscreen-options/res/images/B09_Add Text_sip_option_underline.png new file mode 100755 index 0000000000000000000000000000000000000000..959467bd7cddcda96f2122716980d0eca045d080 GIT binary patch literal 3476 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 BV=Vvx literal 0 HcmV?d00001 diff --git a/lock-setting/lockscreen-options/res/images/B09_key_btn_press.png b/lock-setting/lockscreen-options/res/images/B09_key_btn_press.png new file mode 100755 index 0000000000000000000000000000000000000000..ee2484d684d71a3762ed713aa7f23f387dda2b99 GIT binary patch literal 3494 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 U literal 0 HcmV?d00001 diff --git a/lock-setting/lockscreen-options/res/images/icon_add.png b/lock-setting/lockscreen-options/res/images/icon_add.png new file mode 100755 index 0000000000000000000000000000000000000000..efa4733c4154c036c6c8cb361edbb4cb3b17c2f0 GIT binary patch literal 1205 zcmeAS@N?(olHy`uVBq!ia0vp^79h;Q1|(OsS<3+_$r9IylHmNblJdl&R0hYC{G?O` z&)mfH)S%SFl*+=BsWuD@%u1Od5hW46K32*3xq68pHF_1f1wh>l3^w)^1&PVosU-?Y zsp*+{wo31J?^jaDOtDo8H}y5}EpSfF$n>ZxN)4{^3rViZPPR-@vbR&PsjvbXkegbP zs8ErclUHn2VXFi-*9yo63F|8hm3bwJ6}oxF$}kgLQj3#|G7CyF^YauyCMG83 zmzLNn0bL65LT&-v*t}wBFaZNhzap_f-%!s0ztA(?ZiIb6; zg^7u|v!fwQuSMv>2~2MaLa#Yay`ZF!TL84#CABECEH%ZgC_h&L>}9J=+-?Ed zi_0w#y(zfeVv19*KF~4xpom3^XqXT%^?;c0WDDfL6MkwQFtrx}lXZIU(R>C5Momu_ z$B>F!Z*Cd#H5rIBBpSTiU|qo?mOe9P?wq-IY?>#h7bJh;xZ{v6-gn@Ep8A2Lh=uF7 z%;@^>eNV~si}!=A{U&Q(Tg@ms)6~iC(7?dhCslm6;rZi7kL)s!zi&MieqUaE_2V55 z>=Res`OaW&wd8z%#---TG2i7RxR1GrNCI^*v2X||INVb8&AEMcqo)pQ@-;30wzp9$ zjl$PX*~ZOTI-mEpbV~C3U+hPgU%jNL+Mn@A(a%Po)8N|=(e4V7Oe!2q@v zX#YRmfJ<4S`+0Osq)P%%Ckx-VNZrV-(>L*k+lfLii2Dk5eH2Sz$ZIeUoV=3%5vU;X MboFyt=akR{0KVRso&W#< literal 0 HcmV?d00001 diff --git a/lock-setting/lockscreen-options/res/images/icon_delete.png b/lock-setting/lockscreen-options/res/images/icon_delete.png new file mode 100755 index 0000000000000000000000000000000000000000..7145638a5f44c73aa14a628de3bd38e3d8ddd639 GIT binary patch literal 6062 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 literal 0 HcmV?d00001 diff --git a/lock-setting/lockscreen-options/src/lockscreen-options-dualclock.c b/lock-setting/lockscreen-options/src/lockscreen-options-dualclock.c new file mode 100755 index 0000000..bdd0d2a --- /dev/null +++ b/lock-setting/lockscreen-options/src/lockscreen-options-dualclock.c @@ -0,0 +1,249 @@ + /* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.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.tizenopensource.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 "lockscreen-options-dualclock.h" + +#define CITY_BUF_SIZE 128 +#define GMT_BUF_SIZE 10 + +static char time_zone_str[CITY_BUF_SIZE + GMT_BUF_SIZE + 3]; +static Elm_Object_Item *genlist_item; + + +static Elm_Gen_Item_Class itc_menu_2text; + +static char *_lockscreen_options_dualclock_gl_label_get(void *data, + Evas_Object * obj, + const char *part) +{ + if (part == NULL) + return NULL; + + if ((strcmp(part, "elm.text.1") == 0)){ + return strdup("Set home city"); + } + if((strcmp(part, "elm.text.2") == 0)) { + return strdup(time_zone_str); + } + + return NULL; +} + + +static void _lockscreen_options_dualclock_create_gl_item(Elm_Gen_Item_Class * item) +{ + item->item_style = "dialogue/2text.3"; + item->func.text_get = _lockscreen_options_dualclock_gl_label_get; + item->func.content_get = NULL; + item->func.state_get = NULL; + item->func.del = NULL; +} + +static void _lockscreen_options_update_timezone() +{ + elm_genlist_item_update(genlist_item); +} + +static void _launch_worldclock_layout_ug_cb(ui_gadget_h ug, + enum ug_mode mode, + void *priv) +{ + LOCKOPTIONS_DBG("_launch_worldclock_layout_ug_cb begin.\n"); + lockscreen_options_ug_data *ug_data = (lockscreen_options_ug_data *) priv; + Evas_Object *base; + + if (!priv) + return; + + base = (Evas_Object *) ug_get_layout(ug); + if (!base) + return; + + switch (mode) { + case UG_MODE_FULLVIEW: + evas_object_size_hint_weight_set(base, EVAS_HINT_EXPAND, + EVAS_HINT_EXPAND); + elm_win_resize_object_add(ug_data->win_main, base); + evas_object_show(base); + break; + default: + break; + } + LOCKOPTIONS_DBG("_launch_worldclock_layout_ug_cb end.\n"); +} + +static void _launch_worldclock_result_ug_cb(ui_gadget_h ug, + service_h result, void *priv) +{ + LOCKOPTIONS_DBG("_launch_worldclock_result_ug_cb begin.\n"); + if (!priv) + return; + + char *city = NULL; + char *timezone = NULL; + service_get_extra_data(result, "city", &city); + if(city == NULL) return; + service_get_extra_data(result, "timezone", &timezone); + if(timezone == NULL) return; + + snprintf(time_zone_str, CITY_BUF_SIZE + GMT_BUF_SIZE + 2, "%s, GMT %s", _S(city), _(timezone)); + LOCKOPTIONS_DBG("time_zone_str is [%s]", time_zone_str); + _lockscreen_options_update_timezone(); + + free(city); + free(timezone); + city = timezone = NULL; + LOCKOPTIONS_DBG("_launch_worldclock_result_ug_cb end.\n"); +} + +static void _launch_worldclock_destroy_ug_cb(ui_gadget_h ug, + void *priv) +{ + LOCKOPTIONS_DBG("_launch_worldclock_destroy_ug_cb begin.\n"); + + if (!priv) + return; + + if (ug) { + ug_destroy(ug); + } + + LOCKOPTIONS_DBG("_launch_worldclock_destroy_ug_cb end.\n"); +} + +static void _launch_worldclock(void *data) +{ + LOCKOPTIONS_DBG("Launch world clock begin.\n"); + + if(data == NULL){ + LOCKOPTIONS_ERR("The data (ug_data) transferred to _lauch_worldclock is NULL."); + return; + } + + lockscreen_options_ug_data *ug_data = (lockscreen_options_ug_data *) data; + + struct ug_cbs *cbs = (struct ug_cbs *)calloc(1, sizeof(struct ug_cbs)); + if(cbs == NULL) + return; + cbs->layout_cb = _launch_worldclock_layout_ug_cb; + cbs->result_cb = _launch_worldclock_result_ug_cb; + cbs->destroy_cb = _launch_worldclock_destroy_ug_cb; + cbs->priv = (void *)ug_data; + + LOCKOPTIONS_DBG("Launch worldclock-efl begin.\n"); + ui_gadget_h loading=ug_create(ug_data->ug, "worldclock-efl", UG_MODE_FULLVIEW, NULL, cbs); + if (NULL == loading) { + LOCKOPTIONS_ERR("Launch wordclock-efl failed."); + } + + free(cbs); + LOCKOPTIONS_DBG("Launch world clock end.\n"); +} + +static void _lockscreen_options_dualclock_select_cb(void *data, Evas_Object *obj, + void *event_info) +{ + elm_genlist_item_selected_set(genlist_item, EINA_FALSE); + if(data == NULL){ + LOCKOPTIONS_ERR("ug_data is null."); + return; + } + + _launch_worldclock(data); +} + +static void _lockscreen_options_dualclock_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){ + LOCKOPTIONS_ERR("ug_data is null."); + return; + } + + Evas_Object *navi_bar = ug_data->navi_bar; + + if (navi_bar == NULL) { + LOCKOPTIONS_ERR("navi_bar is null."); + return; + } + + elm_naviframe_item_pop(navi_bar); +} + +static void _init_time_zone() +{ + snprintf(time_zone_str, CITY_BUF_SIZE + GMT_BUF_SIZE + 2, "%s, GMT %s", _("Nanjing"), _("+8")); +} + + +void lockscreen_options_dualclock_create_view(lockscreen_options_ug_data * ug_data) +{ + LOCKOPTIONS_DBG("lockscreen_options_dualclock_create_view begin\n"); + + Evas_Object *navi_bar = ug_data->navi_bar; + Evas_Object *back_button = NULL; + Evas_Object *genlist = NULL; + + if (navi_bar == NULL) { + LOCKOPTIONS_ERR("navi_bar is null."); + return; + } + + _init_time_zone(); + + genlist = elm_genlist_add(navi_bar); + elm_genlist_mode_set(genlist, ELM_LIST_COMPRESS); + elm_object_style_set(genlist, "dialogue"); + + _lockscreen_options_dualclock_create_gl_item(&itc_menu_2text); + + lockscreen_options_util_create_seperator(genlist); + + + genlist_item = elm_genlist_item_append(genlist, + &itc_menu_2text, + NULL, NULL, + ELM_GENLIST_ITEM_NONE, + _lockscreen_options_dualclock_select_cb, + ug_data); + + + 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_dualclock_back_cb, + ug_data); + + elm_naviframe_item_push(navi_bar, "Dual clock", back_button, NULL, genlist, NULL); +} + + + diff --git a/lock-setting/lockscreen-options/src/lockscreen-options-locktitle.c b/lock-setting/lockscreen-options/src/lockscreen-options-locktitle.c new file mode 100755 index 0000000..738818a --- /dev/null +++ b/lock-setting/lockscreen-options/src/lockscreen-options-locktitle.c @@ -0,0 +1,535 @@ + /* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.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.tizenopensource.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 "lockscreen-options.h" +#include "lockscreen-options-debug.h" +#include "lockscreen-options-util.h" +#include "lockscreen-options-locktitle.h" + +#define EDJE_DIR "/usr/ug/res/edje/ug-lockscreen-options-efl" + +typedef struct { + unsigned char red; + unsigned char green; + unsigned char blue; + unsigned char reserved; +} options_locktitle_rgb_s; + +typedef struct { + lockscreen_options_ug_data *ug_data; + Evas_Object *layout; + Evas_Object *toolbar; + Evas_Object *entry; + Ecore_IMF_Context *entry_ctx; + Evas_Object *colorselector; + Evas_Object *fontselector; + Evas_Object *font_radio; + + options_locktitle_rgb_s rgb; +} options_locktile_view_s; + +static options_locktile_view_s *options_locktile_view_data = NULL; + +static const fonttype_size = 5; +static const char *fonttype_value[] = { + "Arial", "Courier New", "Roboto", "Tahoma", "Verdana" +}; + +static char *_fonttype_dropdown_text_get(void *data, Evas_Object * obj, const char *part); +static Evas_Object *_fonttype_dropdown_content_get(void *data, Evas_Object * obj, const char *part); +static Evas_Object *_editfield_content_get(void *data, Evas_Object * obj, const char *part); +static void _lockscreen_options_locktitle_font_selector_create(); +static void _lockscreen_options_locktitle_color_selector_create(); + +static Elm_Genlist_Item_Class itc_fontlist_style = { + .item_style = "1text.1icon.2", + .func.text_get = _fonttype_dropdown_text_get, + .func.content_get = _fonttype_dropdown_content_get, +}; + +static Elm_Genlist_Item_Class itc_editfield_style = { + .item_style = "dialogue/1icon", + .func.text_get = NULL, + .func.content_get = _editfield_content_get, +}; + +static char *_fonttype_dropdown_text_get(void *data, Evas_Object * obj, + const char *part) +{ + int index = (int)data; + if (strcmp(part, "elm.text") == 0) { + return strdup(fonttype_value[index]); + } + return NULL; +} + +static Evas_Object *_fonttype_dropdown_content_get(void *data, + Evas_Object * obj, + const char *part) +{ + int index = (int)data; + if (!strcmp(part, "elm.icon")) { + Evas_Object *radio = elm_radio_add(obj); + elm_radio_state_value_set(radio, index); + elm_radio_group_add(radio, options_locktile_view_data->font_radio); + return radio; + } + return NULL; +} + +static void *_fonttype_sel(void *data, Evas_Object * obj, void *event_info) +{ + //select font type +} + +static void _lockscreen_options_locktitle_delete_cb(void *data, Evas * e, + Evas_Object * obj, + void *event_info) +{ + if (options_locktile_view_data) { + free(options_locktile_view_data); + options_locktile_view_data = NULL; + } +} + +static void _lockscreen_options_locktitle_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) { + LOCKOPTIONS_ERR("ug_data is null."); + return; + } + + Evas_Object *navi_bar = ug_data->navi_bar; + + if (navi_bar == NULL) { + LOCKOPTIONS_ERR("navi_bar is null."); + return; + } + elm_naviframe_item_pop(navi_bar); +} + +static void _send_int_message_to_edc(Evas_Object * obj, int msgID, int param) +{ + Edje_Message_Int msg; + msg.val = param; + edje_object_message_send(elm_layout_edje_get(obj), + EDJE_MESSAGE_INT, msgID, &msg); +} + +static void _send_float_message_to_edc(Evas_Object * obj, int msgID, float param) +{ + Edje_Message_Float msg; + msg.val = param; + edje_object_message_send(elm_layout_edje_get(obj), + EDJE_MESSAGE_FLOAT, msgID, &msg); +} + +static void _lockscreen_options_locktitle_entry_imf_state_cb(void *data, + Ecore_IMF_Context * + ctx, int value) +{ + static float val = 1.0; + if (value == ECORE_IMF_INPUT_PANEL_STATE_SHOW) { + Evas_Coord keypad_x = 0; + Evas_Coord keypad_y = 0; + Evas_Coord keypad_w = 0; + Evas_Coord keypad_h = 0; + Evas_Coord window_width = 0; + Evas_Coord window_height = 0; + + ecore_x_window_size_get(ecore_x_window_root_first_get(), + &window_width, &window_height); + ecore_imf_context_input_panel_geometry_get(ctx, &keypad_x, + &keypad_y, &keypad_w, + &keypad_h); + val = (float)(keypad_y) / (float)window_height; + /*set the toolbar's location*/ + _send_float_message_to_edc(options_locktile_view_data->layout, 1, val); + /*set toolbar visible*/ + _send_float_message_to_edc(options_locktile_view_data->layout, 2, 0.0); + } else if (value == ECORE_IMF_INPUT_PANEL_STATE_HIDE + &&options_locktile_view_data->colorselector == NULL + &&options_locktile_view_data->fontselector == NULL) { + _send_float_message_to_edc(options_locktile_view_data->layout, 3, 0.0); + }else { + /*set the toolbar's location*/ + _send_float_message_to_edc(options_locktile_view_data->layout, 1, val); + } +} + +static void _lockscreen_options_locktitle_entry_imf_resize_cb(void *data, + Ecore_IMF_Context + * ctx, int value) +{ + Evas_Coord keypad_x = 0; + Evas_Coord keypad_y = 0; + Evas_Coord keypad_w = 0; + Evas_Coord keypad_h = 0; + Evas_Coord window_width = 0; + Evas_Coord window_height = 0; + + ecore_x_window_size_get(ecore_x_window_root_first_get(), &window_width, + &window_height); + ecore_imf_context_input_panel_geometry_get(ctx, &keypad_x, &keypad_y, + &keypad_w, &keypad_h); +} + +/* This callback is for showing(hiding) X marked button.*/ +static void _changed_cb(void *data, Evas_Object *obj, void *event_info) +{ + if (elm_object_focus_get(data)) { + if (elm_entry_is_empty(obj)) { + elm_object_signal_emit(data, "elm,state,eraser,hide", "elm"); + }else { + elm_object_signal_emit(data, "elm,state,eraser,show", "elm"); + } + } +} + +/* Focused callback will show X marked button and hide guidetext.*/ +static void _focused_cb(void *data, Evas_Object *obj, void *event_info) +{ + if (!elm_entry_is_empty(obj)) { + elm_object_signal_emit(data, "elm,state,eraser,show", "elm"); + } + elm_object_signal_emit(data, "elm,state,guidetext,hide", "elm"); +} + +/*Unfocused callback will show guidetext and hide X marked button.*/ +static void _unfocused_cb(void *data, Evas_Object *obj, void *event_info) +{ + if (elm_entry_is_empty(obj)) { + elm_object_signal_emit(data, "elm,state,guidetext,show", "elm"); + } + elm_object_signal_emit(data, "elm,state,eraser,hide", "elm"); +} + +static void _eraser_clicked_cb(void *data, Evas_Object *obj, const char *emission, const char *source) // When X marked button clicked, make string as empty. +{ + elm_entry_entry_set(data, ""); +} + +static Evas_Object *_lockscreen_options_editfield_create(Evas_Object *parent) +{ + LOCKOPTIONS_DBG("[ == %s == ]", __func__); + Evas_Object *layout = NULL; + Evas_Object *entry = NULL; + + layout = elm_layout_add(parent); + if(layout == NULL) + return NULL; + elm_layout_theme_set(layout, "layout", "editfield", "default"); + evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + + entry = elm_entry_add(parent); + if(entry == NULL) + return NULL; + evas_object_smart_callback_add(entry, "changed", _changed_cb, layout); + evas_object_smart_callback_add(entry, "focused", _focused_cb, layout); + evas_object_smart_callback_add(entry, "unfocused", _unfocused_cb, layout); + + elm_object_part_content_set(layout, "elm.swallow.content", entry); + elm_object_part_text_set(layout, "elm.guidetext", lockscreen_optoins_get_string(IDS_LOCKSCREEN_OPTIONS_LOCK_SCREEN_TITLE_GUIDE_TEXT)); + elm_object_signal_callback_add(layout, "elm,eraser,clicked", "elm", _eraser_clicked_cb, entry); + + options_locktile_view_data->entry = entry; + + Ecore_IMF_Context *entry_ctx = elm_entry_imf_context_get(entry); + if(entry_ctx != NULL) { + ecore_imf_context_input_panel_event_callback_add((Ecore_IMF_Context *) + entry_ctx, + ECORE_IMF_INPUT_PANEL_STATE_EVENT, + _lockscreen_options_locktitle_entry_imf_state_cb, + options_locktile_view_data); + ecore_imf_context_input_panel_event_callback_add((Ecore_IMF_Context *) + entry_ctx, + ECORE_IMF_INPUT_PANEL_GEOMETRY_EVENT, + _lockscreen_options_locktitle_entry_imf_resize_cb, + options_locktile_view_data); + options_locktile_view_data->entry_ctx = entry_ctx; + } + + return layout; +} + +static Evas_Object *_editfield_content_get(void *data, + Evas_Object * obj, + const char *part) +{ + if (!strcmp(part, "elm.icon")) { + LOCKOPTIONS_DBG("[ == %s == ]", __func__); + Evas_Object *editfield = NULL; + editfield = _lockscreen_options_editfield_create(obj); + return editfield; + } + return NULL; +} + +static void *_editfield_sel(void *data, Evas_Object * obj, void *event_info) +{ + elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE); +} + +static void _on_text_fonttype_btn_clicked_cb(void *data, Evas_Object * obj, + const char *emission, + const char *source) +{ + if (options_locktile_view_data != NULL) { + if(options_locktile_view_data->fontselector == NULL) { + if(options_locktile_view_data->colorselector != NULL) { + evas_object_del(options_locktile_view_data->colorselector); + options_locktile_view_data->colorselector = NULL; + } + _lockscreen_options_locktitle_font_selector_create(); + /*if create fontselector successfully, hide IME*/ + if(options_locktile_view_data->fontselector != NULL) { + elm_object_focus_set(options_locktile_view_data->entry, EINA_FALSE); + } + }else { + evas_object_del(options_locktile_view_data->fontselector); + options_locktile_view_data->fontselector = NULL; + elm_object_focus_set(options_locktile_view_data->entry, EINA_TRUE); + } + } +} + +static void _on_text_draw_btn_clicked_cb(void *data, Evas_Object * obj, + const char *emission, + const char *source) +{ + if (options_locktile_view_data != NULL) { + if(options_locktile_view_data->colorselector == NULL) { + if(options_locktile_view_data->fontselector != NULL) { + evas_object_del(options_locktile_view_data->fontselector); + options_locktile_view_data->fontselector = NULL; + } + _lockscreen_options_locktitle_color_selector_create(); + /*if create colorselector successfully, hide IME*/ + if(options_locktile_view_data->colorselector != NULL) { + elm_object_focus_set(options_locktile_view_data->entry, EINA_FALSE); + } + }else { + evas_object_del(options_locktile_view_data->colorselector); + options_locktile_view_data->colorselector = NULL; + elm_object_focus_set(options_locktile_view_data->entry, EINA_TRUE); + } + } +} + +static void _on_text_bold_btn_clicked_cb(void *data, Evas_Object * obj, + const char *emission, + const char *source) +{ + if (options_locktile_view_data != NULL) { + _send_int_message_to_edc(options_locktile_view_data->toolbar, 1, 1); + } +} + +static void _on_text_italic_btn_clicked_cb(void *data, Evas_Object * obj, + const char *emission, + const char *source) +{ + if (options_locktile_view_data != NULL) { + _send_int_message_to_edc(options_locktile_view_data->toolbar, 1, 2); + } + +} + +static void _on_text_underline_btn_clicked_cb(void *data, Evas_Object * obj, + const char *emission, + const char *source) +{ + if (options_locktile_view_data != NULL) { + _send_int_message_to_edc(options_locktile_view_data->toolbar, 1, 3); + } +} + +static void _lockscreen_options_locktitle_colorselector_changed_cb(void *data, Evas_Object *obj, void *event_info) +{ + Evas_Object *rect = (Evas_Object *)data; + int r = 0, g = 0, b = 0, a = 0; + elm_colorselector_color_get(obj, &r, &g, &b, &a); + evas_object_color_set(rect, r, g, b, a); +} + +static void _lockscreen_options_locktitle_color_selector_create() +{ + if(options_locktile_view_data == NULL) + return; + Evas_Object *colorselector = NULL; + Evas_Object *rect = NULL; + Evas_Object *color = NULL; + + colorselector = + lockscreen_options_util_create_layout(options_locktile_view_data->layout, + EDJE_DIR + "/lockscreen-options.edj", + "lockscreen.options.locktitle.colorselector"); + if(colorselector == NULL) + return; + + rect = evas_object_rectangle_add(evas_object_evas_get(options_locktile_view_data->layout)); + elm_object_part_content_set(colorselector, "rect", rect); + evas_object_color_set(rect, options_locktile_view_data->rgb.red, options_locktile_view_data->rgb.green, options_locktile_view_data->rgb.blue, options_locktile_view_data->rgb.reserved); + + color = elm_colorselector_add(options_locktile_view_data->layout); + elm_colorselector_mode_set(color, ELM_COLORSELECTOR_COMPONENTS); + elm_object_part_content_set(colorselector, "color", color); + evas_object_smart_callback_add(color, "changed", _lockscreen_options_locktitle_colorselector_changed_cb, rect); + evas_object_color_set(color, options_locktile_view_data->rgb.red, options_locktile_view_data->rgb.green, options_locktile_view_data->rgb.blue, options_locktile_view_data->rgb.reserved); + + options_locktile_view_data->colorselector = colorselector; + elm_object_part_content_set(options_locktile_view_data->layout, "elm.swallow.selector", colorselector); + evas_object_show(colorselector); +} + +static void _lockscreen_options_locktitle_font_selector_create() +{ + if(options_locktile_view_data == NULL) + return; + Evas_Object *fontselector = NULL; + Evas_Object *font_radio = NULL; + + fontselector = elm_genlist_add(options_locktile_view_data->layout); + if(fontselector == NULL) + return; + + font_radio= elm_radio_add(fontselector); + if(font_radio == NULL) + return; + + int index = 0; + for (index = 0; index < fonttype_size; index++) { + elm_genlist_item_append(fontselector, &itc_fontlist_style, + (void *)index, NULL, + ELM_GENLIST_ITEM_NONE, _fonttype_sel, NULL); + } + + options_locktile_view_data->fontselector = fontselector; + options_locktile_view_data->font_radio = font_radio; + elm_object_part_content_set(options_locktile_view_data->layout, "elm.swallow.selector", fontselector); + evas_object_show(fontselector); +} + +static void _lockscreen_options_locktitle_create_toolbar() +{ + if(options_locktile_view_data == NULL) + return; + + Evas_Object *toolbar = NULL; + + toolbar = + lockscreen_options_util_create_layout(options_locktile_view_data->layout, + EDJE_DIR + "/lockscreen-options.edj", + "lockscreen.options.locktitle.toolbar"); + if(toolbar == NULL) + return; + + elm_object_part_content_set(options_locktile_view_data->layout, "elm.swallow.toolbar", toolbar); + evas_object_show(toolbar); + options_locktile_view_data->toolbar = toolbar; + + edje_object_signal_callback_add(elm_layout_edje_get(toolbar), + "dropdown.fonttype.clicked", "*", + _on_text_fonttype_btn_clicked_cb, + NULL); + edje_object_signal_callback_add(elm_layout_edje_get(toolbar), + "draw.button.clicked", "*", + _on_text_draw_btn_clicked_cb, NULL); + edje_object_signal_callback_add(elm_layout_edje_get(toolbar), + "text.bold.clicked", "*", + _on_text_bold_btn_clicked_cb, NULL); + edje_object_signal_callback_add(elm_layout_edje_get(toolbar), + "text.italic.clicked", "*", + _on_text_italic_btn_clicked_cb, NULL); + edje_object_signal_callback_add(elm_layout_edje_get(toolbar), + "text.underline.clicked", "*", + _on_text_underline_btn_clicked_cb, NULL); +} + +void lockscreen_options_locktitle_create_view(lockscreen_options_ug_data * + ug_data) +{ + if (ug_data == NULL) { + LOCKOPTIONS_ERR("ug is NULL"); + return; + } + LOCKOPTIONS_DBG("lockscreen_options_locktitle_create_view begin\n"); + Evas_Object *navi_bar = ug_data->navi_bar; + if (navi_bar == NULL) { + LOCKOPTIONS_ERR("navi_bar is null."); + return; + } + + /*initialization*/ + options_locktile_view_data = + (options_locktile_view_s *) calloc(1, + sizeof(options_locktile_view_s)); + options_locktile_view_data->ug_data = ug_data; + options_locktile_view_data->rgb.red = 255; + options_locktile_view_data->rgb.green = 255; + options_locktile_view_data->rgb.blue = 255; + options_locktile_view_data->rgb.reserved = 255; + + Evas_Object *layout = NULL; + Evas_Object *back_button = NULL; + Evas_Object *genlist = NULL; + + layout = + lockscreen_options_util_create_layout(navi_bar, + EDJE_DIR + "/lockscreen-options.edj", + "lockscreen.options.locktitle.main"); + + if (layout == NULL) { + LOCKOPTIONS_ERR("can't create locktitle layout."); + return; + } + + evas_object_event_callback_add(layout, EVAS_CALLBACK_DEL, + _lockscreen_options_locktitle_delete_cb, + NULL); + options_locktile_view_data->layout = layout; + + genlist = elm_genlist_add(layout); + if(genlist == NULL) { + return; + } + elm_genlist_mode_set(genlist, ELM_LIST_COMPRESS); + elm_genlist_item_append(genlist, &itc_editfield_style, NULL, NULL, ELM_GENLIST_ITEM_NONE, _editfield_sel, NULL); + elm_object_part_content_set(layout, "elm.swallow.content", genlist); + evas_object_show(genlist); + + _lockscreen_options_locktitle_create_toolbar(); + + 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_locktitle_back_cb, + ug_data); + + elm_naviframe_item_push(navi_bar, "Lock screen title", back_button, + NULL, layout, NULL); +} diff --git a/lock-setting/lockscreen-options/src/lockscreen-options-main.c b/lock-setting/lockscreen-options/src/lockscreen-options-main.c new file mode 100755 index 0000000..feb0caf --- /dev/null +++ b/lock-setting/lockscreen-options/src/lockscreen-options-main.c @@ -0,0 +1,462 @@ + /* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.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.tizenopensource.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 "lockscreen-options-shortcuts.h" +#include "lockscreen-options-locktitle.h" +#include "lockscreen-options-dualclock.h" + +#include "starter-vconf.h" + +#if USE_TITLE_AND_CAMERA +#define LOCKSCREEN_OPTOINS_GENLIST_ITEM_CNT 12 +#else +#define LOCKSCREEN_OPTOINS_GENLIST_ITEM_CNT 8 +#endif + +typedef struct { + int glStyle; + int stringId; + Evas_Object *check; + void (*func) (void *data, Evas_Object * obj, void *event_info); +} lockscreen_menu_item_info; + +static void _lockscreen_options_shortcuts_cb(void *data, Evas_Object * obj, + void *event_info); +static void _lockscreen_options_locktitle_cb(void *data, Evas_Object * obj, + void *event_info); +static void _lockscreen_options_dualclock_cb(void *data, Evas_Object * obj, + void *event_info); + +static lockscreen_menu_item_info lockscreen_options_menu_item[] = { + {ENUM_LOCKSCREEN_GENLIST_STYLE_1TEXT1ICON, IDS_LOCKSCREEN_OPTIONS_SHORTCUTS, NULL, _lockscreen_options_shortcuts_cb}, //launch short cut setting + {ENUM_LOCKSCREEN_GENLIST_STYLE_HELP, IDS_LOCKSCREEN_OPTIONS_SHORTCUTS_HELP, NULL, NULL}, //help text +#if USE_TITLE_AND_CAMERA + {ENUM_LOCKSCREEN_GENLIST_STYLE_2TEXT1ICON, IDS_LOCKSCREEN_OPTIONS_LOCK_SCREEN_TITLE, NULL, _lockscreen_options_locktitle_cb}, //launch life magazine input view + {ENUM_LOCKSCREEN_GENLIST_STYLE_HELP, IDS_LOCKSCREEN_OPTIONS_LOCK_SCREEN_TITLE_HELP, NULL, NULL}, //help text +#endif + {ENUM_LOCKSCREEN_GENLIST_STYLE_1TEXT1ICON, IDS_LOCKSCREEN_OPTIONS_EVENT_NOTIFICATIONS, NULL, NULL}, //Event notifications + {ENUM_LOCKSCREEN_GENLIST_STYLE_HELP, IDS_LOCKSCREEN_OPTIONS_EVENT_NOTIFICATIONS_HELP, NULL, NULL}, //help text +// {ENUM_LOCKSCREEN_GENLIST_STYLE_1TEXT1ICON, IDS_LOCKSCREEN_OPTIONS_CONTEXTAWARE_NOTI, NULL, NULL}, //Context-aware notifications +// {ENUM_LOCKSCREEN_GENLIST_STYLE_HELP, IDS_LOCKSCREEN_OPTIONS_CONTEXTAWARE_NOTI_HELP, NULL, NULL}, //help text +#if USE_TITLE_AND_CAMERA + {ENUM_LOCKSCREEN_GENLIST_STYLE_1TEXT1ICON, IDS_LOCKSCREEN_OPTIONS_CAMERA_QUICK_ACCESS, NULL, NULL}, //camera qucik access option + {ENUM_LOCKSCREEN_GENLIST_STYLE_HELP, IDS_LOCKSCREEN_OPTIONS_CAMERA_QUICK_ACCESS_HELP, NULL, NULL}, //help text +#endif + {ENUM_LOCKSCREEN_GENLIST_STYLE_1TEXT1ICON, IDS_LOCKSCREEN_OPTIONS_CLOCK, NULL, NULL}, //Clock +// {ENUM_LOCKSCREEN_GENLIST_STYLE_1TEXT1ICON, IDS_LOCKSCREEN_OPTIONS_DUAL_CLOCK, NULL, _lockscreen_options_dualclock_cb}, //Dual Clock +// {ENUM_LOCKSCREEN_GENLIST_STYLE_HELP, IDS_LOCKSCREEN_OPTIONS_DUAL_CLOCK_HELP, NULL, NULL}, //Dual Clock help + {ENUM_LOCKSCREEN_GENLIST_STYLE_1TEXT1ICON, IDS_LOCKSCREEN_OPTIONS_WEATHER, NULL, NULL}, //Weather + {ENUM_LOCKSCREEN_GENLIST_STYLE_1TEXT1ICON, IDS_LOCKSCREEN_OPTIONS_HELPTEXT, NULL, NULL}, //Help text + {ENUM_LOCKSCREEN_GENLIST_STYLE_HELP, IDS_LOCKSCREEN_OPTIONS_HELPTEXT_HELP, NULL, NULL} //help text +}; + +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 Elm_Object_Item *genlist_shortcuts_item = NULL; + +static void _lockscreen_options_shortcuts_cb(void *data, Evas_Object * obj, + void *event_info) +{ + lockscreen_options_shortcuts_create_view(data); +} + +static void _lockscreen_options_locktitle_cb(void *data, Evas_Object * obj, + void *event_info) +{ + lockscreen_options_locktitle_create_view(data); +} + +static void _lockscreen_options_dualclock_cb(void *data, Evas_Object * obj, + void *event_info) +{ + lockscreen_options_dualclock_create_view(data); +} + +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)); + } + + if((strcmp(part, "elm.text.2") == 0)) { + return strdup("Life Magazine"); + } + + return NULL; + +} + +static void _lockscreen_options_set_menu_status(int stringId, int value) +{ + int ret = 0; + switch (stringId) { + case IDS_LOCKSCREEN_OPTIONS_SHORTCUTS: + ret = vconf_set_bool(VCONFKEY_LOCKSCREEN_SHORTCUT_DISPLAY, value); + break; +#if USE_TITLE_AND_CAMERA + case IDS_LOCKSCREEN_OPTIONS_LOCK_SCREEN_TITLE: + break; +#endif + case IDS_LOCKSCREEN_OPTIONS_EVENT_NOTIFICATIONS: + ret = vconf_set_bool(VCONFKEY_LOCKSCREEN_EVENT_NOTIFICATION_DISPLAY, value); + break; + case IDS_LOCKSCREEN_OPTIONS_CONTEXTAWARE_NOTI: + ret = vconf_set_bool(VCONFKEY_LOCKSCREEN_CONTEXT_AWARE_NOTIFICATION_DISPLAY, value); + break; +#if USE_TITLE_AND_CAMERA + case IDS_LOCKSCREEN_OPTIONS_CAMERA_QUICK_ACCESS: + ret = vconf_set_bool(VCONFKEY_LOCKSCREEN_CAMERA_QUICK_ACCESS, value); + break; +#endif + case IDS_LOCKSCREEN_OPTIONS_CLOCK: + ret = vconf_set_bool(VCONFKEY_LOCKSCREEN_CLOCK_DISPLAY, value); + break; + case IDS_LOCKSCREEN_OPTIONS_WEATHER: + ret = vconf_set_bool(VCONFKEY_LOCKSCREEN_WEATHER_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_SHORTCUTS: + ret = vconf_get_bool(VCONFKEY_LOCKSCREEN_SHORTCUT_DISPLAY, &status); + break; +#if USE_TITLE_AND_CAMERA + case IDS_LOCKSCREEN_OPTIONS_LOCK_SCREEN_TITLE: + break; +#endif + case IDS_LOCKSCREEN_OPTIONS_EVENT_NOTIFICATIONS: + ret = vconf_get_bool(VCONFKEY_LOCKSCREEN_EVENT_NOTIFICATION_DISPLAY, &status); + break; + case IDS_LOCKSCREEN_OPTIONS_CONTEXTAWARE_NOTI: + ret = vconf_get_bool(VCONFKEY_LOCKSCREEN_CONTEXT_AWARE_NOTIFICATION_DISPLAY, &status); + break; +#if USE_TITLE_AND_CAMERA + case IDS_LOCKSCREEN_OPTIONS_CAMERA_QUICK_ACCESS: + ret = vconf_get_bool(VCONFKEY_LOCKSCREEN_CAMERA_QUICK_ACCESS, &status); + break; +#endif + case IDS_LOCKSCREEN_OPTIONS_CLOCK: + ret = vconf_get_bool(VCONFKEY_LOCKSCREEN_CLOCK_DISPLAY, &status); + break; + case IDS_LOCKSCREEN_OPTIONS_WEATHER: + ret = vconf_get_bool(VCONFKEY_LOCKSCREEN_WEATHER_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) { + /* set on */ + value = 1; + } else { + /* set off */ + 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); + + + if (lockoption_data->stringId == IDS_LOCKSCREEN_OPTIONS_SHORTCUTS) { + Eina_Bool is_have = EINA_FALSE; + is_have = lockscreen_options_shortcuts_check_items(); + if(is_have == EINA_TRUE){ + elm_object_disabled_set(check, EINA_FALSE); + }else{ + elm_object_disabled_set(check, EINA_TRUE); + elm_check_state_set(check, EINA_FALSE); + _lockscreen_options_set_menu_status(lockoption_data->stringId, EINA_FALSE); + } + }else if (lockoption_data->stringId == + IDS_LOCKSCREEN_OPTIONS_CONTEXTAWARE_NOTI) { + elm_object_disabled_set(check, EINA_TRUE); + } + + 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_WEATHER + || 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); + /* Create genlist */ + 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); + item = 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); + item = 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; + } + if((lockscreen_options_menu_item[i].stringId) == IDS_LOCKSCREEN_OPTIONS_SHORTCUTS){ + genlist_shortcuts_item = item; + } + } + + /* Set navigation objects and push */ + 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); /* the same tile */ +} + +void lockscreen_options_main_update_view() +{ if(genlist_shortcuts_item){ + elm_gengrid_item_update(genlist_shortcuts_item); + } +} diff --git a/lock-setting/lockscreen-options/src/lockscreen-options-shortcuts-edit.c b/lock-setting/lockscreen-options/src/lockscreen-options-shortcuts-edit.c new file mode 100755 index 0000000..80f2d02 --- /dev/null +++ b/lock-setting/lockscreen-options/src/lockscreen-options-shortcuts-edit.c @@ -0,0 +1,576 @@ + /* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.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.tizenopensource.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-util.h" +#include "lockscreen-options-shortcuts.h" +#include "lockscreen-options-shortcuts-edit.h" + +#define EDJE_DIR "/usr/ug/res/edje/ug-lockscreen-options-efl" +#define IMAGES_DIR "/usr/ug/res/images/ug-lockscreen-options-efl" +#define GENGRID_ITEM_HEIGHT 188 +#define WINDOW_HEIGHT 1280 + +typedef enum { + SET_SHORTCUTS_APP1 = 0, + SET_SHORTCUTS_APP2, + SET_SHORTCUTS_APP3, + SET_SHORTCUTS_APP4 +} shortcuts_type_t; + +typedef struct { + int index; + char *pkg_name; + Elm_Object_Item *item; +} shortcuts_item_s; + +typedef struct { + lockscreen_options_ug_data *ug_data; + Evas_Object *gengrid; + Eina_List *app_list; + shortcuts_type_t shortcuts_type; + Elm_Object_Item *selected_gengrid_item; + Eina_Bool is_moved; +} options_shortcuts_edit_view_s; + +static Elm_Gengrid_Item_Class gic; +static options_shortcuts_edit_view_s *options_shortcuts_edit_view_data = NULL; +static bool delete_icons[4]; + +static Evas_Object *_lockscreen_options_grid_content_get_e(void *data, Evas_Object * obj, const char *part); + +static char *_lockscreen_options_icon_path_get_e(shortcuts_item_s * + shortcuts_item) +{ + ail_appinfo_h handle; + ail_error_e ret; + char *pkg_name = NULL; + char *temp = NULL; + char *icon_path = NULL; + shortcuts_type_t shortcuts_type = SET_SHORTCUTS_APP1; + + if (shortcuts_item == NULL) { + return NULL; + } + + shortcuts_type = shortcuts_item->index; + + switch (shortcuts_type) { + case SET_SHORTCUTS_APP1: + pkg_name = vconf_get_str(VCONFKEY_LOCKSCREEN_SHORTCUT1); + LOCKOPTIONS_ERR("pkg_name is %s", pkg_name); + break; + case SET_SHORTCUTS_APP2: + pkg_name = vconf_get_str(VCONFKEY_LOCKSCREEN_SHORTCUT2); + LOCKOPTIONS_ERR("pkg_name is %s", pkg_name); + break; + case SET_SHORTCUTS_APP3: + pkg_name = vconf_get_str(VCONFKEY_LOCKSCREEN_SHORTCUT3); + LOCKOPTIONS_ERR("pkg_name is %s", pkg_name); + break; + case SET_SHORTCUTS_APP4: + pkg_name = vconf_get_str(VCONFKEY_LOCKSCREEN_SHORTCUT4); + LOCKOPTIONS_ERR("pkg_name is %s", pkg_name); + break; + default: + break; + } + + if (pkg_name == NULL || strlen(pkg_name) == 0) { + LOCKOPTIONS_ERR("pkg_name is NULL"); + return NULL; + } + shortcuts_item->pkg_name = strdup(pkg_name); + + ret = ail_get_appinfo(pkg_name, &handle); + if (ret != AIL_ERROR_OK) { + LOCKOPTIONS_ERR("Fail to ail_get_appinfo"); + return NULL; + } + + ret = ail_appinfo_get_str(handle, AIL_PROP_ICON_STR, &temp); + if (ret != AIL_ERROR_OK) { + LOCKOPTIONS_ERR("Fail to ail_appinfo_get_str"); + ail_destroy_appinfo(handle); + return NULL; + } + + if (temp) { + icon_path = strdup(temp); + } + + ret = ail_destroy_appinfo(handle); + if (ret != AIL_ERROR_OK) { + LOCKOPTIONS_ERR("Fail to ail_destroy_appinfo"); + } + + if (pkg_name) { + free(pkg_name); + pkg_name = NULL; + } + return icon_path; +} + +static void _lockscreen_options_shortcuts_set_e(shortcuts_type_t shortcuts_type, + const char *pkg_name) +{ + int ret = 0; + + switch (shortcuts_type) { + case SET_SHORTCUTS_APP1: + ret = vconf_set_str(VCONFKEY_LOCKSCREEN_SHORTCUT1, pkg_name); + if (ret != 0) { + LOCKOPTIONS_ERR("set failed"); + } + break; + case SET_SHORTCUTS_APP2: + ret = vconf_set_str(VCONFKEY_LOCKSCREEN_SHORTCUT2, pkg_name); + if (ret != 0) { + LOCKOPTIONS_ERR("set failed"); + } + break; + case SET_SHORTCUTS_APP3: + ret = vconf_set_str(VCONFKEY_LOCKSCREEN_SHORTCUT3, pkg_name); + if (ret != 0) { + LOCKOPTIONS_ERR("set failed"); + } + break; + case SET_SHORTCUTS_APP4: + ret = vconf_set_str(VCONFKEY_LOCKSCREEN_SHORTCUT4, pkg_name); + if (ret != 0) { + LOCKOPTIONS_ERR("set failed"); + } + break; + default: + break; + } +} + +static void _lockscreen_options_shortcuts_delete_cb_e(void *data, Evas * e, + Evas_Object * obj, + void *event_info) +{ + void *list_item_data = NULL; + + if (options_shortcuts_edit_view_data == NULL) { + return; + } + + EINA_LIST_FREE(options_shortcuts_edit_view_data->app_list, list_item_data) { + if (list_item_data) { + free(list_item_data); + list_item_data = NULL; + } + } + if (options_shortcuts_edit_view_data->gengrid) { + evas_object_del(options_shortcuts_edit_view_data->gengrid); + options_shortcuts_edit_view_data->gengrid = NULL; + } + if (options_shortcuts_edit_view_data) { + free(options_shortcuts_edit_view_data); + options_shortcuts_edit_view_data = NULL; + } +} + +static void _lockscreen_options_shortcuts_back_cb_e(void *data, Evas_Object * obj, + void *event_info) +{ + lockscreen_options_ug_data *ug_data = + (lockscreen_options_ug_data *) data; + if (ug_data == NULL) { + return; + } + Evas_Object *navi_bar = ug_data->navi_bar; + + if (navi_bar == NULL) { + LOCKOPTIONS_ERR("navi_bar is null."); + return; + } + + elm_naviframe_item_pop(navi_bar); +} + +static void _lockscreen_options_grid_moved_cb_e(void *data, Evas_Object * obj, + void *event_info) +{ + options_shortcuts_edit_view_data->is_moved = EINA_TRUE; +} + +static void _lockscreen_options_shortcuts_done_cb_e(void *data, Evas_Object * obj, + void *event_info) +{ + lockscreen_options_ug_data *ug_data = + (lockscreen_options_ug_data *) data; + if (ug_data == NULL) { + return; + } + + int index = 0; + Elm_Object_Item *object_item = NULL; + shortcuts_item_s *shortcuts_item = NULL; + + object_item = elm_gengrid_first_item_get(options_shortcuts_edit_view_data->gengrid); + while (object_item) { + shortcuts_item = elm_object_item_data_get(object_item); + if (shortcuts_item) { + shortcuts_item->index = index; + if ((shortcuts_item->pkg_name == NULL) + || (strlen(shortcuts_item->pkg_name) == 0) + || (strcmp(shortcuts_item->pkg_name, "(null)") == + 0)) { + _lockscreen_options_shortcuts_set_e(index, ""); + } else { + _lockscreen_options_shortcuts_set_e(index, + shortcuts_item->pkg_name); + } + } + object_item = elm_gengrid_item_next_get(object_item); + index++; + } + while(index<4) + { + _lockscreen_options_shortcuts_set_e(index, ""); + index++; + } + Evas_Object *navi_bar = ug_data->navi_bar; + + if (navi_bar == NULL) { + LOCKOPTIONS_ERR("navi_bar is null."); + return; + } + elm_naviframe_item_pop(navi_bar); + lockscreen_options_shortcuts_update_view(); +} + +static void _lockscreen_options_grid_del_e(void *data, Evas_Object * obj) +{ + shortcuts_item_s *shortcuts_item = (shortcuts_item_s *) data; + + if (shortcuts_item == NULL) { + return; + } + if (shortcuts_item->pkg_name) { + free(shortcuts_item->pkg_name); + shortcuts_item->pkg_name = NULL; + } + free(shortcuts_item); + shortcuts_item = NULL; +} + +static void _lockscreen_options_shortcuts_thumbnail_delete_cb_e(void *data, + Evas_Object * obj, + void *event_info) +{ + LOCKOPTIONS_DBG("_lockscreen_options_shortcuts_thumbnail_delete_cb"); + shortcuts_item_s *shortcuts_item = (shortcuts_item_s *) data; + + if (shortcuts_item == NULL || options_shortcuts_edit_view_data->is_moved == EINA_TRUE) { + options_shortcuts_edit_view_data->is_moved = EINA_FALSE; + return; + } + + delete_icons[shortcuts_item->index] = true; + + elm_gengrid_clear(options_shortcuts_edit_view_data->gengrid); + + Evas_Object *gengrid = options_shortcuts_edit_view_data->gengrid; + + evas_object_smart_callback_add(gengrid, "moved", + _lockscreen_options_grid_moved_cb_e, NULL); + + gic.item_style = "default_grid"; + gic.func.text_get = NULL; + gic.func.content_get = _lockscreen_options_grid_content_get_e; + gic.func.state_get = NULL; + gic.func.del = _lockscreen_options_grid_del_e; + + char *pkg_name1 = NULL; + char *pkg_name2 = NULL; + char *pkg_name3 = NULL; + char *pkg_name4 = NULL; + pkg_name1 = vconf_get_str(VCONFKEY_LOCKSCREEN_SHORTCUT1); + pkg_name2 = vconf_get_str(VCONFKEY_LOCKSCREEN_SHORTCUT2); + pkg_name3 = vconf_get_str(VCONFKEY_LOCKSCREEN_SHORTCUT3); + pkg_name4 = vconf_get_str(VCONFKEY_LOCKSCREEN_SHORTCUT4); + + if((delete_icons[0] == false) && (pkg_name1 != NULL && strlen(pkg_name1) != 0)) + { + shortcuts_item_s *shortcuts_item = (shortcuts_item_s *) calloc(1, sizeof(shortcuts_item_s)); + shortcuts_item->index = 0; + shortcuts_item->item = elm_gengrid_item_append(gengrid, &gic, + (void *)shortcuts_item, NULL, (void *)shortcuts_item); + } + if((delete_icons[1] == false) && (pkg_name2 != NULL && strlen(pkg_name2) != 0)) + { + shortcuts_item_s *shortcuts_item = (shortcuts_item_s *) calloc(1, sizeof(shortcuts_item_s)); + shortcuts_item->index = 1; + shortcuts_item->item = elm_gengrid_item_append(gengrid, &gic, + (void *)shortcuts_item, NULL, (void *)shortcuts_item); + } + if((delete_icons[2] == false) && (pkg_name3 != NULL && strlen(pkg_name3) != 0)) + { + shortcuts_item_s *shortcuts_item = (shortcuts_item_s *) calloc(1, sizeof(shortcuts_item_s)); + shortcuts_item->index = 2; + shortcuts_item->item = elm_gengrid_item_append(gengrid, &gic, + (void *)shortcuts_item, NULL, (void *)shortcuts_item); + } + if((delete_icons[3] == false) && (pkg_name4 != NULL && strlen(pkg_name4) != 0)) + { + shortcuts_item_s *shortcuts_item = (shortcuts_item_s *) calloc(1, sizeof(shortcuts_item_s)); + shortcuts_item->index = 3; + shortcuts_item->item = elm_gengrid_item_append(gengrid, &gic, + (void *)shortcuts_item, NULL, (void *)shortcuts_item); + } + + if(pkg_name1 != NULL) + { + free(pkg_name1); + pkg_name1 = NULL; + } + if(pkg_name2 != NULL) + { + free(pkg_name2); + pkg_name2 = NULL; + } + if(pkg_name3 != NULL) + { + free(pkg_name3); + pkg_name3 = NULL; + } + if(pkg_name4 != NULL) + { + free(pkg_name4); + pkg_name4 = NULL; + } +} + +static Evas_Object *_lockscreen_options_grid_content_get_e(void *data, + Evas_Object * obj, + const char *part) +{ + char *icon_path = NULL; + Evas_Object *icon = NULL; + Evas_Object *button = NULL; + Evas_Object *layout = NULL; + shortcuts_item_s *shortcuts_item = (shortcuts_item_s *) data; + LOCKOPTIONS_DBG("_lockscreen_options_grid_content_get."); + + if (shortcuts_item == NULL) { + return NULL; + } + + if (!strcmp(part, "elm.swallow.icon")) { + layout = + lockscreen_options_util_create_layout(obj, + EDJE_DIR + "/lockscreen-options.edj", + "lockscreen.options.shortcuts.thumbnail.main"); + icon_path = _lockscreen_options_icon_path_get_e(shortcuts_item); + icon = elm_icon_add(layout); + if (icon_path) { + elm_icon_file_set(icon, icon_path, NULL); + elm_object_part_content_set(layout, + "elm.swallow.contents", + icon); + elm_icon_aspect_fixed_set(icon, EINA_FALSE); + button = elm_button_add(layout); + elm_object_style_set(button, "icon_minus"); + evas_object_pass_events_set(button, 1); + evas_object_repeat_events_set(button, 0); + evas_object_propagate_events_set(button, 0); + elm_object_part_content_set(layout, + "elm.swallow.button", + button); + evas_object_smart_callback_add(button, "clicked", + _lockscreen_options_shortcuts_thumbnail_delete_cb_e, + shortcuts_item); + free(icon_path); + icon_path = NULL; + } else { + return NULL; + } + return layout; + } + return NULL; +} + +static void _lockscreen_options_shortcuts_help_text_create_e(Evas_Object * parent) +{ + Evas_Object *title_label = NULL; + char buffer[1024] = { 0 }; + + title_label = elm_label_add(parent); + snprintf(buffer, sizeof(buffer), + "%s", + lockscreen_optoins_get_string + (IDS_LOCKSCREEN_OPTIONS_DRAG_DROP_SHORTCUTS)); + elm_object_text_set(title_label, buffer); + evas_object_show(title_label); + elm_object_part_content_set(parent, "shortcuts.edit.help.title", + title_label); +} + +static void _lockscreen_options_shortcuts_gengrid_create_e(Evas_Object * parent) +{ + char *pkg_name1 = NULL; + char *pkg_name2 = NULL; + char *pkg_name3 = NULL; + char *pkg_name4 = NULL; + pkg_name1 = vconf_get_str(VCONFKEY_LOCKSCREEN_SHORTCUT1); + pkg_name2 = vconf_get_str(VCONFKEY_LOCKSCREEN_SHORTCUT2); + pkg_name3 = vconf_get_str(VCONFKEY_LOCKSCREEN_SHORTCUT3); + pkg_name4 = vconf_get_str(VCONFKEY_LOCKSCREEN_SHORTCUT4); + + Evas_Coord window_width = 0; + Evas_Coord window_height = 0; + Evas_Object *gengrid = NULL; + + gengrid = elm_gengrid_add(parent); + ecore_x_window_size_get(ecore_x_window_root_first_get(), &window_width, &window_height); + elm_gengrid_item_size_set(gengrid, window_width / 4, + GENGRID_ITEM_HEIGHT * window_height / + WINDOW_HEIGHT); + elm_gengrid_align_set(gengrid, 0.5, 0.0); + elm_gengrid_reorder_mode_set(gengrid, EINA_TRUE), + evas_object_show(gengrid); + elm_object_part_content_set(parent, "shortcuts.gengrid", gengrid); + + evas_object_smart_callback_add(gengrid, "moved", + _lockscreen_options_grid_moved_cb_e, NULL); + options_shortcuts_edit_view_data->gengrid = gengrid; + + gic.item_style = "default_grid"; + gic.func.text_get = NULL; + gic.func.content_get = _lockscreen_options_grid_content_get_e; + gic.func.state_get = NULL; + gic.func.del = _lockscreen_options_grid_del_e; + + if(pkg_name1 != NULL && strlen(pkg_name1) != 0) + { + shortcuts_item_s *shortcuts_item = (shortcuts_item_s *) calloc(1, sizeof(shortcuts_item_s)); + shortcuts_item->index = 0; + shortcuts_item->item = elm_gengrid_item_append(gengrid, &gic, + (void *)shortcuts_item, NULL, (void *)shortcuts_item); + } + + if(pkg_name2 != NULL && strlen(pkg_name2) != 0) + { + shortcuts_item_s *shortcuts_item = (shortcuts_item_s *) calloc(1, sizeof(shortcuts_item_s)); + shortcuts_item->index = 1; + shortcuts_item->item = elm_gengrid_item_append(gengrid, &gic, + (void *)shortcuts_item, NULL, (void *)shortcuts_item); + } + + if(pkg_name3 != NULL && strlen(pkg_name3) != 0) + { + shortcuts_item_s *shortcuts_item = (shortcuts_item_s *) calloc(1, sizeof(shortcuts_item_s)); + shortcuts_item->index = 2; + shortcuts_item->item = elm_gengrid_item_append(gengrid, &gic, + (void *)shortcuts_item, NULL, (void *)shortcuts_item); + } + + if(pkg_name4 != NULL && strlen(pkg_name4) != 0) + { + shortcuts_item_s *shortcuts_item = (shortcuts_item_s *) calloc(1, sizeof(shortcuts_item_s)); + shortcuts_item->index = 3; + shortcuts_item->item = elm_gengrid_item_append(gengrid, &gic, + (void *)shortcuts_item, NULL, (void *)shortcuts_item); + } + + if(pkg_name1 != NULL) + { + free(pkg_name1); + pkg_name1 = NULL; + } + if(pkg_name2 != NULL) + { + free(pkg_name2); + pkg_name2 = NULL; + } + if(pkg_name3 != NULL) + { + free(pkg_name3); + pkg_name3 = NULL; + } + if(pkg_name4 != NULL) + { + free(pkg_name4); + pkg_name4 = NULL; + } +} + +void lockscreen_options_shortcuts_create_edit_view(void *data) +{ + lockscreen_options_ug_data *ug_data = + (lockscreen_options_ug_data *) data; + if (ug_data == NULL) { + LOCKOPTIONS_ERR("ug is NULL"); + return; + } + Evas_Object *navi_bar = ug_data->navi_bar; + Evas_Object *layout = NULL; + + if (navi_bar == NULL) { + LOCKOPTIONS_ERR("navi_bar is null."); + return; + } + + options_shortcuts_edit_view_data = + (options_shortcuts_edit_view_s *) calloc(1, + sizeof + (options_shortcuts_edit_view_s)); + options_shortcuts_edit_view_data->ug_data = ug_data; + + layout = + lockscreen_options_util_create_layout(navi_bar, + EDJE_DIR + "/lockscreen-options.edj", + "lockscreen.options.shortcuts.main"); + _lockscreen_options_shortcuts_help_text_create_e(layout); + _lockscreen_options_shortcuts_gengrid_create_e(layout); + + Evas_Object *done_button = elm_button_add(navi_bar); + Evas_Object *cancel_button = elm_button_add(navi_bar); + elm_object_style_set(done_button, "naviframe/toolbar/default"); + elm_object_text_set(done_button, _S("IDS_COM_SK_DONE")); + evas_object_smart_callback_add(done_button, "clicked", _lockscreen_options_shortcuts_done_cb_e, ug_data); + elm_object_style_set(cancel_button, "naviframe/toolbar/default"); + elm_object_text_set(cancel_button, _S("IDS_COM_POP_CANCEL")); + evas_object_smart_callback_add(cancel_button, "clicked", _lockscreen_options_shortcuts_back_cb_e, ug_data); + + evas_object_event_callback_add(layout, EVAS_CALLBACK_DEL, + _lockscreen_options_shortcuts_delete_cb_e, NULL); + + Elm_Object_Item *navi_item = elm_naviframe_item_push(navi_bar, lockscreen_optoins_get_string(IDS_LOCKSCREEN_OPTIONS_EDIT_SHORTCUTS), NULL, NULL, layout, NULL); + elm_object_item_part_content_set(navi_item, "prev_btn", NULL); + elm_object_item_part_content_set(navi_item , "toolbar_button1", done_button); + elm_object_item_part_content_set(navi_item , "toolbar_button2", cancel_button); + + int i; + for(i = 0;i < 4;i++) + { + delete_icons[i] = false; + } +} diff --git a/lock-setting/lockscreen-options/src/lockscreen-options-shortcuts.c b/lock-setting/lockscreen-options/src/lockscreen-options-shortcuts.c new file mode 100755 index 0000000..5844852 --- /dev/null +++ b/lock-setting/lockscreen-options/src/lockscreen-options-shortcuts.c @@ -0,0 +1,803 @@ + /* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.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.tizenopensource.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-util.h" +#include "lockscreen-options-shortcuts.h" +#include "lockscreen-options-shortcuts-edit.h" + + +#define EDJE_DIR "/usr/ug/res/edje/ug-lockscreen-options-efl" +#define IMAGES_DIR "/usr/ug/res/images/ug-lockscreen-options-efl" +#define GENGRID_ITEM_HEIGHT 188 +#define WINDOW_HEIGHT 1280 + +typedef enum { + SET_SHORTCUTS_APP1 = 0, + SET_SHORTCUTS_APP2, + SET_SHORTCUTS_APP3, + SET_SHORTCUTS_APP4 +} shortcuts_type_t; + +typedef struct { + int index; + char *app_icon; + char *app_name; + char *pkg_name; +} app_list_item_s; + +typedef struct { + int index; + char *pkg_name; + Elm_Object_Item *item; +} shortcuts_item_s; + +typedef struct { + lockscreen_options_ug_data *ug_data; + Evas_Object *gengrid; + Eina_List *app_list; + shortcuts_type_t shortcuts_type; + Elm_Object_Item *selected_gengrid_item; + Eina_Bool is_moved; +} options_shortcuts_view_s; + +static Elm_Gengrid_Item_Class gic; +static Elm_Genlist_Item_Class ltc; +static options_shortcuts_view_s *options_shortcuts_view_data = NULL; +static Evas_Object *edit_item = NULL; + +static Eina_Bool _lockscreen_options_package_name_compare(const char *pkg_name) +{ + char *temp_name = NULL; + + temp_name = vconf_get_str(VCONFKEY_LOCKSCREEN_SHORTCUT1); + if ((temp_name != NULL) && (strcmp(pkg_name, temp_name) == 0)) { + LOCKOPTIONS_DBG("pkg_name is %s", pkg_name); + free(temp_name); + temp_name = NULL; + return EINA_TRUE; + } + + temp_name = vconf_get_str(VCONFKEY_LOCKSCREEN_SHORTCUT2); + if ((temp_name != NULL) && (strcmp(pkg_name, temp_name) == 0)) { + LOCKOPTIONS_DBG("pkg_name is %s", pkg_name); + free(temp_name); + temp_name = NULL; + return EINA_TRUE; + } + + temp_name = vconf_get_str(VCONFKEY_LOCKSCREEN_SHORTCUT3); + if ((temp_name != NULL) && (strcmp(pkg_name, temp_name) == 0)) { + LOCKOPTIONS_DBG("pkg_name is %s", pkg_name); + free(temp_name); + temp_name = NULL; + return EINA_TRUE; + } + + temp_name = vconf_get_str(VCONFKEY_LOCKSCREEN_SHORTCUT4); + if ((temp_name != NULL) && (strcmp(pkg_name, temp_name) == 0)) { + LOCKOPTIONS_DBG("pkg_name is %s", pkg_name); + free(temp_name); + temp_name = NULL; + return EINA_TRUE; + } + + return EINA_FALSE; +} + +static char *_lockscreen_options_icon_path_get(shortcuts_item_s * + shortcuts_item) +{ + ail_appinfo_h handle; + ail_error_e ret; + char *pkg_name = NULL; + char *temp = NULL; + char *icon_path = NULL; + shortcuts_type_t shortcuts_type = SET_SHORTCUTS_APP1; + + if (shortcuts_item == NULL) { + return NULL; + } + + shortcuts_type = shortcuts_item->index; + + switch (shortcuts_type) { + case SET_SHORTCUTS_APP1: + pkg_name = vconf_get_str(VCONFKEY_LOCKSCREEN_SHORTCUT1); + LOCKOPTIONS_ERR("pkg_name is %s", pkg_name); + break; + case SET_SHORTCUTS_APP2: + pkg_name = vconf_get_str(VCONFKEY_LOCKSCREEN_SHORTCUT2); + LOCKOPTIONS_ERR("pkg_name is %s", pkg_name); + break; + case SET_SHORTCUTS_APP3: + pkg_name = vconf_get_str(VCONFKEY_LOCKSCREEN_SHORTCUT3); + LOCKOPTIONS_ERR("pkg_name is %s", pkg_name); + break; + case SET_SHORTCUTS_APP4: + pkg_name = vconf_get_str(VCONFKEY_LOCKSCREEN_SHORTCUT4); + LOCKOPTIONS_ERR("pkg_name is %s", pkg_name); + break; + default: + break; + } + + if (pkg_name == NULL || strlen(pkg_name) == 0) { + LOCKOPTIONS_ERR("pkg_name is NULL"); + return NULL; + } + shortcuts_item->pkg_name = strdup(pkg_name); + + ret = ail_get_appinfo(pkg_name, &handle); + if (ret != AIL_ERROR_OK) { + LOCKOPTIONS_ERR("Fail to ail_get_appinfo"); + return NULL; + } + + ret = ail_appinfo_get_str(handle, AIL_PROP_ICON_STR, &temp); + if (ret != AIL_ERROR_OK) { + LOCKOPTIONS_ERR("Fail to ail_appinfo_get_str"); + ail_destroy_appinfo(handle); + return NULL; + } + + if (temp) { + icon_path = strdup(temp); + } + + ret = ail_destroy_appinfo(handle); + if (ret != AIL_ERROR_OK) { + LOCKOPTIONS_ERR("Fail to ail_destroy_appinfo"); + } + + if (pkg_name) { + free(pkg_name); + pkg_name = NULL; + } + return icon_path; +} + +static void _lockscreen_options_shortcuts_set(shortcuts_type_t shortcuts_type, + const char *pkg_name) +{ + int ret = 0; + + switch (shortcuts_type) { + case SET_SHORTCUTS_APP1: + ret = vconf_set_str(VCONFKEY_LOCKSCREEN_SHORTCUT1, pkg_name); + if (ret != 0) { + LOCKOPTIONS_ERR("set failed"); + } + break; + case SET_SHORTCUTS_APP2: + ret = vconf_set_str(VCONFKEY_LOCKSCREEN_SHORTCUT2, pkg_name); + if (ret != 0) { + LOCKOPTIONS_ERR("set failed"); + } + break; + case SET_SHORTCUTS_APP3: + ret = vconf_set_str(VCONFKEY_LOCKSCREEN_SHORTCUT3, pkg_name); + if (ret != 0) { + LOCKOPTIONS_ERR("set failed"); + } + break; + case SET_SHORTCUTS_APP4: + ret = vconf_set_str(VCONFKEY_LOCKSCREEN_SHORTCUT4, pkg_name); + if (ret != 0) { + LOCKOPTIONS_ERR("set failed"); + } + break; + default: + break; + } +} + +ail_cb_ret_e _lockscreen_options_appinfo_func(const ail_appinfo_h appinfo, + void *user_data) +{ + char *pkg_name = NULL; + char *app_name = NULL; + char *app_icon = NULL; + int index = 0; + Eina_Bool is_same = EINA_FALSE; + + if (AIL_ERROR_OK != + ail_appinfo_get_str(appinfo, AIL_PROP_PACKAGE_STR, &pkg_name)) { + LOCKOPTIONS_ERR("cannot get package name"); + } + + is_same = _lockscreen_options_package_name_compare(pkg_name); + + LOCKOPTIONS_DBG("is_same = %d", is_same); + if (is_same == EINA_FALSE) { + app_list_item_s *list_item = + (app_list_item_s *) calloc(1, sizeof(app_list_item_s)); + + if (pkg_name) { + list_item->pkg_name = strdup(pkg_name); + } + + if (AIL_ERROR_OK != + ail_appinfo_get_str(appinfo, AIL_PROP_NAME_STR, + &app_name)) { + LOCKOPTIONS_ERR("cannot get App name"); + } + if (AIL_ERROR_OK != + ail_appinfo_get_str(appinfo, AIL_PROP_ICON_STR, + &app_icon)) { + LOCKOPTIONS_ERR("cannot get App icon"); + } + list_item->index = index; + if (app_name) { + list_item->app_name = strdup(app_name); + } + if (app_icon && (strcmp(app_icon, "(null)") != 0)) { + list_item->app_icon = strdup(app_icon); + } else { + list_item->app_icon = + strdup(IMAGES_DIR "/mainmenu_icon.png"); + } + options_shortcuts_view_data->app_list = + eina_list_append(options_shortcuts_view_data->app_list, + list_item); + index++; + } + + return AIL_CB_RET_CONTINUE; +} + +void _lockscreen_options_list_all_packages() +{ + ail_filter_h filter; + ail_error_e ret; + + ret = ail_filter_new(&filter); + if (ret != AIL_ERROR_OK) { + return; + } + + ret = ail_filter_add_bool(filter, AIL_PROP_X_SLP_TASKMANAGE_BOOL, true); + if (ret != AIL_ERROR_OK) { + return; + } + + ret = ail_filter_add_bool(filter, AIL_PROP_NODISPLAY_BOOL, false); + if (ret != AIL_ERROR_OK) { + return; + } + + ret = ail_filter_add_str(filter, AIL_PROP_TYPE_STR, "Application"); + if (ret != AIL_ERROR_OK) { + return; + } + + ail_filter_list_appinfo_foreach(filter, + _lockscreen_options_appinfo_func, NULL); + ail_filter_destroy(filter); +} + +static void _lockscreen_options_select_apps_delete_cb(void *data, Evas * e, + Evas_Object * obj, + void *event_info) +{ + void *list_item_data = NULL; + + EINA_LIST_FREE(options_shortcuts_view_data->app_list, list_item_data) { + if (list_item_data) { + free(list_item_data); + list_item_data = NULL; + } + } +} + +static void _lockscreen_options_shortcuts_delete_cb(void *data, Evas * e, + Evas_Object * obj, + void *event_info) +{ + void *list_item_data = NULL; + + if (options_shortcuts_view_data == NULL) { + return; + } + + EINA_LIST_FREE(options_shortcuts_view_data->app_list, list_item_data) { + if (list_item_data) { + free(list_item_data); + list_item_data = NULL; + } + } + if (options_shortcuts_view_data->gengrid) { + evas_object_del(options_shortcuts_view_data->gengrid); + options_shortcuts_view_data->gengrid = NULL; + } + if (options_shortcuts_view_data) { + free(options_shortcuts_view_data); + options_shortcuts_view_data = NULL; + } +} + +static void _lockscreen_options_shortcuts_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; + } + Evas_Object *navi_bar = ug_data->navi_bar; + + if (navi_bar == NULL) { + LOCKOPTIONS_ERR("navi_bar is null."); + return; + } + + elm_naviframe_item_pop(navi_bar); +} + +//not used now +static void _lockscreen_options_shortcuts_thumbnail_delete_cb(void *data, + Evas_Object * obj, + void *event_info) +{ + LOCKOPTIONS_DBG("_lockscreen_options_shortcuts_thumbnail_delete_cb"); + Elm_Object_Item *object_item = NULL; + shortcuts_item_s *shortcuts_item = (shortcuts_item_s *) data; + + if (shortcuts_item == NULL) { + return; + } + + _lockscreen_options_shortcuts_set(shortcuts_item->index, ""); + + object_item = + elm_gengrid_first_item_get(options_shortcuts_view_data->gengrid); + while (object_item) { + shortcuts_item_s *shortcuts_item_info = NULL; + shortcuts_item_info = elm_object_item_data_get(object_item); + if (shortcuts_item->index == shortcuts_item_info->index) { + elm_gengrid_item_update(object_item); + } + object_item = elm_gengrid_item_next_get(object_item); + } +} + +//not used now +static void _lockscreen_options_grid_moved_cb(void *data, Evas_Object * obj, + void *event_info) +{ + int index = 0; + Elm_Object_Item *object_item = NULL; + shortcuts_item_s *shortcuts_item = NULL; + + options_shortcuts_view_data->is_moved = EINA_TRUE; + + object_item = + elm_gengrid_first_item_get(options_shortcuts_view_data->gengrid); + while (object_item) { + shortcuts_item = elm_object_item_data_get(object_item); + if (shortcuts_item) { + LOCKOPTIONS_DBG + ("index = %d, shortcuts_item->pkg_name = %s.", + index, shortcuts_item->pkg_name); + shortcuts_item->index = index; + if ((shortcuts_item->pkg_name == NULL) + || (strlen(shortcuts_item->pkg_name) == 0) + || (strcmp(shortcuts_item->pkg_name, "(null)") == + 0)) { + _lockscreen_options_shortcuts_set(index, ""); + } else { + _lockscreen_options_shortcuts_set(index, + shortcuts_item->pkg_name); + } + } + object_item = elm_gengrid_item_next_get(object_item); + index++; + } +} + +static void _lockscreen_options_gengrid_select_cb(void *data, Evas_Object * obj, + const char *emission, + const char *source) +{ + shortcuts_item_s *shortcuts_item = (shortcuts_item_s *) data; + + if (shortcuts_item == NULL + || options_shortcuts_view_data->is_moved == EINA_TRUE) { + options_shortcuts_view_data->is_moved = EINA_FALSE; + return; + } + LOCKOPTIONS_DBG("_lockscreen_options_gengrid_select_cb."); + if (shortcuts_item->item != NULL) { + options_shortcuts_view_data->selected_gengrid_item = + shortcuts_item->item; + elm_gengrid_item_selected_set(shortcuts_item->item, EINA_FALSE); + _lockscreen_options_select_applications_create + (shortcuts_item->index); + } +} + +static Evas_Object *_lockscreen_options_grid_content_get(void *data, + Evas_Object * obj, + const char *part) +{ + char *icon_path = NULL; + Evas_Object *icon = NULL; + Evas_Object *layout = NULL; + shortcuts_item_s *shortcuts_item = (shortcuts_item_s *) data; + LOCKOPTIONS_DBG("_lockscreen_options_grid_content_get."); + + if (shortcuts_item == NULL) { + return NULL; + } + + if (!strcmp(part, "elm.swallow.icon")) { + layout = + lockscreen_options_util_create_layout(obj, + EDJE_DIR + "/lockscreen-options.edj", + "lockscreen.options.shortcuts.thumbnail.main"); + icon_path = _lockscreen_options_icon_path_get(shortcuts_item); + icon = elm_icon_add(layout); + if (icon_path) { + elm_icon_file_set(icon, icon_path, NULL); + elm_object_part_content_set(layout, + "elm.swallow.contents", + icon); + elm_icon_aspect_fixed_set(icon, EINA_FALSE); + /*button = elm_button_add(layout); + elm_object_style_set(button, "minus/extended"); + evas_object_pass_events_set(button, 1); + evas_object_repeat_events_set(button, 0); + evas_object_propagate_events_set(button, 0); + elm_object_part_content_set(layout, + "elm.swallow.button", + button); + evas_object_smart_callback_add(button, "clicked", + _lockscreen_options_shortcuts_thumbnail_delete_cb, + shortcuts_item);*/ + free(icon_path); + icon_path = NULL; + } else { + elm_icon_file_set(icon, IMAGES_DIR "/icon_add.png", + NULL); + elm_object_part_content_set(layout, + "elm.swallow.contents", + icon); + } + edje_object_signal_callback_add(elm_layout_edje_get(layout), + "mouse,clicked,*", "background", + _lockscreen_options_gengrid_select_cb, + shortcuts_item); + return layout; + } + return NULL; +} + +static void _lockscreen_options_grid_del(void *data, Evas_Object * obj) +{ + shortcuts_item_s *shortcuts_item = (shortcuts_item_s *) data; + + if (shortcuts_item == NULL) { + return; + } + if (shortcuts_item->pkg_name) { + free(shortcuts_item->pkg_name); + shortcuts_item->pkg_name = NULL; + } + free(shortcuts_item); + shortcuts_item = NULL; +} + +static void _lockscreen_options_shortcuts_help_text_create(Evas_Object * parent) +{ + Evas_Object *title_label = NULL; + Evas_Object *contents_label = NULL; + char buffer[1024] = { 0 }; + + title_label = elm_label_add(parent); + snprintf(buffer, sizeof(buffer), + "%s", + lockscreen_optoins_get_string + (IDS_LOCKSCREEN_OPTIONS_SET_SHORTCUTS_ON_LOCKSCREEN)); + elm_object_text_set(title_label, buffer); + evas_object_show(title_label); + elm_object_part_content_set(parent, "shortcuts.help.title", + title_label); + + contents_label = elm_label_add(parent); + snprintf(buffer, sizeof(buffer), + "%s", + lockscreen_optoins_get_string + (IDS_LOCKSCREEN_OPTIONS_TAP_SHORTCUTS)); + elm_object_text_set(contents_label, buffer); + evas_object_show(contents_label); + elm_object_part_content_set(parent, "shortcuts.help.contents", + contents_label); +} + +static void _lockscreen_options_shortcuts_gengrid_create(Evas_Object * parent) +{ + Evas_Coord window_width = 0; + Evas_Coord window_height = 0; + Evas_Object *gengrid = NULL; + int index = 0; + + gengrid = elm_gengrid_add(parent); + ecore_x_window_size_get(ecore_x_window_root_first_get(), &window_width, + &window_height); + elm_gengrid_item_size_set(gengrid, window_width / 4, + GENGRID_ITEM_HEIGHT * window_height / + WINDOW_HEIGHT); + elm_gengrid_align_set(gengrid, 0.5, 0.0); + //elm_gengrid_reorder_mode_set(gengrid, EINA_TRUE), + evas_object_show(gengrid); + elm_object_part_content_set(parent, "shortcuts.gengrid", gengrid); + + /*evas_object_smart_callback_add(gengrid, "moved", + _lockscreen_options_grid_moved_cb, NULL);*/ + options_shortcuts_view_data->gengrid = gengrid; + + gic.item_style = "default_grid"; + gic.func.text_get = NULL; + gic.func.content_get = _lockscreen_options_grid_content_get; + gic.func.state_get = NULL; + gic.func.del = _lockscreen_options_grid_del; + + for (index = 0; index <= SET_SHORTCUTS_APP4; index++) { + shortcuts_item_s *shortcuts_item = + (shortcuts_item_s *) calloc(1, sizeof(shortcuts_item_s)); + shortcuts_item->index = index; + shortcuts_item->item = + elm_gengrid_item_append(gengrid, &gic, + (void *)shortcuts_item, NULL, + (void *)shortcuts_item); + } +} + +static char *_lockscreen_options_gl_text_get(void *data, Evas_Object * obj, + const char *part) +{ + int index = (int)data; + app_list_item_s *list_item = (app_list_item_s *) + eina_list_nth(options_shortcuts_view_data->app_list, index); + + if (list_item == NULL || list_item->app_name == NULL) { + return NULL; + } + + if (!strcmp(part, "elm.text")) { + return strdup(list_item->app_name); + } + return NULL; +} + +static Evas_Object *_lockscreen_options_gl_content_get(void *data, + Evas_Object * obj, + const char *part) +{ + int index = (int)data; + Evas_Object *icon = NULL; + app_list_item_s *list_item = (app_list_item_s *) + eina_list_nth(options_shortcuts_view_data->app_list, index); + + if (list_item == NULL || list_item->app_icon == NULL) { + return NULL; + } + + if (!strcmp(part, "elm.icon") || !strcmp(part, "elm.swallow.icon")) { + icon = elm_icon_add(obj); + elm_icon_file_set(icon, list_item->app_icon, NULL); + return icon; + } + + return NULL; +} + +static void _lockscreen_options_gl_options_sel(void *data, Evas_Object * obj, + void *event_info) +{ + Elm_Object_Item *item = (Elm_Object_Item *) event_info; + int index = (int)data; + app_list_item_s *list_item = (app_list_item_s *) + eina_list_nth(options_shortcuts_view_data->app_list, index); + + if (list_item == NULL || list_item->pkg_name == NULL) { + return; + } + LOCKOPTIONS_DBG("list_item->pkg_name = %s", list_item->pkg_name); + if (item != NULL) { + elm_genlist_item_selected_set(item, EINA_FALSE); + _lockscreen_options_shortcuts_set + (options_shortcuts_view_data->shortcuts_type, + list_item->pkg_name); + elm_gengrid_item_update + (options_shortcuts_view_data->selected_gengrid_item); + } + elm_naviframe_item_pop(options_shortcuts_view_data->ug_data->navi_bar); + Eina_Bool is_have = EINA_FALSE; + is_have = lockscreen_options_shortcuts_check_items(); + if(is_have == EINA_TRUE){ + elm_object_disabled_set(edit_item, EINA_FALSE); + }else{ + elm_object_disabled_set(edit_item, EINA_TRUE); + } +} + +void _lockscreen_options_select_applications_create(shortcuts_type_t + shortcuts_type) +{ + Evas_Object *genlist = NULL; + int index = 0; + + _lockscreen_options_list_all_packages(); + + options_shortcuts_view_data->shortcuts_type = shortcuts_type; + genlist = + elm_genlist_add(options_shortcuts_view_data->ug_data->navi_bar); + + ltc.item_style = "1text.1icon.2"; + ltc.func.text_get = _lockscreen_options_gl_text_get; + ltc.func.content_get = _lockscreen_options_gl_content_get; + ltc.func.state_get = NULL; + ltc.func.del = NULL; + + for (index = 0; + index < eina_list_count(options_shortcuts_view_data->app_list); + index++) { + elm_genlist_item_append(genlist, <c, (void *)index, NULL, + ELM_GENLIST_ITEM_NONE, + _lockscreen_options_gl_options_sel, + (void *)index); + } + + evas_object_event_callback_add(genlist, EVAS_CALLBACK_DEL, + _lockscreen_options_select_apps_delete_cb, + NULL); + elm_naviframe_item_push(options_shortcuts_view_data->ug_data->navi_bar, lockscreen_optoins_get_string(IDS_LOCKSCREEN_OPTIONS_SELECT_APPLICATIONS), NULL, NULL, genlist, NULL); /* the same tile */ +} + +static void _lockscreen_options_shortcuts_edit_cb(void *data, Evas_Object * obj, void *event_info) +{ + lockscreen_options_shortcuts_create_edit_view(data); +} + +void lockscreen_options_shortcuts_create_view(void *data) +{ + lockscreen_options_ug_data *ug_data = + (lockscreen_options_ug_data *) data; + if (ug_data == NULL) { + return; + } + Evas_Object *navi_bar = ug_data->navi_bar; + Evas_Object *layout = NULL; + + if (navi_bar == NULL) { + LOCKOPTIONS_ERR("navi_bar is null."); + return; + } + + options_shortcuts_view_data = + (options_shortcuts_view_s *) calloc(1, + sizeof + (options_shortcuts_view_s)); + options_shortcuts_view_data->ug_data = ug_data; + + layout = + lockscreen_options_util_create_layout(navi_bar, + EDJE_DIR + "/lockscreen-options.edj", + "lockscreen.options.shortcuts.main"); + _lockscreen_options_shortcuts_help_text_create(layout); + _lockscreen_options_shortcuts_gengrid_create(layout); + + edit_item= elm_button_add(navi_bar); + elm_object_style_set(edit_item, "naviframe/toolbar/default"); + elm_object_text_set(edit_item, _S("IDS_COM_BODY_EDIT")); + evas_object_smart_callback_add(edit_item, "clicked", _lockscreen_options_shortcuts_edit_cb, ug_data); + + Evas_Object *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_shortcuts_back_cb, ug_data); + evas_object_event_callback_add(layout, EVAS_CALLBACK_DEL, + _lockscreen_options_shortcuts_delete_cb, NULL); + + + Elm_Object_Item *navi_item = elm_naviframe_item_push(navi_bar, lockscreen_optoins_get_string(IDS_LOCKSCREEN_OPTIONS_SET_SHORTCUTS), back_button, NULL, layout, NULL); /* the same tile */ + elm_object_item_part_content_set(navi_item , "toolbar_button1", edit_item); + + Eina_Bool is_have = EINA_FALSE; + is_have = lockscreen_options_shortcuts_check_items(); + if(is_have == EINA_TRUE){ + elm_object_disabled_set(edit_item, EINA_FALSE); + }else{ + elm_object_disabled_set(edit_item, EINA_TRUE); + } +} + +void lockscreen_options_shortcuts_update_view() +{ + Elm_Object_Item *object_item = NULL; + + object_item = elm_gengrid_first_item_get(options_shortcuts_view_data->gengrid); + while (object_item) { + elm_gengrid_item_update(object_item); + object_item = elm_gengrid_item_next_get(object_item); + } + + Eina_Bool is_have = EINA_FALSE; + is_have = lockscreen_options_shortcuts_check_items(); + if(is_have == EINA_TRUE){ + elm_object_disabled_set(edit_item, EINA_FALSE); + }else{ + elm_object_disabled_set(edit_item, EINA_TRUE); + } +} + +Eina_Bool lockscreen_options_shortcuts_check_items() +{ + char *pkg_name1 = NULL; + char *pkg_name2 = NULL; + char *pkg_name3 = NULL; + char *pkg_name4 = NULL; + Eina_Bool is_have = EINA_FALSE; + + pkg_name1 = vconf_get_str(VCONFKEY_LOCKSCREEN_SHORTCUT1); + pkg_name2 = vconf_get_str(VCONFKEY_LOCKSCREEN_SHORTCUT2); + pkg_name3 = vconf_get_str(VCONFKEY_LOCKSCREEN_SHORTCUT3); + pkg_name4 = vconf_get_str(VCONFKEY_LOCKSCREEN_SHORTCUT4); + + if((pkg_name1 == NULL || strlen(pkg_name1) == 0) && (pkg_name2 == NULL || strlen(pkg_name2) == 0) + && (pkg_name3 == NULL || strlen(pkg_name3) == 0) && (pkg_name4 == NULL || strlen(pkg_name4) == 0)) + { + is_have = EINA_FALSE; + //elm_object_disabled_set(edit_item, EINA_TRUE); + } + else + { + is_have = EINA_TRUE; + //elm_object_disabled_set(edit_item, EINA_FALSE); + } + if(pkg_name1 != NULL) + { + free(pkg_name1); + pkg_name1 = NULL; + } + if(pkg_name2 != NULL) + { + free(pkg_name2); + pkg_name2 = NULL; + } + if(pkg_name3 != NULL) + { + free(pkg_name3); + pkg_name3 = NULL; + } + if(pkg_name4 != NULL) + { + free(pkg_name4); + pkg_name4 = NULL; + } + return is_have; +} diff --git a/lock-setting/lockscreen-options/src/lockscreen-options-util.c b/lock-setting/lockscreen-options/src/lockscreen-options-util.c new file mode 100755 index 0000000..4d3afb2 --- /dev/null +++ b/lock-setting/lockscreen-options/src/lockscreen-options-util.c @@ -0,0 +1,174 @@ + /* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.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.tizenopensource.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_ST_BODY_SHORTCUTS", + "IDS_ST_BODY_SET_SHORTCUTS_ON_LOCK_SCREEN", +#if USE_TITLE_AND_CAMERA + "Lock screen title", + "Show title text on the lock screen", +#endif + //"Event notifications", + "IDS_IDLE_MBODY_EVENT_NOTIFICATIONS", + //"View event notification on lock screen", + "IDS_IDLE_BODY_VIEW_EVENT_NOTIFICATIONS_ON_THE_LOCK_SCREEN", + "Context-aware notifications", + "View context-aware notifications on lock screen", +#if USE_TITLE_AND_CAMERA + "IDS_ST_MBODY_CAMERA_QUICK_ACCESS", + "IDS_ST_BODY_TAP_AND_HOLD_THE_SCREEN_WHILE_ROTATING_THE_DEVICE_TO_OPEN_CAMERA", +#endif + "IDS_ST_BODY_CLOCK", +// "Dual clock", +// "Show dual clock on lock screen when roaming", + "IDS_ST_BODY_WEATHER", + "IDS_IM_BODY_HELP_TEXT", + "IDS_ST_BODY_SHOW_HELP_TEXT_ON_LOCK_SCREEN", + "IDS_ST_BODY_SET_SHORTCUTS", + "IDS_ST_OPT_EDIT_SHORTCUTS", + "IDS_ST_BODY_SET_SHORTCUTS_ON_LOCK_SCREEN", + "IDS_ST_BODY_TAP_SHORTCUT_TO_ASSIGN_APPLICATION", + "IDS_ST_BODY_DRAG_AND_DROP_TO_CHANGE_ORDER", + "IDS_ST_BODY_SELECT_APPLICATION", + "Life Magazine" +}; + +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) { + /* get system string */ + str = dgettext("sys_string", sys_str_table[id]); + } else { + /* get application string */ + 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 new file mode 100755 index 0000000..363230e --- /dev/null +++ b/lock-setting/lockscreen-options/src/lockscreen-options.c @@ -0,0 +1,217 @@ + /* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.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.tizenopensource.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; + + /* Create Frame view */ + + 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); + + /* Add del callback for base layout */ + + 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 new file mode 100755 index 0000000..647202a --- /dev/null +++ b/lock-setting/po/CMakeLists.txt @@ -0,0 +1,26 @@ +# 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 new file mode 100644 index 0000000..7c0e6a6 --- /dev/null +++ b/lock-setting/po/ar.po @@ -0,0 +1,54 @@ +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 new file mode 100644 index 0000000..305092a --- /dev/null +++ b/lock-setting/po/az.po @@ -0,0 +1,54 @@ +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 new file mode 100644 index 0000000..1033cf8 --- /dev/null +++ b/lock-setting/po/bg.po @@ -0,0 +1,54 @@ +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 new file mode 100644 index 0000000..e6a6351 --- /dev/null +++ b/lock-setting/po/ca.po @@ -0,0 +1,54 @@ +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 new file mode 100644 index 0000000..5a6e267 --- /dev/null +++ b/lock-setting/po/cs.po @@ -0,0 +1,54 @@ +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 new file mode 100644 index 0000000..d9a26bb --- /dev/null +++ b/lock-setting/po/da.po @@ -0,0 +1,54 @@ +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 new file mode 100644 index 0000000..70a4592 --- /dev/null +++ b/lock-setting/po/de_DE.po @@ -0,0 +1,54 @@ +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 new file mode 100644 index 0000000..151b419 --- /dev/null +++ b/lock-setting/po/el_GR.po @@ -0,0 +1,54 @@ +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 new file mode 100644 index 0000000..5c14712 --- /dev/null +++ b/lock-setting/po/en.po @@ -0,0 +1,54 @@ +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 new file mode 100644 index 0000000..5c14712 --- /dev/null +++ b/lock-setting/po/en_PH.po @@ -0,0 +1,54 @@ +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 new file mode 100644 index 0000000..a1db6bc --- /dev/null +++ b/lock-setting/po/en_US.po @@ -0,0 +1,54 @@ +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 new file mode 100644 index 0000000..407f8d7 --- /dev/null +++ b/lock-setting/po/es_ES.po @@ -0,0 +1,54 @@ +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 new file mode 100644 index 0000000..a3ce4bd --- /dev/null +++ b/lock-setting/po/es_MX.po @@ -0,0 +1,54 @@ +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 new file mode 100644 index 0000000..43a19d9 --- /dev/null +++ b/lock-setting/po/es_US.po @@ -0,0 +1,51 @@ +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 new file mode 100644 index 0000000..073973f --- /dev/null +++ b/lock-setting/po/et.po @@ -0,0 +1,54 @@ +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 new file mode 100644 index 0000000..8ba1000 --- /dev/null +++ b/lock-setting/po/eu.po @@ -0,0 +1,54 @@ +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 new file mode 100644 index 0000000..856e0a0 --- /dev/null +++ b/lock-setting/po/fi.po @@ -0,0 +1,54 @@ +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 new file mode 100644 index 0000000..6982f65 --- /dev/null +++ b/lock-setting/po/fr_CA.po @@ -0,0 +1,54 @@ +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 new file mode 100644 index 0000000..0ffb78b --- /dev/null +++ b/lock-setting/po/fr_FR.po @@ -0,0 +1,54 @@ +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 new file mode 100644 index 0000000..54b0785 --- /dev/null +++ b/lock-setting/po/ga.po @@ -0,0 +1,54 @@ +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 new file mode 100644 index 0000000..d1f01aa --- /dev/null +++ b/lock-setting/po/gl.po @@ -0,0 +1,54 @@ +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 new file mode 100644 index 0000000..1dc2c7e --- /dev/null +++ b/lock-setting/po/hi.po @@ -0,0 +1,54 @@ +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 new file mode 100644 index 0000000..86c6896 --- /dev/null +++ b/lock-setting/po/hr.po @@ -0,0 +1,54 @@ +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 new file mode 100644 index 0000000..7028c02 --- /dev/null +++ b/lock-setting/po/hu.po @@ -0,0 +1,54 @@ +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 new file mode 100644 index 0000000..6916644 --- /dev/null +++ b/lock-setting/po/hy.po @@ -0,0 +1,54 @@ +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 new file mode 100644 index 0000000..5693eed --- /dev/null +++ b/lock-setting/po/is.po @@ -0,0 +1,54 @@ +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 new file mode 100644 index 0000000..d39fd3c --- /dev/null +++ b/lock-setting/po/it_IT.po @@ -0,0 +1,54 @@ +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 new file mode 100644 index 0000000..19c083d --- /dev/null +++ b/lock-setting/po/ja_JP.po @@ -0,0 +1,54 @@ +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 new file mode 100644 index 0000000..b6b045e --- /dev/null +++ b/lock-setting/po/ka.po @@ -0,0 +1,54 @@ +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 new file mode 100644 index 0000000..5f30631 --- /dev/null +++ b/lock-setting/po/kk.po @@ -0,0 +1,54 @@ +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 new file mode 100644 index 0000000..aca7f74 --- /dev/null +++ b/lock-setting/po/ko_KR.po @@ -0,0 +1,54 @@ +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 new file mode 100644 index 0000000..7067c08 --- /dev/null +++ b/lock-setting/po/lt.po @@ -0,0 +1,54 @@ +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 new file mode 100644 index 0000000..af7d248 --- /dev/null +++ b/lock-setting/po/lv.po @@ -0,0 +1,54 @@ +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 new file mode 100644 index 0000000..2cc2c03 --- /dev/null +++ b/lock-setting/po/mk.po @@ -0,0 +1,54 @@ +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 new file mode 100644 index 0000000..167c148 --- /dev/null +++ b/lock-setting/po/nb.po @@ -0,0 +1,54 @@ +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 new file mode 100644 index 0000000..9289e1b --- /dev/null +++ b/lock-setting/po/nl_NL.po @@ -0,0 +1,54 @@ +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 new file mode 100644 index 0000000..3d8cbae --- /dev/null +++ b/lock-setting/po/pl.po @@ -0,0 +1,54 @@ +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 new file mode 100644 index 0000000..8072ea6 --- /dev/null +++ b/lock-setting/po/pt_BR.po @@ -0,0 +1,54 @@ +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 new file mode 100644 index 0000000..5005ee3 --- /dev/null +++ b/lock-setting/po/pt_PT.po @@ -0,0 +1,54 @@ +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 new file mode 100644 index 0000000..d0a832f --- /dev/null +++ b/lock-setting/po/ro.po @@ -0,0 +1,54 @@ +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 new file mode 100644 index 0000000..fb29213 --- /dev/null +++ b/lock-setting/po/ru_RU.po @@ -0,0 +1,54 @@ +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 new file mode 100644 index 0000000..5c28e7d --- /dev/null +++ b/lock-setting/po/sk.po @@ -0,0 +1,54 @@ +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 new file mode 100644 index 0000000..805afbc --- /dev/null +++ b/lock-setting/po/sl.po @@ -0,0 +1,54 @@ +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 new file mode 100644 index 0000000..c74520f --- /dev/null +++ b/lock-setting/po/sr.po @@ -0,0 +1,54 @@ +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 new file mode 100644 index 0000000..ea54af4 --- /dev/null +++ b/lock-setting/po/sv.po @@ -0,0 +1,54 @@ +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 new file mode 100644 index 0000000..8c5ab33 --- /dev/null +++ b/lock-setting/po/tr_TR.po @@ -0,0 +1,54 @@ +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 new file mode 100644 index 0000000..67ef257 --- /dev/null +++ b/lock-setting/po/uk.po @@ -0,0 +1,54 @@ +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 new file mode 100644 index 0000000..280ac1b --- /dev/null +++ b/lock-setting/po/uz.po @@ -0,0 +1,54 @@ +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 new file mode 100644 index 0000000..776d32c --- /dev/null +++ b/lock-setting/po/zh_CN.po @@ -0,0 +1,54 @@ +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 new file mode 100644 index 0000000..53b912e --- /dev/null +++ b/lock-setting/po/zh_HK.po @@ -0,0 +1,54 @@ +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 new file mode 100644 index 0000000..c78be58 --- /dev/null +++ b/lock-setting/po/zh_SG.po @@ -0,0 +1,54 @@ +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 new file mode 100644 index 0000000..5859f7f --- /dev/null +++ b/lock-setting/po/zh_TW.po @@ -0,0 +1,54 @@ +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.service b/packaging/starter.service index a014745..a301939 100644 --- a/packaging/starter.service +++ b/packaging/starter.service @@ -1,13 +1,11 @@ - [Unit] Description=Start the "starter" program Before=core-efl.target -After=xorg.target e17.service -Before=menu-daemon.service +After=xorg.target [Service] ExecStart=/usr/bin/starter [Install] WantedBy=core-efl.target - +WantedBy=tizen-mobile-session.target diff --git a/packaging/starter.spec b/packaging/starter.spec index 65eb76a..a075865 100755 --- a/packaging/starter.spec +++ b/packaging/starter.spec @@ -3,23 +3,40 @@ Summary: starter Version: 0.4.11 Release: 2 Group: TO_BE/FILLED_IN -License: Flora Software License +License: TO_BE/FILLED_IN Source0: starter-%{version}.tar.gz Source1: starter.service Requires(post): /usr/bin/vconftool BuildRequires: cmake -BuildRequires: pkgconfig(glib-2.0) -BuildRequires: pkgconfig(tapi) -BuildRequires: pkgconfig(vconf) -BuildRequires: pkgconfig(heynoti) +BuildRequires: pkgconfig(ail) +BuildRequires: pkgconfig(appcore-efl) BuildRequires: pkgconfig(aul) -BuildRequires: pkgconfig(x11) -BuildRequires: pkgconfig(elementary) +BuildRequires: pkgconfig(capi-appfw-application) +BuildRequires: pkgconfig(capi-system-media-key) +BuildRequires: pkgconfig(db-util) +BuildRequires: pkgconfig(dlog) BuildRequires: pkgconfig(ecore) +BuildRequires: pkgconfig(edje) +BuildRequires: pkgconfig(eet) +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) BuildRequires: pkgconfig(utilX) -BuildRequires: pkgconfig(appcore-efl) -BuildRequires: pkgconfig(capi-appfw-application) +BuildRequires: pkgconfig(vconf) +BuildRequires: pkgconfig(x11) +BuildRequires: pkgconfig(xcomposite) +BuildRequires: pkgconfig(xext) +BuildRequires: cmake +BuildRequires: edje-bin +BuildRequires: gettext-tools + +Requires(post): /usr/bin/vconftool %description Description: Starter @@ -32,7 +49,7 @@ cmake . -DCMAKE_INSTALL_PREFIX=%{_prefix} %build -make -j1 +make -j1 %install rm -rf %{buildroot} %make_install @@ -40,6 +57,9 @@ rm -rf %{buildroot} mkdir -p %{buildroot}%{_libdir}/systemd/user/core-efl.target.wants install -m 0644 %SOURCE1 %{buildroot}%{_libdir}/systemd/user/ ln -s ../starter.service %{buildroot}%{_libdir}/systemd/user/core-efl.target.wants/starter.service +mkdir -p %{buildroot}/usr/share/license +cp -f LICENSE %{buildroot}/usr/share/license/%{name} +mkdir -p %{buildroot}/opt/data/home-daemon %post change_file_executable() @@ -50,9 +70,30 @@ change_file_executable() fi } -vconftool set -t int "memory/starter/sequence" 0 -i -u 5000 -g 5000 +GOPTION="-u 5000 -f" + +vconftool set -t int "memory/starter/sequence" 0 -i $GOPTION +vconftool set -t int "memory/starter/use_volume_key" 0 -i $GOPTION vconftool set -t string file/private/lockscreen/pkgname "org.tizen.draglock" -u 5000 -g 5000 -vconftool -i set -t int memory/idle_lock/state "0" -u 5000 -g 5000 +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 bool db/lockscreen/shortcut_display 0 $GOPTION +vconftool set -t bool db/lockscreen/event_notification_display 1 $GOPTION +vconftool set -t bool db/lockscreen/context_aware_notification_display 0 $GOPTION +vconftool set -t bool db/lockscreen/clock_display 1 $GOPTION +vconftool set -t bool db/lockscreen/weather_display 1 $GOPTION +vconftool set -t bool db/lockscreen/help_text_display 0 $GOPTION +vconftool set -t bool db/lockscreen/camera_quick_access 0 $GOPTION +vconftool set -t string file/lockscreen/shortcut1 "" $GOPTION +vconftool set -t string file/lockscreen/shortcut2 "" $GOPTION +vconftool set -t string file/lockscreen/shortcut3 "" $GOPTION +vconftool set -t string file/lockscreen/shortcut4 "" $GOPTION + +vconftool set -t string memory/menuscreen/desktop "0" -i -f +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 ln -sf /etc/init.d/rd4starter /etc/rc.d/rc4.d/S81starter ln -sf /etc/init.d/rd3starter /etc/rc.d/rc3.d/S43starter @@ -69,6 +110,16 @@ sync %{_sysconfdir}/init.d/rd4starter %{_sysconfdir}/init.d/rd3starter %{_bindir}/starter -%{_libdir}/liblock-daemon.so +/usr/ug/lib/libug-openlock-setting.so +/usr/ug/lib/libug-openlock-setting.so.0.1.0 +/usr/ug/lib/libug-lockscreen-options.so +/usr/ug/lib/libug-lockscreen-options.so.0.1.0 +/usr/ug/res/locale/*/LC_MESSAGES/* +/usr/ug/res/edje/* +/usr/ug/res/edje/ug-lockscreen-options-efl/* +/usr/ug/res/images/* +/usr/ug/res/images/ug-lockscreen-options-efl/* %{_libdir}/systemd/user/starter.service %{_libdir}/systemd/user/core-efl.target.wants/starter.service +/usr/share/license/%{name} +/opt/data/home-daemon diff --git a/rd3starter b/rd3starter index 745eafa..0304170 100755 --- a/rd3starter +++ b/rd3starter @@ -6,5 +6,21 @@ # sleep 0.1 #done -/usr/bin/starter & +while [ ! -f /tmp/amd_ready ]; +do + sleep 0.1 +done + +vconf_set_safemode() +{ + if [ -f /opt/etc/.safemode ] + then + vconftool set -t int memory/idle-screen/safemode "1" -i -f + else + vconftool set -t int memory/idle-screen/safemode "0" -i -f + fi +} +vconf_set_safemode +echo -e "<2>[${_G}menu-daemon start${C_}]" > /dev/kmsg +/usr/bin/starter & diff --git a/rd4starter b/rd4starter index 60f35e6..e5a896c 100755 --- a/rd4starter +++ b/rd4starter @@ -1,4 +1,14 @@ #!/bin/sh +vconf_set_safemode() +{ + if [ -f /opt/etc/.safemode ] + then + vconftool set -t int memory/idle-screen/safemode "1" -i -f + else + vconftool set -t int memory/idle-screen/safemode "0" -i -f + fi +} +vconf_set_safemode +echo -e "<2>[${_G}menu-daemon start${C_}]" > /dev/kmsg /usr/bin/starter & - diff --git a/src/hw_key.c b/src/hw_key.c new file mode 100755 index 0000000..211b4eb --- /dev/null +++ b/src/hw_key.c @@ -0,0 +1,347 @@ + /* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.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.tizenopensource.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 "hw_key.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 SEARCH_PKG_NAME "org.tizen.smartsearch" +#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) +{ + _D("Launch TASKMGR"); + + key_info.long_press = NULL; + + if (aul_open_app(TASKMGR_PKG_NAME) < 0) + _E("Failed to launch the taskmgr"); + + return ECORE_CALLBACK_CANCEL; +} + + + +static Eina_Bool _launch_home_screen(void *data) +{ + char *package; + int ret; + + syspopup_destroy_all(); + key_info.single_timer = NULL; + + package = vconf_get_str(VCONFKEY_SETAPPL_SELECTED_PACKAGE_NAME); + if (package) { + ret = aul_open_app(package); + if (ret < 0) { + _E("cannot launch package %s(err:%d)", package, ret); + + if (-1 == ret) { // -1 : AUL returns '-1' when there is no package name in DB. + ret = aul_open_app(HOME_SCREEN_PKG_NAME); + if (ret < 0) { + _E("Failed to open a default home, %s(err:%d)", HOME_SCREEN_PKG_NAME, ret); + } + } + } + + free(package); + } else { + ret = aul_open_app(HOME_SCREEN_PKG_NAME); + if (ret < 0) _E("Cannot open default home"); + } + + if (ret > 0) { + if (-1 == sysconf_set_mempolicy_bypid(ret, OOM_IGNORE)) { + _E("Cannot set the memory policy for Home-screen(%d)", ret); + } else { + _E("Set the memory policy for Home-screen(%d)", ret); + } + } + + return ECORE_CALLBACK_CANCEL; +} + + + +inline static void _launch_svoice(void) +{ + _D("Launch smartsearch"); + if (aul_open_app(SEARCH_PKG_NAME) < 0) + _E("Cannot open Smart-search"); + + return; +} + + + +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_home_screen, NULL); + return EXIT_SUCCESS; + } + ecore_timer_del(key_info.single_timer); + key_info.single_timer = NULL; + + syspopup_destroy_all(); + _launch_svoice(); + + return EXIT_SUCCESS; +} + + + +inline static void _release_multimedia_key(const char *value) +{ + bundle *b; + int ret; + + _D("Multimedia key is released with %s", value); + ret_if(NULL == value); + + b = bundle_create(); + if (!b) { + _E("Cannot create bundle"); + return; + } + + bundle_add(b, "multimedia_key", value); + ret = aul_launch_app(MUSIC_PLAYER_PKG_NAME, b); + bundle_free(b); + + if (ret < 0) + _E("Failed to launch the running apps, ret : %d", ret); +} + + + +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; + } + + 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"); + } + + 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; + } + + if (!strcmp(ev->keyname, KEY_SEND)) { + _D("Launch calllog"); + if (aul_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 (aul_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"); + } + + 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) +{ + 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); +} + + + +void destroy_key_window(void) +{ + 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(); +} + + + +// End of a file diff --git a/src/lock-daemon.c b/src/lock-daemon.c new file mode 100755 index 0000000..7ac1fd8 --- /dev/null +++ b/src/lock-daemon.c @@ -0,0 +1,743 @@ + /* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.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.tizenopensource.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; /* 0:Normal, 1:Security, 2:Other */ + Eina_Bool request_recovery; + lockw_data *lockw; + GPollFD *gpollfd; +}; + +/* define it temp */ +#if 0 +struct ucred { + pid_t pid; /* PID of sending process. */ + uid_t uid; /* UID of sending process. */ + gid_t gid; /* GID of sending process. */ +}; +#endif + +#define PHLOCK_SOCK_PREFIX "/tmp/phlock" +#define PHLOCK_SOCK_MAXBUFF 65535 +#define PHLOCK_APP_CMDLINE "/usr/apps/org.tizen.phone-lock/bin/phone-lock" +#define MDM_APP_CMDLINE "/usr/bin/mdm-server" +#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 || + lock_type == SETTING_SCREEN_LOCK_TYPE_FACE_AND_VOICE) { + 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 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) { + /* password verified */ + /* lockd_unlock_lockscreen(lockd); */ + 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->lock_type == 0) { + 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_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 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__); + lockd_window_set_window_effect(lockd->lockw, lockd->lock_app_pid, + event); + //FIXME sometimes show cb is not called. + lockd_window_set_window_property(lockd->lockw, lockd->lock_app_pid, + event); + + 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__); + lockd_window_set_window_property(lockd->lockw, lockd->lock_app_pid, + event); + if (lockd->lock_type > 1) + 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"); + vconf_get_int(VCONFKEY_TELEPHONY_SIM_FACTORY_MODE, &factory_mode); + if (factory_mode == VCONFKEY_TELEPHONY_SIM_FACTORYMODE_ON) { + LOCKD_DBG("Factory mode ON, lock screen can't be launched..!!"); + return 0; + } + vconf_get_int(VCONFKEY_TESTMODE_SCREEN_LOCK, &test_mode); + if (test_mode == VCONFKEY_TESTMODE_SCREEN_LOCK_DISABLE) { + LOCKD_DBG("Test mode ON, lock screen can't be launched..!!"); + return 0; + } + + /* Check lock screen application is already exit, no checking phone-lock */ + 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; + } + } + + /* Get Call state */ + 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; + } + + if (lockd->lock_type == 0) { + lockd->lock_app_pid = + lockd_process_mgr_start_normal_lock(lockd, lockd_app_dead_cb); + if (lockd->lock_app_pid < 0) + return 0; + /* reset window mgr before start win mgr */ + lockd_window_mgr_finish_lock(lockd->lockw); + lockd_window_mgr_ready_lock(lockd, lockd->lockw, lockd_app_create_cb, + lockd_app_show_cb); + } else if (lockd->lock_type == 1) { + vconf_set_bool(VCONFKEY_LOCKSCREEN_PHONE_LOCK_VERIFICATION, FALSE); + /* Check phone lock application is already exit */ + if (lockd_process_mgr_check_lock(lockd->phone_lock_app_pid) == TRUE) { + LOCKD_DBG("phone lock App is already running."); + if (lockd->request_recovery == FALSE) + return 1; + } + + /* TO DO : Recovery should be checked by EAS interface later */ + /* After getting EAS interface, we should remove lockd->request_recovery */ + if (lockd->request_recovery == TRUE) { + lockd->phone_lock_app_pid = + lockd_process_mgr_start_recovery_lock(); + lockd->request_recovery = FALSE; + } else { + lockd->phone_lock_app_pid = + lockd_process_mgr_start_phone_lock(); + } + phone_lock_pid = lockd->phone_lock_app_pid; + LOCKD_DBG("%s, %d, phone_lock_pid = %d", __func__, __LINE__, + phone_lock_pid); + lockd_window_set_phonelock_pid(lockd->lockw, phone_lock_pid); + + /* Set lock state */ + //ecore_idler_add(lockd_set_lock_state_cb, NULL); //don't set lock state for lcd on. + } else { + 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; + /* reset window mgr before start win mgr */ + 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; + struct timeval tv = { 1, 200 * 1000 }; /* 1.2 sec */ + + size = PHLOCK_SOCK_MAXBUFF; + setsockopt(fd, SOL_SOCKET, SO_SNDBUF, &size, sizeof(size)); + setsockopt(fd, SOL_SOCKET, SO_RCVBUF, &size, sizeof(size)); + if (cli) + setsockopt(fd, SOL_SOCKET, SO_RCVTIMEO, &tv, sizeof(tv)); +} + +static int lockd_create_sock(void) +{ + struct sockaddr_un saddr; + int fd; + + fd = socket(AF_UNIX, SOCK_STREAM, 0); /* support above version 2.6.27 */ + 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"); + return -1; + } + + if (chmod(saddr.sun_path, (S_IRWXU | S_IRWXG | S_IRWXO)) < 0) { + /* Flawfinder: ignore */ + LOCKD_DBG("failed to change the socket permission"); + return -1; + } + + lockd_set_sock_option(fd, 0); + + if (listen(fd, 10) == -1) { + LOCKD_DBG("listen error"); + 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); + + /* receive single packet from socket */ + len = recv(clifd, cmd, PHLOCK_SOCK_MAXBUFF, 0); + + if (cmd == NULL) { + LOCKD_DBG("recv error, cmd is NULL"); + close(clifd); + return -1; + } + + if (len != strlen(cmd)) { + LOCKD_DBG("recv error %d %d", len, strlen(cmd)); + close(clifd); + return -1; + } + + LOCKD_DBG("cmd %s", cmd); + + /* Read command line of the PID from proc fs */ + cmdline = lockd_read_cmdline_from_proc(cr.pid); + if (cmdline == NULL) { + /* It's weired. no file in proc file system, */ + 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 (!strncmp(cmdline, MDM_APP_CMDLINE, strlen(cmdline))) { + LOCKD_DBG("cmdline is %s \n", MDM_APP_CMDLINE); + if (vconf_get_int(VCONFKEY_EAS_RECOVERY_MODE, &recovery_state) < 0) { + LOCKD_ERR("Cannot get %s vconfkey", VCONFKEY_EAS_RECOVERY_MODE); + lockd->request_recovery = FALSE; + } else if (recovery_state == 1) { + LOCKD_DBG("recovery mode : %d \n", recovery_state); + lockd->request_recovery = TRUE; + } else { + lockd->request_recovery = FALSE; + } + } + + if (_lockd_get_lock_type() == 1) { + lockd->lock_type = 1; + lockd_launch_app_lockscreen(lockd); + } + } + + 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__); + + /* register vconf notification */ + lockd_init_vconf(lockd); + + /* Initialize socket */ + r = lockd_init_sock(lockd); + if (r < 0) { + LOCKD_DBG("lockd init socket failed: %d", r); + } + /* Create internal 1x1 window */ + 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) { + if (vconf_get_int(VCONFKEY_EAS_RECOVERY_MODE, &recovery_state) < 0) { + LOCKD_ERR("Cannot get %s vconfkey", VCONFKEY_EAS_RECOVERY_MODE); + lockd->request_recovery = FALSE; + } else if (recovery_state == 1) { + LOCKD_DBG("recovery mode : %d \n", recovery_state); + lockd->request_recovery = TRUE; + } else { + lockd->request_recovery = FALSE; + } + } else if (lock_type == 2) { + lock_type = 0; + } + lockd->lock_type = lock_type; + ret = lockd_launch_app_lockscreen(lockd); + return ret; +} diff --git a/lock-mgr/src/lockd-debug.c b/src/lockd-debug.c old mode 100755 new mode 100644 similarity index 63% rename from lock-mgr/src/lockd-debug.c rename to src/lockd-debug.c index bff5949..69545de --- a/lock-mgr/src/lockd-debug.c +++ b/src/lockd-debug.c @@ -1,18 +1,20 @@ -/* - * Copyright 2012 Samsung Electronics Co., Ltd - * - * Licensed under the Flora License, Version 1.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.tizenopensource.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 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.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.tizenopensource.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 @@ -26,7 +28,7 @@ #include "lockd-debug.h" #define LINEMAX 256 -#define MAXFILELEN 1048576 +#define MAXFILELEN 1048576 /* 32000 */ #define LOGFILE "/tmp/starter.log" void lockd_log_t(char *fmt, ...) @@ -44,7 +46,8 @@ void lockd_log_t(char *fmt, ...) time_t current_time = 0; bzero((char *)&debugString, LINEMAX); time(¤t_time); - gmtime_r(¤t_time, &local_t); + /* local_t = gmtime(¤t_time); */ + gmtime_r(¤t_time, &local_t); /* for prevent 53555 */ int len = snprintf(debugString, sizeof(debugString), "[%d-%02d-%02d, %02d:%02d:%02d]: ", local_t.tm_year + 1900, local_t.tm_mon + 1, @@ -57,10 +60,13 @@ void lockd_log_t(char *fmt, ...) } len = g_strlcat(debugString, buf, LINEMAX); if (len >= LINEMAX) { + /* TODO:ERROR handling */ return; } else { debugString[len] = '\n'; } + /* FIXME this is for permission.. later we should fix and remove this... */ + /* system("chmod 666 "LOGFILE); */ if ((fd = fopen(LOGFILE, "at+")) == NULL) { LOCKD_DBG("File fopen fail for writing Pwlock information"); } else { @@ -74,6 +80,7 @@ void lockd_log_t(char *fmt, ...) execl("/bin/rm", "rm", "-f", LOGFILE, (char *)0); } + /* system("rm -rf "LOGFILE); */ } else { fseek(fd, 0l, SEEK_END); fileLen = ftell(fd); @@ -85,6 +92,7 @@ void lockd_log_t(char *fmt, ...) execl("/bin/rm", "rm", "-f", LOGFILE, (char *)0); } + /* system("rm -rf "LOGFILE); */ } else fclose(fd); } diff --git a/src/lockd-process-mgr.c b/src/lockd-process-mgr.c new file mode 100755 index 0000000..9fcb205 --- /dev/null +++ b/src/lockd-process-mgr.c @@ -0,0 +1,234 @@ + /* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.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.tizenopensource.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.livebox-lock" +#define LOCKD_DEFAULT_LOCKSCREEN "org.tizen.draglock" +#define LOCKD_PHONE_LOCK_PKG_NAME "org.tizen.phone-lock" +#define RETRY_MAXCOUNT 30 +#define RELAUNCH_INTERVAL 100*1000 + +static char *_lockd_process_mgr_get_pkgname(void) +{ + char *pkgname = NULL; + + pkgname = vconf_get_str(VCONF_PRIVATE_LOCKSCREEN_PKGNAME); + + 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; + bundle *b = NULL; + + lock_app_path = _lockd_process_mgr_get_pkgname(); + + b = bundle_create(); + + if (phone_lock_state == 1) + bundle_add(b, "mode", "lock"); + else + bundle_add(b, "mode", "normal"); + + pid = aul_launch_app(lock_app_path, b); + + LOCKD_DBG("Reset : aul_launch_app(%s, NULL), pid = %d", lock_app_path, + pid); + + if (b) + bundle_free(b); + + 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; + bundle *b = NULL; + + lock_app_path = _lockd_process_mgr_get_pkgname(); + + b = bundle_create(); + + if (phone_lock_state == 1) + bundle_add(b, "mode", "lock"); + else + bundle_add(b, "mode", "normal"); + + int i; + for (i=0; i0) { + if (b) + bundle_free(b); + return pid; + } + } else { + if (b) + bundle_free(b); + 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; + bundle *b = NULL; + + b = bundle_create(); + +#if 1 + bundle_add(b, "pwlock_type", "running_lock"); + bundle_add(b, "window_type", "alpha"); + + pid = aul_launch_app(LOCKD_PHONE_LOCK_PKG_NAME, b); + LOCKD_DBG("aul_launch_app(%s, b), pid = %d", LOCKD_PHONE_LOCK_PKG_NAME, + pid); +#else + bundle_add(b, "mode", "lock"); + + pid = aul_launch_app(LOCKD_DEFAULT_PKG_NAME, b); + + LOCKD_DBG("aul_launch_app(%s, NULL), pid = %d", LOCKD_DEFAULT_PKG_NAME, + pid); +#endif + if (b) + bundle_free(b); + + return pid; +} + +int lockd_process_mgr_start_recovery_lock(void) +{ + int pid = 0; + bundle *b = NULL; + + b = bundle_create(); + + bundle_add(b, "pwlock_type", "recovery_lock"); + bundle_add(b, "window_type", "alpha"); + + pid = aul_launch_app(LOCKD_PHONE_LOCK_PKG_NAME, b); + LOCKD_DBG("aul_launch_app(%s, b), pid = %d", LOCKD_PHONE_LOCK_PKG_NAME, + pid); + if (b) + bundle_free(b); + + 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__); + /* Check pid is invalid. */ + 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 new file mode 100644 index 0000000..ad66b8a --- /dev/null +++ b/src/lockd-window-mgr.c @@ -0,0 +1,709 @@ + /* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.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.tizenopensource.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" +#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; /* volume key timer */ + int volume_key_cnt; + + int phone_lock_state; /* 0 : disable, 1 : enable */ + int phone_lock_app_pid; +}; + +Eina_Bool volume_key_expire_cb(void *pData) +{ + int api_ret = 0; + int vconf_val = 0; + lockw_data *lockw = (lockw_data *) pData; + + _DBG("volume_key_expire_cb..!!"); + + lockw->volume_key_cnt = 0; + + return ECORE_CALLBACK_CANCEL; +} + +static Eina_Bool _lockd_window_key_down_cb(void *data, int type, void *event) +{ + Ecore_Event_Key *ev = event; + lockw_data *lockw = (lockw_data *) data; + int vconf_val = 0; + int ret = 0; + + LOCKD_DBG("Key Down CB : %s", ev->keyname); + + ret = vconf_get_int(VCONFKEY_MESSAGE_SOS_STATE, &vconf_val); + + if(ret != 0) + { + LOCKD_ERR("_lockd_window_key_down_cb:VCONFKEY_MESSAGE_SOS_STATE FAILED"); + return ECORE_CALLBACK_CANCEL; + } + + if (!strcmp(ev->keyname, KEY_VOLUMEUP) || !strcmp(ev->keyname, KEY_VOLUMEDOWN)) { + if (vconf_val == VCONFKEY_MESSAGE_SOS_IDLE) { + if (lockw->volume_key_cnt == 0) { + lockw->volume_key_cnt++; + LOCKD_DBG("Volume key is pressed %d times", lockw->volume_key_cnt); + lockw->pTimerId = ecore_timer_add(SOS_KEY_INTERVAL, volume_key_expire_cb, lockw); + } else if (lockw->volume_key_cnt == SOS_KEY_COUNT) { + LOCKD_DBG("SOS msg invoked"); + if (lockw->pTimerId != NULL) { + ecore_timer_del(lockw->pTimerId); + lockw->pTimerId = NULL; + lockw->volume_key_cnt =0; + vconf_set_int(VCONFKEY_MESSAGE_SOS_STATE, VCONFKEY_MESSAGE_SOS_INVOKED); + ecore_x_pointer_grab(lockw->lock_x_window); + } + } else { + if (lockw->pTimerId != NULL) { + ecore_timer_del(lockw->pTimerId); + lockw->pTimerId = NULL; + lockw->volume_key_cnt++; + LOCKD_DBG("Volume key is pressed %d times", lockw->volume_key_cnt); + lockw->pTimerId = ecore_timer_add(SOS_KEY_INTERVAL, volume_key_expire_cb, lockw); + } + } + } + } else if (!strcmp(ev->keyname, KEY_HOME)) { + if (vconf_val != VCONFKEY_MESSAGE_SOS_IDLE) { + LOCKD_DBG("Home key is pressed set to idle", lockw->volume_key_cnt); + vconf_set_int(VCONFKEY_MESSAGE_SOS_STATE, VCONFKEY_MESSAGE_SOS_IDLE); + ecore_x_pointer_ungrab(); + } + } + + return ECORE_CALLBACK_PASS_ON; +} + +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; +} + +static Evas_Object *lockd_create_main_window(const char *pkgname) +{ + Evas_Object *eo = NULL; + int w, h; + LOCKD_DBG("%s, %d", __func__, __LINE__); + + eo = elm_win_add(NULL, pkgname, ELM_WIN_BASIC); + if (eo) { + elm_win_title_set(eo, pkgname); + elm_win_borderless_set(eo, EINA_TRUE); + ecore_x_window_size_get(ecore_x_window_root_first_get(), + &w, &h); + LOCKD_DBG("%s, %d, w = %d, h = %d", __func__, __LINE__, w, h); + evas_object_resize(eo, w, h); + } + return eo; +} + +static Evas_Object *lockd_create_main_layout(Evas_Object * parent) +{ + Evas_Object *ly = NULL; + LOCKD_DBG("%s, %d", __func__, __LINE__); + + ly = elm_layout_add(parent); + if (!ly) { + LOCKD_ERR("UI layout add error"); + return NULL; + } + + elm_layout_theme_set(ly, "layout", "application", "default"); + evas_object_size_hint_weight_set(ly, EVAS_HINT_EXPAND, + EVAS_HINT_EXPAND); + evas_object_show(ly); + + elm_win_resize_object_add(parent, ly); + elm_win_indicator_mode_set(parent, ELM_WIN_INDICATOR_SHOW); + + return ly; +} + +static void _lockd_phone_lock_alpha_ug_layout_cb(ui_gadget_h ug, + enum ug_mode mode, void *priv) +{ + lockw_data *lockw = (lockw_data *) priv;; + Evas_Object *base = NULL; + LOCKD_DBG("%s, %d", __func__, __LINE__); + + if (!ug || !lockw) + return; + + base = ug_get_layout(ug); + if (!base) + return; + + switch (mode) { + case UG_MODE_FULLVIEW: + evas_object_size_hint_weight_set(base, EVAS_HINT_EXPAND, + EVAS_HINT_EXPAND); + elm_win_resize_object_add(lockw->main_win, base); + ug_disable_effect(ug); /* not use effect when destroy phone lock UG */ + evas_object_show(base); + break; + case UG_MODE_FRAMEVIEW: + /* elm_layout_content_set(lockw->main_layout, "content", base); *//* not used */ + break; + default: + break; + } +} + +static void _lockd_phone_lock_alpha_ug_result_cb(ui_gadget_h ug, + service_h service, void *priv) +{ + int alpha; + const char *val1 = NULL, *val2 = NULL; + lockw_data *lockw = (lockw_data *) priv;; + LOCKD_DBG("%s, %d", __func__, __LINE__); + + if (!ug || !lockw) + return; + + service_get_extra_data(service, "name", &val1); + + LOCKD_DBG("val1 = %s", val1); + + if (val1 == NULL) + return; + + service_get_extra_data(service, "result", &val2); + + if (val2 == NULL) + return; + + LOCKD_DBG("val2 = %s", val2); + + + if (!strcmp(val1, "phonelock-ug")) { + if (!strcmp(val2, "success")) { + LOCKD_DBG("password verified. Unlock!\n"); + } + } else if (!strcmp(val1, "phonelock-ug-alpha")) { + alpha = atoi(val2); + } + + if(val1 != NULL) + free(val1); + + if(val2 != NULL) + free(val2); +} + +static void _lockd_phone_lock_alpha_ug_destroy_cb(ui_gadget_h ug, + void *priv) +{ + lockw_data *lockw = (lockw_data *) priv;; + LOCKD_DBG("%s, %d", __func__, __LINE__); + + if (!ug || !lockw) + return; + + ug_destroy(ug); + ug = NULL; + lockd_destroy_ug_window(lockw); + vconf_set_bool(VCONFKEY_LOCKSCREEN_PHONE_LOCK_VERIFICATION, TRUE); +} + +static void _lockd_ug_window_set_win_prop(void *data, int type) +{ + Ecore_X_Window w; + Evas_Object *win = NULL; + lockw_data *lockw = (lockw_data *) data;; + LOCKD_DBG("%s, %d", __func__, __LINE__); + + if (!lockw) + return; + + win = lockw->main_win; + + w = elm_win_xwindow_get(win); + + if (type == ECORE_X_WINDOW_TYPE_NORMAL) { + ecore_x_netwm_window_type_set(w, ECORE_X_WINDOW_TYPE_NORMAL); + } else if (type == ECORE_X_WINDOW_TYPE_NOTIFICATION) { + ecore_x_netwm_window_type_set(w, + ECORE_X_WINDOW_TYPE_NOTIFICATION); + utilx_set_system_notification_level(ecore_x_display_get(), w, + UTILX_NOTIFICATION_LEVEL_NORMAL); + } +} + +static void _lockd_ug_window_set_key_grab(void *data) +{ + Ecore_X_Window w; + int ret = 0; + Evas_Object *win = NULL; + lockw_data *lockw = (lockw_data *) data;; + LOCKD_DBG("%s, %d", __func__, __LINE__); + + if (!lockw) + return; + + win = lockw->main_win; + w = elm_win_xwindow_get(win); + ret = utilx_grab_key(ecore_x_display_get(), w, KEY_HOME, EXCLUSIVE_GRAB); + if(ret) + { + LOCKD_ERR("Key grab error : KEY_HOME"); + } + ret = utilx_grab_key(ecore_x_display_get(), w, KEY_CONFIG, TOP_POSITION_GRAB); + if(ret) + { + LOCKD_ERR("Key grab error : KEY_CONFIG"); + } +} + +static void _lockd_ug_window_set_key_ungrab(void *data) +{ + Ecore_X_Window xwin; + Ecore_X_Display *disp = NULL; + lockw_data *lockw = (lockw_data *) data;; + + if (!lockw) + return; + + LOCKD_DBG("%s, %d", __func__, __LINE__); + disp = ecore_x_display_get(); + xwin = elm_win_xwindow_get(lockw->main_win); + + utilx_ungrab_key(disp, xwin, KEY_HOME); + utilx_ungrab_key(disp, xwin, KEY_CONFIG); +} + +static void _lockd_ug_window_vconf_call_state_changed_cb(keynode_t * node, + void *data) +{ + int api_ret = 0; + int vconf_val = 0; + lockw_data *lockw = (lockw_data *) data; + + if (!lockw) + return; + + LOCKD_DBG("%s, %d", __func__, __LINE__); + api_ret = vconf_get_int(VCONFKEY_CALL_STATE, &vconf_val); + if (api_ret != 0) { + LOCKD_DBG("fail to get vconf key %s value", + VCONFKEY_CALL_STATE); + } else { + if (vconf_val == VCONFKEY_CALL_OFF) { + LOCKD_DBG("call off state.."); + _lockd_ug_window_set_win_prop(lockw, + ECORE_X_WINDOW_TYPE_NOTIFICATION); + } else { + LOCKD_DBG("call on state.."); + _lockd_ug_window_set_win_prop(lockw, + ECORE_X_WINDOW_TYPE_NORMAL); + } + } + return; +} + +static void _lockd_ug_window_register_vconf_changed(void *data) +{ + LOCKD_DBG("%s, %d", __func__, __LINE__); + if (vconf_notify_key_changed + (VCONFKEY_CALL_STATE, _lockd_ug_window_vconf_call_state_changed_cb, + data) != 0) { + LOCKD_DBG("Fail to register"); + } +} + +static void _lockd_ug_window_unregister_vconf_changed(void *data) +{ + LOCKD_DBG("%s, %d", __func__, __LINE__); + + if (vconf_ignore_key_changed + (VCONFKEY_CALL_STATE, + _lockd_ug_window_vconf_call_state_changed_cb) != 0) { + LOCKD_DBG("Fail to unregister"); + } + +} + +void _lockd_window_transient_for_set(void *data) +{ + lockw_data *lockw = (lockw_data *) data; + Ecore_X_Window xwin_ug; + Ecore_X_Window xwin_lock; + + if (!lockw) + return; + + LOCKD_DBG("%s, %d", __func__, __LINE__); + xwin_ug = elm_win_xwindow_get(lockw->main_win); + xwin_lock = lockw->lock_x_window; + + LOCKD_DBG("ug win id : %x, and lock win id is :%x", xwin_ug, xwin_lock); + ecore_x_icccm_transient_for_set(xwin_ug, xwin_lock); +} + +Eina_Bool _lockd_window_set_window_property_timer_cb(void *data) +{ + Ecore_X_Window win = (Ecore_X_Window) data; + LOCKD_DBG + ("[MINSU] win id(%x) set lock screen window property to notification and level low\n", + win); + + /* Set notification type */ + ecore_x_netwm_window_type_set(win, ECORE_X_WINDOW_TYPE_NOTIFICATION); + + /* Set notification's priority */ + utilx_set_system_notification_level(ecore_x_display_get(), win, + UTILX_NOTIFICATION_LEVEL_LOW); + + return EINA_FALSE; +} + +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; + +} + +void +lockd_window_set_window_property(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; + + if (!lockw) { + return; + } + 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; + } + + 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); + + /* window effect : fade in /out */ + ecore_x_icccm_name_class_set(user_window, "LOCK_SCREEN", + "LOCK_SCREEN"); + + /* Set notification type */ + ecore_x_netwm_window_type_set(user_window, + ECORE_X_WINDOW_TYPE_NOTIFICATION); + + /* Set notification's priority */ + utilx_set_system_notification_level(ecore_x_display_get + (), user_window, + UTILX_NOTIFICATION_LEVEL_NORMAL); + /* Set opaque state */ + utilx_set_window_opaque_state(ecore_x_display_get(), + user_window, + UTILX_OPAQUE_STATE_ON); + } + } +} + +void +lockd_window_set_window_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; + + user_window = get_user_created_window((Window) (e->win)); + int ret = ecore_x_netwm_pid_get(user_window, &pid); + if(ret != 1) { + return; + } + + 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); + + utilx_set_window_effect_state(ecore_x_display_get(), + user_window, 0); + } + } +} + +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; + } + /* Register window create CB */ + 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; + + /* Register keydown event handler */ + lockw->h_keydown = + ecore_event_handler_add(ECORE_EVENT_KEY_DOWN, + _lockd_window_key_down_cb, lockw); +} + +void lockd_window_mgr_finish_lock(lockw_data * lockw) +{ + Ecore_X_Window xwin; + + if (lockw == NULL) { + LOCKD_ERR("lockw is NULL."); + return; + } + /* delete window create event handler */ + 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(); + + /* delete keydown event handler */ + if (lockw->h_keydown != NULL) { + ecore_event_handler_del(lockw->h_keydown); + lockw->h_keydown = NULL; + } +} + +lockw_data *lockd_window_init(void) +{ + lockw_data *lockw = NULL; + long pid; + + /* Create lockd window data */ + lockw = (lockw_data *) malloc(sizeof(lockw_data)); + memset(lockw, 0x0, sizeof(lockw_data)); + + pid = getpid(); + + return lockw; +} + +void lockd_create_ug_window(void *data) +{ + lockw_data *lockw = NULL; + LOCKD_DBG("%s, %d", __func__, __LINE__); + + lockw = (lockw_data *) data; + if (!lockw) { + return; + } + + lockd_destroy_ug_window(lockw); + + /* create main window */ + lockw->main_win = lockd_create_main_window(PACKAGE); + + /* create main layout */ + /* remove indicator in running time */ + /* lockw->main_layout = lockd_create_main_layout(lockw->main_win); */ + appcore_set_i18n(PACKAGE, NULL); + _lockd_ug_window_set_key_grab(lockw); + _lockd_ug_window_register_vconf_changed(lockw); + lockw->phone_lock_state = 1; +} + +void lockd_destroy_ug_window(void *data) +{ + lockw_data *lockw = NULL; + LOCKD_DBG("%s, %d", __func__, __LINE__); + + lockw = (lockw_data *) data; + if (!lockw) { + return; + } + + _lockd_ug_window_set_key_ungrab(lockw); + _lockd_ug_window_unregister_vconf_changed(lockw); + + if (lockw->main_win) { + evas_object_del(lockw->main_win); + lockw->main_win = NULL; + } + lockw->phone_lock_state = 0; +} + +void lockd_show_phonelock_alpha_ug(void *data) +{ + lockw_data *lockw = NULL; + service_h service; + struct ug_cbs cbs = { 0, }; + LOCKD_DBG("%s, %d", __func__, __LINE__); + + lockw = (lockw_data *) data; + if (!lockw) { + return; + } + + cbs.layout_cb = _lockd_phone_lock_alpha_ug_layout_cb; + cbs.result_cb = _lockd_phone_lock_alpha_ug_result_cb; + cbs.destroy_cb = _lockd_phone_lock_alpha_ug_destroy_cb; + cbs.priv = (void *)data; + + service_create(&service); + + service_add_extra_data(service, "phone-lock-type", "phone-lock"); + service_add_extra_data(service, "window-type", "alpha"); + + elm_win_alpha_set(lockw->main_win, TRUE); + evas_object_color_set(lockw->main_win, 0, 0, 0, 0); + + /* window effect : fade in /out */ + ecore_x_icccm_name_class_set(elm_win_xwindow_get(lockw->main_win), + "LOCK_SCREEN", "LOCK_SCREEN"); + + UG_INIT_EFL(lockw->main_win, UG_OPT_INDICATOR_ENABLE); + ug_create(NULL, "phone-lock-efl", UG_MODE_FULLVIEW, service, &cbs); + LOCKD_DBG("%s, %d", __func__, __LINE__); + + service_destroy(service); + + LOCKD_DBG("%s, %d", __func__, __LINE__); + + evas_object_show(lockw->main_win); + _lockd_ug_window_set_win_prop(lockw, ECORE_X_WINDOW_TYPE_NOTIFICATION); +} diff --git a/src/menu_daemon.c b/src/menu_daemon.c new file mode 100755 index 0000000..b432bf3 --- /dev/null +++ b/src/menu_daemon.c @@ -0,0 +1,320 @@ + /* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.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.tizenopensource.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 "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 prototype of the "hidden API of AUL" +//extern int aul_listen_app_dead_signal(int (*func)(int signal, void *data), void *data); + + + +static struct info { + pid_t home_pid; + pid_t volume_pid; + int power_off; +} s_info = { + .home_pid = -1, + .volume_pid = -1, + .power_off = 0, +}; + + + +bool menu_daemon_is_homescreen(pid_t pid) +{ + if (s_info.home_pid == pid) return true; + return false; +} + + + +static inline char *_get_selected_pkgname(void) +{ + char *pkgname; + + pkgname = vconf_get_str(VCONFKEY_SETAPPL_SELECTED_PACKAGE_NAME); + if (!pkgname) { + _E("Cannot get pkgname from vconf."); + + pkgname = strdup(HOME_SCREEN_PKG_NAME); + if (!pkgname) { + _E("strdup error for pkgname, %s", strerror(errno)); + return NULL; + } + } + + return pkgname; +} + + + +static inline void _open_homescreen(const char *pkgname) +{ + int ret; + char *homescreen = (char *) pkgname; + + system("echo -e '[${_G}menu-daemon launches home-screen${C_}]' > /dev/kmsg"); + ret = aul_open_app(homescreen); + _D("can%s launch %s now. (%d)", ret < 0 ? "not" : "", homescreen, ret); + if (ret < 0 && strcmp(homescreen, HOME_SCREEN_PKG_NAME)) { + _E("cannot launch package %s", homescreen); + + if (-1 == ret) { // -1 : AUL returns '-1' when there is no package name in DB. + ret = aul_open_app(HOME_SCREEN_PKG_NAME); + if (ret < 0) { + _E("Failed to open a default home, %s(err:%d)", HOME_SCREEN_PKG_NAME, 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 { + _E("Set the memory policy for Home-screen(%d)", ret); + } + } +} + + + +static void _show_cb(keynode_t* node, void *data) +{ + int seq; + char *pkgname; + + _D("[MENU_DAEMON] _show_cb is invoked"); + + pkgname = _get_selected_pkgname(); + if (!pkgname) + return; + + if (node) { + seq = vconf_keynode_get_int(node); + } else { + if (vconf_get_int(VCONFKEY_STARTER_SEQUENCE, &seq) < 0) { + _E("Failed to get sequence info"); + free(pkgname); + 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; /* to freeze the dead_cb */ + + if (aul_terminate_pid(pid) != AUL_R_OK) + _E("Failed to terminate %d", s_info.home_pid); + } + break; + case 1: + _open_homescreen(pkgname); + break; + default: + _E("False sequence [%d]", seq); + break; + } + + free(pkgname); + 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 = _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_terminate_pid(s_info.home_pid) != AUL_R_OK) + _D("Failed to terminate pid %d", s_info.home_pid); + } else { + /* If there is no running home */ + _open_homescreen(pkgname); + } + + /* NOTE: Dead callback will catch the termination of a current menuscreen + * _open_homescreen(pkgname); + */ + free(pkgname); + return; +} + +static void _launch_volume(void) +{ + int pid; + int i; + _D("_launch_volume"); + + for (i=0; i +#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 (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); + // Stop monitoring about this invalid file descriptor + return ECORE_CALLBACK_CANCEL; + } + + 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; + + // 1. check the extension of a file + 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); + + // add & update + if (event->mask & IN_CLOSE_WRITE || event->mask & IN_MOVED_TO) { // for moving + ail_appinfo_h ai = NULL; + ail_error_e ret; + + ret = ail_get_appinfo(package, &ai); + 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 + ; + // delete + } else if (event->mask & IN_DELETE) { // for deleting + 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) { + // TODO: Handles me.. EXCEPTION!! + _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) { + char log[BUFSZE] = {0,}; + int ret; + + ret = strerror_r(errno, log, sizeof(log)); + _E("Error: %s", ret == 0? log : "unknown error"); + } + 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; + } +} + + +// End of a file diff --git a/src/starter.c b/src/starter.c new file mode 100755 index 0000000..2a6035e --- /dev/null +++ b/src/starter.c @@ -0,0 +1,331 @@ + /* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.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.tizenopensource.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 "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 DATA_ENCRYPTED "encrypted" +#define DATA_MOUNTED "mounted" + +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); +} + +#if 0 +static void _set_elm_entry(void) +{ + int v; + int r; + + r = vconf_get_bool(VCONFKEY_SETAPPL_AUTOCAPITAL_ALLOW_BOOL, &v); + if (!r) { + prop_int_set("ENLIGHTENMENT_AUTOCAPITAL_ALLOW", v); + _DBG("vconf autocatipal[%d]", v); + } + + r = vconf_get_bool(VCONFKEY_SETAPPL_AUTOPERIOD_ALLOW_BOOL, &v); + if (!r) { + prop_int_set("ENLIGHTENMENT_AUTOPERIOD_ALLOW", v); + _DBG("vconf autoperiod[%d]", v); + } +} +#endif + +static int _launch_pwlock(void) +{ + int r; + //int i = 0; + + _DBG("%s", __func__); + +#if 1 + r = aul_launch_app("org.tizen.pwlock", 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("org.tizen.pwlock", 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; + } +#else + retry_con: + r = aul_launch_app("org.tizen.pwlock", NULL); + if (r < 0) { + _ERR("PWLock launch error: error(%d)", r); + if (r == AUL_R_ETIMEOUT) { + i++; + _DBG("Launching pwlock is failed [%d]times for AUL_R_ETIMEOUT ", i); + goto retry_con; + } else { + return -1; + } + } else { + _DBG("Launch pwlock"); + return 0; + } +#endif +} + +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 _data_encryption_cb(keynode_t * node, void *data) +{ + int r; + char *file = NULL; + + _DBG("%s %d\n", __func__, __LINE__); + + file = vconf_get_str(VCONFKEY_ODE_CRYPTO_STATE); + if (file != NULL) { + _DBG("get %s : %s\n", VCONFKEY_ODE_CRYPTO_STATE, file); + if (!strcmp(file, DATA_MOUNTED)) { + start_lock_daemon(FALSE); + menu_daemon_init(NULL); + } + free(file); + } +} + +static void _init(struct appdata *ad) +{ + int r; + 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) { + _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__); + + /* Check data encrption */ + file = vconf_get_str(VCONFKEY_ODE_CRYPTO_STATE); + if (file != NULL) { + _DBG("get %s : %s\n", VCONFKEY_ODE_CRYPTO_STATE, file); + if (!strcmp(file, DATA_ENCRYPTED)) { + if (vconf_notify_key_changed(VCONFKEY_ODE_CRYPTO_STATE, + _data_encryption_cb, NULL) != 0) { + _ERR("[Error] vconf notify changed : %s", VCONFKEY_ODE_CRYPTO_STATE); + } else { + _DBG("waiting mount..!!"); + if (_launch_pwlock() < 0) { + _ERR("launch pwlock error"); + } + free(file); + return; + } + } + free(file); + } + + /* change the launching order of pwlock and lock mgr in booting time */ + /* TODO: menu screen is showed before phone lock is showed in booting time */ + /* FIXME Here lock daemon start..!! */ + 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"); +#if 0 + set_window_scale(); /* not in loop */ +#endif + int heyfd = heynoti_init(); + if (heyfd < 0) { + _ERR("Failed to heynoti_init[%d]", heyfd); + } + + 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/x11.c b/src/x11.c new file mode 100644 index 0000000..088e2e6 --- /dev/null +++ b/src/x11.c @@ -0,0 +1,111 @@ + /* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.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.tizenopensource.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 + +#define DEFAULT_WINDOW_H 1280 + +void prop_string_set(const char *name, const char *value) +{ + 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); +} + +void prop_int_set(const char *name, unsigned int val) +{ + 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); +} + +void set_window_scale(void) +{ + 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); +} diff --git a/src/xmonitor.c b/src/xmonitor.c new file mode 100644 index 0000000..f337925 --- /dev/null +++ b/src/xmonitor.c @@ -0,0 +1,304 @@ + /* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.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.tizenopensource.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 "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; + + + +static inline int _get_pid(Ecore_X_Window win) +{ + int pid; + Ecore_X_Atom atom; + unsigned char *in_pid; + 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 (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; +} + + + +bool _set_idlescreen_top(void) +{ + 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); + } + + return true; +} + + + +static Eina_Bool _create_cb(void *data, int type, void *event) +{ + Ecore_X_Event_Window_Create *info = event; + + _D("Create a window[%x]", info->win); + + ecore_x_window_client_sniff(info->win); + + 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) +{ + 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); + + return ECORE_CALLBACK_PASS_ON; +} + + + +static Eina_Bool _focus_out_cb(void *data, int type, void *event) +{ + Ecore_X_Event_Window_Focus_Out *info = event; + + _D("Focus out a window[%x]", info->win); + + return ECORE_CALLBACK_PASS_ON; +} + + + +static inline void _sniff_all_windows(void) +{ + 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]; + + /* + * Now we don't need to care about visibility of window, + * just check whether it is registered or not. + * (ecore_x_window_visible_get(ret)) + */ + 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); + } + + return; +} + + + +int xmonitor_init(void) +{ + 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; + + return -EFAULT; +} + +void xmonitor_fini(void) +{ + 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; +} + +/* End of a file */ diff --git a/test/get_entry.c b/test/get_entry.c new file mode 100755 index 0000000..2437388 --- /dev/null +++ b/test/get_entry.c @@ -0,0 +1,89 @@ + /* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.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.tizenopensource.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 new file mode 100755 index 0000000..90bea9b --- /dev/null +++ b/test/get_theme.c @@ -0,0 +1,56 @@ + /* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.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.tizenopensource.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 new file mode 100755 index 0000000..d6f6195 --- /dev/null +++ b/test/set_theme.c @@ -0,0 +1,62 @@ + /* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.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.tizenopensource.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