summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJin Yoon <jinny.yoon@samsung.com>2012-12-06 22:35:33 +0900
committerJin Yoon <jinny.yoon@samsung.com>2012-12-06 22:35:33 +0900
commitcd81790ee4cc97134f63a2da9f72ac6c19b15082 (patch)
tree50cd9ba083d718e6ab65980df6b554ca2608ff89
parent19cf41d85df93529c81692f476545d415597ee92 (diff)
downloadstarter-cd81790ee4cc97134f63a2da9f72ac6c19b15082.tar.gz
starter-cd81790ee4cc97134f63a2da9f72ac6c19b15082.tar.bz2
starter-cd81790ee4cc97134f63a2da9f72ac6c19b15082.zip
Code sync
Change-Id: I78714d99d6321f357c5253085261ae567cfcc57b
-rwxr-xr-xCMakeLists.txt85
-rwxr-xr-xboot-mgr/CMakeLists.txt42
-rwxr-xr-xboot-mgr/starter.c273
-rwxr-xr-xboot-mgr/starter.h27
-rwxr-xr-xboot-mgr/x11.c82
-rwxr-xr-xboot-mgr/x11.h23
-rwxr-xr-xdebian/control2
-rwxr-xr-xdebian/starter.postinst2
-rw-r--r--include/hw_key.h24
-rwxr-xr-xinclude/lock-daemon.h24
-rw-r--r--[-rwxr-xr-x]include/lockd-debug.h (renamed from lock-mgr/include/lockd-debug.h)32
-rw-r--r--include/lockd-process-mgr.h40
-rw-r--r--include/lockd-window-mgr.h48
-rwxr-xr-xinclude/menu_daemon.h29
-rw-r--r--include/pkg_event.h46
-rw-r--r--include/starter-util.h35
-rwxr-xr-xinclude/starter-vconf.h37
-rw-r--r--include/starter.h28
-rw-r--r--include/util.h79
-rw-r--r--include/x11.h26
-rw-r--r--include/xmonitor.h25
-rwxr-xr-xlock-mgr/CMakeLists.txt48
-rwxr-xr-xlock-mgr/include/lock-daemon.h22
-rwxr-xr-xlock-mgr/include/lockd-process-mgr.h29
-rwxr-xr-xlock-mgr/include/lockd-window-mgr.h39
-rwxr-xr-xlock-mgr/src/lock-daemon.c272
-rwxr-xr-xlock-mgr/src/lockd-process-mgr.c146
-rwxr-xr-xlock-mgr/src/lockd-window-mgr.c270
-rwxr-xr-xlock-setting/CMakeLists.txt10
-rwxr-xr-xlock-setting/lockapp-setting/CMakeLists.txt39
-rwxr-xr-xlock-setting/lockapp-setting/include/openlock-setting-debug.h48
-rwxr-xr-xlock-setting/lockapp-setting/include/openlock-setting-main.h48
-rwxr-xr-xlock-setting/lockapp-setting/include/openlock-setting-pw.h30
-rwxr-xr-xlock-setting/lockapp-setting/include/openlock-setting-util.h28
-rwxr-xr-xlock-setting/lockapp-setting/include/openlock-setting.h40
-rwxr-xr-xlock-setting/lockapp-setting/src/openlock-setting-main.c342
-rwxr-xr-xlock-setting/lockapp-setting/src/openlock-setting-pw.c522
-rwxr-xr-xlock-setting/lockapp-setting/src/openlock-setting-util.c65
-rwxr-xr-xlock-setting/lockapp-setting/src/openlock-setting.c217
-rwxr-xr-xlock-setting/lockscreen-options/CMakeLists.txt54
-rwxr-xr-xlock-setting/lockscreen-options/include/lockscreen-options-debug.h48
-rwxr-xr-xlock-setting/lockscreen-options/include/lockscreen-options-dualclock.h28
-rwxr-xr-xlock-setting/lockscreen-options/include/lockscreen-options-locktitle.h26
-rwxr-xr-xlock-setting/lockscreen-options/include/lockscreen-options-main.h28
-rwxr-xr-xlock-setting/lockscreen-options/include/lockscreen-options-shortcuts-edit.h25
-rwxr-xr-xlock-setting/lockscreen-options/include/lockscreen-options-shortcuts.h26
-rwxr-xr-xlock-setting/lockscreen-options/include/lockscreen-options-util.h72
-rwxr-xr-xlock-setting/lockscreen-options/include/lockscreen-options.h64
-rwxr-xr-xlock-setting/lockscreen-options/res/edje/lockscreen-options-locktitle.edc432
-rwxr-xr-xlock-setting/lockscreen-options/res/edje/lockscreen-options-shortcuts.edc116
-rwxr-xr-xlock-setting/lockscreen-options/res/edje/lockscreen-options-thumbnail.edc66
-rwxr-xr-xlock-setting/lockscreen-options/res/edje/lockscreen-options.edc23
-rwxr-xr-xlock-setting/lockscreen-options/res/images/B09_Add Text_sip_option_Italic.pngbin0 -> 3404 bytes
-rwxr-xr-xlock-setting/lockscreen-options/res/images/B09_Add Text_sip_option_bg.pngbin0 -> 3297 bytes
-rwxr-xr-xlock-setting/lockscreen-options/res/images/B09_Add Text_sip_option_bold.pngbin0 -> 3616 bytes
-rwxr-xr-xlock-setting/lockscreen-options/res/images/B09_Add Text_sip_option_color.pngbin0 -> 3652 bytes
-rwxr-xr-xlock-setting/lockscreen-options/res/images/B09_Add Text_sip_option_size.pngbin0 -> 3612 bytes
-rwxr-xr-xlock-setting/lockscreen-options/res/images/B09_Add Text_sip_option_style.pngbin0 -> 5205 bytes
-rwxr-xr-xlock-setting/lockscreen-options/res/images/B09_Add Text_sip_option_underline.pngbin0 -> 3476 bytes
-rwxr-xr-xlock-setting/lockscreen-options/res/images/B09_key_btn_01.pngbin0 -> 3423 bytes
-rwxr-xr-xlock-setting/lockscreen-options/res/images/B09_key_btn_press.pngbin0 -> 3494 bytes
-rwxr-xr-xlock-setting/lockscreen-options/res/images/icon_add.pngbin0 -> 1205 bytes
-rwxr-xr-xlock-setting/lockscreen-options/res/images/icon_delete.pngbin0 -> 6062 bytes
-rwxr-xr-xlock-setting/lockscreen-options/res/images/icon_delete_press.pngbin0 -> 6231 bytes
-rwxr-xr-xlock-setting/lockscreen-options/res/images/mainmenu_icon.pngbin0 -> 2184 bytes
-rwxr-xr-xlock-setting/lockscreen-options/src/lockscreen-options-dualclock.c249
-rwxr-xr-xlock-setting/lockscreen-options/src/lockscreen-options-locktitle.c535
-rwxr-xr-xlock-setting/lockscreen-options/src/lockscreen-options-main.c462
-rwxr-xr-xlock-setting/lockscreen-options/src/lockscreen-options-shortcuts-edit.c576
-rwxr-xr-xlock-setting/lockscreen-options/src/lockscreen-options-shortcuts.c803
-rwxr-xr-xlock-setting/lockscreen-options/src/lockscreen-options-util.c174
-rwxr-xr-xlock-setting/lockscreen-options/src/lockscreen-options.c217
-rwxr-xr-xlock-setting/po/CMakeLists.txt26
-rw-r--r--lock-setting/po/ar.po54
-rw-r--r--lock-setting/po/az.po54
-rw-r--r--lock-setting/po/bg.po54
-rw-r--r--lock-setting/po/ca.po54
-rw-r--r--lock-setting/po/cs.po54
-rw-r--r--lock-setting/po/da.po54
-rw-r--r--lock-setting/po/de_DE.po54
-rw-r--r--lock-setting/po/el_GR.po54
-rw-r--r--lock-setting/po/en.po54
-rw-r--r--lock-setting/po/en_PH.po54
-rw-r--r--lock-setting/po/en_US.po54
-rw-r--r--lock-setting/po/es_ES.po54
-rw-r--r--lock-setting/po/es_MX.po54
-rw-r--r--lock-setting/po/es_US.po51
-rw-r--r--lock-setting/po/et.po54
-rw-r--r--lock-setting/po/eu.po54
-rw-r--r--lock-setting/po/fi.po54
-rw-r--r--lock-setting/po/fr_CA.po54
-rw-r--r--lock-setting/po/fr_FR.po54
-rw-r--r--lock-setting/po/ga.po54
-rw-r--r--lock-setting/po/gl.po54
-rw-r--r--lock-setting/po/hi.po54
-rw-r--r--lock-setting/po/hr.po54
-rw-r--r--lock-setting/po/hu.po54
-rw-r--r--lock-setting/po/hy.po54
-rw-r--r--lock-setting/po/is.po54
-rw-r--r--lock-setting/po/it_IT.po54
-rw-r--r--lock-setting/po/ja_JP.po54
-rw-r--r--lock-setting/po/ka.po54
-rw-r--r--lock-setting/po/kk.po54
-rw-r--r--lock-setting/po/ko_KR.po54
-rw-r--r--lock-setting/po/lt.po54
-rw-r--r--lock-setting/po/lv.po54
-rw-r--r--lock-setting/po/mk.po54
-rw-r--r--lock-setting/po/nb.po54
-rw-r--r--lock-setting/po/nl_NL.po54
-rw-r--r--lock-setting/po/pl.po54
-rw-r--r--lock-setting/po/pt_BR.po54
-rw-r--r--lock-setting/po/pt_PT.po54
-rw-r--r--lock-setting/po/ro.po54
-rw-r--r--lock-setting/po/ru_RU.po54
-rw-r--r--lock-setting/po/sk.po54
-rw-r--r--lock-setting/po/sl.po54
-rw-r--r--lock-setting/po/sr.po54
-rw-r--r--lock-setting/po/sv.po54
-rw-r--r--lock-setting/po/tr_TR.po54
-rw-r--r--lock-setting/po/uk.po54
-rw-r--r--lock-setting/po/uz.po54
-rw-r--r--lock-setting/po/zh_CN.po54
-rw-r--r--lock-setting/po/zh_HK.po54
-rw-r--r--lock-setting/po/zh_SG.po54
-rw-r--r--lock-setting/po/zh_TW.po54
-rw-r--r--packaging/starter.service6
-rwxr-xr-xpackaging/starter.spec77
-rwxr-xr-xrd3starter18
-rwxr-xr-xrd4starter12
-rwxr-xr-xsrc/hw_key.c347
-rwxr-xr-xsrc/lock-daemon.c743
-rw-r--r--[-rwxr-xr-x]src/lockd-debug.c (renamed from lock-mgr/src/lockd-debug.c)42
-rwxr-xr-xsrc/lockd-process-mgr.c234
-rw-r--r--src/lockd-window-mgr.c709
-rwxr-xr-xsrc/menu_daemon.c320
-rw-r--r--src/pkg_event.c306
-rwxr-xr-xsrc/starter.c331
-rw-r--r--src/x11.c111
-rw-r--r--src/xmonitor.c304
-rwxr-xr-xtest/get_entry.c89
-rwxr-xr-xtest/get_theme.c56
-rwxr-xr-xtest/set_theme.c62
142 files changed, 12496 insertions, 1350 deletions
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 <Elementary.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-#include <unistd.h>
-#include <string.h>
-#include <poll.h>
-
-#include <aul.h>
-#include <vconf.h>
-#include <heynoti.h>
-#include <signal.h>
-
-
-#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 <sys/time.h>
-
-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 <string.h>
-#include <stdio.h>
-#include <stdlib.h>
-
-#include <X11/Xlib.h>
-#include <X11/Xatom.h>
-#include <X11/Xutil.h>
-
-#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 <seungtaek.chung@samsung.com>, Mi-Ju Lee <miju52.lee@samsung.com>, Xi Zhichan <zhichan.xi@samsung.com>
-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
index e017667..2da144e 100755..100644
--- 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 <sys/types.h>
+#include <stdbool.h>
+
+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 <stdbool.h>
+
+#if !defined(PUBLIC)
+#define PUBLIC __attribute__((visibility("default"))) /**<All other from outside modules can access this typed API */
+#endif
+
+#if !defined(PROTECTED)
+#define PROTECTED __attribute__((visibility("hidden"))) /**<All other from outside modules can not access this directly */
+#endif
+
+#if !defined(PRIVATE)
+#define PRIVATE __attribute__((visibility("internal"))) /**<Does not export APIs to the other. only can be accessed in this module */
+#endif
+
+
+struct desktop_notifier {
+ int number;
+ int ifd;
+ Ecore_Fd_Handler *handler;
+};
+
+
+PRIVATE void pkg_event_init(void);
+PRIVATE void pkg_event_fini(void);
+
+#endif
diff --git a/include/starter-util.h b/include/starter-util.h
new file mode 100644
index 0000000..31e3e9d
--- /dev/null
+++ b/include/starter-util.h
@@ -0,0 +1,35 @@
+ /*
+ * 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_UTIL_H__
+#define __STARTER_UTIL_H__
+
+#include <stdio.h>
+#include <sys/time.h>
+
+#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 <seungtaek.chung@samsung.com>, Mi-Ju Lee <miju52.lee@samsung.com>, Xi Zhichan <zhichan.xi@samsung.com>
- *
- * 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 <sys/time.h>
+
+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 <dlog.h>
+
+#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 <Elementary.h>
-
-#include <vconf.h>
-#include <vconf-keys.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <sys/un.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-#include <errno.h>
-#include <unistd.h>
-#include <sys/param.h>
-#include <errno.h>
-
-#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 <vconf.h>
-#include <vconf-keys.h>
-
-#include <aul.h>
-
-#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; i<RETRY_MAXCOUNT; i++)
- {
- pid = aul_launch_app(lock_app_path, b);
-
- LOCKD_DBG("aul_launch_app(%s, NULL), pid = %d", lock_app_path, pid);
-
- if (pid == AUL_R_ECOMM) {
- LOCKD_DBG("Relaunch lock application [%d]times", i);
- usleep(RELAUNCH_INTERVAL);
- } else if (pid == AUL_R_ERROR) {
- LOCKD_DBG("launch[%s] is failed, launch default lock screen", lock_app_path);
- pid = aul_launch_app(LOCKD_DEFAULT_LOCKSCREEN, b);
- if (pid >0) {
- 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 <Elementary.h>
-#include <Ecore_X.h>
-#include <utilX.h>
-#include <vconf.h>
-#include <bundle.h>
-#include <appcore-efl.h>
-#include <app.h>
-
-#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 <stdio.h>
+
+#define OPENLOCK_USING_PLATFORM_DEBUG
+
+#ifdef OPENLOCK_USING_PLATFORM_DEBUG
+#ifndef LOG_TAG
+#define LOG_TAG "openlock-setting"
+#endif
+#include <dlog.h>
+
+#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 <Elementary.h>
+#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 <Elementary.h>
+
+#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 <Elementary.h>
+
+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 <Elementary.h>
+#include <libintl.h>
+#include <ui-gadget.h>
+
+#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 <vconf.h>
+#include <vconf-keys.h>
+#include <ui-gadget.h>
+#include <ui-gadget-module.h>
+#include <aul.h>
+#include <ail.h>
+
+#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 <appcore-efl.h>
+#include <Ecore_X.h>
+#include <vconf.h>
+#include <vconf-keys.h>
+
+#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 <Elementary.h>
+#include <ui-gadget-module.h>
+
+#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 <stdio.h>
+
+#define OPENLOCK_USING_PLATFORM_DEBUG
+
+#ifdef OPENLOCK_USING_PLATFORM_DEBUG
+#ifndef LOG_TAG
+#define LOG_TAG "lockscreen-options"
+#endif
+#include <dlog.h>
+
+#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 <Elementary.h>
+#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 <Elementary.h>
+#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 <Elementary.h>
+
+#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 <Elementary.h>
+#include <libintl.h>
+#include <ui-gadget.h>
+
+#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 0000000..ef2092c
--- /dev/null
+++ b/lock-setting/lockscreen-options/res/images/B09_Add Text_sip_option_Italic.png
Binary files differ
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 0000000..dcaef91
--- /dev/null
+++ b/lock-setting/lockscreen-options/res/images/B09_Add Text_sip_option_bg.png
Binary files differ
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 0000000..d222f74
--- /dev/null
+++ b/lock-setting/lockscreen-options/res/images/B09_Add Text_sip_option_bold.png
Binary files differ
diff --git a/lock-setting/lockscreen-options/res/images/B09_Add Text_sip_option_color.png b/lock-setting/lockscreen-options/res/images/B09_Add Text_sip_option_color.png
new file mode 100755
index 0000000..3b807c1
--- /dev/null
+++ b/lock-setting/lockscreen-options/res/images/B09_Add Text_sip_option_color.png
Binary files differ
diff --git a/lock-setting/lockscreen-options/res/images/B09_Add Text_sip_option_size.png b/lock-setting/lockscreen-options/res/images/B09_Add Text_sip_option_size.png
new file mode 100755
index 0000000..b7a6260
--- /dev/null
+++ b/lock-setting/lockscreen-options/res/images/B09_Add Text_sip_option_size.png
Binary files differ
diff --git a/lock-setting/lockscreen-options/res/images/B09_Add Text_sip_option_style.png b/lock-setting/lockscreen-options/res/images/B09_Add Text_sip_option_style.png
new file mode 100755
index 0000000..7263e6e
--- /dev/null
+++ b/lock-setting/lockscreen-options/res/images/B09_Add Text_sip_option_style.png
Binary files differ
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 0000000..959467b
--- /dev/null
+++ b/lock-setting/lockscreen-options/res/images/B09_Add Text_sip_option_underline.png
Binary files differ
diff --git a/lock-setting/lockscreen-options/res/images/B09_key_btn_01.png b/lock-setting/lockscreen-options/res/images/B09_key_btn_01.png
new file mode 100755
index 0000000..826be34
--- /dev/null
+++ b/lock-setting/lockscreen-options/res/images/B09_key_btn_01.png
Binary files differ
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 0000000..ee2484d
--- /dev/null
+++ b/lock-setting/lockscreen-options/res/images/B09_key_btn_press.png
Binary files differ
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 0000000..efa4733
--- /dev/null
+++ b/lock-setting/lockscreen-options/res/images/icon_add.png
Binary files differ
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 0000000..7145638
--- /dev/null
+++ b/lock-setting/lockscreen-options/res/images/icon_delete.png
Binary files differ
diff --git a/lock-setting/lockscreen-options/res/images/icon_delete_press.png b/lock-setting/lockscreen-options/res/images/icon_delete_press.png
new file mode 100755
index 0000000..2ac8311
--- /dev/null
+++ b/lock-setting/lockscreen-options/res/images/icon_delete_press.png
Binary files differ
diff --git a/lock-setting/lockscreen-options/res/images/mainmenu_icon.png b/lock-setting/lockscreen-options/res/images/mainmenu_icon.png
new file mode 100755
index 0000000..ab3194b
--- /dev/null
+++ b/lock-setting/lockscreen-options/res/images/mainmenu_icon.png
Binary files differ
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 <vconf.h>
+#include <vconf-keys.h>
+#include <ui-gadget.h>
+#include <ui-gadget-module.h>
+#include <ail.h>
+
+#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 <Ecore_X.h>
+
+#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 <vconf.h>
+#include <vconf-keys.h>
+#include <ui-gadget.h>
+#include <ui-gadget-module.h>
+#include <ail.h>
+
+#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 <Elementary.h>
+#include <Ecore_X.h>
+#include <ail.h>
+#include <vconf.h>
+#include <vconf-keys.h>
+
+#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),
+ "<font_size=40><align=center>%s</align></font_size>",
+ 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 <Elementary.h>
+#include <Ecore_X.h>
+#include <ail.h>
+#include <vconf.h>
+#include <vconf-keys.h>
+
+#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),
+ "<font_size=40><align=center>%s</align></font_size>",
+ 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),
+ "<font_size=32><align=center><color=#7C7C7C>%s</color></align></font_size>",
+ 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, &ltc, (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 <Elementary.h>
+#include <ui-gadget-module.h>
+
+#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 <ail.h>
+#include <bundle.h>
+#include <Elementary.h>
+#include <Ecore_X.h>
+#include <Ecore_Input.h>
+#include <sysman.h>
+#include <syspopup_caller.h>
+#include <utilX.h>
+#include <vconf.h>
+#include <system/media_key.h>
+
+#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 <Elementary.h>
+
+#include <vconf.h>
+#include <vconf-keys.h>
+
+#include <glib.h>
+#include <poll.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <sys/socket.h>
+#include <sys/un.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <errno.h>
+#include <unistd.h>
+#include <sys/param.h>
+#include <errno.h>
+
+#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
index bff5949..69545de 100755..100644
--- 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 <stdio.h>
#include <stdarg.h>
@@ -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(&current_time);
- gmtime_r(&current_time, &local_t);
+ /* local_t = gmtime(&current_time); */
+ gmtime_r(&current_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 <vconf.h>
+#include <vconf-keys.h>
+
+#include <aul.h>
+
+#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; i<RETRY_MAXCOUNT; i++)
+ {
+ pid = aul_launch_app(lock_app_path, b);
+
+ LOCKD_DBG("aul_launch_app(%s), pid = %d", lock_app_path, pid);
+
+ if (pid == AUL_R_ECOMM) {
+ LOCKD_DBG("Relaunch lock application [%d]times", i);
+ usleep(RELAUNCH_INTERVAL);
+ } else if (pid == AUL_R_ERROR) {
+ LOCKD_DBG("launch[%s] is failed, launch default lock screen", lock_app_path);
+ pid = aul_launch_app(LOCKD_DEFAULT_LOCKSCREEN, b);
+ if (pid >0) {
+ 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; i<RETRY_MAXCOUNT; i++)
+ {
+ pid = aul_launch_app(LOCKD_DEFAULT_PKG_NAME, NULL);
+
+ LOCKD_DBG("aul_launch_app(%s), pid = %d", LOCKD_DEFAULT_PKG_NAME, pid);
+
+ if (pid == AUL_R_ECOMM) {
+ LOCKD_DBG("Relaunch lock application [%d]times", i);
+ usleep(RELAUNCH_INTERVAL);
+ } else if (pid == AUL_R_ERROR) {
+ LOCKD_DBG("launch[%s] is failed, launch default lock screen", LOCKD_DEFAULT_PKG_NAME);
+ pid = aul_launch_app(LOCKD_DEFAULT_LOCKSCREEN, NULL);
+ if (pid >0) {
+ 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 <Elementary.h>
+#include <Ecore_X.h>
+#include <utilX.h>
+#include <ui-gadget.h>
+#include <vconf.h>
+#include <bundle.h>
+#include <appcore-efl.h>
+#include <app.h>
+
+#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 <ail.h>
+#include <aul.h>
+#include <db-util.h>
+#include <Elementary.h>
+#include <fcntl.h>
+#include <stdio.h>
+#include <sysman.h>
+#include <syspopup_caller.h>
+#include <sys/types.h>
+#include <sys/wait.h>
+#include <vconf.h>
+#include <errno.h>
+
+#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<RETRY_MAXCOUNT; i++)
+ {
+ pid = syspopup_launch("volume", NULL);
+
+ _D("syspopup_launch(volume), pid = %d", pid);
+
+ if (pid <0) {
+ _D("syspopup_launch(volume)is failed [%d]times", i);
+ usleep(RELAUNCH_INTERVAL);
+ } else {
+ s_info.volume_pid = pid;
+ return;
+ }
+ }
+}
+
+int menu_daemon_check_dead_signal(int pid)
+{
+ char *pkgname;
+
+ if (s_info.power_off) {
+ _D("Power off. ignore dead cb\n");
+ return 0;
+ }
+
+ _D("Process %d is termianted", pid);
+
+ if (pid < 0)
+ return 0;
+
+ pkgname = _get_selected_pkgname();
+ if (!pkgname)
+ return 0;
+
+ if (pid == s_info.home_pid) {
+ /* Relaunch */
+ _D("pkg_name : %s", pkgname);
+ _open_homescreen(pkgname);
+ } else if (pid == s_info.volume_pid) {
+ /* Relaunch */
+ _launch_volume();
+ } else {
+ _D("Unknown process, ignore it (pid %d, home pid %d)",
+ pid, s_info.home_pid);
+ }
+
+ free(pkgname);
+
+ return 0;
+}
+
+
+
+void menu_daemon_init(void *data)
+{
+ _D( "[MENU_DAEMON]menu_daemon_init is invoked");
+
+ aul_launch_init(NULL,NULL);
+
+ create_key_window();
+ if (xmonitor_init() < 0) _E("cannot init xmonitor");
+
+ pkg_event_init();
+ _launch_volume();
+
+ if (unlink(SAT_DESKTOP_FILE) != 0)
+ _E("cannot remove sat-ui desktop.");
+
+ if (vconf_notify_key_changed(VCONFKEY_SETAPPL_SELECTED_PACKAGE_NAME, _pkg_changed, NULL) < 0)
+ _E("Failed to add callback for package change event");
+
+ if (vconf_notify_key_changed(VCONFKEY_STARTER_SEQUENCE, _show_cb, NULL) < 0)
+ _E("Failed to add callback for show event");
+
+ _pkg_changed(NULL, NULL);
+ // THIS ROUTINE IS FOR SAT.
+ vconf_set_int(VCONFKEY_IDLE_SCREEN_LAUNCHED, VCONFKEY_IDLE_SCREEN_LAUNCHED_TRUE);
+}
+
+
+
+void menu_daemon_fini(void)
+{
+ vconf_ignore_key_changed(VCONFKEY_STARTER_SEQUENCE, _show_cb);
+ vconf_ignore_key_changed(VCONFKEY_SETAPPL_SELECTED_PACKAGE_NAME, _pkg_changed);
+
+ xmonitor_fini();
+ pkg_event_fini();
+ destroy_key_window();
+}
+
+
+
+// End of a file
diff --git a/src/pkg_event.c b/src/pkg_event.c
new file mode 100644
index 0000000..c1508f1
--- /dev/null
+++ b/src/pkg_event.c
@@ -0,0 +1,306 @@
+ /*
+ * 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 <ail.h>
+#include <errno.h>
+#include <Elementary.h>
+#include <Ecore.h>
+#include <Ecore_File.h>
+#include <stdio.h>
+#include <sys/inotify.h>
+#include <sys/stat.h>
+#include <sys/ioctl.h>
+#include <stdbool.h>
+#include <unistd.h>
+#include <vconf.h>
+
+#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 <Elementary.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <unistd.h>
+#include <string.h>
+#include <poll.h>
+
+#include <aul.h>
+#include <vconf.h>
+#include <heynoti.h>
+#include <signal.h>
+
+
+#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 <string.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+#include <X11/Xlib.h>
+#include <X11/Xatom.h>
+#include <X11/Xutil.h>
+
+#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 <ail.h>
+#include <aul.h>
+#include <dlog.h>
+#include <Ecore.h>
+#include <Ecore_X.h>
+#include <Evas.h>
+#include <errno.h>
+#include <stdbool.h>
+#include <stdio.h>
+#include <sys/shm.h>
+#include <vconf.h>
+//#include <X11/Xatom.h>
+//#include <X11/Xlib.h>
+//#include <X11/Xutil.h>
+//#include <X11/extensions/Xcomposite.h>
+//#include <X11/extensions/XShm.h>
+
+#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 <stdio.h>
+#include <X11/Xlib.h>
+#include <X11/Xatom.h>
+#include <X11/Xutil.h>
+
+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 <stdio.h>
+#include <X11/Xlib.h>
+#include <X11/Xatom.h>
+#include <X11/Xutil.h>
+
+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 <string.h>
+
+#include <X11/Xlib.h>
+#include <X11/Xatom.h>
+#include <X11/Xutil.h>
+
+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;
+}