summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHyungKyu Song <hk76.song@samsung.com>2013-02-15 15:00:58 (GMT)
committerHyungKyu Song <hk76.song@samsung.com>2013-02-15 15:00:58 (GMT)
commitab09128befbfe0d572be7cbb09dab4cf0cf3e575 (patch)
tree91b23751dc5760dc973fc51eabcfbe5726b41393
parent19a03cb96bd11947328bd98c2b1f2b56f51b5afa (diff)
downloadstarter-tizen_2.0.zip
starter-tizen_2.0.tar.gz
starter-tizen_2.0.tar.bz2
-rwxr-xr-xAUTHORS2
-rwxr-xr-xCMakeLists.txt99
-rwxr-xr-xLICENSE.Flora75
-rwxr-xr-xNOTICE3
-rwxr-xr-xdebian/changelog518
-rwxr-xr-xdebian/compat1
-rwxr-xr-xdebian/control19
-rwxr-xr-xdebian/rules112
-rwxr-xr-xdebian/starter.install.in4
-rwxr-xr-xdebian/starter.postinst14
-rwxr-xr-xinclude/hw_key.h20
-rwxr-xr-xinclude/lock-daemon.h24
-rwxr-xr-xinclude/lockd-debug.h64
-rwxr-xr-xinclude/lockd-process-mgr.h38
-rwxr-xr-xinclude/lockd-window-mgr.h42
-rwxr-xr-xinclude/menu_daemon.h27
-rwxr-xr-xinclude/pkg_event.h46
-rwxr-xr-xinclude/starter-util.h35
-rwxr-xr-xinclude/starter-vconf.h24
-rwxr-xr-xinclude/starter.h28
-rwxr-xr-xinclude/util.h78
-rwxr-xr-xinclude/x11.h26
-rwxr-xr-xinclude/xmonitor.h25
-rwxr-xr-xlock-setting/CMakeLists.txt9
-rwxr-xr-xlock-setting/lockscreen-options/CMakeLists.txt40
-rwxr-xr-xlock-setting/lockscreen-options/include/lockscreen-options-debug.h48
-rwxr-xr-xlock-setting/lockscreen-options/include/lockscreen-options-main.h28
-rwxr-xr-xlock-setting/lockscreen-options/include/lockscreen-options-util.h48
-rwxr-xr-xlock-setting/lockscreen-options/include/lockscreen-options.h64
-rwxr-xr-xlock-setting/lockscreen-options/src/lockscreen-options-main.c341
-rwxr-xr-xlock-setting/lockscreen-options/src/lockscreen-options-util.c148
-rwxr-xr-xlock-setting/lockscreen-options/src/lockscreen-options.c213
-rwxr-xr-xlock-setting/po/CMakeLists.txt26
-rw-r--r--lock-setting/po/ar.po54
-rw-r--r--lock-setting/po/az.po54
-rw-r--r--lock-setting/po/bg.po54
-rw-r--r--lock-setting/po/ca.po54
-rw-r--r--lock-setting/po/cs.po54
-rw-r--r--lock-setting/po/da.po54
-rw-r--r--lock-setting/po/de_DE.po54
-rw-r--r--lock-setting/po/el_GR.po54
-rw-r--r--lock-setting/po/en.po54
-rw-r--r--lock-setting/po/en_PH.po54
-rw-r--r--lock-setting/po/en_US.po54
-rw-r--r--lock-setting/po/es_ES.po54
-rw-r--r--lock-setting/po/es_MX.po54
-rw-r--r--lock-setting/po/es_US.po51
-rw-r--r--lock-setting/po/et.po54
-rw-r--r--lock-setting/po/eu.po54
-rw-r--r--lock-setting/po/fi.po54
-rw-r--r--lock-setting/po/fr_CA.po54
-rw-r--r--lock-setting/po/fr_FR.po54
-rw-r--r--lock-setting/po/ga.po54
-rw-r--r--lock-setting/po/gl.po54
-rw-r--r--lock-setting/po/hi.po54
-rw-r--r--lock-setting/po/hr.po54
-rw-r--r--lock-setting/po/hu.po54
-rw-r--r--lock-setting/po/hy.po54
-rw-r--r--lock-setting/po/is.po54
-rw-r--r--lock-setting/po/it_IT.po54
-rw-r--r--lock-setting/po/ja_JP.po54
-rw-r--r--lock-setting/po/ka.po54
-rw-r--r--lock-setting/po/kk.po54
-rw-r--r--lock-setting/po/ko_KR.po54
-rw-r--r--lock-setting/po/lt.po54
-rw-r--r--lock-setting/po/lv.po54
-rw-r--r--lock-setting/po/mk.po54
-rw-r--r--lock-setting/po/nb.po54
-rw-r--r--lock-setting/po/nl_NL.po54
-rw-r--r--lock-setting/po/pl.po54
-rw-r--r--lock-setting/po/pt_BR.po54
-rw-r--r--lock-setting/po/pt_PT.po54
-rw-r--r--lock-setting/po/ro.po54
-rw-r--r--lock-setting/po/ru_RU.po54
-rw-r--r--lock-setting/po/sk.po54
-rw-r--r--lock-setting/po/sl.po54
-rw-r--r--lock-setting/po/sr.po54
-rw-r--r--lock-setting/po/sv.po54
-rw-r--r--lock-setting/po/tr_TR.po54
-rw-r--r--lock-setting/po/uk.po54
-rw-r--r--lock-setting/po/uz.po54
-rw-r--r--lock-setting/po/zh_CN.po54
-rw-r--r--lock-setting/po/zh_HK.po54
-rw-r--r--lock-setting/po/zh_SG.po54
-rw-r--r--lock-setting/po/zh_TW.po54
-rw-r--r--packaging/starter.path5
-rw-r--r--packaging/starter.service11
-rwxr-xr-xpackaging/starter.spec109
-rwxr-xr-xrd3starter26
-rwxr-xr-xrd4starter14
-rwxr-xr-xsrc/hw_key.c347
-rwxr-xr-xsrc/lock-daemon.c688
-rwxr-xr-xsrc/lockd-debug.c94
-rwxr-xr-xsrc/lockd-process-mgr.c171
-rwxr-xr-xsrc/lockd-window-mgr.c283
-rwxr-xr-xsrc/menu_daemon.c302
-rwxr-xr-xsrc/pkg_event.c305
-rwxr-xr-xsrc/starter.c247
-rw-r--r--src/x11.c111
-rwxr-xr-xsrc/xmonitor.c296
-rwxr-xr-xstarter14
-rwxr-xr-xstarter.desktop.in9
-rwxr-xr-xstarter.manifest13
-rwxr-xr-xtest/get_entry.c89
-rwxr-xr-xtest/get_theme.c56
-rwxr-xr-xtest/set_theme.c62
106 files changed, 8346 insertions, 0 deletions
diff --git a/AUTHORS b/AUTHORS
new file mode 100755
index 0000000..b7f374a
--- /dev/null
+++ b/AUTHORS
@@ -0,0 +1,2 @@
+jin yoon <jinny.yoon at samsung dot com>
+seungtaek chung <seungtaek.chung at samsung dot com>
diff --git a/CMakeLists.txt b/CMakeLists.txt
new file mode 100755
index 0000000..d03f51b
--- /dev/null
+++ b/CMakeLists.txt
@@ -0,0 +1,99 @@
+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
+)
+
+FOREACH(flag ${pkgs_CFLAGS})
+ SET(EXTRA_CFLAGS "${EXTRA_CFLAGS} ${flag}")
+ENDFOREACH(flag)
+
+SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${EXTRA_CFLAGS} -Wall")
+SET(CMAKE_C_FLAGS_DEBUG "-O0 -g")
+SET(CMAKE_C_FLAGS_RELEASE "-O2")
+
+SET(CMAKE_EXE_LINKER_FLAGS "-Wl,--as-needed -Wl,--rpath=${PREFIX}/lib -pie")
+
+FIND_PROGRAM(UNAME NAMES uname)
+EXEC_PROGRAM("${UNAME}" ARGS "-m" OUTPUT_VARIABLE "ARCH")
+IF("${ARCH}" STREQUAL "arm")
+ ADD_DEFINITIONS("-DTARGET")
+ MESSAGE("add -DTARGET")
+ENDIF("${ARCH}" STREQUAL "arm")
+
+ADD_DEFINITIONS("-DVENDOR=\"${VENDOR}\"")
+ADD_DEFINITIONS("-DPACKAGE=\"${PACKAGE}\"")
+ADD_DEFINITIONS("-DPACKAGE_NAME=\"${PKGNAME}\"")
+ADD_DEFINITIONS("-DPREFIX=\"${PREFIX}\"")
+ADD_DEFINITIONS("-DLOCALEDIR=\"${LOCALEDIR}\"")
+ADD_DEFINITIONS("-D_GNU_SOURCE")
+
+SET(CMAKE_EXE_LINKER_FLAGS "-Wl,--as-needed")
+
+ADD_EXECUTABLE(${PROJECT_NAME}
+ src/hw_key.c
+ src/pkg_event.c
+ src/menu_daemon.c
+ src/starter.c
+ src/x11.c
+ src/xmonitor.c
+ src/lock-daemon.c
+ src/lockd-debug.c
+ src/lockd-process-mgr.c
+ src/lockd-window-mgr.c
+)
+TARGET_LINK_LIBRARIES(${PROJECT_NAME} ${pkgs_LDFLAGS})
+INSTALL(TARGETS ${PROJECT_NAME} DESTINATION ${BINDIR})
+
+SET(LOCK_SETTING lock-setting)
+
+ADD_SUBDIRECTORY(${CMAKE_SOURCE_DIR}/${LOCK_SETTING})
+
+# install desktop file & icon
+#CONFIGURE_FILE(${PROJECT_NAME}.desktop.in ${PROJECT_NAME}.desktop)
+#INSTALL(FILES ${CMAKE_BINARY_DIR}/${PROJECT_NAME}.desktop DESTINATION share/applications)
+
+INSTALL(FILES ${CMAKE_SOURCE_DIR}/rd4starter DESTINATION /etc/init.d
+ PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE
+ GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE)
+INSTALL(FILES ${CMAKE_SOURCE_DIR}/rd3starter DESTINATION /etc/init.d
+ PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE
+ GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE)
+#INSTALL to /etc/init.d
diff --git a/LICENSE.Flora b/LICENSE.Flora
new file mode 100755
index 0000000..cc8727b
--- /dev/null
+++ b/LICENSE.Flora
@@ -0,0 +1,75 @@
+Flora License
+
+Version 1.0, May, 2012
+
+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 Compatibility Definition Document and passes the Compatibility Test Suite 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.
+
+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.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://floralicense.org/license/
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
diff --git a/NOTICE b/NOTICE
new file mode 100755
index 0000000..5fa11d2
--- /dev/null
+++ b/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.
+Please, see the LICENSE file for Flora License terms and conditions.
diff --git a/debian/changelog b/debian/changelog
new file mode 100755
index 0000000..05bf12b
--- /dev/null
+++ b/debian/changelog
@@ -0,0 +1,518 @@
+starter (0.4.56) unstable; urgency=low
+
+ * Git: slp/pkgs/s/starter
+ * Tag: starter_0.4.56
+
+ * Do not destroy ail resources when ail returns an error code
+
+ -- Jin Yoon <jinny.yoon@samsung.com> Mon, 04 Feb 2013 19:05:45 +0900
+
+starter (0.4.55) unstable; urgency=low
+
+ * fix manifest file.
+
+ -- minho07.kim <minho07.kim@samsung.com> Thu, 31 Jan 2013 11:34:26 +0900
+
+starter (0.4.54) unstable; urgency=low
+
+ * update manifest file.
+
+ -- minho07.kim <minho07.kim@samsung.com> Wed, 30 Jan 2013 19:03:11 +0900
+
+starter (0.4.51) unstable; urgency=low
+
+ * Git: slp/pkgs/s/starter
+ * Tag: starter_0.4.51
+
+ * EFL Menu-screen & Lock-screen
+
+ -- Jin Yoon <jinny.yoon@samsung.com> Fri, 11 Jan 2013 15:35:10 +0900
+
+starter (0.4.47) unstable; urgency=low
+
+ * Git: slp/pkgs/s/starter
+ * Tag: starter_0.4.47
+
+ * Package name : Package name : org.tizen.menu-screen -> cwkuromqdr.Home, org.tizen.lockscreen -> sgooa9p9fz.Lock
+
+ -- Jin Yoon <jinny.yoon@samsung.com> Fri, 21 Dec 2012 20:31:10 +0900
+
+starter (0.4.6-2) unstable; urgency=low
+
+ * temporal release for Orangey
+ * Git: slp/pkgs/s/starter
+ * Tag: starter_0.4.6-2
+
+ -- youngsub ko <ys4610.ko@samsung.com> Fri, 01 Jun 2012 14:02:49 +0900
+
+starter (0.4.6-1) unstable; urgency=low
+
+ * Changing vconf key-path according to naming policy
+ * Git: slp/pkgs/s/starter
+ * Tag: starter_0.4.6-1
+
+ -- youngsub ko <ys4610.ko@samsung.com> Thu, 31 May 2012 19:25:22 +0900
+
+starter (0.4.5-1) unstable; urgency=low
+
+ * apply livebox lockscreen to default setting
+ * Git: slp/pkgs/s/starter
+ * Tag: starter_0.4.5-1
+
+ -- Seungtaek Chung <seungtaek.chung@samsung.com> Thu, 24 May 2012 21:03:29 +0900
+
+starter (0.4.4-1) unstable; urgency=low
+
+ * new vconf policy was applied
+ * Git: slp/pkgs/s/starter
+ * Tag: starter_0.4.4-1
+
+ -- youngsub ko <ys4610.ko@samsung.com> Thu, 24 May 2012 16:20:20 +0900
+
+starter (0.4.3-2) unstable; urgency=low
+
+ * Removed "/usr/share/*" files from debian/redhat packages
+ * Git: slp/pkgs/s/starter
+ * Tag: starter_0.4.3-2
+
+ -- youngsub ko <ys4610.ko@samsung.com> Mon, 14 May 2012 10:39:32 +0900
+
+starter (0.4.3-1) unstable; urgency=low
+
+ * remove set elm entry
+ * Git: slp/pkgs/s/starter
+ * Tag: starter_0.4.3-1
+
+ -- Seungtaek Chung <seungtaek.chung@samsung.com> Wed, 18 Apr 2012 11:20:12 +0900
+
+starter (0.4.2-1) unstable; urgency=low
+
+ * apply phone lock launching interface
+ * Git: slp/pkgs/s/starter
+ * Tag: starter_0.4.2-1
+
+ -- Seungtaek Chung <seungtaek.chung@samsung.com> Sat, 07 Apr 2012 23:30:39 +0900
+
+starter (0.4.1-1) unstable; urgency=low
+
+ * Add cancel button in password view
+ * Git: slp/pkgs/s/starter
+ * Tag: starter_0.4.1-1
+
+ -- Mi-Ju Lee <miju52.lee@samsung.com> Wed, 21 Mar 2012 21:12:34 +0900
+
+starter (0.4.0-1) unstable; urgency=low
+
+ * Change desktop file for TIZEN
+ * Git: slp/pkgs/s/starter
+ * Tag: starter_0.4.0-1
+
+ -- Mi-Ju Lee <miju52.lee@samsung.com> Thu, 15 Mar 2012 19:28:01 +0900
+
+starter (0.3-51) unstable; urgency=low
+
+ * apply efl migration
+ * Git: slp/pkgs/s/starter
+ * Tag: starter_0.3-51
+
+ -- Seungtaek Chung <seungtaek.chung@samsung.com> Wed, 14 Mar 2012 14:21:15 +0900
+
+starter (0.3-50) unstable; urgency=low
+
+ * apply efl deprecation
+ * Git: slp/pkgs/s/starter
+ * Tag: starter_0.3-50
+
+ -- Seungtaek Chung <seungtaek.chung@samsung.com> Fri, 02 Mar 2012 16:32:50 +0900
+
+starter (0.3-49) unstable; urgency=low
+
+ * block set scale window
+ * Git: slp/pkgs/s/starter
+ * Tag: starter_0.3-49
+
+ -- Seungtaek Chung <seungtaek.chung@samsung.com> Wed, 29 Feb 2012 19:17:53 +0900
+
+starter (0.3-48) unstable; urgency=low
+
+ * block set window scale
+ * Git: slp/pkgs/s/starter
+ * Tag: starter_0.3-48
+
+ -- Seungtaek Chung <seungtaek.chung@samsung.com> Wed, 29 Feb 2012 18:42:54 +0900
+
+starter (0.3-47) unstable; urgency=low
+
+ * fix launch lock screen
+ * Git: slp/pkgs/s/starter
+ * Tag: starter_0.3-47
+
+ -- Seungtaek Chung <seungtaek.chung@samsung.com> Tue, 28 Feb 2012 14:56:18 +0900
+
+starter (0.3-46) unstable; urgency=low
+
+ * apply input window
+ * Git: slp/pkgs/s/starter
+ * Tag: starter_0.3-46
+
+ -- Seungtaek Chung <seungtaek.chung@samsung.com> Wed, 22 Feb 2012 14:21:08 +0900
+
+starter (0.3-45) unstable; urgency=low
+
+ * apply efl migration
+ * Git: slp/pkgs/s/starter
+ * Tag: starter_0.3-45
+
+ -- Seungtaek Chung <seungtaek.chung@samsung.com> Thu, 16 Feb 2012 20:32:05 +0900
+
+starter (0.3-44) unstable; urgency=low
+
+ * fix xwindow
+ * Git: slp/pkgs/s/starter
+ * Tag: starter_0.3-44
+
+ -- Seungtaek Chung <seungtaek.chung@samsung.com> Mon, 02 Jan 2012 18:03:13 +0900
+
+starter (0.3-43) unstable; urgency=low
+
+ * set lock class name
+ * Git: slp/pkgs/s/starter
+ * Tag: starter_0.3-43
+
+ -- Seungtaek Chung <seungtaek.chung@samsung.com> Mon, 02 Jan 2012 17:40:25 +0900
+
+starter (0.3-42) unstable; urgency=low
+
+ * set lock alpha
+ * Git: slp/pkgs/s/starter
+ * Tag: starter_0.3-42
+
+ -- Seungtaek Chung <seungtaek.chung@samsung.com> Wed, 28 Dec 2011 14:26:23 +0900
+
+starter (0.3-41) unstable; urgency=low
+
+ * fix lock state
+ * Git: slp/pkgs/s/starter
+ * Tag: starter_0.3-41
+
+ -- Seungtaek Chung <seungtaek.chung@samsung.com> Mon, 26 Dec 2011 17:27:15 +0900
+
+starter (0.3-40) unstable; urgency=low
+
+ * remove tizen subfolder
+ * Git: slp/pkgs/s/starter
+ * Tag: starter_0.3-40
+
+ -- Seungtaek Chung <seungtaek.chung@samsung.com> Mon, 19 Dec 2011 14:03:33 +0900
+
+starter (0.3-39) unstable; urgency=low
+
+ * fix phone lock operation
+ * Git: 165.213.180.234:slp/pkgs/s/starter
+ * Tag: starter_0.3-39
+
+ -- Seungtaek Chung <seungtaek.chung@samsung.com> Fri, 09 Dec 2011 21:04:27 +0900
+
+starter (0.3-38) unstable; urgency=low
+
+ * fix homekey operation
+ * Git: 165.213.180.234:slp/pkgs/s/starter
+ * Tag: starter_0.3-38
+
+ -- Seungtaek Chung <seungtaek.chung@samsung.com> Thu, 08 Dec 2011 13:47:04 +0900
+
+starter (0.3-37) unstable; urgency=low
+
+ * fix set property for phone lock
+ * Git: 165.213.180.234:slp/pkgs/s/starter
+ * Tag: starter_0.3-37
+
+ -- Seungtaek Chung <seungtaek.chung@samsung.com> Tue, 06 Dec 2011 16:51:07 +0900
+
+starter (0.3-36) unstable; urgency=low
+
+ * apply reset lock screen when lcd is off
+ * Git: 165.213.180.234:slp/pkgs/s/starter
+ * Tag: starter_0.3-36
+
+ -- Seungtaek Chung <seungtaek.chung@samsung.com> Fri, 02 Dec 2011 22:59:26 +0900
+
+starter (0.3-35) unstable; urgency=low
+
+ * fix selecting lockscreen
+ * Git: 165.213.180.234:slp/pkgs/s/starter
+ * Tag: starter_0.3-35
+
+ -- Seungtaek Chung <seungtaek.chung@samsung.com> Wed, 30 Nov 2011 14:12:12 +0900
+
+starter (0.3-34) unstable; urgency=low
+
+ * fix setting lockscreen
+ * Git: 165.213.180.234:slp/pkgs/s/starter
+ * Tag: starter_0.3-34
+
+ -- Seungtaek Chung <seungtaek.chung@samsung.com> Tue, 29 Nov 2011 09:48:02 +0900
+
+starter (0.3-33) unstable; urgency=low
+
+ * remove lockd_launch_first_lockscreen
+ * Git: 165.213.180.234:slp/pkgs/s/starter
+ * Tag: starter_0.3-33
+
+ -- Seungtaek Chung <seungtaek.chung@samsung.com> Sat, 26 Nov 2011 16:47:48 +0900
+
+starter (0.3-32) unstable; urgency=low
+
+ * fix launching phone lock app
+ * Git: 165.213.180.234:slp/pkgs/s/starter
+ * Tag: starter_0.3-32
+
+ -- Seungtaek Chung <seungtaek.chung@samsung.com> Sat, 26 Nov 2011 14:03:48 +0900
+
+starter (0.3-31) unstable; urgency=low
+
+ * apply open lock screen
+ * Git: 165.213.180.234:slp/pkgs/s/starter
+ * Tag: starter_0.3-31
+
+ -- Seungtaek Chung <seungtaek.chung@samsung.com> Mon, 21 Nov 2011 21:41:09 +0900
+
+starter (0.3-30) unstable; urgency=low
+
+ * apply tapi changes
+ * Git: 165.213.180.234:slp/pkgs/s/starter
+ * Tag: starter_0.3-30
+
+ -- Seungtaek Chung <seungtaek.chung@samsung.com> Thu, 29 Sep 2011 17:38:08 +0900
+
+starter (0.3-29) unstable; urgency=low
+
+ * fix prevent problem
+ * Git: 165.213.180.234:slp/pkgs/s/starter
+ * Tag: starter_0.3-29
+
+ -- Seungtaek Chung <seungtaek.chung@samsung.com> Sat, 20 Aug 2011 19:32:57 +0900
+
+starter (0.3-28) unstable; urgency=low
+
+ * fix aul launch error
+ * Git: 165.213.180.234:slp/pkgs/s/starter
+ * Tag: starter_0.3-28
+
+ -- Seungtaek Chung <seungtaek.chung@samsung.com> Fri, 01 Jul 2011 17:29:44 +0900
+
+starter (0.3-27) unstable; urgency=low
+
+ * added plock variable to identify menu screen showing time.
+ * Git: 165.213.180.234:slp/pkgs/s/starter
+ * Tag: starter_0.3-27
+
+ -- jeesun kim <iamjs.kim@samsung.com> Thu, 12 May 2011 09:00:00 +0900
+
+starter (0.3-26) unstable; urgency=low
+
+ * modified log error when get vconf failed
+ * Git: 165.213.180.234:slp/pkgs/s/starter
+ * Tag: starter_0.3-26
+
+ -- jeesun kim <iamjs.kim@samsung.com> Mon, 2 May 2011 09:00:00 +0900
+
+starter (0.3-25) unstable; urgency=low
+
+ * added debug message
+ * Git: 165.213.180.234:slp/pkgs/s/starter
+ * Tag: starter_0.3-25
+
+ -- jeesun kim <iamjs.kim@samsung.com> Fri, 22 Apr 2011 18:00:00 +0900
+
+starter (0.3-24) unstable; urgency=low
+
+ * skipped "memory/startapps/sequence" set 1 when first boot
+ * Git: 165.213.180.234:slp/pkgs/s/starter
+ * Tag: starter_0.3-24
+
+ -- jeesun kim <iamjs.kim@samsung.com> Wed, 14 Apr 2011 10:00:00 +0900
+
+starter (0.3-23) unstable; urgency=low
+
+ * removed deb from pwlock, added inhouse right in sequence
+ * Git: 165.213.180.234:slp/pkgs/s/starter
+ * Tag: starter_0.3-23
+
+ -- jeesun kim <iamjs.kim@samsung.com> Wed, 14 Apr 2011 10:00:00 +0900
+
+starter (0.3-22) unstable; urgency=low
+
+ * commmented wm_ready in postinst file and tossed this to isf team.
+ * Git: 165.213.180.234:slp/pkgs/s/starter
+ * Tag: starter_0.3-22
+
+ -- jeesun kim <iamjs.kim@samsung.com> Wed, 16 Mar 2011 09:36:31 +0900
+
+starter (0.3-21) unstable; urgency=low
+
+ * set starter text rd3 and rd4
+ * Git: 165.213.180.234:slp/pkgs/s/starter
+ * Tag: starter_0.3-21
+
+ -- Jeesun kim <iamjs.kim@samsung.com> Thu, 03 Mar 2011 14:44:37 +0900
+
+starter (0.3-20) unstable; urgency=low
+
+ * applied wm_ready (req from boot script)
+ * Git: 165.213.180.234:slp/pkgs/s/starter
+ * Tag: starter_0.3-20
+
+ -- Jeesun kim <iamjs.kim@samsung.com> Wed, 23 Feb 2011 13:56:09 +0900
+
+starter (0.3-19) unstable; urgency=low
+
+ * added x11 package in control
+ * Git: 165.213.180.234:slp/pkgs/s/starter
+ * Tag: starter_0.3-19
+
+ -- Jeesun kim <iamjs.kim@samsung.com> Thu, 10 Feb 2011 17:44:47 +0900
+
+starter (0.3-18) unstable; urgency=low
+
+ * path change /opt/apps/deb.com.samsung.pwlock/bin/pwlock
+ * Git: 165.213.180.234:slp/pkgs/s/starter
+ * Tag: starter_0.3-18
+
+ -- Jeesun kim <iamjs.kim@samsung.com> Thu, 27 Jan 2011 17:19:13 +0900
+
+starter (0.3-17) unstable; urgency=low
+
+ * added theme set step when hibnation
+ * Git: 165.213.180.234:slp/pkgs/s/starter
+ * Tag: starter_0.3-17
+
+ -- Jeesun kim <iamjs.kim@samsung.com> Thu, 13 Jan 2011 11:41:14 +0900
+
+starter (0.3-16) unstable; urgency=low
+
+ * modified action when SIM doesn't exist
+ * Git: 165.213.180.234:slp/pkgs/s/starter
+ * Tag: starter_0.3-16
+
+ -- Jeesun kim <iamjs.kim@samsung.com> Thu, 06 Jan 2011 14:13:54 +0900
+
+starter (0.3-15) unstable; urgency=low
+
+ * set else statement when tapi state is none
+ * Git: 165.213.180.234:slp/pkgs/s/starter
+ * Tag: starter_0.3-15
+
+ -- Jeesun kim <iamjs.kim@samsung.com> Mon, 13 Dec 2010 11:29:39 +0900
+
+starter (0.3-14) unstable; urgency=low
+
+ * added dbg package
+ * Git: 165.213.180.234:/git/slp/pkgs/starter
+ * Tag: starter_0.3-14
+
+ -- Jeesun kim <iamjs.kim@samsung.com> Tue, 30 Nov 2010 11:10:22 +0900
+
+starter (0.3-13) unstable; urgency=low
+
+ * hibernation set : starter_ready set 1
+ * Git: 165.213.180.234:/git/slp/pkgs/starter
+ * Tag: starter_0.3-13
+
+ -- Jeesun kim <iamjs.kim@samsung.com> Tue, 23 Nov 2010 17:37:15 +0900
+
+starter (0.3-12) unstable; urgency=low
+
+ * set hib check_ready
+ * Git: 165.213.180.234:/git/slp/pkgs/starter
+ * Tag: starter_0.3-12
+
+ -- Jeesun kim <iamjs.kim@samsung.com> Fri, 12 Nov 2010 09:26:05 +0900
+
+starter (0.3-11) unstable; urgency=low
+
+ * Add hib leave
+ * Git: 165.213.180.234:/git/slp/pkgs/starter
+ * Tag: starter_0.3-11
+
+ -- Suchang Woo <suchang.woo@samsung.com> Mon, 25 Oct 2010 19:05:00 +0900
+
+starter (0.3-10) unstable; urgency=low
+
+ * Remove startup script
+ * Git: 165.213.180.234:/git/slp/pkgs/starter
+ * Tag: starter_0.3-10
+
+ -- Suchang Woo <suchang.woo@samsung.com> Wed, 20 Oct 2010 15:52:53 +0900
+
+starter (0.3-9) unstable; urgency=low
+
+ * Reset timeout every transition
+ * Git: 165.213.180.234:/git/slp/pkgs/starter
+ * Tag: starter_0.3-9
+
+ -- Suchang Woo <suchang.woo@samsung.com> Tue, 12 Oct 2010 17:16:38 +0900
+
+starter (0.3-8) unstable; urgency=low
+
+ * Increase SIM check timeout
+ * Git: 165.213.180.234:/git/slp/pkgs/starter
+ * Tag: starter_0.3-8
+
+ -- Suchang Woo <suchang.woo@samsung.com> Thu, 07 Oct 2010 17:49:26 +0900
+
+starter (0.3-7) unstable; urgency=low
+
+ * Wait for TAPI ready
+ * Git: 165.213.180.234:/git/slp/pkgs/starter
+ * Tag: starter_0.3-7
+
+ -- Suchang Woo <suchang.woo@samsung.com> Thu, 07 Oct 2010 11:36:40 +0900
+
+starter (0.3-6) unstable; urgency=low
+
+ * Do not check first boot
+ * Git: 165.213.180.234:/git/slp/pkgs/starter
+ * Tag: starter_0.3-6
+
+ -- Suchang Woo <suchang.woo@samsung.com> Mon, 04 Oct 2010 19:35:37 +0900
+
+starter (0.3-5) unstable; urgency=low
+
+ * add entry setting
+ * Git: 165.213.180.234:/git/slp/pkgs/starter
+ * Tag: starter_0.3-5
+
+ -- Suchang Woo <suchang.woo@samsung.com> Fri, 01 Oct 2010 20:49:01 +0900
+
+starter (0.3-4) unstable; urgency=low
+
+ * quit after pwlock launching
+ * Git: 165.213.180.234:/git/slp/pkgs/starter
+ * Tag: starter_0.3-4
+
+ -- Suchang Woo <suchang.woo@samsung.com> Fri, 01 Oct 2010 17:31:51 +0900
+
+starter (0.3-3) unstable; urgency=low
+
+ * modify for language selection
+ * Git: 165.213.180.234:/git/slp/pkgs/starter
+ * Tag: starter_0.3-3
+
+ -- Suchang Woo <suchang.woo@samsung.com> Tue, 28 Sep 2010 20:19:54 +0900
+
+starter (0.3-2) unstable; urgency=low
+
+ * unlock menu screen even if exited with error
+ * Git: 165.213.180.234:/git/slp/pkgs/starter
+ * Tag: starter_0.3-2
+
+ -- Suchang Woo <suchang.woo@samsung.com> Wed, 15 Sep 2010 15:06:18 +0900
+
+starter (0.3-1) unstable; urgency=low
+
+ * Rewrite the code
+ * Git: 165.213.180.234:/git/slp/pkgs/starter
+ * Tag: starter_0.3-1
+
+ -- Suchang Woo <suchang.woo@samsung.com> Fri, 23 Apr 2010 20:30:14 +0900
diff --git a/debian/compat b/debian/compat
new file mode 100755
index 0000000..7ed6ff8
--- /dev/null
+++ b/debian/compat
@@ -0,0 +1 @@
+5
diff --git a/debian/control b/debian/control
new file mode 100755
index 0000000..d62b6d2
--- /dev/null
+++ b/debian/control
@@ -0,0 +1,19 @@
+Source: starter
+Section: devel
+Priority: extra
+Maintainer: Seungtaek Chung <seungtaek.chung@samsung.com>, Mi-Ju Lee <miju52.lee@samsung.com>, Xi Zhichan <zhichan.xi@samsung.com>
+Build-Depends: debhelper (>= 5), libappcore-efl-dev, libglib2.0-dev, libslp-tapi-dev, libslp-setting-dev, libheynoti-dev, libaul-1-dev, libx11-dev, libelm-dev, libefreet-dev, dlog-dev, libecore-dev, libsvi-dev, libslp-utilx-dev, libail-0-dev, libui-gadget-dev, libslp-sysman-dev
+Standards-Version: 3.7.2
+
+Package: starter
+Section: admin
+Architecture: any
+Depends: ${shlibs:Depends}, ${misc:Depends}
+Description: starter
+
+Package: starter-dbg
+Section: debug
+Architecture: any
+Depends: ${shlibs:Depends}, ${misc:Depends}
+Description: starter (unstripped)
+
diff --git a/debian/rules b/debian/rules
new file mode 100755
index 0000000..6bf3469
--- /dev/null
+++ b/debian/rules
@@ -0,0 +1,112 @@
+#!/usr/bin/make -f
+# -*- makefile -*-
+# Sample debian/rules that uses debhelper.
+# This file was originally written by Joey Hess and Craig Small.
+# As a special exception, when this file is copied by dh-make into a
+# dh-make output file, you may use that output file without restriction.
+# This special exception was added by Craig Small in version 0.37 of dh-make.
+
+# Uncomment this to turn on verbose mode.
+#export DH_VERBOSE=1
+
+CFLAGS ?= -Wall -g
+LDFLAGS ?=
+PREFIX ?= /usr
+DATADIR ?= /usr/share
+
+ifneq (,$(findstring noopt,$(DEB_BUILD_OPTIONS)))
+ CFLAGS += -O0
+else
+ CFLAGS += -O2
+endif
+
+LDFLAGS += -Wl,--rpath=$(PREFIX)/lib -Wl,--as-needed
+
+CMAKE_BUILD_DIR ?= $(CURDIR)/cmake_build_tmp
+
+configure: configure-stamp
+configure-stamp:
+ dh_testdir
+ # Add here commands to configure the package.
+ mkdir -p $(CMAKE_BUILD_DIR) && cd $(CMAKE_BUILD_DIR) && \
+ CFLAGS="$(CFLAGS)" LDFLAGS="$(LDFLAGS)" cmake .. -DCMAKE_INSTALL_PREFIX="$(PREFIX)"
+
+ touch configure-stamp
+
+build: build-stamp
+
+build-stamp: configure-stamp
+ dh_testdir
+
+ # Add here commands to compile the package.
+ cd $(CMAKE_BUILD_DIR) && $(MAKE)
+
+ for f in `find $(CURDIR)/debian/ -name "*.in"`; do \
+ cat $$f > $${f%.in}; \
+ sed -i -e "s#@PREFIX@#$(PREFIX)#g" $${f%.in}; \
+ sed -i -e "s#@DATADIR@#$(DATADIR)#g" $${f%.in}; \
+ done
+
+ touch $@
+
+clean:
+ dh_testdir
+ dh_testroot
+ rm -f build-stamp configure-stamp
+
+ # Add here commands to clean up after the build process.
+ rm -rf $(CMAKE_BUILD_DIR)
+
+ for f in `find $(CURDIR)/debian/ -name "*.in"`; do \
+ rm -f $${f%.in}; \
+ done
+
+ dh_clean
+
+install: build
+ dh_testdir
+ dh_testroot
+ dh_clean -k
+ dh_installdirs
+
+ # Add here commands to install the package into debian/wavplayer.
+ cd $(CMAKE_BUILD_DIR) && $(MAKE) DESTDIR=$(CURDIR)/debian/tmp install
+
+
+# Build architecture-independent files here.
+binary-indep: build install
+# We have nothing to do by default.
+
+# Build architecture-dependent files here.
+binary-arch: build install
+ dh_testdir
+ dh_testroot
+# dh_installchangelogs
+# dh_installdocs
+ dh_installexamples
+ dh_install --sourcedir=debian/tmp
+# dh_installmenu
+# dh_installdebconf
+# dh_installlogrotate
+# dh_installemacsen
+# dh_installpam
+# dh_installmime
+# dh_python
+# dh_installinit
+# dh_installcron
+# dh_installinfo
+ dh_installman
+ dh_link
+ dh_strip --dbg-package=starter-dbg
+ dh_compress
+ dh_fixperms
+# dh_perl
+ dh_makeshlibs
+ dh_installdeb
+ dh_shlibdeps
+ dh_gencontrol
+ dh_md5sums
+ dh_builddeb
+
+binary: binary-indep binary-arch
+.PHONY: build clean binary-indep binary-arch binary install configure
diff --git a/debian/starter.install.in b/debian/starter.install.in
new file mode 100755
index 0000000..464e764
--- /dev/null
+++ b/debian/starter.install.in
@@ -0,0 +1,4 @@
+@PREFIX@/bin/*
+@PREFIX@/lib/*
+/etc/init.d/*
+/opt/ug/*
diff --git a/debian/starter.postinst b/debian/starter.postinst
new file mode 100755
index 0000000..f1f673f
--- /dev/null
+++ b/debian/starter.postinst
@@ -0,0 +1,14 @@
+#!/bin/sh
+
+vconftool set -t int "memory/starter/sequence" 0 -i -u 5000 -g 5000
+
+vconftool set -t string file/private/lockscreen/pkgname "org.tizen.lockscreen" -u 5000 -g 5000
+
+vconftool -i set -t int memory/idle_lock/state "0" -u 5000 -g 5000
+
+vconftool -i set -t bool memory/lockscreen/phone_lock_verification "0" -u 5000 -g 5000
+
+ln -sf /etc/init.d/rd4starter /etc/rc.d/rc4.d/S81starter
+ln -sf /etc/init.d/rd3starter /etc/rc.d/rc3.d/S43starter
+
+sync
diff --git a/include/hw_key.h b/include/hw_key.h
new file mode 100755
index 0000000..a55d78b
--- /dev/null
+++ b/include/hw_key.h
@@ -0,0 +1,20 @@
+ /*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://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);
diff --git a/include/lock-daemon.h b/include/lock-daemon.h
new file mode 100755
index 0000000..d618c79
--- /dev/null
+++ b/include/lock-daemon.h
@@ -0,0 +1,24 @@
+ /*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+
+#ifndef __LOCK_DAEMON_H__
+#define __LOCK_DAEMON_H__
+
+int start_lock_daemon(int launch_lock);
+
+#endif
diff --git a/include/lockd-debug.h b/include/lockd-debug.h
new file mode 100755
index 0000000..ab37aee
--- /dev/null
+++ b/include/lockd-debug.h
@@ -0,0 +1,64 @@
+ /*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://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/include/lockd-process-mgr.h b/include/lockd-process-mgr.h
new file mode 100755
index 0000000..f75756a
--- /dev/null
+++ b/include/lockd-process-mgr.h
@@ -0,0 +1,38 @@
+ /*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+
+#ifndef __LOCKD_PROCESS_MGR_H__
+#define __LOCKD_PROCESS_MGR_H__
+
+int lockd_process_mgr_start_lock(void *data, int (*dead_cb) (int, void *),
+ int phone_lock_state);
+
+int lockd_process_mgr_restart_lock(int phone_lock_state);
+
+int lockd_process_mgr_start_phone_lock(void);
+
+int lockd_process_mgr_start_normal_lock(void *data, int (*dead_cb) (int, void *));
+
+void lockd_process_mgr_terminate_lock_app(int lock_app_pid,
+ int state);
+
+void lockd_process_mgr_terminate_phone_lock(int phone_lock_pid);
+
+int lockd_process_mgr_check_lock(int pid);
+
+#endif
diff --git a/include/lockd-window-mgr.h b/include/lockd-window-mgr.h
new file mode 100755
index 0000000..33ddf0f
--- /dev/null
+++ b/include/lockd-window-mgr.h
@@ -0,0 +1,42 @@
+ /*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+
+#ifndef __LOCKD_WINDOW_MGR_H__
+#define __LOCKD_WINDOW_MGR_H__
+
+typedef struct _lockw_data lockw_data;
+
+Eina_Bool
+lockd_window_set_window_property(lockw_data * data, int lock_app_pid,
+ void *event);
+
+Eina_Bool
+lockd_window_set_window_effect(lockw_data * data, int lock_app_pid,
+ void *event);
+
+void lockd_window_set_phonelock_pid(lockw_data * data, int phone_lock_pid);
+
+void
+lockd_window_mgr_ready_lock(void *data, lockw_data * lockw,
+ Eina_Bool(*create_cb) (void *, int, void *),
+ Eina_Bool(*show_cb) (void *, int, void *));
+
+void lockd_window_mgr_finish_lock(lockw_data * lockw);
+
+lockw_data *lockd_window_init(void);
+#endif
diff --git a/include/menu_daemon.h b/include/menu_daemon.h
new file mode 100755
index 0000000..80d6939
--- /dev/null
+++ b/include/menu_daemon.h
@@ -0,0 +1,27 @@
+ /*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://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 <sys/types.h>
+#include <stdbool.h>
+
+extern void menu_daemon_init(void *data);
+extern void menu_daemon_fini(void);
+
+extern bool menu_daemon_is_homescreen(pid_t pid);
+
+extern int menu_daemon_check_dead_signal(int pid);
diff --git a/include/pkg_event.h b/include/pkg_event.h
new file mode 100755
index 0000000..0574282
--- /dev/null
+++ b/include/pkg_event.h
@@ -0,0 +1,46 @@
+ /*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://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/include/starter-util.h b/include/starter-util.h
new file mode 100755
index 0000000..1dc131d
--- /dev/null
+++ b/include/starter-util.h
@@ -0,0 +1,35 @@
+ /*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://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/include/starter-vconf.h b/include/starter-vconf.h
new file mode 100755
index 0000000..400a3d9
--- /dev/null
+++ b/include/starter-vconf.h
@@ -0,0 +1,24 @@
+ /*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+
+#ifndef __STARTER_VCONF_H__
+#define __STARTER_VCONF_H__
+
+#define VCONF_PRIVATE_LOCKSCREEN_PKGNAME "file/private/lockscreen/pkgname"
+
+#endif
diff --git a/include/starter.h b/include/starter.h
new file mode 100755
index 0000000..fd187b6
--- /dev/null
+++ b/include/starter.h
@@ -0,0 +1,28 @@
+ /*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://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/include/util.h b/include/util.h
new file mode 100755
index 0000000..92640ff
--- /dev/null
+++ b/include/util.h
@@ -0,0 +1,78 @@
+ /*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://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>
+
+#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
+
+#if !defined(_W)
+#define _W(fmt, arg...) LOGW("[%s:%d] "fmt"\n", __func__, __LINE__, ##arg)
+#endif
+
+#if !defined(_D)
+#define _D(fmt, arg...) LOGD("[%s:%d] "fmt"\n", __func__, __LINE__, ##arg)
+#endif
+
+#if !defined(_E)
+#define _E(fmt, arg...) LOGE("[%s:%d] "fmt"\n", __func__, __LINE__, ##arg)
+#endif
+
+#define retv_if(expr, val) do { \
+ if(expr) { \
+ _E("(%s) -> %s() return", #expr, __FUNCTION__); \
+ return (val); \
+ } \
+} while (0)
+
+#define ret_if(expr) do { \
+ if(expr) { \
+ _E("(%s) -> %s() return", #expr, __FUNCTION__); \
+ return; \
+ } \
+} while (0)
+
+#define goto_if(expr, val) do { \
+ if(expr) { \
+ _E("(%s) -> goto", #expr); \
+ goto val; \
+ } \
+} while (0)
+
+#define break_if(expr) { \
+ if(expr) { \
+ _E("(%s) -> break", #expr); \
+ break; \
+ } \
+}
+
+#define continue_if(expr) { \
+ if(expr) { \
+ _E("(%s) -> continue", #expr); \
+ continue; \
+ } \
+}
+
+#endif
diff --git a/include/x11.h b/include/x11.h
new file mode 100755
index 0000000..fc047e5
--- /dev/null
+++ b/include/x11.h
@@ -0,0 +1,26 @@
+ /*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+
+#ifndef __STARTER_X11_H__
+#define __STARTER_X11_H__
+
+void prop_string_set(const char *name, const char *value);
+void prop_int_set(const char *name, unsigned int val);
+void set_window_scale(void);
+
+#endif
diff --git a/include/xmonitor.h b/include/xmonitor.h
new file mode 100755
index 0000000..d1693b1
--- /dev/null
+++ b/include/xmonitor.h
@@ -0,0 +1,25 @@
+ /*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://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
diff --git a/lock-setting/CMakeLists.txt b/lock-setting/CMakeLists.txt
new file mode 100755
index 0000000..7745b83
--- /dev/null
+++ b/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/lock-setting/lockscreen-options/CMakeLists.txt b/lock-setting/lockscreen-options/CMakeLists.txt
new file mode 100755
index 0000000..09dde8d
--- /dev/null
+++ b/lock-setting/lockscreen-options/CMakeLists.txt
@@ -0,0 +1,40 @@
+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_CXXFLAGS "${EXTRA_CXXFLAGS} ${flag}")
+ENDFOREACH(flag)
+
+SET(EXTRA_CXXFLAGS "${EXTRA_CXXFLAGS} -fvisibility=hidden -Wall")
+SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${EXTRA_CXXFLAGS}")
+SET(CMAKE_C_FLAGS ${CMAKE_CXX_FLAGS})
+
+ADD_DEFINITIONS("-DPREFIX=\"${CMAKE_INSTALL_PREFIX}\"")
+
+ADD_LIBRARY(${PROJECT_NAME} SHARED ${SRCS})
+SET_TARGET_PROPERTIES(${PROJECT_NAME} PROPERTIES SOVERSION 0.1.0)
+TARGET_LINK_LIBRARIES(${PROJECT_NAME} ${pkgs_lock-screen-options_LDFLAGS})
+
+INSTALL(TARGETS ${PROJECT_NAME} DESTINATION ${LIBDIR})
diff --git a/lock-setting/lockscreen-options/include/lockscreen-options-debug.h b/lock-setting/lockscreen-options/include/lockscreen-options-debug.h
new file mode 100755
index 0000000..2e2f966
--- /dev/null
+++ b/lock-setting/lockscreen-options/include/lockscreen-options-debug.h
@@ -0,0 +1,48 @@
+ /*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://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/lock-setting/lockscreen-options/include/lockscreen-options-main.h b/lock-setting/lockscreen-options/include/lockscreen-options-main.h
new file mode 100755
index 0000000..89fb9bb
--- /dev/null
+++ b/lock-setting/lockscreen-options/include/lockscreen-options-main.h
@@ -0,0 +1,28 @@
+ /*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://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/lock-setting/lockscreen-options/include/lockscreen-options-util.h b/lock-setting/lockscreen-options/include/lockscreen-options-util.h
new file mode 100755
index 0000000..4f9555e
--- /dev/null
+++ b/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.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://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/lock-setting/lockscreen-options/include/lockscreen-options.h b/lock-setting/lockscreen-options/include/lockscreen-options.h
new file mode 100755
index 0000000..73bcd4d
--- /dev/null
+++ b/lock-setting/lockscreen-options/include/lockscreen-options.h
@@ -0,0 +1,64 @@
+ /*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://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/lock-setting/lockscreen-options/src/lockscreen-options-main.c b/lock-setting/lockscreen-options/src/lockscreen-options-main.c
new file mode 100755
index 0000000..45ac930
--- /dev/null
+++ b/lock-setting/lockscreen-options/src/lockscreen-options-main.c
@@ -0,0 +1,341 @@
+ /*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://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/lock-setting/lockscreen-options/src/lockscreen-options-util.c b/lock-setting/lockscreen-options/src/lockscreen-options-util.c
new file mode 100755
index 0000000..5660062
--- /dev/null
+++ b/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.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+
+#include "lockscreen-options-debug.h"
+#include "lockscreen-options.h"
+#include "lockscreen-options-util.h"
+
+const char *sys_str_table[] = {
+ "IDS_COM_SK_OK",
+ "IDS_COM_SK_CANCEL",
+};
+
+const char *app_str_table[] = {
+ "IDS_IDLE_MBODY_EVENT_NOTIFICATIONS",
+ "IDS_IDLE_BODY_VIEW_EVENT_NOTIFICATIONS_ON_THE_LOCK_SCREEN",
+ "IDS_ST_BODY_CLOCK",
+ "IDS_IM_BODY_HELP_TEXT",
+ "IDS_ST_BODY_SHOW_HELP_TEXT_ON_LOCK_SCREEN"
+};
+
+static Elm_Gen_Item_Class itc_underline;
+static Elm_Gen_Item_Class itc_separator;
+
+Evas_Object *lockscreen_options_util_create_navigation(Evas_Object * parent)
+{
+ Evas_Object *navi_bar = NULL;
+
+ if (parent == NULL) {
+ LOCKOPTIONS_WARN("Parent is null.");
+ return NULL;
+ }
+
+ navi_bar = elm_naviframe_add(parent);
+ if (navi_bar == NULL) {
+ LOCKOPTIONS_ERR("Cannot add naviagtionbar.");
+ return NULL;
+ }
+
+ elm_object_part_content_set(parent, "elm.swallow.content", navi_bar);
+
+ evas_object_show(navi_bar);
+
+ return navi_bar;
+}
+
+Evas_Object *lockscreen_options_util_create_layout(Evas_Object * parent,
+ const char *file,
+ const char *group)
+{
+ Evas_Object *layout = NULL;
+
+ if (parent == NULL) {
+ LOCKOPTIONS_WARN("Parent is null.");
+ return NULL;
+ }
+
+ layout = elm_layout_add(parent);
+ if (layout == NULL) {
+ LOCKOPTIONS_ERR("Cannot add layout.");
+ return NULL;
+ }
+
+ if ((file != NULL) && (group != NULL)) {
+ elm_layout_file_set(layout, file, group);
+ }
+
+ evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND,
+ EVAS_HINT_EXPAND);
+
+ evas_object_show(layout);
+
+ return layout;
+}
+
+void lockscreen_options_util_create_seperator(Evas_Object * genlist)
+{
+ if (NULL == genlist)
+ return;
+
+ Elm_Object_Item *item = NULL;
+
+ itc_separator.item_style = LOCKSCREEN_GENLIST_STYLE_SEPERATOR;
+ itc_separator.func.text_get = NULL;
+ itc_separator.func.content_get = NULL;
+ itc_separator.func.state_get = NULL;
+ itc_separator.func.del = NULL;
+
+ item =
+ elm_genlist_item_append(genlist, &(itc_separator), NULL, NULL,
+ ELM_GENLIST_ITEM_NONE, NULL, NULL);
+ elm_genlist_item_select_mode_set(item,
+ ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
+}
+
+void lockscreen_options_util_create_underline(Evas_Object * genlist)
+{
+ if (NULL == genlist)
+ return;
+
+ Elm_Object_Item *item = NULL;
+
+ itc_underline.item_style = LOCKSCREEN_GENLIST_STYLE_UNDERLINE;
+ itc_underline.func.text_get = NULL;
+ itc_underline.func.content_get = NULL;
+ itc_underline.func.state_get = NULL;
+ itc_underline.func.del = NULL;
+
+ item =
+ elm_genlist_item_append(genlist, &(itc_underline), NULL, NULL,
+ ELM_GENLIST_ITEM_NONE, NULL, NULL);
+ elm_genlist_item_select_mode_set(item,
+ ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
+}
+
+char *lockscreen_optoins_get_string(int id)
+{
+ LOCKOPTIONS_DBG("get string id : %d\n", id);
+
+ char *str = NULL;
+
+ if (id < IDS_LOCKSCREEN_OPTIONS_SYSTEM_STRING_MAX) {
+ str = dgettext("sys_string", sys_str_table[id]);
+ } else {
+ str =
+ dgettext(PKGNAME,
+ app_str_table[id -
+ IDS_LOCKSCREEN_OPTIONS_SYSTEM_STRING_MAX]);
+ }
+
+ LOCKOPTIONS_DBG("get string : %s\n", str);
+
+ return str;
+}
diff --git a/lock-setting/lockscreen-options/src/lockscreen-options.c b/lock-setting/lockscreen-options/src/lockscreen-options.c
new file mode 100755
index 0000000..f0bf105
--- /dev/null
+++ b/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.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://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/lock-setting/po/CMakeLists.txt b/lock-setting/po/CMakeLists.txt
new file mode 100755
index 0000000..647202a
--- /dev/null
+++ b/lock-setting/po/CMakeLists.txt
@@ -0,0 +1,26 @@
+# for i18n
+
+SET(LOCKPONAME "ug-lockscreen-options")
+
+SET(POFILES ar.po az.po bg.po ca.po cs.po da.po de_DE.po el_GR.po en.po en_PH.po en_US.po es_ES.po es_US.po fi.po fr_CA.po fr_FR.po ga.po gl.po hi.po hr.po hu.po hy.po is.po it_IT.po ja_JP.po ka.po kk.po ko_KR.po lt.po lv.po mk.po nb.po nl_NL.po pl.po pt_BR.po pt_PT.po ro.po ru_RU.po sk.po sl.po sr.po sv.po tr_TR.po uk.po uz.po zh_CN.po zh_HK.po zh_SG.po zh_TW.po)
+
+SET(MSGFMT "/usr/bin/msgfmt")
+
+FOREACH(pofile ${POFILES})
+ SET(pofile ${CMAKE_CURRENT_SOURCE_DIR}/${pofile})
+ MESSAGE("PO: ${pofile}")
+ GET_FILENAME_COMPONENT(absPofile ${pofile} ABSOLUTE)
+ GET_FILENAME_COMPONENT(lang ${absPofile} NAME_WE)
+ SET(moFile ${CMAKE_CURRENT_BINARY_DIR}/${lang}.mo)
+ ADD_CUSTOM_COMMAND(
+ OUTPUT ${moFile}
+ COMMAND ${MSGFMT} -o ${moFile} ${absPofile}
+ DEPENDS ${absPofile}
+ )
+
+INSTALL(FILES ${moFile} DESTINATION /usr/ug/res/locale/${lang}/LC_MESSAGES RENAME ${LOCKPONAME}.mo)
+ SET(moFiles ${moFiles} ${moFile})
+ENDFOREACH(pofile)
+
+MESSAGE(".mo files: ${moFiles}")
+ADD_CUSTOM_TARGET(po ALL DEPENDS ${moFiles})
diff --git a/lock-setting/po/ar.po b/lock-setting/po/ar.po
new file mode 100644
index 0000000..7c0e6a6
--- /dev/null
+++ b/lock-setting/po/ar.po
@@ -0,0 +1,54 @@
+msgid "IDS_ST_BODY_LOCK_SCREEN"
+msgstr "قفل الشاشة"
+
+msgid "IDS_IDLE_BODY_VIEW_EVENT_NOTIFICATIONS_ON_THE_LOCK_SCREEN"
+msgstr "عرض إخطارات الحدث على شاشة القفل"
+
+msgid "IDS_IDLE_MBODY_EVENT_NOTIFICATIONS"
+msgstr "إشعارات الحدث"
+
+msgid "IDS_ST_BODY_CLOCK"
+msgstr "الساعة"
+
+msgid "IDS_ST_BODY_WEATHER"
+msgstr "الطقس"
+
+msgid "IDS_ST_BODY_SET_SHORTCUTS_ON_LOCK_SCREEN"
+msgstr "تعيين اختصارات على شاشة القفل"
+
+msgid "IDS_ST_BODY_SHORTCUTS"
+msgstr "الاختصارات"
+
+msgid "IDS_ST_BODY_DUAL_CLOCK"
+msgstr "ساعة ثنائية"
+
+msgid "IDS_ST_BODY_SHOW_HELP_TEXT_ON_LOCK_SCREEN"
+msgstr "عرض نص التعليمات على شاشة القفل"
+
+msgid "IDS_ST_BODY_SHOW_DUAL_CLOCK_ON_LOCK_SCREEN_WHEN_ROAMING"
+msgstr "عرض ‏‫ساعة مزدوجة على شاشة القفل أثناء التجوال"
+
+msgid "IDS_ST_BODY_TAP_AND_HOLD_THE_SCREEN_WHILE_ROTATING_THE_DEVICE_TO_OPEN_CAMERA"
+msgstr "انقر مع الاستمرار فوق الشاشة مع تدوير الجهاز لفتح الكاميرا"
+
+msgid "IDS_ST_MBODY_CAMERA_QUICK_ACCESS"
+msgstr "وصول سريع إلى الكاميرا"
+
+msgid "IDS_ST_BODY_SET_SHORTCUTS"
+msgstr "تعيين اختصارات"
+
+msgid "IDS_ST_BODY_DRAG_AND_DROP_TO_CHANGE_ORDER"
+msgstr "قم بالسحب والإسقاط لتغيير الترتيب"
+
+msgid "IDS_ST_BODY_SELECT_APPLICATION"
+msgstr "اختر تطبيق"
+
+msgid "IDS_ST_BODY_TAP_SHORTCUT_TO_ASSIGN_APPLICATION"
+msgstr "‏‫انقر فوق الاختصار لتخصيص تطبيق"
+
+msgid "IDS_ST_OPT_EDIT_SHORTCUTS"
+msgstr "تعديل الاختصارات"
+
+msgid "IDS_IM_BODY_HELP_TEXT"
+msgstr "نص المساعدة"
+
diff --git a/lock-setting/po/az.po b/lock-setting/po/az.po
new file mode 100644
index 0000000..305092a
--- /dev/null
+++ b/lock-setting/po/az.po
@@ -0,0 +1,54 @@
+msgid "IDS_ST_BODY_LOCK_SCREEN"
+msgstr "Ekranı kilidləyin"
+
+msgid "IDS_IDLE_BODY_VIEW_EVENT_NOTIFICATIONS_ON_THE_LOCK_SCREEN"
+msgstr "Kilid ekranında tədbir bildirişlərinə bax"
+
+msgid "IDS_IDLE_MBODY_EVENT_NOTIFICATIONS"
+msgstr "Tədbir bildirişləri"
+
+msgid "IDS_ST_BODY_CLOCK"
+msgstr "Saat"
+
+msgid "IDS_ST_BODY_WEATHER"
+msgstr "Hava"
+
+msgid "IDS_ST_BODY_SET_SHORTCUTS_ON_LOCK_SCREEN"
+msgstr "Kilid ekranına qısayol qur"
+
+msgid "IDS_ST_BODY_SHORTCUTS"
+msgstr "Çevik düymələr"
+
+msgid "IDS_ST_BODY_DUAL_CLOCK"
+msgstr "İkili saat"
+
+msgid "IDS_ST_BODY_SHOW_HELP_TEXT_ON_LOCK_SCREEN"
+msgstr "Kilid ekranında kömək mətnini göstər"
+
+msgid "IDS_ST_BODY_SHOW_DUAL_CLOCK_ON_LOCK_SCREEN_WHEN_ROAMING"
+msgstr "Rouminq zamanı kilid ekranında ikili saat göstər"
+
+msgid "IDS_ST_BODY_TAP_AND_HOLD_THE_SCREEN_WHILE_ROTATING_THE_DEVICE_TO_OPEN_CAMERA"
+msgstr "Kameranı açmaq üçün ekrana vurun saxlayaraq cihazı fırladın"
+
+msgid "IDS_ST_MBODY_CAMERA_QUICK_ACCESS"
+msgstr "Kamera çevik girişi"
+
+msgid "IDS_ST_BODY_SET_SHORTCUTS"
+msgstr "Qısayolları qur"
+
+msgid "IDS_ST_BODY_DRAG_AND_DROP_TO_CHANGE_ORDER"
+msgstr "Sıranı dəyişmək üçün dartıb buraxın"
+
+msgid "IDS_ST_BODY_SELECT_APPLICATION"
+msgstr "Proqramı seç"
+
+msgid "IDS_ST_BODY_TAP_SHORTCUT_TO_ASSIGN_APPLICATION"
+msgstr "Proqrama təyin etmək üçün qısayola vur"
+
+msgid "IDS_ST_OPT_EDIT_SHORTCUTS"
+msgstr "Qısayolları redaktə edin"
+
+msgid "IDS_IM_BODY_HELP_TEXT"
+msgstr "Yardımçı mətn"
+
diff --git a/lock-setting/po/bg.po b/lock-setting/po/bg.po
new file mode 100644
index 0000000..1033cf8
--- /dev/null
+++ b/lock-setting/po/bg.po
@@ -0,0 +1,54 @@
+msgid "IDS_ST_BODY_LOCK_SCREEN"
+msgstr "Заключен екран"
+
+msgid "IDS_IDLE_BODY_VIEW_EVENT_NOTIFICATIONS_ON_THE_LOCK_SCREEN"
+msgstr "Преглед на известията за събития на заключения екран"
+
+msgid "IDS_IDLE_MBODY_EVENT_NOTIFICATIONS"
+msgstr "Уведомявания за събития"
+
+msgid "IDS_ST_BODY_CLOCK"
+msgstr "Часовник"
+
+msgid "IDS_ST_BODY_WEATHER"
+msgstr "Време"
+
+msgid "IDS_ST_BODY_SET_SHORTCUTS_ON_LOCK_SCREEN"
+msgstr "Задайте бързите клавиши на заключения екран"
+
+msgid "IDS_ST_BODY_SHORTCUTS"
+msgstr "Бърз достъп"
+
+msgid "IDS_ST_BODY_DUAL_CLOCK"
+msgstr "Двоен часовник"
+
+msgid "IDS_ST_BODY_SHOW_HELP_TEXT_ON_LOCK_SCREEN"
+msgstr "Показвай текста на помощта на заключения екран"
+
+msgid "IDS_ST_BODY_SHOW_DUAL_CLOCK_ON_LOCK_SCREEN_WHEN_ROAMING"
+msgstr "Покажи двоен часовник на заключения екран в роуминг"
+
+msgid "IDS_ST_BODY_TAP_AND_HOLD_THE_SCREEN_WHILE_ROTATING_THE_DEVICE_TO_OPEN_CAMERA"
+msgstr "Чукнете и задръжте екрана, докато въртите устройството, за да отворите Камера"
+
+msgid "IDS_ST_MBODY_CAMERA_QUICK_ACCESS"
+msgstr "Бърз достъп с камера"
+
+msgid "IDS_ST_BODY_SET_SHORTCUTS"
+msgstr "Задаване на бързи команди"
+
+msgid "IDS_ST_BODY_DRAG_AND_DROP_TO_CHANGE_ORDER"
+msgstr "Плъзнете и пуснете, за да промените реда"
+
+msgid "IDS_ST_BODY_SELECT_APPLICATION"
+msgstr "Избор на приложение"
+
+msgid "IDS_ST_BODY_TAP_SHORTCUT_TO_ASSIGN_APPLICATION"
+msgstr "Чукнете върху бърза команда, за да зададете приложение"
+
+msgid "IDS_ST_OPT_EDIT_SHORTCUTS"
+msgstr "Редактиране на бързи клавиши"
+
+msgid "IDS_IM_BODY_HELP_TEXT"
+msgstr "Помощен текст"
+
diff --git a/lock-setting/po/ca.po b/lock-setting/po/ca.po
new file mode 100644
index 0000000..e6a6351
--- /dev/null
+++ b/lock-setting/po/ca.po
@@ -0,0 +1,54 @@
+msgid "IDS_ST_BODY_LOCK_SCREEN"
+msgstr "Bloquejar pantalla"
+
+msgid "IDS_IDLE_BODY_VIEW_EVENT_NOTIFICATIONS_ON_THE_LOCK_SCREEN"
+msgstr "Veure notificacions d'esdeveniments a pantalla de bloqueig"
+
+msgid "IDS_IDLE_MBODY_EVENT_NOTIFICATIONS"
+msgstr "Avisos d'esdeveniments"
+
+msgid "IDS_ST_BODY_CLOCK"
+msgstr "Rellotge"
+
+msgid "IDS_ST_BODY_WEATHER"
+msgstr "Temps"
+
+msgid "IDS_ST_BODY_SET_SHORTCUTS_ON_LOCK_SCREEN"
+msgstr "Definir accessos directes a la pantalla de bloqueig"
+
+msgid "IDS_ST_BODY_SHORTCUTS"
+msgstr "Accessos directes"
+
+msgid "IDS_ST_BODY_DUAL_CLOCK"
+msgstr "Rellotge dual"
+
+msgid "IDS_ST_BODY_SHOW_HELP_TEXT_ON_LOCK_SCREEN"
+msgstr "Mostrar text d'ajuda a la pantalla de bloqueig"
+
+msgid "IDS_ST_BODY_SHOW_DUAL_CLOCK_ON_LOCK_SCREEN_WHEN_ROAMING"
+msgstr "Mostrar rellotge dual a la pantalla de bloqueig en itinerància"
+
+msgid "IDS_ST_BODY_TAP_AND_HOLD_THE_SCREEN_WHILE_ROTATING_THE_DEVICE_TO_OPEN_CAMERA"
+msgstr "Mantingui tocada la pantalla mentre gira el dispositiu per obrir la Càmera"
+
+msgid "IDS_ST_MBODY_CAMERA_QUICK_ACCESS"
+msgstr "Accés ràpid a càmera"
+
+msgid "IDS_ST_BODY_SET_SHORTCUTS"
+msgstr "Definir editar accessos directes"
+
+msgid "IDS_ST_BODY_DRAG_AND_DROP_TO_CHANGE_ORDER"
+msgstr "Arrossegui i deixi anar per canviar l'ordre"
+
+msgid "IDS_ST_BODY_SELECT_APPLICATION"
+msgstr "Seleccionar aplicació"
+
+msgid "IDS_ST_BODY_TAP_SHORTCUT_TO_ASSIGN_APPLICATION"
+msgstr "Toqui l'accés directe per assignar l'aplicació"
+
+msgid "IDS_ST_OPT_EDIT_SHORTCUTS"
+msgstr "Editar accessos directes"
+
+msgid "IDS_IM_BODY_HELP_TEXT"
+msgstr "Text ajuda"
+
diff --git a/lock-setting/po/cs.po b/lock-setting/po/cs.po
new file mode 100644
index 0000000..5a6e267
--- /dev/null
+++ b/lock-setting/po/cs.po
@@ -0,0 +1,54 @@
+msgid "IDS_ST_BODY_LOCK_SCREEN"
+msgstr "Zamknout displej"
+
+msgid "IDS_IDLE_BODY_VIEW_EVENT_NOTIFICATIONS_ON_THE_LOCK_SCREEN"
+msgstr "Zobrazení upozorňování na události na zamknutém displeji"
+
+msgid "IDS_IDLE_MBODY_EVENT_NOTIFICATIONS"
+msgstr "Upozorňování na události"
+
+msgid "IDS_ST_BODY_CLOCK"
+msgstr "Hodiny"
+
+msgid "IDS_ST_BODY_WEATHER"
+msgstr "Počasí"
+
+msgid "IDS_ST_BODY_SET_SHORTCUTS_ON_LOCK_SCREEN"
+msgstr "Nastavit zástupce na zamknutém displeji"
+
+msgid "IDS_ST_BODY_SHORTCUTS"
+msgstr "Zkratky"
+
+msgid "IDS_ST_BODY_DUAL_CLOCK"
+msgstr "Duál. hodiny"
+
+msgid "IDS_ST_BODY_SHOW_HELP_TEXT_ON_LOCK_SCREEN"
+msgstr "Zobrazit text nápovědy na zamknutém displeji"
+
+msgid "IDS_ST_BODY_SHOW_DUAL_CLOCK_ON_LOCK_SCREEN_WHEN_ROAMING"
+msgstr "Zobrazit duální hodiny na zamknutém displeji během roamingu"
+
+msgid "IDS_ST_BODY_TAP_AND_HOLD_THE_SCREEN_WHILE_ROTATING_THE_DEVICE_TO_OPEN_CAMERA"
+msgstr "Klepnutím na displej a podržením při otáčení zařízení otevřete Fotoaparát"
+
+msgid "IDS_ST_MBODY_CAMERA_QUICK_ACCESS"
+msgstr "Rychlý přístup k fotoap."
+
+msgid "IDS_ST_BODY_SET_SHORTCUTS"
+msgstr "Nastavit zástupce"
+
+msgid "IDS_ST_BODY_DRAG_AND_DROP_TO_CHANGE_ORDER"
+msgstr "Přetažením změníte pořadí"
+
+msgid "IDS_ST_BODY_SELECT_APPLICATION"
+msgstr "Vyberte aplikaci"
+
+msgid "IDS_ST_BODY_TAP_SHORTCUT_TO_ASSIGN_APPLICATION"
+msgstr "Chcete-li přiřadit aplikaci, klepněte na zástupce"
+
+msgid "IDS_ST_OPT_EDIT_SHORTCUTS"
+msgstr "Upravit zástupce"
+
+msgid "IDS_IM_BODY_HELP_TEXT"
+msgstr "Nápověda"
+
diff --git a/lock-setting/po/da.po b/lock-setting/po/da.po
new file mode 100644
index 0000000..d9a26bb
--- /dev/null
+++ b/lock-setting/po/da.po
@@ -0,0 +1,54 @@
+msgid "IDS_ST_BODY_LOCK_SCREEN"
+msgstr "Låseskærm"
+
+msgid "IDS_IDLE_BODY_VIEW_EVENT_NOTIFICATIONS_ON_THE_LOCK_SCREEN"
+msgstr "Vis begivenhedsbeskeder på den låste skærm"
+
+msgid "IDS_IDLE_MBODY_EVENT_NOTIFICATIONS"
+msgstr "Begivenhedsbeskeder"
+
+msgid "IDS_ST_BODY_CLOCK"
+msgstr "Ur"
+
+msgid "IDS_ST_BODY_WEATHER"
+msgstr "Vejr"
+
+msgid "IDS_ST_BODY_SET_SHORTCUTS_ON_LOCK_SCREEN"
+msgstr "Indstil genveje på låseskærm"
+
+msgid "IDS_ST_BODY_SHORTCUTS"
+msgstr "Genveje"
+
+msgid "IDS_ST_BODY_DUAL_CLOCK"
+msgstr "Dobbelt-ur"
+
+msgid "IDS_ST_BODY_SHOW_HELP_TEXT_ON_LOCK_SCREEN"
+msgstr "Vis hjælpetekst på låst skærm"
+
+msgid "IDS_ST_BODY_SHOW_DUAL_CLOCK_ON_LOCK_SCREEN_WHEN_ROAMING"
+msgstr "Vis dobbelt ur på låseskærm under roaming"
+
+msgid "IDS_ST_BODY_TAP_AND_HOLD_THE_SCREEN_WHILE_ROTATING_THE_DEVICE_TO_OPEN_CAMERA"
+msgstr "Tryk og hold på skærmen, mens du roterer enheden, for at åbne Kamera"
+
+msgid "IDS_ST_MBODY_CAMERA_QUICK_ACCESS"
+msgstr "Hurtig adgang til kamera"
+
+msgid "IDS_ST_BODY_SET_SHORTCUTS"
+msgstr "Angiv genveje"
+
+msgid "IDS_ST_BODY_DRAG_AND_DROP_TO_CHANGE_ORDER"
+msgstr "Træk og slip for at skifte rækkefølge"
+
+msgid "IDS_ST_BODY_SELECT_APPLICATION"
+msgstr "Vælg program"
+
+msgid "IDS_ST_BODY_TAP_SHORTCUT_TO_ASSIGN_APPLICATION"
+msgstr "Tryk på genvej for at tildele program"
+
+msgid "IDS_ST_OPT_EDIT_SHORTCUTS"
+msgstr "Redigér genveje"
+
+msgid "IDS_IM_BODY_HELP_TEXT"
+msgstr "Hjælpetekst"
+
diff --git a/lock-setting/po/de_DE.po b/lock-setting/po/de_DE.po
new file mode 100644
index 0000000..70a4592
--- /dev/null
+++ b/lock-setting/po/de_DE.po
@@ -0,0 +1,54 @@
+msgid "IDS_ST_BODY_LOCK_SCREEN"
+msgstr "Sperrbildschirm"
+
+msgid "IDS_IDLE_BODY_VIEW_EVENT_NOTIFICATIONS_ON_THE_LOCK_SCREEN"
+msgstr "Ereignisbenachrichtigungen auf Sperrbildschirm anzeigen"
+
+msgid "IDS_IDLE_MBODY_EVENT_NOTIFICATIONS"
+msgstr "Ereignisbenachrichtig."
+
+msgid "IDS_ST_BODY_CLOCK"
+msgstr "Uhr"
+
+msgid "IDS_ST_BODY_WEATHER"
+msgstr "Wetter"
+
+msgid "IDS_ST_BODY_SET_SHORTCUTS_ON_LOCK_SCREEN"
+msgstr "Schnellzugriffe auf gesperrtem Bildschirm festlegen"
+
+msgid "IDS_ST_BODY_SHORTCUTS"
+msgstr "Schnellzugriffe"
+
+msgid "IDS_ST_BODY_DUAL_CLOCK"
+msgstr "Dual-Uhr"
+
+msgid "IDS_ST_BODY_SHOW_HELP_TEXT_ON_LOCK_SCREEN"
+msgstr "Hilfetext auf gesperrtem Bildschirm anzeigen"
+
+msgid "IDS_ST_BODY_SHOW_DUAL_CLOCK_ON_LOCK_SCREEN_WHEN_ROAMING"
+msgstr "Dual-Uhr beim Roaming auf gesperrtem Bildschirm anzeigen"
+
+msgid "IDS_ST_BODY_TAP_AND_HOLD_THE_SCREEN_WHILE_ROTATING_THE_DEVICE_TO_OPEN_CAMERA"
+msgstr "Tippen Sie auf den Bildschirm und halten Sie ihn, während Sie das Gerät drehen, um die Kamera zu öffnen."
+
+msgid "IDS_ST_MBODY_CAMERA_QUICK_ACCESS"
+msgstr "Kamera-Schnellzugriff"
+
+msgid "IDS_ST_BODY_SET_SHORTCUTS"
+msgstr "Schnellzugriffe festlegen"
+
+msgid "IDS_ST_BODY_DRAG_AND_DROP_TO_CHANGE_ORDER"
+msgstr "Ziehen und ablegen, um die Reihenfolge zu ändern."
+
+msgid "IDS_ST_BODY_SELECT_APPLICATION"
+msgstr "Anwendung auswählen"
+
+msgid "IDS_ST_BODY_TAP_SHORTCUT_TO_ASSIGN_APPLICATION"
+msgstr "Auf Shortcut tippen, um Anwendung zuzuweisen."
+
+msgid "IDS_ST_OPT_EDIT_SHORTCUTS"
+msgstr "Schnellzugriffe bearbeiten"
+
+msgid "IDS_IM_BODY_HELP_TEXT"
+msgstr "Hilfetext"
+
diff --git a/lock-setting/po/el_GR.po b/lock-setting/po/el_GR.po
new file mode 100644
index 0000000..151b419
--- /dev/null
+++ b/lock-setting/po/el_GR.po
@@ -0,0 +1,54 @@
+msgid "IDS_ST_BODY_LOCK_SCREEN"
+msgstr "Οθόνη κλειδώματος"
+
+msgid "IDS_IDLE_BODY_VIEW_EVENT_NOTIFICATIONS_ON_THE_LOCK_SCREEN"
+msgstr "Προβολή ειδοποιήσεων συμβάντων στην οθόνη κλειδώματος"
+
+msgid "IDS_IDLE_MBODY_EVENT_NOTIFICATIONS"
+msgstr "Ειδοποιήσεις συμβάντων"
+
+msgid "IDS_ST_BODY_CLOCK"
+msgstr "Ρολόι"
+
+msgid "IDS_ST_BODY_WEATHER"
+msgstr "Καιρός"
+
+msgid "IDS_ST_BODY_SET_SHORTCUTS_ON_LOCK_SCREEN"
+msgstr "Ρύθμιση συντομεύσεων στην οθόνη κλειδώματος"
+
+msgid "IDS_ST_BODY_SHORTCUTS"
+msgstr "Συντομεύσεις"
+
+msgid "IDS_ST_BODY_DUAL_CLOCK"
+msgstr "Διπλό ρολόι"
+
+msgid "IDS_ST_BODY_SHOW_HELP_TEXT_ON_LOCK_SCREEN"
+msgstr "Εμφάνιση κειμένου βοήθειας στην οθόνη κλειδώματος"
+
+msgid "IDS_ST_BODY_SHOW_DUAL_CLOCK_ON_LOCK_SCREEN_WHEN_ROAMING"
+msgstr "Εμφάνιση διπλού ρολογιού στην οθόνη κλειδώματος κατά την περιαγωγή"
+
+msgid "IDS_ST_BODY_TAP_AND_HOLD_THE_SCREEN_WHILE_ROTATING_THE_DEVICE_TO_OPEN_CAMERA"
+msgstr "Πατήστε παρατεταμένα στην οθόνη και κατά την περιστροφή της συσκευής για να ανοίξετε την Κάμερα"
+
+msgid "IDS_ST_MBODY_CAMERA_QUICK_ACCESS"
+msgstr "Γρήγορη πρόσβαση κάμερας"
+
+msgid "IDS_ST_BODY_SET_SHORTCUTS"
+msgstr "Ρύθμιση συντομεύσεων"
+
+msgid "IDS_ST_BODY_DRAG_AND_DROP_TO_CHANGE_ORDER"
+msgstr "Μεταφέρετε και αποθέστε για να αλλάξετε τη σειρά"
+
+msgid "IDS_ST_BODY_SELECT_APPLICATION"
+msgstr "Επιλογή εφαρμογής"
+
+msgid "IDS_ST_BODY_TAP_SHORTCUT_TO_ASSIGN_APPLICATION"
+msgstr "Πατήστε τη συντόμευση για αντιστοίχιση εφαρμογής"
+
+msgid "IDS_ST_OPT_EDIT_SHORTCUTS"
+msgstr "Επεξεργασία συντομεύσεων"
+
+msgid "IDS_IM_BODY_HELP_TEXT"
+msgstr "Κείμενο βοήθειας"
+
diff --git a/lock-setting/po/en.po b/lock-setting/po/en.po
new file mode 100644
index 0000000..5c14712
--- /dev/null
+++ b/lock-setting/po/en.po
@@ -0,0 +1,54 @@
+msgid "IDS_ST_BODY_LOCK_SCREEN"
+msgstr "Lock screen"
+
+msgid "IDS_IDLE_BODY_VIEW_EVENT_NOTIFICATIONS_ON_THE_LOCK_SCREEN"
+msgstr "View event notifications on the lock screen"
+
+msgid "IDS_IDLE_MBODY_EVENT_NOTIFICATIONS"
+msgstr "Event notifications"
+
+msgid "IDS_ST_BODY_CLOCK"
+msgstr "Clock"
+
+msgid "IDS_ST_BODY_WEATHER"
+msgstr "Weather"
+
+msgid "IDS_ST_BODY_SET_SHORTCUTS_ON_LOCK_SCREEN"
+msgstr "Set shortcuts on lock screen"
+
+msgid "IDS_ST_BODY_SHORTCUTS"
+msgstr "Shortcuts"
+
+msgid "IDS_ST_BODY_DUAL_CLOCK"
+msgstr "Dual clock"
+
+msgid "IDS_ST_BODY_SHOW_HELP_TEXT_ON_LOCK_SCREEN"
+msgstr "Show help text on lock screen"
+
+msgid "IDS_ST_BODY_SHOW_DUAL_CLOCK_ON_LOCK_SCREEN_WHEN_ROAMING"
+msgstr "Show dual clock on lock screen when roaming"
+
+msgid "IDS_ST_BODY_TAP_AND_HOLD_THE_SCREEN_WHILE_ROTATING_THE_DEVICE_TO_OPEN_CAMERA"
+msgstr "Tap and hold the screen while rotating the device to open Camera"
+
+msgid "IDS_ST_MBODY_CAMERA_QUICK_ACCESS"
+msgstr "Camera quick access"
+
+msgid "IDS_ST_BODY_SET_SHORTCUTS"
+msgstr "Set shortcuts"
+
+msgid "IDS_ST_BODY_DRAG_AND_DROP_TO_CHANGE_ORDER"
+msgstr "Drag and drop to change order"
+
+msgid "IDS_ST_BODY_SELECT_APPLICATION"
+msgstr "Select application"
+
+msgid "IDS_ST_BODY_TAP_SHORTCUT_TO_ASSIGN_APPLICATION"
+msgstr "Tap shortcut to assign application"
+
+msgid "IDS_ST_OPT_EDIT_SHORTCUTS"
+msgstr "Edit shortcuts"
+
+msgid "IDS_IM_BODY_HELP_TEXT"
+msgstr "Help text"
+
diff --git a/lock-setting/po/en_PH.po b/lock-setting/po/en_PH.po
new file mode 100644
index 0000000..5c14712
--- /dev/null
+++ b/lock-setting/po/en_PH.po
@@ -0,0 +1,54 @@
+msgid "IDS_ST_BODY_LOCK_SCREEN"
+msgstr "Lock screen"
+
+msgid "IDS_IDLE_BODY_VIEW_EVENT_NOTIFICATIONS_ON_THE_LOCK_SCREEN"
+msgstr "View event notifications on the lock screen"
+
+msgid "IDS_IDLE_MBODY_EVENT_NOTIFICATIONS"
+msgstr "Event notifications"
+
+msgid "IDS_ST_BODY_CLOCK"
+msgstr "Clock"
+
+msgid "IDS_ST_BODY_WEATHER"
+msgstr "Weather"
+
+msgid "IDS_ST_BODY_SET_SHORTCUTS_ON_LOCK_SCREEN"
+msgstr "Set shortcuts on lock screen"
+
+msgid "IDS_ST_BODY_SHORTCUTS"
+msgstr "Shortcuts"
+
+msgid "IDS_ST_BODY_DUAL_CLOCK"
+msgstr "Dual clock"
+
+msgid "IDS_ST_BODY_SHOW_HELP_TEXT_ON_LOCK_SCREEN"
+msgstr "Show help text on lock screen"
+
+msgid "IDS_ST_BODY_SHOW_DUAL_CLOCK_ON_LOCK_SCREEN_WHEN_ROAMING"
+msgstr "Show dual clock on lock screen when roaming"
+
+msgid "IDS_ST_BODY_TAP_AND_HOLD_THE_SCREEN_WHILE_ROTATING_THE_DEVICE_TO_OPEN_CAMERA"
+msgstr "Tap and hold the screen while rotating the device to open Camera"
+
+msgid "IDS_ST_MBODY_CAMERA_QUICK_ACCESS"
+msgstr "Camera quick access"
+
+msgid "IDS_ST_BODY_SET_SHORTCUTS"
+msgstr "Set shortcuts"
+
+msgid "IDS_ST_BODY_DRAG_AND_DROP_TO_CHANGE_ORDER"
+msgstr "Drag and drop to change order"
+
+msgid "IDS_ST_BODY_SELECT_APPLICATION"
+msgstr "Select application"
+
+msgid "IDS_ST_BODY_TAP_SHORTCUT_TO_ASSIGN_APPLICATION"
+msgstr "Tap shortcut to assign application"
+
+msgid "IDS_ST_OPT_EDIT_SHORTCUTS"
+msgstr "Edit shortcuts"
+
+msgid "IDS_IM_BODY_HELP_TEXT"
+msgstr "Help text"
+
diff --git a/lock-setting/po/en_US.po b/lock-setting/po/en_US.po
new file mode 100644
index 0000000..a1db6bc
--- /dev/null
+++ b/lock-setting/po/en_US.po
@@ -0,0 +1,54 @@
+msgid "IDS_ST_BODY_LOCK_SCREEN"
+msgstr "Lock screen"
+
+msgid "IDS_IDLE_BODY_VIEW_EVENT_NOTIFICATIONS_ON_THE_LOCK_SCREEN"
+msgstr "View event notifications on the lock screen"
+
+msgid "IDS_IDLE_MBODY_EVENT_NOTIFICATIONS"
+msgstr "Event notifications"
+
+msgid "IDS_ST_BODY_CLOCK"
+msgstr "Clock"
+
+msgid "IDS_ST_BODY_WEATHER"
+msgstr "Weather"
+
+msgid "IDS_ST_BODY_SET_SHORTCUTS_ON_LOCK_SCREEN"
+msgstr "Set shortcuts on lock screen."
+
+msgid "IDS_ST_BODY_SHORTCUTS"
+msgstr "Shortcuts"
+
+msgid "IDS_ST_BODY_DUAL_CLOCK"
+msgstr "Dual clock"
+
+msgid "IDS_ST_BODY_SHOW_HELP_TEXT_ON_LOCK_SCREEN"
+msgstr "Show help text on lock screen."
+
+msgid "IDS_ST_BODY_SHOW_DUAL_CLOCK_ON_LOCK_SCREEN_WHEN_ROAMING"
+msgstr "Show dual clock on lock screen when roaming."
+
+msgid "IDS_ST_BODY_TAP_AND_HOLD_THE_SCREEN_WHILE_ROTATING_THE_DEVICE_TO_OPEN_CAMERA"
+msgstr "Tap and hold the screen while rotating the device to open Camera"
+
+msgid "IDS_ST_MBODY_CAMERA_QUICK_ACCESS"
+msgstr "Camera quick access"
+
+msgid "IDS_ST_BODY_SET_SHORTCUTS"
+msgstr "Set shortcuts"
+
+msgid "IDS_ST_BODY_DRAG_AND_DROP_TO_CHANGE_ORDER"
+msgstr "Drag and drop to change order"
+
+msgid "IDS_ST_BODY_SELECT_APPLICATION"
+msgstr "Select application"
+
+msgid "IDS_ST_BODY_TAP_SHORTCUT_TO_ASSIGN_APPLICATION"
+msgstr "Tap shortcut to assign application"
+
+msgid "IDS_ST_OPT_EDIT_SHORTCUTS"
+msgstr "Edit shortcuts"
+
+msgid "IDS_IM_BODY_HELP_TEXT"
+msgstr "Help text"
+
diff --git a/lock-setting/po/es_ES.po b/lock-setting/po/es_ES.po
new file mode 100644
index 0000000..407f8d7
--- /dev/null
+++ b/lock-setting/po/es_ES.po
@@ -0,0 +1,54 @@
+msgid "IDS_ST_BODY_LOCK_SCREEN"
+msgstr "Pantalla de bloqueo"
+
+msgid "IDS_IDLE_BODY_VIEW_EVENT_NOTIFICATIONS_ON_THE_LOCK_SCREEN"
+msgstr "Ver notificaciones de eventos en la pantalla de bloqueo"
+
+msgid "IDS_IDLE_MBODY_EVENT_NOTIFICATIONS"
+msgstr "Notificaciones de evento"
+
+msgid "IDS_ST_BODY_CLOCK"
+msgstr "Reloj"
+
+msgid "IDS_ST_BODY_WEATHER"
+msgstr "Clima"
+
+msgid "IDS_ST_BODY_SET_SHORTCUTS_ON_LOCK_SCREEN"
+msgstr "Definir accesos directos en pantalla de bloqueo"
+
+msgid "IDS_ST_BODY_SHORTCUTS"
+msgstr "Accesos directos"
+
+msgid "IDS_ST_BODY_DUAL_CLOCK"
+msgstr "Reloj dual"
+
+msgid "IDS_ST_BODY_SHOW_HELP_TEXT_ON_LOCK_SCREEN"
+msgstr "Mostrar texto de ayuda en pantalla de bloqueo"
+
+msgid "IDS_ST_BODY_SHOW_DUAL_CLOCK_ON_LOCK_SCREEN_WHEN_ROAMING"
+msgstr "Mostrar reloj dual en pantalla de bloqueo en itinerancia"
+
+msgid "IDS_ST_BODY_TAP_AND_HOLD_THE_SCREEN_WHILE_ROTATING_THE_DEVICE_TO_OPEN_CAMERA"
+msgstr "Mantenga pulsada la pantalla mientras gira el dispositivo para abrir la Cámara"
+
+msgid "IDS_ST_MBODY_CAMERA_QUICK_ACCESS"
+msgstr "Acceso rápido a Cámara"
+
+msgid "IDS_ST_BODY_SET_SHORTCUTS"
+msgstr "Definir accesos directos"
+
+msgid "IDS_ST_BODY_DRAG_AND_DROP_TO_CHANGE_ORDER"
+msgstr "Arrastrar y soltar para cambiar el orden"
+
+msgid "IDS_ST_BODY_SELECT_APPLICATION"
+msgstr "Seleccionar aplicación"
+
+msgid "IDS_ST_BODY_TAP_SHORTCUT_TO_ASSIGN_APPLICATION"
+msgstr "Toque el acceso directo para asignar la aplicación"
+
+msgid "IDS_ST_OPT_EDIT_SHORTCUTS"
+msgstr "Editar accesos directos"
+
+msgid "IDS_IM_BODY_HELP_TEXT"
+msgstr "Texto de ayuda"
+
diff --git a/lock-setting/po/es_MX.po b/lock-setting/po/es_MX.po
new file mode 100644
index 0000000..a3ce4bd
--- /dev/null
+++ b/lock-setting/po/es_MX.po
@@ -0,0 +1,54 @@
+msgid "IDS_ST_BODY_LOCK_SCREEN"
+msgstr "Bloqueo de pantalla"
+
+msgid "IDS_IDLE_BODY_VIEW_EVENT_NOTIFICATIONS_ON_THE_LOCK_SCREEN"
+msgstr "Ver las notificaciones de eventos en la pantalla de bloqueo"
+
+msgid "IDS_IDLE_MBODY_EVENT_NOTIFICATIONS"
+msgstr "Notificaciones de eventos"
+
+msgid "IDS_ST_BODY_CLOCK"
+msgstr "Reloj"
+
+msgid "IDS_ST_BODY_WEATHER"
+msgstr "Clima"
+
+msgid "IDS_ST_BODY_SET_SHORTCUTS_ON_LOCK_SCREEN"
+msgstr "Definir atajos en pantalla bloqueada"
+
+msgid "IDS_ST_BODY_SHORTCUTS"
+msgstr "Atajos"
+
+msgid "IDS_ST_BODY_DUAL_CLOCK"
+msgstr "Reloj dual"
+
+msgid "IDS_ST_BODY_SHOW_HELP_TEXT_ON_LOCK_SCREEN"
+msgstr "Mostrar texto de ayuda en pantalla bloqueada"
+
+msgid "IDS_ST_BODY_SHOW_DUAL_CLOCK_ON_LOCK_SCREEN_WHEN_ROAMING"
+msgstr "Mostrar el reloj dual en la pantalla bloqueada durante el roaming"
+
+msgid "IDS_ST_BODY_TAP_AND_HOLD_THE_SCREEN_WHILE_ROTATING_THE_DEVICE_TO_OPEN_CAMERA"
+msgstr "Mantenga pulsada la pantalla mientras gira el dispositivo para abrir la Cámara"
+
+msgid "IDS_ST_MBODY_CAMERA_QUICK_ACCESS"
+msgstr "Acceso rápido a cámara"
+
+msgid "IDS_ST_BODY_SET_SHORTCUTS"
+msgstr "Configurar atajos"
+
+msgid "IDS_ST_BODY_DRAG_AND_DROP_TO_CHANGE_ORDER"
+msgstr "Arrastre y coloque para cambiar el orden"
+
+msgid "IDS_ST_BODY_SELECT_APPLICATION"
+msgstr "Seleccionar aplicación"
+
+msgid "IDS_ST_BODY_TAP_SHORTCUT_TO_ASSIGN_APPLICATION"
+msgstr "Pulse el atajo para asignar la aplicación"
+
+msgid "IDS_ST_OPT_EDIT_SHORTCUTS"
+msgstr "Editar atajos"
+
+msgid "IDS_IM_BODY_HELP_TEXT"
+msgstr "Texto de ayuda"
+
diff --git a/lock-setting/po/es_US.po b/lock-setting/po/es_US.po
new file mode 100644
index 0000000..43a19d9
--- /dev/null
+++ b/lock-setting/po/es_US.po
@@ -0,0 +1,51 @@
+msgid "IDS_IDLE_BODY_VIEW_EVENT_NOTIFICATIONS_ON_THE_LOCK_SCREEN"
+msgstr "Ver las notificaciones de eventos en la pantalla de bloqueo"
+
+msgid "IDS_IDLE_MBODY_EVENT_NOTIFICATIONS"
+msgstr "Notificaciones de eventos"
+
+msgid "IDS_ST_BODY_CLOCK"
+msgstr "Reloj"
+
+msgid "IDS_ST_BODY_WEATHER"
+msgstr "Clima"
+
+msgid "IDS_ST_BODY_SET_SHORTCUTS_ON_LOCK_SCREEN"
+msgstr "Definir atajos en pantalla bloqueada"
+
+msgid "IDS_ST_BODY_SHORTCUTS"
+msgstr "Atajos"
+
+msgid "IDS_ST_BODY_DUAL_CLOCK"
+msgstr "Reloj dual"
+
+msgid "IDS_ST_BODY_SHOW_HELP_TEXT_ON_LOCK_SCREEN"
+msgstr "Mostrar texto de ayuda en pantalla bloqueada"
+
+msgid "IDS_ST_BODY_SHOW_DUAL_CLOCK_ON_LOCK_SCREEN_WHEN_ROAMING"
+msgstr "Mostrar el reloj dual en la pantalla bloqueada durante el roaming"
+
+msgid "IDS_ST_BODY_TAP_AND_HOLD_THE_SCREEN_WHILE_ROTATING_THE_DEVICE_TO_OPEN_CAMERA"
+msgstr "Mantenga pulsada la pantalla mientras gira el dispositivo para abrir la Cámara"
+
+msgid "IDS_ST_MBODY_CAMERA_QUICK_ACCESS"
+msgstr "Acceso rápido a cámara"
+
+msgid "IDS_ST_BODY_SET_SHORTCUTS"
+msgstr "Configurar atajos"
+
+msgid "IDS_ST_BODY_DRAG_AND_DROP_TO_CHANGE_ORDER"
+msgstr "Arrastre y coloque para cambiar el orden"
+
+msgid "IDS_ST_BODY_SELECT_APPLICATION"
+msgstr "Seleccionar aplicación"
+
+msgid "IDS_ST_BODY_TAP_SHORTCUT_TO_ASSIGN_APPLICATION"
+msgstr "Pulse el atajo para asignar la aplicación"
+
+msgid "IDS_ST_OPT_EDIT_SHORTCUTS"
+msgstr "Editar atajos"
+
+msgid "IDS_IM_BODY_HELP_TEXT"
+msgstr "Texto de ayuda"
+
diff --git a/lock-setting/po/et.po b/lock-setting/po/et.po
new file mode 100644
index 0000000..073973f
--- /dev/null
+++ b/lock-setting/po/et.po
@@ -0,0 +1,54 @@
+msgid "IDS_ST_BODY_LOCK_SCREEN"
+msgstr "Lukusta ekraan"
+
+msgid "IDS_IDLE_BODY_VIEW_EVENT_NOTIFICATIONS_ON_THE_LOCK_SCREEN"
+msgstr "Vaadake sündmuste teavitusi lukustatud ekraanil"
+
+msgid "IDS_IDLE_MBODY_EVENT_NOTIFICATIONS"
+msgstr "Sündmuse teavitused"
+
+msgid "IDS_ST_BODY_CLOCK"
+msgstr "Kell"
+
+msgid "IDS_ST_BODY_WEATHER"
+msgstr "Ilm"
+
+msgid "IDS_ST_BODY_SET_SHORTCUTS_ON_LOCK_SCREEN"
+msgstr "Määra otseteed lukustusekraanil"
+
+msgid "IDS_ST_BODY_SHORTCUTS"
+msgstr "Otseteed"
+
+msgid "IDS_ST_BODY_DUAL_CLOCK"
+msgstr "Kaksikkell"
+
+msgid "IDS_ST_BODY_SHOW_HELP_TEXT_ON_LOCK_SCREEN"
+msgstr "Näita spikrit lukustusekraanil"
+
+msgid "IDS_ST_BODY_SHOW_DUAL_CLOCK_ON_LOCK_SCREEN_WHEN_ROAMING"
+msgstr "Kuva rändluse ajal lukustusekraanil kaksikkell"
+
+msgid "IDS_ST_BODY_TAP_AND_HOLD_THE_SCREEN_WHILE_ROTATING_THE_DEVICE_TO_OPEN_CAMERA"
+msgstr "Kaamera avamiseks toksake ja hoidke sõrme ekraanil ning samal ajal pöörake seadet"
+
+msgid "IDS_ST_MBODY_CAMERA_QUICK_ACCESS"
+msgstr "Kiirjuurdepääs kaamerale"
+
+msgid "IDS_ST_BODY_SET_SHORTCUTS"
+msgstr "Määra otseteed"
+
+msgid "IDS_ST_BODY_DRAG_AND_DROP_TO_CHANGE_ORDER"
+msgstr "Lohistage, et muuta järjestust"
+
+msgid "IDS_ST_BODY_SELECT_APPLICATION"
+msgstr "Vali rakendus"
+
+msgid "IDS_ST_BODY_TAP_SHORTCUT_TO_ASSIGN_APPLICATION"
+msgstr "Toksake otseteed, et määrata rakendust"
+
+msgid "IDS_ST_OPT_EDIT_SHORTCUTS"
+msgstr "Muuda otseteid"
+
+msgid "IDS_IM_BODY_HELP_TEXT"
+msgstr "Spikker"
+
diff --git a/lock-setting/po/eu.po b/lock-setting/po/eu.po
new file mode 100644
index 0000000..8ba1000
--- /dev/null
+++ b/lock-setting/po/eu.po
@@ -0,0 +1,54 @@
+msgid "IDS_ST_BODY_LOCK_SCREEN"
+msgstr "Blokeatu pantaila"
+
+msgid "IDS_IDLE_BODY_VIEW_EVENT_NOTIFICATIONS_ON_THE_LOCK_SCREEN"
+msgstr "Ikusi gertaeren jakinarazpenak blokeo pantailan"
+
+msgid "IDS_IDLE_MBODY_EVENT_NOTIFICATIONS"
+msgstr "Gertaeren jakinarazpenak"
+
+msgid "IDS_ST_BODY_CLOCK"
+msgstr "Ordularia"
+
+msgid "IDS_ST_BODY_WEATHER"
+msgstr "Eguraldia"
+
+msgid "IDS_ST_BODY_SET_SHORTCUTS_ON_LOCK_SCREEN"
+msgstr "Ezarri lasterbideak blokeo pantailan"
+
+msgid "IDS_ST_BODY_SHORTCUTS"
+msgstr "Sarrera zuzenak"
+
+msgid "IDS_ST_BODY_DUAL_CLOCK"
+msgstr "Erloju duala"
+
+msgid "IDS_ST_BODY_SHOW_HELP_TEXT_ON_LOCK_SCREEN"
+msgstr "Erakutsi laguntza testua blokeo pantailan"
+
+msgid "IDS_ST_BODY_SHOW_DUAL_CLOCK_ON_LOCK_SCREEN_WHEN_ROAMING"
+msgstr "Erakutsi erloju duala blokeo pantailan ibiltaritzan"
+
+msgid "IDS_ST_BODY_TAP_AND_HOLD_THE_SCREEN_WHILE_ROTATING_THE_DEVICE_TO_OPEN_CAMERA"
+msgstr "Ukitu eta eutsi pantaila gailua biratu bitartean Kamera irekitzeko"
+
+msgid "IDS_ST_MBODY_CAMERA_QUICK_ACCESS"
+msgstr "Kameraren sarbide azkarra"
+
+msgid "IDS_ST_BODY_SET_SHORTCUTS"
+msgstr "Ezarri lasterbideak"
+
+msgid "IDS_ST_BODY_DRAG_AND_DROP_TO_CHANGE_ORDER"
+msgstr "Arrastatu eta jaregin ordena aldatzeko"
+
+msgid "IDS_ST_BODY_SELECT_APPLICATION"
+msgstr "Hautatu aplikazioa"
+
+msgid "IDS_ST_BODY_TAP_SHORTCUT_TO_ASSIGN_APPLICATION"
+msgstr "Ukitu lasterbidea aplikazioa esleitzeko"
+
+msgid "IDS_ST_OPT_EDIT_SHORTCUTS"
+msgstr "Editatu lasterbideak"
+
+msgid "IDS_IM_BODY_HELP_TEXT"
+msgstr "Laguntza testua"
+
diff --git a/lock-setting/po/fi.po b/lock-setting/po/fi.po
new file mode 100644
index 0000000..856e0a0
--- /dev/null
+++ b/lock-setting/po/fi.po
@@ -0,0 +1,54 @@
+msgid "IDS_ST_BODY_LOCK_SCREEN"
+msgstr "Lukitusnäyttö"
+
+msgid "IDS_IDLE_BODY_VIEW_EVENT_NOTIFICATIONS_ON_THE_LOCK_SCREEN"
+msgstr "Näytä tapahtumailmoitukset lukitusnäytössä"
+
+msgid "IDS_IDLE_MBODY_EVENT_NOTIFICATIONS"
+msgstr "Tapahtumailmoitukset"
+
+msgid "IDS_ST_BODY_CLOCK"
+msgstr "Kello"
+
+msgid "IDS_ST_BODY_WEATHER"
+msgstr "Sää"
+
+msgid "IDS_ST_BODY_SET_SHORTCUTS_ON_LOCK_SCREEN"
+msgstr "Määritä pikanäppäimet lukitusnäytössä"
+
+msgid "IDS_ST_BODY_SHORTCUTS"
+msgstr "Pikanäppäimet"
+
+msgid "IDS_ST_BODY_DUAL_CLOCK"
+msgstr "Kaksoiskello"
+
+msgid "IDS_ST_BODY_SHOW_HELP_TEXT_ON_LOCK_SCREEN"
+msgstr "Ohjetekstin näyttäminen lukitusnäytössä"
+
+msgid "IDS_ST_BODY_SHOW_DUAL_CLOCK_ON_LOCK_SCREEN_WHEN_ROAMING"
+msgstr "Näytä kaksoiskello lukitusnäytössä verkkovierailun aikana"
+
+msgid "IDS_ST_BODY_TAP_AND_HOLD_THE_SCREEN_WHILE_ROTATING_THE_DEVICE_TO_OPEN_CAMERA"
+msgstr "Avaa kamera painamalla näyttöä jonkin aikaa ja kiertämällä samalla laitetta"
+
+msgid "IDS_ST_MBODY_CAMERA_QUICK_ACCESS"
+msgstr "Kameran pikakäyttö"
+
+msgid "IDS_ST_BODY_SET_SHORTCUTS"
+msgstr "Määritä pikavalinnat"
+
+msgid "IDS_ST_BODY_DRAG_AND_DROP_TO_CHANGE_ORDER"
+msgstr "Muuta järjestystä vetämällä ja pudottamalla"
+
+msgid "IDS_ST_BODY_SELECT_APPLICATION"
+msgstr "Valitse sovellus"
+
+msgid "IDS_ST_BODY_TAP_SHORTCUT_TO_ASSIGN_APPLICATION"
+msgstr "Määritä sovellus napauttamalla pikakuvaketta"
+
+msgid "IDS_ST_OPT_EDIT_SHORTCUTS"
+msgstr "Muokkaa pikavalintoja"
+
+msgid "IDS_IM_BODY_HELP_TEXT"
+msgstr "Ohjeteksti"
+
diff --git a/lock-setting/po/fr_CA.po b/lock-setting/po/fr_CA.po
new file mode 100644
index 0000000..6982f65
--- /dev/null
+++ b/lock-setting/po/fr_CA.po
@@ -0,0 +1,54 @@
+msgid "IDS_ST_BODY_LOCK_SCREEN"
+msgstr "Écran verrouillé"
+
+msgid "IDS_IDLE_BODY_VIEW_EVENT_NOTIFICATIONS_ON_THE_LOCK_SCREEN"
+msgstr "Voir les notifications d'évènements sur l'écran de verrouillage"
+
+msgid "IDS_IDLE_MBODY_EVENT_NOTIFICATIONS"
+msgstr "Notifications évènements"
+
+msgid "IDS_ST_BODY_CLOCK"
+msgstr "Horloge"
+
+msgid "IDS_ST_BODY_WEATHER"
+msgstr "Météo"
+
+msgid "IDS_ST_BODY_SET_SHORTCUTS_ON_LOCK_SCREEN"
+msgstr "Sélectionner les raccourcis sur l'écran de verrouillage"
+
+msgid "IDS_ST_BODY_SHORTCUTS"
+msgstr "Raccourcis"
+
+msgid "IDS_ST_BODY_DUAL_CLOCK"
+msgstr "Deux horloges"
+
+msgid "IDS_ST_BODY_SHOW_HELP_TEXT_ON_LOCK_SCREEN"
+msgstr "Afficher texte d'aide sur l'écran de verrouillage"
+
+msgid "IDS_ST_BODY_SHOW_DUAL_CLOCK_ON_LOCK_SCREEN_WHEN_ROAMING"
+msgstr "Afficher double horloge sur l'écran de verrouillage en itinérance"
+
+msgid "IDS_ST_BODY_TAP_AND_HOLD_THE_SCREEN_WHILE_ROTATING_THE_DEVICE_TO_OPEN_CAMERA"
+msgstr "Touchez longuement l'écran et faites pivoter l'appareil pour lancer l'appareil photo"
+
+msgid "IDS_ST_MBODY_CAMERA_QUICK_ACCESS"
+msgstr "Accès rapide app. photo"
+
+msgid "IDS_ST_BODY_SET_SHORTCUTS"
+msgstr "Définir des raccourcis"
+
+msgid "IDS_ST_BODY_DRAG_AND_DROP_TO_CHANGE_ORDER"
+msgstr "Glisser et déposer pour modifier l'ordre"
+
+msgid "IDS_ST_BODY_SELECT_APPLICATION"
+msgstr "Sélectionnez une application"
+
+msgid "IDS_ST_BODY_TAP_SHORTCUT_TO_ASSIGN_APPLICATION"
+msgstr "Touchez le raccourci pour l'affecter à l'application"
+
+msgid "IDS_ST_OPT_EDIT_SHORTCUTS"
+msgstr "Modifier les raccourcis"
+
+msgid "IDS_IM_BODY_HELP_TEXT"
+msgstr "Texte d'aide"
+
diff --git a/lock-setting/po/fr_FR.po b/lock-setting/po/fr_FR.po
new file mode 100644
index 0000000..0ffb78b
--- /dev/null
+++ b/lock-setting/po/fr_FR.po
@@ -0,0 +1,54 @@
+msgid "IDS_ST_BODY_LOCK_SCREEN"
+msgstr "Écran de verrouillage"
+
+msgid "IDS_IDLE_BODY_VIEW_EVENT_NOTIFICATIONS_ON_THE_LOCK_SCREEN"
+msgstr "Voir les notifications d'événements sur l'écran de verrouillage"
+
+msgid "IDS_IDLE_MBODY_EVENT_NOTIFICATIONS"
+msgstr "Notifications événements"
+
+msgid "IDS_ST_BODY_CLOCK"
+msgstr "Horloge"
+
+msgid "IDS_ST_BODY_WEATHER"
+msgstr "Météo"
+
+msgid "IDS_ST_BODY_SET_SHORTCUTS_ON_LOCK_SCREEN"
+msgstr "Définir les raccourcis à afficher sur l'écran de verrouillage"
+
+msgid "IDS_ST_BODY_SHORTCUTS"
+msgstr "Raccourcis"
+
+msgid "IDS_ST_BODY_DUAL_CLOCK"
+msgstr "Double horloge"
+
+msgid "IDS_ST_BODY_SHOW_HELP_TEXT_ON_LOCK_SCREEN"
+msgstr "Afficher le texte d'aide au déverrouillage sur l'écran"
+
+msgid "IDS_ST_BODY_SHOW_DUAL_CLOCK_ON_LOCK_SCREEN_WHEN_ROAMING"
+msgstr "Afficher la double horloge sur l'écran de verrouillage en itinérance"
+
+msgid "IDS_ST_BODY_TAP_AND_HOLD_THE_SCREEN_WHILE_ROTATING_THE_DEVICE_TO_OPEN_CAMERA"
+msgstr "Maintenez votre doigt appuyé sur l'écran et faites pivoter l'appareil pour ouvrir l'appareil photo"
+
+msgid "IDS_ST_MBODY_CAMERA_QUICK_ACCESS"
+msgstr "Accès rapide app. photo"
+
+msgid "IDS_ST_BODY_SET_SHORTCUTS"
+msgstr "Définir des raccourcis"
+
+msgid "IDS_ST_BODY_DRAG_AND_DROP_TO_CHANGE_ORDER"
+msgstr "Glisser et déposer pour modifier l'ordre"
+
+msgid "IDS_ST_BODY_SELECT_APPLICATION"
+msgstr "Sélectionnez une application"
+
+msgid "IDS_ST_BODY_TAP_SHORTCUT_TO_ASSIGN_APPLICATION"
+msgstr "Appuyez sur le raccourci pour l'affecter à l'application"
+
+msgid "IDS_ST_OPT_EDIT_SHORTCUTS"
+msgstr "Modifier les raccourcis"
+
+msgid "IDS_IM_BODY_HELP_TEXT"
+msgstr "Texte d'aide"
+
diff --git a/lock-setting/po/ga.po b/lock-setting/po/ga.po
new file mode 100644
index 0000000..54b0785
--- /dev/null
+++ b/lock-setting/po/ga.po
@@ -0,0 +1,54 @@
+msgid "IDS_ST_BODY_LOCK_SCREEN"
+msgstr "Glasáil an scáileán"
+
+msgid "IDS_IDLE_BODY_VIEW_EVENT_NOTIFICATIONS_ON_THE_LOCK_SCREEN"
+msgstr "Amharc ar fhógraí imeachta ar an scáileán glasála"
+
+msgid "IDS_IDLE_MBODY_EVENT_NOTIFICATIONS"
+msgstr "Fógra faoi imeachtaí"
+
+msgid "IDS_ST_BODY_CLOCK"
+msgstr "Clog"
+
+msgid "IDS_ST_BODY_WEATHER"
+msgstr "Aimsir"
+
+msgid "IDS_ST_BODY_SET_SHORTCUTS_ON_LOCK_SCREEN"
+msgstr "Socraigh aicearraí ar an scáileán glasála"
+
+msgid "IDS_ST_BODY_SHORTCUTS"
+msgstr "Aicearraí"
+
+msgid "IDS_ST_BODY_DUAL_CLOCK"
+msgstr "Déchlog"
+
+msgid "IDS_ST_BODY_SHOW_HELP_TEXT_ON_LOCK_SCREEN"
+msgstr "Taispeáin téacs cabhrach ar an scáileán glasála"
+
+msgid "IDS_ST_BODY_SHOW_DUAL_CLOCK_ON_LOCK_SCREEN_WHEN_ROAMING"
+msgstr "Taispeáin déchlog ar an scáileáin glasála le linn fánaíocht"
+
+msgid "IDS_ST_BODY_TAP_AND_HOLD_THE_SCREEN_WHILE_ROTATING_THE_DEVICE_TO_OPEN_CAMERA"
+msgstr "Tapáil agus coinnigh an scáileán agus an gléas á rothlú le Ceamara a oscailt"
+
+msgid "IDS_ST_MBODY_CAMERA_QUICK_ACCESS"
+msgstr "Mear-rochtain ar cheamara"
+
+msgid "IDS_ST_BODY_SET_SHORTCUTS"
+msgstr "Socraigh aicearraí"
+
+msgid "IDS_ST_BODY_DRAG_AND_DROP_TO_CHANGE_ORDER"
+msgstr "Tarraing agus scaoil leis an ord a athrú"
+
+msgid "IDS_ST_BODY_SELECT_APPLICATION"
+msgstr "Roghnaigh feidhmchlár"
+
+msgid "IDS_ST_BODY_TAP_SHORTCUT_TO_ASSIGN_APPLICATION"
+msgstr "Tapáil aicearra le feidhmchlár a shannadh"
+
+msgid "IDS_ST_OPT_EDIT_SHORTCUTS"
+msgstr "Cuir aicearraí in eagar"
+
+msgid "IDS_IM_BODY_HELP_TEXT"
+msgstr "Téacs cabhrach"
+
diff --git a/lock-setting/po/gl.po b/lock-setting/po/gl.po
new file mode 100644
index 0000000..d1f01aa
--- /dev/null
+++ b/lock-setting/po/gl.po
@@ -0,0 +1,54 @@
+msgid "IDS_ST_BODY_LOCK_SCREEN"
+msgstr "Bloquear pantalla"
+
+msgid "IDS_IDLE_BODY_VIEW_EVENT_NOTIFICATIONS_ON_THE_LOCK_SCREEN"
+msgstr "Ver notificacións de eventos na pantalla de bloqueo"
+
+msgid "IDS_IDLE_MBODY_EVENT_NOTIFICATIONS"
+msgstr "Notificacións de eventos"
+
+msgid "IDS_ST_BODY_CLOCK"
+msgstr "Reloxo"
+
+msgid "IDS_ST_BODY_WEATHER"
+msgstr "Tempo"
+
+msgid "IDS_ST_BODY_SET_SHORTCUTS_ON_LOCK_SCREEN"
+msgstr "Definir os atallos na pantalla de bloqueo"
+
+msgid "IDS_ST_BODY_SHORTCUTS"
+msgstr "Atallos"
+
+msgid "IDS_ST_BODY_DUAL_CLOCK"
+msgstr "Reloxo dual"
+
+msgid "IDS_ST_BODY_SHOW_HELP_TEXT_ON_LOCK_SCREEN"
+msgstr "Amosa texto de axuda na pantalla de bloqueo"
+
+msgid "IDS_ST_BODY_SHOW_DUAL_CLOCK_ON_LOCK_SCREEN_WHEN_ROAMING"
+msgstr "Amosa o reloxo dual na pantalla de bloqueo durante a itinerancia"
+
+msgid "IDS_ST_BODY_TAP_AND_HOLD_THE_SCREEN_WHILE_ROTATING_THE_DEVICE_TO_OPEN_CAMERA"
+msgstr "Mantén tocada a pantalla mentres xiras o dispositivo para abrir a cámara"
+
+msgid "IDS_ST_MBODY_CAMERA_QUICK_ACCESS"
+msgstr "Acceso rápido á cámara"
+
+msgid "IDS_ST_BODY_SET_SHORTCUTS"
+msgstr "Definir atallos"
+
+msgid "IDS_ST_BODY_DRAG_AND_DROP_TO_CHANGE_ORDER"
+msgstr "Arrastra e solta para cambiar a orde"
+
+msgid "IDS_ST_BODY_SELECT_APPLICATION"
+msgstr "Seleccionar aplicación"
+
+msgid "IDS_ST_BODY_TAP_SHORTCUT_TO_ASSIGN_APPLICATION"
+msgstr "Toca o atallo ao que desexas asignar a aplicación"
+
+msgid "IDS_ST_OPT_EDIT_SHORTCUTS"
+msgstr "Editar atallos"
+
+msgid "IDS_IM_BODY_HELP_TEXT"
+msgstr "Texto de axuda"
+
diff --git a/lock-setting/po/hi.po b/lock-setting/po/hi.po
new file mode 100644
index 0000000..1dc2c7e
--- /dev/null
+++ b/lock-setting/po/hi.po
@@ -0,0 +1,54 @@
+msgid "IDS_ST_BODY_LOCK_SCREEN"
+msgstr "स्क्रीन लॉक करें"
+
+msgid "IDS_IDLE_BODY_VIEW_EVENT_NOTIFICATIONS_ON_THE_LOCK_SCREEN"
+msgstr "लॉक स्क्रीन पर प्रसंग अधिसूचनाएँ देखें"
+
+msgid "IDS_IDLE_MBODY_EVENT_NOTIFICATIONS"
+msgstr "प्रसंग अधिसूचनाएँ"
+
+msgid "IDS_ST_BODY_CLOCK"
+msgstr "घड़ी"
+
+msgid "IDS_ST_BODY_WEATHER"
+msgstr "मौसम"
+
+msgid "IDS_ST_BODY_SET_SHORTCUTS_ON_LOCK_SCREEN"
+msgstr "लॉक स्‍क्रीन पर शॉर्टकट्स सेट करें"
+
+msgid "IDS_ST_BODY_SHORTCUTS"
+msgstr "शार्टकट्स"
+
+msgid "IDS_ST_BODY_DUAL_CLOCK"
+msgstr "दोहरी घड़ी"
+
+msgid "IDS_ST_BODY_SHOW_HELP_TEXT_ON_LOCK_SCREEN"
+msgstr "लॉक स्क्रीन पर मदद टेक्स्ट दिखाता है"
+
+msgid "IDS_ST_BODY_SHOW_DUAL_CLOCK_ON_LOCK_SCREEN_WHEN_ROAMING"
+msgstr "जब रोमिंग में हों तब लॉक स्‍क्रीन पर डुअल क्लॉक दिखाएँ"
+
+msgid "IDS_ST_BODY_TAP_AND_HOLD_THE_SCREEN_WHILE_ROTATING_THE_DEVICE_TO_OPEN_CAMERA"
+msgstr "कैमरा खोलनें के लिए डिवाइस को घुमाते समय स्क्रीन को टैप और होल्ड करें"
+
+msgid "IDS_ST_MBODY_CAMERA_QUICK_ACCESS"
+msgstr "कैमरा क्विक ऍक्सेस"
+
+msgid "IDS_ST_BODY_SET_SHORTCUTS"
+msgstr "शॉर्टकट्स सेट करें"
+
+msgid "IDS_ST_BODY_DRAG_AND_DROP_TO_CHANGE_ORDER"
+msgstr "क्रम बदलने के लिए ड्रैग और ड्रॉप करें"
+
+msgid "IDS_ST_BODY_SELECT_APPLICATION"
+msgstr "एप्लीकेशन चुनें"
+
+msgid "IDS_ST_BODY_TAP_SHORTCUT_TO_ASSIGN_APPLICATION"
+msgstr "एप्लीकेशन असाइन करने के लिए शॉर्टकट टैप करें"
+
+msgid "IDS_ST_OPT_EDIT_SHORTCUTS"
+msgstr "शॉर्टकट्स संपादित करें"
+
+msgid "IDS_IM_BODY_HELP_TEXT"
+msgstr "सहायता टेक्स्ट"
+
diff --git a/lock-setting/po/hr.po b/lock-setting/po/hr.po
new file mode 100644
index 0000000..86c6896
--- /dev/null
+++ b/lock-setting/po/hr.po
@@ -0,0 +1,54 @@
+msgid "IDS_ST_BODY_LOCK_SCREEN"
+msgstr "Zaslon zaključavanja"
+
+msgid "IDS_IDLE_BODY_VIEW_EVENT_NOTIFICATIONS_ON_THE_LOCK_SCREEN"
+msgstr "Vidi obavijesti o događaju na zaslonu zaključavanja"
+
+msgid "IDS_IDLE_MBODY_EVENT_NOTIFICATIONS"
+msgstr "Obavijesti o događaju"
+
+msgid "IDS_ST_BODY_CLOCK"
+msgstr "Sat"
+
+msgid "IDS_ST_BODY_WEATHER"
+msgstr "Prognoza"
+
+msgid "IDS_ST_BODY_SET_SHORTCUTS_ON_LOCK_SCREEN"
+msgstr "Postavi prečace na zaslonu zaključavanja"
+
+msgid "IDS_ST_BODY_SHORTCUTS"
+msgstr "Prečaci"
+
+msgid "IDS_ST_BODY_DUAL_CLOCK"
+msgstr "Dvostruki sat"
+
+msgid "IDS_ST_BODY_SHOW_HELP_TEXT_ON_LOCK_SCREEN"
+msgstr "Prikaži tekst pomoći na zaslonu zaključavanja"
+
+msgid "IDS_ST_BODY_SHOW_DUAL_CLOCK_ON_LOCK_SCREEN_WHEN_ROAMING"
+msgstr "Prikaži dvostruki sat na zaslonu zaključavanja u roamingu"
+
+msgid "IDS_ST_BODY_TAP_AND_HOLD_THE_SCREEN_WHILE_ROTATING_THE_DEVICE_TO_OPEN_CAMERA"
+msgstr "Dodirnite i držite zaslon dok okrećete uređaj da biste uključili fotoaparat"
+
+msgid "IDS_ST_MBODY_CAMERA_QUICK_ACCESS"
+msgstr "Brzi pristup fotoaparatu"
+
+msgid "IDS_ST_BODY_SET_SHORTCUTS"
+msgstr "Postavi prečace"
+
+msgid "IDS_ST_BODY_DRAG_AND_DROP_TO_CHANGE_ORDER"
+msgstr "Dovucite i ispustite za promjenu redoslijeda"
+
+msgid "IDS_ST_BODY_SELECT_APPLICATION"
+msgstr "Odaberi aplikaciju"
+
+msgid "IDS_ST_BODY_TAP_SHORTCUT_TO_ASSIGN_APPLICATION"
+msgstr "Dodaj prečac za dodjeljivanje aplikacije"
+
+msgid "IDS_ST_OPT_EDIT_SHORTCUTS"
+msgstr "Uredi prečace"
+
+msgid "IDS_IM_BODY_HELP_TEXT"
+msgstr "Upute"
+
diff --git a/lock-setting/po/hu.po b/lock-setting/po/hu.po
new file mode 100644
index 0000000..7028c02
--- /dev/null
+++ b/lock-setting/po/hu.po
@@ -0,0 +1,54 @@
+msgid "IDS_ST_BODY_LOCK_SCREEN"
+msgstr "Képernyő lezárása"
+
+msgid "IDS_IDLE_BODY_VIEW_EVENT_NOTIFICATIONS_ON_THE_LOCK_SCREEN"
+msgstr "Eseményértesítések megjelenítése a zárolt képernyőn"
+
+msgid "IDS_IDLE_MBODY_EVENT_NOTIFICATIONS"
+msgstr "Eseményértesítések"
+
+msgid "IDS_ST_BODY_CLOCK"
+msgstr "Óra"
+
+msgid "IDS_ST_BODY_WEATHER"
+msgstr "Időjárás"
+
+msgid "IDS_ST_BODY_SET_SHORTCUTS_ON_LOCK_SCREEN"
+msgstr "Zárolt képernyő parancsikonjainak beállítása"
+
+msgid "IDS_ST_BODY_SHORTCUTS"
+msgstr "Gyorsgombok"
+
+msgid "IDS_ST_BODY_DUAL_CLOCK"
+msgstr "Kettős óra"
+
+msgid "IDS_ST_BODY_SHOW_HELP_TEXT_ON_LOCK_SCREEN"
+msgstr "Súgó megjelenítése a zárolt képernyőn"
+
+msgid "IDS_ST_BODY_SHOW_DUAL_CLOCK_ON_LOCK_SCREEN_WHEN_ROAMING"
+msgstr "Második óra megjelenítése a zárolt képernyőn roaming esetén"
+
+msgid "IDS_ST_BODY_TAP_AND_HOLD_THE_SCREEN_WHILE_ROTATING_THE_DEVICE_TO_OPEN_CAMERA"
+msgstr "A Fényképező megnyitásához érintse meg a képernyőt, és forgassa el az eszközt"
+
+msgid "IDS_ST_MBODY_CAMERA_QUICK_ACCESS"
+msgstr "Gyors fényképezés"
+
+msgid "IDS_ST_BODY_SET_SHORTCUTS"
+msgstr "Parancsikonok beállítása"
+
+msgid "IDS_ST_BODY_DRAG_AND_DROP_TO_CHANGE_ORDER"
+msgstr "Az elemek áthúzásával megváltoztathatja a sorrendet"
+
+msgid "IDS_ST_BODY_SELECT_APPLICATION"
+msgstr "Alkalmazás kiválasztása"
+
+msgid "IDS_ST_BODY_TAP_SHORTCUT_TO_ASSIGN_APPLICATION"
+msgstr "Alkalmazás hozzárendeléséhez érintse meg a parancsikont"
+
+msgid "IDS_ST_OPT_EDIT_SHORTCUTS"
+msgstr "Ikonok szerkesztése"
+
+msgid "IDS_IM_BODY_HELP_TEXT"
+msgstr "Súgószöveg"
+
diff --git a/lock-setting/po/hy.po b/lock-setting/po/hy.po
new file mode 100644
index 0000000..6916644
--- /dev/null
+++ b/lock-setting/po/hy.po
@@ -0,0 +1,54 @@
+msgid "IDS_ST_BODY_LOCK_SCREEN"
+msgstr "Կողպել էկրանը"
+
+msgid "IDS_IDLE_BODY_VIEW_EVENT_NOTIFICATIONS_ON_THE_LOCK_SCREEN"
+msgstr "Դիտել իրադարձության ծանուցումները կողպված էկրանին"
+
+msgid "IDS_IDLE_MBODY_EVENT_NOTIFICATIONS"
+msgstr "Իրադարձութ. ծանուցումներ"
+
+msgid "IDS_ST_BODY_CLOCK"
+msgstr "Ժամացույց"
+
+msgid "IDS_ST_BODY_WEATHER"
+msgstr "Եղանակ"
+
+msgid "IDS_ST_BODY_SET_SHORTCUTS_ON_LOCK_SCREEN"
+msgstr "Դնել դյուրանցումներ կողպված էկրանին"
+
+msgid "IDS_ST_BODY_SHORTCUTS"
+msgstr "Արագ անցումներ"
+
+msgid "IDS_ST_BODY_DUAL_CLOCK"
+msgstr "Երկակի ժամացույց"
+
+msgid "IDS_ST_BODY_SHOW_HELP_TEXT_ON_LOCK_SCREEN"
+msgstr "Ցույց տալ օգնության տեքստը կողպված էկրանի վրա"
+
+msgid "IDS_ST_BODY_SHOW_DUAL_CLOCK_ON_LOCK_SCREEN_WHEN_ROAMING"
+msgstr "Ռոումինգի ժամանակ ցույց տալ կրկնակի ժամացույցը կողպված էկրանին"
+
+msgid "IDS_ST_BODY_TAP_AND_HOLD_THE_SCREEN_WHILE_ROTATING_THE_DEVICE_TO_OPEN_CAMERA"
+msgstr "Թակեք և պահեք էկրանը սարքը պտտելու ընթացքում՝ Խցիկը բացելու համար"
+
+msgid "IDS_ST_MBODY_CAMERA_QUICK_ACCESS"
+msgstr "Խցիկի արագ մուտք"
+
+msgid "IDS_ST_BODY_SET_SHORTCUTS"
+msgstr "Դնել դյուրանցումներ"
+
+msgid "IDS_ST_BODY_DRAG_AND_DROP_TO_CHANGE_ORDER"
+msgstr "Քարշել և թողնել՝ կարգը փոխելու համար"
+
+msgid "IDS_ST_BODY_SELECT_APPLICATION"
+msgstr "Ընտրել ծրագիր"
+
+msgid "IDS_ST_BODY_TAP_SHORTCUT_TO_ASSIGN_APPLICATION"
+msgstr "Թակել դյուրանցումը՝ ծրագիր վերագրելու համար"
+
+msgid "IDS_ST_OPT_EDIT_SHORTCUTS"
+msgstr "Խմբագրել դյուրանցումները"
+
+msgid "IDS_IM_BODY_HELP_TEXT"
+msgstr "Օգնության տեքստ"
+
diff --git a/lock-setting/po/is.po b/lock-setting/po/is.po
new file mode 100644
index 0000000..5693eed
--- /dev/null
+++ b/lock-setting/po/is.po
@@ -0,0 +1,54 @@
+msgid "IDS_ST_BODY_LOCK_SCREEN"
+msgstr "Læsa skjá"
+
+msgid "IDS_IDLE_BODY_VIEW_EVENT_NOTIFICATIONS_ON_THE_LOCK_SCREEN"
+msgstr "Skoða viðburðatilkynningar á lásskjá"
+
+msgid "IDS_IDLE_MBODY_EVENT_NOTIFICATIONS"
+msgstr "Viðburðatilkynningar"
+
+msgid "IDS_ST_BODY_CLOCK"
+msgstr "Klukka"
+
+msgid "IDS_ST_BODY_WEATHER"
+msgstr "Veður"
+
+msgid "IDS_ST_BODY_SET_SHORTCUTS_ON_LOCK_SCREEN"
+msgstr "Stilla flýtileiðir á læstum skjá"
+
+msgid "IDS_ST_BODY_SHORTCUTS"
+msgstr "Flýtileiðir"
+
+msgid "IDS_ST_BODY_DUAL_CLOCK"
+msgstr "Tvöföld klukka"
+
+msgid "IDS_ST_BODY_SHOW_HELP_TEXT_ON_LOCK_SCREEN"
+msgstr "Sýna hjálpartexta á lásskjá"
+
+msgid "IDS_ST_BODY_SHOW_DUAL_CLOCK_ON_LOCK_SCREEN_WHEN_ROAMING"
+msgstr "Sýna tvöfalda klukku á lásskjá í reiki"
+
+msgid "IDS_ST_BODY_TAP_AND_HOLD_THE_SCREEN_WHILE_ROTATING_THE_DEVICE_TO_OPEN_CAMERA"
+msgstr "Pikkaðu á og haltu fingrinum á skjánum á meðan þú snýrð tækinu til að opna Myndavélina"
+
+msgid "IDS_ST_MBODY_CAMERA_QUICK_ACCESS"
+msgstr "Flýtiaðgangur myndavélar"
+
+msgid "IDS_ST_BODY_SET_SHORTCUTS"
+msgstr "Stilla flýtileiðir"
+
+msgid "IDS_ST_BODY_DRAG_AND_DROP_TO_CHANGE_ORDER"
+msgstr "Dragðu og slepptu til að breyta röð"
+
+msgid "IDS_ST_BODY_SELECT_APPLICATION"
+msgstr "Velja forrit"
+
+msgid "IDS_ST_BODY_TAP_SHORTCUT_TO_ASSIGN_APPLICATION"
+msgstr "Pikkaðu á flýtileið til að úthluta forriti"
+
+msgid "IDS_ST_OPT_EDIT_SHORTCUTS"
+msgstr "Breyta flýtileiðum"
+
+msgid "IDS_IM_BODY_HELP_TEXT"
+msgstr "Hjálpartexti"
+
diff --git a/lock-setting/po/it_IT.po b/lock-setting/po/it_IT.po
new file mode 100644
index 0000000..d39fd3c
--- /dev/null
+++ b/lock-setting/po/it_IT.po
@@ -0,0 +1,54 @@
+msgid "IDS_ST_BODY_LOCK_SCREEN"
+msgstr "Schermata di blocco"
+
+msgid "IDS_IDLE_BODY_VIEW_EVENT_NOTIFICATIONS_ON_THE_LOCK_SCREEN"
+msgstr "Visualizza le notifiche eventi sulla schermata di blocco"
+
+msgid "IDS_IDLE_MBODY_EVENT_NOTIFICATIONS"
+msgstr "Notifiche eventi"
+
+msgid "IDS_ST_BODY_CLOCK"
+msgstr "Orologio"
+
+msgid "IDS_ST_BODY_WEATHER"
+msgstr "Meteo"
+
+msgid "IDS_ST_BODY_SET_SHORTCUTS_ON_LOCK_SCREEN"
+msgstr "Imposta collegamenti nella schermata di blocco"
+
+msgid "IDS_ST_BODY_SHORTCUTS"
+msgstr "Collegamenti"
+
+msgid "IDS_ST_BODY_DUAL_CLOCK"
+msgstr "Doppio orologio"
+
+msgid "IDS_ST_BODY_SHOW_HELP_TEXT_ON_LOCK_SCREEN"
+msgstr "Mostra testo guida nella schermata di blocco"
+
+msgid "IDS_ST_BODY_SHOW_DUAL_CLOCK_ON_LOCK_SCREEN_WHEN_ROAMING"
+msgstr "Mostra orologio doppio nella schermata di blocco durante il roaming"
+
+msgid "IDS_ST_BODY_TAP_AND_HOLD_THE_SCREEN_WHILE_ROTATING_THE_DEVICE_TO_OPEN_CAMERA"
+msgstr "Tenere premuto lo schermo mentre si ruota il dispositivo per aprire la fotocamera"
+
+msgid "IDS_ST_MBODY_CAMERA_QUICK_ACCESS"
+msgstr "Sblocco fotocamera"
+
+msgid "IDS_ST_BODY_SET_SHORTCUTS"
+msgstr "Imposta collegamenti"
+
+msgid "IDS_ST_BODY_DRAG_AND_DROP_TO_CHANGE_ORDER"
+msgstr "Trascina per modificare ordine"
+
+msgid "IDS_ST_BODY_SELECT_APPLICATION"
+msgstr "Seleziona applicazione"
+
+msgid "IDS_ST_BODY_TAP_SHORTCUT_TO_ASSIGN_APPLICATION"
+msgstr "Tocca collegamento per assegnare un'applicazione"
+
+msgid "IDS_ST_OPT_EDIT_SHORTCUTS"
+msgstr "Modifica collegamenti"
+
+msgid "IDS_IM_BODY_HELP_TEXT"
+msgstr "Testo guida"
+
diff --git a/lock-setting/po/ja_JP.po b/lock-setting/po/ja_JP.po
new file mode 100644
index 0000000..19c083d
--- /dev/null
+++ b/lock-setting/po/ja_JP.po
@@ -0,0 +1,54 @@
+msgid "IDS_ST_BODY_LOCK_SCREEN"
+msgstr "ロック画面"
+
+msgid "IDS_IDLE_BODY_VIEW_EVENT_NOTIFICATIONS_ON_THE_LOCK_SCREEN"
+msgstr "ロック画面にイベント通知を表示"
+
+msgid "IDS_IDLE_MBODY_EVENT_NOTIFICATIONS"
+msgstr "イベント通知"
+
+msgid "IDS_ST_BODY_CLOCK"
+msgstr "時計"
+
+msgid "IDS_ST_BODY_WEATHER"
+msgstr "天気予報"
+
+msgid "IDS_ST_BODY_SET_SHORTCUTS_ON_LOCK_SCREEN"
+msgstr "ロック画面に表示するショートカットを設定"
+
+msgid "IDS_ST_BODY_SHORTCUTS"
+msgstr "ショートカット"
+
+msgid "IDS_ST_BODY_DUAL_CLOCK"
+msgstr "デュアル時計"
+
+msgid "IDS_ST_BODY_SHOW_HELP_TEXT_ON_LOCK_SCREEN"
+msgstr "ロック画面にヘルプテキストを表示"
+
+msgid "IDS_ST_BODY_SHOW_DUAL_CLOCK_ON_LOCK_SCREEN_WHEN_ROAMING"
+msgstr "ローミング時、ロック画面にデュアル時計を表示"
+
+msgid "IDS_ST_BODY_TAP_AND_HOLD_THE_SCREEN_WHILE_ROTATING_THE_DEVICE_TO_OPEN_CAMERA"
+msgstr "画面を押しながら端末を回転させてカメラを起動"
+
+msgid "IDS_ST_MBODY_CAMERA_QUICK_ACCESS"
+msgstr "カメラクイック起動"
+
+msgid "IDS_ST_BODY_SET_SHORTCUTS"
+msgstr "ショートカットを設定"
+
+msgid "IDS_ST_BODY_DRAG_AND_DROP_TO_CHANGE_ORDER"
+msgstr "ドラッグして順番を並べ替えます。"
+
+msgid "IDS_ST_BODY_SELECT_APPLICATION"
+msgstr "アプリケーションを選択"
+
+msgid "IDS_ST_BODY_TAP_SHORTCUT_TO_ASSIGN_APPLICATION"
+msgstr "ショートカットをタップしてアプリケーションを割り当てます。"
+
+msgid "IDS_ST_OPT_EDIT_SHORTCUTS"
+msgstr "ショートカットを編集"
+
+msgid "IDS_IM_BODY_HELP_TEXT"
+msgstr "ヘルプ"
+
diff --git a/lock-setting/po/ka.po b/lock-setting/po/ka.po
new file mode 100644
index 0000000..b6b045e
--- /dev/null
+++ b/lock-setting/po/ka.po
@@ -0,0 +1,54 @@
+msgid "IDS_ST_BODY_LOCK_SCREEN"
+msgstr "ეკრანის დაბლოკვა"
+
+msgid "IDS_IDLE_BODY_VIEW_EVENT_NOTIFICATIONS_ON_THE_LOCK_SCREEN"
+msgstr "მოვლენის შეტყობინებების ნახვა დაბლოკილ ეკრანზე"
+
+msgid "IDS_IDLE_MBODY_EVENT_NOTIFICATIONS"
+msgstr "მოვლენის შეტყობინებები"
+
+msgid "IDS_ST_BODY_CLOCK"
+msgstr "საათი"
+
+msgid "IDS_ST_BODY_WEATHER"
+msgstr "ამინდი"
+
+msgid "IDS_ST_BODY_SET_SHORTCUTS_ON_LOCK_SCREEN"
+msgstr "სწრაფი ღილაკების დაყენება დაბლოკილ ეკრანზე"
+
+msgid "IDS_ST_BODY_SHORTCUTS"
+msgstr "სწრაფი ღილაკები"
+
+msgid "IDS_ST_BODY_DUAL_CLOCK"
+msgstr "ორმაგი საათი"
+
+msgid "IDS_ST_BODY_SHOW_HELP_TEXT_ON_LOCK_SCREEN"
+msgstr "დახმარების ტექსტის ჩვენება დაბლოკილ ეკრანზე"
+
+msgid "IDS_ST_BODY_SHOW_DUAL_CLOCK_ON_LOCK_SCREEN_WHEN_ROAMING"
+msgstr "ორმაგი საათის ჩვენება დაბლოკილ ეკრანზე როუმინგის დროს"
+
+msgid "IDS_ST_BODY_TAP_AND_HOLD_THE_SCREEN_WHILE_ROTATING_THE_DEVICE_TO_OPEN_CAMERA"
+msgstr "კამერის გასახსნელად, ხანგრძლივად შეეხეთ ეკრანს და მოაბრუნეთ აპარატი"
+
+msgid "IDS_ST_MBODY_CAMERA_QUICK_ACCESS"
+msgstr "კამერის სწრაფი გახსნა"
+
+msgid "IDS_ST_BODY_SET_SHORTCUTS"
+msgstr "ღილაკების დაყენება"
+
+msgid "IDS_ST_BODY_DRAG_AND_DROP_TO_CHANGE_ORDER"
+msgstr "აიღეთ და გადაიტანეთ, თუ გსურთ შეცვალოთ მიმდევრობა"
+
+msgid "IDS_ST_BODY_SELECT_APPLICATION"
+msgstr "აირჩიეთ პროგრამა"
+
+msgid "IDS_ST_BODY_TAP_SHORTCUT_TO_ASSIGN_APPLICATION"
+msgstr "დააკაკუნეთ სწრაფ ღილაკზე, რომ მიანიჭოთ პროგრამის გახსნის ფუნქცია"
+
+msgid "IDS_ST_OPT_EDIT_SHORTCUTS"
+msgstr "სწრაფი ღილაკების შესწორება"
+
+msgid "IDS_IM_BODY_HELP_TEXT"
+msgstr "დამხმარე ტექსტი"
+
diff --git a/lock-setting/po/kk.po b/lock-setting/po/kk.po
new file mode 100644
index 0000000..5f30631
--- /dev/null
+++ b/lock-setting/po/kk.po
@@ -0,0 +1,54 @@
+msgid "IDS_ST_BODY_LOCK_SCREEN"
+msgstr "Экранды құлыптау"
+
+msgid "IDS_IDLE_BODY_VIEW_EVENT_NOTIFICATIONS_ON_THE_LOCK_SCREEN"
+msgstr "Құлыптау экранында оқиғалар туралы хабарландыруларды қарап шығу"
+
+msgid "IDS_IDLE_MBODY_EVENT_NOTIFICATIONS"
+msgstr "Оқиғалар туралы хабарлау"
+
+msgid "IDS_ST_BODY_CLOCK"
+msgstr "Сағат"
+
+msgid "IDS_ST_BODY_WEATHER"
+msgstr "Ауа райы"
+
+msgid "IDS_ST_BODY_SET_SHORTCUTS_ON_LOCK_SCREEN"
+msgstr "Құлып экранында белгішелерді белгілеу"
+
+msgid "IDS_ST_BODY_SHORTCUTS"
+msgstr "Тез кіру"
+
+msgid "IDS_ST_BODY_DUAL_CLOCK"
+msgstr "Қос сағат"
+
+msgid "IDS_ST_BODY_SHOW_HELP_TEXT_ON_LOCK_SCREEN"
+msgstr "Құлыптаулы экранында көмек мәтінді көрсетіңіз"
+
+msgid "IDS_ST_BODY_SHOW_DUAL_CLOCK_ON_LOCK_SCREEN_WHEN_ROAMING"
+msgstr "Роумингте қос сағатты құлып экранынан көрсетіңіз"
+
+msgid "IDS_ST_BODY_TAP_AND_HOLD_THE_SCREEN_WHILE_ROTATING_THE_DEVICE_TO_OPEN_CAMERA"
+msgstr "Камераны ашу үшін құрылғыны бұрғанда экранды басып тұрыңыз"
+
+msgid "IDS_ST_MBODY_CAMERA_QUICK_ACCESS"
+msgstr "Камераға жылдам өту"
+
+msgid "IDS_ST_BODY_SET_SHORTCUTS"
+msgstr "Белгішелер орнату"
+
+msgid "IDS_ST_BODY_DRAG_AND_DROP_TO_CHANGE_ORDER"
+msgstr "Ретін өзгерту үшін сүйреп алып барыңыз"
+
+msgid "IDS_ST_BODY_SELECT_APPLICATION"
+msgstr "Бағдарлама таңдау"
+
+msgid "IDS_ST_BODY_TAP_SHORTCUT_TO_ASSIGN_APPLICATION"
+msgstr "Бағдарламаны тағайындау үшін белгішені түртіңіз"
+
+msgid "IDS_ST_OPT_EDIT_SHORTCUTS"
+msgstr "Тез кіру ретін өзгерту"
+
+msgid "IDS_IM_BODY_HELP_TEXT"
+msgstr "Анықтама мәтіні"
+
diff --git a/lock-setting/po/ko_KR.po b/lock-setting/po/ko_KR.po
new file mode 100644
index 0000000..aca7f74
--- /dev/null
+++ b/lock-setting/po/ko_KR.po
@@ -0,0 +1,54 @@
+msgid "IDS_ST_BODY_LOCK_SCREEN"
+msgstr "잠금화면"
+
+msgid "IDS_IDLE_BODY_VIEW_EVENT_NOTIFICATIONS_ON_THE_LOCK_SCREEN"
+msgstr "잠금화면에서 일정 알림 보기"
+
+msgid "IDS_IDLE_MBODY_EVENT_NOTIFICATIONS"
+msgstr "일정 알림"
+
+msgid "IDS_ST_BODY_CLOCK"
+msgstr "시계"
+
+msgid "IDS_ST_BODY_WEATHER"
+msgstr "날씨"
+
+msgid "IDS_ST_BODY_SET_SHORTCUTS_ON_LOCK_SCREEN"
+msgstr "잠금화면에 바로가기를 설정합니다"
+
+msgid "IDS_ST_BODY_SHORTCUTS"
+msgstr "바로가기"
+
+msgid "IDS_ST_BODY_DUAL_CLOCK"
+msgstr "듀얼 시계"
+
+msgid "IDS_ST_BODY_SHOW_HELP_TEXT_ON_LOCK_SCREEN"
+msgstr "잠금화면에 도움말을 표시합니다"
+
+msgid "IDS_ST_BODY_SHOW_DUAL_CLOCK_ON_LOCK_SCREEN_WHEN_ROAMING"
+msgstr "로밍 시 잠금화면에 듀얼 시계를 표시합니다"
+
+msgid "IDS_ST_BODY_TAP_AND_HOLD_THE_SCREEN_WHILE_ROTATING_THE_DEVICE_TO_OPEN_CAMERA"
+msgstr "화면을 길게 누른 채 디바이스를 회전하면 카메라가 실행됩니다"
+
+msgid "IDS_ST_MBODY_CAMERA_QUICK_ACCESS"
+msgstr "빠른 카메라 실행"
+
+msgid "IDS_ST_BODY_SET_SHORTCUTS"
+msgstr "바로가기 설정"
+
+msgid "IDS_ST_BODY_DRAG_AND_DROP_TO_CHANGE_ORDER"
+msgstr "순서를 바꾸려면 드래그하세요"
+
+msgid "IDS_ST_BODY_SELECT_APPLICATION"
+msgstr "애플리케이션 선택"
+
+msgid "IDS_ST_BODY_TAP_SHORTCUT_TO_ASSIGN_APPLICATION"
+msgstr "애플리케이션을 지정하려면 바로가기를 누르세요"
+
+msgid "IDS_ST_OPT_EDIT_SHORTCUTS"
+msgstr "바로가기 편집"
+
+msgid "IDS_IM_BODY_HELP_TEXT"
+msgstr "도움말"
+
diff --git a/lock-setting/po/lt.po b/lock-setting/po/lt.po
new file mode 100644
index 0000000..7067c08
--- /dev/null
+++ b/lock-setting/po/lt.po
@@ -0,0 +1,54 @@
+msgid "IDS_ST_BODY_LOCK_SCREEN"
+msgstr "Užrakinimo ekranas"
+
+msgid "IDS_IDLE_BODY_VIEW_EVENT_NOTIFICATIONS_ON_THE_LOCK_SCREEN"
+msgstr "Peržiūrėti pranešimus apie įvykius užrakintame ekrane"
+
+msgid "IDS_IDLE_MBODY_EVENT_NOTIFICATIONS"
+msgstr "Pranešimai apie įvykius"
+
+msgid "IDS_ST_BODY_CLOCK"
+msgstr "Laikrodis"
+
+msgid "IDS_ST_BODY_WEATHER"
+msgstr "Oras"
+
+msgid "IDS_ST_BODY_SET_SHORTCUTS_ON_LOCK_SCREEN"
+msgstr "Nustatyti sparčiuosius mygtukus užrakinimo ekrane"
+
+msgid "IDS_ST_BODY_SHORTCUTS"
+msgstr "Sparčiosios prieigos mygtukai"
+
+msgid "IDS_ST_BODY_DUAL_CLOCK"
+msgstr "Dvigubas laikrodis"
+
+msgid "IDS_ST_BODY_SHOW_HELP_TEXT_ON_LOCK_SCREEN"
+msgstr "Rodyti pagalbos tekstą užrakintame ekrane"
+
+msgid "IDS_ST_BODY_SHOW_DUAL_CLOCK_ON_LOCK_SCREEN_WHEN_ROAMING"
+msgstr "Rodyti dvigubą laikrodį užrakinimo ekrane, kai naudojamasi tarptinkliniu ryšiu"
+
+msgid "IDS_ST_BODY_TAP_AND_HOLD_THE_SCREEN_WHILE_ROTATING_THE_DEVICE_TO_OPEN_CAMERA"
+msgstr "Jei norite atidaryti fotoaparatą, bakstelėkite ir laikykite ekraną sukdami įrenginį"
+
+msgid "IDS_ST_MBODY_CAMERA_QUICK_ACCESS"
+msgstr "Gr. prieiga prie fotoap."
+
+msgid "IDS_ST_BODY_SET_SHORTCUTS"
+msgstr "Nustatyti trumpinius"
+
+msgid "IDS_ST_BODY_DRAG_AND_DROP_TO_CHANGE_ORDER"
+msgstr "Vilkdami pakeiskite išdėstymą"
+
+msgid "IDS_ST_BODY_SELECT_APPLICATION"
+msgstr "Pasirinkti programą"
+
+msgid "IDS_ST_BODY_TAP_SHORTCUT_TO_ASSIGN_APPLICATION"
+msgstr "Bakstelėkite spartųjį mygtuką, kad priskirtumėte programą"
+
+msgid "IDS_ST_OPT_EDIT_SHORTCUTS"
+msgstr "Redaguoti nuorodas"
+
+msgid "IDS_IM_BODY_HELP_TEXT"
+msgstr "Pagalbos tekstas"
+
diff --git a/lock-setting/po/lv.po b/lock-setting/po/lv.po
new file mode 100644
index 0000000..af7d248
--- /dev/null
+++ b/lock-setting/po/lv.po
@@ -0,0 +1,54 @@
+msgid "IDS_ST_BODY_LOCK_SCREEN"
+msgstr "Bloķēšanas ekrāns"
+
+msgid "IDS_IDLE_BODY_VIEW_EVENT_NOTIFICATIONS_ON_THE_LOCK_SCREEN"
+msgstr "Skatīt notikumu paziņojumus bloķētā ekrānā"
+
+msgid "IDS_IDLE_MBODY_EVENT_NOTIFICATIONS"
+msgstr "Notikumu paziņojumi"
+
+msgid "IDS_ST_BODY_CLOCK"
+msgstr "Pulkstenis"
+
+msgid "IDS_ST_BODY_WEATHER"
+msgstr "Laiks"
+
+msgid "IDS_ST_BODY_SET_SHORTCUTS_ON_LOCK_SCREEN"
+msgstr "Iestatīt īsceļus bloķētajā ekrānā"
+
+msgid "IDS_ST_BODY_SHORTCUTS"
+msgstr "Īsceļi"
+
+msgid "IDS_ST_BODY_DUAL_CLOCK"
+msgstr "Duālais pulkstenis"
+
+msgid "IDS_ST_BODY_SHOW_HELP_TEXT_ON_LOCK_SCREEN"
+msgstr "Rādīt palīdzības tekstu bloķēšanas ekrānā"
+
+msgid "IDS_ST_BODY_SHOW_DUAL_CLOCK_ON_LOCK_SCREEN_WHEN_ROAMING"
+msgstr "Viesabonēšanas laikā bloķēšanas ekrānā rādīt duālo pulksteni"
+
+msgid "IDS_ST_BODY_TAP_AND_HOLD_THE_SCREEN_WHILE_ROTATING_THE_DEVICE_TO_OPEN_CAMERA"
+msgstr "Lai atvērtu kameru, pieskarieties un turiet ekrānu, un vienlaicīgi pagrieziet ierīci"
+
+msgid "IDS_ST_MBODY_CAMERA_QUICK_ACCESS"
+msgstr "Ātra piekļuve kamerai"
+
+msgid "IDS_ST_BODY_SET_SHORTCUTS"
+msgstr "Iestatīt īsceļus"
+
+msgid "IDS_ST_BODY_DRAG_AND_DROP_TO_CHANGE_ORDER"
+msgstr "Velciet un nometiet, lai mainītu kārtību"
+
+msgid "IDS_ST_BODY_SELECT_APPLICATION"
+msgstr "Izvēlēties programmu"
+
+msgid "IDS_ST_BODY_TAP_SHORTCUT_TO_ASSIGN_APPLICATION"
+msgstr "Pieskarieties īsceļam, lai piešķirtu programmu"
+
+msgid "IDS_ST_OPT_EDIT_SHORTCUTS"
+msgstr "Rediģēt īsceļus"
+
+msgid "IDS_IM_BODY_HELP_TEXT"
+msgstr "Palīdzības teksts"
+
diff --git a/lock-setting/po/mk.po b/lock-setting/po/mk.po
new file mode 100644
index 0000000..2cc2c03
--- /dev/null
+++ b/lock-setting/po/mk.po
@@ -0,0 +1,54 @@
+msgid "IDS_ST_BODY_LOCK_SCREEN"
+msgstr "Заклучување на екранот"
+
+msgid "IDS_IDLE_BODY_VIEW_EVENT_NOTIFICATIONS_ON_THE_LOCK_SCREEN"
+msgstr "Гледај известувања за настани на екранот за заклучување"
+
+msgid "IDS_IDLE_MBODY_EVENT_NOTIFICATIONS"
+msgstr "Известувања за настани"
+
+msgid "IDS_ST_BODY_CLOCK"
+msgstr "Часовник"
+
+msgid "IDS_ST_BODY_WEATHER"
+msgstr "Време"
+
+msgid "IDS_ST_BODY_SET_SHORTCUTS_ON_LOCK_SCREEN"
+msgstr "Постави кратенки на екранот за заклучување"
+
+msgid "IDS_ST_BODY_SHORTCUTS"
+msgstr "Кратенки"
+
+msgid "IDS_ST_BODY_DUAL_CLOCK"
+msgstr "Двоен часовник"
+
+msgid "IDS_ST_BODY_SHOW_HELP_TEXT_ON_LOCK_SCREEN"
+msgstr "Прикажи текст за помош на екранот за заклучување"
+
+msgid "IDS_ST_BODY_SHOW_DUAL_CLOCK_ON_LOCK_SCREEN_WHEN_ROAMING"
+msgstr "Прикажи двоен часовник на екранот за заклучување при роаминг"
+
+msgid "IDS_ST_BODY_TAP_AND_HOLD_THE_SCREEN_WHILE_ROTATING_THE_DEVICE_TO_OPEN_CAMERA"
+msgstr "Допрете и држете го екранот додека го вртите уредот за да го отворите фотоапаратот"
+
+msgid "IDS_ST_MBODY_CAMERA_QUICK_ACCESS"
+msgstr "Брз пристап до камерата"
+
+msgid "IDS_ST_BODY_SET_SHORTCUTS"
+msgstr "Одреди кратенки"
+
+msgid "IDS_ST_BODY_DRAG_AND_DROP_TO_CHANGE_ORDER"
+msgstr "Повлечете и пуштете за да го смените редоследот"
+
+msgid "IDS_ST_BODY_SELECT_APPLICATION"
+msgstr "Избери апликација"
+
+msgid "IDS_ST_BODY_TAP_SHORTCUT_TO_ASSIGN_APPLICATION"
+msgstr "Допрете кратенка за да доделите апликација"
+
+msgid "IDS_ST_OPT_EDIT_SHORTCUTS"
+msgstr "Измени кратенки"
+
+msgid "IDS_IM_BODY_HELP_TEXT"
+msgstr "Текст за помош"
+
diff --git a/lock-setting/po/nb.po b/lock-setting/po/nb.po
new file mode 100644
index 0000000..167c148
--- /dev/null
+++ b/lock-setting/po/nb.po
@@ -0,0 +1,54 @@
+msgid "IDS_ST_BODY_LOCK_SCREEN"
+msgstr "Skjermlås"
+
+msgid "IDS_IDLE_BODY_VIEW_EVENT_NOTIFICATIONS_ON_THE_LOCK_SCREEN"
+msgstr "Vis hendelsesvarsler på skjermlåsen"
+
+msgid "IDS_IDLE_MBODY_EVENT_NOTIFICATIONS"
+msgstr "Hendelsesvarsler"
+
+msgid "IDS_ST_BODY_CLOCK"
+msgstr "Klokke"
+
+msgid "IDS_ST_BODY_WEATHER"
+msgstr "Vær"
+
+msgid "IDS_ST_BODY_SET_SHORTCUTS_ON_LOCK_SCREEN"
+msgstr "Angi snarveier på skjermlås"
+
+msgid "IDS_ST_BODY_SHORTCUTS"
+msgstr "Snarveier"
+
+msgid "IDS_ST_BODY_DUAL_CLOCK"
+msgstr "Dobbel klokke"
+
+msgid "IDS_ST_BODY_SHOW_HELP_TEXT_ON_LOCK_SCREEN"
+msgstr "Vis hjelpetekst på skjermlås"
+
+msgid "IDS_ST_BODY_SHOW_DUAL_CLOCK_ON_LOCK_SCREEN_WHEN_ROAMING"
+msgstr "Vis dobbel klokke på skjermlås under roaming"
+
+msgid "IDS_ST_BODY_TAP_AND_HOLD_THE_SCREEN_WHILE_ROTATING_THE_DEVICE_TO_OPEN_CAMERA"
+msgstr "Trykk på og hold skjermen mens du roterer enheten for å åpne Kamera"
+
+msgid "IDS_ST_MBODY_CAMERA_QUICK_ACCESS"
+msgstr "Hurtigtilgang til kamera"
+
+msgid "IDS_ST_BODY_SET_SHORTCUTS"
+msgstr "Angi snarveier"
+
+msgid "IDS_ST_BODY_DRAG_AND_DROP_TO_CHANGE_ORDER"
+msgstr "Dra og slipp for å endre rekkefølgen"
+
+msgid "IDS_ST_BODY_SELECT_APPLICATION"
+msgstr "Velg program"
+
+msgid "IDS_ST_BODY_TAP_SHORTCUT_TO_ASSIGN_APPLICATION"
+msgstr "Trykk på snarvei for å tilordne program"
+
+msgid "IDS_ST_OPT_EDIT_SHORTCUTS"
+msgstr "Rediger snarveier"
+
+msgid "IDS_IM_BODY_HELP_TEXT"
+msgstr "Hjelpetekst"
+
diff --git a/lock-setting/po/nl_NL.po b/lock-setting/po/nl_NL.po
new file mode 100644
index 0000000..9289e1b
--- /dev/null
+++ b/lock-setting/po/nl_NL.po
@@ -0,0 +1,54 @@
+msgid "IDS_ST_BODY_LOCK_SCREEN"
+msgstr "Vergrendelscherm"
+
+msgid "IDS_IDLE_BODY_VIEW_EVENT_NOTIFICATIONS_ON_THE_LOCK_SCREEN"
+msgstr "Meldingen van agenda-items weergeven op het vergrendelscherm"
+
+msgid "IDS_IDLE_MBODY_EVENT_NOTIFICATIONS"
+msgstr "Meldingen agenda-items"
+
+msgid "IDS_ST_BODY_CLOCK"
+msgstr "Klok"
+
+msgid "IDS_ST_BODY_WEATHER"
+msgstr "Weer"
+
+msgid "IDS_ST_BODY_SET_SHORTCUTS_ON_LOCK_SCREEN"
+msgstr "Sneltoetsen instellen op vergrendeld scherm"
+
+msgid "IDS_ST_BODY_SHORTCUTS"
+msgstr "Sneltoetsen"
+
+msgid "IDS_ST_BODY_DUAL_CLOCK"
+msgstr "Twee klokken"
+
+msgid "IDS_ST_BODY_SHOW_HELP_TEXT_ON_LOCK_SCREEN"
+msgstr "Help-tekst op vergrendeld scherm weergeven"
+
+msgid "IDS_ST_BODY_SHOW_DUAL_CLOCK_ON_LOCK_SCREEN_WHEN_ROAMING"
+msgstr "Dubbele klok weergeven op vergrendeld scherm bij roaming"
+
+msgid "IDS_ST_BODY_TAP_AND_HOLD_THE_SCREEN_WHILE_ROTATING_THE_DEVICE_TO_OPEN_CAMERA"
+msgstr "Tik en houd uw vinger op het scherm terwijl u het apparaat draait om de camera te openen"
+
+msgid "IDS_ST_MBODY_CAMERA_QUICK_ACCESS"
+msgstr "Camera ontgrendelen"
+
+msgid "IDS_ST_BODY_SET_SHORTCUTS"
+msgstr "Snelkoppelingen instellen"
+
+msgid "IDS_ST_BODY_DRAG_AND_DROP_TO_CHANGE_ORDER"
+msgstr "Sleep en zet neer om volgorde te wijzigen"
+
+msgid "IDS_ST_BODY_SELECT_APPLICATION"
+msgstr "Applicatie selecteren"
+
+msgid "IDS_ST_BODY_TAP_SHORTCUT_TO_ASSIGN_APPLICATION"
+msgstr "Tik op sneltoets om applicatie toe te wijzen"
+
+msgid "IDS_ST_OPT_EDIT_SHORTCUTS"
+msgstr "Sneltoetsen wijzigen"
+
+msgid "IDS_IM_BODY_HELP_TEXT"
+msgstr "Help-tekst"
+
diff --git a/lock-setting/po/pl.po b/lock-setting/po/pl.po
new file mode 100644
index 0000000..3d8cbae
--- /dev/null
+++ b/lock-setting/po/pl.po
@@ -0,0 +1,54 @@
+msgid "IDS_ST_BODY_LOCK_SCREEN"
+msgstr "Ekran blokady"
+
+msgid "IDS_IDLE_BODY_VIEW_EVENT_NOTIFICATIONS_ON_THE_LOCK_SCREEN"
+msgstr "Wyświetlaj powiadomienia o wydarzeniach na ekranie blokady"
+
+msgid "IDS_IDLE_MBODY_EVENT_NOTIFICATIONS"
+msgstr "Powiadomienia o wydarzen."
+
+msgid "IDS_ST_BODY_CLOCK"
+msgstr "Zegar"
+
+msgid "IDS_ST_BODY_WEATHER"
+msgstr "Pogoda"
+
+msgid "IDS_ST_BODY_SET_SHORTCUTS_ON_LOCK_SCREEN"
+msgstr "Ustaw skróty na ekranie blokady"
+
+msgid "IDS_ST_BODY_SHORTCUTS"
+msgstr "Skróty klawiszowe"
+
+msgid "IDS_ST_BODY_DUAL_CLOCK"
+msgstr "Zegar podwójny"
+
+msgid "IDS_ST_BODY_SHOW_HELP_TEXT_ON_LOCK_SCREEN"
+msgstr "Pokaż tekst pomocy na ekranie blokady"
+
+msgid "IDS_ST_BODY_SHOW_DUAL_CLOCK_ON_LOCK_SCREEN_WHEN_ROAMING"
+msgstr "Wyświetlanie zegara podwójnego na ekranie blokady podczas roamingu"
+
+msgid "IDS_ST_BODY_TAP_AND_HOLD_THE_SCREEN_WHILE_ROTATING_THE_DEVICE_TO_OPEN_CAMERA"
+msgstr "Obracając urządzenie, dotknij i przytrzymaj ekran, aby otworzyć aparat"
+
+msgid "IDS_ST_MBODY_CAMERA_QUICK_ACCESS"
+msgstr "Skrót aparatu"
+
+msgid "IDS_ST_BODY_SET_SHORTCUTS"
+msgstr "Ustawianie skrótów"
+
+msgid "IDS_ST_BODY_DRAG_AND_DROP_TO_CHANGE_ORDER"
+msgstr "Przeciągnij i upuść, aby zmienić kolejność"
+
+msgid "IDS_ST_BODY_SELECT_APPLICATION"
+msgstr "Wybierz aplikację"
+
+msgid "IDS_ST_BODY_TAP_SHORTCUT_TO_ASSIGN_APPLICATION"
+msgstr "Dotknij skrótu, aby przypisać aplikację"
+
+msgid "IDS_ST_OPT_EDIT_SHORTCUTS"
+msgstr "Edytuj skróty"
+
+msgid "IDS_IM_BODY_HELP_TEXT"
+msgstr "Tekst pomocy"
+
diff --git a/lock-setting/po/pt_BR.po b/lock-setting/po/pt_BR.po
new file mode 100644
index 0000000..8072ea6
--- /dev/null
+++ b/lock-setting/po/pt_BR.po
@@ -0,0 +1,54 @@
+msgid "IDS_ST_BODY_LOCK_SCREEN"
+msgstr "Tela de bloqueio"
+
+msgid "IDS_IDLE_BODY_VIEW_EVENT_NOTIFICATIONS_ON_THE_LOCK_SCREEN"
+msgstr "Exibir notificações de eventos na tela de bloqueio"
+
+msgid "IDS_IDLE_MBODY_EVENT_NOTIFICATIONS"
+msgstr "Notificações de evento"
+
+msgid "IDS_ST_BODY_CLOCK"
+msgstr "Relógio"
+
+msgid "IDS_ST_BODY_WEATHER"
+msgstr "Clima"
+
+msgid "IDS_ST_BODY_SET_SHORTCUTS_ON_LOCK_SCREEN"
+msgstr "Definir atalhos na tela de bloqueio"
+
+msgid "IDS_ST_BODY_SHORTCUTS"
+msgstr "Atalhos"
+
+msgid "IDS_ST_BODY_DUAL_CLOCK"
+msgstr "Relógio duplo"
+
+msgid "IDS_ST_BODY_SHOW_HELP_TEXT_ON_LOCK_SCREEN"
+msgstr "Exibir texto de ajuda na tela bloqueada"
+
+msgid "IDS_ST_BODY_SHOW_DUAL_CLOCK_ON_LOCK_SCREEN_WHEN_ROAMING"
+msgstr "Mostrar relógio duplo na tela de bloqueio quando em roaming"
+
+msgid "IDS_ST_BODY_TAP_AND_HOLD_THE_SCREEN_WHILE_ROTATING_THE_DEVICE_TO_OPEN_CAMERA"
+msgstr "Toque e segure a tela enquanto gira o dispositivo para abrir a Câmera"
+
+msgid "IDS_ST_MBODY_CAMERA_QUICK_ACCESS"
+msgstr "Acesso rápido à Câmera"
+
+msgid "IDS_ST_BODY_SET_SHORTCUTS"
+msgstr "Configurar atalhos"
+
+msgid "IDS_ST_BODY_DRAG_AND_DROP_TO_CHANGE_ORDER"
+msgstr "Arraste e solte para alterar a ordem"
+
+msgid "IDS_ST_BODY_SELECT_APPLICATION"
+msgstr "Selecionar aplicação"
+
+msgid "IDS_ST_BODY_TAP_SHORTCUT_TO_ASSIGN_APPLICATION"
+msgstr "Toque no atalho para atribuir aplicativo"
+
+msgid "IDS_ST_OPT_EDIT_SHORTCUTS"
+msgstr "Editar atalhos"
+
+msgid "IDS_IM_BODY_HELP_TEXT"
+msgstr "Texto de ajuda"
+
diff --git a/lock-setting/po/pt_PT.po b/lock-setting/po/pt_PT.po
new file mode 100644
index 0000000..5005ee3
--- /dev/null
+++ b/lock-setting/po/pt_PT.po
@@ -0,0 +1,54 @@
+msgid "IDS_ST_BODY_LOCK_SCREEN"
+msgstr "Ecrã bloqueado"
+
+msgid "IDS_IDLE_BODY_VIEW_EVENT_NOTIFICATIONS_ON_THE_LOCK_SCREEN"
+msgstr "Ver notificações de eventos no ecrã bloqueado"
+
+msgid "IDS_IDLE_MBODY_EVENT_NOTIFICATIONS"
+msgstr "Notificações de eventos"
+
+msgid "IDS_ST_BODY_CLOCK"
+msgstr "Relógio"
+
+msgid "IDS_ST_BODY_WEATHER"
+msgstr "Tempo"
+
+msgid "IDS_ST_BODY_SET_SHORTCUTS_ON_LOCK_SCREEN"
+msgstr "Definir atalhos no ecrã bloqueado"
+
+msgid "IDS_ST_BODY_SHORTCUTS"
+msgstr "Atalhos"
+
+msgid "IDS_ST_BODY_DUAL_CLOCK"
+msgstr "Rel. duplo"
+
+msgid "IDS_ST_BODY_SHOW_HELP_TEXT_ON_LOCK_SCREEN"
+msgstr "Mostrar texto de ajuda no ecrã bloqueado"
+
+msgid "IDS_ST_BODY_SHOW_DUAL_CLOCK_ON_LOCK_SCREEN_WHEN_ROAMING"
+msgstr "Mostrar relógio duplo no ecrã bloqueado em roaming"
+
+msgid "IDS_ST_BODY_TAP_AND_HOLD_THE_SCREEN_WHILE_ROTATING_THE_DEVICE_TO_OPEN_CAMERA"
+msgstr "Toque sem soltar no ecrã ao rodar o dispositivo para abrir a Câmara"
+
+msgid "IDS_ST_MBODY_CAMERA_QUICK_ACCESS"
+msgstr "Acesso rápido à câmara"
+
+msgid "IDS_ST_BODY_SET_SHORTCUTS"
+msgstr "Definir atalhos"
+
+msgid "IDS_ST_BODY_DRAG_AND_DROP_TO_CHANGE_ORDER"
+msgstr "Arrastar e largar para alterar a ordem"
+
+msgid "IDS_ST_BODY_SELECT_APPLICATION"
+msgstr "Seleccionar aplicação"
+
+msgid "IDS_ST_BODY_TAP_SHORTCUT_TO_ASSIGN_APPLICATION"
+msgstr "Tocar no atalho para atribuir aplicação"
+
+msgid "IDS_ST_OPT_EDIT_SHORTCUTS"
+msgstr "Editar atalhos"
+
+msgid "IDS_IM_BODY_HELP_TEXT"
+msgstr "Texto de ajuda"
+
diff --git a/lock-setting/po/ro.po b/lock-setting/po/ro.po
new file mode 100644
index 0000000..d0a832f
--- /dev/null
+++ b/lock-setting/po/ro.po
@@ -0,0 +1,54 @@
+msgid "IDS_ST_BODY_LOCK_SCREEN"
+msgstr "Blocare ecran"
+
+msgid "IDS_IDLE_BODY_VIEW_EVENT_NOTIFICATIONS_ON_THE_LOCK_SCREEN"
+msgstr "Vizualizaţi pe ecranul blocat notificările privind evenimentul"
+
+msgid "IDS_IDLE_MBODY_EVENT_NOTIFICATIONS"
+msgstr "Notificări eveniment"
+
+msgid "IDS_ST_BODY_CLOCK"
+msgstr "Ceas"
+
+msgid "IDS_ST_BODY_WEATHER"
+msgstr "Vreme"
+
+msgid "IDS_ST_BODY_SET_SHORTCUTS_ON_LOCK_SCREEN"
+msgstr "Setare comenzi rapide în ecranul de blocare"
+
+msgid "IDS_ST_BODY_SHORTCUTS"
+msgstr "Comenzi rapide"
+
+msgid "IDS_ST_BODY_DUAL_CLOCK"
+msgstr "Ceas dual"
+
+msgid "IDS_ST_BODY_SHOW_HELP_TEXT_ON_LOCK_SCREEN"
+msgstr "Afişare text asistenţă pe ecranul de blocare"
+
+msgid "IDS_ST_BODY_SHOW_DUAL_CLOCK_ON_LOCK_SCREEN_WHEN_ROAMING"
+msgstr "Afişare ceas dual pe ecranul de blocare în roaming"
+
+msgid "IDS_ST_BODY_TAP_AND_HOLD_THE_SCREEN_WHILE_ROTATING_THE_DEVICE_TO_OPEN_CAMERA"
+msgstr "Ţineţi apăsat pe ecran şi rotiţi dispozitivul pentru a deschide Camera foto"
+
+msgid "IDS_ST_MBODY_CAMERA_QUICK_ACCESS"
+msgstr "Acc. rapid la camera foto"
+
+msgid "IDS_ST_BODY_SET_SHORTCUTS"
+msgstr "Setare comenzi rapide"
+
+msgid "IDS_ST_BODY_DRAG_AND_DROP_TO_CHANGE_ORDER"
+msgstr "Glisaţi şi fixaţi pentru schimbarea ordinii"
+
+msgid "IDS_ST_BODY_SELECT_APPLICATION"
+msgstr "Selectare aplicaţie"
+
+msgid "IDS_ST_BODY_TAP_SHORTCUT_TO_ASSIGN_APPLICATION"
+msgstr "Atingeţi comanda rapidă pentru a atribui aplicaţia"
+
+msgid "IDS_ST_OPT_EDIT_SHORTCUTS"
+msgstr "Editare comenzi rapide"
+
+msgid "IDS_IM_BODY_HELP_TEXT"
+msgstr "Text asistenţă"
+
diff --git a/lock-setting/po/ru_RU.po b/lock-setting/po/ru_RU.po
new file mode 100644
index 0000000..fb29213
--- /dev/null
+++ b/lock-setting/po/ru_RU.po
@@ -0,0 +1,54 @@
+msgid "IDS_ST_BODY_LOCK_SCREEN"
+msgstr "Экран блокировки"
+
+msgid "IDS_IDLE_BODY_VIEW_EVENT_NOTIFICATIONS_ON_THE_LOCK_SCREEN"
+msgstr "Просмотр уведомлений о событиях на экране блокировки"
+
+msgid "IDS_IDLE_MBODY_EVENT_NOTIFICATIONS"
+msgstr "Уведомления о событиях"
+
+msgid "IDS_ST_BODY_CLOCK"
+msgstr "Часы"
+
+msgid "IDS_ST_BODY_WEATHER"
+msgstr "Погода"
+
+msgid "IDS_ST_BODY_SET_SHORTCUTS_ON_LOCK_SCREEN"
+msgstr "Настроить ярлыки на экране блокировки"
+
+msgid "IDS_ST_BODY_SHORTCUTS"
+msgstr "Горячие клавиши"
+
+msgid "IDS_ST_BODY_DUAL_CLOCK"
+msgstr "Двойные часы"
+
+msgid "IDS_ST_BODY_SHOW_HELP_TEXT_ON_LOCK_SCREEN"
+msgstr "Показывать текст справки на экране блокировки"
+
+msgid "IDS_ST_BODY_SHOW_DUAL_CLOCK_ON_LOCK_SCREEN_WHEN_ROAMING"
+msgstr "Показывать двойные часы на экране блокировки в роуминге"
+
+msgid "IDS_ST_BODY_TAP_AND_HOLD_THE_SCREEN_WHILE_ROTATING_THE_DEVICE_TO_OPEN_CAMERA"
+msgstr "Чтобы открыть камеру, прикоснитесь к экрану и, удерживая палец, поверните устройство"
+
+msgid "IDS_ST_MBODY_CAMERA_QUICK_ACCESS"
+msgstr "Быстрый доступ к камере"
+
+msgid "IDS_ST_BODY_SET_SHORTCUTS"
+msgstr "Задать ярлыки"
+
+msgid "IDS_ST_BODY_DRAG_AND_DROP_TO_CHANGE_ORDER"
+msgstr "Используйте перетаскивание, чтобы изменить порядок"
+
+msgid "IDS_ST_BODY_SELECT_APPLICATION"
+msgstr "Выбор приложения"
+
+msgid "IDS_ST_BODY_TAP_SHORTCUT_TO_ASSIGN_APPLICATION"
+msgstr "Нажмите ярлык, чтобы назначить приложение"
+
+msgid "IDS_ST_OPT_EDIT_SHORTCUTS"
+msgstr "Изменить ссылки"
+
+msgid "IDS_IM_BODY_HELP_TEXT"
+msgstr "Текст справки"
+
diff --git a/lock-setting/po/sk.po b/lock-setting/po/sk.po
new file mode 100644
index 0000000..5c28e7d
--- /dev/null
+++ b/lock-setting/po/sk.po
@@ -0,0 +1,54 @@
+msgid "IDS_ST_BODY_LOCK_SCREEN"
+msgstr "Uzamknúť obrazovku"
+
+msgid "IDS_IDLE_BODY_VIEW_EVENT_NOTIFICATIONS_ON_THE_LOCK_SCREEN"
+msgstr "Zobraziť oznámenia udalostí na zamknutej obrazovke"
+
+msgid "IDS_IDLE_MBODY_EVENT_NOTIFICATIONS"
+msgstr "Oznámenia udalostí"
+
+msgid "IDS_ST_BODY_CLOCK"
+msgstr "Hodiny"
+
+msgid "IDS_ST_BODY_WEATHER"
+msgstr "Počasie"
+
+msgid "IDS_ST_BODY_SET_SHORTCUTS_ON_LOCK_SCREEN"
+msgstr "Nastaviť odkazy na zamknutej obrazovke"
+
+msgid "IDS_ST_BODY_SHORTCUTS"
+msgstr "Skratky"
+
+msgid "IDS_ST_BODY_DUAL_CLOCK"
+msgstr "Duálne hod."
+
+msgid "IDS_ST_BODY_SHOW_HELP_TEXT_ON_LOCK_SCREEN"
+msgstr "Zobraziť text pomocníka na zamknutej obrazovke"
+
+msgid "IDS_ST_BODY_SHOW_DUAL_CLOCK_ON_LOCK_SCREEN_WHEN_ROAMING"
+msgstr "Pri roamingu zobraziť na zamknutej obrazovke duálne hodiny"
+
+msgid "IDS_ST_BODY_TAP_AND_HOLD_THE_SCREEN_WHILE_ROTATING_THE_DEVICE_TO_OPEN_CAMERA"
+msgstr "Ťuknutím na obrazovku a jej podržaním počas otáčania zariadenia môžete otvoriť aplikáciu Fotoaparát"
+
+msgid "IDS_ST_MBODY_CAMERA_QUICK_ACCESS"
+msgstr "Rýchly príst. cez fotoap."
+
+msgid "IDS_ST_BODY_SET_SHORTCUTS"
+msgstr "Nastaviť skratky"
+
+msgid "IDS_ST_BODY_DRAG_AND_DROP_TO_CHANGE_ORDER"
+msgstr "Presunutím môžete zmeniť poradie"
+
+msgid "IDS_ST_BODY_SELECT_APPLICATION"
+msgstr "Vyberte aplikáciu"
+
+msgid "IDS_ST_BODY_TAP_SHORTCUT_TO_ASSIGN_APPLICATION"
+msgstr "Ťuknutím na odkaz priraďte aplikáciu"
+
+msgid "IDS_ST_OPT_EDIT_SHORTCUTS"
+msgstr "Upraviť odkazy"
+
+msgid "IDS_IM_BODY_HELP_TEXT"
+msgstr "Text pomocníka"
+
diff --git a/lock-setting/po/sl.po b/lock-setting/po/sl.po
new file mode 100644
index 0000000..805afbc
--- /dev/null
+++ b/lock-setting/po/sl.po
@@ -0,0 +1,54 @@
+msgid "IDS_ST_BODY_LOCK_SCREEN"
+msgstr "Zaklepanje zaslona"
+
+msgid "IDS_IDLE_BODY_VIEW_EVENT_NOTIFICATIONS_ON_THE_LOCK_SCREEN"
+msgstr "Prikaz obvestil o dogodkih na zaklenjenem zaslonu"
+
+msgid "IDS_IDLE_MBODY_EVENT_NOTIFICATIONS"
+msgstr "Obvestila o dogodkih"
+
+msgid "IDS_ST_BODY_CLOCK"
+msgstr "Ura"
+
+msgid "IDS_ST_BODY_WEATHER"
+msgstr "Vreme"
+
+msgid "IDS_ST_BODY_SET_SHORTCUTS_ON_LOCK_SCREEN"
+msgstr "Nastavi bližnjice na zaklenjenem zaslonu"
+
+msgid "IDS_ST_BODY_SHORTCUTS"
+msgstr "Bližnjice"
+
+msgid "IDS_ST_BODY_DUAL_CLOCK"
+msgstr "Dvojna ura"
+
+msgid "IDS_ST_BODY_SHOW_HELP_TEXT_ON_LOCK_SCREEN"
+msgstr "Pokaži besedilo za pomoč na zaklenjenem zaslonu"
+
+msgid "IDS_ST_BODY_SHOW_DUAL_CLOCK_ON_LOCK_SCREEN_WHEN_ROAMING"
+msgstr "Med gostovanjem pokaži dvojno uro na zaklenjenem zaslonu"
+
+msgid "IDS_ST_BODY_TAP_AND_HOLD_THE_SCREEN_WHILE_ROTATING_THE_DEVICE_TO_OPEN_CAMERA"
+msgstr "Pritisnite in pridržite prst na zaslonu in hkrati zavrtite napravo, da odprete kamero"
+
+msgid "IDS_ST_MBODY_CAMERA_QUICK_ACCESS"
+msgstr "Hitri dostop do kamere"
+
+msgid "IDS_ST_BODY_SET_SHORTCUTS"
+msgstr "Nastavi bližnjice"
+
+msgid "IDS_ST_BODY_DRAG_AND_DROP_TO_CHANGE_ORDER"
+msgstr "Povlecite in spustite, če želite spremeniti vrstni red"
+
+msgid "IDS_ST_BODY_SELECT_APPLICATION"
+msgstr "Izberite program"
+
+msgid "IDS_ST_BODY_TAP_SHORTCUT_TO_ASSIGN_APPLICATION"
+msgstr "Pritisnite bližnjico, da jo dodelite programu"
+
+msgid "IDS_ST_OPT_EDIT_SHORTCUTS"
+msgstr "Uredi bližnjice"
+
+msgid "IDS_IM_BODY_HELP_TEXT"
+msgstr "Besedilo s pomočjo"
+
diff --git a/lock-setting/po/sr.po b/lock-setting/po/sr.po
new file mode 100644
index 0000000..c74520f
--- /dev/null
+++ b/lock-setting/po/sr.po
@@ -0,0 +1,54 @@
+msgid "IDS_ST_BODY_LOCK_SCREEN"
+msgstr "Zaključavanje ekrana"
+
+msgid "IDS_IDLE_BODY_VIEW_EVENT_NOTIFICATIONS_ON_THE_LOCK_SCREEN"
+msgstr "Prikaži obaveštenja o događajima na zaključanom ekranu"
+
+msgid "IDS_IDLE_MBODY_EVENT_NOTIFICATIONS"
+msgstr "Obaveštenja o događaju"
+
+msgid "IDS_ST_BODY_CLOCK"
+msgstr "Sat"
+
+msgid "IDS_ST_BODY_WEATHER"
+msgstr "Vreme"
+
+msgid "IDS_ST_BODY_SET_SHORTCUTS_ON_LOCK_SCREEN"
+msgstr "Postavi prečice na zaključanom ekranu"
+
+msgid "IDS_ST_BODY_SHORTCUTS"
+msgstr "Prečice"
+
+msgid "IDS_ST_BODY_DUAL_CLOCK"
+msgstr "Dvostruki sat"
+
+msgid "IDS_ST_BODY_SHOW_HELP_TEXT_ON_LOCK_SCREEN"
+msgstr "Prikaži tekst pomoći na zaključanom ekranu"
+
+msgid "IDS_ST_BODY_SHOW_DUAL_CLOCK_ON_LOCK_SCREEN_WHEN_ROAMING"
+msgstr "Prikaži dvostruki sat na zaključanom ekranu u romingu"
+
+msgid "IDS_ST_BODY_TAP_AND_HOLD_THE_SCREEN_WHILE_ROTATING_THE_DEVICE_TO_OPEN_CAMERA"
+msgstr "Kucni i zadrži ekran tokom rotiranja uređaja da bi otvorio/la kameru"
+
+msgid "IDS_ST_MBODY_CAMERA_QUICK_ACCESS"
+msgstr "Brzi pristup na kameri"
+
+msgid "IDS_ST_BODY_SET_SHORTCUTS"
+msgstr "Podesi prečice"
+
+msgid "IDS_ST_BODY_DRAG_AND_DROP_TO_CHANGE_ORDER"
+msgstr "Prevuci i otpusti za promenu redosleda"
+
+msgid "IDS_ST_BODY_SELECT_APPLICATION"
+msgstr "Izaberi aplikaciju"
+
+msgid "IDS_ST_BODY_TAP_SHORTCUT_TO_ASSIGN_APPLICATION"
+msgstr "Kucni prečicu za dodelu aplikacije"
+
+msgid "IDS_ST_OPT_EDIT_SHORTCUTS"
+msgstr "Izmeni prečice"
+
+msgid "IDS_IM_BODY_HELP_TEXT"
+msgstr "Tekst pomoći"
+
diff --git a/lock-setting/po/sv.po b/lock-setting/po/sv.po
new file mode 100644
index 0000000..ea54af4
--- /dev/null
+++ b/lock-setting/po/sv.po
@@ -0,0 +1,54 @@
+msgid "IDS_ST_BODY_LOCK_SCREEN"
+msgstr "Låsskärm"
+
+msgid "IDS_IDLE_BODY_VIEW_EVENT_NOTIFICATIONS_ON_THE_LOCK_SCREEN"
+msgstr "Visa händelsemeddelanden på låsskärmen"
+
+msgid "IDS_IDLE_MBODY_EVENT_NOTIFICATIONS"
+msgstr "Händelsemeddelanden"
+
+msgid "IDS_ST_BODY_CLOCK"
+msgstr "Klocka"
+
+msgid "IDS_ST_BODY_WEATHER"
+msgstr "Väder"
+
+msgid "IDS_ST_BODY_SET_SHORTCUTS_ON_LOCK_SCREEN"
+msgstr "Ställ in genvägar på låsskärmen"
+
+msgid "IDS_ST_BODY_SHORTCUTS"
+msgstr "Genvägar"
+
+msgid "IDS_ST_BODY_DUAL_CLOCK"
+msgstr "Dubbel klocka"
+
+msgid "IDS_ST_BODY_SHOW_HELP_TEXT_ON_LOCK_SCREEN"
+msgstr "Visa hjälptexten på låsskärmen"
+
+msgid "IDS_ST_BODY_SHOW_DUAL_CLOCK_ON_LOCK_SCREEN_WHEN_ROAMING"
+msgstr "Visa dubbla klockor på låsskärmen vid roaming"
+
+msgid "IDS_ST_BODY_TAP_AND_HOLD_THE_SCREEN_WHILE_ROTATING_THE_DEVICE_TO_OPEN_CAMERA"
+msgstr "Tryck på och håll kvar på skärmen och rotera samtidigt enheten för att öppna Kameran"
+
+msgid "IDS_ST_MBODY_CAMERA_QUICK_ACCESS"
+msgstr "Snabbåtkomst till kameran"
+
+msgid "IDS_ST_BODY_SET_SHORTCUTS"
+msgstr "Ställ in genvägar"
+
+msgid "IDS_ST_BODY_DRAG_AND_DROP_TO_CHANGE_ORDER"
+msgstr "Dra och släpp för att ändra ordning"
+
+msgid "IDS_ST_BODY_SELECT_APPLICATION"
+msgstr "Välj program"
+
+msgid "IDS_ST_BODY_TAP_SHORTCUT_TO_ASSIGN_APPLICATION"
+msgstr "Tryck på genväg för att tilldela program"
+
+msgid "IDS_ST_OPT_EDIT_SHORTCUTS"
+msgstr "Redigera genvägar"
+
+msgid "IDS_IM_BODY_HELP_TEXT"
+msgstr "Hjälptext"
+
diff --git a/lock-setting/po/tr_TR.po b/lock-setting/po/tr_TR.po
new file mode 100644
index 0000000..8c5ab33
--- /dev/null
+++ b/lock-setting/po/tr_TR.po
@@ -0,0 +1,54 @@
+msgid "IDS_ST_BODY_LOCK_SCREEN"
+msgstr "Kilit ekranı"
+
+msgid "IDS_IDLE_BODY_VIEW_EVENT_NOTIFICATIONS_ON_THE_LOCK_SCREEN"
+msgstr "Kilit ekranında etkinlik bildirimlerini gör"
+
+msgid "IDS_IDLE_MBODY_EVENT_NOTIFICATIONS"
+msgstr "Etkinlik bildirimleri"
+
+msgid "IDS_ST_BODY_CLOCK"
+msgstr "Saat"
+
+msgid "IDS_ST_BODY_WEATHER"
+msgstr "Hava"
+
+msgid "IDS_ST_BODY_SET_SHORTCUTS_ON_LOCK_SCREEN"
+msgstr "Kısayolları kilit ekranında ayarla"
+
+msgid "IDS_ST_BODY_SHORTCUTS"
+msgstr "Kısayollar"
+
+msgid "IDS_ST_BODY_DUAL_CLOCK"
+msgstr "İkili saat"
+
+msgid "IDS_ST_BODY_SHOW_HELP_TEXT_ON_LOCK_SCREEN"
+msgstr "Yardım metnini kilit ekranında göster"
+
+msgid "IDS_ST_BODY_SHOW_DUAL_CLOCK_ON_LOCK_SCREEN_WHEN_ROAMING"
+msgstr "Dolaşımdayken kilit ekranında çift saat göster"
+
+msgid "IDS_ST_BODY_TAP_AND_HOLD_THE_SCREEN_WHILE_ROTATING_THE_DEVICE_TO_OPEN_CAMERA"
+msgstr "Kamerayı açmak için cihazı döndürürken ekrana dokunun ve basılı tutun"
+
+msgid "IDS_ST_MBODY_CAMERA_QUICK_ACCESS"
+msgstr "Kameraya hızlı erişim"
+
+msgid "IDS_ST_BODY_SET_SHORTCUTS"
+msgstr "Kısayol ayarla"
+
+msgid "IDS_ST_BODY_DRAG_AND_DROP_TO_CHANGE_ORDER"
+msgstr "Sırayı değiştirmek için sürükle ve bırak"
+
+msgid "IDS_ST_BODY_SELECT_APPLICATION"
+msgstr "Uygulama seç"
+
+msgid "IDS_ST_BODY_TAP_SHORTCUT_TO_ASSIGN_APPLICATION"
+msgstr "Uygulama atamak için kısayola dokun"
+
+msgid "IDS_ST_OPT_EDIT_SHORTCUTS"
+msgstr "Kısayolları düzenle"
+
+msgid "IDS_IM_BODY_HELP_TEXT"
+msgstr "Yardım metni"
+
diff --git a/lock-setting/po/uk.po b/lock-setting/po/uk.po
new file mode 100644
index 0000000..67ef257
--- /dev/null
+++ b/lock-setting/po/uk.po
@@ -0,0 +1,54 @@
+msgid "IDS_ST_BODY_LOCK_SCREEN"
+msgstr "Екран блокування"
+
+msgid "IDS_IDLE_BODY_VIEW_EVENT_NOTIFICATIONS_ON_THE_LOCK_SCREEN"
+msgstr "Перегляд сповіщень про події на екрані блокування"
+
+msgid "IDS_IDLE_MBODY_EVENT_NOTIFICATIONS"
+msgstr "Сповіщення про події"
+
+msgid "IDS_ST_BODY_CLOCK"
+msgstr "Годинник"
+
+msgid "IDS_ST_BODY_WEATHER"
+msgstr "Погода"
+
+msgid "IDS_ST_BODY_SET_SHORTCUTS_ON_LOCK_SCREEN"
+msgstr "Встановлення клавіш швидкого доступу на екрані блокування"
+
+msgid "IDS_ST_BODY_SHORTCUTS"
+msgstr "Швидкий доступ"
+
+msgid "IDS_ST_BODY_DUAL_CLOCK"
+msgstr "Подвійний годинник"
+
+msgid "IDS_ST_BODY_SHOW_HELP_TEXT_ON_LOCK_SCREEN"
+msgstr "Відображення тексту довідки на екрані блокування"
+
+msgid "IDS_ST_BODY_SHOW_DUAL_CLOCK_ON_LOCK_SCREEN_WHEN_ROAMING"
+msgstr "Відображення подвійного годинника на екрані блокування під час перебування в роумінгу"
+
+msgid "IDS_ST_BODY_TAP_AND_HOLD_THE_SCREEN_WHILE_ROTATING_THE_DEVICE_TO_OPEN_CAMERA"
+msgstr "Натисніть і утримуйте екран, одночасно обертаючи пристрій, щоб відкрити камеру"
+
+msgid "IDS_ST_MBODY_CAMERA_QUICK_ACCESS"
+msgstr "Швидкий доступ до камери"
+
+msgid "IDS_ST_BODY_SET_SHORTCUTS"
+msgstr "Встановлення клавіш швидкого доступу"
+
+msgid "IDS_ST_BODY_DRAG_AND_DROP_TO_CHANGE_ORDER"
+msgstr "Перетягніть, щоб змінити порядок"
+
+msgid "IDS_ST_BODY_SELECT_APPLICATION"
+msgstr "Виберіть програму"
+
+msgid "IDS_ST_BODY_TAP_SHORTCUT_TO_ASSIGN_APPLICATION"
+msgstr "Натисніть клавішу швидкого доступу, щоб призначити програму"
+
+msgid "IDS_ST_OPT_EDIT_SHORTCUTS"
+msgstr "Редагувати клавіші шв. доступу"
+
+msgid "IDS_IM_BODY_HELP_TEXT"
+msgstr "Текст довідки"
+
diff --git a/lock-setting/po/uz.po b/lock-setting/po/uz.po
new file mode 100644
index 0000000..280ac1b
--- /dev/null
+++ b/lock-setting/po/uz.po
@@ -0,0 +1,54 @@
+msgid "IDS_ST_BODY_LOCK_SCREEN"
+msgstr "Bloklash ekrani"
+
+msgid "IDS_IDLE_BODY_VIEW_EVENT_NOTIFICATIONS_ON_THE_LOCK_SCREEN"
+msgstr "Bloklash ekranida hodisa bildirshnomalarini ko‘rib chiqish"
+
+msgid "IDS_IDLE_MBODY_EVENT_NOTIFICATIONS"
+msgstr "Hodisa bildirishnomalari"
+
+msgid "IDS_ST_BODY_CLOCK"
+msgstr "Soat"
+
+msgid "IDS_ST_BODY_WEATHER"
+msgstr "Ob-havo"
+
+msgid "IDS_ST_BODY_SET_SHORTCUTS_ON_LOCK_SCREEN"
+msgstr "Bloklash ekranida yorliqlarni o‘rnatish"
+
+msgid "IDS_ST_BODY_SHORTCUTS"
+msgstr "Yorliqlar"
+
+msgid "IDS_ST_BODY_DUAL_CLOCK"
+msgstr "Ikkitali soat"
+
+msgid "IDS_ST_BODY_SHOW_HELP_TEXT_ON_LOCK_SCREEN"
+msgstr "Bloklash ekranida yordam matnini ko‘rsatish"
+
+msgid "IDS_ST_BODY_SHOW_DUAL_CLOCK_ON_LOCK_SCREEN_WHEN_ROAMING"
+msgstr "Rouming vaqtida bloklash ekarnida ikkitali soatni ko‘rsat"
+
+msgid "IDS_ST_BODY_TAP_AND_HOLD_THE_SCREEN_WHILE_ROTATING_THE_DEVICE_TO_OPEN_CAMERA"
+msgstr "Kamerani ochish uchun, aylantirish vaqtida ekranni bosib turing"
+
+msgid "IDS_ST_MBODY_CAMERA_QUICK_ACCESS"
+msgstr "Kameraga tezkor kirish"
+
+msgid "IDS_ST_BODY_SET_SHORTCUTS"
+msgstr "Yorliqlarni o‘rnatish"
+
+msgid "IDS_ST_BODY_DRAG_AND_DROP_TO_CHANGE_ORDER"
+msgstr "Tartibni o‘zgartirish uchun tortib o‘tkazing"
+
+msgid "IDS_ST_BODY_SELECT_APPLICATION"
+msgstr "Ilova tanlash"
+
+msgid "IDS_ST_BODY_TAP_SHORTCUT_TO_ASSIGN_APPLICATION"
+msgstr "Ilovani tayinlash uchun yorliqni tanlang"
+
+msgid "IDS_ST_OPT_EDIT_SHORTCUTS"
+msgstr "Yorliqlarni tahrirlash"
+
+msgid "IDS_IM_BODY_HELP_TEXT"
+msgstr "Yordam matni"
+
diff --git a/lock-setting/po/zh_CN.po b/lock-setting/po/zh_CN.po
new file mode 100644
index 0000000..776d32c
--- /dev/null
+++ b/lock-setting/po/zh_CN.po
@@ -0,0 +1,54 @@
+msgid "IDS_ST_BODY_LOCK_SCREEN"
+msgstr "锁定屏幕"
+
+msgid "IDS_IDLE_BODY_VIEW_EVENT_NOTIFICATIONS_ON_THE_LOCK_SCREEN"
+msgstr "在锁屏上查看事件通知"
+
+msgid "IDS_IDLE_MBODY_EVENT_NOTIFICATIONS"
+msgstr "事件通知"
+
+msgid "IDS_ST_BODY_CLOCK"
+msgstr "时钟"
+
+msgid "IDS_ST_BODY_WEATHER"
+msgstr "天气"
+
+msgid "IDS_ST_BODY_SET_SHORTCUTS_ON_LOCK_SCREEN"
+msgstr "设置屏幕锁定时的快捷键"
+
+msgid "IDS_ST_BODY_SHORTCUTS"
+msgstr "快捷键"
+
+msgid "IDS_ST_BODY_DUAL_CLOCK"
+msgstr "双时钟"
+
+msgid "IDS_ST_BODY_SHOW_HELP_TEXT_ON_LOCK_SCREEN"
+msgstr "在锁定屏幕时显示帮助文本"
+
+msgid "IDS_ST_BODY_SHOW_DUAL_CLOCK_ON_LOCK_SCREEN_WHEN_ROAMING"
+msgstr "漫游时在锁屏上显示双时钟"
+
+msgid "IDS_ST_BODY_TAP_AND_HOLD_THE_SCREEN_WHILE_ROTATING_THE_DEVICE_TO_OPEN_CAMERA"
+msgstr "点击并按住屏幕同时旋转手机以打开摄像头"
+
+msgid "IDS_ST_MBODY_CAMERA_QUICK_ACCESS"
+msgstr "照相机快速访问"
+
+msgid "IDS_ST_BODY_SET_SHORTCUTS"
+msgstr "设置快捷方式"
+
+msgid "IDS_ST_BODY_DRAG_AND_DROP_TO_CHANGE_ORDER"
+msgstr "用拖放的方式调整顺序"
+
+msgid "IDS_ST_BODY_SELECT_APPLICATION"
+msgstr "选择应用程序"
+
+msgid "IDS_ST_BODY_TAP_SHORTCUT_TO_ASSIGN_APPLICATION"
+msgstr "点击快捷方式分配应用程序"
+
+msgid "IDS_ST_OPT_EDIT_SHORTCUTS"
+msgstr "编辑快捷方式"
+
+msgid "IDS_IM_BODY_HELP_TEXT"
+msgstr "帮助文本"
+
diff --git a/lock-setting/po/zh_HK.po b/lock-setting/po/zh_HK.po
new file mode 100644
index 0000000..53b912e
--- /dev/null
+++ b/lock-setting/po/zh_HK.po
@@ -0,0 +1,54 @@
+msgid "IDS_ST_BODY_LOCK_SCREEN"
+msgstr "鎖定螢幕"
+
+msgid "IDS_IDLE_BODY_VIEW_EVENT_NOTIFICATIONS_ON_THE_LOCK_SCREEN"
+msgstr "於鎖定螢幕上檢視事件通知"
+
+msgid "IDS_IDLE_MBODY_EVENT_NOTIFICATIONS"
+msgstr "事件通知"
+
+msgid "IDS_ST_BODY_CLOCK"
+msgstr "時鐘"
+
+msgid "IDS_ST_BODY_WEATHER"
+msgstr "天氣"
+
+msgid "IDS_ST_BODY_SET_SHORTCUTS_ON_LOCK_SCREEN"
+msgstr "在鎖定螢幕上設定捷徑"
+
+msgid "IDS_ST_BODY_SHORTCUTS"
+msgstr "捷徑"
+
+msgid "IDS_ST_BODY_DUAL_CLOCK"
+msgstr "雙時鐘"
+
+msgid "IDS_ST_BODY_SHOW_HELP_TEXT_ON_LOCK_SCREEN"
+msgstr "於鎖定螢幕顯示說明文字"
+
+msgid "IDS_ST_BODY_SHOW_DUAL_CLOCK_ON_LOCK_SCREEN_WHEN_ROAMING"
+msgstr "當漫遊時在鎖定螢幕上顯示雙時鐘"
+
+msgid "IDS_ST_BODY_TAP_AND_HOLD_THE_SCREEN_WHILE_ROTATING_THE_DEVICE_TO_OPEN_CAMERA"
+msgstr "輕觸並按住螢幕同時旋轉裝置以開啟相機"
+
+msgid "IDS_ST_MBODY_CAMERA_QUICK_ACCESS"
+msgstr "相機快速捷徑"
+
+msgid "IDS_ST_BODY_SET_SHORTCUTS"
+msgstr "設定捷徑"
+
+msgid "IDS_ST_BODY_DRAG_AND_DROP_TO_CHANGE_ORDER"
+msgstr "拖放以更改順序"
+
+msgid "IDS_ST_BODY_SELECT_APPLICATION"
+msgstr "選擇應用程式"
+
+msgid "IDS_ST_BODY_TAP_SHORTCUT_TO_ASSIGN_APPLICATION"
+msgstr "輕觸捷徑以指定應用程式"
+
+msgid "IDS_ST_OPT_EDIT_SHORTCUTS"
+msgstr "編輯捷徑"
+
+msgid "IDS_IM_BODY_HELP_TEXT"
+msgstr "說明文字"
+
diff --git a/lock-setting/po/zh_SG.po b/lock-setting/po/zh_SG.po
new file mode 100644
index 0000000..c78be58
--- /dev/null
+++ b/lock-setting/po/zh_SG.po
@@ -0,0 +1,54 @@
+msgid "IDS_ST_BODY_LOCK_SCREEN"
+msgstr "锁定屏幕"
+
+msgid "IDS_IDLE_BODY_VIEW_EVENT_NOTIFICATIONS_ON_THE_LOCK_SCREEN"
+msgstr "在锁屏上查看事件通知"
+
+msgid "IDS_IDLE_MBODY_EVENT_NOTIFICATIONS"
+msgstr "事件通知"
+
+msgid "IDS_ST_BODY_CLOCK"
+msgstr "时钟"
+
+msgid "IDS_ST_BODY_WEATHER"
+msgstr "天气"
+
+msgid "IDS_ST_BODY_SET_SHORTCUTS_ON_LOCK_SCREEN"
+msgstr "设置锁屏快捷方式"
+
+msgid "IDS_ST_BODY_SHORTCUTS"
+msgstr "快捷键"
+
+msgid "IDS_ST_BODY_DUAL_CLOCK"
+msgstr "双时钟"
+
+msgid "IDS_ST_BODY_SHOW_HELP_TEXT_ON_LOCK_SCREEN"
+msgstr "在锁定屏幕上显示帮助文本"
+
+msgid "IDS_ST_BODY_SHOW_DUAL_CLOCK_ON_LOCK_SCREEN_WHEN_ROAMING"
+msgstr "漫游时在锁屏上显示双时钟"
+
+msgid "IDS_ST_BODY_TAP_AND_HOLD_THE_SCREEN_WHILE_ROTATING_THE_DEVICE_TO_OPEN_CAMERA"
+msgstr "轻敲并按住屏幕同时旋转设备以打开摄像头"
+
+msgid "IDS_ST_MBODY_CAMERA_QUICK_ACCESS"
+msgstr "摄像头快速访问"
+
+msgid "IDS_ST_BODY_SET_SHORTCUTS"
+msgstr "设置快捷方式"
+
+msgid "IDS_ST_BODY_DRAG_AND_DROP_TO_CHANGE_ORDER"
+msgstr "用拖放的方式调整顺序"
+
+msgid "IDS_ST_BODY_SELECT_APPLICATION"
+msgstr "选择应用程序"
+
+msgid "IDS_ST_BODY_TAP_SHORTCUT_TO_ASSIGN_APPLICATION"
+msgstr "轻敲快捷方式分配应用程序"
+
+msgid "IDS_ST_OPT_EDIT_SHORTCUTS"
+msgstr "编辑快捷键"
+
+msgid "IDS_IM_BODY_HELP_TEXT"
+msgstr "帮助文本"
+
diff --git a/lock-setting/po/zh_TW.po b/lock-setting/po/zh_TW.po
new file mode 100644
index 0000000..5859f7f
--- /dev/null
+++ b/lock-setting/po/zh_TW.po
@@ -0,0 +1,54 @@
+msgid "IDS_ST_BODY_LOCK_SCREEN"
+msgstr "鎖定螢幕"
+
+msgid "IDS_IDLE_BODY_VIEW_EVENT_NOTIFICATIONS_ON_THE_LOCK_SCREEN"
+msgstr "於鎖定螢幕上檢視活動通知"
+
+msgid "IDS_IDLE_MBODY_EVENT_NOTIFICATIONS"
+msgstr "活動通知"
+
+msgid "IDS_ST_BODY_CLOCK"
+msgstr "時鐘"
+
+msgid "IDS_ST_BODY_WEATHER"
+msgstr "氣象"
+
+msgid "IDS_ST_BODY_SET_SHORTCUTS_ON_LOCK_SCREEN"
+msgstr "在鎖定螢幕上設定捷徑"
+
+msgid "IDS_ST_BODY_SHORTCUTS"
+msgstr "捷徑"
+
+msgid "IDS_ST_BODY_DUAL_CLOCK"
+msgstr "雙時鐘"
+
+msgid "IDS_ST_BODY_SHOW_HELP_TEXT_ON_LOCK_SCREEN"
+msgstr "於鎖定螢幕顯示說明文字"
+
+msgid "IDS_ST_BODY_SHOW_DUAL_CLOCK_ON_LOCK_SCREEN_WHEN_ROAMING"
+msgstr "漫遊時在鎖定螢幕上顯示雙時鐘"
+
+msgid "IDS_ST_BODY_TAP_AND_HOLD_THE_SCREEN_WHILE_ROTATING_THE_DEVICE_TO_OPEN_CAMERA"
+msgstr "輕觸並按住螢幕同時旋轉裝置以開啟相機"
+
+msgid "IDS_ST_MBODY_CAMERA_QUICK_ACCESS"
+msgstr "相機快速捷徑"
+
+msgid "IDS_ST_BODY_SET_SHORTCUTS"
+msgstr "設定捷徑"
+
+msgid "IDS_ST_BODY_DRAG_AND_DROP_TO_CHANGE_ORDER"
+msgstr "拖放以變更順序"
+
+msgid "IDS_ST_BODY_SELECT_APPLICATION"
+msgstr "選擇應用程式"
+
+msgid "IDS_ST_BODY_TAP_SHORTCUT_TO_ASSIGN_APPLICATION"
+msgstr "輕觸捷徑以指定應用程式"
+
+msgid "IDS_ST_OPT_EDIT_SHORTCUTS"
+msgstr "編輯快捷鍵"
+
+msgid "IDS_IM_BODY_HELP_TEXT"
+msgstr "說明文字"
+
diff --git a/packaging/starter.path b/packaging/starter.path
new file mode 100644
index 0000000..724239c
--- /dev/null
+++ b/packaging/starter.path
@@ -0,0 +1,5 @@
+[Unit]
+Description=Path activation for the "starter" programme
+
+[Path]
+PathExists=/tmp/amd_ready
diff --git a/packaging/starter.service b/packaging/starter.service
new file mode 100644
index 0000000..a301939
--- /dev/null
+++ b/packaging/starter.service
@@ -0,0 +1,11 @@
+[Unit]
+Description=Start the "starter" program
+Before=core-efl.target
+After=xorg.target
+
+[Service]
+ExecStart=/usr/bin/starter
+
+[Install]
+WantedBy=core-efl.target
+WantedBy=tizen-mobile-session.target
diff --git a/packaging/starter.spec b/packaging/starter.spec
new file mode 100755
index 0000000..b33cc21
--- /dev/null
+++ b/packaging/starter.spec
@@ -0,0 +1,109 @@
+Name: starter
+Summary: starter
+Version: 0.4.56
+Release: 1
+Group: TO_BE/FILLED_IN
+License: TO_BE/FILLED_IN
+Source0: starter-%{version}.tar.gz
+Source1: starter.service
+Source2: starter.path
+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: cmake
+BuildRequires: edje-bin
+BuildRequires: gettext-tools
+
+Requires(post): /usr/bin/vconftool
+
+%description
+Description: Starter
+
+
+%prep
+%setup -q
+
+cmake . -DCMAKE_INSTALL_PREFIX=%{_prefix}
+
+%build
+
+make -j1
+%install
+rm -rf %{buildroot}
+%make_install
+
+mkdir -p %{buildroot}%{_libdir}/systemd/user/core-efl.target.wants
+install -m 0644 %SOURCE1 %{buildroot}%{_libdir}/systemd/user/
+install -m 0644 %SOURCE2 %{buildroot}%{_libdir}/systemd/user/
+ln -s ../starter.path %{buildroot}%{_libdir}/systemd/user/core-efl.target.wants/starter.path
+mkdir -p %{buildroot}/usr/share/license
+cp -f LICENSE.Flora %{buildroot}/usr/share/license/%{name}
+mkdir -p %{buildroot}/opt/data/home-daemon
+
+%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 string memory/menuscreen/desktop "0" -i -f
+vconftool set -t int memory/idle-screen/is_idle_screen_launched "0" -i -u 5000 -f
+vconftool set -t int memory/idle-screen/top "0" -i -f
+vconftool set -t int memory/idle-screen/safemode "0" -i -f
+
+ln -sf /etc/init.d/rd4starter /etc/rc.d/rc4.d/S81starter
+ln -sf /etc/init.d/rd3starter /etc/rc.d/rc3.d/S43starter
+
+
+%files
+%manifest starter.manifest
+%defattr(-,root,root,-)
+%{_sysconfdir}/init.d/rd4starter
+%{_sysconfdir}/init.d/rd3starter
+%{_bindir}/starter
+/usr/ug/lib/libug-lockscreen-options.so
+/usr/ug/lib/libug-lockscreen-options.so.0.1.0
+/usr/ug/res/locale/*/LC_MESSAGES/*
+%{_libdir}/systemd/user/starter.path
+%{_libdir}/systemd/user/starter.service
+%{_libdir}/systemd/user/core-efl.target.wants/starter.path
+/usr/share/license/%{name}
+/opt/data/home-daemon
diff --git a/rd3starter b/rd3starter
new file mode 100755
index 0000000..0304170
--- /dev/null
+++ b/rd3starter
@@ -0,0 +1,26 @@
+#!/bin/sh
+
+# commented and this was moved to isf-panel-efl code
+#while [ ! -f /tmp/.wm_ready ];
+#do
+# sleep 0.1
+#done
+
+while [ ! -f /tmp/amd_ready ];
+do
+ sleep 0.1
+done
+
+vconf_set_safemode()
+{
+ if [ -f /opt/etc/.safemode ]
+ then
+ vconftool set -t int memory/idle-screen/safemode "1" -i -f
+ else
+ vconftool set -t int memory/idle-screen/safemode "0" -i -f
+ fi
+}
+vconf_set_safemode
+
+echo -e "<2>[${_G}menu-daemon start${C_}]" > /dev/kmsg
+/usr/bin/starter &
diff --git a/rd4starter b/rd4starter
new file mode 100755
index 0000000..e5a896c
--- /dev/null
+++ b/rd4starter
@@ -0,0 +1,14 @@
+#!/bin/sh
+vconf_set_safemode()
+{
+ if [ -f /opt/etc/.safemode ]
+ then
+ vconftool set -t int memory/idle-screen/safemode "1" -i -f
+ else
+ vconftool set -t int memory/idle-screen/safemode "0" -i -f
+ fi
+}
+vconf_set_safemode
+
+echo -e "<2>[${_G}menu-daemon start${C_}]" > /dev/kmsg
+/usr/bin/starter &
diff --git a/src/hw_key.c b/src/hw_key.c
new file mode 100755
index 0000000..9d9093d
--- /dev/null
+++ b/src/hw_key.c
@@ -0,0 +1,347 @@
+ /*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://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 <bundle.h>
+#include <Elementary.h>
+#include <Ecore_X.h>
+#include <Ecore_Input.h>
+#include <sysman.h>
+#include <syspopup_caller.h>
+#include <utilX.h>
+#include <vconf.h>
+#include <system/media_key.h>
+
+#include "hw_key.h"
+#include "util.h"
+
+#define TASKMGR_PKG_NAME "org.tizen.taskmgr"
+#define CAMERA_PKG_NAME "org.tizen.camera-app"
+#define CALLLOG_PKG_NAME "org.tizen.calllog"
+#define MUSIC_PLAYER_PKG_NAME "org.tizen.music-player"
+
+
+
+static struct {
+ Ecore_X_Window win;
+ Ecore_Event_Handler *key_up;
+ Ecore_Event_Handler *key_down;
+ Ecore_Timer *long_press;
+ Ecore_Timer *single_timer;
+ Ecore_Timer *volume_up_long_press;
+ Ecore_Timer *volume_down_long_press;
+ Eina_Bool cancel;
+} key_info = {
+ .win = 0x0,
+ .key_up = NULL,
+ .key_down = NULL,
+ .long_press = NULL,
+ .single_timer = NULL,
+ .volume_up_long_press = NULL,
+ .volume_down_long_press = NULL,
+ .cancel = EINA_FALSE,
+};
+
+
+
+static Eina_Bool _launch_taskmgr_cb(void* data)
+{
+ int val1 = -1;
+ int val2 = -1;
+ _D("Launch TASKMGR");
+
+ key_info.long_press = NULL;
+
+ if (vconf_get_int(VCONFKEY_PM_STATE, &val1) < 0) {
+ _E("Cannot get VCONFKEY_PM_STATE");
+ return ECORE_CALLBACK_CANCEL;
+ }
+ if (vconf_get_int(VCONFKEY_IDLE_LOCK_STATE, &val2) < 0) {
+ _E("Cannot get VCONFKEY_IDLE_LOCK_STATE");
+ return ECORE_CALLBACK_CANCEL;
+ }
+
+ if ((val1 == VCONFKEY_PM_STATE_NORMAL) && (val2 == VCONFKEY_IDLE_UNLOCK)) {
+ _D("LCD ON, UNLOCK state => launch taskmgr");
+ if (aul_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_home_screen(void *data)
+{
+ char *package;
+ int ret;
+
+ syspopup_destroy_all();
+ key_info.single_timer = NULL;
+
+ package = vconf_get_str(VCONFKEY_SETAPPL_SELECTED_PACKAGE_NAME);
+ if (package) {
+ ret = aul_open_app(package);
+ if (ret < 0) {
+ _E("cannot launch package %s(err:%d)", package, ret);
+
+ if (-1 == ret) {
+ ret = aul_open_app(HOME_SCREEN_PKG_NAME);
+ if (ret < 0) {
+ _E("Failed to open a default home, %s(err:%d)", HOME_SCREEN_PKG_NAME, ret);
+ }
+ }
+ }
+
+ free(package);
+ } else {
+ ret = aul_open_app(HOME_SCREEN_PKG_NAME);
+ if (ret < 0) _E("Cannot open default home");
+ }
+
+ if (ret > 0) {
+ if (-1 == sysconf_set_mempolicy_bypid(ret, OOM_IGNORE)) {
+ _E("Cannot set the memory policy for Home-screen(%d)", ret);
+ } else {
+ _E("Set the memory policy for Home-screen(%d)", ret);
+ }
+ }
+
+ return ECORE_CALLBACK_CANCEL;
+}
+
+
+
+inline static int _release_home_key(void)
+{
+ retv_if(NULL == key_info.long_press, EXIT_SUCCESS);
+ ecore_timer_del(key_info.long_press);
+ key_info.long_press = NULL;
+
+ if (NULL == key_info.single_timer) {
+ key_info.single_timer = ecore_timer_add(0.3, _launch_home_screen, NULL);
+ return EXIT_SUCCESS;
+ }
+ ecore_timer_del(key_info.single_timer);
+ key_info.single_timer = NULL;
+
+ syspopup_destroy_all();
+
+ return EXIT_SUCCESS;
+}
+
+
+
+inline static void _release_multimedia_key(const char *value)
+{
+ bundle *b;
+ int ret;
+
+ _D("Multimedia key is released with %s", value);
+ ret_if(NULL == value);
+
+ b = bundle_create();
+ if (!b) {
+ _E("Cannot create bundle");
+ return;
+ }
+
+ bundle_add(b, "multimedia_key", value);
+ ret = aul_launch_app(MUSIC_PLAYER_PKG_NAME, b);
+ bundle_free(b);
+
+ if (ret < 0)
+ _E("Failed to launch the running apps, ret : %d", ret);
+}
+
+
+
+static Eina_Bool _key_release_cb(void *data, int type, void *event)
+{
+ Evas_Event_Key_Up *ev = event;
+ int val = -1;
+
+ _D("Released");
+
+ if (!ev) {
+ _D("Invalid event object");
+ return ECORE_CALLBACK_RENEW;
+ }
+
+ if (!strcmp(ev->keyname, KEY_END)) {
+ } else if (!strcmp(ev->keyname, KEY_CONFIG)) {
+ } else if (!strcmp(ev->keyname, KEY_SEND)) {
+ } else if (!strcmp(ev->keyname, KEY_HOME)) {
+
+ if (vconf_get_int(VCONFKEY_IDLE_LOCK_STATE, &val) < 0) {
+ _D("Cannot get VCONFKEY_IDLE_LOCK_STATE");
+ }
+ if (val == VCONFKEY_IDLE_LOCK) {
+ _D("lock state, ignore home key..!!");
+ return ECORE_CALLBACK_RENEW;
+ }
+
+ if (EINA_TRUE == key_info.cancel) {
+ _D("Cancel key is activated");
+ if (key_info.long_press) {
+ ecore_timer_del(key_info.long_press);
+ key_info.long_press = NULL;
+ }
+
+ if (key_info.single_timer) {
+ ecore_timer_del(key_info.single_timer);
+ key_info.single_timer = NULL;
+ }
+
+ return ECORE_CALLBACK_RENEW;
+ }
+
+ _release_home_key();
+ } else if (!strcmp(ev->keyname, KEY_PAUSE)) {
+ } else if (!strcmp(ev->keyname, KEY_CANCEL)) {
+ _D("CANCEL Key is released");
+ key_info.cancel = EINA_FALSE;
+ } else if (!strcmp(ev->keyname, KEY_MEDIA)) {
+ _release_multimedia_key("KEY_PLAYCD");
+ }
+
+ return ECORE_CALLBACK_RENEW;
+}
+
+
+
+static Eina_Bool _key_press_cb(void *data, int type, void *event)
+{
+ Evas_Event_Key_Down *ev = event;
+ int val = -1;
+
+ _D("Pressed");
+
+ if (!ev) {
+ _D("Invalid event object");
+ return ECORE_CALLBACK_RENEW;
+ }
+
+ if (!strcmp(ev->keyname, KEY_SEND)) {
+ _D("Launch calllog");
+ if (aul_open_app(CALLLOG_PKG_NAME) < 0)
+ _E("Failed to launch %s", CALLLOG_PKG_NAME);
+ } else if(!strcmp(ev->keyname, KEY_CONFIG)) {
+ _D("Launch camera");
+ if (aul_open_app(CAMERA_PKG_NAME) < 0)
+ _E("Failed to launch %s", CAMERA_PKG_NAME);
+ } else if (!strcmp(ev->keyname, KEY_HOME)) {
+ if (vconf_get_int(VCONFKEY_IDLE_LOCK_STATE, &val) < 0) {
+ _D("Cannot get VCONFKEY_IDLE_LOCK_STATE");
+ }
+ if (val == VCONFKEY_IDLE_LOCK) {
+ _D("lock state, ignore home key..!!");
+ return ECORE_CALLBACK_RENEW;
+ }
+ if (key_info.long_press) {
+ ecore_timer_del(key_info.long_press);
+ key_info.long_press = NULL;
+ }
+
+ key_info.long_press = ecore_timer_add(0.6, _launch_taskmgr_cb, NULL);
+ if (!key_info.long_press)
+ _E("Failed to add timer for long press detection");
+ } else if (!strcmp(ev->keyname, KEY_CANCEL)) {
+ _D("Cancel button is pressed");
+ key_info.cancel = EINA_TRUE;
+ } else if (!strcmp(ev->keyname, KEY_MEDIA)) {
+ _D("Media key is pressed");
+ }
+
+ return ECORE_CALLBACK_RENEW;
+}
+
+
+
+void _media_key_event_cb(media_key_e key, media_key_event_e status, void *user_data)
+{
+ _D("MEDIA KEY EVENT");
+ if (MEDIA_KEY_STATUS_PRESSED == status) return;
+
+ if (MEDIA_KEY_PAUSE == key) {
+ _release_multimedia_key("KEY_PAUSECD");
+ } else if (MEDIA_KEY_PLAY == key) {
+ _release_multimedia_key("KEY_PLAYCD");
+ }
+}
+
+
+
+void create_key_window(void)
+{
+ key_info.win = ecore_x_window_input_new(0, 0, 0, 1, 1);
+ if (!key_info.win) {
+ _D("Failed to create hidden window");
+ return;
+ }
+ ecore_x_event_mask_unset(key_info.win, ECORE_X_EVENT_MASK_NONE);
+ ecore_x_icccm_title_set(key_info.win, "menudaemon,key,receiver");
+ ecore_x_netwm_name_set(key_info.win, "menudaemon,key,receiver");
+ ecore_x_netwm_pid_set(key_info.win, getpid());
+
+ utilx_grab_key(ecore_x_display_get(), key_info.win, KEY_HOME, SHARED_GRAB);
+ utilx_grab_key(ecore_x_display_get(), key_info.win, KEY_VOLUMEDOWN, SHARED_GRAB);
+ utilx_grab_key(ecore_x_display_get(), key_info.win, KEY_VOLUMEUP, SHARED_GRAB);
+ utilx_grab_key(ecore_x_display_get(), key_info.win, KEY_CONFIG, SHARED_GRAB);
+ utilx_grab_key(ecore_x_display_get(), key_info.win, KEY_MEDIA, SHARED_GRAB);
+
+ key_info.key_up = ecore_event_handler_add(ECORE_EVENT_KEY_UP, _key_release_cb, NULL);
+ if (!key_info.key_up)
+ _D("Failed to register a key up event handler");
+
+ key_info.key_down = ecore_event_handler_add(ECORE_EVENT_KEY_DOWN, _key_press_cb, NULL);
+ if (!key_info.key_down)
+ _D("Failed to register a key down event handler");
+
+ media_key_reserve(_media_key_event_cb, NULL);
+}
+
+
+
+void destroy_key_window(void)
+{
+ utilx_ungrab_key(ecore_x_display_get(), key_info.win, KEY_HOME);
+ utilx_ungrab_key(ecore_x_display_get(), key_info.win, KEY_VOLUMEDOWN);
+ utilx_ungrab_key(ecore_x_display_get(), key_info.win, KEY_VOLUMEUP);
+ utilx_ungrab_key(ecore_x_display_get(), key_info.win, KEY_CONFIG);
+ utilx_ungrab_key(ecore_x_display_get(), key_info.win, KEY_MEDIA);
+
+ if (key_info.key_up) {
+ ecore_event_handler_del(key_info.key_up);
+ key_info.key_up = NULL;
+ }
+
+ if (key_info.key_down) {
+ ecore_event_handler_del(key_info.key_down);
+ key_info.key_down = NULL;
+ }
+
+ ecore_x_window_delete_request_send(key_info.win);
+ key_info.win = 0x0;
+
+ media_key_release();
+}
diff --git a/src/lock-daemon.c b/src/lock-daemon.c
new file mode 100755
index 0000000..3847f8c
--- /dev/null
+++ b/src/lock-daemon.c
@@ -0,0 +1,688 @@
+ /*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://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 <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->lock_type == 0) {
+ LOCKD_DBG("lock app(pid:%d) is destroyed.", pid);
+
+ lockd_unlock_lockscreen(lockd);
+ }
+
+ menu_daemon_check_dead_signal(pid);
+
+ return 0;
+}
+
+static Eina_Bool lockd_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)) {
+ if (lockd->lock_type > 1) {
+ ecore_idler_add(lockd_set_lock_state_cb, NULL);
+ }
+ }
+ return EINA_FALSE;
+}
+
+static int lockd_launch_app_lockscreen(struct lockd_data *lockd)
+{
+ LOCKD_DBG("launch app lock screen");
+
+ int call_state = -1, phlock_state = -1, factory_mode = -1, test_mode = -1;
+ int r = 0;
+
+ WRITE_FILE_LOG("%s", "Launch lockscreen in starter");
+
+ 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;
+ }
+
+ if (lockd->lock_type == 0) {
+ lockd->lock_app_pid =
+ lockd_process_mgr_start_normal_lock(lockd, lockd_app_dead_cb);
+ if (lockd->lock_app_pid < 0)
+ return 0;
+ lockd_window_mgr_finish_lock(lockd->lockw);
+ lockd_window_mgr_ready_lock(lockd, lockd->lockw, lockd_app_create_cb,
+ lockd_app_show_cb);
+ } else if (lockd->lock_type == 1) {
+ vconf_set_bool(VCONFKEY_LOCKSCREEN_PHONE_LOCK_VERIFICATION, FALSE);
+ if (lockd_process_mgr_check_lock(lockd->phone_lock_app_pid) == TRUE) {
+ LOCKD_DBG("phone lock App is already running.");
+ if (lockd->request_recovery == FALSE)
+ return 1;
+ }
+ lockd->phone_lock_app_pid = lockd_process_mgr_start_phone_lock();
+
+ phone_lock_pid = lockd->phone_lock_app_pid;
+ LOCKD_DBG("%s, %d, phone_lock_pid = %d", __func__, __LINE__,
+ phone_lock_pid);
+ lockd_window_set_phonelock_pid(lockd->lockw, phone_lock_pid);
+ } else {
+ lockd->lock_app_pid =
+ lockd_process_mgr_start_lock(lockd, lockd_app_dead_cb,
+ lockd->lock_type);
+ if (lockd->lock_app_pid < 0)
+ return 0;
+ lockd_window_mgr_finish_lock(lockd->lockw);
+ lockd_window_mgr_ready_lock(lockd, lockd->lockw, lockd_app_create_cb,
+ lockd_app_show_cb);
+ }
+ return 1;
+}
+
+static void lockd_unlock_lockscreen(struct lockd_data *lockd)
+{
+ LOCKD_DBG("unlock lock screen");
+ lockd->lock_app_pid = 0;
+
+ vconf_set_int(VCONFKEY_IDLE_LOCK_STATE, VCONFKEY_IDLE_UNLOCK);
+ lockd_window_mgr_finish_lock(lockd->lockw);
+}
+
+inline static void lockd_set_sock_option(int fd, int cli)
+{
+ int size;
+ int ret;
+ struct timeval tv = { 1, 200 * 1000 };
+
+ size = PHLOCK_SOCK_MAXBUFF;
+ ret = setsockopt(fd, SOL_SOCKET, SO_SNDBUF, &size, sizeof(size));
+ if(ret != 0)
+ return;
+ ret = setsockopt(fd, SOL_SOCKET, SO_RCVBUF, &size, sizeof(size));
+ if(ret != 0)
+ return;
+ if (cli) {
+ ret = setsockopt(fd, SOL_SOCKET, SO_RCVTIMEO, &tv, sizeof(tv));
+ if(ret != 0)
+ return;
+ }
+}
+
+static int lockd_create_sock(void)
+{
+ struct sockaddr_un saddr;
+ int fd;
+
+ fd = socket(AF_UNIX, SOCK_STREAM, 0);
+ if (fd < 0) {
+ if (errno == EINVAL) {
+ fd = socket(AF_UNIX, SOCK_STREAM, 0);
+ if (fd < 0) {
+ LOCKD_DBG
+ ("second chance - socket create error");
+ return -1;
+ }
+ } else {
+ LOCKD_DBG("socket error");
+ return -1;
+ }
+ }
+
+ bzero(&saddr, sizeof(saddr));
+ saddr.sun_family = AF_UNIX;
+
+ strncpy(saddr.sun_path, PHLOCK_SOCK_PREFIX, strlen(PHLOCK_SOCK_PREFIX));
+ saddr.sun_path[strlen(PHLOCK_SOCK_PREFIX)] = 0;
+
+ unlink(saddr.sun_path);
+
+ if (bind(fd, (struct sockaddr *)&saddr, sizeof(saddr)) < 0) {
+ LOCKD_DBG("bind error");
+ close(fd);
+ return -1;
+ }
+
+ if (chmod(saddr.sun_path, (S_IRWXU | S_IRWXG | S_IRWXO)) < 0) {
+ LOCKD_DBG("failed to change the socket permission");
+ close(fd);
+ return -1;
+ }
+
+ lockd_set_sock_option(fd, 0);
+
+ if (listen(fd, 10) == -1) {
+ LOCKD_DBG("listen error");
+ close(fd);
+ return -1;
+ }
+
+ return fd;
+}
+
+static gboolean lockd_glib_check(GSource * src)
+{
+ GSList *fd_list;
+ GPollFD *tmp;
+
+ fd_list = src->poll_fds;
+ do {
+ tmp = (GPollFD *) fd_list->data;
+ if ((tmp->revents & (POLLIN | POLLPRI)))
+ return TRUE;
+ fd_list = fd_list->next;
+ } while (fd_list);
+
+ return FALSE;
+}
+
+static char *lockd_read_cmdline_from_proc(int pid)
+{
+ int memsize = 32;
+ char path[32];
+ char *cmdline = NULL, *tempptr = NULL;
+ FILE *fp = NULL;
+
+ snprintf(path, sizeof(path), "/proc/%d/cmdline", pid);
+
+ fp = fopen(path, "r");
+ if (fp == NULL) {
+ LOCKD_DBG("Cannot open cmdline on pid[%d]", pid);
+ return NULL;
+ }
+
+ cmdline = malloc(32);
+ if (cmdline == NULL) {
+ LOCKD_DBG("%s", "Out of memory");
+ fclose(fp);
+ return NULL;
+ }
+
+ bzero(cmdline, memsize);
+ if (fgets(cmdline, 32, fp) == NULL) {
+ LOCKD_DBG("%s", "Cannot read cmdline");
+ free(cmdline);
+ fclose(fp);
+ return NULL;
+ }
+
+ while (cmdline[memsize - 2] != 0) {
+ cmdline[memsize - 1] = (char)fgetc(fp);
+ tempptr = realloc(cmdline, memsize + 32);
+ if (tempptr == NULL) {
+ fclose(fp);
+ LOCKD_DBG("%s", "Out of memory");
+ return NULL;
+ }
+ cmdline = tempptr;
+ bzero(cmdline + memsize, 32);
+ fgets(cmdline + memsize, 32, fp);
+ memsize += 32;
+ }
+
+ if (fp != NULL)
+ fclose(fp);
+ return cmdline;
+}
+
+static int lockd_sock_handler(void *data)
+{
+ int cl;
+ int len;
+ int sun_size;
+ int clifd = -1;
+ char cmd[PHLOCK_SOCK_MAXBUFF];
+ char *cmdline = NULL;
+ int val = -1;
+ int fd = -1;
+ int recovery_state = -1;
+ GPollFD *gpollfd;
+
+ struct ucred cr;
+ struct sockaddr_un lockd_addr;
+ struct lockd_data *lockd = (struct lockd_data *)data;
+
+ if ((lockd == NULL) || (lockd->gpollfd == NULL)) {
+ LOCKD_DBG("lockd->gpollfd is NULL");
+ return -1;
+ }
+ gpollfd = (GPollFD *)lockd->gpollfd;
+ fd = gpollfd->fd;
+
+ cl = sizeof(cr);
+ sun_size = sizeof(struct sockaddr_un);
+
+ if ((clifd =
+ accept(fd, (struct sockaddr *)&lockd_addr,
+ (socklen_t *) & sun_size)) == -1) {
+ if (errno != EINTR)
+ LOCKD_DBG("accept error");
+ return -1;
+ }
+
+ if (getsockopt(clifd, SOL_SOCKET, SO_PEERCRED, &cr, (socklen_t *) & cl)
+ < 0) {
+ LOCKD_DBG("peer information error");
+ close(clifd);
+ return -1;
+ }
+ LOCKD_DBG("Peer's pid=%d, uid=%d, gid=%d\n", cr.pid, cr.uid, cr.gid);
+
+ memset(cmd, 0, PHLOCK_SOCK_MAXBUFF);
+
+ lockd_set_sock_option(clifd, 1);
+
+ len = recv(clifd, cmd, PHLOCK_SOCK_MAXBUFF, 0);
+ cmd[PHLOCK_SOCK_MAXBUFF - 1] = '\0';
+
+ if (len != strlen(cmd)) {
+ LOCKD_DBG("recv error %d %d", len, strlen(cmd));
+ close(clifd);
+ return -1;
+ }
+
+ LOCKD_DBG("cmd %s", cmd);
+
+ cmdline = lockd_read_cmdline_from_proc(cr.pid);
+ if (cmdline == NULL) {
+ LOCKD_DBG("Error on opening /proc/%d/cmdline", cr.pid);
+ close(clifd);
+ return -1;
+ }
+
+ LOCKD_DBG("/proc/%d/cmdline : %s", cr.pid, cmdline);
+ LOCKD_DBG("phone_lock_pid : %d vs cr.pid : %d", phone_lock_pid, cr.pid);
+
+ if ((!strncmp(cmdline, PHLOCK_APP_CMDLINE, strlen(cmdline)))
+ && (!strncmp(cmd, PHLOCK_UNLOCK_CMD, strlen(cmd)))) {
+ LOCKD_DBG("cmd is %s\n", PHLOCK_UNLOCK_CMD);
+
+ if (phone_lock_pid == cr.pid) {
+ LOCKD_DBG("pid [%d] %s is verified, unlock..!!\n", cr.pid,
+ cmdline);
+ lockd_process_mgr_terminate_phone_lock(phone_lock_pid);
+ phone_lock_pid = 0;
+ vconf_set_bool(VCONFKEY_LOCKSCREEN_PHONE_LOCK_VERIFICATION, TRUE);
+ }
+ } else if (!strncmp(cmd, PHLOCK_LAUNCH_CMD, strlen(cmd))) {
+ LOCKD_DBG("cmd is %s\n", PHLOCK_LAUNCH_CMD);
+ if (_lockd_get_lock_type() == 1) {
+ lockd->lock_type = 1;
+ lockd_launch_app_lockscreen(lockd);
+ }
+ }
+
+ if(cmdline != NULL) {
+ free(cmdline);
+ cmdline = NULL;
+ }
+
+ close(clifd);
+ return 0;
+}
+
+static gboolean lockd_glib_handler(gpointer data)
+{
+ if (lockd_sock_handler(data) < 0) {
+ LOCKD_DBG("lockd_sock_handler is failed..!!");
+ }
+ return TRUE;
+}
+
+static gboolean lockd_glib_dispatch(GSource * src, GSourceFunc callback,
+ gpointer data)
+{
+ callback(data);
+ return TRUE;
+}
+
+static gboolean lockd_glib_prepare(GSource * src, gint * timeout)
+{
+ return FALSE;
+}
+
+static GSourceFuncs funcs = {
+ .prepare = lockd_glib_prepare,
+ .check = lockd_glib_check,
+ .dispatch = lockd_glib_dispatch,
+ .finalize = NULL
+};
+
+static int lockd_init_sock(struct lockd_data *lockd)
+{
+ int fd;
+ GPollFD *gpollfd;
+ GSource *src;
+ int ret;
+
+ fd = lockd_create_sock();
+ if (fd < 0) {
+ LOCKD_DBG("lock daemon create sock failed..!!");
+ }
+
+ src = g_source_new(&funcs, sizeof(GSource));
+
+ gpollfd = (GPollFD *) g_malloc(sizeof(GPollFD));
+ gpollfd->events = POLLIN;
+ gpollfd->fd = fd;
+
+ lockd->gpollfd = gpollfd;
+
+ g_source_add_poll(src, lockd->gpollfd);
+ g_source_set_callback(src, (GSourceFunc) lockd_glib_handler,
+ (gpointer) lockd, NULL);
+ g_source_set_priority(src, G_PRIORITY_LOW);
+
+ ret = g_source_attach(src, NULL);
+ if (ret == 0)
+ return -1;
+
+ g_source_unref(src);
+
+ return 0;
+}
+
+static void lockd_init_vconf(struct lockd_data *lockd)
+{
+ int val = -1;
+
+ if (vconf_notify_key_changed
+ (VCONFKEY_PM_STATE, _lockd_notify_pm_state_cb, lockd) != 0) {
+ LOCKD_ERR("Fail vconf_notify_key_changed : VCONFKEY_PM_STATE");
+ }
+
+ if (vconf_notify_key_changed
+ (VCONFKEY_LOCKSCREEN_PHONE_LOCK_VERIFICATION,
+ _lockd_notify_phone_lock_verification_cb, lockd) != 0) {
+ if (vconf_get_bool(VCONFKEY_LOCKSCREEN_PHONE_LOCK_VERIFICATION, &val) < 0) {
+ LOCKD_ERR
+ ("Cannot get %s", VCONFKEY_LOCKSCREEN_PHONE_LOCK_VERIFICATION);
+ vconf_set_bool(VCONFKEY_LOCKSCREEN_PHONE_LOCK_VERIFICATION, 0);
+ if (vconf_notify_key_changed
+ (VCONFKEY_LOCKSCREEN_PHONE_LOCK_VERIFICATION,
+ _lockd_notify_phone_lock_verification_cb,
+ lockd) != 0) {
+ LOCKD_ERR
+ ("Fail vconf_notify_key_changed : %s", VCONFKEY_LOCKSCREEN_PHONE_LOCK_VERIFICATION);
+ }
+ } else {
+ LOCKD_ERR
+ ("Fail vconf_notify_key_changed : %s", VCONFKEY_LOCKSCREEN_PHONE_LOCK_VERIFICATION);
+ }
+ }
+
+ if (vconf_notify_key_changed
+ (VCONFKEY_IDLE_LOCK_STATE,
+ _lockd_notify_lock_state_cb,
+ lockd) != 0) {
+ LOCKD_ERR
+ ("[Error] vconf notify : lock state");
+ }
+}
+
+static void lockd_start_lock_daemon(void *data)
+{
+ struct lockd_data *lockd = NULL;
+ int r = 0;
+
+ lockd = (struct lockd_data *)data;
+
+ if (!lockd) {
+ return;
+ }
+
+ LOCKD_DBG("%s, %d", __func__, __LINE__);
+
+ lockd_init_vconf(lockd);
+
+ r = lockd_init_sock(lockd);
+ if (r < 0) {
+ LOCKD_DBG("lockd init socket failed: %d", r);
+ }
+
+ lockd->lockw = lockd_window_init();
+
+ aul_listen_app_dead_signal(lockd_app_dead_cb, data);
+
+ LOCKD_DBG("%s, %d", __func__, __LINE__);
+}
+
+int start_lock_daemon(int launch_lock)
+{
+ struct lockd_data *lockd = NULL;
+ int val = -1;
+ int recovery_state = -1;
+ int first_boot = 0;
+ int lock_type = 0;
+ int ret = 0;
+
+ LOCKD_DBG("%s, %d", __func__, __LINE__);
+
+ lockd = (struct lockd_data *)malloc(sizeof(struct lockd_data));
+ memset(lockd, 0x0, sizeof(struct lockd_data));
+ lockd_start_lock_daemon(lockd);
+
+ if (launch_lock == FALSE) {
+ LOCKD_DBG("Don't launch lockscreen..");
+ return 0;
+ }
+
+ if (vconf_get_bool(VCONFKEY_PWLOCK_FIRST_BOOT, &first_boot) < 0) {
+ LOCKD_ERR("Cannot get %s vconfkey", VCONFKEY_PWLOCK_FIRST_BOOT);
+ } else if (first_boot == 1) {
+ LOCKD_DBG("first_boot : %d \n", first_boot);
+ return 0;
+ }
+
+ lock_type = _lockd_get_lock_type();
+ if (lock_type == 1) {
+ lockd->request_recovery = FALSE;
+ } else if (lock_type == 2) {
+ lock_type = 0;
+ }
+ lockd->lock_type = lock_type;
+ ret = lockd_launch_app_lockscreen(lockd);
+ return ret;
+}
diff --git a/src/lockd-debug.c b/src/lockd-debug.c
new file mode 100755
index 0000000..dda6bd5
--- /dev/null
+++ b/src/lockd-debug.c
@@ -0,0 +1,94 @@
+ /*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://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/src/lockd-process-mgr.c b/src/lockd-process-mgr.c
new file mode 100755
index 0000000..cbda629
--- /dev/null
+++ b/src/lockd-process-mgr.c
@@ -0,0 +1,171 @@
+ /*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://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(VCONF_PRIVATE_LOCKSCREEN_PKGNAME);
+
+ LOCKD_DBG("pkg name is %s", pkgname);
+
+ if (pkgname == NULL) {
+ return LOCKD_DEFAULT_PKG_NAME;
+ }
+
+ return pkgname;
+}
+
+int lockd_process_mgr_restart_lock(int phone_lock_state)
+{
+ char *lock_app_path = NULL;
+ int pid;
+
+ 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;
+
+ 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);
+ 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/src/lockd-window-mgr.c b/src/lockd-window-mgr.c
new file mode 100755
index 0000000..dc05087
--- /dev/null
+++ b/src/lockd-window-mgr.c
@@ -0,0 +1,283 @@
+ /*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://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/src/menu_daemon.c b/src/menu_daemon.c
new file mode 100755
index 0000000..5697eb4
--- /dev/null
+++ b/src/menu_daemon.c
@@ -0,0 +1,302 @@
+ /*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://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 <fcntl.h>
+#include <stdio.h>
+#include <sysman.h>
+#include <syspopup_caller.h>
+#include <sys/types.h>
+#include <sys/wait.h>
+#include <vconf.h>
+#include <errno.h>
+
+#include "hw_key.h"
+#include "pkg_event.h"
+#include "util.h"
+#include "xmonitor.h"
+
+
+int errno;
+
+
+#define QUERY_UPDATE_NAME "UPDATE app_info SET name='%s' where package='%s';"
+#define SAT_DESKTOP_FILE "/opt/share/applications/org.tizen.sat-ui.desktop"
+#define RELAUNCH_INTERVAL 100*1000
+#define RETRY_MAXCOUNT 30
+
+static struct info {
+ pid_t home_pid;
+ pid_t volume_pid;
+ int power_off;
+} s_info = {
+ .home_pid = -1,
+ .volume_pid = -1,
+ .power_off = 0,
+};
+
+
+
+bool menu_daemon_is_homescreen(pid_t pid)
+{
+ if (s_info.home_pid == pid) return true;
+ return false;
+}
+
+
+
+static inline char *_get_selected_pkgname(void)
+{
+ char *pkgname;
+
+ pkgname = vconf_get_str(VCONFKEY_SETAPPL_SELECTED_PACKAGE_NAME);
+ if (!pkgname) {
+ _E("Cannot get pkgname from vconf.");
+
+ pkgname = strdup(HOME_SCREEN_PKG_NAME);
+ if (!pkgname) {
+ _E("strdup error for pkgname, %s", strerror(errno));
+ return NULL;
+ }
+ }
+
+ return pkgname;
+}
+
+
+
+static inline void _open_homescreen(const char *pkgname)
+{
+ int ret;
+ char *homescreen = (char *) pkgname;
+
+ system("echo -e '[${_G}menu-daemon launches home-screen${C_}]' > /dev/kmsg");
+ ret = aul_open_app(homescreen);
+ _D("can%s launch %s now. (%d)", ret < 0 ? "not" : "", homescreen, ret);
+ if (ret < 0 && strcmp(homescreen, HOME_SCREEN_PKG_NAME)) {
+ _E("cannot launch package %s", homescreen);
+
+ if (-1 == ret) {
+ ret = aul_open_app(HOME_SCREEN_PKG_NAME);
+ if (ret < 0) {
+ _E("Failed to open a default home, %s(err:%d)", HOME_SCREEN_PKG_NAME, ret);
+ }
+ }
+ }
+
+ s_info.home_pid = ret;
+ if (ret > 0) {
+ if (-1 == sysconf_set_mempolicy_bypid(ret, OOM_IGNORE)) {
+ _E("Cannot set the memory policy for Home-screen(%d)", ret);
+ } else {
+ _E("Set the memory policy for Home-screen(%d)", ret);
+ }
+ }
+}
+
+
+
+static void _show_cb(keynode_t* node, void *data)
+{
+ int seq;
+ char *pkgname;
+
+ _D("[MENU_DAEMON] _show_cb is invoked");
+
+ pkgname = _get_selected_pkgname();
+ if (!pkgname)
+ return;
+
+ if (node) {
+ seq = vconf_keynode_get_int(node);
+ } else {
+ if (vconf_get_int(VCONFKEY_STARTER_SEQUENCE, &seq) < 0) {
+ _E("Failed to get sequence info");
+ free(pkgname);
+ return;
+ }
+ }
+
+ switch (seq) {
+ case 0:
+ if (s_info.home_pid > 0) {
+ int pid;
+ _D("pid[%d] is terminated.", s_info.home_pid);
+
+ pid = s_info.home_pid;
+ s_info.home_pid = -1;
+
+ if (aul_terminate_pid(pid) != AUL_R_OK)
+ _E("Failed to terminate %d", s_info.home_pid);
+ }
+ break;
+ case 1:
+ _open_homescreen(pkgname);
+ break;
+ default:
+ _E("False sequence [%d]", seq);
+ break;
+ }
+
+ free(pkgname);
+ return;
+
+}
+
+
+
+static void _pkg_changed(keynode_t* node, void *data)
+{
+ char *pkgname;
+ int seq;
+
+ if (vconf_get_int(VCONFKEY_STARTER_SEQUENCE, &seq) < 0) {
+ _E("Do nothing, there is no sequence info yet");
+ return;
+ }
+
+ if (seq < 1) {
+ _E("Sequence is not ready yet, do nothing");
+ return;
+ }
+
+ _D("_pkg_changed is invoked");
+
+ pkgname = _get_selected_pkgname();
+ if (!pkgname)
+ return;
+
+ _D("pkg_name : %s", pkgname);
+
+ if (s_info.home_pid > 0) {
+ char old_pkgname[256];
+
+ if (aul_app_get_pkgname_bypid(s_info.home_pid, old_pkgname, sizeof(old_pkgname)) == AUL_R_OK) {
+ if (!strcmp(pkgname, old_pkgname)) {
+ _D("Package is changed but same package is selected");
+ free(pkgname);
+ return;
+ }
+ }
+
+ if (aul_terminate_pid(s_info.home_pid) != AUL_R_OK)
+ _D("Failed to terminate pid %d", s_info.home_pid);
+ } else {
+ _open_homescreen(pkgname);
+ }
+
+ free(pkgname);
+ return;
+}
+
+static void _launch_volume(void)
+{
+ int pid;
+ int i;
+ _D("_launch_volume");
+
+ for (i=0; i<RETRY_MAXCOUNT; i++)
+ {
+ pid = syspopup_launch("volume", NULL);
+
+ _D("syspopup_launch(volume), pid = %d", pid);
+
+ if (pid <0) {
+ _D("syspopup_launch(volume)is failed [%d]times", i);
+ usleep(RELAUNCH_INTERVAL);
+ } else {
+ s_info.volume_pid = pid;
+ return;
+ }
+ }
+}
+
+int menu_daemon_check_dead_signal(int pid)
+{
+ char *pkgname;
+
+ if (s_info.power_off) {
+ _D("Power off. ignore dead cb\n");
+ return 0;
+ }
+
+ _D("Process %d is termianted", pid);
+
+ if (pid < 0)
+ return 0;
+
+ pkgname = _get_selected_pkgname();
+ if (!pkgname)
+ return 0;
+
+ if (pid == s_info.home_pid) {
+ _D("pkg_name : %s", pkgname);
+ _open_homescreen(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);
+ }
+
+ free(pkgname);
+
+ return 0;
+}
+
+
+
+void menu_daemon_init(void *data)
+{
+ _D( "[MENU_DAEMON]menu_daemon_init is invoked");
+
+ aul_launch_init(NULL,NULL);
+
+ create_key_window();
+ if (xmonitor_init() < 0) _E("cannot init xmonitor");
+
+ pkg_event_init();
+ _launch_volume();
+
+ if (unlink(SAT_DESKTOP_FILE) != 0)
+ _E("cannot remove sat-ui desktop.");
+
+ if (vconf_notify_key_changed(VCONFKEY_SETAPPL_SELECTED_PACKAGE_NAME, _pkg_changed, NULL) < 0)
+ _E("Failed to add callback for package change event");
+
+ if (vconf_notify_key_changed(VCONFKEY_STARTER_SEQUENCE, _show_cb, NULL) < 0)
+ _E("Failed to add callback for show event");
+
+ _pkg_changed(NULL, NULL);
+ vconf_set_int(VCONFKEY_IDLE_SCREEN_LAUNCHED, VCONFKEY_IDLE_SCREEN_LAUNCHED_TRUE);
+}
+
+
+
+void menu_daemon_fini(void)
+{
+ vconf_ignore_key_changed(VCONFKEY_STARTER_SEQUENCE, _show_cb);
+ vconf_ignore_key_changed(VCONFKEY_SETAPPL_SELECTED_PACKAGE_NAME, _pkg_changed);
+
+ xmonitor_fini();
+ pkg_event_fini();
+ destroy_key_window();
+}
diff --git a/src/pkg_event.c b/src/pkg_event.c
new file mode 100755
index 0000000..f03b9ef
--- /dev/null
+++ b/src/pkg_event.c
@@ -0,0 +1,305 @@
+ /*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://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) {
+ char log[BUFSZE] = {0,};
+ int ret;
+
+ ret = strerror_r(errno, log, sizeof(log));
+ _E("Error: %s", ret == 0? log : "unknown error");
+ }
+ paths[i].wd = 0;
+ }
+ }
+
+ _unretrieve_conf_path(paths, s_desktop_notifier.number);
+
+ if (s_desktop_notifier.ifd) {
+ close(s_desktop_notifier.ifd);
+ s_desktop_notifier.ifd = 0;
+ }
+}
diff --git a/src/starter.c b/src/starter.c
new file mode 100755
index 0000000..c90601c
--- /dev/null
+++ b/src/starter.c
@@ -0,0 +1,247 @@
+ /*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://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 <aul.h>
+#include <vconf.h>
+#include <heynoti.h>
+#include <signal.h>
+
+#include "starter.h"
+#include "starter-util.h"
+#include "x11.h"
+#include "lock-daemon.h"
+#include "lockd-debug.h"
+#include "menu_daemon.h"
+
+#ifndef PACKAGE_NAME
+#define PACKAGE_NAME "org.tizen.starter"
+#endif
+
+#define DEFAULT_THEME "tizen"
+#define PWLOCK_PATH "/usr/apps/org.tizen.pwlock/bin/pwlock"
+#define PWLOCK_PKG_NAME "org.tizen.pwlock"
+
+static void lock_menu_screen(void)
+{
+ vconf_set_int(VCONFKEY_STARTER_SEQUENCE, 0);
+}
+
+static void unlock_menu_screen(void)
+{
+ int r;
+ int show_menu;
+
+ show_menu = 0;
+ r = vconf_get_int(VCONFKEY_STARTER_SEQUENCE, &show_menu);
+ if (r || !show_menu) {
+ vconf_set_int(VCONFKEY_STARTER_SEQUENCE, 1);
+ }
+}
+
+static void _set_elm_theme(void)
+{
+ char *vstr;
+ char *theme;
+ Elm_Theme *th = NULL;
+ vstr = vconf_get_str(VCONFKEY_SETAPPL_WIDGET_THEME_STR);
+ if (vstr == NULL)
+ theme = DEFAULT_THEME;
+ else
+ theme = vstr;
+
+ th = elm_theme_new();
+ _DBG("theme vconf[%s]\n set[%s]\n", vstr, theme);
+ elm_theme_set(th, theme);
+
+ if (vstr)
+ free(vstr);
+}
+
+static int _launch_pwlock(void)
+{
+ int r;
+
+ _DBG("%s", __func__);
+
+ r = aul_launch_app(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;
+ char *file = NULL;
+
+ memset(&act,0x00,sizeof(struct sigaction));
+ act.sa_sigaction = _signal_handler;
+ act.sa_flags = SA_SIGINFO;
+
+ int ret = sigemptyset(&act.sa_mask);
+ if (ret < 0) {
+ _ERR("Failed to sigemptyset[%s]", strerror(errno));
+ }
+ ret = sigaddset(&act.sa_mask, SIGTERM);
+ if (ret < 0) {
+ _ERR("Failed to sigaddset[%s]", strerror(errno));
+ }
+ ret = sigaction(SIGTERM, &act, NULL);
+ if (ret < 0) {
+ _ERR("Failed to sigaction[%s]", strerror(errno));
+ }
+
+ memset(ad, 0, sizeof(struct appdata));
+
+ gettimeofday(&ad->tv_start, NULL);
+
+ lock_menu_screen();
+ _set_elm_theme();
+
+ _DBG("%s %d\n", __func__, __LINE__);
+
+ r = start_lock_daemon(TRUE);
+ if (r == 1) {
+ if (vconf_notify_key_changed(VCONFKEY_IDLE_LOCK_STATE,
+ _lock_state_cb, NULL) != 0) {
+ _ERR("[Error] vconf notify : lock state");
+ ecore_timer_add(1.5, _init_idle, NULL);
+ }
+ } else {
+ if (_launch_pwlock() < 0) {
+ _ERR("launch pwlock error");
+ }
+ menu_daemon_init(NULL);
+ }
+}
+
+static void _fini(struct appdata *ad)
+{
+ struct timeval tv, res;
+
+ if (ad == NULL) {
+ fprintf(stderr, "Invalid argument: appdata is NULL\n");
+ return;
+ }
+
+ unlock_menu_screen();
+ menu_daemon_fini();
+
+ gettimeofday(&tv, NULL);
+ timersub(&tv, &ad->tv_start, &res);
+ _DBG("Total time: %d.%06d sec\n", (int)res.tv_sec, (int)res.tv_usec);
+}
+
+int main(int argc, char *argv[])
+{
+ struct appdata ad;
+
+ WRITE_FILE_LOG("%s", "Main function is started in starter");
+
+ int heyfd = heynoti_init();
+ if (heyfd < 0) {
+ _ERR("Failed to heynoti_init[%d]", heyfd);
+ return -1;
+ }
+
+ int ret = heynoti_subscribe(heyfd, "power_off_start", _heynoti_event_power_off, NULL);
+ if (ret < 0) {
+ _ERR("Failed to heynoti_subscribe[%d]", ret);
+ }
+ ret = heynoti_attach_handler(heyfd);
+ if (ret < 0) {
+ _ERR("Failed to heynoti_attach_handler[%d]", ret);
+ }
+
+ elm_init(argc, argv);
+
+ _init(&ad);
+
+ elm_run();
+
+ _fini(&ad);
+
+ elm_shutdown();
+
+ return 0;
+}
diff --git a/src/x11.c b/src/x11.c
new file mode 100644
index 0000000..01119ec
--- /dev/null
+++ b/src/x11.c
@@ -0,0 +1,111 @@
+ /*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://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/src/xmonitor.c b/src/xmonitor.c
new file mode 100755
index 0000000..cc8d481
--- /dev/null
+++ b/src/xmonitor.c
@@ -0,0 +1,296 @@
+ /*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://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/starter b/starter
new file mode 100755
index 0000000..b5c0fa6
--- /dev/null
+++ b/starter
@@ -0,0 +1,14 @@
+#!/bin/sh
+
+CURRENT_RUNLEVEL=`basename $PWD`
+# CURRENT_RUNLEVEL could be "rc3.d" or "rc4.d"
+
+if [ x"$CURRENT_RUNLEVEL" == x"rc3.d" ]; then
+ while [ ! -f /tmp/.wm_ready ];
+ do
+ sleep 0.1
+ done
+fi
+
+/usr/bin/starter &
+
diff --git a/starter.desktop.in b/starter.desktop.in
new file mode 100755
index 0000000..f2a89f3
--- /dev/null
+++ b/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/starter.manifest b/starter.manifest
new file mode 100755
index 0000000..2538fea
--- /dev/null
+++ b/starter.manifest
@@ -0,0 +1,13 @@
+<manifest>
+ <define>
+ <domain name="starter"/>
+ </define>
+ <request>
+ <domain name="starter"/>
+ </request>
+ <assign>
+ <filesystem path="/usr/bin/starter" label="starter" exec_label="starter" />
+ <filesystem path="/etc/init.d/rd3starter" label="_" exec_label="none" />
+ <filesystem path="/etc/init.d/rd4starter" label="_" exec_label="none" />
+ </assign>
+</manifest>
diff --git a/test/get_entry.c b/test/get_entry.c
new file mode 100755
index 0000000..029e6e5
--- /dev/null
+++ b/test/get_entry.c
@@ -0,0 +1,89 @@
+ /*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://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/test/get_theme.c b/test/get_theme.c
new file mode 100755
index 0000000..2d4a202
--- /dev/null
+++ b/test/get_theme.c
@@ -0,0 +1,56 @@
+ /*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://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/test/set_theme.c b/test/set_theme.c
new file mode 100755
index 0000000..96c76f7
--- /dev/null
+++ b/test/set_theme.c
@@ -0,0 +1,62 @@
+ /*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://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;
+}