summaryrefslogtreecommitdiff
path: root/mobile
diff options
context:
space:
mode:
authorSehong Na <sehong.na@samsung.com>2014-05-31 13:00:43 +0900
committerSehong Na <sehong.na@samsung.com>2014-05-31 13:00:43 +0900
commit49b40a5d9545c0847889292acf5a8da545e970eb (patch)
treef524af009437a07e766f9bdba1c48a5aa2a58ec0 /mobile
downloadstarter-49b40a5d9545c0847889292acf5a8da545e970eb.tar.gz
starter-49b40a5d9545c0847889292acf5a8da545e970eb.tar.bz2
starter-49b40a5d9545c0847889292acf5a8da545e970eb.zip
Diffstat (limited to 'mobile')
-rw-r--r--mobile/AUTHORS2
-rwxr-xr-xmobile/CMakeLists.txt101
-rw-r--r--mobile/LICENSE.Flora206
-rw-r--r--mobile/NOTICE3
-rwxr-xr-xmobile/include/hw_key.h22
-rwxr-xr-xmobile/include/lock-daemon.h24
-rwxr-xr-xmobile/include/lockd-debug.h64
-rwxr-xr-xmobile/include/lockd-process-mgr.h38
-rwxr-xr-xmobile/include/lockd-window-mgr.h42
-rwxr-xr-xmobile/include/menu_daemon.h36
-rwxr-xr-xmobile/include/pkg_event.h46
-rwxr-xr-xmobile/include/starter-util.h35
-rwxr-xr-xmobile/include/starter-vconf.h24
-rwxr-xr-xmobile/include/starter.h28
-rwxr-xr-xmobile/include/util.h97
-rwxr-xr-xmobile/include/x11.h26
-rwxr-xr-xmobile/include/xmonitor.h25
-rwxr-xr-xmobile/lock-setting/CMakeLists.txt9
-rwxr-xr-xmobile/lock-setting/lockscreen-options/CMakeLists.txt39
-rwxr-xr-xmobile/lock-setting/lockscreen-options/include/lockscreen-options-debug.h48
-rwxr-xr-xmobile/lock-setting/lockscreen-options/include/lockscreen-options-main.h28
-rwxr-xr-xmobile/lock-setting/lockscreen-options/include/lockscreen-options-util.h48
-rwxr-xr-xmobile/lock-setting/lockscreen-options/include/lockscreen-options.h64
-rwxr-xr-xmobile/lock-setting/lockscreen-options/src/lockscreen-options-main.c343
-rwxr-xr-xmobile/lock-setting/lockscreen-options/src/lockscreen-options-util.c148
-rwxr-xr-xmobile/lock-setting/lockscreen-options/src/lockscreen-options.c213
-rwxr-xr-xmobile/lock-setting/po/CMakeLists.txt26
-rw-r--r--mobile/lock-setting/po/ar.po54
-rw-r--r--mobile/lock-setting/po/az.po54
-rw-r--r--mobile/lock-setting/po/bg.po54
-rw-r--r--mobile/lock-setting/po/ca.po54
-rw-r--r--mobile/lock-setting/po/cs.po54
-rw-r--r--mobile/lock-setting/po/da.po54
-rw-r--r--mobile/lock-setting/po/de_DE.po54
-rw-r--r--mobile/lock-setting/po/el_GR.po54
-rw-r--r--mobile/lock-setting/po/en.po54
-rw-r--r--mobile/lock-setting/po/en_PH.po54
-rw-r--r--mobile/lock-setting/po/en_US.po54
-rw-r--r--mobile/lock-setting/po/es_ES.po54
-rw-r--r--mobile/lock-setting/po/es_MX.po54
-rw-r--r--mobile/lock-setting/po/es_US.po51
-rw-r--r--mobile/lock-setting/po/et.po54
-rw-r--r--mobile/lock-setting/po/eu.po54
-rw-r--r--mobile/lock-setting/po/fi.po54
-rw-r--r--mobile/lock-setting/po/fr_CA.po54
-rw-r--r--mobile/lock-setting/po/fr_FR.po54
-rw-r--r--mobile/lock-setting/po/ga.po54
-rw-r--r--mobile/lock-setting/po/gl.po54
-rw-r--r--mobile/lock-setting/po/hi.po54
-rw-r--r--mobile/lock-setting/po/hr.po54
-rw-r--r--mobile/lock-setting/po/hu.po54
-rw-r--r--mobile/lock-setting/po/hy.po54
-rw-r--r--mobile/lock-setting/po/is.po54
-rw-r--r--mobile/lock-setting/po/it_IT.po54
-rw-r--r--mobile/lock-setting/po/ja_JP.po54
-rw-r--r--mobile/lock-setting/po/ka.po54
-rw-r--r--mobile/lock-setting/po/kk.po54
-rw-r--r--mobile/lock-setting/po/ko_KR.po54
-rw-r--r--mobile/lock-setting/po/lt.po54
-rw-r--r--mobile/lock-setting/po/lv.po54
-rw-r--r--mobile/lock-setting/po/mk.po54
-rw-r--r--mobile/lock-setting/po/nb.po54
-rw-r--r--mobile/lock-setting/po/nl_NL.po54
-rw-r--r--mobile/lock-setting/po/pl.po54
-rw-r--r--mobile/lock-setting/po/pt_BR.po54
-rw-r--r--mobile/lock-setting/po/pt_PT.po54
-rw-r--r--mobile/lock-setting/po/ro.po54
-rw-r--r--mobile/lock-setting/po/ru_RU.po54
-rw-r--r--mobile/lock-setting/po/sk.po54
-rw-r--r--mobile/lock-setting/po/sl.po54
-rw-r--r--mobile/lock-setting/po/sr.po54
-rw-r--r--mobile/lock-setting/po/sv.po54
-rw-r--r--mobile/lock-setting/po/tr_TR.po54
-rw-r--r--mobile/lock-setting/po/uk.po54
-rw-r--r--mobile/lock-setting/po/uz.po54
-rw-r--r--mobile/lock-setting/po/zh_CN.po54
-rw-r--r--mobile/lock-setting/po/zh_HK.po54
-rw-r--r--mobile/lock-setting/po/zh_SG.po54
-rw-r--r--mobile/lock-setting/po/zh_TW.po54
-rw-r--r--mobile/packaging/starter.spec110
-rw-r--r--mobile/src/hw_key.c323
-rw-r--r--mobile/src/lock-daemon.c674
-rw-r--r--mobile/src/lockd-debug.c94
-rw-r--r--mobile/src/lockd-process-mgr.c176
-rw-r--r--mobile/src/lockd-window-mgr.c283
-rw-r--r--mobile/src/menu_daemon.c373
-rw-r--r--mobile/src/pkg_event.c301
-rw-r--r--mobile/src/starter.c273
-rw-r--r--mobile/src/x11.c111
-rw-r--r--mobile/src/xmonitor.c296
-rw-r--r--mobile/starter.desktop.in9
-rw-r--r--mobile/starter.manifest17
-rw-r--r--mobile/starter.rule10
-rw-r--r--mobile/systemd/starter.path5
-rw-r--r--mobile/systemd/starter.service12
-rw-r--r--mobile/systemd/starter.socket6
-rwxr-xr-xmobile/test/get_entry.c89
-rwxr-xr-xmobile/test/get_theme.c56
-rwxr-xr-xmobile/test/set_theme.c62
99 files changed, 7870 insertions, 0 deletions
diff --git a/mobile/AUTHORS b/mobile/AUTHORS
new file mode 100644
index 0000000..b7f374a
--- /dev/null
+++ b/mobile/AUTHORS
@@ -0,0 +1,2 @@
+jin yoon <jinny.yoon at samsung dot com>
+seungtaek chung <seungtaek.chung at samsung dot com>
diff --git a/mobile/CMakeLists.txt b/mobile/CMakeLists.txt
new file mode 100755
index 0000000..7d0cd55
--- /dev/null
+++ b/mobile/CMakeLists.txt
@@ -0,0 +1,101 @@
+CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
+PROJECT(starter C)
+
+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")
+SET(LOCALEDIR "${DATADIR}/locale")
+
+INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/include)
+
+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
+ capi-system-info
+ pkgmgr-info
+ libsystemd-daemon
+)
+
+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(FILES ${CMAKE_SOURCE_DIR}/starter.rule DESTINATION /opt/etc/smack/accesses.d)
+
+# 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_CURRENT_SOURCE_DIR}/systemd/starter.service DESTINATION /usr/lib/systemd/user)
+INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/systemd/starter.socket DESTINATION /usr/lib/systemd/user)
+INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/systemd/starter.path DESTINATION /usr/lib/systemd/user)
+INSTALL(FILES ${CMAKE_SOURCE_DIR}/LICENSE.Flora DESTINATION /usr/share/license/starter)
diff --git a/mobile/LICENSE.Flora b/mobile/LICENSE.Flora
new file mode 100644
index 0000000..571fe79
--- /dev/null
+++ b/mobile/LICENSE.Flora
@@ -0,0 +1,206 @@
+Flora License
+
+Version 1.1, April, 2013
+
+http://floralicense.org/license/
+
+TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+1. Definitions.
+
+"License" shall mean the terms and conditions for use, reproduction,
+and distribution as defined by Sections 1 through 9 of this document.
+
+"Licensor" shall mean the copyright owner or entity authorized by
+the copyright owner that is granting the License.
+
+"Legal Entity" shall mean the union of the acting entity and
+all other entities that control, are controlled by, or are
+under common control with that entity. For the purposes of
+this definition, "control" means (i) the power, direct or indirect,
+to cause the direction or management of such entity,
+whether by contract or otherwise, or (ii) ownership of fifty percent (50%)
+or more of the outstanding shares, or (iii) beneficial ownership of
+such entity.
+
+"You" (or "Your") shall mean an individual or Legal Entity
+exercising permissions granted by this License.
+
+"Source" form shall mean the preferred form for making modifications,
+including but not limited to software source code, documentation source,
+and configuration files.
+
+"Object" form shall mean any form resulting from mechanical
+transformation or translation of a Source form, including but
+not limited to compiled object code, generated documentation,
+and conversions to other media types.
+
+"Work" shall mean the work of authorship, whether in Source or Object form,
+made available under the License, as indicated by a copyright notice
+that is included in or attached to the work (an example is provided
+in the Appendix below).
+
+"Derivative Works" shall mean any work, whether in Source or Object form,
+that is based on (or derived from) the Work and for which the editorial
+revisions, annotations, elaborations, or other modifications represent,
+as a whole, an original work of authorship. For the purposes of this License,
+Derivative Works shall not include works that remain separable from,
+or merely link (or bind by name) to the interfaces of, the Work and
+Derivative Works thereof.
+
+"Contribution" shall mean any work of authorship, including the original
+version of the Work and any modifications or additions to that Work or
+Derivative Works thereof, that is intentionally submitted to Licensor
+for inclusion in the Work by the copyright owner or by an individual or
+Legal Entity authorized to submit on behalf of the copyright owner.
+For the purposes of this definition, "submitted" means any form of
+electronic, verbal, or written communication sent to the Licensor or
+its representatives, including but not limited to communication on
+electronic mailing lists, source code control systems, and issue
+tracking systems that are managed by, or on behalf of, the Licensor
+for the purpose of discussing and improving the Work, but excluding
+communication that is conspicuously marked or otherwise designated
+in writing by the copyright owner as "Not a Contribution."
+
+"Contributor" shall mean Licensor and any individual or Legal Entity
+on behalf of whom a Contribution has been received by Licensor and
+subsequently incorporated within the Work.
+
+"Tizen Certified Platform" shall mean a software platform that complies
+with the standards set forth in the Tizen Compliance Specification
+and passes the Tizen Compliance Tests as defined from time to time
+by the Tizen Technical Steering Group and certified by the Tizen
+Association or its designated agent.
+
+2. Grant of Copyright License. Subject to the terms and conditions of
+this License, each Contributor hereby grants to You a perpetual,
+worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+copyright license to reproduce, prepare Derivative Works of,
+publicly display, publicly perform, sublicense, and distribute the
+Work and such Derivative Works in Source or Object form.
+
+3. Grant of Patent License. Subject to the terms and conditions of
+this License, each Contributor hereby grants to You a perpetual,
+worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+(except as stated in this section) patent license to make, have made,
+use, offer to sell, sell, import, and otherwise transfer the Work
+solely as incorporated into a Tizen Certified Platform, where such
+license applies only to those patent claims licensable by such
+Contributor that are necessarily infringed by their Contribution(s)
+alone or by combination of their Contribution(s) with the Work solely
+as incorporated into a Tizen Certified Platform to which such
+Contribution(s) was submitted. If You institute patent litigation
+against any entity (including a cross-claim or counterclaim
+in a lawsuit) alleging that the Work or a Contribution incorporated
+within the Work constitutes direct or contributory patent infringement,
+then any patent licenses granted to You under this License for that
+Work shall terminate as of the date such litigation is filed.
+
+4. Redistribution. You may reproduce and distribute copies of the
+Work or Derivative Works thereof pursuant to the copyright license
+above, in any medium, with or without modifications, and in Source or
+Object form, provided that You meet the following conditions:
+
+ 1. You must give any other recipients of the Work or Derivative Works
+ a copy of this License; and
+ 2. You must cause any modified files to carry prominent notices stating
+ that You changed the files; and
+ 3. You must retain, in the Source form of any Derivative Works that
+ You distribute, all copyright, patent, trademark, and attribution
+ notices from the Source form of the Work, excluding those notices
+ that do not pertain to any part of the Derivative Works; and
+ 4. If the Work includes a "NOTICE" text file as part of its distribution,
+ then any Derivative Works that You distribute must include a readable
+ copy of the attribution notices contained within such NOTICE file,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works, in at least one of the following places:
+ within a NOTICE text file distributed as part of the Derivative Works;
+ within the Source form or documentation, if provided along with the
+ Derivative Works; or, within a display generated by the Derivative Works,
+ if and wherever such third-party notices normally appear.
+ The contents of the NOTICE file are for informational purposes only
+ and do not modify the License. You may add Your own attribution notices
+ within Derivative Works that You distribute, alongside or as an addendum
+ to the NOTICE text from the Work, provided that such additional attribution
+ notices cannot be construed as modifying the License. You may add Your own
+ copyright statement to Your modifications and may provide additional or
+ different license terms and conditions for use, reproduction, or
+ distribution of Your modifications, or for any such Derivative Works
+ as a whole, provided Your use, reproduction, and distribution of
+ the Work otherwise complies with the conditions stated in this License
+ and your own copyright statement or terms and conditions do not conflict
+ the conditions stated in the License including section 3.
+
+5. Submission of Contributions. Unless You explicitly state otherwise,
+any Contribution intentionally submitted for inclusion in the Work
+by You to the Licensor shall be under the terms and conditions of
+this License, without any additional terms or conditions.
+Notwithstanding the above, nothing herein shall supersede or modify
+the terms of any separate license agreement you may have executed
+with Licensor regarding such Contributions.
+
+6. Trademarks. This License does not grant permission to use the trade
+names, trademarks, service marks, or product names of the Licensor,
+except as required for reasonable and customary use in describing the
+origin of the Work and reproducing the content of the NOTICE file.
+
+7. Disclaimer of Warranty. Unless required by applicable law or
+agreed to in writing, Licensor provides the Work (and each
+Contributor provides its Contributions) on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+implied, including, without limitation, any warranties or conditions
+of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+PARTICULAR PURPOSE. You are solely responsible for determining the
+appropriateness of using or redistributing the Work and assume any
+risks associated with Your exercise of permissions under this License.
+
+8. Limitation of Liability. In no event and under no legal theory,
+whether in tort (including negligence), contract, or otherwise,
+unless required by applicable law (such as deliberate and grossly
+negligent acts) or agreed to in writing, shall any Contributor be
+liable to You for damages, including any direct, indirect, special,
+incidental, or consequential damages of any character arising as a
+result of this License or out of the use or inability to use the
+Work (including but not limited to damages for loss of goodwill,
+work stoppage, computer failure or malfunction, or any and all
+other commercial damages or losses), even if such Contributor
+has been advised of the possibility of such damages.
+
+9. Accepting Warranty or Additional Liability. While redistributing
+the Work or Derivative Works thereof, You may choose to offer,
+and charge a fee for, acceptance of support, warranty, indemnity,
+or other liability obligations and/or rights consistent with this
+License. However, in accepting such obligations, You may act only
+on Your own behalf and on Your sole responsibility, not on behalf
+of any other Contributor, and only if You agree to indemnify,
+defend, and hold each Contributor harmless for any liability
+incurred by, or claims asserted against, such Contributor by reason
+of your accepting any such warranty or additional liability.
+
+END OF TERMS AND CONDITIONS
+
+APPENDIX: How to apply the Flora License to your work
+
+To apply the Flora License to your work, attach the following
+boilerplate notice, with the fields enclosed by brackets "[]"
+replaced with your own identifying information. (Don't include
+the brackets!) The text should be enclosed in the appropriate
+comment syntax for the file format. We also recommend that a
+file or class name and description of purpose be included on the
+same "printed page" as the copyright notice for easier
+identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Flora License, Version 1.1 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://floralicense.org/license/
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
diff --git a/mobile/NOTICE b/mobile/NOTICE
new file mode 100644
index 0000000..db64ab0
--- /dev/null
+++ b/mobile/NOTICE
@@ -0,0 +1,3 @@
+Copyright (c) 2012 Samsung Electronics Co., Ltd. All rights reserved.
+Except as noted, this software is licensed under Flora License, Version 1.1
+Please, see the LICENSE file for Flora License, Version 1.1 terms and conditions.
diff --git a/mobile/include/hw_key.h b/mobile/include/hw_key.h
new file mode 100755
index 0000000..42d891d
--- /dev/null
+++ b/mobile/include/hw_key.h
@@ -0,0 +1,22 @@
+ /*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.1 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+
+extern void destroy_key_window(void);
+extern void create_key_window(void);
+
+// End of a file
diff --git a/mobile/include/lock-daemon.h b/mobile/include/lock-daemon.h
new file mode 100755
index 0000000..268d945
--- /dev/null
+++ b/mobile/include/lock-daemon.h
@@ -0,0 +1,24 @@
+ /*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.1 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+
+#ifndef __LOCK_DAEMON_H__
+#define __LOCK_DAEMON_H__
+
+int start_lock_daemon(int launch_lock);
+
+#endif
diff --git a/mobile/include/lockd-debug.h b/mobile/include/lockd-debug.h
new file mode 100755
index 0000000..07a3835
--- /dev/null
+++ b/mobile/include/lockd-debug.h
@@ -0,0 +1,64 @@
+ /*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.1 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+
+#ifndef __LOCKD_DEBUG_H__
+#define __LOCKD_DEBUG_H__
+
+#include <stdio.h>
+#include <dlog.h>
+
+#ifdef LOG_TAG
+#undef LOG_TAG
+#endif
+
+#define LOG_TAG "starter"
+
+#define ENABLE_LOG_SYSTEM
+
+void lockd_log_t(char *fmt, ...);
+
+#ifdef ENABLE_LOG_SYSTEM
+#define STARTER_ERR(fmt, arg...) LOGE("["LOG_TAG"%s:%d:E] "fmt, __FILE__, __LINE__, ##arg)
+#define STARTER_DBG(fmt, arg...) LOGD("["LOG_TAG"%s:%d:D] "fmt, __FILE__, __LINE__, ##arg)
+#else
+#define STARTER_ERR(fmt, arg...)
+#define STARTER_DBG(fmt, arg...)
+#endif
+
+#ifdef ENABLE_LOG_SYSTEM
+#define _ERR(fmt, arg...) do { STARTER_ERR(fmt, ##arg); lockd_log_t("["LOG_TAG":%d:E] "fmt, __LINE__, ##arg); } while (0)
+#define _DBG(fmt, arg...) do { STARTER_DBG(fmt, ##arg); lockd_log_t("["LOG_TAG":%d:D] "fmt, __LINE__, ##arg); } while (0)
+
+#define LOCKD_ERR(fmt, arg...) _ERR(fmt, ##arg)
+#define LOCKD_DBG(fmt, arg...) _DBG(fmt, ##arg)
+#else
+#define _ERR(...)
+#define _DBG(...)
+
+#define LOCKD_ERR(...)
+#define LOCKD_ERR(...)
+#endif
+
+#ifndef TRUE
+#define TRUE 1
+#endif
+#ifndef FALSE
+#define FALSE 0
+#endif
+
+#endif
diff --git a/mobile/include/lockd-process-mgr.h b/mobile/include/lockd-process-mgr.h
new file mode 100755
index 0000000..195f73f
--- /dev/null
+++ b/mobile/include/lockd-process-mgr.h
@@ -0,0 +1,38 @@
+ /*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.1 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+
+#ifndef __LOCKD_PROCESS_MGR_H__
+#define __LOCKD_PROCESS_MGR_H__
+
+int lockd_process_mgr_start_lock(void *data, int (*dead_cb) (int, void *),
+ int phone_lock_state);
+
+int lockd_process_mgr_restart_lock(int phone_lock_state);
+
+int lockd_process_mgr_start_phone_lock(void);
+
+int lockd_process_mgr_start_normal_lock(void *data, int (*dead_cb) (int, void *));
+
+void lockd_process_mgr_terminate_lock_app(int lock_app_pid,
+ int state);
+
+void lockd_process_mgr_terminate_phone_lock(int phone_lock_pid);
+
+int lockd_process_mgr_check_lock(int pid);
+
+#endif
diff --git a/mobile/include/lockd-window-mgr.h b/mobile/include/lockd-window-mgr.h
new file mode 100755
index 0000000..d30ab31
--- /dev/null
+++ b/mobile/include/lockd-window-mgr.h
@@ -0,0 +1,42 @@
+ /*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.1 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+
+#ifndef __LOCKD_WINDOW_MGR_H__
+#define __LOCKD_WINDOW_MGR_H__
+
+typedef struct _lockw_data lockw_data;
+
+Eina_Bool
+lockd_window_set_window_property(lockw_data * data, int lock_app_pid,
+ void *event);
+
+Eina_Bool
+lockd_window_set_window_effect(lockw_data * data, int lock_app_pid,
+ void *event);
+
+void lockd_window_set_phonelock_pid(lockw_data * data, int phone_lock_pid);
+
+void
+lockd_window_mgr_ready_lock(void *data, lockw_data * lockw,
+ Eina_Bool(*create_cb) (void *, int, void *),
+ Eina_Bool(*show_cb) (void *, int, void *));
+
+void lockd_window_mgr_finish_lock(lockw_data * lockw);
+
+lockw_data *lockd_window_init(void);
+#endif
diff --git a/mobile/include/menu_daemon.h b/mobile/include/menu_daemon.h
new file mode 100755
index 0000000..de3e843
--- /dev/null
+++ b/mobile/include/menu_daemon.h
@@ -0,0 +1,36 @@
+ /*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.1 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+
+#include <bundle.h>
+#include <sys/types.h>
+#include <stdbool.h>
+
+extern void menu_daemon_init(void *data);
+extern void menu_daemon_fini(void);
+
+extern int menu_daemon_open_app(const char *pkgname);
+extern int menu_daemon_launch_app(const char *pkgname, bundle *b);
+
+extern bool menu_daemon_is_homescreen(pid_t pid);
+
+extern int menu_daemon_check_dead_signal(int pid);
+
+extern char *menu_daemon_get_selected_pkgname(void);
+extern void menu_daemon_open_homescreen(const char *pkgname);
+
+// End of a file
diff --git a/mobile/include/pkg_event.h b/mobile/include/pkg_event.h
new file mode 100755
index 0000000..a9fb2cd
--- /dev/null
+++ b/mobile/include/pkg_event.h
@@ -0,0 +1,46 @@
+ /*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.1 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+
+#ifndef __NOTIFIER_H__
+#define __NOTIFIER_H__
+#include <stdbool.h>
+
+#if !defined(PUBLIC)
+#define PUBLIC __attribute__((visibility("default")))
+#endif
+
+#if !defined(PROTECTED)
+#define PROTECTED __attribute__((visibility("hidden")))
+#endif
+
+#if !defined(PRIVATE)
+#define PRIVATE __attribute__((visibility("internal")))
+#endif
+
+
+struct desktop_notifier {
+ int number;
+ int ifd;
+ Ecore_Fd_Handler *handler;
+};
+
+
+PRIVATE void pkg_event_init(void);
+PRIVATE void pkg_event_fini(void);
+
+#endif
diff --git a/mobile/include/starter-util.h b/mobile/include/starter-util.h
new file mode 100755
index 0000000..117c9a4
--- /dev/null
+++ b/mobile/include/starter-util.h
@@ -0,0 +1,35 @@
+ /*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.1 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+
+#ifndef __STARTER_UTIL_H__
+#define __STARTER_UTIL_H__
+
+#include <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
diff --git a/mobile/include/starter-vconf.h b/mobile/include/starter-vconf.h
new file mode 100755
index 0000000..f75bb77
--- /dev/null
+++ b/mobile/include/starter-vconf.h
@@ -0,0 +1,24 @@
+ /*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.1 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+
+#ifndef __STARTER_VCONF_H__
+#define __STARTER_VCONF_H__
+
+#define VCONF_PRIVATE_LOCKSCREEN_PKGNAME "file/private/lockscreen/pkgname"
+
+#endif
diff --git a/mobile/include/starter.h b/mobile/include/starter.h
new file mode 100755
index 0000000..00ee1e6
--- /dev/null
+++ b/mobile/include/starter.h
@@ -0,0 +1,28 @@
+ /*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.1 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+
+#ifndef __STARTER_H__
+#define __STARTER_H__
+
+#include <sys/time.h>
+
+struct appdata {
+ struct timeval tv_start;
+};
+
+#endif
diff --git a/mobile/include/util.h b/mobile/include/util.h
new file mode 100755
index 0000000..b59d2dc
--- /dev/null
+++ b/mobile/include/util.h
@@ -0,0 +1,97 @@
+ /*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.1 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+
+#ifndef __MENU_DAEMON_UTIL_H__
+#define __MENU_DAEMON_UTIL_H__
+#include <dlog.h>
+#include <stdio.h>
+#include <sys/time.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; \
+ } \
+}
+
+#define PRINT_TIME(str) do { \
+ struct timeval tv; \
+ gettimeofday(&tv, NULL); \
+ _D("[%s:%d] %s TIME=%u.%u", __func__, __LINE__, str, (int)tv.tv_sec, (int)tv.tv_usec); \
+} while (0)
+
+#define _F(fmt, arg...) do { \
+ FILE *fp;\
+ fp = fopen("/var/log/starter.log", "a+");\
+ if (NULL == fp) break;\
+ fprintf(fp, "[%s:%d] "fmt"\n", __func__, __LINE__, ##arg); \
+ fclose(fp);\
+} while (0)
+
+
+
+#endif /* __MENU_DAEMON_UTIL_H__ */
diff --git a/mobile/include/x11.h b/mobile/include/x11.h
new file mode 100755
index 0000000..bad90a4
--- /dev/null
+++ b/mobile/include/x11.h
@@ -0,0 +1,26 @@
+ /*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.1 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+
+#ifndef __STARTER_X11_H__
+#define __STARTER_X11_H__
+
+void prop_string_set(const char *name, const char *value);
+void prop_int_set(const char *name, unsigned int val);
+void set_window_scale(void);
+
+#endif
diff --git a/mobile/include/xmonitor.h b/mobile/include/xmonitor.h
new file mode 100755
index 0000000..097e613
--- /dev/null
+++ b/mobile/include/xmonitor.h
@@ -0,0 +1,25 @@
+ /*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.1 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+
+#ifndef __MENU_DAEMON_XMONITOR_H__
+#define __MENU_DAEMON_XMONITOR_H__
+
+extern int xmonitor_init(void);
+extern void xmonitor_fini(void);
+
+#endif /* __MENU_DAEMON_XMONITOR_H__ */
diff --git a/mobile/lock-setting/CMakeLists.txt b/mobile/lock-setting/CMakeLists.txt
new file mode 100755
index 0000000..7745b83
--- /dev/null
+++ b/mobile/lock-setting/CMakeLists.txt
@@ -0,0 +1,9 @@
+CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
+PROJECT(lock-setting C)
+
+ADD_SUBDIRECTORY(lockscreen-options)
+
+# i18n
+ADD_SUBDIRECTORY(po)
+
+# End of a file
diff --git a/mobile/lock-setting/lockscreen-options/CMakeLists.txt b/mobile/lock-setting/lockscreen-options/CMakeLists.txt
new file mode 100755
index 0000000..719f98e
--- /dev/null
+++ b/mobile/lock-setting/lockscreen-options/CMakeLists.txt
@@ -0,0 +1,39 @@
+CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
+PROJECT(ug-lockscreen-options C)
+
+SET(PREFIX ${CMAKE_INSTALL_PREFIX}/ug)
+SET(LIBDIR "${PREFIX}/lib")
+SET(RESDIR "${PREFIX}/res")
+SET(DATADIR "${PREFIX}/data")
+SET(LOCALEDIR "${RESDIR}/locale")
+SET(IMAGEDIR "${RESDIR}/images")
+SET(EDJEDIR "${RESDIR}/edje")
+SET(ETCDIR "${RESDIR}/etc")
+SET(VERSION 0.1.0)
+
+SET(SRCS
+ ./src/lockscreen-options.c
+ ./src/lockscreen-options-util.c
+ ./src/lockscreen-options-main.c
+)
+
+INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/include)
+INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/include)
+
+INCLUDE(FindPkgConfig)
+pkg_check_modules(pkgs_lock-screen-options REQUIRED elementary ui-gadget-1 edje evas ail capi-appfw-application)
+
+FOREACH(flag ${pkgs_lock-screen-options_CFLAGS})
+ SET(EXTRA_CFLAGS "${EXTRA_CFLAGS} ${flag}")
+ENDFOREACH(flag)
+
+SET(EXTRA_CFLAGS "${EXTRA_CFLAGS} -fvisibility=hidden -Wall")
+SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${EXTRA_CFLAGS}")
+
+ADD_DEFINITIONS("-DPREFIX=\"${CMAKE_INSTALL_PREFIX}\"")
+
+ADD_LIBRARY(${PROJECT_NAME} SHARED ${SRCS})
+SET_TARGET_PROPERTIES(${PROJECT_NAME} PROPERTIES SOVERSION 0.1.0)
+TARGET_LINK_LIBRARIES(${PROJECT_NAME} ${pkgs_lock-screen-options_LDFLAGS})
+
+INSTALL(TARGETS ${PROJECT_NAME} DESTINATION ${LIBDIR})
diff --git a/mobile/lock-setting/lockscreen-options/include/lockscreen-options-debug.h b/mobile/lock-setting/lockscreen-options/include/lockscreen-options-debug.h
new file mode 100755
index 0000000..ef9799b
--- /dev/null
+++ b/mobile/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.1 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+
+#ifndef __LOCKSCREEN_OPTIONS_DEBUG_H__
+#define __LOCKSCREEN_OPTIONS_DEBUG_H__
+
+#include <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
+
+#ifndef TRUE
+#define TRUE 1
+#endif
+#ifndef FALSE
+#define FALSE 0
+#endif
+
+#endif
diff --git a/mobile/lock-setting/lockscreen-options/include/lockscreen-options-main.h b/mobile/lock-setting/lockscreen-options/include/lockscreen-options-main.h
new file mode 100755
index 0000000..d4c05ec
--- /dev/null
+++ b/mobile/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.1 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+
+#ifndef __LOCKSCREEN_OPTIONS_MAIN_H__
+#define __LOCKSCREEN_OPTIONS_MAIN_H__
+
+#include <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
diff --git a/mobile/lock-setting/lockscreen-options/include/lockscreen-options-util.h b/mobile/lock-setting/lockscreen-options/include/lockscreen-options-util.h
new file mode 100755
index 0000000..b0ad283
--- /dev/null
+++ b/mobile/lock-setting/lockscreen-options/include/lockscreen-options-util.h
@@ -0,0 +1,48 @@
+ /*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.1 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+
+#ifndef __LOCKSCREEN_OPTIONS_UTIL_H__
+#define __LOCKSCREEN_OPTIONS_UTIL_H__
+
+#include <Elementary.h>
+
+enum {
+ IDS_COM_SK_OK = 0,
+ IDS_COM_SK_CANCEL,
+ IDS_LOCKSCREEN_OPTIONS_SYSTEM_STRING_MAX,
+};
+
+enum {
+ IDS_LOCKSCREEN_OPTIONS_EVENT_NOTIFICATIONS =
+ IDS_LOCKSCREEN_OPTIONS_SYSTEM_STRING_MAX,
+ IDS_LOCKSCREEN_OPTIONS_EVENT_NOTIFICATIONS_HELP,
+ IDS_LOCKSCREEN_OPTIONS_CLOCK,
+ IDS_LOCKSCREEN_OPTIONS_HELPTEXT,
+ IDS_LOCKSCREEN_OPTIONS_HELPTEXT_HELP,
+ IDS_LOCKSCREEN_OPTIONS_APP_STRING_MAX,
+};
+
+Evas_Object *lockscreen_options_util_create_navigation(Evas_Object * parent);
+Evas_Object *lockscreen_options_util_create_layout(Evas_Object * parent,
+ const char *file,
+ const char *group);
+void lockscreen_options_util_create_seperator(Evas_Object * genlist);
+void lockscreen_options_util_create_underline(Evas_Object * genlist);
+char *lockscreen_optoins_get_string(int id);
+
+#endif
diff --git a/mobile/lock-setting/lockscreen-options/include/lockscreen-options.h b/mobile/lock-setting/lockscreen-options/include/lockscreen-options.h
new file mode 100755
index 0000000..37c478d
--- /dev/null
+++ b/mobile/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.1 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+
+#ifndef __LOCKSCREEN_OPTIONS_H__
+#define __LOCKSCREEN_OPTIONS_H__
+
+#include <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
diff --git a/mobile/lock-setting/lockscreen-options/src/lockscreen-options-main.c b/mobile/lock-setting/lockscreen-options/src/lockscreen-options-main.c
new file mode 100755
index 0000000..2ede565
--- /dev/null
+++ b/mobile/lock-setting/lockscreen-options/src/lockscreen-options-main.c
@@ -0,0 +1,343 @@
+ /*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.1 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+
+#include <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 "starter-vconf.h"
+
+#define LOCKSCREEN_OPTOINS_GENLIST_ITEM_CNT 5
+
+typedef struct {
+ int glStyle;
+ int stringId;
+ Evas_Object *check;
+ void (*func) (void *data, Evas_Object * obj, void *event_info);
+} lockscreen_menu_item_info;
+
+static lockscreen_menu_item_info lockscreen_options_menu_item[] = {
+ {ENUM_LOCKSCREEN_GENLIST_STYLE_1TEXT1ICON, IDS_LOCKSCREEN_OPTIONS_EVENT_NOTIFICATIONS, NULL, NULL},
+ {ENUM_LOCKSCREEN_GENLIST_STYLE_HELP, IDS_LOCKSCREEN_OPTIONS_EVENT_NOTIFICATIONS_HELP, NULL, NULL},
+ {ENUM_LOCKSCREEN_GENLIST_STYLE_1TEXT1ICON, IDS_LOCKSCREEN_OPTIONS_CLOCK, NULL, NULL},
+ {ENUM_LOCKSCREEN_GENLIST_STYLE_1TEXT1ICON, IDS_LOCKSCREEN_OPTIONS_HELPTEXT, NULL, NULL},
+ {ENUM_LOCKSCREEN_GENLIST_STYLE_HELP, IDS_LOCKSCREEN_OPTIONS_HELPTEXT_HELP, NULL, NULL}
+};
+
+static Elm_Gen_Item_Class itc_menu_1text1icon;
+static Elm_Gen_Item_Class itc_menu_2text1icon;
+static Elm_Gen_Item_Class itc_help_1text;
+
+static void _lockscreen_options_main_back_cb(void *data, Evas_Object * obj,
+ void *event_info)
+{
+ lockscreen_options_ug_data *ug_data =
+ (lockscreen_options_ug_data *) data;
+
+ if (ug_data == NULL)
+ return;
+
+ ug_destroy_me(ug_data->ug);
+}
+
+static char *_lockscreen_options_main_gl_label_get(void *data,
+ Evas_Object * obj,
+ const char *part)
+{
+ if (data == NULL || part == NULL)
+ return NULL;
+
+ lockscreen_menu_item_info *lockoption_data =
+ (lockscreen_menu_item_info *) data;
+
+ if ((strcmp(part, "elm.text") == 0) ||
+ (strcmp(part, "elm.text.1") == 0)) {
+ return
+ strdup(lockscreen_optoins_get_string
+ (lockoption_data->stringId));
+ }
+
+ return NULL;
+
+}
+
+static void _lockscreen_options_set_menu_status(int stringId, int value)
+{
+ int ret = 0;
+ switch (stringId) {
+ case IDS_LOCKSCREEN_OPTIONS_EVENT_NOTIFICATIONS:
+ ret = vconf_set_bool(VCONFKEY_LOCKSCREEN_EVENT_NOTIFICATION_DISPLAY, value);
+ break;
+ case IDS_LOCKSCREEN_OPTIONS_CLOCK:
+ ret = vconf_set_bool(VCONFKEY_LOCKSCREEN_CLOCK_DISPLAY, value);
+ break;
+ case IDS_LOCKSCREEN_OPTIONS_HELPTEXT:
+ ret = vconf_set_bool(VCONFKEY_LOCKSCREEN_HELP_TEXT_DISPLAY, value);
+ break;
+ default:
+ LOCKOPTIONS_DBG("NO VALID STRINGID %d", stringId);
+ break;
+ }
+}
+
+static bool _lockscreen_options_get_menu_status(int stringId)
+{
+ int status = 0;
+ int ret = 0;
+
+ switch (stringId) {
+ case IDS_LOCKSCREEN_OPTIONS_EVENT_NOTIFICATIONS:
+ ret = vconf_get_bool(VCONFKEY_LOCKSCREEN_EVENT_NOTIFICATION_DISPLAY, &status);
+ break;
+ case IDS_LOCKSCREEN_OPTIONS_CLOCK:
+ ret = vconf_get_bool(VCONFKEY_LOCKSCREEN_CLOCK_DISPLAY, &status);
+ break;
+ case IDS_LOCKSCREEN_OPTIONS_HELPTEXT:
+ ret = vconf_get_bool(VCONFKEY_LOCKSCREEN_HELP_TEXT_DISPLAY, &status);
+ break;
+ default:
+ LOCKOPTIONS_DBG("NO VALID INDEX %d", stringId);
+ break;
+ }
+
+ if (ret == -1) {
+ LOCKOPTIONS_ERR("Failed to get vconfkey %d!", stringId);
+ return 0;
+ }
+
+ LOCKOPTIONS_DBG
+ ("_lockscreen_options_get_menu_status index %d Status %d", stringId,
+ status);
+
+ return status;
+}
+
+static void _lockscreen_options_check_changed_cb(void *data, Evas_Object * obj,
+ void *event_info)
+{
+ if (data == NULL || obj == NULL)
+ return;
+
+ lockscreen_menu_item_info *lockoption_data =
+ (lockscreen_menu_item_info *) data;
+
+ Eina_Bool ret;
+ int value = 0;
+
+ ret = elm_check_state_get(obj);
+
+ LOCKOPTIONS_DBG("_lockscreen_options_check_changed_cb : %s",
+ ret == EINA_TRUE ? "ON" : "OFF");
+
+ if (ret == EINA_TRUE) {
+ value = 1;
+ } else {
+ value = 0;
+ }
+
+ _lockscreen_options_set_menu_status(lockoption_data->stringId, value);
+}
+
+static Evas_Object *_lockscreen_options_main_gl_icon_get(void *data,
+ Evas_Object * obj,
+ const char *part)
+{
+ if (data == NULL || obj == NULL)
+ return NULL;
+
+ lockscreen_menu_item_info *lockoption_data =
+ (lockscreen_menu_item_info *) data;
+
+ LOCKOPTIONS_DBG("icon get stringId : %d", lockoption_data->stringId);
+
+ Evas_Object *check;
+ int value = 0;
+
+ check = elm_check_add(obj);
+ elm_object_style_set(check, "on&off");
+ evas_object_show(check);
+
+ value = _lockscreen_options_get_menu_status(lockoption_data->stringId);
+ elm_check_state_set(check, value);
+
+ evas_object_pass_events_set(check, 1);
+ evas_object_propagate_events_set(check, 0);
+
+ evas_object_smart_callback_add(check, "changed",
+ _lockscreen_options_check_changed_cb,
+ lockoption_data);
+
+ lockoption_data->check = check;
+
+ return check;
+}
+
+static void _lockscreen_options_main_gl_del(void *data, Evas_Object * obj)
+{
+ LOCKOPTIONS_DBG("_lockscreen_options_main_gl_del");
+}
+
+static void _lockscreen_options_main_gl_sel(void *data, Evas_Object * obj,
+ void *event_info)
+{
+ if (data == NULL)
+ return;
+
+ lockscreen_menu_item_info *lockoption_data = NULL;
+
+ elm_genlist_item_selected_set((Elm_Object_Item *) event_info,
+ EINA_FALSE);
+
+ Elm_Object_Item *item = (Elm_Object_Item *) event_info;
+ lockoption_data =
+ (lockscreen_menu_item_info *) elm_object_item_data_get(item);
+ if (lockoption_data == NULL) {
+ return;
+ }
+
+ if (lockoption_data->stringId ==
+ IDS_LOCKSCREEN_OPTIONS_EVENT_NOTIFICATIONS
+ || lockoption_data->stringId == IDS_LOCKSCREEN_OPTIONS_CLOCK
+ || lockoption_data->stringId == IDS_LOCKSCREEN_OPTIONS_HELPTEXT) {
+ Eina_Bool check_state =
+ elm_check_state_get(lockoption_data->check);
+ _lockscreen_options_set_menu_status(lockoption_data->stringId,
+ !check_state);
+ elm_genlist_item_update(item);
+ }
+
+ if (lockoption_data->func != NULL) {
+ lockoption_data->func(data, obj, event_info);
+ }
+}
+
+static void _lockscreen_options_create_gl_item(Elm_Gen_Item_Class * item,
+ int glStyle)
+{
+ if (glStyle == ENUM_LOCKSCREEN_GENLIST_STYLE_1TEXT1ICON) {
+ item->item_style = LOCKSCREEN_GENLIST_STYLE_1TEXT1ICON;
+ item->func.text_get = _lockscreen_options_main_gl_label_get;
+ item->func.content_get = _lockscreen_options_main_gl_icon_get;
+ item->func.state_get = NULL;
+ item->func.del = _lockscreen_options_main_gl_del;
+ } else if (glStyle == ENUM_LOCKSCREEN_GENLIST_STYLE_2TEXT1ICON) {
+ item->item_style = LOCKSCREEN_GENLIST_STYLE_2TEXT1ICON;
+ item->func.text_get = _lockscreen_options_main_gl_label_get;
+ item->func.content_get = _lockscreen_options_main_gl_icon_get;
+ item->func.state_get = NULL;
+ item->func.del = NULL;
+ } else if (glStyle == ENUM_LOCKSCREEN_GENLIST_STYLE_HELP) {
+ item->item_style = LOCKSCREEN_GENLIST_STYLE_HELP;
+ item->func.text_get = _lockscreen_options_main_gl_label_get;
+ item->func.content_get = NULL;
+ item->func.state_get = NULL;
+ item->func.del = _lockscreen_options_main_gl_del;
+ } else {
+ LOCKOPTIONS_DBG("_lockscreen_options_create_gl_item FAIL\n");
+ }
+}
+
+void lockscreen_options_main_create_view(lockscreen_options_ug_data * ug_data)
+{
+ LOCKOPTIONS_DBG("lockscreen_options_main_create_view begin\n");
+
+ Evas_Object *navi_bar = ug_data->navi_bar;
+ Evas_Object *back_button = NULL;
+ Evas_Object *genlist = NULL;
+ Elm_Object_Item *item = NULL;
+ int i = 0;
+
+ if (navi_bar == NULL) {
+ LOCKOPTIONS_WARN("navi_bar is null.");
+ return;
+ }
+
+ _lockscreen_options_create_gl_item(&(itc_menu_1text1icon),
+ ENUM_LOCKSCREEN_GENLIST_STYLE_1TEXT1ICON);
+ _lockscreen_options_create_gl_item(&(itc_menu_2text1icon),
+ ENUM_LOCKSCREEN_GENLIST_STYLE_2TEXT1ICON);
+ _lockscreen_options_create_gl_item(&(itc_help_1text),
+ ENUM_LOCKSCREEN_GENLIST_STYLE_HELP);
+
+ genlist = elm_genlist_add(navi_bar);
+
+ elm_genlist_mode_set(genlist, ELM_LIST_COMPRESS);
+ elm_object_style_set(genlist, "dialogue");
+
+ lockscreen_options_util_create_seperator(genlist);
+
+ for (i = 0; i < LOCKSCREEN_OPTOINS_GENLIST_ITEM_CNT; i++) {
+ Elm_Gen_Item_Class *itc = NULL;
+ if (lockscreen_options_menu_item[i].glStyle ==
+ ENUM_LOCKSCREEN_GENLIST_STYLE_1TEXT1ICON) {
+ itc = &(itc_menu_1text1icon);
+ elm_genlist_item_append(genlist,
+ itc,
+ &
+ (lockscreen_options_menu_item
+ [i]), NULL,
+ ELM_GENLIST_ITEM_NONE,
+ _lockscreen_options_main_gl_sel,
+ ug_data);
+ } else if(lockscreen_options_menu_item[i].glStyle ==
+ ENUM_LOCKSCREEN_GENLIST_STYLE_2TEXT1ICON) {
+ itc = &(itc_menu_2text1icon);
+ elm_genlist_item_append(genlist,
+ itc,
+ &
+ (lockscreen_options_menu_item
+ [i]), NULL,
+ ELM_GENLIST_ITEM_NONE,
+ _lockscreen_options_main_gl_sel,
+ ug_data);
+ } else if (lockscreen_options_menu_item[i].glStyle ==
+ ENUM_LOCKSCREEN_GENLIST_STYLE_HELP) {
+ itc = &(itc_help_1text);
+ item = elm_genlist_item_append(genlist,
+ itc,
+ &
+ (lockscreen_options_menu_item
+ [i]), NULL,
+ ELM_GENLIST_ITEM_NONE,
+ NULL, NULL);
+ elm_genlist_item_select_mode_set(item,
+ ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
+ if(i != (LOCKSCREEN_OPTOINS_GENLIST_ITEM_CNT - 1)){
+ lockscreen_options_util_create_underline(genlist);
+ }
+ } else {
+ LOCKOPTIONS_WARN("lockscreen option has no such type.");
+ return;
+ }
+ }
+
+ back_button = elm_button_add(navi_bar);
+ elm_object_style_set(back_button, "naviframe/back_btn/default");
+ evas_object_smart_callback_add(back_button, "clicked",
+ _lockscreen_options_main_back_cb,
+ ug_data);
+
+ elm_naviframe_item_push(navi_bar, _("IDS_ST_BODY_LOCK_SCREEN") , back_button, NULL, genlist, NULL);
+}
diff --git a/mobile/lock-setting/lockscreen-options/src/lockscreen-options-util.c b/mobile/lock-setting/lockscreen-options/src/lockscreen-options-util.c
new file mode 100755
index 0000000..6f0b84c
--- /dev/null
+++ b/mobile/lock-setting/lockscreen-options/src/lockscreen-options-util.c
@@ -0,0 +1,148 @@
+ /*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.1 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+
+#include "lockscreen-options-debug.h"
+#include "lockscreen-options.h"
+#include "lockscreen-options-util.h"
+
+const char *sys_str_table[] = {
+ "IDS_COM_SK_OK",
+ "IDS_COM_SK_CANCEL",
+};
+
+const char *app_str_table[] = {
+ "IDS_IDLE_MBODY_EVENT_NOTIFICATIONS",
+ "IDS_IDLE_BODY_VIEW_EVENT_NOTIFICATIONS_ON_THE_LOCK_SCREEN",
+ "IDS_ST_BODY_CLOCK",
+ "IDS_IM_BODY_HELP_TEXT",
+ "IDS_ST_BODY_SHOW_HELP_TEXT_ON_LOCK_SCREEN"
+};
+
+static Elm_Gen_Item_Class itc_underline;
+static Elm_Gen_Item_Class itc_separator;
+
+Evas_Object *lockscreen_options_util_create_navigation(Evas_Object * parent)
+{
+ Evas_Object *navi_bar = NULL;
+
+ if (parent == NULL) {
+ LOCKOPTIONS_WARN("Parent is null.");
+ return NULL;
+ }
+
+ navi_bar = elm_naviframe_add(parent);
+ if (navi_bar == NULL) {
+ LOCKOPTIONS_ERR("Cannot add naviagtionbar.");
+ return NULL;
+ }
+
+ elm_object_part_content_set(parent, "elm.swallow.content", navi_bar);
+
+ evas_object_show(navi_bar);
+
+ return navi_bar;
+}
+
+Evas_Object *lockscreen_options_util_create_layout(Evas_Object * parent,
+ const char *file,
+ const char *group)
+{
+ Evas_Object *layout = NULL;
+
+ if (parent == NULL) {
+ LOCKOPTIONS_WARN("Parent is null.");
+ return NULL;
+ }
+
+ layout = elm_layout_add(parent);
+ if (layout == NULL) {
+ LOCKOPTIONS_ERR("Cannot add layout.");
+ return NULL;
+ }
+
+ if ((file != NULL) && (group != NULL)) {
+ elm_layout_file_set(layout, file, group);
+ }
+
+ evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND,
+ EVAS_HINT_EXPAND);
+
+ evas_object_show(layout);
+
+ return layout;
+}
+
+void lockscreen_options_util_create_seperator(Evas_Object * genlist)
+{
+ if (NULL == genlist)
+ return;
+
+ Elm_Object_Item *item = NULL;
+
+ itc_separator.item_style = LOCKSCREEN_GENLIST_STYLE_SEPERATOR;
+ itc_separator.func.text_get = NULL;
+ itc_separator.func.content_get = NULL;
+ itc_separator.func.state_get = NULL;
+ itc_separator.func.del = NULL;
+
+ item =
+ elm_genlist_item_append(genlist, &(itc_separator), NULL, NULL,
+ ELM_GENLIST_ITEM_NONE, NULL, NULL);
+ elm_genlist_item_select_mode_set(item,
+ ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
+}
+
+void lockscreen_options_util_create_underline(Evas_Object * genlist)
+{
+ if (NULL == genlist)
+ return;
+
+ Elm_Object_Item *item = NULL;
+
+ itc_underline.item_style = LOCKSCREEN_GENLIST_STYLE_UNDERLINE;
+ itc_underline.func.text_get = NULL;
+ itc_underline.func.content_get = NULL;
+ itc_underline.func.state_get = NULL;
+ itc_underline.func.del = NULL;
+
+ item =
+ elm_genlist_item_append(genlist, &(itc_underline), NULL, NULL,
+ ELM_GENLIST_ITEM_NONE, NULL, NULL);
+ elm_genlist_item_select_mode_set(item,
+ ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
+}
+
+char *lockscreen_optoins_get_string(int id)
+{
+ LOCKOPTIONS_DBG("get string id : %d\n", id);
+
+ char *str = NULL;
+
+ if (id < IDS_LOCKSCREEN_OPTIONS_SYSTEM_STRING_MAX) {
+ str = dgettext("sys_string", sys_str_table[id]);
+ } else {
+ str =
+ dgettext(PKGNAME,
+ app_str_table[id -
+ IDS_LOCKSCREEN_OPTIONS_SYSTEM_STRING_MAX]);
+ }
+
+ LOCKOPTIONS_DBG("get string : %s\n", str);
+
+ return str;
+}
diff --git a/mobile/lock-setting/lockscreen-options/src/lockscreen-options.c b/mobile/lock-setting/lockscreen-options/src/lockscreen-options.c
new file mode 100755
index 0000000..de5eb00
--- /dev/null
+++ b/mobile/lock-setting/lockscreen-options/src/lockscreen-options.c
@@ -0,0 +1,213 @@
+ /*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.1 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+
+#ifndef UG_MODULE_API
+#define UG_MODULE_API __attribute__ ((visibility("default")))
+#endif
+
+#include <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;
+
+ return base;
+}
+
+static void *on_create(ui_gadget_h ug, enum ug_mode mode, service_h service,
+ void *priv)
+{
+ Evas_Object *parent = NULL;
+ Evas_Object *win_main = NULL;
+ lockscreen_options_ug_data *ug_data = NULL;
+
+ if (!ug || !priv)
+ return NULL;
+
+ bindtextdomain(PKGNAME, "/usr/ug/res/locale");
+
+ ug_data = priv;
+ ug_data->ug = ug;
+
+ parent = ug_get_parent_layout(ug);
+ if (!parent)
+ return NULL;
+
+ win_main = ug_get_window();
+ if (!win_main) {
+ return NULL;
+ }
+
+ ug_data->win_main = win_main;
+
+ if (mode == UG_MODE_FULLVIEW)
+ ug_data->base = create_fullview(parent, ug_data);
+ else
+ ug_data->base = create_frameview(parent, ug_data);
+
+ return ug_data->base;
+}
+
+static void on_start(ui_gadget_h ug, service_h service, void *priv)
+{
+}
+
+static void on_pause(ui_gadget_h ug, service_h service, void *priv)
+{
+
+}
+
+static void on_resume(ui_gadget_h ug, service_h service, void *priv)
+{
+
+}
+
+static void on_destroy(ui_gadget_h ug, service_h service, void *priv)
+{
+ lockscreen_options_ug_data *ug_data;
+
+ if (!ug || !priv)
+ return;
+
+ ug_data = priv;
+ evas_object_del(ug_data->base);
+ ug_data->base = NULL;
+}
+
+static void on_message(ui_gadget_h ug, service_h msg, service_h service,
+ void *priv)
+{
+}
+
+static void on_event(ui_gadget_h ug, enum ug_event event, service_h service,
+ void *priv)
+{
+ switch (event) {
+ case UG_EVENT_LOW_MEMORY:
+ break;
+ case UG_EVENT_LOW_BATTERY:
+ break;
+ case UG_EVENT_LANG_CHANGE:
+ break;
+ case UG_EVENT_ROTATE_PORTRAIT:
+ break;
+ case UG_EVENT_ROTATE_PORTRAIT_UPSIDEDOWN:
+ break;
+ case UG_EVENT_ROTATE_LANDSCAPE:
+ break;
+ case UG_EVENT_ROTATE_LANDSCAPE_UPSIDEDOWN:
+ break;
+ default:
+ break;
+ }
+}
+
+static void on_key_event(ui_gadget_h ug, enum ug_key_event event,
+ service_h service, void *priv)
+{
+ if (!ug)
+ return;
+
+ switch (event) {
+ case UG_KEY_EVENT_END:
+ ug_destroy_me(ug);
+ break;
+ default:
+ break;
+ }
+}
+
+UG_MODULE_API int UG_MODULE_INIT(struct ug_module_ops *ops)
+{
+ lockscreen_options_ug_data *ug_data;
+
+ if (!ops)
+ return -1;
+
+ ug_data = calloc(1, sizeof(lockscreen_options_ug_data));
+ if (!ug_data)
+ return -1;
+
+ ops->create = on_create;
+ ops->start = on_start;
+ ops->pause = on_pause;
+ ops->resume = on_resume;
+ ops->destroy = on_destroy;
+ ops->message = on_message;
+ ops->event = on_event;
+ ops->key_event = on_key_event;
+ ops->priv = ug_data;
+ ops->opt = UG_OPT_INDICATOR_ENABLE;
+
+ return 0;
+}
+
+UG_MODULE_API void UG_MODULE_EXIT(struct ug_module_ops *ops)
+{
+ lockscreen_options_ug_data *ug_data;
+
+ if (!ops)
+ return;
+
+ ug_data = ops->priv;
+ if (ug_data)
+ free(ug_data);
+}
diff --git a/mobile/lock-setting/po/CMakeLists.txt b/mobile/lock-setting/po/CMakeLists.txt
new file mode 100755
index 0000000..647202a
--- /dev/null
+++ b/mobile/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/mobile/lock-setting/po/ar.po b/mobile/lock-setting/po/ar.po
new file mode 100644
index 0000000..7c0e6a6
--- /dev/null
+++ b/mobile/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/mobile/lock-setting/po/az.po b/mobile/lock-setting/po/az.po
new file mode 100644
index 0000000..305092a
--- /dev/null
+++ b/mobile/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/mobile/lock-setting/po/bg.po b/mobile/lock-setting/po/bg.po
new file mode 100644
index 0000000..1033cf8
--- /dev/null
+++ b/mobile/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/mobile/lock-setting/po/ca.po b/mobile/lock-setting/po/ca.po
new file mode 100644
index 0000000..e6a6351
--- /dev/null
+++ b/mobile/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/mobile/lock-setting/po/cs.po b/mobile/lock-setting/po/cs.po
new file mode 100644
index 0000000..5a6e267
--- /dev/null
+++ b/mobile/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/mobile/lock-setting/po/da.po b/mobile/lock-setting/po/da.po
new file mode 100644
index 0000000..d9a26bb
--- /dev/null
+++ b/mobile/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/mobile/lock-setting/po/de_DE.po b/mobile/lock-setting/po/de_DE.po
new file mode 100644
index 0000000..70a4592
--- /dev/null
+++ b/mobile/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/mobile/lock-setting/po/el_GR.po b/mobile/lock-setting/po/el_GR.po
new file mode 100644
index 0000000..151b419
--- /dev/null
+++ b/mobile/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/mobile/lock-setting/po/en.po b/mobile/lock-setting/po/en.po
new file mode 100644
index 0000000..5c14712
--- /dev/null
+++ b/mobile/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/mobile/lock-setting/po/en_PH.po b/mobile/lock-setting/po/en_PH.po
new file mode 100644
index 0000000..5c14712
--- /dev/null
+++ b/mobile/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/mobile/lock-setting/po/en_US.po b/mobile/lock-setting/po/en_US.po
new file mode 100644
index 0000000..a1db6bc
--- /dev/null
+++ b/mobile/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/mobile/lock-setting/po/es_ES.po b/mobile/lock-setting/po/es_ES.po
new file mode 100644
index 0000000..407f8d7
--- /dev/null
+++ b/mobile/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/mobile/lock-setting/po/es_MX.po b/mobile/lock-setting/po/es_MX.po
new file mode 100644
index 0000000..a3ce4bd
--- /dev/null
+++ b/mobile/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/mobile/lock-setting/po/es_US.po b/mobile/lock-setting/po/es_US.po
new file mode 100644
index 0000000..43a19d9
--- /dev/null
+++ b/mobile/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/mobile/lock-setting/po/et.po b/mobile/lock-setting/po/et.po
new file mode 100644
index 0000000..073973f
--- /dev/null
+++ b/mobile/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/mobile/lock-setting/po/eu.po b/mobile/lock-setting/po/eu.po
new file mode 100644
index 0000000..8ba1000
--- /dev/null
+++ b/mobile/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/mobile/lock-setting/po/fi.po b/mobile/lock-setting/po/fi.po
new file mode 100644
index 0000000..856e0a0
--- /dev/null
+++ b/mobile/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/mobile/lock-setting/po/fr_CA.po b/mobile/lock-setting/po/fr_CA.po
new file mode 100644
index 0000000..6982f65
--- /dev/null
+++ b/mobile/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/mobile/lock-setting/po/fr_FR.po b/mobile/lock-setting/po/fr_FR.po
new file mode 100644
index 0000000..0ffb78b
--- /dev/null
+++ b/mobile/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/mobile/lock-setting/po/ga.po b/mobile/lock-setting/po/ga.po
new file mode 100644
index 0000000..54b0785
--- /dev/null
+++ b/mobile/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/mobile/lock-setting/po/gl.po b/mobile/lock-setting/po/gl.po
new file mode 100644
index 0000000..d1f01aa
--- /dev/null
+++ b/mobile/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/mobile/lock-setting/po/hi.po b/mobile/lock-setting/po/hi.po
new file mode 100644
index 0000000..1dc2c7e
--- /dev/null
+++ b/mobile/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/mobile/lock-setting/po/hr.po b/mobile/lock-setting/po/hr.po
new file mode 100644
index 0000000..86c6896
--- /dev/null
+++ b/mobile/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/mobile/lock-setting/po/hu.po b/mobile/lock-setting/po/hu.po
new file mode 100644
index 0000000..7028c02
--- /dev/null
+++ b/mobile/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/mobile/lock-setting/po/hy.po b/mobile/lock-setting/po/hy.po
new file mode 100644
index 0000000..6916644
--- /dev/null
+++ b/mobile/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/mobile/lock-setting/po/is.po b/mobile/lock-setting/po/is.po
new file mode 100644
index 0000000..5693eed
--- /dev/null
+++ b/mobile/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/mobile/lock-setting/po/it_IT.po b/mobile/lock-setting/po/it_IT.po
new file mode 100644
index 0000000..d39fd3c
--- /dev/null
+++ b/mobile/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/mobile/lock-setting/po/ja_JP.po b/mobile/lock-setting/po/ja_JP.po
new file mode 100644
index 0000000..19c083d
--- /dev/null
+++ b/mobile/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/mobile/lock-setting/po/ka.po b/mobile/lock-setting/po/ka.po
new file mode 100644
index 0000000..b6b045e
--- /dev/null
+++ b/mobile/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/mobile/lock-setting/po/kk.po b/mobile/lock-setting/po/kk.po
new file mode 100644
index 0000000..5f30631
--- /dev/null
+++ b/mobile/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/mobile/lock-setting/po/ko_KR.po b/mobile/lock-setting/po/ko_KR.po
new file mode 100644
index 0000000..aca7f74
--- /dev/null
+++ b/mobile/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/mobile/lock-setting/po/lt.po b/mobile/lock-setting/po/lt.po
new file mode 100644
index 0000000..7067c08
--- /dev/null
+++ b/mobile/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/mobile/lock-setting/po/lv.po b/mobile/lock-setting/po/lv.po
new file mode 100644
index 0000000..af7d248
--- /dev/null
+++ b/mobile/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/mobile/lock-setting/po/mk.po b/mobile/lock-setting/po/mk.po
new file mode 100644
index 0000000..2cc2c03
--- /dev/null
+++ b/mobile/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/mobile/lock-setting/po/nb.po b/mobile/lock-setting/po/nb.po
new file mode 100644
index 0000000..167c148
--- /dev/null
+++ b/mobile/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/mobile/lock-setting/po/nl_NL.po b/mobile/lock-setting/po/nl_NL.po
new file mode 100644
index 0000000..9289e1b
--- /dev/null
+++ b/mobile/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/mobile/lock-setting/po/pl.po b/mobile/lock-setting/po/pl.po
new file mode 100644
index 0000000..3d8cbae
--- /dev/null
+++ b/mobile/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/mobile/lock-setting/po/pt_BR.po b/mobile/lock-setting/po/pt_BR.po
new file mode 100644
index 0000000..8072ea6
--- /dev/null
+++ b/mobile/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/mobile/lock-setting/po/pt_PT.po b/mobile/lock-setting/po/pt_PT.po
new file mode 100644
index 0000000..5005ee3
--- /dev/null
+++ b/mobile/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/mobile/lock-setting/po/ro.po b/mobile/lock-setting/po/ro.po
new file mode 100644
index 0000000..d0a832f
--- /dev/null
+++ b/mobile/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/mobile/lock-setting/po/ru_RU.po b/mobile/lock-setting/po/ru_RU.po
new file mode 100644
index 0000000..fb29213
--- /dev/null
+++ b/mobile/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/mobile/lock-setting/po/sk.po b/mobile/lock-setting/po/sk.po
new file mode 100644
index 0000000..5c28e7d
--- /dev/null
+++ b/mobile/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/mobile/lock-setting/po/sl.po b/mobile/lock-setting/po/sl.po
new file mode 100644
index 0000000..805afbc
--- /dev/null
+++ b/mobile/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/mobile/lock-setting/po/sr.po b/mobile/lock-setting/po/sr.po
new file mode 100644
index 0000000..c74520f
--- /dev/null
+++ b/mobile/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/mobile/lock-setting/po/sv.po b/mobile/lock-setting/po/sv.po
new file mode 100644
index 0000000..ea54af4
--- /dev/null
+++ b/mobile/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/mobile/lock-setting/po/tr_TR.po b/mobile/lock-setting/po/tr_TR.po
new file mode 100644
index 0000000..8c5ab33
--- /dev/null
+++ b/mobile/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/mobile/lock-setting/po/uk.po b/mobile/lock-setting/po/uk.po
new file mode 100644
index 0000000..67ef257
--- /dev/null
+++ b/mobile/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/mobile/lock-setting/po/uz.po b/mobile/lock-setting/po/uz.po
new file mode 100644
index 0000000..280ac1b
--- /dev/null
+++ b/mobile/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/mobile/lock-setting/po/zh_CN.po b/mobile/lock-setting/po/zh_CN.po
new file mode 100644
index 0000000..776d32c
--- /dev/null
+++ b/mobile/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/mobile/lock-setting/po/zh_HK.po b/mobile/lock-setting/po/zh_HK.po
new file mode 100644
index 0000000..53b912e
--- /dev/null
+++ b/mobile/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/mobile/lock-setting/po/zh_SG.po b/mobile/lock-setting/po/zh_SG.po
new file mode 100644
index 0000000..c78be58
--- /dev/null
+++ b/mobile/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/mobile/lock-setting/po/zh_TW.po b/mobile/lock-setting/po/zh_TW.po
new file mode 100644
index 0000000..5859f7f
--- /dev/null
+++ b/mobile/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/mobile/packaging/starter.spec b/mobile/packaging/starter.spec
new file mode 100644
index 0000000..965f4d9
--- /dev/null
+++ b/mobile/packaging/starter.spec
@@ -0,0 +1,110 @@
+Name: starter
+Summary: starter
+Version: 0.4.62
+Release: 3
+Group: TO_BE/FILLED_IN
+License: TO_BE/FILLED_IN
+Source0: starter-%{version}.tar.gz
+Requires(post): /usr/bin/vconftool
+BuildRequires: cmake
+BuildRequires: pkgconfig(ail)
+BuildRequires: pkgconfig(appcore-efl)
+BuildRequires: pkgconfig(aul)
+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(vconf)
+BuildRequires: pkgconfig(x11)
+BuildRequires: pkgconfig(xcomposite)
+BuildRequires: pkgconfig(xext)
+BuildRequires: pkgconfig(capi-system-info)
+BuildRequires: pkgconfig(pkgmgr-info)
+BuildRequires: pkgconfig(libsystemd-daemon)
+
+BuildRequires: cmake
+BuildRequires: edje-bin
+BuildRequires: gettext-tools
+
+Requires(post): /usr/bin/vconftool
+
+%description
+Description: Starter
+
+
+%prep
+%setup -q
+
+%cmake .
+
+%build
+
+make -j1
+%install
+rm -rf %{buildroot}
+%make_install
+
+mkdir -p %{buildroot}%{_libdir}/systemd/user/core-efl.target.wants
+mkdir -p %{buildroot}%{_libdir}/systemd/user/sockets.target.wants
+ln -s ../starter.path %{buildroot}%{_libdir}/systemd/user/core-efl.target.wants/starter.path
+ln -s ../starter.service %{buildroot}%{_libdir}/systemd/user/core-efl.target.wants/starter.service
+ln -s ../starter.socket %{buildroot}%{_libdir}/systemd/user/sockets.target.wants/starter.socket
+mkdir -p %{buildroot}/usr/share/license
+mkdir -p %{buildroot}/opt/data/home-daemon
+
+cp LICENSE.Flora %{buildroot}/usr/share/license/%{name}
+
+%post
+change_file_executable()
+{
+ chmod +x $@ 2>/dev/null
+ if [ $? -ne 0 ]; then
+ echo "Failed to change the perms of $@"
+ fi
+}
+
+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.lockscreen" -u 5000 -g 5000 -f
+vconftool set -t int memory/idle_lock/state "0" -i $GOPTION
+vconftool set -t bool memory/lockscreen/phone_lock_verification 0 -i $GOPTION
+
+vconftool set -t bool db/lockscreen/event_notification_display 1 $GOPTION
+vconftool set -t bool db/lockscreen/clock_display 1 $GOPTION
+vconftool set -t bool db/lockscreen/help_text_display 0 $GOPTION
+
+vconftool set -t int memory/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
+
+%files
+%manifest starter.manifest
+%defattr(-,root,root,-)
+%{_bindir}/starter
+/usr/ug/lib/libug-lockscreen-options.so
+/usr/ug/lib/libug-lockscreen-options.so.0.1.0
+/usr/ug/res/locale/*/LC_MESSAGES/*
+%{_libdir}/systemd/user/starter.path
+%{_libdir}/systemd/user/starter.service
+%{_libdir}/systemd/user/starter.socket
+%{_libdir}/systemd/user/core-efl.target.wants/starter.path
+%{_libdir}/systemd/user/core-efl.target.wants/starter.service
+%{_libdir}/systemd/user/sockets.target.wants/starter.socket
+/usr/share/license/%{name}
+/opt/data/home-daemon
+/opt/etc/smack/accesses.d/starter.rule
diff --git a/mobile/src/hw_key.c b/mobile/src/hw_key.c
new file mode 100644
index 0000000..14361bf
--- /dev/null
+++ b/mobile/src/hw_key.c
@@ -0,0 +1,323 @@
+ /*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.1 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+
+#include <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 "menu_daemon.h"
+#include "util.h"
+
+#define TASKMGR_PKG_NAME "org.tizen.taskmgr"
+#define CAMERA_PKG_NAME "org.tizen.camera-app"
+#define CALLLOG_PKG_NAME "org.tizen.calllog"
+#define MUSIC_PLAYER_PKG_NAME "org.tizen.music-player"
+
+
+
+static struct {
+ Ecore_X_Window win;
+ Ecore_Event_Handler *key_up;
+ Ecore_Event_Handler *key_down;
+ Ecore_Timer *long_press;
+ Ecore_Timer *single_timer;
+ Ecore_Timer *volume_up_long_press;
+ Ecore_Timer *volume_down_long_press;
+ Eina_Bool cancel;
+} key_info = {
+ .win = 0x0,
+ .key_up = NULL,
+ .key_down = NULL,
+ .long_press = NULL,
+ .single_timer = NULL,
+ .volume_up_long_press = NULL,
+ .volume_down_long_press = NULL,
+ .cancel = EINA_FALSE,
+};
+
+
+
+static Eina_Bool _launch_taskmgr_cb(void* data)
+{
+ int val1 = -1;
+ int val2 = -1;
+ _D("Launch TASKMGR");
+
+ key_info.long_press = NULL;
+
+ if (vconf_get_int(VCONFKEY_PM_STATE, &val1) < 0) {
+ _E("Cannot get VCONFKEY_PM_STATE");
+ return ECORE_CALLBACK_CANCEL;
+ }
+ if (vconf_get_int(VCONFKEY_IDLE_LOCK_STATE, &val2) < 0) {
+ _E("Cannot get VCONFKEY_IDLE_LOCK_STATE");
+ return ECORE_CALLBACK_CANCEL;
+ }
+
+ if ((val1 == VCONFKEY_PM_STATE_NORMAL) && (val2 == VCONFKEY_IDLE_UNLOCK)) {
+ _D("LCD ON, UNLOCK state => launch taskmgr");
+ syspopup_destroy_all();
+ if (menu_daemon_open_app(TASKMGR_PKG_NAME) < 0)
+ _E("Failed to launch the taskmgr");
+ } else {
+ _D("Can't launch TASKMGR pm state : %d lock state : %d", val1, val2);
+ }
+
+ return ECORE_CALLBACK_CANCEL;
+}
+
+
+
+static Eina_Bool _launch_by_home_key(void *data)
+{
+ key_info.single_timer = NULL;
+ syspopup_destroy_all();
+ menu_daemon_open_homescreen(NULL);
+ return ECORE_CALLBACK_CANCEL;
+}
+
+
+
+inline static int _release_home_key(void)
+{
+ syspopup_destroy_all();
+ retv_if(NULL == key_info.long_press, EXIT_SUCCESS);
+ ecore_timer_del(key_info.long_press);
+ key_info.long_press = NULL;
+
+ if (NULL == key_info.single_timer) {
+ key_info.single_timer = ecore_timer_add(0.3, _launch_by_home_key, NULL);
+ return EXIT_SUCCESS;
+ }
+ ecore_timer_del(key_info.single_timer);
+ key_info.single_timer = NULL;
+
+ return EXIT_SUCCESS;
+}
+
+
+
+inline static void _release_multimedia_key(const char *value)
+{
+ ret_if(NULL == value);
+
+ _D("Multimedia key is released with %s", value);
+
+ bundle *b;
+ b = bundle_create();
+ if (!b) {
+ _E("Cannot create bundle");
+ return;
+ }
+ bundle_add(b, "multimedia_key", value);
+
+ int ret;
+ ret = menu_daemon_launch_app(MUSIC_PLAYER_PKG_NAME, b);
+ if (ret < 0)
+ _E("Failed to launch the running apps, ret : %d", ret);
+
+ bundle_free(b);
+}
+
+
+
+static Eina_Bool _key_release_cb(void *data, int type, void *event)
+{
+ Evas_Event_Key_Up *ev = event;
+ int val = -1;
+
+ _D("Released");
+
+ if (!ev) {
+ _D("Invalid event object");
+ return ECORE_CALLBACK_RENEW;
+ }
+
+ 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 (menu_daemon_open_app(CALLLOG_PKG_NAME) < 0)
+ _E("Failed to launch %s", CALLLOG_PKG_NAME);
+ } else if(!strcmp(ev->keyname, KEY_CONFIG)) {
+ _D("Launch camera");
+ if (menu_daemon_open_app(CAMERA_PKG_NAME) < 0)
+ _E("Failed to launch %s", CAMERA_PKG_NAME);
+ } else if (!strcmp(ev->keyname, KEY_HOME)) {
+ if (vconf_get_int(VCONFKEY_IDLE_LOCK_STATE, &val) < 0) {
+ _D("Cannot get VCONFKEY_IDLE_LOCK_STATE");
+ }
+ if (val == VCONFKEY_IDLE_LOCK) {
+ _D("lock state, ignore home key..!!");
+ return ECORE_CALLBACK_RENEW;
+ }
+ if (key_info.long_press) {
+ ecore_timer_del(key_info.long_press);
+ key_info.long_press = NULL;
+ }
+
+ syspopup_destroy_all();
+
+ 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, -10000, -10000, 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());
+ ecore_x_flush();
+
+ 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/mobile/src/lock-daemon.c b/mobile/src/lock-daemon.c
new file mode 100644
index 0000000..d3908a5
--- /dev/null
+++ b/mobile/src/lock-daemon.c
@@ -0,0 +1,674 @@
+ /*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.1 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+
+#include <Elementary.h>
+
+#include <vconf.h>
+#include <vconf-keys.h>
+#include <systemd/sd-daemon.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;
+ Eina_Bool request_recovery;
+ lockw_data *lockw;
+ GPollFD *gpollfd;
+};
+
+#define PHLOCK_SOCK_PREFIX "/tmp/phlock"
+#define PHLOCK_SOCK_MAXBUFF 65535
+#define PHLOCK_APP_CMDLINE "/usr/apps/org.tizen.lockscreen/bin/lockscreen"
+#define PHLOCK_UNLOCK_CMD "unlock"
+#define PHLOCK_LAUNCH_CMD "launch_phone_lock"
+#define LAUNCH_INTERVAL 100*1000
+
+static int lockd_launch_app_lockscreen(struct lockd_data *lockd);
+
+static void lockd_unlock_lockscreen(struct lockd_data *lockd);
+
+static int _lockd_get_lock_type(void)
+{
+ int lock_type = 0;
+ int ret = 0;
+
+ vconf_get_int(VCONFKEY_SETAPPL_SCREEN_LOCK_TYPE_INT, &lock_type);
+
+ if (lock_type == SETTING_SCREEN_LOCK_TYPE_PASSWORD ||
+ lock_type == SETTING_SCREEN_LOCK_TYPE_SIMPLE_PASSWORD) {
+ ret = 1;
+ } else if (lock_type == SETTING_SCREEN_LOCK_TYPE_SWIPE ||
+ lock_type == SETTING_SCREEN_LOCK_TYPE_MOTION) {
+ ret = 0;
+ } else {
+ ret = 2;
+ }
+
+ LOCKD_DBG("_lockd_get_lock_type ret(%d), lock_type (%d)", ret, lock_type);
+
+ return ret;
+}
+
+static void _lockd_notify_pm_state_cb(keynode_t * node, void *data)
+{
+ LOCKD_DBG("PM state Notification!!");
+
+ struct lockd_data *lockd = (struct lockd_data *)data;
+ int val = -1;
+
+ if (lockd == NULL) {
+ LOCKD_ERR("lockd is NULL");
+ return;
+ }
+
+ if (vconf_get_int(VCONFKEY_PM_STATE, &val) < 0) {
+ LOCKD_ERR("Cannot get VCONFKEY_PM_STATE");
+ return;
+ }
+
+ if (val == VCONFKEY_PM_STATE_LCDOFF) {
+ lockd->lock_type = _lockd_get_lock_type();
+ lockd_launch_app_lockscreen(lockd);
+ }
+}
+
+static void
+_lockd_notify_lock_state_cb(keynode_t * node, void *data)
+{
+ LOCKD_DBG("lock state changed!!");
+
+ struct lockd_data *lockd = (struct lockd_data *)data;
+ int val = -1;
+
+ if (lockd == NULL) {
+ LOCKD_ERR("lockd is NULL");
+ return;
+ }
+
+ if (vconf_get_int(VCONFKEY_IDLE_LOCK_STATE, &val) < 0) {
+ LOCKD_ERR("Cannot get VCONFKEY_IDLE_LOCK_STATE");
+ return;
+ }
+
+ if (val == VCONFKEY_IDLE_UNLOCK) {
+ LOCKD_DBG("unlocked..!!");
+ if (lockd->lock_app_pid != 0) {
+ LOCKD_DBG("terminate lock app..!!");
+ lockd_process_mgr_terminate_lock_app(lockd->lock_app_pid, 1);
+ }
+ }
+}
+
+static Eina_Bool lockd_set_lock_state_cb(void *data)
+{
+ LOCKD_DBG("%s, %d", __func__, __LINE__);
+ vconf_set_int(VCONFKEY_IDLE_LOCK_STATE, VCONFKEY_IDLE_LOCK);
+ return ECORE_CALLBACK_CANCEL;
+}
+
+static void
+_lockd_notify_phone_lock_verification_cb(keynode_t * node, void *data)
+{
+ LOCKD_DBG("%s, %d", __func__, __LINE__);
+
+ struct lockd_data *lockd = (struct lockd_data *)data;
+ int val = -1;
+
+ if (lockd == NULL) {
+ LOCKD_ERR("lockd is NULL");
+ return;
+ }
+
+ if (vconf_get_bool(VCONFKEY_LOCKSCREEN_PHONE_LOCK_VERIFICATION, &val) < 0) {
+ LOCKD_ERR("Cannot get %s", VCONFKEY_LOCKSCREEN_PHONE_LOCK_VERIFICATION);
+ return;
+ }
+
+ if (val == TRUE) {
+ lockd_window_mgr_finish_lock(lockd->lockw);
+ vconf_set_int(VCONFKEY_IDLE_LOCK_STATE, VCONFKEY_IDLE_UNLOCK);
+ }
+}
+
+static int lockd_app_dead_cb(int pid, void *data)
+{
+ LOCKD_DBG("app dead cb call! (pid : %d)", pid);
+
+ struct lockd_data *lockd = (struct lockd_data *)data;
+
+ if (pid == lockd->lock_app_pid) {
+ LOCKD_DBG("lock app(pid:%d) is destroyed.", pid);
+
+ lockd_unlock_lockscreen(lockd);
+ }
+
+ menu_daemon_check_dead_signal(pid);
+
+ return 0;
+
+}
+
+static Eina_Bool lockd_app_create_cb(void *data, int type, void *event)
+{
+ struct lockd_data *lockd = (struct lockd_data *)data;
+
+ if (lockd == NULL) {
+ return ECORE_CALLBACK_PASS_ON;
+ }
+ LOCKD_DBG("%s, %d", __func__, __LINE__);
+ if (lockd_window_set_window_effect(lockd->lockw, lockd->lock_app_pid,
+ event) == EINA_TRUE) {
+ if(lockd_window_set_window_property(lockd->lockw, lockd->lock_app_pid,
+ event) == EINA_FALSE) {
+ LOCKD_ERR("window is not matched..!!");
+ }
+ }
+ return ECORE_CALLBACK_PASS_ON;
+}
+
+static Eina_Bool lockd_app_show_cb(void *data, int type, void *event)
+{
+ struct lockd_data *lockd = (struct lockd_data *)data;
+
+ if (lockd == NULL) {
+ return EINA_TRUE;
+ }
+ LOCKD_DBG("%s, %d", __func__, __LINE__);
+ if (lockd_window_set_window_property(lockd->lockw, lockd->lock_app_pid,
+ event)) {
+ ecore_idler_add(lockd_set_lock_state_cb, NULL);
+ }
+ return EINA_FALSE;
+}
+
+static int lockd_launch_app_lockscreen(struct lockd_data *lockd)
+{
+ LOCKD_DBG("launch app lock screen");
+
+ int call_state = -1, phlock_state = -1, factory_mode = -1, test_mode = -1;
+ int r = 0;
+
+ WRITE_FILE_LOG("%s", "Launch lockscreen in starter");
+
+ if (lockd_process_mgr_check_lock(lockd->lock_app_pid) == TRUE) {
+ LOCKD_DBG("Lock Screen App is already running.");
+ r = lockd_process_mgr_restart_lock(lockd->lock_type);
+ if (r < 0) {
+ LOCKD_DBG("Restarting Lock Screen App is fail [%d].", r);
+ usleep(LAUNCH_INTERVAL);
+ } else {
+ LOCKD_DBG("Restarting Lock Screen App, pid[%d].", r);
+ return 1;
+ }
+ }
+
+ vconf_get_int(VCONFKEY_CALL_STATE, &call_state);
+ if (call_state != VCONFKEY_CALL_OFF) {
+ LOCKD_DBG
+ ("Current call state(%d) does not allow to launch lock screen.",
+ call_state);
+ return 0;
+ }
+
+ lockd->lock_app_pid =
+ lockd_process_mgr_start_lock(lockd, lockd_app_dead_cb,
+ lockd->lock_type);
+ if (lockd->lock_app_pid < 0)
+ return 0;
+ lockd_window_mgr_finish_lock(lockd->lockw);
+ lockd_window_mgr_ready_lock(lockd, lockd->lockw, lockd_app_create_cb,
+ lockd_app_show_cb);
+
+ return 1;
+}
+
+static void lockd_unlock_lockscreen(struct lockd_data *lockd)
+{
+ LOCKD_DBG("unlock lock screen");
+ lockd->lock_app_pid = 0;
+
+ vconf_set_int(VCONFKEY_IDLE_LOCK_STATE, VCONFKEY_IDLE_UNLOCK);
+ lockd_window_mgr_finish_lock(lockd->lockw);
+}
+
+inline static void lockd_set_sock_option(int fd, int cli)
+{
+ int size;
+ int ret;
+ struct timeval tv = { 1, 200 * 1000 };
+
+ size = PHLOCK_SOCK_MAXBUFF;
+ ret = setsockopt(fd, SOL_SOCKET, SO_SNDBUF, &size, sizeof(size));
+ if(ret != 0)
+ return;
+ ret = setsockopt(fd, SOL_SOCKET, SO_RCVBUF, &size, sizeof(size));
+ if(ret != 0)
+ return;
+ if (cli) {
+ ret = setsockopt(fd, SOL_SOCKET, SO_RCVTIMEO, &tv, sizeof(tv));
+ if(ret != 0)
+ return;
+ }
+}
+
+static int lockd_create_sock(void)
+{
+ struct sockaddr_un saddr;
+ int fd;
+
+ int n = sd_listen_fds(1);
+ if (n > 1) {
+ LOCKD_DBG("too many file descriptors received");
+ return -1;
+ } else if (n == 1) {
+ int r;
+ if ((r = sd_is_socket_unix(SD_LISTEN_FDS_START, SOCK_STREAM, 1, PHLOCK_SOCK_PREFIX, 0)) <= 0) {
+ LOCKD_DBG("passed systemd file descriptor is of wrong type");
+ return -1;
+ }
+ fd = SD_LISTEN_FDS_START + 0;
+ } else {
+ fd = socket(AF_UNIX, SOCK_STREAM, 0);
+ if (fd < 0) {
+ if (errno == EINVAL) {
+ fd = socket(AF_UNIX, SOCK_STREAM, 0);
+ if (fd < 0) {
+ LOCKD_DBG("second chance - socket create error");
+ return -1;
+ }
+ } else {
+ LOCKD_DBG("socket error");
+ return -1;
+ }
+ }
+
+ bzero(&saddr, sizeof(saddr));
+ saddr.sun_family = AF_UNIX;
+
+ strncpy(saddr.sun_path, PHLOCK_SOCK_PREFIX, strlen(PHLOCK_SOCK_PREFIX));
+ saddr.sun_path[strlen(PHLOCK_SOCK_PREFIX)] = 0;
+
+ unlink(saddr.sun_path);
+
+ if (bind(fd, (struct sockaddr *)&saddr, sizeof(saddr)) < 0) {
+ LOCKD_DBG("bind error");
+ close(fd);
+ return -1;
+ }
+
+ if (chmod(saddr.sun_path, (S_IRWXU | S_IRWXG | S_IRWXO)) < 0) {
+ LOCKD_DBG("failed to change the socket permission");
+ close(fd);
+ return -1;
+ }
+
+ lockd_set_sock_option(fd, 0);
+
+ if (listen(fd, 10) == -1) {
+ LOCKD_DBG("listen error");
+ close(fd);
+ return -1;
+ }
+ }
+ return fd;
+}
+
+static gboolean lockd_glib_check(GSource * src)
+{
+ GSList *fd_list;
+ GPollFD *tmp;
+
+ fd_list = src->poll_fds;
+ do {
+ tmp = (GPollFD *) fd_list->data;
+ if ((tmp->revents & (POLLIN | POLLPRI)))
+ return TRUE;
+ fd_list = fd_list->next;
+ } while (fd_list);
+
+ return FALSE;
+}
+
+static char *lockd_read_cmdline_from_proc(int pid)
+{
+ int memsize = 32;
+ char path[32];
+ char *cmdline = NULL, *tempptr = NULL;
+ FILE *fp = NULL;
+
+ snprintf(path, sizeof(path), "/proc/%d/cmdline", pid);
+
+ fp = fopen(path, "r");
+ if (fp == NULL) {
+ LOCKD_DBG("Cannot open cmdline on pid[%d]", pid);
+ return NULL;
+ }
+
+ cmdline = malloc(32);
+ if (cmdline == NULL) {
+ LOCKD_DBG("%s", "Out of memory");
+ fclose(fp);
+ return NULL;
+ }
+
+ bzero(cmdline, memsize);
+ if (fgets(cmdline, 32, fp) == NULL) {
+ LOCKD_DBG("%s", "Cannot read cmdline");
+ free(cmdline);
+ fclose(fp);
+ return NULL;
+ }
+
+ while (cmdline[memsize - 2] != 0) {
+ cmdline[memsize - 1] = (char)fgetc(fp);
+ tempptr = realloc(cmdline, memsize + 32);
+ if (tempptr == NULL) {
+ fclose(fp);
+ LOCKD_DBG("%s", "Out of memory");
+ return NULL;
+ }
+ cmdline = tempptr;
+ bzero(cmdline + memsize, 32);
+ fgets(cmdline + memsize, 32, fp);
+ memsize += 32;
+ }
+
+ if (fp != NULL)
+ fclose(fp);
+ return cmdline;
+}
+
+static int lockd_sock_handler(void *data)
+{
+ int cl;
+ int len;
+ int sun_size;
+ int clifd = -1;
+ char cmd[PHLOCK_SOCK_MAXBUFF];
+ char *cmdline = NULL;
+ int val = -1;
+ int fd = -1;
+ int recovery_state = -1;
+ GPollFD *gpollfd;
+
+ struct ucred cr;
+ struct sockaddr_un lockd_addr;
+ struct lockd_data *lockd = (struct lockd_data *)data;
+
+ if ((lockd == NULL) || (lockd->gpollfd == NULL)) {
+ LOCKD_DBG("lockd->gpollfd is NULL");
+ return -1;
+ }
+ gpollfd = (GPollFD *)lockd->gpollfd;
+ fd = gpollfd->fd;
+
+ cl = sizeof(cr);
+ sun_size = sizeof(struct sockaddr_un);
+
+ if ((clifd =
+ accept(fd, (struct sockaddr *)&lockd_addr,
+ (socklen_t *) & sun_size)) == -1) {
+ if (errno != EINTR)
+ LOCKD_DBG("accept error");
+ return -1;
+ }
+
+ if (getsockopt(clifd, SOL_SOCKET, SO_PEERCRED, &cr, (socklen_t *) & cl)
+ < 0) {
+ LOCKD_DBG("peer information error");
+ close(clifd);
+ return -1;
+ }
+ LOCKD_DBG("Peer's pid=%d, uid=%d, gid=%d\n", cr.pid, cr.uid, cr.gid);
+
+ memset(cmd, 0, PHLOCK_SOCK_MAXBUFF);
+
+ lockd_set_sock_option(clifd, 1);
+
+ len = recv(clifd, cmd, PHLOCK_SOCK_MAXBUFF, 0);
+ cmd[PHLOCK_SOCK_MAXBUFF - 1] = '\0';
+
+ if (len != strlen(cmd)) {
+ LOCKD_DBG("recv error %d %d", len, strlen(cmd));
+ close(clifd);
+ return -1;
+ }
+
+ LOCKD_DBG("cmd %s", cmd);
+
+ cmdline = lockd_read_cmdline_from_proc(cr.pid);
+ if (cmdline == NULL) {
+ LOCKD_DBG("Error on opening /proc/%d/cmdline", cr.pid);
+ close(clifd);
+ return -1;
+ }
+
+ LOCKD_DBG("/proc/%d/cmdline : %s", cr.pid, cmdline);
+ LOCKD_DBG("phone_lock_pid : %d vs cr.pid : %d", phone_lock_pid, cr.pid);
+
+ if ((!strncmp(cmdline, PHLOCK_APP_CMDLINE, strlen(cmdline)))
+ && (!strncmp(cmd, PHLOCK_UNLOCK_CMD, strlen(cmd)))) {
+ LOCKD_DBG("cmd is %s\n", PHLOCK_UNLOCK_CMD);
+
+ if (phone_lock_pid == cr.pid) {
+ LOCKD_DBG("pid [%d] %s is verified, unlock..!!\n", cr.pid,
+ cmdline);
+ lockd_process_mgr_terminate_phone_lock(phone_lock_pid);
+ phone_lock_pid = 0;
+ vconf_set_bool(VCONFKEY_LOCKSCREEN_PHONE_LOCK_VERIFICATION, TRUE);
+ }
+ } else if (!strncmp(cmd, PHLOCK_LAUNCH_CMD, strlen(cmd))) {
+ LOCKD_DBG("cmd is %s\n", PHLOCK_LAUNCH_CMD);
+ if (_lockd_get_lock_type() == 1) {
+ lockd->lock_type = 1;
+ lockd_launch_app_lockscreen(lockd);
+ }
+ }
+
+ if(cmdline != NULL) {
+ free(cmdline);
+ cmdline = NULL;
+ }
+
+ close(clifd);
+ return 0;
+}
+
+static gboolean lockd_glib_handler(gpointer data)
+{
+ if (lockd_sock_handler(data) < 0) {
+ LOCKD_DBG("lockd_sock_handler is failed..!!");
+ }
+ return TRUE;
+}
+
+static gboolean lockd_glib_dispatch(GSource * src, GSourceFunc callback,
+ gpointer data)
+{
+ callback(data);
+ return TRUE;
+}
+
+static gboolean lockd_glib_prepare(GSource * src, gint * timeout)
+{
+ return FALSE;
+}
+
+static GSourceFuncs funcs = {
+ .prepare = lockd_glib_prepare,
+ .check = lockd_glib_check,
+ .dispatch = lockd_glib_dispatch,
+ .finalize = NULL
+};
+
+static int lockd_init_sock(struct lockd_data *lockd)
+{
+ int fd;
+ GPollFD *gpollfd;
+ GSource *src;
+ int ret;
+
+ fd = lockd_create_sock();
+ if (fd < 0) {
+ LOCKD_DBG("lock daemon create sock failed..!!");
+ }
+
+ src = g_source_new(&funcs, sizeof(GSource));
+
+ gpollfd = (GPollFD *) g_malloc(sizeof(GPollFD));
+ gpollfd->events = POLLIN;
+ gpollfd->fd = fd;
+
+ lockd->gpollfd = gpollfd;
+
+ g_source_add_poll(src, lockd->gpollfd);
+ g_source_set_callback(src, (GSourceFunc) lockd_glib_handler,
+ (gpointer) lockd, NULL);
+ g_source_set_priority(src, G_PRIORITY_LOW);
+
+ ret = g_source_attach(src, NULL);
+ if (ret == 0)
+ return -1;
+
+ g_source_unref(src);
+
+ return 0;
+}
+
+static void lockd_init_vconf(struct lockd_data *lockd)
+{
+ int val = -1;
+
+ if (vconf_notify_key_changed
+ (VCONFKEY_PM_STATE, _lockd_notify_pm_state_cb, lockd) != 0) {
+ LOCKD_ERR("Fail vconf_notify_key_changed : VCONFKEY_PM_STATE");
+ }
+
+ if (vconf_notify_key_changed
+ (VCONFKEY_LOCKSCREEN_PHONE_LOCK_VERIFICATION,
+ _lockd_notify_phone_lock_verification_cb, lockd) != 0) {
+ if (vconf_get_bool(VCONFKEY_LOCKSCREEN_PHONE_LOCK_VERIFICATION, &val) < 0) {
+ LOCKD_ERR
+ ("Cannot get %s", VCONFKEY_LOCKSCREEN_PHONE_LOCK_VERIFICATION);
+ vconf_set_bool(VCONFKEY_LOCKSCREEN_PHONE_LOCK_VERIFICATION, 0);
+ if (vconf_notify_key_changed
+ (VCONFKEY_LOCKSCREEN_PHONE_LOCK_VERIFICATION,
+ _lockd_notify_phone_lock_verification_cb,
+ lockd) != 0) {
+ LOCKD_ERR
+ ("Fail vconf_notify_key_changed : %s", VCONFKEY_LOCKSCREEN_PHONE_LOCK_VERIFICATION);
+ }
+ } else {
+ LOCKD_ERR
+ ("Fail vconf_notify_key_changed : %s", VCONFKEY_LOCKSCREEN_PHONE_LOCK_VERIFICATION);
+ }
+ }
+
+ if (vconf_notify_key_changed
+ (VCONFKEY_IDLE_LOCK_STATE,
+ _lockd_notify_lock_state_cb,
+ lockd) != 0) {
+ LOCKD_ERR
+ ("[Error] vconf notify : lock state");
+ }
+}
+
+static void lockd_start_lock_daemon(void *data)
+{
+ struct lockd_data *lockd = NULL;
+ int r = 0;
+
+ lockd = (struct lockd_data *)data;
+
+ if (!lockd) {
+ return;
+ }
+
+ LOCKD_DBG("%s, %d", __func__, __LINE__);
+
+ lockd_init_vconf(lockd);
+
+ r = lockd_init_sock(lockd);
+ if (r < 0) {
+ LOCKD_DBG("lockd init socket failed: %d", r);
+ }
+
+ lockd->lockw = lockd_window_init();
+
+ aul_listen_app_dead_signal(lockd_app_dead_cb, data);
+
+ LOCKD_DBG("%s, %d", __func__, __LINE__);
+}
+
+int start_lock_daemon(int launch_lock)
+{
+ struct lockd_data *lockd = NULL;
+ int val = -1;
+ int recovery_state = -1;
+ int first_boot = 0;
+ int lock_type = 0;
+ int ret = 0;
+
+ LOCKD_DBG("%s, %d", __func__, __LINE__);
+
+ lockd = (struct lockd_data *)malloc(sizeof(struct lockd_data));
+ memset(lockd, 0x0, sizeof(struct lockd_data));
+ lockd_start_lock_daemon(lockd);
+
+ if (launch_lock == FALSE) {
+ LOCKD_DBG("Don't launch lockscreen..");
+ return 0;
+ }
+
+ if (vconf_get_bool(VCONFKEY_PWLOCK_FIRST_BOOT, &first_boot) < 0) {
+ LOCKD_ERR("Cannot get %s vconfkey", VCONFKEY_PWLOCK_FIRST_BOOT);
+ } else if (first_boot == 1) {
+ LOCKD_DBG("first_boot : %d \n", first_boot);
+ return 0;
+ }
+
+ lock_type = _lockd_get_lock_type();
+ if (lock_type == 1) {
+ lockd->request_recovery = FALSE;
+ }
+ lockd->lock_type = lock_type;
+ ret = lockd_launch_app_lockscreen(lockd);
+ return ret;
+}
diff --git a/mobile/src/lockd-debug.c b/mobile/src/lockd-debug.c
new file mode 100644
index 0000000..72c7227
--- /dev/null
+++ b/mobile/src/lockd-debug.c
@@ -0,0 +1,94 @@
+ /*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.1 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+
+#include <stdio.h>
+#include <stdarg.h>
+#include <fcntl.h>
+#include <time.h>
+#include <string.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <glib.h>
+
+#include "lockd-debug.h"
+
+#define LINEMAX 256
+#define MAXFILELEN 1048576
+#define LOGFILE "/tmp/starter.log"
+
+void lockd_log_t(char *fmt, ...)
+{
+ va_list ap;
+ FILE *fd = 0;
+ char buf[LINEMAX] = { 0, };
+ char debugString[LINEMAX] = { 0, };
+
+ va_start(ap, fmt);
+ vsnprintf(buf, sizeof(buf), fmt, ap);
+ va_end(ap);
+ int fileLen = 0;
+ struct tm local_t;
+ time_t current_time = 0;
+ bzero((char *)&debugString, LINEMAX);
+ time(&current_time);
+ gmtime_r(&current_time, &local_t);
+ int len = snprintf(debugString, sizeof(debugString),
+ "[%d-%02d-%02d, %02d:%02d:%02d]: ",
+ local_t.tm_year + 1900, local_t.tm_mon + 1,
+ local_t.tm_mday, local_t.tm_hour, local_t.tm_min,
+ local_t.tm_sec);
+ if (len == -1) {
+ return;
+ } else {
+ debugString[len] = '\0';
+ }
+ len = g_strlcat(debugString, buf, LINEMAX);
+ if (len >= LINEMAX) {
+ return;
+ } else {
+ debugString[len] = '\n';
+ }
+ if ((fd = fopen(LOGFILE, "at+")) == NULL) {
+ LOCKD_DBG("File fopen fail for writing Pwlock information");
+ } else {
+ int pid = -1;
+ if (fwrite(debugString, strlen(debugString), 1, fd) < 1) {
+ LOCKD_DBG
+ ("File fwrite fail for writing Pwlock information");
+ fclose(fd);
+ if ((pid = fork()) < 0) {
+ } else if (pid == 0) {
+ execl("/bin/rm", "rm", "-f", LOGFILE,
+ (char *)0);
+ }
+ } else {
+ fseek(fd, 0l, SEEK_END);
+ fileLen = ftell(fd);
+ if (fileLen > MAXFILELEN) {
+ fclose(fd);
+ if ((pid = fork()) < 0) {
+ return;
+ } else if (pid == 0) {
+ execl("/bin/rm", "rm", "-f", LOGFILE,
+ (char *)0);
+ }
+ } else
+ fclose(fd);
+ }
+ }
+}
diff --git a/mobile/src/lockd-process-mgr.c b/mobile/src/lockd-process-mgr.c
new file mode 100644
index 0000000..f9bc863
--- /dev/null
+++ b/mobile/src/lockd-process-mgr.c
@@ -0,0 +1,176 @@
+ /*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.1 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+
+#include <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.lockscreen"
+#define LOCKD_DEFAULT_LOCKSCREEN "org.tizen.lockscreen"
+#define LOCKD_PHONE_LOCK_PKG_NAME "org.tizen.lockscreen"
+#define RETRY_MAXCOUNT 30
+#define RELAUNCH_INTERVAL 100*1000
+
+static char *_lockd_process_mgr_get_pkgname(void)
+{
+ char *pkgname = NULL;
+
+ pkgname = vconf_get_str(VCONFKEY_SETAPPL_3RD_LOCK_PKG_NAME_STR);
+
+ LOCKD_DBG("pkg name is %s", pkgname);
+
+ if (pkgname == NULL) {
+ return LOCKD_DEFAULT_PKG_NAME;
+ }
+
+ return pkgname;
+}
+
+int lockd_process_mgr_restart_lock(int phone_lock_state)
+{
+ char *lock_app_path = NULL;
+ int pid;
+
+ lock_app_path = _lockd_process_mgr_get_pkgname();
+ pid = aul_launch_app(lock_app_path, NULL);
+
+ LOCKD_DBG("Reset : aul_launch_app(%s, NULL), pid = %d", lock_app_path,
+ pid);
+
+ return pid;
+}
+
+int lockd_process_mgr_start_lock(void *data, int (*dead_cb) (int, void *),
+ int phone_lock_state)
+{
+ char *lock_app_path = NULL;
+ int pid;
+ int ret;
+
+ lock_app_path = _lockd_process_mgr_get_pkgname();
+
+ int i;
+ for (i=0; i<RETRY_MAXCOUNT; i++)
+ {
+ pid = aul_launch_app(lock_app_path, NULL);
+
+ 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);
+ ret = vconf_set_str(VCONFKEY_SETAPPL_3RD_LOCK_PKG_NAME_STR, LOCKD_DEFAULT_LOCKSCREEN);
+ if (ret != 0) {
+ LOCKD_ERR("set failed");
+ }
+ 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_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;
+
+ pid = aul_launch_app(LOCKD_PHONE_LOCK_PKG_NAME, NULL);
+ LOCKD_DBG("aul_launch_app(%s, b), pid = %d", LOCKD_PHONE_LOCK_PKG_NAME,
+ pid);
+ return pid;
+}
+
+void lockd_process_mgr_terminate_lock_app(int lock_app_pid, int state)
+{
+ LOCKD_DBG
+ ("lockd_process_mgr_terminate_lock_app, state:%d\n",
+ state);
+
+ if (state == 1) {
+ if (lock_app_pid != 0) {
+ LOCKD_DBG("Terminate Lock app(pid : %d)", lock_app_pid);
+ aul_terminate_pid(lock_app_pid);
+ }
+ }
+}
+
+void lockd_process_mgr_terminate_phone_lock(int phone_lock_pid)
+{
+ LOCKD_DBG("Terminate Phone Lock(pid : %d)", phone_lock_pid);
+ aul_terminate_pid(phone_lock_pid);
+}
+
+int lockd_process_mgr_check_lock(int pid)
+{
+ char buf[128];
+ LOCKD_DBG("%s, %d", __func__, __LINE__);
+
+ if (aul_app_get_pkgname_bypid(pid, buf, sizeof(buf)) < 0) {
+ LOCKD_DBG("no such pkg by pid %d\n", pid);
+ } else {
+ LOCKD_DBG("app pkgname = %s, pid = %d\n", buf, pid);
+ if (aul_app_is_running(buf) == TRUE) {
+ LOCKD_DBG("%s [pid = %d] is running\n", buf, pid);
+ return TRUE;
+ } else {
+ LOCKD_DBG("[pid = %d] is exist but %s is not running\n",
+ pid, buf);
+ }
+ }
+ return FALSE;
+}
diff --git a/mobile/src/lockd-window-mgr.c b/mobile/src/lockd-window-mgr.c
new file mode 100644
index 0000000..4d826e5
--- /dev/null
+++ b/mobile/src/lockd-window-mgr.c
@@ -0,0 +1,283 @@
+ /*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.1 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+
+#include <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;
+ int volume_key_cnt;
+
+ int phone_lock_state;
+ int phone_lock_app_pid;
+};
+
+static Eina_Bool _lockd_window_key_down_cb(void *data, int type, void *event)
+{
+ Ecore_Event_Key *ev = event;
+
+ LOCKD_DBG("Key Down CB : %s", ev->keyname);
+
+ return ECORE_CALLBACK_PASS_ON;
+}
+
+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;
+
+}
+
+Eina_Bool
+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 EINA_FALSE;
+ }
+ LOCKD_DBG("%s, %d", __func__, __LINE__);
+
+ user_window = get_user_created_window((Window) (e->win));
+
+ int ret = ecore_x_netwm_pid_get(user_window, &pid);
+ if(ret != 1) {
+ return EINA_FALSE;
+ }
+
+ LOCKD_DBG("Check PID(%d) window. (lock_app_pid : %d)\n", pid,
+ lock_app_pid);
+
+ if (lock_app_pid == pid) {
+ if (_lockd_window_check_validate_rect
+ (ecore_x_display_get(), user_window) == TRUE) {
+ lockw->lock_x_window = user_window;
+ LOCKD_DBG
+ ("This is lock application. Set window property. win id : %x",
+ user_window);
+
+ ecore_x_icccm_name_class_set(user_window, "LOCK_SCREEN",
+ "LOCK_SCREEN");
+ ecore_x_netwm_window_type_set(user_window,
+ ECORE_X_WINDOW_TYPE_NOTIFICATION);
+ utilx_set_system_notification_level(ecore_x_display_get
+ (), user_window,
+ UTILX_NOTIFICATION_LEVEL_NORMAL);
+ utilx_set_window_opaque_state(ecore_x_display_get(),
+ user_window,
+ UTILX_OPAQUE_STATE_ON);
+ return EINA_TRUE;
+ }
+ }
+ return EINA_FALSE;
+}
+
+Eina_Bool
+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 EINA_FALSE;
+ }
+
+ LOCKD_DBG("%s, %d", __func__, __LINE__);
+
+ LOCKD_DBG("PID(%d) window created. (lock_app_pid : %d)\n", pid,
+ lock_app_pid);
+
+ if (lock_app_pid == pid) {
+ if (_lockd_window_check_validate_rect
+ (ecore_x_display_get(), user_window) == TRUE) {
+ LOCKD_DBG
+ ("This is lock application. Disable window effect. win id : %x\n",
+ user_window);
+
+ utilx_set_window_effect_state(ecore_x_display_get(),
+ user_window, 0);
+ return EINA_TRUE;
+ }
+ }
+ return EINA_FALSE;
+}
+
+void lockd_window_set_phonelock_pid(lockw_data * data, int phone_lock_pid)
+{
+ lockw_data *lockw = (lockw_data *) data;
+
+ if (!lockw) {
+ return;
+ }
+ LOCKD_DBG("%s, %d", __func__, __LINE__);
+ lockw->phone_lock_app_pid = phone_lock_pid;
+ LOCKD_DBG("%s, %d, lockw->phone_lock_app_pid = %d", __func__, __LINE__,
+ lockw->phone_lock_app_pid);
+}
+
+void
+lockd_window_mgr_ready_lock(void *data, lockw_data * lockw,
+ Eina_Bool(*create_cb) (void *, int, void *),
+ Eina_Bool(*show_cb) (void *, int, void *))
+{
+ if (lockw == NULL) {
+ LOCKD_ERR("lockw is NULL.");
+ return;
+ }
+ lockw->h_wincreate =
+ ecore_event_handler_add(ECORE_X_EVENT_WINDOW_CREATE, create_cb,
+ data);
+ lockw->h_winshow =
+ ecore_event_handler_add(ECORE_X_EVENT_WINDOW_SHOW, show_cb, data);
+
+ lockw->volume_key_cnt = 0;
+
+ lockw->h_keydown =
+ ecore_event_handler_add(ECORE_EVENT_KEY_DOWN,
+ _lockd_window_key_down_cb, lockw);
+}
+
+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;
+ }
+
+ ecore_x_pointer_ungrab();
+
+ 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;
+
+ lockw = (lockw_data *) malloc(sizeof(lockw_data));
+ memset(lockw, 0x0, sizeof(lockw_data));
+
+ pid = getpid();
+
+ return lockw;
+}
diff --git a/mobile/src/menu_daemon.c b/mobile/src/menu_daemon.c
new file mode 100644
index 0000000..ebb5237
--- /dev/null
+++ b/mobile/src/menu_daemon.c
@@ -0,0 +1,373 @@
+ /*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.1 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+
+#include <ail.h>
+#include <aul.h>
+#include <db-util.h>
+#include <Elementary.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <pkgmgr-info.h>
+#include <stdio.h>
+#include <sysman.h>
+#include <syspopup_caller.h>
+#include <sys/types.h>
+#include <sys/wait.h>
+#include <unistd.h>
+#include <vconf.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
+
+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,
+};
+
+
+
+#define RETRY_COUNT 5
+int menu_daemon_open_app(const char *pkgname)
+{
+ register int i;
+ int r = AUL_R_ETIMEOUT;
+ for (i = 0; AUL_R_ETIMEOUT == r && i < RETRY_COUNT; i ++) {
+ r = aul_open_app(pkgname);
+ if (0 <= r) return r;
+ else {
+ _D("aul_open_app error(%d)", r);
+ _F("cannot open an app(%s) by %d", pkgname, r);
+ }
+ usleep(500000);
+ }
+
+ return r;
+}
+
+
+
+int menu_daemon_launch_app(const char *pkgname, bundle *b)
+{
+ register int i;
+ int r = AUL_R_ETIMEOUT;
+ for (i = 0; AUL_R_ETIMEOUT == r && i < RETRY_COUNT; i ++) {
+ r = aul_launch_app(pkgname, b);
+ if (0 <= r) return r;
+ else {
+ _D("aul_launch_app error(%d)", r);
+ _F("cannot launch an app(%s) by %d", pkgname, r);
+ }
+ usleep(500000);
+ }
+
+ return r;
+}
+
+
+
+bool menu_daemon_is_homescreen(pid_t pid)
+{
+ if (s_info.home_pid == pid) return true;
+ return false;
+}
+
+
+
+inline char *menu_daemon_get_selected_pkgname(void)
+{
+ char *pkgname = NULL;
+
+ pkgname = vconf_get_str(VCONFKEY_SETAPPL_SELECTED_PACKAGE_NAME);
+ retv_if(NULL == pkgname, NULL);
+
+ return pkgname;
+}
+
+
+
+static bool _exist_package(char *pkgid)
+{
+ int ret = 0;
+ pkgmgrinfo_pkginfo_h handle = NULL;
+
+ ret = pkgmgrinfo_pkginfo_get_pkginfo(pkgid, &handle);
+ if (PMINFO_R_OK != ret || NULL == handle) {
+ _D("%s doesn't exist in this binary", pkgid);
+ return false;
+ }
+
+ pkgmgrinfo_pkginfo_destroy_pkginfo(handle);
+
+ return true;
+}
+
+
+
+inline void menu_daemon_open_homescreen(const char *pkgname)
+{
+ char *homescreen = NULL;
+ char *tmp = NULL;
+
+ system("echo -e '[${_G}menu-daemon launches home-screen${C_}]' > /dev/kmsg");
+
+ if (NULL == pkgname) {
+ tmp = menu_daemon_get_selected_pkgname();
+ ret_if(NULL == tmp);
+ homescreen = tmp;
+ } else {
+ homescreen = (char *) pkgname;
+ }
+
+ syspopup_destroy_all();
+
+ int ret;
+ ret = menu_daemon_open_app(homescreen);
+ _D("can%s launch %s now. (%d)", ret < 0 ? "not" : "", homescreen, ret);
+ if (ret < 0 && strcmp(homescreen, HOME_SCREEN_PKG_NAME) && _exist_package(HOME_SCREEN_PKG_NAME)) {
+ _E("cannot launch package %s", homescreen);
+
+ if (0 != vconf_set_str(VCONFKEY_SETAPPL_SELECTED_PACKAGE_NAME, HOME_SCREEN_PKG_NAME)) {
+ _E("Cannot set value(%s) into key(%s)", VCONFKEY_SETAPPL_SELECTED_PACKAGE_NAME, HOME_SCREEN_PKG_NAME);
+ }
+
+ while (AUL_R_ETIMEOUT == ret) {
+ _E("Failed to open a default home, %s", HOME_SCREEN_PKG_NAME);
+ ret = menu_daemon_open_app(HOME_SCREEN_PKG_NAME);
+ }
+ }
+
+ if (ret < 0) {
+ _E("Critical! Starter cannot launch anymore[%d]", ret);
+ _F("Critical! Starter cannot launch anymore[%d]", ret);
+ }
+
+ s_info.home_pid = ret;
+ if (ret > 0) {
+ if (-1 == sysconf_set_mempolicy_bypid(ret, OOM_IGNORE)) {
+ _E("Cannot set the memory policy for Home-screen(%d)", ret);
+ } else {
+ _D("Set the memory policy for Home-screen(%d)", ret);
+ }
+ }
+
+ if (tmp) free(tmp);
+}
+
+
+
+static void _show_cb(keynode_t* node, void *data)
+{
+ int seq;
+
+ _D("[MENU_DAEMON] _show_cb is invoked");
+
+ if (node) {
+ seq = vconf_keynode_get_int(node);
+ } else {
+ if (vconf_get_int(VCONFKEY_STARTER_SEQUENCE, &seq) < 0) {
+ _E("Failed to get sequence info");
+ return;
+ }
+ }
+
+ switch (seq) {
+ case 0:
+ if (s_info.home_pid > 0) {
+ int pid;
+ _D("pid[%d] is terminated.", s_info.home_pid);
+ pid = s_info.home_pid;
+ s_info.home_pid = -1;
+
+ if (aul_terminate_pid(pid) != AUL_R_OK)
+ _E("Failed to terminate %d", s_info.home_pid);
+ }
+ break;
+ case 1:
+ menu_daemon_open_homescreen(NULL);
+ break;
+ default:
+ _E("False sequence [%d]", seq);
+ break;
+ }
+
+ return;
+}
+
+
+
+static void _pkg_changed(keynode_t* node, void *data)
+{
+ char *pkgname;
+ int seq;
+
+ if (vconf_get_int(VCONFKEY_STARTER_SEQUENCE, &seq) < 0) {
+ _E("Do nothing, there is no sequence info yet");
+ return;
+ }
+
+ if (seq < 1) {
+ _E("Sequence is not ready yet, do nothing");
+ return;
+ }
+
+ _D("_pkg_changed is invoked");
+
+ pkgname = menu_daemon_get_selected_pkgname();
+ if (!pkgname)
+ return;
+
+ _D("pkg_name : %s", pkgname);
+
+ if (s_info.home_pid > 0) {
+ char old_pkgname[256];
+
+ if (aul_app_get_pkgname_bypid(s_info.home_pid, old_pkgname, sizeof(old_pkgname)) == AUL_R_OK) {
+ if (!strcmp(pkgname, old_pkgname)) {
+ _D("Package is changed but same package is selected");
+ free(pkgname);
+ return;
+ }
+ }
+
+ if (AUL_R_OK != aul_terminate_pid(s_info.home_pid))
+ _D("Failed to terminate pid %d", s_info.home_pid);
+ } else {
+ /* If there is no running home */
+ menu_daemon_open_homescreen(pkgname);
+ }
+
+ free(pkgname);
+ return;
+}
+
+
+
+static void _launch_volume(void)
+{
+ int pid;
+ int i;
+ _D("_launch_volume");
+
+ for (i=0; i<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)
+{
+ if (s_info.power_off) {
+ _D("Power off. ignore dead cb\n");
+ return 0;
+ }
+
+ _D("Process %d is termianted", pid);
+
+ if (pid < 0)
+ return 0;
+
+ if (pid == s_info.home_pid) {
+ char *pkgname = NULL;
+ pkgname = menu_daemon_get_selected_pkgname();
+ retv_if(NULL == pkgname, 0);
+
+ _D("pkg_name : %s", pkgname);
+ menu_daemon_open_homescreen(pkgname);
+ free(pkgname);
+ } else if (pid == s_info.volume_pid) {
+ _launch_volume();
+ } else {
+ _D("Unknown process, ignore it (pid %d, home pid %d)",
+ pid, s_info.home_pid);
+ }
+
+
+ return 0;
+}
+
+
+
+void menu_daemon_init(void *data)
+{
+ _D( "[MENU_DAEMON]menu_daemon_init is invoked");
+
+ aul_launch_init(NULL,NULL);
+
+ create_key_window();
+ if (xmonitor_init() < 0) _E("cannot init xmonitor");
+
+ pkg_event_init();
+ _launch_volume();
+
+ if (unlink(SAT_DESKTOP_FILE) != 0)
+ _E("cannot remove sat-ui desktop.");
+
+ if (vconf_notify_key_changed(VCONFKEY_SETAPPL_SELECTED_PACKAGE_NAME, _pkg_changed, NULL) < 0)
+ _E("Failed to add the callback for package change event");
+
+ if (vconf_notify_key_changed(VCONFKEY_STARTER_SEQUENCE, _show_cb, NULL) < 0)
+ _E("Failed to add the callback for show event");
+
+ _pkg_changed(NULL, NULL);
+ vconf_set_int(VCONFKEY_IDLE_SCREEN_LAUNCHED, VCONFKEY_IDLE_SCREEN_LAUNCHED_TRUE);
+}
+
+
+
+void menu_daemon_fini(void)
+{
+ if (vconf_ignore_key_changed(VCONFKEY_SETAPPL_SELECTED_PACKAGE_NAME, _pkg_changed) < 0)
+ _E("Failed to ignore the callback for package change event");
+
+ if (vconf_ignore_key_changed(VCONFKEY_STARTER_SEQUENCE, _show_cb) < 0)
+ _E("Failed to ignore the callback for show event");
+
+ xmonitor_fini();
+ pkg_event_fini();
+ destroy_key_window();
+}
+
+
+
+// End of a file
diff --git a/mobile/src/pkg_event.c b/mobile/src/pkg_event.c
new file mode 100644
index 0000000..46feba9
--- /dev/null
+++ b/mobile/src/pkg_event.c
@@ -0,0 +1,301 @@
+ /*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.1 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+
+#include <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(fd < 0) {
+ _E("Failed to get fd");
+ return ECORE_CALLBACK_CANCEL;
+ }
+
+ if (ioctl(fd, FIONREAD, &read_size) < 0) {
+ _E("Failed to get q size");
+ return ECORE_CALLBACK_CANCEL;
+ }
+
+ if (read_size <= 0) {
+ _E("Buffer is not ready!!!");
+ return ECORE_CALLBACK_RENEW;
+ }
+
+ buf = malloc(read_size);
+ if (!buf) {
+ _E("Failed to allocate heap for event handling");
+ return ECORE_CALLBACK_RENEW;
+ }
+
+ len = read(fd, buf, read_size);
+ if (len < 0) {
+ free(buf);
+ return ECORE_CALLBACK_CANCEL;
+ }
+ buf[read_size - 1] = '\0';
+
+ while (i < len) {
+ struct inotify_event* event = (struct inotify_event*) &buf[i];
+ char *str_potksed = "potksed.";
+ char *package = NULL;
+ ssize_t idx;
+ int nev_name;
+
+ nev_name = strlen(event->name) - 1;
+ for (idx = 0; nev_name >= 0 && str_potksed[idx]; idx++) {
+ if (event->name[nev_name] != str_potksed[idx]) {
+ break;
+ }
+ nev_name --;
+ }
+
+ if (str_potksed[idx] != '\0' || nev_name < 0) {
+ _D("This is not a desktop file : %s", event->name);
+ i += sizeof(struct inotify_event) + event->len;
+ continue;
+ }
+
+ package = strdup(event->name);
+ break_if(NULL == package);
+
+ package[nev_name + 1] = '\0';
+ _D("Package : %s", package);
+
+ if (event->mask & IN_CLOSE_WRITE || event->mask & IN_MOVED_TO) {
+ ail_appinfo_h ai = NULL;
+ ail_error_e ret;
+
+ ret = ail_get_appinfo(package, &ai);
+ if (AIL_ERROR_OK == ret || AIL_ERROR_NO_DATA == ret) {
+ if (ai) ail_destroy_appinfo(ai);
+
+ if (AIL_ERROR_NO_DATA == ret) {
+ if (ail_desktop_add(package) < 0) {
+ _D("Failed to add a new package (%s)", event->name);
+ }
+ } else if (AIL_ERROR_OK == ret) {
+ if (ail_desktop_update(package) < 0) {
+ _D("Failed to add a new package (%s)", event->name);
+ }
+ }
+ } else {
+ _E("Failed to get appinfo");
+ }
+ } else if (event->mask & IN_DELETE) {
+ if (ail_desktop_remove(package) < 0)
+ _D("Failed to remove a package (%s)", event->name);
+ } else {
+ _D("this event is not dealt with inotify");
+ }
+
+ free(package);
+
+ i += sizeof(struct inotify_event) + event->len;
+ }
+
+ free(buf);
+ return ECORE_CALLBACK_RENEW;
+}
+
+
+
+static inline char *_ltrim(char *str)
+{
+ retv_if(NULL == str, NULL);
+ while (*str && (*str == ' ' || *str == '\t' || *str == '\n')) str ++;
+ return str;
+}
+
+
+
+static inline int _rtrim(char *str)
+{
+ int len;
+
+ retv_if(NULL == str, 0);
+
+ len = strlen(str);
+ while (--len >= 0 && (str[len] == ' ' || str[len] == '\n' || str[len] == '\t')) {
+ str[len] = '\0';
+ }
+
+ return len;
+}
+
+
+
+static int _retrieve_conf_path(struct inotify_path* paths)
+{
+ char *line = NULL;
+ FILE *fp;
+ size_t size = 0;
+ ssize_t read;
+ int i = 0;
+
+ fp = fopen(CONF_FILE, "r");
+ if (NULL == fp) {
+ _E(CONF_FILE);
+ return -1;
+ }
+
+ while ((read = getline(&line, &size, fp)) != -1 && i < CONF_PATH_NUMBER - 1) {
+ char *begin;
+
+ if (size <= 0) break;
+
+ begin = _ltrim(line);
+ _rtrim(line);
+
+ if (*begin == '#' || *begin == '\0') continue;
+
+ paths[i].path = strdup(begin);
+ i++;
+ }
+
+ if (line) free(line);
+ paths[i].path = NULL;
+ fclose(fp);
+
+ return i;
+}
+
+
+
+static void _unretrieve_conf_path(struct inotify_path* paths, int number)
+{
+ register int i;
+
+ for (i = 0; i < number; i ++) {
+ if (paths[i].path) {
+ free(paths[i].path);
+ paths[i].path = NULL;
+ }
+ }
+}
+
+
+
+void pkg_event_init()
+{
+ int wd = 0;
+ int i;
+
+ s_desktop_notifier.ifd = inotify_init();
+ if (s_desktop_notifier.ifd == -1) {
+ _E("inotify_init error: %s", strerror(errno));
+ return;
+ }
+
+ s_desktop_notifier.number = _retrieve_conf_path(paths);
+
+ for (i = 0; i < CONF_PATH_NUMBER && paths[i].path; i++)
+ {
+ _D("Configuration file for desktop file monitoring [%s] is added", paths[i].path);
+ if (access(paths[i].path, R_OK) != 0)
+ {
+ ecore_file_mkpath(paths[i].path);
+ if (chmod(paths[i].path, 0777) == -1) {
+ _E("cannot chmod %s", paths[i].path);
+ }
+ }
+
+ wd = inotify_add_watch(s_desktop_notifier.ifd, paths[i].path, IN_CLOSE_WRITE | IN_MOVED_TO | IN_DELETE);
+ if (wd == -1) {
+ _E("inotify_add_watch error: %s", strerror(errno));
+ close(s_desktop_notifier.ifd);
+ return;
+ }
+
+ paths[i].wd = wd;
+ }
+
+ s_desktop_notifier.handler = ecore_main_fd_handler_add(s_desktop_notifier.ifd, ECORE_FD_READ, directory_notify, NULL, NULL, NULL);
+ if (!s_desktop_notifier.handler) {
+ _E("cannot add handler for inotify");
+ }
+}
+
+
+
+void pkg_event_fini(void)
+{
+ register int i;
+
+ if (s_desktop_notifier.handler) {
+ ecore_main_fd_handler_del(s_desktop_notifier.handler);
+ }
+
+ for (i = 0; i < CONF_PATH_NUMBER; i ++) {
+ if (paths[i].wd) {
+ if (inotify_rm_watch(s_desktop_notifier.ifd, paths[i].wd) < 0) {
+ _E("Error: %s", strerror(errno));
+ }
+ paths[i].wd = 0;
+ }
+ }
+
+ _unretrieve_conf_path(paths, s_desktop_notifier.number);
+
+ if (s_desktop_notifier.ifd) {
+ close(s_desktop_notifier.ifd);
+ s_desktop_notifier.ifd = 0;
+ }
+}
diff --git a/mobile/src/starter.c b/mobile/src/starter.c
new file mode 100644
index 0000000..d96c444
--- /dev/null
+++ b/mobile/src/starter.c
@@ -0,0 +1,273 @@
+ /*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.1 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+
+#include <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 <systemd/sd-daemon.h>
+
+#include <aul.h>
+#include <vconf.h>
+#include <heynoti.h>
+#include <signal.h>
+#include <system_info.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 PWLOCK_PKG_NAME "org.tizen.pwlock"
+#define QP_EMUL_STR "Emulator"
+
+static void lock_menu_screen(void)
+{
+ vconf_set_int(VCONFKEY_STARTER_SEQUENCE, 0);
+}
+
+static void unlock_menu_screen(void)
+{
+ int r;
+ int show_menu;
+
+ show_menu = 0;
+ r = vconf_get_int(VCONFKEY_STARTER_SEQUENCE, &show_menu);
+ if (r || !show_menu) {
+ vconf_set_int(VCONFKEY_STARTER_SEQUENCE, 1);
+ }
+}
+
+static void _set_elm_theme(void)
+{
+ char *vstr;
+ char *theme;
+ Elm_Theme *th = NULL;
+ vstr = vconf_get_str(VCONFKEY_SETAPPL_WIDGET_THEME_STR);
+ if (vstr == NULL)
+ theme = DEFAULT_THEME;
+ else
+ theme = vstr;
+
+ th = elm_theme_new();
+ _DBG("theme vconf[%s]\n set[%s]\n", vstr, theme);
+ elm_theme_set(th, theme);
+
+ if (vstr)
+ free(vstr);
+}
+
+static int _check_emul()
+{
+ int is_emul = 0;
+ char *info = NULL;
+
+ if (system_info_get_value_string(SYSTEM_INFO_KEY_MODEL, &info) == 0) {
+ if (info == NULL) return 0;
+ if (!strncmp(QP_EMUL_STR, info, strlen(info))) {
+ is_emul = 1;
+ }
+ }
+
+ if (info != NULL) free(info);
+
+ return is_emul;
+}
+
+static int _launch_pwlock(void)
+{
+ int r;
+
+ _DBG("%s", __func__);
+
+ if(_check_emul()) {
+ _DBG("Emulator => skip pwlock");
+ vconf_set_int(VCONFKEY_STARTER_SEQUENCE, 1);
+ return 0;
+ }
+
+ r = aul_launch_app(PWLOCK_PKG_NAME, NULL);
+ if (r < 0) {
+ _ERR("PWLock launch error: error(%d)", r);
+ if (r == AUL_R_ETIMEOUT) {
+ _DBG("Launch pwlock is failed for AUL_R_ETIMEOUT, again launch pwlock");
+ r = aul_launch_app(PWLOCK_PKG_NAME, NULL);
+ if (r < 0) {
+ _ERR("2'nd PWLock launch error: error(%d)", r);
+ return -1;
+ } else {
+ _DBG("Launch pwlock");
+ return 0;
+ }
+ } else {
+ return -1;
+ }
+ } else {
+ _DBG("Launch pwlock");
+ return 0;
+ }
+}
+
+static void _signal_handler(int signum, siginfo_t *info, void *unused)
+{
+ _DBG("_signal_handler : Terminated...");
+ elm_exit();
+}
+
+static void _heynoti_event_power_off(void *data)
+{
+ _DBG("_heynoti_event_power_off : Terminated...");
+ elm_exit();
+}
+
+static Eina_Bool _init_idle(void *data)
+{
+ _DBG("%s %d\n", __func__, __LINE__);
+ if (_launch_pwlock() < 0) {
+ _ERR("launch pwlock error");
+ }
+ menu_daemon_init(NULL);
+
+ return ECORE_CALLBACK_CANCEL;
+}
+
+static void _lock_state_cb(keynode_t * node, void *data)
+{
+ _DBG("%s %d\n", __func__, __LINE__);
+ WRITE_FILE_LOG("%s", "Lock state is changed!");
+
+ if (_launch_pwlock() < 0) {
+ _ERR("launch pwlock error");
+ }
+ menu_daemon_init(NULL);
+ if (vconf_ignore_key_changed(VCONFKEY_IDLE_LOCK_STATE,
+ _lock_state_cb) != 0) {
+ LOCKD_DBG("Fail to unregister");
+ }
+}
+
+static void _init(struct appdata *ad)
+{
+ int r;
+ struct sigaction act;
+
+ memset(&act,0x00,sizeof(struct sigaction));
+ act.sa_sigaction = _signal_handler;
+ act.sa_flags = SA_SIGINFO;
+
+ int ret = sigemptyset(&act.sa_mask);
+ if (ret < 0) {
+ _ERR("Failed to sigemptyset[%s]", strerror(errno));
+ }
+ ret = sigaddset(&act.sa_mask, SIGTERM);
+ if (ret < 0) {
+ _ERR("Failed to sigaddset[%s]", strerror(errno));
+ }
+ ret = sigaction(SIGTERM, &act, NULL);
+ if (ret < 0) {
+ _ERR("Failed to sigaction[%s]", strerror(errno));
+ }
+
+ memset(ad, 0, sizeof(struct appdata));
+
+ gettimeofday(&ad->tv_start, NULL);
+
+ lock_menu_screen();
+ _set_elm_theme();
+
+ _DBG("%s %d\n", __func__, __LINE__);
+
+ r = start_lock_daemon(TRUE);
+ if (r == 1) {
+ if (vconf_notify_key_changed(VCONFKEY_IDLE_LOCK_STATE,
+ _lock_state_cb, NULL) != 0) {
+ _ERR("[Error] vconf notify : lock state");
+ ecore_timer_add(1.5, _init_idle, NULL);
+ }
+ } else {
+ if (_launch_pwlock() < 0) {
+ _ERR("launch pwlock error");
+ }
+ menu_daemon_init(NULL);
+ }
+}
+
+static void _fini(struct appdata *ad)
+{
+ struct timeval tv, res;
+
+ if (ad == NULL) {
+ fprintf(stderr, "Invalid argument: appdata is NULL\n");
+ return;
+ }
+
+ unlock_menu_screen();
+ menu_daemon_fini();
+
+ gettimeofday(&tv, NULL);
+ timersub(&tv, &ad->tv_start, &res);
+ _DBG("Total time: %d.%06d sec\n", (int)res.tv_sec, (int)res.tv_usec);
+}
+
+int main(int argc, char *argv[])
+{
+ struct appdata ad;
+
+ WRITE_FILE_LOG("%s", "Main function is started in starter");
+
+ int heyfd = heynoti_init();
+ if (heyfd < 0) {
+ _ERR("Failed to heynoti_init[%d]", heyfd);
+ return -1;
+ }
+
+ int ret = heynoti_subscribe(heyfd, "power_off_start", _heynoti_event_power_off, NULL);
+ if (ret < 0) {
+ _ERR("Failed to heynoti_subscribe[%d]", ret);
+ }
+ ret = heynoti_attach_handler(heyfd);
+ if (ret < 0) {
+ _ERR("Failed to heynoti_attach_handler[%d]", ret);
+ }
+
+ elm_init(argc, argv);
+
+ _init(&ad);
+
+ sd_notify(0, "READY=1");
+ elm_run();
+
+ _fini(&ad);
+
+ elm_shutdown();
+
+ return 0;
+}
diff --git a/mobile/src/x11.c b/mobile/src/x11.c
new file mode 100644
index 0000000..df41f28
--- /dev/null
+++ b/mobile/src/x11.c
@@ -0,0 +1,111 @@
+ /*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.1 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+
+#include <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/mobile/src/xmonitor.c b/mobile/src/xmonitor.c
new file mode 100644
index 0000000..4c87285
--- /dev/null
+++ b/mobile/src/xmonitor.c
@@ -0,0 +1,296 @@
+ /*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.1 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+
+#include <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 "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 = NULL;
+ int num;
+
+ atom = ecore_x_atom_get("X_CLIENT_PID");
+ if (ecore_x_window_prop_property_get(win, atom, ECORE_X_ATOM_CARDINAL,
+ sizeof(int), &in_pid, &num) == EINA_FALSE) {
+ if(in_pid != NULL) {
+ free(in_pid);
+ in_pid = NULL;
+ }
+ if (ecore_x_netwm_pid_get(win, &pid) == EINA_FALSE) {
+ _E("Failed to get PID from a window 0x%X", win);
+ return -EINVAL;
+ }
+ } else {
+ pid = *(int *)in_pid;
+ free(in_pid);
+ }
+
+ return pid;
+}
+
+
+
+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];
+
+ 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;
+}
diff --git a/mobile/starter.desktop.in b/mobile/starter.desktop.in
new file mode 100644
index 0000000..f2a89f3
--- /dev/null
+++ b/mobile/starter.desktop.in
@@ -0,0 +1,9 @@
+[Desktop Entry]
+Encoding=UTF-8
+Name=@PROJECT_NAME@
+Exec=@BINDIR@/@PROJECT_NAME@
+Icon=elementary
+Terminal=false
+Type=Application
+Categories=Application;Utility;
+
diff --git a/mobile/starter.manifest b/mobile/starter.manifest
new file mode 100644
index 0000000..c12fb88
--- /dev/null
+++ b/mobile/starter.manifest
@@ -0,0 +1,17 @@
+<manifest>
+ <define>
+ <domain name="starter"/>
+ </define>
+ <request>
+ <domain name="starter"/>
+ </request>
+ <assign>
+ <filesystem path="/usr/bin/starter" label="starter" exec_label="starter" />
+ <filesystem path="/usr/lib/systemd/user/starter.path" label="_" exec_label="none" />
+ <filesystem path="/usr/lib/systemd/user/starter.service" label="_" exec_label="none" />
+ <filesystem path="/usr/lib/systemd/user/starter.socket" label="_" exec_label="none" />
+ <filesystem path="/usr/lib/systemd/user/core-efl.target.wants/starter.path" label="_" exec_label="none" />
+ <filesystem path="/usr/lib/systemd/user/core-efl.target.wants/starter.service" label="_" exec_label="none" />
+ <filesystem path="/usr/lib/systemd/user/sockets.target.wants/starter.socket" label="_" exec_label="none" />
+ </assign>
+</manifest>
diff --git a/mobile/starter.rule b/mobile/starter.rule
new file mode 100644
index 0000000..5530241
--- /dev/null
+++ b/mobile/starter.rule
@@ -0,0 +1,10 @@
+starter mobileprint x
+starter svi-data rx
+starter tts-server x
+starter system::homedir rx
+starter system::use_internet r
+starter isf rx
+starter system::vconf rwx
+starter _ w
+starter org.tizen.clock rwx
+starter syspopup::db rw
diff --git a/mobile/systemd/starter.path b/mobile/systemd/starter.path
new file mode 100644
index 0000000..724239c
--- /dev/null
+++ b/mobile/systemd/starter.path
@@ -0,0 +1,5 @@
+[Unit]
+Description=Path activation for the "starter" programme
+
+[Path]
+PathExists=/tmp/amd_ready
diff --git a/mobile/systemd/starter.service b/mobile/systemd/starter.service
new file mode 100644
index 0000000..63d0e3f
--- /dev/null
+++ b/mobile/systemd/starter.service
@@ -0,0 +1,12 @@
+[Unit]
+Description=Start the "starter" program
+Before=core-efl.target
+After=boot-animation.service
+
+[Service]
+ExecStart=/usr/bin/starter
+Restart=always
+RestartSec=3
+
+[Install]
+WantedBy=core-efl.target
diff --git a/mobile/systemd/starter.socket b/mobile/systemd/starter.socket
new file mode 100644
index 0000000..871d9d3
--- /dev/null
+++ b/mobile/systemd/starter.socket
@@ -0,0 +1,6 @@
+[Socket]
+ListenStream=/tmp/phlock
+SocketMode=0777
+
+[Install]
+WantedBy=sockets.target
diff --git a/mobile/test/get_entry.c b/mobile/test/get_entry.c
new file mode 100755
index 0000000..ea35358
--- /dev/null
+++ b/mobile/test/get_entry.c
@@ -0,0 +1,89 @@
+ /*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.1 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+
+#include <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/mobile/test/get_theme.c b/mobile/test/get_theme.c
new file mode 100755
index 0000000..2439ed5
--- /dev/null
+++ b/mobile/test/get_theme.c
@@ -0,0 +1,56 @@
+ /*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.1 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+
+#include <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/mobile/test/set_theme.c b/mobile/test/set_theme.c
new file mode 100755
index 0000000..a6cf4eb
--- /dev/null
+++ b/mobile/test/set_theme.c
@@ -0,0 +1,62 @@
+ /*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.1 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+
+#include <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;
+}