diff options
author | Jin Yoon <jinny.yoon@samsung.com> | 2012-12-06 22:35:33 +0900 |
---|---|---|
committer | Jin Yoon <jinny.yoon@samsung.com> | 2012-12-06 22:35:33 +0900 |
commit | cd81790ee4cc97134f63a2da9f72ac6c19b15082 (patch) | |
tree | 50cd9ba083d718e6ab65980df6b554ca2608ff89 | |
parent | 19cf41d85df93529c81692f476545d415597ee92 (diff) | |
download | starter-cd81790ee4cc97134f63a2da9f72ac6c19b15082.tar.gz starter-cd81790ee4cc97134f63a2da9f72ac6c19b15082.tar.bz2 starter-cd81790ee4cc97134f63a2da9f72ac6c19b15082.zip |
Code sync
Change-Id: I78714d99d6321f357c5253085261ae567cfcc57b
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 Binary files differnew file mode 100755 index 0000000..ef2092c --- /dev/null +++ b/lock-setting/lockscreen-options/res/images/B09_Add Text_sip_option_Italic.png 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 Binary files differnew file mode 100755 index 0000000..dcaef91 --- /dev/null +++ b/lock-setting/lockscreen-options/res/images/B09_Add Text_sip_option_bg.png 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 Binary files differnew file mode 100755 index 0000000..d222f74 --- /dev/null +++ b/lock-setting/lockscreen-options/res/images/B09_Add Text_sip_option_bold.png 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 Binary files differnew file mode 100755 index 0000000..3b807c1 --- /dev/null +++ b/lock-setting/lockscreen-options/res/images/B09_Add Text_sip_option_color.png 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 Binary files differnew file mode 100755 index 0000000..b7a6260 --- /dev/null +++ b/lock-setting/lockscreen-options/res/images/B09_Add Text_sip_option_size.png 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 Binary files differnew file mode 100755 index 0000000..7263e6e --- /dev/null +++ b/lock-setting/lockscreen-options/res/images/B09_Add Text_sip_option_style.png 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 Binary files differnew file mode 100755 index 0000000..959467b --- /dev/null +++ b/lock-setting/lockscreen-options/res/images/B09_Add Text_sip_option_underline.png 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 Binary files differnew file mode 100755 index 0000000..826be34 --- /dev/null +++ b/lock-setting/lockscreen-options/res/images/B09_key_btn_01.png 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 Binary files differnew file mode 100755 index 0000000..ee2484d --- /dev/null +++ b/lock-setting/lockscreen-options/res/images/B09_key_btn_press.png diff --git a/lock-setting/lockscreen-options/res/images/icon_add.png b/lock-setting/lockscreen-options/res/images/icon_add.png Binary files differnew file mode 100755 index 0000000..efa4733 --- /dev/null +++ b/lock-setting/lockscreen-options/res/images/icon_add.png diff --git a/lock-setting/lockscreen-options/res/images/icon_delete.png b/lock-setting/lockscreen-options/res/images/icon_delete.png Binary files differnew file mode 100755 index 0000000..7145638 --- /dev/null +++ b/lock-setting/lockscreen-options/res/images/icon_delete.png diff --git a/lock-setting/lockscreen-options/res/images/icon_delete_press.png b/lock-setting/lockscreen-options/res/images/icon_delete_press.png Binary files differnew file mode 100755 index 0000000..2ac8311 --- /dev/null +++ b/lock-setting/lockscreen-options/res/images/icon_delete_press.png diff --git a/lock-setting/lockscreen-options/res/images/mainmenu_icon.png b/lock-setting/lockscreen-options/res/images/mainmenu_icon.png Binary files differnew file mode 100755 index 0000000..ab3194b --- /dev/null +++ b/lock-setting/lockscreen-options/res/images/mainmenu_icon.png 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, <c, (void *)index, NULL, + ELM_GENLIST_ITEM_NONE, + _lockscreen_options_gl_options_sel, + (void *)index); + } + + evas_object_event_callback_add(genlist, EVAS_CALLBACK_DEL, + _lockscreen_options_select_apps_delete_cb, + NULL); + elm_naviframe_item_push(options_shortcuts_view_data->ug_data->navi_bar, lockscreen_optoins_get_string(IDS_LOCKSCREEN_OPTIONS_SELECT_APPLICATIONS), NULL, NULL, genlist, NULL); /* the same tile */ +} + +static void _lockscreen_options_shortcuts_edit_cb(void *data, Evas_Object * obj, void *event_info) +{ + lockscreen_options_shortcuts_create_edit_view(data); +} + +void lockscreen_options_shortcuts_create_view(void *data) +{ + lockscreen_options_ug_data *ug_data = + (lockscreen_options_ug_data *) data; + if (ug_data == NULL) { + return; + } + Evas_Object *navi_bar = ug_data->navi_bar; + Evas_Object *layout = NULL; + + if (navi_bar == NULL) { + LOCKOPTIONS_ERR("navi_bar is null."); + return; + } + + options_shortcuts_view_data = + (options_shortcuts_view_s *) calloc(1, + sizeof + (options_shortcuts_view_s)); + options_shortcuts_view_data->ug_data = ug_data; + + layout = + lockscreen_options_util_create_layout(navi_bar, + EDJE_DIR + "/lockscreen-options.edj", + "lockscreen.options.shortcuts.main"); + _lockscreen_options_shortcuts_help_text_create(layout); + _lockscreen_options_shortcuts_gengrid_create(layout); + + edit_item= elm_button_add(navi_bar); + elm_object_style_set(edit_item, "naviframe/toolbar/default"); + elm_object_text_set(edit_item, _S("IDS_COM_BODY_EDIT")); + evas_object_smart_callback_add(edit_item, "clicked", _lockscreen_options_shortcuts_edit_cb, ug_data); + + Evas_Object *back_button = elm_button_add(navi_bar); + elm_object_style_set(back_button, "naviframe/back_btn/default"); + evas_object_smart_callback_add(back_button, "clicked", _lockscreen_options_shortcuts_back_cb, ug_data); + evas_object_event_callback_add(layout, EVAS_CALLBACK_DEL, + _lockscreen_options_shortcuts_delete_cb, NULL); + + + Elm_Object_Item *navi_item = elm_naviframe_item_push(navi_bar, lockscreen_optoins_get_string(IDS_LOCKSCREEN_OPTIONS_SET_SHORTCUTS), back_button, NULL, layout, NULL); /* the same tile */ + elm_object_item_part_content_set(navi_item , "toolbar_button1", edit_item); + + Eina_Bool is_have = EINA_FALSE; + is_have = lockscreen_options_shortcuts_check_items(); + if(is_have == EINA_TRUE){ + elm_object_disabled_set(edit_item, EINA_FALSE); + }else{ + elm_object_disabled_set(edit_item, EINA_TRUE); + } +} + +void lockscreen_options_shortcuts_update_view() +{ + Elm_Object_Item *object_item = NULL; + + object_item = elm_gengrid_first_item_get(options_shortcuts_view_data->gengrid); + while (object_item) { + elm_gengrid_item_update(object_item); + object_item = elm_gengrid_item_next_get(object_item); + } + + Eina_Bool is_have = EINA_FALSE; + is_have = lockscreen_options_shortcuts_check_items(); + if(is_have == EINA_TRUE){ + elm_object_disabled_set(edit_item, EINA_FALSE); + }else{ + elm_object_disabled_set(edit_item, EINA_TRUE); + } +} + +Eina_Bool lockscreen_options_shortcuts_check_items() +{ + char *pkg_name1 = NULL; + char *pkg_name2 = NULL; + char *pkg_name3 = NULL; + char *pkg_name4 = NULL; + Eina_Bool is_have = EINA_FALSE; + + pkg_name1 = vconf_get_str(VCONFKEY_LOCKSCREEN_SHORTCUT1); + pkg_name2 = vconf_get_str(VCONFKEY_LOCKSCREEN_SHORTCUT2); + pkg_name3 = vconf_get_str(VCONFKEY_LOCKSCREEN_SHORTCUT3); + pkg_name4 = vconf_get_str(VCONFKEY_LOCKSCREEN_SHORTCUT4); + + if((pkg_name1 == NULL || strlen(pkg_name1) == 0) && (pkg_name2 == NULL || strlen(pkg_name2) == 0) + && (pkg_name3 == NULL || strlen(pkg_name3) == 0) && (pkg_name4 == NULL || strlen(pkg_name4) == 0)) + { + is_have = EINA_FALSE; + //elm_object_disabled_set(edit_item, EINA_TRUE); + } + else + { + is_have = EINA_TRUE; + //elm_object_disabled_set(edit_item, EINA_FALSE); + } + if(pkg_name1 != NULL) + { + free(pkg_name1); + pkg_name1 = NULL; + } + if(pkg_name2 != NULL) + { + free(pkg_name2); + pkg_name2 = NULL; + } + if(pkg_name3 != NULL) + { + free(pkg_name3); + pkg_name3 = NULL; + } + if(pkg_name4 != NULL) + { + free(pkg_name4); + pkg_name4 = NULL; + } + return is_have; +} diff --git a/lock-setting/lockscreen-options/src/lockscreen-options-util.c b/lock-setting/lockscreen-options/src/lockscreen-options-util.c new file mode 100755 index 0000000..4d3afb2 --- /dev/null +++ b/lock-setting/lockscreen-options/src/lockscreen-options-util.c @@ -0,0 +1,174 @@ + /* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.tizenopensource.org/license + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + + +#include "lockscreen-options-debug.h" +#include "lockscreen-options.h" +#include "lockscreen-options-util.h" + +const char *sys_str_table[] = { + "IDS_COM_SK_OK", + "IDS_COM_SK_CANCEL", +}; + +const char *app_str_table[] = { + "IDS_ST_BODY_SHORTCUTS", + "IDS_ST_BODY_SET_SHORTCUTS_ON_LOCK_SCREEN", +#if USE_TITLE_AND_CAMERA + "Lock screen title", + "Show title text on the lock screen", +#endif + //"Event notifications", + "IDS_IDLE_MBODY_EVENT_NOTIFICATIONS", + //"View event notification on lock screen", + "IDS_IDLE_BODY_VIEW_EVENT_NOTIFICATIONS_ON_THE_LOCK_SCREEN", + "Context-aware notifications", + "View context-aware notifications on lock screen", +#if USE_TITLE_AND_CAMERA + "IDS_ST_MBODY_CAMERA_QUICK_ACCESS", + "IDS_ST_BODY_TAP_AND_HOLD_THE_SCREEN_WHILE_ROTATING_THE_DEVICE_TO_OPEN_CAMERA", +#endif + "IDS_ST_BODY_CLOCK", +// "Dual clock", +// "Show dual clock on lock screen when roaming", + "IDS_ST_BODY_WEATHER", + "IDS_IM_BODY_HELP_TEXT", + "IDS_ST_BODY_SHOW_HELP_TEXT_ON_LOCK_SCREEN", + "IDS_ST_BODY_SET_SHORTCUTS", + "IDS_ST_OPT_EDIT_SHORTCUTS", + "IDS_ST_BODY_SET_SHORTCUTS_ON_LOCK_SCREEN", + "IDS_ST_BODY_TAP_SHORTCUT_TO_ASSIGN_APPLICATION", + "IDS_ST_BODY_DRAG_AND_DROP_TO_CHANGE_ORDER", + "IDS_ST_BODY_SELECT_APPLICATION", + "Life Magazine" +}; + +static Elm_Gen_Item_Class itc_underline; +static Elm_Gen_Item_Class itc_separator; + +Evas_Object *lockscreen_options_util_create_navigation(Evas_Object * parent) +{ + Evas_Object *navi_bar = NULL; + + if (parent == NULL) { + LOCKOPTIONS_WARN("Parent is null."); + return NULL; + } + + navi_bar = elm_naviframe_add(parent); + if (navi_bar == NULL) { + LOCKOPTIONS_ERR("Cannot add naviagtionbar."); + return NULL; + } + + elm_object_part_content_set(parent, "elm.swallow.content", navi_bar); + + evas_object_show(navi_bar); + + return navi_bar; +} + +Evas_Object *lockscreen_options_util_create_layout(Evas_Object * parent, + const char *file, + const char *group) +{ + Evas_Object *layout = NULL; + + if (parent == NULL) { + LOCKOPTIONS_WARN("Parent is null."); + return NULL; + } + + layout = elm_layout_add(parent); + if (layout == NULL) { + LOCKOPTIONS_ERR("Cannot add layout."); + return NULL; + } + + if ((file != NULL) && (group != NULL)) { + elm_layout_file_set(layout, file, group); + } + + evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, + EVAS_HINT_EXPAND); + + evas_object_show(layout); + + return layout; +} + +void lockscreen_options_util_create_seperator(Evas_Object * genlist) +{ + if (NULL == genlist) + return; + + Elm_Object_Item *item = NULL; + + itc_separator.item_style = LOCKSCREEN_GENLIST_STYLE_SEPERATOR; + itc_separator.func.text_get = NULL; + itc_separator.func.content_get = NULL; + itc_separator.func.state_get = NULL; + itc_separator.func.del = NULL; + + item = + elm_genlist_item_append(genlist, &(itc_separator), NULL, NULL, + ELM_GENLIST_ITEM_NONE, NULL, NULL); + elm_genlist_item_select_mode_set(item, + ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY); +} + +void lockscreen_options_util_create_underline(Evas_Object * genlist) +{ + if (NULL == genlist) + return; + + Elm_Object_Item *item = NULL; + + itc_underline.item_style = LOCKSCREEN_GENLIST_STYLE_UNDERLINE; + itc_underline.func.text_get = NULL; + itc_underline.func.content_get = NULL; + itc_underline.func.state_get = NULL; + itc_underline.func.del = NULL; + + item = + elm_genlist_item_append(genlist, &(itc_underline), NULL, NULL, + ELM_GENLIST_ITEM_NONE, NULL, NULL); + elm_genlist_item_select_mode_set(item, + ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY); +} + +char *lockscreen_optoins_get_string(int id) +{ + LOCKOPTIONS_DBG("get string id : %d\n", id); + + char *str = NULL; + + if (id < IDS_LOCKSCREEN_OPTIONS_SYSTEM_STRING_MAX) { + /* get system string */ + str = dgettext("sys_string", sys_str_table[id]); + } else { + /* get application string */ + str = + dgettext(PKGNAME, + app_str_table[id - + IDS_LOCKSCREEN_OPTIONS_SYSTEM_STRING_MAX]); + } + + LOCKOPTIONS_DBG("get string : %s\n", str); + + return str; +} diff --git a/lock-setting/lockscreen-options/src/lockscreen-options.c b/lock-setting/lockscreen-options/src/lockscreen-options.c new file mode 100755 index 0000000..363230e --- /dev/null +++ b/lock-setting/lockscreen-options/src/lockscreen-options.c @@ -0,0 +1,217 @@ + /* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.tizenopensource.org/license + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + + +#ifndef UG_MODULE_API +#define UG_MODULE_API __attribute__ ((visibility("default"))) +#endif + +#include <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 @@ -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 & @@ -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(¤t_time); - gmtime_r(¤t_time, &local_t); + /* local_t = gmtime(¤t_time); */ + gmtime_r(¤t_time, &local_t); /* for prevent 53555 */ int len = snprintf(debugString, sizeof(debugString), "[%d-%02d-%02d, %02d:%02d:%02d]: ", local_t.tm_year + 1900, local_t.tm_mon + 1, @@ -57,10 +60,13 @@ void lockd_log_t(char *fmt, ...) } len = g_strlcat(debugString, buf, LINEMAX); if (len >= LINEMAX) { + /* TODO:ERROR handling */ return; } else { debugString[len] = '\n'; } + /* FIXME this is for permission.. later we should fix and remove this... */ + /* system("chmod 666 "LOGFILE); */ if ((fd = fopen(LOGFILE, "at+")) == NULL) { LOCKD_DBG("File fopen fail for writing Pwlock information"); } else { @@ -74,6 +80,7 @@ void lockd_log_t(char *fmt, ...) execl("/bin/rm", "rm", "-f", LOGFILE, (char *)0); } + /* system("rm -rf "LOGFILE); */ } else { fseek(fd, 0l, SEEK_END); fileLen = ftell(fd); @@ -85,6 +92,7 @@ void lockd_log_t(char *fmt, ...) execl("/bin/rm", "rm", "-f", LOGFILE, (char *)0); } + /* system("rm -rf "LOGFILE); */ } else fclose(fd); } diff --git a/src/lockd-process-mgr.c b/src/lockd-process-mgr.c new file mode 100755 index 0000000..9fcb205 --- /dev/null +++ b/src/lockd-process-mgr.c @@ -0,0 +1,234 @@ + /* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.tizenopensource.org/license + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + + +#include <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; +} |